@kaitranntt/ccs 7.68.2 → 7.69.1-dev.1

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 (256) hide show
  1. package/dist/auth/commands/create-command-env.d.ts +1 -0
  2. package/dist/auth/commands/create-command-env.d.ts.map +1 -1
  3. package/dist/ccs.js +55 -2
  4. package/dist/ccs.js.map +1 -1
  5. package/dist/channels/official-channels-runtime.d.ts +1 -0
  6. package/dist/channels/official-channels-runtime.d.ts.map +1 -1
  7. package/dist/channels/official-channels-store.d.ts +1 -0
  8. package/dist/channels/official-channels-store.d.ts.map +1 -1
  9. package/dist/cliproxy/base-config-loader.d.ts +1 -0
  10. package/dist/cliproxy/base-config-loader.d.ts.map +1 -1
  11. package/dist/cliproxy/config/env-builder.d.ts +1 -0
  12. package/dist/cliproxy/config/env-builder.d.ts.map +1 -1
  13. package/dist/cliproxy/config/extended-context-config.d.ts +1 -0
  14. package/dist/cliproxy/config/extended-context-config.d.ts.map +1 -1
  15. package/dist/cliproxy/config/thinking-config.d.ts +1 -0
  16. package/dist/cliproxy/config/thinking-config.d.ts.map +1 -1
  17. package/dist/cliproxy/executor/env-resolver.d.ts +2 -0
  18. package/dist/cliproxy/executor/env-resolver.d.ts.map +1 -1
  19. package/dist/cliproxy/executor/env-resolver.js +2 -1
  20. package/dist/cliproxy/executor/env-resolver.js.map +1 -1
  21. package/dist/cliproxy/executor/index.d.ts.map +1 -1
  22. package/dist/cliproxy/executor/index.js +28 -1
  23. package/dist/cliproxy/executor/index.js.map +1 -1
  24. package/dist/cliproxy/model-id-normalizer.d.ts +1 -0
  25. package/dist/cliproxy/model-id-normalizer.d.ts.map +1 -1
  26. package/dist/cliproxy/routing-strategy-http.d.ts +1 -0
  27. package/dist/cliproxy/routing-strategy-http.d.ts.map +1 -1
  28. package/dist/cliproxy/tool-sanitization-proxy.d.ts.map +1 -1
  29. package/dist/cliproxy/tool-sanitization-proxy.js +0 -3
  30. package/dist/cliproxy/tool-sanitization-proxy.js.map +1 -1
  31. package/dist/cliproxy/types.d.ts +2 -0
  32. package/dist/cliproxy/types.d.ts.map +1 -1
  33. package/dist/commands/cliproxy/catalog-subcommand.d.ts +6 -0
  34. package/dist/commands/cliproxy/catalog-subcommand.d.ts.map +1 -1
  35. package/dist/commands/cliproxy/catalog-subcommand.js +39 -1
  36. package/dist/commands/cliproxy/catalog-subcommand.js.map +1 -1
  37. package/dist/commands/cliproxy/help-subcommand.d.ts.map +1 -1
  38. package/dist/commands/cliproxy/help-subcommand.js +1 -0
  39. package/dist/commands/cliproxy/help-subcommand.js.map +1 -1
  40. package/dist/commands/cliproxy/index.d.ts.map +1 -1
  41. package/dist/commands/cliproxy/index.js +6 -0
  42. package/dist/commands/cliproxy/index.js.map +1 -1
  43. package/dist/commands/command-catalog.d.ts +1 -1
  44. package/dist/commands/command-catalog.d.ts.map +1 -1
  45. package/dist/commands/cursor-command-display.d.ts +2 -0
  46. package/dist/commands/cursor-command-display.d.ts.map +1 -1
  47. package/dist/commands/cursor-command-display.js +24 -3
  48. package/dist/commands/cursor-command-display.js.map +1 -1
  49. package/dist/commands/cursor-command.d.ts.map +1 -1
  50. package/dist/commands/cursor-command.js +31 -1
  51. package/dist/commands/cursor-command.js.map +1 -1
  52. package/dist/commands/update-command.d.ts +2 -0
  53. package/dist/commands/update-command.d.ts.map +1 -1
  54. package/dist/commands/update-command.js +76 -74
  55. package/dist/commands/update-command.js.map +1 -1
  56. package/dist/config/migration-manager.d.ts.map +1 -1
  57. package/dist/config/migration-manager.js +2 -1
  58. package/dist/config/migration-manager.js.map +1 -1
  59. package/dist/config/unified-config-loader.d.ts +8 -3
  60. package/dist/config/unified-config-loader.d.ts.map +1 -1
  61. package/dist/config/unified-config-loader.js +20 -7
  62. package/dist/config/unified-config-loader.js.map +1 -1
  63. package/dist/config/unified-config-types.d.ts +15 -2
  64. package/dist/config/unified-config-types.d.ts.map +1 -1
  65. package/dist/config/unified-config-types.js +8 -3
  66. package/dist/config/unified-config-types.js.map +1 -1
  67. package/dist/cursor/constants.d.ts +1 -1
  68. package/dist/cursor/constants.d.ts.map +1 -1
  69. package/dist/cursor/constants.js +1 -0
  70. package/dist/cursor/constants.js.map +1 -1
  71. package/dist/cursor/cursor-anthropic-response.d.ts +1 -0
  72. package/dist/cursor/cursor-anthropic-response.d.ts.map +1 -1
  73. package/dist/cursor/cursor-auth.d.ts +1 -0
  74. package/dist/cursor/cursor-auth.d.ts.map +1 -1
  75. package/dist/cursor/cursor-auth.js +154 -32
  76. package/dist/cursor/cursor-auth.js.map +1 -1
  77. package/dist/cursor/cursor-executor.d.ts +2 -1
  78. package/dist/cursor/cursor-executor.d.ts.map +1 -1
  79. package/dist/cursor/cursor-executor.js +295 -160
  80. package/dist/cursor/cursor-executor.js.map +1 -1
  81. package/dist/cursor/cursor-protobuf-decoder.d.ts.map +1 -1
  82. package/dist/cursor/cursor-protobuf-decoder.js +1 -3
  83. package/dist/cursor/cursor-protobuf-decoder.js.map +1 -1
  84. package/dist/cursor/cursor-protobuf-schema.d.ts +12 -3
  85. package/dist/cursor/cursor-protobuf-schema.d.ts.map +1 -1
  86. package/dist/cursor/cursor-protobuf-schema.js +23 -5
  87. package/dist/cursor/cursor-protobuf-schema.js.map +1 -1
  88. package/dist/cursor/cursor-protobuf.d.ts +1 -1
  89. package/dist/cursor/cursor-protobuf.d.ts.map +1 -1
  90. package/dist/cursor/cursor-protobuf.js +2 -4
  91. package/dist/cursor/cursor-protobuf.js.map +1 -1
  92. package/dist/cursor/cursor-runtime-probe.d.ts +12 -0
  93. package/dist/cursor/cursor-runtime-probe.d.ts.map +1 -0
  94. package/dist/cursor/cursor-runtime-probe.js +220 -0
  95. package/dist/cursor/cursor-runtime-probe.js.map +1 -0
  96. package/dist/cursor/cursor-stream-parser.d.ts +10 -0
  97. package/dist/cursor/cursor-stream-parser.d.ts.map +1 -1
  98. package/dist/cursor/cursor-stream-parser.js +106 -10
  99. package/dist/cursor/cursor-stream-parser.js.map +1 -1
  100. package/dist/cursor/index.d.ts +1 -0
  101. package/dist/cursor/index.d.ts.map +1 -1
  102. package/dist/cursor/index.js +3 -1
  103. package/dist/cursor/index.js.map +1 -1
  104. package/dist/cursor/types.d.ts +6 -0
  105. package/dist/cursor/types.d.ts.map +1 -1
  106. package/dist/docker/docker-executor.d.ts +1 -0
  107. package/dist/docker/docker-executor.d.ts.map +1 -1
  108. package/dist/docker/supervisord-lifecycle.d.ts +17 -0
  109. package/dist/docker/supervisord-lifecycle.d.ts.map +1 -0
  110. package/dist/docker/supervisord-lifecycle.js +58 -0
  111. package/dist/docker/supervisord-lifecycle.js.map +1 -0
  112. package/dist/management/instance-manager.d.ts.map +1 -1
  113. package/dist/management/instance-manager.js +5 -2
  114. package/dist/management/instance-manager.js.map +1 -1
  115. package/dist/targets/claude-adapter.d.ts +6 -1
  116. package/dist/targets/claude-adapter.d.ts.map +1 -1
  117. package/dist/targets/claude-adapter.js +6 -2
  118. package/dist/targets/claude-adapter.js.map +1 -1
  119. package/dist/targets/codex-adapter.d.ts +1 -0
  120. package/dist/targets/codex-adapter.d.ts.map +1 -1
  121. package/dist/targets/codex-adapter.js +12 -8
  122. package/dist/targets/codex-adapter.js.map +1 -1
  123. package/dist/targets/droid-adapter.d.ts +3 -1
  124. package/dist/targets/droid-adapter.d.ts.map +1 -1
  125. package/dist/targets/droid-adapter.js +3 -2
  126. package/dist/targets/droid-adapter.js.map +1 -1
  127. package/dist/targets/target-adapter.d.ts +5 -0
  128. package/dist/targets/target-adapter.d.ts.map +1 -1
  129. package/dist/types/cli.d.ts +1 -0
  130. package/dist/types/cli.d.ts.map +1 -1
  131. package/dist/ui/assets/{accounts-DjL3iVZW.js → accounts-D9eEaNx9.js} +1 -1
  132. package/dist/ui/assets/{alert-dialog-Tc_D1a_B.js → alert-dialog-QyEXocpn.js} +1 -1
  133. package/dist/ui/assets/{api-CUtkvXmX.js → api-7vQe0xOg.js} +1 -1
  134. package/dist/ui/assets/{auth-section-CuKWQHC7.js → auth-section-BszF77uT.js} +1 -1
  135. package/dist/ui/assets/{backups-section-BKW2pbb9.js → backups-section-D6RgaOx1.js} +1 -1
  136. package/dist/ui/assets/{channels-DvWJMdaq.js → channels-B1vgnNJX.js} +1 -1
  137. package/dist/ui/assets/{checkbox-B0hZxMK5.js → checkbox-Dzwkj_Pg.js} +1 -1
  138. package/dist/ui/assets/{claude-extension-Dfqu-rev.js → claude-extension-CKO4bJ22.js} +1 -1
  139. package/dist/ui/assets/{cliproxy-ai-providers-BXLuuxNf.js → cliproxy-ai-providers-CmbFYVoR.js} +1 -1
  140. package/dist/ui/assets/{cliproxy-control-panel-aQ7cCc2U.js → cliproxy-control-panel-M8ZfUq3C.js} +1 -1
  141. package/dist/ui/assets/{cliproxy-C9RxW-I8.js → cliproxy-kHd-oC5W.js} +1 -1
  142. package/dist/ui/assets/{codex-aq4RI6_n.js → codex-BJ0RdMuh.js} +1 -1
  143. package/dist/ui/assets/{confirm-dialog-CpDk6eu4.js → confirm-dialog-BlSaX2gK.js} +1 -1
  144. package/dist/ui/assets/{copilot-CQRpGXvY.js → copilot-NJKZQXQ_.js} +1 -1
  145. package/dist/ui/assets/cursor-BrcDgu6X.js +1 -0
  146. package/dist/ui/assets/{droid-Cgx-yLjy.js → droid-B9u9ZB-a.js} +1 -1
  147. package/dist/ui/assets/{globalenv-section-DsNqG1yB.js → globalenv-section-DoX37DqB.js} +1 -1
  148. package/dist/ui/assets/{health-BY-O-JcA.js → health-D_gdcxnc.js} +1 -1
  149. package/dist/ui/assets/{index-DsCjnpco.js → index-BNU4Hhe_.js} +1 -1
  150. package/dist/ui/assets/{index-Cet36v1V.js → index-CTGpqIx6.js} +1 -1
  151. package/dist/ui/assets/index-Cu6e0-ev.css +1 -0
  152. package/dist/ui/assets/{index-CLGiPB3A.js → index-DFEMq3KP.js} +1 -1
  153. package/dist/ui/assets/index-DOn6k1jF.js +72 -0
  154. package/dist/ui/assets/{index-TQFuDZdB.js → index-DoVPk3vW.js} +1 -1
  155. package/dist/ui/assets/index-h08p9xL5.js +1 -0
  156. package/dist/ui/assets/{logs-D5ro-pc7.js → logs-DtH4YMt4.js} +1 -1
  157. package/dist/ui/assets/{masked-input-h0XkMSwB.js → masked-input-C2H-Ax0Z.js} +1 -1
  158. package/dist/ui/assets/{proxy-status-widget-yBdrFeb7.js → proxy-status-widget-BOrsn86w.js} +1 -1
  159. package/dist/ui/assets/{raw-json-settings-editor-panel-Cb7ZInQV.js → raw-json-settings-editor-panel-WxTn7-hS.js} +1 -1
  160. package/dist/ui/assets/{searchable-select-D4xr5xKS.js → searchable-select-1zOULoec.js} +1 -1
  161. package/dist/ui/assets/{separator-gw5BjIpP.js → separator-BCfZ54mZ.js} +1 -1
  162. package/dist/ui/assets/{shared-C-VeA1Z9.js → shared-DlTbnc9n.js} +1 -1
  163. package/dist/ui/assets/{table-Bd4isC18.js → table-Bx2cnkWN.js} +1 -1
  164. package/dist/ui/assets/{updates-DiK8I67C.js → updates-SiZKOnUD.js} +1 -1
  165. package/dist/ui/index.html +2 -2
  166. package/dist/utils/browser/chrome-reuse.d.ts +17 -0
  167. package/dist/utils/browser/chrome-reuse.d.ts.map +1 -0
  168. package/dist/utils/browser/chrome-reuse.js +194 -0
  169. package/dist/utils/browser/chrome-reuse.js.map +1 -0
  170. package/dist/utils/browser/claude-tool-args.d.ts +2 -0
  171. package/dist/utils/browser/claude-tool-args.d.ts.map +1 -0
  172. package/dist/utils/browser/claude-tool-args.js +18 -0
  173. package/dist/utils/browser/claude-tool-args.js.map +1 -0
  174. package/dist/utils/browser/index.d.ts +8 -0
  175. package/dist/utils/browser/index.d.ts.map +1 -0
  176. package/dist/utils/browser/index.js +24 -0
  177. package/dist/utils/browser/index.js.map +1 -0
  178. package/dist/utils/browser/mcp-installer.d.ts +14 -0
  179. package/dist/utils/browser/mcp-installer.d.ts.map +1 -0
  180. package/dist/utils/browser/mcp-installer.js +356 -0
  181. package/dist/utils/browser/mcp-installer.js.map +1 -0
  182. package/dist/utils/browser-codex-overrides.d.ts +3 -0
  183. package/dist/utils/browser-codex-overrides.d.ts.map +1 -0
  184. package/dist/utils/browser-codex-overrides.js +29 -0
  185. package/dist/utils/browser-codex-overrides.js.map +1 -0
  186. package/dist/utils/claude-detector.d.ts +1 -0
  187. package/dist/utils/claude-detector.d.ts.map +1 -1
  188. package/dist/utils/claude-spawner.d.ts +1 -0
  189. package/dist/utils/claude-spawner.d.ts.map +1 -1
  190. package/dist/utils/claude-tool-args.d.ts +7 -0
  191. package/dist/utils/claude-tool-args.d.ts.map +1 -0
  192. package/dist/utils/claude-tool-args.js +43 -0
  193. package/dist/utils/claude-tool-args.js.map +1 -0
  194. package/dist/utils/image-analysis/claude-tool-args.d.ts +3 -0
  195. package/dist/utils/image-analysis/claude-tool-args.d.ts.map +1 -1
  196. package/dist/utils/image-analysis/claude-tool-args.js +21 -47
  197. package/dist/utils/image-analysis/claude-tool-args.js.map +1 -1
  198. package/dist/utils/package-manager-detector.d.ts +1 -0
  199. package/dist/utils/package-manager-detector.d.ts.map +1 -1
  200. package/dist/utils/prompt-injection-strategy.d.ts +54 -0
  201. package/dist/utils/prompt-injection-strategy.d.ts.map +1 -0
  202. package/dist/utils/prompt-injection-strategy.js +128 -0
  203. package/dist/utils/prompt-injection-strategy.js.map +1 -0
  204. package/dist/utils/shell-executor.d.ts +1 -0
  205. package/dist/utils/shell-executor.d.ts.map +1 -1
  206. package/dist/utils/websearch/claude-tool-args.d.ts +7 -0
  207. package/dist/utils/websearch/claude-tool-args.d.ts.map +1 -1
  208. package/dist/utils/websearch/claude-tool-args.js +27 -50
  209. package/dist/utils/websearch/claude-tool-args.js.map +1 -1
  210. package/dist/utils/websearch/hook-env.d.ts.map +1 -1
  211. package/dist/utils/websearch/hook-env.js +19 -1
  212. package/dist/utils/websearch/hook-env.js.map +1 -1
  213. package/dist/utils/websearch/status.d.ts +1 -1
  214. package/dist/utils/websearch/status.d.ts.map +1 -1
  215. package/dist/utils/websearch/status.js +33 -12
  216. package/dist/utils/websearch/status.js.map +1 -1
  217. package/dist/utils/websearch/trace.d.ts +1 -0
  218. package/dist/utils/websearch/trace.d.ts.map +1 -1
  219. package/dist/utils/websearch/trace.js +20 -5
  220. package/dist/utils/websearch/trace.js.map +1 -1
  221. package/dist/utils/websearch/types.d.ts +12 -2
  222. package/dist/utils/websearch/types.d.ts.map +1 -1
  223. package/dist/utils/websearch/types.js +38 -0
  224. package/dist/utils/websearch/types.js.map +1 -1
  225. package/dist/web-server/health/websearch-checks.js +1 -1
  226. package/dist/web-server/health/websearch-checks.js.map +1 -1
  227. package/dist/web-server/middleware/auth-middleware.d.ts +0 -1
  228. package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -1
  229. package/dist/web-server/routes/cliproxy-local-proxy.d.ts.map +1 -1
  230. package/dist/web-server/routes/cliproxy-local-proxy.js +26 -6
  231. package/dist/web-server/routes/cliproxy-local-proxy.js.map +1 -1
  232. package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +1 -1
  233. package/dist/web-server/routes/cliproxy-stats-routes.js +8 -1
  234. package/dist/web-server/routes/cliproxy-stats-routes.js.map +1 -1
  235. package/dist/web-server/routes/cursor-routes.d.ts +2 -0
  236. package/dist/web-server/routes/cursor-routes.d.ts.map +1 -1
  237. package/dist/web-server/routes/cursor-routes.js +44 -2
  238. package/dist/web-server/routes/cursor-routes.js.map +1 -1
  239. package/dist/web-server/routes/websearch-routes.d.ts.map +1 -1
  240. package/dist/web-server/routes/websearch-routes.js +37 -0
  241. package/dist/web-server/routes/websearch-routes.js.map +1 -1
  242. package/dist/web-server/services/cliproxy-dashboard-install-service.d.ts.map +1 -1
  243. package/dist/web-server/services/cliproxy-dashboard-install-service.js +14 -0
  244. package/dist/web-server/services/cliproxy-dashboard-install-service.js.map +1 -1
  245. package/dist/web-server/services/codex-dashboard-service.d.ts +1 -0
  246. package/dist/web-server/services/codex-dashboard-service.d.ts.map +1 -1
  247. package/dist/web-server/services/droid-dashboard-service.d.ts +1 -0
  248. package/dist/web-server/services/droid-dashboard-service.d.ts.map +1 -1
  249. package/lib/hooks/websearch-transformer.cjs +136 -0
  250. package/lib/mcp/ccs-browser-server.cjs +877 -0
  251. package/lib/mcp/ccs-websearch-server.cjs +1 -1
  252. package/package.json +2 -1
  253. package/dist/ui/assets/cursor-BpXPf6qi.js +0 -1
  254. package/dist/ui/assets/index-BmSzf0T9.js +0 -72
  255. package/dist/ui/assets/index-DH6L6ybH.js +0 -1
  256. package/dist/ui/assets/index-teLjoh2T.css +0 -1
