@jheavenknows/bluerouter 1.0.109 → 1.0.111

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 (409) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/build-manifest.json +2 -2
  3. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page_client-reference-manifest.js +1 -1
  4. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  5. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  32. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  33. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  34. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  35. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  36. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  37. package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  38. package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  39. package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  40. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  41. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  42. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  43. package/app/.next-cli-build/server/app/_not-found.rsc +4 -4
  44. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +4 -4
  45. package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  46. package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +4 -4
  47. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  48. package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  49. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  50. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js.nft.json +1 -1
  51. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js.nft.json +1 -1
  52. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  53. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  54. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  55. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  56. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  57. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  58. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  59. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  60. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js.nft.json +1 -1
  61. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js.nft.json +1 -1
  62. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js.nft.json +1 -1
  63. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  64. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  65. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  66. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  67. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  68. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js.nft.json +1 -1
  69. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js.nft.json +1 -1
  70. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js.nft.json +1 -1
  71. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  72. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  73. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  74. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  75. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  76. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  77. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  78. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  79. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  80. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  81. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  82. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  83. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  84. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  85. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  86. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  87. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  88. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  89. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  90. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  91. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  92. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  93. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  94. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  95. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  96. package/app/.next-cli-build/server/app/api/provider-health/route.js.nft.json +1 -1
  97. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  98. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  99. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  100. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  101. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  102. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  103. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  104. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  105. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  106. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  107. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  108. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  109. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  112. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  114. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  116. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  117. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  118. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  119. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  120. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  121. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  123. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  124. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  125. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  126. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  127. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  129. package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
  130. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
  131. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  133. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  135. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  136. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  137. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  139. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  140. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  142. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  143. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  144. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  145. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  146. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  147. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  148. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  150. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  151. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  152. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  153. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  154. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  155. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  156. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  157. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  158. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  159. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  160. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  161. package/app/.next-cli-build/server/app/callback.html +1 -1
  162. package/app/.next-cli-build/server/app/callback.rsc +4 -4
  163. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +4 -4
  164. package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  165. package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +4 -4
  166. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
  167. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  168. package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  169. package/app/.next-cli-build/server/app/dashboard/api-keys.html +1 -1
  170. package/app/.next-cli-build/server/app/dashboard/api-keys.rsc +6 -6
  171. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys/__PAGE__.segment.rsc +2 -2
  172. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys.segment.rsc +1 -1
  173. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  174. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  175. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_full.segment.rsc +6 -6
  176. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_head.segment.rsc +1 -1
  177. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_index.segment.rsc +4 -4
  178. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_tree.segment.rsc +2 -2
  179. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  180. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +6 -6
  181. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  182. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  183. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  184. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  185. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +6 -6
  186. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  187. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +4 -4
  188. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  189. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  190. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +6 -6
  191. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  192. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  193. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  194. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  195. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +6 -6
  196. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  197. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +4 -4
  198. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  199. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  200. package/app/.next-cli-build/server/app/dashboard/combos.rsc +6 -6
  201. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  202. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  203. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  204. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  205. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +6 -6
  206. package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  207. package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +4 -4
  208. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  209. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  210. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +7 -7
  211. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +3 -3
  212. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  213. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  214. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  215. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +7 -7
  216. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  217. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +4 -4
  218. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  219. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  220. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +6 -6
  221. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  222. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  223. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  224. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  225. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  226. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +6 -6
  227. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  228. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +4 -4
  229. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
  230. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  231. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +6 -6
  232. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  233. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  234. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  235. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  236. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +6 -6
  237. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  238. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +4 -4
  239. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
  240. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  241. package/app/.next-cli-build/server/app/dashboard/profile.rsc +5 -5
  242. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +1 -1
  243. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  244. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  245. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  246. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +5 -5
  247. package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  248. package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +4 -4
  249. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  250. package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
  251. package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +6 -6
  252. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs/__PAGE__.segment.rsc +2 -2
  253. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs.segment.rsc +1 -1
  254. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  255. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  256. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_full.segment.rsc +6 -6
  257. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_head.segment.rsc +1 -1
  258. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_index.segment.rsc +4 -4
  259. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +2 -2
  260. package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
  261. package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +5 -5
  262. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health/__PAGE__.segment.rsc +1 -1
  263. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health.segment.rsc +1 -1
  264. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  265. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  266. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_full.segment.rsc +5 -5
  267. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_head.segment.rsc +1 -1
  268. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_index.segment.rsc +4 -4
  269. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +2 -2
  270. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  271. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +6 -6
  272. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  273. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  274. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  275. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  276. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  277. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +6 -6
  278. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  279. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +4 -4
  280. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  281. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  282. package/app/.next-cli-build/server/app/dashboard/providers.rsc +6 -6
  283. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  284. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  285. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  286. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  287. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +6 -6
  288. package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  289. package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +4 -4
  290. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  291. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  292. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +6 -6
  293. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  294. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  295. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  296. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  297. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +6 -6
  298. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  299. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +4 -4
  300. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  301. package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
  302. package/app/.next-cli-build/server/app/dashboard/quota.rsc +7 -7
  303. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  304. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  305. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  306. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  307. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +7 -7
  308. package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  309. package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +4 -4
  310. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  311. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  312. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  313. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +4 -4
  314. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +4 -4
  315. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  316. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +4 -4
  317. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  318. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  319. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  320. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  321. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  322. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  323. package/app/.next-cli-build/server/app/dashboard/skills.rsc +6 -6
  324. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
  325. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
  326. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  327. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  328. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +6 -6
  329. package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
  330. package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +4 -4
  331. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
  332. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  333. package/app/.next-cli-build/server/app/dashboard/translator.rsc +6 -6
  334. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  335. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  336. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  337. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  338. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +6 -6
  339. package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  340. package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +4 -4
  341. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  342. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  343. package/app/.next-cli-build/server/app/dashboard/usage.rsc +6 -6
  344. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  345. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  346. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  347. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  348. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +6 -6
  349. package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  350. package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +4 -4
  351. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  352. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  353. package/app/.next-cli-build/server/app/dashboard.rsc +6 -6
  354. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  355. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  356. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  357. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +6 -6
  358. package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  359. package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +4 -4
  360. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  361. package/app/.next-cli-build/server/app/index.html +1 -1
  362. package/app/.next-cli-build/server/app/index.rsc +4 -4
  363. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  364. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +4 -4
  365. package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  366. package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +4 -4
  367. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
  368. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  369. package/app/.next-cli-build/server/app/landing.html +1 -1
  370. package/app/.next-cli-build/server/app/landing.rsc +4 -4
  371. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +4 -4
  372. package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  373. package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +4 -4
  374. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
  375. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  376. package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  377. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  378. package/app/.next-cli-build/server/app/login.html +1 -1
  379. package/app/.next-cli-build/server/app/login.rsc +4 -4
  380. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +4 -4
  381. package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  382. package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +4 -4
  383. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
  384. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  385. package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  386. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  387. package/app/.next-cli-build/server/chunks/2496.js +1 -1
  388. package/app/.next-cli-build/server/chunks/3110.js +1 -1
  389. package/app/.next-cli-build/server/chunks/4746.js +1 -1
  390. package/app/.next-cli-build/server/chunks/6604.js +1 -1
  391. package/app/.next-cli-build/server/chunks/7130.js +1 -1
  392. package/app/.next-cli-build/server/chunks/7153.js +1 -1
  393. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  394. package/app/.next-cli-build/server/pages/404.html +1 -1
  395. package/app/.next-cli-build/server/pages/500.html +1 -1
  396. package/app/.next-cli-build/static/chunks/{1321-acff60998e66f557.js → 1321-d4b74a28d3093d78.js} +1 -1
  397. package/app/.next-cli-build/static/chunks/{5497-c7f391ea9844c8cc.js → 5497-bc72a2d523a0ff36.js} +1 -1
  398. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/prompt-logs/page-51f32ade40c03a33.js +1 -0
  399. package/app/.next-cli-build/static/css/8532f517e7c09566.css +1 -0
  400. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-1.0.109-to-1.0.110-1.0.110-20260609-203135/data.sqlite +0 -0
  401. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-1.0.110-to-1.0.111-1.0.111-20260609-203407/data.sqlite +0 -0
  402. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-shm +0 -0
  403. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-wal +0 -0
  404. package/app/package.json +1 -1
  405. package/package.json +1 -1
  406. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/prompt-logs/page-6dfa37913d22cf60.js +0 -1
  407. package/app/.next-cli-build/static/css/94dadf2264525082.css +0 -1
  408. /package/app/.next-cli-build/static/{1HtTEsSBwymnEA1NFhCD1 → -8f1XJmZwKd4fMPuM2sWb}/_buildManifest.js +0 -0
  409. /package/app/.next-cli-build/static/{1HtTEsSBwymnEA1NFhCD1 → -8f1XJmZwKd4fMPuM2sWb}/_ssgManifest.js +0 -0
@@ -4,4 +4,4 @@
4
4
  `,title:e.internalName&&e.internalName!==t?`Internal: ${e.internalName}`:t,children:[s&&(0,a.jsx)("span",{className:"material-symbols-outlined leading-none",style:{fontSize:"10px"},children:"check"}),(0,a.jsx)("span",{children:r}),e.isOllamaLocalCombo&&(0,a.jsx)("span",{className:`rounded-full px-1.5 py-0.5 text-[9px] ${l||s?"bg-white/20 text-white":"bg-emerald-500/10 text-emerald-700 dark:text-emerald-300"}`,children:"ollama"})]},`${e.pickerSource||"combo"}-${e.id||t}`)})})]}),Object.entries(z).map(([e,t])=>(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"flex items-center gap-1.5 mb-1.5 sticky top-0 z-10 bg-white py-1 dark:bg-zinc-950",children:[(0,a.jsx)(i.A,{src:(0,d.mq)(e)||(0,d.gb)(e)?null:`/providers/${e}.png`,alt:t.name,size:14,fallbackText:(t.name||e).slice(0,2).toUpperCase(),fallbackColor:t.color}),(0,a.jsx)("span",{className:"text-xs font-medium text-primary",children:t.name}),(0,a.jsxs)("span",{className:"text-[10px] text-text-muted",children:["(",t.models.length,")"]})]}),(0,a.jsx)("div",{className:"flex flex-wrap gap-1.5",children:t.models.map(e=>{let t=n===e.value,r=e.isPlaceholder;return(0,a.jsx)("button",{onClick:()=>q(e),title:r?"Select to pre-fill, then edit model ID in the input":void 0,className:`
5
5
  px-2 py-1 rounded-xl text-xs font-medium transition-all border hover:cursor-pointer
6
6
  ${r?"border-dashed border-border text-text-muted hover:border-primary/50 hover:text-primary bg-surface italic":t?"bg-primary text-white border-primary":f.includes(e.value)?"bg-primary border-primary text-white hover:bg-primary-hover":"bg-surface border-border text-text-main hover:border-primary/50 hover:bg-primary/5"}
