@kaitranntt/ccs 7.78.1 → 7.79.0

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 (169) hide show
  1. package/dist/bin/ccsxp-runtime.d.ts +1 -0
  2. package/dist/bin/ccsxp-runtime.d.ts.map +1 -1
  3. package/dist/bin/ccsxp-runtime.js +2 -0
  4. package/dist/bin/ccsxp-runtime.js.map +1 -1
  5. package/dist/channels/official-channels-runtime.d.ts.map +1 -1
  6. package/dist/channels/official-channels-runtime.js +11 -0
  7. package/dist/channels/official-channels-runtime.js.map +1 -1
  8. package/dist/channels/official-channels-store.d.ts.map +1 -1
  9. package/dist/channels/official-channels-store.js +3 -4
  10. package/dist/channels/official-channels-store.js.map +1 -1
  11. package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -1
  12. package/dist/cliproxy/auth/oauth-handler.js +21 -0
  13. package/dist/cliproxy/auth/oauth-handler.js.map +1 -1
  14. package/dist/cliproxy/auth/oauth-start-failure-guidance.d.ts +22 -0
  15. package/dist/cliproxy/auth/oauth-start-failure-guidance.d.ts.map +1 -0
  16. package/dist/cliproxy/auth/oauth-start-failure-guidance.js +82 -0
  17. package/dist/cliproxy/auth/oauth-start-failure-guidance.js.map +1 -0
  18. package/dist/cliproxy/executor/claude-launcher.d.ts.map +1 -1
  19. package/dist/cliproxy/executor/claude-launcher.js +22 -9
  20. package/dist/cliproxy/executor/claude-launcher.js.map +1 -1
  21. package/dist/cliproxy/executor/session-bridge.d.ts +16 -1
  22. package/dist/cliproxy/executor/session-bridge.d.ts.map +1 -1
  23. package/dist/cliproxy/executor/session-bridge.js +86 -54
  24. package/dist/cliproxy/executor/session-bridge.js.map +1 -1
  25. package/dist/commands/config-command-options.d.ts.map +1 -1
  26. package/dist/commands/config-command-options.js +4 -2
  27. package/dist/commands/config-command-options.js.map +1 -1
  28. package/dist/commands/config-command.js +1 -1
  29. package/dist/commands/config-command.js.map +1 -1
  30. package/dist/commands/config-dashboard-host.d.ts +1 -0
  31. package/dist/commands/config-dashboard-host.d.ts.map +1 -1
  32. package/dist/commands/config-dashboard-host.js +2 -1
  33. package/dist/commands/config-dashboard-host.js.map +1 -1
  34. package/dist/dispatcher/flows/settings-flow.d.ts.map +1 -1
  35. package/dist/dispatcher/flows/settings-flow.js +21 -10
  36. package/dist/dispatcher/flows/settings-flow.js.map +1 -1
  37. package/dist/dispatcher/profile-resolver.d.ts.map +1 -1
  38. package/dist/dispatcher/profile-resolver.js +14 -1
  39. package/dist/dispatcher/profile-resolver.js.map +1 -1
  40. package/dist/management/checks/profile-check.d.ts.map +1 -1
  41. package/dist/management/checks/profile-check.js +2 -3
  42. package/dist/management/checks/profile-check.js.map +1 -1
  43. package/dist/management/checks/symlink-check.d.ts.map +1 -1
  44. package/dist/management/checks/symlink-check.js +2 -3
  45. package/dist/management/checks/symlink-check.js.map +1 -1
  46. package/dist/management/checks/system-check.d.ts.map +1 -1
  47. package/dist/management/checks/system-check.js +1 -1
  48. package/dist/management/checks/system-check.js.map +1 -1
  49. package/dist/management/instance-directory.d.ts +4 -0
  50. package/dist/management/instance-directory.d.ts.map +1 -0
  51. package/dist/management/instance-directory.js +54 -0
  52. package/dist/management/instance-directory.js.map +1 -0
  53. package/dist/management/instance-manager.d.ts.map +1 -1
  54. package/dist/management/instance-manager.js +2 -10
  55. package/dist/management/instance-manager.js.map +1 -1
  56. package/dist/management/shared-manager.d.ts.map +1 -1
  57. package/dist/management/shared-manager.js +6 -16
  58. package/dist/management/shared-manager.js.map +1 -1
  59. package/dist/proxy/proxy-daemon-entry.js +46 -3
  60. package/dist/proxy/proxy-daemon-entry.js.map +1 -1
  61. package/dist/proxy/proxy-daemon-state.d.ts +2 -0
  62. package/dist/proxy/proxy-daemon-state.d.ts.map +1 -1
  63. package/dist/proxy/proxy-daemon-state.js +42 -4
  64. package/dist/proxy/proxy-daemon-state.js.map +1 -1
  65. package/dist/proxy/proxy-daemon.d.ts.map +1 -1
  66. package/dist/proxy/proxy-daemon.js +11 -6
  67. package/dist/proxy/proxy-daemon.js.map +1 -1
  68. package/dist/proxy/transformers/sse-stream-transformer.d.ts.map +1 -1
  69. package/dist/proxy/transformers/sse-stream-transformer.js +1 -0
  70. package/dist/proxy/transformers/sse-stream-transformer.js.map +1 -1
  71. package/dist/targets/codex-adapter.d.ts +1 -0
  72. package/dist/targets/codex-adapter.d.ts.map +1 -1
  73. package/dist/targets/codex-adapter.js +18 -1
  74. package/dist/targets/codex-adapter.js.map +1 -1
  75. package/dist/targets/codex-cliproxy-provider-config.d.ts +16 -0
  76. package/dist/targets/codex-cliproxy-provider-config.d.ts.map +1 -0
  77. package/dist/targets/codex-cliproxy-provider-config.js +156 -0
  78. package/dist/targets/codex-cliproxy-provider-config.js.map +1 -0
  79. package/dist/targets/target-runtime-compatibility.js +1 -1
  80. package/dist/targets/target-runtime-compatibility.js.map +1 -1
  81. package/dist/ui/assets/{accounts-CW9bbE4S.js → accounts-ODg4vRYO.js} +1 -1
  82. package/dist/ui/assets/{alert-dialog-ClPYGzV3.js → alert-dialog-DOkcpleU.js} +1 -1
  83. package/dist/ui/assets/{api-BjpAFHdA.js → api-BT_0qMeR.js} +1 -1
  84. package/dist/ui/assets/{auth-section-wl4-fzwD.js → auth-section-CeSiLsXy.js} +1 -1
  85. package/dist/ui/assets/{backups-section-CRfyOhtX.js → backups-section-iVmpYvyb.js} +1 -1
  86. package/dist/ui/assets/{channels-DH0HkSGX.js → channels-zZKhs8WR.js} +1 -1
  87. package/dist/ui/assets/{checkbox-CTpEjpTH.js → checkbox-C-I3i4Q4.js} +1 -1
  88. package/dist/ui/assets/{claude-extension-BQOBO5Au.js → claude-extension-BAoBvPvA.js} +1 -1
  89. package/dist/ui/assets/cliproxy-IfhUOGN4.js +4 -0
  90. package/dist/ui/assets/{cliproxy-ai-providers-DoUPKyI5.js → cliproxy-ai-providers-DyDkgHp7.js} +1 -1
  91. package/dist/ui/assets/{cliproxy-control-panel-CvjXdHw9.js → cliproxy-control-panel-CLsxYShw.js} +1 -1
  92. package/dist/ui/assets/{codex-BeeazJpw.js → codex-BUQaneEo.js} +6 -3
  93. package/dist/ui/assets/{confirm-dialog-CYj_LLWN.js → confirm-dialog-CC1GlhTa.js} +1 -1
  94. package/dist/ui/assets/{copilot-ZCJeM_Zk.js → copilot-BohFv0NM.js} +1 -1
  95. package/dist/ui/assets/{cursor-CtBjQ1_j.js → cursor-C1IOfCtR.js} +1 -1
  96. package/dist/ui/assets/{droid-BLmzMBtN.js → droid-CZbjGOaK.js} +1 -1
  97. package/dist/ui/assets/{globalenv-section-0ENDeVbM.js → globalenv-section-Bqi0fVGe.js} +1 -1
  98. package/dist/ui/assets/{health-BEnDHk-j.js → health-CiA0mNhQ.js} +1 -1
  99. package/dist/ui/assets/{index-ClMz157R.js → index-9xFrS28W.js} +1 -1
  100. package/dist/ui/assets/index-B71yJlMj.css +1 -0
  101. package/dist/ui/assets/index-BB0thfeB.js +72 -0
  102. package/dist/ui/assets/{index-B3xma6R0.js → index-BWwOcbRZ.js} +1 -1
  103. package/dist/ui/assets/{index-Cip18A41.js → index-CdqlhnY2.js} +1 -1
  104. package/dist/ui/assets/{index-DrCrZ7r1.js → index-Clx3EIEh.js} +1 -1
  105. package/dist/ui/assets/{index-C04Kst21.js → index-Cp5UeBTW.js} +1 -1
  106. package/dist/ui/assets/{index-O9Qq-UJq.js → index-sEOc1fZf.js} +1 -1
  107. package/dist/ui/assets/{logs-DQxVdsHm.js → logs-WziPXnEI.js} +1 -1
  108. package/dist/ui/assets/{masked-input-eN6tFUjN.js → masked-input-dygs7T1G.js} +1 -1
  109. package/dist/ui/assets/{proxy-status-widget-50UIM6S8.js → proxy-status-widget-EU0qf73i.js} +1 -1
  110. package/dist/ui/assets/raw-json-settings-editor-panel-DV6AQbQf.js +1 -0
  111. package/dist/ui/assets/{searchable-select-JO0gngYE.js → searchable-select-ZehCX5PV.js} +1 -1
  112. package/dist/ui/assets/{separator-AoncAA6l.js → separator-DJy3ImQI.js} +1 -1
  113. package/dist/ui/assets/{shared-BTv96-3y.js → shared-CnZ8AED_.js} +1 -1
  114. package/dist/ui/assets/{table-BM_YK49c.js → table-CgmEQVhj.js} +1 -1
  115. package/dist/ui/assets/{updates-eo4H4NOg.js → updates-C24j_PKK.js} +1 -1
  116. package/dist/ui/assets/{use-accounts-ELLatpzU.js → use-accounts-BG5kGe9H.js} +1 -1
  117. package/dist/ui/index.html +2 -2
  118. package/dist/utils/browser/claude-tool-args.d.ts.map +1 -1
  119. package/dist/utils/browser/claude-tool-args.js +4 -0
  120. package/dist/utils/browser/claude-tool-args.js.map +1 -1
  121. package/dist/utils/claude-detector.d.ts.map +1 -1
  122. package/dist/utils/claude-detector.js +2 -1
  123. package/dist/utils/claude-detector.js.map +1 -1
  124. package/dist/utils/claude-subcommand-detector.d.ts +45 -0
  125. package/dist/utils/claude-subcommand-detector.d.ts.map +1 -0
  126. package/dist/utils/claude-subcommand-detector.js +179 -0
  127. package/dist/utils/claude-subcommand-detector.js.map +1 -0
  128. package/dist/utils/image-analysis/claude-tool-args.d.ts.map +1 -1
  129. package/dist/utils/image-analysis/claude-tool-args.js +4 -0
  130. package/dist/utils/image-analysis/claude-tool-args.js.map +1 -1
  131. package/dist/utils/shell-executor.d.ts +4 -2
  132. package/dist/utils/shell-executor.d.ts.map +1 -1
  133. package/dist/utils/shell-executor.js +59 -7
  134. package/dist/utils/shell-executor.js.map +1 -1
  135. package/dist/utils/websearch/claude-tool-args.d.ts.map +1 -1
  136. package/dist/utils/websearch/claude-tool-args.js +5 -0
  137. package/dist/utils/websearch/claude-tool-args.js.map +1 -1
  138. package/dist/web-server/health/profile-checks.d.ts.map +1 -1
  139. package/dist/web-server/health/profile-checks.js +2 -3
  140. package/dist/web-server/health/profile-checks.js.map +1 -1
  141. package/dist/web-server/health/symlink-checks.d.ts.map +1 -1
  142. package/dist/web-server/health/symlink-checks.js +2 -3
  143. package/dist/web-server/health/symlink-checks.js.map +1 -1
  144. package/dist/web-server/index.d.ts.map +1 -1
  145. package/dist/web-server/index.js +80 -20
  146. package/dist/web-server/index.js.map +1 -1
  147. package/dist/web-server/middleware/auth-middleware.d.ts +5 -0
  148. package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -1
  149. package/dist/web-server/middleware/auth-middleware.js +73 -1
  150. package/dist/web-server/middleware/auth-middleware.js.map +1 -1
  151. package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
  152. package/dist/web-server/routes/cliproxy-auth-routes.js +30 -3
  153. package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
  154. package/dist/web-server/routes/codex-routes.d.ts.map +1 -1
  155. package/dist/web-server/routes/codex-routes.js +7 -0
  156. package/dist/web-server/routes/codex-routes.js.map +1 -1
  157. package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
  158. package/dist/web-server/routes/settings-routes.js +92 -14
  159. package/dist/web-server/routes/settings-routes.js.map +1 -1
  160. package/dist/web-server/usage/aggregator.d.ts.map +1 -1
  161. package/dist/web-server/usage/aggregator.js +2 -5
  162. package/dist/web-server/usage/aggregator.js.map +1 -1
  163. package/lib/hooks/image-analyzer-transformer.cjs +49 -3
  164. package/lib/mcp/ccs-browser-server.cjs +153 -6
  165. package/package.json +1 -1
  166. package/dist/ui/assets/cliproxy-qUbiZjec.js +0 -3
  167. package/dist/ui/assets/index-Bs28kNJN.js +0 -72
  168. package/dist/ui/assets/index-D2_yb3d2.css +0 -1
  169. package/dist/ui/assets/raw-json-settings-editor-panel-DqKmVWL-.js +0 -1
