@jheavenknows/bluerouter 5.1.28 → 5.1.30

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 (455) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +7 -7
  3. package/app/.next-cli-build/build-manifest.json +2 -2
  4. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  5. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page.js +1 -1
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page_client-reference-manifest.js +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovider/page_client-reference-manifest.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovidermonitor/page_client-reference-manifest.js +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalquota/page_client-reference-manifest.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  38. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  39. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  40. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  41. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  42. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  43. package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  44. package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  45. package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  46. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  47. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  48. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  49. package/app/.next-cli-build/server/app/_not-found.rsc +5 -5
  50. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +5 -5
  51. package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  52. package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +5 -5
  53. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  54. package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  55. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  56. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js.nft.json +1 -1
  57. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js.nft.json +1 -1
  58. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  59. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  60. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  61. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  62. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  63. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  64. package/app/.next-cli-build/server/app/api/branding/[asset]/route.js.nft.json +1 -1
  65. package/app/.next-cli-build/server/app/api/branding/route.js.nft.json +1 -1
  66. package/app/.next-cli-build/server/app/api/branding/upload/route.js.nft.json +1 -1
  67. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  68. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  69. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js.nft.json +1 -1
  70. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js.nft.json +1 -1
  71. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js.nft.json +1 -1
  72. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  73. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  74. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  75. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  76. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  77. package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js.nft.json +1 -1
  78. package/app/.next-cli-build/server/app/api/dashboard/combos/route.js.nft.json +1 -1
  79. package/app/.next-cli-build/server/app/api/dashboard/endpoint/route.js.nft.json +1 -1
  80. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js.nft.json +1 -1
  81. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js.nft.json +1 -1
  82. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js.nft.json +1 -1
  83. package/app/.next-cli-build/server/app/api/dashboard/token-saver/route.js.nft.json +1 -1
  84. package/app/.next-cli-build/server/app/api/keys/[id]/caveman-test/route.js +1 -1
  85. package/app/.next-cli-build/server/app/api/keys/[id]/caveman-test/route.js.nft.json +1 -1
  86. package/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
  87. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  88. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  89. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  90. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  91. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  92. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  93. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  94. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  95. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  96. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  97. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  98. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  99. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  100. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  101. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  102. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  103. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  104. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  105. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  106. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  107. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  108. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  109. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/api-key-models/route.js.nft.json +1 -1
  112. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/import-models/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route.js.nft.json +1 -1
  114. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/route.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/usage/route.js.nft.json +1 -1
  116. package/app/.next-cli-build/server/app/api/personal-cloud-providers/client/route.js.nft.json +1 -1
  117. package/app/.next-cli-build/server/app/api/personal-cloud-providers/monitor/route.js.nft.json +1 -1
  118. package/app/.next-cli-build/server/app/api/personal-cloud-providers/permissions/route.js.nft.json +1 -1
  119. package/app/.next-cli-build/server/app/api/personal-cloud-providers/route.js.nft.json +1 -1
  120. package/app/.next-cli-build/server/app/api/personal-cloud-providers/routing/route.js.nft.json +1 -1
  121. package/app/.next-cli-build/server/app/api/pricing/recalculate/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  123. package/app/.next-cli-build/server/app/api/provider-health/route.js.nft.json +1 -1
  124. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  125. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  126. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  127. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  129. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  130. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  131. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  133. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  135. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  136. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  137. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  139. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  140. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  142. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  143. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  144. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  145. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  146. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  147. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  148. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  149. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  150. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  151. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  152. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  153. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  154. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  155. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  156. package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
  157. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
  158. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  160. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  163. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/usage/stream/route.js +2 -6
  166. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  167. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  169. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  170. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  171. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  173. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  174. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  175. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  176. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  177. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  178. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  179. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  180. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  181. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  182. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  183. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  184. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  185. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  186. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  187. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  188. package/app/.next-cli-build/server/app/callback.html +1 -1
  189. package/app/.next-cli-build/server/app/callback.rsc +5 -5
  190. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +5 -5
  191. package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  192. package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +5 -5
  193. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +1 -1
  194. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  195. package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  196. package/app/.next-cli-build/server/app/dashboard/analytics.html +1 -1
  197. package/app/.next-cli-build/server/app/dashboard/analytics.rsc +6 -6
  198. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics/__PAGE__.segment.rsc +1 -1
  199. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics.segment.rsc +1 -1
  200. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  201. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  202. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_full.segment.rsc +6 -6
  203. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_head.segment.rsc +1 -1
  204. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_index.segment.rsc +5 -5
  205. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_tree.segment.rsc +1 -1
  206. package/app/.next-cli-build/server/app/dashboard/api-keys.html +1 -1
  207. package/app/.next-cli-build/server/app/dashboard/api-keys.rsc +7 -7
  208. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys/__PAGE__.segment.rsc +2 -2
  209. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys.segment.rsc +1 -1
  210. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  211. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  212. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_full.segment.rsc +7 -7
  213. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_head.segment.rsc +1 -1
  214. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_index.segment.rsc +5 -5
  215. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_tree.segment.rsc +1 -1
  216. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  217. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +7 -7
  218. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  219. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  220. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  221. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  222. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +7 -7
  223. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  224. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +5 -5
  225. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +1 -1
  226. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  227. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +7 -7
  228. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  229. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  230. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  231. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  232. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +7 -7
  233. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  234. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +5 -5
  235. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +1 -1
  236. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  237. package/app/.next-cli-build/server/app/dashboard/combos.rsc +7 -7
  238. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  239. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  240. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  241. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  242. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +7 -7
  243. package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  244. package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +5 -5
  245. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +1 -1
  246. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  247. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +7 -7
  248. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  249. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  250. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  251. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  252. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +7 -7
  253. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  254. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +5 -5
  255. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +1 -1
  256. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  257. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +7 -7
  258. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  259. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  260. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  261. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  262. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  263. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +7 -7
  264. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  265. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +5 -5
  266. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +1 -1
  267. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  268. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +7 -7
  269. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  270. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  271. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  272. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  273. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +7 -7
  274. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  275. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +5 -5
  276. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +1 -1
  277. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  278. package/app/.next-cli-build/server/app/dashboard/profile.rsc +6 -6
  279. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +1 -1
  280. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  281. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  282. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  283. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +6 -6
  284. package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  285. package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +5 -5
  286. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +1 -1
  287. package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
  288. package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +6 -6
  289. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs/__PAGE__.segment.rsc +1 -1
  290. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs.segment.rsc +1 -1
  291. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  292. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  293. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_full.segment.rsc +6 -6
  294. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_head.segment.rsc +1 -1
  295. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_index.segment.rsc +5 -5
  296. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +1 -1
  297. package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
  298. package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +6 -6
  299. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health/__PAGE__.segment.rsc +1 -1
  300. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health.segment.rsc +1 -1
  301. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  302. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  303. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_full.segment.rsc +6 -6
  304. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_head.segment.rsc +1 -1
  305. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_index.segment.rsc +5 -5
  306. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +1 -1
  307. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  308. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +7 -7
  309. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  310. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  311. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  312. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  313. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  314. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +7 -7
  315. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  316. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +5 -5
  317. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +1 -1
  318. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  319. package/app/.next-cli-build/server/app/dashboard/providers.rsc +7 -7
  320. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  321. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  322. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  323. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  324. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +7 -7
  325. package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  326. package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +5 -5
  327. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +1 -1
  328. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  329. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +7 -7
  330. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  331. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  332. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  333. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  334. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +7 -7
  335. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  336. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +5 -5
  337. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +1 -1
  338. package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
  339. package/app/.next-cli-build/server/app/dashboard/quota.rsc +8 -8
  340. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  341. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  342. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  343. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  344. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +8 -8
  345. package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  346. package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +5 -5
  347. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +1 -1
  348. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  349. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  350. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +5 -5
  351. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +5 -5
  352. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  353. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +5 -5
  354. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +1 -1
  355. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  356. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  357. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  358. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  359. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  360. package/app/.next-cli-build/server/app/dashboard/skills.rsc +7 -7
  361. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
  362. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
  363. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  364. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  365. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +7 -7
  366. package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
  367. package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +5 -5
  368. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +1 -1
  369. package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  370. package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +6 -6
  371. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +1 -1
  372. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  373. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  374. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  375. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +6 -6
  376. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  377. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +5 -5
  378. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +1 -1
  379. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  380. package/app/.next-cli-build/server/app/dashboard/translator.rsc +7 -7
  381. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  382. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  383. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  384. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  385. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +7 -7
  386. package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  387. package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +5 -5
  388. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +1 -1
  389. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  390. package/app/.next-cli-build/server/app/dashboard/usage.rsc +7 -7
  391. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  392. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  393. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  394. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  395. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +7 -7
  396. package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  397. package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +5 -5
  398. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +1 -1
  399. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  400. package/app/.next-cli-build/server/app/dashboard.rsc +7 -7
  401. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  402. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  403. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  404. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +7 -7
  405. package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  406. package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +5 -5
  407. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +1 -1
  408. package/app/.next-cli-build/server/app/index.html +1 -1
  409. package/app/.next-cli-build/server/app/index.rsc +5 -5
  410. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  411. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +5 -5
  412. package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  413. package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +5 -5
  414. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +1 -1
  415. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  416. package/app/.next-cli-build/server/app/landing.html +1 -1
  417. package/app/.next-cli-build/server/app/landing.rsc +5 -5
  418. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +5 -5
  419. package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  420. package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +5 -5
  421. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +1 -1
  422. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  423. package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  424. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  425. package/app/.next-cli-build/server/app/login.html +1 -1
  426. package/app/.next-cli-build/server/app/login.rsc +6 -6
  427. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +6 -6
  428. package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  429. package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +5 -5
  430. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +1 -1
  431. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  432. package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  433. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  434. package/app/.next-cli-build/server/app-paths-manifest.json +7 -7
  435. package/app/.next-cli-build/server/chunks/2338.js +1 -1
  436. package/app/.next-cli-build/server/chunks/3110.js +1 -1
  437. package/app/.next-cli-build/server/chunks/402.js +3 -3
  438. package/app/.next-cli-build/server/chunks/4746.js +1 -1
  439. package/app/.next-cli-build/server/chunks/6328.js +1 -1
  440. package/app/.next-cli-build/server/chunks/9434.js +1 -1
  441. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  442. package/app/.next-cli-build/server/middleware.js +1 -1
  443. package/app/.next-cli-build/server/pages/404.html +1 -1
  444. package/app/.next-cli-build/server/pages/500.html +1 -1
  445. package/app/.next-cli-build/static/chunks/{5263-aa7592ab91c343ef.js → 5263-fc07f8261a054c07.js} +1 -1
  446. package/app/.next-cli-build/static/chunks/{5497-45d4f47e972bcff4.js → 5497-85fd7f6a5b5eb40d.js} +1 -1
  447. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/api-keys/{page-36e97475bee7cc05.js → page-368be64b30e3c097.js} +1 -1
  448. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/{upgrade-5.1.25-to-5.1.26-5.1.26-20260715-230608 → upgrade-5.1.27-to-5.1.28-5.1.28-20260715-234649}/data.sqlite +0 -0
  449. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-5.1.27-to-5.1.28-5.1.28-20260715-234650/data.sqlite +0 -0
  450. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-5.1.28-to-5.1.29-5.1.29-20260716-000246/data.sqlite +0 -0
  451. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite +0 -0
  452. package/app/package.json +1 -1
  453. package/package.json +1 -1
  454. /package/app/.next-cli-build/static/{Xr3UXox82vFC1mrGJH_Po → TqyGIUDUvkn4y_Jyig3Xz}/_buildManifest.js +0 -0
  455. /package/app/.next-cli-build/static/{Xr3UXox82vFC1mrGJH_Po → TqyGIUDUvkn4y_Jyig3Xz}/_ssgManifest.js +0 -0
