@kaitranntt/ccs 7.68.1-dev.9 → 7.68.2

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 (254) hide show
  1. package/dist/auth/commands/create-command-env.d.ts +0 -1
  2. package/dist/auth/commands/create-command-env.d.ts.map +1 -1
  3. package/dist/ccs.js +2 -55
  4. package/dist/ccs.js.map +1 -1
  5. package/dist/channels/official-channels-runtime.d.ts +0 -1
  6. package/dist/channels/official-channels-runtime.d.ts.map +1 -1
  7. package/dist/channels/official-channels-store.d.ts +0 -1
  8. package/dist/channels/official-channels-store.d.ts.map +1 -1
  9. package/dist/cliproxy/base-config-loader.d.ts +0 -1
  10. package/dist/cliproxy/base-config-loader.d.ts.map +1 -1
  11. package/dist/cliproxy/config/env-builder.d.ts +0 -1
  12. package/dist/cliproxy/config/env-builder.d.ts.map +1 -1
  13. package/dist/cliproxy/config/extended-context-config.d.ts +0 -1
  14. package/dist/cliproxy/config/extended-context-config.d.ts.map +1 -1
  15. package/dist/cliproxy/config/thinking-config.d.ts +0 -1
  16. package/dist/cliproxy/config/thinking-config.d.ts.map +1 -1
  17. package/dist/cliproxy/executor/env-resolver.d.ts +0 -2
  18. package/dist/cliproxy/executor/env-resolver.d.ts.map +1 -1
  19. package/dist/cliproxy/executor/env-resolver.js +1 -2
  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 +1 -28
  23. package/dist/cliproxy/executor/index.js.map +1 -1
  24. package/dist/cliproxy/model-id-normalizer.d.ts +0 -1
  25. package/dist/cliproxy/model-id-normalizer.d.ts.map +1 -1
  26. package/dist/cliproxy/routing-strategy-http.d.ts +0 -1
  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 +3 -0
  30. package/dist/cliproxy/tool-sanitization-proxy.js.map +1 -1
  31. package/dist/cliproxy/types.d.ts +0 -2
  32. package/dist/cliproxy/types.d.ts.map +1 -1
  33. package/dist/commands/cliproxy/catalog-subcommand.d.ts +0 -6
  34. package/dist/commands/cliproxy/catalog-subcommand.d.ts.map +1 -1
  35. package/dist/commands/cliproxy/catalog-subcommand.js +1 -39
  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 +0 -1
  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 +0 -6
  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 +0 -2
  46. package/dist/commands/cursor-command-display.d.ts.map +1 -1
  47. package/dist/commands/cursor-command-display.js +3 -24
  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 +1 -31
  51. package/dist/commands/cursor-command.js.map +1 -1
  52. package/dist/config/migration-manager.d.ts.map +1 -1
  53. package/dist/config/migration-manager.js +1 -2
  54. package/dist/config/migration-manager.js.map +1 -1
  55. package/dist/config/unified-config-loader.d.ts +3 -8
  56. package/dist/config/unified-config-loader.d.ts.map +1 -1
  57. package/dist/config/unified-config-loader.js +7 -20
  58. package/dist/config/unified-config-loader.js.map +1 -1
  59. package/dist/config/unified-config-types.d.ts +2 -15
  60. package/dist/config/unified-config-types.d.ts.map +1 -1
  61. package/dist/config/unified-config-types.js +3 -8
  62. package/dist/config/unified-config-types.js.map +1 -1
  63. package/dist/cursor/constants.d.ts +1 -1
  64. package/dist/cursor/constants.d.ts.map +1 -1
  65. package/dist/cursor/constants.js +0 -1
  66. package/dist/cursor/constants.js.map +1 -1
  67. package/dist/cursor/cursor-anthropic-response.d.ts +0 -1
  68. package/dist/cursor/cursor-anthropic-response.d.ts.map +1 -1
  69. package/dist/cursor/cursor-auth.d.ts +0 -1
  70. package/dist/cursor/cursor-auth.d.ts.map +1 -1
  71. package/dist/cursor/cursor-auth.js +32 -154
  72. package/dist/cursor/cursor-auth.js.map +1 -1
  73. package/dist/cursor/cursor-executor.d.ts +1 -2
  74. package/dist/cursor/cursor-executor.d.ts.map +1 -1
  75. package/dist/cursor/cursor-executor.js +160 -295
  76. package/dist/cursor/cursor-executor.js.map +1 -1
  77. package/dist/cursor/cursor-protobuf-decoder.d.ts.map +1 -1
  78. package/dist/cursor/cursor-protobuf-decoder.js +3 -1
  79. package/dist/cursor/cursor-protobuf-decoder.js.map +1 -1
  80. package/dist/cursor/cursor-protobuf-schema.d.ts +3 -12
  81. package/dist/cursor/cursor-protobuf-schema.d.ts.map +1 -1
  82. package/dist/cursor/cursor-protobuf-schema.js +5 -23
  83. package/dist/cursor/cursor-protobuf-schema.js.map +1 -1
  84. package/dist/cursor/cursor-protobuf.d.ts +1 -1
  85. package/dist/cursor/cursor-protobuf.d.ts.map +1 -1
  86. package/dist/cursor/cursor-protobuf.js +4 -2
  87. package/dist/cursor/cursor-protobuf.js.map +1 -1
  88. package/dist/cursor/cursor-stream-parser.d.ts +0 -10
  89. package/dist/cursor/cursor-stream-parser.d.ts.map +1 -1
  90. package/dist/cursor/cursor-stream-parser.js +10 -106
  91. package/dist/cursor/cursor-stream-parser.js.map +1 -1
  92. package/dist/cursor/index.d.ts +0 -1
  93. package/dist/cursor/index.d.ts.map +1 -1
  94. package/dist/cursor/index.js +1 -3
  95. package/dist/cursor/index.js.map +1 -1
  96. package/dist/cursor/types.d.ts +0 -6
  97. package/dist/cursor/types.d.ts.map +1 -1
  98. package/dist/docker/docker-executor.d.ts +0 -1
  99. package/dist/docker/docker-executor.d.ts.map +1 -1
  100. package/dist/management/instance-manager.d.ts.map +1 -1
  101. package/dist/management/instance-manager.js +2 -5
  102. package/dist/management/instance-manager.js.map +1 -1
  103. package/dist/targets/claude-adapter.d.ts +1 -6
  104. package/dist/targets/claude-adapter.d.ts.map +1 -1
  105. package/dist/targets/claude-adapter.js +2 -6
  106. package/dist/targets/claude-adapter.js.map +1 -1
  107. package/dist/targets/codex-adapter.d.ts +0 -1
  108. package/dist/targets/codex-adapter.d.ts.map +1 -1
  109. package/dist/targets/codex-adapter.js +8 -12
  110. package/dist/targets/codex-adapter.js.map +1 -1
  111. package/dist/targets/droid-adapter.d.ts +1 -3
  112. package/dist/targets/droid-adapter.d.ts.map +1 -1
  113. package/dist/targets/droid-adapter.js +2 -3
  114. package/dist/targets/droid-adapter.js.map +1 -1
  115. package/dist/targets/target-adapter.d.ts +0 -5
  116. package/dist/targets/target-adapter.d.ts.map +1 -1
  117. package/dist/types/cli.d.ts +0 -1
  118. package/dist/types/cli.d.ts.map +1 -1
  119. package/dist/ui/assets/{accounts-D9eEaNx9.js → accounts-DjL3iVZW.js} +1 -1
  120. package/dist/ui/assets/{alert-dialog-QyEXocpn.js → alert-dialog-Tc_D1a_B.js} +1 -1
  121. package/dist/ui/assets/{api-7vQe0xOg.js → api-CUtkvXmX.js} +1 -1
  122. package/dist/ui/assets/{auth-section-BszF77uT.js → auth-section-CuKWQHC7.js} +1 -1
  123. package/dist/ui/assets/{backups-section-D6RgaOx1.js → backups-section-BKW2pbb9.js} +1 -1
  124. package/dist/ui/assets/{channels-B1vgnNJX.js → channels-DvWJMdaq.js} +1 -1
  125. package/dist/ui/assets/{checkbox-Dzwkj_Pg.js → checkbox-B0hZxMK5.js} +1 -1
  126. package/dist/ui/assets/{claude-extension-CKO4bJ22.js → claude-extension-Dfqu-rev.js} +1 -1
  127. package/dist/ui/assets/{cliproxy-kHd-oC5W.js → cliproxy-C9RxW-I8.js} +1 -1
  128. package/dist/ui/assets/{cliproxy-ai-providers-CmbFYVoR.js → cliproxy-ai-providers-BXLuuxNf.js} +1 -1
  129. package/dist/ui/assets/{cliproxy-control-panel-M8ZfUq3C.js → cliproxy-control-panel-aQ7cCc2U.js} +1 -1
  130. package/dist/ui/assets/{codex-BJ0RdMuh.js → codex-aq4RI6_n.js} +1 -1
  131. package/dist/ui/assets/{confirm-dialog-BlSaX2gK.js → confirm-dialog-CpDk6eu4.js} +1 -1
  132. package/dist/ui/assets/{copilot-NJKZQXQ_.js → copilot-CQRpGXvY.js} +1 -1
  133. package/dist/ui/assets/cursor-BpXPf6qi.js +1 -0
  134. package/dist/ui/assets/{droid-B9u9ZB-a.js → droid-Cgx-yLjy.js} +1 -1
  135. package/dist/ui/assets/{globalenv-section-DoX37DqB.js → globalenv-section-DsNqG1yB.js} +1 -1
  136. package/dist/ui/assets/{health-D_gdcxnc.js → health-BY-O-JcA.js} +1 -1
  137. package/dist/ui/assets/index-BmSzf0T9.js +72 -0
  138. package/dist/ui/assets/{index-DFEMq3KP.js → index-CLGiPB3A.js} +1 -1
  139. package/dist/ui/assets/{index-CTGpqIx6.js → index-Cet36v1V.js} +1 -1
  140. package/dist/ui/assets/index-DH6L6ybH.js +1 -0
  141. package/dist/ui/assets/{index-BNU4Hhe_.js → index-DsCjnpco.js} +1 -1
  142. package/dist/ui/assets/{index-DoVPk3vW.js → index-TQFuDZdB.js} +1 -1
  143. package/dist/ui/assets/index-teLjoh2T.css +1 -0
  144. package/dist/ui/assets/{logs-DtH4YMt4.js → logs-D5ro-pc7.js} +1 -1
  145. package/dist/ui/assets/{masked-input-C2H-Ax0Z.js → masked-input-h0XkMSwB.js} +1 -1
  146. package/dist/ui/assets/{proxy-status-widget-BOrsn86w.js → proxy-status-widget-yBdrFeb7.js} +1 -1
  147. package/dist/ui/assets/{raw-json-settings-editor-panel-WxTn7-hS.js → raw-json-settings-editor-panel-Cb7ZInQV.js} +1 -1
  148. package/dist/ui/assets/{searchable-select-1zOULoec.js → searchable-select-D4xr5xKS.js} +1 -1
  149. package/dist/ui/assets/{separator-BCfZ54mZ.js → separator-gw5BjIpP.js} +1 -1
  150. package/dist/ui/assets/{shared-DlTbnc9n.js → shared-C-VeA1Z9.js} +1 -1
  151. package/dist/ui/assets/{table-Bx2cnkWN.js → table-Bd4isC18.js} +1 -1
  152. package/dist/ui/assets/{updates-SiZKOnUD.js → updates-DiK8I67C.js} +1 -1
  153. package/dist/ui/index.html +2 -2
  154. package/dist/utils/claude-detector.d.ts +0 -1
  155. package/dist/utils/claude-detector.d.ts.map +1 -1
  156. package/dist/utils/claude-spawner.d.ts +0 -1
  157. package/dist/utils/claude-spawner.d.ts.map +1 -1
  158. package/dist/utils/hooks/image-analysis-runtime-status.js +5 -5
  159. package/dist/utils/hooks/image-analysis-runtime-status.js.map +1 -1
  160. package/dist/utils/image-analysis/claude-tool-args.d.ts +0 -3
  161. package/dist/utils/image-analysis/claude-tool-args.d.ts.map +1 -1
  162. package/dist/utils/image-analysis/claude-tool-args.js +47 -21
  163. package/dist/utils/image-analysis/claude-tool-args.js.map +1 -1
  164. package/dist/utils/package-manager-detector.d.ts +0 -1
  165. package/dist/utils/package-manager-detector.d.ts.map +1 -1
  166. package/dist/utils/shell-executor.d.ts +0 -1
  167. package/dist/utils/shell-executor.d.ts.map +1 -1
  168. package/dist/utils/websearch/claude-tool-args.d.ts +0 -7
  169. package/dist/utils/websearch/claude-tool-args.d.ts.map +1 -1
  170. package/dist/utils/websearch/claude-tool-args.js +50 -27
  171. package/dist/utils/websearch/claude-tool-args.js.map +1 -1
  172. package/dist/utils/websearch/hook-env.d.ts.map +1 -1
  173. package/dist/utils/websearch/hook-env.js +1 -19
  174. package/dist/utils/websearch/hook-env.js.map +1 -1
  175. package/dist/utils/websearch/status.d.ts +1 -1
  176. package/dist/utils/websearch/status.d.ts.map +1 -1
  177. package/dist/utils/websearch/status.js +12 -33
  178. package/dist/utils/websearch/status.js.map +1 -1
  179. package/dist/utils/websearch/trace.d.ts +0 -1
  180. package/dist/utils/websearch/trace.d.ts.map +1 -1
  181. package/dist/utils/websearch/trace.js +5 -20
  182. package/dist/utils/websearch/trace.js.map +1 -1
  183. package/dist/utils/websearch/types.d.ts +2 -12
  184. package/dist/utils/websearch/types.d.ts.map +1 -1
  185. package/dist/utils/websearch/types.js +0 -38
  186. package/dist/utils/websearch/types.js.map +1 -1
  187. package/dist/web-server/health/websearch-checks.js +1 -1
  188. package/dist/web-server/health/websearch-checks.js.map +1 -1
  189. package/dist/web-server/middleware/auth-middleware.d.ts +1 -0
  190. package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -1
  191. package/dist/web-server/routes/cliproxy-local-proxy.d.ts.map +1 -1
  192. package/dist/web-server/routes/cliproxy-local-proxy.js +6 -26
  193. package/dist/web-server/routes/cliproxy-local-proxy.js.map +1 -1
  194. package/dist/web-server/routes/cliproxy-stats-routes.d.ts.map +1 -1
  195. package/dist/web-server/routes/cliproxy-stats-routes.js +1 -8
  196. package/dist/web-server/routes/cliproxy-stats-routes.js.map +1 -1
  197. package/dist/web-server/routes/cursor-routes.d.ts +0 -2
  198. package/dist/web-server/routes/cursor-routes.d.ts.map +1 -1
  199. package/dist/web-server/routes/cursor-routes.js +2 -44
  200. package/dist/web-server/routes/cursor-routes.js.map +1 -1
  201. package/dist/web-server/routes/websearch-routes.d.ts.map +1 -1
  202. package/dist/web-server/routes/websearch-routes.js +0 -37
  203. package/dist/web-server/routes/websearch-routes.js.map +1 -1
  204. package/dist/web-server/services/cliproxy-dashboard-install-service.d.ts.map +1 -1
  205. package/dist/web-server/services/cliproxy-dashboard-install-service.js +0 -14
  206. package/dist/web-server/services/cliproxy-dashboard-install-service.js.map +1 -1
  207. package/dist/web-server/services/codex-dashboard-service.d.ts +0 -1
  208. package/dist/web-server/services/codex-dashboard-service.d.ts.map +1 -1
  209. package/dist/web-server/services/droid-dashboard-service.d.ts +0 -1
  210. package/dist/web-server/services/droid-dashboard-service.d.ts.map +1 -1
  211. package/lib/hooks/websearch-transformer.cjs +0 -136
  212. package/lib/mcp/ccs-websearch-server.cjs +1 -1
  213. package/package.json +1 -2
  214. package/dist/cursor/cursor-runtime-probe.d.ts +0 -12
  215. package/dist/cursor/cursor-runtime-probe.d.ts.map +0 -1
  216. package/dist/cursor/cursor-runtime-probe.js +0 -220
  217. package/dist/cursor/cursor-runtime-probe.js.map +0 -1
  218. package/dist/docker/supervisord-lifecycle.d.ts +0 -17
  219. package/dist/docker/supervisord-lifecycle.d.ts.map +0 -1
  220. package/dist/docker/supervisord-lifecycle.js +0 -58
  221. package/dist/docker/supervisord-lifecycle.js.map +0 -1
  222. package/dist/ui/assets/cursor-BrcDgu6X.js +0 -1
  223. package/dist/ui/assets/index-Cu6e0-ev.css +0 -1
  224. package/dist/ui/assets/index-DOn6k1jF.js +0 -72
  225. package/dist/ui/assets/index-h08p9xL5.js +0 -1
  226. package/dist/utils/browser/chrome-reuse.d.ts +0 -17
  227. package/dist/utils/browser/chrome-reuse.d.ts.map +0 -1
  228. package/dist/utils/browser/chrome-reuse.js +0 -205
  229. package/dist/utils/browser/chrome-reuse.js.map +0 -1
  230. package/dist/utils/browser/claude-tool-args.d.ts +0 -2
  231. package/dist/utils/browser/claude-tool-args.d.ts.map +0 -1
  232. package/dist/utils/browser/claude-tool-args.js +0 -18
  233. package/dist/utils/browser/claude-tool-args.js.map +0 -1
  234. package/dist/utils/browser/index.d.ts +0 -8
  235. package/dist/utils/browser/index.d.ts.map +0 -1
  236. package/dist/utils/browser/index.js +0 -24
  237. package/dist/utils/browser/index.js.map +0 -1
  238. package/dist/utils/browser/mcp-installer.d.ts +0 -14
  239. package/dist/utils/browser/mcp-installer.d.ts.map +0 -1
  240. package/dist/utils/browser/mcp-installer.js +0 -356
  241. package/dist/utils/browser/mcp-installer.js.map +0 -1
  242. package/dist/utils/browser-codex-overrides.d.ts +0 -3
  243. package/dist/utils/browser-codex-overrides.d.ts.map +0 -1
  244. package/dist/utils/browser-codex-overrides.js +0 -29
  245. package/dist/utils/browser-codex-overrides.js.map +0 -1
  246. package/dist/utils/claude-tool-args.d.ts +0 -7
  247. package/dist/utils/claude-tool-args.d.ts.map +0 -1
  248. package/dist/utils/claude-tool-args.js +0 -43
  249. package/dist/utils/claude-tool-args.js.map +0 -1
  250. package/dist/utils/prompt-injection-strategy.d.ts +0 -54
  251. package/dist/utils/prompt-injection-strategy.d.ts.map +0 -1
  252. package/dist/utils/prompt-injection-strategy.js +0 -128
  253. package/dist/utils/prompt-injection-strategy.js.map +0 -1
  254. package/lib/mcp/ccs-browser-server.cjs +0 -877
