@kodrunhq/claudefy 1.5.2 → 1.6.0
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/backup-manager/backup-manager.d.ts +8 -0
- package/dist/backup-manager/backup-manager.js +39 -1
- package/dist/backup-manager/backup-manager.js.map +1 -1
- package/dist/claude-json-sync/claude-json-sync.js +6 -6
- package/dist/claude-json-sync/claude-json-sync.js.map +1 -1
- package/dist/cli.js +37 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/diff.js +2 -11
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.js +8 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/join.js +1 -1
- package/dist/commands/join.js.map +1 -1
- package/dist/commands/pull.d.ts +6 -0
- package/dist/commands/pull.js +123 -66
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.d.ts +1 -0
- package/dist/commands/push.js +90 -64
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/rotate-passphrase.js +40 -30
- package/dist/commands/rotate-passphrase.js.map +1 -1
- package/dist/config/config-manager.d.ts +1 -0
- package/dist/config/config-manager.js +69 -5
- package/dist/config/config-manager.js.map +1 -1
- package/dist/diff-utils/diff-utils.d.ts +5 -0
- package/dist/diff-utils/diff-utils.js +13 -0
- package/dist/diff-utils/diff-utils.js.map +1 -1
- package/dist/encryptor/encryptor.d.ts +2 -2
- package/dist/encryptor/encryptor.js +29 -8
- package/dist/encryptor/encryptor.js.map +1 -1
- package/dist/encryptor/file-encryptor.js +6 -0
- package/dist/encryptor/file-encryptor.js.map +1 -1
- package/dist/encryptor/line-encryptor.js +8 -2
- package/dist/encryptor/line-encryptor.js.map +1 -1
- package/dist/encryptor/passphrase.js +12 -4
- package/dist/encryptor/passphrase.js.map +1 -1
- package/dist/git-adapter/git-adapter.d.ts +2 -0
- package/dist/git-adapter/git-adapter.js +13 -5
- package/dist/git-adapter/git-adapter.js.map +1 -1
- package/dist/hook-manager/hook-manager.js +12 -1
- package/dist/hook-manager/hook-manager.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lockfile/lockfile.d.ts +3 -1
- package/dist/lockfile/lockfile.js +29 -14
- package/dist/lockfile/lockfile.js.map +1 -1
- package/dist/logger.js +14 -1
- package/dist/logger.js.map +1 -1
- package/dist/machine-registry/machine-registry.d.ts +6 -0
- package/dist/machine-registry/machine-registry.js +26 -18
- package/dist/machine-registry/machine-registry.js.map +1 -1
- package/dist/merger/merger.js +2 -1
- package/dist/merger/merger.js.map +1 -1
- package/dist/output.d.ts +6 -0
- package/dist/output.js +23 -0
- package/dist/output.js.map +1 -1
- package/dist/secret-scanner/scanner.js +15 -2
- package/dist/secret-scanner/scanner.js.map +1 -1
- package/dist/sync-filter/sync-filter.js +19 -10
- package/dist/sync-filter/sync-filter.js.map +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/update-check.js +4 -4
- package/dist/update-check.js.map +1 -1
- package/package.json +1 -1
- package/dist/commands/logs.d.ts +0 -9
- package/dist/commands/logs.js +0 -32
- package/dist/commands/logs.js.map +0 -1
- package/dist/lockfile.d.ts +0 -22
- package/dist/lockfile.js +0 -119
- package/dist/lockfile.js.map +0 -1
package/dist/commands/pull.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { cp, mkdir, readdir, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
2
2
|
import { join, relative, resolve } from "node:path";
|
|
3
3
|
import { existsSync } from "node:fs";
|
|
4
|
-
import chalk from "chalk";
|
|
5
4
|
import { simpleGit } from "simple-git";
|
|
6
5
|
import { ConfigManager } from "../config/config-manager.js";
|
|
7
6
|
import { GitAdapter } from "../git-adapter/git-adapter.js";
|
|
@@ -13,6 +12,16 @@ import { output } from "../output.js";
|
|
|
13
12
|
import { STORE_CONFIG_DIR, STORE_UNKNOWN_DIR } from "../config/defaults.js";
|
|
14
13
|
import { Lockfile } from "../lockfile/lockfile.js";
|
|
15
14
|
import { ClaudeJsonSync } from "../claude-json-sync/claude-json-sync.js";
|
|
15
|
+
// Keys stripped from ALL settings.json files (top-level and per-project) during pull.
|
|
16
|
+
// Per CLAUDE.md spec: prevent remote code injection via hooks/mcpServers/env/permissions.
|
|
17
|
+
const DANGEROUS_KEYS = [
|
|
18
|
+
"hooks",
|
|
19
|
+
"mcpServers",
|
|
20
|
+
"env",
|
|
21
|
+
"permissions",
|
|
22
|
+
"allowedTools",
|
|
23
|
+
"apiKeyHelper",
|
|
24
|
+
];
|
|
16
25
|
export class PullCommand {
|
|
17
26
|
homeDir;
|
|
18
27
|
claudeDir;
|
|
@@ -68,62 +77,7 @@ export class PullCommand {
|
|
|
68
77
|
const resolvedClaudeDir = resolve(this.claudeDir);
|
|
69
78
|
// Dry-run: show what would be pulled without modifying anything
|
|
70
79
|
if (options.dryRun) {
|
|
71
|
-
|
|
72
|
-
const { computeDiff } = await import("../diff-utils/diff-utils.js");
|
|
73
|
-
const { cp, rm: rmTmp, mkdir: mkTmp } = await import("node:fs/promises");
|
|
74
|
-
const tmpStore = join(claudefyDir, ".dryrun-store-tmp");
|
|
75
|
-
const tmpLocal = join(claudefyDir, ".dryrun-local-tmp");
|
|
76
|
-
if (existsSync(tmpStore))
|
|
77
|
-
await rmTmp(tmpStore, { recursive: true, force: true });
|
|
78
|
-
if (existsSync(tmpLocal))
|
|
79
|
-
await rmTmp(tmpLocal, { recursive: true, force: true });
|
|
80
|
-
await mkTmp(tmpStore, { recursive: true });
|
|
81
|
-
await mkTmp(tmpLocal, { recursive: true });
|
|
82
|
-
try {
|
|
83
|
-
// Copy store config, stripping .age extensions
|
|
84
|
-
if (existsSync(storeConfigDir)) {
|
|
85
|
-
await cp(storeConfigDir, tmpStore, { recursive: true });
|
|
86
|
-
await this.stripAgeExtensionsForDryRun(tmpStore);
|
|
87
|
-
}
|
|
88
|
-
// Copy allowlisted local files
|
|
89
|
-
if (existsSync(this.claudeDir)) {
|
|
90
|
-
const syncFilterConfig = await this.configManager.getSyncFilter();
|
|
91
|
-
const { SyncFilter } = await import("../sync-filter/sync-filter.js");
|
|
92
|
-
const syncFilter = new SyncFilter(syncFilterConfig);
|
|
93
|
-
const classification = await syncFilter.classify(this.claudeDir);
|
|
94
|
-
const filteredAllowlist = options.only
|
|
95
|
-
? classification.allowlist.filter((i) => i.name === options.only)
|
|
96
|
-
: classification.allowlist;
|
|
97
|
-
for (const item of filteredAllowlist) {
|
|
98
|
-
const src = join(this.claudeDir, item.name);
|
|
99
|
-
if (existsSync(src))
|
|
100
|
-
await cp(src, join(tmpLocal, item.name), { recursive: true });
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
const diff = await computeDiff(tmpStore, tmpLocal);
|
|
104
|
-
if (!diff.hasChanges) {
|
|
105
|
-
if (!options.quiet)
|
|
106
|
-
output.info("Dry run: no pull changes detected.");
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
if (!options.quiet) {
|
|
110
|
-
output.heading("Dry run — pull would change:");
|
|
111
|
-
for (const f of diff.added)
|
|
112
|
-
console.log(chalk.green(` Added: ${f}`));
|
|
113
|
-
for (const f of diff.modified)
|
|
114
|
-
console.log(chalk.yellow(` Modified: ${f}`));
|
|
115
|
-
for (const f of diff.deleted)
|
|
116
|
-
console.log(chalk.red(` Deleted: ${f}`));
|
|
117
|
-
}
|
|
118
|
-
process.exitCode = 1;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
finally {
|
|
122
|
-
if (existsSync(tmpStore))
|
|
123
|
-
await rmTmp(tmpStore, { recursive: true, force: true });
|
|
124
|
-
if (existsSync(tmpLocal))
|
|
125
|
-
await rmTmp(tmpLocal, { recursive: true, force: true });
|
|
126
|
-
}
|
|
80
|
+
await this.executePullDryRun(options, storePath, claudefyDir, result);
|
|
127
81
|
return result;
|
|
128
82
|
}
|
|
129
83
|
// 2. Check for override marker (check on main branch where overrides are written)
|
|
@@ -279,6 +233,8 @@ export class PullCommand {
|
|
|
279
233
|
}
|
|
280
234
|
}
|
|
281
235
|
}
|
|
236
|
+
// Security: strip DANGEROUS_KEYS from all project-level settings.json files
|
|
237
|
+
await this.stripDangerousKeysFromProjects(projectsDir);
|
|
282
238
|
if (interruptedSignal)
|
|
283
239
|
break;
|
|
284
240
|
// 7. Merge and copy to ~/.claude
|
|
@@ -297,14 +253,6 @@ export class PullCommand {
|
|
|
297
253
|
});
|
|
298
254
|
}
|
|
299
255
|
// Security: strip keys that can execute code or modify permissions
|
|
300
|
-
const DANGEROUS_KEYS = [
|
|
301
|
-
"hooks",
|
|
302
|
-
"mcpServers",
|
|
303
|
-
"env",
|
|
304
|
-
"permissions",
|
|
305
|
-
"allowedTools",
|
|
306
|
-
"apiKeyHelper",
|
|
307
|
-
];
|
|
308
256
|
if (remoteSettings && typeof remoteSettings === "object") {
|
|
309
257
|
for (const key of DANGEROUS_KEYS) {
|
|
310
258
|
if (key in remoteSettings) {
|
|
@@ -338,6 +286,8 @@ export class PullCommand {
|
|
|
338
286
|
for (const entry of entries) {
|
|
339
287
|
if (entry.name === "settings.json")
|
|
340
288
|
continue; // Already handled
|
|
289
|
+
if (entry.name === "claude-json-sync.json")
|
|
290
|
+
continue; // Internal store artifact
|
|
341
291
|
if (options.only && entry.name !== options.only)
|
|
342
292
|
continue;
|
|
343
293
|
// Security: skip symlinks to prevent path traversal attacks
|
|
@@ -444,7 +394,14 @@ export class PullCommand {
|
|
|
444
394
|
// Use git show to read .override from main without switching branches
|
|
445
395
|
const content = await git.show(["main:.override"]);
|
|
446
396
|
const marker = JSON.parse(content);
|
|
447
|
-
|
|
397
|
+
if (marker !== null &&
|
|
398
|
+
typeof marker === "object" &&
|
|
399
|
+
typeof marker["machine"] === "string" &&
|
|
400
|
+
typeof marker["timestamp"] === "string") {
|
|
401
|
+
const m = marker;
|
|
402
|
+
return { machine: m["machine"], timestamp: m["timestamp"] };
|
|
403
|
+
}
|
|
404
|
+
return null;
|
|
448
405
|
}
|
|
449
406
|
catch {
|
|
450
407
|
return null;
|
|
@@ -486,6 +443,69 @@ export class PullCommand {
|
|
|
486
443
|
}
|
|
487
444
|
}
|
|
488
445
|
}
|
|
446
|
+
async executePullDryRun(options, storePath, claudefyDir, result) {
|
|
447
|
+
const storeConfigDir = join(storePath, STORE_CONFIG_DIR);
|
|
448
|
+
const storeUnknownDir = join(storePath, STORE_UNKNOWN_DIR);
|
|
449
|
+
const { computeDiff, printDiffLines } = await import("../diff-utils/diff-utils.js");
|
|
450
|
+
const tmpStore = join(claudefyDir, ".dryrun-store-tmp");
|
|
451
|
+
const tmpLocal = join(claudefyDir, ".dryrun-local-tmp");
|
|
452
|
+
if (existsSync(tmpStore))
|
|
453
|
+
await rm(tmpStore, { recursive: true, force: true });
|
|
454
|
+
if (existsSync(tmpLocal))
|
|
455
|
+
await rm(tmpLocal, { recursive: true, force: true });
|
|
456
|
+
await mkdir(tmpStore, { recursive: true });
|
|
457
|
+
await mkdir(tmpLocal, { recursive: true });
|
|
458
|
+
try {
|
|
459
|
+
// Copy store config, stripping .age extensions
|
|
460
|
+
if (existsSync(storeConfigDir)) {
|
|
461
|
+
await cp(storeConfigDir, tmpStore, { recursive: true });
|
|
462
|
+
await this.stripAgeExtensionsForDryRun(tmpStore);
|
|
463
|
+
}
|
|
464
|
+
// Also include unknown items — copy at root level to match real pull behavior
|
|
465
|
+
// (real pull writes unknown items to ~/.claude/<name>, not ~/.claude/unknown/<name>)
|
|
466
|
+
if (existsSync(storeUnknownDir)) {
|
|
467
|
+
const unknownEntries = await readdir(storeUnknownDir, { withFileTypes: true });
|
|
468
|
+
for (const entry of unknownEntries) {
|
|
469
|
+
const src = join(storeUnknownDir, entry.name);
|
|
470
|
+
await cp(src, join(tmpStore, entry.name), { recursive: true });
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
// Copy allowlisted local files
|
|
474
|
+
if (existsSync(this.claudeDir)) {
|
|
475
|
+
const syncFilterConfig = await this.configManager.getSyncFilter();
|
|
476
|
+
const { SyncFilter } = await import("../sync-filter/sync-filter.js");
|
|
477
|
+
const syncFilter = new SyncFilter(syncFilterConfig);
|
|
478
|
+
const classification = await syncFilter.classify(this.claudeDir);
|
|
479
|
+
const filteredAllowlist = options.only
|
|
480
|
+
? classification.allowlist.filter((i) => i.name === options.only)
|
|
481
|
+
: classification.allowlist;
|
|
482
|
+
for (const item of filteredAllowlist) {
|
|
483
|
+
const src = join(this.claudeDir, item.name);
|
|
484
|
+
if (existsSync(src))
|
|
485
|
+
await cp(src, join(tmpLocal, item.name), { recursive: true });
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
const diff = await computeDiff(tmpStore, tmpLocal);
|
|
489
|
+
if (!diff.hasChanges) {
|
|
490
|
+
if (!options.quiet)
|
|
491
|
+
output.info("Dry run: no pull changes detected.");
|
|
492
|
+
}
|
|
493
|
+
else {
|
|
494
|
+
if (!options.quiet) {
|
|
495
|
+
output.heading("Dry run — pull would change:");
|
|
496
|
+
printDiffLines(diff);
|
|
497
|
+
}
|
|
498
|
+
process.exitCode = 1;
|
|
499
|
+
}
|
|
500
|
+
void result; // result is returned by the caller
|
|
501
|
+
}
|
|
502
|
+
finally {
|
|
503
|
+
if (existsSync(tmpStore))
|
|
504
|
+
await rm(tmpStore, { recursive: true, force: true });
|
|
505
|
+
if (existsSync(tmpLocal))
|
|
506
|
+
await rm(tmpLocal, { recursive: true, force: true });
|
|
507
|
+
}
|
|
508
|
+
}
|
|
489
509
|
async stripAgeExtensionsForDryRun(dir) {
|
|
490
510
|
if (!existsSync(dir))
|
|
491
511
|
return;
|
|
@@ -503,5 +523,42 @@ export class PullCommand {
|
|
|
503
523
|
}
|
|
504
524
|
}
|
|
505
525
|
}
|
|
526
|
+
/**
|
|
527
|
+
* Recursively strip DANGEROUS_KEYS from settings.json files inside projects/ subdirectories.
|
|
528
|
+
* This prevents per-project settings from injecting hooks/mcpServers from a remote attacker.
|
|
529
|
+
*/
|
|
530
|
+
async stripDangerousKeysFromProjects(projectsDir) {
|
|
531
|
+
if (!existsSync(projectsDir))
|
|
532
|
+
return;
|
|
533
|
+
const projectDirs = await readdir(projectsDir, { withFileTypes: true });
|
|
534
|
+
for (const entry of projectDirs) {
|
|
535
|
+
if (!entry.isDirectory())
|
|
536
|
+
continue;
|
|
537
|
+
const settingsPath = join(projectsDir, entry.name, "settings.json");
|
|
538
|
+
if (!existsSync(settingsPath))
|
|
539
|
+
continue;
|
|
540
|
+
let parsed;
|
|
541
|
+
try {
|
|
542
|
+
parsed = JSON.parse(await readFile(settingsPath, "utf-8"));
|
|
543
|
+
}
|
|
544
|
+
catch {
|
|
545
|
+
continue; // Malformed JSON — skip silently
|
|
546
|
+
}
|
|
547
|
+
// Only strip keys from plain objects — skip arrays, strings, numbers, null
|
|
548
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed))
|
|
549
|
+
continue;
|
|
550
|
+
const settings = parsed;
|
|
551
|
+
let changed = false;
|
|
552
|
+
for (const key of DANGEROUS_KEYS) {
|
|
553
|
+
if (key in settings) {
|
|
554
|
+
delete settings[key];
|
|
555
|
+
changed = true;
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
if (changed) {
|
|
559
|
+
await writeFile(settingsPath, JSON.stringify(settings, null, 2));
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
}
|
|
506
563
|
}
|
|
507
564
|
//# sourceMappingURL=pull.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAkBzE,sFAAsF;AACtF,0FAA0F;AAC1F,MAAM,cAAc,GAAG;IACrB,OAAO;IACP,YAAY;IACZ,KAAK;IACL,aAAa;IACb,cAAc;IACd,cAAc;CACN,CAAC;AAEX,MAAM,OAAO,WAAW;IACd,OAAO,CAAS;IAChB,SAAS,CAAS;IAClB,aAAa,CAAgB;IAErC,YAAY,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAoB;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;QAE3B,MAAM,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;QAE/C,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACvE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,GAAG,GAAG,oDAAoD,CAAC;YACjE,MAAM,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YACD,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QACtD,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,MAAM,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YACrC,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,OAAoB,EACpB,WAAmB,EACnB,GAAuB;QAEvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAe,EAAE,gBAAgB,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QACxE,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,gBAAgB,EAAE,CAAC;QACtC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,MAAM,GAAG,GAAG,oDAAoD,MAAM,EAAE,CAAC;YACzE,MAAM,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAElD,gEAAgE;QAChE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;YACtE,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,kFAAkF;QAClF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAC5D,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC/B,MAAM,GAAG,EAAE,GAAG,CACZ,MAAM,EACN,MAAM,EACN,mCAAmC,QAAQ,CAAC,OAAO,OAAO,QAAQ,CAAC,SAAS,EAAE,CAC/E,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,mCAAmC,QAAQ,CAAC,OAAO,OAAO,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;YAC9F,CAAC;YAED,6EAA6E;YAC7E,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/B,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;gBACrD,MAAM,CAAC,UAAU,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YACvF,CAAC;YAED,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,MAAM,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,sBAAsB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YAC5E,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACxC,MAAM,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YACzD,CAAC;YAED,gEAAgE;YAChE,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;YACjC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;YAEpC,iEAAiE;YACjE,qDAAqD;YACrD,MAAM,UAAU,CAAC,oBAAoB,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;YACvC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;gBACtB,MAAM,SAAS,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAED,mCAAmC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC9C,IAAI,UAAU,CAAC,MAAM,CAAC;YAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzC,IAAI,iBAAiB,GAAkB,IAAI,CAAC;QAE5C,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,EAAE;YAClC,iBAAiB,GAAG,MAAM,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjF,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAExC,IAAI,CAAC;YACH,+EAA+E;YAC/E,GAAG,CAAC;gBACF,4BAA4B;gBAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;gBACzD,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;gBAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAC9C,IAAI,UAAU,CAAC,cAAc,CAAC;oBAAE,MAAM,EAAE,CAAC,cAAc,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5F,IAAI,UAAU,CAAC,eAAe,CAAC;oBAC7B,MAAM,EAAE,CAAC,eAAe,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAEhE,6DAA6D;gBAC7D,uEAAuE;gBACvE,MAAM,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;gBAC9C,MAAM,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;gBAE/C,IAAI,iBAAiB;oBAAE,MAAM;gBAE7B,wCAAwC;gBACxC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;gBAC/E,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;oBACzD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;wBACxB,MAAM,IAAI,KAAK,CACb,iIAAiI,CAClI,CAAC;oBACJ,CAAC;oBACD,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBACxE,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;wBAC7B,MAAM,SAAS,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;oBACjD,CAAC;oBACD,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;wBAC9B,MAAM,SAAS,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;oBAClD,CAAC;gBACH,CAAC;gBAED,IAAI,iBAAiB;oBAAE,MAAM;gBAE7B,kDAAkD;gBAClD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;gBAClD,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;gBAEzC,gBAAgB;gBAChB,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;gBAC/D,IAAI,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;oBACnC,IAAI,QAAiC,CAAC;oBACtC,IAAI,CAAC;wBACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,CAAC;oBACrE,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,MAAM,IAAI,KAAK,CAAC,kCAAmC,GAAa,CAAC,OAAO,EAAE,EAAE;4BAC1E,KAAK,EAAE,GAAG;yBACX,CAAC,CAAC;oBACL,CAAC;oBACD,MAAM,QAAQ,GAAG,UAAU,CAAC,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;oBACzE,MAAM,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzE,CAAC;gBAED,yBAAyB;gBACzB,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,wBAAwB,CAAC,CAAC;gBAChF,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;oBAChC,IAAI,OAAgB,CAAC;oBACrB,IAAI,CAAC;wBACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;oBACjE,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,MAAM,IAAI,KAAK,CACb,mDAAoD,GAAa,CAAC,OAAO,EAAE,EAC3E,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;oBACJ,CAAC;oBACD,MAAM,QAAQ,GAAG,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;oBACtE,MAAM,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtE,CAAC;gBAED,0BAA0B;gBAC1B,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAC;gBAClF,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACjC,IAAI,EAAW,CAAC;oBAChB,IAAI,CAAC;wBACH,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;oBAC7D,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,MAAM,IAAI,KAAK,CACb,oDAAqD,GAAa,CAAC,OAAO,EAAE,EAC5E,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;oBACJ,CAAC;oBACD,MAAM,QAAQ,GAAG,UAAU,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;oBACjE,MAAM,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACvE,CAAC;gBAED,gBAAgB;gBAChB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;gBACxD,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC5B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;oBACrD,MAAM,QAAQ,GACZ,OAAO;yBACJ,KAAK,CAAC,IAAI,CAAC;yBACX,MAAM,CAAC,OAAO,CAAC;yBACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;yBAC9C,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;oBACvB,MAAM,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;gBACzC,CAAC;gBAED,oDAAoD;gBACpD,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;gBACnD,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC5B,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;oBAC/C,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;wBAClC,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;wBACnD,IAAI,SAAS,EAAE,CAAC;4BACd,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;4BACvD,8DAA8D;4BAC9D,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,CAAC;4BACrD,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gCACvE,MAAM,CAAC,IAAI,CACT,8BAA8B,OAAO,SAAS,SAAS,oCAAoC,CAC5F,CAAC;gCACF,SAAS;4BACX,CAAC;4BACD,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;wBACrD,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,4EAA4E;gBAC5E,MAAM,IAAI,CAAC,8BAA8B,CAAC,WAAW,CAAC,CAAC;gBAEvD,IAAI,iBAAiB;oBAAE,MAAM;gBAE7B,iCAAiC;gBACjC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC5B,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAEjD,mDAAmD;gBACnD,IAAI,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,eAAe,CAAC,EAAE,CAAC;oBAC1F,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;oBAChE,IAAI,cAAuC,CAAC;oBAC5C,IAAI,CAAC;wBACH,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC,CAAC;oBAC3E,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,MAAM,IAAI,KAAK,CAAC,yCAA0C,GAAa,CAAC,OAAO,EAAE,EAAE;4BACjF,KAAK,EAAE,GAAG;yBACX,CAAC,CAAC;oBACL,CAAC;oBAED,mEAAmE;oBACnE,IAAI,cAAc,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;wBACzD,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;4BACjC,IAAI,GAAG,IAAI,cAAc,EAAE,CAAC;gCAC1B,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;4BAC7B,CAAC;wBACH,CAAC;oBACH,CAAC;oBAED,IAAI,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;wBAC9D,IAAI,aAAsC,CAAC;wBAC3C,IAAI,CAAC;4BACH,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC;wBACzE,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACb,MAAM,IAAI,KAAK,CAAC,wCAAyC,GAAa,CAAC,OAAO,EAAE,EAAE;gCAChF,KAAK,EAAE,GAAG;6BACX,CAAC,CAAC;wBACL,CAAC;wBACD,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;wBACnE,MAAM,SAAS,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oBACtE,CAAC;yBAAM,CAAC;wBACN,MAAM,SAAS,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC9E,CAAC;oBACD,MAAM,CAAC,YAAY,EAAE,CAAC;gBACxB,CAAC;gBAED,IAAI,iBAAiB;oBAAE,MAAM;gBAE7B,4DAA4D;gBAC5D,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC7B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;oBACrE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;wBAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe;4BAAE,SAAS,CAAC,kBAAkB;wBAChE,IAAI,KAAK,CAAC,IAAI,KAAK,uBAAuB;4BAAE,SAAS,CAAC,0BAA0B;wBAChF,IAAI,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI;4BAAE,SAAS;wBAE1D,4DAA4D;wBAC5D,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;4BAC3B,MAAM,CAAC,IAAI,CAAC,qCAAqC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;4BAC/D,SAAS;wBACX,CAAC;wBAED,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;wBAEvD,+DAA+D;wBAC/D,MAAM,OAAO,GAAG,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;wBAClD,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,iBAAiB,EAAE,CAAC;4BACpE,MAAM,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,IAAI,qCAAqC,CAAC,CAAC;4BAC1E,SAAS;wBACX,CAAC;wBAED,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;wBACtD,MAAM,CAAC,YAAY,EAAE,CAAC;oBACxB,CAAC;gBACH,CAAC;gBAED,IAAI,iBAAiB;oBAAE,MAAM;gBAE7B,8BAA8B;gBAC9B,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;oBAC9B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;oBACtE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;wBAC5B,IAAI,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI;4BAAE,SAAS;wBAE1D,4DAA4D;wBAC5D,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;4BAC3B,MAAM,CAAC,IAAI,CAAC,sCAAsC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;4BAChE,SAAS;wBACX,CAAC;wBAED,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;wBAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;wBAEvD,+DAA+D;wBAC/D,MAAM,OAAO,GAAG,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;wBAClD,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,iBAAiB,EAAE,CAAC;4BACpE,MAAM,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,IAAI,qCAAqC,CAAC,CAAC;4BAC1E,SAAS;wBACX,CAAC;wBAED,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;wBACtD,MAAM,CAAC,YAAY,EAAE,CAAC;oBACxB,CAAC;gBACH,CAAC;gBACD,+CAA+C;gBAC/C,IAAI,CAAC,iBAAiB,IAAI,MAAM,CAAC,UAAU,EAAE,IAAI,KAAK,KAAK,EAAE,CAAC;oBAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAC;oBAC9D,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;wBAC1D,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;wBAC5C,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC;4BAClC,cAAc;4BACd,SAAS,EAAE,SAAS;4BACpB,OAAO,EAAE,IAAI,CAAC,OAAO;4BACrB,cAAc,EAAE,MAAM,CAAC,UAAU,EAAE,cAAc,IAAI,KAAK;yBAC3D,CAAC,CAAC;wBACH,yEAAyE;wBACzE,8DAA8D;wBAC9D,MAAM,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oBACnE,CAAC;gBACH,CAAC;YACH,CAAC,QAAQ,KAAK,EAAE,CAAC,4CAA4C;QAC/D,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YAChD,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YAClD,IAAI,UAAU,CAAC,MAAM,CAAC;gBAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,kDAAkD;QAClD,oDAAoD;QAEpD,IAAI,iBAAiB,EAAE,CAAC;YACtB,oFAAoF;YACpF,MAAM,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,4BAA4B,CAAC,CAAC;YAC7D,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;YAC7C,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,GAAG,EAAE,GAAG,CACZ,MAAM,EACN,MAAM,EACN,kBAAkB,MAAM,CAAC,YAAY,4BAA4B,MAAM,CAAC,gBAAgB,EAAE,CAC3F,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,CAAC,OAAO,CAAC,kBAAkB,MAAM,CAAC,YAAY,iBAAiB,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,mBAAmB,CAC/B,UAAsB;QAEtB,6DAA6D;QAC7D,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,mBAAmB,EAAE,CAAC;QACxD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,8DAA8D;QAC9D,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,gBAAgB,EAAE,CAAC;QAC1D,IAAI,aAAa,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAE1C,MAAM,SAAS,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;YACjC,sEAAsE;YACtE,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACnD,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5C,IACE,MAAM,KAAK,IAAI;gBACf,OAAO,MAAM,KAAK,QAAQ;gBAC1B,OAAQ,MAAkC,CAAC,SAAS,CAAC,KAAK,QAAQ;gBAClE,OAAQ,MAAkC,CAAC,WAAW,CAAC,KAAK,QAAQ,EACpE,CAAC;gBACD,MAAM,CAAC,GAAG,MAAiC,CAAC;gBAC5C,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,SAAS,CAAW,EAAE,SAAS,EAAE,CAAC,CAAC,WAAW,CAAW,EAAE,CAAC;YAClF,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,GAAW;QAC5C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO;QAC7B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,qCAAqC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC/D,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;YACrB,CAAC;iBAAM,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC/B,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,GAAG,IAAc;QAC7C,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC/B,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,OAAiB;QAC3D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC7C,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,OAAoB,EACpB,SAAiB,EACjB,WAAmB,EACnB,MAAkB;QAElB,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACzD,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAC3D,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACpF,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;QACxD,IAAI,UAAU,CAAC,QAAQ,CAAC;YAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,IAAI,UAAU,CAAC,QAAQ,CAAC;YAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,+CAA+C;YAC/C,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC/B,MAAM,EAAE,CAAC,cAAc,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACxD,MAAM,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;YACnD,CAAC;YACD,8EAA8E;YAC9E,qFAAqF;YACrF,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBAChC,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,eAAe,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/E,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;oBACnC,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC9C,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;YACD,+BAA+B;YAC/B,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/B,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;gBAClE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;gBACrE,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,gBAAgB,CAAC,CAAC;gBACpD,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACjE,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI;oBACpC,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC;oBACjE,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC;gBAC7B,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;oBACrC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC5C,IAAI,UAAU,CAAC,GAAG,CAAC;wBAAE,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACrF,CAAC;YACH,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACnD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,IAAI,CAAC,OAAO,CAAC,KAAK;oBAAE,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YACxE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACnB,MAAM,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;oBAC/C,cAAc,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;gBACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvB,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,mCAAmC;QAClD,CAAC;gBAAS,CAAC;YACT,IAAI,UAAU,CAAC,QAAQ,CAAC;gBAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/E,IAAI,UAAU,CAAC,QAAQ,CAAC;gBAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,2BAA2B,CAAC,GAAW;QACnD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO;QAC7B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;YACnD,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBACpC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC;gBACnB,MAAM,SAAS,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,8BAA8B,CAAC,WAAmB;QAC9D,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,OAAO;QACrC,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAS;YACnC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YACpE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;gBAAE,SAAS;YACxC,IAAI,MAAe,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS,CAAC,iCAAiC;YAC7C,CAAC;YACD,2EAA2E;YAC3E,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,SAAS;YACrF,MAAM,QAAQ,GAAG,MAAiC,CAAC;YACnD,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;gBACjC,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;oBACpB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACrB,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC;YACH,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
package/dist/commands/push.d.ts
CHANGED
package/dist/commands/push.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { lstat, mkdir, readdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
1
|
+
import { cp, lstat, mkdir, readdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
2
2
|
import { createHash } from "node:crypto";
|
|
3
3
|
import { join, relative, resolve, sep } from "node:path";
|
|
4
4
|
import { existsSync } from "node:fs";
|
|
5
5
|
import { hostname, platform } from "node:os";
|
|
6
|
-
import chalk from "chalk";
|
|
7
6
|
import { ConfigManager } from "../config/config-manager.js";
|
|
8
7
|
import { SyncFilter } from "../sync-filter/sync-filter.js";
|
|
9
8
|
import { GitAdapter } from "../git-adapter/git-adapter.js";
|
|
@@ -18,6 +17,12 @@ import { Lockfile } from "../lockfile/lockfile.js";
|
|
|
18
17
|
// Subdirectories within allowlisted items that should not be synced.
|
|
19
18
|
// These contain downloaded third-party content that can be re-fetched.
|
|
20
19
|
const SYNC_SKIP_DIRS = new Set(["plugins/cache", "plugins/marketplaces"]);
|
|
20
|
+
const NORMALIZERS = {
|
|
21
|
+
"settings.json": "settings",
|
|
22
|
+
"history.jsonl": "jsonl",
|
|
23
|
+
"plugins/installed_plugins.json": "plugins",
|
|
24
|
+
"plugins/known_marketplaces.json": "plugins",
|
|
25
|
+
};
|
|
21
26
|
export class PushCommand {
|
|
22
27
|
homeDir;
|
|
23
28
|
claudeDir;
|
|
@@ -58,6 +63,13 @@ export class PushCommand {
|
|
|
58
63
|
output.warn("Encryption is enabled in config but --skip-encryption flag is set.\n" +
|
|
59
64
|
" Files will be pushed/pulled WITHOUT encryption. Use only for testing.");
|
|
60
65
|
}
|
|
66
|
+
// Warn when skipping secret scan in reactive encryption mode — secrets will not be encrypted
|
|
67
|
+
if (options.skipSecretScan &&
|
|
68
|
+
config.encryption.enabled &&
|
|
69
|
+
(config.encryption.mode === "reactive" || config.encryption.mode == null)) {
|
|
70
|
+
output.warn("WARNING: --skip-secret-scan is set while encryption.mode is reactive.\n" +
|
|
71
|
+
" Secret detection drives reactive encryption — files with secrets will NOT be encrypted.");
|
|
72
|
+
}
|
|
61
73
|
const syncFilterConfig = await this.configManager.getSyncFilter();
|
|
62
74
|
const syncFilter = new SyncFilter(syncFilterConfig);
|
|
63
75
|
// 1. Classify ~/.claude contents
|
|
@@ -108,56 +120,7 @@ export class PushCommand {
|
|
|
108
120
|
const unknownDir = join(storePath, STORE_UNKNOWN_DIR);
|
|
109
121
|
// Dry-run: show what would be pushed without modifying anything
|
|
110
122
|
if (options.dryRun) {
|
|
111
|
-
|
|
112
|
-
const { cp, rm: rmTmp, mkdir: mkTmp } = await import("node:fs/promises");
|
|
113
|
-
const tmpLocalConfig = join(this.homeDir, ".claudefy", ".dryrun-config-tmp");
|
|
114
|
-
const tmpLocalUnknown = join(this.homeDir, ".claudefy", ".dryrun-unknown-tmp");
|
|
115
|
-
if (existsSync(tmpLocalConfig))
|
|
116
|
-
await rmTmp(tmpLocalConfig, { recursive: true, force: true });
|
|
117
|
-
if (existsSync(tmpLocalUnknown))
|
|
118
|
-
await rmTmp(tmpLocalUnknown, { recursive: true, force: true });
|
|
119
|
-
await mkTmp(tmpLocalConfig, { recursive: true });
|
|
120
|
-
await mkTmp(tmpLocalUnknown, { recursive: true });
|
|
121
|
-
try {
|
|
122
|
-
for (const item of classification.allowlist) {
|
|
123
|
-
const src = join(this.claudeDir, item.name);
|
|
124
|
-
if (existsSync(src))
|
|
125
|
-
await cp(src, join(tmpLocalConfig, item.name), { recursive: true });
|
|
126
|
-
}
|
|
127
|
-
for (const item of classification.unknown) {
|
|
128
|
-
const src = join(this.claudeDir, item.name);
|
|
129
|
-
if (existsSync(src))
|
|
130
|
-
await cp(src, join(tmpLocalUnknown, item.name), { recursive: true });
|
|
131
|
-
}
|
|
132
|
-
const configDiff = await computeDiff(tmpLocalConfig, configDir);
|
|
133
|
-
const unknownDiff = await computeDiff(tmpLocalUnknown, unknownDir);
|
|
134
|
-
const hasChanges = configDiff.hasChanges || unknownDiff.hasChanges;
|
|
135
|
-
if (!hasChanges) {
|
|
136
|
-
if (!options.quiet)
|
|
137
|
-
output.info("Dry run: no push changes detected.");
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
if (!options.quiet) {
|
|
141
|
-
output.heading("Dry run — push would change:");
|
|
142
|
-
const allAdded = [...configDiff.added, ...unknownDiff.added];
|
|
143
|
-
const allModified = [...configDiff.modified, ...unknownDiff.modified];
|
|
144
|
-
const allDeleted = [...configDiff.deleted, ...unknownDiff.deleted];
|
|
145
|
-
for (const f of allAdded)
|
|
146
|
-
console.log(chalk.green(` Added: ${f}`));
|
|
147
|
-
for (const f of allModified)
|
|
148
|
-
console.log(chalk.yellow(` Modified: ${f}`));
|
|
149
|
-
for (const f of allDeleted)
|
|
150
|
-
console.log(chalk.red(` Deleted: ${f}`));
|
|
151
|
-
}
|
|
152
|
-
process.exitCode = 1;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
finally {
|
|
156
|
-
if (existsSync(tmpLocalConfig))
|
|
157
|
-
await rmTmp(tmpLocalConfig, { recursive: true, force: true });
|
|
158
|
-
if (existsSync(tmpLocalUnknown))
|
|
159
|
-
await rmTmp(tmpLocalUnknown, { recursive: true, force: true });
|
|
160
|
-
}
|
|
123
|
+
await this.executePushDryRun(options, classification, configDir, unknownDir);
|
|
161
124
|
return;
|
|
162
125
|
}
|
|
163
126
|
// 3. Build path mapper
|
|
@@ -247,6 +210,7 @@ export class PushCommand {
|
|
|
247
210
|
throw new Error("Encryption is required but no passphrase found. Set CLAUDEFY_PASSPHRASE or ensure your passphrase is stored in your OS keychain (configured during 'claudefy init' or 'claudefy join').");
|
|
248
211
|
}
|
|
249
212
|
const encryptor = new Encryptor(options.passphrase, config.backend.url);
|
|
213
|
+
let encryptedCount = 0;
|
|
250
214
|
for (const filePath of filesToEncrypt) {
|
|
251
215
|
if (existsSync(filePath) && !filePath.endsWith(".age")) {
|
|
252
216
|
const ad = (filePath.startsWith(configDir)
|
|
@@ -256,10 +220,11 @@ export class PushCommand {
|
|
|
256
220
|
.join("/");
|
|
257
221
|
await encryptor.encryptFile(filePath, filePath + ".age", ad);
|
|
258
222
|
await rm(filePath);
|
|
223
|
+
encryptedCount++;
|
|
259
224
|
}
|
|
260
225
|
}
|
|
261
226
|
if (!options.quiet) {
|
|
262
|
-
output.info(`Encrypted ${
|
|
227
|
+
output.info(`Encrypted ${encryptedCount} file(s).`);
|
|
263
228
|
}
|
|
264
229
|
}
|
|
265
230
|
// 8. Conditional manifest update
|
|
@@ -270,15 +235,17 @@ export class PushCommand {
|
|
|
270
235
|
const commitResult = await gitAdapter.commitAndPush(`sync: push from ${config.machineId}`, config.machineId);
|
|
271
236
|
await log?.log("info", "push", `Encrypted ${filesToEncrypt.size} file(s)`);
|
|
272
237
|
if (commitResult.committed && !commitResult.pushed) {
|
|
273
|
-
|
|
238
|
+
const detail = commitResult.pushError ? ` (${commitResult.pushError})` : "";
|
|
239
|
+
await log?.log("warn", "push", `Changes committed locally but push to remote failed${detail}`);
|
|
274
240
|
if (!options.quiet) {
|
|
275
|
-
output.warn(
|
|
241
|
+
output.warn(`Changes were committed locally, but pushing to the remote failed${detail}. Retry with 'claudefy push'.`);
|
|
276
242
|
}
|
|
277
243
|
}
|
|
278
244
|
if (commitResult.pushed && !commitResult.mergedToMain) {
|
|
279
|
-
|
|
245
|
+
const detail = commitResult.mergeError ? ` (${commitResult.mergeError})` : "";
|
|
246
|
+
await log?.log("warn", "push", `Pushed but merge to main failed — may need conflict resolution${detail}`);
|
|
280
247
|
if (!options.quiet) {
|
|
281
|
-
output.warn(
|
|
248
|
+
output.warn(`Unable to merge machine branch into main. You may need to resolve conflicts${detail}.`);
|
|
282
249
|
}
|
|
283
250
|
}
|
|
284
251
|
await log?.log("info", "push", `Push complete. committed=${commitResult.committed} pushed=${commitResult.pushed}`);
|
|
@@ -313,12 +280,11 @@ export class PushCommand {
|
|
|
313
280
|
return hashes;
|
|
314
281
|
}
|
|
315
282
|
needsNormalization(itemName) {
|
|
316
|
-
return
|
|
317
|
-
itemName === "plugins/installed_plugins.json" ||
|
|
318
|
-
itemName === "plugins/known_marketplaces.json");
|
|
283
|
+
return Object.prototype.hasOwnProperty.call(NORMALIZERS, itemName);
|
|
319
284
|
}
|
|
320
285
|
normalizeContent(itemName, text, pathMapper) {
|
|
321
|
-
|
|
286
|
+
const normalizerType = NORMALIZERS[itemName];
|
|
287
|
+
if (normalizerType === "settings") {
|
|
322
288
|
let parsed;
|
|
323
289
|
try {
|
|
324
290
|
parsed = JSON.parse(text);
|
|
@@ -329,8 +295,7 @@ export class PushCommand {
|
|
|
329
295
|
const normalized = pathMapper.normalizeSettingsPaths(parsed, this.claudeDir);
|
|
330
296
|
return JSON.stringify(normalized, null, 2);
|
|
331
297
|
}
|
|
332
|
-
if (
|
|
333
|
-
itemName === "plugins/known_marketplaces.json") {
|
|
298
|
+
if (normalizerType === "plugins") {
|
|
334
299
|
let parsed;
|
|
335
300
|
try {
|
|
336
301
|
parsed = JSON.parse(text);
|
|
@@ -341,7 +306,7 @@ export class PushCommand {
|
|
|
341
306
|
const normalized = pathMapper.normalizePluginPaths(parsed, this.claudeDir);
|
|
342
307
|
return JSON.stringify(normalized, null, 2);
|
|
343
308
|
}
|
|
344
|
-
if (
|
|
309
|
+
if (normalizerType === "jsonl") {
|
|
345
310
|
return (text
|
|
346
311
|
.split("\n")
|
|
347
312
|
.filter(Boolean)
|
|
@@ -372,6 +337,11 @@ export class PushCommand {
|
|
|
372
337
|
await writeFile(destPath, content);
|
|
373
338
|
changedFiles.push(destPath);
|
|
374
339
|
}
|
|
340
|
+
// Remove stale .age file when plaintext is written
|
|
341
|
+
const staleAgePath = join(destBaseDir, itemName + ".age");
|
|
342
|
+
if (existsSync(staleAgePath)) {
|
|
343
|
+
await rm(staleAgePath);
|
|
344
|
+
}
|
|
375
345
|
}
|
|
376
346
|
else if (srcStat.isDirectory()) {
|
|
377
347
|
await this.syncDirectory(srcPath, destBaseDir, itemName, storeHashes, changedFiles, pathMapper);
|
|
@@ -433,6 +403,12 @@ export class PushCommand {
|
|
|
433
403
|
await writeFile(destPath, content);
|
|
434
404
|
changedFiles.push(destPath);
|
|
435
405
|
}
|
|
406
|
+
// Remove stale .age file when plaintext is written (prevents
|
|
407
|
+
// decryptDirectory from finding outdated encrypted versions)
|
|
408
|
+
const staleAgePath = join(destBaseDir, childName + ".age");
|
|
409
|
+
if (existsSync(staleAgePath)) {
|
|
410
|
+
await rm(staleAgePath);
|
|
411
|
+
}
|
|
436
412
|
}
|
|
437
413
|
}
|
|
438
414
|
// Remove files/dirs in the store directory that no longer exist in source
|
|
@@ -473,5 +449,55 @@ export class PushCommand {
|
|
|
473
449
|
}
|
|
474
450
|
}
|
|
475
451
|
}
|
|
452
|
+
async executePushDryRun(options, classification, configDir, unknownDir) {
|
|
453
|
+
const { computeDiff, printDiffLines } = await import("../diff-utils/diff-utils.js");
|
|
454
|
+
const claudefyDir = join(this.homeDir, ".claudefy");
|
|
455
|
+
const tmpLocalConfig = join(claudefyDir, ".dryrun-config-tmp");
|
|
456
|
+
const tmpLocalUnknown = join(claudefyDir, ".dryrun-unknown-tmp");
|
|
457
|
+
if (existsSync(tmpLocalConfig))
|
|
458
|
+
await rm(tmpLocalConfig, { recursive: true, force: true });
|
|
459
|
+
if (existsSync(tmpLocalUnknown))
|
|
460
|
+
await rm(tmpLocalUnknown, { recursive: true, force: true });
|
|
461
|
+
await mkdir(tmpLocalConfig, { recursive: true });
|
|
462
|
+
await mkdir(tmpLocalUnknown, { recursive: true });
|
|
463
|
+
try {
|
|
464
|
+
for (const item of classification.allowlist) {
|
|
465
|
+
const src = join(this.claudeDir, item.name);
|
|
466
|
+
if (existsSync(src))
|
|
467
|
+
await cp(src, join(tmpLocalConfig, item.name), { recursive: true });
|
|
468
|
+
}
|
|
469
|
+
for (const item of classification.unknown) {
|
|
470
|
+
const src = join(this.claudeDir, item.name);
|
|
471
|
+
if (existsSync(src))
|
|
472
|
+
await cp(src, join(tmpLocalUnknown, item.name), { recursive: true });
|
|
473
|
+
}
|
|
474
|
+
const configDiff = await computeDiff(tmpLocalConfig, configDir);
|
|
475
|
+
const unknownDiff = await computeDiff(tmpLocalUnknown, unknownDir);
|
|
476
|
+
const hasChanges = configDiff.hasChanges || unknownDiff.hasChanges;
|
|
477
|
+
if (!hasChanges) {
|
|
478
|
+
if (!options.quiet)
|
|
479
|
+
output.info("Dry run: no push changes detected.");
|
|
480
|
+
}
|
|
481
|
+
else {
|
|
482
|
+
if (!options.quiet) {
|
|
483
|
+
output.heading("Dry run — push would change:");
|
|
484
|
+
const combined = {
|
|
485
|
+
added: [...configDiff.added, ...unknownDiff.added],
|
|
486
|
+
modified: [...configDiff.modified, ...unknownDiff.modified],
|
|
487
|
+
deleted: [...configDiff.deleted, ...unknownDiff.deleted],
|
|
488
|
+
hasChanges: true,
|
|
489
|
+
};
|
|
490
|
+
printDiffLines(combined);
|
|
491
|
+
}
|
|
492
|
+
process.exitCode = 1;
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
finally {
|
|
496
|
+
if (existsSync(tmpLocalConfig))
|
|
497
|
+
await rm(tmpLocalConfig, { recursive: true, force: true });
|
|
498
|
+
if (existsSync(tmpLocalUnknown))
|
|
499
|
+
await rm(tmpLocalUnknown, { recursive: true, force: true });
|
|
500
|
+
}
|
|
501
|
+
}
|
|
476
502
|
}
|
|
477
503
|
//# sourceMappingURL=push.js.map
|