@jheavenknows/bluerouter 5.0.63 → 5.0.66

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 (1227) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +6 -6
  3. package/app/.next-cli-build/build-manifest.json +3 -3
  4. package/app/.next-cli-build/prerender-manifest.json +3 -3
  5. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page.js +1 -1
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page.js.nft.json +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page.js.nft.json +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/api-keys/page_client-reference-manifest.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +1 -1
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +1 -1
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovider/page.js +1 -1
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovider/page.js.nft.json +1 -1
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalcloudprovider/page_client-reference-manifest.js +1 -1
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalquota/page.js +1 -1
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalquota/page.js.nft.json +1 -1
  52. package/app/.next-cli-build/server/app/(dashboard)/dashboard/personalquota/page_client-reference-manifest.js +1 -1
  53. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  54. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  55. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  56. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js +1 -1
  57. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page.js.nft.json +1 -1
  58. package/app/.next-cli-build/server/app/(dashboard)/dashboard/prompt-logs/page_client-reference-manifest.js +1 -1
  59. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page.js +1 -1
  60. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page.js.nft.json +1 -1
  61. package/app/.next-cli-build/server/app/(dashboard)/dashboard/provider-health/page_client-reference-manifest.js +1 -1
  62. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +1 -1
  63. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  64. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  65. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  66. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  67. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  68. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  69. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  70. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  71. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +1 -1
  72. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  73. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  74. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  75. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  76. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  77. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
  78. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  79. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  80. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
  81. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  82. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  83. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +1 -1
  84. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  85. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  86. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  87. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  88. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  89. package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  90. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  91. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  92. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  93. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  94. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  95. package/app/.next-cli-build/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  96. package/app/.next-cli-build/server/app/_global-error.segments/_head.segment.rsc +1 -1
  97. package/app/.next-cli-build/server/app/_global-error.segments/_index.segment.rsc +1 -1
  98. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  99. package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  100. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  101. package/app/.next-cli-build/server/app/_not-found.html +1 -1
  102. package/app/.next-cli-build/server/app/_not-found.rsc +6 -6
  103. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +6 -6
  104. package/app/.next-cli-build/server/app/_not-found.segments/_head.segment.rsc +1 -1
  105. package/app/.next-cli-build/server/app/_not-found.segments/_index.segment.rsc +6 -6
  106. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  107. package/app/.next-cli-build/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  108. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  109. package/app/.next-cli-build/server/app/api/auth/ldap/test/route.js.nft.json +1 -1
  110. package/app/.next-cli-build/server/app/api/auth/ldap/users/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  112. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  114. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  116. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  117. package/app/.next-cli-build/server/app/api/branding/[asset]/route.js.nft.json +1 -1
  118. package/app/.next-cli-build/server/app/api/branding/route.js.nft.json +1 -1
  119. package/app/.next-cli-build/server/app/api/branding/upload/route.js.nft.json +1 -1
  120. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +4 -4
  121. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  122. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +2 -2
  123. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  124. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/autostart/route.js.nft.json +1 -1
  125. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/prompt-log-db/route.js.nft.json +1 -1
  126. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/root-ca/route.js.nft.json +1 -1
  127. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js +2 -2
  129. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  130. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js +2 -2
  131. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  132. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js +1 -1
  133. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js +2 -2
  135. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  136. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js +2 -2
  137. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  139. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  140. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +2 -2
  141. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  142. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js +2 -2
  143. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  144. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js +1 -1
  145. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  146. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js +2 -2
  147. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  148. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js +1 -1
  149. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  150. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js +2 -2
  151. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  152. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js +2 -2
  153. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  154. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js +1 -1
  155. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  156. package/app/.next-cli-build/server/app/api/cli-tools/qwen-settings/route.js +1 -1
  157. package/app/.next-cli-build/server/app/api/cli-tools/qwen-settings/route.js.nft.json +1 -1
  158. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  160. package/app/.next-cli-build/server/app/api/dashboard/analytics/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/dashboard/combos/route.js.nft.json +1 -1
  162. package/app/.next-cli-build/server/app/api/dashboard/endpoint/route.js.nft.json +1 -1
  163. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/[id]/route.js.nft.json +1 -1
  164. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/options/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/dashboard/prompt-logs/route.js.nft.json +1 -1
  166. package/app/.next-cli-build/server/app/api/dashboard/token-saver/route.js.nft.json +1 -1
  167. package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  169. package/app/.next-cli-build/server/app/api/keys/[id]/rotate/route.js.nft.json +1 -1
  170. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  171. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  173. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  174. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  175. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  176. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  177. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  178. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  179. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  180. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  181. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  182. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  183. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  184. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  185. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  186. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  187. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  188. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  189. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  190. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  191. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  192. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  193. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  195. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  197. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/api-key-models/route.js.nft.json +1 -1
  199. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/import-models/route.js.nft.json +1 -1
  200. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/models/[...routeModel]/route.js.nft.json +1 -1
  201. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/route.js.nft.json +1 -1
  202. package/app/.next-cli-build/server/app/api/personal-cloud-providers/[id]/usage/route.js.nft.json +1 -1
  203. package/app/.next-cli-build/server/app/api/personal-cloud-providers/client/route.js.nft.json +1 -1
  204. package/app/.next-cli-build/server/app/api/personal-cloud-providers/permissions/route.js.nft.json +1 -1
  205. package/app/.next-cli-build/server/app/api/personal-cloud-providers/route.js.nft.json +1 -1
  206. package/app/.next-cli-build/server/app/api/personal-cloud-providers/routing/route.js.nft.json +1 -1
  207. package/app/.next-cli-build/server/app/api/pricing/recalculate/route.js.nft.json +1 -1
  208. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  209. package/app/.next-cli-build/server/app/api/provider-health/route.js.nft.json +1 -1
  210. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  211. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  212. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  213. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  214. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  215. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  216. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  217. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  218. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  219. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  220. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  221. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  222. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  223. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  224. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  225. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  226. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  227. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  228. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  229. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  230. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  231. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  232. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  233. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  234. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  235. package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  236. package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  237. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  238. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  239. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  240. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  241. package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  242. package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  243. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  244. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  245. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  246. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  247. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  248. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  249. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  250. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  251. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +2 -2
  252. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  253. package/app/.next-cli-build/server/app/api/tunnel/tailscale-login/route.js.nft.json +1 -1
  254. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js +2 -2
  255. package/app/.next-cli-build/server/app/api/tunnel/tailscale-start-daemon/route.js.nft.json +1 -1
  256. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  257. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  258. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  259. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  260. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  261. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  262. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  263. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  264. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  265. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  266. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  267. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  268. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  269. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  270. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  271. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  272. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  273. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  274. package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  275. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  276. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  277. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  278. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  279. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  280. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  281. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  282. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  283. package/app/.next-cli-build/server/app/api/version/restart/route.js.nft.json +1 -1
  284. package/app/.next-cli-build/server/app/api/version/route.js +1 -1
  285. package/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  286. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  287. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  288. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  289. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  290. package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  291. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  292. package/app/.next-cli-build/server/app/callback.html +1 -1
  293. package/app/.next-cli-build/server/app/callback.rsc +6 -6
  294. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +6 -6
  295. package/app/.next-cli-build/server/app/callback.segments/_head.segment.rsc +1 -1
  296. package/app/.next-cli-build/server/app/callback.segments/_index.segment.rsc +6 -6
  297. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
  298. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +1 -1
  299. package/app/.next-cli-build/server/app/callback.segments/callback.segment.rsc +1 -1
  300. package/app/.next-cli-build/server/app/dashboard/analytics.html +1 -1
  301. package/app/.next-cli-build/server/app/dashboard/analytics.rsc +7 -7
  302. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics/__PAGE__.segment.rsc +1 -1
  303. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard/analytics.segment.rsc +1 -1
  304. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  305. package/app/.next-cli-build/server/app/dashboard/analytics.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  306. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_full.segment.rsc +7 -7
  307. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_head.segment.rsc +1 -1
  308. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_index.segment.rsc +6 -6
  309. package/app/.next-cli-build/server/app/dashboard/analytics.segments/_tree.segment.rsc +2 -2
  310. package/app/.next-cli-build/server/app/dashboard/api-keys.html +1 -1
  311. package/app/.next-cli-build/server/app/dashboard/api-keys.rsc +8 -8
  312. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys/__PAGE__.segment.rsc +2 -2
  313. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard/api-keys.segment.rsc +1 -1
  314. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  315. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  316. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_full.segment.rsc +8 -8
  317. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_head.segment.rsc +1 -1
  318. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_index.segment.rsc +6 -6
  319. package/app/.next-cli-build/server/app/dashboard/api-keys.segments/_tree.segment.rsc +2 -2
  320. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +1 -1
  321. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +8 -8
  322. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +2 -2
  323. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat.segment.rsc +1 -1
  324. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  325. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  326. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +8 -8
  327. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_head.segment.rsc +1 -1
  328. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_index.segment.rsc +6 -6
  329. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  330. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +1 -1
  331. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +8 -8
  332. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +2 -2
  333. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools.segment.rsc +1 -1
  334. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  335. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  336. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +8 -8
  337. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_head.segment.rsc +1 -1
  338. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_index.segment.rsc +6 -6
  339. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  340. package/app/.next-cli-build/server/app/dashboard/combos.html +1 -1
  341. package/app/.next-cli-build/server/app/dashboard/combos.rsc +8 -8
  342. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +2 -2
  343. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos.segment.rsc +1 -1
  344. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  345. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  346. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +8 -8
  347. package/app/.next-cli-build/server/app/dashboard/combos.segments/_head.segment.rsc +1 -1
  348. package/app/.next-cli-build/server/app/dashboard/combos.segments/_index.segment.rsc +6 -6
  349. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  350. package/app/.next-cli-build/server/app/dashboard/endpoint.html +1 -1
  351. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +8 -8
  352. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +2 -2
  353. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint.segment.rsc +1 -1
  354. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  355. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  356. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +8 -8
  357. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_head.segment.rsc +1 -1
  358. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_index.segment.rsc +6 -6
  359. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  360. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +1 -1
  361. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +8 -8
  362. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +2 -2
  363. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web.segment.rsc +1 -1
  364. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers.segment.rsc +1 -1
  365. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  366. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  367. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +8 -8
  368. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_head.segment.rsc +1 -1
  369. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_index.segment.rsc +6 -6
  370. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
  371. package/app/.next-cli-build/server/app/dashboard/mitm.html +1 -1
  372. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +8 -8
  373. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +2 -2
  374. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm.segment.rsc +1 -1
  375. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  376. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  377. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +8 -8
  378. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_head.segment.rsc +1 -1
  379. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_index.segment.rsc +6 -6
  380. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
  381. package/app/.next-cli-build/server/app/dashboard/profile.html +1 -1
  382. package/app/.next-cli-build/server/app/dashboard/profile.rsc +7 -7
  383. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +1 -1
  384. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile.segment.rsc +1 -1
  385. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  386. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  387. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +7 -7
  388. package/app/.next-cli-build/server/app/dashboard/profile.segments/_head.segment.rsc +1 -1
  389. package/app/.next-cli-build/server/app/dashboard/profile.segments/_index.segment.rsc +6 -6
  390. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  391. package/app/.next-cli-build/server/app/dashboard/prompt-logs.html +1 -1
  392. package/app/.next-cli-build/server/app/dashboard/prompt-logs.rsc +7 -7
  393. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs/__PAGE__.segment.rsc +1 -1
  394. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard/prompt-logs.segment.rsc +1 -1
  395. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  396. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  397. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_full.segment.rsc +7 -7
  398. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_head.segment.rsc +1 -1
  399. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_index.segment.rsc +6 -6
  400. package/app/.next-cli-build/server/app/dashboard/prompt-logs.segments/_tree.segment.rsc +2 -2
  401. package/app/.next-cli-build/server/app/dashboard/provider-health.html +1 -1
  402. package/app/.next-cli-build/server/app/dashboard/provider-health.rsc +7 -7
  403. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health/__PAGE__.segment.rsc +1 -1
  404. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard/provider-health.segment.rsc +1 -1
  405. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  406. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  407. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_full.segment.rsc +7 -7
  408. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_head.segment.rsc +1 -1
  409. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_index.segment.rsc +6 -6
  410. package/app/.next-cli-build/server/app/dashboard/provider-health.segments/_tree.segment.rsc +2 -2
  411. package/app/.next-cli-build/server/app/dashboard/providers/new.html +1 -1
  412. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +8 -8
  413. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +2 -2
  414. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new.segment.rsc +1 -1
  415. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  416. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  417. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  418. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +8 -8
  419. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_head.segment.rsc +1 -1
  420. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_index.segment.rsc +6 -6
  421. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  422. package/app/.next-cli-build/server/app/dashboard/providers.html +1 -1
  423. package/app/.next-cli-build/server/app/dashboard/providers.rsc +8 -8
  424. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +2 -2
  425. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers.segment.rsc +1 -1
  426. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  427. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  428. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +8 -8
  429. package/app/.next-cli-build/server/app/dashboard/providers.segments/_head.segment.rsc +1 -1
  430. package/app/.next-cli-build/server/app/dashboard/providers.segments/_index.segment.rsc +6 -6
  431. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  432. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +1 -1
  433. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +8 -8
  434. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +2 -2
  435. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools.segment.rsc +1 -1
  436. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  437. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  438. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +8 -8
  439. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_head.segment.rsc +1 -1
  440. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_index.segment.rsc +6 -6
  441. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  442. package/app/.next-cli-build/server/app/dashboard/quota.html +1 -1
  443. package/app/.next-cli-build/server/app/dashboard/quota.rsc +9 -9
  444. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +3 -3
  445. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota.segment.rsc +1 -1
  446. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  447. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  448. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +9 -9
  449. package/app/.next-cli-build/server/app/dashboard/quota.segments/_head.segment.rsc +1 -1
  450. package/app/.next-cli-build/server/app/dashboard/quota.segments/_index.segment.rsc +6 -6
  451. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  452. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  453. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  454. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +1 -1
  455. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +6 -6
  456. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +6 -6
  457. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_head.segment.rsc +1 -1
  458. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_index.segment.rsc +6 -6
  459. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  460. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +1 -1
  461. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing.segment.rsc +1 -1
  462. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings.segment.rsc +1 -1
  463. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard.segment.rsc +1 -1
  464. package/app/.next-cli-build/server/app/dashboard/skills.html +1 -1
  465. package/app/.next-cli-build/server/app/dashboard/skills.rsc +8 -8
  466. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +2 -2
  467. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills.segment.rsc +1 -1
  468. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  469. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  470. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +8 -8
  471. package/app/.next-cli-build/server/app/dashboard/skills.segments/_head.segment.rsc +1 -1
  472. package/app/.next-cli-build/server/app/dashboard/skills.segments/_index.segment.rsc +6 -6
  473. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
  474. package/app/.next-cli-build/server/app/dashboard/token-saver.html +1 -1
  475. package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +7 -7
  476. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +1 -1
  477. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver.segment.rsc +1 -1
  478. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  479. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  480. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +7 -7
  481. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_head.segment.rsc +1 -1
  482. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_index.segment.rsc +6 -6
  483. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
  484. package/app/.next-cli-build/server/app/dashboard/translator.html +1 -1
  485. package/app/.next-cli-build/server/app/dashboard/translator.rsc +8 -8
  486. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +2 -2
  487. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator.segment.rsc +1 -1
  488. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  489. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  490. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +8 -8
  491. package/app/.next-cli-build/server/app/dashboard/translator.segments/_head.segment.rsc +1 -1
  492. package/app/.next-cli-build/server/app/dashboard/translator.segments/_index.segment.rsc +6 -6
  493. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  494. package/app/.next-cli-build/server/app/dashboard/usage.html +1 -1
  495. package/app/.next-cli-build/server/app/dashboard/usage.rsc +8 -8
  496. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +2 -2
  497. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage.segment.rsc +1 -1
  498. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  499. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  500. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +8 -8
  501. package/app/.next-cli-build/server/app/dashboard/usage.segments/_head.segment.rsc +1 -1
  502. package/app/.next-cli-build/server/app/dashboard/usage.segments/_index.segment.rsc +6 -6
  503. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  504. package/app/.next-cli-build/server/app/dashboard.html +1 -1
  505. package/app/.next-cli-build/server/app/dashboard.rsc +8 -8
  506. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +2 -2
  507. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard.segment.rsc +1 -1
  508. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk.segment.rsc +2 -2
  509. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +8 -8
  510. package/app/.next-cli-build/server/app/dashboard.segments/_head.segment.rsc +1 -1
  511. package/app/.next-cli-build/server/app/dashboard.segments/_index.segment.rsc +6 -6
  512. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  513. package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +1 -1
  514. package/app/.next-cli-build/server/app/index.html +1 -1
  515. package/app/.next-cli-build/server/app/index.rsc +6 -6
  516. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  517. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +6 -6
  518. package/app/.next-cli-build/server/app/index.segments/_head.segment.rsc +1 -1
  519. package/app/.next-cli-build/server/app/index.segments/_index.segment.rsc +6 -6
  520. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
  521. package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  522. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  523. package/app/.next-cli-build/server/app/landing.html +1 -1
  524. package/app/.next-cli-build/server/app/landing.rsc +6 -6
  525. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +6 -6
  526. package/app/.next-cli-build/server/app/landing.segments/_head.segment.rsc +1 -1
  527. package/app/.next-cli-build/server/app/landing.segments/_index.segment.rsc +6 -6
  528. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
  529. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +1 -1
  530. package/app/.next-cli-build/server/app/landing.segments/landing.segment.rsc +1 -1
  531. package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  532. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  533. package/app/.next-cli-build/server/app/login.html +1 -1
  534. package/app/.next-cli-build/server/app/login.rsc +7 -7
  535. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +7 -7
  536. package/app/.next-cli-build/server/app/login.segments/_head.segment.rsc +1 -1
  537. package/app/.next-cli-build/server/app/login.segments/_index.segment.rsc +6 -6
  538. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
  539. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +2 -2
  540. package/app/.next-cli-build/server/app/login.segments/login.segment.rsc +1 -1
  541. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  542. package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  543. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  544. package/app/.next-cli-build/server/app-paths-manifest.json +6 -6
  545. package/app/.next-cli-build/server/chunks/2338.js +12 -12
  546. package/app/.next-cli-build/server/chunks/3110.js +1 -1
  547. package/app/.next-cli-build/server/chunks/4746.js +1 -1
  548. package/app/.next-cli-build/server/chunks/5852.js +1 -1
  549. package/app/.next-cli-build/server/chunks/6311.js +64 -0
  550. package/app/.next-cli-build/server/chunks/6328.js +1 -1
  551. package/app/.next-cli-build/server/chunks/700.js +1 -1
  552. package/app/.next-cli-build/server/chunks/7774.js +15 -15
  553. package/app/.next-cli-build/server/chunks/9434.js +1 -1
  554. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  555. package/app/.next-cli-build/server/pages/404.html +1 -1
  556. package/app/.next-cli-build/server/pages/500.html +1 -1
  557. package/app/.next-cli-build/server/server-reference-manifest.js +1 -1
  558. package/app/.next-cli-build/server/server-reference-manifest.json +1 -1
  559. package/app/.next-cli-build/static/chunks/1a258343-1aa1820b9db68d51.js +1 -0
  560. package/app/.next-cli-build/static/chunks/{3794-e569667691edc8f7.js → 3794-c66b3d8325973459.js} +1 -1
  561. package/app/.next-cli-build/static/chunks/4546-4583313eeecaf077.js +64 -0
  562. package/app/.next-cli-build/static/chunks/{5263-0e62dd658edee31f.js → 5263-1e44db1e3d932c64.js} +1 -1
  563. package/app/.next-cli-build/static/chunks/{5497-a9046e228f954dda.js → 5497-fb31f66166ad1f83.js} +1 -1
  564. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/api-keys/{page-d17cba5c03249383.js → page-51c6597458141664.js} +1 -1
  565. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/basic-chat/{page-0fe6555804a9264b.js → page-0a77cb24c31eab31.js} +1 -1
  566. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/{page-0986f42dc41bebfa.js → page-3c45d7965e695b4e.js} +1 -1
  567. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/cli-tools/{page-8cb2fafd44d2c944.js → page-2073cc7c324f2927.js} +1 -1
  568. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/combos/{page-763ed716338265f6.js → page-88776e0540bc6caa.js} +1 -1
  569. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/console-log/{page-81216d587547efe4.js → page-8258e0c2b7d00532.js} +1 -1
  570. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/endpoint/{page-f10f073dea6135f8.js → page-50e2d958c7514352.js} +1 -1
  571. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/{page-8b4b169b67b0d2db.js → page-bdb773958eff93b1.js} +1 -1
  572. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/{page-cf61958f42923b69.js → page-4a342a849f926efb.js} +1 -1
  573. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/combo/[id]/{page-b536542f0a708a46.js → page-81241b2ec53c6dac.js} +1 -1
  574. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/web/{page-6fc459277027e444.js → page-b99de5582f2f7f87.js} +1 -1
  575. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/mitm/{page-0dd15fd784e80046.js → page-7955be4ef5b827d6.js} +1 -1
  576. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/{page-f10f073dea6135f8.js → page-50e2d958c7514352.js} +1 -1
  577. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/personalcloudprovider/{page-4c6266f1aa994f76.js → page-e3b94266bfc673d3.js} +1 -1
  578. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-a31cb59b5b878dc4.js → page-78e7686a514a3a7c.js} +1 -1
  579. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/new/{page-feab08fd8ea3abf9.js → page-7c978d638cf25edd.js} +1 -1
  580. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/{page-d57a153d2e06360f.js → page-73e4562a8248af00.js} +1 -1
  581. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/proxy-pools/{page-3c1de0fa6ff18f08.js → page-ab3b656faf565d92.js} +1 -1
  582. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/{page-3a31e39003735195.js → page-53d81795dbcc226d.js} +1 -1
  583. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/skills/{page-533d2b73e2f2f7b0.js → page-ba5ad266df727471.js} +1 -1
  584. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/translator/{page-c3eeeaf049d89657.js → page-fc7b93e145b1ff16.js} +1 -1
  585. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/usage/{page-7579b49088999a9c.js → page-f02c40e946c83bc6.js} +1 -1
  586. package/app/.next-cli-build/static/chunks/app/(dashboard)/{layout-ca699ce314f4007e.js → layout-ba91fa40d4a5ecd4.js} +1 -1
  587. package/app/.next-cli-build/static/chunks/{main-eb1b86e4183e86c5.js → main-52cce31a84751ecc.js} +1 -1
  588. package/app/.next-cli-build/static/css/{43be12accd363118.css → 99c640571568eb2b.css} +1 -1
  589. package/app/cli/.build-home/AppData/Roaming/nextjs-nodejs/Config/config.json +3 -3
  590. package/app/node_modules/@next/env/package.json +7 -8
  591. package/app/node_modules/baseline-browser-mapping/dist/index.cjs +1 -1
  592. package/app/node_modules/baseline-browser-mapping/package.json +3 -3
  593. package/app/node_modules/caniuse-lite/data/agents.js +1 -1
  594. package/app/node_modules/caniuse-lite/data/browserVersions.js +1 -1
  595. package/app/node_modules/caniuse-lite/data/features/aac.js +1 -1
  596. package/app/node_modules/caniuse-lite/data/features/abortcontroller.js +1 -1
  597. package/app/node_modules/caniuse-lite/data/features/ac3-ec3.js +1 -1
  598. package/app/node_modules/caniuse-lite/data/features/accelerometer.js +1 -1
  599. package/app/node_modules/caniuse-lite/data/features/addeventlistener.js +1 -1
  600. package/app/node_modules/caniuse-lite/data/features/alternate-stylesheet.js +1 -1
  601. package/app/node_modules/caniuse-lite/data/features/ambient-light.js +1 -1
  602. package/app/node_modules/caniuse-lite/data/features/apng.js +1 -1
  603. package/app/node_modules/caniuse-lite/data/features/array-find-index.js +1 -1
  604. package/app/node_modules/caniuse-lite/data/features/array-find.js +1 -1
  605. package/app/node_modules/caniuse-lite/data/features/array-flat.js +1 -1
  606. package/app/node_modules/caniuse-lite/data/features/array-includes.js +1 -1
  607. package/app/node_modules/caniuse-lite/data/features/arrow-functions.js +1 -1
  608. package/app/node_modules/caniuse-lite/data/features/asmjs.js +1 -1
  609. package/app/node_modules/caniuse-lite/data/features/async-clipboard.js +1 -1
  610. package/app/node_modules/caniuse-lite/data/features/async-functions.js +1 -1
  611. package/app/node_modules/caniuse-lite/data/features/atob-btoa.js +1 -1
  612. package/app/node_modules/caniuse-lite/data/features/audio-api.js +1 -1
  613. package/app/node_modules/caniuse-lite/data/features/audio.js +1 -1
  614. package/app/node_modules/caniuse-lite/data/features/audiotracks.js +1 -1
  615. package/app/node_modules/caniuse-lite/data/features/autofocus.js +1 -1
  616. package/app/node_modules/caniuse-lite/data/features/auxclick.js +1 -1
  617. package/app/node_modules/caniuse-lite/data/features/av1.js +1 -1
  618. package/app/node_modules/caniuse-lite/data/features/avif.js +1 -1
  619. package/app/node_modules/caniuse-lite/data/features/background-attachment.js +1 -1
  620. package/app/node_modules/caniuse-lite/data/features/background-clip-text.js +1 -1
  621. package/app/node_modules/caniuse-lite/data/features/background-img-opts.js +1 -1
  622. package/app/node_modules/caniuse-lite/data/features/background-position-x-y.js +1 -1
  623. package/app/node_modules/caniuse-lite/data/features/background-repeat-round-space.js +1 -1
  624. package/app/node_modules/caniuse-lite/data/features/background-sync.js +1 -1
  625. package/app/node_modules/caniuse-lite/data/features/battery-status.js +1 -1
  626. package/app/node_modules/caniuse-lite/data/features/beacon.js +1 -1
  627. package/app/node_modules/caniuse-lite/data/features/beforeafterprint.js +1 -1
  628. package/app/node_modules/caniuse-lite/data/features/bigint.js +1 -1
  629. package/app/node_modules/caniuse-lite/data/features/blobbuilder.js +1 -1
  630. package/app/node_modules/caniuse-lite/data/features/bloburls.js +1 -1
  631. package/app/node_modules/caniuse-lite/data/features/border-image.js +1 -1
  632. package/app/node_modules/caniuse-lite/data/features/border-radius.js +1 -1
  633. package/app/node_modules/caniuse-lite/data/features/broadcastchannel.js +1 -1
  634. package/app/node_modules/caniuse-lite/data/features/brotli.js +1 -1
  635. package/app/node_modules/caniuse-lite/data/features/calc.js +1 -1
  636. package/app/node_modules/caniuse-lite/data/features/canvas-blending.js +1 -1
  637. package/app/node_modules/caniuse-lite/data/features/canvas-text.js +1 -1
  638. package/app/node_modules/caniuse-lite/data/features/canvas.js +1 -1
  639. package/app/node_modules/caniuse-lite/data/features/ch-unit.js +1 -1
  640. package/app/node_modules/caniuse-lite/data/features/chacha20-poly1305.js +1 -1
  641. package/app/node_modules/caniuse-lite/data/features/channel-messaging.js +1 -1
  642. package/app/node_modules/caniuse-lite/data/features/childnode-remove.js +1 -1
  643. package/app/node_modules/caniuse-lite/data/features/classlist.js +1 -1
  644. package/app/node_modules/caniuse-lite/data/features/client-hints-dpr-width-viewport.js +1 -1
  645. package/app/node_modules/caniuse-lite/data/features/clipboard.js +1 -1
  646. package/app/node_modules/caniuse-lite/data/features/colr-v1.js +1 -1
  647. package/app/node_modules/caniuse-lite/data/features/colr.js +1 -1
  648. package/app/node_modules/caniuse-lite/data/features/comparedocumentposition.js +1 -1
  649. package/app/node_modules/caniuse-lite/data/features/console-basic.js +1 -1
  650. package/app/node_modules/caniuse-lite/data/features/console-time.js +1 -1
  651. package/app/node_modules/caniuse-lite/data/features/const.js +1 -1
  652. package/app/node_modules/caniuse-lite/data/features/constraint-validation.js +1 -1
  653. package/app/node_modules/caniuse-lite/data/features/contenteditable.js +1 -1
  654. package/app/node_modules/caniuse-lite/data/features/contentsecuritypolicy.js +1 -1
  655. package/app/node_modules/caniuse-lite/data/features/contentsecuritypolicy2.js +1 -1
  656. package/app/node_modules/caniuse-lite/data/features/cookie-store-api.js +1 -1
  657. package/app/node_modules/caniuse-lite/data/features/cors.js +1 -1
  658. package/app/node_modules/caniuse-lite/data/features/createimagebitmap.js +1 -1
  659. package/app/node_modules/caniuse-lite/data/features/credential-management.js +1 -1
  660. package/app/node_modules/caniuse-lite/data/features/cross-document-view-transitions.js +1 -1
  661. package/app/node_modules/caniuse-lite/data/features/cryptography.js +1 -1
  662. package/app/node_modules/caniuse-lite/data/features/css-all.js +1 -1
  663. package/app/node_modules/caniuse-lite/data/features/css-anchor-positioning.js +1 -1
  664. package/app/node_modules/caniuse-lite/data/features/css-animation.js +1 -1
  665. package/app/node_modules/caniuse-lite/data/features/css-any-link.js +1 -1
  666. package/app/node_modules/caniuse-lite/data/features/css-appearance.js +1 -1
  667. package/app/node_modules/caniuse-lite/data/features/css-at-counter-style.js +1 -1
  668. package/app/node_modules/caniuse-lite/data/features/css-autofill.js +1 -1
  669. package/app/node_modules/caniuse-lite/data/features/css-backdrop-filter.js +1 -1
  670. package/app/node_modules/caniuse-lite/data/features/css-background-offsets.js +1 -1
  671. package/app/node_modules/caniuse-lite/data/features/css-backgroundblendmode.js +1 -1
  672. package/app/node_modules/caniuse-lite/data/features/css-boxdecorationbreak.js +1 -1
  673. package/app/node_modules/caniuse-lite/data/features/css-boxshadow.js +1 -1
  674. package/app/node_modules/caniuse-lite/data/features/css-canvas.js +1 -1
  675. package/app/node_modules/caniuse-lite/data/features/css-caret-color.js +1 -1
  676. package/app/node_modules/caniuse-lite/data/features/css-cascade-layers.js +1 -1
  677. package/app/node_modules/caniuse-lite/data/features/css-cascade-scope.js +1 -1
  678. package/app/node_modules/caniuse-lite/data/features/css-case-insensitive.js +1 -1
  679. package/app/node_modules/caniuse-lite/data/features/css-clip-path.js +1 -1
  680. package/app/node_modules/caniuse-lite/data/features/css-color-adjust.js +1 -1
  681. package/app/node_modules/caniuse-lite/data/features/css-color-function.js +1 -1
  682. package/app/node_modules/caniuse-lite/data/features/css-conic-gradients.js +1 -1
  683. package/app/node_modules/caniuse-lite/data/features/css-container-queries-style.js +1 -1
  684. package/app/node_modules/caniuse-lite/data/features/css-container-queries.js +1 -1
  685. package/app/node_modules/caniuse-lite/data/features/css-container-query-units.js +1 -1
  686. package/app/node_modules/caniuse-lite/data/features/css-containment.js +1 -1
  687. package/app/node_modules/caniuse-lite/data/features/css-content-visibility.js +1 -1
  688. package/app/node_modules/caniuse-lite/data/features/css-counters.js +1 -1
  689. package/app/node_modules/caniuse-lite/data/features/css-crisp-edges.js +1 -1
  690. package/app/node_modules/caniuse-lite/data/features/css-cross-fade.js +1 -1
  691. package/app/node_modules/caniuse-lite/data/features/css-default-pseudo.js +1 -1
  692. package/app/node_modules/caniuse-lite/data/features/css-descendant-gtgt.js +1 -1
  693. package/app/node_modules/caniuse-lite/data/features/css-deviceadaptation.js +1 -1
  694. package/app/node_modules/caniuse-lite/data/features/css-dir-pseudo.js +1 -1
  695. package/app/node_modules/caniuse-lite/data/features/css-display-contents.js +1 -1
  696. package/app/node_modules/caniuse-lite/data/features/css-element-function.js +1 -1
  697. package/app/node_modules/caniuse-lite/data/features/css-env-function.js +1 -1
  698. package/app/node_modules/caniuse-lite/data/features/css-exclusions.js +1 -1
  699. package/app/node_modules/caniuse-lite/data/features/css-featurequeries.js +1 -1
  700. package/app/node_modules/caniuse-lite/data/features/css-file-selector-button.js +1 -1
  701. package/app/node_modules/caniuse-lite/data/features/css-filter-function.js +1 -1
  702. package/app/node_modules/caniuse-lite/data/features/css-filters.js +1 -1
  703. package/app/node_modules/caniuse-lite/data/features/css-first-letter.js +1 -1
  704. package/app/node_modules/caniuse-lite/data/features/css-first-line.js +1 -1
  705. package/app/node_modules/caniuse-lite/data/features/css-fixed.js +1 -1
  706. package/app/node_modules/caniuse-lite/data/features/css-focus-visible.js +1 -1
  707. package/app/node_modules/caniuse-lite/data/features/css-focus-within.js +1 -1
  708. package/app/node_modules/caniuse-lite/data/features/css-font-palette.js +1 -1
  709. package/app/node_modules/caniuse-lite/data/features/css-font-rendering-controls.js +1 -1
  710. package/app/node_modules/caniuse-lite/data/features/css-font-stretch.js +1 -1
  711. package/app/node_modules/caniuse-lite/data/features/css-gencontent.js +1 -1
  712. package/app/node_modules/caniuse-lite/data/features/css-gradients.js +1 -1
  713. package/app/node_modules/caniuse-lite/data/features/css-grid-animation.js +1 -1
  714. package/app/node_modules/caniuse-lite/data/features/css-grid-lanes.js +1 -1
  715. package/app/node_modules/caniuse-lite/data/features/css-grid.js +1 -1
  716. package/app/node_modules/caniuse-lite/data/features/css-hanging-punctuation.js +1 -1
  717. package/app/node_modules/caniuse-lite/data/features/css-has.js +1 -1
  718. package/app/node_modules/caniuse-lite/data/features/css-hyphens.js +1 -1
  719. package/app/node_modules/caniuse-lite/data/features/css-if.js +1 -1
  720. package/app/node_modules/caniuse-lite/data/features/css-image-orientation.js +1 -1
  721. package/app/node_modules/caniuse-lite/data/features/css-image-set.js +1 -1
  722. package/app/node_modules/caniuse-lite/data/features/css-in-out-of-range.js +1 -1
  723. package/app/node_modules/caniuse-lite/data/features/css-indeterminate-pseudo.js +1 -1
  724. package/app/node_modules/caniuse-lite/data/features/css-initial-letter.js +1 -1
  725. package/app/node_modules/caniuse-lite/data/features/css-initial-value.js +1 -1
  726. package/app/node_modules/caniuse-lite/data/features/css-lch-lab.js +1 -1
  727. package/app/node_modules/caniuse-lite/data/features/css-letter-spacing.js +1 -1
  728. package/app/node_modules/caniuse-lite/data/features/css-line-clamp.js +1 -1
  729. package/app/node_modules/caniuse-lite/data/features/css-logical-props.js +1 -1
  730. package/app/node_modules/caniuse-lite/data/features/css-marker-pseudo.js +1 -1
  731. package/app/node_modules/caniuse-lite/data/features/css-masks.js +1 -1
  732. package/app/node_modules/caniuse-lite/data/features/css-matches-pseudo.js +1 -1
  733. package/app/node_modules/caniuse-lite/data/features/css-math-functions.js +1 -1
  734. package/app/node_modules/caniuse-lite/data/features/css-media-interaction.js +1 -1
  735. package/app/node_modules/caniuse-lite/data/features/css-media-range-syntax.js +1 -1
  736. package/app/node_modules/caniuse-lite/data/features/css-media-resolution.js +1 -1
  737. package/app/node_modules/caniuse-lite/data/features/css-media-scripting.js +1 -1
  738. package/app/node_modules/caniuse-lite/data/features/css-mediaqueries.js +1 -1
  739. package/app/node_modules/caniuse-lite/data/features/css-mixblendmode.js +1 -1
  740. package/app/node_modules/caniuse-lite/data/features/css-module-scripts.js +1 -1
  741. package/app/node_modules/caniuse-lite/data/features/css-motion-paths.js +1 -1
  742. package/app/node_modules/caniuse-lite/data/features/css-namespaces.js +1 -1
  743. package/app/node_modules/caniuse-lite/data/features/css-nesting.js +1 -1
  744. package/app/node_modules/caniuse-lite/data/features/css-not-sel-list.js +1 -1
  745. package/app/node_modules/caniuse-lite/data/features/css-nth-child-of.js +1 -1
  746. package/app/node_modules/caniuse-lite/data/features/css-opacity.js +1 -1
  747. package/app/node_modules/caniuse-lite/data/features/css-optional-pseudo.js +1 -1
  748. package/app/node_modules/caniuse-lite/data/features/css-overflow-anchor.js +1 -1
  749. package/app/node_modules/caniuse-lite/data/features/css-overflow-overlay.js +1 -1
  750. package/app/node_modules/caniuse-lite/data/features/css-overflow.js +1 -1
  751. package/app/node_modules/caniuse-lite/data/features/css-overscroll-behavior.js +1 -1
  752. package/app/node_modules/caniuse-lite/data/features/css-page-break.js +1 -1
  753. package/app/node_modules/caniuse-lite/data/features/css-paged-media.js +1 -1
  754. package/app/node_modules/caniuse-lite/data/features/css-paint-api.js +1 -1
  755. package/app/node_modules/caniuse-lite/data/features/css-placeholder-shown.js +1 -1
  756. package/app/node_modules/caniuse-lite/data/features/css-placeholder.js +1 -1
  757. package/app/node_modules/caniuse-lite/data/features/css-print-color-adjust.js +1 -1
  758. package/app/node_modules/caniuse-lite/data/features/css-read-only-write.js +1 -1
  759. package/app/node_modules/caniuse-lite/data/features/css-rebeccapurple.js +1 -1
  760. package/app/node_modules/caniuse-lite/data/features/css-reflections.js +1 -1
  761. package/app/node_modules/caniuse-lite/data/features/css-regions.js +1 -1
  762. package/app/node_modules/caniuse-lite/data/features/css-relative-colors.js +1 -1
  763. package/app/node_modules/caniuse-lite/data/features/css-repeating-gradients.js +1 -1
  764. package/app/node_modules/caniuse-lite/data/features/css-resize.js +1 -1
  765. package/app/node_modules/caniuse-lite/data/features/css-revert-value.js +1 -1
  766. package/app/node_modules/caniuse-lite/data/features/css-rrggbbaa.js +1 -1
  767. package/app/node_modules/caniuse-lite/data/features/css-scroll-behavior.js +1 -1
  768. package/app/node_modules/caniuse-lite/data/features/css-scrollbar.js +1 -1
  769. package/app/node_modules/caniuse-lite/data/features/css-sel2.js +1 -1
  770. package/app/node_modules/caniuse-lite/data/features/css-sel3.js +1 -1
  771. package/app/node_modules/caniuse-lite/data/features/css-selection.js +1 -1
  772. package/app/node_modules/caniuse-lite/data/features/css-shapes.js +1 -1
  773. package/app/node_modules/caniuse-lite/data/features/css-snappoints.js +1 -1
  774. package/app/node_modules/caniuse-lite/data/features/css-sticky.js +1 -1
  775. package/app/node_modules/caniuse-lite/data/features/css-subgrid.js +1 -1
  776. package/app/node_modules/caniuse-lite/data/features/css-supports-api.js +1 -1
  777. package/app/node_modules/caniuse-lite/data/features/css-table.js +1 -1
  778. package/app/node_modules/caniuse-lite/data/features/css-text-align-last.js +1 -1
  779. package/app/node_modules/caniuse-lite/data/features/css-text-box-trim.js +1 -1
  780. package/app/node_modules/caniuse-lite/data/features/css-text-indent.js +1 -1
  781. package/app/node_modules/caniuse-lite/data/features/css-text-justify.js +1 -1
  782. package/app/node_modules/caniuse-lite/data/features/css-text-orientation.js +1 -1
  783. package/app/node_modules/caniuse-lite/data/features/css-text-spacing.js +1 -1
  784. package/app/node_modules/caniuse-lite/data/features/css-text-wrap-balance.js +1 -1
  785. package/app/node_modules/caniuse-lite/data/features/css-textshadow.js +1 -1
  786. package/app/node_modules/caniuse-lite/data/features/css-touch-action.js +1 -1
  787. package/app/node_modules/caniuse-lite/data/features/css-transitions.js +1 -1
  788. package/app/node_modules/caniuse-lite/data/features/css-unicode-bidi.js +1 -1
  789. package/app/node_modules/caniuse-lite/data/features/css-unset-value.js +1 -1
  790. package/app/node_modules/caniuse-lite/data/features/css-variables.js +1 -1
  791. package/app/node_modules/caniuse-lite/data/features/css-when-else.js +1 -1
  792. package/app/node_modules/caniuse-lite/data/features/css-widows-orphans.js +1 -1
  793. package/app/node_modules/caniuse-lite/data/features/css-width-stretch.js +1 -1
  794. package/app/node_modules/caniuse-lite/data/features/css-writing-mode.js +1 -1
  795. package/app/node_modules/caniuse-lite/data/features/css-zoom.js +1 -1
  796. package/app/node_modules/caniuse-lite/data/features/css3-attr.js +1 -1
  797. package/app/node_modules/caniuse-lite/data/features/css3-boxsizing.js +1 -1
  798. package/app/node_modules/caniuse-lite/data/features/css3-colors.js +1 -1
  799. package/app/node_modules/caniuse-lite/data/features/css3-cursors-grab.js +1 -1
  800. package/app/node_modules/caniuse-lite/data/features/css3-cursors-newer.js +1 -1
  801. package/app/node_modules/caniuse-lite/data/features/css3-cursors.js +1 -1
  802. package/app/node_modules/caniuse-lite/data/features/css3-tabsize.js +1 -1
  803. package/app/node_modules/caniuse-lite/data/features/currentcolor.js +1 -1
  804. package/app/node_modules/caniuse-lite/data/features/custom-elements.js +1 -1
  805. package/app/node_modules/caniuse-lite/data/features/custom-elementsv1.js +1 -1
  806. package/app/node_modules/caniuse-lite/data/features/customevent.js +1 -1
  807. package/app/node_modules/caniuse-lite/data/features/customizable-select.js +1 -1
  808. package/app/node_modules/caniuse-lite/data/features/datalist.js +1 -1
  809. package/app/node_modules/caniuse-lite/data/features/dataset.js +1 -1
  810. package/app/node_modules/caniuse-lite/data/features/datauri.js +1 -1
  811. package/app/node_modules/caniuse-lite/data/features/date-tolocaledatestring.js +1 -1
  812. package/app/node_modules/caniuse-lite/data/features/declarative-shadow-dom.js +1 -1
  813. package/app/node_modules/caniuse-lite/data/features/decorators.js +1 -1
  814. package/app/node_modules/caniuse-lite/data/features/details.js +1 -1
  815. package/app/node_modules/caniuse-lite/data/features/deviceorientation.js +1 -1
  816. package/app/node_modules/caniuse-lite/data/features/devicepixelratio.js +1 -1
  817. package/app/node_modules/caniuse-lite/data/features/dialog.js +1 -1
  818. package/app/node_modules/caniuse-lite/data/features/dispatchevent.js +1 -1
  819. package/app/node_modules/caniuse-lite/data/features/dnssec.js +1 -1
  820. package/app/node_modules/caniuse-lite/data/features/do-not-track.js +1 -1
  821. package/app/node_modules/caniuse-lite/data/features/document-currentscript.js +1 -1
  822. package/app/node_modules/caniuse-lite/data/features/document-evaluate-xpath.js +1 -1
  823. package/app/node_modules/caniuse-lite/data/features/document-execcommand.js +1 -1
  824. package/app/node_modules/caniuse-lite/data/features/document-policy.js +1 -1
  825. package/app/node_modules/caniuse-lite/data/features/document-scrollingelement.js +1 -1
  826. package/app/node_modules/caniuse-lite/data/features/documenthead.js +1 -1
  827. package/app/node_modules/caniuse-lite/data/features/dom-manip-convenience.js +1 -1
  828. package/app/node_modules/caniuse-lite/data/features/dom-range.js +1 -1
  829. package/app/node_modules/caniuse-lite/data/features/domcontentloaded.js +1 -1
  830. package/app/node_modules/caniuse-lite/data/features/dommatrix.js +1 -1
  831. package/app/node_modules/caniuse-lite/data/features/download.js +1 -1
  832. package/app/node_modules/caniuse-lite/data/features/dragndrop.js +1 -1
  833. package/app/node_modules/caniuse-lite/data/features/element-closest.js +1 -1
  834. package/app/node_modules/caniuse-lite/data/features/element-from-point.js +1 -1
  835. package/app/node_modules/caniuse-lite/data/features/element-scroll-methods.js +1 -1
  836. package/app/node_modules/caniuse-lite/data/features/eme.js +1 -1
  837. package/app/node_modules/caniuse-lite/data/features/eot.js +1 -1
  838. package/app/node_modules/caniuse-lite/data/features/es5.js +1 -1
  839. package/app/node_modules/caniuse-lite/data/features/es6-class.js +1 -1
  840. package/app/node_modules/caniuse-lite/data/features/es6-generators.js +1 -1
  841. package/app/node_modules/caniuse-lite/data/features/es6-module-dynamic-import.js +1 -1
  842. package/app/node_modules/caniuse-lite/data/features/es6-module.js +1 -1
  843. package/app/node_modules/caniuse-lite/data/features/es6-number.js +1 -1
  844. package/app/node_modules/caniuse-lite/data/features/es6-string-includes.js +1 -1
  845. package/app/node_modules/caniuse-lite/data/features/es6.js +1 -1
  846. package/app/node_modules/caniuse-lite/data/features/eventsource.js +1 -1
  847. package/app/node_modules/caniuse-lite/data/features/extended-system-fonts.js +1 -1
  848. package/app/node_modules/caniuse-lite/data/features/feature-policy.js +1 -1
  849. package/app/node_modules/caniuse-lite/data/features/fetch.js +1 -1
  850. package/app/node_modules/caniuse-lite/data/features/fieldset-disabled.js +1 -1
  851. package/app/node_modules/caniuse-lite/data/features/fileapi.js +1 -1
  852. package/app/node_modules/caniuse-lite/data/features/filereader.js +1 -1
  853. package/app/node_modules/caniuse-lite/data/features/filereadersync.js +1 -1
  854. package/app/node_modules/caniuse-lite/data/features/filesystem.js +1 -1
  855. package/app/node_modules/caniuse-lite/data/features/flac.js +1 -1
  856. package/app/node_modules/caniuse-lite/data/features/flexbox-gap.js +1 -1
  857. package/app/node_modules/caniuse-lite/data/features/flexbox.js +1 -1
  858. package/app/node_modules/caniuse-lite/data/features/flow-root.js +1 -1
  859. package/app/node_modules/caniuse-lite/data/features/focusin-focusout-events.js +1 -1
  860. package/app/node_modules/caniuse-lite/data/features/font-family-system-ui.js +1 -1
  861. package/app/node_modules/caniuse-lite/data/features/font-feature.js +1 -1
  862. package/app/node_modules/caniuse-lite/data/features/font-kerning.js +1 -1
  863. package/app/node_modules/caniuse-lite/data/features/font-loading.js +1 -1
  864. package/app/node_modules/caniuse-lite/data/features/font-size-adjust.js +1 -1
  865. package/app/node_modules/caniuse-lite/data/features/font-smooth.js +1 -1
  866. package/app/node_modules/caniuse-lite/data/features/font-unicode-range.js +1 -1
  867. package/app/node_modules/caniuse-lite/data/features/font-variant-alternates.js +1 -1
  868. package/app/node_modules/caniuse-lite/data/features/font-variant-numeric.js +1 -1
  869. package/app/node_modules/caniuse-lite/data/features/fontface.js +1 -1
  870. package/app/node_modules/caniuse-lite/data/features/form-attribute.js +1 -1
  871. package/app/node_modules/caniuse-lite/data/features/form-submit-attributes.js +1 -1
  872. package/app/node_modules/caniuse-lite/data/features/form-validation.js +1 -1
  873. package/app/node_modules/caniuse-lite/data/features/forms.js +1 -1
  874. package/app/node_modules/caniuse-lite/data/features/fullscreen.js +1 -1
  875. package/app/node_modules/caniuse-lite/data/features/gamepad.js +1 -1
  876. package/app/node_modules/caniuse-lite/data/features/geolocation.js +1 -1
  877. package/app/node_modules/caniuse-lite/data/features/getboundingclientrect.js +1 -1
  878. package/app/node_modules/caniuse-lite/data/features/getcomputedstyle.js +1 -1
  879. package/app/node_modules/caniuse-lite/data/features/getelementsbyclassname.js +1 -1
  880. package/app/node_modules/caniuse-lite/data/features/getrandomvalues.js +1 -1
  881. package/app/node_modules/caniuse-lite/data/features/gyroscope.js +1 -1
  882. package/app/node_modules/caniuse-lite/data/features/hardwareconcurrency.js +1 -1
  883. package/app/node_modules/caniuse-lite/data/features/hashchange.js +1 -1
  884. package/app/node_modules/caniuse-lite/data/features/heif.js +1 -1
  885. package/app/node_modules/caniuse-lite/data/features/hevc.js +1 -1
  886. package/app/node_modules/caniuse-lite/data/features/hidden.js +1 -1
  887. package/app/node_modules/caniuse-lite/data/features/high-resolution-time.js +1 -1
  888. package/app/node_modules/caniuse-lite/data/features/history.js +1 -1
  889. package/app/node_modules/caniuse-lite/data/features/html-media-capture.js +1 -1
  890. package/app/node_modules/caniuse-lite/data/features/html5semantic.js +1 -1
  891. package/app/node_modules/caniuse-lite/data/features/http-live-streaming.js +1 -1
  892. package/app/node_modules/caniuse-lite/data/features/http2.js +1 -1
  893. package/app/node_modules/caniuse-lite/data/features/http3.js +1 -1
  894. package/app/node_modules/caniuse-lite/data/features/iframe-sandbox.js +1 -1
  895. package/app/node_modules/caniuse-lite/data/features/iframe-seamless.js +1 -1
  896. package/app/node_modules/caniuse-lite/data/features/iframe-srcdoc.js +1 -1
  897. package/app/node_modules/caniuse-lite/data/features/imagecapture.js +1 -1
  898. package/app/node_modules/caniuse-lite/data/features/ime.js +1 -1
  899. package/app/node_modules/caniuse-lite/data/features/img-naturalwidth-naturalheight.js +1 -1
  900. package/app/node_modules/caniuse-lite/data/features/import-maps.js +1 -1
  901. package/app/node_modules/caniuse-lite/data/features/imports.js +1 -1
  902. package/app/node_modules/caniuse-lite/data/features/indeterminate-checkbox.js +1 -1
  903. package/app/node_modules/caniuse-lite/data/features/indexeddb.js +1 -1
  904. package/app/node_modules/caniuse-lite/data/features/indexeddb2.js +1 -1
  905. package/app/node_modules/caniuse-lite/data/features/inline-block.js +1 -1
  906. package/app/node_modules/caniuse-lite/data/features/innertext.js +1 -1
  907. package/app/node_modules/caniuse-lite/data/features/input-autocomplete-onoff.js +1 -1
  908. package/app/node_modules/caniuse-lite/data/features/input-color.js +1 -1
  909. package/app/node_modules/caniuse-lite/data/features/input-datetime.js +1 -1
  910. package/app/node_modules/caniuse-lite/data/features/input-email-tel-url.js +1 -1
  911. package/app/node_modules/caniuse-lite/data/features/input-event.js +1 -1
  912. package/app/node_modules/caniuse-lite/data/features/input-file-accept.js +1 -1
  913. package/app/node_modules/caniuse-lite/data/features/input-file-directory.js +1 -1
  914. package/app/node_modules/caniuse-lite/data/features/input-file-multiple.js +1 -1
  915. package/app/node_modules/caniuse-lite/data/features/input-inputmode.js +1 -1
  916. package/app/node_modules/caniuse-lite/data/features/input-minlength.js +1 -1
  917. package/app/node_modules/caniuse-lite/data/features/input-number.js +1 -1
  918. package/app/node_modules/caniuse-lite/data/features/input-pattern.js +1 -1
  919. package/app/node_modules/caniuse-lite/data/features/input-placeholder.js +1 -1
  920. package/app/node_modules/caniuse-lite/data/features/input-range.js +1 -1
  921. package/app/node_modules/caniuse-lite/data/features/input-search.js +1 -1
  922. package/app/node_modules/caniuse-lite/data/features/input-selection.js +1 -1
  923. package/app/node_modules/caniuse-lite/data/features/insert-adjacent.js +1 -1
  924. package/app/node_modules/caniuse-lite/data/features/insertadjacenthtml.js +1 -1
  925. package/app/node_modules/caniuse-lite/data/features/internationalization.js +1 -1
  926. package/app/node_modules/caniuse-lite/data/features/intersectionobserver-v2.js +1 -1
  927. package/app/node_modules/caniuse-lite/data/features/intersectionobserver.js +1 -1
  928. package/app/node_modules/caniuse-lite/data/features/intl-pluralrules.js +1 -1
  929. package/app/node_modules/caniuse-lite/data/features/intrinsic-width.js +1 -1
  930. package/app/node_modules/caniuse-lite/data/features/jpeg2000.js +1 -1
  931. package/app/node_modules/caniuse-lite/data/features/jpegxl.js +1 -1
  932. package/app/node_modules/caniuse-lite/data/features/jpegxr.js +1 -1
  933. package/app/node_modules/caniuse-lite/data/features/js-regexp-lookbehind.js +1 -1
  934. package/app/node_modules/caniuse-lite/data/features/json.js +1 -1
  935. package/app/node_modules/caniuse-lite/data/features/justify-content-space-evenly.js +1 -1
  936. package/app/node_modules/caniuse-lite/data/features/kerning-pairs-ligatures.js +1 -1
  937. package/app/node_modules/caniuse-lite/data/features/keyboardevent-charcode.js +1 -1
  938. package/app/node_modules/caniuse-lite/data/features/keyboardevent-code.js +1 -1
  939. package/app/node_modules/caniuse-lite/data/features/keyboardevent-getmodifierstate.js +1 -1
  940. package/app/node_modules/caniuse-lite/data/features/keyboardevent-key.js +1 -1
  941. package/app/node_modules/caniuse-lite/data/features/keyboardevent-location.js +1 -1
  942. package/app/node_modules/caniuse-lite/data/features/keyboardevent-which.js +1 -1
  943. package/app/node_modules/caniuse-lite/data/features/lazyload.js +1 -1
  944. package/app/node_modules/caniuse-lite/data/features/let.js +1 -1
  945. package/app/node_modules/caniuse-lite/data/features/link-icon-png.js +1 -1
  946. package/app/node_modules/caniuse-lite/data/features/link-icon-svg.js +1 -1
  947. package/app/node_modules/caniuse-lite/data/features/link-rel-dns-prefetch.js +1 -1
  948. package/app/node_modules/caniuse-lite/data/features/link-rel-modulepreload.js +1 -1
  949. package/app/node_modules/caniuse-lite/data/features/link-rel-preconnect.js +1 -1
  950. package/app/node_modules/caniuse-lite/data/features/link-rel-prefetch.js +1 -1
  951. package/app/node_modules/caniuse-lite/data/features/link-rel-preload.js +1 -1
  952. package/app/node_modules/caniuse-lite/data/features/link-rel-prerender.js +1 -1
  953. package/app/node_modules/caniuse-lite/data/features/loading-lazy-attr.js +1 -1
  954. package/app/node_modules/caniuse-lite/data/features/loading-lazy-media.js +1 -1
  955. package/app/node_modules/caniuse-lite/data/features/localecompare.js +1 -1
  956. package/app/node_modules/caniuse-lite/data/features/magnetometer.js +1 -1
  957. package/app/node_modules/caniuse-lite/data/features/matchesselector.js +1 -1
  958. package/app/node_modules/caniuse-lite/data/features/matchmedia.js +1 -1
  959. package/app/node_modules/caniuse-lite/data/features/mathml.js +1 -1
  960. package/app/node_modules/caniuse-lite/data/features/maxlength.js +1 -1
  961. package/app/node_modules/caniuse-lite/data/features/mdn-css-backdrop-pseudo-element.js +1 -1
  962. package/app/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate-override.js +1 -1
  963. package/app/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate.js +1 -1
  964. package/app/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-plaintext.js +1 -1
  965. package/app/node_modules/caniuse-lite/data/features/mdn-text-decoration-color.js +1 -1
  966. package/app/node_modules/caniuse-lite/data/features/mdn-text-decoration-line.js +1 -1
  967. package/app/node_modules/caniuse-lite/data/features/mdn-text-decoration-shorthand.js +1 -1
  968. package/app/node_modules/caniuse-lite/data/features/mdn-text-decoration-style.js +1 -1
  969. package/app/node_modules/caniuse-lite/data/features/media-fragments.js +1 -1
  970. package/app/node_modules/caniuse-lite/data/features/mediacapture-fromelement.js +1 -1
  971. package/app/node_modules/caniuse-lite/data/features/mediarecorder.js +1 -1
  972. package/app/node_modules/caniuse-lite/data/features/mediasource.js +1 -1
  973. package/app/node_modules/caniuse-lite/data/features/menu.js +1 -1
  974. package/app/node_modules/caniuse-lite/data/features/meta-theme-color.js +1 -1
  975. package/app/node_modules/caniuse-lite/data/features/meter.js +1 -1
  976. package/app/node_modules/caniuse-lite/data/features/midi.js +1 -1
  977. package/app/node_modules/caniuse-lite/data/features/minmaxwh.js +1 -1
  978. package/app/node_modules/caniuse-lite/data/features/mp3.js +1 -1
  979. package/app/node_modules/caniuse-lite/data/features/mpeg-dash.js +1 -1
  980. package/app/node_modules/caniuse-lite/data/features/mpeg4.js +1 -1
  981. package/app/node_modules/caniuse-lite/data/features/multibackgrounds.js +1 -1
  982. package/app/node_modules/caniuse-lite/data/features/multicolumn.js +1 -1
  983. package/app/node_modules/caniuse-lite/data/features/mutation-events.js +1 -1
  984. package/app/node_modules/caniuse-lite/data/features/mutationobserver.js +1 -1
  985. package/app/node_modules/caniuse-lite/data/features/namevalue-storage.js +1 -1
  986. package/app/node_modules/caniuse-lite/data/features/native-filesystem-api.js +1 -1
  987. package/app/node_modules/caniuse-lite/data/features/nav-timing.js +1 -1
  988. package/app/node_modules/caniuse-lite/data/features/netinfo.js +1 -1
  989. package/app/node_modules/caniuse-lite/data/features/notifications.js +1 -1
  990. package/app/node_modules/caniuse-lite/data/features/object-entries.js +1 -1
  991. package/app/node_modules/caniuse-lite/data/features/object-fit.js +1 -1
  992. package/app/node_modules/caniuse-lite/data/features/object-observe.js +1 -1
  993. package/app/node_modules/caniuse-lite/data/features/object-values.js +1 -1
  994. package/app/node_modules/caniuse-lite/data/features/objectrtc.js +1 -1
  995. package/app/node_modules/caniuse-lite/data/features/offline-apps.js +1 -1
  996. package/app/node_modules/caniuse-lite/data/features/offscreencanvas.js +1 -1
  997. package/app/node_modules/caniuse-lite/data/features/ogg-vorbis.js +1 -1
  998. package/app/node_modules/caniuse-lite/data/features/ogv.js +1 -1
  999. package/app/node_modules/caniuse-lite/data/features/ol-reversed.js +1 -1
  1000. package/app/node_modules/caniuse-lite/data/features/once-event-listener.js +1 -1
  1001. package/app/node_modules/caniuse-lite/data/features/online-status.js +1 -1
  1002. package/app/node_modules/caniuse-lite/data/features/opus.js +1 -1
  1003. package/app/node_modules/caniuse-lite/data/features/orientation-sensor.js +1 -1
  1004. package/app/node_modules/caniuse-lite/data/features/outline.js +1 -1
  1005. package/app/node_modules/caniuse-lite/data/features/pad-start-end.js +1 -1
  1006. package/app/node_modules/caniuse-lite/data/features/page-transition-events.js +1 -1
  1007. package/app/node_modules/caniuse-lite/data/features/pagevisibility.js +1 -1
  1008. package/app/node_modules/caniuse-lite/data/features/passive-event-listener.js +1 -1
  1009. package/app/node_modules/caniuse-lite/data/features/passkeys.js +1 -1
  1010. package/app/node_modules/caniuse-lite/data/features/passwordrules.js +1 -1
  1011. package/app/node_modules/caniuse-lite/data/features/path2d.js +1 -1
  1012. package/app/node_modules/caniuse-lite/data/features/payment-request.js +1 -1
  1013. package/app/node_modules/caniuse-lite/data/features/pdf-viewer.js +1 -1
  1014. package/app/node_modules/caniuse-lite/data/features/permissions-api.js +1 -1
  1015. package/app/node_modules/caniuse-lite/data/features/permissions-policy.js +1 -1
  1016. package/app/node_modules/caniuse-lite/data/features/picture-in-picture.js +1 -1
  1017. package/app/node_modules/caniuse-lite/data/features/picture.js +1 -1
  1018. package/app/node_modules/caniuse-lite/data/features/ping.js +1 -1
  1019. package/app/node_modules/caniuse-lite/data/features/png-alpha.js +1 -1
  1020. package/app/node_modules/caniuse-lite/data/features/pointer-events.js +1 -1
  1021. package/app/node_modules/caniuse-lite/data/features/pointer.js +1 -1
  1022. package/app/node_modules/caniuse-lite/data/features/pointerlock.js +1 -1
  1023. package/app/node_modules/caniuse-lite/data/features/portals.js +1 -1
  1024. package/app/node_modules/caniuse-lite/data/features/prefers-color-scheme.js +1 -1
  1025. package/app/node_modules/caniuse-lite/data/features/prefers-reduced-motion.js +1 -1
  1026. package/app/node_modules/caniuse-lite/data/features/progress.js +1 -1
  1027. package/app/node_modules/caniuse-lite/data/features/promise-finally.js +1 -1
  1028. package/app/node_modules/caniuse-lite/data/features/promises.js +1 -1
  1029. package/app/node_modules/caniuse-lite/data/features/proximity.js +1 -1
  1030. package/app/node_modules/caniuse-lite/data/features/proxy.js +1 -1
  1031. package/app/node_modules/caniuse-lite/data/features/publickeypinning.js +1 -1
  1032. package/app/node_modules/caniuse-lite/data/features/push-api.js +1 -1
  1033. package/app/node_modules/caniuse-lite/data/features/queryselector.js +1 -1
  1034. package/app/node_modules/caniuse-lite/data/features/readonly-attr.js +1 -1
  1035. package/app/node_modules/caniuse-lite/data/features/referrer-policy.js +1 -1
  1036. package/app/node_modules/caniuse-lite/data/features/registerprotocolhandler.js +1 -1
  1037. package/app/node_modules/caniuse-lite/data/features/rel-noopener.js +1 -1
  1038. package/app/node_modules/caniuse-lite/data/features/rel-noreferrer.js +1 -1
  1039. package/app/node_modules/caniuse-lite/data/features/rellist.js +1 -1
  1040. package/app/node_modules/caniuse-lite/data/features/rem.js +1 -1
  1041. package/app/node_modules/caniuse-lite/data/features/requestanimationframe.js +1 -1
  1042. package/app/node_modules/caniuse-lite/data/features/requestidlecallback.js +1 -1
  1043. package/app/node_modules/caniuse-lite/data/features/resizeobserver.js +1 -1
  1044. package/app/node_modules/caniuse-lite/data/features/resource-timing.js +1 -1
  1045. package/app/node_modules/caniuse-lite/data/features/rest-parameters.js +1 -1
  1046. package/app/node_modules/caniuse-lite/data/features/rtcpeerconnection.js +1 -1
  1047. package/app/node_modules/caniuse-lite/data/features/ruby.js +1 -1
  1048. package/app/node_modules/caniuse-lite/data/features/run-in.js +1 -1
  1049. package/app/node_modules/caniuse-lite/data/features/same-site-cookie-attribute.js +1 -1
  1050. package/app/node_modules/caniuse-lite/data/features/screen-orientation.js +1 -1
  1051. package/app/node_modules/caniuse-lite/data/features/script-async.js +1 -1
  1052. package/app/node_modules/caniuse-lite/data/features/script-defer.js +1 -1
  1053. package/app/node_modules/caniuse-lite/data/features/scrollintoview.js +1 -1
  1054. package/app/node_modules/caniuse-lite/data/features/scrollintoviewifneeded.js +1 -1
  1055. package/app/node_modules/caniuse-lite/data/features/sdch.js +1 -1
  1056. package/app/node_modules/caniuse-lite/data/features/selection-api.js +1 -1
  1057. package/app/node_modules/caniuse-lite/data/features/server-timing.js +1 -1
  1058. package/app/node_modules/caniuse-lite/data/features/serviceworkers.js +1 -1
  1059. package/app/node_modules/caniuse-lite/data/features/setimmediate.js +1 -1
  1060. package/app/node_modules/caniuse-lite/data/features/shadowdom.js +1 -1
  1061. package/app/node_modules/caniuse-lite/data/features/shadowdomv1.js +1 -1
  1062. package/app/node_modules/caniuse-lite/data/features/sharedarraybuffer.js +1 -1
  1063. package/app/node_modules/caniuse-lite/data/features/sharedworkers.js +1 -1
  1064. package/app/node_modules/caniuse-lite/data/features/sni.js +1 -1
  1065. package/app/node_modules/caniuse-lite/data/features/spdy.js +1 -1
  1066. package/app/node_modules/caniuse-lite/data/features/speech-recognition.js +1 -1
  1067. package/app/node_modules/caniuse-lite/data/features/speech-synthesis.js +1 -1
  1068. package/app/node_modules/caniuse-lite/data/features/spellcheck-attribute.js +1 -1
  1069. package/app/node_modules/caniuse-lite/data/features/sql-storage.js +1 -1
  1070. package/app/node_modules/caniuse-lite/data/features/srcset.js +1 -1
  1071. package/app/node_modules/caniuse-lite/data/features/stream.js +1 -1
  1072. package/app/node_modules/caniuse-lite/data/features/streams.js +1 -1
  1073. package/app/node_modules/caniuse-lite/data/features/stricttransportsecurity.js +1 -1
  1074. package/app/node_modules/caniuse-lite/data/features/style-scoped.js +1 -1
  1075. package/app/node_modules/caniuse-lite/data/features/subresource-bundling.js +1 -1
  1076. package/app/node_modules/caniuse-lite/data/features/subresource-integrity.js +1 -1
  1077. package/app/node_modules/caniuse-lite/data/features/svg-css.js +1 -1
  1078. package/app/node_modules/caniuse-lite/data/features/svg-filters.js +1 -1
  1079. package/app/node_modules/caniuse-lite/data/features/svg-fonts.js +1 -1
  1080. package/app/node_modules/caniuse-lite/data/features/svg-fragment.js +1 -1
  1081. package/app/node_modules/caniuse-lite/data/features/svg-html.js +1 -1
  1082. package/app/node_modules/caniuse-lite/data/features/svg-html5.js +1 -1
  1083. package/app/node_modules/caniuse-lite/data/features/svg-img.js +1 -1
  1084. package/app/node_modules/caniuse-lite/data/features/svg-smil.js +1 -1
  1085. package/app/node_modules/caniuse-lite/data/features/svg.js +1 -1
  1086. package/app/node_modules/caniuse-lite/data/features/sxg.js +1 -1
  1087. package/app/node_modules/caniuse-lite/data/features/tabindex-attr.js +1 -1
  1088. package/app/node_modules/caniuse-lite/data/features/template-literals.js +1 -1
  1089. package/app/node_modules/caniuse-lite/data/features/template.js +1 -1
  1090. package/app/node_modules/caniuse-lite/data/features/temporal.js +1 -1
  1091. package/app/node_modules/caniuse-lite/data/features/testfeat.js +1 -1
  1092. package/app/node_modules/caniuse-lite/data/features/text-decoration.js +1 -1
  1093. package/app/node_modules/caniuse-lite/data/features/text-emphasis.js +1 -1
  1094. package/app/node_modules/caniuse-lite/data/features/text-overflow.js +1 -1
  1095. package/app/node_modules/caniuse-lite/data/features/text-size-adjust.js +1 -1
  1096. package/app/node_modules/caniuse-lite/data/features/text-stroke.js +1 -1
  1097. package/app/node_modules/caniuse-lite/data/features/textcontent.js +1 -1
  1098. package/app/node_modules/caniuse-lite/data/features/textencoder.js +1 -1
  1099. package/app/node_modules/caniuse-lite/data/features/tls1-1.js +1 -1
  1100. package/app/node_modules/caniuse-lite/data/features/tls1-2.js +1 -1
  1101. package/app/node_modules/caniuse-lite/data/features/tls1-3.js +1 -1
  1102. package/app/node_modules/caniuse-lite/data/features/touch.js +1 -1
  1103. package/app/node_modules/caniuse-lite/data/features/transforms2d.js +1 -1
  1104. package/app/node_modules/caniuse-lite/data/features/transforms3d.js +1 -1
  1105. package/app/node_modules/caniuse-lite/data/features/trusted-types.js +1 -1
  1106. package/app/node_modules/caniuse-lite/data/features/ttf.js +1 -1
  1107. package/app/node_modules/caniuse-lite/data/features/typedarrays.js +1 -1
  1108. package/app/node_modules/caniuse-lite/data/features/u2f.js +1 -1
  1109. package/app/node_modules/caniuse-lite/data/features/unhandledrejection.js +1 -1
  1110. package/app/node_modules/caniuse-lite/data/features/upgradeinsecurerequests.js +1 -1
  1111. package/app/node_modules/caniuse-lite/data/features/url-scroll-to-text-fragment.js +1 -1
  1112. package/app/node_modules/caniuse-lite/data/features/url.js +1 -1
  1113. package/app/node_modules/caniuse-lite/data/features/urlsearchparams.js +1 -1
  1114. package/app/node_modules/caniuse-lite/data/features/use-strict.js +1 -1
  1115. package/app/node_modules/caniuse-lite/data/features/user-select-none.js +1 -1
  1116. package/app/node_modules/caniuse-lite/data/features/user-timing.js +1 -1
  1117. package/app/node_modules/caniuse-lite/data/features/variable-fonts.js +1 -1
  1118. package/app/node_modules/caniuse-lite/data/features/vector-effect.js +1 -1
  1119. package/app/node_modules/caniuse-lite/data/features/vibration.js +1 -1
  1120. package/app/node_modules/caniuse-lite/data/features/video.js +1 -1
  1121. package/app/node_modules/caniuse-lite/data/features/videotracks.js +1 -1
  1122. package/app/node_modules/caniuse-lite/data/features/view-transitions.js +1 -1
  1123. package/app/node_modules/caniuse-lite/data/features/viewport-unit-variants.js +1 -1
  1124. package/app/node_modules/caniuse-lite/data/features/viewport-units.js +1 -1
  1125. package/app/node_modules/caniuse-lite/data/features/wai-aria.js +1 -1
  1126. package/app/node_modules/caniuse-lite/data/features/wake-lock.js +1 -1
  1127. package/app/node_modules/caniuse-lite/data/features/wasm-bigint.js +1 -1
  1128. package/app/node_modules/caniuse-lite/data/features/wasm-bulk-memory.js +1 -1
  1129. package/app/node_modules/caniuse-lite/data/features/wasm-extended-const.js +1 -1
  1130. package/app/node_modules/caniuse-lite/data/features/wasm-gc.js +1 -1
  1131. package/app/node_modules/caniuse-lite/data/features/wasm-multi-memory.js +1 -1
  1132. package/app/node_modules/caniuse-lite/data/features/wasm-multi-value.js +1 -1
  1133. package/app/node_modules/caniuse-lite/data/features/wasm-mutable-globals.js +1 -1
  1134. package/app/node_modules/caniuse-lite/data/features/wasm-nontrapping-fptoint.js +1 -1
  1135. package/app/node_modules/caniuse-lite/data/features/wasm-reference-types.js +1 -1
  1136. package/app/node_modules/caniuse-lite/data/features/wasm-relaxed-simd.js +1 -1
  1137. package/app/node_modules/caniuse-lite/data/features/wasm-signext.js +1 -1
  1138. package/app/node_modules/caniuse-lite/data/features/wasm-simd.js +1 -1
  1139. package/app/node_modules/caniuse-lite/data/features/wasm-tail-calls.js +1 -1
  1140. package/app/node_modules/caniuse-lite/data/features/wasm-threads.js +1 -1
  1141. package/app/node_modules/caniuse-lite/data/features/wasm.js +1 -1
  1142. package/app/node_modules/caniuse-lite/data/features/wav.js +1 -1
  1143. package/app/node_modules/caniuse-lite/data/features/wbr-element.js +1 -1
  1144. package/app/node_modules/caniuse-lite/data/features/web-animation.js +1 -1
  1145. package/app/node_modules/caniuse-lite/data/features/web-app-manifest.js +1 -1
  1146. package/app/node_modules/caniuse-lite/data/features/web-bluetooth.js +1 -1
  1147. package/app/node_modules/caniuse-lite/data/features/web-serial.js +1 -1
  1148. package/app/node_modules/caniuse-lite/data/features/web-share.js +1 -1
  1149. package/app/node_modules/caniuse-lite/data/features/webauthn.js +1 -1
  1150. package/app/node_modules/caniuse-lite/data/features/webcodecs.js +1 -1
  1151. package/app/node_modules/caniuse-lite/data/features/webgl.js +1 -1
  1152. package/app/node_modules/caniuse-lite/data/features/webgl2.js +1 -1
  1153. package/app/node_modules/caniuse-lite/data/features/webgpu.js +1 -1
  1154. package/app/node_modules/caniuse-lite/data/features/webhid.js +1 -1
  1155. package/app/node_modules/caniuse-lite/data/features/webkit-user-drag.js +1 -1
  1156. package/app/node_modules/caniuse-lite/data/features/webm.js +1 -1
  1157. package/app/node_modules/caniuse-lite/data/features/webnfc.js +1 -1
  1158. package/app/node_modules/caniuse-lite/data/features/webp.js +1 -1
  1159. package/app/node_modules/caniuse-lite/data/features/websockets.js +1 -1
  1160. package/app/node_modules/caniuse-lite/data/features/webtransport.js +1 -1
  1161. package/app/node_modules/caniuse-lite/data/features/webusb.js +1 -1
  1162. package/app/node_modules/caniuse-lite/data/features/webvr.js +1 -1
  1163. package/app/node_modules/caniuse-lite/data/features/webvtt.js +1 -1
  1164. package/app/node_modules/caniuse-lite/data/features/webworkers.js +1 -1
  1165. package/app/node_modules/caniuse-lite/data/features/webxr.js +1 -1
  1166. package/app/node_modules/caniuse-lite/data/features/will-change.js +1 -1
  1167. package/app/node_modules/caniuse-lite/data/features/woff.js +1 -1
  1168. package/app/node_modules/caniuse-lite/data/features/woff2.js +1 -1
  1169. package/app/node_modules/caniuse-lite/data/features/word-break.js +1 -1
  1170. package/app/node_modules/caniuse-lite/data/features/wordwrap.js +1 -1
  1171. package/app/node_modules/caniuse-lite/data/features/x-doc-messaging.js +1 -1
  1172. package/app/node_modules/caniuse-lite/data/features/x-frame-options.js +1 -1
  1173. package/app/node_modules/caniuse-lite/data/features/xhr2.js +1 -1
  1174. package/app/node_modules/caniuse-lite/data/features/xhtml.js +1 -1
  1175. package/app/node_modules/caniuse-lite/data/features/xhtmlsmil.js +1 -1
  1176. package/app/node_modules/caniuse-lite/data/features/xml-serializer.js +1 -1
  1177. package/app/node_modules/caniuse-lite/data/features/zstd.js +1 -1
  1178. package/app/node_modules/caniuse-lite/data/versionGroups.js +1 -0
  1179. package/app/node_modules/caniuse-lite/dist/unpacker/feature.js +30 -1
  1180. package/app/node_modules/caniuse-lite/dist/unpacker/versionGroups.js +1 -0
  1181. package/app/node_modules/caniuse-lite/package.json +1 -1
  1182. package/app/node_modules/nanoid/non-secure/index.cjs +0 -10
  1183. package/app/node_modules/nanoid/package.json +1 -1
  1184. package/app/node_modules/next/dist/build/swc/index.js +1 -1
  1185. package/app/node_modules/next/dist/build/webpack-config.js +3 -3
  1186. package/app/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +1 -1
  1187. package/app/node_modules/next/dist/lib/patch-incorrect-lockfile.js +3 -3
  1188. package/app/node_modules/next/dist/server/config.js +1 -1
  1189. package/app/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +2 -2
  1190. package/app/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1 -1
  1191. package/app/node_modules/next/dist/server/lib/app-info-log.js +1 -1
  1192. package/app/node_modules/next/dist/server/lib/start-server.js +1 -1
  1193. package/app/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +1 -1
  1194. package/app/node_modules/next/dist/telemetry/anonymous-meta.js +1 -1
  1195. package/app/node_modules/next/dist/telemetry/events/swc-load-failure.js +1 -1
  1196. package/app/node_modules/next/dist/telemetry/events/version.js +2 -2
  1197. package/app/node_modules/next/package.json +10 -252
  1198. package/app/node_modules/pg/lib/client.js +7 -1
  1199. package/app/node_modules/pg/lib/connection-parameters.js +13 -0
  1200. package/app/node_modules/pg/lib/connection.js +43 -22
  1201. package/app/node_modules/pg/lib/defaults.js +3 -0
  1202. package/app/node_modules/pg/lib/query.js +4 -0
  1203. package/app/node_modules/pg/package.json +4 -4
  1204. package/app/node_modules/pg-connection-string/index.js +6 -0
  1205. package/app/node_modules/pg-connection-string/package.json +3 -3
  1206. package/app/node_modules/pg-protocol/dist/buffer-reader.js +1 -1
  1207. package/app/node_modules/pg-protocol/dist/buffer-writer.js +23 -0
  1208. package/app/node_modules/pg-protocol/dist/index.js +2 -2
  1209. package/app/node_modules/pg-protocol/dist/parser.js +1 -1
  1210. package/app/node_modules/pg-protocol/dist/serializer.js +11 -4
  1211. package/app/node_modules/pg-protocol/package.json +2 -2
  1212. package/app/package.json +1 -1
  1213. package/package.json +1 -1
  1214. package/app/.next-cli-build/server/chunks/6105.js +0 -64
  1215. package/app/.next-cli-build/static/chunks/1a258343-bc0b514c079d8898.js +0 -1
  1216. package/app/.next-cli-build/static/chunks/5792-871f5fad4b3167bd.js +0 -64
  1217. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-5.0.43-to-5.0.47-5.0.47-20260701-072200/data.sqlite +0 -0
  1218. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-5.0.47-to-5.0.48-5.0.48-20260701-072443/data.sqlite +0 -0
  1219. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-5.0.48-to-5.0.59-5.0.59-20260702-124431/data.sqlite +0 -0
  1220. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/backups/upgrade-5.0.59-to-5.0.62-5.0.62-20260702-131005/data.sqlite +0 -0
  1221. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite +0 -0
  1222. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-shm +0 -0
  1223. package/app/cli/.build-home/AppData/Roaming/bluerouter/db/data.sqlite-wal +0 -0
  1224. package/app/cli/.build-home/AppData/Roaming/bluerouter/jwt-secret +0 -1
  1225. package/app/cli/.build-home/AppData/Roaming/bluerouter/machine-id +0 -1
  1226. /package/app/.next-cli-build/static/{ydCWaUmS9__NWFW-1OV7H → FeR1qdU0ap5Xg5pk03VE_}/_buildManifest.js +0 -0
  1227. /package/app/.next-cli-build/static/{ydCWaUmS9__NWFW-1OV7H → FeR1qdU0ap5Xg5pk03VE_}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6607],{2276:(e,s,a)=>{Promise.resolve().then(a.bind(a,55987))},55987:(e,s,a)=>{"use strict";a.d(s,{default:()=>x});var t=a(95155),l=a(12115),r=a(3534),o=a(28777),n=a(52679),i=a(61082),d=a(35497);let c={enabled:!1,type:"mysql",host:"",port:"",database:"",username:"",password:"",ssl:!1,createDatabase:!1,logClientRequest:!0,logSourceRequest:!0,logTargetRequest:!0,logProviderResponse:!1,logErrors:!0,retentionDays:30};function g({label:e,value:s,onChange:a,type:l="text",placeholder:r="",disabled:o=!1}){return(0,t.jsxs)("label",{className:"flex flex-col gap-1 text-xs",children:[(0,t.jsx)("span",{className:"text-text-muted",children:e}),(0,t.jsx)("input",{type:l,value:s||"",placeholder:r,disabled:o,onChange:e=>a(e.target.value),className:"w-full rounded border border-border bg-surface px-2 py-1.5 text-xs text-text-main focus:outline-none focus:ring-1 focus:ring-primary/50 disabled:opacity-50"})]})}function u({label:e,checked:s,onChange:a,disabled:l=!1}){return(0,t.jsxs)("label",{className:"flex items-center gap-2 text-xs text-text-main",children:[(0,t.jsx)("input",{type:"checkbox",checked:!!s,disabled:l,onChange:e=>a(e.target.checked)}),e]})}function p(){let[e,s]=(0,l.useState)(c),[a,r]=(0,l.useState)(!1),[o,n]=(0,l.useState)(null),[i,p]=(0,l.useState)(null),x=e=>s(s=>({...s,...e})),b=async()=>{r(!0),p(null);try{let e=await fetch("/api/cli-tools/antigravity-mitm/prompt-log-db"),a=await e.json();if(!e.ok)throw Error(a.error||"Failed to load config");s({...c,...a.config||{}})}catch(e){p(e.message||"Failed to load config")}finally{r(!1)}};(0,l.useEffect)(()=>{b()},[]);let h=async()=>{r(!0),p(null),n(null);try{let a=await fetch("/api/cli-tools/antigravity-mitm/prompt-log-db",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({config:e})}),t=await a.json();if(!a.ok)throw Error(t.error||"Failed to save config");s({...c,...t.config||{}}),n("Saved")}catch(e){p(e.message||"Failed to save config")}finally{r(!1)}},m=async s=>{r(!0),p(null),n(null);try{let a=await fetch("/api/cli-tools/antigravity-mitm/prompt-log-db",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:s,config:e})}),t=await a.json();if(!a.ok)throw Error(t.error||"Action failed");n(t.message||t.init?.message||"OK")}catch(e){p(e.message||"Action failed")}finally{r(!1)}},y="postgres"===e.type||"mysql"===e.type;return(0,t.jsx)(d.Zp,{title:"Prompt Log Database",subtitle:"Store MITM/Copilot prompt logs in a queryable database",icon:"database",children:(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,t.jsx)(d.Ex,{variant:e.enabled?"success":"default",children:e.enabled?"Enabled":"Disabled"}),(0,t.jsx)("span",{className:"text-xs text-text-muted",children:"File logs still remain available under DATA_DIR/logs/requests."})]}),(0,t.jsx)("div",{className:"rounded-lg border border-yellow-500/30 bg-yellow-500/10 p-3 text-xs text-yellow-700 dark:text-yellow-300",children:'Prompt logs may contain source code, selected code, internal URLs, user prompts, and provider responses. Checked stages store full raw JSON; prompt/response text columns keep only short previews. Per-combo "hide content" still redacts raw JSON.'}),(0,t.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,t.jsxs)("label",{className:"flex flex-col gap-1 text-xs",children:[(0,t.jsx)("span",{className:"text-text-muted",children:"Database type"}),(0,t.jsxs)("select",{value:e.type,disabled:a,onChange:s=>{let a=s.target.value;x({type:a,port:"postgres"===a?e.port||"5432":"mysql"===a?e.port||"3306":e.port})},className:"w-full rounded border border-border bg-surface px-2 py-1.5 text-xs text-text-main focus:outline-none focus:ring-1 focus:ring-primary/50",children:[(0,t.jsx)("option",{value:"mysql",children:"MySQL / MariaDB"}),(0,t.jsx)("option",{value:"postgres",children:"PostgreSQL"})]})]}),(0,t.jsx)(g,{label:"Retention days",type:"number",value:String(e.retentionDays||30),onChange:e=>x({retentionDays:Number(e)||30}),disabled:a})]}),y&&(0,t.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,t.jsx)(g,{label:"Host",value:e.host,placeholder:"127.0.0.1",onChange:e=>x({host:e}),disabled:a}),(0,t.jsx)(g,{label:"Port",value:e.port,placeholder:"postgres"===e.type?"5432":"3306",onChange:e=>x({port:e}),disabled:a}),(0,t.jsx)(g,{label:"Database",value:e.database,placeholder:"bluerouter_logs",onChange:e=>x({database:e}),disabled:a}),(0,t.jsx)(g,{label:"Username",value:e.username,placeholder:"bluerouter",onChange:e=>x({username:e}),disabled:a}),(0,t.jsx)(g,{label:"Password",type:"password",value:e.password,placeholder:"Leave as ******** to keep existing password",onChange:e=>x({password:e}),disabled:a}),(0,t.jsxs)("div",{className:"flex flex-col justify-end gap-2",children:[(0,t.jsx)(u,{label:"Use SSL",checked:e.ssl,onChange:e=>x({ssl:e}),disabled:a}),(0,t.jsx)(u,{label:"Create database if missing",checked:e.createDatabase,onChange:e=>x({createDatabase:e}),disabled:a})]})]}),(0,t.jsxs)("div",{className:"grid gap-2 rounded-lg border border-border bg-surface/40 p-3 md:grid-cols-2",children:[(0,t.jsx)(u,{label:"Enable database prompt logging",checked:e.enabled,onChange:e=>x({enabled:e}),disabled:a}),(0,t.jsx)(u,{label:"Log client request JSON",checked:e.logClientRequest,onChange:e=>x({logClientRequest:e}),disabled:a}),(0,t.jsx)(u,{label:"Log normalized/source request JSON",checked:e.logSourceRequest,onChange:e=>x({logSourceRequest:e}),disabled:a}),(0,t.jsx)(u,{label:"Log target/provider request JSON",checked:e.logTargetRequest,onChange:e=>x({logTargetRequest:e}),disabled:a}),(0,t.jsx)(u,{label:"Log provider response JSON",checked:e.logProviderResponse,onChange:e=>x({logProviderResponse:e}),disabled:a}),(0,t.jsx)(u,{label:"Log errors",checked:e.logErrors,onChange:e=>x({logErrors:e}),disabled:a})]}),y&&(0,t.jsxs)("div",{className:"rounded-lg border border-blue-500/30 bg-blue-500/10 p-3 text-xs text-blue-700 dark:text-blue-300",children:["Prompt logs now support MySQL/MariaDB and PostgreSQL only. MySQL/MariaDB requires ",(0,t.jsx)("code",{children:"mysql2"}),"; PostgreSQL requires ",(0,t.jsx)("code",{children:"pg"}),"."]}),o&&(0,t.jsx)("div",{className:"rounded-lg border border-green-500/30 bg-green-500/10 p-2 text-xs text-green-600",children:o}),i&&(0,t.jsx)("div",{className:"rounded-lg border border-red-500/30 bg-red-500/10 p-2 text-xs text-red-500",children:i}),(0,t.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,t.jsx)(d.$n,{size:"sm",variant:"secondary",onClick:b,loading:a,children:"Reload"}),(0,t.jsx)(d.$n,{size:"sm",variant:"secondary",onClick:()=>m("test"),loading:a,children:"Test connection"}),(0,t.jsx)(d.$n,{size:"sm",variant:"secondary",onClick:()=>m("init"),loading:a,children:"Initialize schema"}),(0,t.jsx)(d.$n,{size:"sm",onClick:h,loading:a,children:"Save"}),(0,t.jsx)(d.$n,{size:"sm",variant:"success",onClick:()=>m("save-and-init"),loading:a,children:"Save & initialize"})]})]})})}function x(){let[e,s]=(0,l.useState)([]),[a,d]=(0,l.useState)([]),[c,g]=(0,l.useState)({}),[u,x]=(0,l.useState)(!1),[b,h]=(0,l.useState)(null),[m,y]=(0,l.useState)({running:!1,certExists:!1,dnsStatus:{},hasCachedPassword:!1});(0,l.useEffect)(()=>{f(),v(),j(),w()},[]);let f=async()=>{try{let e=await fetch("/api/providers");if(e.ok){let a=await e.json();s(a.connections||[])}}catch{}},v=async()=>{try{let e=await fetch("/api/keys");if(e.ok){let s=await e.json();d(s.keys||[])}}catch{}},j=async()=>{try{let e=await fetch("/api/models/alias");if(e.ok){let s=await e.json();g(s.aliases||{})}}catch{}},w=async()=>{try{let e=await fetch("/api/settings");if(e.ok){let s=await e.json();x(s.cloudEnabled||!1)}}catch{}},S=()=>e.filter(e=>!1!==e.isActive),C=Object.entries(r.wn);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"rounded-lg border border-yellow-500/30 bg-yellow-500/10 p-4 text-sm text-yellow-700 dark:text-yellow-300",children:[(0,t.jsx)("span",{className:"material-symbols-rounded align-middle text-base",children:"warning"})," ","⚠️ MITM intercepts HTTPS traffic of IDE tools (Antigravity, GitHub Copilot, Kiro) via local CA to redirect requests to your providers. May violate ToS → account ban. Use at your own risk."]}),(0,t.jsx)(i.tA,{apiKeys:a,cloudEnabled:u,onStatusChange:y}),(0,t.jsx)(i.k0,{serverRunning:m.running,onChanged:e=>y(s=>({...s,certExists:e?.certExists??s.certExists}))}),(0,t.jsx)(p,{}),C.map(([e,s])=>(0,t.jsx)(i.kn,{tool:{...s,id:e},isExpanded:b===e,onToggle:()=>h(b===e?null:e),serverRunning:m.running,dnsActive:m.dnsStatus?.[e]||!1,hasCachedPassword:m.hasCachedPassword||!1,needsSudoPassword:!1!==m.needsSudoPassword,isWin:!0===m.isWin,apiKeys:a,activeProviders:S(),hasActiveProviders:S().some(e=>(0,o.KC)(e.provider).length>0||(0,n.mq)(e.provider)||(0,n.gb)(e.provider)),modelAliases:c,cloudEnabled:u,onDnsChange:e=>y(s=>({...s,dnsStatus:e.dnsStatus??s.dnsStatus}))},e))]})}}},e=>{e.O(0,[2574,3862,246,5792,5772,5564,5263,5497,4525,8441,3794,7358],()=>e(e.s=2276)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6607],{2276:(e,s,a)=>{Promise.resolve().then(a.bind(a,55987))},55987:(e,s,a)=>{"use strict";a.d(s,{default:()=>x});var t=a(95155),l=a(12115),r=a(3534),o=a(28777),n=a(52679),i=a(61082),d=a(35497);let c={enabled:!1,type:"mysql",host:"",port:"",database:"",username:"",password:"",ssl:!1,createDatabase:!1,logClientRequest:!0,logSourceRequest:!0,logTargetRequest:!0,logProviderResponse:!1,logErrors:!0,retentionDays:30};function g({label:e,value:s,onChange:a,type:l="text",placeholder:r="",disabled:o=!1}){return(0,t.jsxs)("label",{className:"flex flex-col gap-1 text-xs",children:[(0,t.jsx)("span",{className:"text-text-muted",children:e}),(0,t.jsx)("input",{type:l,value:s||"",placeholder:r,disabled:o,onChange:e=>a(e.target.value),className:"w-full rounded border border-border bg-surface px-2 py-1.5 text-xs text-text-main focus:outline-none focus:ring-1 focus:ring-primary/50 disabled:opacity-50"})]})}function u({label:e,checked:s,onChange:a,disabled:l=!1}){return(0,t.jsxs)("label",{className:"flex items-center gap-2 text-xs text-text-main",children:[(0,t.jsx)("input",{type:"checkbox",checked:!!s,disabled:l,onChange:e=>a(e.target.checked)}),e]})}function p(){let[e,s]=(0,l.useState)(c),[a,r]=(0,l.useState)(!1),[o,n]=(0,l.useState)(null),[i,p]=(0,l.useState)(null),x=e=>s(s=>({...s,...e})),b=async()=>{r(!0),p(null);try{let e=await fetch("/api/cli-tools/antigravity-mitm/prompt-log-db"),a=await e.json();if(!e.ok)throw Error(a.error||"Failed to load config");s({...c,...a.config||{}})}catch(e){p(e.message||"Failed to load config")}finally{r(!1)}};(0,l.useEffect)(()=>{b()},[]);let h=async()=>{r(!0),p(null),n(null);try{let a=await fetch("/api/cli-tools/antigravity-mitm/prompt-log-db",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({config:e})}),t=await a.json();if(!a.ok)throw Error(t.error||"Failed to save config");s({...c,...t.config||{}}),n("Saved")}catch(e){p(e.message||"Failed to save config")}finally{r(!1)}},m=async s=>{r(!0),p(null),n(null);try{let a=await fetch("/api/cli-tools/antigravity-mitm/prompt-log-db",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:s,config:e})}),t=await a.json();if(!a.ok)throw Error(t.error||"Action failed");n(t.message||t.init?.message||"OK")}catch(e){p(e.message||"Action failed")}finally{r(!1)}},y="postgres"===e.type||"mysql"===e.type;return(0,t.jsx)(d.Zp,{title:"Prompt Log Database",subtitle:"Store MITM/Copilot prompt logs in a queryable database",icon:"database",children:(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,t.jsx)(d.Ex,{variant:e.enabled?"success":"default",children:e.enabled?"Enabled":"Disabled"}),(0,t.jsx)("span",{className:"text-xs text-text-muted",children:"File logs still remain available under DATA_DIR/logs/requests."})]}),(0,t.jsx)("div",{className:"rounded-lg border border-yellow-500/30 bg-yellow-500/10 p-3 text-xs text-yellow-700 dark:text-yellow-300",children:'Prompt logs may contain source code, selected code, internal URLs, user prompts, and provider responses. Checked stages store full raw JSON; prompt/response text columns keep only short previews. Per-combo "hide content" still redacts raw JSON.'}),(0,t.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,t.jsxs)("label",{className:"flex flex-col gap-1 text-xs",children:[(0,t.jsx)("span",{className:"text-text-muted",children:"Database type"}),(0,t.jsxs)("select",{value:e.type,disabled:a,onChange:s=>{let a=s.target.value;x({type:a,port:"postgres"===a?e.port||"5432":"mysql"===a?e.port||"3306":e.port})},className:"w-full rounded border border-border bg-surface px-2 py-1.5 text-xs text-text-main focus:outline-none focus:ring-1 focus:ring-primary/50",children:[(0,t.jsx)("option",{value:"mysql",children:"MySQL / MariaDB"}),(0,t.jsx)("option",{value:"postgres",children:"PostgreSQL"})]})]}),(0,t.jsx)(g,{label:"Retention days",type:"number",value:String(e.retentionDays||30),onChange:e=>x({retentionDays:Number(e)||30}),disabled:a})]}),y&&(0,t.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,t.jsx)(g,{label:"Host",value:e.host,placeholder:"127.0.0.1",onChange:e=>x({host:e}),disabled:a}),(0,t.jsx)(g,{label:"Port",value:e.port,placeholder:"postgres"===e.type?"5432":"3306",onChange:e=>x({port:e}),disabled:a}),(0,t.jsx)(g,{label:"Database",value:e.database,placeholder:"bluerouter_logs",onChange:e=>x({database:e}),disabled:a}),(0,t.jsx)(g,{label:"Username",value:e.username,placeholder:"bluerouter",onChange:e=>x({username:e}),disabled:a}),(0,t.jsx)(g,{label:"Password",type:"password",value:e.password,placeholder:"Leave as ******** to keep existing password",onChange:e=>x({password:e}),disabled:a}),(0,t.jsxs)("div",{className:"flex flex-col justify-end gap-2",children:[(0,t.jsx)(u,{label:"Use SSL",checked:e.ssl,onChange:e=>x({ssl:e}),disabled:a}),(0,t.jsx)(u,{label:"Create database if missing",checked:e.createDatabase,onChange:e=>x({createDatabase:e}),disabled:a})]})]}),(0,t.jsxs)("div",{className:"grid gap-2 rounded-lg border border-border bg-surface/40 p-3 md:grid-cols-2",children:[(0,t.jsx)(u,{label:"Enable database prompt logging",checked:e.enabled,onChange:e=>x({enabled:e}),disabled:a}),(0,t.jsx)(u,{label:"Log client request JSON",checked:e.logClientRequest,onChange:e=>x({logClientRequest:e}),disabled:a}),(0,t.jsx)(u,{label:"Log normalized/source request JSON",checked:e.logSourceRequest,onChange:e=>x({logSourceRequest:e}),disabled:a}),(0,t.jsx)(u,{label:"Log target/provider request JSON",checked:e.logTargetRequest,onChange:e=>x({logTargetRequest:e}),disabled:a}),(0,t.jsx)(u,{label:"Log provider response JSON",checked:e.logProviderResponse,onChange:e=>x({logProviderResponse:e}),disabled:a}),(0,t.jsx)(u,{label:"Log errors",checked:e.logErrors,onChange:e=>x({logErrors:e}),disabled:a})]}),y&&(0,t.jsxs)("div",{className:"rounded-lg border border-blue-500/30 bg-blue-500/10 p-3 text-xs text-blue-700 dark:text-blue-300",children:["Prompt logs now support MySQL/MariaDB and PostgreSQL only. MySQL/MariaDB requires ",(0,t.jsx)("code",{children:"mysql2"}),"; PostgreSQL requires ",(0,t.jsx)("code",{children:"pg"}),"."]}),o&&(0,t.jsx)("div",{className:"rounded-lg border border-green-500/30 bg-green-500/10 p-2 text-xs text-green-600",children:o}),i&&(0,t.jsx)("div",{className:"rounded-lg border border-red-500/30 bg-red-500/10 p-2 text-xs text-red-500",children:i}),(0,t.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,t.jsx)(d.$n,{size:"sm",variant:"secondary",onClick:b,loading:a,children:"Reload"}),(0,t.jsx)(d.$n,{size:"sm",variant:"secondary",onClick:()=>m("test"),loading:a,children:"Test connection"}),(0,t.jsx)(d.$n,{size:"sm",variant:"secondary",onClick:()=>m("init"),loading:a,children:"Initialize schema"}),(0,t.jsx)(d.$n,{size:"sm",onClick:h,loading:a,children:"Save"}),(0,t.jsx)(d.$n,{size:"sm",variant:"success",onClick:()=>m("save-and-init"),loading:a,children:"Save & initialize"})]})]})})}function x(){let[e,s]=(0,l.useState)([]),[a,d]=(0,l.useState)([]),[c,g]=(0,l.useState)({}),[u,x]=(0,l.useState)(!1),[b,h]=(0,l.useState)(null),[m,y]=(0,l.useState)({running:!1,certExists:!1,dnsStatus:{},hasCachedPassword:!1});(0,l.useEffect)(()=>{f(),v(),j(),w()},[]);let f=async()=>{try{let e=await fetch("/api/providers");if(e.ok){let a=await e.json();s(a.connections||[])}}catch{}},v=async()=>{try{let e=await fetch("/api/keys");if(e.ok){let s=await e.json();d(s.keys||[])}}catch{}},j=async()=>{try{let e=await fetch("/api/models/alias");if(e.ok){let s=await e.json();g(s.aliases||{})}}catch{}},w=async()=>{try{let e=await fetch("/api/settings");if(e.ok){let s=await e.json();x(s.cloudEnabled||!1)}}catch{}},S=()=>e.filter(e=>!1!==e.isActive),C=Object.entries(r.wn);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"rounded-lg border border-yellow-500/30 bg-yellow-500/10 p-4 text-sm text-yellow-700 dark:text-yellow-300",children:[(0,t.jsx)("span",{className:"material-symbols-rounded align-middle text-base",children:"warning"})," ","⚠️ MITM intercepts HTTPS traffic of IDE tools (Antigravity, GitHub Copilot, Kiro) via local CA to redirect requests to your providers. May violate ToS → account ban. Use at your own risk."]}),(0,t.jsx)(i.tA,{apiKeys:a,cloudEnabled:u,onStatusChange:y}),(0,t.jsx)(i.k0,{serverRunning:m.running,onChanged:e=>y(s=>({...s,certExists:e?.certExists??s.certExists}))}),(0,t.jsx)(p,{}),C.map(([e,s])=>(0,t.jsx)(i.kn,{tool:{...s,id:e},isExpanded:b===e,onToggle:()=>h(b===e?null:e),serverRunning:m.running,dnsActive:m.dnsStatus?.[e]||!1,hasCachedPassword:m.hasCachedPassword||!1,needsSudoPassword:!1!==m.needsSudoPassword,isWin:!0===m.isWin,apiKeys:a,activeProviders:S(),hasActiveProviders:S().some(e=>(0,o.KC)(e.provider).length>0||(0,n.mq)(e.provider)||(0,n.gb)(e.provider)),modelAliases:c,cloudEnabled:u,onDnsChange:e=>y(s=>({...s,dnsStatus:e.dnsStatus??s.dnsStatus}))},e))]})}}},e=>{e.O(0,[2574,3862,246,4546,5772,5564,5263,5497,4525,8441,3794,7358],()=>e(e.s=2276)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6099,6337],{18032:(e,t,s)=>{Promise.resolve().then(s.bind(s,95907))},95907:(e,t,s)=>{"use strict";s.d(t,{default:()=>m});var a=s(95155),l=s(12115),n=s(14051),i=s.n(n),r=s(35497),d=s(11059);let o=[{id:"lite",label:"Lite",desc:"N\xe9n nhẹ, vẫn giữ ngữ ph\xe1p dễ đọc."},{id:"full",label:"Full",desc:"N\xe9n c\xe2n bằng, giảm token r\xf5 hơn."},{id:"ultra",label:"Ultra",desc:"N\xe9n tối đa, c\xe2u cực ngắn."}];function c({label:e,value:t,copiedKey:s,copied:l,copy:n}){return(0,a.jsxs)("div",{className:"rounded-xl border border-border bg-background p-3",children:[(0,a.jsx)("div",{className:"mb-1 text-xs font-semibold uppercase tracking-wide text-text-muted",children:e}),(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,a.jsx)("code",{className:"min-w-0 flex-1 truncate rounded-lg bg-surface px-3 py-2 font-mono text-xs text-text-main",children:t}),(0,a.jsx)("button",{type:"button",onClick:()=>n(t,s),className:"rounded-lg border border-border px-2 py-2 text-text-muted transition hover:border-primary hover:text-primary",title:"Copy",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:l===s?"check":"content_copy"})})]})]})}function m({machineId:e}){let[t,s]=(0,l.useState)(!0),[n,i]=(0,l.useState)(""),[x,p]=(0,l.useState)(""),[h,u]=(0,l.useState)({hasPassword:!0,rtkEnabled:!0,cavemanEnabled:!1,cavemanLevel:"full",apiKeyDefaultModel:""}),{copied:b,copy:v}=(0,d.C)(),y=(0,l.useMemo)(()=>(function(e=""){let t=e?`${e.replace(/\/$/,"")}/v1`:"/v1";return{base:t,chat:`${t}/chat/completions`,models:`${t}/models`,health:e?`${e.replace(/\/$/,"")}/api/health`:"/api/health"}})(x),[x]);(0,l.useEffect)(()=>{p(window.location.origin),j()},[]);let j=async()=>{s(!0);try{let e=await fetch("/api/dashboard/endpoint",{cache:"no-store"}),t=await e.json();e.ok&&u(e=>({...e,...t}))}catch(e){console.log("Error loading endpoint settings:",e)}finally{s(!1)}},g=async(e,t="")=>{i(t);try{let t=await fetch("/api/dashboard/endpoint",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),s=await t.json();t.ok?u(e=>({...e,...s})):alert(s.error||"Cập nhật thiết lập thất bại")}catch(e){console.log("Error updating endpoint settings:",e),alert("Cập nhật thiết lập thất bại")}finally{i("")}};return t?(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsx)(r.Qv,{}),(0,a.jsx)(r.Qv,{})]}):(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h1",{className:"text-2xl font-bold text-text-main",children:"Endpoint"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Endpoint nội bộ để tool gọi BlueRouter theo chuẩn OpenAI-compatible. Cloudflare Tunnel v\xe0 Tailscale đ\xe3 được bỏ khỏi trang n\xe0y để dashboard load nhẹ hơn."})]}),(0,a.jsxs)(r.$n,{onClick:j,variant:"ghost",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"refresh"}),"L\xe0m mới"]})]}),(0,a.jsxs)(r.Zp,{children:[(0,a.jsxs)("div",{className:"mb-4 flex items-start gap-3",children:[(0,a.jsx)("div",{className:"rounded-2xl bg-primary/10 p-3 text-primary",children:(0,a.jsx)("span",{className:"material-symbols-outlined",children:"hub"})}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-xl font-semibold text-text-main",children:"Th\xf4ng tin API endpoint"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"D\xf9ng c\xe1c URL dưới đ\xe2y cho LibreChat, VSCode, Copilot proxy, Antigravity hoặc tool OpenAI-compatible kh\xe1c."})]})]}),(0,a.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,a.jsx)(c,{label:"Base URL",value:y.base,copiedKey:"base",copied:b,copy:v}),(0,a.jsx)(c,{label:"Chat Completions",value:y.chat,copiedKey:"chat",copied:b,copy:v}),(0,a.jsx)(c,{label:"Models",value:y.models,copiedKey:"models",copied:b,copy:v}),(0,a.jsx)(c,{label:"Health",value:y.health,copiedKey:"health",copied:b,copy:v})]}),(0,a.jsxs)("p",{className:"mt-4 text-xs text-text-muted",children:["Machine ID: ",(0,a.jsx)("code",{className:"rounded bg-surface px-1.5 py-0.5",children:e||"unknown"})]})]}),(0,a.jsxs)(r.Zp,{children:[(0,a.jsxs)("div",{className:"mb-4 flex items-start gap-3",children:[(0,a.jsx)("div",{className:"rounded-2xl bg-primary/10 p-3 text-primary",children:(0,a.jsx)("span",{className:"material-symbols-outlined",children:"bolt"})}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-xl font-semibold text-text-main",children:"Token Saver"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Giảm token cho output từ tool v\xe0 phản hồi model. Bật/tắt tại đ\xe2y kh\xf4ng cần load API keys, provider hay tunnel status."})]})]}),(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border p-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"font-semibold text-text-main",children:"RTK tool output compression"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"N\xe9n output của git/grep/ls/tree/logs trước khi gửi v\xe0o model."})]}),(0,a.jsx)(r.lM,{checked:!1!==h.rtkEnabled,onChange:e=>g({rtkEnabled:e},"rtkEnabled"),disabled:"rtkEnabled"===n})]}),(0,a.jsxs)("div",{className:"rounded-xl border border-border p-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"font-semibold text-text-main",children:"Caveman output compression"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Th\xeam style prompt để model trả lời ngắn hơn, giảm output token."})]}),(0,a.jsx)(r.lM,{checked:!!h.cavemanEnabled,onChange:e=>g({cavemanEnabled:e},"cavemanEnabled"),disabled:"cavemanEnabled"===n})]}),h.cavemanEnabled&&(0,a.jsx)("div",{className:"mt-3 flex flex-wrap gap-2",children:o.map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>g({cavemanLevel:e.id},"cavemanLevel"),title:e.desc,className:`rounded-lg border px-3 py-1.5 text-xs font-medium transition ${h.cavemanLevel===e.id?"border-primary bg-primary text-white":"border-border text-text-muted hover:border-primary hover:text-primary"}`,children:e.label},e.id))})]})]})]})]})}c.propTypes={label:i().string.isRequired,value:i().string.isRequired,copiedKey:i().string.isRequired,copied:i().string,copy:i().func.isRequired},m.propTypes={machineId:i().string}}},e=>{e.O(0,[2574,3862,246,5792,5564,5263,5497,8441,3794,7358],()=>e(e.s=18032)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6099,6337],{18032:(e,t,s)=>{Promise.resolve().then(s.bind(s,95907))},95907:(e,t,s)=>{"use strict";s.d(t,{default:()=>m});var a=s(95155),l=s(12115),n=s(14051),i=s.n(n),r=s(35497),d=s(11059);let o=[{id:"lite",label:"Lite",desc:"N\xe9n nhẹ, vẫn giữ ngữ ph\xe1p dễ đọc."},{id:"full",label:"Full",desc:"N\xe9n c\xe2n bằng, giảm token r\xf5 hơn."},{id:"ultra",label:"Ultra",desc:"N\xe9n tối đa, c\xe2u cực ngắn."}];function c({label:e,value:t,copiedKey:s,copied:l,copy:n}){return(0,a.jsxs)("div",{className:"rounded-xl border border-border bg-background p-3",children:[(0,a.jsx)("div",{className:"mb-1 text-xs font-semibold uppercase tracking-wide text-text-muted",children:e}),(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,a.jsx)("code",{className:"min-w-0 flex-1 truncate rounded-lg bg-surface px-3 py-2 font-mono text-xs text-text-main",children:t}),(0,a.jsx)("button",{type:"button",onClick:()=>n(t,s),className:"rounded-lg border border-border px-2 py-2 text-text-muted transition hover:border-primary hover:text-primary",title:"Copy",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:l===s?"check":"content_copy"})})]})]})}function m({machineId:e}){let[t,s]=(0,l.useState)(!0),[n,i]=(0,l.useState)(""),[x,p]=(0,l.useState)(""),[h,u]=(0,l.useState)({hasPassword:!0,rtkEnabled:!0,cavemanEnabled:!1,cavemanLevel:"full",apiKeyDefaultModel:""}),{copied:b,copy:v}=(0,d.C)(),y=(0,l.useMemo)(()=>(function(e=""){let t=e?`${e.replace(/\/$/,"")}/v1`:"/v1";return{base:t,chat:`${t}/chat/completions`,models:`${t}/models`,health:e?`${e.replace(/\/$/,"")}/api/health`:"/api/health"}})(x),[x]);(0,l.useEffect)(()=>{p(window.location.origin),j()},[]);let j=async()=>{s(!0);try{let e=await fetch("/api/dashboard/endpoint",{cache:"no-store"}),t=await e.json();e.ok&&u(e=>({...e,...t}))}catch(e){console.log("Error loading endpoint settings:",e)}finally{s(!1)}},g=async(e,t="")=>{i(t);try{let t=await fetch("/api/dashboard/endpoint",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),s=await t.json();t.ok?u(e=>({...e,...s})):alert(s.error||"Cập nhật thiết lập thất bại")}catch(e){console.log("Error updating endpoint settings:",e),alert("Cập nhật thiết lập thất bại")}finally{i("")}};return t?(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsx)(r.Qv,{}),(0,a.jsx)(r.Qv,{})]}):(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h1",{className:"text-2xl font-bold text-text-main",children:"Endpoint"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Endpoint nội bộ để tool gọi BlueRouter theo chuẩn OpenAI-compatible. Cloudflare Tunnel v\xe0 Tailscale đ\xe3 được bỏ khỏi trang n\xe0y để dashboard load nhẹ hơn."})]}),(0,a.jsxs)(r.$n,{onClick:j,variant:"ghost",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"refresh"}),"L\xe0m mới"]})]}),(0,a.jsxs)(r.Zp,{children:[(0,a.jsxs)("div",{className:"mb-4 flex items-start gap-3",children:[(0,a.jsx)("div",{className:"rounded-2xl bg-primary/10 p-3 text-primary",children:(0,a.jsx)("span",{className:"material-symbols-outlined",children:"hub"})}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-xl font-semibold text-text-main",children:"Th\xf4ng tin API endpoint"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"D\xf9ng c\xe1c URL dưới đ\xe2y cho LibreChat, VSCode, Copilot proxy, Antigravity hoặc tool OpenAI-compatible kh\xe1c."})]})]}),(0,a.jsxs)("div",{className:"grid gap-3 md:grid-cols-2",children:[(0,a.jsx)(c,{label:"Base URL",value:y.base,copiedKey:"base",copied:b,copy:v}),(0,a.jsx)(c,{label:"Chat Completions",value:y.chat,copiedKey:"chat",copied:b,copy:v}),(0,a.jsx)(c,{label:"Models",value:y.models,copiedKey:"models",copied:b,copy:v}),(0,a.jsx)(c,{label:"Health",value:y.health,copiedKey:"health",copied:b,copy:v})]}),(0,a.jsxs)("p",{className:"mt-4 text-xs text-text-muted",children:["Machine ID: ",(0,a.jsx)("code",{className:"rounded bg-surface px-1.5 py-0.5",children:e||"unknown"})]})]}),(0,a.jsxs)(r.Zp,{children:[(0,a.jsxs)("div",{className:"mb-4 flex items-start gap-3",children:[(0,a.jsx)("div",{className:"rounded-2xl bg-primary/10 p-3 text-primary",children:(0,a.jsx)("span",{className:"material-symbols-outlined",children:"bolt"})}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h2",{className:"text-xl font-semibold text-text-main",children:"Token Saver"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Giảm token cho output từ tool v\xe0 phản hồi model. Bật/tắt tại đ\xe2y kh\xf4ng cần load API keys, provider hay tunnel status."})]})]}),(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border p-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"font-semibold text-text-main",children:"RTK tool output compression"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"N\xe9n output của git/grep/ls/tree/logs trước khi gửi v\xe0o model."})]}),(0,a.jsx)(r.lM,{checked:!1!==h.rtkEnabled,onChange:e=>g({rtkEnabled:e},"rtkEnabled"),disabled:"rtkEnabled"===n})]}),(0,a.jsxs)("div",{className:"rounded-xl border border-border p-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"font-semibold text-text-main",children:"Caveman output compression"}),(0,a.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Th\xeam style prompt để model trả lời ngắn hơn, giảm output token."})]}),(0,a.jsx)(r.lM,{checked:!!h.cavemanEnabled,onChange:e=>g({cavemanEnabled:e},"cavemanEnabled"),disabled:"cavemanEnabled"===n})]}),h.cavemanEnabled&&(0,a.jsx)("div",{className:"mt-3 flex flex-wrap gap-2",children:o.map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>g({cavemanLevel:e.id},"cavemanLevel"),title:e.desc,className:`rounded-lg border px-3 py-1.5 text-xs font-medium transition ${h.cavemanLevel===e.id?"border-primary bg-primary text-white":"border-border text-text-muted hover:border-primary hover:text-primary"}`,children:e.label},e.id))})]})]})]})]})}c.propTypes={label:i().string.isRequired,value:i().string.isRequired,copiedKey:i().string.isRequired,copied:i().string,copy:i().func.isRequired},m.propTypes={machineId:i().string}}},e=>{e.O(0,[2574,3862,246,4546,5564,5263,5497,8441,3794,7358],()=>e(e.s=18032)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3538],{43503:(e,t,s)=>{"use strict";s.d(t,{default:()=>c});var n=s(95155),r=s(12115),a=s(35497),l=s(57250);function i(e,t){return t.find(t=>t.id===e)?.name||e}function d(e){return String(e||"").trim().toLowerCase()}function o(e){return Array.isArray(e?.importedModels)?e.importedModels:[]}function c(){let[e,t]=(0,r.useState)(!0),[s,c]=(0,r.useState)(!1),[x,m]=(0,r.useState)(""),[h,u]=(0,r.useState)(""),[p,b]=(0,r.useState)(""),[g,j]=(0,r.useState)(!1),[f,y]=(0,r.useState)([]),[v,N]=(0,r.useState)([]),[k,w]=(0,r.useState)(null),[C,A]=(0,r.useState)(null),[I,M]=(0,r.useState)(""),[S,O]=(0,r.useState)(null),[$,T]=(0,r.useState)([]),[E,R]=(0,r.useState)(!1),[K,q]=(0,r.useState)(""),[z,U]=(0,r.useState)([]),[P,F]=(0,r.useState)(!1),[B,L]=(0,r.useState)(!1),[D,_]=(0,r.useState)({}),[G,H]=(0,r.useState)({}),[J,X]=(0,r.useState)(""),[Z,V]=(0,r.useState)({}),[W,Q]=(0,r.useState)(null),[Y,ee]=(0,r.useState)({}),[et,es]=(0,r.useState)(""),[en,er]=(0,r.useState)(""),[ea,el]=(0,r.useState)({}),[ei,ed]=(0,r.useState)({}),[eo,ec]=(0,r.useState)(""),[ex,em]=(0,r.useState)(!1),[eh,eu]=(0,r.useState)(!0),ep=(0,r.useCallback)(async()=>{t(!0),m("");try{let e=await fetch("/api/personal-cloud-providers",{cache:"no-store"}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||"Kh\xf4ng tải được personal cloud providers");b(t.userId||""),j(!0===t.isAdmin),y(t.providers||[]),N(t.connections||[]),eu(!1!==t.globalRtkEnabled),el(t.routing||{}),ed(e=>{let s={...e};for(let[e,n]of Object.entries(t.routing||{}))s[e]={...n};return s}),X(e=>e||t.userId||"")}catch(e){m(e.message||"Kh\xf4ng tải được personal cloud providers")}finally{t(!1)}},[]),eb=(0,r.useCallback)(async()=>{if(g){L(!0);try{let e=await fetch("/api/personal-cloud-providers/permissions",{cache:"no-store"}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||"Kh\xf4ng tải được quyền OAuth");_(t.permissions||{}),H(t.connectionsByUser||{})}catch(e){m(e.message||"Kh\xf4ng tải được quyền OAuth")}finally{L(!1)}}},[g]);(0,r.useEffect)(()=>{ep()},[ep]),(0,r.useEffect)(()=>{g&&eb()},[g,eb]),(0,r.useEffect)(()=>{let e=D[d(J)]||{},t={};for(let s of f)t[s.id]=!0===e[s.id];V(t)},[J,D,f]);let eg=(0,r.useMemo)(()=>{let e=d(S?.ownerUser||p);return e?$.filter(t=>d(t.ownerUser||t.createdByUser||p)===e):[]},[$,S,p]),ej=(0,r.useMemo)(()=>Array.from(new Set([...Object.keys(D||{}),...Object.keys(G||{})])).map(e=>{let t=D[e]||{},s=G[e]||{},n=f.filter(e=>t?.[e.id]===!0),r=f.some(e=>(s[e.id]||0)>0);return{userId:e,providerState:t,connectionsByProvider:s,enabledProviders:n,hasAnyConnection:r}}).filter(e=>e.enabledProviders.length>0||e.hasAnyConnection).sort((e,t)=>e.userId.localeCompare(t.userId)),[D,G,f]),ef=async()=>{w(null),u("OAuth account đ\xe3 được th\xeam. Model sẽ được import tự động nếu provider hỗ trợ."),await ep()},ey=async(e,t)=>{m(""),u("");try{let s=await fetch(`/api/personal-cloud-providers/${encodeURIComponent(e)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),n=await s.json().catch(()=>({}));if(!s.ok)throw Error(n.error||"Kh\xf4ng cập nhật được connection");await ep()}catch(e){m(e.message||"Kh\xf4ng cập nhật được connection")}},ev=async e=>{m(""),u(""),M(e.id);try{let t=await fetch(`/api/personal-cloud-providers/${encodeURIComponent(e.id)}/import-models`,{method:"POST"}),s=await t.json().catch(()=>({}));if(!t.ok)throw Error(s.error||"Kh\xf4ng import được model");N(t=>t.map(t=>t.id===e.id?{...t,availableModels:s.models||[],importedModels:s.importedModels||[],modelImport:s.modelImport||t.modelImport}:t)),Q(t=>t?.id===e.id?{...t,availableModels:s.models||[],importedModels:s.importedModels||[],modelImport:s.modelImport||t.modelImport}:t);let n=s.modelImport?.source==="provider"?"provider":"catalog fallback";u(`Đ\xe3 cập nhật ${s.models?.length||0} model từ ${n}.`)}catch(e){m(e.message||"Kh\xf4ng import được model")}finally{M("")}},eN=async e=>{R(!0);try{let t=d(e?.ownerUser||p),s=t?`&ownerUser=${encodeURIComponent(t)}`:"",n=await fetch(`/api/keys?pageSize=100&status=active${s}`,{cache:"no-store"}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error||"Kh\xf4ng tải được API keys");let a=Array.isArray(r.keys)?r.keys:[];T(a);let l=d(r.userId),i=a.find(e=>d(e.ownerUser||e.createdByUser||l)===t);q(e=>e||i?.id||"")}catch(e){m(e.message||"Kh\xf4ng tải được API keys")}finally{R(!1)}},ek=async e=>{let t,s;m(""),u(""),O(e),U((s=(t=o(e)).filter(e=>"llm"===(e.type||"llm")).slice(0,3).map(e=>e.routeModel).filter(Boolean)).length>0?s:t.slice(0,3).map(e=>e.routeModel).filter(Boolean)),q(""),await eN(e)},ew=async()=>{if(!S)return;if(!K)return void m("Chọn API key cần th\xeam model.");let e=Array.from(new Set((Array.isArray(z)?z:[]).map(e=>String(e||"").trim()).filter(Boolean)));if(0===e.length)return void m("Chọn \xedt nhất một model.");F(!0),m(""),u("");try{let t=await fetch(`/api/personal-cloud-providers/${encodeURIComponent(S.id)}/api-key-models`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKeyId:K,models:e})}),s=await t.json().catch(()=>({}));if(!t.ok)throw Error(s.error||"Kh\xf4ng th\xeam được model v\xe0o API key");O(null),u(`Đ\xe3 th\xeam ${s.addedModels?.length||e.length} model v\xe0o API key ${s.key?.name||""}.`)}catch(e){m(e.message||"Kh\xf4ng th\xeam được model v\xe0o API key")}finally{F(!1)}},eC=async()=>{if(C){m(""),u("");try{let e=await fetch(`/api/personal-cloud-providers/${encodeURIComponent(C.id)}`,{method:"DELETE"}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||"Kh\xf4ng x\xf3a được connection");A(null),await ep()}catch(e){m(e.message||"Kh\xf4ng x\xf3a được connection")}}},eA=async(e,t)=>{if(e?.id&&t?.routeModel){m(""),es(t.routeModel),ee(e=>({...e,[t.routeModel]:{...e[t.routeModel]||{},loading:!0}}));try{let s=`/api/personal-cloud-providers/${encodeURIComponent(e.id)}/models/${t.routeModel.split("/").map(encodeURIComponent).join("/")}`,n=await fetch(s,{method:"POST"}),r=await n.json().catch(()=>({})),a={ok:r?.ok===!0,status:r?.status||n.status,text:r?.text||"",error:r?.error||(n.ok?"":"Test failed"),latencyMs:r?.latencyMs||0};ee(e=>({...e,[t.routeModel]:a}))}catch(e){ee(s=>({...s,[t.routeModel]:{ok:!1,error:e.message||"Test failed"}}))}finally{es("")}}},eI=async(e,t)=>{if(e?.id&&t?.routeModel&&window.confirm(`X\xf3a model ${t.routeModel} khỏi connection ${e.name||e.id}?`)){m(""),u(""),er(t.routeModel);try{let s=`/api/personal-cloud-providers/${encodeURIComponent(e.id)}/models/${t.routeModel.split("/").map(encodeURIComponent).join("/")}`,n=await fetch(s,{method:"DELETE"}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r?.error||"Kh\xf4ng x\xf3a được model");(e=>{if(!e?.connectionId&&!e?.id)return;let t=e.connectionId||e.id;N(s=>s.map(s=>s.id===t?{...s,importedModels:Array.isArray(e.importedModels)?e.importedModels:s.importedModels,availableModels:Array.isArray(e.models)?e.models:Array.isArray(e.availableModels)?e.availableModels:s.availableModels,modelImport:e.modelImport||s.modelImport}:s)),Q(s=>s?.id===t?{...s,importedModels:Array.isArray(e.importedModels)?e.importedModels:s.importedModels,availableModels:Array.isArray(e.models)?e.models:Array.isArray(e.availableModels)?e.availableModels:s.availableModels,modelImport:e.modelImport||s.modelImport}:s)})(r),ee(e=>{let s={...e};return delete s[t.routeModel],s}),u(`Đ\xe3 x\xf3a model ${t.routeModel}.`)}catch(e){m(e.message||"Kh\xf4ng x\xf3a được model")}finally{er("")}}},eM=(e,t)=>{ed(s=>{let n={...s[e]||{},...t};for(let e of Object.keys(n))(""===n[e]||void 0===n[e])&&delete n[e];return{...s,[e]:n}})},eS=async e=>{m(""),u(""),ec(e);try{let t=ei[e]||{},s={providerId:e,override:{fallbackStrategy:t.fallbackStrategy||"",stickyRoundRobinLimit:t.stickyRoundRobinLimit,stickyScope:t.stickyScope||"",stickyTtlMinutes:t.stickyTtlMinutes,stickyFallbackToClientIp:t.stickyFallbackToClientIp,stickyRebindOnFailure:t.stickyRebindOnFailure,stickyRebindFailureThreshold:t.stickyRebindFailureThreshold}},n=await fetch("/api/personal-cloud-providers/routing",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r?.error||"Kh\xf4ng lưu được routing");el(r.routing||{}),u(`Đ\xe3 cập nhật routing cho ${e}.`)}catch(e){m(e.message||"Kh\xf4ng lưu được routing")}finally{ec("")}},eO=async e=>{m(""),u(""),ec(e);try{let t=await fetch(`/api/personal-cloud-providers/routing?providerId=${encodeURIComponent(e)}`,{method:"DELETE"}),s=await t.json().catch(()=>({}));if(!t.ok)throw Error(s?.error||"Kh\xf4ng reset được routing");el(s.routing||{}),ed(t=>{let s={...t};return delete s[e],s}),u(`Đ\xe3 reset ${e} về ch\xednh s\xe1ch mặc định.`)}catch(e){m(e.message||"Kh\xf4ng reset được routing")}finally{ec("")}},e$=async()=>{let e=d(J);if(!e)return void m("Nhập username/email cần cấp quyền.");c(!0),m(""),u("");try{let t=await fetch("/api/personal-cloud-providers/permissions",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({userId:e,providers:Z})}),s=await t.json().catch(()=>({}));if(!t.ok)throw Error(s.error||"Kh\xf4ng lưu được quyền OAuth");_(s.permissions||{}),H(s.connectionsByUser||{});let n=s.user?.id||e;n!==e&&X(n),u(`Đ\xe3 lưu quyền OAuth cho ${n}.`),await ep()}catch(e){m(e.message||"Kh\xf4ng lưu được quyền OAuth")}finally{c(!1)}},eT=async e=>{let t=d(e);if(t&&window.confirm(`Thu hồi to\xe0n bộ quyền OAuth provider của ${t}? OAuth account của user n\xe0y sẽ bị X\xd3A hẳn (token, model đ\xe3 import) v\xe0 model tương ứng sẽ bị gỡ khỏi mọi API key đ\xe3 g\xe1n. H\xe0nh động n\xe0y kh\xf4ng thể ho\xe0n t\xe1c.`)){c(!0),m(""),u("");try{let e=await fetch(`/api/personal-cloud-providers/permissions?userId=${encodeURIComponent(t)}`,{method:"DELETE"}),s=await e.json().catch(()=>({}));if(!e.ok)throw Error(s.error||"Kh\xf4ng thu hồi được quyền OAuth");_(s.permissions||{}),H(s.connectionsByUser||{}),d(J)===t&&X(""),u(`Đ\xe3 thu hồi quyền v\xe0 x\xf3a OAuth account của ${t}.`),await ep()}catch(e){m(e.message||"Kh\xf4ng thu hồi được quyền OAuth")}finally{c(!1)}}},eE=k?function(e={}){return{id:e.id,name:e.name||e.id,icon:e.icon||"cloud",color:e.color||"#64748b",website:e.website||"",notice:e.notice||null,deprecationNotice:e.deprecationNotice||"",serviceKinds:e.serviceKinds||["llm"]}}(k):null,eR=g?f:f.filter(e=>e.enabled),eK=o(S),eq=S?.modelImport||{},ez=o(W);return(0,n.jsxs)("div",{className:"space-y-6",children:[(0,n.jsx)("div",{children:(0,n.jsxs)("div",{className:"flex flex-col gap-3 md:flex-row md:items-start md:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"text-2xl font-semibold text-text-main",children:"Personal Cloud Providers"}),(0,n.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Kết nối OAuth c\xe1 nh\xe2n cho Claude Code, OpenAI Codex v\xe0 Antigravity. Account c\xe1 nh\xe2n chỉ owner nh\xecn thấy, chỉ API key của owner được d\xf9ng. Cột RTK cho ph\xe9p override ri\xeang từng account (Lu\xf4n ON / Lu\xf4n OFF) bất kể cấu h\xecnh RTK global ở /dashboard/endpoint đang on hay off — để trống th\xec theo global."})]}),(0,n.jsxs)("div",{className:"rounded-2xl border border-border bg-surface px-4 py-3 text-sm",children:[(0,n.jsx)("div",{className:"text-xs uppercase tracking-wide text-text-muted",children:"Current user"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-text-main",children:p||"—"})]})]})}),x?(0,n.jsx)("div",{className:"rounded-2xl border border-red-500/30 bg-red-500/10 px-4 py-3 text-sm text-red-700 dark:text-red-300",children:x}):null,h?(0,n.jsx)("div",{className:"rounded-2xl border border-green-500/30 bg-green-500/10 px-4 py-3 text-sm text-green-700 dark:text-green-300",children:h}):null,(0,n.jsx)("div",{className:"grid gap-4 lg:grid-cols-3",children:0===f.length?(0,n.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-8 text-center text-sm text-text-muted lg:col-span-3",children:"Admin chưa cấp quyền personal OAuth provider n\xe0o cho user n\xe0y."}):f.map(e=>(0,n.jsxs)(a.Zp,{className:"space-y-4",children:[(0,n.jsxs)("div",{className:"flex items-start gap-3",children:[(0,n.jsx)("span",{className:"inline-flex size-10 shrink-0 items-center justify-center rounded-xl",style:{backgroundColor:`${e.color||"#64748b"}22`},children:(0,n.jsx)(l.A,{src:`/providers/${e.id}.png`,alt:e.name,size:34,className:"max-h-[34px] max-w-[34px] rounded-lg object-contain",fallbackText:e.id.slice(0,2).toUpperCase(),fallbackColor:e.color||"#64748b"})}),(0,n.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("h2",{className:"font-semibold text-text-main",children:e.name}),e.enabled?(0,n.jsx)(a.Ex,{variant:"success",size:"sm",children:"Enabled"}):(0,n.jsx)(a.Ex,{variant:"warning",size:"sm",children:"Locked"})]}),(0,n.jsx)("p",{className:"mt-1 text-xs text-text-muted",children:e.enabled?"Được admin cấp quyền, c\xf3 thể add OAuth account c\xe1 nh\xe2n.":"Admin chưa cấp quyền cho user n\xe0y."})]})]}),e.deprecationNotice?(0,n.jsx)("p",{className:"rounded-xl border border-amber-500/30 bg-amber-500/10 p-3 text-xs text-amber-700 dark:text-amber-300",children:e.deprecationNotice}):null,(0,n.jsxs)(a.$n,{fullWidth:!0,disabled:!e.enabled,onClick:()=>{e.enabled&&w(e)},icon:"add_link",children:["Add ",e.name," account"]})]},e.id))}),(0,n.jsxs)(a.Zp,{className:"space-y-4",children:[(0,n.jsxs)("div",{className:"flex flex-col gap-2 md:flex-row md:items-center md:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"My personal accounts"}),(0,n.jsx)("p",{className:"text-sm text-text-muted",children:"OAuth xong sẽ tự import model nếu provider hỗ trợ. Nếu kh\xf4ng gọi được endpoint model, hệ thống d\xf9ng catalog fallback để user vẫn chọn được model."})]}),(0,n.jsx)(a.$n,{variant:"outline",size:"sm",onClick:ep,loading:e,icon:"refresh",children:"Refresh"})]}),e?(0,n.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-8 text-center text-sm text-text-muted",children:"Đang tải..."}):0===v.length?(0,n.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-8 text-center text-sm text-text-muted",children:"Chưa c\xf3 personal OAuth account n\xe0o."}):(0,n.jsx)("div",{className:"overflow-x-auto rounded-2xl border border-border",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:"px-4 py-3 font-medium",children:"Connection"}),(0,n.jsx)("th",{className:"px-4 py-3 font-medium",children:"Provider"}),(0,n.jsx)("th",{className:"px-4 py-3 font-medium",children:"Account"}),(0,n.jsx)("th",{className:"px-4 py-3 font-medium",children:"Models"}),(0,n.jsx)("th",{className:"px-4 py-3 font-medium",children:"Created"}),(0,n.jsx)("th",{className:"px-4 py-3 font-medium",children:"Active"}),(0,n.jsx)("th",{className:"px-4 py-3 font-medium",children:(0,n.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:["RTK (Token Savings)",(0,n.jsxs)(a.Ex,{variant:eh?"success":"default",size:"sm",className:"normal-case",children:["Global: ",eh?"ON":"OFF"]}),(0,n.jsx)("button",{type:"button",onClick:()=>em(!0),title:"RTK l\xe0 g\xec? Bấm để xem giải th\xedch",className:"inline-flex size-4 shrink-0 items-center justify-center rounded-full border border-border text-[10px] font-bold normal-case text-text-muted transition-colors hover:border-brand-500 hover:text-brand-600",children:"?"})]})}),(0,n.jsx)("th",{className:"px-4 py-3 text-right font-medium",children:"Actions"})]})}),(0,n.jsx)("tbody",{className:"divide-y divide-border bg-background",children:v.map(e=>{let t=Array.isArray(e?.availableModels)?e.availableModels:[],s=e.modelImport||{};return(0,n.jsxs)("tr",{className:"align-top hover:bg-surface/50",children:[(0,n.jsxs)("td",{className:"px-4 py-4",children:[(0,n.jsx)("div",{className:"font-medium text-text-main",children:e.name||e.id}),(0,n.jsx)("div",{className:"mt-1 font-mono text-xs text-text-muted",children:e.id})]}),(0,n.jsx)("td",{className:"px-4 py-4",children:(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(l.A,{src:`/providers/${e.provider}.png`,alt:e.provider,size:24,className:"max-h-[24px] max-w-[24px] rounded object-contain",fallbackText:e.provider.slice(0,2).toUpperCase()}),(0,n.jsx)("span",{children:i(e.provider,f)})]})}),(0,n.jsxs)("td",{className:"px-4 py-4",children:[(0,n.jsx)("div",{className:"break-all text-text-main",children:function(e={}){let t=e.providerSpecificData&&"object"==typeof e.providerSpecificData?e.providerSpecificData:{};return e.email||t.email||t.preferredUsername||e.displayName||t.sub||t.accountId||t.claudeAccountId||t.chatgptAccountId||"—"}(e)}),(0,n.jsxs)("div",{className:"mt-1 break-all text-xs text-text-muted",children:["Owner: ",e.ownerUser||p||"—"]})]}),(0,n.jsxs)("td",{className:"px-4 py-4",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[function(e={}){return"provider"===(e.source||"catalog")?(0,n.jsx)(a.Ex,{variant:"success",size:"sm",children:"Imported"}):(0,n.jsx)(a.Ex,{variant:"warning",size:"sm",children:"Catalog"})}(s),(0,n.jsxs)("span",{className:"text-xs text-text-muted",children:[t.length," model(s)"]})]}),s.warning?(0,n.jsx)("div",{className:"mt-1 max-w-[320px] truncate text-xs text-amber-600 dark:text-amber-300",title:s.warning,children:s.warning}):null,t.length>0?(0,n.jsxs)("div",{className:"mt-2 flex max-w-[360px] flex-wrap gap-1",children:[t.slice(0,4).map(e=>(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-0.5 font-mono text-[11px] text-text-muted",children:e.routeModel},e.routeModel)),t.length>4?(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-0.5 text-[11px] text-text-muted",children:["+",t.length-4]}):null]}):null]}),(0,n.jsx)("td",{className:"px-4 py-4 text-xs text-text-muted",children:function(e){if(!e)return"—";try{return new Intl.DateTimeFormat("vi-VN",{dateStyle:"short",timeStyle:"short"}).format(new Date(e))}catch{return e}}(e.createdAt)}),(0,n.jsx)("td",{className:"px-4 py-4",children:(0,n.jsx)(a.lM,{checked:!1!==e.isActive,onChange:t=>ey(e.id,{isActive:t})})}),(0,n.jsx)("td",{className:"px-4 py-4",children:(0,n.jsxs)("select",{value:!0===e.rtkEnabled?"on":!1===e.rtkEnabled?"off":"inherit",onChange:t=>{let s=t.target.value;ey(e.id,{rtkEnabled:"inherit"===s?null:"on"===s})},className:"h-9 w-full min-w-[140px] rounded-xl border border-border bg-background px-2 text-xs text-text-main outline-none focus:border-brand-500",children:[(0,n.jsx)("option",{value:"inherit",children:"Theo global"}),(0,n.jsx)("option",{value:"on",children:"Lu\xf4n ON"}),(0,n.jsx)("option",{value:"off",children:"Lu\xf4n OFF"})]})}),(0,n.jsx)("td",{className:"px-4 py-4",children:(0,n.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,n.jsx)(a.$n,{variant:"outline",size:"sm",loading:I===e.id,onClick:()=>ev(e),children:"Import models"}),(0,n.jsx)(a.$n,{variant:"outline",size:"sm",disabled:0===o(e).length,onClick:()=>{m(""),u(""),Q(e),ee({}),es(""),er("")},children:"Manage models"}),(0,n.jsx)(a.$n,{variant:"secondary",size:"sm",disabled:0===o(e).length,onClick:()=>ek(e),children:"Add to API key"}),(0,n.jsx)(a.$n,{variant:"outline",size:"sm",onClick:()=>{let t;return t=window.prompt("T\xean connection mới",e.name||""),void(t?.trim()&&ey(e.id,{name:t.trim()}))},children:"Rename"}),(0,n.jsx)(a.$n,{variant:"danger",size:"sm",onClick:()=>A(e),children:"Delete"})]})})]},e.id)})})]})})]}),(0,n.jsxs)(a.Zp,{className:"space-y-4",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Routing strategy"}),(0,n.jsxs)("p",{className:"text-sm text-text-muted",children:["Khi bạn c\xf3 nhiều personal account cho c\xf9ng provider, đ\xe2y l\xe0 ch\xednh s\xe1ch chọn account cho từng request. Để trống = kế thừa ch\xednh s\xe1ch của admin ở ",(0,n.jsx)("span",{className:"font-mono",children:"/dashboard/providers/<provider>"}),"."]})]}),(0,n.jsx)("div",{className:"grid gap-4 lg:grid-cols-3",children:0===eR.length?(0,n.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-6 text-center text-sm text-text-muted lg:col-span-3",children:"Bạn chưa được cấp quyền provider n\xe0o, n\xean chưa cần thiết lập routing."}):eR.map(e=>{let t=ei[e.id]||{},s=ea[e.id]||null,r=!s,l=t.fallbackStrategy||"",i="round-robin"===l,d=eo===e.id;return(0,n.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4 space-y-3",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,n.jsxs)("div",{className:"min-w-0",children:[(0,n.jsx)("div",{className:"font-semibold text-text-main",children:e.name}),(0,n.jsx)("div",{className:"text-xs text-text-muted",children:r?"Đang kế thừa policy global":`Override active: ${s.fallbackStrategy||"inherit"}`})]}),r?(0,n.jsx)(a.Ex,{variant:"default",size:"sm",children:"Inherit"}):(0,n.jsx)(a.Ex,{variant:"success",size:"sm",children:"Override"})]}),(0,n.jsxs)("label",{className:"block text-sm",children:[(0,n.jsx)("span",{className:"mb-1 block font-medium text-text-main",children:"Strategy"}),(0,n.jsxs)("select",{value:l,onChange:t=>eM(e.id,{fallbackStrategy:t.target.value}),className:"h-10 w-full rounded-xl border border-border bg-background px-3 text-sm text-text-main outline-none focus:border-brand-500",disabled:d,children:[(0,n.jsx)("option",{value:"",children:"Inherit (use global)"}),(0,n.jsx)("option",{value:"fill-first",children:"fill-first — chạy hết account 1 mới sang account 2"}),(0,n.jsx)("option",{value:"round-robin",children:"round-robin — lu\xe2n phi\xean theo sticky limit"}),(0,n.jsx)("option",{value:"least-latency",children:"least-latency — chọn account nhanh nhất"}),(0,n.jsx)("option",{value:"p2c",children:"p2c — power-of-two-choices"})]})]}),i?(0,n.jsxs)("div",{className:"space-y-2 rounded-xl border border-border/50 bg-background/50 p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Round-robin sticky params (để trống = d\xf9ng gi\xe1 trị global)"}),(0,n.jsxs)("label",{className:"block text-xs",children:[(0,n.jsx)("span",{className:"mb-1 block text-text-muted",children:"Sticky limit (số request li\xean tiếp trước khi rotate)"}),(0,n.jsx)(a.pd,{type:"number",min:1,value:t.stickyRoundRobinLimit??"",onChange:t=>eM(e.id,{stickyRoundRobinLimit:t.target.value?Number(t.target.value):void 0}),placeholder:"v\xed dụ 3",disabled:d})]}),(0,n.jsxs)("label",{className:"block text-xs",children:[(0,n.jsx)("span",{className:"mb-1 block text-text-muted",children:"Sticky scope"}),(0,n.jsxs)("select",{value:t.stickyScope||"",onChange:t=>eM(e.id,{stickyScope:t.target.value}),className:"h-9 w-full rounded-xl border border-border bg-background px-3 text-xs text-text-main outline-none focus:border-brand-500",disabled:d,children:[(0,n.jsx)("option",{value:"",children:"(inherit)"}),(0,n.jsx)("option",{value:"global",children:"global — rotate cho mọi request"}),(0,n.jsx)("option",{value:"client_ip",children:"client_ip — sticky theo IP"}),(0,n.jsx)("option",{value:"client_session",children:"client_session — sticky theo CLI session"})]})]}),(0,n.jsxs)("label",{className:"block text-xs",children:[(0,n.jsx)("span",{className:"mb-1 block text-text-muted",children:"Sticky TTL (ph\xfat)"}),(0,n.jsx)(a.pd,{type:"number",min:1,value:t.stickyTtlMinutes??"",onChange:t=>eM(e.id,{stickyTtlMinutes:t.target.value?Number(t.target.value):void 0}),placeholder:"v\xed dụ 120",disabled:d})]})]}):null,(0,n.jsxs)("div",{className:"flex flex-wrap gap-2 pt-1",children:[(0,n.jsx)(a.$n,{size:"sm",loading:d,onClick:()=>eS(e.id),children:"Save"}),(0,n.jsx)(a.$n,{size:"sm",variant:"ghost",disabled:d||r,onClick:()=>eO(e.id),children:"Reset to inherit"})]})]},e.id)})})]}),g?(0,n.jsxs)(a.Zp,{className:"space-y-4",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Admin: OAuth provider access"}),(0,n.jsx)("p",{className:"text-sm text-text-muted",children:"Default l\xe0 kh\xf4ng c\xf3 quyền. Nhập username/email rồi bật provider được ph\xe9p add personal account."})]}),(0,n.jsxs)("div",{className:"grid gap-3 md:grid-cols-[minmax(0,1fr)_auto] md:items-end",children:[(0,n.jsx)(a.pd,{label:"User ID / Email",value:J,onChange:e=>X(e.target.value),placeholder:"anh-tct hoặc anh-tct@fujinet.net"}),(0,n.jsx)(a.$n,{onClick:e$,loading:s,icon:"save",children:"Save permissions"})]}),(0,n.jsx)("div",{className:"grid gap-3 md:grid-cols-3",children:f.map(e=>(0,n.jsx)("div",{className:"rounded-2xl border border-border bg-surface p-4",children:(0,n.jsx)(a.lM,{checked:!0===Z[e.id],onChange:t=>V(s=>({...s,[e.id]:t})),label:e.name,description:Z[e.id]?"User được ph\xe9p add account":"User chưa được cấp quyền"})},e.id))}),(0,n.jsxs)("div",{className:"border-t border-border pt-4",children:[(0,n.jsxs)("div",{className:"mb-3 flex flex-col gap-2 md:flex-row md:items-center md:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"font-semibold text-text-main",children:"Granted OAuth Access"}),(0,n.jsx)("p",{className:"text-xs text-text-muted",children:"Danh s\xe1ch user hiện đang được cấp quyền add personal OAuth account."})]}),(0,n.jsx)(a.$n,{variant:"outline",size:"sm",onClick:eb,loading:B,icon:"refresh",children:"Refresh list"})]}),B?(0,n.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-6 text-center text-sm text-text-muted",children:"Đang tải quyền..."}):0===ej.length?(0,n.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-6 text-center text-sm text-text-muted",children:"Chưa c\xf3 user n\xe0o được cấp quyền OAuth provider."}):(0,n.jsx)("div",{className:"overflow-x-auto rounded-2xl border border-border",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:"px-4 py-3 font-medium",children:"User"}),f.map(e=>(0,n.jsx)("th",{className:"px-4 py-3 font-medium",children:e.name},e.id)),(0,n.jsx)("th",{className:"px-4 py-3 text-right font-medium",children:"Actions"})]})}),(0,n.jsx)("tbody",{className:"divide-y divide-border bg-background",children:ej.map(e=>(0,n.jsxs)("tr",{className:"hover:bg-surface/50",children:[(0,n.jsxs)("td",{className:"px-4 py-4",children:[(0,n.jsx)("div",{className:"break-all font-mono text-text-main",children:e.userId}),d(J)===e.userId?(0,n.jsx)("div",{className:"mt-1 text-xs text-brand-600 dark:text-brand-300",children:"Đang edit ở form ph\xeda tr\xean"}):null]}),f.map(t=>{let s=!0===e.providerState[t.id],r=e.connectionsByProvider?.[t.id]||0,i=r>0;return(0,n.jsx)("td",{className:"px-4 py-4",children:(0,n.jsxs)("div",{className:"flex items-center gap-1.5",children:[s?(0,n.jsx)(a.Ex,{variant:"success",size:"sm",children:"ON"}):(0,n.jsx)(a.Ex,{variant:"default",size:"sm",children:"OFF"}),i?(0,n.jsxs)("span",{className:"inline-flex items-center gap-0.5",title:`User đ\xe3 add ${r} ${t.name} account${r>1?"s":""}`,children:[(0,n.jsx)(l.A,{src:`/providers/${t.id}.png`,alt:t.name,size:16,className:"max-h-[16px] max-w-[16px] rounded object-contain",fallbackText:t.id.slice(0,2).toUpperCase(),fallbackColor:t.color||"#64748b"}),r>1?(0,n.jsxs)("span",{className:"text-[10px] font-semibold text-text-muted",children:["\xd7",r]}):null]}):null]})},t.id)}),(0,n.jsx)("td",{className:"px-4 py-4",children:(0,n.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,n.jsx)(a.$n,{variant:"outline",size:"sm",onClick:()=>(e=>{let t=d(e);X(t);let s=D[t]||{},n={};for(let e of f)n[e.id]=!0===s[e.id];V(n)})(e.userId),children:"Edit"}),(0,n.jsx)(a.$n,{variant:"danger",size:"sm",loading:s,onClick:()=>eT(e.userId),children:"Revoke"})]})})]},e.userId))})]})})]})]}):null,S?(0,n.jsx)(a.aF,{isOpen:!!S,onClose:()=>O(null),title:"Add models to API key",size:"full",footer:(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.$n,{variant:"ghost",onClick:()=>O(null),disabled:P,children:"Cancel"}),(0,n.jsx)(a.$n,{onClick:ew,loading:P,disabled:!K||0===z.length,children:"Add selected models"})]}),children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4 text-sm",children:[(0,n.jsx)("div",{className:"font-semibold text-text-main",children:S.name||S.id}),(0,n.jsxs)("div",{className:"mt-1 text-text-muted",children:[i(S.provider,f)," \xb7 ",eK.length," imported model(s)"]}),eq.warning?(0,n.jsx)("div",{className:"mt-2 text-xs text-amber-600 dark:text-amber-300",children:eq.warning}):null,0===eK.length?(0,n.jsx)("div",{className:"mt-2 rounded-xl border border-amber-500/30 bg-amber-500/10 p-3 text-xs text-amber-700 dark:text-amber-300",children:'Chưa import được model n\xe0o từ provider. Bấm "Import models" tr\xean d\xf2ng connection trước khi g\xe1n v\xe0o API key.'}):null]}),(0,n.jsxs)("label",{className:"block text-sm",children:[(0,n.jsx)("span",{className:"mb-1 block font-medium text-text-main",children:"API key"}),(0,n.jsxs)("select",{value:K,onChange:e=>q(e.target.value),className:"h-10 w-full rounded-xl border border-border bg-background px-3 text-sm text-text-main outline-none focus:border-brand-500",disabled:E,children:[(0,n.jsx)("option",{value:"",children:E?"Đang tải API keys...":"Chọn API key"}),eg.map(e=>(0,n.jsxs)("option",{value:e.id,children:[e.name," \xb7 ",e.ownerUser||p]},e.id))]})]}),0!==eg.length||E?null:(0,n.jsx)("div",{className:"rounded-xl border border-amber-500/30 bg-amber-500/10 p-3 text-sm text-amber-700 dark:text-amber-300",children:"User n\xe0y chưa c\xf3 API key active để th\xeam model."}),(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"font-semibold text-text-main",children:"Models"}),(0,n.jsx)("p",{className:"text-xs text-text-muted",children:"Model được lưu v\xe0o allowedModels của API key. Request sẽ route qua personal OAuth account của owner."})]}),(0,n.jsxs)("div",{className:"flex gap-2",children:[(0,n.jsx)(a.$n,{variant:"outline",size:"sm",onClick:()=>U(eK.map(e=>e.routeModel).filter(Boolean)),children:"Select all"}),(0,n.jsx)(a.$n,{variant:"ghost",size:"sm",onClick:()=>U([]),children:"Clear"})]})]}),(0,n.jsx)("div",{className:"grid gap-2 md:grid-cols-2",children:eK.map(e=>(0,n.jsxs)("label",{className:"flex cursor-pointer items-start gap-3 rounded-xl border border-border bg-background p-3 hover:bg-surface",children:[(0,n.jsx)("input",{type:"checkbox",className:"mt-1",checked:z.includes(e.routeModel),onChange:()=>{var t;return t=e.routeModel,void U(e=>e.includes(t)?e.filter(e=>e!==t):[...e,t])}}),(0,n.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,n.jsx)("span",{className:"block font-medium text-text-main",children:e.name||e.id}),(0,n.jsx)("span",{className:"mt-1 block break-all font-mono text-xs text-text-muted",children:e.routeModel}),e.type&&"llm"!==e.type?(0,n.jsx)("span",{className:"mt-2 inline-flex rounded-full bg-surface px-2 py-0.5 text-[11px] text-text-muted",children:e.type}):null]})]},e.routeModel))})]})}):null,W?(0,n.jsx)(a.aF,{isOpen:!!W,onClose:()=>Q(null),title:"Manage imported models",size:"full",footer:(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.$n,{variant:"ghost",onClick:()=>Q(null),children:"Close"}),(0,n.jsx)(a.$n,{variant:"outline",loading:I===W.id,onClick:()=>ev(W),icon:"refresh",children:"Re-import from provider"})]}),children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4 text-sm",children:[(0,n.jsx)("div",{className:"font-semibold text-text-main",children:W.name||W.id}),(0,n.jsxs)("div",{className:"mt-1 text-text-muted",children:[i(W.provider,f)," \xb7 ",ez.length," imported model(s)"]}),(0,n.jsx)("div",{className:"mt-2 text-xs text-text-muted",children:'Test gửi 1 prompt "Say hello in five words" qua ch\xednh OAuth account của bạn, qua đ\xfang proxy của connection. X\xf3a model sẽ bỏ n\xf3 khỏi list importable; c\xe1c API key đ\xe3 gắn model n\xe0y kh\xf4ng bị thay đổi (request đến model đ\xf3 sẽ do provider ph\xeda tr\xean quyết định chấp nhận hay kh\xf4ng).'})]}),0===ez.length?(0,n.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-8 text-center text-sm text-text-muted",children:'Chưa c\xf3 model n\xe0o được import. Bấm "Re-import from provider".'}):(0,n.jsx)("div",{className:"overflow-x-auto rounded-2xl border border-border",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:"px-4 py-3 font-medium",children:"Model"}),(0,n.jsx)("th",{className:"px-4 py-3 font-medium",children:"Route ID"}),(0,n.jsx)("th",{className:"px-4 py-3 font-medium",children:"Test result"}),(0,n.jsx)("th",{className:"px-4 py-3 text-right font-medium",children:"Actions"})]})}),(0,n.jsx)("tbody",{className:"divide-y divide-border bg-background",children:ez.map(e=>{let t=Y[e.routeModel],s=et===e.routeModel,r=en===e.routeModel;return(0,n.jsxs)("tr",{className:"align-top",children:[(0,n.jsxs)("td",{className:"px-4 py-3",children:[(0,n.jsx)("div",{className:"font-medium text-text-main",children:e.name||e.id}),e.type&&"llm"!==e.type?(0,n.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:e.type}):null]}),(0,n.jsx)("td",{className:"px-4 py-3 font-mono text-xs text-text-muted break-all",children:e.routeModel}),(0,n.jsx)("td",{className:"px-4 py-3 text-xs",children:s?(0,n.jsx)("span",{className:"text-text-muted",children:"Đang test..."}):t?t.ok?(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsxs)("div",{className:"text-green-700 dark:text-green-300",children:["OK \xb7 ",t.latencyMs||0,"ms"]}),(0,n.jsx)("div",{className:"break-all text-text-muted",children:(t.text||"").slice(0,200)})]}):(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsxs)("div",{className:"text-red-700 dark:text-red-300",children:["FAIL \xb7 status ",t.status||"?"]}),(0,n.jsx)("div",{className:"break-all text-text-muted",children:(t.error||"").slice(0,200)})]}):(0,n.jsx)("span",{className:"text-text-muted",children:"—"})}),(0,n.jsx)("td",{className:"px-4 py-3",children:(0,n.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,n.jsx)(a.$n,{variant:"outline",size:"sm",loading:s,disabled:r,onClick:()=>eA(W,e),children:"Say hello"}),(0,n.jsx)(a.$n,{variant:"danger",size:"sm",loading:r,disabled:s,onClick:()=>eI(W,e),children:"Delete"})]})})]},e.routeModel)})})]})})]})}):null,ex?(0,n.jsx)(a.aF,{isOpen:ex,onClose:()=>em(!1),title:"RTK (Token Savings) l\xe0 g\xec?",size:"xl",footer:(0,n.jsx)(a.$n,{onClick:()=>em(!1),children:"Đ\xe3 hiểu"}),children:(0,n.jsxs)("div",{className:"space-y-5 text-sm text-text-main",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 rounded-xl border border-border bg-surface px-3 py-2",children:[(0,n.jsx)("span",{className:"text-xs text-text-muted",children:"Global RTK hiện đang:"}),(0,n.jsx)(a.Ex,{variant:eh?"success":"default",size:"sm",children:eh?"ON":"OFF"}),(0,n.jsx)("span",{className:"text-xs text-text-muted",children:'— \xe1p dụng cho mọi account chọn "Theo global"'})]}),(0,n.jsx)("p",{className:"text-text-muted",children:"RTK l\xe0 bộ lọc n\xe9n output của tool (Bash, Grep, Glob, Read...) ngay trong request trước khi gửi l\xean model, gi\xfap giảm số token phải gửi m\xe0 kh\xf4ng l\xe0m mất th\xf4ng tin quan trọng — chỉ t\xe1c động tới phần tool output, kh\xf4ng đụng v\xe0o nội dung chat."}),(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"mb-2 font-semibold text-text-main",children:"Hoạt động ra sao với CLI tool"}),(0,n.jsx)("p",{className:"text-text-muted",children:"Mỗi khi Claude Code / Codex CLI / OpenCode... gọi tool v\xe0 nhận lại output, RTK tự nhận diện định dạng quen thuộc rồi r\xfat gọn theo đ\xfang cấu tr\xfac của n\xf3:"}),(0,n.jsxs)("ul",{className:"mt-2 list-disc space-y-1 pl-5 text-text-muted",children:[(0,n.jsxs)("li",{children:[(0,n.jsx)("span",{className:"font-mono text-text-main",children:"git diff"})," — giữ v\xe0i d\xf2ng context quanh thay đổi, cắt phần hunk qu\xe1 d\xe0i"]}),(0,n.jsxs)("li",{children:[(0,n.jsx)("span",{className:"font-mono text-text-main",children:"git status"})," / ",(0,n.jsx)("span",{className:"font-mono text-text-main",children:"git log"})," — gom gọn danh s\xe1ch file thay đổi, danh s\xe1ch commit"]}),(0,n.jsxs)("li",{children:[(0,n.jsx)("span",{className:"font-mono text-text-main",children:"grep"})," / ",(0,n.jsx)("span",{className:"font-mono text-text-main",children:"find"})," — giới hạn số match hiển thị mỗi file/thư mục"]}),(0,n.jsxs)("li",{children:[(0,n.jsx)("span",{className:"font-mono text-text-main",children:"ls -la"})," / ",(0,n.jsx)("span",{className:"font-mono text-text-main",children:"tree"})," — t\xf3m tắt theo loại file, cắt c\xe2y thư mục qu\xe1 s\xe2u"]}),(0,n.jsx)("li",{children:"Build log (npm/yarn/cargo...) — chỉ giữ d\xf2ng quan trọng (lỗi, kết quả build)"}),(0,n.jsx)("li",{children:"Output d\xe0i chung kh\xf4ng r\xf5 định dạng — fallback dedup d\xf2ng lặp hoặc smart-truncate (giữ đầu + cuối)"})]})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"mb-2 font-semibold text-text-main",children:"Hiệu quả thực tế"}),(0,n.jsx)("div",{className:"overflow-x-auto rounded-xl border border-border",children:(0,n.jsxs)("table",{className:"min-w-full text-xs",children:[(0,n.jsx)("thead",{className:"bg-surface/80 text-left uppercase tracking-wide text-text-muted",children:(0,n.jsxs)("tr",{children:[(0,n.jsx)("th",{className:"px-3 py-2 font-medium",children:"Loại output"}),(0,n.jsx)("th",{className:"px-3 py-2 font-medium",children:"Trước"}),(0,n.jsx)("th",{className:"px-3 py-2 font-medium",children:"Sau"}),(0,n.jsx)("th",{className:"px-3 py-2 font-medium",children:"Tiết kiệm"})]})}),(0,n.jsxs)("tbody",{className:"divide-y divide-border",children:[(0,n.jsxs)("tr",{children:[(0,n.jsx)("td",{className:"px-3 py-2 font-mono",children:"git diff"}),(0,n.jsx)("td",{className:"px-3 py-2",children:"7384B"}),(0,n.jsx)("td",{className:"px-3 py-2",children:"3894B"}),(0,n.jsx)("td",{className:"px-3 py-2 text-green-600 dark:text-green-400",children:"47.3%"})]}),(0,n.jsxs)("tr",{children:[(0,n.jsx)("td",{className:"px-3 py-2 font-mono",children:"grep -n"}),(0,n.jsx)("td",{className:"px-3 py-2",children:"3723B"}),(0,n.jsx)("td",{className:"px-3 py-2",children:"1447B"}),(0,n.jsx)("td",{className:"px-3 py-2 text-green-600 dark:text-green-400",children:"61.1%"})]}),(0,n.jsxs)("tr",{children:[(0,n.jsx)("td",{className:"px-3 py-2 font-mono",children:"find"}),(0,n.jsx)("td",{className:"px-3 py-2",children:"729B"}),(0,n.jsx)("td",{className:"px-3 py-2",children:"264B"}),(0,n.jsx)("td",{className:"px-3 py-2 text-green-600 dark:text-green-400",children:"63.8%"})]})]})]})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"mb-2 font-semibold text-text-main",children:"Khi n\xe0o KH\xd4NG bị n\xe9n"}),(0,n.jsxs)("ul",{className:"list-disc space-y-1 pl-5 text-text-muted",children:[(0,n.jsx)("li",{children:"Chat thường kh\xf4ng gọi tool — kh\xf4ng c\xf3 g\xec để n\xe9n"}),(0,n.jsx)("li",{children:"Output nhỏ hơn 500B — kh\xf4ng đ\xe1ng n\xe9n"}),(0,n.jsxs)("li",{children:["Output b\xe1o lỗi (",(0,n.jsx)("span",{className:"font-mono text-text-main",children:"is_error"}),") — lu\xf4n giữ nguy\xean để debug"]}),(0,n.jsx)("li",{children:"Output lớn hơn 10MB — bỏ qua để tr\xe1nh tốn CPU xử l\xfd"})]})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"mb-2 font-semibold text-text-main",children:"Global vs từng account"}),(0,n.jsxs)("p",{className:"text-text-muted",children:["Dropdown RTK ở bảng tr\xean cho ph\xe9p override ri\xeang từng account:",(0,n.jsx)("span",{className:"font-semibold text-text-main",children:" Theo global"})," (mặc định, d\xf9ng đ\xfang setting global),",(0,n.jsx)("span",{className:"font-semibold text-text-main",children:" Lu\xf4n ON"})," hoặc",(0,n.jsx)("span",{className:"font-semibold text-text-main",children:" Lu\xf4n OFF"})," — override lu\xf4n thắng global theo cả 2 chiều, n\xean c\xf3 thể để global OFF v\xe0 chỉ bật cho account d\xf9ng CLI tool, hoặc ngược lại."]})]})]})}):null,eE?(0,n.jsx)(a.LF,{isOpen:!!k,provider:k.id,providerInfo:eE,connectionScope:"personal",onSuccess:ef,onClose:()=>w(null)}):null,C?(0,n.jsx)(a.uo,{isOpen:!!C,onClose:()=>A(null),onConfirm:eC,title:"Delete personal account",message:`X\xf3a connection ${C.name||C.id}?`,confirmText:"Delete",cancelText:"Cancel",variant:"danger"}):null]})}},47584:(e,t,s)=>{Promise.resolve().then(s.bind(s,43503))}},e=>{e.O(0,[2574,3862,246,5792,5564,5263,5497,8441,3794,7358],()=>e(e.s=47584)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3538],{43503:(e,t,s)=>{"use strict";s.d(t,{default:()=>c});var n=s(95155),r=s(12115),a=s(35497),l=s(57250);function i(e,t){return t.find(t=>t.id===e)?.name||e}function d(e){return String(e||"").trim().toLowerCase()}function o(e){return Array.isArray(e?.importedModels)?e.importedModels:[]}function c(){let[e,t]=(0,r.useState)(!0),[s,c]=(0,r.useState)(!1),[x,m]=(0,r.useState)(""),[h,u]=(0,r.useState)(""),[p,b]=(0,r.useState)(""),[g,j]=(0,r.useState)(!1),[f,y]=(0,r.useState)([]),[v,N]=(0,r.useState)([]),[k,w]=(0,r.useState)(null),[C,A]=(0,r.useState)(null),[I,M]=(0,r.useState)(""),[S,O]=(0,r.useState)(null),[$,T]=(0,r.useState)([]),[E,R]=(0,r.useState)(!1),[K,q]=(0,r.useState)(""),[z,U]=(0,r.useState)([]),[P,F]=(0,r.useState)(!1),[B,L]=(0,r.useState)(!1),[D,_]=(0,r.useState)({}),[G,H]=(0,r.useState)({}),[J,X]=(0,r.useState)(""),[Z,V]=(0,r.useState)({}),[W,Q]=(0,r.useState)(null),[Y,ee]=(0,r.useState)({}),[et,es]=(0,r.useState)(""),[en,er]=(0,r.useState)(""),[ea,el]=(0,r.useState)({}),[ei,ed]=(0,r.useState)({}),[eo,ec]=(0,r.useState)(""),[ex,em]=(0,r.useState)(!1),[eh,eu]=(0,r.useState)(!0),ep=(0,r.useCallback)(async()=>{t(!0),m("");try{let e=await fetch("/api/personal-cloud-providers",{cache:"no-store"}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||"Kh\xf4ng tải được personal cloud providers");b(t.userId||""),j(!0===t.isAdmin),y(t.providers||[]),N(t.connections||[]),eu(!1!==t.globalRtkEnabled),el(t.routing||{}),ed(e=>{let s={...e};for(let[e,n]of Object.entries(t.routing||{}))s[e]={...n};return s}),X(e=>e||t.userId||"")}catch(e){m(e.message||"Kh\xf4ng tải được personal cloud providers")}finally{t(!1)}},[]),eb=(0,r.useCallback)(async()=>{if(g){L(!0);try{let e=await fetch("/api/personal-cloud-providers/permissions",{cache:"no-store"}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||"Kh\xf4ng tải được quyền OAuth");_(t.permissions||{}),H(t.connectionsByUser||{})}catch(e){m(e.message||"Kh\xf4ng tải được quyền OAuth")}finally{L(!1)}}},[g]);(0,r.useEffect)(()=>{ep()},[ep]),(0,r.useEffect)(()=>{g&&eb()},[g,eb]),(0,r.useEffect)(()=>{let e=D[d(J)]||{},t={};for(let s of f)t[s.id]=!0===e[s.id];V(t)},[J,D,f]);let eg=(0,r.useMemo)(()=>{let e=d(S?.ownerUser||p);return e?$.filter(t=>d(t.ownerUser||t.createdByUser||p)===e):[]},[$,S,p]),ej=(0,r.useMemo)(()=>Array.from(new Set([...Object.keys(D||{}),...Object.keys(G||{})])).map(e=>{let t=D[e]||{},s=G[e]||{},n=f.filter(e=>t?.[e.id]===!0),r=f.some(e=>(s[e.id]||0)>0);return{userId:e,providerState:t,connectionsByProvider:s,enabledProviders:n,hasAnyConnection:r}}).filter(e=>e.enabledProviders.length>0||e.hasAnyConnection).sort((e,t)=>e.userId.localeCompare(t.userId)),[D,G,f]),ef=async()=>{w(null),u("OAuth account đ\xe3 được th\xeam. Model sẽ được import tự động nếu provider hỗ trợ."),await ep()},ey=async(e,t)=>{m(""),u("");try{let s=await fetch(`/api/personal-cloud-providers/${encodeURIComponent(e)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),n=await s.json().catch(()=>({}));if(!s.ok)throw Error(n.error||"Kh\xf4ng cập nhật được connection");await ep()}catch(e){m(e.message||"Kh\xf4ng cập nhật được connection")}},ev=async e=>{m(""),u(""),M(e.id);try{let t=await fetch(`/api/personal-cloud-providers/${encodeURIComponent(e.id)}/import-models`,{method:"POST"}),s=await t.json().catch(()=>({}));if(!t.ok)throw Error(s.error||"Kh\xf4ng import được model");N(t=>t.map(t=>t.id===e.id?{...t,availableModels:s.models||[],importedModels:s.importedModels||[],modelImport:s.modelImport||t.modelImport}:t)),Q(t=>t?.id===e.id?{...t,availableModels:s.models||[],importedModels:s.importedModels||[],modelImport:s.modelImport||t.modelImport}:t);let n=s.modelImport?.source==="provider"?"provider":"catalog fallback";u(`Đ\xe3 cập nhật ${s.models?.length||0} model từ ${n}.`)}catch(e){m(e.message||"Kh\xf4ng import được model")}finally{M("")}},eN=async e=>{R(!0);try{let t=d(e?.ownerUser||p),s=t?`&ownerUser=${encodeURIComponent(t)}`:"",n=await fetch(`/api/keys?pageSize=100&status=active${s}`,{cache:"no-store"}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r.error||"Kh\xf4ng tải được API keys");let a=Array.isArray(r.keys)?r.keys:[];T(a);let l=d(r.userId),i=a.find(e=>d(e.ownerUser||e.createdByUser||l)===t);q(e=>e||i?.id||"")}catch(e){m(e.message||"Kh\xf4ng tải được API keys")}finally{R(!1)}},ek=async e=>{let t,s;m(""),u(""),O(e),U((s=(t=o(e)).filter(e=>"llm"===(e.type||"llm")).slice(0,3).map(e=>e.routeModel).filter(Boolean)).length>0?s:t.slice(0,3).map(e=>e.routeModel).filter(Boolean)),q(""),await eN(e)},ew=async()=>{if(!S)return;if(!K)return void m("Chọn API key cần th\xeam model.");let e=Array.from(new Set((Array.isArray(z)?z:[]).map(e=>String(e||"").trim()).filter(Boolean)));if(0===e.length)return void m("Chọn \xedt nhất một model.");F(!0),m(""),u("");try{let t=await fetch(`/api/personal-cloud-providers/${encodeURIComponent(S.id)}/api-key-models`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKeyId:K,models:e})}),s=await t.json().catch(()=>({}));if(!t.ok)throw Error(s.error||"Kh\xf4ng th\xeam được model v\xe0o API key");O(null),u(`Đ\xe3 th\xeam ${s.addedModels?.length||e.length} model v\xe0o API key ${s.key?.name||""}.`)}catch(e){m(e.message||"Kh\xf4ng th\xeam được model v\xe0o API key")}finally{F(!1)}},eC=async()=>{if(C){m(""),u("");try{let e=await fetch(`/api/personal-cloud-providers/${encodeURIComponent(C.id)}`,{method:"DELETE"}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.error||"Kh\xf4ng x\xf3a được connection");A(null),await ep()}catch(e){m(e.message||"Kh\xf4ng x\xf3a được connection")}}},eA=async(e,t)=>{if(e?.id&&t?.routeModel){m(""),es(t.routeModel),ee(e=>({...e,[t.routeModel]:{...e[t.routeModel]||{},loading:!0}}));try{let s=`/api/personal-cloud-providers/${encodeURIComponent(e.id)}/models/${t.routeModel.split("/").map(encodeURIComponent).join("/")}`,n=await fetch(s,{method:"POST"}),r=await n.json().catch(()=>({})),a={ok:r?.ok===!0,status:r?.status||n.status,text:r?.text||"",error:r?.error||(n.ok?"":"Test failed"),latencyMs:r?.latencyMs||0};ee(e=>({...e,[t.routeModel]:a}))}catch(e){ee(s=>({...s,[t.routeModel]:{ok:!1,error:e.message||"Test failed"}}))}finally{es("")}}},eI=async(e,t)=>{if(e?.id&&t?.routeModel&&window.confirm(`X\xf3a model ${t.routeModel} khỏi connection ${e.name||e.id}?`)){m(""),u(""),er(t.routeModel);try{let s=`/api/personal-cloud-providers/${encodeURIComponent(e.id)}/models/${t.routeModel.split("/").map(encodeURIComponent).join("/")}`,n=await fetch(s,{method:"DELETE"}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r?.error||"Kh\xf4ng x\xf3a được model");(e=>{if(!e?.connectionId&&!e?.id)return;let t=e.connectionId||e.id;N(s=>s.map(s=>s.id===t?{...s,importedModels:Array.isArray(e.importedModels)?e.importedModels:s.importedModels,availableModels:Array.isArray(e.models)?e.models:Array.isArray(e.availableModels)?e.availableModels:s.availableModels,modelImport:e.modelImport||s.modelImport}:s)),Q(s=>s?.id===t?{...s,importedModels:Array.isArray(e.importedModels)?e.importedModels:s.importedModels,availableModels:Array.isArray(e.models)?e.models:Array.isArray(e.availableModels)?e.availableModels:s.availableModels,modelImport:e.modelImport||s.modelImport}:s)})(r),ee(e=>{let s={...e};return delete s[t.routeModel],s}),u(`Đ\xe3 x\xf3a model ${t.routeModel}.`)}catch(e){m(e.message||"Kh\xf4ng x\xf3a được model")}finally{er("")}}},eM=(e,t)=>{ed(s=>{let n={...s[e]||{},...t};for(let e of Object.keys(n))(""===n[e]||void 0===n[e])&&delete n[e];return{...s,[e]:n}})},eS=async e=>{m(""),u(""),ec(e);try{let t=ei[e]||{},s={providerId:e,override:{fallbackStrategy:t.fallbackStrategy||"",stickyRoundRobinLimit:t.stickyRoundRobinLimit,stickyScope:t.stickyScope||"",stickyTtlMinutes:t.stickyTtlMinutes,stickyFallbackToClientIp:t.stickyFallbackToClientIp,stickyRebindOnFailure:t.stickyRebindOnFailure,stickyRebindFailureThreshold:t.stickyRebindFailureThreshold}},n=await fetch("/api/personal-cloud-providers/routing",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)}),r=await n.json().catch(()=>({}));if(!n.ok)throw Error(r?.error||"Kh\xf4ng lưu được routing");el(r.routing||{}),u(`Đ\xe3 cập nhật routing cho ${e}.`)}catch(e){m(e.message||"Kh\xf4ng lưu được routing")}finally{ec("")}},eO=async e=>{m(""),u(""),ec(e);try{let t=await fetch(`/api/personal-cloud-providers/routing?providerId=${encodeURIComponent(e)}`,{method:"DELETE"}),s=await t.json().catch(()=>({}));if(!t.ok)throw Error(s?.error||"Kh\xf4ng reset được routing");el(s.routing||{}),ed(t=>{let s={...t};return delete s[e],s}),u(`Đ\xe3 reset ${e} về ch\xednh s\xe1ch mặc định.`)}catch(e){m(e.message||"Kh\xf4ng reset được routing")}finally{ec("")}},e$=async()=>{let e=d(J);if(!e)return void m("Nhập username/email cần cấp quyền.");c(!0),m(""),u("");try{let t=await fetch("/api/personal-cloud-providers/permissions",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({userId:e,providers:Z})}),s=await t.json().catch(()=>({}));if(!t.ok)throw Error(s.error||"Kh\xf4ng lưu được quyền OAuth");_(s.permissions||{}),H(s.connectionsByUser||{});let n=s.user?.id||e;n!==e&&X(n),u(`Đ\xe3 lưu quyền OAuth cho ${n}.`),await ep()}catch(e){m(e.message||"Kh\xf4ng lưu được quyền OAuth")}finally{c(!1)}},eT=async e=>{let t=d(e);if(t&&window.confirm(`Thu hồi to\xe0n bộ quyền OAuth provider của ${t}? OAuth account của user n\xe0y sẽ bị X\xd3A hẳn (token, model đ\xe3 import) v\xe0 model tương ứng sẽ bị gỡ khỏi mọi API key đ\xe3 g\xe1n. H\xe0nh động n\xe0y kh\xf4ng thể ho\xe0n t\xe1c.`)){c(!0),m(""),u("");try{let e=await fetch(`/api/personal-cloud-providers/permissions?userId=${encodeURIComponent(t)}`,{method:"DELETE"}),s=await e.json().catch(()=>({}));if(!e.ok)throw Error(s.error||"Kh\xf4ng thu hồi được quyền OAuth");_(s.permissions||{}),H(s.connectionsByUser||{}),d(J)===t&&X(""),u(`Đ\xe3 thu hồi quyền v\xe0 x\xf3a OAuth account của ${t}.`),await ep()}catch(e){m(e.message||"Kh\xf4ng thu hồi được quyền OAuth")}finally{c(!1)}}},eE=k?function(e={}){return{id:e.id,name:e.name||e.id,icon:e.icon||"cloud",color:e.color||"#64748b",website:e.website||"",notice:e.notice||null,deprecationNotice:e.deprecationNotice||"",serviceKinds:e.serviceKinds||["llm"]}}(k):null,eR=g?f:f.filter(e=>e.enabled),eK=o(S),eq=S?.modelImport||{},ez=o(W);return(0,n.jsxs)("div",{className:"space-y-6",children:[(0,n.jsx)("div",{children:(0,n.jsxs)("div",{className:"flex flex-col gap-3 md:flex-row md:items-start md:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h1",{className:"text-2xl font-semibold text-text-main",children:"Personal Cloud Providers"}),(0,n.jsx)("p",{className:"mt-1 text-sm text-text-muted",children:"Kết nối OAuth c\xe1 nh\xe2n cho Claude Code, OpenAI Codex v\xe0 Antigravity. Account c\xe1 nh\xe2n chỉ owner nh\xecn thấy, chỉ API key của owner được d\xf9ng. Cột RTK cho ph\xe9p override ri\xeang từng account (Lu\xf4n ON / Lu\xf4n OFF) bất kể cấu h\xecnh RTK global ở /dashboard/endpoint đang on hay off — để trống th\xec theo global."})]}),(0,n.jsxs)("div",{className:"rounded-2xl border border-border bg-surface px-4 py-3 text-sm",children:[(0,n.jsx)("div",{className:"text-xs uppercase tracking-wide text-text-muted",children:"Current user"}),(0,n.jsx)("div",{className:"mt-1 break-all font-mono text-text-main",children:p||"—"})]})]})}),x?(0,n.jsx)("div",{className:"rounded-2xl border border-red-500/30 bg-red-500/10 px-4 py-3 text-sm text-red-700 dark:text-red-300",children:x}):null,h?(0,n.jsx)("div",{className:"rounded-2xl border border-green-500/30 bg-green-500/10 px-4 py-3 text-sm text-green-700 dark:text-green-300",children:h}):null,(0,n.jsx)("div",{className:"grid gap-4 lg:grid-cols-3",children:0===f.length?(0,n.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-8 text-center text-sm text-text-muted lg:col-span-3",children:"Admin chưa cấp quyền personal OAuth provider n\xe0o cho user n\xe0y."}):f.map(e=>(0,n.jsxs)(a.Zp,{className:"space-y-4",children:[(0,n.jsxs)("div",{className:"flex items-start gap-3",children:[(0,n.jsx)("span",{className:"inline-flex size-10 shrink-0 items-center justify-center rounded-xl",style:{backgroundColor:`${e.color||"#64748b"}22`},children:(0,n.jsx)(l.A,{src:`/providers/${e.id}.png`,alt:e.name,size:34,className:"max-h-[34px] max-w-[34px] rounded-lg object-contain",fallbackText:e.id.slice(0,2).toUpperCase(),fallbackColor:e.color||"#64748b"})}),(0,n.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("h2",{className:"font-semibold text-text-main",children:e.name}),e.enabled?(0,n.jsx)(a.Ex,{variant:"success",size:"sm",children:"Enabled"}):(0,n.jsx)(a.Ex,{variant:"warning",size:"sm",children:"Locked"})]}),(0,n.jsx)("p",{className:"mt-1 text-xs text-text-muted",children:e.enabled?"Được admin cấp quyền, c\xf3 thể add OAuth account c\xe1 nh\xe2n.":"Admin chưa cấp quyền cho user n\xe0y."})]})]}),e.deprecationNotice?(0,n.jsx)("p",{className:"rounded-xl border border-amber-500/30 bg-amber-500/10 p-3 text-xs text-amber-700 dark:text-amber-300",children:e.deprecationNotice}):null,(0,n.jsxs)(a.$n,{fullWidth:!0,disabled:!e.enabled,onClick:()=>{e.enabled&&w(e)},icon:"add_link",children:["Add ",e.name," account"]})]},e.id))}),(0,n.jsxs)(a.Zp,{className:"space-y-4",children:[(0,n.jsxs)("div",{className:"flex flex-col gap-2 md:flex-row md:items-center md:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"My personal accounts"}),(0,n.jsx)("p",{className:"text-sm text-text-muted",children:"OAuth xong sẽ tự import model nếu provider hỗ trợ. Nếu kh\xf4ng gọi được endpoint model, hệ thống d\xf9ng catalog fallback để user vẫn chọn được model."})]}),(0,n.jsx)(a.$n,{variant:"outline",size:"sm",onClick:ep,loading:e,icon:"refresh",children:"Refresh"})]}),e?(0,n.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-8 text-center text-sm text-text-muted",children:"Đang tải..."}):0===v.length?(0,n.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-8 text-center text-sm text-text-muted",children:"Chưa c\xf3 personal OAuth account n\xe0o."}):(0,n.jsx)("div",{className:"overflow-x-auto rounded-2xl border border-border",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:"px-4 py-3 font-medium",children:"Connection"}),(0,n.jsx)("th",{className:"px-4 py-3 font-medium",children:"Provider"}),(0,n.jsx)("th",{className:"px-4 py-3 font-medium",children:"Account"}),(0,n.jsx)("th",{className:"px-4 py-3 font-medium",children:"Models"}),(0,n.jsx)("th",{className:"px-4 py-3 font-medium",children:"Created"}),(0,n.jsx)("th",{className:"px-4 py-3 font-medium",children:"Active"}),(0,n.jsx)("th",{className:"px-4 py-3 font-medium",children:(0,n.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:["RTK (Token Savings)",(0,n.jsxs)(a.Ex,{variant:eh?"success":"default",size:"sm",className:"normal-case",children:["Global: ",eh?"ON":"OFF"]}),(0,n.jsx)("button",{type:"button",onClick:()=>em(!0),title:"RTK l\xe0 g\xec? Bấm để xem giải th\xedch",className:"inline-flex size-4 shrink-0 items-center justify-center rounded-full border border-border text-[10px] font-bold normal-case text-text-muted transition-colors hover:border-brand-500 hover:text-brand-600",children:"?"})]})}),(0,n.jsx)("th",{className:"px-4 py-3 text-right font-medium",children:"Actions"})]})}),(0,n.jsx)("tbody",{className:"divide-y divide-border bg-background",children:v.map(e=>{let t=Array.isArray(e?.availableModels)?e.availableModels:[],s=e.modelImport||{};return(0,n.jsxs)("tr",{className:"align-top hover:bg-surface/50",children:[(0,n.jsxs)("td",{className:"px-4 py-4",children:[(0,n.jsx)("div",{className:"font-medium text-text-main",children:e.name||e.id}),(0,n.jsx)("div",{className:"mt-1 font-mono text-xs text-text-muted",children:e.id})]}),(0,n.jsx)("td",{className:"px-4 py-4",children:(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(l.A,{src:`/providers/${e.provider}.png`,alt:e.provider,size:24,className:"max-h-[24px] max-w-[24px] rounded object-contain",fallbackText:e.provider.slice(0,2).toUpperCase()}),(0,n.jsx)("span",{children:i(e.provider,f)})]})}),(0,n.jsxs)("td",{className:"px-4 py-4",children:[(0,n.jsx)("div",{className:"break-all text-text-main",children:function(e={}){let t=e.providerSpecificData&&"object"==typeof e.providerSpecificData?e.providerSpecificData:{};return e.email||t.email||t.preferredUsername||e.displayName||t.sub||t.accountId||t.claudeAccountId||t.chatgptAccountId||"—"}(e)}),(0,n.jsxs)("div",{className:"mt-1 break-all text-xs text-text-muted",children:["Owner: ",e.ownerUser||p||"—"]})]}),(0,n.jsxs)("td",{className:"px-4 py-4",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[function(e={}){return"provider"===(e.source||"catalog")?(0,n.jsx)(a.Ex,{variant:"success",size:"sm",children:"Imported"}):(0,n.jsx)(a.Ex,{variant:"warning",size:"sm",children:"Catalog"})}(s),(0,n.jsxs)("span",{className:"text-xs text-text-muted",children:[t.length," model(s)"]})]}),s.warning?(0,n.jsx)("div",{className:"mt-1 max-w-[320px] truncate text-xs text-amber-600 dark:text-amber-300",title:s.warning,children:s.warning}):null,t.length>0?(0,n.jsxs)("div",{className:"mt-2 flex max-w-[360px] flex-wrap gap-1",children:[t.slice(0,4).map(e=>(0,n.jsx)("span",{className:"rounded-full border border-border bg-surface px-2 py-0.5 font-mono text-[11px] text-text-muted",children:e.routeModel},e.routeModel)),t.length>4?(0,n.jsxs)("span",{className:"rounded-full border border-border bg-surface px-2 py-0.5 text-[11px] text-text-muted",children:["+",t.length-4]}):null]}):null]}),(0,n.jsx)("td",{className:"px-4 py-4 text-xs text-text-muted",children:function(e){if(!e)return"—";try{return new Intl.DateTimeFormat("vi-VN",{dateStyle:"short",timeStyle:"short"}).format(new Date(e))}catch{return e}}(e.createdAt)}),(0,n.jsx)("td",{className:"px-4 py-4",children:(0,n.jsx)(a.lM,{checked:!1!==e.isActive,onChange:t=>ey(e.id,{isActive:t})})}),(0,n.jsx)("td",{className:"px-4 py-4",children:(0,n.jsxs)("select",{value:!0===e.rtkEnabled?"on":!1===e.rtkEnabled?"off":"inherit",onChange:t=>{let s=t.target.value;ey(e.id,{rtkEnabled:"inherit"===s?null:"on"===s})},className:"h-9 w-full min-w-[140px] rounded-xl border border-border bg-background px-2 text-xs text-text-main outline-none focus:border-brand-500",children:[(0,n.jsx)("option",{value:"inherit",children:"Theo global"}),(0,n.jsx)("option",{value:"on",children:"Lu\xf4n ON"}),(0,n.jsx)("option",{value:"off",children:"Lu\xf4n OFF"})]})}),(0,n.jsx)("td",{className:"px-4 py-4",children:(0,n.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,n.jsx)(a.$n,{variant:"outline",size:"sm",loading:I===e.id,onClick:()=>ev(e),children:"Import models"}),(0,n.jsx)(a.$n,{variant:"outline",size:"sm",disabled:0===o(e).length,onClick:()=>{m(""),u(""),Q(e),ee({}),es(""),er("")},children:"Manage models"}),(0,n.jsx)(a.$n,{variant:"secondary",size:"sm",disabled:0===o(e).length,onClick:()=>ek(e),children:"Add to API key"}),(0,n.jsx)(a.$n,{variant:"outline",size:"sm",onClick:()=>{let t;return t=window.prompt("T\xean connection mới",e.name||""),void(t?.trim()&&ey(e.id,{name:t.trim()}))},children:"Rename"}),(0,n.jsx)(a.$n,{variant:"danger",size:"sm",onClick:()=>A(e),children:"Delete"})]})})]},e.id)})})]})})]}),(0,n.jsxs)(a.Zp,{className:"space-y-4",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Routing strategy"}),(0,n.jsxs)("p",{className:"text-sm text-text-muted",children:["Khi bạn c\xf3 nhiều personal account cho c\xf9ng provider, đ\xe2y l\xe0 ch\xednh s\xe1ch chọn account cho từng request. Để trống = kế thừa ch\xednh s\xe1ch của admin ở ",(0,n.jsx)("span",{className:"font-mono",children:"/dashboard/providers/<provider>"}),"."]})]}),(0,n.jsx)("div",{className:"grid gap-4 lg:grid-cols-3",children:0===eR.length?(0,n.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-6 text-center text-sm text-text-muted lg:col-span-3",children:"Bạn chưa được cấp quyền provider n\xe0o, n\xean chưa cần thiết lập routing."}):eR.map(e=>{let t=ei[e.id]||{},s=ea[e.id]||null,r=!s,l=t.fallbackStrategy||"",i="round-robin"===l,d=eo===e.id;return(0,n.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4 space-y-3",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,n.jsxs)("div",{className:"min-w-0",children:[(0,n.jsx)("div",{className:"font-semibold text-text-main",children:e.name}),(0,n.jsx)("div",{className:"text-xs text-text-muted",children:r?"Đang kế thừa policy global":`Override active: ${s.fallbackStrategy||"inherit"}`})]}),r?(0,n.jsx)(a.Ex,{variant:"default",size:"sm",children:"Inherit"}):(0,n.jsx)(a.Ex,{variant:"success",size:"sm",children:"Override"})]}),(0,n.jsxs)("label",{className:"block text-sm",children:[(0,n.jsx)("span",{className:"mb-1 block font-medium text-text-main",children:"Strategy"}),(0,n.jsxs)("select",{value:l,onChange:t=>eM(e.id,{fallbackStrategy:t.target.value}),className:"h-10 w-full rounded-xl border border-border bg-background px-3 text-sm text-text-main outline-none focus:border-brand-500",disabled:d,children:[(0,n.jsx)("option",{value:"",children:"Inherit (use global)"}),(0,n.jsx)("option",{value:"fill-first",children:"fill-first — chạy hết account 1 mới sang account 2"}),(0,n.jsx)("option",{value:"round-robin",children:"round-robin — lu\xe2n phi\xean theo sticky limit"}),(0,n.jsx)("option",{value:"least-latency",children:"least-latency — chọn account nhanh nhất"}),(0,n.jsx)("option",{value:"p2c",children:"p2c — power-of-two-choices"})]})]}),i?(0,n.jsxs)("div",{className:"space-y-2 rounded-xl border border-border/50 bg-background/50 p-3",children:[(0,n.jsx)("div",{className:"text-xs text-text-muted",children:"Round-robin sticky params (để trống = d\xf9ng gi\xe1 trị global)"}),(0,n.jsxs)("label",{className:"block text-xs",children:[(0,n.jsx)("span",{className:"mb-1 block text-text-muted",children:"Sticky limit (số request li\xean tiếp trước khi rotate)"}),(0,n.jsx)(a.pd,{type:"number",min:1,value:t.stickyRoundRobinLimit??"",onChange:t=>eM(e.id,{stickyRoundRobinLimit:t.target.value?Number(t.target.value):void 0}),placeholder:"v\xed dụ 3",disabled:d})]}),(0,n.jsxs)("label",{className:"block text-xs",children:[(0,n.jsx)("span",{className:"mb-1 block text-text-muted",children:"Sticky scope"}),(0,n.jsxs)("select",{value:t.stickyScope||"",onChange:t=>eM(e.id,{stickyScope:t.target.value}),className:"h-9 w-full rounded-xl border border-border bg-background px-3 text-xs text-text-main outline-none focus:border-brand-500",disabled:d,children:[(0,n.jsx)("option",{value:"",children:"(inherit)"}),(0,n.jsx)("option",{value:"global",children:"global — rotate cho mọi request"}),(0,n.jsx)("option",{value:"client_ip",children:"client_ip — sticky theo IP"}),(0,n.jsx)("option",{value:"client_session",children:"client_session — sticky theo CLI session"})]})]}),(0,n.jsxs)("label",{className:"block text-xs",children:[(0,n.jsx)("span",{className:"mb-1 block text-text-muted",children:"Sticky TTL (ph\xfat)"}),(0,n.jsx)(a.pd,{type:"number",min:1,value:t.stickyTtlMinutes??"",onChange:t=>eM(e.id,{stickyTtlMinutes:t.target.value?Number(t.target.value):void 0}),placeholder:"v\xed dụ 120",disabled:d})]})]}):null,(0,n.jsxs)("div",{className:"flex flex-wrap gap-2 pt-1",children:[(0,n.jsx)(a.$n,{size:"sm",loading:d,onClick:()=>eS(e.id),children:"Save"}),(0,n.jsx)(a.$n,{size:"sm",variant:"ghost",disabled:d||r,onClick:()=>eO(e.id),children:"Reset to inherit"})]})]},e.id)})})]}),g?(0,n.jsxs)(a.Zp,{className:"space-y-4",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h2",{className:"text-lg font-semibold text-text-main",children:"Admin: OAuth provider access"}),(0,n.jsx)("p",{className:"text-sm text-text-muted",children:"Default l\xe0 kh\xf4ng c\xf3 quyền. Nhập username/email rồi bật provider được ph\xe9p add personal account."})]}),(0,n.jsxs)("div",{className:"grid gap-3 md:grid-cols-[minmax(0,1fr)_auto] md:items-end",children:[(0,n.jsx)(a.pd,{label:"User ID / Email",value:J,onChange:e=>X(e.target.value),placeholder:"anh-tct hoặc anh-tct@fujinet.net"}),(0,n.jsx)(a.$n,{onClick:e$,loading:s,icon:"save",children:"Save permissions"})]}),(0,n.jsx)("div",{className:"grid gap-3 md:grid-cols-3",children:f.map(e=>(0,n.jsx)("div",{className:"rounded-2xl border border-border bg-surface p-4",children:(0,n.jsx)(a.lM,{checked:!0===Z[e.id],onChange:t=>V(s=>({...s,[e.id]:t})),label:e.name,description:Z[e.id]?"User được ph\xe9p add account":"User chưa được cấp quyền"})},e.id))}),(0,n.jsxs)("div",{className:"border-t border-border pt-4",children:[(0,n.jsxs)("div",{className:"mb-3 flex flex-col gap-2 md:flex-row md:items-center md:justify-between",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"font-semibold text-text-main",children:"Granted OAuth Access"}),(0,n.jsx)("p",{className:"text-xs text-text-muted",children:"Danh s\xe1ch user hiện đang được cấp quyền add personal OAuth account."})]}),(0,n.jsx)(a.$n,{variant:"outline",size:"sm",onClick:eb,loading:B,icon:"refresh",children:"Refresh list"})]}),B?(0,n.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-6 text-center text-sm text-text-muted",children:"Đang tải quyền..."}):0===ej.length?(0,n.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-6 text-center text-sm text-text-muted",children:"Chưa c\xf3 user n\xe0o được cấp quyền OAuth provider."}):(0,n.jsx)("div",{className:"overflow-x-auto rounded-2xl border border-border",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:"px-4 py-3 font-medium",children:"User"}),f.map(e=>(0,n.jsx)("th",{className:"px-4 py-3 font-medium",children:e.name},e.id)),(0,n.jsx)("th",{className:"px-4 py-3 text-right font-medium",children:"Actions"})]})}),(0,n.jsx)("tbody",{className:"divide-y divide-border bg-background",children:ej.map(e=>(0,n.jsxs)("tr",{className:"hover:bg-surface/50",children:[(0,n.jsxs)("td",{className:"px-4 py-4",children:[(0,n.jsx)("div",{className:"break-all font-mono text-text-main",children:e.userId}),d(J)===e.userId?(0,n.jsx)("div",{className:"mt-1 text-xs text-brand-600 dark:text-brand-300",children:"Đang edit ở form ph\xeda tr\xean"}):null]}),f.map(t=>{let s=!0===e.providerState[t.id],r=e.connectionsByProvider?.[t.id]||0,i=r>0;return(0,n.jsx)("td",{className:"px-4 py-4",children:(0,n.jsxs)("div",{className:"flex items-center gap-1.5",children:[s?(0,n.jsx)(a.Ex,{variant:"success",size:"sm",children:"ON"}):(0,n.jsx)(a.Ex,{variant:"default",size:"sm",children:"OFF"}),i?(0,n.jsxs)("span",{className:"inline-flex items-center gap-0.5",title:`User đ\xe3 add ${r} ${t.name} account${r>1?"s":""}`,children:[(0,n.jsx)(l.A,{src:`/providers/${t.id}.png`,alt:t.name,size:16,className:"max-h-[16px] max-w-[16px] rounded object-contain",fallbackText:t.id.slice(0,2).toUpperCase(),fallbackColor:t.color||"#64748b"}),r>1?(0,n.jsxs)("span",{className:"text-[10px] font-semibold text-text-muted",children:["\xd7",r]}):null]}):null]})},t.id)}),(0,n.jsx)("td",{className:"px-4 py-4",children:(0,n.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,n.jsx)(a.$n,{variant:"outline",size:"sm",onClick:()=>(e=>{let t=d(e);X(t);let s=D[t]||{},n={};for(let e of f)n[e.id]=!0===s[e.id];V(n)})(e.userId),children:"Edit"}),(0,n.jsx)(a.$n,{variant:"danger",size:"sm",loading:s,onClick:()=>eT(e.userId),children:"Revoke"})]})})]},e.userId))})]})})]})]}):null,S?(0,n.jsx)(a.aF,{isOpen:!!S,onClose:()=>O(null),title:"Add models to API key",size:"full",footer:(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.$n,{variant:"ghost",onClick:()=>O(null),disabled:P,children:"Cancel"}),(0,n.jsx)(a.$n,{onClick:ew,loading:P,disabled:!K||0===z.length,children:"Add selected models"})]}),children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4 text-sm",children:[(0,n.jsx)("div",{className:"font-semibold text-text-main",children:S.name||S.id}),(0,n.jsxs)("div",{className:"mt-1 text-text-muted",children:[i(S.provider,f)," \xb7 ",eK.length," imported model(s)"]}),eq.warning?(0,n.jsx)("div",{className:"mt-2 text-xs text-amber-600 dark:text-amber-300",children:eq.warning}):null,0===eK.length?(0,n.jsx)("div",{className:"mt-2 rounded-xl border border-amber-500/30 bg-amber-500/10 p-3 text-xs text-amber-700 dark:text-amber-300",children:'Chưa import được model n\xe0o từ provider. Bấm "Import models" tr\xean d\xf2ng connection trước khi g\xe1n v\xe0o API key.'}):null]}),(0,n.jsxs)("label",{className:"block text-sm",children:[(0,n.jsx)("span",{className:"mb-1 block font-medium text-text-main",children:"API key"}),(0,n.jsxs)("select",{value:K,onChange:e=>q(e.target.value),className:"h-10 w-full rounded-xl border border-border bg-background px-3 text-sm text-text-main outline-none focus:border-brand-500",disabled:E,children:[(0,n.jsx)("option",{value:"",children:E?"Đang tải API keys...":"Chọn API key"}),eg.map(e=>(0,n.jsxs)("option",{value:e.id,children:[e.name," \xb7 ",e.ownerUser||p]},e.id))]})]}),0!==eg.length||E?null:(0,n.jsx)("div",{className:"rounded-xl border border-amber-500/30 bg-amber-500/10 p-3 text-sm text-amber-700 dark:text-amber-300",children:"User n\xe0y chưa c\xf3 API key active để th\xeam model."}),(0,n.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"font-semibold text-text-main",children:"Models"}),(0,n.jsx)("p",{className:"text-xs text-text-muted",children:"Model được lưu v\xe0o allowedModels của API key. Request sẽ route qua personal OAuth account của owner."})]}),(0,n.jsxs)("div",{className:"flex gap-2",children:[(0,n.jsx)(a.$n,{variant:"outline",size:"sm",onClick:()=>U(eK.map(e=>e.routeModel).filter(Boolean)),children:"Select all"}),(0,n.jsx)(a.$n,{variant:"ghost",size:"sm",onClick:()=>U([]),children:"Clear"})]})]}),(0,n.jsx)("div",{className:"grid gap-2 md:grid-cols-2",children:eK.map(e=>(0,n.jsxs)("label",{className:"flex cursor-pointer items-start gap-3 rounded-xl border border-border bg-background p-3 hover:bg-surface",children:[(0,n.jsx)("input",{type:"checkbox",className:"mt-1",checked:z.includes(e.routeModel),onChange:()=>{var t;return t=e.routeModel,void U(e=>e.includes(t)?e.filter(e=>e!==t):[...e,t])}}),(0,n.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,n.jsx)("span",{className:"block font-medium text-text-main",children:e.name||e.id}),(0,n.jsx)("span",{className:"mt-1 block break-all font-mono text-xs text-text-muted",children:e.routeModel}),e.type&&"llm"!==e.type?(0,n.jsx)("span",{className:"mt-2 inline-flex rounded-full bg-surface px-2 py-0.5 text-[11px] text-text-muted",children:e.type}):null]})]},e.routeModel))})]})}):null,W?(0,n.jsx)(a.aF,{isOpen:!!W,onClose:()=>Q(null),title:"Manage imported models",size:"full",footer:(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.$n,{variant:"ghost",onClick:()=>Q(null),children:"Close"}),(0,n.jsx)(a.$n,{variant:"outline",loading:I===W.id,onClick:()=>ev(W),icon:"refresh",children:"Re-import from provider"})]}),children:(0,n.jsxs)("div",{className:"space-y-4",children:[(0,n.jsxs)("div",{className:"rounded-2xl border border-border bg-surface p-4 text-sm",children:[(0,n.jsx)("div",{className:"font-semibold text-text-main",children:W.name||W.id}),(0,n.jsxs)("div",{className:"mt-1 text-text-muted",children:[i(W.provider,f)," \xb7 ",ez.length," imported model(s)"]}),(0,n.jsx)("div",{className:"mt-2 text-xs text-text-muted",children:'Test gửi 1 prompt "Say hello in five words" qua ch\xednh OAuth account của bạn, qua đ\xfang proxy của connection. X\xf3a model sẽ bỏ n\xf3 khỏi list importable; c\xe1c API key đ\xe3 gắn model n\xe0y kh\xf4ng bị thay đổi (request đến model đ\xf3 sẽ do provider ph\xeda tr\xean quyết định chấp nhận hay kh\xf4ng).'})]}),0===ez.length?(0,n.jsx)("div",{className:"rounded-2xl border border-dashed border-border p-8 text-center text-sm text-text-muted",children:'Chưa c\xf3 model n\xe0o được import. Bấm "Re-import from provider".'}):(0,n.jsx)("div",{className:"overflow-x-auto rounded-2xl border border-border",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:"px-4 py-3 font-medium",children:"Model"}),(0,n.jsx)("th",{className:"px-4 py-3 font-medium",children:"Route ID"}),(0,n.jsx)("th",{className:"px-4 py-3 font-medium",children:"Test result"}),(0,n.jsx)("th",{className:"px-4 py-3 text-right font-medium",children:"Actions"})]})}),(0,n.jsx)("tbody",{className:"divide-y divide-border bg-background",children:ez.map(e=>{let t=Y[e.routeModel],s=et===e.routeModel,r=en===e.routeModel;return(0,n.jsxs)("tr",{className:"align-top",children:[(0,n.jsxs)("td",{className:"px-4 py-3",children:[(0,n.jsx)("div",{className:"font-medium text-text-main",children:e.name||e.id}),e.type&&"llm"!==e.type?(0,n.jsx)("div",{className:"mt-1 text-xs text-text-muted",children:e.type}):null]}),(0,n.jsx)("td",{className:"px-4 py-3 font-mono text-xs text-text-muted break-all",children:e.routeModel}),(0,n.jsx)("td",{className:"px-4 py-3 text-xs",children:s?(0,n.jsx)("span",{className:"text-text-muted",children:"Đang test..."}):t?t.ok?(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsxs)("div",{className:"text-green-700 dark:text-green-300",children:["OK \xb7 ",t.latencyMs||0,"ms"]}),(0,n.jsx)("div",{className:"break-all text-text-muted",children:(t.text||"").slice(0,200)})]}):(0,n.jsxs)("div",{className:"space-y-1",children:[(0,n.jsxs)("div",{className:"text-red-700 dark:text-red-300",children:["FAIL \xb7 status ",t.status||"?"]}),(0,n.jsx)("div",{className:"break-all text-text-muted",children:(t.error||"").slice(0,200)})]}):(0,n.jsx)("span",{className:"text-text-muted",children:"—"})}),(0,n.jsx)("td",{className:"px-4 py-3",children:(0,n.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,n.jsx)(a.$n,{variant:"outline",size:"sm",loading:s,disabled:r,onClick:()=>eA(W,e),children:"Say hello"}),(0,n.jsx)(a.$n,{variant:"danger",size:"sm",loading:r,disabled:s,onClick:()=>eI(W,e),children:"Delete"})]})})]},e.routeModel)})})]})})]})}):null,ex?(0,n.jsx)(a.aF,{isOpen:ex,onClose:()=>em(!1),title:"RTK (Token Savings) l\xe0 g\xec?",size:"xl",footer:(0,n.jsx)(a.$n,{onClick:()=>em(!1),children:"Đ\xe3 hiểu"}),children:(0,n.jsxs)("div",{className:"space-y-5 text-sm text-text-main",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2 rounded-xl border border-border bg-surface px-3 py-2",children:[(0,n.jsx)("span",{className:"text-xs text-text-muted",children:"Global RTK hiện đang:"}),(0,n.jsx)(a.Ex,{variant:eh?"success":"default",size:"sm",children:eh?"ON":"OFF"}),(0,n.jsx)("span",{className:"text-xs text-text-muted",children:'— \xe1p dụng cho mọi account chọn "Theo global"'})]}),(0,n.jsx)("p",{className:"text-text-muted",children:"RTK l\xe0 bộ lọc n\xe9n output của tool (Bash, Grep, Glob, Read...) ngay trong request trước khi gửi l\xean model, gi\xfap giảm số token phải gửi m\xe0 kh\xf4ng l\xe0m mất th\xf4ng tin quan trọng — chỉ t\xe1c động tới phần tool output, kh\xf4ng đụng v\xe0o nội dung chat."}),(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"mb-2 font-semibold text-text-main",children:"Hoạt động ra sao với CLI tool"}),(0,n.jsx)("p",{className:"text-text-muted",children:"Mỗi khi Claude Code / Codex CLI / OpenCode... gọi tool v\xe0 nhận lại output, RTK tự nhận diện định dạng quen thuộc rồi r\xfat gọn theo đ\xfang cấu tr\xfac của n\xf3:"}),(0,n.jsxs)("ul",{className:"mt-2 list-disc space-y-1 pl-5 text-text-muted",children:[(0,n.jsxs)("li",{children:[(0,n.jsx)("span",{className:"font-mono text-text-main",children:"git diff"})," — giữ v\xe0i d\xf2ng context quanh thay đổi, cắt phần hunk qu\xe1 d\xe0i"]}),(0,n.jsxs)("li",{children:[(0,n.jsx)("span",{className:"font-mono text-text-main",children:"git status"})," / ",(0,n.jsx)("span",{className:"font-mono text-text-main",children:"git log"})," — gom gọn danh s\xe1ch file thay đổi, danh s\xe1ch commit"]}),(0,n.jsxs)("li",{children:[(0,n.jsx)("span",{className:"font-mono text-text-main",children:"grep"})," / ",(0,n.jsx)("span",{className:"font-mono text-text-main",children:"find"})," — giới hạn số match hiển thị mỗi file/thư mục"]}),(0,n.jsxs)("li",{children:[(0,n.jsx)("span",{className:"font-mono text-text-main",children:"ls -la"})," / ",(0,n.jsx)("span",{className:"font-mono text-text-main",children:"tree"})," — t\xf3m tắt theo loại file, cắt c\xe2y thư mục qu\xe1 s\xe2u"]}),(0,n.jsx)("li",{children:"Build log (npm/yarn/cargo...) — chỉ giữ d\xf2ng quan trọng (lỗi, kết quả build)"}),(0,n.jsx)("li",{children:"Output d\xe0i chung kh\xf4ng r\xf5 định dạng — fallback dedup d\xf2ng lặp hoặc smart-truncate (giữ đầu + cuối)"})]})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"mb-2 font-semibold text-text-main",children:"Hiệu quả thực tế"}),(0,n.jsx)("div",{className:"overflow-x-auto rounded-xl border border-border",children:(0,n.jsxs)("table",{className:"min-w-full text-xs",children:[(0,n.jsx)("thead",{className:"bg-surface/80 text-left uppercase tracking-wide text-text-muted",children:(0,n.jsxs)("tr",{children:[(0,n.jsx)("th",{className:"px-3 py-2 font-medium",children:"Loại output"}),(0,n.jsx)("th",{className:"px-3 py-2 font-medium",children:"Trước"}),(0,n.jsx)("th",{className:"px-3 py-2 font-medium",children:"Sau"}),(0,n.jsx)("th",{className:"px-3 py-2 font-medium",children:"Tiết kiệm"})]})}),(0,n.jsxs)("tbody",{className:"divide-y divide-border",children:[(0,n.jsxs)("tr",{children:[(0,n.jsx)("td",{className:"px-3 py-2 font-mono",children:"git diff"}),(0,n.jsx)("td",{className:"px-3 py-2",children:"7384B"}),(0,n.jsx)("td",{className:"px-3 py-2",children:"3894B"}),(0,n.jsx)("td",{className:"px-3 py-2 text-green-600 dark:text-green-400",children:"47.3%"})]}),(0,n.jsxs)("tr",{children:[(0,n.jsx)("td",{className:"px-3 py-2 font-mono",children:"grep -n"}),(0,n.jsx)("td",{className:"px-3 py-2",children:"3723B"}),(0,n.jsx)("td",{className:"px-3 py-2",children:"1447B"}),(0,n.jsx)("td",{className:"px-3 py-2 text-green-600 dark:text-green-400",children:"61.1%"})]}),(0,n.jsxs)("tr",{children:[(0,n.jsx)("td",{className:"px-3 py-2 font-mono",children:"find"}),(0,n.jsx)("td",{className:"px-3 py-2",children:"729B"}),(0,n.jsx)("td",{className:"px-3 py-2",children:"264B"}),(0,n.jsx)("td",{className:"px-3 py-2 text-green-600 dark:text-green-400",children:"63.8%"})]})]})]})})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"mb-2 font-semibold text-text-main",children:"Khi n\xe0o KH\xd4NG bị n\xe9n"}),(0,n.jsxs)("ul",{className:"list-disc space-y-1 pl-5 text-text-muted",children:[(0,n.jsx)("li",{children:"Chat thường kh\xf4ng gọi tool — kh\xf4ng c\xf3 g\xec để n\xe9n"}),(0,n.jsx)("li",{children:"Output nhỏ hơn 500B — kh\xf4ng đ\xe1ng n\xe9n"}),(0,n.jsxs)("li",{children:["Output b\xe1o lỗi (",(0,n.jsx)("span",{className:"font-mono text-text-main",children:"is_error"}),") — lu\xf4n giữ nguy\xean để debug"]}),(0,n.jsx)("li",{children:"Output lớn hơn 10MB — bỏ qua để tr\xe1nh tốn CPU xử l\xfd"})]})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{className:"mb-2 font-semibold text-text-main",children:"Global vs từng account"}),(0,n.jsxs)("p",{className:"text-text-muted",children:["Dropdown RTK ở bảng tr\xean cho ph\xe9p override ri\xeang từng account:",(0,n.jsx)("span",{className:"font-semibold text-text-main",children:" Theo global"})," (mặc định, d\xf9ng đ\xfang setting global),",(0,n.jsx)("span",{className:"font-semibold text-text-main",children:" Lu\xf4n ON"})," hoặc",(0,n.jsx)("span",{className:"font-semibold text-text-main",children:" Lu\xf4n OFF"})," — override lu\xf4n thắng global theo cả 2 chiều, n\xean c\xf3 thể để global OFF v\xe0 chỉ bật cho account d\xf9ng CLI tool, hoặc ngược lại."]})]})]})}):null,eE?(0,n.jsx)(a.LF,{isOpen:!!k,provider:k.id,providerInfo:eE,connectionScope:"personal",onSuccess:ef,onClose:()=>w(null)}):null,C?(0,n.jsx)(a.uo,{isOpen:!!C,onClose:()=>A(null),onConfirm:eC,title:"Delete personal account",message:`X\xf3a connection ${C.name||C.id}?`,confirmText:"Delete",cancelText:"Cancel",variant:"danger"}):null]})}},47584:(e,t,s)=>{Promise.resolve().then(s.bind(s,43503))}},e=>{e.O(0,[2574,3862,246,4546,5564,5263,5497,8441,3794,7358],()=>e(e.s=47584)),_N_E=e.O()}]);