@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.
- package/dist/channels/official-channels-runtime.js +1 -1
- package/dist/channels/official-channels-runtime.js.map +1 -1
- package/dist/cliproxy/ai-providers/codex-reasoning-proxy.d.ts.map +1 -1
- package/dist/cliproxy/ai-providers/codex-reasoning-proxy.js +88 -11
- package/dist/cliproxy/ai-providers/codex-reasoning-proxy.js.map +1 -1
- package/dist/cliproxy/auth/auth-types.d.ts +2 -0
- package/dist/cliproxy/auth/auth-types.d.ts.map +1 -1
- package/dist/cliproxy/auth/oauth-handler.d.ts.map +1 -1
- package/dist/cliproxy/auth/oauth-handler.js +12 -6
- package/dist/cliproxy/auth/oauth-handler.js.map +1 -1
- package/dist/cliproxy/auth/oauth-trace/redactor.d.ts.map +1 -1
- package/dist/cliproxy/auth/oauth-trace/redactor.js +1 -0
- package/dist/cliproxy/auth/oauth-trace/redactor.js.map +1 -1
- package/dist/cliproxy/executor/claude-launcher.d.ts.map +1 -1
- package/dist/cliproxy/executor/claude-launcher.js +1 -3
- package/dist/cliproxy/executor/claude-launcher.js.map +1 -1
- package/dist/cliproxy/executor/session-bridge.d.ts +1 -16
- package/dist/cliproxy/executor/session-bridge.d.ts.map +1 -1
- package/dist/cliproxy/executor/session-bridge.js +2 -67
- package/dist/cliproxy/executor/session-bridge.js.map +1 -1
- package/dist/cliproxy/proxy/proxy-config-resolver.d.ts.map +1 -1
- package/dist/cliproxy/proxy/proxy-config-resolver.js +11 -1
- package/dist/cliproxy/proxy/proxy-config-resolver.js.map +1 -1
- package/dist/cliproxy/proxy/tool-sanitization-proxy.d.ts.map +1 -1
- package/dist/cliproxy/proxy/tool-sanitization-proxy.js +64 -8
- package/dist/cliproxy/proxy/tool-sanitization-proxy.js.map +1 -1
- package/dist/cliproxy/proxy/upstream-response-timeout.d.ts +14 -0
- package/dist/cliproxy/proxy/upstream-response-timeout.d.ts.map +1 -0
- package/dist/cliproxy/proxy/upstream-response-timeout.js +72 -0
- package/dist/cliproxy/proxy/upstream-response-timeout.js.map +1 -0
- package/dist/cliproxy/quota/quota-fetcher-codex.d.ts.map +1 -1
- package/dist/cliproxy/quota/quota-fetcher-codex.js +4 -1
- package/dist/cliproxy/quota/quota-fetcher-codex.js.map +1 -1
- package/dist/codex-auth/codex-config-symlink.js +21 -4
- package/dist/codex-auth/codex-config-symlink.js.map +1 -1
- package/dist/codex-auth/shell-detect.d.ts.map +1 -1
- package/dist/codex-auth/shell-detect.js +1 -39
- package/dist/codex-auth/shell-detect.js.map +1 -1
- package/dist/commands/config-channels-command.d.ts +1 -4
- package/dist/commands/config-channels-command.d.ts.map +1 -1
- package/dist/commands/config-channels-command.js +20 -24
- package/dist/commands/config-channels-command.js.map +1 -1
- package/dist/cursor/cursor-daemon-auth.d.ts +2 -0
- package/dist/cursor/cursor-daemon-auth.d.ts.map +1 -0
- package/dist/cursor/cursor-daemon-auth.js +49 -0
- package/dist/cursor/cursor-daemon-auth.js.map +1 -0
- package/dist/cursor/cursor-daemon-entry.d.ts.map +1 -1
- package/dist/cursor/cursor-daemon-entry.js +44 -0
- package/dist/cursor/cursor-daemon-entry.js.map +1 -1
- package/dist/cursor/cursor-daemon.d.ts +2 -1
- package/dist/cursor/cursor-daemon.d.ts.map +1 -1
- package/dist/cursor/cursor-daemon.js +21 -5
- package/dist/cursor/cursor-daemon.js.map +1 -1
- package/dist/cursor/cursor-models.d.ts.map +1 -1
- package/dist/cursor/cursor-models.js +2 -1
- package/dist/cursor/cursor-models.js.map +1 -1
- package/dist/cursor/cursor-profile-executor.d.ts +1 -1
- package/dist/cursor/cursor-profile-executor.d.ts.map +1 -1
- package/dist/cursor/cursor-profile-executor.js +7 -4
- package/dist/cursor/cursor-profile-executor.js.map +1 -1
- package/dist/cursor/cursor-runtime-probe.d.ts.map +1 -1
- package/dist/cursor/cursor-runtime-probe.js +4 -2
- package/dist/cursor/cursor-runtime-probe.js.map +1 -1
- package/dist/cursor/types.d.ts +1 -0
- package/dist/cursor/types.d.ts.map +1 -1
- package/dist/docker/docker-key-rotation.d.ts +2 -0
- package/dist/docker/docker-key-rotation.d.ts.map +1 -1
- package/dist/docker/docker-key-rotation.js +9 -1
- package/dist/docker/docker-key-rotation.js.map +1 -1
- package/dist/glmt/sse-parser.d.ts +1 -0
- package/dist/glmt/sse-parser.d.ts.map +1 -1
- package/dist/glmt/sse-parser.js +13 -1
- package/dist/glmt/sse-parser.js.map +1 -1
- package/dist/shared/claude-extension-setup.d.ts.map +1 -1
- package/dist/shared/claude-extension-setup.js +2 -1
- package/dist/shared/claude-extension-setup.js.map +1 -1
- package/dist/targets/codex-adapter.js +1 -1
- package/dist/targets/codex-adapter.js.map +1 -1
- package/dist/ui/assets/{Trans-dEd8UC39.js → Trans-BIQ-yfAc.js} +1 -1
- package/dist/ui/assets/accounts-bN7DnjXo.js +1 -0
- package/dist/ui/assets/{alert-dialog-Vurq1xzV.js → alert-dialog-D0yey0YJ.js} +1 -1
- package/dist/ui/assets/api-CEtMc2bM.js +4 -0
- package/dist/ui/assets/{auth-section-iGkrMaT4.js → auth-section-BHZUn2Hv.js} +1 -1
- package/dist/ui/assets/{backups-section-DUGG_4KP.js → backups-section-BNVlJSV3.js} +1 -1
- package/dist/ui/assets/{channels-CimlCc2d.js → channels-BOB1P4Kt.js} +1 -1
- package/dist/ui/assets/{checkbox-HiMHasEB.js → checkbox-Bt-F3GmI.js} +1 -1
- package/dist/ui/assets/claude-extension-AzKgsH0H.js +1 -0
- package/dist/ui/assets/cliproxy-C1liaQi8.js +4 -0
- package/dist/ui/assets/{cliproxy-ai-providers-2lI5jSHb.js → cliproxy-ai-providers-CzyaYfYI.js} +6 -6
- package/dist/ui/assets/cliproxy-control-panel-DmkEW68l.js +1 -0
- package/dist/ui/assets/codex-B2FLnjZI.js +30 -0
- package/dist/ui/assets/{confirm-dialog-B_6SrSxL.js → confirm-dialog-CYvBJC0z.js} +1 -1
- package/dist/ui/assets/{copilot-BgG5x_X6.js → copilot-Csab21fh.js} +2 -2
- package/dist/ui/assets/{cursor-DF63lFcy.js → cursor-fOpftodW.js} +1 -1
- package/dist/ui/assets/{droid-CqlQmFtN.js → droid-FIcjtOf-.js} +1 -1
- package/dist/ui/assets/{globalenv-section-CYNmD12i.js → globalenv-section-CpIAk36Y.js} +1 -1
- package/dist/ui/assets/{health-7ZO5PEm9.js → health-D0HvHNud.js} +1 -1
- package/dist/ui/assets/{index-D3kxCuJ7.js → index-BTPa3KEN.js} +1 -1
- package/dist/ui/assets/{index-BC5ssPfF.js → index-Cr4G276q.js} +1 -1
- package/dist/ui/assets/{index-CFu0saCM.js → index-D0VoBTF3.js} +1 -1
- package/dist/ui/assets/{index-Bgcd4FYK.js → index-D5G9mVmP.js} +1 -1
- package/dist/ui/assets/{index-hHb9o079.js → index-Dm_QojrJ.js} +1 -1
- package/dist/ui/assets/index-G3mgTfgR.css +1 -0
- package/dist/ui/assets/index-N35Xkk8N.js +1 -0
- package/dist/ui/assets/{index-DmV9wJET.js → index-sIfjKy42.js} +18 -18
- package/dist/ui/assets/{logs-Dy-yZhIK.js → logs-B33n-VaM.js} +1 -1
- package/dist/ui/assets/{masked-input-BSLeznEs.js → masked-input-BrUE6z_f.js} +1 -1
- package/dist/ui/assets/proxy-status-widget-Dm2ziI5D.js +1 -0
- package/dist/ui/assets/{raw-json-settings-editor-panel-Bs83yILR.js → raw-json-settings-editor-panel-DZRtQXbD.js} +1 -1
- package/dist/ui/assets/{searchable-select-pXUC_0Ih.js → searchable-select-D2smFEI5.js} +1 -1
- package/dist/ui/assets/{separator-FZR_61I9.js → separator-BvoSJCHW.js} +1 -1
- package/dist/ui/assets/{shared-BiIwM7--.js → shared-qKNFwLmT.js} +2 -2
- package/dist/ui/assets/{table-_9IusQ8G.js → table-DYyc1gJc.js} +1 -1
- package/dist/ui/assets/updates-XXi3TQNZ.js +1 -0
- package/dist/ui/assets/{use-accounts-BdtI0lBv.js → use-accounts-BR64_yUk.js} +1 -1
- package/dist/ui/index.html +2 -2
- package/dist/utils/browser/browser-settings.d.ts.map +1 -1
- package/dist/utils/browser/browser-settings.js +13 -3
- package/dist/utils/browser/browser-settings.js.map +1 -1
- package/dist/utils/claude-subcommand-detector.d.ts +5 -3
- package/dist/utils/claude-subcommand-detector.d.ts.map +1 -1
- package/dist/utils/claude-subcommand-detector.js +7 -3
- package/dist/utils/claude-subcommand-detector.js.map +1 -1
- package/dist/utils/glmt-deprecation.d.ts.map +1 -1
- package/dist/utils/glmt-deprecation.js +1 -3
- package/dist/utils/glmt-deprecation.js.map +1 -1
- package/dist/web-server/index.d.ts.map +1 -1
- package/dist/web-server/index.js +0 -9
- package/dist/web-server/index.js.map +1 -1
- package/dist/web-server/middleware/auth-middleware.d.ts.map +1 -1
- package/dist/web-server/middleware/auth-middleware.js +26 -4
- package/dist/web-server/middleware/auth-middleware.js.map +1 -1
- package/dist/web-server/models-dev/pricing-resolver.d.ts.map +1 -1
- package/dist/web-server/models-dev/pricing-resolver.js +7 -0
- package/dist/web-server/models-dev/pricing-resolver.js.map +1 -1
- package/dist/web-server/models-dev/registry-cache.d.ts.map +1 -1
- package/dist/web-server/models-dev/registry-cache.js +14 -4
- package/dist/web-server/models-dev/registry-cache.js.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts +10 -0
- package/dist/web-server/routes/cliproxy-auth-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-auth-routes.js +45 -13
- package/dist/web-server/routes/cliproxy-auth-routes.js.map +1 -1
- package/dist/web-server/routes/cliproxy-local-proxy.d.ts.map +1 -1
- package/dist/web-server/routes/cliproxy-local-proxy.js +25 -8
- package/dist/web-server/routes/cliproxy-local-proxy.js.map +1 -1
- package/dist/web-server/routes/cursor-routes.d.ts.map +1 -1
- package/dist/web-server/routes/cursor-routes.js +6 -1
- package/dist/web-server/routes/cursor-routes.js.map +1 -1
- package/dist/web-server/routes/image-analysis-routes.d.ts.map +1 -1
- package/dist/web-server/routes/image-analysis-routes.js +7 -0
- package/dist/web-server/routes/image-analysis-routes.js.map +1 -1
- package/dist/web-server/routes/proxy-routes.d.ts.map +1 -1
- package/dist/web-server/routes/proxy-routes.js +1 -1
- package/dist/web-server/routes/proxy-routes.js.map +1 -1
- package/dist/web-server/routes/settings-routes.d.ts.map +1 -1
- package/dist/web-server/routes/settings-routes.js +10 -1
- package/dist/web-server/routes/settings-routes.js.map +1 -1
- package/dist/web-server/services/claude-extension-settings-service.d.ts.map +1 -1
- package/dist/web-server/services/claude-extension-settings-service.js +5 -1
- package/dist/web-server/services/claude-extension-settings-service.js.map +1 -1
- package/dist/web-server/usage/sqlite-cli.d.ts +25 -1
- package/dist/web-server/usage/sqlite-cli.d.ts.map +1 -1
- package/dist/web-server/usage/sqlite-cli.js +127 -3
- package/dist/web-server/usage/sqlite-cli.js.map +1 -1
- package/lib/mcp/ccs-browser-server.cjs +24 -13
- package/package.json +1 -1
- package/scripts/github/stable-release-issue-cleanup-lib.mjs +113 -0
- package/scripts/github/stable-release-issue-cleanup.mjs +134 -0
- package/dist/ui/assets/accounts-B2THsSu_.js +0 -1
- package/dist/ui/assets/api-CjLfG9mL.js +0 -4
- package/dist/ui/assets/claude-extension-B2v9bsN9.js +0 -1
- package/dist/ui/assets/cliproxy-control-panel-63gDI-e5.js +0 -1
- package/dist/ui/assets/cliproxy-fai69Vyd.js +0 -4
- package/dist/ui/assets/codex-i_hfI4Tv.js +0 -30
- package/dist/ui/assets/index-BMoGhs28.css +0 -1
- package/dist/ui/assets/index-CqsmdQoA.js +0 -1
- package/dist/ui/assets/proxy-status-widget-hRH1agF9.js +0 -1
- 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
|
-
|
|
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(
|
|
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;
|
|
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
|
|
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
|
-
|
|
5101
|
-
|
|
5102
|
-
|
|
5103
|
-
|
|
5104
|
-
|
|
5105
|
-
|
|
5106
|
-
|
|
5107
|
-
|
|
5108
|
-
|
|
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
|
@@ -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};
|