@kaitranntt/ccs 8.8.1-dev.21 → 8.8.1-dev.22
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/auth/auth-commands.js +3 -3
- package/dist/auth/auth-commands.js.map +1 -1
- package/dist/config/schemas/auth.d.ts +2 -2
- package/dist/config/schemas/auth.d.ts.map +1 -1
- package/dist/management/instance-directory.d.ts +19 -0
- package/dist/management/instance-directory.d.ts.map +1 -1
- package/dist/management/instance-directory.js +130 -7
- package/dist/management/instance-directory.js.map +1 -1
- package/dist/management/instance-manager.d.ts +2 -5
- package/dist/management/instance-manager.d.ts.map +1 -1
- package/dist/management/instance-manager.js +26 -27
- package/dist/management/instance-manager.js.map +1 -1
- package/dist/management/shared-manager/canonical-first-file-claims.d.ts +6 -0
- package/dist/management/shared-manager/canonical-first-file-claims.d.ts.map +1 -0
- package/dist/management/shared-manager/canonical-first-file-claims.js +143 -0
- package/dist/management/shared-manager/canonical-first-file-claims.js.map +1 -0
- package/dist/management/shared-manager/canonical-first-file-reconciler.d.ts +15 -0
- package/dist/management/shared-manager/canonical-first-file-reconciler.d.ts.map +1 -0
- package/dist/management/shared-manager/canonical-first-file-reconciler.js +131 -0
- package/dist/management/shared-manager/canonical-first-file-reconciler.js.map +1 -0
- package/dist/management/shared-manager/plugin-layout-internals.d.ts +1 -1
- package/dist/management/shared-manager/plugin-layout-internals.d.ts.map +1 -1
- package/dist/management/shared-manager/plugin-layout-internals.js +25 -9
- package/dist/management/shared-manager/plugin-layout-internals.js.map +1 -1
- package/dist/management/shared-manager/shared-dir-linker.d.ts +1 -1
- package/dist/management/shared-manager/shared-dir-linker.d.ts.map +1 -1
- package/dist/management/shared-manager/shared-dir-linker.js +140 -107
- package/dist/management/shared-manager/shared-dir-linker.js.map +1 -1
- package/dist/management/shared-manager/types.d.ts +12 -1
- package/dist/management/shared-manager/types.d.ts.map +1 -1
- package/dist/management/shared-manager/types.js +12 -1
- package/dist/management/shared-manager/types.js.map +1 -1
- package/dist/types/config.d.ts +2 -2
- package/dist/types/config.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -105,7 +105,7 @@ class AuthCommands {
|
|
|
105
105
|
console.log(` ${(0, ui_1.color)('--share-context', 'command')} Share project workspace context across accounts`);
|
|
106
106
|
console.log(` ${(0, ui_1.color)('--context-group <name>', 'command')} Share context only within a named group`);
|
|
107
107
|
console.log(` ${(0, ui_1.color)('--deeper-continuity', 'command')} Advanced shared mode: sync additional continuity artifacts`);
|
|
108
|
-
console.log(` ${(0, ui_1.color)('--bare', 'command')} Create clean profile without shared
|
|
108
|
+
console.log(` ${(0, ui_1.color)('--bare', 'command')} Create clean profile without shared settings/instructions/resources`);
|
|
109
109
|
console.log(` ${(0, ui_1.color)('--mode <mode>', 'command')} Shared resource mode for resources: shared|profile-local`);
|
|
110
110
|
console.log(` ${(0, ui_1.color)('--yes, -y', 'command')} Skip confirmation prompts (remove)`);
|
|
111
111
|
console.log(` ${(0, ui_1.color)('--json', 'command')} Output in JSON format (list, show)`);
|
|
@@ -116,8 +116,8 @@ class AuthCommands {
|
|
|
116
116
|
console.log(` Recommended two-account route: create ${(0, ui_1.color)('work', 'command')} and ${(0, ui_1.color)('personal', 'command')}, then run the profile you want.`);
|
|
117
117
|
console.log(` Use ${(0, ui_1.color)('ccs auth default <profile>', 'command')} to change the default profile.`);
|
|
118
118
|
console.log(` Account logins, tokens, and .anthropic stay isolated for every profile.`);
|
|
119
|
-
console.log(` Non-bare account profiles share
|
|
120
|
-
console.log(` Shared Resources control plugins/commands/skills/agents/settings.json; History Sync controls project/session continuity only.`);
|
|
119
|
+
console.log(` Non-bare account profiles share ${(0, ui_1.color)('settings.json', 'path')} and ${(0, ui_1.color)('CLAUDE.md', 'path')} from ${(0, ui_1.color)('~/.claude/', 'path')}; ${(0, ui_1.color)('ccs auth show <profile>', 'command')} shows resource mode and settings link state.`);
|
|
120
|
+
console.log(` Shared Resources control plugins/commands/skills/agents/settings.json/CLAUDE.md; History Sync controls project/session continuity only.`);
|
|
121
121
|
console.log(` History sync is opt-in: both accounts need shared mode and the same ${(0, ui_1.color)('context_group', 'path')}.`);
|
|
122
122
|
console.log(` ${(0, ui_1.color)('--deeper-continuity', 'command')} requires shared mode and syncs session-env/file-history/todos/shell-snapshots.`);
|
|
123
123
|
console.log(` To make future plain ${(0, ui_1.color)('ccs', 'command')} resume with an account, set ${(0, ui_1.color)('ccs auth default <profile>', 'command')}; back up the current native lane first with ${(0, ui_1.color)('ccs auth backup default', 'command')}.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-commands.js","sourceRoot":"","sources":["../../src/auth/auth-commands.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"auth-commands.js","sourceRoot":"","sources":["../../src/auth/auth-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,9 +25,9 @@ export interface AccountConfig {
|
|
|
25
25
|
context_group?: string;
|
|
26
26
|
/** Shared continuity depth when context_mode='shared' */
|
|
27
27
|
continuity_mode?: 'standard' | 'deeper';
|
|
28
|
-
/** Account-level shared resource behavior for plugins, commands, skills, agents,
|
|
28
|
+
/** Account-level shared resource behavior for plugins, commands, skills, agents, settings.json, and CLAUDE.md */
|
|
29
29
|
shared_resource_mode?: 'shared' | 'profile-local';
|
|
30
|
-
/** Bare profile: no shared symlinks (commands, skills, agents, settings.json) */
|
|
30
|
+
/** Bare profile: no shared symlinks (commands, skills, agents, settings.json, CLAUDE.md) */
|
|
31
31
|
bare?: boolean;
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/config/schemas/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE/D;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;IACrC,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,eAAe,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;IACxC,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/config/schemas/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE/D;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;IACrC,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yDAAyD;IACzD,eAAe,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;IACxC,iHAAiH;IACjH,oBAAoB,CAAC,EAAE,QAAQ,GAAG,eAAe,CAAC;IAClD,4FAA4F;IAC5F,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,IAAI,EAAE,KAAK,CAAC;IACZ,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,uDAAuD;IACvD,OAAO,EAAE,OAAO,CAAC;IACjB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,aAAa,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;GAGG;AACH,eAAO,MAAM,6BAA6B,EAAE,mBAK3C,CAAC"}
|
|
@@ -1,4 +1,23 @@
|
|
|
1
1
|
export declare function isAccountInstanceName(name: string): boolean;
|
|
2
|
+
export declare function normalizeAccountInstanceName(name: string): string;
|
|
3
|
+
export interface DirectoryIdentity {
|
|
4
|
+
device: number;
|
|
5
|
+
inode: number;
|
|
6
|
+
realPath: string;
|
|
7
|
+
}
|
|
8
|
+
/** Reject symlink roots/entries and require the real instance path to stay under the real root. */
|
|
9
|
+
export declare function isSafeAccountInstancePath(instancesDir: string, instancePath: string): boolean;
|
|
10
|
+
/** Create a missing managed instances root without traversing symlink parents. */
|
|
11
|
+
export declare function ensureSafeAccountInstancesDirectory(instancesDir: string): void;
|
|
12
|
+
export declare function assertSafeAccountInstancePath(instancesDir: string, instancePath: string): void;
|
|
13
|
+
/**
|
|
14
|
+
* Capture the validated directory identity used by later mutation guards.
|
|
15
|
+
* This is defense-in-depth for static and ordinary concurrent replacement,
|
|
16
|
+
* not a hostile same-UID race boundary; that would require dirfd/openat-style APIs.
|
|
17
|
+
*/
|
|
18
|
+
export declare function captureSafeAccountInstanceIdentity(instancesDir: string, instancePath: string): DirectoryIdentity;
|
|
19
|
+
/** Require the lexical instance path to still name the validated directory. */
|
|
20
|
+
export declare function assertAccountInstanceIdentity(instancesDir: string, instancePath: string, expectedIdentity: DirectoryIdentity): void;
|
|
2
21
|
export declare function listAccountInstanceNames(instancesDir: string): string[];
|
|
3
22
|
export declare function listAccountInstancePaths(instancesDir: string): string[];
|
|
4
23
|
//# sourceMappingURL=instance-directory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance-directory.d.ts","sourceRoot":"","sources":["../../src/management/instance-directory.ts"],"names":[],"mappings":"AAGA,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"instance-directory.d.ts","sourceRoot":"","sources":["../../src/management/instance-directory.ts"],"names":[],"mappings":"AAGA,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjE;AAQD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAgDD,mGAAmG;AACnG,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAc7F;AAED,kFAAkF;AAClF,wBAAgB,mCAAmC,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAwB9E;AAED,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAE9F;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAChD,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,iBAAiB,CAKnB;AAED,+EAA+E;AAC/E,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,iBAAiB,GAClC,IAAI,CAWN;AAED,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAYvE;AAED,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAEvE"}
|
|
@@ -23,13 +23,141 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.listAccountInstancePaths = exports.listAccountInstanceNames = exports.isAccountInstanceName = void 0;
|
|
26
|
+
exports.listAccountInstancePaths = exports.listAccountInstanceNames = exports.assertAccountInstanceIdentity = exports.captureSafeAccountInstanceIdentity = exports.assertSafeAccountInstancePath = exports.ensureSafeAccountInstancesDirectory = exports.isSafeAccountInstancePath = exports.normalizeAccountInstanceName = exports.isAccountInstanceName = void 0;
|
|
27
27
|
const fs = __importStar(require("fs"));
|
|
28
28
|
const path = __importStar(require("path"));
|
|
29
29
|
function isAccountInstanceName(name) {
|
|
30
30
|
return !name.startsWith('.');
|
|
31
31
|
}
|
|
32
32
|
exports.isAccountInstanceName = isAccountInstanceName;
|
|
33
|
+
function normalizeAccountInstanceName(name) {
|
|
34
|
+
return name.replace(/[^a-zA-Z0-9_-]/g, '-').toLowerCase();
|
|
35
|
+
}
|
|
36
|
+
exports.normalizeAccountInstanceName = normalizeAccountInstanceName;
|
|
37
|
+
function unsafeInstancePath(targetPath) {
|
|
38
|
+
throw Object.assign(new TypeError(`Unsafe account instance path: ${targetPath}`), {
|
|
39
|
+
code: 'EINVAL',
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function readDirectoryIdentity(directoryPath) {
|
|
43
|
+
const stats = fs.lstatSync(directoryPath);
|
|
44
|
+
if (stats.isSymbolicLink() || !stats.isDirectory())
|
|
45
|
+
unsafeInstancePath(directoryPath);
|
|
46
|
+
return {
|
|
47
|
+
device: stats.dev,
|
|
48
|
+
inode: stats.ino,
|
|
49
|
+
realPath: fs.realpathSync.native(directoryPath),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function identitiesMatch(left, right) {
|
|
53
|
+
return (left.device === right.device && left.inode === right.inode && left.realPath === right.realPath);
|
|
54
|
+
}
|
|
55
|
+
function createDirectoryUnderStableParent(directoryPath) {
|
|
56
|
+
const parentPath = path.dirname(directoryPath);
|
|
57
|
+
const parentBefore = readDirectoryIdentity(parentPath);
|
|
58
|
+
try {
|
|
59
|
+
fs.mkdirSync(directoryPath, { mode: 0o700 });
|
|
60
|
+
readDirectoryIdentity(directoryPath);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
if (error.code !== 'EEXIST')
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
let parentAfter;
|
|
67
|
+
try {
|
|
68
|
+
parentAfter = readDirectoryIdentity(parentPath);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
unsafeInstancePath(parentPath);
|
|
72
|
+
}
|
|
73
|
+
if (!identitiesMatch(parentBefore, parentAfter)) {
|
|
74
|
+
unsafeInstancePath(parentPath);
|
|
75
|
+
}
|
|
76
|
+
readDirectoryIdentity(directoryPath);
|
|
77
|
+
}
|
|
78
|
+
function isPathWithinDirectory(candidatePath, directoryPath) {
|
|
79
|
+
const relative = path.relative(directoryPath, candidatePath);
|
|
80
|
+
return relative.length > 0 && relative !== '..' && !relative.startsWith(`..${path.sep}`);
|
|
81
|
+
}
|
|
82
|
+
/** Reject symlink roots/entries and require the real instance path to stay under the real root. */
|
|
83
|
+
function isSafeAccountInstancePath(instancesDir, instancePath) {
|
|
84
|
+
try {
|
|
85
|
+
const rootStats = fs.lstatSync(instancesDir);
|
|
86
|
+
if (rootStats.isSymbolicLink() || !rootStats.isDirectory())
|
|
87
|
+
return false;
|
|
88
|
+
const instanceStats = fs.lstatSync(instancePath);
|
|
89
|
+
if (instanceStats.isSymbolicLink() || !instanceStats.isDirectory())
|
|
90
|
+
return false;
|
|
91
|
+
const realRoot = fs.realpathSync.native(instancesDir);
|
|
92
|
+
const realInstance = fs.realpathSync.native(instancePath);
|
|
93
|
+
return isPathWithinDirectory(realInstance, realRoot);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.isSafeAccountInstancePath = isSafeAccountInstancePath;
|
|
100
|
+
/** Create a missing managed instances root without traversing symlink parents. */
|
|
101
|
+
function ensureSafeAccountInstancesDirectory(instancesDir) {
|
|
102
|
+
const missingPaths = [];
|
|
103
|
+
let currentPath = instancesDir;
|
|
104
|
+
while (true) {
|
|
105
|
+
try {
|
|
106
|
+
const stats = fs.lstatSync(currentPath);
|
|
107
|
+
if (stats.isSymbolicLink() || !stats.isDirectory())
|
|
108
|
+
unsafeInstancePath(currentPath);
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
if (error.code !== 'ENOENT')
|
|
113
|
+
throw error;
|
|
114
|
+
missingPaths.push(currentPath);
|
|
115
|
+
const parentPath = path.dirname(currentPath);
|
|
116
|
+
if (parentPath === currentPath)
|
|
117
|
+
unsafeInstancePath(instancesDir);
|
|
118
|
+
currentPath = parentPath;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
for (const directoryPath of missingPaths.reverse()) {
|
|
122
|
+
createDirectoryUnderStableParent(directoryPath);
|
|
123
|
+
}
|
|
124
|
+
const rootStats = fs.lstatSync(instancesDir);
|
|
125
|
+
if (rootStats.isSymbolicLink() || !rootStats.isDirectory())
|
|
126
|
+
unsafeInstancePath(instancesDir);
|
|
127
|
+
}
|
|
128
|
+
exports.ensureSafeAccountInstancesDirectory = ensureSafeAccountInstancesDirectory;
|
|
129
|
+
function assertSafeAccountInstancePath(instancesDir, instancePath) {
|
|
130
|
+
if (!isSafeAccountInstancePath(instancesDir, instancePath))
|
|
131
|
+
unsafeInstancePath(instancePath);
|
|
132
|
+
}
|
|
133
|
+
exports.assertSafeAccountInstancePath = assertSafeAccountInstancePath;
|
|
134
|
+
/**
|
|
135
|
+
* Capture the validated directory identity used by later mutation guards.
|
|
136
|
+
* This is defense-in-depth for static and ordinary concurrent replacement,
|
|
137
|
+
* not a hostile same-UID race boundary; that would require dirfd/openat-style APIs.
|
|
138
|
+
*/
|
|
139
|
+
function captureSafeAccountInstanceIdentity(instancesDir, instancePath) {
|
|
140
|
+
assertSafeAccountInstancePath(instancesDir, instancePath);
|
|
141
|
+
const identity = readDirectoryIdentity(instancePath);
|
|
142
|
+
assertAccountInstanceIdentity(instancesDir, instancePath, identity);
|
|
143
|
+
return identity;
|
|
144
|
+
}
|
|
145
|
+
exports.captureSafeAccountInstanceIdentity = captureSafeAccountInstanceIdentity;
|
|
146
|
+
/** Require the lexical instance path to still name the validated directory. */
|
|
147
|
+
function assertAccountInstanceIdentity(instancesDir, instancePath, expectedIdentity) {
|
|
148
|
+
if (!isSafeAccountInstancePath(instancesDir, instancePath))
|
|
149
|
+
unsafeInstancePath(instancePath);
|
|
150
|
+
let currentIdentity;
|
|
151
|
+
try {
|
|
152
|
+
currentIdentity = readDirectoryIdentity(instancePath);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
unsafeInstancePath(instancePath);
|
|
156
|
+
}
|
|
157
|
+
if (!identitiesMatch(expectedIdentity, currentIdentity))
|
|
158
|
+
unsafeInstancePath(instancePath);
|
|
159
|
+
}
|
|
160
|
+
exports.assertAccountInstanceIdentity = assertAccountInstanceIdentity;
|
|
33
161
|
function listAccountInstanceNames(instancesDir) {
|
|
34
162
|
if (!fs.existsSync(instancesDir)) {
|
|
35
163
|
return [];
|
|
@@ -38,12 +166,7 @@ function listAccountInstanceNames(instancesDir) {
|
|
|
38
166
|
if (!isAccountInstanceName(name)) {
|
|
39
167
|
return false;
|
|
40
168
|
}
|
|
41
|
-
|
|
42
|
-
return fs.statSync(path.join(instancesDir, name)).isDirectory();
|
|
43
|
-
}
|
|
44
|
-
catch {
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
169
|
+
return isSafeAccountInstancePath(instancesDir, path.join(instancesDir, name));
|
|
47
170
|
});
|
|
48
171
|
}
|
|
49
172
|
exports.listAccountInstanceNames = listAccountInstanceNames;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance-directory.js","sourceRoot":"","sources":["../../src/management/instance-directory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B,SAAgB,qBAAqB,CAAC,IAAY;IAChD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAFD,sDAEC;AAED,SAAgB,
|
|
1
|
+
{"version":3,"file":"instance-directory.js","sourceRoot":"","sources":["../../src/management/instance-directory.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import type { AccountContextPolicy } from '../auth/account-context';
|
|
9
9
|
/** Options for instance creation */
|
|
10
10
|
export interface InstanceOptions {
|
|
11
|
-
/** Skip shared symlinks (commands, skills, agents, settings.json) */
|
|
11
|
+
/** Skip shared symlinks (commands, skills, agents, settings.json, CLAUDE.md) */
|
|
12
12
|
bare?: boolean;
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
@@ -53,10 +53,7 @@ declare class InstanceManager {
|
|
|
53
53
|
* Selectively copies only mcpServers key (not OAuth sessions or caches).
|
|
54
54
|
*/
|
|
55
55
|
syncMcpServers(instancePath: string): boolean;
|
|
56
|
-
|
|
57
|
-
* Sanitize profile name for filesystem
|
|
58
|
-
*/
|
|
59
|
-
private sanitizeName;
|
|
56
|
+
private getInstanceStats;
|
|
60
57
|
}
|
|
61
58
|
export { InstanceManager };
|
|
62
59
|
export default InstanceManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance-manager.d.ts","sourceRoot":"","sources":["../../src/management/instance-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"instance-manager.d.ts","sourceRoot":"","sources":["../../src/management/instance-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAgBpE,oCAAoC;AACpC,MAAM,WAAW,eAAe;IAC9B,gFAAgF;IAChF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,cAAM,eAAe;IACnB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyB;IACzD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyB;;IAS1D;;OAEG;IACG,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,aAAa,GAAE,oBAA6D,EAC5E,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC;IAkDlB;;OAEG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAK5C;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBxD;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAIzB;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAKzC;;;OAGG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IA+D7C,OAAO,CAAC,gBAAgB;CAQzB;AAED,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,eAAe,eAAe,CAAC"}
|
|
@@ -42,6 +42,7 @@ const account_context_1 = require("../auth/account-context");
|
|
|
42
42
|
const config_manager_1 = require("../utils/config-manager");
|
|
43
43
|
const logging_1 = require("../services/logging");
|
|
44
44
|
const config_loader_facade_1 = require("../config/config-loader-facade");
|
|
45
|
+
const error_types_1 = require("../errors/error-types");
|
|
45
46
|
const instance_directory_1 = require("./instance-directory");
|
|
46
47
|
const logger = (0, logging_1.createLogger)('management:instance-manager');
|
|
47
48
|
const MANAGED_MCP_SERVER_NAMES = new Set(['ccs-websearch', 'ccs-image-analysis', 'ccs-browser']);
|
|
@@ -60,16 +61,26 @@ class InstanceManager {
|
|
|
60
61
|
*/
|
|
61
62
|
async ensureInstance(profileName, contextPolicy = { mode: account_context_1.DEFAULT_ACCOUNT_CONTEXT_MODE }, options = {}) {
|
|
62
63
|
const instancePath = this.getInstancePath(profileName);
|
|
64
|
+
const initialInstanceStats = this.getInstanceStats(instancePath);
|
|
65
|
+
if (initialInstanceStats) {
|
|
66
|
+
(0, instance_directory_1.assertSafeAccountInstancePath)(this.instancesDir, instancePath);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
(0, instance_directory_1.ensureSafeAccountInstancesDirectory)(this.instancesDir);
|
|
70
|
+
}
|
|
63
71
|
// Serialize context sync operations per profile across processes.
|
|
64
72
|
await this.contextSyncLock.withLock(profileName, async () => {
|
|
65
73
|
// Lazy initialization
|
|
66
|
-
if (!
|
|
74
|
+
if (!this.getInstanceStats(instancePath)) {
|
|
75
|
+
(0, instance_directory_1.ensureSafeAccountInstancesDirectory)(this.instancesDir);
|
|
67
76
|
logger.stage('route', 'instance.init', 'Initializing new profile instance', {
|
|
68
77
|
profile: profileName,
|
|
69
78
|
bare: options.bare === true,
|
|
70
79
|
});
|
|
71
80
|
this.initializeInstance(profileName, instancePath, options);
|
|
72
81
|
}
|
|
82
|
+
// Re-check after locking/creation before any operation can mutate the instance.
|
|
83
|
+
(0, instance_directory_1.assertSafeAccountInstancePath)(this.instancesDir, instancePath);
|
|
73
84
|
// Validate structure (auto-fix missing dirs)
|
|
74
85
|
this.validateInstance(instancePath);
|
|
75
86
|
// Apply context policy (isolated by default, optional shared group).
|
|
@@ -94,7 +105,7 @@ class InstanceManager {
|
|
|
94
105
|
* Get instance path for profile
|
|
95
106
|
*/
|
|
96
107
|
getInstancePath(profileName) {
|
|
97
|
-
const safeName =
|
|
108
|
+
const safeName = (0, instance_directory_1.normalizeAccountInstanceName)(profileName);
|
|
98
109
|
return path.join(this.instancesDir, safeName);
|
|
99
110
|
}
|
|
100
111
|
/**
|
|
@@ -103,27 +114,12 @@ class InstanceManager {
|
|
|
103
114
|
initializeInstance(profileName, instancePath, _options = {}) {
|
|
104
115
|
try {
|
|
105
116
|
// Create base directory
|
|
106
|
-
fs.mkdirSync(instancePath, {
|
|
107
|
-
//
|
|
108
|
-
|
|
109
|
-
'session-env',
|
|
110
|
-
'todos',
|
|
111
|
-
'logs',
|
|
112
|
-
'file-history',
|
|
113
|
-
'shell-snapshots',
|
|
114
|
-
'debug',
|
|
115
|
-
'.anthropic',
|
|
116
|
-
];
|
|
117
|
-
subdirs.forEach((dir) => {
|
|
118
|
-
const dirPath = path.join(instancePath, dir);
|
|
119
|
-
if (!fs.existsSync(dirPath)) {
|
|
120
|
-
fs.mkdirSync(dirPath, { recursive: true, mode: 0o700 });
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
// Shared links are created during ensureInstance() under the plugin layout lock.
|
|
117
|
+
fs.mkdirSync(instancePath, { mode: 0o700 });
|
|
118
|
+
// Expected subdirectories and shared links are created only after the
|
|
119
|
+
// caller validates that this new root stayed inside the managed parent.
|
|
124
120
|
}
|
|
125
121
|
catch (error) {
|
|
126
|
-
throw new
|
|
122
|
+
throw new error_types_1.ProfileError(`Failed to initialize instance for ${profileName}: ${error.message}`, profileName);
|
|
127
123
|
}
|
|
128
124
|
}
|
|
129
125
|
/**
|
|
@@ -241,12 +237,15 @@ class InstanceManager {
|
|
|
241
237
|
return false;
|
|
242
238
|
}
|
|
243
239
|
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
240
|
+
getInstanceStats(instancePath) {
|
|
241
|
+
try {
|
|
242
|
+
return fs.lstatSync(instancePath);
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
if (error.code === 'ENOENT')
|
|
246
|
+
return null;
|
|
247
|
+
throw error;
|
|
248
|
+
}
|
|
250
249
|
}
|
|
251
250
|
}
|
|
252
251
|
exports.InstanceManager = InstanceManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance-manager.js","sourceRoot":"","sources":["../../src/management/instance-manager.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,sEAA6C;AAC7C,4FAAiE;AACjE,6DAAuE;AAEvE,4DAAqD;AACrD,iDAAmD;AACnD,yEAA2D;AAC3D,
|
|
1
|
+
{"version":3,"file":"instance-manager.js","sourceRoot":"","sources":["../../src/management/instance-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
export declare function readRegularFileContent(filePath: string): Buffer | null;
|
|
4
|
+
export declare function recoverInterruptedClaims(filePath: string): void;
|
|
5
|
+
export declare function claimCanonicalFirstCopy(filePath: string, canonicalContent: Buffer | null, reason: string): boolean;
|
|
6
|
+
//# sourceMappingURL=canonical-first-file-claims.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical-first-file-claims.d.ts","sourceRoot":"","sources":["../../../src/management/shared-manager/canonical-first-file-claims.ts"],"names":[],"mappings":";;AAQA,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGtE;AAmED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAa/D;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,GAAG,IAAI,EAC/B,MAAM,EAAE,MAAM,GACb,OAAO,CAyBT"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.claimCanonicalFirstCopy = exports.recoverInterruptedClaims = exports.readRegularFileContent = void 0;
|
|
27
|
+
const fs = __importStar(require("fs"));
|
|
28
|
+
const path = __importStar(require("path"));
|
|
29
|
+
const ui_1 = require("../../utils/ui");
|
|
30
|
+
const fs_helpers_1 = require("./fs-helpers");
|
|
31
|
+
let claimSequence = 0;
|
|
32
|
+
function readRegularFileContent(filePath) {
|
|
33
|
+
const stats = (0, fs_helpers_1.getLstatSync)(filePath);
|
|
34
|
+
return stats?.isFile() ? fs.readFileSync(filePath) : null;
|
|
35
|
+
}
|
|
36
|
+
exports.readRegularFileContent = readRegularFileContent;
|
|
37
|
+
function preserveClaim(filePath, claimPath, reason) {
|
|
38
|
+
const basePath = `${filePath}.ccs-shared-conflict`;
|
|
39
|
+
let sequence = 0;
|
|
40
|
+
while (true) {
|
|
41
|
+
const recoveryPath = sequence === 0 ? basePath : `${basePath}-${sequence}`;
|
|
42
|
+
try {
|
|
43
|
+
fs.linkSync(claimPath, recoveryPath);
|
|
44
|
+
try {
|
|
45
|
+
fs.unlinkSync(claimPath);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Both names preserve the same inode, so leaving the claim is safe.
|
|
49
|
+
}
|
|
50
|
+
console.log((0, ui_1.warn)(`${reason}; preserved content at ${recoveryPath}`));
|
|
51
|
+
return recoveryPath;
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
const code = err.code;
|
|
55
|
+
if (code === 'EEXIST') {
|
|
56
|
+
sequence++;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
fs.copyFileSync(claimPath, recoveryPath, fs.constants.COPYFILE_EXCL);
|
|
61
|
+
fs.chmodSync(recoveryPath, fs.statSync(claimPath).mode & 0o777);
|
|
62
|
+
fs.unlinkSync(claimPath);
|
|
63
|
+
console.log((0, ui_1.warn)(`${reason}; copied content to ${recoveryPath} (${code ?? 'link failed'})`));
|
|
64
|
+
return recoveryPath;
|
|
65
|
+
}
|
|
66
|
+
catch (copyError) {
|
|
67
|
+
if (copyError.code === 'EEXIST') {
|
|
68
|
+
sequence++;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (!(0, fs_helpers_1.getLstatSync)(filePath)) {
|
|
72
|
+
try {
|
|
73
|
+
fs.renameSync(claimPath, filePath);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// The claim remains the only recoverable copy if restoration loses a race.
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
console.log((0, ui_1.warn)(`${reason}; unable to publish recovery, restored original when possible`));
|
|
80
|
+
throw err;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function interruptedClaimPaths(filePath) {
|
|
86
|
+
const directory = path.dirname(filePath);
|
|
87
|
+
const prefix = `${path.basename(filePath)}.ccs-shared-claim-`;
|
|
88
|
+
try {
|
|
89
|
+
return fs
|
|
90
|
+
.readdirSync(directory)
|
|
91
|
+
.filter((entry) => entry.startsWith(prefix))
|
|
92
|
+
.map((entry) => path.join(directory, entry))
|
|
93
|
+
.filter((entryPath) => fs.lstatSync(entryPath).isFile())
|
|
94
|
+
.sort();
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
if (err.code === 'ENOENT')
|
|
98
|
+
return [];
|
|
99
|
+
throw err;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function recoverInterruptedClaims(filePath) {
|
|
103
|
+
const claims = interruptedClaimPaths(filePath);
|
|
104
|
+
if (claims.length === 0)
|
|
105
|
+
return;
|
|
106
|
+
if (claims.length === 1 && !(0, fs_helpers_1.getLstatSync)(filePath)) {
|
|
107
|
+
fs.renameSync(claims[0], filePath);
|
|
108
|
+
console.log((0, ui_1.warn)(`Recovered interrupted shared-file claim at ${filePath}`));
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
for (const claimPath of claims) {
|
|
112
|
+
preserveClaim(filePath, claimPath, `Quarantined interrupted shared-file claim for ${filePath}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.recoverInterruptedClaims = recoverInterruptedClaims;
|
|
116
|
+
function claimCanonicalFirstCopy(filePath, canonicalContent, reason) {
|
|
117
|
+
const initialStats = (0, fs_helpers_1.getLstatSync)(filePath);
|
|
118
|
+
if (!initialStats?.isFile())
|
|
119
|
+
return false;
|
|
120
|
+
const claimPath = `${filePath}.ccs-shared-claim-${process.pid}-${Date.now()}-${claimSequence++}`;
|
|
121
|
+
fs.renameSync(filePath, claimPath);
|
|
122
|
+
if ((0, fs_helpers_1.getLstatSync)(filePath)) {
|
|
123
|
+
preserveClaim(filePath, claimPath, `Concurrent replacement detected at ${filePath}`);
|
|
124
|
+
throw Object.assign(new TypeError(`Concurrent replacement detected at ${filePath}`), {
|
|
125
|
+
code: 'EEXIST',
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
const claimedContent = fs.readFileSync(claimPath);
|
|
129
|
+
if (canonicalContent?.equals(claimedContent)) {
|
|
130
|
+
fs.unlinkSync(claimPath);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
preserveClaim(filePath, claimPath, reason);
|
|
134
|
+
}
|
|
135
|
+
if ((0, fs_helpers_1.getLstatSync)(filePath)) {
|
|
136
|
+
throw Object.assign(new TypeError(`Path reappeared during reconciliation: ${filePath}`), {
|
|
137
|
+
code: 'EEXIST',
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
exports.claimCanonicalFirstCopy = claimCanonicalFirstCopy;
|
|
143
|
+
//# sourceMappingURL=canonical-first-file-claims.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical-first-file-claims.js","sourceRoot":"","sources":["../../../src/management/shared-manager/canonical-first-file-claims.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B,uCAAsC;AACtC,6CAA4C;AAE5C,IAAI,aAAa,GAAG,CAAC,CAAC;AAEtB,SAAgB,sBAAsB,CAAC,QAAgB;IACrD,MAAM,KAAK,GAAG,IAAA,yBAAY,EAAC,QAAQ,CAAC,CAAC;IACrC,OAAO,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,CAAC;AAHD,wDAGC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,SAAiB,EAAE,MAAc;IACxE,MAAM,QAAQ,GAAG,GAAG,QAAQ,sBAAsB,CAAC;IACnD,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,YAAY,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAC3E,IAAI,CAAC;YACH,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YACrC,IAAI,CAAC;gBACH,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,oEAAoE;YACtE,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,GAAG,MAAM,0BAA0B,YAAY,EAAE,CAAC,CAAC,CAAC;YACrE,OAAO,YAAY,CAAC;QACtB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;YACjD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,QAAQ,EAAE,CAAC;gBACX,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;gBACrE,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;gBAChE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBACzB,OAAO,CAAC,GAAG,CACT,IAAA,SAAI,EAAC,GAAG,MAAM,uBAAuB,YAAY,KAAK,IAAI,IAAI,aAAa,GAAG,CAAC,CAChF,CAAC;gBACF,OAAO,YAAY,CAAC;YACtB,CAAC;YAAC,OAAO,SAAS,EAAE,CAAC;gBACnB,IAAK,SAAmC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC3D,QAAQ,EAAE,CAAC;oBACX,SAAS;gBACX,CAAC;gBAED,IAAI,CAAC,IAAA,yBAAY,EAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,IAAI,CAAC;wBACH,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;oBACrC,CAAC;oBAAC,MAAM,CAAC;wBACP,2EAA2E;oBAC7E,CAAC;gBACH,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,GAAG,MAAM,+DAA+D,CAAC,CAAC,CAAC;gBAC5F,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC9D,IAAI,CAAC;QACH,OAAO,EAAE;aACN,WAAW,CAAC,SAAS,CAAC;aACtB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;aAC3C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;aAC3C,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;aACvD,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAChE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAgB,wBAAwB,CAAC,QAAgB;IACvD,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEhC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAA,yBAAY,EAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,IAAA,SAAI,EAAC,8CAA8C,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;QAC/B,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,iDAAiD,QAAQ,EAAE,CAAC,CAAC;IAClG,CAAC;AACH,CAAC;AAbD,4DAaC;AAED,SAAgB,uBAAuB,CACrC,QAAgB,EAChB,gBAA+B,EAC/B,MAAc;IAEd,MAAM,YAAY,GAAG,IAAA,yBAAY,EAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE;QAAE,OAAO,KAAK,CAAC;IAE1C,MAAM,SAAS,GAAG,GAAG,QAAQ,qBAAqB,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,aAAa,EAAE,EAAE,CAAC;IACjG,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACnC,IAAI,IAAA,yBAAY,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,sCAAsC,QAAQ,EAAE,CAAC,CAAC;QACrF,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,sCAAsC,QAAQ,EAAE,CAAC,EAAE;YACnF,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC;IAED,MAAM,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAClD,IAAI,gBAAgB,EAAE,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7C,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,IAAA,yBAAY,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,0CAA0C,QAAQ,EAAE,CAAC,EAAE;YACvF,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AA7BD,0DA6BC"}
|