@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.
Files changed (73) hide show
  1. package/dist/backup-manager/backup-manager.d.ts +8 -0
  2. package/dist/backup-manager/backup-manager.js +39 -1
  3. package/dist/backup-manager/backup-manager.js.map +1 -1
  4. package/dist/claude-json-sync/claude-json-sync.js +6 -6
  5. package/dist/claude-json-sync/claude-json-sync.js.map +1 -1
  6. package/dist/cli.js +37 -4
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/diff.js +2 -11
  9. package/dist/commands/diff.js.map +1 -1
  10. package/dist/commands/doctor.js +8 -2
  11. package/dist/commands/doctor.js.map +1 -1
  12. package/dist/commands/init.js +1 -1
  13. package/dist/commands/init.js.map +1 -1
  14. package/dist/commands/join.js +1 -1
  15. package/dist/commands/join.js.map +1 -1
  16. package/dist/commands/pull.d.ts +6 -0
  17. package/dist/commands/pull.js +123 -66
  18. package/dist/commands/pull.js.map +1 -1
  19. package/dist/commands/push.d.ts +1 -0
  20. package/dist/commands/push.js +90 -64
  21. package/dist/commands/push.js.map +1 -1
  22. package/dist/commands/rotate-passphrase.js +40 -30
  23. package/dist/commands/rotate-passphrase.js.map +1 -1
  24. package/dist/config/config-manager.d.ts +1 -0
  25. package/dist/config/config-manager.js +69 -5
  26. package/dist/config/config-manager.js.map +1 -1
  27. package/dist/diff-utils/diff-utils.d.ts +5 -0
  28. package/dist/diff-utils/diff-utils.js +13 -0
  29. package/dist/diff-utils/diff-utils.js.map +1 -1
  30. package/dist/encryptor/encryptor.d.ts +2 -2
  31. package/dist/encryptor/encryptor.js +29 -8
  32. package/dist/encryptor/encryptor.js.map +1 -1
  33. package/dist/encryptor/file-encryptor.js +6 -0
  34. package/dist/encryptor/file-encryptor.js.map +1 -1
  35. package/dist/encryptor/line-encryptor.js +8 -2
  36. package/dist/encryptor/line-encryptor.js.map +1 -1
  37. package/dist/encryptor/passphrase.js +12 -4
  38. package/dist/encryptor/passphrase.js.map +1 -1
  39. package/dist/git-adapter/git-adapter.d.ts +2 -0
  40. package/dist/git-adapter/git-adapter.js +13 -5
  41. package/dist/git-adapter/git-adapter.js.map +1 -1
  42. package/dist/hook-manager/hook-manager.js +12 -1
  43. package/dist/hook-manager/hook-manager.js.map +1 -1
  44. package/dist/index.js.map +1 -1
  45. package/dist/lockfile/lockfile.d.ts +3 -1
  46. package/dist/lockfile/lockfile.js +29 -14
  47. package/dist/lockfile/lockfile.js.map +1 -1
  48. package/dist/logger.js +14 -1
  49. package/dist/logger.js.map +1 -1
  50. package/dist/machine-registry/machine-registry.d.ts +6 -0
  51. package/dist/machine-registry/machine-registry.js +26 -18
  52. package/dist/machine-registry/machine-registry.js.map +1 -1
  53. package/dist/merger/merger.js +2 -1
  54. package/dist/merger/merger.js.map +1 -1
  55. package/dist/output.d.ts +6 -0
  56. package/dist/output.js +23 -0
  57. package/dist/output.js.map +1 -1
  58. package/dist/secret-scanner/scanner.js +15 -2
  59. package/dist/secret-scanner/scanner.js.map +1 -1
  60. package/dist/sync-filter/sync-filter.js +19 -10
  61. package/dist/sync-filter/sync-filter.js.map +1 -1
  62. package/dist/types.d.ts +8 -0
  63. package/dist/types.js +5 -0
  64. package/dist/types.js.map +1 -0
  65. package/dist/update-check.js +4 -4
  66. package/dist/update-check.js.map +1 -1
  67. package/package.json +1 -1
  68. package/dist/commands/logs.d.ts +0 -9
  69. package/dist/commands/logs.js +0 -32
  70. package/dist/commands/logs.js.map +0 -1
  71. package/dist/lockfile.d.ts +0 -22
  72. package/dist/lockfile.js +0 -119
  73. package/dist/lockfile.js.map +0 -1
@@ -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
- const storeConfigDir = join(storePath, STORE_CONFIG_DIR);
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
- return { machine: marker.machine, timestamp: marker.timestamp };
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":"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"}
@@ -25,4 +25,5 @@ export declare class PushCommand {
25
25
  private syncDirectory;
26
26
  private collectFilesRecursive;
27
27
  private removeDeleted;
28
+ private executePushDryRun;
28
29
  }
@@ -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
- const { computeDiff } = await import("../diff-utils/diff-utils.js");
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 ${filesToEncrypt.size} file(s).`);
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
- await log?.log("warn", "push", "Changes committed locally but push to remote failed");
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("Changes were committed locally, but pushing to the remote failed. Retry with 'claudefy push'.");
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
- await log?.log("warn", "push", "Pushed but merge to main failed — may need conflict resolution");
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("Unable to merge machine branch into main. You may need to resolve conflicts.");
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 (["settings.json", "history.jsonl"].includes(itemName) ||
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
- if (itemName === "settings.json") {
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 (itemName === "plugins/installed_plugins.json" ||
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 (itemName === "history.jsonl") {
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