@kaitranntt/ccs 8.0.0 → 8.1.0-dev.10

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 (178) 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 +88 -11
  5. package/dist/cliproxy/ai-providers/codex-reasoning-proxy.js.map +1 -1
  6. package/dist/cliproxy/auth/auth-types.d.ts +2 -0
  7. package/dist/cliproxy/auth/auth-types.d.ts.map +1 -1
  8. package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -1
  9. package/dist/cliproxy/auth/oauth-handler.js +12 -6
  10. package/dist/cliproxy/auth/oauth-handler.js.map +1 -1
  11. package/dist/cliproxy/auth/oauth-trace/redactor.d.ts.map +1 -1
  12. package/dist/cliproxy/auth/oauth-trace/redactor.js +1 -0
  13. package/dist/cliproxy/auth/oauth-trace/redactor.js.map +1 -1
  14. package/dist/cliproxy/executor/claude-launcher.d.ts.map +1 -1
  15. package/dist/cliproxy/executor/claude-launcher.js +1 -3
  16. package/dist/cliproxy/executor/claude-launcher.js.map +1 -1
  17. package/dist/cliproxy/executor/session-bridge.d.ts +1 -16
  18. package/dist/cliproxy/executor/session-bridge.d.ts.map +1 -1
  19. package/dist/cliproxy/executor/session-bridge.js +2 -67
  20. package/dist/cliproxy/executor/session-bridge.js.map +1 -1
  21. package/dist/cliproxy/proxy/proxy-config-resolver.d.ts.map +1 -1
  22. package/dist/cliproxy/proxy/proxy-config-resolver.js +11 -1
  23. package/dist/cliproxy/proxy/proxy-config-resolver.js.map +1 -1
  24. package/dist/cliproxy/proxy/tool-sanitization-proxy.d.ts.map +1 -1
  25. package/dist/cliproxy/proxy/tool-sanitization-proxy.js +64 -8
  26. package/dist/cliproxy/proxy/tool-sanitization-proxy.js.map +1 -1
  27. package/dist/cliproxy/proxy/upstream-response-timeout.d.ts +14 -0
  28. package/dist/cliproxy/proxy/upstream-response-timeout.d.ts.map +1 -0
  29. package/dist/cliproxy/proxy/upstream-response-timeout.js +72 -0
  30. package/dist/cliproxy/proxy/upstream-response-timeout.js.map +1 -0
  31. package/dist/cliproxy/quota/quota-fetcher-codex.d.ts.map +1 -1
  32. package/dist/cliproxy/quota/quota-fetcher-codex.js +4 -1
  33. package/dist/cliproxy/quota/quota-fetcher-codex.js.map +1 -1
  34. package/dist/codex-auth/codex-config-symlink.js +21 -4
  35. package/dist/codex-auth/codex-config-symlink.js.map +1 -1
  36. package/dist/codex-auth/shell-detect.d.ts.map +1 -1
  37. package/dist/codex-auth/shell-detect.js +1 -39
  38. package/dist/codex-auth/shell-detect.js.map +1 -1
  39. package/dist/commands/config-channels-command.d.ts +1 -4
  40. package/dist/commands/config-channels-command.d.ts.map +1 -1
  41. package/dist/commands/config-channels-command.js +20 -24
  42. package/dist/commands/config-channels-command.js.map +1 -1
  43. package/dist/cursor/cursor-daemon-auth.d.ts +2 -0
  44. package/dist/cursor/cursor-daemon-auth.d.ts.map +1 -0
  45. package/dist/cursor/cursor-daemon-auth.js +49 -0
  46. package/dist/cursor/cursor-daemon-auth.js.map +1 -0
  47. package/dist/cursor/cursor-daemon-entry.d.ts.map +1 -1
  48. package/dist/cursor/cursor-daemon-entry.js +44 -0
  49. package/dist/cursor/cursor-daemon-entry.js.map +1 -1
  50. package/dist/cursor/cursor-daemon.d.ts +2 -1
  51. package/dist/cursor/cursor-daemon.d.ts.map +1 -1
  52. package/dist/cursor/cursor-daemon.js +21 -5
  53. package/dist/cursor/cursor-daemon.js.map +1 -1
  54. package/dist/cursor/cursor-models.d.ts.map +1 -1
  55. package/dist/cursor/cursor-models.js +2 -1
  56. package/dist/cursor/cursor-models.js.map +1 -1
  57. package/dist/cursor/cursor-profile-executor.d.ts +1 -1
  58. package/dist/cursor/cursor-profile-executor.d.ts.map +1 -1
  59. package/dist/cursor/cursor-profile-executor.js +7 -4
  60. package/dist/cursor/cursor-profile-executor.js.map +1 -1
  61. package/dist/cursor/cursor-runtime-probe.d.ts.map +1 -1
  62. package/dist/cursor/cursor-runtime-probe.js +4 -2
  63. package/dist/cursor/cursor-runtime-probe.js.map +1 -1
  64. package/dist/cursor/types.d.ts +1 -0
  65. package/dist/cursor/types.d.ts.map +1 -1
  66. package/dist/docker/docker-key-rotation.d.ts +2 -0
  67. package/dist/docker/docker-key-rotation.d.ts.map +1 -1
  68. package/dist/docker/docker-key-rotation.js +9 -1
  69. package/dist/docker/docker-key-rotation.js.map +1 -1
  70. package/dist/glmt/sse-parser.d.ts +1 -0
  71. package/dist/glmt/sse-parser.d.ts.map +1 -1
  72. package/dist/glmt/sse-parser.js +13 -1
  73. package/dist/glmt/sse-parser.js.map +1 -1
  74. package/dist/shared/claude-extension-setup.d.ts.map +1 -1
  75. package/dist/shared/claude-extension-setup.js +2 -1
  76. package/dist/shared/claude-extension-setup.js.map +1 -1
  77. package/dist/targets/codex-adapter.js +1 -1
  78. package/dist/targets/codex-adapter.js.map +1 -1
  79. package/dist/ui/assets/{Trans-dEd8UC39.js → Trans-BIQ-yfAc.js} +1 -1
  80. package/dist/ui/assets/accounts-bN7DnjXo.js +1 -0
  81. package/dist/ui/assets/{alert-dialog-Vurq1xzV.js → alert-dialog-D0yey0YJ.js} +1 -1
  82. package/dist/ui/assets/api-CEtMc2bM.js +4 -0
  83. package/dist/ui/assets/{auth-section-iGkrMaT4.js → auth-section-BHZUn2Hv.js} +1 -1
  84. package/dist/ui/assets/{backups-section-DUGG_4KP.js → backups-section-BNVlJSV3.js} +1 -1
  85. package/dist/ui/assets/{channels-CimlCc2d.js → channels-BOB1P4Kt.js} +1 -1
  86. package/dist/ui/assets/{checkbox-HiMHasEB.js → checkbox-Bt-F3GmI.js} +1 -1
  87. package/dist/ui/assets/claude-extension-AzKgsH0H.js +1 -0
  88. package/dist/ui/assets/cliproxy-C1liaQi8.js +4 -0
  89. package/dist/ui/assets/{cliproxy-ai-providers-2lI5jSHb.js → cliproxy-ai-providers-CzyaYfYI.js} +6 -6
  90. package/dist/ui/assets/cliproxy-control-panel-DmkEW68l.js +1 -0
  91. package/dist/ui/assets/codex-B2FLnjZI.js +30 -0
  92. package/dist/ui/assets/{confirm-dialog-B_6SrSxL.js → confirm-dialog-CYvBJC0z.js} +1 -1
  93. package/dist/ui/assets/{copilot-BgG5x_X6.js → copilot-Csab21fh.js} +2 -2
  94. package/dist/ui/assets/{cursor-DF63lFcy.js → cursor-fOpftodW.js} +1 -1
  95. package/dist/ui/assets/{droid-CqlQmFtN.js → droid-FIcjtOf-.js} +1 -1
  96. package/dist/ui/assets/{globalenv-section-CYNmD12i.js → globalenv-section-CpIAk36Y.js} +1 -1
  97. package/dist/ui/assets/{health-7ZO5PEm9.js → health-D0HvHNud.js} +1 -1
  98. package/dist/ui/assets/{index-D3kxCuJ7.js → index-BTPa3KEN.js} +1 -1
  99. package/dist/ui/assets/{index-BC5ssPfF.js → index-Cr4G276q.js} +1 -1
  100. package/dist/ui/assets/{index-CFu0saCM.js → index-D0VoBTF3.js} +1 -1
  101. package/dist/ui/assets/{index-Bgcd4FYK.js → index-D5G9mVmP.js} +1 -1
  102. package/dist/ui/assets/{index-hHb9o079.js → index-Dm_QojrJ.js} +1 -1
  103. package/dist/ui/assets/index-G3mgTfgR.css +1 -0
  104. package/dist/ui/assets/index-N35Xkk8N.js +1 -0
  105. package/dist/ui/assets/{index-DmV9wJET.js → index-sIfjKy42.js} +18 -18
  106. package/dist/ui/assets/{logs-Dy-yZhIK.js → logs-B33n-VaM.js} +1 -1
  107. package/dist/ui/assets/{masked-input-BSLeznEs.js → masked-input-BrUE6z_f.js} +1 -1
  108. package/dist/ui/assets/proxy-status-widget-Dm2ziI5D.js +1 -0
  109. package/dist/ui/assets/{raw-json-settings-editor-panel-Bs83yILR.js → raw-json-settings-editor-panel-DZRtQXbD.js} +1 -1
  110. package/dist/ui/assets/{searchable-select-pXUC_0Ih.js → searchable-select-D2smFEI5.js} +1 -1
  111. package/dist/ui/assets/{separator-FZR_61I9.js → separator-BvoSJCHW.js} +1 -1
  112. package/dist/ui/assets/{shared-BiIwM7--.js → shared-qKNFwLmT.js} +2 -2
  113. package/dist/ui/assets/{table-_9IusQ8G.js → table-DYyc1gJc.js} +1 -1
  114. package/dist/ui/assets/updates-XXi3TQNZ.js +1 -0
  115. package/dist/ui/assets/{use-accounts-BdtI0lBv.js → use-accounts-BR64_yUk.js} +1 -1
  116. package/dist/ui/index.html +2 -2
  117. package/dist/utils/browser/browser-settings.d.ts.map +1 -1
  118. package/dist/utils/browser/browser-settings.js +13 -3
  119. package/dist/utils/browser/browser-settings.js.map +1 -1
  120. package/dist/utils/claude-subcommand-detector.d.ts +5 -3
  121. package/dist/utils/claude-subcommand-detector.d.ts.map +1 -1
  122. package/dist/utils/claude-subcommand-detector.js +7 -3
  123. package/dist/utils/claude-subcommand-detector.js.map +1 -1
  124. package/dist/utils/glmt-deprecation.d.ts.map +1 -1
  125. package/dist/utils/glmt-deprecation.js +1 -3
  126. package/dist/utils/glmt-deprecation.js.map +1 -1
  127. package/dist/web-server/index.d.ts.map +1 -1
  128. package/dist/web-server/index.js +0 -9
  129. package/dist/web-server/index.js.map +1 -1
  130. package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -1
  131. package/dist/web-server/middleware/auth-middleware.js +26 -4
  132. package/dist/web-server/middleware/auth-middleware.js.map +1 -1
  133. package/dist/web-server/models-dev/pricing-resolver.d.ts.map +1 -1
  134. package/dist/web-server/models-dev/pricing-resolver.js +7 -0
  135. package/dist/web-server/models-dev/pricing-resolver.js.map +1 -1
  136. package/dist/web-server/models-dev/registry-cache.d.ts.map +1 -1
  137. package/dist/web-server/models-dev/registry-cache.js +14 -4
  138. package/dist/web-server/models-dev/registry-cache.js.map +1 -1
  139. package/dist/web-server/routes/cliproxy-auth-routes.d.ts +10 -0
  140. package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
  141. package/dist/web-server/routes/cliproxy-auth-routes.js +45 -13
  142. package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
  143. package/dist/web-server/routes/cliproxy-local-proxy.d.ts.map +1 -1
  144. package/dist/web-server/routes/cliproxy-local-proxy.js +25 -8
  145. package/dist/web-server/routes/cliproxy-local-proxy.js.map +1 -1
  146. package/dist/web-server/routes/cursor-routes.d.ts.map +1 -1
  147. package/dist/web-server/routes/cursor-routes.js +6 -1
  148. package/dist/web-server/routes/cursor-routes.js.map +1 -1
  149. package/dist/web-server/routes/image-analysis-routes.d.ts.map +1 -1
  150. package/dist/web-server/routes/image-analysis-routes.js +7 -0
  151. package/dist/web-server/routes/image-analysis-routes.js.map +1 -1
  152. package/dist/web-server/routes/proxy-routes.d.ts.map +1 -1
  153. package/dist/web-server/routes/proxy-routes.js +1 -1
  154. package/dist/web-server/routes/proxy-routes.js.map +1 -1
  155. package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
  156. package/dist/web-server/routes/settings-routes.js +10 -1
  157. package/dist/web-server/routes/settings-routes.js.map +1 -1
  158. package/dist/web-server/services/claude-extension-settings-service.d.ts.map +1 -1
  159. package/dist/web-server/services/claude-extension-settings-service.js +5 -1
  160. package/dist/web-server/services/claude-extension-settings-service.js.map +1 -1
  161. package/dist/web-server/usage/sqlite-cli.d.ts +25 -1
  162. package/dist/web-server/usage/sqlite-cli.d.ts.map +1 -1
  163. package/dist/web-server/usage/sqlite-cli.js +127 -3
  164. package/dist/web-server/usage/sqlite-cli.js.map +1 -1
  165. package/lib/mcp/ccs-browser-server.cjs +24 -13
  166. package/package.json +1 -1
  167. package/scripts/github/stable-release-issue-cleanup-lib.mjs +113 -0
  168. package/scripts/github/stable-release-issue-cleanup.mjs +134 -0
  169. package/dist/ui/assets/accounts-B2THsSu_.js +0 -1
  170. package/dist/ui/assets/api-CjLfG9mL.js +0 -4
  171. package/dist/ui/assets/claude-extension-B2v9bsN9.js +0 -1
  172. package/dist/ui/assets/cliproxy-control-panel-63gDI-e5.js +0 -1
  173. package/dist/ui/assets/cliproxy-fai69Vyd.js +0 -4
  174. package/dist/ui/assets/codex-i_hfI4Tv.js +0 -30
  175. package/dist/ui/assets/index-BMoGhs28.css +0 -1
  176. package/dist/ui/assets/index-CqsmdQoA.js +0 -1
  177. package/dist/ui/assets/proxy-status-widget-hRH1agF9.js +0 -1
  178. package/dist/ui/assets/updates-ButNfJqt.js +0 -1