7
- `,children:(0,a.jsxs)("span",{className:"flex items-center gap-1",children:[f.includes(e.value)&&!r&&(0,a.jsx)("span",{className:"material-symbols-outlined leading-none",style:{fontSize:"10px"},children:"check"}),r?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[11px]",children:"edit"}),e.name]}):e.isCustom?(0,a.jsxs)(a.Fragment,{children:[e.name,(0,a.jsx)("span",{className:"text-[9px] opacity-60 font-normal",children:"custom"})]}):e.name]})},e.value)})})]},e)),0===Object.keys(z).length&&0===E.length&&(0,a.jsxs)("div",{className:"text-center py-4 text-text-muted",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-2xl mb-1 block",children:"search_off"}),(0,a.jsx)("p",{className:"text-xs",children:"No models found"})]})]})]})]})}):null}u.propTypes={isOpen:n().bool.isRequired,onClose:n().func.isRequired,onSelect:n().func.isRequired,onDeselect:n().func,selectedModel:n().string,activeProviders:n().arrayOf(n().shape({provider:n().string.isRequired})),title:n().string,modelAliases:n().object,kindFilter:n().string,addedModelValues:n().arrayOf(n().string),closeOnSelect:n().bool}},73579:(e,t,r)=>{r.d(t,{default:()=>j});var a=r(95155),s=r(12115),l=r(14051),n=r.n(l),i=r(81127),o=r(11910),d=r(92542),c=r(56061),m=r(52679),u=r(90620);let x=[0,1,2,3,4,5,6],p=[{value:1,label:"Mon"},{value:2,label:"Tue"},{value:3,label:"Wed"},{value:4,label:"Thu"},{value:5,label:"Fri"},{value:6,label:"Sat"},{value:0,label:"Sun"}],h=[{id:"@cf/meta/llama-3.1-8b-instruct",name:"Cloudflare: Llama 3.1 8B Instruct"},{id:"@cf/meta/llama-3.1-70b-instruct",name:"Cloudflare: Llama 3.1 70B Instruct"},{id:"@cf/deepseek-ai/deepseek-r1-distill-qwen-32b",name:"Cloudflare: DeepSeek R1 Distill Qwen 32B"},{id:"@cf/qwen/qwen1.5-14b-chat-awq",name:"Cloudflare: Qwen 1.5 14B Chat AWQ"}],b=new Set(["antigravity","codex","claude","gemini-cli"]);function f(e=""){return"cloudflare-ai"===e?h:[]}function g(e,t){let r=String(e||"").trim();return/^([01]\d|2[0-3]):([0-5]\d)$/.test(r)?r:t}function y(e={}){let t=e&&"object"==typeof e?e:{},r=Array.isArray(t.weekdays)?t.weekdays.map(Number).filter(e=>e>=0&&e<=6):x;return{enabled:!1!==t.enabled,weekdays:[...new Set(r)].sort((e,t)=>e-t),fromTime:g(t.fromTime||t.from,"00:00"),toTime:g(t.toTime||t.to,"23:59")}}function v(e={}){var t;let r=e&&"object"==typeof e?e:{};return{enabled:!0===r.enabled,intervalSec:Math.max(10,Number.parseInt(r.intervalSec||60,10)||60),failureThreshold:Math.max(1,Number.parseInt(r.failureThreshold||3,10)||3),timeoutMs:Math.max(1e3,Number.parseInt(r.timeoutMs||15e3,10)||15e3),prompt:"string"==typeof r.prompt&&r.prompt.trim()?r.prompt.trim():"Say hi",disableThinking:!1!==r.disableThinking,model:"string"==typeof(t=r.model||r.healthModel||r.testModel)?t.trim():""}}function j({isOpen:e,connection:t,proxyPools:r,onSave:l,onClose:n}){let[h,g]=(0,s.useState)({name:"",priority:1,apiKey:""}),[N,w]=(0,s.useState)({azureEndpoint:"",apiVersion:"2024-10-01-preview",deployment:"",organization:""}),[k,C]=(0,s.useState)({accountId:""}),[S,T]=(0,s.useState)(!1),[I,$]=(0,s.useState)(null),[A,P]=(0,s.useState)(!1),[O,R]=(0,s.useState)(null),[M,_]=(0,s.useState)(!1),[L,E]=(0,s.useState)(y()),[z,q]=(0,s.useState)(v()),[U,D]=(0,s.useState)(!1),[F,W]=(0,s.useState)(!1),[K,B]=(0,s.useState)([]),[G,V]=(0,s.useState)(!1),[J,Q]=(0,s.useState)("");(0,s.useEffect)(()=>{t&&(g({name:t.name||"",priority:t.priority||1,apiKey:""}),"azure"===t.provider&&t.providerSpecificData&&w({azureEndpoint:t.providerSpecificData.azureEndpoint||"",apiVersion:t.providerSpecificData.apiVersion||"2024-10-01-preview",deployment:t.providerSpecificData.deployment||"",organization:t.providerSpecificData.organization||""}),"cloudflare-ai"===t.provider&&t.providerSpecificData&&C({accountId:t.providerSpecificData.accountId||""}),E(y(t.schedule||{})),q(v(t.healthCheck||{})),D(!0===t.providerScheduleOverride),W(!0===t.providerHealthOverride),$(null),R(null))},[t]);let H=t?.authType==="oauth",X=t?.provider==="azure",Y=t?.provider==="cloudflare-ai",Z=t?function(e=""){if((0,m.gb)(e))return"anthropic";if((0,m.mq)(e)||"cloudflare-ai"===e)return"openai";if("gemini"===e)return"gemini";if("github"===e)return"openai";let t=u.X3?.[e]||"";return t.includes("/messages")?"anthropic":t.includes("/chat/completions")||t.includes("/responses")?"openai":null}(t.provider):null,ee=!!Z;(0,s.useEffect)(()=>{if(!e||!t?.id)return;let r=!1;return async function(){let e=f(t.provider);if(e.length>0){V(!1),B(e),Q("Cloudflare does not expose a simple account /models list here. Pick a common Workers AI model below or type the exact model manually.");return}if(!function(e=""){return!(f(e).length>0||b.has(e))}(t.provider)){V(!1),B([]),Q("This provider uses a session/OAuth-specific model resolver. Healthcheck will use connection/token probe unless you type a supported direct chat model manually.");return}V(!0),Q("");try{let e=await fetch(`/api/providers/${t.id}/models`,{cache:"no-store"}),a=e.ok?await e.json():{};if(!r){let t,r,s=e.ok?(t=Array.isArray(a?.models)?a.models:[],r=new Set,t.map(e=>{let t="string"==typeof e?e:e?.id||e?.name||e?.model||e?.displayName;if(!t)return null;let a=String(t).trim();return!a||r.has(a)?null:(r.add(a),{id:a,name:e?.name||e?.displayName||e?.model||a})}).filter(Boolean).sort((e,t)=>e.id.localeCompare(t.id))):[];B(s),e.ok?a.warning?Q(a.warning):0===s.length&&Q("Provider did not return a model list. You can type the healthcheck model manually if this account supports chat ping."):Q(a.error||"Failed to load models")}}catch(e){r||(B([]),Q(e.message||"Failed to load models"))}finally{r||V(!1)}}(),()=>{r=!0}},[e,t?.id,t?.provider]);let et=async()=>{if(t?.provider){T(!0),$(null);try{let e=await fetch(`/api/providers/${t.id}/test`,{method:"POST"}),r=await e.json();$(r.valid?"success":"failed")}catch{$("failed")}finally{T(!1)}}},er=async()=>{if(t?.provider&&h.apiKey){P(!0),R(null);try{let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t.provider,apiKey:h.apiKey,...X?{providerSpecificData:N}:{},...Y?{providerSpecificData:k}:{}})}),r=await e.json();R(r.valid?"success":"failed")}catch{R("failed")}finally{P(!1)}}},ea=async()=>{if(t){_(!0);try{let e={name:h.name,priority:h.priority,schedule:y(L),healthCheck:v(z)};if(!H&&h.apiKey){e.apiKey=h.apiKey;let r="success"===O;if(!r)try{P(!0),R(null);let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t.provider,apiKey:h.apiKey,...X?{providerSpecificData:N}:{},...Y?{providerSpecificData:k}:{}})});r=!!(await e.json()).valid,R(r?"success":"failed")}catch{R("failed")}finally{P(!1)}r&&(e.testStatus="active",e.lastError=null,e.lastErrorAt=null)}X&&(e.providerSpecificData={azureEndpoint:N.azureEndpoint,apiVersion:N.apiVersion,deployment:N.deployment,organization:N.organization}),Y&&(e.providerSpecificData={accountId:k.accountId}),await l(e)}finally{_(!1)}}};return t?(0,a.jsx)(i.default,{isOpen:e,onClose:n,title:"Edit Connection",maxWidth:"2xl",children:(0,a.jsxs)("div",{className:"space-y-5",children:[(0,a.jsx)(o.default,{label:"Name",value:h.name,onChange:e=>g({...h,name:e.target.value}),placeholder:H?"Account name":"Production Key"}),H&&t.email&&(0,a.jsxs)("div",{className:"rounded-lg border border-border bg-surface p-3 text-sm",children:[(0,a.jsx)("div",{className:"text-text-muted",children:"Email"}),(0,a.jsx)("div",{className:"font-medium text-text-main",children:t.email})]}),(0,a.jsx)(o.default,{label:"Priority",type:"number",min:"1",value:h.priority,onChange:e=>g({...h,priority:Number.parseInt(e.target.value,10)||1})}),!H&&(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(o.default,{label:"API Key",type:"password",value:h.apiKey,onChange:e=>g({...h,apiKey:e.target.value}),placeholder:"Enter new API key",hint:"Leave blank to keep the current API key.",className:"flex-1"}),(0,a.jsxs)("div",{className:"mt-6 flex items-center gap-2",children:[(0,a.jsx)(d.default,{type:"button",variant:"secondary",onClick:er,disabled:A||!h.apiKey,children:A?"Checking...":"Check"}),O&&(0,a.jsx)(c.default,{variant:"success"===O?"success":"danger",children:"success"===O?"Valid":"Invalid"})]})]}),X&&(0,a.jsxs)("div",{className:"space-y-3 rounded-lg border border-border p-4",children:[(0,a.jsx)("h3",{className:"font-semibold text-text-main",children:"Azure OpenAI Configuration"}),(0,a.jsx)(o.default,{label:"Azure Endpoint",value:N.azureEndpoint,onChange:e=>w({...N,azureEndpoint:e.target.value}),placeholder:"https://your-resource.openai.azure.com"}),(0,a.jsx)(o.default,{label:"Deployment",value:N.deployment,onChange:e=>w({...N,deployment:e.target.value}),placeholder:"gpt-4"}),(0,a.jsx)(o.default,{label:"API Version",value:N.apiVersion,onChange:e=>w({...N,apiVersion:e.target.value}),placeholder:"2024-10-01-preview"}),(0,a.jsx)(o.default,{label:"Organization",value:N.organization,onChange:e=>w({...N,organization:e.target.value}),placeholder:"Organization ID"})]}),Y&&(0,a.jsx)(o.default,{label:"Cloudflare Account ID",value:k.accountId,onChange:e=>C({...k,accountId:e.target.value})}),(0,a.jsxs)("div",{className:"space-y-3 rounded-lg border border-border p-4",children:[(0,a.jsx)("h3",{className:"font-semibold text-text-main",children:"Scheduler"}),U&&(0,a.jsx)("div",{className:"rounded-md border border-warning/30 bg-warning/10 p-2 text-xs text-warning",children:"Provider-level scheduler override is enabled. This account scheduler is locked and ignored while override is on."}),(0,a.jsxs)("label",{className:"flex items-center gap-2 text-sm",children:[(0,a.jsx)("input",{type:"checkbox",checked:!1!==L.enabled,disabled:U,onChange:e=>E(t=>({...t,enabled:e.target.checked}))}),"Enable account scheduler"]}),(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:p.map(e=>(0,a.jsxs)("label",{className:"flex items-center gap-1 rounded border border-border px-2 py-1 text-xs",children:[(0,a.jsx)("input",{type:"checkbox",checked:(L.weekdays||[]).includes(e.value),disabled:U||!1===L.enabled,onChange:()=>E(t=>{let r=new Set(Array.isArray(t.weekdays)?t.weekdays:x);return r.has(e.value)?r.delete(e.value):r.add(e.value),{...t,weekdays:[...r].sort((e,t)=>e-t)}})}),e.label]},e.value))}),(0,a.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,a.jsxs)("label",{className:"text-sm text-text-muted",children:["From time",(0,a.jsx)("input",{type:"time",value:L.fromTime,disabled:U||!1===L.enabled,onChange:e=>E(t=>({...t,fromTime:e.target.value})),className:"mt-1 w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50"})]}),(0,a.jsxs)("label",{className:"text-sm text-text-muted",children:["To time",(0,a.jsx)("input",{type:"time",value:L.toTime,disabled:U||!1===L.enabled,onChange:e=>E(t=>({...t,toTime:e.target.value})),className:"mt-1 w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-3 rounded-lg border border-border p-4",children:[(0,a.jsx)("h3",{className:"font-semibold text-text-main",children:"Ping Health Check"}),F&&(0,a.jsx)("div",{className:"rounded-md border border-warning/30 bg-warning/10 p-2 text-xs text-warning",children:"Provider-level healthcheck override is enabled. This account healthcheck policy is locked and ignored while override is on."}),(0,a.jsxs)("label",{className:"flex items-center gap-2 text-sm",children:[(0,a.jsx)("input",{type:"checkbox",checked:!0===z.enabled,disabled:F,onChange:e=>q(t=>({...t,enabled:e.target.checked}))}),"Enable periodic health check"]}),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("label",{className:"text-sm text-text-muted",children:["Healthcheck model",(0,a.jsxs)("select",{value:z.model||"",disabled:F||!z.enabled,onChange:e=>q(t=>({...t,model:e.target.value})),className:"mt-1 w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50",children:[(0,a.jsx)("option",{value:"",children:"Connection/base URL only — no chat ping"}),K.map(e=>(0,a.jsx)("option",{value:e.id,children:e.name||e.id},e.id))]})]}),(0,a.jsxs)("label",{className:"text-sm text-text-muted",children:["Manual healthcheck model",(0,a.jsx)("input",{type:"text",value:z.model||"",disabled:F||!z.enabled,onChange:e=>q(t=>({...t,model:e.target.value})),placeholder:"anthropic"===Z?"claude/model name from this endpoint":"gemini"===Z?"gemini model, e.g. gemini-2.5-flash":"model name from this endpoint",className:"mt-1 w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50"})]}),G&&(0,a.jsx)("div",{className:"text-xs text-text-muted",children:"Loading models..."}),J&&(0,a.jsxs)("div",{className:"text-xs text-warning",children:["Model list note: ",J]}),"anthropic"===Z&&(0,a.jsxs)("div",{className:"rounded-md bg-surface p-2 text-xs text-text-muted",children:["Anthropic-compatible healthcheck sends Say hi to ",(0,a.jsx)("code",{children:"/v1/messages"})," only when a model is selected. If this endpoint does not expose ",(0,a.jsx)("code",{children:"/v1/models"}),", type the model name manually."]}),"gemini"===Z&&(0,a.jsxs)("div",{className:"rounded-md bg-surface p-2 text-xs text-text-muted",children:["Gemini healthcheck sends Say hi with the native ",(0,a.jsx)("code",{children:"generateContent"})," API only when a model is selected."]}),"cloudflare-ai"===t.provider&&(0,a.jsxs)("div",{className:"rounded-md bg-surface p-2 text-xs text-text-muted",children:["Cloudflare healthcheck sends Say hi to the Workers AI OpenAI-style chat endpoint only when a model is selected. If the model list is incomplete, type the exact ",(0,a.jsx)("code",{children:"@cf/..."})," model manually."]}),!ee&&(0,a.jsx)("div",{className:"rounded-md bg-surface p-2 text-xs text-text-muted",children:"This provider can still load/show models if its model resolver supports it. Auto healthcheck will keep using the original connection/token/account probe until a direct chat endpoint is available."})]}),z.enabled&&(!ee||!z.model)&&(0,a.jsx)("div",{className:"rounded-md border border-warning/30 bg-warning/10 p-2 text-xs text-warning",children:"No direct chat healthcheck model/endpoint is active. Auto healthcheck will test connection/base URL/key/token/account and will not send the Say hi chat ping."}),(0,a.jsxs)("div",{className:"grid gap-3 sm:grid-cols-3",children:[(0,a.jsxs)("label",{className:"text-sm text-text-muted",children:["Interval seconds",(0,a.jsx)("input",{type:"number",value:z.intervalSec,disabled:F||!z.enabled,onChange:e=>q(t=>({...t,intervalSec:Math.max(10,Number.parseInt(e.target.value,10)||60)})),className:"mt-1 w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50"})]}),(0,a.jsxs)("label",{className:"text-sm text-text-muted",children:["Fail threshold",(0,a.jsx)("input",{type:"number",value:z.failureThreshold,disabled:F||!z.enabled,onChange:e=>q(t=>({...t,failureThreshold:Math.max(1,Number.parseInt(e.target.value,10)||3)})),className:"mt-1 w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50"})]}),(0,a.jsxs)("label",{className:"text-sm text-text-muted",children:["Timeout ms",(0,a.jsx)("input",{type:"number",value:z.timeoutMs,disabled:F||!z.enabled,onChange:e=>q(t=>({...t,timeoutMs:Math.max(1e3,Number.parseInt(e.target.value,10)||15e3)})),className:"mt-1 w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50"})]})]}),(0,a.jsxs)("label",{className:"text-sm text-text-muted",children:["Prompt",(0,a.jsx)("input",{type:"text",value:z.prompt,disabled:F||!z.enabled||!z.model,onChange:e=>q(t=>({...t,prompt:e.target.value})),className:"mt-1 w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50"})]}),(0,a.jsxs)("label",{className:"flex items-center gap-2 text-sm",children:[(0,a.jsx)("input",{type:"checkbox",checked:!1!==z.disableThinking,disabled:F||!z.enabled||!z.model,onChange:e=>q(t=>({...t,disableThinking:e.target.checked}))}),"Prefer lightweight test / disable thinking where supported"]}),(0,a.jsxs)("div",{className:"rounded-md bg-surface p-2 text-xs text-text-muted",children:["Status: ",t.healthStatus||"unknown",t.healthLastCheckedAt&&(0,a.jsxs)("span",{children:[" \xb7 last checked: ",t.healthLastCheckedAt]}),t.healthLastError&&(0,a.jsx)("div",{className:"mt-1 text-danger",children:t.healthLastError})]})]}),!X&&!Y&&(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(d.default,{type:"button",variant:"secondary",onClick:et,disabled:S,children:S?"Testing...":"Test Connection"}),I&&(0,a.jsx)(c.default,{variant:"success"===I?"success":"danger",children:"success"===I?"Valid":"Failed"})]}),(0,a.jsxs)("div",{className:"flex justify-end gap-2 pt-2",children:[(0,a.jsx)(d.default,{type:"button",variant:"primary",onClick:ea,disabled:M||A,children:M?"Saving...":"Save"}),(0,a.jsx)(d.default,{type:"button",variant:"secondary",onClick:n,disabled:M,children:"Cancel"})]})]})}):null}j.propTypes={isOpen:n().bool.isRequired,connection:n().shape({id:n().string,name:n().string,email:n().string,priority:n().number,authType:n().string,provider:n().string,providerSpecificData:n().object,schedule:n().object,healthCheck:n().object,healthStatus:n().string,healthLastCheckedAt:n().string,healthLastError:n().string,providerScheduleOverride:n().bool,providerHealthOverride:n().bool}),proxyPools:n().arrayOf(n().shape({id:n().string,name:n().string})),onSave:n().func.isRequired,onClose:n().func.isRequired}},74891:(e,t,r)=>{r.d(t,{default:()=>f});var a=r(95155),s=r(12115),l=r(73321),n=r(98500),i=r.n(n),o=r(14051),d=r.n(o),c=r(57250),m=r(80752),u=r(38587),x=r(38003),p=r(90620),h=r(52679),b=r(73006);function f({onMenuClick:e,showMenuButton:t=!0}){let r=(0,l.usePathname)(),n=(0,l.useRouter)(),[o,d]=(0,s.useState)(""),[x,y]=(0,s.useState)(""),{title:v,description:j,icon:N,breadcrumbs:w}=(0,s.useMemo)(()=>(e=>{if(!e)return{title:"",description:"",breadcrumbs:[]};let t=e.match(/\/media-providers\/([^/]+)\/([^/]+)$/);if(t){let e=t[1],r=t[2],a=h.rj.find(t=>t.id===e),s=h.Q2[r];return{title:s?.name||r,description:"",breadcrumbs:[{label:"Media Providers",href:`/dashboard/media-providers/${e}`},{label:a?.label||e,href:`/dashboard/media-providers/${e}`},{label:s?.name||r,image:`/providers/${r}.png`}]}}let r=e.match(/\/media-providers\/([^/]+)$/);if(r){let e=r[1],t=h.rj.find(t=>t.id===e);return{title:t?.label||e,description:`Manage your ${t?.label||e} providers`,icon:t?.icon||"perm_media",breadcrumbs:[]}}let a=e.match(/\/providers\/([^/]+)$/);if(a){let e=a[1],t=p.zN[e]||p.fg[e];if(t)return{title:t.name,description:"",breadcrumbs:[{label:"Providers",href:"/dashboard/providers"},{label:t.name,image:`/providers/${t.id}.png`}]}}return e.includes("/providers")&&!e.includes("/media-providers")?{title:"Providers",description:"Manage your AI provider connections",icon:"dns",breadcrumbs:[]}:e.includes("/combos")?{title:"Combos",description:"Model combos with fallback",icon:"layers",breadcrumbs:[]}:e.includes("/usage")?{title:"Usage & Analytics",description:"Monitor your API usage, token consumption, and request logs",icon:"bar_chart",breadcrumbs:[]}:e.includes("/auth-files")?{title:"Auth Files",description:"Map provider credentials stored in the local database",icon:"vpn_key",breadcrumbs:[]}:e.includes("/quota")?{title:"Quota Tracker",description:"Track and manage your API quota limits",icon:"data_usage",breadcrumbs:[]}:e.includes("/mitm")?{title:"AI Traffic Proxy",description:"Intercept CLI tool traffic and route through this router gateway",icon:"security",breadcrumbs:[]}:e.includes("/cli-tools")?{title:"CLI Tools",description:"Configure CLI tools",icon:"terminal",breadcrumbs:[]}:e.includes("/proxy-pools")?{title:"Proxy Pools",description:"Manage your proxy pool configurations",icon:"lan",breadcrumbs:[]}:e.includes("/skills")?{title:"Agent Skills",description:"Copy a link and paste to your AI to use this Router — no install needed",icon:"extension",breadcrumbs:[]}:e.includes("/endpoint")?{title:"Endpoint",description:"API endpoint configuration",icon:"api",breadcrumbs:[]}:e.includes("/profile")?{title:"Settings",description:"Manage your preferences",icon:"settings",breadcrumbs:[]}:e.includes("/translator")?{title:"Translator",description:"Debug translation flow between formats",icon:"translate",breadcrumbs:[]}:e.includes("/console-log")?{title:"Console Log",description:"Live server console output",icon:"monitor",breadcrumbs:[]}:"/dashboard"===e?{title:"Endpoint",description:"API endpoint configuration",icon:"api",breadcrumbs:[]}:{title:"",description:"",breadcrumbs:[]}})(r),[r]);(0,s.useEffect)(()=>{let e=!1;return async function(){try{let t=await fetch("/api/auth/status",{cache:"no-store"});if(!t.ok)return;let r=await t.json();e||(d(r?.displayName||r?.oidcName||r?.oidcEmail||""),y(r?.loginMethod||""))}catch{e||(d(""),y(""))}}(),()=>{e=!0}},[]);let k=async()=>{try{(await fetch("/api/auth/logout",{method:"POST"})).ok&&(n.push("/login"),n.refresh())}catch(e){console.error("Failed to logout:",e)}};return(0,a.jsxs)("header",{className:"shrink-0 flex items-center justify-between gap-3 px-4 lg:px-8 pt-3 pb-2 border-b border-border-subtle bg-surface/60 backdrop-blur-xl lg:bg-transparent lg:backdrop-blur-none z-20",children:[(0,a.jsx)("div",{className:"flex items-center gap-3 lg:hidden shrink-0",children:t&&(0,a.jsx)("button",{onClick:e,className:"text-text-main hover:text-primary transition-colors",children:(0,a.jsx)("span",{className:"material-symbols-outlined",children:"menu"})})}),(0,a.jsx)("div",{className:"flex flex-col min-w-0 flex-1",children:w.length>0?(0,a.jsx)("div",{className:"flex items-center gap-2",children:w.map((e,t)=>(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[t>0&&(0,a.jsx)("span",{className:"material-symbols-outlined text-text-muted text-base",children:"chevron_right"}),e.href?(0,a.jsx)(i(),{href:e.href,className:"text-text-muted hover:text-primary transition-colors",children:e.label}):(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[e.image&&(0,a.jsx)(c.A,{src:e.image,alt:e.label,size:28,className:"object-contain rounded max-w-[28px] max-h-[28px]",fallbackText:e.label.slice(0,2).toUpperCase()}),(0,a.jsx)("h1",{className:"text-base lg:text-2xl font-semibold text-text-main tracking-tight truncate",children:(0,b.Tl)(e.label)})]})]},`${e.label}-${e.href||"current"}`))}):v?(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[N&&(0,a.jsx)("span",{className:"material-symbols-outlined text-primary text-xl lg:text-2xl",children:N}),(0,a.jsx)("h1",{className:"text-base lg:text-2xl font-semibold tracking-tight truncate",children:(0,b.Tl)(v)})]}),j&&(0,a.jsx)("p",{className:"hidden lg:block text-sm text-text-muted truncate",children:(0,b.Tl)(j)})]}):null}),(0,a.jsxs)("div",{className:"flex items-center gap-1 shrink-0",children:[o&&"OIDC"===x&&(0,a.jsxs)("div",{className:"hidden sm:flex items-center max-w-[220px] px-3 py-1.5 rounded-full border border-border bg-surface/70 text-xs text-text-muted truncate",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1.5 text-primary",children:"person"}),(0,a.jsx)("span",{className:"truncate",children:o}),(0,a.jsx)("span",{className:"ml-2 shrink-0 rounded-full bg-primary/10 px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-primary",children:"OIDC"})]}),(0,a.jsx)(g,{}),(0,a.jsx)(u.default,{}),(0,a.jsx)(m.default,{onLogout:k})]})]})}function g(){let e=(0,x.C)(e=>e.visible),t=(0,x.C)(e=>e.query),r=(0,x.C)(e=>e.placeholder),s=(0,x.C)(e=>e.setQuery);return e?(0,a.jsxs)("div",{className:"relative w-[160px] sm:w-[220px]",children:[(0,a.jsx)("span",{className:"material-symbols-outlined absolute left-2 top-1/2 -translate-y-1/2 text-text-muted text-[16px] pointer-events-none",children:"search"}),(0,a.jsx)("input",{type:"text",value:t,onChange:e=>s(e.target.value),placeholder:r,className:"w-full h-8 pl-7 pr-7 rounded-lg border border-border bg-surface/60 text-sm focus:outline-none focus:border-primary/50 transition-colors"}),t&&(0,a.jsx)("button",{type:"button",onClick:()=>s(""),className:"absolute right-1 top-1/2 -translate-y-1/2 text-text-muted hover:text-text-main p-0.5 rounded","aria-label":"Clear search",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"close"})})]}):null}f.propTypes={onMenuClick:d().func,showMenuButton:d().bool}},80752:(e,t,r)=>{r.d(t,{default:()=>x});var a=r(95155),s=r(12115),l=r(14051),n=r.n(l),i=r(93308),o=r(1620),d=r(40197);r(14932);var c=r(21931);let m={en:{name:"English",flag:"\uD83C\uDDFA\uD83C\uDDF8"},vi:{name:"Tiếng Việt",flag:"\uD83C\uDDFB\uD83C\uDDF3"},"zh-CN":{name:"简体中文",flag:"\uD83C\uDDE8\uD83C\uDDF3"},"zh-TW":{name:"繁體中文",flag:"\uD83C\uDDF9\uD83C\uDDFC"},ja:{name:"日本語",flag:"\uD83C\uDDEF\uD83C\uDDF5"},"pt-BR":{name:"Portugu\xeas (BR)",flag:"\uD83C\uDDE7\uD83C\uDDF7"},"pt-PT":{name:"Portugu\xeas (PT)",flag:"\uD83C\uDDF5\uD83C\uDDF9"},ko:{name:"한국어",flag:"\uD83C\uDDF0\uD83C\uDDF7"},es:{name:"Espa\xf1ol",flag:"\uD83C\uDDEA\uD83C\uDDF8"},de:{name:"Deutsch",flag:"\uD83C\uDDE9\uD83C\uDDEA"},fr:{name:"Fran\xe7ais",flag:"\uD83C\uDDEB\uD83C\uDDF7"},he:{name:"עברית",flag:"\uD83C\uDDEE\uD83C\uDDF1"},ar:{name:"العربية",flag:"\uD83C\uDDF8\uD83C\uDDE6"},ru:{name:"Русский",flag:"\uD83C\uDDF7\uD83C\uDDFA"},pl:{name:"Polski",flag:"\uD83C\uDDF5\uD83C\uDDF1"},cs:{name:"Čeština",flag:"\uD83C\uDDE8\uD83C\uDDFF"},nl:{name:"Nederlands",flag:"\uD83C\uDDF3\uD83C\uDDF1"},tr:{name:"T\xfcrk\xe7e",flag:"\uD83C\uDDF9\uD83C\uDDF7"},uk:{name:"Українська",flag:"\uD83C\uDDFA\uD83C\uDDE6"},tl:{name:"Tagalog",flag:"\uD83C\uDDF5\uD83C\uDDED"},id:{name:"Indonesia",flag:"\uD83C\uDDEE\uD83C\uDDE9"},th:{name:"ไทย",flag:"\uD83C\uDDF9\uD83C\uDDED"},hi:{name:"हिन्दी",flag:"\uD83C\uDDEE\uD83C\uDDF3"},bn:{name:"বাংলা",flag:"\uD83C\uDDE7\uD83C\uDDE9"},ur:{name:"اردو",flag:"\uD83C\uDDF5\uD83C\uDDF0"},ro:{name:"Rom\xe2nă",flag:"\uD83C\uDDF7\uD83C\uDDF4"},sv:{name:"Svenska",flag:"\uD83C\uDDF8\uD83C\uDDEA"},it:{name:"Italiano",flag:"\uD83C\uDDEE\uD83C\uDDF9"},el:{name:"Ελληνικά",flag:"\uD83C\uDDEC\uD83C\uDDF7"},hu:{name:"Magyar",flag:"\uD83C\uDDED\uD83C\uDDFA"},fi:{name:"Suomi",flag:"\uD83C\uDDEB\uD83C\uDDEE"},da:{name:"Dansk",flag:"\uD83C\uDDE9\uD83C\uDDF0"},no:{name:"Norsk",flag:"\uD83C\uDDF3\uD83C\uDDF4"}};function u({icon:e,label:t,onClick:r,trailing:s,danger:l}){return(0,a.jsxs)("button",{onClick:r,className:`flex items-center gap-3 w-full px-4 py-2.5 text-sm transition-colors ${l?"text-red-500 hover:bg-red-500/10":"text-text-main hover:bg-black/5 dark:hover:bg-white/5"}`,children:[(0,a.jsx)("span",{className:`material-symbols-outlined text-[20px] ${l?"":"text-text-muted"}`,children:e}),(0,a.jsx)("span",{className:"flex-1 text-left",children:t}),s&&(0,a.jsx)("span",{className:"text-base",children:s})]})}function x({onLogout:e}){let[t,r]=(0,s.useState)(!1),[l,n]=(0,s.useState)(!1),[p,h]=(0,s.useState)(!1),[b,f]=(0,s.useState)("en"),{toggleTheme:g,isDark:y}=(0,o.D)(),v=(0,s.useRef)(null);return(0,s.useEffect)(()=>{f(function(){if("u"<typeof document)return"en";let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${i.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):"en";return(0,i.QC)(t)}())},[p]),(0,s.useEffect)(()=>{let e=e=>{v.current&&!v.current.contains(e.target)&&r(!1)};if(t)return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[t]),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"relative",ref:v,children:[(0,a.jsx)("button",{onClick:()=>r(e=>!e),className:"flex items-center justify-center p-2 rounded-lg text-text-muted hover:text-text-main hover:bg-black/5 dark:hover:bg-white/5 transition-all",title:"Menu",children:(0,a.jsx)("span",{className:"material-symbols-outlined",children:"grid_view"})}),t&&(0,a.jsxs)("div",{className:"absolute right-0 top-full mt-2 w-60 bg-surface border border-black/10 dark:border-white/10 rounded-xl shadow-2xl z-50 animate-in fade-in zoom-in-95 duration-150 overflow-hidden py-1",children:[(0,a.jsx)(u,{icon:"history",label:"Change Log",onClick:()=>{r(!1),n(!0)}}),(0,a.jsx)(u,{icon:"language",label:m[b]?.name||b,trailing:m[b]?.flag||"\uD83C\uDF10",onClick:()=>{r(!1),h(!0)}}),(0,a.jsx)(u,{icon:y?"light_mode":"dark_mode",label:"Theme",onClick:()=>{g(),r(!1)}}),(0,a.jsx)(u,{icon:"logout",label:"Logout",danger:!0,onClick:()=>{r(!1),e()}})]})]}),(0,a.jsx)(d.default,{isOpen:l,onClose:()=>n(!1)}),(0,a.jsx)(c.default,{hideTrigger:!0,isOpen:p,onClose:e=>{h(!1),f(e)}})]})}u.propTypes={icon:n().string.isRequired,label:n().string.isRequired,onClick:n().func.isRequired,trailing:n().node,danger:n().bool},x.propTypes={onLogout:n().func.isRequired}},81127:(e,t,r)=>{r.d(t,{ConfirmModal:()=>d,default:()=>o});var a=r(95155),s=r(12115),l=r(31474),n=r(92542),i=r(97677);function o({isOpen:e,onClose:t,title:r,children:n,footer:d,size:c="md",closeOnOverlay:m=!0,showTrafficLights:u=!0,className:x}){return((0,s.useEffect)(()=>(e?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[e]),(0,s.useEffect)(()=>{let r=r=>{"Escape"===r.key&&e&&t()};return document.addEventListener("keydown",r),()=>document.removeEventListener("keydown",r)},[e,t]),e)?(0,a.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4",children:[(0,a.jsx)("div",{className:"absolute inset-0 bg-black/50 backdrop-blur-[2px] fade-in",onClick:m?t:void 0}),(0,a.jsxs)("div",{className:(0,l.cn)("relative w-full bg-surface","border border-border-subtle","rounded-[14px] shadow-[var(--shadow-elev)]","fade-in",{sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg",xl:"max-w-xl",full:"max-w-4xl"}[c],x),children:[(r||u)&&(0,a.jsxs)("div",{className:"flex items-center justify-between p-2 border-b border-border-subtle",children:[(0,a.jsxs)("div",{className:"flex items-center",children:[u&&(0,a.jsxs)("div",{className:"hidden md:flex items-center gap-2 mr-4 ml-2",children:[(0,a.jsx)(i.default,{text:"Close",position:"top",color:"#FF5F56",children:(0,a.jsx)("button",{onClick:t,"aria-label":"Close",title:"Close",className:"w-4 h-4 rounded-full bg-[#FF5F56] hover:brightness-90 transition-all cursor-pointer flex items-center justify-center group/dot",children:(0,a.jsx)("span",{className:"text-[9px] font-bold text-white opacity-0 group-hover/dot:opacity-100 transition-opacity leading-none",children:"✕"})})}),(0,a.jsx)("div",{className:"w-4 h-4 rounded-full bg-[#3a3a3a]/20 dark:bg-white/15 cursor-not-allowed"}),(0,a.jsx)("div",{className:"w-4 h-4 rounded-full bg-[#3a3a3a]/20 dark:bg-white/15 cursor-not-allowed"})]}),r&&(0,a.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:r})]}),(0,a.jsx)("button",{onClick:t,"aria-label":"Close",className:"md:hidden p-1.5 rounded-[10px] text-text-muted hover:bg-surface-2 hover:text-text-main transition-colors",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"close"})})]}),(0,a.jsx)("div",{className:"p-6 max-h-[calc(85vh-100px)] overflow-y-auto custom-scrollbar",children:n}),d&&(0,a.jsx)("div",{className:"flex items-center justify-end gap-3 p-6 border-t border-border-subtle",children:d})]})]}):null}function d({isOpen:e,onClose:t,onConfirm:r,title:s="Confirm",message:l,confirmText:i="Confirm",cancelText:c="Cancel",variant:m="danger",loading:u=!1}){return(0,a.jsx)(o,{isOpen:e,onClose:t,title:s,size:"sm",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.default,{variant:"ghost",onClick:t,disabled:u,children:c}),(0,a.jsx)(n.default,{variant:m,onClick:r,loading:u,children:i})]}),children:(0,a.jsx)("p",{className:"text-text-muted",children:l})})}},84588:(e,t,r)=>{r.d(t,{default:()=>l});var a=r(95155),s=r(31474);function l({children:e,title:t,subtitle:r,icon:n,action:i,padding:o="md",hover:d=!1,elev:c=!1,className:m,...u}){return(0,a.jsxs)("div",{className:(0,s.cn)("bg-surface border border-border-subtle",c?"rounded-[14px] shadow-[var(--shadow-elev)]":"rounded-[14px] shadow-[var(--shadow-soft)]",d&&"hover:shadow-[var(--shadow-warm)] hover:border-brand-500/30 transition-all cursor-pointer",{none:"",xs:"p-3",sm:"p-4",md:"p-6",lg:"p-8"}[o],m),...u,children:[(t||i)&&(0,a.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[n&&(0,a.jsx)("div",{className:"p-2 rounded-[10px] bg-bg text-text-muted",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:n})}),(0,a.jsxs)("div",{children:[t&&(0,a.jsx)("h3",{className:"text-text-main font-semibold",children:t}),r&&(0,a.jsx)("p",{className:"text-sm text-text-muted",children:r})]})]}),i]}),e]})}l.Section=function({children:e,className:t,...r}){return(0,a.jsx)("div",{className:(0,s.cn)("p-4 rounded-[10px]","bg-bg border border-border-subtle",t),...r,children:e})},l.Row=function({children:e,className:t,...r}){return(0,a.jsx)("div",{className:(0,s.cn)("p-3 -mx-3 px-3 transition-colors","border-b border-border-subtle last:border-b-0","hover:bg-surface-2/50",t),...r,children:e})},l.ListItem=function({children:e,actions:t,className:r,...l}){return(0,a.jsxs)("div",{className:(0,s.cn)("group flex items-center justify-between p-3 -mx-3 px-3","border-b border-border-subtle last:border-b-0","hover:bg-surface-2/50 transition-colors",r),...l,children:[(0,a.jsx)("div",{className:"flex-1 min-w-0",children:e}),t&&(0,a.jsx)("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:t})]})}},86671:(e,t,r)=>{r.d(t,{default:()=>u});var a=r(95155),s=r(12115),l=r(65921),n=r(92622),i=r(74891),o=r(73321);let d=["/dashboard/api-keys"];function c(e){return d.some(t=>e===t||e.startsWith(`${t}/`))}function m({children:e}){let t=(0,o.usePathname)(),r=(0,o.useRouter)(),[l,n]=(0,s.useState)(!1),[i,d]=(0,s.useState)(!0);return((0,s.useEffect)(()=>{let e=!1;return fetch("/api/auth/status",{cache:"no-store"}).then(e=>e.json()).then(a=>{if(e)return;let s=a?.isAdmin!==!1;d(s),s||c(t)||r.replace("/dashboard/api-keys")}).catch(()=>{}).finally(()=>{e||n(!0)}),()=>{e=!0}},[t,r]),l)?i||c(t)?e:(0,a.jsx)("div",{className:"flex min-h-[50vh] items-center justify-center text-sm text-text-muted",children:"Redirecting..."}):(0,a.jsxs)("div",{className:"flex min-h-[50vh] items-center justify-center text-sm text-text-muted",children:[(0,a.jsx)("span",{className:"material-symbols-outlined mr-2 animate-spin",children:"progress_activity"}),"Loading dashboard..."]})}function u({children:e}){let[t,r]=(0,s.useState)(!1),o=(0,l.i)(e=>e.notifications),d=(0,l.i)(e=>e.removeNotification);return(0,a.jsxs)("div",{className:"min-h-screen bg-background text-text-main",children:[(0,a.jsx)("div",{className:"pointer-events-none fixed inset-0 bg-[linear-gradient(to_right,rgba(99,102,241,0.07)_1px,transparent_1px),linear-gradient(to_bottom,rgba(99,102,241,0.07)_1px,transparent_1px)] bg-size-[32px_32px]"}),(0,a.jsx)("div",{className:"fixed right-4 top-4 z-50 flex w-[min(420px,calc(100vw-2rem))] flex-col gap-2",children:o.map(e=>{var t;let r="success"===(t=e.type)?{wrapper:"border-green-500/30 bg-green-500/10 text-green-600 dark:text-green-400",icon:"check_circle"}:"error"===t?{wrapper:"border-red-500/30 bg-red-500/10 text-red-600 dark:text-red-400",icon:"error"}:"warning"===t?{wrapper:"border-amber-500/30 bg-amber-500/10 text-amber-600 dark:text-amber-400",icon:"warning"}:{wrapper:"border-blue-500/30 bg-blue-500/10 text-blue-600 dark:text-blue-400",icon:"info"};return(0,a.jsx)("div",{className:`rounded-xl border px-4 py-3 shadow-lg backdrop-blur ${r.wrapper}`,children:(0,a.jsxs)("div",{className:"flex items-start gap-3",children:[(0,a.jsx)("span",{className:"material-symbols-outlined mt-0.5 text-lg",children:r.icon}),(0,a.jsxs)("div",{className:"min-w-0 flex-1 text-sm",children:[e.title?(0,a.jsx)("div",{className:"font-semibold",children:e.title}):null,(0,a.jsx)("div",{children:e.message})]}),e.dismissible?(0,a.jsx)("button",{onClick:()=>d(e.id),className:"text-current/70 hover:text-current","aria-label":"Dismiss notification",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-lg",children:"close"})}):null]})},e.id)})}),t&&(0,a.jsx)("div",{className:"fixed inset-0 z-40 bg-black/40 lg:hidden",onClick:()=>r(!1)}),(0,a.jsx)("aside",{className:"fixed inset-y-0 left-0 z-40 hidden w-72 border-r border-border bg-surface/90 backdrop-blur lg:block",children:(0,a.jsx)(n.default,{})}),(0,a.jsx)("aside",{className:`fixed inset-y-0 left-0 z-50 w-72 border-r border-border bg-surface/95 backdrop-blur transition-transform lg:hidden ${t?"translate-x-0":"-translate-x-full"}`,children:(0,a.jsx)(n.default,{onClose:()=>r(!1)})}),(0,a.jsxs)("main",{className:"relative z-10 min-h-screen lg:pl-72",children:[(0,a.jsx)(i.default,{onMenuClick:()=>r(!0)}),(0,a.jsx)("div",{className:"mx-auto w-full max-w-7xl px-4 py-6 sm:px-6 lg:px-8",children:(0,a.jsx)(m,{children:e})})]})]})}},90882:(e,t,r)=>{r.d(t,{default:()=>d});var a=r(95155),s=r(12115),l=r(14051),n=r.n(l),i=r(35497),o=r(11059);function d({isOpen:e,provider:t,providerInfo:r,onSuccess:l,onClose:n,oauthMeta:c,idcConfig:m}){let[u,x]=(0,s.useState)("waiting"),[p,h]=(0,s.useState)(null),[b,f]=(0,s.useState)(""),[g,y]=(0,s.useState)(null),[v,j]=(0,s.useState)(!1),[N,w]=(0,s.useState)(null),[k,C]=(0,s.useState)(!1),S=(0,s.useRef)(null),T=(0,s.useRef)(!1),{copied:I,copy:$}=(0,o.C)(),[A,P]=(0,s.useState)(!1),[O,R]=(0,s.useState)("/callback?code=..."),M=(0,s.useRef)(!1);(0,s.useEffect)(()=>{P("localhost"===window.location.hostname||"127.0.0.1"===window.location.hostname),R(`${window.location.origin}/callback?code=...`)},[]);let _=(0,s.useCallback)(async(e,r)=>{if(p)try{let a=await fetch(`/api/oauth/${t}/exchange`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:e,redirectUri:p.redirectUri,codeVerifier:p.codeVerifier,state:r,...c?{meta:c}:{}})}),s=await a.json();if(!a.ok)throw Error(s.error);x("success"),l?.()}catch(e){y(e.message),x("error")}},[p,t,l]),L=(0,s.useCallback)(async e=>{if(p?.state)try{let t=await fetch("/api/oauth/xai/manual-code",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:e,state:p.state})}),r=await t.json();if(!t.ok)throw Error(r.error);x("success"),l?.()}catch(e){y(e.message),x("error")}},[p,l]),E=(0,s.useCallback)(async(e,r,a,s)=>{T.current=!1,C(!0);for(let n=0;n<60;n++){if(T.current){console.log("[OAuthModal] Polling aborted"),C(!1);return}if(await new Promise(e=>setTimeout(e,1e3*a)),T.current){console.log("[OAuthModal] Polling aborted after sleep"),C(!1);return}try{let n=await fetch(`/api/oauth/${t}/poll`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({deviceCode:e,codeVerifier:r,extraData:s})}),i=await n.json();if(i.success){T.current=!0,x("success"),C(!1),l?.();return}if("expired_token"===i.error||"access_denied"===i.error)throw Error(i.errorDescription||i.error);"slow_down"===i.error&&(a=Math.min(a+5,30))}catch(e){y(e.message),x("error"),C(!1);return}}y("Authorization timeout"),x("error"),C(!1)},[t,l]),z=(0,s.useCallback)(async()=>{if(t)try{let e;if(y(null),["github","qwen","kiro","kimi-coding","kilocode","codebuddy"].includes(t)){j(!0),x("waiting");let e=new URL(`/api/oauth/${t}/device-code`,window.location.origin);"kiro"===t&&m?.startUrl&&(e.searchParams.set("start_url",m.startUrl),m.region&&e.searchParams.set("region",m.region),e.searchParams.set("auth_method","idc"));let r=await fetch(e.toString()),a=await r.json();if(!r.ok)throw Error(a.error);w(a);let s=a.verification_uri_complete||a.verification_uri;s&&window.open(s,"_blank","noopener,noreferrer");let l="kiro"===t?{_clientId:a._clientId,_clientSecret:a._clientSecret,_region:a._region,_authMethod:a._authMethod,_startUrl:a._startUrl}:null;E(a.device_code,a.codeVerifier,a.interval||5,l);return}let r=window.location.port||("https:"===window.location.protocol?"443":"80");e="codex"===t?"http://localhost:1455/auth/callback":"xai"===t?"http://127.0.0.1:56121/callback":`http://localhost:${r}/callback`;let a=new URL(`/api/oauth/${t}/authorize`,window.location.origin);a.searchParams.set("redirect_uri",e),c&&Object.entries(c).forEach(([e,t])=>{t&&a.searchParams.set(e,t)});let s=await fetch(a.toString()),l=await s.json();if(!s.ok)throw Error(l.error);let n=!1,i=!1;if("codex"===t)try{let t=new URL("/api/oauth/codex/start-proxy",window.location.origin);t.searchParams.set("app_port",r),t.searchParams.set("state",l.state),t.searchParams.set("code_verifier",l.codeVerifier),t.searchParams.set("redirect_uri",e);let a=await fetch(t.toString()),s=await a.json();n=s.success,i=!!s.serverSide}catch{n=!1}let o=!1,d=!1;if("xai"===t)try{let t=new URL("/api/oauth/xai/start-proxy",window.location.origin);t.searchParams.set("app_port",r),t.searchParams.set("state",l.state),t.searchParams.set("code_verifier",l.codeVerifier),t.searchParams.set("redirect_uri",e);let a=await fetch(t.toString()),s=await a.json();if(o=s.success,d=!!s.serverSide,!o&&"port_busy"===s.reason)throw Error("Port 56121 in use; close the conflicting process and retry")}catch(e){if(e?.message)throw e;o=!1}h({...l,redirectUri:e,codexServerSide:i,xaiServerSide:d}),"codex"===t&&n||"xai"===t&&o||A&&"codex"!==t&&"xai"!==t?(x("waiting"),S.current=window.open(l.authUrl,"oauth_popup","width=600,height=700"),S.current||x("input")):(x("input"),window.open(l.authUrl,"_blank"))}catch(e){y(e.message),x("error")}},[t,A,E,c,m]);(0,s.useEffect)(()=>{e&&t?(h(null),f(""),y(null),j(!1),w(null),C(!1),T.current=!1,z()):e||(T.current=!0,"codex"===t?fetch("/api/oauth/codex/stop-proxy").catch(()=>{}):"xai"===t&&fetch("/api/oauth/xai/stop-proxy").catch(()=>{}))},[e,t,z]),(0,s.useEffect)(()=>{let e=p?.codexServerSide?"codex":p?.xaiServerSide?"xai":null;if(!e||!p?.state||M.current)return;let t=!1,r=0,a=async()=>{if(!t&&!M.current){r+=1;try{let r=await fetch(`/api/oauth/${e}/poll-status?state=${encodeURIComponent(p.state)}`),a=await r.json();if(t||M.current)return;if("done"===a.status){M.current=!0,x("success"),l?.();return}if("error"===a.status){M.current=!0,y(a.error||"Authentication failed"),x("error");return}}catch{}if(r>=200){M.current=!0,y("Authentication timeout"),x("error");return}setTimeout(a,1500)}};return setTimeout(a,1500),()=>{t=!0}},[p,l]),(0,s.useEffect)(()=>{let e;if(!p)return;M.current=!1;let t=async e=>{if(M.current)return;let{code:t,state:r,error:a,errorDescription:s}=e;if(a){M.current=!0,y(s||a),x("error");return}t&&(M.current=!0,await _(t,r))},r=e=>{let r=e.origin.includes("localhost")||e.origin.includes("127.0.0.1"),a=e.origin===window.location.origin;(r||a)&&e.data?.type==="oauth_callback"&&t(e.data.data)};window.addEventListener("message",r);try{(e=new BroadcastChannel("oauth_callback")).onmessage=e=>t(e.data)}catch(e){console.log("BroadcastChannel not supported")}let a=e=>{if("oauth_callback"===e.key&&e.newValue)try{let r=JSON.parse(e.newValue);t(r),localStorage.removeItem("oauth_callback")}catch(e){console.log("Failed to parse localStorage data")}};window.addEventListener("storage",a);try{let e=localStorage.getItem("oauth_callback");if(e){let r=JSON.parse(e);r.timestamp&&Date.now()-r.timestamp<3e4&&t(r),localStorage.removeItem("oauth_callback")}}catch{}return()=>{window.removeEventListener("message",r),window.removeEventListener("storage",a),e&&e.close()}},[p,_]);let q=async()=>{try{y(null);let e=b.trim();if(e.startsWith("eyJ")&&e.includes("."))return void await _(e,null);if("xai"===t&&e&&!e.includes("://")&&!e.includes("?")&&!e.includes("code="))return void await L(e);let r=new URL(e),a=r.searchParams.get("code"),s=r.searchParams.get("state"),l=r.searchParams.get("error");if(l)throw Error(r.searchParams.get("error_description")||l);if(!a)throw Error("xai"===t?"Paste the callback URL or copied xAI code":"No authorization code found in URL");await _(a,s)}catch(e){y(e.message),x("error")}},U=(0,s.useCallback)(()=>{"codex"===t?fetch("/api/oauth/codex/stop-proxy").catch(()=>{}):"xai"===t&&fetch("/api/oauth/xai/stop-proxy").catch(()=>{}),n()},[n,t]);if(!t||!r)return null;let D="xai"===t,F=N?.verification_uri_complete||N?.verification_uri||"",W=D?"Connect Grok Build OAuth":`Connect ${r.name}`;return(0,a.jsx)(i.aF,{isOpen:e,title:W,onClose:U,size:"lg",children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[("waiting"===u||"input"===u)&&!v&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 border border-border rounded-lg bg-sidebar/50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-base text-primary animate-spin",children:"progress_activity"}),(0,a.jsx)("span",{className:"text-sm",children:D?"Waiting for Grok Build OAuth…":"Waiting for popup authorization…"})]}),(0,a.jsxs)("div",{className:"flex items-center gap-3 my-1",children:[(0,a.jsx)("div",{className:"flex-1 h-px bg-border"}),(0,a.jsx)("span",{className:"text-xs text-text-muted uppercase tracking-wider",children:"Or paste callback URL manually"}),(0,a.jsx)("div",{className:"flex-1 h-px bg-border"})]}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("p",{className:"text-sm font-medium mb-2",children:["Step 1: Open this ",D?"Grok Build OAuth URL":"URL"," in your browser"]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(i.pd,{value:p?.authUrl||"",readOnly:!0,className:"flex-1 font-mono text-xs"}),(0,a.jsx)(i.$n,{variant:"secondary",icon:"auth_url"===I?"check":"content_copy",onClick:()=>$(p?.authUrl,"auth_url"),disabled:!p?.authUrl,children:"Copy"})]})]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("p",{className:"text-sm font-medium mb-2",children:["Step 2: Paste the ","xai"===t?"callback URL or copied code":"callback URL"," here"]}),(0,a.jsx)("p",{className:"text-xs text-text-muted mb-2",children:"xai"===t?"If xAI shows a code instead of redirecting, paste that code here.":"After authorization, copy the full URL from your browser."}),(0,a.jsx)(i.pd,{value:b,onChange:e=>f(e.target.value),placeholder:D?"http://127.0.0.1:56121/callback?code=... or copied code":O,className:"font-mono text-xs"})]})]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(i.$n,{onClick:q,fullWidth:!0,disabled:!b,children:"Connect"}),(0,a.jsx)(i.$n,{onClick:U,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]}),"waiting"===u&&v&&N&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"text-center py-4",children:[(0,a.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Visit the login URL below and authorize:"}),(0,a.jsxs)("div",{className:"bg-sidebar p-4 rounded-lg mb-4",children:[(0,a.jsx)("p",{className:"text-xs text-text-muted mb-1",children:"Login URL"}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("code",{className:"flex-1 text-sm break-all",children:F}),(0,a.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"login_url"===I?"check":"content_copy",onClick:()=>$(F,"login_url"),disabled:!F}),(0,a.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"open_in_new",onClick:()=>window.open(F,"_blank","noopener,noreferrer"),disabled:!F,children:"Open"})]})]}),(0,a.jsxs)("div",{className:"bg-primary/10 p-4 rounded-lg",children:[(0,a.jsx)("p",{className:"text-xs text-text-muted mb-1",children:"Your Code"}),(0,a.jsxs)("div",{className:"flex items-center justify-center gap-2",children:[(0,a.jsx)("p",{className:"text-2xl font-mono font-bold text-primary",children:N.user_code}),(0,a.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"user_code"===I?"check":"content_copy",onClick:()=>$(N.user_code,"user_code")})]})]})]}),k&&(0,a.jsxs)("div",{className:"flex items-center justify-center gap-2 text-sm text-text-muted",children:[(0,a.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),"Waiting for authorization..."]})]}),"success"===u&&(0,a.jsxs)("div",{className:"text-center py-6",children:[(0,a.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-green-100 dark:bg-green-900/30 flex items-center justify-center",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-3xl text-green-600",children:"check_circle"})}),(0,a.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connected Successfully!"}),(0,a.jsxs)("p",{className:"text-sm text-text-muted mb-4",children:["Your ",r.name," account has been connected."]}),(0,a.jsx)(i.$n,{onClick:U,fullWidth:!0,children:"Done"})]}),"error"===u&&(0,a.jsxs)("div",{className:"text-center py-6",children:[(0,a.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-red-100 dark:bg-red-900/30 flex items-center justify-center",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-3xl text-red-600",children:"error"})}),(0,a.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connection Failed"}),(0,a.jsx)("p",{className:"text-sm text-red-600 mb-4",children:g}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(i.$n,{onClick:z,variant:"secondary",fullWidth:!0,children:"Try Again"}),(0,a.jsx)(i.$n,{onClick:U,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})]})})}d.propTypes={isOpen:n().bool.isRequired,provider:n().string,providerInfo:n().shape({name:n().string}),onSuccess:n().func,onClose:n().func.isRequired,oauthMeta:n().object,idcConfig:n().shape({startUrl:n().string,region:n().string})}},91450:(e,t,r)=>{r.d(t,{default:()=>i});var a=r(95155),s=r(14051),l=r.n(s),n=r(38587);function i({children:e}){return(0,a.jsxs)("div",{className:"min-h-screen flex flex-col relative bg-bg transition-colors duration-500 overflow-x-hidden selection:bg-primary/20 selection:text-primary",children:[(0,a.jsx)("div",{className:"fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[800px] h-[800px] bg-primary/5 dark:bg-primary/5 rounded-full blur-[100px] pointer-events-none z-0"}),(0,a.jsx)("div",{className:"fixed bottom-0 right-0 w-[600px] h-[600px] bg-orange-200/20 dark:bg-orange-900/10 rounded-full blur-[120px] pointer-events-none z-0 translate-y-1/3 translate-x-1/3"}),(0,a.jsx)("div",{className:"absolute top-6 right-6 z-20",children:(0,a.jsx)(n.default,{variant:"card"})}),(0,a.jsx)("main",{className:"flex-1 flex flex-col items-center justify-center p-4 sm:p-6 z-10 w-full h-full",children:e})]})}i.propTypes={children:l().node.isRequired}},92173:(e,t,r)=>{r.d(t,{default:()=>c});var a=r(95155),s=r(98500),l=r.n(s),n=r(90620);let i=[{label:"Features",href:"#features"},{label:"Pricing",href:"#pricing"},{label:"Changelog",href:"#"}],o=[{label:"Documentation",href:"#"},{label:"API Reference",href:"#"},{label:"Help Center",href:"#"}],d=[{label:"About",href:"#"},{label:"Blog",href:"#"},{label:"Contact",href:"#"}];function c(){return(0,a.jsx)("footer",{className:"bg-bg border-t border-border pt-16 pb-12",children:(0,a.jsxs)("div",{className:"container mx-auto px-4 sm:px-6 lg:px-8",children:[(0,a.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 gap-10 mb-12",children:[(0,a.jsxs)("div",{className:"col-span-2 lg:col-span-2",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 mb-6",children:[(0,a.jsx)("div",{className:"size-6 text-primary",children:(0,a.jsx)("svg",{className:"w-full h-full",fill:"currentColor",viewBox:"0 0 48 48",children:(0,a.jsx)("path",{clipRule:"evenodd",d:"M12.0799 24L4 19.2479L9.95537 8.75216L18.04 13.4961L18.0446 4H29.9554L29.96 13.4961L38.0446 8.75216L44 19.2479L35.92 24L44 28.7521L38.0446 39.2479L29.96 34.5039L29.9554 44H18.0446L18.04 34.5039L9.95537 39.2479L4 28.7521L12.0799 24Z",fillRule:"evenodd"})})}),(0,a.jsx)("span",{className:"text-xl font-bold text-text-main",children:n.vQ.name})]}),(0,a.jsx)("p",{className:"text-text-muted mb-6 max-w-sm font-light",children:"The unified interface for modern AI infrastructure. Secure, observable, and scalable."}),(0,a.jsxs)("div",{className:"flex gap-4",children:[(0,a.jsx)("a",{href:"#",className:"text-gray-400 hover:text-primary transition-colors","aria-label":"Twitter",children:(0,a.jsx)("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M22.46 6c-.77.35-1.6.58-2.46.69.88-.53 1.56-1.37 1.88-2.38-.83.5-1.75.85-2.72 1.05C18.37 4.5 17.26 4 16 4c-2.35 0-4.27 1.92-4.27 4.29 0 .34.04.67.11.98C8.28 9.09 5.11 7.38 3 4.79c-.37.63-.58 1.37-.58 2.15 0 1.49.75 2.81 1.91 3.56-.71 0-1.37-.2-1.95-.5v.03c0 2.08 1.48 3.82 3.44 4.21a4.22 4.22 0 0 1-1.93.07 4.28 4.28 0 0 0 4 2.98 8.521 8.521 0 0 1-5.33 1.84c-.34 0-.68-.02-1.02-.06C3.44 20.29 5.7 21 8.12 21 16 21 20.33 14.46 20.33 8.79c0-.19 0-.37-.01-.56.84-.6 1.56-1.36 2.14-2.23z"})})}),(0,a.jsx)("a",{href:"#",className:"text-gray-400 hover:text-primary transition-colors","aria-label":"GitHub",children:(0,a.jsx)("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0 1 12 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0 0 22 12.017C22 6.484 17.522 2 12 2z"})})})]})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{className:"font-semibold text-text-main mb-4",children:"Product"}),(0,a.jsx)("ul",{className:"flex flex-col gap-3 text-sm text-text-muted font-light",children:i.map(e=>(0,a.jsx)("li",{children:(0,a.jsx)(l(),{href:e.href,className:"hover:text-primary transition-colors",children:e.label})},e.label))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{className:"font-semibold text-text-main mb-4",children:"Resources"}),(0,a.jsx)("ul",{className:"flex flex-col gap-3 text-sm text-text-muted font-light",children:o.map(e=>(0,a.jsx)("li",{children:(0,a.jsx)(l(),{href:e.href,className:"hover:text-primary transition-colors",children:e.label})},e.label))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{className:"font-semibold text-text-main mb-4",children:"Company"}),(0,a.jsx)("ul",{className:"flex flex-col gap-3 text-sm text-text-muted font-light",children:d.map(e=>(0,a.jsx)("li",{children:(0,a.jsx)(l(),{href:e.href,className:"hover:text-primary transition-colors",children:e.label})},e.label))})]})]}),(0,a.jsxs)("div",{className:"border-t border-border pt-8 flex flex-col md:flex-row justify-between items-center gap-4",children:[(0,a.jsxs)("p",{className:"text-sm text-text-muted",children:["\xa9 ",new Date().getFullYear()," ",n.vQ.name," Inc. All rights reserved."]}),(0,a.jsxs)("div",{className:"flex gap-6 text-sm text-text-muted",children:[(0,a.jsx)(l(),{href:"#",className:"hover:text-primary transition-colors",children:"Privacy Policy"}),(0,a.jsx)(l(),{href:"#",className:"hover:text-primary transition-colors",children:"Terms of Service"})]})]})]})})}},92542:(e,t,r)=>{r.d(t,{default:()=>i});var a=r(95155),s=r(31474);let l={primary:"bg-brand-500 hover:bg-brand-600 text-white shadow-sm disabled:bg-surface-3 disabled:text-text-muted",secondary:"bg-surface-2 hover:bg-surface-3 text-text-main border border-border disabled:opacity-50",outline:"border border-border text-text-main hover:bg-surface-2 hover:border-brand-500/40",ghost:"text-text-muted hover:bg-surface-2 hover:text-text-main",danger:"bg-red-500 hover:bg-red-600 text-white shadow-sm disabled:bg-surface-3 disabled:text-text-muted",success:"bg-green-600 hover:bg-green-700 text-white shadow-sm disabled:bg-surface-3 disabled:text-text-muted"},n={sm:"h-7 px-3 text-xs rounded-[8px]",md:"h-9 px-4 text-sm rounded-[10px]",lg:"h-11 px-6 text-sm rounded-[10px]"};function i({children:e,variant:t="primary",size:r="md",icon:o,iconRight:d,disabled:c=!1,loading:m=!1,fullWidth:u=!1,className:x,...p}){return(0,a.jsxs)("button",{className:(0,s.cn)("inline-flex items-center justify-center gap-2 font-semibold transition-all duration-150 ease-out cursor-pointer","active:scale-[0.97] disabled:opacity-50 disabled:cursor-not-allowed disabled:active:scale-100",l[t],n[r],u&&"w-full",x),disabled:c||m,...p,children:[m?(0,a.jsx)("span",{className:"material-symbols-outlined animate-spin text-[18px]",children:"progress_activity"}):o?(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:o}):null,e,d&&!m&&(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:d})]})}},92622:(e,t,r)=>{r.d(t,{default:()=>h});var a=r(95155),s=r(12115),l=r(14051),n=r.n(l),i=r(98500),o=r.n(i),d=r(73321),c=r(31474),m=r(90620);let u=[{href:"/dashboard/endpoint",label:"Endpoint",icon:"api"},{href:"/dashboard/api-keys",label:"API Keys",icon:"vpn_key"},{href:"/dashboard/providers",label:"Providers",icon:"dns"},{href:"/dashboard/combos",label:"Combos",icon:"layers"},{href:"/dashboard/usage",label:"Usage",icon:"bar_chart"},{href:"/dashboard/quota",label:"Quota Tracker",icon:"data_usage"},{href:"/dashboard/media-providers/web",label:"Media / Web",icon:"perm_media"},{href:"/dashboard/mitm",label:"AI Traffic Gateway",icon:"security"},{href:"/dashboard/prompt-logs",label:"Prompt Logs",icon:"manage_search"},{href:"/dashboard/cli-tools",label:"CLI Tools",icon:"terminal"},{href:"/dashboard/proxy-pools",label:"Proxy Pools",icon:"lan"},{href:"/dashboard/skills",label:"Skills",icon:"extension"},{href:"/dashboard/profile",label:"Settings",icon:"settings"},{href:"/dashboard/console-log",label:"Console Log",icon:"terminal"},{href:"/dashboard/translator",label:"Translator",icon:"translate"}],x=[{href:"/dashboard/api-keys",label:"API Keys",icon:"vpn_key"}];function p({href:e,label:t,icon:r,active:s,onClick:l}){return(0,a.jsxs)(o(),{href:e,onClick:l,className:(0,c.cn)("group flex items-center gap-3 rounded-lg px-3 py-2 text-sm font-medium transition-all",s?"bg-primary/10 text-primary":"text-text-muted hover:bg-surface-2 hover:text-text-main"),children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:r}),(0,a.jsx)("span",{className:"truncate",children:t})]})}function h({onClose:e}){let t=(0,d.usePathname)(),r=(0,d.useRouter)(),[l,n]=(0,s.useState)(""),[i,o]=(0,s.useState)(""),[c,b]=(0,s.useState)(!0);(0,s.useEffect)(()=>{let e=!1;return fetch("/api/auth/status",{cache:"no-store"}).then(e=>e.json()).then(t=>{e||(n(t?.displayName||t?.userId||""),o(t?.loginMethod||""),b(t?.isAdmin!==!1))}).catch(()=>{e||(n(""),o(""),b(!0))}),()=>{e=!0}},[]);let f=()=>e?.(),g=async()=>{try{await fetch("/api/auth/logout",{method:"POST"})}catch{}r.push("/login"),r.refresh()};return(0,a.jsxs)("div",{className:"flex h-full flex-col p-4",children:[(0,a.jsxs)("div",{className:"mb-5 rounded-2xl bg-primary/10 p-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-3xl text-primary",children:"hub"}),(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("div",{className:"truncate text-lg font-bold text-text-main",children:"Blue Router"}),(0,a.jsxs)("div",{className:"text-xs text-text-muted",children:["v",m.vQ?.version||"local"]})]})]}),l?(0,a.jsxs)("div",{className:"mt-3 rounded-xl bg-background/70 px-3 py-2 text-xs text-text-muted",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 font-medium text-text-main",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-base",children:"person"}),(0,a.jsx)("span",{className:"truncate",children:l})]}),(0,a.jsxs)("div",{className:"mt-1",children:[c?"Admin":"User",i?` \xb7 ${i}`:""]})]}):null]}),(0,a.jsx)("nav",{className:"flex-1 space-y-1 overflow-y-auto pr-1",children:(c?u:x).map(e=>{var r;return(0,a.jsx)(p,{...e,active:"/dashboard/endpoint"===(r=e.href)?"/dashboard"===t||t.startsWith("/dashboard/endpoint"):t===r||t.startsWith(`${r}/`),onClick:f},e.href)})}),(0,a.jsx)("div",{className:"mt-4 border-t border-border pt-4",children:(0,a.jsxs)("button",{onClick:g,className:"flex w-full items-center justify-center gap-2 rounded-xl border border-border px-3 py-2 text-sm font-medium text-text-muted transition hover:bg-surface-2 hover:text-text-main",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"logout"}),"Logout"]})})]})}p.propTypes={href:n().string.isRequired,label:n().string.isRequired,icon:n().string.isRequired,active:n().bool,onClick:n().func},h.propTypes={onClose:n().func}},94230:(e,t,r)=>{r.d(t,{default:()=>d});var a=r(95155),s=r(12115),l=r(14051),n=r.n(l),i=r(35497),o=r(11059);function d({isOpen:e,provider:t,onSuccess:r,onClose:l}){let[n,c]=(0,s.useState)("loading"),[m,u]=(0,s.useState)(""),[x,p]=(0,s.useState)(null),[h,b]=(0,s.useState)(""),[f,g]=(0,s.useState)(null),{copied:y,copy:v}=(0,o.C)();(0,s.useEffect)(()=>{e&&t&&(async()=>{try{g(null),c("loading");let e=await fetch(`/api/oauth/kiro/social-authorize?provider=${t}`),r=await e.json();if(!e.ok)throw Error(r.error);p(r),u(r.authUrl),c("input"),window.open(r.authUrl,"_blank")}catch(e){g(e.message),c("error")}})()},[e,t]);let j=async()=>{try{let e;g(null);try{e=new URL(h)}catch(e){throw Error("Invalid callback URL format")}let a=e.searchParams.get("code");e.searchParams.get("state");let s=e.searchParams.get("error");if(s)throw Error(e.searchParams.get("error_description")||s);if(!a)throw Error("No authorization code found in URL");let l=await fetch("/api/oauth/kiro/social-exchange",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:a,codeVerifier:x.codeVerifier,provider:t})}),n=await l.json();if(!l.ok)throw Error(n.error);c("success"),r?.()}catch(e){g(e.message),c("error")}},N="google"===t?"Google":"GitHub";return(0,a.jsx)(i.aF,{isOpen:e,title:`Connect Kiro via ${N}`,onClose:l,size:"lg",children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:["loading"===n&&(0,a.jsxs)("div",{className:"text-center py-6",children:[(0,a.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-primary/10 flex items-center justify-center",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-3xl text-primary animate-spin",children:"progress_activity"})}),(0,a.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Initializing..."}),(0,a.jsxs)("p",{className:"text-sm text-text-muted",children:["Setting up ",N," authentication"]})]}),"input"===n&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 1: Open this URL in your browser"}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(i.pd,{value:m,readOnly:!0,className:"flex-1 font-mono text-xs"}),(0,a.jsx)(i.$n,{variant:"secondary",icon:"auth_url"===y?"check":"content_copy",onClick:()=>v(m,"auth_url"),children:"Copy"})]})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 2: Paste the callback URL here"}),(0,a.jsx)("p",{className:"text-xs text-text-muted mb-2",children:"After authorization, copy the full URL from your browser address bar."}),(0,a.jsx)(i.pd,{value:h,onChange:e=>b(e.target.value),placeholder:"kiro://kiro.kiroAgent/authenticate-success?code=...",className:"font-mono text-xs"})]})]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(i.$n,{onClick:j,fullWidth:!0,disabled:!h,children:"Connect"}),(0,a.jsx)(i.$n,{onClick:l,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]}),"success"===n&&(0,a.jsxs)("div",{className:"text-center py-6",children:[(0,a.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-green-100 dark:bg-green-900/30 flex items-center justify-center",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-3xl text-green-600",children:"check_circle"})}),(0,a.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connected Successfully!"}),(0,a.jsxs)("p",{className:"text-sm text-text-muted mb-4",children:["Your Kiro account via ",N," has been connected."]}),(0,a.jsx)(i.$n,{onClick:l,fullWidth:!0,children:"Done"})]}),"error"===n&&(0,a.jsxs)("div",{className:"text-center py-6",children:[(0,a.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-red-100 dark:bg-red-900/30 flex items-center justify-center",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-3xl text-red-600",children:"error"})}),(0,a.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connection Failed"}),(0,a.jsx)("p",{className:"text-sm text-red-600 mb-4",children:f}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(i.$n,{onClick:()=>c("input"),variant:"secondary",fullWidth:!0,children:"Try Again"}),(0,a.jsx)(i.$n,{onClick:l,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})]})})}d.propTypes={isOpen:n().bool.isRequired,provider:n().oneOf(["google","github"]).isRequired,onSuccess:n().func,onClose:n().func.isRequired}},95088:(e,t,r)=>{r.d(t,{default:()=>d});var a=r(95155),s=r(12115),l=r(14051),n=r.n(l),i=r(35497);let o="https://gitlab.com";function d({isOpen:e,providerInfo:t,onSuccess:r,onClose:l}){let n,[c,m]=(0,s.useState)(null),[u,x]=(0,s.useState)(o),[p,h]=(0,s.useState)(""),[b,f]=(0,s.useState)(""),[g,y]=(0,s.useState)(""),[v,j]=(0,s.useState)(!1),[N,w]=(0,s.useState)(null),[k,C]=(0,s.useState)(!1),[S,T]=(0,s.useState)(null),I=()=>{m(null),x(o),h(""),f(""),y(""),w(null),j(!1),C(!1),T(null),l()},$=async()=>{if(!g.trim())return void w("Personal Access Token is required");j(!0),w(null);try{let e=await fetch("/api/oauth/gitlab/pat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:g.trim(),baseUrl:u.trim()||o})}),t=await e.json();if(!e.ok)throw Error(t.error||"Authentication failed");r?.(),I()}catch(e){w(e.message)}finally{j(!1)}};return e?k&&S?(0,a.jsx)(i.LF,{isOpen:!0,provider:"gitlab",providerInfo:t,oauthMeta:S,onSuccess:()=>{r?.(),I()},onClose:()=>{C(!1),T(null)}}):(0,a.jsx)(i.aF,{isOpen:e,title:"Connect GitLab Duo",onClose:I,size:"lg",children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[!c&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("p",{className:"text-sm text-text-muted",children:"Choose how to authenticate with GitLab Duo:"}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-3",children:[(0,a.jsxs)("button",{onClick:()=>m("oauth"),className:"flex flex-col items-center gap-2 p-4 rounded-lg border border-border hover:border-primary hover:bg-primary/5 transition-colors text-left",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-2xl text-primary",children:"lock_open"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:"OAuth App"}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Use a GitLab OAuth application"})]})]}),(0,a.jsxs)("button",{onClick:()=>m("pat"),className:"flex flex-col items-center gap-2 p-4 rounded-lg border border-border hover:border-primary hover:bg-primary/5 transition-colors text-left",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-2xl text-primary",children:"key"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:"Personal Access Token"}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Use a GitLab PAT with api scope"})]})]})]})]}),"oauth"===c&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("p",{className:"text-xs text-text-muted",children:["Create an OAuth app at"," ",(0,a.jsx)("a",{href:`${u.trim()||o}/-/profile/applications`,target:"_blank",rel:"noreferrer",className:"text-primary underline",children:"GitLab Applications"})," ","with redirect URI"," ",(0,a.jsx)("code",{className:"bg-sidebar px-1 rounded text-xs",children:(n=window.location.port||("https:"===window.location.protocol?"443":"80"),`http://localhost:${n}/callback`)})]}),(0,a.jsx)(i.pd,{label:"GitLab Base URL",value:u,onChange:e=>x(e.target.value),placeholder:o}),(0,a.jsx)(i.pd,{label:"Client ID",value:p,onChange:e=>h(e.target.value),placeholder:"Your OAuth application client ID"}),(0,a.jsx)(i.pd,{label:"Client Secret (optional for PKCE)",value:b,onChange:e=>f(e.target.value),placeholder:"Leave empty for public PKCE app"}),N&&(0,a.jsx)("p",{className:"text-sm text-red-500",children:N}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(i.$n,{onClick:()=>{p.trim()?(w(null),T({baseUrl:u.trim()||o,clientId:p.trim(),clientSecret:b.trim()}),C(!0)):w("Client ID is required")},fullWidth:!0,disabled:!p.trim(),children:"Authorize"}),(0,a.jsx)(i.$n,{onClick:()=>{m(null),w(null)},variant:"ghost",fullWidth:!0,children:"Back"})]})]}),"pat"===c&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("p",{className:"text-xs text-text-muted",children:["Create a PAT at"," ",(0,a.jsx)("a",{href:`${u.trim()||o}/-/user_settings/personal_access_tokens`,target:"_blank",rel:"noreferrer",className:"text-primary underline",children:"GitLab Access Tokens"})," ","with scopes: ",(0,a.jsx)("code",{className:"bg-sidebar px-1 rounded text-xs",children:"api"}),","," ",(0,a.jsx)("code",{className:"bg-sidebar px-1 rounded text-xs",children:"read_user"}),", and"," ",(0,a.jsx)("code",{className:"bg-sidebar px-1 rounded text-xs",children:"ai_features"}),"."]}),(0,a.jsx)(i.pd,{label:"GitLab Base URL",value:u,onChange:e=>x(e.target.value),placeholder:o}),(0,a.jsx)(i.pd,{label:"Personal Access Token",value:g,onChange:e=>y(e.target.value),placeholder:"glpat-xxxxxxxxxxxxxxxxxxxx",type:"password"}),N&&(0,a.jsx)("p",{className:"text-sm text-red-500",children:N}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(i.$n,{onClick:$,fullWidth:!0,disabled:!g.trim()||v,loading:v,children:"Connect"}),(0,a.jsx)(i.$n,{onClick:()=>{m(null),w(null)},variant:"ghost",fullWidth:!0,children:"Back"})]})]})]})}):null}d.propTypes={isOpen:n().bool.isRequired,providerInfo:n().shape({name:n().string}),onSuccess:n().func,onClose:n().func.isRequired}},96748:(e,t,r)=>{r.d(t,{default:()=>d});var a=r(95155),s=r(12115),l=r(14051),n=r.n(l),i=r(35497);let o="https://api.openai.com/v1";function d({isOpen:e,onClose:t,onCreated:r,onSaved:l,node:n}){let c=!!n,[m,u]=(0,s.useState)({name:"",prefix:"",baseUrl:o}),[x,p]=(0,s.useState)(!1),[h,b]=(0,s.useState)(""),[f,g]=(0,s.useState)(""),[y,v]=(0,s.useState)(!1),[j,N]=(0,s.useState)(null);(0,s.useEffect)(()=>{e&&(N(null),b(""),g(""),c?u({name:n.name||"",prefix:n.prefix||"",baseUrl:n.baseUrl||o}):u({name:"",prefix:"",baseUrl:o}))},[e,c,n]);let w=async()=>{if(m.name.trim()&&m.prefix.trim()&&m.baseUrl.trim()){p(!0);try{let e=c?`/api/provider-nodes/${n.id}`:"/api/provider-nodes",t=c?"PUT":"POST",a={name:m.name,prefix:m.prefix,baseUrl:m.baseUrl};c||(a.type="custom-embedding");let s=await fetch(e,{method:t,headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),i=await s.json();s.ok&&(c?l?.(i.node):r?.(i.node))}catch(e){console.log("Error saving custom embedding node:",e)}finally{p(!1)}}},k=async()=>{v(!0);try{let e=await fetch("/api/provider-nodes/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:m.baseUrl,apiKey:h,type:"custom-embedding",modelId:f.trim()||void 0})}),t=await e.json();N(t)}catch{N({valid:!1,error:"Network error"})}finally{v(!1)}};return(0,a.jsx)(i.aF,{isOpen:e,title:c?"Edit Custom Embedding":"Add Custom Embedding",onClose:t,children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsx)(i.pd,{label:"Name",value:m.name,onChange:e=>u({...m,name:e.target.value}),placeholder:"Voyage AI",hint:"Required. A friendly label for this embedding provider."}),(0,a.jsx)(i.pd,{label:"Prefix",value:m.prefix,onChange:e=>u({...m,prefix:e.target.value}),placeholder:"voyage",hint:"Required. Used as the provider prefix for model IDs (e.g. voyage/voyage-3)."}),(0,a.jsx)(i.pd,{label:"Base URL",value:m.baseUrl,onChange:e=>u({...m,baseUrl:e.target.value}),placeholder:"https://api.voyageai.com/v1",hint:"Most embedding APIs are OpenAI-compatible: Voyage, Cohere, Jina, Mistral, Together..."}),(0,a.jsx)(i.pd,{label:"API Key (for Check)",type:"password",value:h,onChange:e=>b(e.target.value)}),(0,a.jsx)(i.pd,{label:"Model ID (for Check)",value:f,onChange:e=>g(e.target.value),placeholder:"e.g. voyage-3, embed-english-v3.0, text-embedding-3-small",hint:"Required for validation. Will send a test embeddings request."}),(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)(i.$n,{onClick:k,disabled:!h||!f.trim()||y||!m.baseUrl.trim(),variant:"secondary",children:y?"Checking...":"Check"}),(()=>{if(!j)return null;let{valid:e,error:t,dimensions:r}=j;return e?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.Ex,{variant:"success",children:"Valid"}),r&&(0,a.jsxs)("span",{className:"text-sm text-text-muted",children:[r," dims"]})]}):(0,a.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,a.jsx)(i.Ex,{variant:"error",children:"Invalid"}),t&&(0,a.jsx)("span",{className:"text-sm text-red-500",children:t})]})})()]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(i.$n,{onClick:w,fullWidth:!0,disabled:!m.name.trim()||!m.prefix.trim()||!m.baseUrl.trim()||x,children:x?c?"Saving...":"Creating...":c?"Save":"Create"}),(0,a.jsx)(i.$n,{onClick:t,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})})}d.propTypes={isOpen:n().bool.isRequired,onClose:n().func.isRequired,onCreated:n().func,onSaved:n().func,node:n().shape({id:n().string,name:n().string,prefix:n().string,baseUrl:n().string})}},97677:(e,t,r)=>{r.d(t,{default:()=>s});var a=r(95155);function s({text:e,children:t,position:r="top",color:l}){let n=l?"":"bg-gray-900";return(0,a.jsxs)("div",{className:"relative inline-flex group",children:[t,(0,a.jsx)("div",{className:`pointer-events-none absolute ${{top:"bottom-full left-1/2 -translate-x-1/2 mb-1.5",bottom:"top-full left-1/2 -translate-x-1/2 mt-1.5",left:"right-full top-1/2 -translate-y-1/2 mr-1.5",right:"left-full top-1/2 -translate-y-1/2 ml-1.5"}[r]} z-50 w-max max-w-56 rounded px-2 py-1 text-[11px] leading-snug ${n} text-white opacity-0 group-hover:opacity-100 transition-opacity duration-150 whitespace-normal`,style:l?{backgroundColor:l}:{},children:e})]})}},98542:(e,t,r)=>{r.d(t,{default:()=>l});var a=r(95155),s=r(31474);function l({checked:e=!1,onChange:t,label:r,description:n,disabled:i=!1,size:o="md",className:d}){let c={sm:{track:"w-8 h-4",thumb:"size-3",translate:"translate-x-4"},md:{track:"w-11 h-6",thumb:"size-5",translate:"translate-x-5"},lg:{track:"w-14 h-7",thumb:"size-6",translate:"translate-x-7"}};return(0,a.jsxs)("div",{className:(0,s.cn)("flex items-center gap-3",i&&"opacity-50 cursor-not-allowed",d),children:[(0,a.jsx)("button",{type:"button",role:"switch","aria-checked":e,disabled:i,onClick:()=>{!i&&t&&t(!e)},className:(0,s.cn)("relative inline-flex shrink-0 cursor-pointer rounded-full","transition-colors duration-200 ease-in-out","focus:outline-none focus:ring-2 focus:ring-brand-500/30",e?"bg-brand-500":"bg-surface-3",c[o].track,i&&"cursor-not-allowed"),children:(0,a.jsx)("span",{className:(0,s.cn)("pointer-events-none inline-block rounded-full bg-white shadow-sm","transform transition duration-200 ease-in-out",e?c[o].translate:"translate-x-0.5",c[o].thumb,"mt-0.5")})}),(r||n)&&(0,a.jsxs)("div",{className:"flex flex-col",children:[r&&(0,a.jsx)("span",{className:"text-sm font-medium text-text-main",children:r}),n&&(0,a.jsx)("span",{className:"text-xs text-text-muted",children:n})]})]})}}}]);
7
+ `,children:(0,a.jsxs)("span",{className:"flex items-center gap-1",children:[f.includes(e.value)&&!r&&(0,a.jsx)("span",{className:"material-symbols-outlined leading-none",style:{fontSize:"10px"},children:"check"}),r?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[11px]",children:"edit"}),e.name]}):e.isCustom?(0,a.jsxs)(a.Fragment,{children:[e.name,(0,a.jsx)("span",{className:"text-[9px] opacity-60 font-normal",children:"custom"})]}):e.name]})},e.value)})})]},e)),0===Object.keys(z).length&&0===E.length&&(0,a.jsxs)("div",{className:"text-center py-4 text-text-muted",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-2xl mb-1 block",children:"search_off"}),(0,a.jsx)("p",{className:"text-xs",children:"No models found"})]})]})]})]})}):null}u.propTypes={isOpen:n().bool.isRequired,onClose:n().func.isRequired,onSelect:n().func.isRequired,onDeselect:n().func,selectedModel:n().string,activeProviders:n().arrayOf(n().shape({provider:n().string.isRequired})),title:n().string,modelAliases:n().object,kindFilter:n().string,addedModelValues:n().arrayOf(n().string),closeOnSelect:n().bool}},73579:(e,t,r)=>{r.d(t,{default:()=>j});var a=r(95155),s=r(12115),l=r(14051),n=r.n(l),i=r(81127),o=r(11910),d=r(92542),c=r(56061),m=r(52679),u=r(90620);let x=[0,1,2,3,4,5,6],p=[{value:1,label:"Mon"},{value:2,label:"Tue"},{value:3,label:"Wed"},{value:4,label:"Thu"},{value:5,label:"Fri"},{value:6,label:"Sat"},{value:0,label:"Sun"}],h=[{id:"@cf/meta/llama-3.1-8b-instruct",name:"Cloudflare: Llama 3.1 8B Instruct"},{id:"@cf/meta/llama-3.1-70b-instruct",name:"Cloudflare: Llama 3.1 70B Instruct"},{id:"@cf/deepseek-ai/deepseek-r1-distill-qwen-32b",name:"Cloudflare: DeepSeek R1 Distill Qwen 32B"},{id:"@cf/qwen/qwen1.5-14b-chat-awq",name:"Cloudflare: Qwen 1.5 14B Chat AWQ"}],b=new Set(["antigravity","codex","claude","gemini-cli"]);function f(e=""){return"cloudflare-ai"===e?h:[]}function g(e,t){let r=String(e||"").trim();return/^([01]\d|2[0-3]):([0-5]\d)$/.test(r)?r:t}function y(e={}){let t=e&&"object"==typeof e?e:{},r=Array.isArray(t.weekdays)?t.weekdays.map(Number).filter(e=>e>=0&&e<=6):x;return{enabled:!1!==t.enabled,weekdays:[...new Set(r)].sort((e,t)=>e-t),fromTime:g(t.fromTime||t.from,"00:00"),toTime:g(t.toTime||t.to,"23:59")}}function v(e={}){var t;let r=e&&"object"==typeof e?e:{};return{enabled:!0===r.enabled,intervalSec:Math.max(10,Number.parseInt(r.intervalSec||60,10)||60),failureThreshold:Math.max(1,Number.parseInt(r.failureThreshold||3,10)||3),timeoutMs:Math.max(1e3,Number.parseInt(r.timeoutMs||15e3,10)||15e3),prompt:"string"==typeof r.prompt&&r.prompt.trim()?r.prompt.trim():"Say hi",disableThinking:!1!==r.disableThinking,model:"string"==typeof(t=r.model||r.healthModel||r.testModel)?t.trim():""}}function j({isOpen:e,connection:t,proxyPools:r,onSave:l,onClose:n}){let[h,g]=(0,s.useState)({name:"",priority:1,apiKey:""}),[N,w]=(0,s.useState)({azureEndpoint:"",apiVersion:"2024-10-01-preview",deployment:"",organization:""}),[k,C]=(0,s.useState)({accountId:""}),[S,T]=(0,s.useState)(!1),[I,$]=(0,s.useState)(null),[A,P]=(0,s.useState)(!1),[O,R]=(0,s.useState)(null),[M,_]=(0,s.useState)(!1),[L,E]=(0,s.useState)(y()),[z,q]=(0,s.useState)(v()),[U,D]=(0,s.useState)(!1),[F,W]=(0,s.useState)(!1),[K,B]=(0,s.useState)([]),[G,V]=(0,s.useState)(!1),[J,Q]=(0,s.useState)("");(0,s.useEffect)(()=>{t&&(g({name:t.name||"",priority:t.priority||1,apiKey:""}),"azure"===t.provider&&t.providerSpecificData&&w({azureEndpoint:t.providerSpecificData.azureEndpoint||"",apiVersion:t.providerSpecificData.apiVersion||"2024-10-01-preview",deployment:t.providerSpecificData.deployment||"",organization:t.providerSpecificData.organization||""}),"cloudflare-ai"===t.provider&&t.providerSpecificData&&C({accountId:t.providerSpecificData.accountId||""}),E(y(t.schedule||{})),q(v(t.healthCheck||{})),D(!0===t.providerScheduleOverride),W(!0===t.providerHealthOverride),$(null),R(null))},[t]);let H=t?.authType==="oauth",X=t?.provider==="azure",Y=t?.provider==="cloudflare-ai",Z=t?function(e=""){if((0,m.gb)(e))return"anthropic";if((0,m.mq)(e)||"cloudflare-ai"===e)return"openai";if("gemini"===e)return"gemini";if("github"===e)return"openai";let t=u.X3?.[e]||"";return t.includes("/messages")?"anthropic":t.includes("/chat/completions")||t.includes("/responses")?"openai":null}(t.provider):null,ee=!!Z;(0,s.useEffect)(()=>{if(!e||!t?.id)return;let r=!1;return async function(){let e=f(t.provider);if(e.length>0){V(!1),B(e),Q("Cloudflare does not expose a simple account /models list here. Pick a common Workers AI model below or type the exact model manually.");return}if(!function(e=""){return!(f(e).length>0||b.has(e))}(t.provider)){V(!1),B([]),Q("This provider uses a session/OAuth-specific model resolver. Healthcheck will use connection/token probe unless you type a supported direct chat model manually.");return}V(!0),Q("");try{let e=await fetch(`/api/providers/${t.id}/models`,{cache:"no-store"}),a=e.ok?await e.json():{};if(!r){let t,r,s=e.ok?(t=Array.isArray(a?.models)?a.models:[],r=new Set,t.map(e=>{let t="string"==typeof e?e:e?.id||e?.name||e?.model||e?.displayName;if(!t)return null;let a=String(t).trim();return!a||r.has(a)?null:(r.add(a),{id:a,name:e?.name||e?.displayName||e?.model||a})}).filter(Boolean).sort((e,t)=>e.id.localeCompare(t.id))):[];B(s),e.ok?a.warning?Q(a.warning):0===s.length&&Q("Provider did not return a model list. You can type the healthcheck model manually if this account supports chat ping."):Q(a.error||"Failed to load models")}}catch(e){r||(B([]),Q(e.message||"Failed to load models"))}finally{r||V(!1)}}(),()=>{r=!0}},[e,t?.id,t?.provider]);let et=async()=>{if(t?.provider){T(!0),$(null);try{let e=await fetch(`/api/providers/${t.id}/test`,{method:"POST"}),r=await e.json();$(r.valid?"success":"failed")}catch{$("failed")}finally{T(!1)}}},er=async()=>{if(t?.provider&&h.apiKey){P(!0),R(null);try{let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t.provider,apiKey:h.apiKey,...X?{providerSpecificData:N}:{},...Y?{providerSpecificData:k}:{}})}),r=await e.json();R(r.valid?"success":"failed")}catch{R("failed")}finally{P(!1)}}},ea=async()=>{if(t){_(!0);try{let e={name:h.name,priority:h.priority,schedule:y(L),healthCheck:v(z)};if(!H&&h.apiKey){e.apiKey=h.apiKey;let r="success"===O;if(!r)try{P(!0),R(null);let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t.provider,apiKey:h.apiKey,...X?{providerSpecificData:N}:{},...Y?{providerSpecificData:k}:{}})});r=!!(await e.json()).valid,R(r?"success":"failed")}catch{R("failed")}finally{P(!1)}r&&(e.testStatus="active",e.lastError=null,e.lastErrorAt=null)}X&&(e.providerSpecificData={azureEndpoint:N.azureEndpoint,apiVersion:N.apiVersion,deployment:N.deployment,organization:N.organization}),Y&&(e.providerSpecificData={accountId:k.accountId}),await l(e)}finally{_(!1)}}};return t?(0,a.jsx)(i.default,{isOpen:e,onClose:n,title:"Edit Connection",maxWidth:"2xl",children:(0,a.jsxs)("div",{className:"space-y-5",children:[(0,a.jsx)(o.default,{label:"Name",value:h.name,onChange:e=>g({...h,name:e.target.value}),placeholder:H?"Account name":"Production Key"}),H&&t.email&&(0,a.jsxs)("div",{className:"rounded-lg border border-border bg-surface p-3 text-sm",children:[(0,a.jsx)("div",{className:"text-text-muted",children:"Email"}),(0,a.jsx)("div",{className:"font-medium text-text-main",children:t.email})]}),(0,a.jsx)(o.default,{label:"Priority",type:"number",min:"1",value:h.priority,onChange:e=>g({...h,priority:Number.parseInt(e.target.value,10)||1})}),!H&&(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(o.default,{label:"API Key",type:"password",value:h.apiKey,onChange:e=>g({...h,apiKey:e.target.value}),placeholder:"Enter new API key",hint:"Leave blank to keep the current API key.",className:"flex-1"}),(0,a.jsxs)("div",{className:"mt-6 flex items-center gap-2",children:[(0,a.jsx)(d.default,{type:"button",variant:"secondary",onClick:er,disabled:A||!h.apiKey,children:A?"Checking...":"Check"}),O&&(0,a.jsx)(c.default,{variant:"success"===O?"success":"danger",children:"success"===O?"Valid":"Invalid"})]})]}),X&&(0,a.jsxs)("div",{className:"space-y-3 rounded-lg border border-border p-4",children:[(0,a.jsx)("h3",{className:"font-semibold text-text-main",children:"Azure OpenAI Configuration"}),(0,a.jsx)(o.default,{label:"Azure Endpoint",value:N.azureEndpoint,onChange:e=>w({...N,azureEndpoint:e.target.value}),placeholder:"https://your-resource.openai.azure.com"}),(0,a.jsx)(o.default,{label:"Deployment",value:N.deployment,onChange:e=>w({...N,deployment:e.target.value}),placeholder:"gpt-4"}),(0,a.jsx)(o.default,{label:"API Version",value:N.apiVersion,onChange:e=>w({...N,apiVersion:e.target.value}),placeholder:"2024-10-01-preview"}),(0,a.jsx)(o.default,{label:"Organization",value:N.organization,onChange:e=>w({...N,organization:e.target.value}),placeholder:"Organization ID"})]}),Y&&(0,a.jsx)(o.default,{label:"Cloudflare Account ID",value:k.accountId,onChange:e=>C({...k,accountId:e.target.value})}),(0,a.jsxs)("div",{className:"space-y-3 rounded-lg border border-border p-4",children:[(0,a.jsx)("h3",{className:"font-semibold text-text-main",children:"Scheduler"}),U&&(0,a.jsx)("div",{className:"rounded-md border border-warning/30 bg-warning/10 p-2 text-xs text-warning",children:"Provider-level scheduler override is enabled. This account scheduler is locked and ignored while override is on."}),(0,a.jsxs)("label",{className:"flex items-center gap-2 text-sm",children:[(0,a.jsx)("input",{type:"checkbox",checked:!1!==L.enabled,disabled:U,onChange:e=>E(t=>({...t,enabled:e.target.checked}))}),"Enable account scheduler"]}),(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:p.map(e=>(0,a.jsxs)("label",{className:"flex items-center gap-1 rounded border border-border px-2 py-1 text-xs",children:[(0,a.jsx)("input",{type:"checkbox",checked:(L.weekdays||[]).includes(e.value),disabled:U||!1===L.enabled,onChange:()=>E(t=>{let r=new Set(Array.isArray(t.weekdays)?t.weekdays:x);return r.has(e.value)?r.delete(e.value):r.add(e.value),{...t,weekdays:[...r].sort((e,t)=>e-t)}})}),e.label]},e.value))}),(0,a.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,a.jsxs)("label",{className:"text-sm text-text-muted",children:["From time",(0,a.jsx)("input",{type:"time",value:L.fromTime,disabled:U||!1===L.enabled,onChange:e=>E(t=>({...t,fromTime:e.target.value})),className:"mt-1 w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50"})]}),(0,a.jsxs)("label",{className:"text-sm text-text-muted",children:["To time",(0,a.jsx)("input",{type:"time",value:L.toTime,disabled:U||!1===L.enabled,onChange:e=>E(t=>({...t,toTime:e.target.value})),className:"mt-1 w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50"})]})]})]}),(0,a.jsxs)("div",{className:"space-y-3 rounded-lg border border-border p-4",children:[(0,a.jsx)("h3",{className:"font-semibold text-text-main",children:"Ping Health Check"}),F&&(0,a.jsx)("div",{className:"rounded-md border border-warning/30 bg-warning/10 p-2 text-xs text-warning",children:"Provider-level healthcheck override is enabled. This account healthcheck policy is locked and ignored while override is on."}),(0,a.jsxs)("label",{className:"flex items-center gap-2 text-sm",children:[(0,a.jsx)("input",{type:"checkbox",checked:!0===z.enabled,disabled:F,onChange:e=>q(t=>({...t,enabled:e.target.checked}))}),"Enable periodic health check"]}),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("label",{className:"text-sm text-text-muted",children:["Healthcheck model",(0,a.jsxs)("select",{value:z.model||"",disabled:F||!z.enabled,onChange:e=>q(t=>({...t,model:e.target.value})),className:"mt-1 w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50",children:[(0,a.jsx)("option",{value:"",children:"Connection/base URL only — no chat ping"}),K.map(e=>(0,a.jsx)("option",{value:e.id,children:e.name||e.id},e.id))]})]}),(0,a.jsxs)("label",{className:"text-sm text-text-muted",children:["Manual healthcheck model",(0,a.jsx)("input",{type:"text",value:z.model||"",disabled:F||!z.enabled,onChange:e=>q(t=>({...t,model:e.target.value})),placeholder:"anthropic"===Z?"claude/model name from this endpoint":"gemini"===Z?"gemini model, e.g. gemini-2.5-flash":"model name from this endpoint",className:"mt-1 w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50"})]}),G&&(0,a.jsx)("div",{className:"text-xs text-text-muted",children:"Loading models..."}),J&&(0,a.jsxs)("div",{className:"text-xs text-warning",children:["Model list note: ",J]}),"anthropic"===Z&&(0,a.jsxs)("div",{className:"rounded-md bg-surface p-2 text-xs text-text-muted",children:["Anthropic-compatible healthcheck sends Say hi to ",(0,a.jsx)("code",{children:"/v1/messages"})," only when a model is selected. If this endpoint does not expose ",(0,a.jsx)("code",{children:"/v1/models"}),", type the model name manually."]}),"gemini"===Z&&(0,a.jsxs)("div",{className:"rounded-md bg-surface p-2 text-xs text-text-muted",children:["Gemini healthcheck sends Say hi with the native ",(0,a.jsx)("code",{children:"generateContent"})," API only when a model is selected."]}),"cloudflare-ai"===t.provider&&(0,a.jsxs)("div",{className:"rounded-md bg-surface p-2 text-xs text-text-muted",children:["Cloudflare healthcheck sends Say hi to the Workers AI OpenAI-style chat endpoint only when a model is selected. If the model list is incomplete, type the exact ",(0,a.jsx)("code",{children:"@cf/..."})," model manually."]}),!ee&&(0,a.jsx)("div",{className:"rounded-md bg-surface p-2 text-xs text-text-muted",children:"This provider can still load/show models if its model resolver supports it. Auto healthcheck will keep using the original connection/token/account probe until a direct chat endpoint is available."})]}),z.enabled&&(!ee||!z.model)&&(0,a.jsx)("div",{className:"rounded-md border border-warning/30 bg-warning/10 p-2 text-xs text-warning",children:"No direct chat healthcheck model/endpoint is active. Auto healthcheck will test connection/base URL/key/token/account and will not send the Say hi chat ping."}),(0,a.jsxs)("div",{className:"grid gap-3 sm:grid-cols-3",children:[(0,a.jsxs)("label",{className:"text-sm text-text-muted",children:["Interval seconds",(0,a.jsx)("input",{type:"number",value:z.intervalSec,disabled:F||!z.enabled,onChange:e=>q(t=>({...t,intervalSec:Math.max(10,Number.parseInt(e.target.value,10)||60)})),className:"mt-1 w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50"})]}),(0,a.jsxs)("label",{className:"text-sm text-text-muted",children:["Fail threshold",(0,a.jsx)("input",{type:"number",value:z.failureThreshold,disabled:F||!z.enabled,onChange:e=>q(t=>({...t,failureThreshold:Math.max(1,Number.parseInt(e.target.value,10)||3)})),className:"mt-1 w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50"})]}),(0,a.jsxs)("label",{className:"text-sm text-text-muted",children:["Timeout ms",(0,a.jsx)("input",{type:"number",value:z.timeoutMs,disabled:F||!z.enabled,onChange:e=>q(t=>({...t,timeoutMs:Math.max(1e3,Number.parseInt(e.target.value,10)||15e3)})),className:"mt-1 w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50"})]})]}),(0,a.jsxs)("label",{className:"text-sm text-text-muted",children:["Prompt",(0,a.jsx)("input",{type:"text",value:z.prompt,disabled:F||!z.enabled||!z.model,onChange:e=>q(t=>({...t,prompt:e.target.value})),className:"mt-1 w-full rounded-lg border border-border bg-background px-3 py-2 text-sm text-text-main outline-none focus:border-primary disabled:opacity-50"})]}),(0,a.jsxs)("label",{className:"flex items-center gap-2 text-sm",children:[(0,a.jsx)("input",{type:"checkbox",checked:!1!==z.disableThinking,disabled:F||!z.enabled||!z.model,onChange:e=>q(t=>({...t,disableThinking:e.target.checked}))}),"Prefer lightweight test / disable thinking where supported"]}),(0,a.jsxs)("div",{className:"rounded-md bg-surface p-2 text-xs text-text-muted",children:["Status: ",t.healthStatus||"unknown",t.healthLastCheckedAt&&(0,a.jsxs)("span",{children:[" \xb7 last checked: ",t.healthLastCheckedAt]}),t.healthLastError&&(0,a.jsx)("div",{className:"mt-1 text-danger",children:t.healthLastError})]})]}),!X&&!Y&&(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(d.default,{type:"button",variant:"secondary",onClick:et,disabled:S,children:S?"Testing...":"Test Connection"}),I&&(0,a.jsx)(c.default,{variant:"success"===I?"success":"danger",children:"success"===I?"Valid":"Failed"})]}),(0,a.jsxs)("div",{className:"flex justify-end gap-2 pt-2",children:[(0,a.jsx)(d.default,{type:"button",variant:"primary",onClick:ea,disabled:M||A,children:M?"Saving...":"Save"}),(0,a.jsx)(d.default,{type:"button",variant:"secondary",onClick:n,disabled:M,children:"Cancel"})]})]})}):null}j.propTypes={isOpen:n().bool.isRequired,connection:n().shape({id:n().string,name:n().string,email:n().string,priority:n().number,authType:n().string,provider:n().string,providerSpecificData:n().object,schedule:n().object,healthCheck:n().object,healthStatus:n().string,healthLastCheckedAt:n().string,healthLastError:n().string,providerScheduleOverride:n().bool,providerHealthOverride:n().bool}),proxyPools:n().arrayOf(n().shape({id:n().string,name:n().string})),onSave:n().func.isRequired,onClose:n().func.isRequired}},74891:(e,t,r)=>{r.d(t,{default:()=>f});var a=r(95155),s=r(12115),l=r(73321),n=r(98500),i=r.n(n),o=r(14051),d=r.n(o),c=r(57250),m=r(80752),u=r(38587),x=r(38003),p=r(90620),h=r(52679),b=r(73006);function f({onMenuClick:e,showMenuButton:t=!0}){let r=(0,l.usePathname)(),n=(0,l.useRouter)(),[o,d]=(0,s.useState)(""),[x,y]=(0,s.useState)(""),{title:v,description:j,icon:N,breadcrumbs:w}=(0,s.useMemo)(()=>(e=>{if(!e)return{title:"",description:"",breadcrumbs:[]};let t=e.match(/\/media-providers\/([^/]+)\/([^/]+)$/);if(t){let e=t[1],r=t[2],a=h.rj.find(t=>t.id===e),s=h.Q2[r];return{title:s?.name||r,description:"",breadcrumbs:[{label:"Media Providers",href:`/dashboard/media-providers/${e}`},{label:a?.label||e,href:`/dashboard/media-providers/${e}`},{label:s?.name||r,image:`/providers/${r}.png`}]}}let r=e.match(/\/media-providers\/([^/]+)$/);if(r){let e=r[1],t=h.rj.find(t=>t.id===e);return{title:t?.label||e,description:`Manage your ${t?.label||e} providers`,icon:t?.icon||"perm_media",breadcrumbs:[]}}let a=e.match(/\/providers\/([^/]+)$/);if(a){let e=a[1],t=p.zN[e]||p.fg[e];if(t)return{title:t.name,description:"",breadcrumbs:[{label:"Providers",href:"/dashboard/providers"},{label:t.name,image:`/providers/${t.id}.png`}]}}return e.includes("/providers")&&!e.includes("/media-providers")?{title:"Providers",description:"Manage your AI provider connections",icon:"dns",breadcrumbs:[]}:e.includes("/combos")?{title:"Combos",description:"Model combos with fallback",icon:"layers",breadcrumbs:[]}:e.includes("/usage")?{title:"Usage & Analytics",description:"Monitor your API usage, token consumption, and request logs",icon:"bar_chart",breadcrumbs:[]}:e.includes("/auth-files")?{title:"Auth Files",description:"Map provider credentials stored in the local database",icon:"vpn_key",breadcrumbs:[]}:e.includes("/quota")?{title:"Quota Tracker",description:"Track and manage your API quota limits",icon:"data_usage",breadcrumbs:[]}:e.includes("/mitm")?{title:"AI Traffic Proxy",description:"Intercept CLI tool traffic and route through this router gateway",icon:"security",breadcrumbs:[]}:e.includes("/cli-tools")?{title:"CLI Tools",description:"Configure CLI tools",icon:"terminal",breadcrumbs:[]}:e.includes("/proxy-pools")?{title:"Proxy Pools",description:"Manage your proxy pool configurations",icon:"lan",breadcrumbs:[]}:e.includes("/skills")?{title:"Agent Skills",description:"Copy a link and paste to your AI to use this Router — no install needed",icon:"extension",breadcrumbs:[]}:e.includes("/endpoint")?{title:"Endpoint",description:"API endpoint configuration",icon:"api",breadcrumbs:[]}:e.includes("/profile")?{title:"Settings",description:"Manage your preferences",icon:"settings",breadcrumbs:[]}:e.includes("/translator")?{title:"Translator",description:"Debug translation flow between formats",icon:"translate",breadcrumbs:[]}:e.includes("/console-log")?{title:"Console Log",description:"Live server console output",icon:"monitor",breadcrumbs:[]}:"/dashboard"===e?{title:"Endpoint",description:"API endpoint configuration",icon:"api",breadcrumbs:[]}:{title:"",description:"",breadcrumbs:[]}})(r),[r]);(0,s.useEffect)(()=>{let e=!1;return async function(){try{let t=await fetch("/api/auth/status",{cache:"no-store"});if(!t.ok)return;let r=await t.json();e||(d(r?.displayName||r?.oidcName||r?.oidcEmail||""),y(r?.loginMethod||""))}catch{e||(d(""),y(""))}}(),()=>{e=!0}},[]);let k=async()=>{try{(await fetch("/api/auth/logout",{method:"POST"})).ok&&(n.push("/login"),n.refresh())}catch(e){console.error("Failed to logout:",e)}};return(0,a.jsxs)("header",{className:"shrink-0 flex items-center justify-between gap-3 px-4 lg:px-8 pt-3 pb-2 border-b border-border-subtle bg-surface/60 backdrop-blur-xl lg:bg-transparent lg:backdrop-blur-none z-20",children:[(0,a.jsx)("div",{className:"flex items-center gap-3 lg:hidden shrink-0",children:t&&(0,a.jsx)("button",{onClick:e,className:"text-text-main hover:text-primary transition-colors",children:(0,a.jsx)("span",{className:"material-symbols-outlined",children:"menu"})})}),(0,a.jsx)("div",{className:"flex flex-col min-w-0 flex-1",children:w.length>0?(0,a.jsx)("div",{className:"flex items-center gap-2",children:w.map((e,t)=>(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[t>0&&(0,a.jsx)("span",{className:"material-symbols-outlined text-text-muted text-base",children:"chevron_right"}),e.href?(0,a.jsx)(i(),{href:e.href,className:"text-text-muted hover:text-primary transition-colors",children:e.label}):(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[e.image&&(0,a.jsx)(c.A,{src:e.image,alt:e.label,size:28,className:"object-contain rounded max-w-[28px] max-h-[28px]",fallbackText:e.label.slice(0,2).toUpperCase()}),(0,a.jsx)("h1",{className:"text-base lg:text-2xl font-semibold text-text-main tracking-tight truncate",children:(0,b.Tl)(e.label)})]})]},`${e.label}-${e.href||"current"}`))}):v?(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[N&&(0,a.jsx)("span",{className:"material-symbols-outlined text-primary text-xl lg:text-2xl",children:N}),(0,a.jsx)("h1",{className:"text-base lg:text-2xl font-semibold tracking-tight truncate",children:(0,b.Tl)(v)})]}),j&&(0,a.jsx)("p",{className:"hidden lg:block text-sm text-text-muted truncate",children:(0,b.Tl)(j)})]}):null}),(0,a.jsxs)("div",{className:"flex items-center gap-1 shrink-0",children:[o&&"OIDC"===x&&(0,a.jsxs)("div",{className:"hidden sm:flex items-center max-w-[220px] px-3 py-1.5 rounded-full border border-border bg-surface/70 text-xs text-text-muted truncate",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px] mr-1.5 text-primary",children:"person"}),(0,a.jsx)("span",{className:"truncate",children:o}),(0,a.jsx)("span",{className:"ml-2 shrink-0 rounded-full bg-primary/10 px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-primary",children:"OIDC"})]}),(0,a.jsx)(g,{}),(0,a.jsx)(u.default,{}),(0,a.jsx)(m.default,{onLogout:k})]})]})}function g(){let e=(0,x.C)(e=>e.visible),t=(0,x.C)(e=>e.query),r=(0,x.C)(e=>e.placeholder),s=(0,x.C)(e=>e.setQuery);return e?(0,a.jsxs)("div",{className:"relative w-[160px] sm:w-[220px]",children:[(0,a.jsx)("span",{className:"material-symbols-outlined absolute left-2 top-1/2 -translate-y-1/2 text-text-muted text-[16px] pointer-events-none",children:"search"}),(0,a.jsx)("input",{type:"text",value:t,onChange:e=>s(e.target.value),placeholder:r,className:"w-full h-8 pl-7 pr-7 rounded-lg border border-border bg-surface/60 text-sm focus:outline-none focus:border-primary/50 transition-colors"}),t&&(0,a.jsx)("button",{type:"button",onClick:()=>s(""),className:"absolute right-1 top-1/2 -translate-y-1/2 text-text-muted hover:text-text-main p-0.5 rounded","aria-label":"Clear search",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"close"})})]}):null}f.propTypes={onMenuClick:d().func,showMenuButton:d().bool}},80752:(e,t,r)=>{r.d(t,{default:()=>x});var a=r(95155),s=r(12115),l=r(14051),n=r.n(l),i=r(93308),o=r(1620),d=r(40197);r(14932);var c=r(21931);let m={en:{name:"English",flag:"\uD83C\uDDFA\uD83C\uDDF8"},vi:{name:"Tiếng Việt",flag:"\uD83C\uDDFB\uD83C\uDDF3"},"zh-CN":{name:"简体中文",flag:"\uD83C\uDDE8\uD83C\uDDF3"},"zh-TW":{name:"繁體中文",flag:"\uD83C\uDDF9\uD83C\uDDFC"},ja:{name:"日本語",flag:"\uD83C\uDDEF\uD83C\uDDF5"},"pt-BR":{name:"Portugu\xeas (BR)",flag:"\uD83C\uDDE7\uD83C\uDDF7"},"pt-PT":{name:"Portugu\xeas (PT)",flag:"\uD83C\uDDF5\uD83C\uDDF9"},ko:{name:"한국어",flag:"\uD83C\uDDF0\uD83C\uDDF7"},es:{name:"Espa\xf1ol",flag:"\uD83C\uDDEA\uD83C\uDDF8"},de:{name:"Deutsch",flag:"\uD83C\uDDE9\uD83C\uDDEA"},fr:{name:"Fran\xe7ais",flag:"\uD83C\uDDEB\uD83C\uDDF7"},he:{name:"עברית",flag:"\uD83C\uDDEE\uD83C\uDDF1"},ar:{name:"العربية",flag:"\uD83C\uDDF8\uD83C\uDDE6"},ru:{name:"Русский",flag:"\uD83C\uDDF7\uD83C\uDDFA"},pl:{name:"Polski",flag:"\uD83C\uDDF5\uD83C\uDDF1"},cs:{name:"Čeština",flag:"\uD83C\uDDE8\uD83C\uDDFF"},nl:{name:"Nederlands",flag:"\uD83C\uDDF3\uD83C\uDDF1"},tr:{name:"T\xfcrk\xe7e",flag:"\uD83C\uDDF9\uD83C\uDDF7"},uk:{name:"Українська",flag:"\uD83C\uDDFA\uD83C\uDDE6"},tl:{name:"Tagalog",flag:"\uD83C\uDDF5\uD83C\uDDED"},id:{name:"Indonesia",flag:"\uD83C\uDDEE\uD83C\uDDE9"},th:{name:"ไทย",flag:"\uD83C\uDDF9\uD83C\uDDED"},hi:{name:"हिन्दी",flag:"\uD83C\uDDEE\uD83C\uDDF3"},bn:{name:"বাংলা",flag:"\uD83C\uDDE7\uD83C\uDDE9"},ur:{name:"اردو",flag:"\uD83C\uDDF5\uD83C\uDDF0"},ro:{name:"Rom\xe2nă",flag:"\uD83C\uDDF7\uD83C\uDDF4"},sv:{name:"Svenska",flag:"\uD83C\uDDF8\uD83C\uDDEA"},it:{name:"Italiano",flag:"\uD83C\uDDEE\uD83C\uDDF9"},el:{name:"Ελληνικά",flag:"\uD83C\uDDEC\uD83C\uDDF7"},hu:{name:"Magyar",flag:"\uD83C\uDDED\uD83C\uDDFA"},fi:{name:"Suomi",flag:"\uD83C\uDDEB\uD83C\uDDEE"},da:{name:"Dansk",flag:"\uD83C\uDDE9\uD83C\uDDF0"},no:{name:"Norsk",flag:"\uD83C\uDDF3\uD83C\uDDF4"}};function u({icon:e,label:t,onClick:r,trailing:s,danger:l}){return(0,a.jsxs)("button",{onClick:r,className:`flex items-center gap-3 w-full px-4 py-2.5 text-sm transition-colors ${l?"text-red-500 hover:bg-red-500/10":"text-text-main hover:bg-black/5 dark:hover:bg-white/5"}`,children:[(0,a.jsx)("span",{className:`material-symbols-outlined text-[20px] ${l?"":"text-text-muted"}`,children:e}),(0,a.jsx)("span",{className:"flex-1 text-left",children:t}),s&&(0,a.jsx)("span",{className:"text-base",children:s})]})}function x({onLogout:e}){let[t,r]=(0,s.useState)(!1),[l,n]=(0,s.useState)(!1),[p,h]=(0,s.useState)(!1),[b,f]=(0,s.useState)("en"),{toggleTheme:g,isDark:y}=(0,o.D)(),v=(0,s.useRef)(null);return(0,s.useEffect)(()=>{f(function(){if("u"<typeof document)return"en";let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${i.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):"en";return(0,i.QC)(t)}())},[p]),(0,s.useEffect)(()=>{let e=e=>{v.current&&!v.current.contains(e.target)&&r(!1)};if(t)return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[t]),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"relative",ref:v,children:[(0,a.jsx)("button",{onClick:()=>r(e=>!e),className:"flex items-center justify-center p-2 rounded-lg text-text-muted hover:text-text-main hover:bg-black/5 dark:hover:bg-white/5 transition-all",title:"Menu",children:(0,a.jsx)("span",{className:"material-symbols-outlined",children:"grid_view"})}),t&&(0,a.jsxs)("div",{className:"absolute right-0 top-full mt-2 w-60 bg-surface border border-black/10 dark:border-white/10 rounded-xl shadow-2xl z-50 animate-in fade-in zoom-in-95 duration-150 overflow-hidden py-1",children:[(0,a.jsx)(u,{icon:"history",label:"Change Log",onClick:()=>{r(!1),n(!0)}}),(0,a.jsx)(u,{icon:"language",label:m[b]?.name||b,trailing:m[b]?.flag||"\uD83C\uDF10",onClick:()=>{r(!1),h(!0)}}),(0,a.jsx)(u,{icon:y?"light_mode":"dark_mode",label:"Theme",onClick:()=>{g(),r(!1)}}),(0,a.jsx)(u,{icon:"logout",label:"Logout",danger:!0,onClick:()=>{r(!1),e()}})]})]}),(0,a.jsx)(d.default,{isOpen:l,onClose:()=>n(!1)}),(0,a.jsx)(c.default,{hideTrigger:!0,isOpen:p,onClose:e=>{h(!1),f(e)}})]})}u.propTypes={icon:n().string.isRequired,label:n().string.isRequired,onClick:n().func.isRequired,trailing:n().node,danger:n().bool},x.propTypes={onLogout:n().func.isRequired}},81127:(e,t,r)=>{r.d(t,{ConfirmModal:()=>d,default:()=>o});var a=r(95155),s=r(12115),l=r(31474),n=r(92542),i=r(97677);function o({isOpen:e,onClose:t,title:r,children:n,footer:d,size:c="md",closeOnOverlay:m=!0,showTrafficLights:u=!0,className:x}){return((0,s.useEffect)(()=>(e?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[e]),(0,s.useEffect)(()=>{let r=r=>{"Escape"===r.key&&e&&t()};return document.addEventListener("keydown",r),()=>document.removeEventListener("keydown",r)},[e,t]),e)?(0,a.jsxs)("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4",children:[(0,a.jsx)("div",{className:"absolute inset-0 bg-black/50 backdrop-blur-[2px] fade-in",onClick:m?t:void 0}),(0,a.jsxs)("div",{className:(0,l.cn)("relative w-full bg-surface","border border-border-subtle","rounded-[14px] shadow-[var(--shadow-elev)]","fade-in",{sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg",xl:"max-w-xl",full:"max-w-4xl"}[c],x),children:[(r||u)&&(0,a.jsxs)("div",{className:"flex items-center justify-between p-2 border-b border-border-subtle",children:[(0,a.jsxs)("div",{className:"flex items-center",children:[u&&(0,a.jsxs)("div",{className:"hidden md:flex items-center gap-2 mr-4 ml-2",children:[(0,a.jsx)(i.default,{text:"Close",position:"top",color:"#FF5F56",children:(0,a.jsx)("button",{onClick:t,"aria-label":"Close",title:"Close",className:"w-4 h-4 rounded-full bg-[#FF5F56] hover:brightness-90 transition-all cursor-pointer flex items-center justify-center group/dot",children:(0,a.jsx)("span",{className:"text-[9px] font-bold text-white opacity-0 group-hover/dot:opacity-100 transition-opacity leading-none",children:"✕"})})}),(0,a.jsx)("div",{className:"w-4 h-4 rounded-full bg-[#3a3a3a]/20 dark:bg-white/15 cursor-not-allowed"}),(0,a.jsx)("div",{className:"w-4 h-4 rounded-full bg-[#3a3a3a]/20 dark:bg-white/15 cursor-not-allowed"})]}),r&&(0,a.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:r})]}),(0,a.jsx)("button",{onClick:t,"aria-label":"Close",className:"md:hidden p-1.5 rounded-[10px] text-text-muted hover:bg-surface-2 hover:text-text-main transition-colors",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"close"})})]}),(0,a.jsx)("div",{className:"p-6 max-h-[calc(85vh-100px)] overflow-y-auto custom-scrollbar",children:n}),d&&(0,a.jsx)("div",{className:"flex items-center justify-end gap-3 p-6 border-t border-border-subtle",children:d})]})]}):null}function d({isOpen:e,onClose:t,onConfirm:r,title:s="Confirm",message:l,confirmText:i="Confirm",cancelText:c="Cancel",variant:m="danger",loading:u=!1}){return(0,a.jsx)(o,{isOpen:e,onClose:t,title:s,size:"sm",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.default,{variant:"ghost",onClick:t,disabled:u,children:c}),(0,a.jsx)(n.default,{variant:m,onClick:r,loading:u,children:i})]}),children:(0,a.jsx)("p",{className:"text-text-muted",children:l})})}},84588:(e,t,r)=>{r.d(t,{default:()=>l});var a=r(95155),s=r(31474);function l({children:e,title:t,subtitle:r,icon:n,action:i,padding:o="md",hover:d=!1,elev:c=!1,className:m,...u}){return(0,a.jsxs)("div",{className:(0,s.cn)("bg-surface border border-border-subtle",c?"rounded-[14px] shadow-[var(--shadow-elev)]":"rounded-[14px] shadow-[var(--shadow-soft)]",d&&"hover:shadow-[var(--shadow-warm)] hover:border-brand-500/30 transition-all cursor-pointer",{none:"",xs:"p-3",sm:"p-4",md:"p-6",lg:"p-8"}[o],m),...u,children:[(t||i)&&(0,a.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[n&&(0,a.jsx)("div",{className:"p-2 rounded-[10px] bg-bg text-text-muted",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:n})}),(0,a.jsxs)("div",{children:[t&&(0,a.jsx)("h3",{className:"text-text-main font-semibold",children:t}),r&&(0,a.jsx)("p",{className:"text-sm text-text-muted",children:r})]})]}),i]}),e]})}l.Section=function({children:e,className:t,...r}){return(0,a.jsx)("div",{className:(0,s.cn)("p-4 rounded-[10px]","bg-bg border border-border-subtle",t),...r,children:e})},l.Row=function({children:e,className:t,...r}){return(0,a.jsx)("div",{className:(0,s.cn)("p-3 -mx-3 px-3 transition-colors","border-b border-border-subtle last:border-b-0","hover:bg-surface-2/50",t),...r,children:e})},l.ListItem=function({children:e,actions:t,className:r,...l}){return(0,a.jsxs)("div",{className:(0,s.cn)("group flex items-center justify-between p-3 -mx-3 px-3","border-b border-border-subtle last:border-b-0","hover:bg-surface-2/50 transition-colors",r),...l,children:[(0,a.jsx)("div",{className:"flex-1 min-w-0",children:e}),t&&(0,a.jsx)("div",{className:"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:t})]})}},86671:(e,t,r)=>{r.d(t,{default:()=>u});var a=r(95155),s=r(12115),l=r(65921),n=r(92622),i=r(74891),o=r(73321);let d=["/dashboard/api-keys"];function c(e){return d.some(t=>e===t||e.startsWith(`${t}/`))}function m({children:e}){let t=(0,o.usePathname)(),r=(0,o.useRouter)(),[l,n]=(0,s.useState)(!1),[i,d]=(0,s.useState)(!0);return((0,s.useEffect)(()=>{let e=!1;return fetch("/api/auth/status",{cache:"no-store"}).then(e=>e.json()).then(a=>{if(e)return;let s=a?.isAdmin!==!1;d(s),s||c(t)||r.replace("/dashboard/api-keys")}).catch(()=>{}).finally(()=>{e||n(!0)}),()=>{e=!0}},[t,r]),l)?i||c(t)?e:(0,a.jsx)("div",{className:"flex min-h-[50vh] items-center justify-center text-sm text-text-muted",children:"Redirecting..."}):(0,a.jsxs)("div",{className:"flex min-h-[50vh] items-center justify-center text-sm text-text-muted",children:[(0,a.jsx)("span",{className:"material-symbols-outlined mr-2 animate-spin",children:"progress_activity"}),"Loading dashboard..."]})}function u({children:e}){let[t,r]=(0,s.useState)(!1),o=(0,l.i)(e=>e.notifications),d=(0,l.i)(e=>e.removeNotification);return(0,a.jsxs)("div",{className:"min-h-screen bg-background text-text-main",children:[(0,a.jsx)("div",{className:"pointer-events-none fixed inset-0 bg-[linear-gradient(to_right,rgba(99,102,241,0.07)_1px,transparent_1px),linear-gradient(to_bottom,rgba(99,102,241,0.07)_1px,transparent_1px)] bg-size-[32px_32px]"}),(0,a.jsx)("div",{className:"fixed right-4 top-4 z-50 flex w-[min(420px,calc(100vw-2rem))] flex-col gap-2",children:o.map(e=>{var t;let r="success"===(t=e.type)?{wrapper:"border-green-500/30 bg-green-500/10 text-green-600 dark:text-green-400",icon:"check_circle"}:"error"===t?{wrapper:"border-red-500/30 bg-red-500/10 text-red-600 dark:text-red-400",icon:"error"}:"warning"===t?{wrapper:"border-amber-500/30 bg-amber-500/10 text-amber-600 dark:text-amber-400",icon:"warning"}:{wrapper:"border-blue-500/30 bg-blue-500/10 text-blue-600 dark:text-blue-400",icon:"info"};return(0,a.jsx)("div",{className:`rounded-xl border px-4 py-3 shadow-lg backdrop-blur ${r.wrapper}`,children:(0,a.jsxs)("div",{className:"flex items-start gap-3",children:[(0,a.jsx)("span",{className:"material-symbols-outlined mt-0.5 text-lg",children:r.icon}),(0,a.jsxs)("div",{className:"min-w-0 flex-1 text-sm",children:[e.title?(0,a.jsx)("div",{className:"font-semibold",children:e.title}):null,(0,a.jsx)("div",{children:e.message})]}),e.dismissible?(0,a.jsx)("button",{onClick:()=>d(e.id),className:"text-current/70 hover:text-current","aria-label":"Dismiss notification",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-lg",children:"close"})}):null]})},e.id)})}),t&&(0,a.jsx)("div",{className:"fixed inset-0 z-40 bg-black/40 lg:hidden",onClick:()=>r(!1)}),(0,a.jsx)("aside",{className:"fixed inset-y-0 left-0 z-40 hidden w-72 border-r border-border bg-surface/90 backdrop-blur lg:block",children:(0,a.jsx)(n.default,{})}),(0,a.jsx)("aside",{className:`fixed inset-y-0 left-0 z-50 w-72 border-r border-border bg-surface/95 backdrop-blur transition-transform lg:hidden ${t?"translate-x-0":"-translate-x-full"}`,children:(0,a.jsx)(n.default,{onClose:()=>r(!1)})}),(0,a.jsxs)("main",{className:"relative z-10 min-h-screen lg:pl-72",children:[(0,a.jsx)(i.default,{onMenuClick:()=>r(!0)}),(0,a.jsx)("div",{className:"w-full max-w-none min-w-0 px-4 py-6 sm:px-6 lg:px-8",children:(0,a.jsx)(m,{children:e})})]})]})}},90882:(e,t,r)=>{r.d(t,{default:()=>d});var a=r(95155),s=r(12115),l=r(14051),n=r.n(l),i=r(35497),o=r(11059);function d({isOpen:e,provider:t,providerInfo:r,onSuccess:l,onClose:n,oauthMeta:c,idcConfig:m}){let[u,x]=(0,s.useState)("waiting"),[p,h]=(0,s.useState)(null),[b,f]=(0,s.useState)(""),[g,y]=(0,s.useState)(null),[v,j]=(0,s.useState)(!1),[N,w]=(0,s.useState)(null),[k,C]=(0,s.useState)(!1),S=(0,s.useRef)(null),T=(0,s.useRef)(!1),{copied:I,copy:$}=(0,o.C)(),[A,P]=(0,s.useState)(!1),[O,R]=(0,s.useState)("/callback?code=..."),M=(0,s.useRef)(!1);(0,s.useEffect)(()=>{P("localhost"===window.location.hostname||"127.0.0.1"===window.location.hostname),R(`${window.location.origin}/callback?code=...`)},[]);let _=(0,s.useCallback)(async(e,r)=>{if(p)try{let a=await fetch(`/api/oauth/${t}/exchange`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:e,redirectUri:p.redirectUri,codeVerifier:p.codeVerifier,state:r,...c?{meta:c}:{}})}),s=await a.json();if(!a.ok)throw Error(s.error);x("success"),l?.()}catch(e){y(e.message),x("error")}},[p,t,l]),L=(0,s.useCallback)(async e=>{if(p?.state)try{let t=await fetch("/api/oauth/xai/manual-code",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:e,state:p.state})}),r=await t.json();if(!t.ok)throw Error(r.error);x("success"),l?.()}catch(e){y(e.message),x("error")}},[p,l]),E=(0,s.useCallback)(async(e,r,a,s)=>{T.current=!1,C(!0);for(let n=0;n<60;n++){if(T.current){console.log("[OAuthModal] Polling aborted"),C(!1);return}if(await new Promise(e=>setTimeout(e,1e3*a)),T.current){console.log("[OAuthModal] Polling aborted after sleep"),C(!1);return}try{let n=await fetch(`/api/oauth/${t}/poll`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({deviceCode:e,codeVerifier:r,extraData:s})}),i=await n.json();if(i.success){T.current=!0,x("success"),C(!1),l?.();return}if("expired_token"===i.error||"access_denied"===i.error)throw Error(i.errorDescription||i.error);"slow_down"===i.error&&(a=Math.min(a+5,30))}catch(e){y(e.message),x("error"),C(!1);return}}y("Authorization timeout"),x("error"),C(!1)},[t,l]),z=(0,s.useCallback)(async()=>{if(t)try{let e;if(y(null),["github","qwen","kiro","kimi-coding","kilocode","codebuddy"].includes(t)){j(!0),x("waiting");let e=new URL(`/api/oauth/${t}/device-code`,window.location.origin);"kiro"===t&&m?.startUrl&&(e.searchParams.set("start_url",m.startUrl),m.region&&e.searchParams.set("region",m.region),e.searchParams.set("auth_method","idc"));let r=await fetch(e.toString()),a=await r.json();if(!r.ok)throw Error(a.error);w(a);let s=a.verification_uri_complete||a.verification_uri;s&&window.open(s,"_blank","noopener,noreferrer");let l="kiro"===t?{_clientId:a._clientId,_clientSecret:a._clientSecret,_region:a._region,_authMethod:a._authMethod,_startUrl:a._startUrl}:null;E(a.device_code,a.codeVerifier,a.interval||5,l);return}let r=window.location.port||("https:"===window.location.protocol?"443":"80");e="codex"===t?"http://localhost:1455/auth/callback":"xai"===t?"http://127.0.0.1:56121/callback":`http://localhost:${r}/callback`;let a=new URL(`/api/oauth/${t}/authorize`,window.location.origin);a.searchParams.set("redirect_uri",e),c&&Object.entries(c).forEach(([e,t])=>{t&&a.searchParams.set(e,t)});let s=await fetch(a.toString()),l=await s.json();if(!s.ok)throw Error(l.error);let n=!1,i=!1;if("codex"===t)try{let t=new URL("/api/oauth/codex/start-proxy",window.location.origin);t.searchParams.set("app_port",r),t.searchParams.set("state",l.state),t.searchParams.set("code_verifier",l.codeVerifier),t.searchParams.set("redirect_uri",e);let a=await fetch(t.toString()),s=await a.json();n=s.success,i=!!s.serverSide}catch{n=!1}let o=!1,d=!1;if("xai"===t)try{let t=new URL("/api/oauth/xai/start-proxy",window.location.origin);t.searchParams.set("app_port",r),t.searchParams.set("state",l.state),t.searchParams.set("code_verifier",l.codeVerifier),t.searchParams.set("redirect_uri",e);let a=await fetch(t.toString()),s=await a.json();if(o=s.success,d=!!s.serverSide,!o&&"port_busy"===s.reason)throw Error("Port 56121 in use; close the conflicting process and retry")}catch(e){if(e?.message)throw e;o=!1}h({...l,redirectUri:e,codexServerSide:i,xaiServerSide:d}),"codex"===t&&n||"xai"===t&&o||A&&"codex"!==t&&"xai"!==t?(x("waiting"),S.current=window.open(l.authUrl,"oauth_popup","width=600,height=700"),S.current||x("input")):(x("input"),window.open(l.authUrl,"_blank"))}catch(e){y(e.message),x("error")}},[t,A,E,c,m]);(0,s.useEffect)(()=>{e&&t?(h(null),f(""),y(null),j(!1),w(null),C(!1),T.current=!1,z()):e||(T.current=!0,"codex"===t?fetch("/api/oauth/codex/stop-proxy").catch(()=>{}):"xai"===t&&fetch("/api/oauth/xai/stop-proxy").catch(()=>{}))},[e,t,z]),(0,s.useEffect)(()=>{let e=p?.codexServerSide?"codex":p?.xaiServerSide?"xai":null;if(!e||!p?.state||M.current)return;let t=!1,r=0,a=async()=>{if(!t&&!M.current){r+=1;try{let r=await fetch(`/api/oauth/${e}/poll-status?state=${encodeURIComponent(p.state)}`),a=await r.json();if(t||M.current)return;if("done"===a.status){M.current=!0,x("success"),l?.();return}if("error"===a.status){M.current=!0,y(a.error||"Authentication failed"),x("error");return}}catch{}if(r>=200){M.current=!0,y("Authentication timeout"),x("error");return}setTimeout(a,1500)}};return setTimeout(a,1500),()=>{t=!0}},[p,l]),(0,s.useEffect)(()=>{let e;if(!p)return;M.current=!1;let t=async e=>{if(M.current)return;let{code:t,state:r,error:a,errorDescription:s}=e;if(a){M.current=!0,y(s||a),x("error");return}t&&(M.current=!0,await _(t,r))},r=e=>{let r=e.origin.includes("localhost")||e.origin.includes("127.0.0.1"),a=e.origin===window.location.origin;(r||a)&&e.data?.type==="oauth_callback"&&t(e.data.data)};window.addEventListener("message",r);try{(e=new BroadcastChannel("oauth_callback")).onmessage=e=>t(e.data)}catch(e){console.log("BroadcastChannel not supported")}let a=e=>{if("oauth_callback"===e.key&&e.newValue)try{let r=JSON.parse(e.newValue);t(r),localStorage.removeItem("oauth_callback")}catch(e){console.log("Failed to parse localStorage data")}};window.addEventListener("storage",a);try{let e=localStorage.getItem("oauth_callback");if(e){let r=JSON.parse(e);r.timestamp&&Date.now()-r.timestamp<3e4&&t(r),localStorage.removeItem("oauth_callback")}}catch{}return()=>{window.removeEventListener("message",r),window.removeEventListener("storage",a),e&&e.close()}},[p,_]);let q=async()=>{try{y(null);let e=b.trim();if(e.startsWith("eyJ")&&e.includes("."))return void await _(e,null);if("xai"===t&&e&&!e.includes("://")&&!e.includes("?")&&!e.includes("code="))return void await L(e);let r=new URL(e),a=r.searchParams.get("code"),s=r.searchParams.get("state"),l=r.searchParams.get("error");if(l)throw Error(r.searchParams.get("error_description")||l);if(!a)throw Error("xai"===t?"Paste the callback URL or copied xAI code":"No authorization code found in URL");await _(a,s)}catch(e){y(e.message),x("error")}},U=(0,s.useCallback)(()=>{"codex"===t?fetch("/api/oauth/codex/stop-proxy").catch(()=>{}):"xai"===t&&fetch("/api/oauth/xai/stop-proxy").catch(()=>{}),n()},[n,t]);if(!t||!r)return null;let D="xai"===t,F=N?.verification_uri_complete||N?.verification_uri||"",W=D?"Connect Grok Build OAuth":`Connect ${r.name}`;return(0,a.jsx)(i.aF,{isOpen:e,title:W,onClose:U,size:"lg",children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[("waiting"===u||"input"===u)&&!v&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 border border-border rounded-lg bg-sidebar/50",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-base text-primary animate-spin",children:"progress_activity"}),(0,a.jsx)("span",{className:"text-sm",children:D?"Waiting for Grok Build OAuth…":"Waiting for popup authorization…"})]}),(0,a.jsxs)("div",{className:"flex items-center gap-3 my-1",children:[(0,a.jsx)("div",{className:"flex-1 h-px bg-border"}),(0,a.jsx)("span",{className:"text-xs text-text-muted uppercase tracking-wider",children:"Or paste callback URL manually"}),(0,a.jsx)("div",{className:"flex-1 h-px bg-border"})]}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("p",{className:"text-sm font-medium mb-2",children:["Step 1: Open this ",D?"Grok Build OAuth URL":"URL"," in your browser"]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(i.pd,{value:p?.authUrl||"",readOnly:!0,className:"flex-1 font-mono text-xs"}),(0,a.jsx)(i.$n,{variant:"secondary",icon:"auth_url"===I?"check":"content_copy",onClick:()=>$(p?.authUrl,"auth_url"),disabled:!p?.authUrl,children:"Copy"})]})]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("p",{className:"text-sm font-medium mb-2",children:["Step 2: Paste the ","xai"===t?"callback URL or copied code":"callback URL"," here"]}),(0,a.jsx)("p",{className:"text-xs text-text-muted mb-2",children:"xai"===t?"If xAI shows a code instead of redirecting, paste that code here.":"After authorization, copy the full URL from your browser."}),(0,a.jsx)(i.pd,{value:b,onChange:e=>f(e.target.value),placeholder:D?"http://127.0.0.1:56121/callback?code=... or copied code":O,className:"font-mono text-xs"})]})]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(i.$n,{onClick:q,fullWidth:!0,disabled:!b,children:"Connect"}),(0,a.jsx)(i.$n,{onClick:U,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]}),"waiting"===u&&v&&N&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"text-center py-4",children:[(0,a.jsx)("p",{className:"text-sm text-text-muted mb-4",children:"Visit the login URL below and authorize:"}),(0,a.jsxs)("div",{className:"bg-sidebar p-4 rounded-lg mb-4",children:[(0,a.jsx)("p",{className:"text-xs text-text-muted mb-1",children:"Login URL"}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("code",{className:"flex-1 text-sm break-all",children:F}),(0,a.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"login_url"===I?"check":"content_copy",onClick:()=>$(F,"login_url"),disabled:!F}),(0,a.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"open_in_new",onClick:()=>window.open(F,"_blank","noopener,noreferrer"),disabled:!F,children:"Open"})]})]}),(0,a.jsxs)("div",{className:"bg-primary/10 p-4 rounded-lg",children:[(0,a.jsx)("p",{className:"text-xs text-text-muted mb-1",children:"Your Code"}),(0,a.jsxs)("div",{className:"flex items-center justify-center gap-2",children:[(0,a.jsx)("p",{className:"text-2xl font-mono font-bold text-primary",children:N.user_code}),(0,a.jsx)(i.$n,{size:"sm",variant:"ghost",icon:"user_code"===I?"check":"content_copy",onClick:()=>$(N.user_code,"user_code")})]})]})]}),k&&(0,a.jsxs)("div",{className:"flex items-center justify-center gap-2 text-sm text-text-muted",children:[(0,a.jsx)("span",{className:"material-symbols-outlined animate-spin",children:"progress_activity"}),"Waiting for authorization..."]})]}),"success"===u&&(0,a.jsxs)("div",{className:"text-center py-6",children:[(0,a.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-green-100 dark:bg-green-900/30 flex items-center justify-center",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-3xl text-green-600",children:"check_circle"})}),(0,a.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connected Successfully!"}),(0,a.jsxs)("p",{className:"text-sm text-text-muted mb-4",children:["Your ",r.name," account has been connected."]}),(0,a.jsx)(i.$n,{onClick:U,fullWidth:!0,children:"Done"})]}),"error"===u&&(0,a.jsxs)("div",{className:"text-center py-6",children:[(0,a.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-red-100 dark:bg-red-900/30 flex items-center justify-center",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-3xl text-red-600",children:"error"})}),(0,a.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connection Failed"}),(0,a.jsx)("p",{className:"text-sm text-red-600 mb-4",children:g}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(i.$n,{onClick:z,variant:"secondary",fullWidth:!0,children:"Try Again"}),(0,a.jsx)(i.$n,{onClick:U,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})]})})}d.propTypes={isOpen:n().bool.isRequired,provider:n().string,providerInfo:n().shape({name:n().string}),onSuccess:n().func,onClose:n().func.isRequired,oauthMeta:n().object,idcConfig:n().shape({startUrl:n().string,region:n().string})}},91450:(e,t,r)=>{r.d(t,{default:()=>i});var a=r(95155),s=r(14051),l=r.n(s),n=r(38587);function i({children:e}){return(0,a.jsxs)("div",{className:"min-h-screen flex flex-col relative bg-bg transition-colors duration-500 overflow-x-hidden selection:bg-primary/20 selection:text-primary",children:[(0,a.jsx)("div",{className:"fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[800px] h-[800px] bg-primary/5 dark:bg-primary/5 rounded-full blur-[100px] pointer-events-none z-0"}),(0,a.jsx)("div",{className:"fixed bottom-0 right-0 w-[600px] h-[600px] bg-orange-200/20 dark:bg-orange-900/10 rounded-full blur-[120px] pointer-events-none z-0 translate-y-1/3 translate-x-1/3"}),(0,a.jsx)("div",{className:"absolute top-6 right-6 z-20",children:(0,a.jsx)(n.default,{variant:"card"})}),(0,a.jsx)("main",{className:"flex-1 flex flex-col items-center justify-center p-4 sm:p-6 z-10 w-full h-full",children:e})]})}i.propTypes={children:l().node.isRequired}},92173:(e,t,r)=>{r.d(t,{default:()=>c});var a=r(95155),s=r(98500),l=r.n(s),n=r(90620);let i=[{label:"Features",href:"#features"},{label:"Pricing",href:"#pricing"},{label:"Changelog",href:"#"}],o=[{label:"Documentation",href:"#"},{label:"API Reference",href:"#"},{label:"Help Center",href:"#"}],d=[{label:"About",href:"#"},{label:"Blog",href:"#"},{label:"Contact",href:"#"}];function c(){return(0,a.jsx)("footer",{className:"bg-bg border-t border-border pt-16 pb-12",children:(0,a.jsxs)("div",{className:"container mx-auto px-4 sm:px-6 lg:px-8",children:[(0,a.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 gap-10 mb-12",children:[(0,a.jsxs)("div",{className:"col-span-2 lg:col-span-2",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 mb-6",children:[(0,a.jsx)("div",{className:"size-6 text-primary",children:(0,a.jsx)("svg",{className:"w-full h-full",fill:"currentColor",viewBox:"0 0 48 48",children:(0,a.jsx)("path",{clipRule:"evenodd",d:"M12.0799 24L4 19.2479L9.95537 8.75216L18.04 13.4961L18.0446 4H29.9554L29.96 13.4961L38.0446 8.75216L44 19.2479L35.92 24L44 28.7521L38.0446 39.2479L29.96 34.5039L29.9554 44H18.0446L18.04 34.5039L9.95537 39.2479L4 28.7521L12.0799 24Z",fillRule:"evenodd"})})}),(0,a.jsx)("span",{className:"text-xl font-bold text-text-main",children:n.vQ.name})]}),(0,a.jsx)("p",{className:"text-text-muted mb-6 max-w-sm font-light",children:"The unified interface for modern AI infrastructure. Secure, observable, and scalable."}),(0,a.jsxs)("div",{className:"flex gap-4",children:[(0,a.jsx)("a",{href:"#",className:"text-gray-400 hover:text-primary transition-colors","aria-label":"Twitter",children:(0,a.jsx)("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M22.46 6c-.77.35-1.6.58-2.46.69.88-.53 1.56-1.37 1.88-2.38-.83.5-1.75.85-2.72 1.05C18.37 4.5 17.26 4 16 4c-2.35 0-4.27 1.92-4.27 4.29 0 .34.04.67.11.98C8.28 9.09 5.11 7.38 3 4.79c-.37.63-.58 1.37-.58 2.15 0 1.49.75 2.81 1.91 3.56-.71 0-1.37-.2-1.95-.5v.03c0 2.08 1.48 3.82 3.44 4.21a4.22 4.22 0 0 1-1.93.07 4.28 4.28 0 0 0 4 2.98 8.521 8.521 0 0 1-5.33 1.84c-.34 0-.68-.02-1.02-.06C3.44 20.29 5.7 21 8.12 21 16 21 20.33 14.46 20.33 8.79c0-.19 0-.37-.01-.56.84-.6 1.56-1.36 2.14-2.23z"})})}),(0,a.jsx)("a",{href:"#",className:"text-gray-400 hover:text-primary transition-colors","aria-label":"GitHub",children:(0,a.jsx)("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0 1 12 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0 0 22 12.017C22 6.484 17.522 2 12 2z"})})})]})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{className:"font-semibold text-text-main mb-4",children:"Product"}),(0,a.jsx)("ul",{className:"flex flex-col gap-3 text-sm text-text-muted font-light",children:i.map(e=>(0,a.jsx)("li",{children:(0,a.jsx)(l(),{href:e.href,className:"hover:text-primary transition-colors",children:e.label})},e.label))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{className:"font-semibold text-text-main mb-4",children:"Resources"}),(0,a.jsx)("ul",{className:"flex flex-col gap-3 text-sm text-text-muted font-light",children:o.map(e=>(0,a.jsx)("li",{children:(0,a.jsx)(l(),{href:e.href,className:"hover:text-primary transition-colors",children:e.label})},e.label))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{className:"font-semibold text-text-main mb-4",children:"Company"}),(0,a.jsx)("ul",{className:"flex flex-col gap-3 text-sm text-text-muted font-light",children:d.map(e=>(0,a.jsx)("li",{children:(0,a.jsx)(l(),{href:e.href,className:"hover:text-primary transition-colors",children:e.label})},e.label))})]})]}),(0,a.jsxs)("div",{className:"border-t border-border pt-8 flex flex-col md:flex-row justify-between items-center gap-4",children:[(0,a.jsxs)("p",{className:"text-sm text-text-muted",children:["\xa9 ",new Date().getFullYear()," ",n.vQ.name," Inc. All rights reserved."]}),(0,a.jsxs)("div",{className:"flex gap-6 text-sm text-text-muted",children:[(0,a.jsx)(l(),{href:"#",className:"hover:text-primary transition-colors",children:"Privacy Policy"}),(0,a.jsx)(l(),{href:"#",className:"hover:text-primary transition-colors",children:"Terms of Service"})]})]})]})})}},92542:(e,t,r)=>{r.d(t,{default:()=>i});var a=r(95155),s=r(31474);let l={primary:"bg-brand-500 hover:bg-brand-600 text-white shadow-sm disabled:bg-surface-3 disabled:text-text-muted",secondary:"bg-surface-2 hover:bg-surface-3 text-text-main border border-border disabled:opacity-50",outline:"border border-border text-text-main hover:bg-surface-2 hover:border-brand-500/40",ghost:"text-text-muted hover:bg-surface-2 hover:text-text-main",danger:"bg-red-500 hover:bg-red-600 text-white shadow-sm disabled:bg-surface-3 disabled:text-text-muted",success:"bg-green-600 hover:bg-green-700 text-white shadow-sm disabled:bg-surface-3 disabled:text-text-muted"},n={sm:"h-7 px-3 text-xs rounded-[8px]",md:"h-9 px-4 text-sm rounded-[10px]",lg:"h-11 px-6 text-sm rounded-[10px]"};function i({children:e,variant:t="primary",size:r="md",icon:o,iconRight:d,disabled:c=!1,loading:m=!1,fullWidth:u=!1,className:x,...p}){return(0,a.jsxs)("button",{className:(0,s.cn)("inline-flex items-center justify-center gap-2 font-semibold transition-all duration-150 ease-out cursor-pointer","active:scale-[0.97] disabled:opacity-50 disabled:cursor-not-allowed disabled:active:scale-100",l[t],n[r],u&&"w-full",x),disabled:c||m,...p,children:[m?(0,a.jsx)("span",{className:"material-symbols-outlined animate-spin text-[18px]",children:"progress_activity"}):o?(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:o}):null,e,d&&!m&&(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:d})]})}},92622:(e,t,r)=>{r.d(t,{default:()=>h});var a=r(95155),s=r(12115),l=r(14051),n=r.n(l),i=r(98500),o=r.n(i),d=r(73321),c=r(31474),m=r(90620);let u=[{href:"/dashboard/endpoint",label:"Endpoint",icon:"api"},{href:"/dashboard/api-keys",label:"API Keys",icon:"vpn_key"},{href:"/dashboard/providers",label:"Providers",icon:"dns"},{href:"/dashboard/combos",label:"Combos",icon:"layers"},{href:"/dashboard/usage",label:"Usage",icon:"bar_chart"},{href:"/dashboard/quota",label:"Quota Tracker",icon:"data_usage"},{href:"/dashboard/media-providers/web",label:"Media / Web",icon:"perm_media"},{href:"/dashboard/mitm",label:"AI Traffic Gateway",icon:"security"},{href:"/dashboard/prompt-logs",label:"Prompt Logs",icon:"manage_search"},{href:"/dashboard/cli-tools",label:"CLI Tools",icon:"terminal"},{href:"/dashboard/proxy-pools",label:"Proxy Pools",icon:"lan"},{href:"/dashboard/skills",label:"Skills",icon:"extension"},{href:"/dashboard/profile",label:"Settings",icon:"settings"},{href:"/dashboard/console-log",label:"Console Log",icon:"terminal"},{href:"/dashboard/translator",label:"Translator",icon:"translate"}],x=[{href:"/dashboard/api-keys",label:"API Keys",icon:"vpn_key"}];function p({href:e,label:t,icon:r,active:s,onClick:l}){return(0,a.jsxs)(o(),{href:e,onClick:l,className:(0,c.cn)("group flex items-center gap-3 rounded-lg px-3 py-2 text-sm font-medium transition-all",s?"bg-primary/10 text-primary":"text-text-muted hover:bg-surface-2 hover:text-text-main"),children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:r}),(0,a.jsx)("span",{className:"truncate",children:t})]})}function h({onClose:e}){let t=(0,d.usePathname)(),r=(0,d.useRouter)(),[l,n]=(0,s.useState)(""),[i,o]=(0,s.useState)(""),[c,b]=(0,s.useState)(!0);(0,s.useEffect)(()=>{let e=!1;return fetch("/api/auth/status",{cache:"no-store"}).then(e=>e.json()).then(t=>{e||(n(t?.displayName||t?.userId||""),o(t?.loginMethod||""),b(t?.isAdmin!==!1))}).catch(()=>{e||(n(""),o(""),b(!0))}),()=>{e=!0}},[]);let f=()=>e?.(),g=async()=>{try{await fetch("/api/auth/logout",{method:"POST"})}catch{}r.push("/login"),r.refresh()};return(0,a.jsxs)("div",{className:"flex h-full flex-col p-4",children:[(0,a.jsxs)("div",{className:"mb-5 rounded-2xl bg-primary/10 p-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-3xl text-primary",children:"hub"}),(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("div",{className:"truncate text-lg font-bold text-text-main",children:"Blue Router"}),(0,a.jsxs)("div",{className:"text-xs text-text-muted",children:["v",m.vQ?.version||"local"]})]})]}),l?(0,a.jsxs)("div",{className:"mt-3 rounded-xl bg-background/70 px-3 py-2 text-xs text-text-muted",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 font-medium text-text-main",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-base",children:"person"}),(0,a.jsx)("span",{className:"truncate",children:l})]}),(0,a.jsxs)("div",{className:"mt-1",children:[c?"Admin":"User",i?` \xb7 ${i}`:""]})]}):null]}),(0,a.jsx)("nav",{className:"flex-1 space-y-1 overflow-y-auto pr-1",children:(c?u:x).map(e=>{var r;return(0,a.jsx)(p,{...e,active:"/dashboard/endpoint"===(r=e.href)?"/dashboard"===t||t.startsWith("/dashboard/endpoint"):t===r||t.startsWith(`${r}/`),onClick:f},e.href)})}),(0,a.jsx)("div",{className:"mt-4 border-t border-border pt-4",children:(0,a.jsxs)("button",{onClick:g,className:"flex w-full items-center justify-center gap-2 rounded-xl border border-border px-3 py-2 text-sm font-medium text-text-muted transition hover:bg-surface-2 hover:text-text-main",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"logout"}),"Logout"]})})]})}p.propTypes={href:n().string.isRequired,label:n().string.isRequired,icon:n().string.isRequired,active:n().bool,onClick:n().func},h.propTypes={onClose:n().func}},94230:(e,t,r)=>{r.d(t,{default:()=>d});var a=r(95155),s=r(12115),l=r(14051),n=r.n(l),i=r(35497),o=r(11059);function d({isOpen:e,provider:t,onSuccess:r,onClose:l}){let[n,c]=(0,s.useState)("loading"),[m,u]=(0,s.useState)(""),[x,p]=(0,s.useState)(null),[h,b]=(0,s.useState)(""),[f,g]=(0,s.useState)(null),{copied:y,copy:v}=(0,o.C)();(0,s.useEffect)(()=>{e&&t&&(async()=>{try{g(null),c("loading");let e=await fetch(`/api/oauth/kiro/social-authorize?provider=${t}`),r=await e.json();if(!e.ok)throw Error(r.error);p(r),u(r.authUrl),c("input"),window.open(r.authUrl,"_blank")}catch(e){g(e.message),c("error")}})()},[e,t]);let j=async()=>{try{let e;g(null);try{e=new URL(h)}catch(e){throw Error("Invalid callback URL format")}let a=e.searchParams.get("code");e.searchParams.get("state");let s=e.searchParams.get("error");if(s)throw Error(e.searchParams.get("error_description")||s);if(!a)throw Error("No authorization code found in URL");let l=await fetch("/api/oauth/kiro/social-exchange",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:a,codeVerifier:x.codeVerifier,provider:t})}),n=await l.json();if(!l.ok)throw Error(n.error);c("success"),r?.()}catch(e){g(e.message),c("error")}},N="google"===t?"Google":"GitHub";return(0,a.jsx)(i.aF,{isOpen:e,title:`Connect Kiro via ${N}`,onClose:l,size:"lg",children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:["loading"===n&&(0,a.jsxs)("div",{className:"text-center py-6",children:[(0,a.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-primary/10 flex items-center justify-center",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-3xl text-primary animate-spin",children:"progress_activity"})}),(0,a.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Initializing..."}),(0,a.jsxs)("p",{className:"text-sm text-text-muted",children:["Setting up ",N," authentication"]})]}),"input"===n&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 1: Open this URL in your browser"}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(i.pd,{value:m,readOnly:!0,className:"flex-1 font-mono text-xs"}),(0,a.jsx)(i.$n,{variant:"secondary",icon:"auth_url"===y?"check":"content_copy",onClick:()=>v(m,"auth_url"),children:"Copy"})]})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-sm font-medium mb-2",children:"Step 2: Paste the callback URL here"}),(0,a.jsx)("p",{className:"text-xs text-text-muted mb-2",children:"After authorization, copy the full URL from your browser address bar."}),(0,a.jsx)(i.pd,{value:h,onChange:e=>b(e.target.value),placeholder:"kiro://kiro.kiroAgent/authenticate-success?code=...",className:"font-mono text-xs"})]})]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(i.$n,{onClick:j,fullWidth:!0,disabled:!h,children:"Connect"}),(0,a.jsx)(i.$n,{onClick:l,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]}),"success"===n&&(0,a.jsxs)("div",{className:"text-center py-6",children:[(0,a.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-green-100 dark:bg-green-900/30 flex items-center justify-center",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-3xl text-green-600",children:"check_circle"})}),(0,a.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connected Successfully!"}),(0,a.jsxs)("p",{className:"text-sm text-text-muted mb-4",children:["Your Kiro account via ",N," has been connected."]}),(0,a.jsx)(i.$n,{onClick:l,fullWidth:!0,children:"Done"})]}),"error"===n&&(0,a.jsxs)("div",{className:"text-center py-6",children:[(0,a.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-red-100 dark:bg-red-900/30 flex items-center justify-center",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-3xl text-red-600",children:"error"})}),(0,a.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connection Failed"}),(0,a.jsx)("p",{className:"text-sm text-red-600 mb-4",children:f}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(i.$n,{onClick:()=>c("input"),variant:"secondary",fullWidth:!0,children:"Try Again"}),(0,a.jsx)(i.$n,{onClick:l,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})]})})}d.propTypes={isOpen:n().bool.isRequired,provider:n().oneOf(["google","github"]).isRequired,onSuccess:n().func,onClose:n().func.isRequired}},95088:(e,t,r)=>{r.d(t,{default:()=>d});var a=r(95155),s=r(12115),l=r(14051),n=r.n(l),i=r(35497);let o="https://gitlab.com";function d({isOpen:e,providerInfo:t,onSuccess:r,onClose:l}){let n,[c,m]=(0,s.useState)(null),[u,x]=(0,s.useState)(o),[p,h]=(0,s.useState)(""),[b,f]=(0,s.useState)(""),[g,y]=(0,s.useState)(""),[v,j]=(0,s.useState)(!1),[N,w]=(0,s.useState)(null),[k,C]=(0,s.useState)(!1),[S,T]=(0,s.useState)(null),I=()=>{m(null),x(o),h(""),f(""),y(""),w(null),j(!1),C(!1),T(null),l()},$=async()=>{if(!g.trim())return void w("Personal Access Token is required");j(!0),w(null);try{let e=await fetch("/api/oauth/gitlab/pat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:g.trim(),baseUrl:u.trim()||o})}),t=await e.json();if(!e.ok)throw Error(t.error||"Authentication failed");r?.(),I()}catch(e){w(e.message)}finally{j(!1)}};return e?k&&S?(0,a.jsx)(i.LF,{isOpen:!0,provider:"gitlab",providerInfo:t,oauthMeta:S,onSuccess:()=>{r?.(),I()},onClose:()=>{C(!1),T(null)}}):(0,a.jsx)(i.aF,{isOpen:e,title:"Connect GitLab Duo",onClose:I,size:"lg",children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[!c&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("p",{className:"text-sm text-text-muted",children:"Choose how to authenticate with GitLab Duo:"}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-3",children:[(0,a.jsxs)("button",{onClick:()=>m("oauth"),className:"flex flex-col items-center gap-2 p-4 rounded-lg border border-border hover:border-primary hover:bg-primary/5 transition-colors text-left",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-2xl text-primary",children:"lock_open"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:"OAuth App"}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Use a GitLab OAuth application"})]})]}),(0,a.jsxs)("button",{onClick:()=>m("pat"),className:"flex flex-col items-center gap-2 p-4 rounded-lg border border-border hover:border-primary hover:bg-primary/5 transition-colors text-left",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-2xl text-primary",children:"key"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:"Personal Access Token"}),(0,a.jsx)("p",{className:"text-xs text-text-muted",children:"Use a GitLab PAT with api scope"})]})]})]})]}),"oauth"===c&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("p",{className:"text-xs text-text-muted",children:["Create an OAuth app at"," ",(0,a.jsx)("a",{href:`${u.trim()||o}/-/profile/applications`,target:"_blank",rel:"noreferrer",className:"text-primary underline",children:"GitLab Applications"})," ","with redirect URI"," ",(0,a.jsx)("code",{className:"bg-sidebar px-1 rounded text-xs",children:(n=window.location.port||("https:"===window.location.protocol?"443":"80"),`http://localhost:${n}/callback`)})]}),(0,a.jsx)(i.pd,{label:"GitLab Base URL",value:u,onChange:e=>x(e.target.value),placeholder:o}),(0,a.jsx)(i.pd,{label:"Client ID",value:p,onChange:e=>h(e.target.value),placeholder:"Your OAuth application client ID"}),(0,a.jsx)(i.pd,{label:"Client Secret (optional for PKCE)",value:b,onChange:e=>f(e.target.value),placeholder:"Leave empty for public PKCE app"}),N&&(0,a.jsx)("p",{className:"text-sm text-red-500",children:N}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(i.$n,{onClick:()=>{p.trim()?(w(null),T({baseUrl:u.trim()||o,clientId:p.trim(),clientSecret:b.trim()}),C(!0)):w("Client ID is required")},fullWidth:!0,disabled:!p.trim(),children:"Authorize"}),(0,a.jsx)(i.$n,{onClick:()=>{m(null),w(null)},variant:"ghost",fullWidth:!0,children:"Back"})]})]}),"pat"===c&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("p",{className:"text-xs text-text-muted",children:["Create a PAT at"," ",(0,a.jsx)("a",{href:`${u.trim()||o}/-/user_settings/personal_access_tokens`,target:"_blank",rel:"noreferrer",className:"text-primary underline",children:"GitLab Access Tokens"})," ","with scopes: ",(0,a.jsx)("code",{className:"bg-sidebar px-1 rounded text-xs",children:"api"}),","," ",(0,a.jsx)("code",{className:"bg-sidebar px-1 rounded text-xs",children:"read_user"}),", and"," ",(0,a.jsx)("code",{className:"bg-sidebar px-1 rounded text-xs",children:"ai_features"}),"."]}),(0,a.jsx)(i.pd,{label:"GitLab Base URL",value:u,onChange:e=>x(e.target.value),placeholder:o}),(0,a.jsx)(i.pd,{label:"Personal Access Token",value:g,onChange:e=>y(e.target.value),placeholder:"glpat-xxxxxxxxxxxxxxxxxxxx",type:"password"}),N&&(0,a.jsx)("p",{className:"text-sm text-red-500",children:N}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(i.$n,{onClick:$,fullWidth:!0,disabled:!g.trim()||v,loading:v,children:"Connect"}),(0,a.jsx)(i.$n,{onClick:()=>{m(null),w(null)},variant:"ghost",fullWidth:!0,children:"Back"})]})]})]})}):null}d.propTypes={isOpen:n().bool.isRequired,providerInfo:n().shape({name:n().string}),onSuccess:n().func,onClose:n().func.isRequired}},96748:(e,t,r)=>{r.d(t,{default:()=>d});var a=r(95155),s=r(12115),l=r(14051),n=r.n(l),i=r(35497);let o="https://api.openai.com/v1";function d({isOpen:e,onClose:t,onCreated:r,onSaved:l,node:n}){let c=!!n,[m,u]=(0,s.useState)({name:"",prefix:"",baseUrl:o}),[x,p]=(0,s.useState)(!1),[h,b]=(0,s.useState)(""),[f,g]=(0,s.useState)(""),[y,v]=(0,s.useState)(!1),[j,N]=(0,s.useState)(null);(0,s.useEffect)(()=>{e&&(N(null),b(""),g(""),c?u({name:n.name||"",prefix:n.prefix||"",baseUrl:n.baseUrl||o}):u({name:"",prefix:"",baseUrl:o}))},[e,c,n]);let w=async()=>{if(m.name.trim()&&m.prefix.trim()&&m.baseUrl.trim()){p(!0);try{let e=c?`/api/provider-nodes/${n.id}`:"/api/provider-nodes",t=c?"PUT":"POST",a={name:m.name,prefix:m.prefix,baseUrl:m.baseUrl};c||(a.type="custom-embedding");let s=await fetch(e,{method:t,headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),i=await s.json();s.ok&&(c?l?.(i.node):r?.(i.node))}catch(e){console.log("Error saving custom embedding node:",e)}finally{p(!1)}}},k=async()=>{v(!0);try{let e=await fetch("/api/provider-nodes/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:m.baseUrl,apiKey:h,type:"custom-embedding",modelId:f.trim()||void 0})}),t=await e.json();N(t)}catch{N({valid:!1,error:"Network error"})}finally{v(!1)}};return(0,a.jsx)(i.aF,{isOpen:e,title:c?"Edit Custom Embedding":"Add Custom Embedding",onClose:t,children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsx)(i.pd,{label:"Name",value:m.name,onChange:e=>u({...m,name:e.target.value}),placeholder:"Voyage AI",hint:"Required. A friendly label for this embedding provider."}),(0,a.jsx)(i.pd,{label:"Prefix",value:m.prefix,onChange:e=>u({...m,prefix:e.target.value}),placeholder:"voyage",hint:"Required. Used as the provider prefix for model IDs (e.g. voyage/voyage-3)."}),(0,a.jsx)(i.pd,{label:"Base URL",value:m.baseUrl,onChange:e=>u({...m,baseUrl:e.target.value}),placeholder:"https://api.voyageai.com/v1",hint:"Most embedding APIs are OpenAI-compatible: Voyage, Cohere, Jina, Mistral, Together..."}),(0,a.jsx)(i.pd,{label:"API Key (for Check)",type:"password",value:h,onChange:e=>b(e.target.value)}),(0,a.jsx)(i.pd,{label:"Model ID (for Check)",value:f,onChange:e=>g(e.target.value),placeholder:"e.g. voyage-3, embed-english-v3.0, text-embedding-3-small",hint:"Required for validation. Will send a test embeddings request."}),(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)(i.$n,{onClick:k,disabled:!h||!f.trim()||y||!m.baseUrl.trim(),variant:"secondary",children:y?"Checking...":"Check"}),(()=>{if(!j)return null;let{valid:e,error:t,dimensions:r}=j;return e?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.Ex,{variant:"success",children:"Valid"}),r&&(0,a.jsxs)("span",{className:"text-sm text-text-muted",children:[r," dims"]})]}):(0,a.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,a.jsx)(i.Ex,{variant:"error",children:"Invalid"}),t&&(0,a.jsx)("span",{className:"text-sm text-red-500",children:t})]})})()]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(i.$n,{onClick:w,fullWidth:!0,disabled:!m.name.trim()||!m.prefix.trim()||!m.baseUrl.trim()||x,children:x?c?"Saving...":"Creating...":c?"Save":"Create"}),(0,a.jsx)(i.$n,{onClick:t,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})})}d.propTypes={isOpen:n().bool.isRequired,onClose:n().func.isRequired,onCreated:n().func,onSaved:n().func,node:n().shape({id:n().string,name:n().string,prefix:n().string,baseUrl:n().string})}},97677:(e,t,r)=>{r.d(t,{default:()=>s});var a=r(95155);function s({text:e,children:t,position:r="top",color:l}){let n=l?"":"bg-gray-900";return(0,a.jsxs)("div",{className:"relative inline-flex group",children:[t,(0,a.jsx)("div",{className:`pointer-events-none absolute ${{top:"bottom-full left-1/2 -translate-x-1/2 mb-1.5",bottom:"top-full left-1/2 -translate-x-1/2 mt-1.5",left:"right-full top-1/2 -translate-y-1/2 mr-1.5",right:"left-full top-1/2 -translate-y-1/2 ml-1.5"}[r]} z-50 w-max max-w-56 rounded px-2 py-1 text-[11px] leading-snug ${n} text-white opacity-0 group-hover:opacity-100 transition-opacity duration-150 whitespace-normal`,style:l?{backgroundColor:l}:{},children:e})]})}},98542:(e,t,r)=>{r.d(t,{default:()=>l});var a=r(95155),s=r(31474);function l({checked:e=!1,onChange:t,label:r,description:n,disabled:i=!1,size:o="md",className:d}){let c={sm:{track:"w-8 h-4",thumb:"size-3",translate:"translate-x-4"},md:{track:"w-11 h-6",thumb:"size-5",translate:"translate-x-5"},lg:{track:"w-14 h-7",thumb:"size-6",translate:"translate-x-7"}};return(0,a.jsxs)("div",{className:(0,s.cn)("flex items-center gap-3",i&&"opacity-50 cursor-not-allowed",d),children:[(0,a.jsx)("button",{type:"button",role:"switch","aria-checked":e,disabled:i,onClick:()=>{!i&&t&&t(!e)},className:(0,s.cn)("relative inline-flex shrink-0 cursor-pointer rounded-full","transition-colors duration-200 ease-in-out","focus:outline-none focus:ring-2 focus:ring-brand-500/30",e?"bg-brand-500":"bg-surface-3",c[o].track,i&&"cursor-not-allowed"),children:(0,a.jsx)("span",{className:(0,s.cn)("pointer-events-none inline-block rounded-full bg-white shadow-sm","transform transition duration-200 ease-in-out",e?c[o].translate:"translate-x-0.5",c[o].thumb,"mt-0.5")})}),(r||n)&&(0,a.jsxs)("div",{className:"flex flex-col",children:[r&&(0,a.jsx)("span",{className:"text-sm font-medium text-text-main",children:r}),n&&(0,a.jsx)("span",{className:"text-xs text-text-muted",children:n})]})]})}}}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7692],{55478:(e,t,r)=>{"use strict";r.d(t,{default:()=>g});var s=r(95155),a=r(12115);let l={client:"Client request",source:"Source request",openai:"OpenAI normalized",target:"Provider request",provider_response:"Provider response",error:"Error"},o={client:"bg-blue-500/10 text-blue-600 border-blue-500/20",source:"bg-cyan-500/10 text-cyan-600 border-cyan-500/20",openai:"bg-purple-500/10 text-purple-600 border-purple-500/20",target:"bg-orange-500/10 text-orange-600 border-orange-500/20",provider_response:"bg-green-500/10 text-green-600 border-green-500/20",error:"bg-red-500/10 text-red-600 border-red-500/20"};function d(e){if(!e)return"-";try{let t=function(e){if(!e)return"";if(e instanceof Date)return e.toISOString();let t=String(e).trim();if(!t)return"";let r=t.replace(" ","T");return/(?:Z|[+-]\d{2}:?\d{2})$/i.test(r)?r:`${r}Z`}(e),r=new Date(t);if(Number.isNaN(r.getTime()))return String(e);return r.toLocaleString("vi-VN",{timeZone:"Asia/Ho_Chi_Minh",day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}catch{return e}}function n(e,t=240){let r=String(e||"").replace(/\s+/g," ").trim();return r.length>t?`${r.slice(0,t)}...`:r}function i(e){let t=String(e||"").trim();if(!t)return"";try{return new URL(t).hostname||""}catch{return t.replace(/^https?:\/\//,"").replace(/\/.*$/,"").replace(/:\d+$/,"")}}function x(e){return e?.provider_name||e?.provider_label||e?.provider_id||e?.provider||i(e?.provider_url)||i(e?.endpoint)||""}function c(e){if(e?.display_model)return e.display_model;let t=e?.model||"-",r=x(e);return!r||"-"===t||String(t).startsWith(`${r}/`)?t:`${r}/${t}`}function m({value:e}){let t=function(e){if(!e)return null;if("object"==typeof e)return e;try{return JSON.parse(e)}catch{return null}}(e),r=t?JSON.stringify(t,null,2):String(e||"");return(0,s.jsx)("pre",{className:"max-h-[58vh] overflow-auto rounded-2xl bg-zinc-950 p-4 text-xs leading-relaxed text-zinc-100 shadow-inner",children:r||"No JSON"})}function p({value:e,empty:t="No content"}){return(0,s.jsx)("pre",{className:"max-h-[58vh] overflow-auto whitespace-pre-wrap break-words rounded-2xl border border-zinc-200 bg-white p-4 font-mono text-xs leading-relaxed text-zinc-950 shadow-sm dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-100",children:e||t})}function u({label:e,value:t}){return(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4 shadow-sm",children:[(0,s.jsx)("div",{className:"text-xs uppercase tracking-wide text-text-muted",children:e}),(0,s.jsx)("div",{className:"mt-1 text-2xl font-semibold text-text-main",children:t})]})}function b({stage:e}){let t=o[e]||"bg-surface text-text-main border-border";return(0,s.jsx)("span",{className:`inline-flex items-center rounded-full border px-2.5 py-1 text-xs font-medium ${t}`,children:l[e]||e||"-"})}function h({label:e,value:t}){return(0,s.jsxs)("div",{className:"rounded-2xl border border-zinc-200 bg-white p-4 shadow-sm dark:border-zinc-700 dark:bg-zinc-950",children:[(0,s.jsx)("div",{className:"text-[11px] font-semibold uppercase tracking-wide text-text-muted",children:e}),(0,s.jsx)("pre",{className:"mt-2 whitespace-pre-wrap break-words font-mono text-xs leading-relaxed text-text-main",children:t||"-"})]})}function g(){let[e,t]=(0,a.useState)({keyword:"",model:"",stage:"",sourceTool:"",clientIp:"",sessionId:"",dateFrom:"",dateTo:"",limit:"50",offset:"0"}),[r,o]=(0,a.useState)([]),[i,g]=(0,a.useState)([]),[f,j]=(0,a.useState)([]),[N,v]=(0,a.useState)(0),[w,y]=(0,a.useState)(null),[k,_]=(0,a.useState)(""),[z,S]=(0,a.useState)(""),[C,I]=(0,a.useState)(!1),[P,T]=(0,a.useState)(null),[E,M]=(0,a.useState)("prompt"),$=(0,a.useMemo)(()=>{let t=Number(e.limit||50);return Math.floor(Number(e.offset||0)/t)+1},[e.limit,e.offset]),D=(0,a.useCallback)(async()=>{I(!0),S(""),_("");try{let t=new URLSearchParams;Object.entries(e).forEach(([e,r])=>{String(r||"").trim()&&t.set(e,String(r).trim())});let r=await fetch(`/api/dashboard/prompt-logs?${t}`),s=await r.json();if(!r.ok)throw Error(s.error||"Failed to load prompt logs");o(s.rows||[]),g(s.models||[]),j(s.stages||[]),v(s.total||0),y(s.dbInfo||null),s.disabled&&_("Database prompt logging is disabled. Enable it in Dashboard -> MITM -> Prompt Log Database."),s.missing&&_("Prompt log database/table has no data yet, or SQLite file does not exist.")}catch(e){S(e.message||"Failed to load prompt logs")}finally{I(!1)}},[e]);(0,a.useEffect)(()=>{D()},[D]);let F=e=>{t(t=>({...t,...e,offset:void 0!==e.offset?e.offset:"0"}))},q=async e=>{S("");try{let t=await fetch(`/api/dashboard/prompt-logs/${encodeURIComponent(e)}`),r=await t.json();if(!t.ok)throw Error(r.error||"Failed to load detail");T(r.row),M("prompt")}catch(e){S(e.message||"Failed to load detail")}},O=async e=>{await navigator.clipboard.writeText(String(e||""))},L=async()=>{P?.id&&confirm("Delete this prompt log row?")&&(await fetch(`/api/dashboard/prompt-logs/${encodeURIComponent(P.id)}`,{method:"DELETE"})).ok&&(T(null),D())};return(0,s.jsxs)("div",{className:"flex w-full max-w-none flex-col gap-5 p-3 md:p-4 lg:p-6",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-2 md:flex-row md:items-end md:justify-between",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h1",{className:"text-2xl font-semibold text-text-main",children:"Prompt Logs"}),(0,s.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Search Copilot/MITM prompts across the currently configured prompt log database."})]}),(0,s.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,s.jsx)("a",{href:"/dashboard/mitm",className:"rounded-xl border border-border px-3 py-2 text-sm hover:bg-surface",children:"MITM Settings"}),(0,s.jsx)("button",{onClick:D,disabled:C,className:"rounded-xl bg-primary px-3 py-2 text-sm font-medium text-white disabled:opacity-50",children:C?"Loading...":"Refresh"})]})]}),k&&(0,s.jsx)("div",{className:"rounded-2xl border border-yellow-500/30 bg-yellow-500/10 p-4 text-sm text-yellow-700 dark:text-yellow-300",children:k}),z&&(0,s.jsx)("div",{className:"rounded-2xl border border-red-500/30 bg-red-500/10 p-4 text-sm text-red-500",children:z}),(0,s.jsxs)("div",{className:"grid gap-4 md:grid-cols-4",children:[(0,s.jsx)(u,{label:"Matching rows",value:N}),(0,s.jsx)(u,{label:"Loaded rows",value:r.length}),(0,s.jsx)(u,{label:"Page",value:$}),(0,s.jsx)(u,{label:"Database",value:w?.type||"-"})]}),w&&(0,s.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-3 text-xs text-text-muted",children:["DB: ",(0,s.jsx)("code",{children:w.type}),w.sqlitePath?(0,s.jsxs)(s.Fragment,{children:[" ","\xb7 Path: ",(0,s.jsx)("code",{children:w.sqlitePath})]}):null,w.host?(0,s.jsxs)(s.Fragment,{children:[" ","\xb7 Host: ",(0,s.jsx)("code",{children:w.host})]}):null,w.database?(0,s.jsxs)(s.Fragment,{children:[" ","\xb7 Database: ",(0,s.jsx)("code",{children:w.database})]}):null]}),(0,s.jsx)("div",{className:"rounded-2xl border border-border bg-surface p-4 shadow-sm",children:(0,s.jsxs)("div",{className:"grid gap-3 md:grid-cols-4 xl:grid-cols-6",children:[(0,s.jsxs)("label",{className:"flex flex-col gap-1 text-xs",children:[(0,s.jsx)("span",{className:"text-text-muted",children:"Keyword"}),(0,s.jsx)("input",{value:e.keyword,onChange:e=>F({keyword:e.target.value}),placeholder:"prompt, code, model, error...",className:"rounded-xl border border-border bg-background px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-primary/30"})]}),(0,s.jsxs)("label",{className:"flex flex-col gap-1 text-xs",children:[(0,s.jsx)("span",{className:"text-text-muted",children:"Model"}),(0,s.jsxs)("select",{value:e.model,onChange:e=>F({model:e.target.value}),className:"rounded-xl border border-border bg-background px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-primary/30",children:[(0,s.jsx)("option",{value:"",children:"All models"}),i.map(e=>(0,s.jsx)("option",{value:e,children:e},e))]})]}),(0,s.jsxs)("label",{className:"flex flex-col gap-1 text-xs",children:[(0,s.jsx)("span",{className:"text-text-muted",children:"Stage"}),(0,s.jsxs)("select",{value:e.stage,onChange:e=>F({stage:e.target.value}),className:"rounded-xl border border-border bg-background px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-primary/30",children:[(0,s.jsx)("option",{value:"",children:"All stages"}),f.map(e=>(0,s.jsx)("option",{value:e,children:l[e]||e},e))]})]}),(0,s.jsxs)("label",{className:"flex flex-col gap-1 text-xs",children:[(0,s.jsx)("span",{className:"text-text-muted",children:"Tool"}),(0,s.jsx)("input",{value:e.sourceTool,onChange:e=>F({sourceTool:e.target.value}),placeholder:"copilot, antigravity...",className:"rounded-xl border border-border bg-background px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-primary/30"})]}),(0,s.jsxs)("label",{className:"flex flex-col gap-1 text-xs",children:[(0,s.jsx)("span",{className:"text-text-muted",children:"Client IP"}),(0,s.jsx)("input",{value:e.clientIp,onChange:e=>F({clientIp:e.target.value}),placeholder:"172.16.253.1",className:"rounded-xl border border-border bg-background px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-primary/30"})]}),(0,s.jsxs)("label",{className:"flex flex-col gap-1 text-xs",children:[(0,s.jsx)("span",{className:"text-text-muted",children:"Session ID"}),(0,s.jsx)("input",{value:e.sessionId,onChange:e=>F({sessionId:e.target.value}),placeholder:"session id",className:"rounded-xl border border-border bg-background px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-primary/30"})]}),(0,s.jsxs)("label",{className:"flex flex-col gap-1 text-xs",children:[(0,s.jsx)("span",{className:"text-text-muted",children:"From"}),(0,s.jsx)("input",{type:"datetime-local",value:e.dateFrom,onChange:e=>F({dateFrom:e.target.value}),className:"rounded-xl border border-border bg-background px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-primary/30"})]}),(0,s.jsxs)("label",{className:"flex flex-col gap-1 text-xs",children:[(0,s.jsx)("span",{className:"text-text-muted",children:"To"}),(0,s.jsx)("input",{type:"datetime-local",value:e.dateTo,onChange:e=>F({dateTo:e.target.value}),className:"rounded-xl border border-border bg-background px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-primary/30"})]}),(0,s.jsxs)("label",{className:"flex flex-col gap-1 text-xs",children:[(0,s.jsx)("span",{className:"text-text-muted",children:"Limit"}),(0,s.jsxs)("select",{value:e.limit,onChange:e=>F({limit:e.target.value}),className:"rounded-xl border border-border bg-background px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-primary/30",children:[(0,s.jsx)("option",{value:"25",children:"25"}),(0,s.jsx)("option",{value:"50",children:"50"}),(0,s.jsx)("option",{value:"100",children:"100"}),(0,s.jsx)("option",{value:"200",children:"200"})]})]}),(0,s.jsxs)("div",{className:"flex items-end gap-2",children:[(0,s.jsx)("button",{onClick:()=>t({keyword:"",model:"",stage:"",sourceTool:"",clientIp:"",sessionId:"",dateFrom:"",dateTo:"",limit:"50",offset:"0"}),className:"rounded-xl border border-border px-3 py-2 text-sm hover:bg-background",children:"Reset"}),(0,s.jsx)("button",{onClick:D,className:"rounded-xl bg-primary px-3 py-2 text-sm font-medium text-white",children:"Search"})]})]})}),(0,s.jsxs)("div",{className:"overflow-hidden rounded-2xl border border-border bg-surface shadow-sm",children:[(0,s.jsx)("div",{className:"overflow-x-auto",children:(0,s.jsxs)("table",{className:"w-full min-w-[1450px] text-left text-sm",children:[(0,s.jsx)("thead",{className:"border-b border-border bg-background/60 text-xs uppercase tracking-wide text-text-muted",children:(0,s.jsxs)("tr",{children:[(0,s.jsx)("th",{className:"w-[150px] px-4 py-3",children:"Time"}),(0,s.jsx)("th",{className:"w-[130px] px-4 py-3",children:"Stage"}),(0,s.jsx)("th",{className:"w-[150px] px-4 py-3",children:"Tool"}),(0,s.jsx)("th",{className:"w-[130px] px-4 py-3",children:"Client IP"}),(0,s.jsx)("th",{className:"w-[110px] px-4 py-3",children:"Model"}),(0,s.jsx)("th",{className:"w-[190px] px-4 py-3",children:"Session"}),(0,s.jsx)("th",{className:"w-[390px] px-4 py-3",children:"Prompt preview"}),(0,s.jsx)("th",{className:"w-[130px] px-4 py-3",children:"Status/Error"}),(0,s.jsx)("th",{className:"sticky right-0 z-20 w-[95px] bg-background/95 px-4 py-3 text-right shadow-[-8px_0_12px_-12px_rgba(0,0,0,0.45)]",children:"Action"})]})}),(0,s.jsxs)("tbody",{children:[0===r.length&&(0,s.jsx)("tr",{children:(0,s.jsx)("td",{colSpan:9,className:"px-4 py-10 text-center text-text-muted",children:"No prompt logs found."})}),r.map(e=>(0,s.jsxs)("tr",{className:"border-b border-border/70 hover:bg-background/50",children:[(0,s.jsx)("td",{className:"whitespace-nowrap px-4 py-3 text-xs text-text-muted",children:d(e.created_at)}),(0,s.jsx)("td",{className:"px-4 py-3",children:(0,s.jsx)(b,{stage:e.stage})}),(0,s.jsx)("td",{className:"px-4 py-3",children:(0,s.jsx)("span",{className:"inline-flex max-w-[180px] items-center truncate rounded-full border border-border bg-surface/70 px-2.5 py-1 text-xs font-medium text-text-main",children:e.source_tool_label||e.source_tool||e.source_format||"-"})}),(0,s.jsx)("td",{className:"max-w-[150px] truncate px-4 py-3 font-mono text-xs text-text-muted",children:e.client_ip||"-"}),(0,s.jsx)("td",{className:"max-w-[260px] truncate px-4 py-3 font-mono text-xs",title:c(e),children:c(e)}),(0,s.jsx)("td",{className:"max-w-[180px] truncate px-4 py-3 font-mono text-xs text-text-muted",children:e.session_id||"-"}),(0,s.jsx)("td",{className:"min-w-[360px] px-4 py-3 text-xs",children:n(e.prompt_preview,420)||(0,s.jsx)("span",{className:"text-text-muted",children:"No prompt text"})}),(0,s.jsx)("td",{className:"max-w-[220px] px-4 py-3 text-xs",children:e.error_text?(0,s.jsx)("span",{className:"text-red-500",children:n(e.error_text,160)}):e.status_code||(0,s.jsx)("span",{className:"text-text-muted",children:"-"})}),(0,s.jsx)("td",{className:"sticky right-0 z-10 bg-surface px-4 py-3 text-right shadow-[-8px_0_12px_-12px_rgba(0,0,0,0.35)]",children:(0,s.jsx)("button",{onClick:()=>q(e.id),className:"rounded-lg bg-primary px-3 py-1.5 text-xs font-medium text-white",children:"View"})})]},e.id))]})]})}),(0,s.jsxs)("div",{className:"flex items-center justify-between border-t border-border p-3 text-sm",children:[(0,s.jsxs)("div",{className:"text-text-muted",children:["Showing ",r.length," of ",N,". Page ",$,"."]}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("button",{onClick:()=>{let r=Number(e.limit||50),s=Number(e.offset||0);t(e=>({...e,offset:String(Math.max(0,s-r))}))},disabled:0>=Number(e.offset||0),className:"rounded-xl border border-border px-3 py-1.5 disabled:opacity-50",children:"Previous"}),(0,s.jsx)("button",{onClick:()=>{let r=Number(e.limit||50),s=Number(e.offset||0);s+r>=N||t(e=>({...e,offset:String(s+r)}))},disabled:Number(e.offset||0)+Number(e.limit||50)>=N,className:"rounded-xl border border-border px-3 py-1.5 disabled:opacity-50",children:"Next"})]})]})]}),P&&(0,s.jsx)("div",{className:"fixed inset-0 z-[100] flex items-center justify-center bg-black/55 p-3 md:p-6",children:(0,s.jsxs)("div",{className:"flex h-[92vh] w-[96vw] max-w-none flex-col overflow-hidden rounded-3xl border border-zinc-200 bg-white shadow-2xl dark:border-zinc-700 dark:bg-zinc-950",children:[(0,s.jsxs)("div",{className:"flex flex-none items-start justify-between gap-4 border-b border-zinc-200 bg-white px-5 py-4 dark:border-zinc-700 dark:bg-zinc-950",children:[(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,s.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Prompt Log Detail"}),(0,s.jsx)(b,{stage:P.stage})]}),(0,s.jsxs)("div",{className:"mt-1 truncate text-xs text-text-muted",children:[d(P.created_at)," \xb7 ",c(P)," \xb7"," ",P.session_id||"-"]})]}),(0,s.jsx)("button",{onClick:()=>T(null),className:"rounded-xl border border-zinc-200 bg-white px-3 py-2 text-sm font-medium text-zinc-900 shadow-sm hover:bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-100 dark:hover:bg-zinc-800",children:"Close"})]}),(0,s.jsxs)("div",{className:"grid min-h-0 flex-1 grid-cols-1 overflow-hidden bg-zinc-100 dark:bg-zinc-900 lg:grid-cols-[340px_1fr]",children:[(0,s.jsx)("aside",{className:"min-h-0 overflow-y-auto border-b border-zinc-200 bg-zinc-100 p-4 dark:border-zinc-700 dark:bg-zinc-900 lg:border-b-0 lg:border-r",children:(0,s.jsxs)("div",{className:"grid gap-3",children:[(0,s.jsx)(h,{label:"ID",value:P.id}),(0,s.jsx)(h,{label:"Session",value:P.session_id}),(0,s.jsx)(h,{label:"Model",value:c(P)}),(0,s.jsx)(h,{label:"Provider",value:x(P)||P.provider_url||P.endpoint}),(0,s.jsx)(h,{label:"Source Tool",value:P.source_tool_label||P.source_tool||P.source_format}),(0,s.jsx)(h,{label:"Source Host",value:P.source_host}),(0,s.jsx)(h,{label:"Client IP",value:P.client_ip}),(0,s.jsx)(h,{label:"Client Port",value:P.client_port}),(0,s.jsx)(h,{label:"Client Host",value:P.client_host}),(0,s.jsx)(h,{label:"User Agent",value:P.client_user_agent}),(0,s.jsx)(h,{label:"Endpoint",value:P.endpoint||P.provider_url}),(0,s.jsx)(h,{label:"Source -> Target",value:`${P.source_format||"-"} -> ${P.target_format||"-"}`}),(0,s.jsx)(h,{label:"Status / Error",value:P.error_text||P.status_code||"-"}),(0,s.jsxs)("div",{className:"grid gap-2 pt-2",children:[(0,s.jsx)("button",{onClick:()=>O(P.prompt_text),className:"rounded-xl border border-zinc-200 bg-white px-3 py-2 text-sm font-medium text-zinc-900 shadow-sm hover:bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-100 dark:hover:bg-zinc-800",children:"Copy prompt"}),(0,s.jsx)("button",{onClick:()=>O(P.full_request_json),className:"rounded-xl border border-zinc-200 bg-white px-3 py-2 text-sm font-medium text-zinc-900 shadow-sm hover:bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-100 dark:hover:bg-zinc-800",children:"Copy request JSON"}),(0,s.jsx)("button",{onClick:L,className:"rounded-xl border border-red-500/40 bg-red-500/10 px-3 py-2 text-sm font-medium text-red-500 shadow-inner hover:bg-red-500/20",children:"Delete row"})]})]})}),(0,s.jsxs)("main",{className:"flex min-h-0 flex-col overflow-hidden bg-zinc-50 dark:bg-zinc-950",children:[(0,s.jsx)("div",{className:"flex flex-none gap-2 overflow-x-auto border-b border-zinc-200 bg-white px-4 py-3 dark:border-zinc-700 dark:bg-zinc-950",children:[["prompt","Prompt"],["request","Request JSON"],["response","Response"],["meta","Metadata"]].map(([e,t])=>(0,s.jsx)("button",{onClick:()=>M(e),className:`whitespace-nowrap rounded-xl px-3 py-2 text-sm ${E===e?"bg-primary text-white shadow-sm":"border border-border bg-surface text-text-main hover:bg-background"}`,children:t},e))}),(0,s.jsxs)("div",{className:"min-h-0 flex-1 overflow-y-auto bg-zinc-50 p-4 dark:bg-zinc-950",children:["prompt"===E&&(0,s.jsxs)("section",{children:[(0,s.jsx)("h3",{className:"mb-2 text-sm font-semibold text-text-main",children:"Extracted prompt text"}),(0,s.jsx)(p,{value:P.prompt_text,empty:"No prompt text"})]}),"request"===E&&(0,s.jsxs)("section",{children:[(0,s.jsx)("h3",{className:"mb-2 text-sm font-semibold text-text-main",children:"Full request JSON"}),(0,s.jsx)(m,{value:P.full_request_json})]}),"response"===E&&(0,s.jsxs)("section",{children:[(0,s.jsx)("h3",{className:"mb-2 text-sm font-semibold text-text-main",children:"Response text"}),(0,s.jsx)(p,{value:P.response_text,empty:"No response text stored for this stage"})]}),"meta"===E&&(0,s.jsxs)("section",{children:[(0,s.jsx)("h3",{className:"mb-2 text-sm font-semibold text-text-main",children:"Metadata JSON"}),(0,s.jsx)(m,{value:P.meta_json})]})]})]})]})]})})]})}},79705:(e,t,r)=>{Promise.resolve().then(r.bind(r,55478))}},e=>{e.O(0,[8441,3794,7358],()=>e(e.s=79705)),_N_E=e.O()}]);