@@ -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 K}from"./index-DOn6k1jF.js";import{M as ue}from"./masked-input-C2H-Ax0Z.js";import{p as me,R as P,w as ge,x as xe,u as B,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 M({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:R=>o.onChange(R.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 Y=[{id:"exa",title:"Exa",defaultEnabled:!1},{id:"tavily",title:"Tavily",defaultEnabled:!1},{id:"brave",title:"Brave",defaultEnabled:!1},{id:"searxng",title:"SearXNG",defaultEnabled:!1},{id:"duckduckgo",title:"DuckDuckGo",defaultEnabled:!0},{id:"legacy",title:"Legacy CLI",defaultEnabled:!1}],U=[{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:"searxng",title:"SearXNG",description:"Configurable JSON backend for self-hosted or public SearXNG instances.",badge:"SELF-HOSTED",badgeTone:"cyan",defaultEnabled:!1,fallbackDetail:"Set a valid base URL",footerNote:"Runs after Brave and before DuckDuckGo when enabled and ready.",fields:[{key:"url",label:"Base URL",type:"text",placeholder:"https://search.example.com",helpText:"Paste the instance base URL only. CCS appends /search?format=json for you and rejects embedded credentials.",defaultValue:""},{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}]}],V=[{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 I(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 z(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 X(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 Ie(){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),[R,A]=y.useState(null),[F,q]=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=V.filter(a=>t?.providers?.[a.id]?.enabled??a.defaultEnabled),J=w.some(a=>E.get(a.id)?.available),W=w.length===0?"Off":w.length===1?`${w[0].title} enabled`:`${w.length} enabled`,G=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(D=>({...D,[r]:String(T)})),String(c)===String(T))return;await v({providers:{...n,[a]:{...p,[l.key]:T}}})&&(await g(),o(r),setTimeout(()=>{o(D=>D===r?null:D)},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))},O=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(P,{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(B,{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(K,{variant:"ghost",size:"sm",onClick:h,disabled:k,children:e.jsx(P,{className:`h-4 w-4 ${k?"animate-spin":""}`})})]}),e.jsx("div",{className:"flex flex-wrap items-center gap-2",children:Y.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"?W:I(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<Y.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(B,{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:U.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",z(p))}),l<U.length-1&&e.jsx("span",{className:u("mt-1 w-px flex-1",X(p))})]})}),e.jsx(M,{title:a.title,description:a.description,detail:r?.detail??a.fallbackDetail,badge:a.badge,badgeTone:a.badgeTone,statusLabel:I(r,n),statusTone:_(r,n),enabled:n,saving:d,onToggle:()=>{G(a.id,n)},fields:O(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.`})]}),R===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($=>({...$,[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(K,{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(K,{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:()=>q(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:W}),F?e.jsx(he,{className:"h-4 w-4 text-muted-foreground"}):e.jsx(pe,{className:"h-4 w-4 text-muted-foreground"})]})]}),F&&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:V.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",z(p))}),l<V.length-1&&e.jsx("span",{className:u("mt-1 w-px flex-1",X(p))})]})}),e.jsx(M,{title:a.title,description:a.description,detail:r?.detail??a.fallbackDetail,badge:a.badge,badgeTone:a.badgeTone,statusLabel:I(r,n),statusTone:_(r,n),enabled:n,saving:d,onToggle:()=>{G(a.id,n)},fields:O(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(K,{variant:"outline",size:"sm",onClick:()=>{f(),h(),g()},disabled:i||d,className:"w-full",children:[e.jsx(P,{className:`mr-2 h-4 w-4 ${i?"animate-spin":""}`}),s("settings.refresh")]})})]})}export{Ie as default};
@@ -1,17 +0,0 @@
1
- /// <reference types="node" />
2
- /// <reference types="bun-types" />
3
- export interface BrowserReuseOptions {
4
- profileDir?: string;
5
- devtoolsPort?: string;
6
- }
7
- export interface BrowserRuntimeEnv {
8
- CCS_BROWSER_USER_DATA_DIR: string;
9
- CCS_BROWSER_DEVTOOLS_HOST: string;
10
- CCS_BROWSER_DEVTOOLS_PORT: string;
11
- CCS_BROWSER_DEVTOOLS_HTTP_URL: string;
12
- CCS_BROWSER_DEVTOOLS_WS_URL: string;
13
- }
14
- export declare function resolveDefaultChromeUserDataDir(platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv): string;
15
- export declare function resolveConfiguredBrowserProfileDir(profileDir?: string): string | undefined;
16
- export declare function resolveBrowserRuntimeEnv(options: BrowserReuseOptions): Promise<BrowserRuntimeEnv>;
17
- //# sourceMappingURL=chrome-reuse.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chrome-reuse.d.ts","sourceRoot":"","sources":["../../../src/utils/browser/chrome-reuse.ts"],"names":[],"mappings":";;AAKA,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,yBAAyB,EAAE,MAAM,CAAC;IAClC,yBAAyB,EAAE,MAAM,CAAC;IAClC,yBAAyB,EAAE,MAAM,CAAC;IAClC,6BAA6B,EAAE,MAAM,CAAC;IACtC,2BAA2B,EAAE,MAAM,CAAC;CACrC;AAKD,wBAAgB,+BAA+B,CAC7C,QAAQ,kBAAmB,EAC3B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAwBR;AAED,wBAAgB,kCAAkC,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAa1F;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CA+C5B"}
@@ -1,205 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.resolveBrowserRuntimeEnv = exports.resolveConfiguredBrowserProfileDir = exports.resolveDefaultChromeUserDataDir = void 0;
27
- const child_process_1 = require("child_process");
28
- const fs = __importStar(require("fs"));
29
- const path = __importStar(require("path"));
30
- const helpers_1 = require("../helpers");
31
- const DEVTOOLS_HOST = '127.0.0.1';
32
- const DEVTOOLS_ACTIVE_PORT_FILE = 'DevToolsActivePort';
33
- function resolveDefaultChromeUserDataDir(platform = process.platform, env = process.env) {
34
- switch (platform) {
35
- case 'darwin':
36
- return path.join(env.HOME || env.USERPROFILE || '', 'Library', 'Application Support', 'Google', 'Chrome');
37
- case 'linux':
38
- return path.join(env.HOME || env.USERPROFILE || '', '.config', 'google-chrome');
39
- case 'win32': {
40
- const localAppData = env.LOCALAPPDATA;
41
- if (!localAppData) {
42
- throw new Error('LOCALAPPDATA is required to resolve the default Chrome user-data-dir on Windows');
43
- }
44
- return path.join(localAppData, 'Google', 'Chrome', 'User Data');
45
- }
46
- default:
47
- return path.join(env.HOME || env.USERPROFILE || '', '.config', 'google-chrome');
48
- }
49
- }
50
- exports.resolveDefaultChromeUserDataDir = resolveDefaultChromeUserDataDir;
51
- function resolveConfiguredBrowserProfileDir(profileDir) {
52
- if (profileDir?.trim()) {
53
- return (0, helpers_1.expandPath)(profileDir);
54
- }
55
- try {
56
- const defaultUserDataDir = resolveDefaultChromeUserDataDir();
57
- return fs.existsSync(path.join(defaultUserDataDir, DEVTOOLS_ACTIVE_PORT_FILE))
58
- ? defaultUserDataDir
59
- : undefined;
60
- }
61
- catch {
62
- return undefined;
63
- }
64
- }
65
- exports.resolveConfiguredBrowserProfileDir = resolveConfiguredBrowserProfileDir;
66
- async function resolveBrowserRuntimeEnv(options) {
67
- const requestedProfileDir = options.profileDir || resolveDefaultChromeUserDataDir();
68
- const userDataDir = (0, helpers_1.expandPath)(requestedProfileDir);
69
- const directoryStat = await safeStat(userDataDir);
70
- if (!directoryStat?.isDirectory()) {
71
- throw new Error(`Chrome profile directory is invalid: ${userDataDir}`);
72
- }
73
- const metadataPath = path.join(userDataDir, DEVTOOLS_ACTIVE_PORT_FILE);
74
- const port = await resolveDevToolsPort({
75
- userDataDir,
76
- metadataPath,
77
- explicitPort: options.devtoolsPort || process.env.CCS_BROWSER_DEVTOOLS_PORT,
78
- });
79
- const httpUrl = `http://${DEVTOOLS_HOST}:${port}`;
80
- const versionUrl = `${httpUrl}/json/version`;
81
- let versionPayload;
82
- try {
83
- const response = await fetch(versionUrl);
84
- if (!response.ok) {
85
- throw new Error(`HTTP ${response.status}`);
86
- }
87
- versionPayload = await response.json();
88
- }
89
- catch {
90
- throw new Error(`Chrome DevTools endpoint is unreachable: ${httpUrl}`);
91
- }
92
- const websocketUrl = typeof versionPayload === 'object' &&
93
- versionPayload !== null &&
94
- typeof versionPayload.webSocketDebuggerUrl === 'string'
95
- ? versionPayload.webSocketDebuggerUrl
96
- : '';
97
- if (!websocketUrl) {
98
- throw new Error(`Chrome DevTools endpoint did not provide a websocket target: ${versionUrl}`);
99
- }
100
- return {
101
- CCS_BROWSER_USER_DATA_DIR: userDataDir,
102
- CCS_BROWSER_DEVTOOLS_HOST: DEVTOOLS_HOST,
103
- CCS_BROWSER_DEVTOOLS_PORT: port,
104
- CCS_BROWSER_DEVTOOLS_HTTP_URL: httpUrl,
105
- CCS_BROWSER_DEVTOOLS_WS_URL: websocketUrl,
106
- };
107
- }
108
- exports.resolveBrowserRuntimeEnv = resolveBrowserRuntimeEnv;
109
- function parseDevToolsPort(metadataPath, metadata) {
110
- const [rawPort] = metadata
111
- .split(/\r?\n/)
112
- .map((line) => line.trim())
113
- .filter((line) => line.length > 0);
114
- if (!rawPort || !/^\d+$/.test(rawPort)) {
115
- throw new Error(`Chrome reuse metadata is invalid: ${metadataPath}`);
116
- }
117
- const port = Number.parseInt(rawPort, 10);
118
- if (!Number.isInteger(port) || port < 1 || port > 65535) {
119
- throw new Error(`Chrome reuse metadata is invalid: ${metadataPath}`);
120
- }
121
- return String(port);
122
- }
123
- async function resolveDevToolsPort(options) {
124
- if (options.explicitPort?.trim()) {
125
- return parsePortValue(options.explicitPort.trim(), 'CCS_BROWSER_DEVTOOLS_PORT');
126
- }
127
- let metadata;
128
- try {
129
- metadata = await fs.promises.readFile(options.metadataPath, 'utf8');
130
- }
131
- catch (error) {
132
- const code = error.code;
133
- if (code && code !== 'ENOENT') {
134
- throw new Error(`Chrome reuse metadata is unreadable: ${options.metadataPath}`);
135
- }
136
- }
137
- if (metadata !== undefined) {
138
- return parseDevToolsPort(options.metadataPath, metadata);
139
- }
140
- const discoveredPort = discoverDevToolsPortFromChromeProcess(options.userDataDir);
141
- if (discoveredPort) {
142
- return discoveredPort;
143
- }
144
- throw new Error(`Chrome reuse metadata not found: ${options.metadataPath}`);
145
- }
146
- function parsePortValue(rawPort, sourceLabel) {
147
- if (!/^\d+$/.test(rawPort)) {
148
- throw new Error(`Chrome reuse metadata is invalid: ${sourceLabel}`);
149
- }
150
- const port = Number.parseInt(rawPort, 10);
151
- if (!Number.isInteger(port) || port < 1 || port > 65535) {
152
- throw new Error(`Chrome reuse metadata is invalid: ${sourceLabel}`);
153
- }
154
- return String(port);
155
- }
156
- function discoverDevToolsPortFromChromeProcess(userDataDir) {
157
- try {
158
- const processList = (0, child_process_1.execFileSync)('ps', ['-axww', '-o', 'command='], {
159
- encoding: 'utf8',
160
- stdio: ['ignore', 'pipe', 'ignore'],
161
- });
162
- const lines = processList
163
- .split(/\r?\n/)
164
- .map((line) => line.trim())
165
- .filter(Boolean);
166
- const normalizedDir = normalizePathForComparison(userDataDir);
167
- for (const line of lines) {
168
- if (!line.includes('Chrome') && !line.includes('chromium')) {
169
- continue;
170
- }
171
- if (!matchesUserDataDir(line, normalizedDir)) {
172
- continue;
173
- }
174
- const match = line.match(/--remote-debugging-port=(\d+)/);
175
- if (match?.[1]) {
176
- return parsePortValue(match[1], 'process-list');
177
- }
178
- }
179
- }
180
- catch {
181
- return undefined;
182
- }
183
- return undefined;
184
- }
185
- function matchesUserDataDir(commandLine, normalizedDir) {
186
- const candidates = [
187
- `--user-data-dir=${normalizedDir}`,
188
- `--user-data-dir="${normalizedDir}"`,
189
- `--user-data-dir='${normalizedDir}'`,
190
- ];
191
- const normalizedCommand = normalizePathForComparison(commandLine);
192
- return candidates.some((candidate) => normalizedCommand.includes(candidate));
193
- }
194
- function normalizePathForComparison(value) {
195
- return process.platform === 'win32' ? value.toLowerCase() : value;
196
- }
197
- async function safeStat(targetPath) {
198
- try {
199
- return await fs.promises.stat(targetPath);
200
- }
201
- catch {
202
- return null;
203
- }
204
- }
205
- //# sourceMappingURL=chrome-reuse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chrome-reuse.js","sourceRoot":"","sources":["../../../src/utils/browser/chrome-reuse.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function appendBrowserToolArgs(args: string[]): string[];
2
- //# sourceMappingURL=claude-tool-args.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-tool-args.d.ts","sourceRoot":"","sources":["../../../src/utils/browser/claude-tool-args.ts"],"names":[],"mappings":"AAmBA,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAE9D"}
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.appendBrowserToolArgs = void 0;
4
- const claude_tool_args_1 = require("../claude-tool-args");
5
- const APPEND_SYSTEM_PROMPT_FLAG = '--append-system-prompt';
6
- const BROWSER_STEERING_PROMPT = 'For DOM/screenshots/elements/page actions, prefer the CCS MCP Browser tool, reuse the configured running Chrome context whenever possible, and if the tool or context is unavailable, explain that clearly instead of pretending page state is available.';
7
- function ensureBrowserSteeringPrompt(args) {
8
- const { optionArgs, trailingArgs } = (0, claude_tool_args_1.splitArgsAtTerminator)(args);
9
- if ((0, claude_tool_args_1.hasExactFlagValue)(optionArgs, APPEND_SYSTEM_PROMPT_FLAG, BROWSER_STEERING_PROMPT)) {
10
- return args;
11
- }
12
- return [...optionArgs, APPEND_SYSTEM_PROMPT_FLAG, BROWSER_STEERING_PROMPT, ...trailingArgs];
13
- }
14
- function appendBrowserToolArgs(args) {
15
- return ensureBrowserSteeringPrompt(args);
16
- }
17
- exports.appendBrowserToolArgs = appendBrowserToolArgs;
18
- //# sourceMappingURL=claude-tool-args.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-tool-args.js","sourceRoot":"","sources":["../../../src/utils/browser/claude-tool-args.ts"],"names":[],"mappings":";;;AAAA,0DAG6B;AAE7B,MAAM,yBAAyB,GAAG,wBAAwB,CAAC;AAC3D,MAAM,uBAAuB,GAC3B,2PAA2P,CAAC;AAE9P,SAAS,2BAA2B,CAAC,IAAc;IACjD,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,IAAA,wCAA2B,EAAC,IAAI,CAAC,CAAC;IAEvE,IAAI,IAAA,oCAAuB,EAAC,UAAU,EAAE,yBAAyB,EAAE,uBAAuB,CAAC,EAAE,CAAC;QAC5F,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,GAAG,UAAU,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,GAAG,YAAY,CAAC,CAAC;AAC9F,CAAC;AAED,SAAgB,qBAAqB,CAAC,IAAc;IAClD,OAAO,2BAA2B,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAFD,sDAEC"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Browser Utilities
3
- */
4
- export { getBrowserMcpServerName, getBrowserMcpServerPath, installBrowserMcpServer, ensureBrowserMcpConfig, ensureBrowserMcp, uninstallBrowserMcpServer, removeBrowserMcpConfig, uninstallBrowserMcp, syncBrowserMcpToConfigDir, ensureBrowserMcpOrThrow, } from './mcp-installer';
5
- export { appendBrowserToolArgs } from './claude-tool-args';
6
- export { resolveBrowserRuntimeEnv, resolveDefaultChromeUserDataDir, resolveConfiguredBrowserProfileDir, } from './chrome-reuse';
7
- export type { BrowserReuseOptions, BrowserRuntimeEnv } from './chrome-reuse';
8
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/browser/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,EAChB,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EACL,wBAAwB,EACxB,+BAA+B,EAC/B,kCAAkC,GACnC,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,24 +0,0 @@
1
- "use strict";
2
- /**
3
- * Browser Utilities
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.resolveConfiguredBrowserProfileDir = exports.resolveDefaultChromeUserDataDir = exports.resolveBrowserRuntimeEnv = exports.appendBrowserToolArgs = exports.ensureBrowserMcpOrThrow = exports.syncBrowserMcpToConfigDir = exports.uninstallBrowserMcp = exports.removeBrowserMcpConfig = exports.uninstallBrowserMcpServer = exports.ensureBrowserMcp = exports.ensureBrowserMcpConfig = exports.installBrowserMcpServer = exports.getBrowserMcpServerPath = exports.getBrowserMcpServerName = void 0;
7
- var mcp_installer_1 = require("./mcp-installer");
8
- Object.defineProperty(exports, "getBrowserMcpServerName", { enumerable: true, get: function () { return mcp_installer_1.getBrowserMcpServerName; } });
9
- Object.defineProperty(exports, "getBrowserMcpServerPath", { enumerable: true, get: function () { return mcp_installer_1.getBrowserMcpServerPath; } });
10
- Object.defineProperty(exports, "installBrowserMcpServer", { enumerable: true, get: function () { return mcp_installer_1.installBrowserMcpServer; } });
11
- Object.defineProperty(exports, "ensureBrowserMcpConfig", { enumerable: true, get: function () { return mcp_installer_1.ensureBrowserMcpConfig; } });
12
- Object.defineProperty(exports, "ensureBrowserMcp", { enumerable: true, get: function () { return mcp_installer_1.ensureBrowserMcp; } });
13
- Object.defineProperty(exports, "uninstallBrowserMcpServer", { enumerable: true, get: function () { return mcp_installer_1.uninstallBrowserMcpServer; } });
14
- Object.defineProperty(exports, "removeBrowserMcpConfig", { enumerable: true, get: function () { return mcp_installer_1.removeBrowserMcpConfig; } });
15
- Object.defineProperty(exports, "uninstallBrowserMcp", { enumerable: true, get: function () { return mcp_installer_1.uninstallBrowserMcp; } });
16
- Object.defineProperty(exports, "syncBrowserMcpToConfigDir", { enumerable: true, get: function () { return mcp_installer_1.syncBrowserMcpToConfigDir; } });
17
- Object.defineProperty(exports, "ensureBrowserMcpOrThrow", { enumerable: true, get: function () { return mcp_installer_1.ensureBrowserMcpOrThrow; } });
18
- var claude_tool_args_1 = require("./claude-tool-args");
19
- Object.defineProperty(exports, "appendBrowserToolArgs", { enumerable: true, get: function () { return claude_tool_args_1.appendBrowserToolArgs; } });
20
- var chrome_reuse_1 = require("./chrome-reuse");
21
- Object.defineProperty(exports, "resolveBrowserRuntimeEnv", { enumerable: true, get: function () { return chrome_reuse_1.resolveBrowserRuntimeEnv; } });
22
- Object.defineProperty(exports, "resolveDefaultChromeUserDataDir", { enumerable: true, get: function () { return chrome_reuse_1.resolveDefaultChromeUserDataDir; } });
23
- Object.defineProperty(exports, "resolveConfiguredBrowserProfileDir", { enumerable: true, get: function () { return chrome_reuse_1.resolveConfiguredBrowserProfileDir; } });
24
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/browser/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,iDAWyB;AAVvB,wHAAA,uBAAuB,OAAA;AACvB,wHAAA,uBAAuB,OAAA;AACvB,wHAAA,uBAAuB,OAAA;AACvB,uHAAA,sBAAsB,OAAA;AACtB,iHAAA,gBAAgB,OAAA;AAChB,0HAAA,yBAAyB,OAAA;AACzB,uHAAA,sBAAsB,OAAA;AACtB,oHAAA,mBAAmB,OAAA;AACnB,0HAAA,yBAAyB,OAAA;AACzB,wHAAA,uBAAuB,OAAA;AAGzB,uDAA2D;AAAlD,yHAAA,qBAAqB,OAAA;AAE9B,+CAIwB;AAHtB,wHAAA,wBAAwB,OAAA;AACxB,+HAAA,+BAA+B,OAAA;AAC/B,kIAAA,kCAAkC,OAAA"}
@@ -1,14 +0,0 @@
1
- /**
2
- * Browser MCP installer and ~/.claude.json provisioning.
3
- */
4
- export declare function getBrowserMcpServerName(): string;
5
- export declare function getBrowserMcpServerPath(): string;
6
- export declare function installBrowserMcpServer(): boolean;
7
- export declare function ensureBrowserMcpConfig(): boolean;
8
- export declare function ensureBrowserMcp(): boolean;
9
- export declare function syncBrowserMcpToConfigDir(claudeConfigDir: string | undefined): boolean;
10
- export declare function uninstallBrowserMcpServer(): boolean;
11
- export declare function removeBrowserMcpConfig(): boolean;
12
- export declare function uninstallBrowserMcp(): boolean;
13
- export declare function ensureBrowserMcpOrThrow(): boolean;
14
- //# sourceMappingURL=mcp-installer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-installer.d.ts","sourceRoot":"","sources":["../../../src/utils/browser/mcp-installer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyDH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAoJD,wBAAgB,uBAAuB,IAAI,OAAO,CA8CjD;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAyDhD;AAED,wBAAgB,gBAAgB,IAAI,OAAO,CAI1C;AAED,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAMtF;AAED,wBAAgB,yBAAyB,IAAI,OAAO,CAYnD;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAWhD;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAI7C;AAED,wBAAgB,uBAAuB,IAAI,OAAO,CAOjD"}