@@ -2,7 +2,7 @@
2
2
 
3
3
  function getUserName(user) {
4
4
  return user.profile.name.trim();
5
- }`;function I(e){if(null==e||""===e)return"—";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("vi-VN"):"—"}function $(e){if(null==e||""===e)return"—";let t=Number(e);if(!Number.isFinite(t))return"—";let s=t>0?"+":"";return`${s}${t.toFixed(1)}%`}function M(e){if(null==e||""===e)return"—";let t=Number(e);if(!Number.isFinite(t))return"—";let s=t>0?"+":"";return`${s}${t.toLocaleString("vi-VN")}`}function T({label:e,value:t,hint:s,tone:r="default"}){return(0,n.jsxs)("div",{className:`rounded-xl border p-3 ${"good"===r?"border-emerald-500/25 bg-emerald-500/10 text-emerald-800 dark:text-emerald-200":"bad"===r?"border-red-500/25 bg-red-500/10 text-red-700 dark:text-red-300":"border-border bg-surface/70 text-text-main"}`,children:[(0,n.jsx)("div",{className:"text-[11px] font-medium uppercase tracking-wide opacity-70",children:e}),(0,n.jsx)("div",{className:"mt-1 text-lg font-semibold",children:t}),s?(0,n.jsx)("div",{className:"mt-1 text-[11px] opacity-70",children:s}):null]})}function E({apiKey:e,fallbackModels:t,onClose:s}){let l=(0,r.useMemo)(()=>{let s=c(e?.allowedModels);return s.length>0?s:c(t)},[e,t]),[i,d]=(0,r.useState)(""),[o,x]=(0,r.useState)(S),[u,h]=(0,r.useState)("lite"),[p,b]=(0,r.useState)(!1),[g,f]=(0,r.useState)(""),[j,v]=(0,r.useState)(null);if((0,r.useEffect)(()=>{if(!e)return;let s=c(e.allowedModels),n=c(t);d(s[0]||n[0]||""),h(["lite","full","ultra"].includes(e.cavemanLevel)?e.cavemanLevel:"lite"),x(S),b(!1),f(""),v(null)},[e?.id]),!e)return null;let y=!!i&&!!o.trim()&&!p,N=async()=>{if(y){b(!0),f(""),v(null);try{let t=await fetch(`/api/keys/${e.id}/caveman-test`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:i,prompt:o.trim(),level:u})}),s=await t.json().catch(()=>({}));if(!t.ok){let e=s?.error?.message||s?.error||s?.message||"Kh\xf4ng chạy được Caveman A/B test";throw Error(e)}v(s)}catch(e){f(e?.message||"Kh\xf4ng chạy được Caveman A/B test")}finally{b(!1)}}},k=j?.baseline||null;return(0,n.jsx)(a.aF,{isOpen:!!e,onClose:()=>!p&&s(),title:"Test Caveman A/B",size:"xl",children:(0,n.jsxs)("div",{className:"space-y-5",children:[(0,n.jsx)("div",{className:"overflow-hidden rounded-2xl border border-indigo-500/25 bg-gradient-to-r from-indigo-500/10 via-primary/5 to-cyan-500/10",children:(0,n.jsxs)("div",{className:"flex flex-col gap-3 p-4 sm:flex-row sm:items-center sm:justify-between",children:[(0,n.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,n.jsx)("span",{className:"inline-flex size-11 shrink-0 items-center justify-center rounded-2xl bg-indigo-500/15 text-indigo-700 dark:text-indigo-300",children:(0,n.jsx)("span",{"aria-hidden":"true",className:"material-symbols-outlined text-[25px]",children:"experiment"})}),(0,n.jsxs)("div",{className:"min-w-0",children:[(0,n.jsx)("div",{className:"truncate font-semibold text-text-main",children:e.name||"API Key"}),(0,n.jsx)("div",{className:"mt-0.5 text-xs text-text-muted",children:"So s\xe1nh c\xf9ng prompt: Caveman OFF với mức ON đ\xe3 chọn"})]})]}),(0,n.jsxs)("div",{className:"flex shrink-0 items-center gap-2 text-xs",children:[(0,n.jsx)("span",{className:"rounded-full border border-border bg-background/80 px-2.5 py-1",children:"A/B thực tế"}),(0,n.jsxs)("span",{className:"rounded-full border border-amber-500/30 bg-amber-500/10 px-2.5 py-1 text-amber-700 dark:text-amber-300",children:[2," lượt gọi"]})]})]})}),(0,n.jsxs)("label",{className:"block",children:[(0,n.jsx)("span",{className:"mb-1.5 block text-xs font-medium text-text-muted",children:"Model được ph\xe9p d\xf9ng"}),(0,n.jsxs)("select",{value:i,onChange:e=>d(e.target.value),disabled:p||0===l.length,className:"w-full rounded-xl border border-border bg-background px-3 py-2.5 font-mono text-sm text-text-main outline-none transition focus:border-primary disabled:opacity-60",children:[0===l.length?(0,n.jsx)("option",{value:"",children:"Kh\xf4ng c\xf3 model để test"}):null,l.map(e=>(0,n.jsx)("option",{value:e,children:e},e))]})]}),(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:"mb-2 flex items-center justify-between gap-3",children:[(0,n.jsx)("span",{className:"text-xs font-medium text-text-muted",children:"Mức Caveman"}),(0,n.jsx)("span",{className:"text-[11px] text-text-muted",children:"Temperature = 0 \xb7 tối đa 2.048 output tokens"})]}),(0,n.jsx)("div",{className:"grid gap-2 sm:grid-cols-3",children:A.map(e=>{let t=u===e.value;return(0,n.jsxs)("button",{type:"button",onClick:()=>h(e.value),disabled:p,className:`rounded-xl border p-3 text-left transition ${t?"border-primary bg-primary/10 ring-1 ring-primary/20":"border-border bg-background hover:border-primary/40 hover:bg-surface"} disabled:cursor-default disabled:opacity-80`,children:[(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,n.jsx)("span",{className:"font-semibold text-text-main",children:e.label}),t?(0,n.jsx)("span",{className:"material-symbols-outlined text-[17px] text-primary",children:"check_circle"}):null]}),(0,n.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:e.description})]},e.value)})})]}),(0,n.jsxs)("label",{className:"block",children:[(0,n.jsxs)("div",{className:"mb-1.5 flex items-center justify-between gap-3",children:[(0,n.jsx)("span",{className:"text-xs font-medium text-text-muted",children:"Prompt test"}),(0,n.jsxs)("span",{className:`text-[11px] ${o.length>12e3?"text-red-600":"text-text-muted"}`,children:[o.length.toLocaleString("vi-VN"),"/12.000 k\xfd tự"]})]}),(0,n.jsx)("textarea",{value:o,onChange:e=>x(e.target.value.slice(0,12e3)),disabled:p,rows:7,className:"w-full resize-y rounded-xl border border-border bg-background px-3 py-3 font-mono text-sm leading-6 text-text-main outline-none transition focus:border-primary disabled:opacity-70",placeholder:"Nhập c\xf9ng một prompt để so s\xe1nh Caveman OFF v\xe0 ON..."})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-amber-500/30 bg-amber-500/10 p-3 text-xs leading-5 text-amber-800 dark:text-amber-200",children:[(0,n.jsx)("b",{children:"Lưu \xfd chi ph\xed:"})," ph\xe9p thử gọi provider thật v\xe0 tạo usage/log như request b\xecnh thường. Mỗi lần test d\xf9ng đ\xfang 2 lượt gọi: một baseline OFF v\xe0 một lượt ON ở mức đ\xe3 chọn. Kết quả vẫn c\xf3 thể dao động nhẹ theo model."]}),g?(0,n.jsxs)("div",{className:"flex items-start gap-2 rounded-xl border border-red-500/30 bg-red-500/10 p-3 text-sm text-red-700 dark:text-red-300",children:[(0,n.jsx)("span",{"aria-hidden":"true",className:"material-symbols-outlined text-[19px]",children:"error"}),(0,n.jsx)("span",{children:g})]}):null,p?(0,n.jsxs)("div",{className:"rounded-2xl border border-primary/25 bg-primary/5 p-6 text-center",children:[(0,n.jsx)("span",{className:"material-symbols-outlined animate-spin text-3xl text-primary",children:"progress_activity"}),(0,n.jsxs)("div",{className:"mt-2 font-medium text-text-main",children:["Đang chạy ",2," lượt A/B..."]}),(0,n.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:"Giữ modal mở cho tới khi model trả đủ kết quả. Mỗi lượt c\xf3 timeout tối đa 5 ph\xfat."})]}):null,j&&k?(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"font-semibold text-text-main",children:"Kết quả A/B"}),(0,n.jsxs)("p",{className:"text-xs text-text-muted",children:[j.model," \xb7 ",j.callsMade," lượt gọi \xb7 output cap ",I(j.maxOutputTokens)]})]}),(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-3 py-1 text-xs text-text-muted",children:["Baseline OFF: ",I(k.usage?.outputTokens)," output tokens"]})]}),(0,n.jsx)("div",{className:"grid gap-3 lg:grid-cols-1",children:(j.results||[]).map(e=>{if(e.error)return(0,n.jsxs)("div",{className:"rounded-2xl border border-red-500/30 bg-red-500/10 p-4",children:[(0,n.jsx)("div",{className:"font-semibold uppercase text-red-700 dark:text-red-300",children:e.level}),(0,n.jsx)("div",{className:"mt-2 text-sm text-red-700 dark:text-red-300",children:e.error})]},e.level);let t=e.savings?.outputSaved,s=e.savings?.outputSavedPercent,r=k.usage?.outputTokens!==null&&e.usage?.outputTokens!==null,a=Number(t)>0,l=0>Number(t),i=Number.isFinite(Number(s))?Math.max(0,Math.min(100,Number(s))):0;return(0,n.jsxs)("div",{className:"overflow-hidden rounded-2xl border border-border bg-background shadow-sm",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2 border-b border-border bg-surface/60 px-4 py-3",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"inline-flex size-8 items-center justify-center rounded-xl bg-primary/10 text-primary",children:(0,n.jsx)("span",{"aria-hidden":"true",className:"material-symbols-outlined text-[19px]",children:"compress"})}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"font-semibold uppercase text-text-main",children:e.level}),(0,n.jsxs)("div",{className:"text-[11px] text-text-muted",children:[I(e.latencyMs)," ms"]})]})]}),(0,n.jsx)("span",{className:`rounded-full px-2.5 py-1 text-xs font-semibold ${a?"bg-emerald-500/15 text-emerald-700 dark:text-emerald-300":l?"bg-red-500/15 text-red-700 dark:text-red-300":"bg-surface text-text-muted"}`,children:r?`${M(t)} tokens`:"No usage"})]}),(0,n.jsxs)("div",{className:"space-y-3 p-4",children:[(0,n.jsxs)("div",{className:"grid grid-cols-2 gap-2",children:[(0,n.jsx)(T,{label:"OFF output",value:I(k.usage?.outputTokens)}),(0,n.jsx)(T,{label:"ON output",value:I(e.usage?.outputTokens),tone:a?"good":l?"bad":"default"}),(0,n.jsx)(T,{label:"Output giảm",value:r?$(s):"—",hint:r?`${M(t)} token`:"Provider kh\xf4ng trả usage",tone:a?"good":l?"bad":"default"}),(0,n.jsx)(T,{label:"Input overhead",value:M(e.savings?.inputOverhead),hint:"instruction Caveman"})]}),(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:"mb-1 flex justify-between text-[11px] text-text-muted",children:[(0,n.jsx)("span",{children:"Hiệu quả output"}),(0,n.jsx)("span",{children:r?$(s):"—"})]}),(0,n.jsx)("div",{className:"h-2 overflow-hidden rounded-full bg-surface",children:(0,n.jsx)("div",{className:`h-full rounded-full transition-all ${a?"bg-emerald-500":"bg-red-500"}`,style:{width:`${i}%`}})})]}),(0,n.jsxs)("div",{className:"flex items-center justify-between rounded-xl border border-border bg-surface/50 px-3 py-2 text-xs",children:[(0,n.jsx)("span",{className:"text-text-muted",children:"Net total token"}),(0,n.jsxs)("span",{className:`font-semibold ${Number(e.savings?.totalSaved)>0?"text-emerald-700 dark:text-emerald-300":0>Number(e.savings?.totalSaved)?"text-red-600":"text-text-main"}`,children:[M(e.savings?.totalSaved)," (",$(e.savings?.totalSavedPercent),")"]})]})]})]},e.level)})}),(0,n.jsxs)("div",{className:"grid gap-3 lg:grid-cols-2",children:[(0,n.jsxs)("details",{className:"overflow-hidden rounded-xl border border-border bg-background",open:!0,children:[(0,n.jsx)("summary",{className:"cursor-pointer bg-surface/60 px-4 py-3 text-sm font-medium text-text-main",children:"Output baseline \xb7 Caveman OFF"}),(0,n.jsx)("pre",{className:"max-h-80 overflow-auto whitespace-pre-wrap p-4 text-xs leading-5 text-text-muted",children:k.output||"Model kh\xf4ng trả content text."})]}),(j.results||[]).map(e=>(0,n.jsxs)("details",{className:"overflow-hidden rounded-xl border border-border bg-background",open:!0,children:[(0,n.jsxs)("summary",{className:"cursor-pointer bg-surface/60 px-4 py-3 text-sm font-medium text-text-main",children:["Output Caveman \xb7 ",String(e.level||"").toUpperCase()]}),(0,n.jsx)("pre",{className:"max-h-80 overflow-auto whitespace-pre-wrap p-4 text-xs leading-5 text-text-muted",children:e.error||e.output||"Model kh\xf4ng trả content text."})]},`output-${e.level}`))]}),(0,n.jsx)("p",{className:"text-[11px] leading-5 text-text-muted",children:j.note})]}):null,(0,n.jsxs)("div",{className:"flex flex-wrap justify-end gap-2 border-t border-border pt-4",children:[(0,n.jsx)(a.$n,{variant:"ghost",onClick:s,disabled:p,children:"Đ\xf3ng"}),(0,n.jsx)(a.$n,{onClick:N,disabled:!y||o.length>12e3,children:(0,n.jsx)(m,{materialIcon:p?"progress_activity":"experiment",children:p?"Đang test...":"Chạy A/B (2 calls)"})})]})]})})}function F({apiKey:e,owner:t,isAdmin:s,onRename:a,onRotate:l,onEditModels:i,onEditPolicy:d,onAssignOwner:o,onDelete:c}){let[x,u]=(0,r.useState)(!1),h=(0,r.useRef)(null);(0,r.useEffect)(()=>{if(!x)return;let e=e=>{!h.current||h.current.contains(e.target)||u(!1)},t=e=>{"Escape"===e.key&&u(!1)};return document.addEventListener("pointerdown",e,!0),document.addEventListener("keydown",t),()=>{document.removeEventListener("pointerdown",e,!0),document.removeEventListener("keydown",t)}},[h,x,u]);let p=e=>{u(!1),e()};return(0,n.jsxs)("details",{ref:h,className:"group",open:x,onToggle:e=>u(e.currentTarget.open),children:[(0,n.jsx)("summary",{title:"Thao t\xe1c kh\xe1c",className:"flex h-9 cursor-pointer list-none items-center rounded-xl border border-border bg-background px-3 text-sm font-medium text-text-main transition hover:border-primary/50 hover:bg-surface focus:outline-none focus:ring-2 focus:ring-primary/20 [&::-webkit-details-marker]:hidden",children:(0,n.jsx)("span",{"aria-hidden":"true",className:"text-lg leading-none",children:"⋯"})}),(0,n.jsxs)("div",{className:"ml-auto mt-2 w-48 overflow-hidden rounded-xl border border-border bg-background py-1 text-left shadow-xl shadow-black/10",children:[(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>a(e.id,e.name)),children:(0,n.jsx)(m,{icon:"✏️",children:"Đổi t\xean"})}),(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>l(e)),children:(0,n.jsx)(m,{materialIcon:"key",children:"Đổi key"})}),(0,n.jsx)("div",{className:"my-1 border-t border-border"}),(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>i(e)),children:(0,n.jsx)(m,{icon:"\uD83D\uDCE6",children:"Models"})}),s?(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>d(e)),children:(0,n.jsx)(m,{icon:"\uD83D\uDEE1️",children:"Policy"})}):null,s?(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>o(e.id,t)),children:(0,n.jsx)(m,{icon:"\uD83D\uDC64",children:"Owner"})}):null,(0,n.jsx)("div",{className:"my-1 border-t border-border"}),(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm font-medium text-red-600 transition hover:bg-red-500/10",onClick:()=>p(()=>c(e.id)),children:(0,n.jsx)(m,{icon:"\uD83D\uDDD1️",children:"X\xf3a"})})]})]})}function K({mode:e,effectiveEnabled:t,effectiveLevel:s,globalEnabled:r,onEdit:a,onInfo:l,onTest:i}){let d=String(s||"lite").toUpperCase();return(0,n.jsxs)("div",{className:`inline-flex max-w-full items-center gap-1.5 whitespace-nowrap rounded-xl border px-2 py-1.5 shadow-sm ${t?"border-emerald-500/30 bg-emerald-500/10 text-emerald-800 dark:text-emerald-200":"border-slate-300/80 bg-slate-500/5 text-slate-700 dark:border-slate-600 dark:text-slate-300"}`,title:`Caveman ${t?"ON":"OFF"} \xb7 ${"inherit"===e?"Kế thừa Global":"on"===e?"Force ON":"Force OFF"} \xb7 Global ${r?"ON":"OFF"} \xb7 Mức ${d}`,children:[(0,n.jsx)("span",{className:`inline-flex size-5 shrink-0 items-center justify-center rounded-md ${t?"bg-emerald-500/15 text-emerald-700 dark:text-emerald-300":"bg-slate-500/10 text-slate-600 dark:text-slate-300"}`,children:(0,n.jsx)("span",{"aria-hidden":"true",className:"material-symbols-outlined text-[15px] leading-none",children:"compress"})}),(0,n.jsx)("button",{type:"button",onClick:l,className:"shrink-0 rounded-md font-semibold underline-offset-2 transition hover:text-primary hover:underline focus:outline-none focus:ring-2 focus:ring-primary/25",title:"Xem hướng dẫn Caveman","aria-label":"Mở hướng dẫn Caveman",children:"Caveman"}),(0,n.jsx)("button",{type:"button",onClick:a,className:`shrink-0 rounded-full border px-2 py-0.5 text-[10px] font-bold tracking-wide transition focus:outline-none focus:ring-2 focus:ring-primary/25 ${t?"border-emerald-500/40 bg-emerald-600 text-white hover:bg-emerald-700":"border-slate-300 bg-white text-slate-600 hover:border-primary/50 hover:text-primary dark:border-slate-600 dark:bg-slate-900/40 dark:text-slate-300"}`,"aria-label":`Mở cấu h\xecnh Caveman, hiện đang ${t?"bật":"tắt"}`,children:t?"ON":"OFF"}),(0,n.jsxs)("span",{className:`inline-flex shrink-0 items-center gap-1 rounded-full border px-2 py-0.5 text-[10px] font-semibold ${t?"border-emerald-500/25 bg-white/55 text-emerald-800 dark:bg-slate-950/20 dark:text-emerald-200":"border-slate-300/80 bg-white/55 text-slate-500 dark:border-slate-600 dark:bg-slate-950/20 dark:text-slate-400"}`,children:[(0,n.jsx)("span",{"aria-hidden":"true",className:"material-symbols-outlined text-[12px] leading-none",children:"tune"}),d]}),(0,n.jsx)("span",{"aria-hidden":"true",className:"h-5 w-px shrink-0 bg-current opacity-15"}),(0,n.jsxs)("button",{type:"button",onClick:i,className:"inline-flex shrink-0 items-center gap-1 rounded-lg border border-indigo-500/30 bg-indigo-500/10 px-2 py-0.5 text-[10px] font-semibold text-indigo-700 transition hover:border-indigo-500/60 hover:bg-indigo-500/20 focus:outline-none focus:ring-2 focus:ring-indigo-500/25 dark:text-indigo-300",title:"Test A/B Caveman với một mức n\xe9n","aria-label":"Mở Caveman A/B test",children:[(0,n.jsx)("span",{"aria-hidden":"true",className:"material-symbols-outlined text-[13px] leading-none",children:"experiment"}),"Test"]})]})}function L({keys:e,copied:t,copy:s,isAdmin:r,globalCavemanEnabled:l,globalCavemanLevel:i,onToggleActive:d,onApiTest:o,onClaudeSettings:x,onOpenCodeSettings:m,onCodexSettings:u,onQwenSettings:h,onRename:p,onRotate:f,onEditModels:j,onEditPolicy:v,onEditCaveman:y,onShowCavemanInfo:N,onCavemanTest:k,onAssignOwner:C,onDelete:w}){return(0,n.jsx)("div",{className:"overflow-hidden rounded-2xl border border-border",children:(0,n.jsx)("div",{className:"overflow-x-auto",children:(0,n.jsxs)("table",{className:"min-w-full divide-y divide-border text-sm",children:[(0,n.jsx)("thead",{className:"bg-surface/80 text-left text-xs uppercase tracking-wide text-text-muted",children:(0,n.jsxs)("tr",{children:[(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"T\xean / Key"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Trạng th\xe1i"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Owner"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Model"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Policy"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Ng\xe0y tạo"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 text-right font-medium",children:"Thao t\xe1c"})]})}),(0,n.jsx)("tbody",{className:"divide-y divide-border bg-background",children:e.map(e=>{var O;let A=e.ownerUser||e.createdByUser||"chưa g\xe1n",S=c(e.allowedModels),I=b(e.limits),$=g(e.limits||{}),M=e.cavemanMode||"inherit",T="on"===M||"off"!==M&&l,E="on"===M?e.cavemanLevel||"lite":i;return(0,n.jsxs)("tr",{className:"align-top transition hover:bg-surface/50",children:[(0,n.jsxs)("td",{className:"min-w-[280px] px-4 py-4",children:[(0,n.jsx)("div",{className:"font-medium text-text-main",children:e.name||"API Key"}),(0,n.jsxs)("div",{className:"group/key mt-2 flex max-w-[380px] items-center gap-2 rounded-xl border border-border bg-surface px-3 py-2 font-mono text-xs text-text-main",children:[(0,n.jsx)("span",{className:"min-w-0 flex-1 truncate",children:(O=e.key)?O.length>12?`${O.slice(0,8)}...${O.slice(-4)}`:O:""}),(0,n.jsxs)("div",{className:"relative shrink-0 group/btn",children:[(0,n.jsx)("button",{type:"button",onClick:()=>s(e.key,e.id),className:"rounded p-0.5 text-text-muted transition hover:bg-sidebar hover:text-primary","aria-label":t===e.id?"Đ\xe3 copy":"Copy API key",children:(0,n.jsx)("span",{className:"material-symbols-outlined text-sm",children:t===e.id?"check":"content_copy"})}),(0,n.jsx)("span",{className:"pointer-events-none absolute left-1/2 top-5 mt-1 -translate-x-1/2 whitespace-nowrap text-[10px] text-text-muted opacity-0 transition-opacity group-hover/btn:opacity-100",children:t===e.id?"Copied!":"Copy"})]}),(0,n.jsxs)("div",{className:"relative shrink-0 group/btn",children:[(0,n.jsx)("button",{type:"button",onClick:()=>o(e),className:"rounded p-0.5 text-text-muted transition hover:bg-sidebar hover:text-primary","aria-label":"Test API key bằng curl",children:(0,n.jsx)("span",{className:"material-symbols-outlined text-sm",children:"science"})}),(0,n.jsx)("span",{className:"pointer-events-none absolute left-1/2 top-5 mt-1 -translate-x-1/2 whitespace-nowrap text-[10px] text-text-muted opacity-0 transition-opacity group-hover/btn:opacity-100",children:"Test"})]})]}),e.createdByUser?(0,n.jsxs)("div",{className:"mt-2 text-xs text-text-muted",children:["Tạo bởi: ",e.createdByUser]}):null]}),(0,n.jsx)("td",{className:"whitespace-nowrap px-4 py-4",children:(0,n.jsx)(a.lM,{checked:!!e.isActive,onChange:t=>d(e.id,t)})}),(0,n.jsx)("td",{className:"min-w-[160px] px-4 py-4",children:(0,n.jsx)("div",{className:"break-all text-sm text-text-main",children:A})}),(0,n.jsx)("td",{className:"px-4 py-4 align-top",children:S.length>0?(0,n.jsxs)("div",{className:"flex flex-col items-start gap-1",children:[S.slice(0,3).map(e=>(0,n.jsx)("span",{className:"max-w-full truncate rounded-full border border-border bg-surface px-2 py-1 font-mono text-xs",children:e},e)),S.length>3?(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1 text-xs",children:["+",S.length-3]}):null]}):(0,n.jsx)("span",{className:"inline-block rounded-full border border-amber-500/30 bg-amber-500/10 px-2 py-1 text-xs text-amber-700 dark:text-amber-300",children:"Legacy full access"})}),(0,n.jsx)("td",{className:"px-4 py-4 align-top",children:(0,n.jsxs)("div",{className:"flex flex-col items-start gap-1 text-xs",children:[I?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:$.enabled?"bật":"tắt"}),(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:[$.requestsPerMinute||"∞","/ph\xfat"]}),(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:[$.promptCharsMax||"∞"," chars"]}),r&&$.maxOutputTokens>0?(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:[$.maxOutputTokens," out"]}):null,r&&$.forceThinkingOff?(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:"thinking off"}):null,$.allowedIpCidrs.length>0?(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:"IP locked"}):null]}):(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1 text-text-muted",children:"Policy: chưa set"}),(0,n.jsx)(K,{mode:M,effectiveEnabled:T,effectiveLevel:E,globalEnabled:l,onEdit:()=>y(e),onInfo:()=>N(e),onTest:()=>k(e)})]})}),(0,n.jsx)("td",{className:"min-w-[150px] px-4 py-4 text-xs text-text-muted",children:function(e){if(!e)return"kh\xf4ng r\xf5";try{return new Date(e).toLocaleString()}catch{return String(e)}}(e.createdAt)}),(0,n.jsx)("td",{className:"min-w-[200px] px-4 py-4",children:(0,n.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,n.jsx)(F,{apiKey:e,owner:A,isAdmin:r,onRename:p,onRotate:f,onEditModels:j,onEditPolicy:v,onAssignOwner:C,onDelete:w}),(0,n.jsx)(P,{apiKey:e,onClaudeSettings:x,onOpenCodeSettings:m,onCodexSettings:u,onQwenSettings:h})]})})]},e.id)})})]})})})}function _(){let e,t,s,m,[h,p]=(0,r.useState)([]),[v,w]=(0,r.useState)(!0),[P,A]=(0,r.useState)(""),[S,I]=(0,r.useState)(!1),[$,M]=(0,r.useState)(""),[T,F]=(0,r.useState)(""),[K,_]=(0,r.useState)(""),[R,D]=(0,r.useState)(""),[U,q]=(0,r.useState)(null),[B,z]=(0,r.useState)([]),[H,G]=(0,r.useState)(""),[W,Y]=(0,r.useState)(!1),[J,V]=(0,r.useState)(!1),[Q,X]=(0,r.useState)([]),[Z,ee]=(0,r.useState)([]),[et,es]=(0,r.useState)(!1),[en,er]=(0,r.useState)(d),[ea,el]=(0,r.useState)(d),[ei,ed]=(0,r.useState)(!1),[eo,ec]=(0,r.useState)(!1),[ex,em]=(0,r.useState)(!1),[eu,eh]=(0,r.useState)([]),[ep,eb]=(0,r.useState)({}),[eg,ef]=(0,r.useState)(!1),[ej,ev]=(0,r.useState)(!1),[ey,eN]=(0,r.useState)(null),[ek,eC]=(0,r.useState)([]),[ew,eP]=(0,r.useState)(!1),[eO,eA]=(0,r.useState)(null),[eS,eI]=(0,r.useState)(d),[e$,eM]=(0,r.useState)(!1),[eT,eE]=(0,r.useState)(null),[eF,eK]=(0,r.useState)(null),[eL,e_]=(0,r.useState)(null),[eR,eD]=(0,r.useState)(!1),[eU,eq]=(0,r.useState)(!1),[eB,ez]=(0,r.useState)("full"),[eH,eG]=(0,r.useState)(5),[eW,eY]=(0,r.useState)(0),[eJ,eV]=(0,r.useState)(0),[eQ,eX]=(0,r.useState)(""),[eZ,e0]=(0,r.useState)(null),[e1,e2]=(0,r.useState)(null),[e3,e5]=(0,r.useState)(null),[e4,e8]=(0,r.useState)(null),[e7,e6]=(0,r.useState)(null),[e9,te]=(0,r.useState)(""),[tt,ts]=(0,r.useState)(""),[tn,tr]=(0,r.useState)("all"),[ta,tl]=(0,r.useState)(1),[ti,td]=(0,r.useState)(25),[to,tc]=(0,r.useState)({page:1,pageSize:25,total:0,totalAll:0,totalPages:1,status:"all",search:""}),{copied:tx,copy:tm}=(0,i.C)(),{isAdmin:tu,isMonitorAdmin:th,canManageApiKeys:tp,userId:tb}=(0,l.s)(),tg=tu||th||tp,tf=Number.isFinite(Number(eH))?Number(eH):5,tj=Number.isFinite(Number(eW))?Number(eW):h.length,tv=Number.isFinite(Number(eJ))?Number(eJ):Number(to.totalAll||to.total||0),ty=Number(to.total||0),tN=!tg&&tj>=tf,tk=eQ?`${eQ}/v1`:"/v1",tC=eQ?`${eQ}/v1/chat/completions`:"/v1/chat/completions",tw=c(Q)[0]||"",tP=(e=c(eZ?.allowedModels)[0],t=String(tw||"").trim(),e||t||"YOUR_MODEL"),tO=eZ?g(eZ.limits||{}):d,tA=tO.maxOutputTokens>0?tO.maxOutputTokens:0,tS=eZ?function({endpoint:e,apiKey:t,model:s,maxOutputTokens:n=0}){let r=String(e||"/v1/chat/completions").replace(/"/g,""),a=String(t||"YOUR_API_KEY").replace(/"/g,""),l=u(n,0),i={model:String(s||"YOUR_MODEL"),messages:[{role:"user",content:"Say hi.\nReply in one short sentence."}],temperature:.2,stream:!1};l>0&&(i.max_tokens=l);let d=JSON.stringify(i).replace(/"/g,'\\"');return`curl.exe -X POST "${r}" ^
5
+ }`;function I(e){if(null==e||""===e)return"—";let t=Number(e);return Number.isFinite(t)?t.toLocaleString("vi-VN"):"—"}function $(e){if(null==e||""===e)return"—";let t=Number(e);if(!Number.isFinite(t))return"—";let s=t>0?"+":"";return`${s}${t.toFixed(1)}%`}function M(e){if(null==e||""===e)return"—";let t=Number(e);if(!Number.isFinite(t))return"—";let s=t>0?"+":"";return`${s}${t.toLocaleString("vi-VN")}`}function T({label:e,value:t,hint:s,tone:r="default"}){return(0,n.jsxs)("div",{className:`rounded-xl border p-3 ${"good"===r?"border-emerald-500/25 bg-emerald-500/10 text-emerald-800 dark:text-emerald-200":"bad"===r?"border-red-500/25 bg-red-500/10 text-red-700 dark:text-red-300":"border-border bg-surface/70 text-text-main"}`,children:[(0,n.jsx)("div",{className:"text-[11px] font-medium uppercase tracking-wide opacity-70",children:e}),(0,n.jsx)("div",{className:"mt-1 text-lg font-semibold",children:t}),s?(0,n.jsx)("div",{className:"mt-1 text-[11px] opacity-70",children:s}):null]})}function E({apiKey:e,fallbackModels:t,onClose:s}){let l=(0,r.useMemo)(()=>{let s=c(e?.allowedModels);return s.length>0?s:c(t)},[e,t]),[i,d]=(0,r.useState)(""),[o,x]=(0,r.useState)(S),[u,h]=(0,r.useState)("lite"),[p,b]=(0,r.useState)(!1),[g,f]=(0,r.useState)(""),[j,v]=(0,r.useState)(null);if((0,r.useEffect)(()=>{if(!e)return;let s=c(e.allowedModels),n=c(t);d(s[0]||n[0]||""),h(["lite","full","ultra"].includes(e.cavemanLevel)?e.cavemanLevel:"lite"),x(S),b(!1),f(""),v(null)},[e?.id]),!e)return null;let y=!!i&&!!o.trim()&&!p,N=async()=>{if(y){b(!0),f(""),v(null);try{let t=await fetch(`/api/keys/${e.id}/caveman-test`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:i,prompt:o.trim(),level:u})}),s=await t.json().catch(()=>({}));if(!t.ok){let e=s?.error?.message||s?.error||s?.message||"Kh\xf4ng chạy được Caveman A/B test";throw Error(e)}v(s)}catch(e){f(e?.message||"Kh\xf4ng chạy được Caveman A/B test")}finally{b(!1)}}},k=j?.baseline||null;return(0,n.jsx)(a.aF,{isOpen:!!e,onClose:()=>!p&&s(),title:"Test Caveman A/B",size:"xl",children:(0,n.jsxs)("div",{className:"space-y-5",children:[(0,n.jsx)("div",{className:"overflow-hidden rounded-2xl border border-indigo-500/25 bg-gradient-to-r from-indigo-500/10 via-primary/5 to-cyan-500/10",children:(0,n.jsxs)("div",{className:"flex flex-col gap-3 p-4 sm:flex-row sm:items-center sm:justify-between",children:[(0,n.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,n.jsx)("span",{className:"inline-flex size-11 shrink-0 items-center justify-center rounded-2xl bg-indigo-500/15 text-indigo-700 dark:text-indigo-300",children:(0,n.jsx)("span",{"aria-hidden":"true",className:"material-symbols-outlined text-[25px]",children:"experiment"})}),(0,n.jsxs)("div",{className:"min-w-0",children:[(0,n.jsx)("div",{className:"truncate font-semibold text-text-main",children:e.name||"API Key"}),(0,n.jsx)("div",{className:"mt-0.5 text-xs text-text-muted",children:"So s\xe1nh c\xf9ng prompt: Caveman OFF với mức ON đ\xe3 chọn"})]})]}),(0,n.jsxs)("div",{className:"flex shrink-0 items-center gap-2 text-xs",children:[(0,n.jsx)("span",{className:"rounded-full border border-border bg-background/80 px-2.5 py-1",children:"A/B thực tế"}),(0,n.jsxs)("span",{className:"rounded-full border border-amber-500/30 bg-amber-500/10 px-2.5 py-1 text-amber-700 dark:text-amber-300",children:[2," lượt gọi"]})]})]})}),(0,n.jsxs)("label",{className:"block",children:[(0,n.jsx)("span",{className:"mb-1.5 block text-xs font-medium text-text-muted",children:"Model được ph\xe9p d\xf9ng"}),(0,n.jsxs)("select",{value:i,onChange:e=>d(e.target.value),disabled:p||0===l.length,className:"w-full rounded-xl border border-border bg-background px-3 py-2.5 font-mono text-sm text-text-main outline-none transition focus:border-primary disabled:opacity-60",children:[0===l.length?(0,n.jsx)("option",{value:"",children:"Kh\xf4ng c\xf3 model để test"}):null,l.map(e=>(0,n.jsx)("option",{value:e,children:e},e))]})]}),(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:"mb-2 flex items-center justify-between gap-3",children:[(0,n.jsx)("span",{className:"text-xs font-medium text-text-muted",children:"Mức Caveman"}),(0,n.jsx)("span",{className:"text-[11px] text-text-muted",children:"Tối đa 2.048 output tokens"})]}),(0,n.jsx)("div",{className:"grid gap-2 sm:grid-cols-3",children:A.map(e=>{let t=u===e.value;return(0,n.jsxs)("button",{type:"button",onClick:()=>h(e.value),disabled:p,className:`rounded-xl border p-3 text-left transition ${t?"border-primary bg-primary/10 ring-1 ring-primary/20":"border-border bg-background hover:border-primary/40 hover:bg-surface"} disabled:cursor-default disabled:opacity-80`,children:[(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,n.jsx)("span",{className:"font-semibold text-text-main",children:e.label}),t?(0,n.jsx)("span",{className:"material-symbols-outlined text-[17px] text-primary",children:"check_circle"}):null]}),(0,n.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:e.description})]},e.value)})})]}),(0,n.jsxs)("label",{className:"block",children:[(0,n.jsxs)("div",{className:"mb-1.5 flex items-center justify-between gap-3",children:[(0,n.jsx)("span",{className:"text-xs font-medium text-text-muted",children:"Prompt test"}),(0,n.jsxs)("span",{className:`text-[11px] ${o.length>12e3?"text-red-600":"text-text-muted"}`,children:[o.length.toLocaleString("vi-VN"),"/12.000 k\xfd tự"]})]}),(0,n.jsx)("textarea",{value:o,onChange:e=>x(e.target.value.slice(0,12e3)),disabled:p,rows:7,className:"w-full resize-y rounded-xl border border-border bg-background px-3 py-3 font-mono text-sm leading-6 text-text-main outline-none transition focus:border-primary disabled:opacity-70",placeholder:"Nhập c\xf9ng một prompt để so s\xe1nh Caveman OFF v\xe0 ON..."})]}),(0,n.jsxs)("div",{className:"rounded-xl border border-amber-500/30 bg-amber-500/10 p-3 text-xs leading-5 text-amber-800 dark:text-amber-200",children:[(0,n.jsx)("b",{children:"Lưu \xfd chi ph\xed:"})," ph\xe9p thử gọi provider thật v\xe0 tạo usage/log như request b\xecnh thường. Mỗi lần test d\xf9ng đ\xfang 2 lượt gọi: một baseline OFF v\xe0 một lượt ON ở mức đ\xe3 chọn. Kết quả vẫn c\xf3 thể dao động nhẹ theo model."]}),g?(0,n.jsxs)("div",{className:"flex items-start gap-2 rounded-xl border border-red-500/30 bg-red-500/10 p-3 text-sm text-red-700 dark:text-red-300",children:[(0,n.jsx)("span",{"aria-hidden":"true",className:"material-symbols-outlined text-[19px]",children:"error"}),(0,n.jsx)("span",{children:g})]}):null,p?(0,n.jsxs)("div",{className:"rounded-2xl border border-primary/25 bg-primary/5 p-6 text-center",children:[(0,n.jsx)("span",{className:"material-symbols-outlined animate-spin text-3xl text-primary",children:"progress_activity"}),(0,n.jsxs)("div",{className:"mt-2 font-medium text-text-main",children:["Đang chạy ",2," lượt A/B..."]}),(0,n.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:"Giữ modal mở cho tới khi model trả đủ kết quả. Mỗi lượt c\xf3 timeout tối đa 5 ph\xfat."})]}):null,j&&k?(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"font-semibold text-text-main",children:"Kết quả A/B"}),(0,n.jsxs)("p",{className:"text-xs text-text-muted",children:[j.model," \xb7 ",j.callsMade," lượt gọi \xb7 output cap ",I(j.maxOutputTokens)]})]}),(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-3 py-1 text-xs text-text-muted",children:["Baseline OFF: ",I(k.usage?.outputTokens)," output tokens"]})]}),(0,n.jsx)("div",{className:"grid gap-3 lg:grid-cols-1",children:(j.results||[]).map(e=>{if(e.error)return(0,n.jsxs)("div",{className:"rounded-2xl border border-red-500/30 bg-red-500/10 p-4",children:[(0,n.jsx)("div",{className:"font-semibold uppercase text-red-700 dark:text-red-300",children:e.level}),(0,n.jsx)("div",{className:"mt-2 text-sm text-red-700 dark:text-red-300",children:e.error})]},e.level);let t=e.savings?.outputSaved,s=e.savings?.outputSavedPercent,r=k.usage?.outputTokens!==null&&e.usage?.outputTokens!==null,a=Number(t)>0,l=0>Number(t),i=Number.isFinite(Number(s))?Math.max(0,Math.min(100,Number(s))):0;return(0,n.jsxs)("div",{className:"overflow-hidden rounded-2xl border border-border bg-background shadow-sm",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2 border-b border-border bg-surface/60 px-4 py-3",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("span",{className:"inline-flex size-8 items-center justify-center rounded-xl bg-primary/10 text-primary",children:(0,n.jsx)("span",{"aria-hidden":"true",className:"material-symbols-outlined text-[19px]",children:"compress"})}),(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"font-semibold uppercase text-text-main",children:e.level}),(0,n.jsxs)("div",{className:"text-[11px] text-text-muted",children:[I(e.latencyMs)," ms"]})]})]}),(0,n.jsx)("span",{className:`rounded-full px-2.5 py-1 text-xs font-semibold ${a?"bg-emerald-500/15 text-emerald-700 dark:text-emerald-300":l?"bg-red-500/15 text-red-700 dark:text-red-300":"bg-surface text-text-muted"}`,children:r?`${M(t)} tokens`:"No usage"})]}),(0,n.jsxs)("div",{className:"space-y-3 p-4",children:[(0,n.jsxs)("div",{className:"grid grid-cols-2 gap-2",children:[(0,n.jsx)(T,{label:"OFF output",value:I(k.usage?.outputTokens)}),(0,n.jsx)(T,{label:"ON output",value:I(e.usage?.outputTokens),tone:a?"good":l?"bad":"default"}),(0,n.jsx)(T,{label:"Output giảm",value:r?$(s):"—",hint:r?`${M(t)} token`:"Provider kh\xf4ng trả usage",tone:a?"good":l?"bad":"default"}),(0,n.jsx)(T,{label:"Input overhead",value:M(e.savings?.inputOverhead),hint:"instruction Caveman"})]}),(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:"mb-1 flex justify-between text-[11px] text-text-muted",children:[(0,n.jsx)("span",{children:"Hiệu quả output"}),(0,n.jsx)("span",{children:r?$(s):"—"})]}),(0,n.jsx)("div",{className:"h-2 overflow-hidden rounded-full bg-surface",children:(0,n.jsx)("div",{className:`h-full rounded-full transition-all ${a?"bg-emerald-500":"bg-red-500"}`,style:{width:`${i}%`}})})]}),(0,n.jsxs)("div",{className:"flex items-center justify-between rounded-xl border border-border bg-surface/50 px-3 py-2 text-xs",children:[(0,n.jsx)("span",{className:"text-text-muted",children:"Net total token"}),(0,n.jsxs)("span",{className:`font-semibold ${Number(e.savings?.totalSaved)>0?"text-emerald-700 dark:text-emerald-300":0>Number(e.savings?.totalSaved)?"text-red-600":"text-text-main"}`,children:[M(e.savings?.totalSaved)," (",$(e.savings?.totalSavedPercent),")"]})]})]})]},e.level)})}),(0,n.jsxs)("div",{className:"grid gap-3 lg:grid-cols-2",children:[(0,n.jsxs)("details",{className:"overflow-hidden rounded-xl border border-border bg-background",open:!0,children:[(0,n.jsx)("summary",{className:"cursor-pointer bg-surface/60 px-4 py-3 text-sm font-medium text-text-main",children:"Output baseline \xb7 Caveman OFF"}),(0,n.jsx)("pre",{className:"max-h-80 overflow-auto whitespace-pre-wrap p-4 text-xs leading-5 text-text-muted",children:k.output||"Model kh\xf4ng trả content text."})]}),(j.results||[]).map(e=>(0,n.jsxs)("details",{className:"overflow-hidden rounded-xl border border-border bg-background",open:!0,children:[(0,n.jsxs)("summary",{className:"cursor-pointer bg-surface/60 px-4 py-3 text-sm font-medium text-text-main",children:["Output Caveman \xb7 ",String(e.level||"").toUpperCase()]}),(0,n.jsx)("pre",{className:"max-h-80 overflow-auto whitespace-pre-wrap p-4 text-xs leading-5 text-text-muted",children:e.error||e.output||"Model kh\xf4ng trả content text."})]},`output-${e.level}`))]}),(0,n.jsx)("p",{className:"text-[11px] leading-5 text-text-muted",children:j.note})]}):null,(0,n.jsxs)("div",{className:"flex flex-wrap justify-end gap-2 border-t border-border pt-4",children:[(0,n.jsx)(a.$n,{variant:"ghost",onClick:s,disabled:p,children:"Đ\xf3ng"}),(0,n.jsx)(a.$n,{onClick:N,disabled:!y||o.length>12e3,children:(0,n.jsx)(m,{materialIcon:p?"progress_activity":"experiment",children:p?"Đang test...":"Chạy A/B (2 calls)"})})]})]})})}function F({apiKey:e,owner:t,isAdmin:s,onRename:a,onRotate:l,onEditModels:i,onEditPolicy:d,onAssignOwner:o,onDelete:c}){let[x,u]=(0,r.useState)(!1),h=(0,r.useRef)(null);(0,r.useEffect)(()=>{if(!x)return;let e=e=>{!h.current||h.current.contains(e.target)||u(!1)},t=e=>{"Escape"===e.key&&u(!1)};return document.addEventListener("pointerdown",e,!0),document.addEventListener("keydown",t),()=>{document.removeEventListener("pointerdown",e,!0),document.removeEventListener("keydown",t)}},[h,x,u]);let p=e=>{u(!1),e()};return(0,n.jsxs)("details",{ref:h,className:"group",open:x,onToggle:e=>u(e.currentTarget.open),children:[(0,n.jsx)("summary",{title:"Thao t\xe1c kh\xe1c",className:"flex h-9 cursor-pointer list-none items-center rounded-xl border border-border bg-background px-3 text-sm font-medium text-text-main transition hover:border-primary/50 hover:bg-surface focus:outline-none focus:ring-2 focus:ring-primary/20 [&::-webkit-details-marker]:hidden",children:(0,n.jsx)("span",{"aria-hidden":"true",className:"text-lg leading-none",children:"⋯"})}),(0,n.jsxs)("div",{className:"ml-auto mt-2 w-48 overflow-hidden rounded-xl border border-border bg-background py-1 text-left shadow-xl shadow-black/10",children:[(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>a(e.id,e.name)),children:(0,n.jsx)(m,{icon:"✏️",children:"Đổi t\xean"})}),(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>l(e)),children:(0,n.jsx)(m,{materialIcon:"key",children:"Đổi key"})}),(0,n.jsx)("div",{className:"my-1 border-t border-border"}),(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>i(e)),children:(0,n.jsx)(m,{icon:"\uD83D\uDCE6",children:"Models"})}),s?(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>d(e)),children:(0,n.jsx)(m,{icon:"\uD83D\uDEE1️",children:"Policy"})}):null,s?(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm text-text-main transition hover:bg-surface",onClick:()=>p(()=>o(e.id,t)),children:(0,n.jsx)(m,{icon:"\uD83D\uDC64",children:"Owner"})}):null,(0,n.jsx)("div",{className:"my-1 border-t border-border"}),(0,n.jsx)("button",{type:"button",className:"block w-full px-3 py-2 text-left text-sm font-medium text-red-600 transition hover:bg-red-500/10",onClick:()=>p(()=>c(e.id)),children:(0,n.jsx)(m,{icon:"\uD83D\uDDD1️",children:"X\xf3a"})})]})]})}function K({mode:e,effectiveEnabled:t,effectiveLevel:s,globalEnabled:r,onEdit:a,onInfo:l,onTest:i}){let d=String(s||"lite").toUpperCase();return(0,n.jsxs)("div",{className:`inline-flex max-w-full items-center gap-1.5 whitespace-nowrap rounded-xl border px-2 py-1.5 shadow-sm ${t?"border-emerald-500/30 bg-emerald-500/10 text-emerald-800 dark:text-emerald-200":"border-slate-300/80 bg-slate-500/5 text-slate-700 dark:border-slate-600 dark:text-slate-300"}`,title:`Caveman ${t?"ON":"OFF"} \xb7 ${"inherit"===e?"Kế thừa Global":"on"===e?"Force ON":"Force OFF"} \xb7 Global ${r?"ON":"OFF"} \xb7 Mức ${d}`,children:[(0,n.jsx)("span",{className:`inline-flex size-5 shrink-0 items-center justify-center rounded-md ${t?"bg-emerald-500/15 text-emerald-700 dark:text-emerald-300":"bg-slate-500/10 text-slate-600 dark:text-slate-300"}`,children:(0,n.jsx)("span",{"aria-hidden":"true",className:"material-symbols-outlined text-[15px] leading-none",children:"compress"})}),(0,n.jsx)("button",{type:"button",onClick:l,className:"shrink-0 rounded-md font-semibold underline-offset-2 transition hover:text-primary hover:underline focus:outline-none focus:ring-2 focus:ring-primary/25",title:"Xem hướng dẫn Caveman","aria-label":"Mở hướng dẫn Caveman",children:"Caveman"}),(0,n.jsx)("button",{type:"button",onClick:a,className:`shrink-0 rounded-full border px-2 py-0.5 text-[10px] font-bold tracking-wide transition focus:outline-none focus:ring-2 focus:ring-primary/25 ${t?"border-emerald-500/40 bg-emerald-600 text-white hover:bg-emerald-700":"border-slate-300 bg-white text-slate-600 hover:border-primary/50 hover:text-primary dark:border-slate-600 dark:bg-slate-900/40 dark:text-slate-300"}`,"aria-label":`Mở cấu h\xecnh Caveman, hiện đang ${t?"bật":"tắt"}`,children:t?"ON":"OFF"}),(0,n.jsxs)("span",{className:`inline-flex shrink-0 items-center gap-1 rounded-full border px-2 py-0.5 text-[10px] font-semibold ${t?"border-emerald-500/25 bg-white/55 text-emerald-800 dark:bg-slate-950/20 dark:text-emerald-200":"border-slate-300/80 bg-white/55 text-slate-500 dark:border-slate-600 dark:bg-slate-950/20 dark:text-slate-400"}`,children:[(0,n.jsx)("span",{"aria-hidden":"true",className:"material-symbols-outlined text-[12px] leading-none",children:"tune"}),d]}),(0,n.jsx)("span",{"aria-hidden":"true",className:"h-5 w-px shrink-0 bg-current opacity-15"}),(0,n.jsxs)("button",{type:"button",onClick:i,className:"inline-flex shrink-0 items-center gap-1 rounded-lg border border-indigo-500/30 bg-indigo-500/10 px-2 py-0.5 text-[10px] font-semibold text-indigo-700 transition hover:border-indigo-500/60 hover:bg-indigo-500/20 focus:outline-none focus:ring-2 focus:ring-indigo-500/25 dark:text-indigo-300",title:"Test A/B Caveman với một mức n\xe9n","aria-label":"Mở Caveman A/B test",children:[(0,n.jsx)("span",{"aria-hidden":"true",className:"material-symbols-outlined text-[13px] leading-none",children:"experiment"}),"Test"]})]})}function L({keys:e,copied:t,copy:s,isAdmin:r,globalCavemanEnabled:l,globalCavemanLevel:i,onToggleActive:d,onApiTest:o,onClaudeSettings:x,onOpenCodeSettings:m,onCodexSettings:u,onQwenSettings:h,onRename:p,onRotate:f,onEditModels:j,onEditPolicy:v,onEditCaveman:y,onShowCavemanInfo:N,onCavemanTest:k,onAssignOwner:C,onDelete:w}){return(0,n.jsx)("div",{className:"overflow-hidden rounded-2xl border border-border",children:(0,n.jsx)("div",{className:"overflow-x-auto",children:(0,n.jsxs)("table",{className:"min-w-full divide-y divide-border text-sm",children:[(0,n.jsx)("thead",{className:"bg-surface/80 text-left text-xs uppercase tracking-wide text-text-muted",children:(0,n.jsxs)("tr",{children:[(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"T\xean / Key"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Trạng th\xe1i"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Owner"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Model"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Policy"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 font-medium",children:"Ng\xe0y tạo"}),(0,n.jsx)("th",{className:"whitespace-nowrap px-4 py-3 text-right font-medium",children:"Thao t\xe1c"})]})}),(0,n.jsx)("tbody",{className:"divide-y divide-border bg-background",children:e.map(e=>{var O;let A=e.ownerUser||e.createdByUser||"chưa g\xe1n",S=c(e.allowedModels),I=b(e.limits),$=g(e.limits||{}),M=e.cavemanMode||"inherit",T="on"===M||"off"!==M&&l,E="on"===M?e.cavemanLevel||"lite":i;return(0,n.jsxs)("tr",{className:"align-top transition hover:bg-surface/50",children:[(0,n.jsxs)("td",{className:"min-w-[280px] px-4 py-4",children:[(0,n.jsx)("div",{className:"font-medium text-text-main",children:e.name||"API Key"}),(0,n.jsxs)("div",{className:"group/key mt-2 flex max-w-[380px] items-center gap-2 rounded-xl border border-border bg-surface px-3 py-2 font-mono text-xs text-text-main",children:[(0,n.jsx)("span",{className:"min-w-0 flex-1 truncate",children:(O=e.key)?O.length>12?`${O.slice(0,8)}...${O.slice(-4)}`:O:""}),(0,n.jsxs)("div",{className:"relative shrink-0 group/btn",children:[(0,n.jsx)("button",{type:"button",onClick:()=>s(e.key,e.id),className:"rounded p-0.5 text-text-muted transition hover:bg-sidebar hover:text-primary","aria-label":t===e.id?"Đ\xe3 copy":"Copy API key",children:(0,n.jsx)("span",{className:"material-symbols-outlined text-sm",children:t===e.id?"check":"content_copy"})}),(0,n.jsx)("span",{className:"pointer-events-none absolute left-1/2 top-5 mt-1 -translate-x-1/2 whitespace-nowrap text-[10px] text-text-muted opacity-0 transition-opacity group-hover/btn:opacity-100",children:t===e.id?"Copied!":"Copy"})]}),(0,n.jsxs)("div",{className:"relative shrink-0 group/btn",children:[(0,n.jsx)("button",{type:"button",onClick:()=>o(e),className:"rounded p-0.5 text-text-muted transition hover:bg-sidebar hover:text-primary","aria-label":"Test API key bằng curl",children:(0,n.jsx)("span",{className:"material-symbols-outlined text-sm",children:"science"})}),(0,n.jsx)("span",{className:"pointer-events-none absolute left-1/2 top-5 mt-1 -translate-x-1/2 whitespace-nowrap text-[10px] text-text-muted opacity-0 transition-opacity group-hover/btn:opacity-100",children:"Test"})]})]}),e.createdByUser?(0,n.jsxs)("div",{className:"mt-2 text-xs text-text-muted",children:["Tạo bởi: ",e.createdByUser]}):null]}),(0,n.jsx)("td",{className:"whitespace-nowrap px-4 py-4",children:(0,n.jsx)(a.lM,{checked:!!e.isActive,onChange:t=>d(e.id,t)})}),(0,n.jsx)("td",{className:"min-w-[160px] px-4 py-4",children:(0,n.jsx)("div",{className:"break-all text-sm text-text-main",children:A})}),(0,n.jsx)("td",{className:"px-4 py-4 align-top",children:S.length>0?(0,n.jsxs)("div",{className:"flex flex-col items-start gap-1",children:[S.slice(0,3).map(e=>(0,n.jsx)("span",{className:"max-w-full truncate rounded-full border border-border bg-surface px-2 py-1 font-mono text-xs",children:e},e)),S.length>3?(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1 text-xs",children:["+",S.length-3]}):null]}):(0,n.jsx)("span",{className:"inline-block rounded-full border border-amber-500/30 bg-amber-500/10 px-2 py-1 text-xs text-amber-700 dark:text-amber-300",children:"Legacy full access"})}),(0,n.jsx)("td",{className:"px-4 py-4 align-top",children:(0,n.jsxs)("div",{className:"flex flex-col items-start gap-1 text-xs",children:[I?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:$.enabled?"bật":"tắt"}),(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:[$.requestsPerMinute||"∞","/ph\xfat"]}),(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:[$.promptCharsMax||"∞"," chars"]}),r&&$.maxOutputTokens>0?(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:[$.maxOutputTokens," out"]}):null,r&&$.forceThinkingOff?(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:"thinking off"}):null,$.allowedIpCidrs.length>0?(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1",children:"IP locked"}):null]}):(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-1 text-text-muted",children:"Policy: chưa set"}),(0,n.jsx)(K,{mode:M,effectiveEnabled:T,effectiveLevel:E,globalEnabled:l,onEdit:()=>y(e),onInfo:()=>N(e),onTest:()=>k(e)})]})}),(0,n.jsx)("td",{className:"min-w-[150px] px-4 py-4 text-xs text-text-muted",children:function(e){if(!e)return"kh\xf4ng r\xf5";try{return new Date(e).toLocaleString()}catch{return String(e)}}(e.createdAt)}),(0,n.jsx)("td",{className:"min-w-[200px] px-4 py-4",children:(0,n.jsxs)("div",{className:"flex items-center justify-end gap-2",children:[(0,n.jsx)(F,{apiKey:e,owner:A,isAdmin:r,onRename:p,onRotate:f,onEditModels:j,onEditPolicy:v,onAssignOwner:C,onDelete:w}),(0,n.jsx)(P,{apiKey:e,onClaudeSettings:x,onOpenCodeSettings:m,onCodexSettings:u,onQwenSettings:h})]})})]},e.id)})})]})})})}function _(){let e,t,s,m,[h,p]=(0,r.useState)([]),[v,w]=(0,r.useState)(!0),[P,A]=(0,r.useState)(""),[S,I]=(0,r.useState)(!1),[$,M]=(0,r.useState)(""),[T,F]=(0,r.useState)(""),[K,_]=(0,r.useState)(""),[R,D]=(0,r.useState)(""),[U,q]=(0,r.useState)(null),[B,z]=(0,r.useState)([]),[H,G]=(0,r.useState)(""),[W,Y]=(0,r.useState)(!1),[J,V]=(0,r.useState)(!1),[Q,X]=(0,r.useState)([]),[Z,ee]=(0,r.useState)([]),[et,es]=(0,r.useState)(!1),[en,er]=(0,r.useState)(d),[ea,el]=(0,r.useState)(d),[ei,ed]=(0,r.useState)(!1),[eo,ec]=(0,r.useState)(!1),[ex,em]=(0,r.useState)(!1),[eu,eh]=(0,r.useState)([]),[ep,eb]=(0,r.useState)({}),[eg,ef]=(0,r.useState)(!1),[ej,ev]=(0,r.useState)(!1),[ey,eN]=(0,r.useState)(null),[ek,eC]=(0,r.useState)([]),[ew,eP]=(0,r.useState)(!1),[eO,eA]=(0,r.useState)(null),[eS,eI]=(0,r.useState)(d),[e$,eM]=(0,r.useState)(!1),[eT,eE]=(0,r.useState)(null),[eF,eK]=(0,r.useState)(null),[eL,e_]=(0,r.useState)(null),[eR,eD]=(0,r.useState)(!1),[eU,eq]=(0,r.useState)(!1),[eB,ez]=(0,r.useState)("full"),[eH,eG]=(0,r.useState)(5),[eW,eY]=(0,r.useState)(0),[eJ,eV]=(0,r.useState)(0),[eQ,eX]=(0,r.useState)(""),[eZ,e0]=(0,r.useState)(null),[e1,e2]=(0,r.useState)(null),[e3,e5]=(0,r.useState)(null),[e4,e8]=(0,r.useState)(null),[e7,e6]=(0,r.useState)(null),[e9,te]=(0,r.useState)(""),[tt,ts]=(0,r.useState)(""),[tn,tr]=(0,r.useState)("all"),[ta,tl]=(0,r.useState)(1),[ti,td]=(0,r.useState)(25),[to,tc]=(0,r.useState)({page:1,pageSize:25,total:0,totalAll:0,totalPages:1,status:"all",search:""}),{copied:tx,copy:tm}=(0,i.C)(),{isAdmin:tu,isMonitorAdmin:th,canManageApiKeys:tp,userId:tb}=(0,l.s)(),tg=tu||th||tp,tf=Number.isFinite(Number(eH))?Number(eH):5,tj=Number.isFinite(Number(eW))?Number(eW):h.length,tv=Number.isFinite(Number(eJ))?Number(eJ):Number(to.totalAll||to.total||0),ty=Number(to.total||0),tN=!tg&&tj>=tf,tk=eQ?`${eQ}/v1`:"/v1",tC=eQ?`${eQ}/v1/chat/completions`:"/v1/chat/completions",tw=c(Q)[0]||"",tP=(e=c(eZ?.allowedModels)[0],t=String(tw||"").trim(),e||t||"YOUR_MODEL"),tO=eZ?g(eZ.limits||{}):d,tA=tO.maxOutputTokens>0?tO.maxOutputTokens:0,tS=eZ?function({endpoint:e,apiKey:t,model:s,maxOutputTokens:n=0}){let r=String(e||"/v1/chat/completions").replace(/"/g,""),a=String(t||"YOUR_API_KEY").replace(/"/g,""),l=u(n,0),i={model:String(s||"YOUR_MODEL"),messages:[{role:"user",content:"Say hi.\nReply in one short sentence."}],temperature:.2,stream:!1};l>0&&(i.max_tokens=l);let d=JSON.stringify(i).replace(/"/g,'\\"');return`curl.exe -X POST "${r}" ^
6
6
  -H "Authorization: Bearer ${a}" ^
