@kaitranntt/ccs 7.78.1 → 7.79.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.
- package/dist/bin/ccsxp-runtime.d.ts +1 -0
- package/dist/bin/ccsxp-runtime.d.ts.map +1 -1
- package/dist/bin/ccsxp-runtime.js +2 -0
- package/dist/bin/ccsxp-runtime.js.map +1 -1
- package/dist/channels/official-channels-runtime.d.ts.map +1 -1
- package/dist/channels/official-channels-runtime.js +11 -0
- package/dist/channels/official-channels-runtime.js.map +1 -1
- package/dist/channels/official-channels-store.d.ts.map +1 -1
- package/dist/channels/official-channels-store.js +3 -4
- package/dist/channels/official-channels-store.js.map +1 -1
- package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -1
- package/dist/cliproxy/auth/oauth-handler.js +21 -0
- package/dist/cliproxy/auth/oauth-handler.js.map +1 -1
- package/dist/cliproxy/auth/oauth-start-failure-guidance.d.ts +22 -0
- package/dist/cliproxy/auth/oauth-start-failure-guidance.d.ts.map +1 -0
- package/dist/cliproxy/auth/oauth-start-failure-guidance.js +82 -0
- package/dist/cliproxy/auth/oauth-start-failure-guidance.js.map +1 -0
- package/dist/cliproxy/executor/claude-launcher.d.ts.map +1 -1
- package/dist/cliproxy/executor/claude-launcher.js +22 -9
- package/dist/cliproxy/executor/claude-launcher.js.map +1 -1
- package/dist/cliproxy/executor/session-bridge.d.ts +16 -1
- package/dist/cliproxy/executor/session-bridge.d.ts.map +1 -1
- package/dist/cliproxy/executor/session-bridge.js +86 -54
- package/dist/cliproxy/executor/session-bridge.js.map +1 -1
- package/dist/commands/config-command-options.d.ts.map +1 -1
- package/dist/commands/config-command-options.js +4 -2
- package/dist/commands/config-command-options.js.map +1 -1
- package/dist/commands/config-command.js +1 -1
- package/dist/commands/config-command.js.map +1 -1
- package/dist/commands/config-dashboard-host.d.ts +1 -0
- package/dist/commands/config-dashboard-host.d.ts.map +1 -1
- package/dist/commands/config-dashboard-host.js +2 -1
- package/dist/commands/config-dashboard-host.js.map +1 -1
- package/dist/dispatcher/flows/settings-flow.d.ts.map +1 -1
- package/dist/dispatcher/flows/settings-flow.js +21 -10
- package/dist/dispatcher/flows/settings-flow.js.map +1 -1
- package/dist/dispatcher/profile-resolver.d.ts.map +1 -1
- package/dist/dispatcher/profile-resolver.js +14 -1
- package/dist/dispatcher/profile-resolver.js.map +1 -1
- package/dist/management/checks/profile-check.d.ts.map +1 -1
- package/dist/management/checks/profile-check.js +2 -3
- package/dist/management/checks/profile-check.js.map +1 -1
- package/dist/management/checks/symlink-check.d.ts.map +1 -1
- package/dist/management/checks/symlink-check.js +2 -3
- package/dist/management/checks/symlink-check.js.map +1 -1
- package/dist/management/checks/system-check.d.ts.map +1 -1
- package/dist/management/checks/system-check.js +1 -1
- package/dist/management/checks/system-check.js.map +1 -1
- package/dist/management/instance-directory.d.ts +4 -0
- package/dist/management/instance-directory.d.ts.map +1 -0
- package/dist/management/instance-directory.js +54 -0
- package/dist/management/instance-directory.js.map +1 -0
- package/dist/management/instance-manager.d.ts.map +1 -1
- package/dist/management/instance-manager.js +2 -10
- package/dist/management/instance-manager.js.map +1 -1
- package/dist/management/shared-manager.d.ts.map +1 -1
- package/dist/management/shared-manager.js +6 -16
- package/dist/management/shared-manager.js.map +1 -1
- package/dist/proxy/proxy-daemon-entry.js +46 -3
- package/dist/proxy/proxy-daemon-entry.js.map +1 -1
- package/dist/proxy/proxy-daemon-state.d.ts +2 -0
- package/dist/proxy/proxy-daemon-state.d.ts.map +1 -1
- package/dist/proxy/proxy-daemon-state.js +42 -4
- package/dist/proxy/proxy-daemon-state.js.map +1 -1
- package/dist/proxy/proxy-daemon.d.ts.map +1 -1
- package/dist/proxy/proxy-daemon.js +11 -6
- package/dist/proxy/proxy-daemon.js.map +1 -1
- package/dist/proxy/transformers/sse-stream-transformer.d.ts.map +1 -1
- package/dist/proxy/transformers/sse-stream-transformer.js +1 -0
- package/dist/proxy/transformers/sse-stream-transformer.js.map +1 -1
- package/dist/shared/toml-object.d.ts.map +1 -1
- package/dist/shared/toml-object.js +6 -2
- package/dist/shared/toml-object.js.map +1 -1
- package/dist/targets/codex-adapter.d.ts +1 -0
- package/dist/targets/codex-adapter.d.ts.map +1 -1
- package/dist/targets/codex-adapter.js +18 -1
- package/dist/targets/codex-adapter.js.map +1 -1
- package/dist/targets/codex-cliproxy-provider-config.d.ts +16 -0
- package/dist/targets/codex-cliproxy-provider-config.d.ts.map +1 -0
- package/dist/targets/codex-cliproxy-provider-config.js +156 -0
- package/dist/targets/codex-cliproxy-provider-config.js.map +1 -0
- package/dist/targets/target-runtime-compatibility.js +1 -1
- package/dist/targets/target-runtime-compatibility.js.map +1 -1
- package/dist/ui/assets/accounts-CQ7-Zx3_.js +1 -0
- package/dist/ui/assets/{alert-dialog-ClPYGzV3.js → alert-dialog-834N3Y7a.js} +1 -1
- package/dist/ui/assets/api-BJc1e2ju.js +4 -0
- package/dist/ui/assets/auth-section-FHhzv-t_.js +1 -0
- package/dist/ui/assets/backups-section-XgV36q98.js +1 -0
- package/dist/ui/assets/channels-BiUWmX53.js +1 -0
- package/dist/ui/assets/{charts-CeK2xCSo.js → charts-eIPy2oG6.js} +34 -34
- package/dist/ui/assets/{checkbox-CTpEjpTH.js → checkbox-Q5jqcuNs.js} +1 -1
- package/dist/ui/assets/claude-extension-Dg6ZOc-X.js +1 -0
- package/dist/ui/assets/cliproxy-DUGEhRI_.js +4 -0
- package/dist/ui/assets/{cliproxy-ai-providers-DoUPKyI5.js → cliproxy-ai-providers-DH1LvC9H.js} +1 -1
- package/dist/ui/assets/cliproxy-control-panel-DQcF0grk.js +1 -0
- package/dist/ui/assets/code-highlight-ClSMkeL5.js +1 -0
- package/dist/ui/assets/codex-B4aTo2gn.js +30 -0
- package/dist/ui/assets/{confirm-dialog-CYj_LLWN.js → confirm-dialog-ZIkkz4a-.js} +1 -1
- package/dist/ui/assets/copilot-BxTvmyiq.js +3 -0
- package/dist/ui/assets/cursor-DFNXCb2C.js +1 -0
- package/dist/ui/assets/droid-BtmVuSvi.js +2 -0
- package/dist/ui/assets/globalenv-section-ZUDnNjxP.js +1 -0
- package/dist/ui/assets/health-BQ5SLS-w.js +1 -0
- package/dist/ui/assets/index-2_GLcEv2.js +1 -0
- package/dist/ui/assets/index-BRwWpHe-.js +56 -0
- package/dist/ui/assets/index-BW69dNHf.js +1 -0
- package/dist/ui/assets/index-C6Qs2iuI.js +1 -0
- package/dist/ui/assets/index-DG9lONG_.js +1 -0
- package/dist/ui/assets/index-DKO-Gvdv.js +1 -0
- package/dist/ui/assets/index-YRmKZmzf.js +1 -0
- package/dist/ui/assets/index-nSsKQx8t.css +1 -0
- package/dist/ui/assets/logs-CiJ1hg6a.js +1 -0
- package/dist/ui/assets/{masked-input-eN6tFUjN.js → masked-input-CxbGLkmv.js} +1 -1
- package/dist/ui/assets/{proxy-status-widget-50UIM6S8.js → proxy-status-widget-BWr7WQY-.js} +1 -1
- package/dist/ui/assets/raw-json-settings-editor-panel-BRT6eyp6.js +1 -0
- package/dist/ui/assets/{searchable-select-JO0gngYE.js → searchable-select-zyPEV9KP.js} +1 -1
- package/dist/ui/assets/{separator-AoncAA6l.js → separator-BDmUKYTf.js} +1 -1
- package/dist/ui/assets/shared-CDiPdrLt.js +8 -0
- package/dist/ui/assets/{table-BM_YK49c.js → table-DB4ZK3nd.js} +1 -1
- package/dist/ui/assets/updates-IMCUh1DI.js +1 -0
- package/dist/ui/assets/{use-accounts-ELLatpzU.js → use-accounts-CyI5Ozs6.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/utils/browser/claude-tool-args.d.ts.map +1 -1
- package/dist/utils/browser/claude-tool-args.js +4 -0
- package/dist/utils/browser/claude-tool-args.js.map +1 -1
- package/dist/utils/claude-detector.d.ts.map +1 -1
- package/dist/utils/claude-detector.js +2 -1
- package/dist/utils/claude-detector.js.map +1 -1
- package/dist/utils/claude-subcommand-detector.d.ts +45 -0
- package/dist/utils/claude-subcommand-detector.d.ts.map +1 -0
- package/dist/utils/claude-subcommand-detector.js +179 -0
- package/dist/utils/claude-subcommand-detector.js.map +1 -0
- package/dist/utils/image-analysis/claude-tool-args.d.ts.map +1 -1
- package/dist/utils/image-analysis/claude-tool-args.js +4 -0
- package/dist/utils/image-analysis/claude-tool-args.js.map +1 -1
- package/dist/utils/shell-executor.d.ts +4 -2
- package/dist/utils/shell-executor.d.ts.map +1 -1
- package/dist/utils/shell-executor.js +59 -7
- package/dist/utils/shell-executor.js.map +1 -1
- package/dist/utils/websearch/claude-tool-args.d.ts.map +1 -1
- package/dist/utils/websearch/claude-tool-args.js +5 -0
- package/dist/utils/websearch/claude-tool-args.js.map +1 -1
- package/dist/web-server/health/profile-checks.d.ts.map +1 -1
- package/dist/web-server/health/profile-checks.js +2 -3
- package/dist/web-server/health/profile-checks.js.map +1 -1
- package/dist/web-server/health/symlink-checks.d.ts.map +1 -1
- package/dist/web-server/health/symlink-checks.js +2 -3
- package/dist/web-server/health/symlink-checks.js.map +1 -1
- package/dist/web-server/index.d.ts.map +1 -1
- package/dist/web-server/index.js +80 -20
- package/dist/web-server/index.js.map +1 -1
- package/dist/web-server/middleware/auth-middleware.d.ts +5 -0
- package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -1
- package/dist/web-server/middleware/auth-middleware.js +73 -1
- package/dist/web-server/middleware/auth-middleware.js.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.js +30 -3
- package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
- package/dist/web-server/routes/codex-routes.d.ts.map +1 -1
- package/dist/web-server/routes/codex-routes.js +7 -0
- package/dist/web-server/routes/codex-routes.js.map +1 -1
- package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
- package/dist/web-server/routes/settings-routes.js +92 -14
- package/dist/web-server/routes/settings-routes.js.map +1 -1
- package/dist/web-server/usage/aggregator.d.ts.map +1 -1
- package/dist/web-server/usage/aggregator.js +2 -5
- package/dist/web-server/usage/aggregator.js.map +1 -1
- package/lib/hooks/image-analyzer-transformer.cjs +49 -3
- package/lib/mcp/ccs-browser-server.cjs +153 -6
- package/package.json +1 -1
- package/scripts/verify-bundle.js +4 -1
- package/dist/ui/assets/accounts-CW9bbE4S.js +0 -1
- package/dist/ui/assets/api-BjpAFHdA.js +0 -4
- package/dist/ui/assets/auth-section-wl4-fzwD.js +0 -1
- package/dist/ui/assets/backups-section-CRfyOhtX.js +0 -1
- package/dist/ui/assets/channels-DH0HkSGX.js +0 -1
- package/dist/ui/assets/claude-extension-BQOBO5Au.js +0 -1
- package/dist/ui/assets/cliproxy-control-panel-CvjXdHw9.js +0 -1
- package/dist/ui/assets/cliproxy-qUbiZjec.js +0 -3
- package/dist/ui/assets/code-highlight-D4E79GKQ.js +0 -3
- package/dist/ui/assets/codex-BeeazJpw.js +0 -27
- package/dist/ui/assets/copilot-ZCJeM_Zk.js +0 -3
- package/dist/ui/assets/cursor-CtBjQ1_j.js +0 -1
- package/dist/ui/assets/droid-BLmzMBtN.js +0 -2
- package/dist/ui/assets/globalenv-section-0ENDeVbM.js +0 -1
- package/dist/ui/assets/health-BEnDHk-j.js +0 -1
- package/dist/ui/assets/index-B3xma6R0.js +0 -1
- package/dist/ui/assets/index-Bs28kNJN.js +0 -72
- package/dist/ui/assets/index-C04Kst21.js +0 -1
- package/dist/ui/assets/index-Cip18A41.js +0 -1
- package/dist/ui/assets/index-ClMz157R.js +0 -1
- package/dist/ui/assets/index-D2_yb3d2.css +0 -1
- package/dist/ui/assets/index-DrCrZ7r1.js +0 -1
- package/dist/ui/assets/index-O9Qq-UJq.js +0 -1
- package/dist/ui/assets/logs-DQxVdsHm.js +0 -1
- package/dist/ui/assets/raw-json-settings-editor-panel-DqKmVWL-.js +0 -1
- package/dist/ui/assets/shared-BTv96-3y.js +0 -8
- package/dist/ui/assets/updates-eo4H4NOg.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as e}from"./radix-ui-nu4wz29m.js";import{L,r as c}from"./react-vendor-Bjx91N7w.js";import{a as x,B as P,c as S,W as M,d as u,x as U,C,j as v,k as N,_ as w,b as j,n as b,I as B}from"./index-BRwWpHe-.js";import{a1 as F,$ as z,ba as W,x as H,E as Q,Q as G,aa as K,C as q,bb as J,av as V}from"./icons-DzKUh8vG.js";import"./tanstack-bhJxV1h8.js";import"./notifications-B4_o8bcr.js";import"./utils-CzKF5WmX.js";import"./form-utils-CuHzLhJZ.js";import"./charts-eIPy2oG6.js";const Y={new:"border-blue-200 bg-blue-50 text-blue-700 dark:border-blue-900/50 dark:bg-blue-900/20 dark:text-blue-300",stable:"border-green-200 bg-green-50 text-green-700 dark:border-green-900/50 dark:bg-green-900/20 dark:text-green-300",planned:"border-amber-200 bg-amber-50 text-amber-700 dark:border-amber-900/50 dark:bg-amber-900/20 dark:text-amber-300"};function Z({status:s,className:t}){const{t:r}=x(),i={new:r("updates.statusNew"),stable:r("updates.statusStable"),planned:r("updates.statusPlanned")};return e.jsx(P,{variant:"outline",className:S("font-medium",Y[s],t),children:i[s]})}const g={target:"Target CLI",cliproxy:"CLIProxy Provider","api-profiles":"API Profile",websearch:"WebSearch"},X=[{id:"codex-target-runtime-support",title:"Native Codex runtime support is live",summary:"Codex now participates as a first-class runtime target through ccs-codex, ccsx, ccsxp, or --target codex.",primaryAction:"Use Codex as a runtime target for native Codex sessions and Codex-routed CLIProxy flows.",publishedAt:"2026-03-28",status:"new",scopes:["target","cliproxy","api-profiles"],entryIds:["codex-target","codex-cliproxy"],highlights:["Use ccs-codex or ccsx for native Codex runs.","Use ccsxp for native Codex with the cliproxy provider shortcut.","Use ccs codex --target codex when you want the explicit CCS-managed Codex bridge.","Codex remains runtime-only for saved defaults; use runtime aliases or --target codex at launch time."],actions:[{id:"copy-codex-alias-command",label:"Open native Codex",description:"Launch Codex through the explicit CCS runtime alias.",type:"command",command:"ccs-codex"},{id:"copy-codex-provider-command",label:"Run native Codex with cliproxy",description:"Use the native Codex cliproxy shortcut through CCS.",type:"command",command:'ccsxp "your prompt"'},{id:"copy-codex-provider-command-explicit",label:"Run the managed Codex bridge explicitly",description:"Use the explicit CCS-managed Codex bridge on native Codex.",type:"command",command:'ccs codex --target codex "your prompt"'},{id:"open-codex-dashboard",label:"Open Codex dashboard",description:"Review Codex runtime support, config layers, and dashboard setup flows.",type:"route",path:"/codex"}],routes:[{label:"Codex CLI",path:"/codex"}],commands:["ccs-codex","ccsx",'ccsxp "your prompt"','ccs codex --target codex "your prompt"']},{id:"droid-target-support",title:"Factory Droid support is live",summary:"API Profiles and CLIProxy variants now support Droid as a first-class execution target.",primaryAction:"Set Droid as your default execution target for non-Claude workflows.",publishedAt:"2026-02-25",status:"new",scopes:["target","api-profiles","cliproxy"],entryIds:["droid-target","custom-api-profiles","codex-cliproxy","agy-cliproxy"],highlights:["Set default target to Droid when creating or editing API Profiles.","Set default target to Droid for CLIProxy variants, including Codex and Antigravity flows.","Use ccs-droid as the explicit alias, with ccsd kept as the legacy shortcut."],actions:[{id:"open-api-profiles",label:"Set default target in API Profiles",description:"Open API Profiles and set Default Target to Droid for profiles you run often.",type:"route",path:"/providers"},{id:"open-cliproxy",label:"Set default target in CLIProxy variants",description:"Open CLIProxy variants and set target to Droid for Codex/Antigravity or custom variants.",type:"route",path:"/cliproxy"},{id:"copy-ccs-droid-command",label:"Run once with explicit Droid alias",description:"Use ccs-droid to force the Droid target with your current profile.",type:"command",command:"ccs-droid glm"},{id:"copy-target-override",label:"Run once with --target override",description:"Keep your default profile but force Droid for a single command.",type:"command",command:'ccs codex --target droid "your prompt"'}],routes:[{label:"API Profiles",path:"/providers"},{label:"CLIProxy",path:"/cliproxy"}],commands:["ccs-droid glm",'ccs codex --target droid "your prompt"',"ccs cliproxy create mycodex --provider codex --target droid"]},{id:"updates-center-launch",title:"Updates Center is available for rollout tasks",summary:"A focused Updates Center exists for setup tasks and rollout guidance when you need it.",primaryAction:"Use this page only when needed for rollout tasks, then return to your normal workflow.",publishedAt:"2026-02-25",status:"new",scopes:["target","cliproxy","api-profiles","websearch"],entryIds:["droid-target","codex-cliproxy","custom-api-profiles","opencode-websearch"],highlights:["Single data source powers update content and integration mapping.","Notices can be tracked as new, seen, done, or dismissed.","Catalog covers target CLI, CLIProxy providers, and WebSearch integrations."],actions:[{id:"open-updates-page",label:"Open Updates Center when needed",description:"Review rollout tasks only when you want guided setup changes.",type:"route",path:"/updates"},{id:"copy-open-dashboard",label:"Open dashboard from terminal",description:"Re-open config dashboard anytime from CLI.",type:"command",command:"ccs config"}],routes:[{label:"Updates Center",path:"/updates"}],commands:["ccs config"]}],ee=[{id:"claude-target",name:"Claude Code",scope:"target",status:"stable",summary:"Default runtime target for all CCS profile types.",pillars:{baseUrl:"From profile settings (ANTHROPIC_BASE_URL)",auth:"From profile settings (ANTHROPIC_AUTH_TOKEN)",model:"From profile settings (ANTHROPIC_MODEL)"},routes:[{label:"API Profiles",path:"/providers"},{label:"CLIProxy",path:"/cliproxy"}],commands:["ccs",'ccs glm "your prompt"']},{id:"droid-target",name:"Factory Droid",scope:"target",status:"new",summary:"First-class target for API Profiles and CLIProxy variants.",pillars:{baseUrl:"From profile or variant settings",auth:"From profile or variant settings",model:"From profile or variant settings"},routes:[{label:"API Profiles",path:"/providers"},{label:"CLIProxy",path:"/cliproxy"}],commands:["ccs-droid glm","ccs km --target droid","ccs codex --target droid"],notes:"Use ccs-droid as the explicit runtime alias. Legacy ccsd still works."},{id:"codex-target",name:"Codex CLI",scope:"target",status:"new",summary:"First-class runtime target for native Codex sessions and Codex-routed CLIProxy flows.",pillars:{baseUrl:"Native ~/.codex config for default mode, transient -c overrides for CCS-backed routes",auth:"Native Codex auth for default mode, env_key injection for CCS-backed routes",model:"Native Codex config or routed Codex model mapping from CLIProxy"},routes:[{label:"Codex CLI",path:"/codex"}],commands:["ccs-codex","ccsx","ccs codex --target codex","ccs codex-api --target codex"],notes:"Codex is still runtime-only for saved defaults; use --target codex or the runtime aliases at launch time."},{id:"codex-cliproxy",name:"Codex via CLIProxy",scope:"cliproxy",status:"stable",summary:"OAuth-backed provider with configurable variant model and a native Codex shortcut.",pillars:{baseUrl:"Managed by CLIProxy backend",auth:"OAuth account via CLIProxy auth flow",model:"Selectable per provider or variant"},routes:[{label:"CLIProxy",path:"/cliproxy"},{label:"Control Panel",path:"/cliproxy/control-panel"}],commands:['ccsxp "your prompt"',"ccs codex --target codex","ccs codex","ccs cliproxy create mycodex --provider codex","ccs api create codex-api --cliproxy-provider codex"],notes:"Use ccsxp when you want native Codex with the cliproxy shortcut; use ccs codex --target codex for the explicit managed bridge."},{id:"gemini-cliproxy",name:"Gemini via CLIProxy",scope:"cliproxy",status:"stable",summary:"OAuth-backed Gemini provider with multi-account management.",pillars:{baseUrl:"Managed by CLIProxy backend",auth:"OAuth account via CLIProxy auth flow",model:"Selectable per provider or variant"},routes:[{label:"CLIProxy",path:"/cliproxy"},{label:"Control Panel",path:"/cliproxy/control-panel"}],commands:["ccs gemini","ccs cliproxy create mygem --provider gemini"]},{id:"agy-cliproxy",name:"Antigravity via CLIProxy",scope:"cliproxy",status:"stable",summary:"OAuth-backed Antigravity provider with variant target controls.",pillars:{baseUrl:"Managed by CLIProxy backend",auth:"OAuth account via CLIProxy auth flow",model:"Selectable per provider or variant"},routes:[{label:"CLIProxy",path:"/cliproxy"},{label:"Control Panel",path:"/cliproxy/control-panel"}],commands:["ccs agy","ccs cliproxy create myagy --provider agy --target droid"]},{id:"custom-api-profiles",name:"Custom API Profiles",scope:"api-profiles",status:"stable",summary:"Any Anthropic-compatible endpoint with per-profile target and model mapping.",pillars:{baseUrl:"User-defined endpoint",auth:"User-defined token/key",model:"User-defined model identifier"},routes:[{label:"API Profiles",path:"/providers"}],commands:["ccs api create myprofile",'ccs myprofile "your prompt"']},{id:"opencode-websearch",name:"OpenCode WebSearch",scope:"websearch",status:"stable",summary:"WebSearch provider surfaced in Settings for third-party profile workflows.",pillars:{baseUrl:"Managed by OpenCode CLI integration",auth:"Provider-specific (managed externally)",model:"Configurable in WebSearch settings"},routes:[{label:"Settings",path:"/settings"}],commands:["ccs config",'ccs codex "your prompt"'],notes:"Enable OpenCode in Settings > WebSearch to activate fallback search."}];function l(s,t,r){return M.t(s,{defaultValue:t,...r})}function se(){return{target:l("supportCatalog.scope.target",g.target),cliproxy:l("supportCatalog.scope.cliproxy",g.cliproxy),"api-profiles":l("supportCatalog.scope.apiProfiles",g["api-profiles"]),websearch:l("supportCatalog.scope.websearch",g.websearch)}}function te(s){return{...s,title:l(`supportCatalog.notice.${s.id}.title`,s.title),summary:l(`supportCatalog.notice.${s.id}.summary`,s.summary),primaryAction:l(`supportCatalog.notice.${s.id}.primaryAction`,s.primaryAction),highlights:s.highlights.map((t,r)=>l(`supportCatalog.notice.${s.id}.highlight.${r}`,t)),actions:s.actions.map(t=>({...t,label:l(`supportCatalog.notice.${s.id}.action.${t.id}.label`,t.label),description:l(`supportCatalog.notice.${s.id}.action.${t.id}.description`,t.description)})),routes:s.routes.map((t,r)=>({...t,label:l(`supportCatalog.notice.${s.id}.route.${r}.label`,t.label)}))}}function re(s){return{...s,name:l(`supportCatalog.entry.${s.id}.name`,s.name),summary:l(`supportCatalog.entry.${s.id}.summary`,s.summary),pillars:{baseUrl:l(`supportCatalog.entry.${s.id}.pillar.baseUrl`,s.pillars.baseUrl),auth:l(`supportCatalog.entry.${s.id}.pillar.auth`,s.pillars.auth),model:l(`supportCatalog.entry.${s.id}.pillar.model`,s.pillars.model)},routes:s.routes.map((t,r)=>({...t,label:l(`supportCatalog.entry.${s.id}.route.${r}.label`,t.label)})),notes:s.notes?l(`supportCatalog.entry.${s.id}.notes`,s.notes):s.notes}}function ae(){return X.map(te)}function oe(){return ee.map(re)}function ie(s){const t=new Map(oe().map(r=>[r.id,r]));return s.entryIds.map(r=>t.get(r)).filter(r=>!!r)}function O(s){const t=new Date(`${s}T00:00:00Z`);return Number.isNaN(t.getTime())?s:new Intl.DateTimeFormat(void 0,{year:"numeric",month:"short",day:"numeric",timeZone:"UTC"}).format(t)}const $="ccs:updates:notice-progress:v1";function de(s){return s==="new"?"new":"seen"}function m(s,t){return t[s.id]??de(s.status)}function A(s){return s!=="done"&&s!=="dismissed"}function le(){if(typeof window>"u")return{};try{const s=window.localStorage.getItem($);if(!s)return{};const t=JSON.parse(s);if(!t||typeof t!="object"||Array.isArray(t))return{};const r={};for(const[i,d]of Object.entries(t))typeof i=="string"&&(d==="new"||d==="seen"||d==="done"||d==="dismissed")&&(r[i]=d);return r}catch{return{}}}function ne(s){typeof window>"u"||window.localStorage.setItem($,JSON.stringify(s))}function D({state:s,className:t}){const{t:r}=x(),i={new:{label:r("updates.progressNeedsAction"),className:"border-amber-300/70 bg-amber-100/70 text-amber-800 dark:border-amber-500/40 dark:bg-amber-500/15 dark:text-amber-300",showDot:!0},seen:{label:r("updates.progressInReview"),className:"border-blue-300/70 bg-blue-100/70 text-blue-800 dark:border-blue-500/40 dark:bg-blue-500/15 dark:text-blue-300"},done:{label:r("updates.progressDone"),className:"border-emerald-300/70 bg-emerald-100/70 text-emerald-800 dark:border-emerald-500/40 dark:bg-emerald-500/15 dark:text-emerald-300"},dismissed:{label:r("updates.progressDismissed"),className:"border-muted-foreground/20 bg-muted text-muted-foreground dark:border-muted-foreground/30"}}[s];return e.jsxs(P,{variant:"outline",className:S("gap-1.5 border text-[10px] font-medium",i.className,t),children:[i.showDot&&e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-current"}),i.label]})}function ce({action:s}){const{t}=x();return e.jsxs("div",{className:"rounded-md border bg-muted/20 p-3",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0 space-y-0.5",children:[e.jsx("p",{className:"text-sm font-medium",children:s.label}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s.description})]}),s.type==="route"&&s.path&&e.jsx(u,{size:"sm",asChild:!0,children:e.jsxs(L,{to:s.path,children:[t("updates.open"),e.jsx(F,{className:"h-3.5 w-3.5"})]})})]}),s.type==="command"&&s.command&&e.jsxs("div",{className:"mt-2 flex items-center gap-2 rounded-md border bg-background px-2 py-1.5",children:[e.jsx(z,{className:"h-3.5 w-3.5 text-muted-foreground"}),e.jsx("code",{className:"min-w-0 flex-1 truncate text-[11px]",children:s.command}),e.jsx(U,{value:s.command})]})]})}function pe({notice:s,progress:t,relatedEntries:r,onUpdateProgress:i}){const{t:d}=x(),f=se();return s?e.jsxs("div",{className:"flex-1 min-w-0 bg-background grid grid-rows-[auto_minmax(0,1fr)] overflow-hidden",children:[e.jsxs("div",{className:"border-b bg-background px-4 py-3",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0 space-y-1",children:[e.jsx("h2",{className:"text-base font-semibold leading-tight",children:s.title}),e.jsx("p",{className:"text-sm text-muted-foreground",children:s.summary})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[t&&e.jsx(D,{state:t}),e.jsx(Z,{status:s.status})]})]}),e.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-2 text-xs text-muted-foreground",children:[e.jsx(W,{className:"h-3.5 w-3.5"}),e.jsx("span",{children:d("updates.published",{date:O(s.publishedAt)})})]}),e.jsxs("div",{className:"mt-3 flex flex-wrap gap-2",children:[e.jsxs(u,{size:"sm",onClick:()=>i("done"),children:[e.jsx(H,{className:"h-4 w-4"}),d("updates.markDone")]}),e.jsxs(u,{size:"sm",variant:"outline",onClick:()=>i("dismissed"),children:[e.jsx(Q,{className:"h-4 w-4"}),d("updates.dismiss")]}),e.jsxs(u,{size:"sm",variant:"ghost",onClick:()=>i("new"),children:[e.jsx(G,{className:"h-4 w-4"}),d("updates.reopen")]})]})]}),e.jsx("div",{className:"min-h-0 p-4",children:e.jsxs("div",{className:"grid h-full gap-4 xl:grid-cols-[minmax(0,1.5fr)_minmax(320px,1fr)] overflow-hidden",children:[e.jsxs(C,{className:"h-full overflow-hidden",children:[e.jsxs(v,{className:"pb-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(K,{className:"h-4 w-4 text-primary"}),e.jsx(N,{className:"text-base",children:d("updates.doNext")})]}),e.jsx(w,{children:s.primaryAction})]}),e.jsx(j,{className:"min-h-0",children:e.jsx(b,{className:"h-full pr-2",children:e.jsx("div",{className:"space-y-3",children:s.actions.map(o=>e.jsx(ce,{action:o},`${s.id}-${o.id}`))})})})]}),e.jsxs("div",{className:"grid h-full grid-rows-[minmax(0,1fr)_minmax(0,1fr)] gap-4 overflow-hidden",children:[e.jsxs(C,{className:"overflow-hidden",children:[e.jsxs(v,{className:"pb-3",children:[e.jsx(N,{className:"text-base",children:d("updates.impactedIntegrations")}),e.jsx(w,{children:d("updates.impactedDesc")})]}),e.jsx(j,{className:"min-h-0",children:e.jsx(b,{className:"h-full pr-2",children:e.jsx("div",{className:"space-y-2",children:r.map(o=>e.jsxs("div",{className:"rounded-md border bg-muted/20 p-2.5",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsx("p",{className:"min-w-0 truncate text-sm font-medium",children:o.name}),e.jsx(P,{variant:"outline",className:"h-5 px-1.5 text-[10px]",children:f[o.scope]})]}),e.jsxs("div",{className:"mt-2 flex items-center gap-2",children:[o.routes[0]&&e.jsx(u,{size:"sm",variant:"outline",asChild:!0,children:e.jsx(L,{to:o.routes[0].path,children:o.routes[0].label})}),o.commands[0]&&e.jsxs("div",{className:"ml-auto flex min-w-0 items-center gap-1.5",children:[e.jsx("code",{className:"truncate rounded bg-background px-1.5 py-0.5 text-[11px]",children:o.commands[0]}),e.jsx(U,{value:o.commands[0]})]})]})]},o.id))})})})]}),e.jsxs(C,{className:"overflow-hidden",children:[e.jsxs(v,{className:"pb-3",children:[e.jsx(N,{className:"text-base",children:d("updates.whyMatters")}),e.jsx(w,{children:d("updates.whyMattersDesc")})]}),e.jsx(j,{className:"min-h-0",children:e.jsx(b,{className:"h-full pr-2",children:e.jsx("ul",{className:"space-y-2 text-sm text-muted-foreground",children:s.highlights.map(o=>e.jsxs("li",{children:["- ",o]},`${s.id}-${o}`))})})})]})]})]})})]}):e.jsx("div",{className:"flex h-full items-center justify-center rounded-lg border border-dashed bg-muted/20 p-6",children:e.jsx("p",{className:"text-sm text-muted-foreground",children:d("updates.noUpdates")})})}function me({notice:s,progress:t,selected:r,onSelect:i}){return e.jsxs("button",{type:"button",onClick:i,className:S("w-full rounded-lg border px-3 py-3 text-left transition-colors",r?"border-primary/30 bg-primary/10":"border-transparent bg-background/40 hover:border-border hover:bg-muted/70"),children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"min-w-0 space-y-1",children:[e.jsx("p",{className:"truncate text-sm font-medium",children:s.title}),e.jsx("p",{className:"line-clamp-2 text-xs text-muted-foreground",children:s.primaryAction})]}),e.jsx(q,{className:"mt-0.5 h-4 w-4 shrink-0 text-muted-foreground"})]}),e.jsxs("div",{className:"mt-2 flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-[11px] text-muted-foreground",children:O(s.publishedAt)}),e.jsx(D,{state:t})]})]})}function ue(s,t){return t?[s.title,s.summary,s.primaryAction,...s.highlights,...s.commands,...s.actions.map(i=>`${i.label} ${i.description} ${i.command||""}`),...s.routes.map(i=>i.label)].join(" ").toLowerCase().includes(t):!0}function je(){const{t:s}=x(),t=[...ae()].sort((a,n)=>n.publishedAt.localeCompare(a.publishedAt)),[r,i]=c.useState("inbox"),[d,f]=c.useState(""),[o,k]=c.useState(()=>le()),[I,E]=c.useState(null);c.useEffect(()=>{ne(o)},[o]);const h=c.useMemo(()=>{const a=d.trim().toLowerCase();return t.filter(n=>{const y=m(n,o);return ue(n,a)?r==="done"?y==="done":r==="inbox"?A(y):!0:!1})},[t,o,d,r]),p=c.useMemo(()=>{const a=r==="all"?t:h;return a.find(n=>n.id===I)??a[0]??null},[t,I,r,h]),R=a=>{E(a.id),k(n=>m(a,n)!=="new"?n:{...n,[a.id]:"seen"})},T=c.useMemo(()=>t.filter(a=>A(m(a,o))).length,[t,o]),_=c.useMemo(()=>t.filter(a=>m(a,o)==="done").length,[t,o]);return e.jsxs("div",{className:"flex h-full min-h-0 overflow-hidden",children:[e.jsxs("div",{className:"w-80 border-r bg-muted/30 flex flex-col overflow-hidden",children:[e.jsxs("div",{className:"p-4 border-b bg-background space-y-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(J,{className:"h-5 w-5 text-primary"}),e.jsx("h1",{className:"font-semibold",children:s("updates.inboxTitle")})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("updates.inboxSubtitle")})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2 text-xs",children:[e.jsxs("div",{className:"rounded-md border bg-background px-2 py-1.5",children:[e.jsx("p",{className:"text-muted-foreground",children:s("updates.needsAction")}),e.jsx("p",{className:"text-base font-semibold",children:T})]}),e.jsxs("div",{className:"rounded-md border bg-background px-2 py-1.5",children:[e.jsx("p",{className:"text-muted-foreground",children:s("updates.doneCount")}),e.jsx("p",{className:"text-base font-semibold",children:_})]})]}),e.jsxs("div",{className:"relative",children:[e.jsx(V,{className:"absolute left-2.5 top-2.5 h-4 w-4 text-muted-foreground"}),e.jsx(B,{value:d,onChange:a=>f(a.target.value),placeholder:s("updates.searchPlaceholder"),className:"h-9 pl-8"})]}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:[{id:"inbox",label:s("updates.actionRequired")},{id:"done",label:s("updates.done")},{id:"all",label:s("updates.all")}].map(a=>e.jsx(u,{size:"sm",variant:r===a.id?"default":"outline",onClick:()=>i(a.id),children:a.label},a.id))})]}),e.jsx(b,{className:"flex-1",children:e.jsx("div",{className:"space-y-2 p-2",children:h.length===0?e.jsx("div",{className:"rounded-md border border-dashed p-3 text-xs text-muted-foreground",children:s("updates.noNotices")}):h.map(a=>e.jsx(me,{notice:a,progress:m(a,o),selected:p?.id===a.id,onSelect:()=>R(a)},a.id))})})]}),e.jsx(pe,{notice:p,progress:p?m(p,o):null,relatedEntries:p?ie(p):[],onUpdateProgress:a=>{p&&k(n=>({...n,[p.id]:a}))}})]})}export{je as UpdatesPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as _,a as m,b as p}from"./tanstack-bhJxV1h8.js";import{a as y,Y as l}from"./index-
|
|
1
|
+
import{u as _,a as m,b as p}from"./tanstack-bhJxV1h8.js";import{a as y,Y as l}from"./index-BRwWpHe-.js";import{t as s}from"./notifications-B4_o8bcr.js";function f(n){return Array.from(n).sort((r,e)=>r.localeCompare(e))}function x(n){const r=new Map;for(const t of n){if(t.context_mode!=="shared")continue;const d=t.context_group||"default",i=r.get(d)??{group:d,sharedCount:0,deeperCount:0,accountNames:[]};i.sharedCount+=1,i.accountNames.push(t.name),t.continuity_mode==="deeper"&&(i.deeperCount+=1),r.set(d,i)}const e=Array.from(r.values()).sort((t,d)=>t.group.localeCompare(d.group)),o=n.map(t=>{if(t.context_mode!=="shared")return{...t,sameGroupPeerCount:0,sameGroupDeeperPeerCount:0};const d=t.context_group||"default",i=r.get(d),h=Math.max((i?.sharedCount??1)-1,0),g=Math.max((i?.deeperCount??0)-(t.continuity_mode==="deeper"?1:0),0);return{...t,sameGroupPeerCount:h,sameGroupDeeperPeerCount:g}}),u=o.filter(t=>t.context_mode==="shared").length,a=o.filter(t=>t.context_mode==="shared"&&t.continuity_mode==="deeper").length,c=o.filter(t=>t.context_inferred).length,C=o.filter(t=>t.context_mode==="shared"&&t.continuity_mode!=="deeper"&&t.continuity_inferred).length;return{accounts:o,sharedCount:u,sharedStandardCount:Math.max(u-a,0),deeperSharedCount:a,isolatedCount:o.length-u,legacyContextCount:c,legacyContinuityCount:C,sharedAloneCount:o.filter(t=>t.context_mode==="shared"&&t.sameGroupPeerCount===0).length,sharedPeerAccountCount:o.filter(t=>t.sameGroupPeerCount>0).length,deeperReadyAccountCount:o.filter(t=>t.continuity_mode==="deeper"&&t.sameGroupDeeperPeerCount>0).length,sharedPeerGroups:f(e.filter(t=>t.sharedCount>=2).map(t=>t.group)),deeperReadyGroups:f(e.filter(t=>t.deeperCount>=2).map(t=>t.group)),sharedGroups:f(e.map(t=>t.group)),groupSummaries:e}}function G(){return _({queryKey:["accounts"],queryFn:()=>l.accounts.list(),select:n=>{const r=n.accounts.filter(a=>a.type!=="cliproxy"),e=x(r),o=n.accounts.length-r.length,u=e.accounts.some(a=>a.name===n.default)?n.default:null;return{accounts:e.accounts,default:u,cliproxyCount:o,legacyContextCount:e.legacyContextCount,legacyContinuityCount:e.legacyContinuityCount,sharedCount:e.sharedCount,sharedStandardCount:e.sharedStandardCount,deeperSharedCount:e.deeperSharedCount,isolatedCount:e.isolatedCount,sharedAloneCount:e.sharedAloneCount,sharedPeerAccountCount:e.sharedPeerAccountCount,deeperReadyAccountCount:e.deeperReadyAccountCount,sharedPeerGroups:e.sharedPeerGroups,deeperReadyGroups:e.deeperReadyGroups,sharedGroups:e.sharedGroups,groupSummaries:e.groupSummaries,plainCcsLane:n.plain_ccs_lane??null}}})}function q(){const n=m(),{t:r}=y();return p({mutationFn:e=>l.accounts.setDefault(e),onSuccess:(e,o)=>{n.invalidateQueries({queryKey:["accounts"]}),s.success(r("toasts.defaultAccountSet",{name:o}))},onError:e=>{s.error(e.message)}})}function D(){const n=m(),{t:r}=y();return p({mutationFn:()=>l.accounts.resetDefault(),onSuccess:()=>{n.invalidateQueries({queryKey:["accounts"]}),s.success(r("toasts.defaultAccountReset"))},onError:e=>{s.error(e.message)}})}function R(){const n=m(),{t:r}=y();return p({mutationFn:e=>l.accounts.delete(e),onSuccess:(e,o)=>{n.invalidateQueries({queryKey:["accounts"]}),s.success(r("toasts.accountDeleted",{name:o}))},onError:e=>{s.error(e.message)}})}function Q(){const n=m(),{t:r}=y();return p({mutationFn:({name:e,context_mode:o,context_group:u,continuity_mode:a})=>l.accounts.updateContext(e,{context_mode:o,context_group:u,continuity_mode:a}),onSuccess:(e,o)=>{n.invalidateQueries({queryKey:["accounts"]});const u=(o.context_group||"default").trim().toLowerCase().replace(/\s+/g,"-"),a=o.context_mode==="shared"?o.continuity_mode==="deeper"?`${r("accountsPage.sharedDeeper")} (${u})`:`${r("accountsPage.sharedStandard")} (${u})`:r("accountsPage.isolated");s.success(r("toasts.contextUpdated",{name:o.name,summary:a}))},onError:e=>{s.error(e.message)}})}function F(){const n=m(),{t:r}=y();return p({mutationFn:async e=>{const o=e.filter(c=>c.context_inferred||c.continuity_inferred),a=(await Promise.allSettled(o.map(c=>{const C=c.context_mode==="shared";return l.accounts.updateContext(c.name,{context_mode:C?"shared":"isolated",context_group:C?c.context_group||"default":void 0,continuity_mode:C?c.continuity_mode==="deeper"?"deeper":"standard":void 0})}))).filter(c=>c.status==="rejected").length;return{updatedCount:o.length-a,failedCount:a}},onSuccess:({updatedCount:e,failedCount:o})=>{if(n.invalidateQueries({queryKey:["accounts"]}),o>0&&e>0){s.error(r("toasts.legacyConfirmPartial",{updated:e,failed:o}));return}if(o>0){s.error(r("toasts.legacyConfirmAllFailed",{failed:o}));return}if(e>0){s.success(r("toasts.legacyConfirmSuccess",{count:e}));return}s.info(r("toasts.noLegacyAccounts"))},onError:e=>{n.invalidateQueries({queryKey:["accounts"]}),s.error(e.message)}})}function K(){const n=m(),{t:r}=y();return p({mutationFn:({name:e,shared_resource_mode:o})=>l.accounts.updateSharedResources(e,{shared_resource_mode:o}),onSuccess:(e,o)=>{n.invalidateQueries({queryKey:["accounts"]});const u=o.shared_resource_mode==="shared"?r("accountsPage.resourcesShared"):r("accountsPage.resourcesProfileLocal");s.success(r("toasts.resourcesUpdated",{name:o.name,summary:u}))},onError:e=>{s.error(e.message)}})}export{K as a,q as b,R as c,D as d,G as e,F as f,Q as u};
|
package/dist/ui/index.html
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap"
|
|
25
25
|
rel="stylesheet"
|
|
26
26
|
/>
|
|
27
|
-
<script type="module" crossorigin src="/assets/index-
|
|
27
|
+
<script type="module" crossorigin src="/assets/index-BRwWpHe-.js"></script>
|
|
28
28
|
<link rel="modulepreload" crossorigin href="/assets/react-vendor-Bjx91N7w.js">
|
|
29
29
|
<link rel="modulepreload" crossorigin href="/assets/radix-ui-nu4wz29m.js">
|
|
30
30
|
<link rel="modulepreload" crossorigin href="/assets/tanstack-bhJxV1h8.js">
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
<link rel="modulepreload" crossorigin href="/assets/icons-DzKUh8vG.js">
|
|
33
33
|
<link rel="modulepreload" crossorigin href="/assets/utils-CzKF5WmX.js">
|
|
34
34
|
<link rel="modulepreload" crossorigin href="/assets/form-utils-CuHzLhJZ.js">
|
|
35
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
36
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
35
|
+
<link rel="modulepreload" crossorigin href="/assets/charts-eIPy2oG6.js">
|
|
36
|
+
<link rel="stylesheet" crossorigin href="/assets/index-nSsKQx8t.css">
|
|
37
37
|
</head>
|
|
38
38
|
<body>
|
|
39
39
|
<div id="root"></div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-tool-args.d.ts","sourceRoot":"","sources":["../../../src/utils/browser/claude-tool-args.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claude-tool-args.d.ts","sourceRoot":"","sources":["../../../src/utils/browser/claude-tool-args.ts"],"names":[],"mappings":"AAoBA,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAI9D"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.appendBrowserToolArgs = void 0;
|
|
4
4
|
const claude_tool_args_1 = require("../claude-tool-args");
|
|
5
|
+
const claude_subcommand_detector_1 = require("../claude-subcommand-detector");
|
|
5
6
|
const APPEND_SYSTEM_PROMPT_FLAG = '--append-system-prompt';
|
|
6
7
|
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
8
|
function ensureBrowserSteeringPrompt(args) {
|
|
@@ -12,6 +13,9 @@ function ensureBrowserSteeringPrompt(args) {
|
|
|
12
13
|
return [...optionArgs, APPEND_SYSTEM_PROMPT_FLAG, BROWSER_STEERING_PROMPT, ...trailingArgs];
|
|
13
14
|
}
|
|
14
15
|
function appendBrowserToolArgs(args) {
|
|
16
|
+
// Subcommands reject `--append-system-prompt`. Issue #1218.
|
|
17
|
+
if ((0, claude_subcommand_detector_1.isClaudeSubcommandInvocation)(args))
|
|
18
|
+
return args;
|
|
15
19
|
return ensureBrowserSteeringPrompt(args);
|
|
16
20
|
}
|
|
17
21
|
exports.appendBrowserToolArgs = appendBrowserToolArgs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-tool-args.js","sourceRoot":"","sources":["../../../src/utils/browser/claude-tool-args.ts"],"names":[],"mappings":";;;AAAA,0DAG6B;
|
|
1
|
+
{"version":3,"file":"claude-tool-args.js","sourceRoot":"","sources":["../../../src/utils/browser/claude-tool-args.ts"],"names":[],"mappings":";;;AAAA,0DAG6B;AAC7B,8EAA6E;AAE7E,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,4DAA4D;IAC5D,IAAI,IAAA,yDAA4B,EAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,OAAO,2BAA2B,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAJD,sDAIC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-detector.d.ts","sourceRoot":"","sources":["../../src/utils/claude-detector.ts"],"names":[],"mappings":";;AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-detector.d.ts","sourceRoot":"","sources":["../../src/utils/claude-detector.ts"],"names":[],"mappings":";;AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAQ9C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAoCD;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAiE/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,IAAI,CAevD;AA6DD,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAInD;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAe5E;AAED,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,cAAc,EAAE,MAAM,GACrB,OAAO,CAET;AAED,wBAAgB,mBAAmB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,gBAAgB,GAAG,IAAI,CAwB7F;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,KAAK,CAI/C"}
|
|
@@ -160,11 +160,12 @@ function runClaudeCliCommand(args, envOverrides) {
|
|
|
160
160
|
}).trim();
|
|
161
161
|
}
|
|
162
162
|
if (needsShell) {
|
|
163
|
+
const shell = (0, shell_executor_1.getWindowsEscapedCommandShell)();
|
|
163
164
|
return (0, child_process_1.execSync)([claudePath, ...args].map(shell_executor_1.escapeShellArg).join(' '), {
|
|
164
165
|
encoding: 'utf8',
|
|
165
166
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
166
167
|
timeout: 5000,
|
|
167
|
-
shell:
|
|
168
|
+
shell: typeof shell === 'string' ? shell : undefined,
|
|
168
169
|
env,
|
|
169
170
|
}).trim();
|
|
170
171
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-detector.js","sourceRoot":"","sources":["../../src/utils/claude-detector.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,iDAAuD;AACvD,uCAAuC;AAEvC,
|
|
1
|
+
{"version":3,"file":"claude-detector.js","sourceRoot":"","sources":["../../src/utils/claude-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude subcommand detection.
|
|
3
|
+
*
|
|
4
|
+
* Claude Code's CLI accepts both an interactive session form (`claude [prompt]`,
|
|
5
|
+
* possibly with `--print`) and explicit subcommands (`claude agents`,
|
|
6
|
+
* `claude doctor`, `claude mcp`, ...). Subcommand parsers reject most top-level
|
|
7
|
+
* session flags — e.g. `claude agents --append-system-prompt foo` exits with
|
|
8
|
+
* `error: unknown option '--append-system-prompt'`.
|
|
9
|
+
*
|
|
10
|
+
* CCS injects WebSearch / image-analysis / browser steering args
|
|
11
|
+
* (`--append-system-prompt`, `--disallowedTools`) for interactive sessions.
|
|
12
|
+
* Those flags must be skipped when the user is actually invoking a Claude
|
|
13
|
+
* subcommand, otherwise the subcommand fails or falls back to non-interactive
|
|
14
|
+
* mode (e.g. `claude agents` printing the list instead of opening the agent
|
|
15
|
+
* view — see issue #1218).
|
|
16
|
+
*
|
|
17
|
+
* Detection walks args left-to-right, skipping known value-taking top-level
|
|
18
|
+
* flags, and reports whether the first positional token matches a known
|
|
19
|
+
* Claude subcommand.
|
|
20
|
+
*/
|
|
21
|
+
/// <reference types="node" />
|
|
22
|
+
/// <reference types="bun-types" />
|
|
23
|
+
/**
|
|
24
|
+
* Returns true when `args` look like a Claude subcommand invocation.
|
|
25
|
+
*
|
|
26
|
+
* Heuristic:
|
|
27
|
+
* 1. Walk args until the `--` terminator or end.
|
|
28
|
+
* 2. Skip known value-taking flags together with their next token.
|
|
29
|
+
* 3. Skip unknown `--flag=value` forms and bare `--flag` / `-x` tokens.
|
|
30
|
+
* 4. The first remaining positional token is the candidate.
|
|
31
|
+
* 5. Match against CLAUDE_SUBCOMMANDS.
|
|
32
|
+
*
|
|
33
|
+
* Anything after the candidate is irrelevant — once a subcommand is in play,
|
|
34
|
+
* the rest of the line belongs to that subcommand.
|
|
35
|
+
*/
|
|
36
|
+
export declare function isClaudeSubcommandInvocation(args: readonly string[]): boolean;
|
|
37
|
+
export declare function stripClaudeSubcommandSessionArgs(args: readonly string[]): string[];
|
|
38
|
+
export declare function stripClaudeCodeFeatureBlockingEnv(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
39
|
+
/**
|
|
40
|
+
* Return a shallow copy of `env` with subcommand-blocking telemetry vars
|
|
41
|
+
* removed. Caller is responsible for only invoking this when args are a
|
|
42
|
+
* Claude subcommand invocation.
|
|
43
|
+
*/
|
|
44
|
+
export declare function stripSubcommandBlockingEnv(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
45
|
+
//# sourceMappingURL=claude-subcommand-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-subcommand-detector.d.ts","sourceRoot":"","sources":["../../src/utils/claude-subcommand-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AA6EH;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAqB7E;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CA4BlF;AAQD,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAa3F;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAEpF"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Claude subcommand detection.
|
|
4
|
+
*
|
|
5
|
+
* Claude Code's CLI accepts both an interactive session form (`claude [prompt]`,
|
|
6
|
+
* possibly with `--print`) and explicit subcommands (`claude agents`,
|
|
7
|
+
* `claude doctor`, `claude mcp`, ...). Subcommand parsers reject most top-level
|
|
8
|
+
* session flags — e.g. `claude agents --append-system-prompt foo` exits with
|
|
9
|
+
* `error: unknown option '--append-system-prompt'`.
|
|
10
|
+
*
|
|
11
|
+
* CCS injects WebSearch / image-analysis / browser steering args
|
|
12
|
+
* (`--append-system-prompt`, `--disallowedTools`) for interactive sessions.
|
|
13
|
+
* Those flags must be skipped when the user is actually invoking a Claude
|
|
14
|
+
* subcommand, otherwise the subcommand fails or falls back to non-interactive
|
|
15
|
+
* mode (e.g. `claude agents` printing the list instead of opening the agent
|
|
16
|
+
* view — see issue #1218).
|
|
17
|
+
*
|
|
18
|
+
* Detection walks args left-to-right, skipping known value-taking top-level
|
|
19
|
+
* flags, and reports whether the first positional token matches a known
|
|
20
|
+
* Claude subcommand.
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.stripSubcommandBlockingEnv = exports.stripClaudeCodeFeatureBlockingEnv = exports.stripClaudeSubcommandSessionArgs = exports.isClaudeSubcommandInvocation = void 0;
|
|
24
|
+
/**
|
|
25
|
+
* Known Claude CLI subcommands. Sourced from `claude --help` (v2.1.139).
|
|
26
|
+
* Keep in sync with upstream — additions are safe (over-skipping injection
|
|
27
|
+
* for an unknown command is acceptable; under-skipping is the bug).
|
|
28
|
+
*/
|
|
29
|
+
const CLAUDE_SUBCOMMANDS = new Set([
|
|
30
|
+
'agents',
|
|
31
|
+
'auth',
|
|
32
|
+
'auto-mode',
|
|
33
|
+
'doctor',
|
|
34
|
+
'install',
|
|
35
|
+
'mcp',
|
|
36
|
+
'plugin',
|
|
37
|
+
'plugins',
|
|
38
|
+
'project',
|
|
39
|
+
'setup-token',
|
|
40
|
+
'ultrareview',
|
|
41
|
+
'update',
|
|
42
|
+
'upgrade',
|
|
43
|
+
]);
|
|
44
|
+
/**
|
|
45
|
+
* Top-level Claude flags that consume the next argv token as their value.
|
|
46
|
+
* Used so the detector doesn't mistake a flag value (e.g. `--name auth`) for
|
|
47
|
+
* a subcommand. Boolean flags are intentionally absent.
|
|
48
|
+
*
|
|
49
|
+
* Variadic flags (`--add-dir`, `--mcp-config`, etc.) only consume their
|
|
50
|
+
* immediate next token here; Commander.js' real variadic parsing isn't worth
|
|
51
|
+
* replicating since the goal is just to skip past one obvious value safely.
|
|
52
|
+
*/
|
|
53
|
+
const VALUE_TAKING_FLAGS = new Set([
|
|
54
|
+
'--add-dir',
|
|
55
|
+
'--agent',
|
|
56
|
+
'--agents',
|
|
57
|
+
'--allowedTools',
|
|
58
|
+
'--allowed-tools',
|
|
59
|
+
'--append-system-prompt',
|
|
60
|
+
'--betas',
|
|
61
|
+
'--channels',
|
|
62
|
+
'--debug-file',
|
|
63
|
+
'--disallowedTools',
|
|
64
|
+
'--disallowed-tools',
|
|
65
|
+
'--effort',
|
|
66
|
+
'--fallback-model',
|
|
67
|
+
'--file',
|
|
68
|
+
'--input-format',
|
|
69
|
+
'--json-schema',
|
|
70
|
+
'--max-budget-usd',
|
|
71
|
+
'--mcp-config',
|
|
72
|
+
'--model',
|
|
73
|
+
'--name',
|
|
74
|
+
'-n',
|
|
75
|
+
'--output-format',
|
|
76
|
+
'--permission-mode',
|
|
77
|
+
'--plugin-dir',
|
|
78
|
+
'--plugin-url',
|
|
79
|
+
'--remote-control-session-name-prefix',
|
|
80
|
+
'--session-id',
|
|
81
|
+
'--setting-sources',
|
|
82
|
+
'--settings',
|
|
83
|
+
'--system-prompt',
|
|
84
|
+
'--teammate-mode',
|
|
85
|
+
'--tools',
|
|
86
|
+
]);
|
|
87
|
+
const SUBCOMMAND_SESSION_ONLY_FLAGS = new Set([
|
|
88
|
+
'--allow-dangerously-skip-permissions',
|
|
89
|
+
'--dangerously-skip-permissions',
|
|
90
|
+
]);
|
|
91
|
+
const SUBCOMMAND_SESSION_ONLY_VALUE_FLAGS = new Set([
|
|
92
|
+
'--permission-mode',
|
|
93
|
+
'--teammate-mode',
|
|
94
|
+
]);
|
|
95
|
+
/**
|
|
96
|
+
* Returns true when `args` look like a Claude subcommand invocation.
|
|
97
|
+
*
|
|
98
|
+
* Heuristic:
|
|
99
|
+
* 1. Walk args until the `--` terminator or end.
|
|
100
|
+
* 2. Skip known value-taking flags together with their next token.
|
|
101
|
+
* 3. Skip unknown `--flag=value` forms and bare `--flag` / `-x` tokens.
|
|
102
|
+
* 4. The first remaining positional token is the candidate.
|
|
103
|
+
* 5. Match against CLAUDE_SUBCOMMANDS.
|
|
104
|
+
*
|
|
105
|
+
* Anything after the candidate is irrelevant — once a subcommand is in play,
|
|
106
|
+
* the rest of the line belongs to that subcommand.
|
|
107
|
+
*/
|
|
108
|
+
function isClaudeSubcommandInvocation(args) {
|
|
109
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
110
|
+
const arg = args[i];
|
|
111
|
+
if (arg === '--')
|
|
112
|
+
return false;
|
|
113
|
+
if (arg.startsWith('-')) {
|
|
114
|
+
if (VALUE_TAKING_FLAGS.has(arg)) {
|
|
115
|
+
// Skip the next token as the flag's value (when present and not another flag).
|
|
116
|
+
const next = args[i + 1];
|
|
117
|
+
if (next !== undefined && !next.startsWith('-')) {
|
|
118
|
+
i += 1;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// `--flag=value`, bare boolean flags, and unknown short/long flags fall through.
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
return CLAUDE_SUBCOMMANDS.has(arg);
|
|
125
|
+
}
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
exports.isClaudeSubcommandInvocation = isClaudeSubcommandInvocation;
|
|
129
|
+
function stripClaudeSubcommandSessionArgs(args) {
|
|
130
|
+
if (!isClaudeSubcommandInvocation(args)) {
|
|
131
|
+
return [...args];
|
|
132
|
+
}
|
|
133
|
+
const out = [];
|
|
134
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
135
|
+
const arg = args[i];
|
|
136
|
+
if (SUBCOMMAND_SESSION_ONLY_FLAGS.has(arg)) {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
if (arg.startsWith('--permission-mode=') || arg.startsWith('--teammate-mode=')) {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
if (SUBCOMMAND_SESSION_ONLY_VALUE_FLAGS.has(arg)) {
|
|
143
|
+
const next = args[i + 1];
|
|
144
|
+
if (next !== undefined && !next.startsWith('-')) {
|
|
145
|
+
i += 1;
|
|
146
|
+
}
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
out.push(arg);
|
|
150
|
+
}
|
|
151
|
+
return out;
|
|
152
|
+
}
|
|
153
|
+
exports.stripClaudeSubcommandSessionArgs = stripClaudeSubcommandSessionArgs;
|
|
154
|
+
/**
|
|
155
|
+
* Claude Code treats DISABLE_TELEMETRY as a feature kill switch for agent-view
|
|
156
|
+
* and background-session surfaces, not only as telemetry preference.
|
|
157
|
+
*/
|
|
158
|
+
const CLAUDE_CODE_FEATURE_BLOCKING_ENV_KEYS = ['DISABLE_TELEMETRY'];
|
|
159
|
+
function stripClaudeCodeFeatureBlockingEnv(env) {
|
|
160
|
+
const out = {};
|
|
161
|
+
for (const [key, value] of Object.entries(env)) {
|
|
162
|
+
if (CLAUDE_CODE_FEATURE_BLOCKING_ENV_KEYS.includes(key)) {
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
out[key] = value;
|
|
166
|
+
}
|
|
167
|
+
return out;
|
|
168
|
+
}
|
|
169
|
+
exports.stripClaudeCodeFeatureBlockingEnv = stripClaudeCodeFeatureBlockingEnv;
|
|
170
|
+
/**
|
|
171
|
+
* Return a shallow copy of `env` with subcommand-blocking telemetry vars
|
|
172
|
+
* removed. Caller is responsible for only invoking this when args are a
|
|
173
|
+
* Claude subcommand invocation.
|
|
174
|
+
*/
|
|
175
|
+
function stripSubcommandBlockingEnv(env) {
|
|
176
|
+
return stripClaudeCodeFeatureBlockingEnv(env);
|
|
177
|
+
}
|
|
178
|
+
exports.stripSubcommandBlockingEnv = stripSubcommandBlockingEnv;
|
|
179
|
+
//# sourceMappingURL=claude-subcommand-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-subcommand-detector.js","sourceRoot":"","sources":["../../src/utils/claude-subcommand-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-tool-args.d.ts","sourceRoot":"","sources":["../../../src/utils/image-analysis/claude-tool-args.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"claude-tool-args.d.ts","sourceRoot":"","sources":["../../../src/utils/image-analysis/claude-tool-args.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2CH,wBAAgB,qCAAqC,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAI9E;AAED,wBAAgB,8BAA8B,IAAI,MAAM,CAEvD"}
|
|
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
exports.getImageAnalysisSteeringPrompt = exports.appendThirdPartyImageAnalysisToolArgs = void 0;
|
|
10
10
|
const claude_tool_args_1 = require("../claude-tool-args");
|
|
11
11
|
const prompt_injection_strategy_1 = require("../prompt-injection-strategy");
|
|
12
|
+
const claude_subcommand_detector_1 = require("../claude-subcommand-detector");
|
|
12
13
|
const IMAGE_ANALYSIS_STEERING_PROMPT = {
|
|
13
14
|
name: 'ccs-prompt-image-analysis-tool',
|
|
14
15
|
content: 'For local image or PDF files, prefer the CCS MCP tool ImageAnalysis instead of Read. Use Read for text, code, and other plain files. If the user asks a specific question about the visual, pass that question as the focus field when useful. If ImageAnalysis is unavailable or fails, you may fall back to Read.',
|
|
@@ -29,6 +30,9 @@ function ensureImageAnalysisSteeringPrompt(args) {
|
|
|
29
30
|
return [...optionArgs, ...steeringArg, ...trailingArgs];
|
|
30
31
|
}
|
|
31
32
|
function appendThirdPartyImageAnalysisToolArgs(args) {
|
|
33
|
+
// Subcommands reject session-only prompt flags. Issue #1218.
|
|
34
|
+
if ((0, claude_subcommand_detector_1.isClaudeSubcommandInvocation)(args))
|
|
35
|
+
return args;
|
|
32
36
|
return ensureImageAnalysisSteeringPrompt(args);
|
|
33
37
|
}
|
|
34
38
|
exports.appendThirdPartyImageAnalysisToolArgs = appendThirdPartyImageAnalysisToolArgs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-tool-args.js","sourceRoot":"","sources":["../../../src/utils/image-analysis/claude-tool-args.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,0DAG6B;AAC7B,4EAIsC;
|
|
1
|
+
{"version":3,"file":"claude-tool-args.js","sourceRoot":"","sources":["../../../src/utils/image-analysis/claude-tool-args.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,0DAG6B;AAC7B,4EAIsC;AACtC,8EAA6E;AAE7E,MAAM,8BAA8B,GAAG;IACrC,IAAI,EAAE,gCAAgC;IACtC,OAAO,EACL,qTAAqT;CACxT,CAAC;AAEF,SAAS,iCAAiC,CAAC,IAAc;IACvD,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,IAAA,wCAA2B,EAAC,IAAI,CAAC,CAAC;IAEvE,IACE,IAAA,oCAAuB,EAAC,UAAU,EAAE,8CAAkB,EAAE,8BAA8B,CAAC,OAAO,CAAC,EAC/F,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IACE,IAAA,mDAAuB,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,8BAA8B,CAAC,IAAI,EAAE,CAAC,EAC9F,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,IAAA,4CAAgB,EAAC;QACnC,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,8BAA8B,CAAC,IAAI;QAC/C,aAAa,EAAE,8BAA8B,CAAC,OAAO;KACtD,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,WAAW,EAAE,GAAG,YAAY,CAAC,CAAC;AAC1D,CAAC;AAED,SAAgB,qCAAqC,CAAC,IAAc;IAClE,6DAA6D;IAC7D,IAAI,IAAA,yDAA4B,EAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,OAAO,iCAAiC,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC;AAJD,sFAIC;AAED,SAAgB,8BAA8B;IAC5C,OAAO,8BAA8B,CAAC,OAAO,CAAC;AAChD,CAAC;AAFD,wEAEC"}
|
|
@@ -62,8 +62,10 @@ export declare function escapeShellArg(arg: string): string;
|
|
|
62
62
|
/**
|
|
63
63
|
* Return the shell that matches escapeShellArg() quoting semantics.
|
|
64
64
|
*
|
|
65
|
-
* On Windows,
|
|
66
|
-
*
|
|
65
|
+
* On Windows, use an absolute, trusted system cmd.exe path instead of a bare
|
|
66
|
+
* executable name so wrapper launches cannot be hijacked through the current
|
|
67
|
+
* directory or PATH. ComSpec is accepted only when it resolves to that same
|
|
68
|
+
* system shell.
|
|
67
69
|
*/
|
|
68
70
|
export declare function getWindowsEscapedCommandShell(): SpawnOptions['shell'];
|
|
69
71
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-executor.d.ts","sourceRoot":"","sources":["../../src/utils/shell-executor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;;;AAEH,OAAO,EAAkC,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"shell-executor.d.ts","sourceRoot":"","sources":["../../src/utils/shell-executor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;;;AAEH,OAAO,EAAkC,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAelF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAQ3E;AA0BD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,YAAY,CAAC,EAAE,MAAM,CAAC,UAAU,GAC/B,MAAM,CAAC,UAAU,CAkBnB;AA4BD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAQzE;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAQ5E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAW9E;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,CAAC,UAAU,CAU/D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAqBlD;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,IAAI,YAAY,CAAC,OAAO,CAAC,CAyBrE;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,MAAM,CAAC,UAAU,GAAG,IAAW,EACxC,aAAa,CAAC,EAAE,MAAM,IAAI,GACzB,IAAI,CAuHN"}
|
|
@@ -4,15 +4,40 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Cross-platform shell execution utilities for CCS.
|
|
6
6
|
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
24
|
+
if (mod && mod.__esModule) return mod;
|
|
25
|
+
var result = {};
|
|
26
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
27
|
+
__setModuleDefault(result, mod);
|
|
28
|
+
return result;
|
|
29
|
+
};
|
|
7
30
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
31
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
32
|
};
|
|
10
33
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
34
|
exports.execClaude = exports.getWindowsEscapedCommandShell = exports.escapeShellArg = exports.getClaudeLaunchEnvOverrides = exports.stripCodexSessionEnv = exports.stripClaudeCodeEnv = exports.stripBrowserEnv = exports.stripAnthropicRoutingEnv = exports.stripAnthropicEnv = void 0;
|
|
12
35
|
const child_process_1 = require("child_process");
|
|
36
|
+
const path = __importStar(require("path"));
|
|
13
37
|
const error_manager_1 = require("./error-manager");
|
|
14
38
|
const websearch_manager_1 = require("./websearch-manager");
|
|
15
39
|
const signal_forwarder_1 = require("./signal-forwarder");
|
|
40
|
+
const claude_subcommand_detector_1 = require("./claude-subcommand-detector");
|
|
16
41
|
const shared_manager_1 = __importDefault(require("../management/shared-manager"));
|
|
17
42
|
const config_loader_facade_1 = require("../config/config-loader-facade");
|
|
18
43
|
/**
|
|
@@ -52,6 +77,7 @@ const TMUX_SYNC_ENV_KEYS = [
|
|
|
52
77
|
...ANTHROPIC_MODEL_ENV_KEYS,
|
|
53
78
|
...ANTHROPIC_ROUTING_ENV_KEYS,
|
|
54
79
|
];
|
|
80
|
+
const DEFAULT_WINDOWS_CMD_SHELL = 'C:\\Windows\\System32\\cmd.exe';
|
|
55
81
|
/**
|
|
56
82
|
* Strip inherited Anthropic routing/auth env while preserving model intent.
|
|
57
83
|
* Used for nested settings-profile Claude launches where `--settings` already
|
|
@@ -204,14 +230,30 @@ exports.escapeShellArg = escapeShellArg;
|
|
|
204
230
|
/**
|
|
205
231
|
* Return the shell that matches escapeShellArg() quoting semantics.
|
|
206
232
|
*
|
|
207
|
-
* On Windows,
|
|
208
|
-
*
|
|
233
|
+
* On Windows, use an absolute, trusted system cmd.exe path instead of a bare
|
|
234
|
+
* executable name so wrapper launches cannot be hijacked through the current
|
|
235
|
+
* directory or PATH. ComSpec is accepted only when it resolves to that same
|
|
236
|
+
* system shell.
|
|
209
237
|
*/
|
|
210
238
|
function getWindowsEscapedCommandShell() {
|
|
211
239
|
if (process.platform !== 'win32') {
|
|
212
240
|
return true;
|
|
213
241
|
}
|
|
214
|
-
|
|
242
|
+
const systemRoot = [process.env.SystemRoot, process.env.SYSTEMROOT, process.env.windir].find((candidate) => Boolean(candidate && path.win32.isAbsolute(candidate)));
|
|
243
|
+
const trustedSystemCmd = systemRoot
|
|
244
|
+
? path.win32.normalize(path.win32.join(systemRoot, 'System32', 'cmd.exe'))
|
|
245
|
+
: DEFAULT_WINDOWS_CMD_SHELL;
|
|
246
|
+
const trustedSystemCmdLower = trustedSystemCmd.toLowerCase();
|
|
247
|
+
for (const candidate of [process.env.ComSpec, process.env.COMSPEC]) {
|
|
248
|
+
if (!candidate || !path.win32.isAbsolute(candidate)) {
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
const normalizedCandidate = path.win32.normalize(candidate);
|
|
252
|
+
if (normalizedCandidate.toLowerCase() === trustedSystemCmdLower) {
|
|
253
|
+
return normalizedCandidate;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return trustedSystemCmd;
|
|
215
257
|
}
|
|
216
258
|
exports.getWindowsEscapedCommandShell = getWindowsEscapedCommandShell;
|
|
217
259
|
/**
|
|
@@ -245,9 +287,19 @@ function execClaude(claudeCli, args, envVars = null, onExitCleanup) {
|
|
|
245
287
|
const effectiveMergedEnv = stripInheritedAnthropicRoutingEnv
|
|
246
288
|
? stripAnthropicRoutingEnv(mergedEnv, envVars ?? undefined)
|
|
247
289
|
: mergedEnv;
|
|
290
|
+
const effectiveArgs = (0, claude_subcommand_detector_1.isClaudeSubcommandInvocation)(args)
|
|
291
|
+
? (0, claude_subcommand_detector_1.stripClaudeSubcommandSessionArgs)(args)
|
|
292
|
+
: args;
|
|
248
293
|
// Strip Claude Code nested session guard env var to allow CCS delegation
|
|
249
294
|
// (Claude Code v2.1.39+ sets CLAUDECODE to detect nested sessions)
|
|
250
|
-
|
|
295
|
+
let env = (0, claude_subcommand_detector_1.stripClaudeCodeFeatureBlockingEnv)(stripClaudeCodeEnv(effectiveMergedEnv));
|
|
296
|
+
// For Claude subcommand invocations (`agents`, `mcp`, `doctor`, ...) strip
|
|
297
|
+
// telemetry-disable env vars that cause upstream Claude Code to fall back
|
|
298
|
+
// to non-interactive list mode instead of opening the subcommand TUI.
|
|
299
|
+
// Issue #1218.
|
|
300
|
+
if ((0, claude_subcommand_detector_1.isClaudeSubcommandInvocation)(effectiveArgs)) {
|
|
301
|
+
env = (0, claude_subcommand_detector_1.stripSubcommandBlockingEnv)(env);
|
|
302
|
+
}
|
|
251
303
|
if (profileType !== 'account') {
|
|
252
304
|
try {
|
|
253
305
|
new shared_manager_1.default().normalizeSharedPluginMetadataPathsLocked(env.CLAUDE_CONFIG_DIR);
|
|
@@ -261,7 +313,7 @@ function execClaude(claudeCli, args, envVars = null, onExitCleanup) {
|
|
|
261
313
|
syncTmuxNestedSessionEnv(env, profileType);
|
|
262
314
|
let child;
|
|
263
315
|
if (isPowerShellScript) {
|
|
264
|
-
child = (0, child_process_1.spawn)('powershell.exe', ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', claudeCli, ...
|
|
316
|
+
child = (0, child_process_1.spawn)('powershell.exe', ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', claudeCli, ...effectiveArgs], {
|
|
265
317
|
stdio: 'inherit',
|
|
266
318
|
windowsHide: true,
|
|
267
319
|
env,
|
|
@@ -269,7 +321,7 @@ function execClaude(claudeCli, args, envVars = null, onExitCleanup) {
|
|
|
269
321
|
}
|
|
270
322
|
else if (needsShell) {
|
|
271
323
|
// When shell needed: concatenate into string to avoid DEP0190 warning
|
|
272
|
-
const cmdString = [claudeCli, ...
|
|
324
|
+
const cmdString = [claudeCli, ...effectiveArgs].map(escapeShellArg).join(' ');
|
|
273
325
|
child = (0, child_process_1.spawn)(cmdString, {
|
|
274
326
|
stdio: 'inherit',
|
|
275
327
|
windowsHide: true,
|
|
@@ -279,7 +331,7 @@ function execClaude(claudeCli, args, envVars = null, onExitCleanup) {
|
|
|
279
331
|
}
|
|
280
332
|
else {
|
|
281
333
|
// When no shell needed: use array form (faster, no shell overhead)
|
|
282
|
-
child = (0, child_process_1.spawn)(claudeCli,
|
|
334
|
+
child = (0, child_process_1.spawn)(claudeCli, effectiveArgs, {
|
|
283
335
|
stdio: 'inherit',
|
|
284
336
|
windowsHide: true,
|
|
285
337
|
env,
|