@kaitranntt/ccs 8.1.0-dev.5 → 8.1.0-dev.6

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 (111) hide show
  1. package/dist/channels/official-channels-runtime.js +1 -1
  2. package/dist/channels/official-channels-runtime.js.map +1 -1
  3. package/dist/cliproxy/ai-providers/codex-reasoning-proxy.d.ts.map +1 -1
  4. package/dist/cliproxy/ai-providers/codex-reasoning-proxy.js +16 -1
  5. package/dist/cliproxy/ai-providers/codex-reasoning-proxy.js.map +1 -1
  6. package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -1
  7. package/dist/cliproxy/auth/oauth-handler.js +6 -1
  8. package/dist/cliproxy/auth/oauth-handler.js.map +1 -1
  9. package/dist/cliproxy/proxy/proxy-config-resolver.d.ts.map +1 -1
  10. package/dist/cliproxy/proxy/proxy-config-resolver.js +11 -1
  11. package/dist/cliproxy/proxy/proxy-config-resolver.js.map +1 -1
  12. package/dist/commands/config-channels-command.d.ts +1 -4
  13. package/dist/commands/config-channels-command.d.ts.map +1 -1
  14. package/dist/commands/config-channels-command.js +20 -24
  15. package/dist/commands/config-channels-command.js.map +1 -1
  16. package/dist/cursor/cursor-daemon-auth.d.ts +2 -0
  17. package/dist/cursor/cursor-daemon-auth.d.ts.map +1 -0
  18. package/dist/cursor/cursor-daemon-auth.js +49 -0
  19. package/dist/cursor/cursor-daemon-auth.js.map +1 -0
  20. package/dist/cursor/cursor-daemon-entry.d.ts.map +1 -1
  21. package/dist/cursor/cursor-daemon-entry.js +44 -0
  22. package/dist/cursor/cursor-daemon-entry.js.map +1 -1
  23. package/dist/cursor/cursor-daemon.d.ts +2 -1
  24. package/dist/cursor/cursor-daemon.d.ts.map +1 -1
  25. package/dist/cursor/cursor-daemon.js +21 -5
  26. package/dist/cursor/cursor-daemon.js.map +1 -1
  27. package/dist/cursor/cursor-models.d.ts.map +1 -1
  28. package/dist/cursor/cursor-models.js +2 -1
  29. package/dist/cursor/cursor-models.js.map +1 -1
  30. package/dist/cursor/cursor-profile-executor.d.ts +1 -1
  31. package/dist/cursor/cursor-profile-executor.d.ts.map +1 -1
  32. package/dist/cursor/cursor-profile-executor.js +7 -4
  33. package/dist/cursor/cursor-profile-executor.js.map +1 -1
  34. package/dist/cursor/cursor-runtime-probe.d.ts.map +1 -1
  35. package/dist/cursor/cursor-runtime-probe.js +4 -2
  36. package/dist/cursor/cursor-runtime-probe.js.map +1 -1
  37. package/dist/cursor/types.d.ts +1 -0
  38. package/dist/cursor/types.d.ts.map +1 -1
  39. package/dist/glmt/sse-parser.d.ts +1 -0
  40. package/dist/glmt/sse-parser.d.ts.map +1 -1
  41. package/dist/glmt/sse-parser.js +13 -1
  42. package/dist/glmt/sse-parser.js.map +1 -1
  43. package/dist/shared/claude-extension-setup.d.ts.map +1 -1
  44. package/dist/shared/claude-extension-setup.js +2 -1
  45. package/dist/shared/claude-extension-setup.js.map +1 -1
  46. package/dist/targets/codex-adapter.js +1 -1
  47. package/dist/targets/codex-adapter.js.map +1 -1
  48. package/dist/ui/assets/{Trans-DyZQZ3e2.js → Trans-Di5ROrcY.js} +1 -1
  49. package/dist/ui/assets/{accounts-BPJltru3.js → accounts-CXxIrCwi.js} +1 -1
  50. package/dist/ui/assets/{alert-dialog-DWHL-dqd.js → alert-dialog-BZehL4wx.js} +1 -1
  51. package/dist/ui/assets/{api-BxPN-zy4.js → api-Dolv94iF.js} +1 -1
  52. package/dist/ui/assets/{auth-section-B4o90dwz.js → auth-section-DKJ5aBoY.js} +1 -1
  53. package/dist/ui/assets/{backups-section-1AsdSIJO.js → backups-section-eJJx7JLp.js} +1 -1
  54. package/dist/ui/assets/{channels-CU4Zdsc_.js → channels-Djz0-bJE.js} +1 -1
  55. package/dist/ui/assets/{checkbox-CbCKGH8I.js → checkbox-DG_xg3eG.js} +1 -1
  56. package/dist/ui/assets/{claude-extension-CWpjmIGt.js → claude-extension-Cy9qLj_7.js} +1 -1
  57. package/dist/ui/assets/{cliproxy-K6eBb5VO.js → cliproxy-BEXh5jJr.js} +1 -1
  58. package/dist/ui/assets/{cliproxy-ai-providers-Dr4L5NRY.js → cliproxy-ai-providers-QnibyE1_.js} +1 -1
  59. package/dist/ui/assets/cliproxy-control-panel-BYNwcgrf.js +1 -0
  60. package/dist/ui/assets/{codex-0HdbW8NR.js → codex-C4imOxu_.js} +1 -1
  61. package/dist/ui/assets/{confirm-dialog-b5Dahgnk.js → confirm-dialog-B7lRez6q.js} +1 -1
  62. package/dist/ui/assets/{copilot-B1Ojakbt.js → copilot-CtPGqv0X.js} +1 -1
  63. package/dist/ui/assets/{cursor-PUtNVPx1.js → cursor-C5o_X8TR.js} +1 -1
  64. package/dist/ui/assets/{droid-S2gclncb.js → droid-B5Bi78eR.js} +1 -1
  65. package/dist/ui/assets/{globalenv-section-7wKSmNSG.js → globalenv-section-DaQZNPpW.js} +1 -1
  66. package/dist/ui/assets/{health-hMLN_gyw.js → health-BV1EhsAF.js} +1 -1
  67. package/dist/ui/assets/{index-Cx0dmbiQ.js → index-BIt0Nf4X.js} +1 -1
  68. package/dist/ui/assets/{index-CcGVqYOy.js → index-BJ1ahfYc.js} +2 -2
  69. package/dist/ui/assets/{index-COt1pbk-.js → index-CGnaVkLr.js} +1 -1
  70. package/dist/ui/assets/{index-CxvNNHgE.js → index-CIjddtqJ.js} +1 -1
  71. package/dist/ui/assets/{index-Coc3_ABK.js → index-CkQRwUAu.js} +1 -1
  72. package/dist/ui/assets/{index-BWboJia4.js → index-Cpyc2Ydf.js} +1 -1
  73. package/dist/ui/assets/{index-DkR2KVhF.js → index-DecRICDx.js} +1 -1
  74. package/dist/ui/assets/{logs-BRFVfyLc.js → logs-DhppEGsJ.js} +1 -1
  75. package/dist/ui/assets/{masked-input-4L9CIZGb.js → masked-input-D0qX6KX5.js} +1 -1
  76. package/dist/ui/assets/{proxy-status-widget-s1UWOE23.js → proxy-status-widget-D1v3_y4-.js} +1 -1
  77. package/dist/ui/assets/{raw-json-settings-editor-panel-DXh8c8rA.js → raw-json-settings-editor-panel-CJT2Kd03.js} +1 -1
  78. package/dist/ui/assets/{searchable-select-CtvEQrMo.js → searchable-select-Pc4fXxkq.js} +1 -1
  79. package/dist/ui/assets/{separator-E0ISp1SN.js → separator-ptbOvvEZ.js} +1 -1
  80. package/dist/ui/assets/{shared-BeYwHeNS.js → shared-BIcL0QaI.js} +1 -1
  81. package/dist/ui/assets/{table-BBslZvNP.js → table-CvmOeY-p.js} +1 -1
  82. package/dist/ui/assets/{updates-CDrm903n.js → updates-CcrvA9HB.js} +1 -1
  83. package/dist/ui/assets/{use-accounts-BdalFsdY.js → use-accounts-DZcJPKy-.js} +1 -1
  84. package/dist/ui/index.html +1 -1
  85. package/dist/utils/browser/browser-settings.d.ts.map +1 -1
  86. package/dist/utils/browser/browser-settings.js +13 -3
  87. package/dist/utils/browser/browser-settings.js.map +1 -1
  88. package/dist/utils/glmt-deprecation.d.ts.map +1 -1
  89. package/dist/utils/glmt-deprecation.js +1 -3
  90. package/dist/utils/glmt-deprecation.js.map +1 -1
  91. package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -1
  92. package/dist/web-server/middleware/auth-middleware.js +26 -4
  93. package/dist/web-server/middleware/auth-middleware.js.map +1 -1
  94. package/dist/web-server/routes/cliproxy-local-proxy.d.ts.map +1 -1
  95. package/dist/web-server/routes/cliproxy-local-proxy.js +25 -8
  96. package/dist/web-server/routes/cliproxy-local-proxy.js.map +1 -1
  97. package/dist/web-server/routes/cursor-routes.d.ts.map +1 -1
  98. package/dist/web-server/routes/cursor-routes.js +6 -1
  99. package/dist/web-server/routes/cursor-routes.js.map +1 -1
  100. package/dist/web-server/routes/image-analysis-routes.d.ts.map +1 -1
  101. package/dist/web-server/routes/image-analysis-routes.js +7 -0
  102. package/dist/web-server/routes/image-analysis-routes.js.map +1 -1
  103. package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
  104. package/dist/web-server/routes/settings-routes.js +10 -1
  105. package/dist/web-server/routes/settings-routes.js.map +1 -1
  106. package/dist/web-server/services/claude-extension-settings-service.d.ts.map +1 -1
  107. package/dist/web-server/services/claude-extension-settings-service.js +5 -1
  108. package/dist/web-server/services/claude-extension-settings-service.js.map +1 -1
  109. package/lib/mcp/ccs-browser-server.cjs +24 -13
  110. package/package.json +1 -1
  111. package/dist/ui/assets/cliproxy-control-panel-Cz5r7kHP.js +0 -1