@@ -1 +1 @@
1
- import{j as e}from"./radix-ui-Zb8sVEtn.js";import{a as N,c as l,d as p,M as k,N as C,O as S,B as R,S as h}from"./index-BmSzf0T9.js";import{u as W,a as E,b as O}from"./tanstack-CrmUhA7Z.js";import{t as g}from"./notifications-B2HqRBj7.js";import{r as j}from"./react-vendor-CNOkPC89.js";import{b5 as y,C as P,$ as I,o as M,Z as T,i as $,U as H,e as A,b6 as z,s as F,Y as B,R as D}from"./icons-KVCk4_U8.js";import"./utils-CzKF5WmX.js";import"./form-utils-Bcoyqxpq.js";import"./code-highlight-BRUf_pqB.js";const q={sm:{dimension:80,strokeWidth:6,fontSize:"text-lg",labelSize:"text-[10px]"},md:{dimension:120,strokeWidth:8,fontSize:"text-3xl",labelSize:"text-xs"},lg:{dimension:160,strokeWidth:10,fontSize:"text-4xl",labelSize:"text-sm"}},G={ok:{stroke:"#22C55E",glow:"rgba(34, 197, 94, 0.4)"},warning:{stroke:"#EAB308",glow:"rgba(234, 179, 8, 0.4)"},error:{stroke:"#EF4444",glow:"rgba(239, 68, 68, 0.4)"}};function K({passed:s,total:t,status:a,size:r="md"}){const{t:i}=N(),o=q[r],c=G[a],n=t>0?Math.round(s/t*100):0,d=(o.dimension-o.strokeWidth)/2,u=2*Math.PI*d,f=u-n/100*u,x=o.dimension/2;return e.jsxs("div",{className:"relative inline-flex items-center justify-center",children:[e.jsxs("svg",{width:o.dimension,height:o.dimension,className:"transform -rotate-90",style:{filter:`drop-shadow(0 0 8px ${c.glow})`},children:[e.jsx("circle",{cx:x,cy:x,r:d,fill:"none",stroke:"currentColor",strokeWidth:o.strokeWidth,className:"text-muted/30"}),e.jsx("circle",{cx:x,cy:x,r:d,fill:"none",stroke:c.stroke,strokeWidth:o.strokeWidth,strokeLinecap:"round",strokeDasharray:u,strokeDashoffset:f,className:"transition-all duration-1000 ease-out"}),n>0&&e.jsx("circle",{cx:x+d*Math.cos(n/100*2*Math.PI-Math.PI/2),cy:x+d*Math.sin(n/100*2*Math.PI-Math.PI/2),r:o.strokeWidth/2,fill:c.stroke,className:"animate-pulse",style:{filter:`drop-shadow(0 0 4px ${c.glow})`}})]}),e.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center",children:[e.jsx("span",{className:l("font-mono font-bold tracking-tight",o.fontSize),children:n}),e.jsx("span",{className:l("font-mono uppercase tracking-widest text-muted-foreground",o.labelSize),children:i("health.healthLabel")})]})]})}function b({label:s,value:t,color:a,bgColor:r}){return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:l("w-2 h-2 rounded-full animate-pulse",r)}),e.jsx("span",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider",children:s}),e.jsx("span",{className:l("font-mono font-bold text-sm",a),children:t})]})}function L({total:s,passed:t,warnings:a,errors:r,info:i}){const{t:o}=N(),c=t/s*100,n=a/s*100,d=r/s*100,u=i/s*100;return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"h-2 rounded-full overflow-hidden bg-muted/50 flex",children:[d>0&&e.jsx("div",{className:"h-full bg-red-500 transition-all duration-500",style:{width:`${d}%`}}),n>0&&e.jsx("div",{className:"h-full bg-yellow-500 transition-all duration-500",style:{width:`${n}%`}}),u>0&&e.jsx("div",{className:"h-full bg-blue-500 transition-all duration-500",style:{width:`${u}%`}}),c>0&&e.jsx("div",{className:"h-full bg-green-500 transition-all duration-500",style:{width:`${c}%`}})]}),e.jsxs("div",{className:"flex items-center justify-between gap-4 flex-wrap",children:[e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider",children:o("health.checks")}),e.jsx("span",{className:"font-mono font-bold text-lg",children:s})]}),e.jsxs("div",{className:"flex items-center gap-4 flex-wrap",children:[e.jsx(b,{label:"OK",value:t,color:"text-green-500",bgColor:"bg-green-500"}),e.jsx(b,{label:"WARN",value:a,color:"text-yellow-500",bgColor:"bg-yellow-500"}),e.jsx(b,{label:"ERR",value:r,color:"text-red-500",bgColor:"bg-red-500"}),e.jsx(b,{label:"INFO",value:i,color:"text-blue-500",bgColor:"bg-blue-500"})]})]})]})}function Q(){return W({queryKey:["health"],queryFn:async()=>(await fetch("/api/health")).json(),refetchInterval:3e4})}function U(){const s=E();return O({mutationFn:async t=>{const a=await fetch(`/api/health/fix/${t}`,{method:"POST"}),r=await a.json();if(!a.ok)throw new Error(r.message);return r},onSuccess:t=>{s.invalidateQueries({queryKey:["health"]}),g.success(t.message)},onError:t=>{g.error(t.message)}})}const Z={ok:{dot:"bg-green-500",label:"OK",labelColor:"text-green-500"},warning:{dot:"bg-yellow-500",label:"WARN",labelColor:"text-yellow-500"},error:{dot:"bg-red-500",label:"ERR",labelColor:"text-red-500"},info:{dot:"bg-blue-500",label:"INFO",labelColor:"text-blue-500"}};function Y({check:s}){const{t}=N(),a=U(),r=Z[s.status],[i,o]=j.useState(!1),c=s.details||s.fix,n=d=>{navigator.clipboard.writeText(d),g.success(t("health.copied"))};return c?e.jsx(k,{open:i,onOpenChange:o,children:e.jsxs("div",{className:l("group rounded-lg border transition-all duration-150",i?"border-border bg-muted/30":"border-transparent hover:border-border/50 hover:bg-muted/50"),children:[e.jsx(C,{asChild:!0,children:e.jsxs("button",{className:"w-full flex items-center gap-3 px-3 py-2 text-left",children:[e.jsxs("div",{className:"relative flex items-center justify-center w-4 h-4",children:[e.jsx("div",{className:l("w-2 h-2 rounded-full",r.dot)}),s.status!=="ok"&&e.jsx("div",{className:l("absolute w-2 h-2 rounded-full animate-ping opacity-75",r.dot)})]}),e.jsx("span",{className:"flex-1 text-sm font-medium truncate",children:s.name}),e.jsxs("span",{className:l("font-mono text-xs font-semibold",r.labelColor),children:["[",r.label,"]"]}),e.jsx(P,{className:l("w-4 h-4 text-muted-foreground transition-transform duration-200",i&&"rotate-90")})]})}),e.jsx(S,{children:e.jsxs("div",{className:"px-3 pb-3 pt-1 space-y-2 ml-7",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:s.message}),s.details&&e.jsx("pre",{className:"text-xs font-mono text-muted-foreground bg-background/50 rounded p-2 overflow-x-auto border border-border/50",children:s.details}),s.fix&&e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("div",{className:"flex-1 flex items-center gap-2 bg-background/50 rounded px-2 py-1.5 border border-border/50",children:[e.jsx(I,{className:"w-3 h-3 text-muted-foreground shrink-0"}),e.jsx("code",{className:"text-xs font-mono flex-1 truncate",children:s.fix}),e.jsx(p,{variant:"ghost",size:"sm",onClick:()=>s.fix&&n(s.fix),className:"h-5 w-5 p-0",children:e.jsx(M,{className:"w-3 h-3"})})]}),s.fixable&&s.status!=="ok"&&e.jsxs(p,{size:"sm",onClick:()=>a.mutate(s.id),disabled:a.isPending,className:"h-7 px-3 text-xs",children:[e.jsx(y,{className:"w-3 h-3 mr-1"}),t("health.applyFix")]})]})]})})]})}):e.jsxs("div",{className:l("group flex items-center gap-3 px-3 py-2 rounded-lg","hover:bg-muted/50 transition-colors duration-150","border border-transparent hover:border-border/50"),children:[e.jsxs("div",{className:"relative flex items-center justify-center w-4 h-4",children:[e.jsx("div",{className:l("w-2 h-2 rounded-full",r.dot)}),s.status!=="ok"&&e.jsx("div",{className:l("absolute w-2 h-2 rounded-full animate-ping opacity-75",r.dot)})]}),e.jsx("span",{className:"flex-1 text-sm font-medium truncate",children:s.name}),e.jsxs("span",{className:l("font-mono text-xs font-semibold",r.labelColor),children:["[",r.label,"]"]}),s.fixable&&s.status!=="ok"&&e.jsxs(p,{size:"sm",variant:"ghost",onClick:()=>a.mutate(s.id),disabled:a.isPending,className:"h-6 px-2 text-xs opacity-0 group-hover:opacity-100 transition-opacity",children:[e.jsx(y,{className:"w-3 h-3 mr-1"}),t("health.fix")]})]})}const J={Monitor:z,Settings:A,Users:H,Shield:$,Zap:T};function V({group:s,defaultOpen:t=!0}){const[a,r]=j.useState(t),i=J[s.icon]||z,o=s.checks.filter(m=>m.status==="ok").length,c=s.checks.length,n=s.checks.some(m=>m.status==="error"),d=s.checks.some(m=>m.status==="warning"),u=Math.round(o/c*100),f=n?"text-red-500":d?"text-yellow-500":"text-green-500",x=n?"bg-red-500":d?"bg-yellow-500":"bg-green-500";return e.jsx(k,{open:a,onOpenChange:r,children:e.jsxs("div",{className:l("rounded-lg border transition-all duration-200",n?"border-red-500/30":d?"border-yellow-500/30":"border-border"),children:[e.jsx(C,{asChild:!0,children:e.jsxs("button",{className:l("w-full flex items-center gap-3 p-3 text-left rounded-lg","hover:bg-muted/50 transition-colors duration-150",a&&"rounded-b-none border-b border-border/50"),children:[e.jsx("div",{className:l("p-1.5 rounded-md",n?"bg-red-500/10 text-red-500":d?"bg-yellow-500/10 text-yellow-500":"bg-muted text-muted-foreground"),children:e.jsx(i,{className:"w-4 h-4"})}),e.jsx("span",{className:"flex-1 text-sm font-semibold",children:s.name}),!a&&e.jsx("div",{className:"flex items-center gap-2",children:e.jsx("div",{className:"w-16 h-1.5 rounded-full bg-muted overflow-hidden",children:e.jsx("div",{className:l("h-full transition-all duration-500",x),style:{width:`${u}%`}})})}),e.jsxs("span",{className:l("font-mono text-xs font-semibold",f),children:[o,"/",c]}),e.jsx(F,{className:l("w-4 h-4 text-muted-foreground transition-transform duration-200",a&&"rotate-180")})]})}),e.jsx(S,{children:e.jsx("div",{className:"p-2 space-y-0.5",children:s.checks.map(m=>e.jsx(Y,{check:m},m.id))})})]})})}function X(s){return s.errors>0?"error":s.warnings>0?"warning":"ok"}function _(s,t){const a=Math.floor((Date.now()-s)/1e3);if(a<5)return t("health.justNow");if(a<60)return t("health.secondsAgo",{count:a});const r=Math.floor(a/60);if(r<60)return t("health.minutesAgo",{count:r});const i=Math.floor(r/60);return t("health.hoursAgo",{count:i})}function ee(s){return[...s].sort((t,a)=>{const r=t.checks.filter(n=>n.status==="error").length,i=a.checks.filter(n=>n.status==="error").length,o=t.checks.filter(n=>n.status==="warning").length,c=a.checks.filter(n=>n.status==="warning").length;return r!==i?i-r:c-o})}function se(){return e.jsxs("div",{className:"font-mono text-sm text-muted-foreground flex items-center gap-2",children:[e.jsx("span",{className:"text-green-500",children:"$"}),e.jsx("span",{children:"ccs doctor"})]})}function te(){return e.jsxs("div",{className:"p-6 max-w-6xl mx-auto space-y-6",children:[e.jsx("div",{className:"rounded-xl border bg-gradient-to-br from-background to-muted/20 p-6",children:e.jsxs("div",{className:"flex items-center gap-6",children:[e.jsx(h,{className:"w-[120px] h-[120px] rounded-full"}),e.jsxs("div",{className:"flex-1 space-y-3",children:[e.jsx(h,{className:"h-5 w-48"}),e.jsx(h,{className:"h-8 w-64"}),e.jsx(h,{className:"h-4 w-32"})]})]})}),e.jsx(h,{className:"h-16 w-full rounded-lg"}),e.jsx("div",{className:"space-y-3",children:[1,2,3,4].map(s=>e.jsx(h,{className:"h-20 rounded-lg"},s))})]})}function xe(){const{t:s}=N(),{data:t,isLoading:a,refetch:r,dataUpdatedAt:i}=Q(),o=i,[c,n]=j.useState(0);j.useEffect(()=>{const m=setInterval(()=>n(v=>v+1),1e3);return()=>clearInterval(m)},[]);const d=()=>{navigator.clipboard.writeText("ccs doctor"),g.success(s("health.copied"))},u=()=>{r(),g.info(s("health.refreshing"))};if(a&&!t)return e.jsx(te,{});const f=t?X(t.summary):"ok",x=t?.groups?ee(t.groups):[];return e.jsxs("div",{className:"p-6 max-w-6xl mx-auto space-y-6",children:[e.jsxs("div",{className:l("relative overflow-hidden rounded-xl border p-6","bg-gradient-to-br from-background via-background to-muted/30"),children:[e.jsx("div",{className:"absolute inset-0 opacity-[0.02] pointer-events-none",style:{backgroundImage:"repeating-linear-gradient(0deg, transparent, transparent 2px, currentColor 2px, currentColor 3px)"}}),e.jsx("div",{className:"absolute inset-0 opacity-[0.03] pointer-events-none",children:e.jsx("div",{className:"absolute inset-0",style:{backgroundImage:"radial-gradient(circle at 1px 1px, currentColor 1px, transparent 0)",backgroundSize:"24px 24px"}})}),e.jsxs("div",{className:"relative flex flex-col md:flex-row items-start md:items-center gap-6",children:[t&&e.jsx("div",{className:"shrink-0",children:e.jsx(K,{passed:t.summary.passed,total:t.summary.total-t.summary.info,status:f,size:"md"})}),e.jsxs("div",{className:"flex-1 space-y-3",children:[e.jsx(se,{}),e.jsxs("div",{className:"flex items-center gap-3 flex-wrap",children:[e.jsx("h1",{className:"text-2xl font-bold font-mono tracking-tight",children:s("health.systemHealth")}),t?.version&&e.jsx(R,{variant:"outline",className:"font-mono text-xs bg-muted/50",children:s("health.build",{version:t.version})})]}),e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(B,{className:"w-4 h-4 text-muted-foreground"}),e.jsx("span",{className:"text-muted-foreground",children:s("health.lastScan")}),e.jsx("span",{className:"font-mono",children:o?_(o,s):"--"}),e.jsx("span",{className:"text-muted-foreground",children:"|"}),e.jsx("span",{className:"text-muted-foreground",children:s("health.autoRefresh")}),e.jsx("span",{className:"font-mono text-green-500",children:"30s"})]})]}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[e.jsxs(p,{variant:"outline",size:"sm",onClick:d,className:"gap-2 font-mono text-xs",children:[e.jsx(I,{className:"w-3 h-3"}),"ccs doctor",e.jsx(M,{className:"w-3 h-3 opacity-50"})]}),e.jsxs(p,{variant:"outline",size:"sm",onClick:u,disabled:a,className:"gap-2",children:[e.jsx(D,{className:l("w-4 h-4",a&&"animate-spin")}),e.jsx("span",{className:"hidden sm:inline",children:s("health.refresh")}),e.jsx("kbd",{className:"hidden md:inline-flex h-5 items-center gap-1 rounded border bg-muted px-1.5 font-mono text-[10px] font-medium text-muted-foreground",children:"R"})]})]})]})]}),t&&e.jsx("div",{className:"rounded-lg border bg-card p-4",children:e.jsx(L,{total:t.summary.total,passed:t.summary.passed,warnings:t.summary.warnings,errors:t.summary.errors,info:t.summary.info})}),x.length>0&&e.jsx("div",{className:"space-y-3",children:x.map((m,v)=>e.jsx(V,{group:m,defaultOpen:v<2||m.checks.some(w=>w.status==="error"||w.status==="warning")},m.id))}),e.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground border-t pt-4",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs("span",{children:[s("health.version")," ",e.jsx("span",{className:"font-mono",children:t?.version??"--"})]}),e.jsxs("span",{children:[s("health.platform")," ",e.jsx("span",{className:"font-mono",children:typeof navigator<"u"?navigator.platform:"linux"})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"w-2 h-2 rounded-full bg-green-500 animate-pulse"}),e.jsx("span",{children:s("health.liveMonitoring")})]})]})]})}export{xe as HealthPage};
1
+ import{j as e}from"./radix-ui-Zb8sVEtn.js";import{a as N,c as l,d as p,M as k,N as C,O as S,B as R,S as h}from"./index-DOn6k1jF.js";import{u as W,a as E,b as O}from"./tanstack-CrmUhA7Z.js";import{t as g}from"./notifications-B2HqRBj7.js";import{r as j}from"./react-vendor-CNOkPC89.js";import{b5 as y,C as P,$ as I,o as M,Z as T,i as $,U as H,e as A,b6 as z,s as F,Y as B,R as D}from"./icons-KVCk4_U8.js";import"./utils-CzKF5WmX.js";import"./form-utils-Bcoyqxpq.js";import"./code-highlight-BRUf_pqB.js";const q={sm:{dimension:80,strokeWidth:6,fontSize:"text-lg",labelSize:"text-[10px]"},md:{dimension:120,strokeWidth:8,fontSize:"text-3xl",labelSize:"text-xs"},lg:{dimension:160,strokeWidth:10,fontSize:"text-4xl",labelSize:"text-sm"}},G={ok:{stroke:"#22C55E",glow:"rgba(34, 197, 94, 0.4)"},warning:{stroke:"#EAB308",glow:"rgba(234, 179, 8, 0.4)"},error:{stroke:"#EF4444",glow:"rgba(239, 68, 68, 0.4)"}};function K({passed:s,total:t,status:a,size:r="md"}){const{t:i}=N(),o=q[r],c=G[a],n=t>0?Math.round(s/t*100):0,d=(o.dimension-o.strokeWidth)/2,u=2*Math.PI*d,f=u-n/100*u,x=o.dimension/2;return e.jsxs("div",{className:"relative inline-flex items-center justify-center",children:[e.jsxs("svg",{width:o.dimension,height:o.dimension,className:"transform -rotate-90",style:{filter:`drop-shadow(0 0 8px ${c.glow})`},children:[e.jsx("circle",{cx:x,cy:x,r:d,fill:"none",stroke:"currentColor",strokeWidth:o.strokeWidth,className:"text-muted/30"}),e.jsx("circle",{cx:x,cy:x,r:d,fill:"none",stroke:c.stroke,strokeWidth:o.strokeWidth,strokeLinecap:"round",strokeDasharray:u,strokeDashoffset:f,className:"transition-all duration-1000 ease-out"}),n>0&&e.jsx("circle",{cx:x+d*Math.cos(n/100*2*Math.PI-Math.PI/2),cy:x+d*Math.sin(n/100*2*Math.PI-Math.PI/2),r:o.strokeWidth/2,fill:c.stroke,className:"animate-pulse",style:{filter:`drop-shadow(0 0 4px ${c.glow})`}})]}),e.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center",children:[e.jsx("span",{className:l("font-mono font-bold tracking-tight",o.fontSize),children:n}),e.jsx("span",{className:l("font-mono uppercase tracking-widest text-muted-foreground",o.labelSize),children:i("health.healthLabel")})]})]})}function b({label:s,value:t,color:a,bgColor:r}){return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:l("w-2 h-2 rounded-full animate-pulse",r)}),e.jsx("span",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider",children:s}),e.jsx("span",{className:l("font-mono font-bold text-sm",a),children:t})]})}function L({total:s,passed:t,warnings:a,errors:r,info:i}){const{t:o}=N(),c=t/s*100,n=a/s*100,d=r/s*100,u=i/s*100;return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"h-2 rounded-full overflow-hidden bg-muted/50 flex",children:[d>0&&e.jsx("div",{className:"h-full bg-red-500 transition-all duration-500",style:{width:`${d}%`}}),n>0&&e.jsx("div",{className:"h-full bg-yellow-500 transition-all duration-500",style:{width:`${n}%`}}),u>0&&e.jsx("div",{className:"h-full bg-blue-500 transition-all duration-500",style:{width:`${u}%`}}),c>0&&e.jsx("div",{className:"h-full bg-green-500 transition-all duration-500",style:{width:`${c}%`}})]}),e.jsxs("div",{className:"flex items-center justify-between gap-4 flex-wrap",children:[e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("span",{className:"text-xs font-medium text-muted-foreground uppercase tracking-wider",children:o("health.checks")}),e.jsx("span",{className:"font-mono font-bold text-lg",children:s})]}),e.jsxs("div",{className:"flex items-center gap-4 flex-wrap",children:[e.jsx(b,{label:"OK",value:t,color:"text-green-500",bgColor:"bg-green-500"}),e.jsx(b,{label:"WARN",value:a,color:"text-yellow-500",bgColor:"bg-yellow-500"}),e.jsx(b,{label:"ERR",value:r,color:"text-red-500",bgColor:"bg-red-500"}),e.jsx(b,{label:"INFO",value:i,color:"text-blue-500",bgColor:"bg-blue-500"})]})]})]})}function Q(){return W({queryKey:["health"],queryFn:async()=>(await fetch("/api/health")).json(),refetchInterval:3e4})}function U(){const s=E();return O({mutationFn:async t=>{const a=await fetch(`/api/health/fix/${t}`,{method:"POST"}),r=await a.json();if(!a.ok)throw new Error(r.message);return r},onSuccess:t=>{s.invalidateQueries({queryKey:["health"]}),g.success(t.message)},onError:t=>{g.error(t.message)}})}const Z={ok:{dot:"bg-green-500",label:"OK",labelColor:"text-green-500"},warning:{dot:"bg-yellow-500",label:"WARN",labelColor:"text-yellow-500"},error:{dot:"bg-red-500",label:"ERR",labelColor:"text-red-500"},info:{dot:"bg-blue-500",label:"INFO",labelColor:"text-blue-500"}};function Y({check:s}){const{t}=N(),a=U(),r=Z[s.status],[i,o]=j.useState(!1),c=s.details||s.fix,n=d=>{navigator.clipboard.writeText(d),g.success(t("health.copied"))};return c?e.jsx(k,{open:i,onOpenChange:o,children:e.jsxs("div",{className:l("group rounded-lg border transition-all duration-150",i?"border-border bg-muted/30":"border-transparent hover:border-border/50 hover:bg-muted/50"),children:[e.jsx(C,{asChild:!0,children:e.jsxs("button",{className:"w-full flex items-center gap-3 px-3 py-2 text-left",children:[e.jsxs("div",{className:"relative flex items-center justify-center w-4 h-4",children:[e.jsx("div",{className:l("w-2 h-2 rounded-full",r.dot)}),s.status!=="ok"&&e.jsx("div",{className:l("absolute w-2 h-2 rounded-full animate-ping opacity-75",r.dot)})]}),e.jsx("span",{className:"flex-1 text-sm font-medium truncate",children:s.name}),e.jsxs("span",{className:l("font-mono text-xs font-semibold",r.labelColor),children:["[",r.label,"]"]}),e.jsx(P,{className:l("w-4 h-4 text-muted-foreground transition-transform duration-200",i&&"rotate-90")})]})}),e.jsx(S,{children:e.jsxs("div",{className:"px-3 pb-3 pt-1 space-y-2 ml-7",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:s.message}),s.details&&e.jsx("pre",{className:"text-xs font-mono text-muted-foreground bg-background/50 rounded p-2 overflow-x-auto border border-border/50",children:s.details}),s.fix&&e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("div",{className:"flex-1 flex items-center gap-2 bg-background/50 rounded px-2 py-1.5 border border-border/50",children:[e.jsx(I,{className:"w-3 h-3 text-muted-foreground shrink-0"}),e.jsx("code",{className:"text-xs font-mono flex-1 truncate",children:s.fix}),e.jsx(p,{variant:"ghost",size:"sm",onClick:()=>s.fix&&n(s.fix),className:"h-5 w-5 p-0",children:e.jsx(M,{className:"w-3 h-3"})})]}),s.fixable&&s.status!=="ok"&&e.jsxs(p,{size:"sm",onClick:()=>a.mutate(s.id),disabled:a.isPending,className:"h-7 px-3 text-xs",children:[e.jsx(y,{className:"w-3 h-3 mr-1"}),t("health.applyFix")]})]})]})})]})}):e.jsxs("div",{className:l("group flex items-center gap-3 px-3 py-2 rounded-lg","hover:bg-muted/50 transition-colors duration-150","border border-transparent hover:border-border/50"),children:[e.jsxs("div",{className:"relative flex items-center justify-center w-4 h-4",children:[e.jsx("div",{className:l("w-2 h-2 rounded-full",r.dot)}),s.status!=="ok"&&e.jsx("div",{className:l("absolute w-2 h-2 rounded-full animate-ping opacity-75",r.dot)})]}),e.jsx("span",{className:"flex-1 text-sm font-medium truncate",children:s.name}),e.jsxs("span",{className:l("font-mono text-xs font-semibold",r.labelColor),children:["[",r.label,"]"]}),s.fixable&&s.status!=="ok"&&e.jsxs(p,{size:"sm",variant:"ghost",onClick:()=>a.mutate(s.id),disabled:a.isPending,className:"h-6 px-2 text-xs opacity-0 group-hover:opacity-100 transition-opacity",children:[e.jsx(y,{className:"w-3 h-3 mr-1"}),t("health.fix")]})]})}const J={Monitor:z,Settings:A,Users:H,Shield:$,Zap:T};function V({group:s,defaultOpen:t=!0}){const[a,r]=j.useState(t),i=J[s.icon]||z,o=s.checks.filter(m=>m.status==="ok").length,c=s.checks.length,n=s.checks.some(m=>m.status==="error"),d=s.checks.some(m=>m.status==="warning"),u=Math.round(o/c*100),f=n?"text-red-500":d?"text-yellow-500":"text-green-500",x=n?"bg-red-500":d?"bg-yellow-500":"bg-green-500";return e.jsx(k,{open:a,onOpenChange:r,children:e.jsxs("div",{className:l("rounded-lg border transition-all duration-200",n?"border-red-500/30":d?"border-yellow-500/30":"border-border"),children:[e.jsx(C,{asChild:!0,children:e.jsxs("button",{className:l("w-full flex items-center gap-3 p-3 text-left rounded-lg","hover:bg-muted/50 transition-colors duration-150",a&&"rounded-b-none border-b border-border/50"),children:[e.jsx("div",{className:l("p-1.5 rounded-md",n?"bg-red-500/10 text-red-500":d?"bg-yellow-500/10 text-yellow-500":"bg-muted text-muted-foreground"),children:e.jsx(i,{className:"w-4 h-4"})}),e.jsx("span",{className:"flex-1 text-sm font-semibold",children:s.name}),!a&&e.jsx("div",{className:"flex items-center gap-2",children:e.jsx("div",{className:"w-16 h-1.5 rounded-full bg-muted overflow-hidden",children:e.jsx("div",{className:l("h-full transition-all duration-500",x),style:{width:`${u}%`}})})}),e.jsxs("span",{className:l("font-mono text-xs font-semibold",f),children:[o,"/",c]}),e.jsx(F,{className:l("w-4 h-4 text-muted-foreground transition-transform duration-200",a&&"rotate-180")})]})}),e.jsx(S,{children:e.jsx("div",{className:"p-2 space-y-0.5",children:s.checks.map(m=>e.jsx(Y,{check:m},m.id))})})]})})}function X(s){return s.errors>0?"error":s.warnings>0?"warning":"ok"}function _(s,t){const a=Math.floor((Date.now()-s)/1e3);if(a<5)return t("health.justNow");if(a<60)return t("health.secondsAgo",{count:a});const r=Math.floor(a/60);if(r<60)return t("health.minutesAgo",{count:r});const i=Math.floor(r/60);return t("health.hoursAgo",{count:i})}function ee(s){return[...s].sort((t,a)=>{const r=t.checks.filter(n=>n.status==="error").length,i=a.checks.filter(n=>n.status==="error").length,o=t.checks.filter(n=>n.status==="warning").length,c=a.checks.filter(n=>n.status==="warning").length;return r!==i?i-r:c-o})}function se(){return e.jsxs("div",{className:"font-mono text-sm text-muted-foreground flex items-center gap-2",children:[e.jsx("span",{className:"text-green-500",children:"$"}),e.jsx("span",{children:"ccs doctor"})]})}function te(){return e.jsxs("div",{className:"p-6 max-w-6xl mx-auto space-y-6",children:[e.jsx("div",{className:"rounded-xl border bg-gradient-to-br from-background to-muted/20 p-6",children:e.jsxs("div",{className:"flex items-center gap-6",children:[e.jsx(h,{className:"w-[120px] h-[120px] rounded-full"}),e.jsxs("div",{className:"flex-1 space-y-3",children:[e.jsx(h,{className:"h-5 w-48"}),e.jsx(h,{className:"h-8 w-64"}),e.jsx(h,{className:"h-4 w-32"})]})]})}),e.jsx(h,{className:"h-16 w-full rounded-lg"}),e.jsx("div",{className:"space-y-3",children:[1,2,3,4].map(s=>e.jsx(h,{className:"h-20 rounded-lg"},s))})]})}function xe(){const{t:s}=N(),{data:t,isLoading:a,refetch:r,dataUpdatedAt:i}=Q(),o=i,[c,n]=j.useState(0);j.useEffect(()=>{const m=setInterval(()=>n(v=>v+1),1e3);return()=>clearInterval(m)},[]);const d=()=>{navigator.clipboard.writeText("ccs doctor"),g.success(s("health.copied"))},u=()=>{r(),g.info(s("health.refreshing"))};if(a&&!t)return e.jsx(te,{});const f=t?X(t.summary):"ok",x=t?.groups?ee(t.groups):[];return e.jsxs("div",{className:"p-6 max-w-6xl mx-auto space-y-6",children:[e.jsxs("div",{className:l("relative overflow-hidden rounded-xl border p-6","bg-gradient-to-br from-background via-background to-muted/30"),children:[e.jsx("div",{className:"absolute inset-0 opacity-[0.02] pointer-events-none",style:{backgroundImage:"repeating-linear-gradient(0deg, transparent, transparent 2px, currentColor 2px, currentColor 3px)"}}),e.jsx("div",{className:"absolute inset-0 opacity-[0.03] pointer-events-none",children:e.jsx("div",{className:"absolute inset-0",style:{backgroundImage:"radial-gradient(circle at 1px 1px, currentColor 1px, transparent 0)",backgroundSize:"24px 24px"}})}),e.jsxs("div",{className:"relative flex flex-col md:flex-row items-start md:items-center gap-6",children:[t&&e.jsx("div",{className:"shrink-0",children:e.jsx(K,{passed:t.summary.passed,total:t.summary.total-t.summary.info,status:f,size:"md"})}),e.jsxs("div",{className:"flex-1 space-y-3",children:[e.jsx(se,{}),e.jsxs("div",{className:"flex items-center gap-3 flex-wrap",children:[e.jsx("h1",{className:"text-2xl font-bold font-mono tracking-tight",children:s("health.systemHealth")}),t?.version&&e.jsx(R,{variant:"outline",className:"font-mono text-xs bg-muted/50",children:s("health.build",{version:t.version})})]}),e.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[e.jsx(B,{className:"w-4 h-4 text-muted-foreground"}),e.jsx("span",{className:"text-muted-foreground",children:s("health.lastScan")}),e.jsx("span",{className:"font-mono",children:o?_(o,s):"--"}),e.jsx("span",{className:"text-muted-foreground",children:"|"}),e.jsx("span",{className:"text-muted-foreground",children:s("health.autoRefresh")}),e.jsx("span",{className:"font-mono text-green-500",children:"30s"})]})]}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[e.jsxs(p,{variant:"outline",size:"sm",onClick:d,className:"gap-2 font-mono text-xs",children:[e.jsx(I,{className:"w-3 h-3"}),"ccs doctor",e.jsx(M,{className:"w-3 h-3 opacity-50"})]}),e.jsxs(p,{variant:"outline",size:"sm",onClick:u,disabled:a,className:"gap-2",children:[e.jsx(D,{className:l("w-4 h-4",a&&"animate-spin")}),e.jsx("span",{className:"hidden sm:inline",children:s("health.refresh")}),e.jsx("kbd",{className:"hidden md:inline-flex h-5 items-center gap-1 rounded border bg-muted px-1.5 font-mono text-[10px] font-medium text-muted-foreground",children:"R"})]})]})]})]}),t&&e.jsx("div",{className:"rounded-lg border bg-card p-4",children:e.jsx(L,{total:t.summary.total,passed:t.summary.passed,warnings:t.summary.warnings,errors:t.summary.errors,info:t.summary.info})}),x.length>0&&e.jsx("div",{className:"space-y-3",children:x.map((m,v)=>e.jsx(V,{group:m,defaultOpen:v<2||m.checks.some(w=>w.status==="error"||w.status==="warning")},m.id))}),e.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground border-t pt-4",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs("span",{children:[s("health.version")," ",e.jsx("span",{className:"font-mono",children:t?.version??"--"})]}),e.jsxs("span",{children:[s("health.platform")," ",e.jsx("span",{className:"font-mono",children:typeof navigator<"u"?navigator.platform:"linux"})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"w-2 h-2 rounded-full bg-green-500 animate-pulse"}),e.jsx("span",{children:s("health.liveMonitoring")})]})]})]})}export{xe as HealthPage};
@@ -1 +1 @@
1
- import{j as e}from"./radix-ui-Zb8sVEtn.js";import{r as d}from"./react-vendor-CNOkPC89.js";import{bv as je,Y as re,be as ae,bg as te,d as B,n as Ne,B as c,c as u,aF as ye,I as G,r as se,s as ne,t as ie,v as de,w as O}from"./index-BmSzf0T9.js";import{R as J,w as le,x as ke,a8 as oe,aB as we,A as Ce,aa as Be,as as Me,t as Se,s as _e,a9 as Pe,aK as Re}from"./icons-KVCk4_U8.js";import"./tanstack-CrmUhA7Z.js";import"./notifications-B2HqRBj7.js";import"./utils-CzKF5WmX.js";import"./form-utils-Bcoyqxpq.js";import"./code-highlight-BRUf_pqB.js";const M="__no_backend__";function ce(t){return!!t&&typeof t=="object"&&!Array.isArray(t)&&Object.values(t).every(a=>typeof a=="string")}function Ae(t){if(!t||typeof t!="object"||Array.isArray(t))return!1;const a=t;return!!a.config&&typeof a.config.enabled=="boolean"&&typeof a.config.timeout=="number"&&ce(a.config.providerModels)&&(a.config.fallbackBackend===null||typeof a.config.fallbackBackend=="string")&&ce(a.config.profileBackends)&&!!a.summary&&typeof a.summary.state=="string"&&typeof a.summary.title=="string"&&typeof a.summary.detail=="string"&&Array.isArray(a.backends)&&Array.isArray(a.profiles)&&!!a.catalog&&Array.isArray(a.catalog.knownBackends)&&Array.isArray(a.catalog.profileNames)&&typeof a.summary.nativeProfileCount=="number"}function Te(t){return Object.entries(t).sort(([a],[l])=>a.localeCompare(l)).map(([a,l],g)=>({id:`${a}-${l}-${g}`,profileName:a,backendId:l}))}function De(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 Ie(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 me(t){switch(t){case"active":return"Active";case"bypassed":return"Bypassed";case"fallback":return"Native fallback";case"setup":return"Needs setup";case"disabled":return"Disabled";case"native":return"Native";case"unresolved":return"Native only"}}function ue(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 Ee(t){switch(t){case"starts_on_launch":return"Starts on launch";case"needs_auth":return"Needs auth";case"needs_proxy":return"Needs proxy";case"review":return"Review";case"ready":return"Ready"}}function $e(t){if(!t)return"No model configured.";switch(t.state){case"needs_auth":return t.authReason||"Authenticate to route here.";case"needs_proxy":return t.proxyReason||"Proxy unavailable.";case"starts_on_launch":return"Auth ready. Launches locally on demand.";case"review":return"Needs manual review.";case"ready":return null}}function ze(t){switch(t){case"profile-backend":return"Explicit mapping";case"fallback-backend":return"Fallback backend";case"cliproxy-provider":return"Provider match";case"cliproxy-bridge":return"Bridge match";case"native-compatible":return"Native path";case"copilot-alias":return"Copilot alias";default:return t.replace(/-/g," ")}}function y(t){return"border-border/50 bg-background/40"}function Fe(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 Oe(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 Ke(t,a){return a.nativeReadPreference?t%2===0?"bg-emerald-500/[0.06]":"bg-emerald-500/[0.08]":t%2===0?"bg-background/75":"bg-muted/18"}function Le(t){const a=[`${t.activeProfileCount} routed`,`${t.nativeProfileCount} native`];return t.mappedProfileCount>0&&a.push(`${t.mappedProfileCount} override${t.mappedProfileCount===1?"":"s"}`),a.join(" · ")}function Ve(t){return Object.entries(t).reduce((a,[l,g])=>{const j=g.trim();return a[l]=j||null,a},{})}function q(t){return Object.entries(t).filter(([,a])=>a.trim().length>0).map(([a])=>a)}function Ue(t){return t.reduce((a,l)=>{const g=l.profileName.trim();return!g||!l.backendId||(a[g]=l.backendId),a},{})}function ge(t,a){const l=Number.parseInt(t.trim(),10);return Number.isInteger(l)?String(Math.min(600,Math.max(10,l))):a}function T({title:t,description:a,icon:l,meta:g,action:j,children:o,className:D}){return e.jsxs("div",{className:u("relative overflow-hidden rounded-2xl border bg-gradient-to-br from-background via-background to-muted/25 p-4 shadow-sm",D),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:l}),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}),g]}),e.jsx("p",{className:"mt-0.5 text-sm leading-5 text-muted-foreground",children:a})]})]}),j&&e.jsx("div",{className:"shrink-0",children:j})]}),e.jsx("div",{className:"space-y-3",children:o})]})]})}function er(){const{fetchRawConfig:t}=je(),[a,l]=d.useState(null),[g,j]=d.useState(!0),[o,D]=d.useState(!1),[I,N]=d.useState(null),[S,K]=d.useState(null),[E,Y]=d.useState(!1),[_,Q]=d.useState(!0),[L,V]=d.useState("60"),[f,P]=d.useState(""),[k,$]=d.useState({}),[x,z]=d.useState([]),w=d.useCallback(r=>{Q(r.config.enabled),V(String(r.config.timeout)),P(r.config.fallbackBackend??""),$(r.catalog.knownBackends.reduce((s,n)=>(s[n]=r.config.providerModels[n]??"",s),{})),z(Te(r.config.profileBackends))},[]),U=d.useCallback(async()=>{try{j(!0),N(null);const r=await re.imageAnalysis.get();if(!Ae(r))throw new Error("Image settings returned an unexpected response. Restart the dashboard server so the new API route is available.");l(r),w(r)}catch(r){N(r instanceof Error?r.message:"Failed to load image settings.")}finally{j(!1)}},[w]);d.useEffect(()=>{U(),t()},[U,t]),d.useEffect(()=>{if(!S)return;const r=window.setTimeout(()=>K(null),2500);return()=>window.clearTimeout(r)},[S]),d.useEffect(()=>{a&&Object.keys(a.config.profileBackends).length>0&&Y(!0)},[a]);const m=d.useMemo(()=>q(k),[k]),W=d.useMemo(()=>{if(!a)return[];const r=a.catalog.knownBackends.filter(n=>m.includes(n)),s=a.catalog.knownBackends.filter(n=>!m.includes(n));return[...r,...s]},[m,a]),F=d.useMemo(()=>a?.profiles.filter(r=>r.nativeReadPreference)??[],[a]);d.useEffect(()=>{if(m.length===0){P("");return}m.includes(f)||P(m[0])},[m,f]);const R=d.useCallback(async r=>{if(!a)return!1;const s=r?.enabled??_,n=r?.providerModels??k,i=q(n),b=ge(r?.timeout??L,String(a.config.timeout)),h=r?.fallbackBackend??f,C=i.length===0?"":i.includes(h)?h:i[0],p=r?.mappingDrafts??x,A={enabled:s,timeout:b,fallbackBackend:C,providerModels:Ve(n),profileBackends:Ue(p)},ve={enabled:a.config.enabled,timeout:String(a.config.timeout),fallbackBackend:a.config.fallbackBackend??"",providerModels:a.catalog.knownBackends.reduce((v,ee)=>(v[ee]=a.config.providerModels[ee]??null,v),{}),profileBackends:a.config.profileBackends};if(JSON.stringify(A)===JSON.stringify(ve))return!0;if(s&&i.length===0)return N("Keep at least one provider model configured, or disable Image globally."),w(a),!1;try{D(!0),N(null);const v=await re.imageAnalysis.update({enabled:s,timeout:Number.parseInt(b,10),fallbackBackend:C||null,providerModels:A.providerModels,profileBackends:A.profileBackends});return l(v),w(v),K("Image settings saved."),await t(),!0}catch(v){return N(v instanceof Error?v.message:"Failed to save image settings."),w(a),!1}finally{D(!1)}},[a,_,f,t,w,x,k,L]),X=async()=>{g||o||(K(null),await Promise.all([U(),t()]))},xe=async r=>{if(!o){if(r&&m.length===0){N("Keep at least one provider model configured, or disable Image globally.");return}Q(r),await R({enabled:r})}},be=async r=>{if(!a||o)return;const s=ge(r,String(a.config.timeout));V(s),await R({timeout:s})},pe=async r=>{o||(P(r),await R({fallbackBackend:r}))},Z=async(r,s)=>{if(!a||o)return;const n=s.trim(),i={...k,[r]:n},b=q(i);if(_&&b.length===0){N("Disable Image first or keep one backend configured."),$(C=>({...C,[r]:a.config.providerModels[r]??""}));return}const h=b.length===0?"":b.includes(f)?f:b[0];$(i),P(h),await R({providerModels:i,fallbackBackend:h})},fe=(r,s)=>{z(n=>n.map(i=>i.id===r?{...i,...s}:i))},H=async r=>{o||(z(r),await R({mappingDrafts:r}))},he=x.filter(r=>r.profileName.trim()&&r.backendId).length;return g?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(J,{className:"w-5 h-5 animate-spin"}),e.jsx("span",{children:"Loading image settings..."})]})}):a?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||S?"translate-y-0 opacity-100":"pointer-events-none -translate-y-2 opacity-0"}`,children:[I&&e.jsxs(ae,{variant:"destructive",className:"py-2 shadow-lg",children:[e.jsx(le,{className:"h-4 w-4"}),e.jsx(te,{children:I})]}),S&&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(ke,{className:"h-4 w-4 shrink-0"}),e.jsx("span",{className:"text-sm font-medium",children:S})]})]}),e.jsx(Ne,{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(oe,{className:"h-4 w-4"})}),e.jsx("p",{className:"text-sm font-semibold tracking-tight",children:"Image"})]}),e.jsxs("div",{className:"mt-1 flex flex-wrap items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(c,{className:u("border",De(a.summary.state)),children:a.summary.title}),e.jsx("span",{children:Le(a.summary)})]})]}),e.jsx(B,{variant:"ghost",size:"sm",onClick:X,disabled:g||o,"aria-label":"Refresh",title:"Refresh",children:e.jsx(J,{className:`h-4 w-4 ${g?"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:a.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:a.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:"Global toggle, timeout, and fallback.",icon:e.jsx(we,{className:"h-4 w-4"}),meta:e.jsxs(c,{variant:"outline",className:"border-amber-500/25 bg-amber-500/10 text-[10px]",children:[m.length," configured"]}),children:[e.jsxs("div",{className:"grid gap-2 lg:grid-cols-3",children:[e.jsxs("div",{className:u("rounded-[18px] border px-3.5 py-3 shadow-sm",y()),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:_?"Transformer on":"Transformer off"}),e.jsx("p",{className:"text-[11px] leading-4 text-muted-foreground",children:"Profile flags stay untouched."})]}),e.jsx(ye,{checked:_,onCheckedChange:r=>{xe(r)},disabled:o})]})]}),e.jsxs("div",{className:u("rounded-[18px] border px-3.5 py-3 shadow-sm",y()),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(G,{value:L,onChange:r=>V(r.target.value),inputMode:"numeric",className:"h-10 border-amber-500/15 bg-background/90 text-base",disabled:o,onBlur:r=>{be(r.currentTarget.value)},onKeyDown:r=>{r.key==="Enter"&&r.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:u("rounded-[18px] border px-3.5 py-3 shadow-sm",y()),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(se,{value:f||M,onValueChange:r=>{pe(r===M?"":r)},disabled:o,children:[e.jsx(ne,{className:"h-10 border-amber-500/15 bg-background/90",children:e.jsx(ie,{placeholder:"Choose backend"})}),e.jsx(de,{children:m.length===0?e.jsx(O,{value:M,children:"Configure a model first"}):m.map(r=>e.jsx(O,{value:r,children:r},r))})]})}),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:[he," 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:[F.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:[f||"No fallback"," fallback"]})]})]}),e.jsx(T,{tone:"cyan",eyebrow:"Route inventory",title:"Backend routes",description:"Model entry plus route health.",icon:e.jsx(Ce,{className:"h-4 w-4"}),meta:e.jsxs(c,{variant:"outline",className:"border-cyan-500/25 bg-cyan-500/10 text-[10px]",children:[W.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:W.map((r,s)=>{const n=a.backends.find(p=>p.backendId===r),i=n?.displayName||r,b=k[r]??"",h=$e(n),C=b?[`${n?.profilesUsing??0} active`,n?.authReadiness==="missing"?"auth missing":n?.proxyReadiness==="stopped"?"starts on launch":null].filter(Boolean).join(" · "):"No model configured.";return e.jsxs("div",{className:u("relative px-3 py-3 md:px-4",s>0&&"border-t border-cyan-500/10",Fe(n?.state)),children:[e.jsx("div",{className:u("absolute bottom-3 left-0 top-3 w-1 rounded-r-full bg-gradient-to-b",Oe(n?.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:i}),e.jsx(c,{variant:"outline",className:"font-mono text-[10px]",children:r}),n?.profilesUsing?e.jsxs(c,{variant:"outline",className:"border-cyan-500/20 bg-cyan-500/10 text-[10px]",children:[n.profilesUsing," active"]}):null]}),e.jsx("p",{className:"mt-0.5 text-[11px] leading-4 text-muted-foreground",children:C})]}),e.jsx(c,{className:u("border",n?Ie(n.state):"border-border/80 bg-background/85 text-muted-foreground"),children:n?Ee(n.state):"Inactive"})]}),e.jsxs("div",{className:"mt-2 flex flex-col gap-2 sm:flex-row",children:[e.jsx(G,{className:"h-10 flex-1 border-cyan-500/15 bg-background/88 text-base",placeholder:"Set model",value:b,disabled:o,onChange:p=>$(A=>({...A,[r]:p.target.value})),onBlur:p=>{Z(r,p.currentTarget.value)},onKeyDown:p=>{p.key==="Enter"&&p.currentTarget.blur()}}),b.trim().length>0&&e.jsx(B,{type:"button",variant:"outline",size:"sm",className:"h-10 sm:self-stretch",disabled:o,onClick:()=>{Z(r,"")},children:"Clear"})]}),h&&e.jsx("p",{className:"mt-1.5 text-[11px] leading-4 text-muted-foreground",children:h})]})]},r)})})}),e.jsx(T,{tone:"emerald",eyebrow:"Native path",title:"Native reading",description:"Profiles that skip the transformer.",icon:e.jsx(Be,{className:"h-4 w-4"}),meta:e.jsxs(c,{variant:"outline",children:[F.length," profiles"]}),children:F.length===0?e.jsx("div",{className:u("rounded-[18px] border border-dashed px-3.5 py-3.5 text-sm text-muted-foreground",y()),children:"No profiles prefer native reading yet."}):e.jsx("div",{className:"grid gap-2 md:grid-cols-2",children:F.map(r=>e.jsx("div",{className:u("rounded-[18px] border px-3.5 py-3 shadow-sm",y()),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:r.name}),e.jsx(c,{variant:"outline",className:"text-[10px]",children:r.kind==="variant"?"Variant":"Profile"}),e.jsx(c,{variant:"outline",className:"text-[10px]",children:r.nativeImageCapable?"Verified":"Review"})]}),e.jsxs("div",{className:"mt-1 text-[11px] leading-4 text-muted-foreground",children:[r.profileModel||"Model not detected"," ·"," ",r.nativeImageReason||"Native read preferred."]})]}),e.jsx(c,{className:u("border",ue(r.currentTargetMode)),children:me(r.currentTargetMode)})]})},`native-${r.kind}-${r.name}`))})}),e.jsxs(T,{tone:"slate",eyebrow:"Override lab",title:"Profile routing",description:"Only for explicit route overrides.",icon:e.jsx(Re,{className:"h-4 w-4"}),meta:e.jsx(c,{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(B,{type:"button",variant:"outline",size:"sm",onClick:()=>Y(r=>!r),children:[E?e.jsx(Se,{className:"mr-1 h-4 w-4"}):e.jsx(_e,{className:"mr-1 h-4 w-4"}),E?"Hide":"Show"]}),E&&e.jsxs(B,{type:"button",variant:"outline",size:"sm",onClick:()=>z(r=>[...r,{id:`mapping-${Date.now()}`,profileName:"",backendId:m[0]??""}]),disabled:m.length===0||o,children:[e.jsx(Pe,{className:"mr-1 h-4 w-4"}),"Add mapping"]})]}),className:"border-dashed",children:[e.jsx("datalist",{id:"image-profile-suggestions",children:a.catalog.profileNames.map(r=>e.jsx("option",{value:r},r))}),E?e.jsx("div",{className:"space-y-2",children:x.length===0?e.jsx("div",{className:u("rounded-[18px] border border-dashed px-3.5 py-3.5 text-sm text-muted-foreground",y()),children:"No explicit overrides saved."}):e.jsx("div",{className:"space-y-2",children:x.map(r=>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:"Direct override"}),!(r.profileName.trim()&&r.backendId)&&e.jsx(c,{variant:"outline",className:"text-[10px]",children:"Draft"})]}),e.jsxs(B,{type:"button",variant:"ghost",size:"sm",disabled:o,onClick:()=>{const s=x.filter(n=>n.id!==r.id);H(s)},children:[e.jsx(Me,{className:"mr-1 h-4 w-4"}),"Remove"]})]}),e.jsxs("div",{className:"mt-2 grid gap-2 sm:grid-cols-2",children:[e.jsx(G,{value:r.profileName,list:"image-profile-suggestions",disabled:o,placeholder:"Profile or variant name",className:"h-10 border-slate-400/15 bg-background/88 text-base",onChange:s=>{fe(r.id,{profileName:s.target.value})},onBlur:s=>{const n=x.map(i=>i.id===r.id?{...i,profileName:s.currentTarget.value.trim()}:i);H(n)},onKeyDown:s=>{s.key==="Enter"&&s.currentTarget.blur()}}),e.jsxs(se,{value:r.backendId||M,disabled:o,onValueChange:s=>{const n=x.map(i=>i.id===r.id?{...i,backendId:s===M?"":s}:i);H(n)},children:[e.jsx(ne,{className:"h-10 border-slate-400/15 bg-background/88",children:e.jsx(ie,{placeholder:"Choose backend"})}),e.jsx(de,{children:m.length===0?e.jsx(O,{value:M,children:"Configure a model first"}):m.map(s=>e.jsx(O,{value:s,children:s},s))})]})]})]},r.id))})}):e.jsxs("div",{className:u("rounded-[18px] border border-dashed px-3.5 py-3 text-sm text-muted-foreground",y()),children:["Hidden by default.",x.length>0?` ${x.length} override${x.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(oe,{className:"h-4 w-4"}),meta:e.jsxs(c,{variant:"outline",children:[a.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:a.profiles.map((r,s)=>e.jsxs("div",{className:u("grid gap-2 px-3.5 py-2.5 md:grid-cols-[minmax(0,1fr)_auto] md:items-center",s>0&&"border-t border-slate-400/12",Ke(s,r)),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:r.name}),e.jsx(c,{variant:"outline",className:"text-[10px]",children:r.kind==="variant"?"Variant":"Profile"}),e.jsx(c,{variant:"outline",className:"font-mono text-[10px] uppercase",children:r.target}),r.nativeReadPreference&&e.jsx(c,{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:[r.backendDisplayName||r.profileModel||"Native file access"," ·"," ",ze(r.resolutionSource)]})]}),e.jsxs("div",{className:"flex items-center gap-2 md:justify-end",children:[r.profileModel&&e.jsx(c,{variant:"outline",className:"font-mono text-[10px]",children:r.profileModel}),e.jsx(c,{className:u("border",ue(r.currentTargetMode)),children:me(r.currentTargetMode)})]})]},`${r.kind}-${r.name}`))})})]})})]}):e.jsxs("div",{className:"p-5",children:[e.jsxs(ae,{variant:"destructive",children:[e.jsx(le,{className:"h-4 w-4"}),e.jsx(te,{children:I??"Failed to load image settings."})]}),e.jsx("div",{className:"mt-4",children:e.jsxs(B,{variant:"outline",size:"sm",onClick:X,children:[e.jsx(J,{className:"mr-1 h-4 w-4"}),"Retry"]})})]})}export{er as default};
1
+ import{j as e}from"./radix-ui-Zb8sVEtn.js";import{r as d}from"./react-vendor-CNOkPC89.js";import{bv as je,Y as re,be as ae,bg as te,d as B,n as Ne,B as c,c as u,aF as ye,I as G,r as se,s as ne,t as ie,v as de,w as O}from"./index-DOn6k1jF.js";import{R as J,w as le,x as ke,a8 as oe,aB as we,A as Ce,aa as Be,as as Me,t as Se,s as _e,a9 as Pe,aK as Re}from"./icons-KVCk4_U8.js";import"./tanstack-CrmUhA7Z.js";import"./notifications-B2HqRBj7.js";import"./utils-CzKF5WmX.js";import"./form-utils-Bcoyqxpq.js";import"./code-highlight-BRUf_pqB.js";const M="__no_backend__";function ce(t){return!!t&&typeof t=="object"&&!Array.isArray(t)&&Object.values(t).every(a=>typeof a=="string")}function Ae(t){if(!t||typeof t!="object"||Array.isArray(t))return!1;const a=t;return!!a.config&&typeof a.config.enabled=="boolean"&&typeof a.config.timeout=="number"&&ce(a.config.providerModels)&&(a.config.fallbackBackend===null||typeof a.config.fallbackBackend=="string")&&ce(a.config.profileBackends)&&!!a.summary&&typeof a.summary.state=="string"&&typeof a.summary.title=="string"&&typeof a.summary.detail=="string"&&Array.isArray(a.backends)&&Array.isArray(a.profiles)&&!!a.catalog&&Array.isArray(a.catalog.knownBackends)&&Array.isArray(a.catalog.profileNames)&&typeof a.summary.nativeProfileCount=="number"}function Te(t){return Object.entries(t).sort(([a],[l])=>a.localeCompare(l)).map(([a,l],g)=>({id:`${a}-${l}-${g}`,profileName:a,backendId:l}))}function De(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 Ie(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 me(t){switch(t){case"active":return"Active";case"bypassed":return"Bypassed";case"fallback":return"Native fallback";case"setup":return"Needs setup";case"disabled":return"Disabled";case"native":return"Native";case"unresolved":return"Native only"}}function ue(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 Ee(t){switch(t){case"starts_on_launch":return"Starts on launch";case"needs_auth":return"Needs auth";case"needs_proxy":return"Needs proxy";case"review":return"Review";case"ready":return"Ready"}}function $e(t){if(!t)return"No model configured.";switch(t.state){case"needs_auth":return t.authReason||"Authenticate to route here.";case"needs_proxy":return t.proxyReason||"Proxy unavailable.";case"starts_on_launch":return"Auth ready. Launches locally on demand.";case"review":return"Needs manual review.";case"ready":return null}}function ze(t){switch(t){case"profile-backend":return"Explicit mapping";case"fallback-backend":return"Fallback backend";case"cliproxy-provider":return"Provider match";case"cliproxy-bridge":return"Bridge match";case"native-compatible":return"Native path";case"copilot-alias":return"Copilot alias";default:return t.replace(/-/g," ")}}function y(t){return"border-border/50 bg-background/40"}function Fe(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 Oe(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 Ke(t,a){return a.nativeReadPreference?t%2===0?"bg-emerald-500/[0.06]":"bg-emerald-500/[0.08]":t%2===0?"bg-background/75":"bg-muted/18"}function Le(t){const a=[`${t.activeProfileCount} routed`,`${t.nativeProfileCount} native`];return t.mappedProfileCount>0&&a.push(`${t.mappedProfileCount} override${t.mappedProfileCount===1?"":"s"}`),a.join(" · ")}function Ve(t){return Object.entries(t).reduce((a,[l,g])=>{const j=g.trim();return a[l]=j||null,a},{})}function q(t){return Object.entries(t).filter(([,a])=>a.trim().length>0).map(([a])=>a)}function Ue(t){return t.reduce((a,l)=>{const g=l.profileName.trim();return!g||!l.backendId||(a[g]=l.backendId),a},{})}function ge(t,a){const l=Number.parseInt(t.trim(),10);return Number.isInteger(l)?String(Math.min(600,Math.max(10,l))):a}function T({title:t,description:a,icon:l,meta:g,action:j,children:o,className:D}){return e.jsxs("div",{className:u("relative overflow-hidden rounded-2xl border bg-gradient-to-br from-background via-background to-muted/25 p-4 shadow-sm",D),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:l}),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}),g]}),e.jsx("p",{className:"mt-0.5 text-sm leading-5 text-muted-foreground",children:a})]})]}),j&&e.jsx("div",{className:"shrink-0",children:j})]}),e.jsx("div",{className:"space-y-3",children:o})]})]})}function er(){const{fetchRawConfig:t}=je(),[a,l]=d.useState(null),[g,j]=d.useState(!0),[o,D]=d.useState(!1),[I,N]=d.useState(null),[S,K]=d.useState(null),[E,Y]=d.useState(!1),[_,Q]=d.useState(!0),[L,V]=d.useState("60"),[f,P]=d.useState(""),[k,$]=d.useState({}),[x,z]=d.useState([]),w=d.useCallback(r=>{Q(r.config.enabled),V(String(r.config.timeout)),P(r.config.fallbackBackend??""),$(r.catalog.knownBackends.reduce((s,n)=>(s[n]=r.config.providerModels[n]??"",s),{})),z(Te(r.config.profileBackends))},[]),U=d.useCallback(async()=>{try{j(!0),N(null);const r=await re.imageAnalysis.get();if(!Ae(r))throw new Error("Image settings returned an unexpected response. Restart the dashboard server so the new API route is available.");l(r),w(r)}catch(r){N(r instanceof Error?r.message:"Failed to load image settings.")}finally{j(!1)}},[w]);d.useEffect(()=>{U(),t()},[U,t]),d.useEffect(()=>{if(!S)return;const r=window.setTimeout(()=>K(null),2500);return()=>window.clearTimeout(r)},[S]),d.useEffect(()=>{a&&Object.keys(a.config.profileBackends).length>0&&Y(!0)},[a]);const m=d.useMemo(()=>q(k),[k]),W=d.useMemo(()=>{if(!a)return[];const r=a.catalog.knownBackends.filter(n=>m.includes(n)),s=a.catalog.knownBackends.filter(n=>!m.includes(n));return[...r,...s]},[m,a]),F=d.useMemo(()=>a?.profiles.filter(r=>r.nativeReadPreference)??[],[a]);d.useEffect(()=>{if(m.length===0){P("");return}m.includes(f)||P(m[0])},[m,f]);const R=d.useCallback(async r=>{if(!a)return!1;const s=r?.enabled??_,n=r?.providerModels??k,i=q(n),b=ge(r?.timeout??L,String(a.config.timeout)),h=r?.fallbackBackend??f,C=i.length===0?"":i.includes(h)?h:i[0],p=r?.mappingDrafts??x,A={enabled:s,timeout:b,fallbackBackend:C,providerModels:Ve(n),profileBackends:Ue(p)},ve={enabled:a.config.enabled,timeout:String(a.config.timeout),fallbackBackend:a.config.fallbackBackend??"",providerModels:a.catalog.knownBackends.reduce((v,ee)=>(v[ee]=a.config.providerModels[ee]??null,v),{}),profileBackends:a.config.profileBackends};if(JSON.stringify(A)===JSON.stringify(ve))return!0;if(s&&i.length===0)return N("Keep at least one provider model configured, or disable Image globally."),w(a),!1;try{D(!0),N(null);const v=await re.imageAnalysis.update({enabled:s,timeout:Number.parseInt(b,10),fallbackBackend:C||null,providerModels:A.providerModels,profileBackends:A.profileBackends});return l(v),w(v),K("Image settings saved."),await t(),!0}catch(v){return N(v instanceof Error?v.message:"Failed to save image settings."),w(a),!1}finally{D(!1)}},[a,_,f,t,w,x,k,L]),X=async()=>{g||o||(K(null),await Promise.all([U(),t()]))},xe=async r=>{if(!o){if(r&&m.length===0){N("Keep at least one provider model configured, or disable Image globally.");return}Q(r),await R({enabled:r})}},be=async r=>{if(!a||o)return;const s=ge(r,String(a.config.timeout));V(s),await R({timeout:s})},pe=async r=>{o||(P(r),await R({fallbackBackend:r}))},Z=async(r,s)=>{if(!a||o)return;const n=s.trim(),i={...k,[r]:n},b=q(i);if(_&&b.length===0){N("Disable Image first or keep one backend configured."),$(C=>({...C,[r]:a.config.providerModels[r]??""}));return}const h=b.length===0?"":b.includes(f)?f:b[0];$(i),P(h),await R({providerModels:i,fallbackBackend:h})},fe=(r,s)=>{z(n=>n.map(i=>i.id===r?{...i,...s}:i))},H=async r=>{o||(z(r),await R({mappingDrafts:r}))},he=x.filter(r=>r.profileName.trim()&&r.backendId).length;return g?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(J,{className:"w-5 h-5 animate-spin"}),e.jsx("span",{children:"Loading image settings..."})]})}):a?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||S?"translate-y-0 opacity-100":"pointer-events-none -translate-y-2 opacity-0"}`,children:[I&&e.jsxs(ae,{variant:"destructive",className:"py-2 shadow-lg",children:[e.jsx(le,{className:"h-4 w-4"}),e.jsx(te,{children:I})]}),S&&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(ke,{className:"h-4 w-4 shrink-0"}),e.jsx("span",{className:"text-sm font-medium",children:S})]})]}),e.jsx(Ne,{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(oe,{className:"h-4 w-4"})}),e.jsx("p",{className:"text-sm font-semibold tracking-tight",children:"Image"})]}),e.jsxs("div",{className:"mt-1 flex flex-wrap items-center gap-2 text-sm text-muted-foreground",children:[e.jsx(c,{className:u("border",De(a.summary.state)),children:a.summary.title}),e.jsx("span",{children:Le(a.summary)})]})]}),e.jsx(B,{variant:"ghost",size:"sm",onClick:X,disabled:g||o,"aria-label":"Refresh",title:"Refresh",children:e.jsx(J,{className:`h-4 w-4 ${g?"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:a.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:a.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:"Global toggle, timeout, and fallback.",icon:e.jsx(we,{className:"h-4 w-4"}),meta:e.jsxs(c,{variant:"outline",className:"border-amber-500/25 bg-amber-500/10 text-[10px]",children:[m.length," configured"]}),children:[e.jsxs("div",{className:"grid gap-2 lg:grid-cols-3",children:[e.jsxs("div",{className:u("rounded-[18px] border px-3.5 py-3 shadow-sm",y()),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:_?"Transformer on":"Transformer off"}),e.jsx("p",{className:"text-[11px] leading-4 text-muted-foreground",children:"Profile flags stay untouched."})]}),e.jsx(ye,{checked:_,onCheckedChange:r=>{xe(r)},disabled:o})]})]}),e.jsxs("div",{className:u("rounded-[18px] border px-3.5 py-3 shadow-sm",y()),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(G,{value:L,onChange:r=>V(r.target.value),inputMode:"numeric",className:"h-10 border-amber-500/15 bg-background/90 text-base",disabled:o,onBlur:r=>{be(r.currentTarget.value)},onKeyDown:r=>{r.key==="Enter"&&r.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:u("rounded-[18px] border px-3.5 py-3 shadow-sm",y()),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(se,{value:f||M,onValueChange:r=>{pe(r===M?"":r)},disabled:o,children:[e.jsx(ne,{className:"h-10 border-amber-500/15 bg-background/90",children:e.jsx(ie,{placeholder:"Choose backend"})}),e.jsx(de,{children:m.length===0?e.jsx(O,{value:M,children:"Configure a model first"}):m.map(r=>e.jsx(O,{value:r,children:r},r))})]})}),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:[he," 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:[F.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:[f||"No fallback"," fallback"]})]})]}),e.jsx(T,{tone:"cyan",eyebrow:"Route inventory",title:"Backend routes",description:"Model entry plus route health.",icon:e.jsx(Ce,{className:"h-4 w-4"}),meta:e.jsxs(c,{variant:"outline",className:"border-cyan-500/25 bg-cyan-500/10 text-[10px]",children:[W.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:W.map((r,s)=>{const n=a.backends.find(p=>p.backendId===r),i=n?.displayName||r,b=k[r]??"",h=$e(n),C=b?[`${n?.profilesUsing??0} active`,n?.authReadiness==="missing"?"auth missing":n?.proxyReadiness==="stopped"?"starts on launch":null].filter(Boolean).join(" · "):"No model configured.";return e.jsxs("div",{className:u("relative px-3 py-3 md:px-4",s>0&&"border-t border-cyan-500/10",Fe(n?.state)),children:[e.jsx("div",{className:u("absolute bottom-3 left-0 top-3 w-1 rounded-r-full bg-gradient-to-b",Oe(n?.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:i}),e.jsx(c,{variant:"outline",className:"font-mono text-[10px]",children:r}),n?.profilesUsing?e.jsxs(c,{variant:"outline",className:"border-cyan-500/20 bg-cyan-500/10 text-[10px]",children:[n.profilesUsing," active"]}):null]}),e.jsx("p",{className:"mt-0.5 text-[11px] leading-4 text-muted-foreground",children:C})]}),e.jsx(c,{className:u("border",n?Ie(n.state):"border-border/80 bg-background/85 text-muted-foreground"),children:n?Ee(n.state):"Inactive"})]}),e.jsxs("div",{className:"mt-2 flex flex-col gap-2 sm:flex-row",children:[e.jsx(G,{className:"h-10 flex-1 border-cyan-500/15 bg-background/88 text-base",placeholder:"Set model",value:b,disabled:o,onChange:p=>$(A=>({...A,[r]:p.target.value})),onBlur:p=>{Z(r,p.currentTarget.value)},onKeyDown:p=>{p.key==="Enter"&&p.currentTarget.blur()}}),b.trim().length>0&&e.jsx(B,{type:"button",variant:"outline",size:"sm",className:"h-10 sm:self-stretch",disabled:o,onClick:()=>{Z(r,"")},children:"Clear"})]}),h&&e.jsx("p",{className:"mt-1.5 text-[11px] leading-4 text-muted-foreground",children:h})]})]},r)})})}),e.jsx(T,{tone:"emerald",eyebrow:"Native path",title:"Native reading",description:"Profiles that skip the transformer.",icon:e.jsx(Be,{className:"h-4 w-4"}),meta:e.jsxs(c,{variant:"outline",children:[F.length," profiles"]}),children:F.length===0?e.jsx("div",{className:u("rounded-[18px] border border-dashed px-3.5 py-3.5 text-sm text-muted-foreground",y()),children:"No profiles prefer native reading yet."}):e.jsx("div",{className:"grid gap-2 md:grid-cols-2",children:F.map(r=>e.jsx("div",{className:u("rounded-[18px] border px-3.5 py-3 shadow-sm",y()),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:r.name}),e.jsx(c,{variant:"outline",className:"text-[10px]",children:r.kind==="variant"?"Variant":"Profile"}),e.jsx(c,{variant:"outline",className:"text-[10px]",children:r.nativeImageCapable?"Verified":"Review"})]}),e.jsxs("div",{className:"mt-1 text-[11px] leading-4 text-muted-foreground",children:[r.profileModel||"Model not detected"," ·"," ",r.nativeImageReason||"Native read preferred."]})]}),e.jsx(c,{className:u("border",ue(r.currentTargetMode)),children:me(r.currentTargetMode)})]})},`native-${r.kind}-${r.name}`))})}),e.jsxs(T,{tone:"slate",eyebrow:"Override lab",title:"Profile routing",description:"Only for explicit route overrides.",icon:e.jsx(Re,{className:"h-4 w-4"}),meta:e.jsx(c,{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(B,{type:"button",variant:"outline",size:"sm",onClick:()=>Y(r=>!r),children:[E?e.jsx(Se,{className:"mr-1 h-4 w-4"}):e.jsx(_e,{className:"mr-1 h-4 w-4"}),E?"Hide":"Show"]}),E&&e.jsxs(B,{type:"button",variant:"outline",size:"sm",onClick:()=>z(r=>[...r,{id:`mapping-${Date.now()}`,profileName:"",backendId:m[0]??""}]),disabled:m.length===0||o,children:[e.jsx(Pe,{className:"mr-1 h-4 w-4"}),"Add mapping"]})]}),className:"border-dashed",children:[e.jsx("datalist",{id:"image-profile-suggestions",children:a.catalog.profileNames.map(r=>e.jsx("option",{value:r},r))}),E?e.jsx("div",{className:"space-y-2",children:x.length===0?e.jsx("div",{className:u("rounded-[18px] border border-dashed px-3.5 py-3.5 text-sm text-muted-foreground",y()),children:"No explicit overrides saved."}):e.jsx("div",{className:"space-y-2",children:x.map(r=>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:"Direct override"}),!(r.profileName.trim()&&r.backendId)&&e.jsx(c,{variant:"outline",className:"text-[10px]",children:"Draft"})]}),e.jsxs(B,{type:"button",variant:"ghost",size:"sm",disabled:o,onClick:()=>{const s=x.filter(n=>n.id!==r.id);H(s)},children:[e.jsx(Me,{className:"mr-1 h-4 w-4"}),"Remove"]})]}),e.jsxs("div",{className:"mt-2 grid gap-2 sm:grid-cols-2",children:[e.jsx(G,{value:r.profileName,list:"image-profile-suggestions",disabled:o,placeholder:"Profile or variant name",className:"h-10 border-slate-400/15 bg-background/88 text-base",onChange:s=>{fe(r.id,{profileName:s.target.value})},onBlur:s=>{const n=x.map(i=>i.id===r.id?{...i,profileName:s.currentTarget.value.trim()}:i);H(n)},onKeyDown:s=>{s.key==="Enter"&&s.currentTarget.blur()}}),e.jsxs(se,{value:r.backendId||M,disabled:o,onValueChange:s=>{const n=x.map(i=>i.id===r.id?{...i,backendId:s===M?"":s}:i);H(n)},children:[e.jsx(ne,{className:"h-10 border-slate-400/15 bg-background/88",children:e.jsx(ie,{placeholder:"Choose backend"})}),e.jsx(de,{children:m.length===0?e.jsx(O,{value:M,children:"Configure a model first"}):m.map(s=>e.jsx(O,{value:s,children:s},s))})]})]})]},r.id))})}):e.jsxs("div",{className:u("rounded-[18px] border border-dashed px-3.5 py-3 text-sm text-muted-foreground",y()),children:["Hidden by default.",x.length>0?` ${x.length} override${x.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(oe,{className:"h-4 w-4"}),meta:e.jsxs(c,{variant:"outline",children:[a.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:a.profiles.map((r,s)=>e.jsxs("div",{className:u("grid gap-2 px-3.5 py-2.5 md:grid-cols-[minmax(0,1fr)_auto] md:items-center",s>0&&"border-t border-slate-400/12",Ke(s,r)),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:r.name}),e.jsx(c,{variant:"outline",className:"text-[10px]",children:r.kind==="variant"?"Variant":"Profile"}),e.jsx(c,{variant:"outline",className:"font-mono text-[10px] uppercase",children:r.target}),r.nativeReadPreference&&e.jsx(c,{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:[r.backendDisplayName||r.profileModel||"Native file access"," ·"," ",ze(r.resolutionSource)]})]}),e.jsxs("div",{className:"flex items-center gap-2 md:justify-end",children:[r.profileModel&&e.jsx(c,{variant:"outline",className:"font-mono text-[10px]",children:r.profileModel}),e.jsx(c,{className:u("border",ue(r.currentTargetMode)),children:me(r.currentTargetMode)})]})]},`${r.kind}-${r.name}`))})})]})})]}):e.jsxs("div",{className:"p-5",children:[e.jsxs(ae,{variant:"destructive",children:[e.jsx(le,{className:"h-4 w-4"}),e.jsx(te,{children:I??"Failed to load image settings."})]}),e.jsx("div",{className:"mt-4",children:e.jsxs(B,{variant:"outline",size:"sm",onClick:X,children:[e.jsx(J,{className:"mr-1 h-4 w-4"}),"Retry"]})})]})}export{er as default};
@@ -1 +1 @@
1
- import{j as e}from"./radix-ui-Zb8sVEtn.js";import{r as o}from"./react-vendor-CNOkPC89.js";import{a as q,be as J,bg as X,d as I,n as Y,L as A,r as R,s as M,t as K,v as B,w as E,I as F,aF as Q}from"./index-BmSzf0T9.js";import{R as $,w as Z,x as ee,ac as se,_ as te,s as re}from"./icons-KVCk4_U8.js";import"./tanstack-CrmUhA7Z.js";import"./notifications-B2HqRBj7.js";import"./utils-CzKF5WmX.js";import"./form-utils-Bcoyqxpq.js";import"./code-highlight-BRUf_pqB.js";const z={mode:"auto",tier_defaults:{opus:"high",sonnet:"medium",haiku:"low"},show_warnings:!0},U=1e4;function ie(){const[t,i]=o.useState(null),[b,d]=o.useState(!0),[_,N]=o.useState(!1),[p,g]=o.useState(null),[P,y]=o.useState(!1),f=o.useRef(void 0),w=o.useRef(!1),k=o.useCallback(async()=>{const r=new AbortController,c=setTimeout(()=>r.abort(),U);try{d(!0),g(null);const n=await fetch("/api/thinking",{signal:r.signal});if(clearTimeout(c),!n.ok)throw n.headers.get("content-type")?.includes("text/html")?new Error(`Server error (${n.status})`):new Error("Failed to load Thinking config");const m=await n.json();i(m.config||z),f.current=m.lastModified,w.current=!0}catch(n){clearTimeout(c),n.name==="AbortError"?g("Request timeout - please try again"):g(n.message)}finally{d(!1)}return()=>r.abort()},[]),l=o.useCallback(async r=>{if(!w.current||t===null){g("Cannot save settings before they load. Click Refresh and try again.");return}const c=t,n={...c,...r.mode!==void 0?{mode:r.mode}:{},...r.tier_defaults!==void 0?{tier_defaults:r.tier_defaults}:{},...r.show_warnings!==void 0?{show_warnings:r.show_warnings}:{}};r.clear_override||r.override===null?delete n.override:r.override!==void 0&&(n.override=r.override),r.clear_provider_overrides||r.provider_overrides===null?delete n.provider_overrides:r.provider_overrides!==void 0&&(n.provider_overrides=r.provider_overrides),i(n);const m=new AbortController,h=setTimeout(()=>m.abort(),U);try{N(!0),g(null);const x={...n,lastModified:f.current},u=await fetch("/api/thinking",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(x),signal:m.signal});if(clearTimeout(h),!u.ok){if(u.headers.get("content-type")?.includes("text/html"))throw new Error(`Server error (${u.status})`);const s=await u.json();throw u.status===409?new Error("Config changed by another session. Refreshing..."):new Error(s.error||"Failed to save")}const v=await u.json();i(v.config),f.current=v.lastModified,y(!0),setTimeout(()=>y(!1),1500)}catch(x){clearTimeout(h),i(c),x.name==="AbortError"?g("Request timeout - please try again"):(g(x.message),x.message.includes("another session")&&setTimeout(()=>k(),1e3))}finally{N(!1)}},[t,k]),T=o.useCallback(r=>{l({mode:r})},[l]),C=o.useCallback((r,c)=>{const n=t?.tier_defaults||z.tier_defaults;l({tier_defaults:{...n,[r]:c}})},[t,l]),O=o.useCallback(r=>{l({show_warnings:r})},[l]),D=o.useCallback(r=>{if(r===void 0){l({override:null,clear_override:!0});return}l({override:r,clear_override:!1})},[l]),L=o.useCallback((r,c,n)=>{const m=t?.provider_overrides||{},h=m[r]||{};if(n===void 0){const{[c]:x,...u}=h,v=Object.keys(u).length>0?u:void 0,{[r]:S,...s}=m,a=v?{...s,[r]:v}:s;l({provider_overrides:Object.keys(a).length>0?a:null,clear_provider_overrides:Object.keys(a).length===0})}else l({provider_overrides:{...m,[r]:{...h,[c]:n}},clear_provider_overrides:!1})},[t,l]);return{config:t||z,loading:b,saving:_,error:p,success:P,fetchConfig:k,saveConfig:l,setMode:T,setTierDefault:C,setShowWarnings:O,setOverride:D,setProviderOverride:L}}const H=[{value:"minimal",label:"Minimal (512 tokens)"},{value:"low",label:"Low (1K tokens)"},{value:"medium",label:"Medium (8K tokens)"},{value:"high",label:"High (24K tokens)"},{value:"xhigh",label:"Extra High (32K tokens)"},{value:"auto",label:"Auto (dynamic)"}],ne=[{value:"__none__",label:"None (use CLI flags only)"},...H,{value:"__custom__",label:"Custom budget (number)"},{value:"off",label:"Off (disable thinking)"}],ae=["agy","gemini","codex"],G=0,V=1e5;function fe(){const{t}=q(),{config:i,loading:b,saving:d,error:_,success:N,fetchConfig:p,setMode:g,setTierDefault:P,setShowWarnings:y,setOverride:f,setProviderOverride:w}=ie(),[k,l]=o.useState(null),[T,C]=o.useState(""),[O,D]=o.useState([]),[L,r]=o.useState(null),c=o.useMemo(()=>Array.from(new Set([...ae,...Object.keys(i.provider_overrides??{}),...O])),[O,i.provider_overrides]),n=i.override===void 0?"__none__":typeof i.override=="number"||/^\d+$/.test(String(i.override))?"__custom__":String(i.override),m=typeof i.override=="number"||/^\d+$/.test(String(i.override??""))?String(i.override):"",h=L??m,x=Object.keys(i.provider_overrides??{}).length>0,u=k??x;o.useEffect(()=>{p()},[p]);const v=()=>{const s=T.trim().toLowerCase();s&&(c.includes(s)||D(a=>[...a,s]),C(""),l(!0))},S=()=>{const s=h.trim();if(!s){f(void 0);return}const a=Number.parseInt(s,10);Number.isNaN(a)||a<G||a>V||!/^\d+$/.test(s)||f(a)};return b?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($,{className:"w-5 h-5 animate-spin"}),e.jsx("span",{children:t("settings.loading")})]})}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:`absolute left-5 right-5 top-20 z-10 transition-all duration-200 ease-out ${_||N?"opacity-100 translate-y-0":"opacity-0 -translate-y-2 pointer-events-none"}`,children:[_&&e.jsx(J,{variant:"destructive",className:"py-2 shadow-lg",children:e.jsxs("div",{className:"flex items-center justify-between w-full",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Z,{className:"h-4 w-4"}),e.jsx(X,{children:_})]}),e.jsxs(I,{variant:"outline",size:"sm",onClick:p,className:"h-7 px-2 text-xs border-destructive/50 hover:bg-destructive/10",children:[e.jsx($,{className:"w-3 h-3 mr-1"}),t("sharedPage.retry")]})]})}),N&&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(ee,{className:"h-4 w-4 shrink-0"}),e.jsx("span",{className:"text-sm font-medium",children:t("settings.saved")})]})]}),e.jsx(Y,{className:"flex-1",children:e.jsxs("div",{className:"p-5 space-y-6",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(se,{className:"w-5 h-5 text-primary"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("settingsThinking.description")})]}),e.jsxs("div",{className:"flex items-start gap-2 p-3 rounded-lg bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800",children:[e.jsx(te,{className:"w-4 h-4 text-blue-600 dark:text-blue-400 shrink-0 mt-0.5"}),e.jsxs("div",{className:"text-sm text-blue-700 dark:text-blue-300",children:[e.jsx("p",{className:"font-medium",children:t("settingsThinking.supportedProviders")}),e.jsxs("ul",{className:"mt-1 space-y-0.5 text-blue-600 dark:text-blue-400",children:[e.jsxs("li",{children:[t("settingsThinking.supportLine1Prefix")," ",e.jsx("strong",{children:"agy"}),","," ",e.jsx("strong",{children:"gemini"})," ",t("settingsThinking.supportLine1Suffix")]}),e.jsxs("li",{children:[t("settingsThinking.supportLine2Prefix")," ",e.jsx("strong",{children:"codex"})," ",t("settingsThinking.supportLine2SuffixPrefix"),e.jsx("code",{children:"--effort"}),t("settingsThinking.supportLine2SuffixPostfix")]}),e.jsxs("li",{children:[t("settingsThinking.supportLine3Prefix")," ",e.jsx("code",{children:"-high"}),t("settingsThinking.supportLine3Suffix")]})]})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-base font-medium",children:t("settingsThinking.modeTitle")}),e.jsx("div",{className:"space-y-2",children:["auto","off","manual"].map(s=>e.jsxs("div",{className:`flex items-center justify-between p-4 rounded-lg cursor-pointer transition-colors ${i.mode===s?"bg-primary/10 border border-primary/30":"bg-muted/50 hover:bg-muted/80"} ${d?"opacity-70 pointer-events-none":""}`,onClick:()=>{d||g(s)},children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium capitalize",children:s}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:[s==="auto"&&t("settingsThinking.modeAutoDesc"),s==="off"&&t("settingsThinking.modeOffDesc"),s==="manual"&&t("settingsThinking.modeManualDesc")]})]}),e.jsx("div",{className:`w-4 h-4 rounded-full border-2 ${i.mode===s?"bg-primary border-primary":"border-muted-foreground/50"}`})]},s))})]}),i.mode==="auto"&&e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-base font-medium",children:t("settingsThinking.tierDefaults")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("settingsThinking.tierDefaultsDesc")}),e.jsx("div",{className:"space-y-3",children:["opus","sonnet","haiku"].map(s=>e.jsxs("div",{className:"flex items-center gap-4 p-3 rounded-lg bg-muted/30",children:[e.jsx(A,{className:"w-20 capitalize font-medium",children:s}),e.jsxs(R,{value:i.tier_defaults[s],onValueChange:a=>P(s,a),disabled:d,children:[e.jsx(M,{className:"flex-1",children:e.jsx(K,{})}),e.jsx(B,{children:H.map(a=>e.jsx(E,{value:a.value,children:a.label},a.value))})]})]},s))})]}),i.mode==="manual"&&e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-base font-medium",children:t("settingsThinking.persistentOverride")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("settingsThinking.persistentOverrideDesc")}),e.jsxs(R,{value:n,onValueChange:s=>{if(s==="__none__"){f(void 0);return}if(s==="__custom__"){h||r("8192");return}r(null),f(s)},disabled:d,children:[e.jsx(M,{children:e.jsx(K,{})}),e.jsx(B,{children:ne.map(s=>e.jsx(E,{value:s.value,children:s.label},s.value))})]}),n==="__custom__"&&e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(F,{type:"number",min:G,max:V,value:h,onChange:s=>r(s.target.value),onBlur:S,disabled:d,placeholder:t("settingsThinking.enterCustomBudget")}),e.jsx(I,{type:"button",size:"sm",variant:"outline",onClick:S,disabled:d,children:t("settingsThinking.apply")})]}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["Range: ",G," to ",V]})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("button",{type:"button",className:"flex items-center gap-2 text-base font-medium w-full text-left",onClick:()=>l(s=>!(s??x)),disabled:d,children:[e.jsx(re,{className:`w-4 h-4 transition-transform ${u?"rotate-0":"-rotate-90"}`}),t("settingsThinking.providerOverrides",{count:Object.keys(i.provider_overrides??{}).length})]}),u&&e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:t("settingsThinking.providerOverridesDesc")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(F,{value:T,onChange:s=>C(s.target.value),disabled:d,placeholder:t("settingsThinking.addProviderPlaceholder")}),e.jsx(I,{type:"button",size:"sm",variant:"outline",onClick:v,disabled:d,children:t("settingsGlobalEnv.add")})]}),c.map(s=>e.jsxs("div",{className:"space-y-2 p-3 rounded-lg bg-muted/30",children:[e.jsx(A,{className:"capitalize font-medium text-sm",children:s}),e.jsx("div",{className:"grid grid-cols-3 gap-2",children:["opus","sonnet","haiku"].map(a=>{const W=i.provider_overrides?.[s]?.[a]||"__default__";return e.jsxs("div",{className:"space-y-1",children:[e.jsx(A,{className:"text-xs text-muted-foreground capitalize",children:a}),e.jsxs(R,{value:W,onValueChange:j=>w(s,a,j==="__default__"?void 0:j),disabled:d,children:[e.jsx(M,{className:"h-8 text-xs",children:e.jsx(K,{})}),e.jsxs(B,{children:[e.jsx(E,{value:"__default__",children:t("cursorPage.default")}),H.map(j=>e.jsx(E,{value:j.value,children:j.label},j.value))]})]})]},a)})})]},s))]})]}),e.jsxs("div",{className:"flex items-center justify-between p-4 rounded-lg bg-muted/50",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium",children:t("settingsThinking.showWarnings")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("settingsThinking.showWarningsDesc")})]}),e.jsx(Q,{checked:i.show_warnings??!0,onCheckedChange:y,disabled:d})]}),e.jsxs("div",{className:"p-4 rounded-lg border bg-muted/30",children:[e.jsx("h4",{className:"text-sm font-medium mb-2",children:t("settingsThinking.cliEnvOverride")}),e.jsxs("p",{className:"text-sm text-muted-foreground mb-2",children:["Override per session with flags or"," ",e.jsx("code",{className:"px-1.5 py-0.5 rounded bg-muted",children:"CCS_THINKING"})," env var. Priority: flag > env > config."]}),e.jsxs("div",{className:"space-y-1 text-sm font-mono text-muted-foreground",children:[e.jsx("p",{children:"ccs gemini --thinking high"}),e.jsx("p",{children:"ccs codex --effort xhigh"}),e.jsx("p",{children:'CCS_THINKING=high ccs codex "debug this"'}),e.jsx("p",{children:"ccs config thinking --mode auto"})]})]})]})}),e.jsx("div",{className:"p-4 border-t bg-background",children:e.jsxs(I,{variant:"outline",size:"sm",onClick:p,disabled:b||d,className:"w-full",children:[e.jsx($,{className:`w-4 h-4 mr-2 ${b?"animate-spin":""}`}),t("settings.refresh")]})})]})}export{fe as default};
1
+ import{j as e}from"./radix-ui-Zb8sVEtn.js";import{r as o}from"./react-vendor-CNOkPC89.js";import{a as q,be as J,bg as X,d as I,n as Y,L as A,r as R,s as M,t as K,v as B,w as E,I as F,aF as Q}from"./index-DOn6k1jF.js";import{R as $,w as Z,x as ee,ac as se,_ as te,s as re}from"./icons-KVCk4_U8.js";import"./tanstack-CrmUhA7Z.js";import"./notifications-B2HqRBj7.js";import"./utils-CzKF5WmX.js";import"./form-utils-Bcoyqxpq.js";import"./code-highlight-BRUf_pqB.js";const z={mode:"auto",tier_defaults:{opus:"high",sonnet:"medium",haiku:"low"},show_warnings:!0},U=1e4;function ie(){const[t,i]=o.useState(null),[b,d]=o.useState(!0),[_,N]=o.useState(!1),[p,g]=o.useState(null),[P,y]=o.useState(!1),f=o.useRef(void 0),w=o.useRef(!1),k=o.useCallback(async()=>{const r=new AbortController,c=setTimeout(()=>r.abort(),U);try{d(!0),g(null);const n=await fetch("/api/thinking",{signal:r.signal});if(clearTimeout(c),!n.ok)throw n.headers.get("content-type")?.includes("text/html")?new Error(`Server error (${n.status})`):new Error("Failed to load Thinking config");const m=await n.json();i(m.config||z),f.current=m.lastModified,w.current=!0}catch(n){clearTimeout(c),n.name==="AbortError"?g("Request timeout - please try again"):g(n.message)}finally{d(!1)}return()=>r.abort()},[]),l=o.useCallback(async r=>{if(!w.current||t===null){g("Cannot save settings before they load. Click Refresh and try again.");return}const c=t,n={...c,...r.mode!==void 0?{mode:r.mode}:{},...r.tier_defaults!==void 0?{tier_defaults:r.tier_defaults}:{},...r.show_warnings!==void 0?{show_warnings:r.show_warnings}:{}};r.clear_override||r.override===null?delete n.override:r.override!==void 0&&(n.override=r.override),r.clear_provider_overrides||r.provider_overrides===null?delete n.provider_overrides:r.provider_overrides!==void 0&&(n.provider_overrides=r.provider_overrides),i(n);const m=new AbortController,h=setTimeout(()=>m.abort(),U);try{N(!0),g(null);const x={...n,lastModified:f.current},u=await fetch("/api/thinking",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(x),signal:m.signal});if(clearTimeout(h),!u.ok){if(u.headers.get("content-type")?.includes("text/html"))throw new Error(`Server error (${u.status})`);const s=await u.json();throw u.status===409?new Error("Config changed by another session. Refreshing..."):new Error(s.error||"Failed to save")}const v=await u.json();i(v.config),f.current=v.lastModified,y(!0),setTimeout(()=>y(!1),1500)}catch(x){clearTimeout(h),i(c),x.name==="AbortError"?g("Request timeout - please try again"):(g(x.message),x.message.includes("another session")&&setTimeout(()=>k(),1e3))}finally{N(!1)}},[t,k]),T=o.useCallback(r=>{l({mode:r})},[l]),C=o.useCallback((r,c)=>{const n=t?.tier_defaults||z.tier_defaults;l({tier_defaults:{...n,[r]:c}})},[t,l]),O=o.useCallback(r=>{l({show_warnings:r})},[l]),D=o.useCallback(r=>{if(r===void 0){l({override:null,clear_override:!0});return}l({override:r,clear_override:!1})},[l]),L=o.useCallback((r,c,n)=>{const m=t?.provider_overrides||{},h=m[r]||{};if(n===void 0){const{[c]:x,...u}=h,v=Object.keys(u).length>0?u:void 0,{[r]:S,...s}=m,a=v?{...s,[r]:v}:s;l({provider_overrides:Object.keys(a).length>0?a:null,clear_provider_overrides:Object.keys(a).length===0})}else l({provider_overrides:{...m,[r]:{...h,[c]:n}},clear_provider_overrides:!1})},[t,l]);return{config:t||z,loading:b,saving:_,error:p,success:P,fetchConfig:k,saveConfig:l,setMode:T,setTierDefault:C,setShowWarnings:O,setOverride:D,setProviderOverride:L}}const H=[{value:"minimal",label:"Minimal (512 tokens)"},{value:"low",label:"Low (1K tokens)"},{value:"medium",label:"Medium (8K tokens)"},{value:"high",label:"High (24K tokens)"},{value:"xhigh",label:"Extra High (32K tokens)"},{value:"auto",label:"Auto (dynamic)"}],ne=[{value:"__none__",label:"None (use CLI flags only)"},...H,{value:"__custom__",label:"Custom budget (number)"},{value:"off",label:"Off (disable thinking)"}],ae=["agy","gemini","codex"],G=0,V=1e5;function fe(){const{t}=q(),{config:i,loading:b,saving:d,error:_,success:N,fetchConfig:p,setMode:g,setTierDefault:P,setShowWarnings:y,setOverride:f,setProviderOverride:w}=ie(),[k,l]=o.useState(null),[T,C]=o.useState(""),[O,D]=o.useState([]),[L,r]=o.useState(null),c=o.useMemo(()=>Array.from(new Set([...ae,...Object.keys(i.provider_overrides??{}),...O])),[O,i.provider_overrides]),n=i.override===void 0?"__none__":typeof i.override=="number"||/^\d+$/.test(String(i.override))?"__custom__":String(i.override),m=typeof i.override=="number"||/^\d+$/.test(String(i.override??""))?String(i.override):"",h=L??m,x=Object.keys(i.provider_overrides??{}).length>0,u=k??x;o.useEffect(()=>{p()},[p]);const v=()=>{const s=T.trim().toLowerCase();s&&(c.includes(s)||D(a=>[...a,s]),C(""),l(!0))},S=()=>{const s=h.trim();if(!s){f(void 0);return}const a=Number.parseInt(s,10);Number.isNaN(a)||a<G||a>V||!/^\d+$/.test(s)||f(a)};return b?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($,{className:"w-5 h-5 animate-spin"}),e.jsx("span",{children:t("settings.loading")})]})}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:`absolute left-5 right-5 top-20 z-10 transition-all duration-200 ease-out ${_||N?"opacity-100 translate-y-0":"opacity-0 -translate-y-2 pointer-events-none"}`,children:[_&&e.jsx(J,{variant:"destructive",className:"py-2 shadow-lg",children:e.jsxs("div",{className:"flex items-center justify-between w-full",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Z,{className:"h-4 w-4"}),e.jsx(X,{children:_})]}),e.jsxs(I,{variant:"outline",size:"sm",onClick:p,className:"h-7 px-2 text-xs border-destructive/50 hover:bg-destructive/10",children:[e.jsx($,{className:"w-3 h-3 mr-1"}),t("sharedPage.retry")]})]})}),N&&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(ee,{className:"h-4 w-4 shrink-0"}),e.jsx("span",{className:"text-sm font-medium",children:t("settings.saved")})]})]}),e.jsx(Y,{className:"flex-1",children:e.jsxs("div",{className:"p-5 space-y-6",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(se,{className:"w-5 h-5 text-primary"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("settingsThinking.description")})]}),e.jsxs("div",{className:"flex items-start gap-2 p-3 rounded-lg bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800",children:[e.jsx(te,{className:"w-4 h-4 text-blue-600 dark:text-blue-400 shrink-0 mt-0.5"}),e.jsxs("div",{className:"text-sm text-blue-700 dark:text-blue-300",children:[e.jsx("p",{className:"font-medium",children:t("settingsThinking.supportedProviders")}),e.jsxs("ul",{className:"mt-1 space-y-0.5 text-blue-600 dark:text-blue-400",children:[e.jsxs("li",{children:[t("settingsThinking.supportLine1Prefix")," ",e.jsx("strong",{children:"agy"}),","," ",e.jsx("strong",{children:"gemini"})," ",t("settingsThinking.supportLine1Suffix")]}),e.jsxs("li",{children:[t("settingsThinking.supportLine2Prefix")," ",e.jsx("strong",{children:"codex"})," ",t("settingsThinking.supportLine2SuffixPrefix"),e.jsx("code",{children:"--effort"}),t("settingsThinking.supportLine2SuffixPostfix")]}),e.jsxs("li",{children:[t("settingsThinking.supportLine3Prefix")," ",e.jsx("code",{children:"-high"}),t("settingsThinking.supportLine3Suffix")]})]})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-base font-medium",children:t("settingsThinking.modeTitle")}),e.jsx("div",{className:"space-y-2",children:["auto","off","manual"].map(s=>e.jsxs("div",{className:`flex items-center justify-between p-4 rounded-lg cursor-pointer transition-colors ${i.mode===s?"bg-primary/10 border border-primary/30":"bg-muted/50 hover:bg-muted/80"} ${d?"opacity-70 pointer-events-none":""}`,onClick:()=>{d||g(s)},children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium capitalize",children:s}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:[s==="auto"&&t("settingsThinking.modeAutoDesc"),s==="off"&&t("settingsThinking.modeOffDesc"),s==="manual"&&t("settingsThinking.modeManualDesc")]})]}),e.jsx("div",{className:`w-4 h-4 rounded-full border-2 ${i.mode===s?"bg-primary border-primary":"border-muted-foreground/50"}`})]},s))})]}),i.mode==="auto"&&e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-base font-medium",children:t("settingsThinking.tierDefaults")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("settingsThinking.tierDefaultsDesc")}),e.jsx("div",{className:"space-y-3",children:["opus","sonnet","haiku"].map(s=>e.jsxs("div",{className:"flex items-center gap-4 p-3 rounded-lg bg-muted/30",children:[e.jsx(A,{className:"w-20 capitalize font-medium",children:s}),e.jsxs(R,{value:i.tier_defaults[s],onValueChange:a=>P(s,a),disabled:d,children:[e.jsx(M,{className:"flex-1",children:e.jsx(K,{})}),e.jsx(B,{children:H.map(a=>e.jsx(E,{value:a.value,children:a.label},a.value))})]})]},s))})]}),i.mode==="manual"&&e.jsxs("div",{className:"space-y-3",children:[e.jsx("h3",{className:"text-base font-medium",children:t("settingsThinking.persistentOverride")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("settingsThinking.persistentOverrideDesc")}),e.jsxs(R,{value:n,onValueChange:s=>{if(s==="__none__"){f(void 0);return}if(s==="__custom__"){h||r("8192");return}r(null),f(s)},disabled:d,children:[e.jsx(M,{children:e.jsx(K,{})}),e.jsx(B,{children:ne.map(s=>e.jsx(E,{value:s.value,children:s.label},s.value))})]}),n==="__custom__"&&e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(F,{type:"number",min:G,max:V,value:h,onChange:s=>r(s.target.value),onBlur:S,disabled:d,placeholder:t("settingsThinking.enterCustomBudget")}),e.jsx(I,{type:"button",size:"sm",variant:"outline",onClick:S,disabled:d,children:t("settingsThinking.apply")})]}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["Range: ",G," to ",V]})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("button",{type:"button",className:"flex items-center gap-2 text-base font-medium w-full text-left",onClick:()=>l(s=>!(s??x)),disabled:d,children:[e.jsx(re,{className:`w-4 h-4 transition-transform ${u?"rotate-0":"-rotate-90"}`}),t("settingsThinking.providerOverrides",{count:Object.keys(i.provider_overrides??{}).length})]}),u&&e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:t("settingsThinking.providerOverridesDesc")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(F,{value:T,onChange:s=>C(s.target.value),disabled:d,placeholder:t("settingsThinking.addProviderPlaceholder")}),e.jsx(I,{type:"button",size:"sm",variant:"outline",onClick:v,disabled:d,children:t("settingsGlobalEnv.add")})]}),c.map(s=>e.jsxs("div",{className:"space-y-2 p-3 rounded-lg bg-muted/30",children:[e.jsx(A,{className:"capitalize font-medium text-sm",children:s}),e.jsx("div",{className:"grid grid-cols-3 gap-2",children:["opus","sonnet","haiku"].map(a=>{const W=i.provider_overrides?.[s]?.[a]||"__default__";return e.jsxs("div",{className:"space-y-1",children:[e.jsx(A,{className:"text-xs text-muted-foreground capitalize",children:a}),e.jsxs(R,{value:W,onValueChange:j=>w(s,a,j==="__default__"?void 0:j),disabled:d,children:[e.jsx(M,{className:"h-8 text-xs",children:e.jsx(K,{})}),e.jsxs(B,{children:[e.jsx(E,{value:"__default__",children:t("cursorPage.default")}),H.map(j=>e.jsx(E,{value:j.value,children:j.label},j.value))]})]})]},a)})})]},s))]})]}),e.jsxs("div",{className:"flex items-center justify-between p-4 rounded-lg bg-muted/50",children:[e.jsxs("div",{children:[e.jsx("p",{className:"font-medium",children:t("settingsThinking.showWarnings")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("settingsThinking.showWarningsDesc")})]}),e.jsx(Q,{checked:i.show_warnings??!0,onCheckedChange:y,disabled:d})]}),e.jsxs("div",{className:"p-4 rounded-lg border bg-muted/30",children:[e.jsx("h4",{className:"text-sm font-medium mb-2",children:t("settingsThinking.cliEnvOverride")}),e.jsxs("p",{className:"text-sm text-muted-foreground mb-2",children:["Override per session with flags or"," ",e.jsx("code",{className:"px-1.5 py-0.5 rounded bg-muted",children:"CCS_THINKING"})," env var. Priority: flag > env > config."]}),e.jsxs("div",{className:"space-y-1 text-sm font-mono text-muted-foreground",children:[e.jsx("p",{children:"ccs gemini --thinking high"}),e.jsx("p",{children:"ccs codex --effort xhigh"}),e.jsx("p",{children:'CCS_THINKING=high ccs codex "debug this"'}),e.jsx("p",{children:"ccs config thinking --mode auto"})]})]})]})}),e.jsx("div",{className:"p-4 border-t bg-background",children:e.jsxs(I,{variant:"outline",size:"sm",onClick:p,disabled:b||d,className:"w-full",children:[e.jsx($,{className:`w-4 h-4 mr-2 ${b?"animate-spin":""}`}),t("settings.refresh")]})})]})}export{fe as default};