@@ -23,24 +23,148 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.querySqliteJson = void 0;
26
+ exports.getPlatformTrustedPrefixes = exports.validateEnvOverridePath = exports.resolveTrustedSqlitePath = exports.querySqliteJson = void 0;
27
27
  const child_process_1 = require("child_process");
28
28
  const fs = __importStar(require("fs"));
29
29
  const util_1 = require("util");
30
30
  const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
31
31
  const SQLITE_JSON_MAX_BUFFER = 10 * 1024 * 1024;
32
+ // Trusted system paths per platform. These are fixed, non-user-writable
33
+ // locations managed by the OS or a system package manager.
34
+ // PATH-hijack threat model: we never resolve from $PATH; we only accept
35
+ // binaries whose realpath resolves under one of these prefixes.
36
+ const TRUSTED_SQLITE_PATHS_UNIX = [
37
+ '/usr/bin/sqlite3',
38
+ '/usr/local/bin/sqlite3',
39
+ '/opt/homebrew/bin/sqlite3',
40
+ ];
41
+ // Windows has no single canonical system install path for sqlite3
42
+ // (winget, Chocolatey, and Scoop all use different locations). An empty
43
+ // list means Windows falls through to the CCS_SQLITE_BIN env-var path.
44
+ const TRUSTED_SQLITE_PATHS_WINDOWS = [];
45
+ // Trusted path prefixes used to validate env-var overrides. A realpath that
46
+ // does not start with one of these prefixes is rejected to prevent users or
47
+ // CI from pointing CCS_SQLITE_BIN at a writable/untrusted location.
48
+ const TRUSTED_PREFIX_UNIX = [
49
+ '/usr/bin/',
50
+ '/usr/local/bin/',
51
+ '/usr/sbin/',
52
+ '/usr/local/sbin/',
53
+ '/opt/homebrew/',
54
+ '/opt/local/', // MacPorts
55
+ '/nix/store/', // Nix / NixOS immutable store
56
+ '/run/current-system/', // NixOS system activation symlink target
57
+ '/snap/', // Snap packages
58
+ ];
59
+ const TRUSTED_PREFIX_WINDOWS = [
60
+ 'C:\\Program Files\\',
61
+ 'C:\\Program Files (x86)\\',
62
+ 'C:\\Windows\\System32\\',
63
+ 'C:\\Windows\\SysWOW64\\',
64
+ 'C:\\ProgramData\\chocolatey\\bin\\', // Chocolatey managed bin dir
65
+ ];
32
66
  function isCommandMissing(error) {
33
67
  if (!(error instanceof Error))
34
68
  return false;
35
69
  const nodeError = error;
36
70
  return nodeError.code === 'ENOENT' || /not found/i.test(nodeError.message);
37
71
  }