@@ -159,6 +159,8 @@ const DEFAULT_WAIT_TIMEOUT_MS = 2000;
159
159
  const DEFAULT_WAIT_POLL_INTERVAL_MS = 100;
160
160
  const DEFAULT_DRAG_STEPS = 5;
161
161
  const MAX_POINTER_ACTIONS = 25;
162
+ const MAX_CLICK_COUNT = 25;
163
+ const MAX_KEY_REPEAT = 25;
162
164
  const SESSION_START_SETTLE_WINDOW_MS = 250;
163
165
  const MAX_ARTIFACT_FILE_BYTES = 5 * 1024 * 1024;
164
166
  const MAX_LOCAL_TRANSFER_FILE_BYTES = 10 * 1024 * 1024;
@@ -454,6 +456,7 @@ function getTools() {
454
456
  clickCount: {
455
457
  type: 'integer',
456
458
  minimum: 1,
459
+ maximum: MAX_CLICK_COUNT,
457
460
  description: 'Optional click count. Defaults to 1.',
458
461
  },
459
462
  },
@@ -519,6 +522,7 @@ function getTools() {
519
522
  repeat: {
520
523
  type: 'integer',
521
524
  minimum: 1,
525
+ maximum: MAX_KEY_REPEAT,
522
526
  description: 'Optional repeat count. Defaults to 1.',
523
527
  },
524
528
  },