7
7
  -H "Content-Type: application/json" ^
8
8
  -d "${d}"`}({endpoint:tC,apiKey:eZ.key,model:tP,maxOutputTokens:tA}):"",tI=e1?x(e1,tw):{codingModel:"programmer",fastModel:"programmer-fast"},t$=e1?function({baseUrl:e,apiKey:t,codingModel:s,fastModel:n}){return JSON.stringify({env:{ANTHROPIC_BASE_URL:e||"https://models-gateway.example.com/v1",ANTHROPIC_AUTH_TOKEN:t||"sk-xxxxx",ANTHROPIC_MODEL:s||"programmer",ANTHROPIC_SMALL_FAST_MODEL:n||s||"programmer-fast",ANTHROPIC_DEFAULT_OPUS_MODEL:s||"programmer",ANTHROPIC_DEFAULT_SONNET_MODEL:s||"programmer",ANTHROPIC_DEFAULT_HAIKU_MODEL:n||s||"programmer-fast",CLAUDE_CODE_AUTO_COMPACT_WINDOW:"120000",CLAUDE_AUTOCOMPACT_PCT_OVERRIDE:"75"},theme:"dark",hasCompletedOnboarding:!0},null,2)}({baseUrl:tk,apiKey:e1.key,codingModel:tI.codingModel,fastModel:tI.fastModel}):"",tM=e1?['# C\xe1ch 1: PowerShell installer\nirm https://claude.ai/install.ps1 | iex\n\n# C\xe1ch 2: CMD installer\ncurl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd\n\n# C\xe1ch 3: npm (cần c\xe0i Node.js trước)\nnpm install -g @anthropic-ai/claude-code\nclaude --version\nmkdir $env:USERPROFILE\\.claude -Force\n$utf8NoBom = New-Object System.Text.UTF8Encoding $false\n[System.IO.File]::WriteAllText("$env:USERPROFILE\\.claude\\settings.json", @\'',t$,"'@, $utf8NoBom)\ncd D:\\path\\to\\your-project\nclaude"].join("\n"):"",tT=e3?x(e3,tw):{codingModel:"programmer",fastModel:"programmer-fast"},tE=e3?function({baseUrl:e,apiKey:t,codingModel:s,fastModel:n}){let r=s||"programmer",a=n||r||"programmer-fast",l=`bluerouter/${r}`,i=`bluerouter/${a}`,d={[r]:{name:r,limit:{context:12e4,output:3e4},modalities:{input:["text","image"],output:["text"]}}};return a!==r&&(d[a]={name:a,limit:{context:12e4,output:3e4},modalities:{input:["text"],output:["text"]}}),JSON.stringify({$schema:"https://opencode.ai/config.json",provider:{bluerouter:{npm:"@ai-sdk/openai-compatible",name:"BlueRouter",options:{baseURL:e||"https://models-gateway.example.com/v1",apiKey:t||"sk-xxxxx"},models:d}},model:l,small_model:i,compaction:{auto:!0,prune:!0,reserved:3e4},agent:{explorer:{description:"Fast explorer subagent for codebase exploration",mode:"subagent",model:i}}},null,2)}({baseUrl:tk,apiKey:e3.key,codingModel:tT.codingModel,fastModel:tT.fastModel}):"",tF=e3?['npm install -g opencode-ai\nopencode --version\nmkdir $env:APPDATA\\opencode -Force\n$utf8NoBom = New-Object System.Text.UTF8Encoding $false\n[System.IO.File]::WriteAllText("$env:APPDATA\\opencode\\opencode.json", @\'',tE,"'@, $utf8NoBom)\ncd D:\\path\\to\\your-project\nopencode"].join("\n"):"",tK=e4?x(e4,tw):{codingModel:"programmer",fastModel:"programmer-fast"},tL=e4?function({baseUrl:e,codingModel:t,fastModel:s}){let n=t||"programmer";return`model = "${n}"
package/app/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bluerouter-app",
3
- "version": "5.1.28",
3
+ "version": "5.1.30",
4
4
  "description": "Router web dashboard",
5
5
  "private": false,
6
6
  "scripts": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jheavenknows/bluerouter",
3
- "version": "5.1.28",
3
+ "version": "5.1.30",
4
4
  "description": "Bluerouter CLI - Start and manage Bluerouter server",
5
5
  "bin": {
6
6
  "bluerouter": "./cli.js"