38
- async function querySqliteJson(dbPath, sql) {
72
+ function getPlatformTrustedPaths() {
73
+ return process.platform === 'win32' ? TRUSTED_SQLITE_PATHS_WINDOWS : TRUSTED_SQLITE_PATHS_UNIX;
74
+ }
75
+ function getPlatformTrustedPrefixes() {
76
+ return process.platform === 'win32' ? TRUSTED_PREFIX_WINDOWS : TRUSTED_PREFIX_UNIX;
77
+ }
78
+ exports.getPlatformTrustedPrefixes = getPlatformTrustedPrefixes;
79
+ /**
80
+ * Validate a CCS_SQLITE_BIN override path.
81
+ *
82
+ * Security invariant: the resolved (symlink-expanded) path must start with
83
+ * at least one trusted prefix. This prevents pointing at a binary in a
84
+ * user-writable location such as /tmp, $HOME/.local, or a relative PATH
85
+ * entry, which would reintroduce the PATH-hijack vector closed in #1347.
86
+ *
87
+ * Returns the validated path on success, or throws with an explanation.
88
+ */
89
+ function validateEnvOverridePath(rawPath) {
90
+ let resolved;
91
+ try {
92
+ resolved = fs.realpathSync(rawPath);
93
+ }
94
+ catch {
95
+ throw new Error(`CCS_SQLITE_BIN path "${rawPath}" could not be resolved: file not found or inaccessible`);
96
+ }
97
+ // Verify executable bit (or file existence on Windows where X_OK is unreliable).
98
+ try {
99
+ if (process.platform === 'win32') {
100
+ fs.accessSync(resolved, fs.constants.F_OK);
101
+ }
102
+ else {
103
+ fs.accessSync(resolved, fs.constants.X_OK);
104
+ }
105
+ }
106
+ catch {
107
+ throw new Error(`CCS_SQLITE_BIN path "${resolved}" is not executable`);
108
+ }
109
+ const normalizedResolved = process.platform === 'win32' ? resolved.toLowerCase() : resolved;
110
+ const trusted = getPlatformTrustedPrefixes().some((prefix) => {
111
+ const normalizedPrefix = process.platform === 'win32' ? prefix.toLowerCase() : prefix;
112
+ return normalizedResolved.startsWith(normalizedPrefix);
113
+ });
114
+ if (!trusted) {
115
+ throw new Error(`CCS_SQLITE_BIN path "${resolved}" does not resolve under a trusted system prefix. ` +
116
+ `Paths under user-writable locations (e.g. /tmp, $HOME/.local) are rejected ` +
117
+ `to prevent PATH-hijack attacks.`);
118
+ }
119
+ return resolved;
120
+ }
121
+ exports.validateEnvOverridePath = validateEnvOverridePath;
122
+ /**
123
+ * Resolve the sqlite3 binary to use.
124
+ *
125
+ * Resolution order:
126
+ * 1. CCS_SQLITE_BIN env var override (validated against trusted prefixes)
127
+ * 2. First accessible path from the platform's hardcoded trusted list
128
+ * 3. Throw "sqlite3 command not available"
129
+ */
130
+ function resolveTrustedSqlitePath(env = process.env) {
131
+ const envOverride = env['CCS_SQLITE_BIN'];
132
+ if (envOverride && envOverride.trim().length > 0) {
133
+ // May throw — caller surfaces the error.
134
+ return validateEnvOverridePath(envOverride.trim());
135
+ }
136
+ const trustedPath = getPlatformTrustedPaths().find((candidate) => {
137
+ try {
138
+ // Resolve symlinks so the check is on the real binary.
139
+ const real = fs.realpathSync(candidate);
140
+ fs.accessSync(real, fs.constants.X_OK);
141
+ return true;
142
+ }
143
+ catch {
144
+ return false;
145
+ }
146
+ });
147
+ if (!trustedPath) {
148
+ throw new Error('sqlite3 command not available');
149
+ }
150
+ // Return the realpath to avoid double-hop symlink confusion at exec time.
151
+ return fs.realpathSync(trustedPath);
152
+ }
153
+ exports.resolveTrustedSqlitePath = resolveTrustedSqlitePath;
154
+ async function querySqliteJson(dbPath, sql, env = process.env) {
39
155
  if (!fs.existsSync(dbPath)) {
40
156
  return [];
41
157
  }
158
+ let sqlitePath;
159
+ try {
160
+ sqlitePath = resolveTrustedSqlitePath(env);
161
+ }
162
+ catch (error) {
163
+ const message = error instanceof Error ? error.message : String(error);
164
+ throw new Error(message);
165
+ }
42
166
  try {
43
- const { stdout } = await execFileAsync('sqlite3', ['-json', dbPath, sql], {
167
+ const { stdout } = await execFileAsync(sqlitePath, ['-json', dbPath, sql], {
44
168
  maxBuffer: SQLITE_JSON_MAX_BUFFER,
45
169
  });
46
170
  const trimmed = stdout.trim();
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-cli.js","sourceRoot":"","sources":["../../../src/web-server/usage/sqlite-cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAyC;AACzC,uCAAyB;AACzB,+BAAiC;AAEjC,MAAM,aAAa,GAAG,IAAA,gBAAS,EAAC,wBAAQ,CAAC,CAAC;AAC1C,MAAM,sBAAsB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAIhD,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,SAAS,GAAG,KAAkC,CAAC;IACrD,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAC7E,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,MAAc,EAAE,GAAW;IAC/D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE;YACxE,SAAS,EAAE,sBAAsB;SAClC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,MAA0B,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAxBD,0CAwBC"}
1
+ {"version":3,"file":"sqlite-cli.js","sourceRoot":"","sources":["../../../src/web-server/usage/sqlite-cli.ts"],"names":[],"mappings":"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"}
@@ -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.0.0",
3
+ "version": "8.1.0-dev.10",
4
4
  "description": "Claude Code Switch - Instant profile switching between Claude, GLM, Kimi, and more",
5
5
  "keywords": [
6
6
  "cli",
@@ -0,0 +1,113 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { spawnSync } from 'node:child_process';
3
+
4
+ const ISSUE_REF_PATTERN = /#([0-9]+)/g;
5
+ const ACTION_VERB_PATTERN = /\b(fixes|closes|resolves|refs?)\b(.*)/gi;
6
+ const RESOLVE_VERB_PATTERN = /\b(fixes|closes|resolves)\b(.*)/gi;
7
+ const PR_REF_PATTERN = /(?:Merge pull request #|\(#)([0-9]+)/g;
8
+ const STABLE_TAG_PATTERN = /^v[0-9]+\.[0-9]+\.[0-9]+$/;
9
+
10
+ export function extractIssueNumbers(text, { includeRefs = true } = {}) {
11
+ const pattern = includeRefs ? ACTION_VERB_PATTERN : RESOLVE_VERB_PATTERN;
12
+ const issues = new Set();
13
+ let actionMatch;
14
+
15
+ pattern.lastIndex = 0;
16
+ while ((actionMatch = pattern.exec(text || '')) !== null) {
17
+ const tail = actionMatch[2] || '';
18
+ let issueMatch;
19
+ ISSUE_REF_PATTERN.lastIndex = 0;
20
+ while ((issueMatch = ISSUE_REF_PATTERN.exec(tail)) !== null) {
21
+ issues.add(Number(issueMatch[1]));
22
+ }
23
+ }
24
+
25
+ return [...issues].sort((a, b) => a - b);
26
+ }
27
+
28
+ export function extractPrNumbers(text) {
29
+ const prs = new Set();
30
+ let match;
31
+
32
+ PR_REF_PATTERN.lastIndex = 0;
33
+ while ((match = PR_REF_PATTERN.exec(text || '')) !== null) {
34
+ prs.add(Number(match[1]));
35
+ }
36
+
37
+ return [...prs].sort((a, b) => a - b);
38
+ }
39
+
40
+ export function planIssueCleanup({ releaseIssues, resolvedIssues, issueStates }) {
41
+ const resolved = new Set(resolvedIssues);
42
+ return releaseIssues.map((number) => {
43
+ const state = issueStates.get(number) || { labels: [], state: 'UNKNOWN' };
44
+ const labels = new Set(state.labels);
45
+ const wasReleasedDev = labels.has('released-dev');
46
+ const shouldClose = state.state === 'OPEN' && (wasReleasedDev || resolved.has(number));
47
+
48
+ return {
49
+ number,
50
+ removeLabels: ['released-dev', 'pending-release'],
51
+ addReleasedLabel: shouldClose,
52
+ close: shouldClose,
53
+ reason: wasReleasedDev ? 'promoted from dev to stable' : 'resolved by stable release',
54
+ };
55
+ });
56
+ }
57
+
58
+ export function getStableReleaseContext({ env = process.env, exec = runCommand } = {}) {
59
+ const repo = env.GITHUB_REPOSITORY;
60
+ if (!repo) throw new Error('GITHUB_REPOSITORY is required');
61
+
62
+ const version = JSON.parse(readFileSync('package.json', 'utf8')).version;
63
+ const currentTag = `v${version}`;
64
+ const releaseBody = exec('gh', [
65
+ 'release',
66
+ 'view',
67
+ currentTag,
68
+ '--repo',
69
+ repo,
70
+ '--json',
71
+ 'body',
72
+ '--jq',
73
+ '.body',
74
+ ]);
75
+ const tags = exec('git', ['tag', '-l', 'v[0-9]*.[0-9]*.[0-9]*', '--sort=-v:refname'])
76
+ .split('\n')
77
+ .map((tag) => tag.trim())
78
+ .filter((tag) => STABLE_TAG_PATTERN.test(tag) && tag !== currentTag);
79
+ const previousStableTag = tags[0] || '';
80
+ const range = previousStableTag ? `${previousStableTag}..HEAD~1` : 'HEAD~50..HEAD~1';
81
+ const commitText = exec('git', ['log', range, '--pretty=format:%s%n%b'], { optional: true });
82
+
83
+ return { repo, version, currentTag, releaseBody, range, commitText };
84
+ }
85
+
86
+ export function buildReleaseIssueSet({ releaseBody, commitText, prText }) {
87
+ const releaseIssues = new Set([
88
+ ...extractIssueNumbers(releaseBody, { includeRefs: true }),
89
+ ...extractIssueNumbers(commitText, { includeRefs: true }),
90
+ ...extractIssueNumbers(prText, { includeRefs: true }),
91
+ ]);
92
+ const resolvedIssues = new Set([
93
+ ...extractIssueNumbers(releaseBody, { includeRefs: false }),
94
+ ...extractIssueNumbers(commitText, { includeRefs: false }),
95
+ ...extractIssueNumbers(prText, { includeRefs: false }),
96
+ ]);
97
+
98
+ return {
99
+ releaseIssues: [...releaseIssues].sort((a, b) => a - b),
100
+ resolvedIssues: [...resolvedIssues].sort((a, b) => a - b),
101
+ };
102
+ }
103
+
104
+ export function runCommand(command, args, { optional = false } = {}) {
105
+ const result = spawnSync(command, args, { encoding: 'utf8' });
106
+ if (result.status !== 0) {
107
+ if (optional) return '';
108
+ throw new Error(
109
+ `${command} ${args.join(' ')} failed: ${(result.stderr || result.stdout || '').trim()}`
110
+ );
111
+ }
112
+ return result.stdout.trim();
113
+ }
@@ -0,0 +1,134 @@
1
+ import {
2
+ buildReleaseIssueSet,
3
+ extractPrNumbers,
4
+ getStableReleaseContext,
5
+ planIssueCleanup,
6
+ runCommand,
7
+ } from './stable-release-issue-cleanup-lib.mjs';
8
+
9
+ function gh(args, options) {
10
+ return runCommand('gh', args, options);
11
+ }
12
+
13
+ function fetchPrText(repo, commitText) {
14
+ let prText = '';
15
+ for (const prNumber of extractPrNumbers(commitText)) {
16
+ const details = gh(
17
+ [
18
+ 'pr',
19
+ 'view',
20
+ String(prNumber),
21
+ '--repo',
22
+ repo,
23
+ '--json',
24
+ 'title,body',
25
+ '--jq',
26
+ '.title + "\n" + (.body // "")',
27
+ ],
28
+ { optional: true }
29
+ );
30
+ if (details) prText += `\n${details}`;
31
+ }
32
+ return prText;
33
+ }
34
+
35
+ function fetchIssueStates(repo, issueNumbers) {
36
+ const states = new Map();
37
+ for (const number of issueNumbers) {
38
+ const raw = gh(
39
+ [
40
+ 'issue',
41
+ 'view',
42
+ String(number),
43
+ '--repo',
44
+ repo,
45
+ '--json',
46
+ 'state,labels',
47
+ '--jq',
48
+ '{state:.state,labels:[.labels[].name]}',
49
+ ],
50
+ { optional: true }
51
+ );
52
+ if (!raw) continue;
53
+ states.set(number, JSON.parse(raw));
54
+ }
55
+ return states;
56
+ }
57
+
58
+ function ensureReleasedLabel(repo) {
59
+ gh(
60
+ [
61
+ 'label',
62
+ 'create',
63
+ 'released',
64
+ '--color',
65
+ 'ededed',
66
+ '--description',
67
+ 'Fix available in stable npm channel',
68
+ '--repo',
69
+ repo,
70
+ ],
71
+ { optional: true }
72
+ );
73
+ }
74
+
75
+ function applyAction(repo, action) {
76
+ console.log(`Cleaning release state on issue #${action.number}`);
77
+ for (const label of action.removeLabels) {
78
+ gh(['issue', 'edit', String(action.number), '--remove-label', label, '--repo', repo], {
79
+ optional: true,
80
+ });
81
+ }
82
+
83
+ if (!action.close) return;
84
+
85
+ gh(['issue', 'edit', String(action.number), '--add-label', 'released', '--repo', repo], {
86
+ optional: true,
87
+ });
88
+ gh(
89
+ [
90
+ 'issue',
91
+ 'close',
92
+ String(action.number),
93
+ '--comment',
94
+ '[bot] Closing issue because this fix/feature is now in stable release (@latest).',
95
+ '--repo',
96
+ repo,
97
+ ],
98
+ { optional: true }
99
+ );
100
+ console.log(`Closed issue #${action.number}: ${action.reason}`);
101
+ }
102
+
103
+ export function main() {
104
+ const context = getStableReleaseContext();
105
+ console.log(`Checking stable release issue lifecycle for ${context.currentTag}`);
106
+ console.log(`Checking commits in range: ${context.range}`);
107
+
108
+ const prText = fetchPrText(context.repo, context.commitText);
109
+ const { releaseIssues, resolvedIssues } = buildReleaseIssueSet({
110
+ releaseBody: context.releaseBody,
111
+ commitText: context.commitText,
112
+ prText,
113
+ });
114
+
115
+ if (releaseIssues.length === 0) {
116
+ console.log(`No release-scoped issues found for ${context.currentTag}`);
117
+ return;
118
+ }
119
+
120
+ ensureReleasedLabel(context.repo);
121
+ const issueStates = fetchIssueStates(context.repo, releaseIssues);
122
+ for (const action of planIssueCleanup({ releaseIssues, resolvedIssues, issueStates })) {
123
+ applyAction(context.repo, action);
124
+ }
125
+ }
126
+
127
+ if (import.meta.url === `file://${process.argv[1]}`) {
128
+ try {
129
+ main();
130
+ } catch (error) {
131
+ console.error(error);
132
+ process.exit(1);
133
+ }
134
+ }
@@ -1 +0,0 @@
1
- import{j as e}from"./radix-ui-nu4wz29m.js";import{r as k,e as Ae}from"./react-vendor-Bjx91N7w.js";import{e as Pe,f as se,g as De}from"./tanstack-bhJxV1h8.js";import{T as Te,a as Se,b as te,c as Re,d as _e,e as Oe}from"./table-_9IusQ8G.js";import{a as R,ah as q,ai as W,aj as Q,ak as J,al as Y,L as S,I as E,y as P,aD as pe,e as p,j as Ge,k as Me,l as ze,m as Le,n as ae,bi as ne,bj as re,bk as ce,B as C,c as $e,C as O,p as M,q as z,$ as F,b as G,f as Ie,g as He,h as Fe,t as Be}from"./index-DmV9wJET.js";import{A as Ue,a as Ke,b as Ee,c as Ze,d as Ve,e as Xe,f as qe,g as We}from"./alert-dialog-Vurq1xzV.js";import{a as fe,b as Qe,c as Je,d as Ye,e as es,u as ss,f as ts}from"./use-accounts-BdtI0lBv.js";import{b1 as Z,b2 as L,b3 as ee,aH as be,_ as je,b4 as Ne,ai as ye,w as as,b5 as ns,b6 as rs,m as V,at as cs,Q as os,b7 as ds,a7 as ls,$ as ve,a6 as B,T as X,x as is,o as oe,U as xs,a9 as de,Z as le}from"./icons-DzKUh8vG.js";import{C as ie}from"./checkbox-HiMHasEB.js";import"./notifications-B4_o8bcr.js";import"./utils-CzKF5WmX.js";import"./form-utils-CuHzLhJZ.js";import"./charts-eIPy2oG6.js";const xe=64,us=/^[a-zA-Z][a-zA-Z0-9_-]*$/;function ms({account:a,groupSummaries:x,plainCcsLane:t,onClose:m}){const{t:s}=R(),u=fe(),[r,l]=k.useState(a.context_mode==="shared"?"shared":"isolated"),[g,b]=k.useState(a.context_group||"default"),[h,v]=k.useState(a.continuity_mode==="deeper"?"deeper":"standard"),d=k.useMemo(()=>g.trim().toLowerCase().replace(/\s+/g,"-"),[g]),c=k.useMemo(()=>x.find(f=>f.group===d),[x,d]),N=d.length>0&&d.length<=xe&&us.test(d),j=r==="isolated"||N,y=r==="shared"?Math.max((c?.sharedCount??0)-(a.context_mode==="shared"&&a.context_group===d?1:0),0):0,n=r==="shared"?Math.max((c?.deeperCount??0)-(a.continuity_mode==="deeper"&&a.context_group===d?1:0),0):0,o=t?.account_name===a.name,i=!!t&&!o,w=`ccs auth default ${a.name}`,D=`ccs auth backup ${a.name}`,A=(f,I,_,H)=>{if(!["ArrowLeft","ArrowRight","ArrowUp","ArrowDown"].includes(f.key))return;f.preventDefault();const ke=_.indexOf(I),we=f.key==="ArrowLeft"||f.key==="ArrowUp"?-1:1,Ce=(ke+we+_.length)%_.length;H(_[Ce])},$=t?t.kind==="native"?s("continuityOverview.lane.native"):t.kind==="account-default"?s("continuityOverview.lane.accountDefault",{name:t.account_name||""}):t.kind==="account-inherited"?s("continuityOverview.lane.accountInherited",{name:t.account_name||""}):t.kind==="profile-default"?s("continuityOverview.lane.profileDefault",{name:t.profile_name||"default"}):t.label:"",T=()=>{j&&u.mutate({name:a.name,context_mode:r,context_group:r==="shared"?d:void 0,continuity_mode:r==="shared"?h:void 0},{onSuccess:()=>{m()}})},U=f=>{f||m()};return e.jsx(q,{open:!0,onOpenChange:U,children:e.jsxs(W,{className:"sm:max-w-md",children:[e.jsxs(Q,{children:[e.jsx(J,{children:s("editAccountContext.title")}),e.jsx(Y,{children:s("editAccountContext.description",{name:a.name})})]}),e.jsxs("div",{className:"space-y-4 py-2",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsx(S,{className:"text-sm font-semibold",children:s("editAccountContext.syncMode")})}),e.jsxs("div",{className:"flex p-0.5 bg-muted/60 hover:bg-muted/80 transition-colors rounded-xl border border-border/40 w-full",role:"radiogroup","aria-label":s("editAccountContext.syncMode"),children:[e.jsxs("button",{type:"button",role:"radio","aria-checked":r==="isolated",tabIndex:r==="isolated"?0:-1,onClick:()=>l("isolated"),onKeyDown:f=>A(f,r,["isolated","shared"],l),className:`flex-1 flex justify-center items-center gap-2 px-3 py-1.5 rounded-[10px] text-sm font-medium transition-all duration-200 overflow-hidden ${r==="isolated"?"bg-background text-blue-600 dark:text-blue-400 shadow-sm ring-1 ring-border/50":"text-muted-foreground hover:text-foreground hover:bg-muted/50"}`,children:[e.jsx(Z,{className:"h-4 w-4 shrink-0"}),e.jsx("span",{className:"truncate",children:s("editAccountContext.isolatedOption")})]}),e.jsxs("button",{type:"button",role:"radio","aria-checked":r==="shared",tabIndex:r==="shared"?0:-1,onClick:()=>l("shared"),onKeyDown:f=>A(f,r,["isolated","shared"],l),className:`flex-1 flex justify-center items-center gap-2 px-3 py-1.5 rounded-[10px] text-sm font-medium transition-all duration-200 overflow-hidden ${r==="shared"?"bg-background text-emerald-600 dark:text-emerald-400 shadow-sm ring-1 ring-border/50":"text-muted-foreground hover:text-foreground hover:bg-muted/50"}`,children:[e.jsx(L,{className:"h-4 w-4 shrink-0"}),e.jsx("span",{className:"truncate",children:s("editAccountContext.sharedOption")})]})]}),e.jsx("p",{className:"text-xs text-muted-foreground pt-1 px-1",children:s(r==="isolated"?"editAccountContext.isolatedModeHint":"editAccountContext.sharedModeHint")})]}),r==="shared"&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(S,{htmlFor:"context-group",children:s("editAccountContext.historySyncGroup")}),e.jsx(E,{id:"context-group",value:g,onChange:f=>b(f.target.value),placeholder:s("editAccountContext.groupPlaceholder"),autoComplete:"off"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("editAccountContext.groupHint",{max:xe})}),!N&&e.jsx("p",{className:"text-xs text-destructive",children:s("editAccountContext.invalidGroup")})]}),r==="shared"&&e.jsxs("div",{className:"space-y-2",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsx(S,{className:"text-sm font-semibold",children:s("editAccountContext.continuityDepth")})}),e.jsxs("div",{className:"flex p-0.5 bg-muted/60 hover:bg-muted/80 transition-colors rounded-xl border border-border/40 w-full",role:"radiogroup","aria-label":s("editAccountContext.continuityDepth"),children:[e.jsxs("button",{type:"button",role:"radio","aria-checked":h==="standard",tabIndex:h==="standard"?0:-1,onClick:()=>v("standard"),onKeyDown:f=>A(f,h,["standard","deeper"],v),className:`flex-1 flex justify-center items-center gap-2 px-3 py-1.5 rounded-[10px] text-sm font-medium transition-all duration-200 overflow-hidden ${h==="standard"?"bg-background text-emerald-600 dark:text-emerald-400 shadow-sm ring-1 ring-border/50":"text-muted-foreground hover:text-foreground hover:bg-muted/50"}`,children:[e.jsx(L,{className:"h-4 w-4 shrink-0"}),e.jsx("span",{className:"truncate",children:s("editAccountContext.standardOption")})]}),e.jsxs("button",{type:"button",role:"radio","aria-checked":h==="deeper",tabIndex:h==="deeper"?0:-1,onClick:()=>v("deeper"),onKeyDown:f=>A(f,h,["standard","deeper"],v),className:`flex-1 flex justify-center items-center gap-2 px-3 py-1.5 rounded-[10px] text-sm font-medium transition-all duration-200 overflow-hidden ${h==="deeper"?"bg-background text-indigo-600 dark:text-indigo-400 shadow-sm ring-1 ring-border/50":"text-muted-foreground hover:text-foreground hover:bg-muted/50"}`,children:[e.jsx(ee,{className:"h-4 w-4 shrink-0"}),e.jsx("span",{className:"truncate",children:s("editAccountContext.deeperOption")})]})]}),e.jsx("p",{className:"text-xs text-muted-foreground pt-1 px-1",children:s(h==="standard"?"editAccountContext.standardHint":"editAccountContext.deeperHint")})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s("editAccountContext.credentialsIsolated")}),i&&e.jsx("div",{className:"rounded-[14px] border border-amber-200 bg-amber-50/50 p-4 text-xs shadow-sm dark:border-amber-900/40 dark:bg-amber-900/10",children:e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"font-medium text-foreground",children:s("continuityOverview.plainLaneTitle")}),e.jsx("p",{className:"text-muted-foreground leading-relaxed",children:s("continuityOverview.plainLaneDescription",{lane:$||"plain ccs",name:a.name})}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"rounded-md border bg-background px-2 py-2 font-mono text-[11px] flex items-start gap-2",children:[e.jsx("span",{className:"flex-1 break-all",children:"ccs -r"}),e.jsx(P,{value:"ccs -r",size:"icon"})]}),e.jsxs("div",{className:"rounded-md border bg-background px-2 py-2 font-mono text-[11px] flex items-start gap-2",children:[e.jsx("span",{className:"flex-1 break-all",children:"ccs auth backup default"}),e.jsx(P,{value:"ccs auth backup default",size:"icon"})]}),e.jsxs("div",{className:"rounded-md border bg-background px-2 py-2 font-mono text-[11px] flex items-start gap-2",children:[e.jsx("span",{className:"flex-1 break-all",children:D}),e.jsx(P,{value:D,size:"icon"})]}),e.jsxs("div",{className:"rounded-md border bg-background px-2 py-2 font-mono text-[11px] flex items-start gap-2",children:[e.jsx("span",{className:"flex-1 break-all",children:w}),e.jsx(P,{value:w,size:"icon"})]})]})]})}),e.jsx("div",{className:`rounded-[14px] border p-4 text-xs shadow-sm transition-colors ${r==="isolated"?"bg-blue-50/50 border-blue-200 dark:bg-blue-900/10 dark:border-blue-800/40":"bg-muted/40 border-border/60"}`,children:e.jsxs("div",{className:"flex items-start gap-3",children:[r==="isolated"?e.jsx(be,{className:"h-4 w-4 text-blue-500 mt-0.5 shrink-0"}):e.jsx(je,{className:"h-4 w-4 text-muted-foreground mt-0.5 shrink-0"}),e.jsxs("div",{className:"space-y-1.5 flex-1 text-muted-foreground leading-relaxed",children:[r==="isolated"?e.jsx("p",{className:"text-foreground font-medium selection:bg-blue-200",children:s("editAccountContext.isolatedImplication")}):e.jsxs(e.Fragment,{children:[e.jsxs("p",{children:[e.jsx("span",{className:"text-foreground font-medium",children:s("editAccountContext.sameGroupRule",{group:d})})," ",y>0?s("editAccountContext.sameGroupPeerCount",{count:y}):s("editAccountContext.noSameGroupPeer")]}),h==="deeper"&&e.jsx("p",{children:n>0?s("editAccountContext.deeperReady",{count:n}):e.jsx("span",{className:"text-amber-600 dark:text-amber-500",children:s("editAccountContext.deeperNeedsPeers")})})]}),e.jsx("p",{className:`pt-1.5 text-[11px] ${r==="isolated"?"text-blue-700/70 dark:text-blue-300/60":"text-muted-foreground/70"}`,children:s("editAccountContext.resumeOriginalWarning")})]})]})})]}),e.jsxs(pe,{children:[e.jsx(p,{variant:"outline",onClick:m,disabled:u.isPending,children:s("editAccountContext.cancel")}),e.jsx(p,{onClick:T,disabled:!j||u.isPending,children:u.isPending?s("editAccountContext.saving"):s("editAccountContext.save")})]})]})})}function hs({account:a,onClose:x}){const{t}=R(),m=Qe(),[s,u]=k.useState(a.shared_resource_mode||"shared"),r=()=>{m.mutate({name:a.name,shared_resource_mode:s},{onSuccess:()=>{x()}})};return e.jsx(q,{open:!0,onOpenChange:x,children:e.jsxs(W,{className:"sm:max-w-[425px]",children:[e.jsxs(Q,{children:[e.jsx(J,{children:t("editAccountSharedResources.title")}),e.jsx(Y,{children:t("editAccountSharedResources.description",{name:a.name})})]}),e.jsxs("div",{className:"grid gap-4 py-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(S,{htmlFor:"resource-mode",children:t("editAccountSharedResources.resourceMode")}),e.jsxs(Ge,{value:s,onValueChange:l=>u(l),children:[e.jsx(Me,{id:"resource-mode",className:"w-full",children:e.jsx(ze,{placeholder:t("editAccountSharedResources.selectResourceMode")})}),e.jsxs(Le,{children:[e.jsx(ae,{value:"shared",children:e.jsxs("div",{className:"flex flex-col items-start py-1",children:[e.jsx("span",{className:"font-medium text-sm",children:t("editAccountSharedResources.sharedOption")}),e.jsx("span",{className:"text-[11px] text-muted-foreground",children:t("editAccountSharedResources.sharedHint")})]})}),e.jsx(ae,{value:"profile-local",children:e.jsxs("div",{className:"flex flex-col items-start py-1",children:[e.jsx("span",{className:"font-medium text-sm",children:t("editAccountSharedResources.profileLocalOption")}),e.jsx("span",{className:"text-[11px] text-muted-foreground",children:t("editAccountSharedResources.profileLocalHint")})]})})]})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{className:"text-[11px] font-medium uppercase tracking-wide text-muted-foreground",children:t("editAccountSharedResources.implicationTitle")}),s==="shared"?e.jsxs(ne,{className:"border-emerald-500/20 bg-emerald-500/5",children:[e.jsx(Ne,{className:"h-4 w-4 text-emerald-600 dark:text-emerald-400"}),e.jsx(re,{className:"text-xs font-semibold text-emerald-800 dark:text-emerald-300",children:t("editAccountSharedResources.sharedOption")}),e.jsx(ce,{className:"text-xs text-emerald-700/80 dark:text-emerald-400/80",children:t("editAccountSharedResources.sharedImplication")})]}):e.jsxs(ne,{className:"border-amber-500/20 bg-amber-500/5",children:[e.jsx(ye,{className:"h-4 w-4 text-amber-600 dark:text-amber-400"}),e.jsx(re,{className:"text-xs font-semibold text-amber-800 dark:text-amber-300",children:t("editAccountSharedResources.profileLocalOption")}),e.jsx(ce,{className:"text-xs text-amber-700/80 dark:text-amber-400/80",children:t("editAccountSharedResources.profileLocalImplication")})]})]}),a.shared_resource_inferred&&e.jsxs("div",{className:"flex items-start gap-2 rounded-md bg-muted/50 p-3",children:[e.jsx(as,{className:"h-4 w-4 mt-0.5 text-muted-foreground shrink-0"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t("accountsTable.legacyReview")})]})]}),e.jsxs(pe,{children:[e.jsx(p,{variant:"outline",onClick:x,children:t("editAccountSharedResources.cancel")}),e.jsx(p,{onClick:r,disabled:m.isPending,children:m.isPending?t("editAccountSharedResources.saving"):t("editAccountSharedResources.save")})]})]})})}function ue({data:a,defaultAccount:x,groupSummaries:t,plainCcsLane:m}){const{t:s}=R(),u=Je(),r=Ye(),l=es(),g=fe(),[b,h]=k.useState(null),[v,d]=k.useState(null),[c,N]=k.useState(null),j=[{accessorKey:"name",header:s("accountsTable.name"),size:200,cell:({row:n})=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-medium",children:n.original.name}),n.original.name===x&&e.jsx("span",{className:"text-xs bg-primary/10 text-primary px-1.5 py-0.5 rounded border border-primary/20",children:s("accountsTable.defaultBadge")})]})},{accessorKey:"type",header:s("accountsTable.type"),size:100,cell:({row:n})=>e.jsx("span",{className:"capitalize text-muted-foreground",children:n.original.type||"oauth"})},{accessorKey:"created",header:s("accountsTable.created"),size:150,cell:({row:n})=>{const o=new Date(n.original.created);return e.jsx("span",{className:"text-muted-foreground",children:o.toLocaleDateString()})}},{accessorKey:"last_used",header:s("accountsTable.lastUsed"),size:150,cell:({row:n})=>{if(!n.original.last_used)return e.jsx("span",{className:"text-muted-foreground/50",children:"-"});const o=new Date(n.original.last_used);return e.jsx("span",{className:"text-muted-foreground",children:o.toLocaleDateString()})}},{id:"context",header:s("accountsTable.historySync"),size:170,cell:({row:n})=>{if(n.original.type==="cliproxy")return e.jsx("span",{className:"text-muted-foreground/50",children:"-"});if((n.original.context_mode||"isolated")==="shared"){const i=n.original.context_group||"default",w=n.original.continuity_mode==="deeper";return e.jsxs("div",{className:"flex flex-col items-start gap-1",children:[e.jsxs("div",{className:"flex items-center gap-1.5 flex-wrap",children:[e.jsx(C,{variant:"outline",className:`font-mono text-[10px] uppercase px-1.5 py-0 border ${w?"text-indigo-700 border-indigo-300/60 bg-indigo-50/50 dark:text-indigo-300 dark:border-indigo-900/40 dark:bg-indigo-900/20":"text-emerald-700 border-emerald-300/60 bg-emerald-50/50 dark:text-emerald-300 dark:border-emerald-900/40 dark:bg-emerald-900/20"}`,children:s(w?"accountsTable.badges.deeper":"accountsTable.badges.shared")}),e.jsx("span",{className:"text-xs font-semibold text-foreground/80",children:i})]}),e.jsx("p",{className:"text-[10px] text-muted-foreground whitespace-nowrap",children:n.original.sameGroupPeerCount>0?s("accountsTable.sameGroupPeerCount",{count:n.original.sameGroupPeerCount}):s("accountsTable.noSameGroupPeer")})]})}return n.original.context_inferred?e.jsxs("div",{className:"flex flex-col items-start gap-1",children:[e.jsx(C,{variant:"outline",className:"text-amber-700 border-amber-300/60 bg-amber-50/50 dark:text-amber-400 dark:border-amber-900/40 dark:bg-amber-900/20 font-mono text-[10px] uppercase px-1.5 py-0",children:s("accountsTable.badges.legacy")}),e.jsx("p",{className:"text-[10px] text-amber-700/80 dark:text-amber-400/80 whitespace-nowrap",children:s("accountsTable.legacyReview")})]}):e.jsx("div",{className:"flex flex-col items-start gap-1.5",children:e.jsx(C,{variant:"secondary",className:"font-mono text-[10px] uppercase px-1.5 py-0 text-muted-foreground bg-muted/60 border-transparent shadow-none",children:s("accountsTable.badges.isolated")})})}},{id:"resources",header:s("accountsTable.sharedResources"),size:150,cell:({row:n})=>{if(n.original.type==="cliproxy")return e.jsx("span",{className:"text-muted-foreground/50",children:"-"});const o=n.original.shared_resource_mode||"shared",i=n.original.shared_resource_inferred;return e.jsxs("div",{className:"flex flex-col items-start gap-1",children:[e.jsx(C,{variant:o==="shared"?"outline":"secondary",className:$e("font-mono text-[10px] uppercase px-1.5 py-0",o==="shared"?"text-emerald-700 border-emerald-300/60 bg-emerald-50/50 dark:text-emerald-300 dark:border-emerald-900/40 dark:bg-emerald-900/20":"text-muted-foreground bg-muted/60 border-transparent shadow-none"),children:s(o==="shared"?"accountsTable.resourcesShared":"accountsTable.resourcesProfileLocal")}),i&&e.jsx("p",{className:"text-[10px] text-amber-700/80 dark:text-amber-400/80 whitespace-nowrap",children:s("accountsTable.legacyReview")})]})}},{id:"actions",header:s("accountsTable.actions"),size:220,cell:({row:n})=>{const o=n.original.name===x,i=u.isPending||r.isPending||g.isPending,w=n.original.type==="cliproxy",D=n.original.context_inferred||n.original.continuity_inferred;return e.jsxs("div",{className:"flex items-center gap-1",children:[!w&&e.jsxs(p,{variant:"outline",size:"sm",className:"h-8 px-2",disabled:i,onClick:()=>d(n.original),title:s("accountsTable.syncTitle"),children:[e.jsx(ns,{className:"w-3.5 h-3.5 mr-1"}),s("accountsTable.sync")]}),!w&&e.jsxs(p,{variant:"outline",size:"sm",className:"h-8 px-2",disabled:i,onClick:()=>N(n.original),title:s("accountsTable.resourcesTitle"),children:[e.jsx(Ne,{className:"w-3.5 h-3.5 mr-1"}),s("accountsTable.sharedResources")]}),!w&&D&&e.jsxs(p,{variant:"ghost",size:"sm",className:"h-8 px-2 text-amber-700 hover:text-amber-700 hover:bg-amber-500/10 dark:text-amber-400 dark:hover:text-amber-400",disabled:i,onClick:()=>g.mutate({name:n.original.name,context_mode:n.original.context_mode==="shared"?"shared":"isolated",context_group:n.original.context_mode==="shared"?n.original.context_group||"default":void 0,continuity_mode:n.original.context_mode==="shared"?n.original.continuity_mode==="deeper"?"deeper":"standard":void 0}),title:s("accountsTable.confirmLegacyTitle"),children:[e.jsx(rs,{className:"w-3 h-3 mr-1"}),s("accountsTable.confirm")]}),e.jsxs(p,{variant:o?"secondary":"default",size:"sm",className:"h-8 px-2",disabled:o||i,onClick:()=>u.mutate(n.original.name),children:[e.jsx(V,{className:`w-3 h-3 mr-1 ${o?"opacity-50":""}`}),s(o?"accountsTable.active":"accountsTable.setDefault")]}),e.jsx(p,{variant:"ghost",size:"sm",className:"h-8 px-2 text-destructive hover:text-destructive hover:bg-destructive/10",disabled:o||i,onClick:()=>h(n.original.name),title:s(o?"accountsTable.cannotDeleteDefault":"accountsTable.deleteAccount"),children:e.jsx(cs,{className:"w-4 h-4"})})]})}}],y=Pe({data:a,columns:j,getCoreRowModel:De()});return a.length===0?e.jsx("div",{className:"text-center py-8 text-muted-foreground",children:s("accountsTable.noAccounts")}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-4",children:[e.jsx("div",{className:"border rounded-md",children:e.jsxs(Te,{children:[e.jsx(Se,{children:y.getHeaderGroups().map(n=>e.jsx(te,{children:n.headers.map(o=>{const i={name:"w-[180px]",type:"w-[80px]",created:"w-[120px]",last_used:"w-[120px]",context:"w-[150px]",resources:"w-[120px]",actions:"w-[320px]"}[o.id]||"w-auto";return e.jsx(Re,{className:i,children:o.isPlaceholder?null:se(o.column.columnDef.header,o.getContext())},o.id)})},n.id))}),e.jsx(_e,{children:y.getRowModel().rows.map(n=>e.jsx(te,{children:n.getVisibleCells().map(o=>e.jsx(Oe,{children:se(o.column.columnDef.cell,o.getContext())},o.id))},n.id))})]})}),x&&e.jsx("div",{className:"flex justify-end",children:e.jsxs(p,{variant:"outline",size:"sm",onClick:()=>l.mutate(),disabled:l.isPending,children:[e.jsx(os,{className:"w-4 h-4 mr-2"}),s("accountsTable.resetToDefault")]})})]}),v&&e.jsx(ms,{account:v,groupSummaries:t,plainCcsLane:m,onClose:()=>d(null)}),c&&e.jsx(hs,{account:c,onClose:()=>N(null)}),e.jsx(Ue,{open:!!b,onOpenChange:n=>!n&&h(null),children:e.jsxs(Ke,{children:[e.jsxs(Ee,{children:[e.jsx(Ze,{children:s("accountsTable.deleteDialogTitle")}),e.jsx(Ve,{children:s("accountsTable.deleteDialogDesc",{name:b??""})})]}),e.jsxs(Xe,{children:[e.jsx(qe,{children:s("accountsTable.cancel")}),e.jsx(We,{className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",onClick:()=>{b&&(r.mutate(b),h(null))},children:s("accountsTable.delete")})]})]})})]})}function me({totalAccounts:a,isolatedCount:x,sharedPeerGroups:t,deeperReadyGroups:m}){const{t:s}=R(),u=m[0]||t[0]||"daily",r=a<2?"empty":m.length>0?"deeper":t.length>0?"shared":a>=2&&x===a?"isolated":a===0?"empty":"mixed",l=`ccs auth create work2 --share-context --context-group ${u} --deeper-continuity`;return e.jsxs(O,{className:"overflow-hidden",children:[e.jsx(M,{className:"pb-3",children:e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(z,{className:"text-lg",children:s("accountRouteGuide.title")}),e.jsx(F,{children:s("accountRouteGuide.description")})]}),e.jsx(C,{variant:r==="deeper"?"default":"secondary",children:s(`accountRouteGuide.status.${r}`)})]})}),e.jsxs(G,{className:"space-y-4",children:[e.jsxs("div",{className:"grid gap-3 md:grid-cols-2 xl:grid-cols-4",children:[e.jsxs("section",{className:"rounded-md border bg-blue-50/50 p-3 text-sm dark:bg-blue-900/10",children:[e.jsxs("div",{className:"flex items-center gap-2 font-semibold",children:[e.jsx(ye,{className:"h-4 w-4 text-blue-600 dark:text-blue-400"}),s("accountRouteGuide.cards.isolated.title")]}),e.jsx("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:s("accountRouteGuide.cards.isolated.desc")})]}),e.jsxs("section",{className:"rounded-md border bg-emerald-50/50 p-3 text-sm dark:bg-emerald-900/10",children:[e.jsxs("div",{className:"flex items-center gap-2 font-semibold",children:[e.jsx(ds,{className:"h-4 w-4 text-emerald-600 dark:text-emerald-400"}),s("accountRouteGuide.cards.select.title")]}),e.jsx("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:s("accountRouteGuide.cards.select.desc")})]}),e.jsxs("section",{className:"rounded-md border bg-sky-50/50 p-3 text-sm dark:bg-sky-900/10",children:[e.jsxs("div",{className:"flex items-center gap-2 font-semibold",children:[e.jsx(ls,{className:"h-4 w-4 text-sky-600 dark:text-sky-400"}),s("accountRouteGuide.cards.settings.title")]}),e.jsx("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:s("accountRouteGuide.cards.settings.desc")})]}),e.jsxs("section",{className:"rounded-md border bg-indigo-50/50 p-3 text-sm dark:bg-indigo-900/10",children:[e.jsxs("div",{className:"flex items-center gap-2 font-semibold",children:[e.jsx(L,{className:"h-4 w-4 text-indigo-600 dark:text-indigo-400"}),s("accountRouteGuide.cards.sync.title")]}),e.jsx("p",{className:"mt-1.5 text-xs leading-relaxed text-muted-foreground",children:s("accountRouteGuide.cards.sync.desc")})]})]}),e.jsxs("div",{className:"grid gap-3 lg:grid-cols-2",children:[e.jsxs("div",{className:"rounded-md border bg-background p-3",children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:[e.jsx(ve,{className:"h-3.5 w-3.5"}),s("accountRouteGuide.commands.isolated")]}),["ccs auth create work","ccs auth create personal","ccs work","ccs personal"].map(g=>e.jsxs("div",{className:"mt-2 flex items-start gap-2 rounded-md bg-muted px-2 py-2 font-mono text-[11px]",children:[e.jsx("span",{className:"flex-1 break-all",children:g}),e.jsx(P,{value:g,size:"icon"})]},g))]}),e.jsxs("div",{className:"rounded-md border bg-background p-3",children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:[e.jsx(ee,{className:"h-3.5 w-3.5"}),s("accountRouteGuide.commands.sync")]}),e.jsxs("div",{className:"flex items-start gap-2 rounded-md bg-muted px-2 py-2 font-mono text-[11px]",children:[e.jsx("span",{className:"flex-1 break-all",children:l}),e.jsx(P,{value:l,size:"icon"})]}),e.jsx("p",{className:"mt-2 text-xs leading-relaxed text-muted-foreground",children:s("accountRouteGuide.commands.syncDesc",{group:u})})]})]})]})]})}const K=({titleKey:a,descKey:x})=>{const{t}=R();return e.jsxs(Ie,{children:[e.jsx(He,{asChild:!0,children:e.jsx(p,{variant:"ghost",size:"icon","aria-label":t(a),className:"h-5 w-5 rounded-full hover:bg-muted text-muted-foreground/70 transition-colors",children:e.jsx(je,{className:"h-3 w-3"})})}),e.jsxs(Fe,{className:"w-72 p-4 rounded-xl shadow-lg border-border/50 text-sm",side:"top",align:"center",children:[e.jsx("p",{className:"font-semibold tracking-tight",children:t(a)}),e.jsx("p",{className:"mt-1.5 text-muted-foreground leading-relaxed",children:t(x)})]})]})};function he({totalAccounts:a,primaryAccountName:x,isolatedCount:t,sharedStandardCount:m,deeperSharedCount:s,sharedAloneCount:u,sharedPeerAccountCount:r,deeperReadyAccountCount:l,sharedPeerGroups:g,deeperReadyGroups:b,legacyTargetCount:h,cliproxyCount:v,plainCcsLane:d}){const{t:c}=R(),N=d?d.kind==="native"?c("continuityOverview.lane.native"):d.kind==="account-default"?c("continuityOverview.lane.accountDefault",{name:d.account_name||""}):d.kind==="account-inherited"?c("continuityOverview.lane.accountInherited",{name:d.account_name||""}):d.kind==="profile-default"?c("continuityOverview.lane.profileDefault",{name:d.profile_name||"default"}):d.label:"",j=a<2?"single":g.length===0?t===a?"isolated":"shared-alone":b.length===0?"shared-standard":t>0||u>0||l<r||b.length<g.length?"partial":"ready",y=b[0]||g[0]||"default",n=b.length>0&&(t>0||m>0||g.length>b.length),i={ready:e.jsx(is,{className:"h-6 w-6 text-emerald-600 dark:text-emerald-400"}),"shared-standard":e.jsx(L,{className:"h-6 w-6 text-blue-600 dark:text-blue-400"}),single:e.jsx(be,{className:"h-6 w-6 text-stone-400"}),isolated:e.jsx(Z,{className:"h-6 w-6 text-amber-600 dark:text-amber-400"}),"shared-alone":e.jsx(X,{className:"h-6 w-6 text-amber-600 dark:text-amber-400"}),partial:e.jsx(X,{className:"h-6 w-6 text-amber-600 dark:text-amber-400"})}[j],w=!!x&&d?.account_name===x,D=a>0&&!!d&&(!x||!w),A=a>1&&j!=="ready";return e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsx(O,{className:"flex flex-col justify-between overflow-hidden relative group p-0 border-border bg-card shadow-sm hover:shadow-md transition-shadow duration-300",children:e.jsxs(G,{className:"p-6 flex flex-col h-full bg-gradient-to-br from-card to-muted/20 space-y-4",children:[e.jsx("div",{className:"flex items-start justify-between gap-4",children:e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-start gap-4",children:[e.jsx("div",{className:"rounded-2xl bg-background p-3 shadow-sm ring-1 ring-border/50 self-start shrink-0",children:i}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("h3",{className:"text-lg font-semibold tracking-tight",children:c(`continuityReadiness.messages.${j}.title`,{group:y})}),e.jsx(C,{variant:j==="ready"?"default":"secondary",className:"rounded-full px-2.5 py-0.5 font-medium shadow-sm",children:c(`continuityReadiness.state.${j}`)})]}),e.jsx("p",{className:"text-sm text-muted-foreground max-w-lg leading-relaxed",children:c(`continuityReadiness.messages.${j}.description`,{group:y,count:u})})]})]})}),e.jsxs("div",{className:"mt-auto pt-4 flex flex-wrap items-center gap-2",children:[v>0&&e.jsx(C,{variant:"outline",className:"text-blue-700 bg-blue-50/50 border-blue-200/60 dark:border-blue-900/40 dark:bg-blue-900/20 dark:text-blue-300",children:c("historySyncLearningMap.cliproxyManaged",{count:v})}),h>0&&e.jsx(C,{variant:"outline",className:"text-amber-700 bg-amber-50/50 border-amber-200/60 dark:border-amber-900/40 dark:bg-amber-900/20 dark:text-amber-300",children:c("historySyncLearningMap.legacyConfirmation",{count:h})}),g.length>0&&b.length===0&&e.jsx(C,{variant:"secondary",className:"font-mono text-[11px] px-2 bg-muted/50 text-muted-foreground border-transparent",children:c("continuityOverview.recommendBadge",{group:y})}),n&&e.jsx(C,{variant:"secondary",className:"font-mono text-[11px] px-2 bg-muted/50 text-muted-foreground border-transparent",children:c("continuityOverview.partialBadge",{group:y})})]})]})}),(D||A)&&e.jsx(O,{className:"border-dashed",children:e.jsxs(G,{className:"p-5 space-y-4",children:[D&&e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-semibold text-foreground",children:c("continuityOverview.plainLaneTitle")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:c("continuityOverview.plainLaneDescription",{lane:N||"plain ccs"})})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"rounded-md border bg-background px-2 py-2 font-mono text-[11px] flex items-start gap-2",children:[e.jsx("span",{className:"flex-1 break-all",children:"ccs -r"}),e.jsx(P,{value:"ccs -r",size:"icon"})]}),e.jsxs("div",{className:"rounded-md border bg-background px-2 py-2 font-mono text-[11px] flex items-start gap-2",children:[e.jsx("span",{className:"flex-1 break-all",children:"ccs auth backup default"}),e.jsx(P,{value:"ccs auth backup default",size:"icon"})]}),x?e.jsxs("div",{className:"rounded-md border bg-background px-2 py-2 font-mono text-[11px] flex items-start gap-2",children:[e.jsx("span",{className:"flex-1 break-all",children:`ccs auth default ${x}`}),e.jsx(P,{value:`ccs auth default ${x}`,size:"icon"})]}):e.jsx("p",{className:"text-xs text-muted-foreground",children:c("continuityOverview.setDefaultHint")})]})]}),A&&e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-sm font-semibold text-foreground",children:c("continuityReadiness.stepsTitle")}),e.jsxs("ol",{className:"space-y-1 pl-5 text-sm text-muted-foreground",children:[e.jsx("li",{children:c("continuityReadiness.steps.syncBoth")}),e.jsx("li",{children:c("continuityReadiness.steps.sameGroup",{group:y})}),e.jsx("li",{children:c("continuityReadiness.steps.enableDeeper")}),e.jsx("li",{children:c("continuityReadiness.steps.resumeOriginal")})]})]})]})}),e.jsxs("div",{className:"flex flex-col md:flex-row items-center gap-3",children:[e.jsxs("div",{className:"flex-1 w-full flex items-center justify-between p-3.5 rounded-xl border border-blue-300/40 bg-blue-50/50 dark:border-blue-900/30 dark:bg-blue-900/10 shadow-sm transition-colors hover:bg-blue-100/40 dark:hover:bg-blue-900/20",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Z,{className:"h-4 w-4 text-blue-700/80 dark:text-blue-400/80"}),e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wider text-blue-900 dark:text-blue-200",children:c("historySyncLearningMap.isolated")}),e.jsx(K,{titleKey:"accountsPage.isolated",descKey:"accountsPage.isolatedDesc"})]}),e.jsx("span",{className:"text-lg font-mono font-bold text-blue-900 dark:text-blue-200",children:t})]}),e.jsx(B,{className:"hidden md:block h-4 w-4 text-muted-foreground/40 shrink-0"}),e.jsxs("div",{className:"flex-1 w-full flex items-center justify-between p-3.5 rounded-xl border border-emerald-300/40 bg-emerald-50/50 dark:border-emerald-900/30 dark:bg-emerald-900/10 shadow-sm transition-colors hover:bg-emerald-100/40 dark:hover:bg-emerald-900/20",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(L,{className:"h-4 w-4 text-emerald-700/80 dark:text-emerald-400/80"}),e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wider text-emerald-900 dark:text-emerald-200",children:c("historySyncLearningMap.shared")}),e.jsx(K,{titleKey:"accountsPage.sharedStandard",descKey:"accountsPage.sharedStandardDesc"})]}),e.jsx("span",{className:"text-lg font-mono font-bold text-emerald-900 dark:text-emerald-200",children:m})]}),e.jsx(B,{className:"hidden md:block h-4 w-4 text-muted-foreground/40 shrink-0"}),e.jsxs("div",{className:"flex-1 w-full flex items-center justify-between p-3.5 rounded-xl border border-indigo-300/40 bg-indigo-50/50 dark:border-indigo-900/30 dark:bg-indigo-900/10 shadow-sm transition-colors hover:bg-indigo-100/40 dark:hover:bg-indigo-900/20",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ee,{className:"h-4 w-4 text-indigo-700/80 dark:text-indigo-400/80"}),e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wider text-indigo-900 dark:text-indigo-200",children:c("historySyncLearningMap.deeper")}),e.jsx(K,{titleKey:"accountsPage.sharedDeeper",descKey:"accountsPage.sharedDeeperDesc"})]}),e.jsx("span",{className:"text-lg font-mono font-bold text-indigo-900 dark:text-indigo-200",children:s})]})]})]})}const ge=64;function gs({open:a,onClose:x}){const{t}=R(),[m,s]=k.useState(""),[u,r]=k.useState(!1),[l,g]=k.useState(""),[b,h]=k.useState(!1),[v,d]=k.useState(!1),c=/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(m),N=l.trim().toLowerCase().replace(/\s+/g,"-"),j=N.length===0||N.length<=ge&&/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(N),y=m&&c?[`ccs auth create ${m}`,u?N.length>0?`--context-group ${N}`:"--share-context":"",u&&b?"--deeper-continuity":""].filter(Boolean).join(" "):t("createAuthProfileDialog.commandFallback"),n=async()=>{!c||u&&!j||(await navigator.clipboard.writeText(y),d(!0),setTimeout(()=>d(!1),2e3))},o=()=>{s(""),r(!1),g(""),h(!1),d(!1),x()};return e.jsx(q,{open:a,onOpenChange:i=>!i&&o(),children:e.jsxs(W,{className:"sm:max-w-md",children:[e.jsxs(Q,{children:[e.jsx(J,{children:t("createAuthProfileDialog.title")}),e.jsx(Y,{children:t("createAuthProfileDialog.description")})]}),e.jsxs("div",{className:"space-y-4 py-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(S,{htmlFor:"profile-name",children:t("createAuthProfileDialog.profileName")}),e.jsx(E,{id:"profile-name",value:m,onChange:i=>s(i.target.value),placeholder:t("createAuthProfileDialog.profileNamePlaceholder"),autoComplete:"off"}),m&&!c&&e.jsx("p",{className:"text-xs text-destructive",children:t("createAuthProfileDialog.invalidProfileName")})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ie,{id:"share-context",checked:u,onCheckedChange:i=>r(i===!0)}),e.jsx(S,{htmlFor:"share-context",className:"cursor-pointer",children:t("createAuthProfileDialog.enableSharedHistory")})]}),u&&e.jsxs("div",{className:"space-y-2 pl-6",children:[e.jsx(S,{htmlFor:"context-group",children:t("createAuthProfileDialog.historySyncGroupOptional")}),e.jsx(E,{id:"context-group",value:l,onChange:i=>g(i.target.value),placeholder:t("createAuthProfileDialog.historySyncGroupPlaceholder"),autoComplete:"off"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t("createAuthProfileDialog.historySyncGroupHint")}),e.jsxs("div",{className:"flex items-center gap-2 pt-1",children:[e.jsx(ie,{id:"deeper-continuity",checked:b,onCheckedChange:i=>h(i===!0)}),e.jsx(S,{htmlFor:"deeper-continuity",className:"cursor-pointer",children:t("createAuthProfileDialog.deeperContinuity")})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t("createAuthProfileDialog.deeperContinuityHint")}),l.trim().length>0&&!j&&e.jsx("p",{className:"text-xs text-destructive",children:t("createAuthProfileDialog.invalidContextGroup",{max:ge})})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(S,{children:t("createAuthProfileDialog.command")}),e.jsxs("div",{className:"flex items-center gap-2 p-3 bg-muted rounded-md font-mono text-sm",children:[e.jsx(ve,{className:"w-4 h-4 text-muted-foreground shrink-0"}),e.jsx("code",{className:"flex-1 break-all",children:y}),e.jsx(p,{variant:"ghost",size:"sm",className:"shrink-0 h-8 px-2",onClick:n,disabled:!c||u&&!j,children:v?e.jsx(V,{className:"w-4 h-4 text-green-500"}):e.jsx(oe,{className:"w-4 h-4"})})]})]}),e.jsxs("div",{className:"text-sm text-muted-foreground space-y-1",children:[e.jsx("p",{children:t("createAuthProfileDialog.afterRunPrefix")}),e.jsxs("ol",{className:"list-decimal list-inside pl-2 space-y-0.5",children:[e.jsx("li",{children:t("createAuthProfileDialog.afterRunStep1")}),e.jsx("li",{children:t("createAuthProfileDialog.afterRunStep2")})]}),e.jsx("p",{className:"pt-1",children:t("createAuthProfileDialog.poolingHint")})]}),e.jsxs("div",{className:"flex justify-end gap-2 pt-2",children:[e.jsx(p,{variant:"ghost",onClick:o,children:t("createAuthProfileDialog.close")}),e.jsx(p,{onClick:n,disabled:!c||u&&!j,children:v?e.jsxs(e.Fragment,{children:[e.jsx(V,{className:"w-4 h-4 mr-2"}),t("createAuthProfileDialog.copied")]}):e.jsxs(e.Fragment,{children:[e.jsx(oe,{className:"w-4 h-4 mr-2"}),t("createAuthProfileDialog.copyCommand")]})})]})]})]})})}function Ts(){const{t:a}=R(),x=Ae(),{data:t,isLoading:m}=ss(),s=ts(),[u,r]=k.useState(!1),l=t?.accounts||[],g=t?.cliproxyCount||0,b=t?.legacyContextCount||0,h=t?.legacyContinuityCount||0,v=t?.sharedCount||0,d=t?.sharedStandardCount||0,c=t?.deeperSharedCount||0,N=t?.isolatedCount||0,j=t?.sharedAloneCount||0,y=t?.sharedPeerAccountCount||0,n=t?.deeperReadyAccountCount||0,o=t?.sharedPeerGroups||[],i=t?.deeperReadyGroups||[],w=t?.sharedGroups||[],D=t?.groupSummaries||[],A=t?.plainCcsLane||null,$=l.filter(H=>H.context_inferred||H.continuity_inferred),T=$.length,U=T>0,f=()=>x("/cliproxy?provider=claude"),I=()=>x("/cliproxy?provider=claude&action=auth"),_=()=>s.mutate($);return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"hidden h-full min-h-0 lg:flex",children:[e.jsxs("div",{className:"w-80 border-r flex flex-col bg-muted/20 shrink-0",children:[e.jsxs("div",{className:"p-4 border-b bg-background space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(xs,{className:"h-5 w-5 text-primary"}),e.jsx("h1",{className:"font-semibold",children:a("accountsPage.title")})]}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:[a("accountsPage.managePrefix"),e.jsx("code",{className:"mx-1 rounded bg-muted px-1 py-0.5",children:"ccs auth"}),a("accountsPage.manageSuffix")]})]}),e.jsx(Be,{className:"flex-1",children:e.jsxs("div",{className:"p-4 space-y-3",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-[11px] font-medium uppercase tracking-wide text-muted-foreground",children:a("accountsPage.primaryActions")}),e.jsxs(p,{size:"sm",className:"w-full justify-start",onClick:()=>r(!0),children:[e.jsx(de,{className:"w-4 h-4 mr-2"}),a("accountsPage.createAccount")]}),e.jsxs(p,{size:"sm",className:"w-full justify-start",onClick:I,children:[e.jsx(le,{className:"w-4 h-4 mr-2"}),a("accountsPage.authClaudeInPool")]}),e.jsxs(p,{variant:"outline",size:"sm",className:"w-full justify-start",onClick:f,children:[a("accountsPage.openClaudePoolSettings"),e.jsx(B,{className:"w-4 h-4 ml-auto"})]})]}),U?e.jsxs("section",{className:"space-y-2",children:[e.jsx("p",{className:"text-[11px] font-medium uppercase tracking-wide text-muted-foreground",children:a("accountsPage.migrationFollowup")}),e.jsxs("div",{className:"rounded-md border border-amber-500/50 bg-amber-500/10 p-3 space-y-3",children:[e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(X,{className:"h-4 w-4 mt-0.5 text-amber-700 dark:text-amber-400 shrink-0"}),e.jsxs("div",{className:"space-y-1 text-xs",children:[b>0&&e.jsx("p",{className:"text-amber-800 dark:text-amber-300",children:a("accountsPage.legacyContextPending",{count:b})}),h>0&&e.jsx("p",{className:"text-amber-800 dark:text-amber-300",children:a("accountsPage.legacyContinuityPending",{count:h})})]})]}),e.jsx(p,{variant:"secondary",size:"sm",className:"w-full justify-start",onClick:_,disabled:s.isPending||T===0,children:s.isPending?a("accountsPage.confirmingLegacy"):a("accountsPage.confirmLegacy",{count:T})})]})]}):e.jsx("div",{className:"rounded-md border bg-background px-3 py-2 text-xs text-muted-foreground",children:a("accountsPage.noLegacyFollowup")}),e.jsxs(O,{children:[e.jsxs(M,{className:"pb-2",children:[e.jsx(z,{className:"text-sm",children:a("accountsPage.quickCommands")}),e.jsx(F,{children:a("accountsPage.quickCommandsDesc")})]}),e.jsxs(G,{className:"space-y-2",children:[e.jsxs("div",{className:"rounded-md border bg-background px-2 py-2 font-mono text-[11px] flex items-start gap-2",children:[e.jsx("span",{className:"flex-1 break-all",children:"ccs auth create work --share-context --context-group sprint-a --deeper-continuity"}),e.jsx(P,{value:"ccs auth create work --share-context --context-group sprint-a --deeper-continuity",size:"icon"})]}),e.jsxs("div",{className:"rounded-md border bg-background px-2 py-2 font-mono text-[11px] flex items-start gap-2",children:[e.jsx("span",{className:"flex-1 break-all",children:"ccs cliproxy auth claude"}),e.jsx(P,{value:"ccs cliproxy auth claude",size:"icon"})]})]})]})]})})]}),e.jsxs("div",{className:"flex-1 min-w-0 flex flex-col bg-background",children:[e.jsxs("div",{className:"px-5 py-4 border-b bg-background",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(C,{variant:"outline",children:a("accountsPage.workspaceBadge")}),e.jsx(C,{variant:"secondary",children:a("accountsPage.historySyncBadge")}),e.jsx(C,{variant:"secondary",children:a("accountsPage.resourcesBadge")})]}),e.jsx("h2",{className:"mt-2 text-xl font-semibold tracking-tight",children:a("accountsPage.authAccounts")}),e.jsxs("p",{className:"mt-1 text-sm text-muted-foreground",children:[a("accountsPage.tableScopePrefix"),e.jsx("code",{className:"mx-1 rounded bg-muted px-1 py-0.5",children:"ccs auth"}),a("accountsPage.tableScopeMiddle"),e.jsx("code",{className:"mx-1 rounded bg-muted px-1 py-0.5",children:a("accountsTable.sync")}),a("accountsPage.tableScopeSuffix")]})]}),e.jsxs("div",{className:"flex-1 min-h-0 p-5 space-y-4 overflow-y-auto",children:[e.jsx(he,{totalAccounts:l.length,primaryAccountName:l.length===1?l[0]?.name:null,isolatedCount:N,sharedStandardCount:d,deeperSharedCount:c,sharedAloneCount:j,sharedPeerAccountCount:y,deeperReadyAccountCount:n,sharedGroups:w,sharedPeerGroups:o,deeperReadyGroups:i,legacyTargetCount:T,cliproxyCount:g,plainCcsLane:A}),e.jsx(me,{totalAccounts:l.length,isolatedCount:N,sharedPeerGroups:o,deeperReadyGroups:i}),e.jsxs(O,{className:"flex flex-col",children:[e.jsxs(M,{className:"pb-3",children:[e.jsx(z,{className:"text-lg",children:a("accountsPage.accountMatrix")}),e.jsx(F,{children:a("accountsPage.sharedTotalDesc",{count:v})})]}),e.jsx(G,{children:m?e.jsx("div",{className:"text-muted-foreground",children:a("accountsPage.loadingAccounts")}):e.jsx(ue,{data:l,defaultAccount:t?.default??null,groupSummaries:D,plainCcsLane:A})})]})]})]})]}),e.jsxs("div",{className:"p-4 space-y-4 lg:hidden",children:[e.jsxs(O,{children:[e.jsxs(M,{children:[e.jsx(z,{className:"text-lg",children:a("accountsPage.title")}),e.jsxs(F,{children:[a("accountsPage.managePrefix"),e.jsx("code",{className:"mx-1 rounded bg-muted px-1 py-0.5",children:"ccs auth"}),a("accountsPage.mobileManageSuffix")]})]}),e.jsxs(G,{className:"space-y-2",children:[e.jsxs(p,{className:"w-full",onClick:()=>r(!0),children:[e.jsx(de,{className:"w-4 h-4 mr-2"}),a("accountsPage.createAccount")]}),e.jsxs(p,{variant:"outline",className:"w-full",onClick:f,children:[a("accountsPage.openCliProxyClaudePool"),e.jsx(B,{className:"w-4 h-4 ml-2"})]}),e.jsxs(p,{variant:"outline",className:"w-full",onClick:I,children:[a("accountsPage.authClaudeInPool"),e.jsx(le,{className:"w-4 h-4 ml-2"})]}),e.jsx(p,{variant:"outline",className:"w-full",onClick:_,disabled:s.isPending||T===0,children:s.isPending?a("accountsPage.confirmingLegacy"):a("accountsPage.confirmLegacy",{count:T})})]})]}),e.jsx(he,{totalAccounts:l.length,primaryAccountName:l.length===1?l[0]?.name:null,isolatedCount:N,sharedStandardCount:d,deeperSharedCount:c,sharedAloneCount:j,sharedPeerAccountCount:y,deeperReadyAccountCount:n,sharedGroups:w,sharedPeerGroups:o,deeperReadyGroups:i,legacyTargetCount:T,cliproxyCount:g,plainCcsLane:A}),e.jsx(me,{totalAccounts:l.length,isolatedCount:N,sharedPeerGroups:o,deeperReadyGroups:i}),e.jsxs(O,{children:[e.jsx(M,{className:"pb-3",children:e.jsx(z,{className:"text-base",children:a("accountsPage.accountMatrix")})}),e.jsx(G,{children:m?e.jsx("div",{className:"text-muted-foreground",children:a("accountsPage.loadingAccounts")}):e.jsx(ue,{data:l,defaultAccount:t?.default??null,groupSummaries:D,plainCcsLane:A})})]})]}),e.jsx(gs,{open:u,onClose:()=>r(!1)})]})}export{Ts as AccountsPage};