@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 +0,0 @@
1
- import{j as e}from"./radix-ui-Zb8sVEtn.js";import{r as y}from"./react-vendor-CNOkPC89.js";import{bt as te,bu as se,c as u,aF as re,L as ne,I as le,a as de,bv as ie,be as oe,bg as ce,n as be,d as D}from"./index-BmSzf0T9.js";import{M as ue}from"./masked-input-h0XkMSwB.js";import{p as me,R as V,w as ge,x as xe,u as M,n as fe,t as he,s as pe}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";function ye(){const{state:s}=te(),t=se(),x=y.useCallback(async()=>{try{t.setWebSearchLoading(!0),t.setWebSearchError(null);const d=await fetch("/api/websearch");if(!d.ok)throw new Error("Failed to load WebSearch config");const b=await d.json();t.setWebSearchConfig(b)}catch(d){t.setWebSearchError(d.message)}finally{t.setWebSearchLoading(!1)}},[t]),i=y.useCallback(async()=>{try{t.setWebSearchStatusLoading(!0);const d=await fetch("/api/websearch/status");if(!d.ok)throw new Error("Failed to load status");const b=await d.json();t.setWebSearchStatus(b)}catch{}finally{t.setWebSearchStatusLoading(!1)}},[t]),k=y.useCallback(async d=>{const b=s.webSearchConfig;if(!b)return!1;const m={...b,...d,providers:{...b.providers,...d.providers},apiKeys:b.apiKeys};t.setWebSearchConfig(m);try{t.setWebSearchSaving(!0),t.setWebSearchError(null);const f={enabled:m.enabled,providers:m.providers};d.apiKeys&&(f.apiKeys=d.apiKeys);const h=await fetch("/api/websearch",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(f)});if(!h.ok){const g=await h.json();throw new Error(g.error||"Failed to save")}const v=await h.json();return t.setWebSearchConfig(v.websearch),await i(),t.setWebSearchSuccess(!0),setTimeout(()=>t.setWebSearchSuccess(!1),1500),!0}catch(f){return t.setWebSearchConfig(b),t.setWebSearchError(f.message),!1}finally{t.setWebSearchSaving(!1)}},[s.webSearchConfig,t,i]);return{config:s.webSearchConfig,status:s.webSearchStatus,loading:s.webSearchLoading,statusLoading:s.webSearchStatusLoading,saving:s.webSearchSaving,error:s.webSearchError,success:s.webSearchSuccess,fetchConfig:x,fetchStatus:i,saveConfig:k}}const ke={green:{accent:"from-emerald-500 via-lime-400 to-transparent",badge:"border-emerald-500/25 bg-emerald-500/10 text-emerald-800 dark:text-emerald-200",glow:"bg-emerald-500/18 dark:bg-emerald-500/22",surface:"border-emerald-500/30 bg-gradient-to-br from-emerald-500/10 via-background to-background dark:from-emerald-500/14",switchFrame:"border-emerald-500/20 bg-emerald-500/10"},blue:{accent:"from-sky-500 via-blue-500 to-transparent",badge:"border-sky-500/25 bg-sky-500/10 text-sky-800 dark:text-sky-200",glow:"bg-sky-500/18 dark:bg-sky-500/22",surface:"border-sky-500/30 bg-gradient-to-br from-sky-500/10 via-background to-background dark:from-sky-500/14",switchFrame:"border-sky-500/20 bg-sky-500/10"},amber:{accent:"from-amber-500 via-orange-500 to-transparent",badge:"border-amber-500/25 bg-amber-500/10 text-amber-800 dark:text-amber-200",glow:"bg-amber-500/18 dark:bg-amber-500/22",surface:"border-amber-500/30 bg-gradient-to-br from-amber-500/10 via-background to-background dark:from-amber-500/14",switchFrame:"border-amber-500/20 bg-amber-500/10"},cyan:{accent:"from-cyan-500 via-teal-400 to-transparent",badge:"border-cyan-500/25 bg-cyan-500/10 text-cyan-800 dark:text-cyan-200",glow:"bg-cyan-500/18 dark:bg-cyan-500/22",surface:"border-cyan-500/30 bg-gradient-to-br from-cyan-500/10 via-background to-background dark:from-cyan-500/14",switchFrame:"border-cyan-500/20 bg-cyan-500/10"},slate:{accent:"from-slate-500 via-slate-400 to-transparent",badge:"border-slate-500/20 bg-slate-500/10 text-slate-700 dark:text-slate-300",glow:"bg-slate-500/18 dark:bg-slate-500/22",surface:"border-slate-400/30 bg-gradient-to-br from-slate-500/8 via-background to-background dark:from-slate-500/12",switchFrame:"border-slate-400/20 bg-slate-500/10"}};function ve(s){switch(s){case"ready":return{chip:"border-emerald-500/25 bg-emerald-500/10 text-emerald-800 dark:text-emerald-200",dot:"bg-emerald-500"};case"setup":return{chip:"border-amber-500/25 bg-amber-500/10 text-amber-800 dark:text-amber-200",dot:"bg-amber-500"};case"idle":return{chip:"border-border/80 bg-muted/60 text-muted-foreground",dot:"bg-muted-foreground/70"}}}function Y({title:s,description:t,detail:x,badge:i,badgeTone:k,statusLabel:d,statusTone:b,enabled:m,saving:f,onToggle:h,fields:v=[],docsUrl:g,installCommand:N,footerNote:S,children:C}){const j=ke[k],L=ve(b);return e.jsxs("div",{className:u("group relative overflow-hidden rounded-2xl border px-4 py-4 shadow-sm transition-all duration-200",m?j.surface:"border-border/70 bg-gradient-to-br from-background via-background to-muted/25",m&&"shadow-[0_18px_40px_-28px_rgba(15,23,42,0.55)]"),children:[e.jsx("div",{className:u("absolute inset-x-0 top-0 h-px bg-gradient-to-r",j.accent)}),e.jsx("div",{className:u("pointer-events-none absolute -right-6 -top-8 h-28 w-28 rounded-full blur-3xl",j.glow)}),e.jsx("div",{className:"pointer-events-none absolute inset-0 opacity-[0.045]",style:{backgroundImage:"radial-gradient(circle at 1px 1px, currentColor 1px, transparent 0)",backgroundSize:"22px 22px"}}),e.jsxs("div",{className:"relative flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"min-w-0 space-y-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2.5",children:[e.jsx("p",{className:"text-sm font-semibold tracking-tight",children:s}),e.jsx("span",{className:u("rounded-full border px-2 py-0.5 text-[10px] font-semibold uppercase tracking-[0.18em]",j.badge),children:i}),e.jsxs("span",{className:u("inline-flex items-center gap-1.5 rounded-full border px-2 py-0.5 text-[10px] font-medium",L.chip),children:[e.jsx("span",{className:u("h-1.5 w-1.5 rounded-full",L.dot)}),d]})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("p",{className:"text-sm leading-6 text-foreground/90",children:t}),x&&e.jsx("p",{className:"text-xs leading-5 text-muted-foreground",children:x})]})]}),e.jsx("div",{className:u("flex h-10 w-10 shrink-0 items-center justify-center rounded-xl border bg-background/75 backdrop-blur-sm",m?j.switchFrame:"border-border/70"),children:e.jsx(re,{checked:m,onCheckedChange:h,disabled:f})})]}),m&&v.length>0&&e.jsx("div",{className:"relative mt-4 rounded-xl border border-border/65 bg-background/70 p-3 shadow-[inset_0_1px_0_rgba(255,255,255,0.35)] backdrop-blur-sm",children:e.jsx("div",{className:"grid gap-3 md:grid-cols-2",children:v.map(o=>e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx(ne,{htmlFor:o.id,className:"text-[11px] font-medium text-muted-foreground",children:o.label}),o.saved&&e.jsx("span",{className:"text-[11px] font-medium text-emerald-600 dark:text-emerald-400",children:"Saved"})]}),e.jsx(le,{id:o.id,value:o.value,type:o.type??"text",placeholder:o.placeholder,onBlur:o.onBlur,onChange:P=>o.onChange(P.target.value),onKeyDown:o.onKeyDown,className:"h-8 border-border/70 bg-background/80 text-sm",disabled:f}),o.helpText&&e.jsx("p",{className:"text-[11px] text-muted-foreground",children:o.helpText})]},o.id))})}),m&&C&&e.jsx("div",{className:"relative mt-4 rounded-xl border border-border/65 bg-background/70 p-3 shadow-[inset_0_1px_0_rgba(255,255,255,0.35)] backdrop-blur-sm",children:C}),(S||N||g)&&e.jsxs("div",{className:"relative mt-4 space-y-2 rounded-xl border border-border/65 bg-muted/30 p-3",children:[S&&e.jsx("p",{className:"text-xs text-muted-foreground",children:S}),N&&e.jsx("code",{className:"block rounded-lg border border-border/60 bg-background/85 px-2.5 py-2 text-[11px] text-muted-foreground",children:N}),g&&e.jsxs("a",{href:g,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-xs font-medium text-primary hover:underline",children:[e.jsx(me,{className:"h-3 w-3"}),"View docs"]})]})]})}const B=[{id:"exa",title:"Exa",defaultEnabled:!1},{id:"tavily",title:"Tavily",defaultEnabled:!1},{id:"brave",title:"Brave",defaultEnabled:!1},{id:"duckduckgo",title:"DuckDuckGo",defaultEnabled:!0},{id:"legacy",title:"Legacy CLI",defaultEnabled:!1}],z=[{id:"exa",title:"Exa",description:"Highest-priority API backend when enabled. Best for strong relevance and extracted text.",badge:"EXA_API_KEY",badgeTone:"amber",defaultEnabled:!1,fallbackDetail:"Set EXA_API_KEY",footerNote:"Runs before every other provider in the chain when enabled and ready.",fields:[{key:"max_results",label:"Max results",type:"number",placeholder:"5",helpText:"Clamp between 1 and 10 results.",defaultValue:5,min:1,max:10}]},{id:"tavily",title:"Tavily",description:"Agent-oriented API backend with concise web result content.",badge:"TAVILY_API_KEY",badgeTone:"cyan",defaultEnabled:!1,fallbackDetail:"Set TAVILY_API_KEY",footerNote:"Runs after Exa and before Brave when enabled and ready.",fields:[{key:"max_results",label:"Max results",type:"number",placeholder:"5",helpText:"Clamp between 1 and 10 results.",defaultValue:5,min:1,max:10}]},{id:"brave",title:"Brave Search",description:"API-backed search with clean metadata and broad web coverage.",badge:"BRAVE_API_KEY",badgeTone:"blue",defaultEnabled:!1,fallbackDetail:"Set BRAVE_API_KEY",footerNote:"Runs after Exa and Tavily, before DuckDuckGo.",fields:[{key:"max_results",label:"Max results",type:"number",placeholder:"5",helpText:"Clamp between 1 and 10 results.",defaultValue:5,min:1,max:10}]},{id:"duckduckgo",title:"DuckDuckGo",description:"Zero-setup floor. Keep this on unless you want no built-in fallback at all.",badge:"DEFAULT",badgeTone:"green",defaultEnabled:!0,fallbackDetail:"Built-in",footerNote:"Last real backend in the chain. No API key needed.",fields:[{key:"max_results",label:"Max results",type:"number",placeholder:"5",helpText:"Clamp between 1 and 10 results.",defaultValue:5,min:1,max:10}]}],I=[{id:"gemini",title:"Gemini CLI",description:"Optional legacy LLM fallback. Used only if every enabled real backend fails.",badge:"LEGACY",badgeTone:"slate",defaultEnabled:!1,fallbackDetail:"Optional fallback",footerNote:"Legacy path. Useful for compatibility, not the preferred search backend.",fields:[{key:"model",label:"Model",type:"text",placeholder:"gemini-2.5-flash",helpText:"CLI model passed to Gemini when this fallback runs.",defaultValue:"gemini-2.5-flash"},{key:"timeout",label:"Timeout (seconds)",type:"number",placeholder:"55",helpText:"Clamp between 5 and 300 seconds.",defaultValue:55,min:5,max:300}]},{id:"opencode",title:"OpenCode",description:"Optional legacy LLM fallback via OpenCode.",badge:"LEGACY",badgeTone:"slate",defaultEnabled:!1,fallbackDetail:"Optional fallback",footerNote:"Legacy path. Runs after Gemini in the fallback portion of the chain.",fields:[{key:"model",label:"Model",type:"text",placeholder:"opencode/grok-code",helpText:"OpenCode model passed to the CLI runner.",defaultValue:"opencode/grok-code"},{key:"timeout",label:"Timeout (seconds)",type:"number",placeholder:"90",helpText:"Clamp between 5 and 300 seconds.",defaultValue:90,min:5,max:300}]},{id:"grok",title:"Grok CLI",description:"Optional legacy xAI fallback. Requires the Grok CLI and GROK_API_KEY.",badge:"LEGACY",badgeTone:"slate",defaultEnabled:!1,fallbackDetail:"Optional fallback",footerNote:"Last step in the full fallback chain.",fields:[{key:"timeout",label:"Timeout (seconds)",type:"number",placeholder:"55",helpText:"Clamp between 5 and 300 seconds.",defaultValue:55,min:5,max:300}]}];function _(s,t){return t&&s?.available?"ready":t?"setup":"idle"}function R(s,t){return t&&s?.available?"Ready":t?"Needs setup":"Disabled"}function je(s){switch(s){case"ready":return"border-emerald-500/25 bg-emerald-500/10 text-emerald-800 dark:text-emerald-200";case"setup":return"border-amber-500/25 bg-amber-500/10 text-amber-800 dark:text-amber-200";case"idle":return"border-border/80 bg-background/85 text-muted-foreground"}}function we(s){switch(s){case"ready":return"bg-emerald-500";case"setup":return"bg-amber-500";case"idle":return"bg-border"}}function U(s){switch(s){case"ready":return"bg-emerald-500 shadow-[0_0_0_6px_rgba(16,185,129,0.12)]";case"setup":return"bg-amber-500 shadow-[0_0_0_6px_rgba(245,158,11,0.12)]";case"idle":return"bg-border"}}function q(s){switch(s){case"ready":return"bg-gradient-to-b from-emerald-500/55 to-border";case"setup":return"bg-gradient-to-b from-amber-500/55 to-border";case"idle":return"bg-border"}}function Ne(s,t){if(s.type==="number"){const i=Number.parseInt(t.trim(),10);if(!Number.isFinite(i))return s.defaultValue;const k=s.min??i,d=s.max??i;return Math.min(d,Math.max(k,i))}return t.trim()||String(s.defaultValue)}function H(s,t,x){const i=s?.[t]?.[x.key];return String(i??x.defaultValue)}function Se(s){return s==="exa"||s==="tavily"||s==="brave"}function Ce(s){if(!s?.configured)return"Not stored";if(!s.available&&s.source==="global_env")return"Stored in dashboard, but Global Env is disabled";switch(s.source){case"global_env":return"Stored in dashboard";case"process_env":return"Detected from shell env";case"both":return"Stored in dashboard + shell env";case"none":return"Not stored"}}function Re(){const{t:s}=de(),{config:t,status:x,loading:i,statusLoading:k,saving:d,error:b,success:m,fetchConfig:f,fetchStatus:h,saveConfig:v}=ye(),{fetchRawConfig:g}=ie(),[N,S]=y.useState({}),[C,j]=y.useState({}),[L,o]=y.useState(null),[P,A]=y.useState(null),[W,X]=y.useState(!1);y.useEffect(()=>{f(),h(),g()},[f,h,g]);const E=y.useMemo(()=>new Map((x?.providers??[]).map(a=>[a.id,a])),[x?.providers]),w=I.filter(a=>t?.providers?.[a.id]?.enabled??a.defaultEnabled),J=w.some(a=>E.get(a.id)?.available),F=w.length===0?"Off":w.length===1?`${w[0].title} enabled`:`${w.length} enabled`,O=async(a,l)=>{const r=t?.providers??{};await v({providers:{...r,[a]:{...r[a],enabled:!l}}})&&await g()},Z=(a,l,r)=>{S(n=>({...n,[`${a}.${l}`]:r}))},Q=async(a,l)=>{if(!t)return;const r=`${a}.${l.key}`,n=t.providers??{},p=n[a]??{},c=p[l.key]??l.defaultValue,T=Ne(l,N[r]??H(n,a,l));if(S(K=>({...K,[r]:String(T)})),String(c)===String(T))return;await v({providers:{...n,[a]:{...p,[l.key]:T}}})&&(await g(),o(r),setTimeout(()=>{o(K=>K===r?null:K)},1200))},ee=async a=>{const l=C[a]?.trim()??"";if(!l)return;await v({apiKeys:{[a]:l}})&&(await g(),j(n=>({...n,[a]:""})),A(a),setTimeout(()=>{A(n=>n===a?null:n)},1200))},ae=async a=>{await v({apiKeys:{[a]:""}})&&(await g(),j(r=>({...r,[a]:""})),A(a),setTimeout(()=>{A(r=>r===a?null:r)},1200))},$=a=>(a.fields??[]).map(l=>{const r=`${a.id}.${l.key}`;return{id:r,label:l.label,value:N[r]??H(t?.providers??{},a.id,l),placeholder:l.placeholder,type:l.type,helpText:l.helpText,saved:L===r,onChange:n=>Z(a.id,l.key,n),onBlur:()=>{Q(a.id,l)},onKeyDown:n=>{n.key==="Enter"&&n.currentTarget.blur()}}});return i?e.jsx("div",{className:"flex flex-1 items-center justify-center",children:e.jsxs("div",{className:"flex items-center gap-3 text-muted-foreground",children:[e.jsx(V,{className:"h-5 w-5 animate-spin"}),e.jsx("span",{children:s("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 ${b||m?"translate-y-0 opacity-100":"pointer-events-none -translate-y-2 opacity-0"}`,children:[b&&e.jsxs(oe,{variant:"destructive",className:"py-2 shadow-lg",children:[e.jsx(ge,{className:"h-4 w-4"}),e.jsx(ce,{children:b})]}),m&&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(xe,{className:"h-4 w-4 shrink-0"}),e.jsx("span",{className:"text-sm font-medium",children:s("settings.saved")})]})]}),e.jsx(be,{className:"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(M,{className:"h-4 w-4"})}),e.jsx("p",{className:"text-sm font-semibold tracking-tight",children:"Execution chain"})]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:k?s("settingsWebsearch.checking"):x?.readiness.message})]}),e.jsx(D,{variant:"ghost",size:"sm",onClick:h,disabled:k,children:e.jsx(V,{className:`h-4 w-4 ${k?"animate-spin":""}`})})]}),e.jsx("div",{className:"flex flex-wrap items-center gap-2",children:B.map((a,l)=>{const r=a.id==="legacy"?w.length>0:t?.providers?.[a.id]?.enabled??a.defaultEnabled,n=a.id==="legacy"?J?"ready":w.length>0?"setup":"idle":_(E.get(a.id),r),p=a.id==="legacy"?F:R(E.get(a.id),r);return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("div",{className:u("inline-flex items-center gap-2 rounded-full border px-3 py-1.5 text-[11px] font-medium",je(n)),children:[e.jsx("span",{className:u("h-1.5 w-1.5 rounded-full",we(n))}),e.jsxs("span",{children:[a.title," · ",p]})]}),l<B.length-1&&e.jsx("span",{className:"h-px w-4 rounded-full bg-border/80"})]},a.id)})})]})]}),e.jsxs("div",{className:"relative overflow-hidden rounded-2xl border bg-gradient-to-br from-background via-background to-muted/25 p-4 shadow-sm",children:[e.jsx("div",{className:"absolute inset-x-0 top-0 h-px bg-gradient-to-r from-sky-500/70 via-emerald-500/25 to-transparent"}),e.jsxs("div",{className:"relative space-y-4",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-sky-500/20 bg-sky-500/10 text-sky-700 dark:text-sky-300",children:e.jsx(M,{className:"h-4 w-4"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-base font-semibold tracking-tight",children:"Primary backends"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Real backends run top-down before any legacy CLI fallback."})]})]}),e.jsx("div",{className:"space-y-3",children:z.map((a,l)=>{const r=E.get(a.id),n=t?.providers?.[a.id]?.enabled??a.defaultEnabled,p=_(r,n),c=Se(a.id)?a.id:null;return e.jsxs("div",{className:"grid grid-cols-[20px_minmax(0,1fr)] items-start gap-3",children:[e.jsx("div",{className:"flex h-full justify-center",children:e.jsxs("div",{className:"flex h-full flex-col items-center",children:[e.jsx("span",{className:u("mt-5 h-3 w-3 rounded-full ring-4 ring-background",U(p))}),l<z.length-1&&e.jsx("span",{className:u("mt-1 w-px flex-1",q(p))})]})}),e.jsx(Y,{title:a.title,description:a.description,detail:r?.detail??a.fallbackDetail,badge:a.badge,badgeTone:a.badgeTone,statusLabel:R(r,n),statusTone:_(r,n),enabled:n,saving:d,onToggle:()=>{O(a.id,n)},fields:$(a),children:c&&e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-medium uppercase tracking-[0.18em] text-muted-foreground",children:"API Key"}),e.jsx("p",{className:"mt-1 text-sm text-foreground/90",children:Ce(t?.apiKeys?.[c])}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:t?.apiKeys?.[c]?.maskedValue?`${t.apiKeys[c]?.envVar} ${t.apiKeys[c]?.maskedValue}`:`Store ${a.badge} here so the backend is ready immediately after you enable it.`})]}),P===a.id&&e.jsx("span",{className:"text-[11px] font-medium text-emerald-600 dark:text-emerald-400",children:"Saved"})]}),e.jsx(ue,{id:`${a.id}.api-key`,value:C[c]??"",onChange:T=>j(G=>({...G,[c]:T.target.value})),placeholder:t?.apiKeys?.[c]?.configured?"Enter a new key to rotate the stored secret":`Paste ${a.badge}`,className:"bg-background/80 font-mono text-sm",disabled:d}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(D,{size:"sm",onClick:()=>{ee(c)},disabled:d||!(C[c]?.trim()??"").length,children:t?.apiKeys?.[c]?.configured?"Update key":"Save key"}),(t?.apiKeys?.[c]?.source==="global_env"||t?.apiKeys?.[c]?.source==="both")&&e.jsx(D,{variant:"outline",size:"sm",onClick:()=>{ae(c)},disabled:d,children:"Remove stored key"})]})]})})]},a.id)})})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("button",{type:"button",onClick:()=>X(a=>!a),className:u("flex w-full items-center justify-between gap-3 rounded-xl px-1 py-1 text-left transition-colors","hover:bg-muted/10"),children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-xl border border-slate-400/20 bg-slate-500/10 text-slate-700 dark:text-slate-300",children:e.jsx(fe,{className:"h-4 w-4"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-base font-semibold tracking-tight",children:"Legacy CLI fallbacks"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Runs only after every enabled real backend fails."})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"rounded-full border border-border/80 bg-background/85 px-2.5 py-1 text-[11px] font-medium text-muted-foreground",children:F}),W?e.jsx(he,{className:"h-4 w-4 text-muted-foreground"}):e.jsx(pe,{className:"h-4 w-4 text-muted-foreground"})]})]}),W&&e.jsxs("div",{className:"relative overflow-hidden rounded-2xl border bg-gradient-to-br from-background via-background to-muted/20 p-3 shadow-sm",children:[e.jsx("div",{className:"absolute inset-x-0 top-0 h-px bg-gradient-to-r from-slate-500/60 via-slate-400/18 to-transparent"}),e.jsx("div",{className:"relative space-y-3",children:I.map((a,l)=>{const r=E.get(a.id),n=t?.providers?.[a.id]?.enabled??a.defaultEnabled,p=_(r,n);return e.jsxs("div",{className:"grid grid-cols-[20px_minmax(0,1fr)] items-start gap-3",children:[e.jsx("div",{className:"flex h-full justify-center",children:e.jsxs("div",{className:"flex h-full flex-col items-center",children:[e.jsx("span",{className:u("mt-5 h-3 w-3 rounded-full ring-4 ring-background",U(p))}),l<I.length-1&&e.jsx("span",{className:u("mt-1 w-px flex-1",q(p))})]})}),e.jsx(Y,{title:a.title,description:a.description,detail:r?.detail??a.fallbackDetail,badge:a.badge,badgeTone:a.badgeTone,statusLabel:R(r,n),statusTone:_(r,n),enabled:n,saving:d,onToggle:()=>{O(a.id,n)},fields:$(a),docsUrl:r?.docsUrl,installCommand:r?.installCommand,footerNote:a.footerNote})]},a.id)})})]})]})]})}),e.jsx("div",{className:"border-t bg-background p-4",children:e.jsxs(D,{variant:"outline",size:"sm",onClick:()=>{f(),h(),g()},disabled:i||d,className:"w-full",children:[e.jsx(V,{className:`mr-2 h-4 w-4 ${i?"animate-spin":""}`}),s("settings.refresh")]})})]})}export{Re as default};