@@ -1 +1 @@
1
- import{j as e}from"./radix-ui-nu4wz29m.js";import{r as o}from"./react-vendor-Bjx91N7w.js";import{a as Ne,bA as ke,Y as re,bi as se,bk as ne,d as C,n as we,B as m,c as g,aI as Se,I as q,r as ie,s as le,t as de,v as oe,w as z,W as l}from"./index-Bs28kNJN.js";import{R as G,w as ce,x as Ae,a8 as me,aC as Ce,A as Me,aa as Pe,at as Be,t as Re,s as _e,a9 as Ve,aL as Te}from"./icons-DzKUh8vG.js";import"./tanstack-bhJxV1h8.js";import"./notifications-B4_o8bcr.js";import"./utils-CzKF5WmX.js";import"./form-utils-CuHzLhJZ.js";import"./code-highlight-D4E79GKQ.js";const M="__no_backend__";function ue(t){return!!t&&typeof t=="object"&&!Array.isArray(t)&&Object.values(t).every(r=>typeof r=="string")}function De(t){if(!t||typeof t!="object"||Array.isArray(t))return!1;const r=t;return!!r.config&&typeof r.config.enabled=="boolean"&&typeof r.config.timeout=="number"&&ue(r.config.providerModels)&&(r.config.fallbackBackend===null||typeof r.config.fallbackBackend=="string")&&ue(r.config.profileBackends)&&!!r.summary&&typeof r.summary.state=="string"&&typeof r.summary.title=="string"&&typeof r.summary.detail=="string"&&Array.isArray(r.backends)&&Array.isArray(r.profiles)&&!!r.catalog&&Array.isArray(r.catalog.knownBackends)&&Array.isArray(r.catalog.profileNames)&&typeof r.summary.nativeProfileCount=="number"}function Ie(t){return Object.entries(t).sort(([r],[s])=>r.localeCompare(s)).map(([r,s],x)=>({id:`${r}-${s}-${x}`,profileName:r,backendId:s}))}function Ee(t){switch(t){case"ready":return"border-emerald-500/25 bg-emerald-500/10 text-emerald-900 dark:text-emerald-200";case"partial":return"border-amber-500/25 bg-amber-500/10 text-amber-900 dark:text-amber-200";case"needs_setup":return"border-rose-500/25 bg-rose-500/10 text-rose-900 dark:text-rose-200";case"disabled":return"border-border/80 bg-background/85 text-muted-foreground"}}function $e(t){switch(t){case"ready":return"border-emerald-500/25 bg-emerald-500/10 text-emerald-800 dark:text-emerald-200";case"starts_on_launch":return"border-sky-500/25 bg-sky-500/10 text-sky-800 dark:text-sky-200";case"needs_auth":return"border-rose-500/25 bg-rose-500/10 text-rose-800 dark:text-rose-200";case"needs_proxy":return"border-amber-500/25 bg-amber-500/10 text-amber-800 dark:text-amber-200";case"review":return"border-border/80 bg-background/85 text-muted-foreground"}}function ge(t){switch(t){case"active":return l.t("imageAnalysisStatus.badgeReady");case"bypassed":return l.t("imageAnalysisStatus.badgeBypassed");case"fallback":return l.t("imageAnalysisStatus.nativeFallback");case"setup":return l.t("imageAnalysisStatus.badgeSetup");case"disabled":return l.t("imageAnalysisStatus.badgeDisabled");case"native":return l.t("imageAnalysisStatus.badgeNative");case"unresolved":return l.t("imageAnalysisStatus.nativeImageReading")}}function xe(t){switch(t){case"active":return"border-emerald-500/25 bg-emerald-500/10 text-emerald-800 dark:text-emerald-200";case"bypassed":return"border-sky-500/25 bg-sky-500/10 text-sky-800 dark:text-sky-200";case"fallback":case"setup":return"border-amber-500/25 bg-amber-500/10 text-amber-800 dark:text-amber-200";case"native":return"border-emerald-500/25 bg-emerald-500/10 text-emerald-800 dark:text-emerald-200";case"disabled":case"unresolved":return"border-border/80 bg-background/85 text-muted-foreground"}}function Fe(t){switch(t){case"starts_on_launch":return l.t("imageAnalysisSection.backendStartsOnLaunch",{defaultValue:"Starts on launch"});case"needs_auth":return l.t("imageAnalysisStatus.needsAuth");case"needs_proxy":return l.t("imageAnalysisStatus.needsProxy");case"review":return l.t("imageAnalysisSection.review",{defaultValue:"Review"});case"ready":return l.t("imageAnalysisStatus.badgeReady")}}function Oe(t){if(!t)return l.t("imageAnalysisSection.noModelConfigured",{defaultValue:"No model configured."});switch(t.state){case"needs_auth":return t.authReason||l.t("imageAnalysisSection.authenticateToRoute",{defaultValue:"Authenticate to route here."});case"needs_proxy":return t.proxyReason||l.t("imageAnalysisSection.proxyUnavailable",{defaultValue:"Proxy unavailable."});case"starts_on_launch":return l.t("imageAnalysisSection.authReadyLaunchesLocally",{defaultValue:"Auth ready. Launches locally on demand."});case"review":return l.t("imageAnalysisSection.needsManualReview",{defaultValue:"Needs manual review."});case"ready":return null}}function ze(t){switch(t){case"profile-backend":return l.t("imageAnalysisSection.explicitMapping",{defaultValue:"Explicit mapping"});case"fallback-backend":return l.t("imageAnalysisSection.fallbackBackend",{defaultValue:"Fallback backend"});case"cliproxy-provider":return l.t("imageAnalysisSection.providerMatch",{defaultValue:"Provider match"});case"cliproxy-bridge":return l.t("imageAnalysisSection.bridgeMatch",{defaultValue:"Bridge match"});case"native-compatible":return l.t("imageAnalysisSection.nativePath",{defaultValue:"Native path"});case"copilot-alias":return l.t("imageAnalysisSection.copilotAlias",{defaultValue:"Copilot alias"});default:return t.replace(/-/g," ")}}function k(t){return"border-border/50 bg-background/40"}function Le(t){switch(t){case"ready":return"bg-[linear-gradient(90deg,rgba(16,185,129,0.08),transparent_18%),linear-gradient(180deg,rgba(255,255,255,0.72),rgba(255,255,255,0.46))] dark:bg-[linear-gradient(90deg,rgba(16,185,129,0.12),transparent_18%),linear-gradient(180deg,rgba(15,23,42,0.82),rgba(15,23,42,0.56))]";case"starts_on_launch":return"bg-[linear-gradient(90deg,rgba(14,165,233,0.08),transparent_18%),linear-gradient(180deg,rgba(255,255,255,0.72),rgba(255,255,255,0.46))] dark:bg-[linear-gradient(90deg,rgba(14,165,233,0.12),transparent_18%),linear-gradient(180deg,rgba(15,23,42,0.82),rgba(15,23,42,0.56))]";case"needs_auth":return"bg-[linear-gradient(90deg,rgba(244,63,94,0.08),transparent_18%),linear-gradient(180deg,rgba(255,255,255,0.72),rgba(255,255,255,0.46))] dark:bg-[linear-gradient(90deg,rgba(244,63,94,0.12),transparent_18%),linear-gradient(180deg,rgba(15,23,42,0.82),rgba(15,23,42,0.56))]";case"needs_proxy":return"bg-[linear-gradient(90deg,rgba(245,158,11,0.08),transparent_18%),linear-gradient(180deg,rgba(255,255,255,0.72),rgba(255,255,255,0.46))] dark:bg-[linear-gradient(90deg,rgba(245,158,11,0.12),transparent_18%),linear-gradient(180deg,rgba(15,23,42,0.82),rgba(15,23,42,0.56))]";case"review":default:return"bg-[linear-gradient(180deg,rgba(255,255,255,0.74),rgba(255,255,255,0.5))] dark:bg-[linear-gradient(180deg,rgba(15,23,42,0.8),rgba(15,23,42,0.58))]"}}function Ke(t){switch(t){case"ready":return"from-emerald-500 to-emerald-400/30";case"starts_on_launch":return"from-sky-500 to-sky-400/30";case"needs_auth":return"from-rose-500 to-rose-400/30";case"needs_proxy":return"from-amber-500 to-amber-400/30";case"review":default:return"from-slate-400 to-slate-300/20"}}function Ue(t,r){return r.nativeReadPreference?t%2===0?"bg-emerald-500/[0.06]":"bg-emerald-500/[0.08]":t%2===0?"bg-background/75":"bg-muted/18"}function He(t){const r=[`${t.activeProfileCount} routed`,`${t.nativeProfileCount} native`];return t.mappedProfileCount>0&&r.push(`${t.mappedProfileCount} override${t.mappedProfileCount===1?"":"s"}`),r.join(" · ")}function Je(t){return Object.entries(t).reduce((r,[s,x])=>{const h=x.trim();return r[s]=h||null,r},{})}function W(t){return Object.entries(t).filter(([,r])=>r.trim().length>0).map(([r])=>r)}function qe(t){return t.reduce((r,s)=>{const x=s.profileName.trim();return!x||!s.backendId||(r[x]=s.backendId),r},{})}function pe(t,r){const s=Number.parseInt(t.trim(),10);return Number.isInteger(s)?String(Math.min(600,Math.max(10,s))):r}function T({title:t,description:r,icon:s,meta:x,action:h,children:D,className:c}){return e.jsxs("div",{className:g("relative overflow-hidden rounded-2xl border bg-gradient-to-br from-background via-background to-muted/25 p-4 shadow-sm",c),children:[e.jsx("div",{className:"absolute inset-x-0 top-0 h-px bg-gradient-to-r from-primary/40 via-primary/10 to-transparent"}),e.jsxs("div",{className:"relative space-y-4",children:[e.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-start md:justify-between",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-xl border border-primary/20 bg-primary/10 text-primary",children:s}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("h3",{className:"text-base font-semibold tracking-tight",children:t}),x]}),e.jsx("p",{className:"mt-0.5 text-sm leading-5 text-muted-foreground",children:r})]})]}),h&&e.jsx("div",{className:"shrink-0",children:h})]}),e.jsx("div",{className:"space-y-3",children:D})]})]})}function ra(){const{t}=Ne(),{fetchRawConfig:r}=ke(),[s,x]=o.useState(null),[h,D]=o.useState(!0),[c,Y]=o.useState(!1),[I,N]=o.useState(null),[P,L]=o.useState(null),[E,Q]=o.useState(!1),[B,X]=o.useState(!0),[K,U]=o.useState("60"),[v,R]=o.useState(""),[w,$]=o.useState({}),[p,F]=o.useState([]),S=o.useCallback(a=>{X(a.config.enabled),U(String(a.config.timeout)),R(a.config.fallbackBackend??""),$(a.catalog.knownBackends.reduce((n,i)=>(n[i]=a.config.providerModels[i]??"",n),{})),F(Ie(a.config.profileBackends))},[]),H=o.useCallback(async()=>{try{D(!0),N(null);const a=await re.imageAnalysis.get();if(!De(a))throw new Error("Image settings returned an unexpected response. Restart the dashboard server so the new API route is available.");x(a),S(a)}catch(a){N(a instanceof Error?a.message:"Failed to load image settings.")}finally{D(!1)}},[S]);o.useEffect(()=>{H(),r()},[H,r]),o.useEffect(()=>{if(!P)return;const a=window.setTimeout(()=>L(null),2500);return()=>window.clearTimeout(a)},[P]),o.useEffect(()=>{s&&Object.keys(s.config.profileBackends).length>0&&Q(!0)},[s]);const u=o.useMemo(()=>W(w),[w]),Z=o.useMemo(()=>{if(!s)return[];const a=s.catalog.knownBackends.filter(i=>u.includes(i)),n=s.catalog.knownBackends.filter(i=>!u.includes(i));return[...a,...n]},[u,s]),O=o.useMemo(()=>s?.profiles.filter(a=>a.nativeReadPreference)??[],[s]);o.useEffect(()=>{if(u.length===0){R("");return}u.includes(v)||R(u[0])},[u,v]);const _=o.useCallback(async a=>{if(!s)return!1;const n=a?.enabled??B,i=a?.providerModels??w,d=W(i),b=pe(a?.timeout??K,String(s.config.timeout)),y=a?.fallbackBackend??v,A=d.length===0?"":d.includes(y)?y:d[0],f=a?.mappingDrafts??p,V={enabled:n,timeout:b,fallbackBackend:A,providerModels:Je(i),profileBackends:qe(f)},je={enabled:s.config.enabled,timeout:String(s.config.timeout),fallbackBackend:s.config.fallbackBackend??"",providerModels:s.catalog.knownBackends.reduce((j,te)=>(j[te]=s.config.providerModels[te]??null,j),{}),profileBackends:s.config.profileBackends};if(JSON.stringify(V)===JSON.stringify(je))return!0;if(n&&d.length===0)return N("Keep at least one provider model configured, or disable Image globally."),S(s),!1;try{Y(!0),N(null);const j=await re.imageAnalysis.update({enabled:n,timeout:Number.parseInt(b,10),fallbackBackend:A||null,providerModels:V.providerModels,profileBackends:V.profileBackends});return x(j),S(j),L(t("commonToast.settingsSaved")),await r(),!0}catch(j){return N(j instanceof Error?j.message:"Failed to save image settings."),S(s),!1}finally{Y(!1)}},[s,B,v,r,S,p,w,t,K]),ee=async()=>{h||c||(L(null),await Promise.all([H(),r()]))},be=async a=>{if(!c){if(a&&u.length===0){N("Keep at least one provider model configured, or disable Image globally.");return}X(a),await _({enabled:a})}},fe=async a=>{if(!s||c)return;const n=pe(a,String(s.config.timeout));U(n),await _({timeout:n})},he=async a=>{c||(R(a),await _({fallbackBackend:a}))},ae=async(a,n)=>{if(!s||c)return;const i=n.trim(),d={...w,[a]:i},b=W(d);if(B&&b.length===0){N("Disable Image first or keep one backend configured."),$(A=>({...A,[a]:s.config.providerModels[a]??""}));return}const y=b.length===0?"":b.includes(v)?v:b[0];$(d),R(y),await _({providerModels:d,fallbackBackend:y})},ve=(a,n)=>{F(i=>i.map(d=>d.id===a?{...d,...n}:d))},J=async a=>{c||(F(a),await _({mappingDrafts:a}))},ye=p.filter(a=>a.profileName.trim()&&a.backendId).length;return h?e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsxs("div",{className:"flex items-center gap-3 text-muted-foreground",children:[e.jsx(G,{className:"w-5 h-5 animate-spin"}),e.jsx("span",{children:t("settingsPage.imageAnalysisSection.loading")})]})}):s?e.jsxs("div",{className:"relative flex min-h-0 flex-1 flex-col",children:[e.jsxs("div",{className:`absolute left-5 right-5 top-20 z-10 transition-all duration-200 ease-out ${I||P?"translate-y-0 opacity-100":"pointer-events-none -translate-y-2 opacity-0"}`,children:[I&&e.jsxs(se,{variant:"destructive",className:"py-2 shadow-lg",children:[e.jsx(ce,{className:"h-4 w-4"}),e.jsx(ne,{children:I})]}),P&&e.jsxs("div",{className:"flex items-center gap-2 rounded-md border border-green-200 bg-green-50 px-3 py-2 text-green-700 shadow-lg dark:border-green-900/50 dark:bg-green-900/90 dark:text-green-300",children:[e.jsx(Ae,{className:"h-4 w-4 shrink-0"}),e.jsx("span",{className:"text-sm font-medium",children:P})]})]}),e.jsx(we,{className:"min-h-0 flex-1",children:e.jsxs("div",{className:"space-y-6 p-5",children:[e.jsxs("div",{className:"relative overflow-hidden rounded-2xl border bg-gradient-to-br from-background via-background to-muted/30 p-4 shadow-sm",children:[e.jsx("div",{className:"absolute inset-x-0 top-0 h-px bg-gradient-to-r from-primary/70 via-primary/20 to-transparent"}),e.jsx("div",{className:"pointer-events-none absolute inset-0 opacity-[0.035]",style:{backgroundImage:"repeating-linear-gradient(0deg, transparent, transparent 2px, currentColor 2px, currentColor 3px)"}}),e.jsxs("div",{className:"relative",children:[e.jsxs("div",{className:"mb-3 flex items-center justify-between gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"inline-flex h-8 w-8 items-center justify-center rounded-xl border border-primary/20 bg-primary/8 text-primary",children:e.jsx(me,{className:"h-4 w-4"})}),e.jsx("p",{className:"text-sm font-semibold tracking-tight",children:t("settingsPage.imageAnalysisSection.title")})]}),e.jsxs("div",{className:"mt-1 flex flex-wrap items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(m,{className:g("border",Ee(s.summary.state)),children:s.summary.title}),e.jsx("span",{children:He(s.summary)})]})]}),e.jsx(C,{variant:"ghost",size:"sm",onClick:ee,disabled:h||c,"aria-label":"Refresh",title:"Refresh",children:e.jsx(G,{className:`h-4 w-4 ${h?"animate-spin":""}`})})]}),e.jsxs("div",{className:"mt-3 grid gap-2 sm:grid-cols-2",children:[e.jsxs("div",{className:"rounded-[18px] border bg-background/72 px-3 py-2.5 backdrop-blur-sm",children:[e.jsx("div",{className:"text-[10px] font-medium uppercase tracking-[0.14em] text-muted-foreground",children:"Active routes"}),e.jsx("div",{className:"mt-1.5 text-xl font-semibold text-foreground",children:s.summary.activeProfileCount}),e.jsx("p",{className:"mt-0.5 text-[11px] text-muted-foreground",children:"Current target path"})]}),e.jsxs("div",{className:"rounded-[18px] border bg-background/72 px-3 py-2.5 backdrop-blur-sm",children:[e.jsx("div",{className:"text-[10px] font-medium uppercase tracking-[0.14em] text-muted-foreground",children:"Native path"}),e.jsx("div",{className:"mt-1.5 text-xl font-semibold text-foreground",children:s.summary.nativeProfileCount}),e.jsx("p",{className:"mt-0.5 text-[11px] text-muted-foreground",children:"Skip transformer"})]})]})]})]}),e.jsxs(T,{tone:"amber",eyebrow:"Control deck",title:"Core setup",description:t("settingsPage.imageAnalysisSection.description"),icon:e.jsx(Ce,{className:"h-4 w-4"}),meta:e.jsxs(m,{variant:"outline",className:"border-amber-500/25 bg-amber-500/10 text-[10px]",children:[u.length," configured"]}),children:[e.jsxs("div",{className:"grid gap-2 lg:grid-cols-3",children:[e.jsxs("div",{className:g("rounded-[18px] border px-3.5 py-3 shadow-sm",k()),children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-[0.14em] text-amber-700/75 dark:text-amber-300/75",children:"Enabled"}),e.jsxs("div",{className:"mt-2.5 flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx("div",{className:"text-sm font-semibold text-foreground",children:B?"Transformer on":"Transformer off"}),e.jsx("p",{className:"text-[11px] leading-4 text-muted-foreground",children:"Profile flags stay untouched."})]}),e.jsx(Se,{checked:B,onCheckedChange:a=>{be(a)},disabled:c})]})]}),e.jsxs("div",{className:g("rounded-[18px] border px-3.5 py-3 shadow-sm",k()),children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-[0.14em] text-amber-700/75 dark:text-amber-300/75",children:"Timeout"}),e.jsxs("div",{className:"mt-2.5 flex items-center gap-2",children:[e.jsx(q,{value:K,onChange:a=>U(a.target.value),inputMode:"numeric",className:"h-10 border-amber-500/15 bg-background/90 text-base",disabled:c,onBlur:a=>{fe(a.currentTarget.value)},onKeyDown:a=>{a.key==="Enter"&&a.currentTarget.blur()}}),e.jsx("span",{className:"text-xs font-medium text-muted-foreground",children:"sec"})]}),e.jsx("p",{className:"mt-1.5 text-[11px] leading-4 text-muted-foreground",children:"Keeps large reads from hanging."})]}),e.jsxs("div",{className:g("rounded-[18px] border px-3.5 py-3 shadow-sm",k()),children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-[0.14em] text-amber-700/75 dark:text-amber-300/75",children:"Fallback backend"}),e.jsx("div",{className:"mt-2.5",children:e.jsxs(ie,{value:v||M,onValueChange:a=>{he(a===M?"":a)},disabled:c,children:[e.jsx(le,{className:"h-10 border-amber-500/15 bg-background/90",children:e.jsx(de,{placeholder:t("settingsPage.thinkingSection.configureModelFirst")})}),e.jsx(oe,{children:u.length===0?e.jsx(z,{value:M,children:t("settingsPage.thinkingSection.configureModelFirst")}):u.map(a=>e.jsx(z,{value:a,children:a},a))})]})}),e.jsx("p",{className:"mt-1.5 text-[11px] leading-4 text-muted-foreground",children:"Used when no direct route exists."})]})]}),e.jsxs("div",{className:"mt-3 flex flex-wrap gap-1.5",children:[e.jsxs("div",{className:"rounded-full border border-amber-500/15 bg-background/80 px-2.5 py-1 text-[11px] text-muted-foreground",children:[ye," overrides"]}),e.jsxs("div",{className:"rounded-full border border-amber-500/15 bg-background/80 px-2.5 py-1 text-[11px] text-muted-foreground",children:[O.length," native"]}),e.jsxs("div",{className:"rounded-full border border-amber-500/15 bg-background/80 px-2.5 py-1 text-[11px] text-muted-foreground",children:[v||"No fallback"," fallback"]})]})]}),e.jsx(T,{tone:"cyan",eyebrow:"Route inventory",title:"Backend routes",description:"Model entry plus route health.",icon:e.jsx(Me,{className:"h-4 w-4"}),meta:e.jsxs(m,{variant:"outline",className:"border-cyan-500/25 bg-cyan-500/10 text-[10px]",children:[Z.length," backends"]}),children:e.jsx("div",{className:"overflow-hidden rounded-[20px] border border-cyan-500/12 bg-background/65 shadow-sm backdrop-blur-sm",children:Z.map((a,n)=>{const i=s.backends.find(f=>f.backendId===a),d=i?.displayName||a,b=w[a]??"",y=Oe(i),A=b?[`${i?.profilesUsing??0} active`,i?.authReadiness==="missing"?"auth missing":i?.proxyReadiness==="stopped"?"starts on launch":null].filter(Boolean).join(" · "):"No model configured.";return e.jsxs("div",{className:g("relative px-3 py-3 md:px-4",n>0&&"border-t border-cyan-500/10",Le(i?.state)),children:[e.jsx("div",{className:g("absolute bottom-3 left-0 top-3 w-1 rounded-r-full bg-gradient-to-b",Ke(i?.state))}),e.jsxs("div",{className:"pl-2.5",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("h4",{className:"text-sm font-semibold text-foreground",children:d}),e.jsx(m,{variant:"outline",className:"font-mono text-[10px]",children:a}),i?.profilesUsing?e.jsxs(m,{variant:"outline",className:"border-cyan-500/20 bg-cyan-500/10 text-[10px]",children:[i.profilesUsing," active"]}):null]}),e.jsx("p",{className:"mt-0.5 text-[11px] leading-4 text-muted-foreground",children:A})]}),e.jsx(m,{className:g("border",i?$e(i.state):"border-border/80 bg-background/85 text-muted-foreground"),children:i?Fe(i.state):"Inactive"})]}),e.jsxs("div",{className:"mt-2 flex flex-col gap-2 sm:flex-row",children:[e.jsx(q,{className:"h-10 flex-1 border-cyan-500/15 bg-background/88 text-base",placeholder:t("imageAnalysisSection.setModel",{defaultValue:"Set model"}),value:b,disabled:c,onChange:f=>$(V=>({...V,[a]:f.target.value})),onBlur:f=>{ae(a,f.currentTarget.value)},onKeyDown:f=>{f.key==="Enter"&&f.currentTarget.blur()}}),b.trim().length>0&&e.jsx(C,{type:"button",variant:"outline",size:"sm",className:"h-10 sm:self-stretch",disabled:c,onClick:()=>{ae(a,"")},children:t("common.clear",{defaultValue:"Clear"})})]}),y&&e.jsx("p",{className:"mt-1.5 text-[11px] leading-4 text-muted-foreground",children:y})]})]},a)})})}),e.jsx(T,{tone:"emerald",eyebrow:"Native path",title:"Native reading",description:"Profiles that skip the transformer.",icon:e.jsx(Pe,{className:"h-4 w-4"}),meta:e.jsxs(m,{variant:"outline",children:[O.length," profiles"]}),children:O.length===0?e.jsx("div",{className:g("rounded-[18px] border border-dashed px-3.5 py-3.5 text-sm text-muted-foreground",k()),children:t("imageAnalysisSection.noProfilesPreferNative",{defaultValue:"No profiles prefer native reading yet."})}):e.jsx("div",{className:"grid gap-2 md:grid-cols-2",children:O.map(a=>e.jsx("div",{className:g("rounded-[18px] border px-3.5 py-3 shadow-sm",k()),children:e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("div",{className:"truncate text-sm font-semibold text-foreground",children:a.name}),e.jsx(m,{variant:"outline",className:"text-[10px]",children:a.kind==="variant"?t("cliproxyPage.variant"):t("apiProfiles.title")}),e.jsx(m,{variant:"outline",className:"text-[10px]",children:a.nativeImageCapable?t("imageAnalysisStatus.capabilityVerified"):t("imageAnalysisSection.review",{defaultValue:"Review"})})]}),e.jsxs("div",{className:"mt-1 text-[11px] leading-4 text-muted-foreground",children:[a.profileModel||t("imageAnalysisSection.modelNotDetected",{defaultValue:"Model not detected"})," ","·"," ",a.nativeImageReason||t("imageAnalysisSection.nativeReadPreferred",{defaultValue:"Native read preferred."})]})]}),e.jsx(m,{className:g("border",xe(a.currentTargetMode)),children:ge(a.currentTargetMode)})]})},`native-${a.kind}-${a.name}`))})}),e.jsxs(T,{tone:"slate",eyebrow:"Override lab",title:"Profile routing",description:"Only for explicit route overrides.",icon:e.jsx(Te,{className:"h-4 w-4"}),meta:e.jsx(m,{variant:"outline",className:"border-amber-500/25 bg-amber-500/10 text-[10px] text-amber-800 dark:text-amber-200",children:"Advanced"}),action:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(C,{type:"button",variant:"outline",size:"sm",onClick:()=>Q(a=>!a),children:[E?e.jsx(Re,{className:"mr-1 h-4 w-4"}):e.jsx(_e,{className:"mr-1 h-4 w-4"}),E?t("common.hide",{defaultValue:"Hide"}):t("common.show",{defaultValue:"Show"})]}),E&&e.jsxs(C,{type:"button",variant:"outline",size:"sm",onClick:()=>F(a=>[...a,{id:`mapping-${Date.now()}`,profileName:"",backendId:u[0]??""}]),disabled:u.length===0||c,children:[e.jsx(Ve,{className:"mr-1 h-4 w-4"}),t("imageAnalysisSection.addMapping",{defaultValue:"Add mapping"})]})]}),className:"border-dashed",children:[e.jsx("datalist",{id:"image-profile-suggestions",children:s.catalog.profileNames.map(a=>e.jsx("option",{value:a},a))}),E?e.jsx("div",{className:"space-y-2",children:p.length===0?e.jsx("div",{className:g("rounded-[18px] border border-dashed px-3.5 py-3.5 text-sm text-muted-foreground",k()),children:"No explicit overrides saved."}):e.jsx("div",{className:"space-y-2",children:p.map(a=>e.jsxs("div",{className:"rounded-[18px] border border-slate-400/20 bg-[linear-gradient(180deg,rgba(255,255,255,0.72),rgba(248,250,252,0.52))] p-3 shadow-sm dark:bg-[linear-gradient(180deg,rgba(15,23,42,0.84),rgba(15,23,42,0.56))]",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center gap-2 text-[11px] leading-4 text-muted-foreground",children:[e.jsx("span",{children:t("imageAnalysisSection.directOverride",{defaultValue:"Direct override"})}),!(a.profileName.trim()&&a.backendId)&&e.jsx(m,{variant:"outline",className:"text-[10px]",children:"Draft"})]}),e.jsxs(C,{type:"button",variant:"ghost",size:"sm",disabled:c,onClick:()=>{const n=p.filter(i=>i.id!==a.id);J(n)},children:[e.jsx(Be,{className:"mr-1 h-4 w-4"}),t("common.remove",{defaultValue:"Remove"})]})]}),e.jsxs("div",{className:"mt-2 grid gap-2 sm:grid-cols-2",children:[e.jsx(q,{value:a.profileName,list:"image-profile-suggestions",disabled:c,placeholder:t("imageAnalysisSection.profileOrVariantName",{defaultValue:"Profile or variant name"}),className:"h-10 border-slate-400/15 bg-background/88 text-base",onChange:n=>{ve(a.id,{profileName:n.target.value})},onBlur:n=>{const i=p.map(d=>d.id===a.id?{...d,profileName:n.currentTarget.value.trim()}:d);J(i)},onKeyDown:n=>{n.key==="Enter"&&n.currentTarget.blur()}}),e.jsxs(ie,{value:a.backendId||M,disabled:c,onValueChange:n=>{const i=p.map(d=>d.id===a.id?{...d,backendId:n===M?"":n}:d);J(i)},children:[e.jsx(le,{className:"h-10 border-slate-400/15 bg-background/88",children:e.jsx(de,{placeholder:t("settingsPage.thinkingSection.configureModelFirst")})}),e.jsx(oe,{children:u.length===0?e.jsx(z,{value:M,children:t("settingsPage.thinkingSection.configureModelFirst")}):u.map(n=>e.jsx(z,{value:n,children:n},n))})]})]})]},a.id))})}):e.jsxs("div",{className:g("rounded-[18px] border border-dashed px-3.5 py-3 text-sm text-muted-foreground",k()),children:["Hidden by default.",p.length>0?` ${p.length} override${p.length===1?"":"s"} saved.`:" No overrides saved."]})]}),e.jsx(T,{tone:"slate",eyebrow:"Audit view",title:"Coverage",description:"Read-only routing ledger for the current path.",icon:e.jsx(me,{className:"h-4 w-4"}),meta:e.jsxs(m,{variant:"outline",children:[s.profiles.length," profiles"]}),children:e.jsx("div",{className:"overflow-hidden rounded-[20px] border border-slate-400/15 bg-background/75 shadow-sm backdrop-blur-sm",children:s.profiles.map((a,n)=>e.jsxs("div",{className:g("grid gap-2 px-3.5 py-2.5 md:grid-cols-[minmax(0,1fr)_auto] md:items-center",n>0&&"border-t border-slate-400/12",Ue(n,a)),children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("div",{className:"truncate text-sm font-semibold text-foreground",children:a.name}),e.jsx(m,{variant:"outline",className:"text-[10px]",children:a.kind==="variant"?t("cliproxyPage.variant"):t("apiProfiles.title")}),e.jsx(m,{variant:"outline",className:"font-mono text-[10px] uppercase",children:a.target}),a.nativeReadPreference&&e.jsx(m,{variant:"outline",className:"border-emerald-500/20 bg-emerald-500/10 text-[10px]",children:"Native"})]}),e.jsxs("div",{className:"mt-0.5 text-[11px] leading-4 text-muted-foreground",children:[a.backendDisplayName||a.profileModel||"Native file access"," ·"," ",ze(a.resolutionSource)]})]}),e.jsxs("div",{className:"flex items-center gap-2 md:justify-end",children:[a.profileModel&&e.jsx(m,{variant:"outline",className:"font-mono text-[10px]",children:a.profileModel}),e.jsx(m,{className:g("border",xe(a.currentTargetMode)),children:ge(a.currentTargetMode)})]})]},`${a.kind}-${a.name}`))})})]})})]}):e.jsxs("div",{className:"p-5",children:[e.jsxs(se,{variant:"destructive",children:[e.jsx(ce,{className:"h-4 w-4"}),e.jsx(ne,{children:I??t("settingsPage.imageAnalysisSection.description")})]}),e.jsx("div",{className:"mt-4",children:e.jsxs(C,{variant:"outline",size:"sm",onClick:ee,children:[e.jsx(G,{className:"mr-1 h-4 w-4"}),t("sharedPage.retry")]})})]})}export{ra as default};
1
+ import{j as e}from"./radix-ui-nu4wz29m.js";import{r as o}from"./react-vendor-Bjx91N7w.js";import{a as Ne,bA as ke,Y as re,bi as se,bk as ne,d as C,n as we,B as m,c as g,aI as Se,I as q,r as ie,s as le,t as de,v as oe,w as z,W as l}from"./index-BB0thfeB.js";import{R as G,w as ce,x as Ae,a8 as me,aC as Ce,A as Me,aa as Pe,at as Be,t as Re,s as _e,a9 as Ve,aL as Te}from"./icons-DzKUh8vG.js";import"./tanstack-bhJxV1h8.js";import"./notifications-B4_o8bcr.js";import"./utils-CzKF5WmX.js";import"./form-utils-CuHzLhJZ.js";import"./code-highlight-D4E79GKQ.js";const M="__no_backend__";function ue(t){return!!t&&typeof t=="object"&&!Array.isArray(t)&&Object.values(t).every(r=>typeof r=="string")}function De(t){if(!t||typeof t!="object"||Array.isArray(t))return!1;const r=t;return!!r.config&&typeof r.config.enabled=="boolean"&&typeof r.config.timeout=="number"&&ue(r.config.providerModels)&&(r.config.fallbackBackend===null||typeof r.config.fallbackBackend=="string")&&ue(r.config.profileBackends)&&!!r.summary&&typeof r.summary.state=="string"&&typeof r.summary.title=="string"&&typeof r.summary.detail=="string"&&Array.isArray(r.backends)&&Array.isArray(r.profiles)&&!!r.catalog&&Array.isArray(r.catalog.knownBackends)&&Array.isArray(r.catalog.profileNames)&&typeof r.summary.nativeProfileCount=="number"}function Ie(t){return Object.entries(t).sort(([r],[s])=>r.localeCompare(s)).map(([r,s],x)=>({id:`${r}-${s}-${x}`,profileName:r,backendId:s}))}function Ee(t){switch(t){case"ready":return"border-emerald-500/25 bg-emerald-500/10 text-emerald-900 dark:text-emerald-200";case"partial":return"border-amber-500/25 bg-amber-500/10 text-amber-900 dark:text-amber-200";case"needs_setup":return"border-rose-500/25 bg-rose-500/10 text-rose-900 dark:text-rose-200";case"disabled":return"border-border/80 bg-background/85 text-muted-foreground"}}function $e(t){switch(t){case"ready":return"border-emerald-500/25 bg-emerald-500/10 text-emerald-800 dark:text-emerald-200";case"starts_on_launch":return"border-sky-500/25 bg-sky-500/10 text-sky-800 dark:text-sky-200";case"needs_auth":return"border-rose-500/25 bg-rose-500/10 text-rose-800 dark:text-rose-200";case"needs_proxy":return"border-amber-500/25 bg-amber-500/10 text-amber-800 dark:text-amber-200";case"review":return"border-border/80 bg-background/85 text-muted-foreground"}}function ge(t){switch(t){case"active":return l.t("imageAnalysisStatus.badgeReady");case"bypassed":return l.t("imageAnalysisStatus.badgeBypassed");case"fallback":return l.t("imageAnalysisStatus.nativeFallback");case"setup":return l.t("imageAnalysisStatus.badgeSetup");case"disabled":return l.t("imageAnalysisStatus.badgeDisabled");case"native":return l.t("imageAnalysisStatus.badgeNative");case"unresolved":return l.t("imageAnalysisStatus.nativeImageReading")}}function xe(t){switch(t){case"active":return"border-emerald-500/25 bg-emerald-500/10 text-emerald-800 dark:text-emerald-200";case"bypassed":return"border-sky-500/25 bg-sky-500/10 text-sky-800 dark:text-sky-200";case"fallback":case"setup":return"border-amber-500/25 bg-amber-500/10 text-amber-800 dark:text-amber-200";case"native":return"border-emerald-500/25 bg-emerald-500/10 text-emerald-800 dark:text-emerald-200";case"disabled":case"unresolved":return"border-border/80 bg-background/85 text-muted-foreground"}}function Fe(t){switch(t){case"starts_on_launch":return l.t("imageAnalysisSection.backendStartsOnLaunch",{defaultValue:"Starts on launch"});case"needs_auth":return l.t("imageAnalysisStatus.needsAuth");case"needs_proxy":return l.t("imageAnalysisStatus.needsProxy");case"review":return l.t("imageAnalysisSection.review",{defaultValue:"Review"});case"ready":return l.t("imageAnalysisStatus.badgeReady")}}function Oe(t){if(!t)return l.t("imageAnalysisSection.noModelConfigured",{defaultValue:"No model configured."});switch(t.state){case"needs_auth":return t.authReason||l.t("imageAnalysisSection.authenticateToRoute",{defaultValue:"Authenticate to route here."});case"needs_proxy":return t.proxyReason||l.t("imageAnalysisSection.proxyUnavailable",{defaultValue:"Proxy unavailable."});case"starts_on_launch":return l.t("imageAnalysisSection.authReadyLaunchesLocally",{defaultValue:"Auth ready. Launches locally on demand."});case"review":return l.t("imageAnalysisSection.needsManualReview",{defaultValue:"Needs manual review."});case"ready":return null}}function ze(t){switch(t){case"profile-backend":return l.t("imageAnalysisSection.explicitMapping",{defaultValue:"Explicit mapping"});case"fallback-backend":return l.t("imageAnalysisSection.fallbackBackend",{defaultValue:"Fallback backend"});case"cliproxy-provider":return l.t("imageAnalysisSection.providerMatch",{defaultValue:"Provider match"});case"cliproxy-bridge":return l.t("imageAnalysisSection.bridgeMatch",{defaultValue:"Bridge match"});case"native-compatible":return l.t("imageAnalysisSection.nativePath",{defaultValue:"Native path"});case"copilot-alias":return l.t("imageAnalysisSection.copilotAlias",{defaultValue:"Copilot alias"});default:return t.replace(/-/g," ")}}function k(t){return"border-border/50 bg-background/40"}function Le(t){switch(t){case"ready":return"bg-[linear-gradient(90deg,rgba(16,185,129,0.08),transparent_18%),linear-gradient(180deg,rgba(255,255,255,0.72),rgba(255,255,255,0.46))] dark:bg-[linear-gradient(90deg,rgba(16,185,129,0.12),transparent_18%),linear-gradient(180deg,rgba(15,23,42,0.82),rgba(15,23,42,0.56))]";case"starts_on_launch":return"bg-[linear-gradient(90deg,rgba(14,165,233,0.08),transparent_18%),linear-gradient(180deg,rgba(255,255,255,0.72),rgba(255,255,255,0.46))] dark:bg-[linear-gradient(90deg,rgba(14,165,233,0.12),transparent_18%),linear-gradient(180deg,rgba(15,23,42,0.82),rgba(15,23,42,0.56))]";case"needs_auth":return"bg-[linear-gradient(90deg,rgba(244,63,94,0.08),transparent_18%),linear-gradient(180deg,rgba(255,255,255,0.72),rgba(255,255,255,0.46))] dark:bg-[linear-gradient(90deg,rgba(244,63,94,0.12),transparent_18%),linear-gradient(180deg,rgba(15,23,42,0.82),rgba(15,23,42,0.56))]";case"needs_proxy":return"bg-[linear-gradient(90deg,rgba(245,158,11,0.08),transparent_18%),linear-gradient(180deg,rgba(255,255,255,0.72),rgba(255,255,255,0.46))] dark:bg-[linear-gradient(90deg,rgba(245,158,11,0.12),transparent_18%),linear-gradient(180deg,rgba(15,23,42,0.82),rgba(15,23,42,0.56))]";case"review":default:return"bg-[linear-gradient(180deg,rgba(255,255,255,0.74),rgba(255,255,255,0.5))] dark:bg-[linear-gradient(180deg,rgba(15,23,42,0.8),rgba(15,23,42,0.58))]"}}function Ke(t){switch(t){case"ready":return"from-emerald-500 to-emerald-400/30";case"starts_on_launch":return"from-sky-500 to-sky-400/30";case"needs_auth":return"from-rose-500 to-rose-400/30";case"needs_proxy":return"from-amber-500 to-amber-400/30";case"review":default:return"from-slate-400 to-slate-300/20"}}function Ue(t,r){return r.nativeReadPreference?t%2===0?"bg-emerald-500/[0.06]":"bg-emerald-500/[0.08]":t%2===0?"bg-background/75":"bg-muted/18"}function He(t){const r=[`${t.activeProfileCount} routed`,`${t.nativeProfileCount} native`];return t.mappedProfileCount>0&&r.push(`${t.mappedProfileCount} override${t.mappedProfileCount===1?"":"s"}`),r.join(" · ")}function Je(t){return Object.entries(t).reduce((r,[s,x])=>{const h=x.trim();return r[s]=h||null,r},{})}function W(t){return Object.entries(t).filter(([,r])=>r.trim().length>0).map(([r])=>r)}function qe(t){return t.reduce((r,s)=>{const x=s.profileName.trim();return!x||!s.backendId||(r[x]=s.backendId),r},{})}function pe(t,r){const s=Number.parseInt(t.trim(),10);return Number.isInteger(s)?String(Math.min(600,Math.max(10,s))):r}function T({title:t,description:r,icon:s,meta:x,action:h,children:D,className:c}){return e.jsxs("div",{className:g("relative overflow-hidden rounded-2xl border bg-gradient-to-br from-background via-background to-muted/25 p-4 shadow-sm",c),children:[e.jsx("div",{className:"absolute inset-x-0 top-0 h-px bg-gradient-to-r from-primary/40 via-primary/10 to-transparent"}),e.jsxs("div",{className:"relative space-y-4",children:[e.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-start md:justify-between",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-xl border border-primary/20 bg-primary/10 text-primary",children:s}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("h3",{className:"text-base font-semibold tracking-tight",children:t}),x]}),e.jsx("p",{className:"mt-0.5 text-sm leading-5 text-muted-foreground",children:r})]})]}),h&&e.jsx("div",{className:"shrink-0",children:h})]}),e.jsx("div",{className:"space-y-3",children:D})]})]})}function ra(){const{t}=Ne(),{fetchRawConfig:r}=ke(),[s,x]=o.useState(null),[h,D]=o.useState(!0),[c,Y]=o.useState(!1),[I,N]=o.useState(null),[P,L]=o.useState(null),[E,Q]=o.useState(!1),[B,X]=o.useState(!0),[K,U]=o.useState("60"),[v,R]=o.useState(""),[w,$]=o.useState({}),[p,F]=o.useState([]),S=o.useCallback(a=>{X(a.config.enabled),U(String(a.config.timeout)),R(a.config.fallbackBackend??""),$(a.catalog.knownBackends.reduce((n,i)=>(n[i]=a.config.providerModels[i]??"",n),{})),F(Ie(a.config.profileBackends))},[]),H=o.useCallback(async()=>{try{D(!0),N(null);const a=await re.imageAnalysis.get();if(!De(a))throw new Error("Image settings returned an unexpected response. Restart the dashboard server so the new API route is available.");x(a),S(a)}catch(a){N(a instanceof Error?a.message:"Failed to load image settings.")}finally{D(!1)}},[S]);o.useEffect(()=>{H(),r()},[H,r]),o.useEffect(()=>{if(!P)return;const a=window.setTimeout(()=>L(null),2500);return()=>window.clearTimeout(a)},[P]),o.useEffect(()=>{s&&Object.keys(s.config.profileBackends).length>0&&Q(!0)},[s]);const u=o.useMemo(()=>W(w),[w]),Z=o.useMemo(()=>{if(!s)return[];const a=s.catalog.knownBackends.filter(i=>u.includes(i)),n=s.catalog.knownBackends.filter(i=>!u.includes(i));return[...a,...n]},[u,s]),O=o.useMemo(()=>s?.profiles.filter(a=>a.nativeReadPreference)??[],[s]);o.useEffect(()=>{if(u.length===0){R("");return}u.includes(v)||R(u[0])},[u,v]);const _=o.useCallback(async a=>{if(!s)return!1;const n=a?.enabled??B,i=a?.providerModels??w,d=W(i),b=pe(a?.timeout??K,String(s.config.timeout)),y=a?.fallbackBackend??v,A=d.length===0?"":d.includes(y)?y:d[0],f=a?.mappingDrafts??p,V={enabled:n,timeout:b,fallbackBackend:A,providerModels:Je(i),profileBackends:qe(f)},je={enabled:s.config.enabled,timeout:String(s.config.timeout),fallbackBackend:s.config.fallbackBackend??"",providerModels:s.catalog.knownBackends.reduce((j,te)=>(j[te]=s.config.providerModels[te]??null,j),{}),profileBackends:s.config.profileBackends};if(JSON.stringify(V)===JSON.stringify(je))return!0;if(n&&d.length===0)return N("Keep at least one provider model configured, or disable Image globally."),S(s),!1;try{Y(!0),N(null);const j=await re.imageAnalysis.update({enabled:n,timeout:Number.parseInt(b,10),fallbackBackend:A||null,providerModels:V.providerModels,profileBackends:V.profileBackends});return x(j),S(j),L(t("commonToast.settingsSaved")),await r(),!0}catch(j){return N(j instanceof Error?j.message:"Failed to save image settings."),S(s),!1}finally{Y(!1)}},[s,B,v,r,S,p,w,t,K]),ee=async()=>{h||c||(L(null),await Promise.all([H(),r()]))},be=async a=>{if(!c){if(a&&u.length===0){N("Keep at least one provider model configured, or disable Image globally.");return}X(a),await _({enabled:a})}},fe=async a=>{if(!s||c)return;const n=pe(a,String(s.config.timeout));U(n),await _({timeout:n})},he=async a=>{c||(R(a),await _({fallbackBackend:a}))},ae=async(a,n)=>{if(!s||c)return;const i=n.trim(),d={...w,[a]:i},b=W(d);if(B&&b.length===0){N("Disable Image first or keep one backend configured."),$(A=>({...A,[a]:s.config.providerModels[a]??""}));return}const y=b.length===0?"":b.includes(v)?v:b[0];$(d),R(y),await _({providerModels:d,fallbackBackend:y})},ve=(a,n)=>{F(i=>i.map(d=>d.id===a?{...d,...n}:d))},J=async a=>{c||(F(a),await _({mappingDrafts:a}))},ye=p.filter(a=>a.profileName.trim()&&a.backendId).length;return h?e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsxs("div",{className:"flex items-center gap-3 text-muted-foreground",children:[e.jsx(G,{className:"w-5 h-5 animate-spin"}),e.jsx("span",{children:t("settingsPage.imageAnalysisSection.loading")})]})}):s?e.jsxs("div",{className:"relative flex min-h-0 flex-1 flex-col",children:[e.jsxs("div",{className:`absolute left-5 right-5 top-20 z-10 transition-all duration-200 ease-out ${I||P?"translate-y-0 opacity-100":"pointer-events-none -translate-y-2 opacity-0"}`,children:[I&&e.jsxs(se,{variant:"destructive",className:"py-2 shadow-lg",children:[e.jsx(ce,{className:"h-4 w-4"}),e.jsx(ne,{children:I})]}),P&&e.jsxs("div",{className:"flex items-center gap-2 rounded-md border border-green-200 bg-green-50 px-3 py-2 text-green-700 shadow-lg dark:border-green-900/50 dark:bg-green-900/90 dark:text-green-300",children:[e.jsx(Ae,{className:"h-4 w-4 shrink-0"}),e.jsx("span",{className:"text-sm font-medium",children:P})]})]}),e.jsx(we,{className:"min-h-0 flex-1",children:e.jsxs("div",{className:"space-y-6 p-5",children:[e.jsxs("div",{className:"relative overflow-hidden rounded-2xl border bg-gradient-to-br from-background via-background to-muted/30 p-4 shadow-sm",children:[e.jsx("div",{className:"absolute inset-x-0 top-0 h-px bg-gradient-to-r from-primary/70 via-primary/20 to-transparent"}),e.jsx("div",{className:"pointer-events-none absolute inset-0 opacity-[0.035]",style:{backgroundImage:"repeating-linear-gradient(0deg, transparent, transparent 2px, currentColor 2px, currentColor 3px)"}}),e.jsxs("div",{className:"relative",children:[e.jsxs("div",{className:"mb-3 flex items-center justify-between gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"inline-flex h-8 w-8 items-center justify-center rounded-xl border border-primary/20 bg-primary/8 text-primary",children:e.jsx(me,{className:"h-4 w-4"})}),e.jsx("p",{className:"text-sm font-semibold tracking-tight",children:t("settingsPage.imageAnalysisSection.title")})]}),e.jsxs("div",{className:"mt-1 flex flex-wrap items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(m,{className:g("border",Ee(s.summary.state)),children:s.summary.title}),e.jsx("span",{children:He(s.summary)})]})]}),e.jsx(C,{variant:"ghost",size:"sm",onClick:ee,disabled:h||c,"aria-label":"Refresh",title:"Refresh",children:e.jsx(G,{className:`h-4 w-4 ${h?"animate-spin":""}`})})]}),e.jsxs("div",{className:"mt-3 grid gap-2 sm:grid-cols-2",children:[e.jsxs("div",{className:"rounded-[18px] border bg-background/72 px-3 py-2.5 backdrop-blur-sm",children:[e.jsx("div",{className:"text-[10px] font-medium uppercase tracking-[0.14em] text-muted-foreground",children:"Active routes"}),e.jsx("div",{className:"mt-1.5 text-xl font-semibold text-foreground",children:s.summary.activeProfileCount}),e.jsx("p",{className:"mt-0.5 text-[11px] text-muted-foreground",children:"Current target path"})]}),e.jsxs("div",{className:"rounded-[18px] border bg-background/72 px-3 py-2.5 backdrop-blur-sm",children:[e.jsx("div",{className:"text-[10px] font-medium uppercase tracking-[0.14em] text-muted-foreground",children:"Native path"}),e.jsx("div",{className:"mt-1.5 text-xl font-semibold text-foreground",children:s.summary.nativeProfileCount}),e.jsx("p",{className:"mt-0.5 text-[11px] text-muted-foreground",children:"Skip transformer"})]})]})]})]}),e.jsxs(T,{tone:"amber",eyebrow:"Control deck",title:"Core setup",description:t("settingsPage.imageAnalysisSection.description"),icon:e.jsx(Ce,{className:"h-4 w-4"}),meta:e.jsxs(m,{variant:"outline",className:"border-amber-500/25 bg-amber-500/10 text-[10px]",children:[u.length," configured"]}),children:[e.jsxs("div",{className:"grid gap-2 lg:grid-cols-3",children:[e.jsxs("div",{className:g("rounded-[18px] border px-3.5 py-3 shadow-sm",k()),children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-[0.14em] text-amber-700/75 dark:text-amber-300/75",children:"Enabled"}),e.jsxs("div",{className:"mt-2.5 flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx("div",{className:"text-sm font-semibold text-foreground",children:B?"Transformer on":"Transformer off"}),e.jsx("p",{className:"text-[11px] leading-4 text-muted-foreground",children:"Profile flags stay untouched."})]}),e.jsx(Se,{checked:B,onCheckedChange:a=>{be(a)},disabled:c})]})]}),e.jsxs("div",{className:g("rounded-[18px] border px-3.5 py-3 shadow-sm",k()),children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-[0.14em] text-amber-700/75 dark:text-amber-300/75",children:"Timeout"}),e.jsxs("div",{className:"mt-2.5 flex items-center gap-2",children:[e.jsx(q,{value:K,onChange:a=>U(a.target.value),inputMode:"numeric",className:"h-10 border-amber-500/15 bg-background/90 text-base",disabled:c,onBlur:a=>{fe(a.currentTarget.value)},onKeyDown:a=>{a.key==="Enter"&&a.currentTarget.blur()}}),e.jsx("span",{className:"text-xs font-medium text-muted-foreground",children:"sec"})]}),e.jsx("p",{className:"mt-1.5 text-[11px] leading-4 text-muted-foreground",children:"Keeps large reads from hanging."})]}),e.jsxs("div",{className:g("rounded-[18px] border px-3.5 py-3 shadow-sm",k()),children:[e.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-[0.14em] text-amber-700/75 dark:text-amber-300/75",children:"Fallback backend"}),e.jsx("div",{className:"mt-2.5",children:e.jsxs(ie,{value:v||M,onValueChange:a=>{he(a===M?"":a)},disabled:c,children:[e.jsx(le,{className:"h-10 border-amber-500/15 bg-background/90",children:e.jsx(de,{placeholder:t("settingsPage.thinkingSection.configureModelFirst")})}),e.jsx(oe,{children:u.length===0?e.jsx(z,{value:M,children:t("settingsPage.thinkingSection.configureModelFirst")}):u.map(a=>e.jsx(z,{value:a,children:a},a))})]})}),e.jsx("p",{className:"mt-1.5 text-[11px] leading-4 text-muted-foreground",children:"Used when no direct route exists."})]})]}),e.jsxs("div",{className:"mt-3 flex flex-wrap gap-1.5",children:[e.jsxs("div",{className:"rounded-full border border-amber-500/15 bg-background/80 px-2.5 py-1 text-[11px] text-muted-foreground",children:[ye," overrides"]}),e.jsxs("div",{className:"rounded-full border border-amber-500/15 bg-background/80 px-2.5 py-1 text-[11px] text-muted-foreground",children:[O.length," native"]}),e.jsxs("div",{className:"rounded-full border border-amber-500/15 bg-background/80 px-2.5 py-1 text-[11px] text-muted-foreground",children:[v||"No fallback"," fallback"]})]})]}),e.jsx(T,{tone:"cyan",eyebrow:"Route inventory",title:"Backend routes",description:"Model entry plus route health.",icon:e.jsx(Me,{className:"h-4 w-4"}),meta:e.jsxs(m,{variant:"outline",className:"border-cyan-500/25 bg-cyan-500/10 text-[10px]",children:[Z.length," backends"]}),children:e.jsx("div",{className:"overflow-hidden rounded-[20px] border border-cyan-500/12 bg-background/65 shadow-sm backdrop-blur-sm",children:Z.map((a,n)=>{const i=s.backends.find(f=>f.backendId===a),d=i?.displayName||a,b=w[a]??"",y=Oe(i),A=b?[`${i?.profilesUsing??0} active`,i?.authReadiness==="missing"?"auth missing":i?.proxyReadiness==="stopped"?"starts on launch":null].filter(Boolean).join(" · "):"No model configured.";return e.jsxs("div",{className:g("relative px-3 py-3 md:px-4",n>0&&"border-t border-cyan-500/10",Le(i?.state)),children:[e.jsx("div",{className:g("absolute bottom-3 left-0 top-3 w-1 rounded-r-full bg-gradient-to-b",Ke(i?.state))}),e.jsxs("div",{className:"pl-2.5",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("h4",{className:"text-sm font-semibold text-foreground",children:d}),e.jsx(m,{variant:"outline",className:"font-mono text-[10px]",children:a}),i?.profilesUsing?e.jsxs(m,{variant:"outline",className:"border-cyan-500/20 bg-cyan-500/10 text-[10px]",children:[i.profilesUsing," active"]}):null]}),e.jsx("p",{className:"mt-0.5 text-[11px] leading-4 text-muted-foreground",children:A})]}),e.jsx(m,{className:g("border",i?$e(i.state):"border-border/80 bg-background/85 text-muted-foreground"),children:i?Fe(i.state):"Inactive"})]}),e.jsxs("div",{className:"mt-2 flex flex-col gap-2 sm:flex-row",children:[e.jsx(q,{className:"h-10 flex-1 border-cyan-500/15 bg-background/88 text-base",placeholder:t("imageAnalysisSection.setModel",{defaultValue:"Set model"}),value:b,disabled:c,onChange:f=>$(V=>({...V,[a]:f.target.value})),onBlur:f=>{ae(a,f.currentTarget.value)},onKeyDown:f=>{f.key==="Enter"&&f.currentTarget.blur()}}),b.trim().length>0&&e.jsx(C,{type:"button",variant:"outline",size:"sm",className:"h-10 sm:self-stretch",disabled:c,onClick:()=>{ae(a,"")},children:t("common.clear",{defaultValue:"Clear"})})]}),y&&e.jsx("p",{className:"mt-1.5 text-[11px] leading-4 text-muted-foreground",children:y})]})]},a)})})}),e.jsx(T,{tone:"emerald",eyebrow:"Native path",title:"Native reading",description:"Profiles that skip the transformer.",icon:e.jsx(Pe,{className:"h-4 w-4"}),meta:e.jsxs(m,{variant:"outline",children:[O.length," profiles"]}),children:O.length===0?e.jsx("div",{className:g("rounded-[18px] border border-dashed px-3.5 py-3.5 text-sm text-muted-foreground",k()),children:t("imageAnalysisSection.noProfilesPreferNative",{defaultValue:"No profiles prefer native reading yet."})}):e.jsx("div",{className:"grid gap-2 md:grid-cols-2",children:O.map(a=>e.jsx("div",{className:g("rounded-[18px] border px-3.5 py-3 shadow-sm",k()),children:e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("div",{className:"truncate text-sm font-semibold text-foreground",children:a.name}),e.jsx(m,{variant:"outline",className:"text-[10px]",children:a.kind==="variant"?t("cliproxyPage.variant"):t("apiProfiles.title")}),e.jsx(m,{variant:"outline",className:"text-[10px]",children:a.nativeImageCapable?t("imageAnalysisStatus.capabilityVerified"):t("imageAnalysisSection.review",{defaultValue:"Review"})})]}),e.jsxs("div",{className:"mt-1 text-[11px] leading-4 text-muted-foreground",children:[a.profileModel||t("imageAnalysisSection.modelNotDetected",{defaultValue:"Model not detected"})," ","·"," ",a.nativeImageReason||t("imageAnalysisSection.nativeReadPreferred",{defaultValue:"Native read preferred."})]})]}),e.jsx(m,{className:g("border",xe(a.currentTargetMode)),children:ge(a.currentTargetMode)})]})},`native-${a.kind}-${a.name}`))})}),e.jsxs(T,{tone:"slate",eyebrow:"Override lab",title:"Profile routing",description:"Only for explicit route overrides.",icon:e.jsx(Te,{className:"h-4 w-4"}),meta:e.jsx(m,{variant:"outline",className:"border-amber-500/25 bg-amber-500/10 text-[10px] text-amber-800 dark:text-amber-200",children:"Advanced"}),action:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(C,{type:"button",variant:"outline",size:"sm",onClick:()=>Q(a=>!a),children:[E?e.jsx(Re,{className:"mr-1 h-4 w-4"}):e.jsx(_e,{className:"mr-1 h-4 w-4"}),E?t("common.hide",{defaultValue:"Hide"}):t("common.show",{defaultValue:"Show"})]}),E&&e.jsxs(C,{type:"button",variant:"outline",size:"sm",onClick:()=>F(a=>[...a,{id:`mapping-${Date.now()}`,profileName:"",backendId:u[0]??""}]),disabled:u.length===0||c,children:[e.jsx(Ve,{className:"mr-1 h-4 w-4"}),t("imageAnalysisSection.addMapping",{defaultValue:"Add mapping"})]})]}),className:"border-dashed",children:[e.jsx("datalist",{id:"image-profile-suggestions",children:s.catalog.profileNames.map(a=>e.jsx("option",{value:a},a))}),E?e.jsx("div",{className:"space-y-2",children:p.length===0?e.jsx("div",{className:g("rounded-[18px] border border-dashed px-3.5 py-3.5 text-sm text-muted-foreground",k()),children:"No explicit overrides saved."}):e.jsx("div",{className:"space-y-2",children:p.map(a=>e.jsxs("div",{className:"rounded-[18px] border border-slate-400/20 bg-[linear-gradient(180deg,rgba(255,255,255,0.72),rgba(248,250,252,0.52))] p-3 shadow-sm dark:bg-[linear-gradient(180deg,rgba(15,23,42,0.84),rgba(15,23,42,0.56))]",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center gap-2 text-[11px] leading-4 text-muted-foreground",children:[e.jsx("span",{children:t("imageAnalysisSection.directOverride",{defaultValue:"Direct override"})}),!(a.profileName.trim()&&a.backendId)&&e.jsx(m,{variant:"outline",className:"text-[10px]",children:"Draft"})]}),e.jsxs(C,{type:"button",variant:"ghost",size:"sm",disabled:c,onClick:()=>{const n=p.filter(i=>i.id!==a.id);J(n)},children:[e.jsx(Be,{className:"mr-1 h-4 w-4"}),t("common.remove",{defaultValue:"Remove"})]})]}),e.jsxs("div",{className:"mt-2 grid gap-2 sm:grid-cols-2",children:[e.jsx(q,{value:a.profileName,list:"image-profile-suggestions",disabled:c,placeholder:t("imageAnalysisSection.profileOrVariantName",{defaultValue:"Profile or variant name"}),className:"h-10 border-slate-400/15 bg-background/88 text-base",onChange:n=>{ve(a.id,{profileName:n.target.value})},onBlur:n=>{const i=p.map(d=>d.id===a.id?{...d,profileName:n.currentTarget.value.trim()}:d);J(i)},onKeyDown:n=>{n.key==="Enter"&&n.currentTarget.blur()}}),e.jsxs(ie,{value:a.backendId||M,disabled:c,onValueChange:n=>{const i=p.map(d=>d.id===a.id?{...d,backendId:n===M?"":n}:d);J(i)},children:[e.jsx(le,{className:"h-10 border-slate-400/15 bg-background/88",children:e.jsx(de,{placeholder:t("settingsPage.thinkingSection.configureModelFirst")})}),e.jsx(oe,{children:u.length===0?e.jsx(z,{value:M,children:t("settingsPage.thinkingSection.configureModelFirst")}):u.map(n=>e.jsx(z,{value:n,children:n},n))})]})]})]},a.id))})}):e.jsxs("div",{className:g("rounded-[18px] border border-dashed px-3.5 py-3 text-sm text-muted-foreground",k()),children:["Hidden by default.",p.length>0?` ${p.length} override${p.length===1?"":"s"} saved.`:" No overrides saved."]})]}),e.jsx(T,{tone:"slate",eyebrow:"Audit view",title:"Coverage",description:"Read-only routing ledger for the current path.",icon:e.jsx(me,{className:"h-4 w-4"}),meta:e.jsxs(m,{variant:"outline",children:[s.profiles.length," profiles"]}),children:e.jsx("div",{className:"overflow-hidden rounded-[20px] border border-slate-400/15 bg-background/75 shadow-sm backdrop-blur-sm",children:s.profiles.map((a,n)=>e.jsxs("div",{className:g("grid gap-2 px-3.5 py-2.5 md:grid-cols-[minmax(0,1fr)_auto] md:items-center",n>0&&"border-t border-slate-400/12",Ue(n,a)),children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("div",{className:"truncate text-sm font-semibold text-foreground",children:a.name}),e.jsx(m,{variant:"outline",className:"text-[10px]",children:a.kind==="variant"?t("cliproxyPage.variant"):t("apiProfiles.title")}),e.jsx(m,{variant:"outline",className:"font-mono text-[10px] uppercase",children:a.target}),a.nativeReadPreference&&e.jsx(m,{variant:"outline",className:"border-emerald-500/20 bg-emerald-500/10 text-[10px]",children:"Native"})]}),e.jsxs("div",{className:"mt-0.5 text-[11px] leading-4 text-muted-foreground",children:[a.backendDisplayName||a.profileModel||"Native file access"," ·"," ",ze(a.resolutionSource)]})]}),e.jsxs("div",{className:"flex items-center gap-2 md:justify-end",children:[a.profileModel&&e.jsx(m,{variant:"outline",className:"font-mono text-[10px]",children:a.profileModel}),e.jsx(m,{className:g("border",xe(a.currentTargetMode)),children:ge(a.currentTargetMode)})]})]},`${a.kind}-${a.name}`))})})]})})]}):e.jsxs("div",{className:"p-5",children:[e.jsxs(se,{variant:"destructive",children:[e.jsx(ce,{className:"h-4 w-4"}),e.jsx(ne,{children:I??t("settingsPage.imageAnalysisSection.description")})]}),e.jsx("div",{className:"mt-4",children:e.jsxs(C,{variant:"outline",size:"sm",onClick:ee,children:[e.jsx(G,{className:"mr-1 h-4 w-4"}),t("sharedPage.retry")]})})]})}export{ra as default};
@@ -1 +1 @@
1
- import{j as e}from"./radix-ui-nu4wz29m.js";import{r as n}from"./react-vendor-Bjx91N7w.js";import{by as Ue,bz as ze,Y as R,a as oe,I as B,aI as M,r as We,s as Ye,t as Xe,v as Ge,w as ye,d as z,bA as qe,bB as Je,bC as Qe,bD as Ze,b6 as he,bE as es,bF as ss,bi as H,bk as V,n as ts}from"./index-Bs28kNJN.js";import{C as W}from"./default-ports-1QQSffYX.js";import{bd as fe,R as ae,h as rs,x as je,W as as,w as os,aA as ns,b4 as is,T as re,aH as ls,p as cs,be as ds}from"./icons-DzKUh8vG.js";import{P as xs}from"./proxy-status-widget-50UIM6S8.js";import{R as U}from"./antigravity-responsibility-constants-Bvh4Ybz0.js";import{t as T}from"./notifications-B4_o8bcr.js";import"./tanstack-bhJxV1h8.js";import"./utils-CzKF5WmX.js";import"./form-utils-CuHzLhJZ.js";import"./code-highlight-D4E79GKQ.js";import"./alert-dialog-ClPYGzV3.js";function ms(){const{state:s}=Ue(),t=ze(),[g,o]=n.useState(null),[u,f]=n.useState(null),[p,j]=n.useState(null),[y,C]=n.useState(null),[S,P]=n.useState(null),w=n.useCallback(async()=>{try{t.setProxyLoading(!0),t.setProxyError(null);const d=await R.cliproxyServer.get();t.setProxyConfig(d)}catch(d){t.setProxyError(d.message)}finally{t.setProxyLoading(!1)}},[t]),A=n.useCallback(async d=>{const x=s.proxyConfig;if(!x)return;const h={remote:{...x.remote,...d.remote},fallback:{...x.fallback,...d.fallback},local:{...x.local,...d.local}};t.setProxyConfig(h),t.setProxyTestResult(null);try{t.setProxySaving(!0),t.setProxyError(null);const a=await R.cliproxyServer.update(d);t.setProxyConfig(a),t.setProxySuccess(!0),setTimeout(()=>t.setProxySuccess(!1),1500)}catch(a){t.setProxyConfig(x),t.setProxyError(a.message)}finally{t.setProxySaving(!1)}},[s.proxyConfig,t]),E=n.useCallback(async d=>{const{host:x,port:h,protocol:a,authToken:c}=d;if(!x){t.setProxyError("Host is required");return}try{t.setProxyTesting(!0),t.setProxyError(null),t.setProxyTestResult(null);const k=h?parseInt(h,10):void 0,l=await R.cliproxyServer.test({host:x,port:k||void 0,protocol:a,authToken:c||void 0});t.setProxyTestResult(l)}catch(k){t.setProxyError(k.message)}finally{t.setProxyTesting(!1)}},[t]);return{config:s.proxyConfig,loading:s.proxyLoading,saving:s.proxySaving,error:s.proxyError,success:s.proxySuccess,testResult:s.proxyTestResult,testing:s.proxyTesting,editedHost:g,setEditedHost:o,editedPort:u,setEditedPort:f,editedAuthToken:p,setEditedAuthToken:j,editedManagementKey:y,setEditedManagementKey:C,editedLocalPort:S,setEditedLocalPort:P,fetchConfig:w,saveConfig:A,testConnection:E}}function gs({config:s,saving:t,displayLocalPort:g,setEditedLocalPort:o,onSaveLocalPort:u,onSaveConfig:f}){const{t:p}=oe(),j=s.local;return e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-base font-medium",children:p("settingsProxy.localProxy")}),e.jsxs("div",{className:"space-y-3 p-4 rounded-lg border bg-muted/30",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("label",{className:"text-sm text-muted-foreground",children:p("settingsProxy.port")}),e.jsx(B,{type:"text",inputMode:"numeric",value:g,onChange:y=>o(y.target.value.replace(/\D/g,"")),onBlur:u,placeholder:`${W}`,className:"font-mono max-w-32",disabled:t})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-sm",children:p("settingsProxy.autoStart")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:p("settingsProxy.localAutoStartDesc")})]}),e.jsx(M,{checked:j.auto_start??!0,onCheckedChange:y=>f({local:{...j,auto_start:y}}),disabled:t})]})]})]})}function us({config:s,saving:t,testing:g,testResult:o,displayHost:u,displayPort:f,displayAuthToken:p,displayManagementKey:j,setEditedHost:y,setEditedPort:C,setEditedAuthToken:S,setEditedManagementKey:P,onSaveHost:w,onSavePort:A,onSaveAuthToken:E,onSaveManagementKey:d,onSaveConfig:x,onTestConnection:h}){const{t:a}=oe(),c=s.remote,k=l=>l==="https"?443:W;return e.jsxs("div",{className:"space-y-4 p-4 rounded-lg border bg-muted/30",children:[e.jsxs("h4",{className:"text-sm font-medium flex items-center gap-2",children:[e.jsx(fe,{className:"w-4 h-4"}),a("settingsProxy.remoteConfigTitle")]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-sm text-muted-foreground",children:a("settingsProxy.host")}),e.jsx(B,{value:u,onChange:l=>y(l.target.value),onBlur:w,placeholder:a("settingsProxy.hostPlaceholder"),className:"font-mono",disabled:t})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("label",{className:"text-sm text-muted-foreground",children:[a("settingsProxy.port")," ",e.jsxs("span",{className:"text-xs opacity-70",children:["(",a("settingsProxy.defaultPort",{value:k(s.remote.protocol||"http")}),")"]})]}),e.jsx(B,{type:"text",inputMode:"numeric",value:f,onChange:l=>C(l.target.value.replace(/\D/g,"")),onBlur:A,placeholder:a("settingsProxy.portPlaceholder",{value:k(s.remote.protocol||"http")}),className:"font-mono",disabled:t})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-sm text-muted-foreground",children:a("settingsProxy.protocol")}),e.jsxs(We,{value:s.remote.protocol||"http",onValueChange:l=>x({remote:{...c,protocol:l}}),disabled:t,children:[e.jsx(Ye,{children:e.jsx(Xe,{})}),e.jsxs(Ge,{children:[e.jsx(ye,{value:"http",children:a("settingsProxy.http")}),e.jsx(ye,{value:"https",children:a("settingsProxy.https")})]})]})]})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-sm text-muted-foreground",children:a("settingsProxy.apiKeyOptional")}),e.jsx(B,{type:"password",value:p,onChange:l=>S(l.target.value),onBlur:E,placeholder:a("settingsProxy.apiKeyPlaceholder"),className:"font-mono",disabled:t}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("settingsProxy.apiKeyDesc")})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-sm text-muted-foreground",children:a("settingsProxy.managementKeyOptional")}),e.jsx(B,{type:"password",value:j,onChange:l=>P(l.target.value),onBlur:d,placeholder:a("settingsProxy.managementKeyPlaceholder"),className:"font-mono",disabled:t}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("settingsProxy.managementKeyDesc")})]}),e.jsxs("div",{className:"space-y-3 pt-2",children:[e.jsx(z,{onClick:h,disabled:g||!u,variant:"outline",className:"w-full",children:g?e.jsxs(e.Fragment,{children:[e.jsx(ae,{className:"w-4 h-4 mr-2 animate-spin"}),a("settingsProxy.testing")]}):e.jsxs(e.Fragment,{children:[e.jsx(rs,{className:"w-4 h-4 mr-2"}),a("settingsProxy.testConnection")]})}),o&&e.jsx("div",{className:`p-3 rounded-md ${o.reachable?"bg-green-50 border border-green-200 dark:bg-green-900/20 dark:border-green-900/50":"bg-red-50 border border-red-200 dark:bg-red-900/20 dark:border-red-900/50"}`,children:e.jsx("div",{className:"flex items-center gap-2",children:o.reachable?e.jsxs(e.Fragment,{children:[e.jsx(je,{className:"w-4 h-4 text-green-600 dark:text-green-400"}),e.jsx("span",{className:"text-sm font-medium text-green-700 dark:text-green-300",children:a("settingsProxy.connectedLatency",{value:o.latencyMs})})]}):e.jsxs(e.Fragment,{children:[e.jsx(as,{className:"w-4 h-4 text-red-600 dark:text-red-400"}),e.jsx("span",{className:"text-sm font-medium text-red-700 dark:text-red-300",children:o.error||a("settingsProxy.connectionFailed")})]})})})]})]})}const be="ccs_debug_mode";function ps(s){return s.trim().replace(/\s+/g," ").toUpperCase()}function Ts(){const{t:s}=oe(),{config:t,loading:g,saving:o,error:u,success:f,testResult:p,testing:j,editedHost:y,setEditedHost:C,editedPort:S,setEditedPort:P,editedAuthToken:w,setEditedAuthToken:A,editedManagementKey:E,setEditedManagementKey:d,editedLocalPort:x,setEditedLocalPort:h,fetchConfig:a,saveConfig:c,testConnection:k}=ms(),{fetchRawConfig:l}=qe(),[_,Pe]=n.useState(()=>{try{return localStorage.getItem(be)==="true"}catch{return!1}}),[ke,Y]=n.useState(!1),[ve,ne]=n.useState(!0),[b,ie]=n.useState(!1),[Ne,L]=n.useState(!1),[le,I]=n.useState(""),K=n.useRef(!1),X=ps(le)===U,Ce=r=>{Pe(r);try{localStorage.setItem(be,String(r))}catch{}},G=n.useCallback(async()=>{try{ne(!0);const r=await fetch("/api/settings/auth/antigravity-risk");if(!r.ok)throw new Error(s("settingsProxy.failedLoadAgyMode"));const i=await r.json();Y(i.antigravityAckBypass===!0)}catch(r){T.error(r instanceof Error?r.message:s("settingsProxy.failedLoadAgyMode")),Y(!1)}finally{ne(!1)}},[s]),O=n.useCallback(async r=>{if(!(K.current||b||o))try{K.current=!0,ie(!0);const i=await fetch("/api/settings/auth/antigravity-risk",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({antigravityAckBypass:r})}),$=await i.json();if(!i.ok)throw new Error($.error||s("settingsProxy.failedUpdateAgyMode"));const Ve=$.antigravityAckBypass===!0,ue=await fetch("/api/settings/auth/antigravity-risk",{cache:"no-store"});if(!ue.ok)throw new Error(s("settingsProxy.failedVerifyAgyMode"));const pe=(await ue.json()).antigravityAckBypass===!0;if(pe!==r)throw new Error(s("settingsProxy.notPersistedAgyMode"));Y(pe&&Ve),L(!1),I(""),T.success(s(r?"settingsProxy.agyModeEnabled":"settingsProxy.agyModeDisabled")),await l()}catch(i){T.error(i instanceof Error?i.message:s("settingsProxy.failedUpdateAgyMode"))}finally{K.current=!1,ie(!1)}},[b,l,o,s]),Se=n.useCallback(r=>{if(!(K.current||b||o)){if(r){L(!0);return}L(!1),I(""),O(!1)}},[b,O,o]),we=n.useCallback(()=>{if(!X){T.error(s("settingsProxy.typePhraseToContinue",{value:U}));return}O(!0)},[X,O,s]),[v,q]=n.useState("original"),[Ae,Ee]=n.useState(!1),J=Je(),{data:Te}=Qe(),ce=Te?.running??!1,Be=Ze.map(he).join(", "),de=es.map(he).join(", "),Q=n.useCallback(async()=>{try{const r=await R.cliproxyServer.getBackend();q(r.backend)}catch(r){console.error("[Proxy] Failed to fetch backend:",r)}},[]),Z=n.useCallback(async()=>{try{const i=(await R.cliproxy.list()).variants.some($=>ss($));Ee(i)}catch(r){console.error("[Proxy] Failed to check variants:",r)}},[]),xe=r=>{const i=v;q(r),J.mutate({backend:r},{onError:()=>{q(i)}})};if(n.useEffect(()=>{if(_&&t){const r={...t,remote:{...t.remote,auth_token:t.remote.auth_token?"[REDACTED]":void 0,management_key:t.remote.management_key?"[REDACTED]":void 0}};console.log("[CCS Debug] Debug mode enabled - proxy config:",r)}},[_,t]),n.useEffect(()=>{a(),G(),l(),Q(),Z()},[a,G,l,Q,Z]),g||!t)return e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsxs("div",{className:"flex items-center gap-3 text-muted-foreground",children:[e.jsx(ae,{className:"w-5 h-5 animate-spin"}),e.jsx("span",{children:s("settings.loading")})]})});const m=t.remote.enabled??!1,F=!m&&ce,N=t.remote,D=t.fallback,De=t.remote.host??"",Me=t.remote.port!==void 0?t.remote.port.toString():"",Re=t.remote.auth_token??"",_e=t.remote.management_key??"",Le=(t.local.port??W).toString(),ee=y??De,se=S??Me,te=w??Re,me=E??_e,ge=x??Le,Ie=()=>{const r=y??ee;r!==t.remote.host&&c({remote:{...N,host:r}}),C(null)},Ke=()=>{const r=(S??se).trim();if(r===""){t.remote.port!==void 0&&c({remote:{...N,port:void 0}}),P(null);return}const i=Number(r);if(!Number.isInteger(i)||i<1||i>65535){T.error(s("settingsProxy.invalidPortOrEmpty")),P(null);return}i!==t.remote.port&&c({remote:{...N,port:i}}),P(null)},Oe=()=>{const r=w??te;r!==t.remote.auth_token&&c({remote:{...N,auth_token:r}}),A(null)},Fe=()=>{const r=E??me;r!==t.remote.management_key&&c({remote:{...N,management_key:r||void 0}}),d(null)},$e=()=>{const r=(x??ge).trim(),i=r===""?W:Number(r);if(!Number.isInteger(i)||i<1||i>65535){T.error(s("settingsProxy.invalidLocalPort")),h(null);return}i!==t.local.port&&c({local:{...t.local,port:i}}),h(null)},He=()=>{k({host:ee,port:se,protocol:t.remote.protocol||"http",authToken:te})};return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:`absolute left-5 right-5 top-20 z-10 transition-all duration-200 ease-out ${u||f?"opacity-100 translate-y-0":"opacity-0 -translate-y-2 pointer-events-none"}`,children:[u&&e.jsxs(H,{variant:"destructive",className:"py-2 shadow-lg",children:[e.jsx(os,{className:"h-4 w-4"}),e.jsx(V,{children:u})]}),f&&e.jsxs("div",{className:"flex items-center gap-2 px-3 py-2 rounded-md border border-green-200 bg-green-50 text-green-700 shadow-lg dark:border-green-900/50 dark:bg-green-900/90 dark:text-green-300",children:[e.jsx(je,{className:"h-4 w-4 shrink-0"}),e.jsx("span",{className:"text-sm font-medium",children:s("settings.saved")})]})]}),e.jsx(ts,{className:"flex-1",children:e.jsxs("div",{className:"p-5 space-y-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:s("settingsProxy.description",{backend:s(v==="plus"?"settingsProxy.backendPlus":"settingsProxy.backend")})}),!m&&e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-base font-medium",children:s("settingsProxy.instanceStatus")}),e.jsx(xs,{})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-base font-medium",children:s("settingsProxy.connectionMode")}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("button",{onClick:()=>c({remote:{...N,enabled:!1}}),disabled:o,className:`p-4 rounded-lg border-2 text-left transition-all ${m?"border-border hover:border-muted-foreground/50":"border-primary bg-primary/5"}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx(ns,{className:`w-5 h-5 ${m?"text-muted-foreground":"text-primary"}`}),e.jsx("span",{className:"font-medium",children:s("settingsProxy.local")})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("settingsProxy.localDesc",{backend:s(v==="plus"?"settingsProxy.backendPlus":"settingsProxy.backend")})})]}),e.jsxs("button",{onClick:()=>c({remote:{...N,enabled:!0}}),disabled:o,className:`p-4 rounded-lg border-2 text-left transition-all ${m?"border-primary bg-primary/5":"border-border hover:border-muted-foreground/50"}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx(fe,{className:`w-5 h-5 ${m?"text-primary":"text-muted-foreground"}`}),e.jsx("span",{className:"font-medium",children:s("settingsProxy.remote")})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("settingsProxy.remoteDesc",{backend:s(v==="plus"?"settingsProxy.backendPlus":"settingsProxy.backend")})})]})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("h3",{className:"text-base font-medium flex items-center gap-2",children:[e.jsx(is,{className:"w-4 h-4"}),s("settingsProxy.backendBinary")]}),!m&&ce&&e.jsxs(H,{className:"py-2 border-amber-200 bg-amber-50 dark:border-amber-900/50 dark:bg-amber-900/20 [&>svg]:top-2.5",children:[e.jsx(re,{className:"h-4 w-4 text-amber-600"}),e.jsx(V,{className:"text-amber-700 dark:text-amber-400",children:s("settingsProxy.stopProxyToSwitch")})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("button",{onClick:()=>xe("plus"),disabled:J.isPending||F,className:`p-4 rounded-lg border-2 text-left transition-all ${v==="plus"?"border-primary bg-primary/5":"border-border hover:border-muted-foreground/50"} ${F?"opacity-60 cursor-not-allowed":""}`,children:[e.jsx("div",{className:"flex items-center gap-3 mb-2",children:e.jsx("span",{className:"font-medium",children:s("settingsProxy.backendPlusApi")})}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("settingsProxy.plusDesc")}),e.jsx("p",{className:"mt-2 text-[11px] leading-relaxed text-muted-foreground",children:de})]}),e.jsxs("button",{onClick:()=>xe("original"),disabled:J.isPending||F,className:`p-4 rounded-lg border-2 text-left transition-all ${v==="original"?"border-primary bg-primary/5":"border-border hover:border-muted-foreground/50"} ${F?"opacity-60 cursor-not-allowed":""}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx("span",{className:"font-medium",children:s("settingsProxy.backendApi")}),e.jsx("span",{className:"text-xs px-1.5 py-0.5 rounded bg-green-100 text-green-700 dark:bg-green-900/50 dark:text-green-400",children:s("settingsProxy.default")})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("settingsProxy.originalDesc")}),e.jsx("p",{className:"mt-2 text-[11px] leading-relaxed text-muted-foreground",children:Be})]})]}),v==="plus"&&e.jsxs(H,{className:"py-2 border-amber-200 bg-amber-50 dark:border-amber-900/50 dark:bg-amber-900/20 [&>svg]:top-2.5",children:[e.jsx(re,{className:"h-4 w-4 text-amber-600"}),e.jsx(V,{className:"text-amber-700 dark:text-amber-400",children:s("settingsProxy.plusFallbackNotice")})]}),v==="original"&&Ae&&e.jsxs(H,{variant:"destructive",className:"py-2",children:[e.jsx(re,{className:"h-4 w-4"}),e.jsx(V,{children:s("settingsProxy.variantsIncompatible",{providers:de})})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("h3",{className:"text-base font-medium flex items-center gap-2",children:[e.jsx(ls,{className:"w-4 h-4 text-amber-700 dark:text-amber-300"}),s("settingsProxy.safety")]}),e.jsxs("div",{className:"space-y-3 rounded-lg border border-amber-400/35 bg-amber-50/70 p-4 dark:border-amber-800/60 dark:bg-amber-950/25",children:[e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"font-medium text-sm",children:s("settingsProxy.agyModeTitle")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("settingsProxy.agyModeDesc")})]}),e.jsx(M,{"aria-labelledby":"agy-power-user-mode-label","aria-describedby":"agy-power-user-mode-description",checked:ke,disabled:ve||b||o,onCheckedChange:Se})]}),e.jsx("p",{id:"agy-power-user-mode-description",className:"text-xs text-amber-800/90 dark:text-amber-200/90",children:s("settingsProxy.agyWarning")}),Ne&&e.jsxs("div",{className:"space-y-3 rounded-lg border border-rose-500/40 bg-rose-500/[0.08] p-3.5",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("p",{className:"text-xs font-semibold tracking-wide text-rose-900 dark:text-rose-200",children:s("settingsProxy.finalConfirm")}),e.jsx("p",{className:"text-xs leading-relaxed text-rose-800/95 dark:text-rose-200/90",children:s("settingsProxy.finalConfirmDesc")})]}),e.jsxs("div",{className:"grid gap-2 md:grid-cols-2",children:[e.jsxs("div",{className:"rounded-md border border-rose-400/30 bg-rose-500/10 p-2.5",children:[e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-rose-900 dark:text-rose-200",children:s("settingsProxy.step1")}),e.jsxs("a",{href:"https://github.com/kaitranntt/ccs/issues/509",target:"_blank",rel:"noreferrer",className:"mt-1 inline-flex items-center gap-1.5 text-xs font-medium text-rose-800 underline decoration-rose-500/60 underline-offset-2 transition-colors hover:text-rose-700 dark:text-rose-200",children:[s("settingsProxy.readIssue"),e.jsx(cs,{className:"h-3.5 w-3.5"})]})]}),e.jsxs("div",{className:"rounded-md border border-rose-400/30 bg-rose-500/10 p-2.5",children:[e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-rose-900 dark:text-rose-200",children:s("settingsProxy.step2")}),e.jsxs("p",{className:"mt-1 text-xs text-rose-800/95 dark:text-rose-200/90",children:[s("settingsProxy.typePrefix")," ",e.jsx("code",{className:"rounded bg-background/80 px-1 py-0.5 font-mono",children:U})," ",s("settingsProxy.typeSuffix")]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(B,{value:le,onChange:r=>I(r.target.value),placeholder:U,disabled:b||o,className:"font-mono text-xs","aria-label":s("settingsProxy.typePhraseAria")}),e.jsx("p",{className:"text-[11px] text-rose-800/90 dark:text-rose-200/80",children:s("settingsProxy.exactPhrase")})]}),e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[e.jsx(z,{variant:"outline",size:"sm",onClick:()=>{L(!1),I("")},disabled:b||o,children:s("settingsBackups.cancel")}),e.jsx(z,{size:"sm",variant:"destructive",onClick:we,disabled:!X||b||o,children:s("settingsProxy.enableAgyMode")})]})]}),e.jsx("span",{id:"agy-power-user-mode-label",className:"sr-only",children:s("settingsProxy.toggleAgyMode")})]})]}),m&&e.jsx(us,{config:t,saving:o,testing:j,testResult:p,displayHost:ee,displayPort:se,displayAuthToken:te,displayManagementKey:me,setEditedHost:C,setEditedPort:P,setEditedAuthToken:A,setEditedManagementKey:d,onSaveHost:Ie,onSavePort:Ke,onSaveAuthToken:Oe,onSaveManagementKey:Fe,onSaveConfig:c,onTestConnection:He}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-base font-medium",children:s("settingsProxy.fallbackSettings")}),e.jsxs("div",{className:"space-y-3 p-4 rounded-lg border bg-muted/30",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-sm",children:s("settingsProxy.enableFallback")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("settingsProxy.enableFallbackDesc")})]}),e.jsx(M,{checked:D.enabled??!0,onCheckedChange:r=>c({fallback:{...D,enabled:r}}),disabled:o||!m})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-sm",children:s("settingsProxy.autoStartLocal")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("settingsProxy.autoStartLocalDesc")})]}),e.jsx(M,{checked:D.auto_start??!1,onCheckedChange:r=>c({fallback:{...D,auto_start:r}}),disabled:o||!m||!D.enabled})]})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("h3",{className:"text-base font-medium flex items-center gap-2",children:[e.jsx(ds,{className:"w-4 h-4"}),s("settingsProxy.advanced")]}),e.jsxs("div",{className:"space-y-3 p-4 rounded-lg border bg-muted/30",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-sm",children:s("settingsProxy.debugMode")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("settingsProxy.debugModeDesc")})]}),e.jsx(M,{checked:_,onCheckedChange:Ce,disabled:o})]}),_&&e.jsx("p",{className:"text-xs text-amber-600 dark:text-amber-400 pl-0.5",children:s("settingsProxy.debugModeEnabled")})]})]}),!m&&e.jsx(gs,{config:t,saving:o,displayLocalPort:ge,setEditedLocalPort:h,onSaveLocalPort:$e,onSaveConfig:c})]})}),e.jsx("div",{className:"p-4 border-t bg-background",children:e.jsxs(z,{variant:"outline",size:"sm",onClick:()=>{a(),G(),l(),Q(),Z()},disabled:g||o||b,className:"w-full",children:[e.jsx(ae,{className:`w-4 h-4 mr-2 ${g?"animate-spin":""}`}),s("settings.refresh")]})})]})}export{Ts as default};
1
+ import{j as e}from"./radix-ui-nu4wz29m.js";import{r as n}from"./react-vendor-Bjx91N7w.js";import{by as Ue,bz as ze,Y as R,a as oe,I as B,aI as M,r as We,s as Ye,t as Xe,v as Ge,w as ye,d as z,bA as qe,bB as Je,bC as Qe,bD as Ze,b6 as he,bE as es,bF as ss,bi as H,bk as V,n as ts}from"./index-BB0thfeB.js";import{C as W}from"./default-ports-1QQSffYX.js";import{bd as fe,R as ae,h as rs,x as je,W as as,w as os,aA as ns,b4 as is,T as re,aH as ls,p as cs,be as ds}from"./icons-DzKUh8vG.js";import{P as xs}from"./proxy-status-widget-EU0qf73i.js";import{R as U}from"./antigravity-responsibility-constants-Bvh4Ybz0.js";import{t as T}from"./notifications-B4_o8bcr.js";import"./tanstack-bhJxV1h8.js";import"./utils-CzKF5WmX.js";import"./form-utils-CuHzLhJZ.js";import"./code-highlight-D4E79GKQ.js";import"./alert-dialog-DOkcpleU.js";function ms(){const{state:s}=Ue(),t=ze(),[g,o]=n.useState(null),[u,f]=n.useState(null),[p,j]=n.useState(null),[y,C]=n.useState(null),[S,P]=n.useState(null),w=n.useCallback(async()=>{try{t.setProxyLoading(!0),t.setProxyError(null);const d=await R.cliproxyServer.get();t.setProxyConfig(d)}catch(d){t.setProxyError(d.message)}finally{t.setProxyLoading(!1)}},[t]),A=n.useCallback(async d=>{const x=s.proxyConfig;if(!x)return;const h={remote:{...x.remote,...d.remote},fallback:{...x.fallback,...d.fallback},local:{...x.local,...d.local}};t.setProxyConfig(h),t.setProxyTestResult(null);try{t.setProxySaving(!0),t.setProxyError(null);const a=await R.cliproxyServer.update(d);t.setProxyConfig(a),t.setProxySuccess(!0),setTimeout(()=>t.setProxySuccess(!1),1500)}catch(a){t.setProxyConfig(x),t.setProxyError(a.message)}finally{t.setProxySaving(!1)}},[s.proxyConfig,t]),E=n.useCallback(async d=>{const{host:x,port:h,protocol:a,authToken:c}=d;if(!x){t.setProxyError("Host is required");return}try{t.setProxyTesting(!0),t.setProxyError(null),t.setProxyTestResult(null);const k=h?parseInt(h,10):void 0,l=await R.cliproxyServer.test({host:x,port:k||void 0,protocol:a,authToken:c||void 0});t.setProxyTestResult(l)}catch(k){t.setProxyError(k.message)}finally{t.setProxyTesting(!1)}},[t]);return{config:s.proxyConfig,loading:s.proxyLoading,saving:s.proxySaving,error:s.proxyError,success:s.proxySuccess,testResult:s.proxyTestResult,testing:s.proxyTesting,editedHost:g,setEditedHost:o,editedPort:u,setEditedPort:f,editedAuthToken:p,setEditedAuthToken:j,editedManagementKey:y,setEditedManagementKey:C,editedLocalPort:S,setEditedLocalPort:P,fetchConfig:w,saveConfig:A,testConnection:E}}function gs({config:s,saving:t,displayLocalPort:g,setEditedLocalPort:o,onSaveLocalPort:u,onSaveConfig:f}){const{t:p}=oe(),j=s.local;return e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-base font-medium",children:p("settingsProxy.localProxy")}),e.jsxs("div",{className:"space-y-3 p-4 rounded-lg border bg-muted/30",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("label",{className:"text-sm text-muted-foreground",children:p("settingsProxy.port")}),e.jsx(B,{type:"text",inputMode:"numeric",value:g,onChange:y=>o(y.target.value.replace(/\D/g,"")),onBlur:u,placeholder:`${W}`,className:"font-mono max-w-32",disabled:t})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-sm",children:p("settingsProxy.autoStart")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:p("settingsProxy.localAutoStartDesc")})]}),e.jsx(M,{checked:j.auto_start??!0,onCheckedChange:y=>f({local:{...j,auto_start:y}}),disabled:t})]})]})]})}function us({config:s,saving:t,testing:g,testResult:o,displayHost:u,displayPort:f,displayAuthToken:p,displayManagementKey:j,setEditedHost:y,setEditedPort:C,setEditedAuthToken:S,setEditedManagementKey:P,onSaveHost:w,onSavePort:A,onSaveAuthToken:E,onSaveManagementKey:d,onSaveConfig:x,onTestConnection:h}){const{t:a}=oe(),c=s.remote,k=l=>l==="https"?443:W;return e.jsxs("div",{className:"space-y-4 p-4 rounded-lg border bg-muted/30",children:[e.jsxs("h4",{className:"text-sm font-medium flex items-center gap-2",children:[e.jsx(fe,{className:"w-4 h-4"}),a("settingsProxy.remoteConfigTitle")]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-sm text-muted-foreground",children:a("settingsProxy.host")}),e.jsx(B,{value:u,onChange:l=>y(l.target.value),onBlur:w,placeholder:a("settingsProxy.hostPlaceholder"),className:"font-mono",disabled:t})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("label",{className:"text-sm text-muted-foreground",children:[a("settingsProxy.port")," ",e.jsxs("span",{className:"text-xs opacity-70",children:["(",a("settingsProxy.defaultPort",{value:k(s.remote.protocol||"http")}),")"]})]}),e.jsx(B,{type:"text",inputMode:"numeric",value:f,onChange:l=>C(l.target.value.replace(/\D/g,"")),onBlur:A,placeholder:a("settingsProxy.portPlaceholder",{value:k(s.remote.protocol||"http")}),className:"font-mono",disabled:t})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-sm text-muted-foreground",children:a("settingsProxy.protocol")}),e.jsxs(We,{value:s.remote.protocol||"http",onValueChange:l=>x({remote:{...c,protocol:l}}),disabled:t,children:[e.jsx(Ye,{children:e.jsx(Xe,{})}),e.jsxs(Ge,{children:[e.jsx(ye,{value:"http",children:a("settingsProxy.http")}),e.jsx(ye,{value:"https",children:a("settingsProxy.https")})]})]})]})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-sm text-muted-foreground",children:a("settingsProxy.apiKeyOptional")}),e.jsx(B,{type:"password",value:p,onChange:l=>S(l.target.value),onBlur:E,placeholder:a("settingsProxy.apiKeyPlaceholder"),className:"font-mono",disabled:t}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("settingsProxy.apiKeyDesc")})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("label",{className:"text-sm text-muted-foreground",children:a("settingsProxy.managementKeyOptional")}),e.jsx(B,{type:"password",value:j,onChange:l=>P(l.target.value),onBlur:d,placeholder:a("settingsProxy.managementKeyPlaceholder"),className:"font-mono",disabled:t}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("settingsProxy.managementKeyDesc")})]}),e.jsxs("div",{className:"space-y-3 pt-2",children:[e.jsx(z,{onClick:h,disabled:g||!u,variant:"outline",className:"w-full",children:g?e.jsxs(e.Fragment,{children:[e.jsx(ae,{className:"w-4 h-4 mr-2 animate-spin"}),a("settingsProxy.testing")]}):e.jsxs(e.Fragment,{children:[e.jsx(rs,{className:"w-4 h-4 mr-2"}),a("settingsProxy.testConnection")]})}),o&&e.jsx("div",{className:`p-3 rounded-md ${o.reachable?"bg-green-50 border border-green-200 dark:bg-green-900/20 dark:border-green-900/50":"bg-red-50 border border-red-200 dark:bg-red-900/20 dark:border-red-900/50"}`,children:e.jsx("div",{className:"flex items-center gap-2",children:o.reachable?e.jsxs(e.Fragment,{children:[e.jsx(je,{className:"w-4 h-4 text-green-600 dark:text-green-400"}),e.jsx("span",{className:"text-sm font-medium text-green-700 dark:text-green-300",children:a("settingsProxy.connectedLatency",{value:o.latencyMs})})]}):e.jsxs(e.Fragment,{children:[e.jsx(as,{className:"w-4 h-4 text-red-600 dark:text-red-400"}),e.jsx("span",{className:"text-sm font-medium text-red-700 dark:text-red-300",children:o.error||a("settingsProxy.connectionFailed")})]})})})]})]})}const be="ccs_debug_mode";function ps(s){return s.trim().replace(/\s+/g," ").toUpperCase()}function Ts(){const{t:s}=oe(),{config:t,loading:g,saving:o,error:u,success:f,testResult:p,testing:j,editedHost:y,setEditedHost:C,editedPort:S,setEditedPort:P,editedAuthToken:w,setEditedAuthToken:A,editedManagementKey:E,setEditedManagementKey:d,editedLocalPort:x,setEditedLocalPort:h,fetchConfig:a,saveConfig:c,testConnection:k}=ms(),{fetchRawConfig:l}=qe(),[_,Pe]=n.useState(()=>{try{return localStorage.getItem(be)==="true"}catch{return!1}}),[ke,Y]=n.useState(!1),[ve,ne]=n.useState(!0),[b,ie]=n.useState(!1),[Ne,L]=n.useState(!1),[le,I]=n.useState(""),K=n.useRef(!1),X=ps(le)===U,Ce=r=>{Pe(r);try{localStorage.setItem(be,String(r))}catch{}},G=n.useCallback(async()=>{try{ne(!0);const r=await fetch("/api/settings/auth/antigravity-risk");if(!r.ok)throw new Error(s("settingsProxy.failedLoadAgyMode"));const i=await r.json();Y(i.antigravityAckBypass===!0)}catch(r){T.error(r instanceof Error?r.message:s("settingsProxy.failedLoadAgyMode")),Y(!1)}finally{ne(!1)}},[s]),O=n.useCallback(async r=>{if(!(K.current||b||o))try{K.current=!0,ie(!0);const i=await fetch("/api/settings/auth/antigravity-risk",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({antigravityAckBypass:r})}),$=await i.json();if(!i.ok)throw new Error($.error||s("settingsProxy.failedUpdateAgyMode"));const Ve=$.antigravityAckBypass===!0,ue=await fetch("/api/settings/auth/antigravity-risk",{cache:"no-store"});if(!ue.ok)throw new Error(s("settingsProxy.failedVerifyAgyMode"));const pe=(await ue.json()).antigravityAckBypass===!0;if(pe!==r)throw new Error(s("settingsProxy.notPersistedAgyMode"));Y(pe&&Ve),L(!1),I(""),T.success(s(r?"settingsProxy.agyModeEnabled":"settingsProxy.agyModeDisabled")),await l()}catch(i){T.error(i instanceof Error?i.message:s("settingsProxy.failedUpdateAgyMode"))}finally{K.current=!1,ie(!1)}},[b,l,o,s]),Se=n.useCallback(r=>{if(!(K.current||b||o)){if(r){L(!0);return}L(!1),I(""),O(!1)}},[b,O,o]),we=n.useCallback(()=>{if(!X){T.error(s("settingsProxy.typePhraseToContinue",{value:U}));return}O(!0)},[X,O,s]),[v,q]=n.useState("original"),[Ae,Ee]=n.useState(!1),J=Je(),{data:Te}=Qe(),ce=Te?.running??!1,Be=Ze.map(he).join(", "),de=es.map(he).join(", "),Q=n.useCallback(async()=>{try{const r=await R.cliproxyServer.getBackend();q(r.backend)}catch(r){console.error("[Proxy] Failed to fetch backend:",r)}},[]),Z=n.useCallback(async()=>{try{const i=(await R.cliproxy.list()).variants.some($=>ss($));Ee(i)}catch(r){console.error("[Proxy] Failed to check variants:",r)}},[]),xe=r=>{const i=v;q(r),J.mutate({backend:r},{onError:()=>{q(i)}})};if(n.useEffect(()=>{if(_&&t){const r={...t,remote:{...t.remote,auth_token:t.remote.auth_token?"[REDACTED]":void 0,management_key:t.remote.management_key?"[REDACTED]":void 0}};console.log("[CCS Debug] Debug mode enabled - proxy config:",r)}},[_,t]),n.useEffect(()=>{a(),G(),l(),Q(),Z()},[a,G,l,Q,Z]),g||!t)return e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsxs("div",{className:"flex items-center gap-3 text-muted-foreground",children:[e.jsx(ae,{className:"w-5 h-5 animate-spin"}),e.jsx("span",{children:s("settings.loading")})]})});const m=t.remote.enabled??!1,F=!m&&ce,N=t.remote,D=t.fallback,De=t.remote.host??"",Me=t.remote.port!==void 0?t.remote.port.toString():"",Re=t.remote.auth_token??"",_e=t.remote.management_key??"",Le=(t.local.port??W).toString(),ee=y??De,se=S??Me,te=w??Re,me=E??_e,ge=x??Le,Ie=()=>{const r=y??ee;r!==t.remote.host&&c({remote:{...N,host:r}}),C(null)},Ke=()=>{const r=(S??se).trim();if(r===""){t.remote.port!==void 0&&c({remote:{...N,port:void 0}}),P(null);return}const i=Number(r);if(!Number.isInteger(i)||i<1||i>65535){T.error(s("settingsProxy.invalidPortOrEmpty")),P(null);return}i!==t.remote.port&&c({remote:{...N,port:i}}),P(null)},Oe=()=>{const r=w??te;r!==t.remote.auth_token&&c({remote:{...N,auth_token:r}}),A(null)},Fe=()=>{const r=E??me;r!==t.remote.management_key&&c({remote:{...N,management_key:r||void 0}}),d(null)},$e=()=>{const r=(x??ge).trim(),i=r===""?W:Number(r);if(!Number.isInteger(i)||i<1||i>65535){T.error(s("settingsProxy.invalidLocalPort")),h(null);return}i!==t.local.port&&c({local:{...t.local,port:i}}),h(null)},He=()=>{k({host:ee,port:se,protocol:t.remote.protocol||"http",authToken:te})};return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:`absolute left-5 right-5 top-20 z-10 transition-all duration-200 ease-out ${u||f?"opacity-100 translate-y-0":"opacity-0 -translate-y-2 pointer-events-none"}`,children:[u&&e.jsxs(H,{variant:"destructive",className:"py-2 shadow-lg",children:[e.jsx(os,{className:"h-4 w-4"}),e.jsx(V,{children:u})]}),f&&e.jsxs("div",{className:"flex items-center gap-2 px-3 py-2 rounded-md border border-green-200 bg-green-50 text-green-700 shadow-lg dark:border-green-900/50 dark:bg-green-900/90 dark:text-green-300",children:[e.jsx(je,{className:"h-4 w-4 shrink-0"}),e.jsx("span",{className:"text-sm font-medium",children:s("settings.saved")})]})]}),e.jsx(ts,{className:"flex-1",children:e.jsxs("div",{className:"p-5 space-y-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:s("settingsProxy.description",{backend:s(v==="plus"?"settingsProxy.backendPlus":"settingsProxy.backend")})}),!m&&e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-base font-medium",children:s("settingsProxy.instanceStatus")}),e.jsx(xs,{})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-base font-medium",children:s("settingsProxy.connectionMode")}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("button",{onClick:()=>c({remote:{...N,enabled:!1}}),disabled:o,className:`p-4 rounded-lg border-2 text-left transition-all ${m?"border-border hover:border-muted-foreground/50":"border-primary bg-primary/5"}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx(ns,{className:`w-5 h-5 ${m?"text-muted-foreground":"text-primary"}`}),e.jsx("span",{className:"font-medium",children:s("settingsProxy.local")})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("settingsProxy.localDesc",{backend:s(v==="plus"?"settingsProxy.backendPlus":"settingsProxy.backend")})})]}),e.jsxs("button",{onClick:()=>c({remote:{...N,enabled:!0}}),disabled:o,className:`p-4 rounded-lg border-2 text-left transition-all ${m?"border-primary bg-primary/5":"border-border hover:border-muted-foreground/50"}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx(fe,{className:`w-5 h-5 ${m?"text-primary":"text-muted-foreground"}`}),e.jsx("span",{className:"font-medium",children:s("settingsProxy.remote")})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("settingsProxy.remoteDesc",{backend:s(v==="plus"?"settingsProxy.backendPlus":"settingsProxy.backend")})})]})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("h3",{className:"text-base font-medium flex items-center gap-2",children:[e.jsx(is,{className:"w-4 h-4"}),s("settingsProxy.backendBinary")]}),!m&&ce&&e.jsxs(H,{className:"py-2 border-amber-200 bg-amber-50 dark:border-amber-900/50 dark:bg-amber-900/20 [&>svg]:top-2.5",children:[e.jsx(re,{className:"h-4 w-4 text-amber-600"}),e.jsx(V,{className:"text-amber-700 dark:text-amber-400",children:s("settingsProxy.stopProxyToSwitch")})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("button",{onClick:()=>xe("plus"),disabled:J.isPending||F,className:`p-4 rounded-lg border-2 text-left transition-all ${v==="plus"?"border-primary bg-primary/5":"border-border hover:border-muted-foreground/50"} ${F?"opacity-60 cursor-not-allowed":""}`,children:[e.jsx("div",{className:"flex items-center gap-3 mb-2",children:e.jsx("span",{className:"font-medium",children:s("settingsProxy.backendPlusApi")})}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("settingsProxy.plusDesc")}),e.jsx("p",{className:"mt-2 text-[11px] leading-relaxed text-muted-foreground",children:de})]}),e.jsxs("button",{onClick:()=>xe("original"),disabled:J.isPending||F,className:`p-4 rounded-lg border-2 text-left transition-all ${v==="original"?"border-primary bg-primary/5":"border-border hover:border-muted-foreground/50"} ${F?"opacity-60 cursor-not-allowed":""}`,children:[e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx("span",{className:"font-medium",children:s("settingsProxy.backendApi")}),e.jsx("span",{className:"text-xs px-1.5 py-0.5 rounded bg-green-100 text-green-700 dark:bg-green-900/50 dark:text-green-400",children:s("settingsProxy.default")})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("settingsProxy.originalDesc")}),e.jsx("p",{className:"mt-2 text-[11px] leading-relaxed text-muted-foreground",children:Be})]})]}),v==="plus"&&e.jsxs(H,{className:"py-2 border-amber-200 bg-amber-50 dark:border-amber-900/50 dark:bg-amber-900/20 [&>svg]:top-2.5",children:[e.jsx(re,{className:"h-4 w-4 text-amber-600"}),e.jsx(V,{className:"text-amber-700 dark:text-amber-400",children:s("settingsProxy.plusFallbackNotice")})]}),v==="original"&&Ae&&e.jsxs(H,{variant:"destructive",className:"py-2",children:[e.jsx(re,{className:"h-4 w-4"}),e.jsx(V,{children:s("settingsProxy.variantsIncompatible",{providers:de})})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("h3",{className:"text-base font-medium flex items-center gap-2",children:[e.jsx(ls,{className:"w-4 h-4 text-amber-700 dark:text-amber-300"}),s("settingsProxy.safety")]}),e.jsxs("div",{className:"space-y-3 rounded-lg border border-amber-400/35 bg-amber-50/70 p-4 dark:border-amber-800/60 dark:bg-amber-950/25",children:[e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"font-medium text-sm",children:s("settingsProxy.agyModeTitle")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("settingsProxy.agyModeDesc")})]}),e.jsx(M,{"aria-labelledby":"agy-power-user-mode-label","aria-describedby":"agy-power-user-mode-description",checked:ke,disabled:ve||b||o,onCheckedChange:Se})]}),e.jsx("p",{id:"agy-power-user-mode-description",className:"text-xs text-amber-800/90 dark:text-amber-200/90",children:s("settingsProxy.agyWarning")}),Ne&&e.jsxs("div",{className:"space-y-3 rounded-lg border border-rose-500/40 bg-rose-500/[0.08] p-3.5",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("p",{className:"text-xs font-semibold tracking-wide text-rose-900 dark:text-rose-200",children:s("settingsProxy.finalConfirm")}),e.jsx("p",{className:"text-xs leading-relaxed text-rose-800/95 dark:text-rose-200/90",children:s("settingsProxy.finalConfirmDesc")})]}),e.jsxs("div",{className:"grid gap-2 md:grid-cols-2",children:[e.jsxs("div",{className:"rounded-md border border-rose-400/30 bg-rose-500/10 p-2.5",children:[e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-rose-900 dark:text-rose-200",children:s("settingsProxy.step1")}),e.jsxs("a",{href:"https://github.com/kaitranntt/ccs/issues/509",target:"_blank",rel:"noreferrer",className:"mt-1 inline-flex items-center gap-1.5 text-xs font-medium text-rose-800 underline decoration-rose-500/60 underline-offset-2 transition-colors hover:text-rose-700 dark:text-rose-200",children:[s("settingsProxy.readIssue"),e.jsx(cs,{className:"h-3.5 w-3.5"})]})]}),e.jsxs("div",{className:"rounded-md border border-rose-400/30 bg-rose-500/10 p-2.5",children:[e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-wide text-rose-900 dark:text-rose-200",children:s("settingsProxy.step2")}),e.jsxs("p",{className:"mt-1 text-xs text-rose-800/95 dark:text-rose-200/90",children:[s("settingsProxy.typePrefix")," ",e.jsx("code",{className:"rounded bg-background/80 px-1 py-0.5 font-mono",children:U})," ",s("settingsProxy.typeSuffix")]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(B,{value:le,onChange:r=>I(r.target.value),placeholder:U,disabled:b||o,className:"font-mono text-xs","aria-label":s("settingsProxy.typePhraseAria")}),e.jsx("p",{className:"text-[11px] text-rose-800/90 dark:text-rose-200/80",children:s("settingsProxy.exactPhrase")})]}),e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[e.jsx(z,{variant:"outline",size:"sm",onClick:()=>{L(!1),I("")},disabled:b||o,children:s("settingsBackups.cancel")}),e.jsx(z,{size:"sm",variant:"destructive",onClick:we,disabled:!X||b||o,children:s("settingsProxy.enableAgyMode")})]})]}),e.jsx("span",{id:"agy-power-user-mode-label",className:"sr-only",children:s("settingsProxy.toggleAgyMode")})]})]}),m&&e.jsx(us,{config:t,saving:o,testing:j,testResult:p,displayHost:ee,displayPort:se,displayAuthToken:te,displayManagementKey:me,setEditedHost:C,setEditedPort:P,setEditedAuthToken:A,setEditedManagementKey:d,onSaveHost:Ie,onSavePort:Ke,onSaveAuthToken:Oe,onSaveManagementKey:Fe,onSaveConfig:c,onTestConnection:He}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-base font-medium",children:s("settingsProxy.fallbackSettings")}),e.jsxs("div",{className:"space-y-3 p-4 rounded-lg border bg-muted/30",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-sm",children:s("settingsProxy.enableFallback")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("settingsProxy.enableFallbackDesc")})]}),e.jsx(M,{checked:D.enabled??!0,onCheckedChange:r=>c({fallback:{...D,enabled:r}}),disabled:o||!m})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-sm",children:s("settingsProxy.autoStartLocal")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("settingsProxy.autoStartLocalDesc")})]}),e.jsx(M,{checked:D.auto_start??!1,onCheckedChange:r=>c({fallback:{...D,auto_start:r}}),disabled:o||!m||!D.enabled})]})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("h3",{className:"text-base font-medium flex items-center gap-2",children:[e.jsx(ds,{className:"w-4 h-4"}),s("settingsProxy.advanced")]}),e.jsxs("div",{className:"space-y-3 p-4 rounded-lg border bg-muted/30",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-sm",children:s("settingsProxy.debugMode")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("settingsProxy.debugModeDesc")})]}),e.jsx(M,{checked:_,onCheckedChange:Ce,disabled:o})]}),_&&e.jsx("p",{className:"text-xs text-amber-600 dark:text-amber-400 pl-0.5",children:s("settingsProxy.debugModeEnabled")})]})]}),!m&&e.jsx(gs,{config:t,saving:o,displayLocalPort:ge,setEditedLocalPort:h,onSaveLocalPort:$e,onSaveConfig:c})]})}),e.jsx("div",{className:"p-4 border-t bg-background",children:e.jsxs(z,{variant:"outline",size:"sm",onClick:()=>{a(),G(),l(),Q(),Z()},disabled:g||o||b,className:"w-full",children:[e.jsx(ae,{className:`w-4 h-4 mr-2 ${g?"animate-spin":""}`}),s("settings.refresh")]})})]})}export{Ts as default};