@@ -2305,10 +2309,13 @@ function requirePositiveIntegerOrDefault(value, label, fallback) {
2305
2309
  return value;
2306
2310
  }
2307
2311
 
2308
- function requirePositiveInteger(value, label) {
2312
+ function requirePositiveInteger(value, label, maximum = undefined) {
2309
2313
  if (!Number.isInteger(value) || value <= 0) {
2310
2314
  throw new Error(`${label} must be a positive integer`);
2311
2315
  }
2316
+ if (maximum !== undefined && value > maximum) {
2317
+ throw new Error(`${label} must be less than or equal to ${maximum}`);
2318
+ }
2312
2319
  return value;
2313
2320
  }
2314
2321
 
@@ -3555,7 +3562,7 @@ async function handleClick(toolArgs) {
3555
3562
  const clickCount =
3556
3563
  toolArgs.clickCount === undefined
3557
3564
  ? 1
3558
- : requirePositiveInteger(toolArgs.clickCount, 'clickCount');
3565
+ : requirePositiveInteger(toolArgs.clickCount, 'clickCount', MAX_CLICK_COUNT);
3559
3566
 
3560
3567
  const expression = `(() => {
3561
3568
  const selector = JSON.parse(${JSON.stringify(JSON.stringify(selector))});
@@ -3805,7 +3812,9 @@ async function handlePressKey(toolArgs) {
3805
3812
  'Shift',
3806
3813
  ]);
3807
3814
  const repeat =
3808
- toolArgs.repeat === undefined ? 1 : requirePositiveInteger(toolArgs.repeat, 'repeat');
3815
+ toolArgs.repeat === undefined
3816
+ ? 1
3817
+ : requirePositiveInteger(toolArgs.repeat, 'repeat', MAX_KEY_REPEAT);
3809
3818
  const modifierMask =
3810
3819
  (modifiers.includes('Alt') ? 1 : 0) |
3811
3820
  (modifiers.includes('Control') ? 2 : 0) |
@@ -5097,16 +5106,18 @@ async function ensureInterceptSession(page) {
5097
5106
  })
5098
5107
  );
5099
5108
  }
5100
- pushRecentRequest({
5101
- requestId: String(paused.requestId || ''),
5102
- pageId: page.id,
5103
- url: String(paused.request?.url || ''),
5104
- method: String(paused.request?.method || ''),
5105
- resourceType: String(paused.resourceType || ''),
5106
- matchedRuleId: matchedRule ? matchedRule.ruleId : '',
5107
- action,
5108
- statusCode: action === 'fulfill' ? matchedRule.statusCode : 0,
5109
- });
5109
+ if (matchedRule) {
5110
+ pushRecentRequest({
5111
+ requestId: String(paused.requestId || ''),
5112
+ pageId: page.id,
5113
+ url: String(paused.request?.url || ''),
5114
+ method: String(paused.request?.method || ''),
5115
+ resourceType: String(paused.resourceType || ''),
5116
+ matchedRuleId: matchedRule.ruleId,
5117
+ action,
5118
+ statusCode: action === 'fulfill' ? matchedRule.statusCode : 0,
5119
+ });
5120
+ }
5110
5121
  })();
5111
5122
  activityChain = activityChain
5112
5123
  .catch(() => {})
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaitranntt/ccs",
3
- "version": "8.1.0-dev.5",
3
+ "version": "8.1.0-dev.6",
4
4
  "description": "Claude Code Switch - Instant profile switching between Claude, GLM, Kimi, and more",
5
5
  "keywords": [
6
6
  "cli",
@@ -1 +0,0 @@
1
- import{j as e}from"./radix-ui-nu4wz29m.js";import{r as s}from"./react-vendor-Bjx91N7w.js";import{u as S}from"./tanstack-bhJxV1h8.js";import{a as D,bf as g,Z as I}from"./index-CcGVqYOy.js";import{C as _}from"./default-ports-1QQSffYX.js";import{G as Q,R as $,w as X}from"./icons-DzKUh8vG.js";import"./notifications-B4_o8bcr.js";import"./utils-CzKF5WmX.js";import"./form-utils-CuHzLhJZ.js";import"./charts-eIPy2oG6.js";const k="cli-proxy-auth",O="isLoggedIn",U="apiBase",K="apiUrl",F="managementKey";function A(a){return a.startsWith("/")?new URL(a.replace(/\/$/,""),window.location.origin).href:a.replace(/\/$/,"")}function Z(a,u){window.localStorage.removeItem(k),window.localStorage.setItem(U,a),window.localStorage.setItem(K,a),window.localStorage.setItem(F,u),window.localStorage.setItem(O,"true")}function T(){window.localStorage.removeItem(k),window.localStorage.removeItem(U),window.localStorage.removeItem(K),window.localStorage.removeItem(F),window.localStorage.removeItem(O)}function J({port:a=_}){const{t:u}=D(),f=s.useRef(null),[M,N]=s.useState(null),[B,G]=s.useState(0),[L,v]=s.useState(null),[H,E]=s.useState(!1),{data:l,error:w}=S({queryKey:["cliproxy-server-config"],queryFn:()=>I.cliproxyServer.get(),staleTime:3e4});s.useEffect(()=>{w&&console.warn("[ControlPanelEmbed] Config fetch failed, using local mode:",w)},[w]);const j=!!(l?.remote?.enabled&&l?.remote?.host),{data:y,error:x}=S({queryKey:["auth-tokens-raw",j?"remote":"local"],enabled:l!==void 0&&!j,queryFn:async()=>{try{const t=await fetch(g("/settings/auth/tokens/raw"));if(!t.ok)throw new Error("Failed to fetch auth tokens");const n=await t.json(),o=n.managementSecret.value.trim();if(!o)throw new Error("Management secret missing");return Z(A(g("/cliproxy-local/")),o),n}catch(t){throw T(),t}},staleTime:3e4}),{managementUrl:R,checkUrl:h,authToken:b,isRemote:i,displayHost:c}=s.useMemo(()=>{const t=l?.remote,n=l?.local?.port??a;if(t?.enabled&&t?.host){const o=t.protocol||"http",m=t.port||(o==="https"?443:_),p=o==="https"&&m===443||o==="http"&&m===80?"":`:${m}`,r=`${o}://${t.host}${p}`;return{managementUrl:`${r}/management.html`,checkUrl:`${r}/`,authToken:t.auth_token||void 0,isRemote:!0,displayHost:`${t.host}${p}`}}return{managementUrl:g("/cliproxy-local/management.html"),checkUrl:g("/cliproxy-local/"),authToken:y?.managementSecret?.value||void 0,isRemote:!1,displayHost:`localhost:${n}`}},[l,y,a]),C=`${R}:${i?"remote":"local"}:${h}:${b??"missing"}:${B}`,P=l!==void 0&&(i||!!y||!!x);s.useEffect(()=>{x&&console.warn("[ControlPanelEmbed] Failed to preload local control panel session, falling back to manual login:",x)},[x]),s.useEffect(()=>{if(!i)return()=>{T()}},[i]);const Y=!P||!(M===C),q=()=>{if(!(!i||!f.current?.contentWindow||!b))try{const t=A(h),n=new URL(`${t}/`).origin;if(new URL(f.current.src,window.location.origin).origin!==n){console.warn("[ControlPanelEmbed] Remote iframe origin mismatch, skipping postMessage");return}f.current.contentWindow.postMessage({type:"ccs-auto-login",apiBase:t,managementKey:b},n)}catch(t){console.debug("[ControlPanelEmbed] Remote postMessage bootstrap failed:",t)}};s.useEffect(()=>{const t=new AbortController;let n=!1;const o=(r,d)=>{n||(E(r),v(d))},m=async()=>{try{if(i){const r=l?.remote,d=await I.cliproxyServer.test({host:r?.host??"",port:r?.port,protocol:r?.protocol??"http",authToken:r?.auth_token});d?.reachable?o(!0,null):o(!1,d?.error?`Remote CLIProxy at ${c}: ${d.error}`:`Remote CLIProxy at ${c} returned an error`)}else(await fetch(h,{signal:t.signal})).ok?o(!0,null):o(!1,"CLIProxy returned an error")}catch(r){if(r instanceof Error&&r.name==="AbortError")return;o(!1,i?`Remote CLIProxy at ${c} is not reachable`:"CLIProxy is not running")}},p=setTimeout(()=>t.abort(),2e3);return m().finally(()=>clearTimeout(p)),()=>{n=!0,t.abort()}},[h,i,c,l]);const W=()=>{N(C),q()},z=()=>{N(null),G(t=>t+1),v(null),E(!1)};return!H&&L?e.jsxs("div",{className:"flex-1 flex flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between p-4 border-b",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Q,{className:"w-5 h-5 text-primary"}),e.jsx("h2",{className:"font-semibold",children:u("cliproxyHeader.cliproxyControlPanel")})]}),e.jsxs("button",{className:"inline-flex items-center gap-2 px-3 py-1.5 text-sm border rounded-md hover:bg-muted",onClick:z,children:[e.jsx($,{className:"w-4 h-4"}),"Retry"]})]}),e.jsx("div",{className:"flex-1 flex items-center justify-center bg-muted/20",children:e.jsxs("div",{className:"text-center max-w-md px-8",children:[e.jsx("div",{className:"w-16 h-16 rounded-full bg-destructive/10 flex items-center justify-center mx-auto mb-6",children:e.jsx(X,{className:"w-8 h-8 text-destructive"})}),e.jsx("h3",{className:"text-lg font-semibold mb-2",children:u("cliproxyHeader.cliproxyNotAvailable")}),e.jsx("p",{className:"text-muted-foreground mb-4",children:L}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:["Start a CLIProxy session with"," ",e.jsx("code",{className:"bg-muted px-1 rounded",children:"ccs gemini"})," or run"," ",e.jsx("code",{className:"bg-muted px-1 rounded",children:"ccs config"})," which auto-starts it."]})]})})]}):e.jsx("div",{className:"flex-1 flex flex-col",children:e.jsxs("div",{className:"flex-1 flex flex-col relative",children:[Y&&e.jsx("div",{className:"absolute inset-0 flex items-center justify-center bg-background/80 z-10",children:e.jsxs("div",{className:"text-center",children:[e.jsx($,{className:"w-8 h-8 animate-spin text-primary mx-auto mb-2"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:i?`Loading Control Panel from ${c}...`:"Loading Control Panel..."})]})}),P?e.jsx("iframe",{ref:f,src:R,className:"flex-1 w-full border-0",title:"CLIProxy Management Panel",onLoad:W},C):null]})})}function me(){return e.jsx("div",{className:"flex h-full min-h-0 flex-col overflow-hidden",children:e.jsx(J,{})})}export{me as CliproxyControlPanelPage};