claude-nomad 0.69.4 → 0.69.5
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/CHANGELOG.md +19 -0
- package/dist/nomad.mjs +27 -12
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.69.5](https://github.com/funkadelic/claude-nomad/compare/v0.69.4...v0.69.5) (2026-09-25)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### What's new
|
|
7
|
+
|
|
8
|
+
* On native Windows, `nomad doctor` now lists a shared folder you have not published yet, and the `nomad adopt` command to share it, without `--verbose`.
|
|
9
|
+
* `nomad diff` and `nomad pull --dry-run` now say your local copy will be backed up when you pull, instead of naming a backup folder that does not exist yet.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
* **doctor:** show unpublished shared folders without --verbose ([#642](https://github.com/funkadelic/claude-nomad/issues/642)) ([7128c4b](https://github.com/funkadelic/claude-nomad/commit/7128c4ba42768b6b6ca92ac56b5d783e487ae9f8))
|
|
15
|
+
* **extras:** stop previews naming a backup path they never write ([#641](https://github.com/funkadelic/claude-nomad/issues/641)) ([20cc9e7](https://github.com/funkadelic/claude-nomad/commit/20cc9e7830440373bd8e830b506f803c8ba00e24))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
* pass the app token's client-id instead of the deprecated app-id ([#639](https://github.com/funkadelic/claude-nomad/issues/639)) ([5e81d04](https://github.com/funkadelic/claude-nomad/commit/5e81d042a18cde889787ae50c263aca065225c41))
|
|
21
|
+
|
|
3
22
|
## [0.69.4](https://github.com/funkadelic/claude-nomad/compare/v0.69.3...v0.69.4) (2026-09-24)
|
|
4
23
|
|
|
5
24
|
|
package/dist/nomad.mjs
CHANGED
|
@@ -4004,9 +4004,10 @@ function win32CopyOkRow(name, exempt = 0) {
|
|
|
4004
4004
|
const note = exempt > 0 ? dim(` (${exempt} never-synced path(s) not compared)`) : "";
|
|
4005
4005
|
return { line: `${green(okGlyph)} ${name}: real copy (win32 copy-sync)${note}`, fail: false };
|
|
4006
4006
|
}
|
|
4007
|
+
var UNPUBLISHED_MARKER = "real local copy, not published";
|
|
4007
4008
|
function win32CopyUnpublishedRow(name) {
|
|
4008
4009
|
return {
|
|
4009
|
-
line: `${dim(infoGlyph)} ${name}:
|
|
4010
|
+
line: `${dim(infoGlyph)} ${name}: ${UNPUBLISHED_MARKER} (run \`nomad adopt ${name}\` to share it)`,
|
|
4010
4011
|
fail: false
|
|
4011
4012
|
};
|
|
4012
4013
|
}
|
|
@@ -6811,9 +6812,19 @@ function isRepoStateLine(item2) {
|
|
|
6811
6812
|
function isCopySyncModalityLine(item2) {
|
|
6812
6813
|
return item2.includes("sync modality: copy-sync");
|
|
6813
6814
|
}
|
|
6815
|
+
function isUnpublishedLine(item2) {
|
|
6816
|
+
return item2.includes(UNPUBLISHED_MARKER);
|
|
6817
|
+
}
|
|
6818
|
+
function isKeptLinksRow(item2) {
|
|
6819
|
+
return isProblem(item2) || isUnpublishedLine(item2);
|
|
6820
|
+
}
|
|
6814
6821
|
function isKeptEnvironmentRow(item2) {
|
|
6815
6822
|
return isRepoStateLine(item2) || isCopySyncModalityLine(item2) || isProblem(item2);
|
|
6816
6823
|
}
|
|
6824
|
+
var KEEP_RULES = /* @__PURE__ */ new Map([
|
|
6825
|
+
["Environment", isKeptEnvironmentRow],
|
|
6826
|
+
["Shared links", isKeptLinksRow]
|
|
6827
|
+
]);
|
|
6817
6828
|
function keepWithChildren(items, keep) {
|
|
6818
6829
|
const out = [];
|
|
6819
6830
|
let parentKept = false;
|
|
@@ -6830,7 +6841,7 @@ function keepWithChildren(items, keep) {
|
|
|
6830
6841
|
function compactSections(sections) {
|
|
6831
6842
|
return sections.map((s) => {
|
|
6832
6843
|
if (ALWAYS_FULL.has(s.header)) return s;
|
|
6833
|
-
const keep = s.header
|
|
6844
|
+
const keep = KEEP_RULES.get(s.header) ?? isProblem;
|
|
6834
6845
|
return { ...s, items: keepWithChildren(s.items, keep) };
|
|
6835
6846
|
});
|
|
6836
6847
|
}
|
|
@@ -7468,8 +7479,9 @@ function deletePairsFor(t, raw) {
|
|
|
7468
7479
|
}
|
|
7469
7480
|
);
|
|
7470
7481
|
}
|
|
7471
|
-
function keptDeleteWarnLine(logical, relToLocal) {
|
|
7472
|
-
|
|
7482
|
+
function keptDeleteWarnLine(logical, relToLocal, dryRun = false) {
|
|
7483
|
+
const backup = dryRun ? "will be backed up when you pull" : "is backed up";
|
|
7484
|
+
return `keeping locally-edited ${relToLocal} in ${logical}: deleted upstream but changed locally (push to reconcile; your copy ${backup})`;
|
|
7473
7485
|
}
|
|
7474
7486
|
function keptDeletePreview(v, prePostHeads, repo) {
|
|
7475
7487
|
const kept = [];
|
|
@@ -7620,10 +7632,12 @@ function divergenceWarnLine(o) {
|
|
|
7620
7632
|
const name = o.isDir ? `${o.dirname}/` : o.dirname;
|
|
7621
7633
|
const one = o.count === 1;
|
|
7622
7634
|
const fileCount = one ? "1 file" : `${o.count} files`;
|
|
7623
|
-
const yours = one ? "your current file
|
|
7624
|
-
|
|
7635
|
+
const yours = one ? "your current file" : "your current files";
|
|
7636
|
+
const verb = one ? "is" : "are";
|
|
7637
|
+
const backup = o.dryRun ? "will be backed up when you pull" : `${verb} backed up to ${o.projectBackupRoot}/`;
|
|
7638
|
+
return `local ${kind} ${name} in repo ${o.logical} differs from the synced copy in ${fileCount}; the next pull step will keep your local copy (push to reconcile; ${yours} ${backup})`;
|
|
7625
7639
|
}
|
|
7626
|
-
function divergenceCheckExtras(ts, prePostHeads) {
|
|
7640
|
+
function divergenceCheckExtras(ts, prePostHeads, dryRun = false) {
|
|
7627
7641
|
const v = loadValidatedExtras({});
|
|
7628
7642
|
if (v === null) return 0;
|
|
7629
7643
|
const counts = { unmapped: 0, skipped: 0 };
|
|
@@ -7644,14 +7658,15 @@ function divergenceCheckExtras(ts, prePostHeads) {
|
|
|
7644
7658
|
logical,
|
|
7645
7659
|
isDir: statSync9(local).isDirectory(),
|
|
7646
7660
|
count: modified.length,
|
|
7647
|
-
projectBackupRoot
|
|
7661
|
+
projectBackupRoot,
|
|
7662
|
+
dryRun
|
|
7648
7663
|
})
|
|
7649
7664
|
);
|
|
7650
7665
|
for (const f of modified) warn(` ${f}`);
|
|
7651
7666
|
}
|
|
7652
7667
|
if (prePostHeads !== void 0) {
|
|
7653
7668
|
for (const { logical, relToLocal } of keptDeletePreview(v, prePostHeads, repo)) {
|
|
7654
|
-
warn(keptDeleteWarnLine(logical, relToLocal));
|
|
7669
|
+
warn(keptDeleteWarnLine(logical, relToLocal, dryRun));
|
|
7655
7670
|
}
|
|
7656
7671
|
}
|
|
7657
7672
|
return divergedCount;
|
|
@@ -9086,7 +9101,7 @@ function runPullWithBackupTs(ts, opts) {
|
|
|
9086
9101
|
assertNoAutostashConflict(repo, "nomad pull");
|
|
9087
9102
|
const mapPath = join65(repo, "path-map.json");
|
|
9088
9103
|
const map = existsSync50(mapPath) ? readPathMap(mapPath) : { projects: {} };
|
|
9089
|
-
const divergedKeptLocal = divergenceCheckExtras(ts, dryRun ? prePostHeads : void 0);
|
|
9104
|
+
const divergedKeptLocal = divergenceCheckExtras(ts, dryRun ? prePostHeads : void 0, dryRun);
|
|
9090
9105
|
if (dryRun) {
|
|
9091
9106
|
computePreview(ts, map, "pull", plansAgainst(sharedPlans, map), prePostHeads);
|
|
9092
9107
|
return { tag: "dry" };
|
|
@@ -10899,7 +10914,7 @@ function cmdDiff() {
|
|
|
10899
10914
|
const ts = freshBackupTs(backupBase());
|
|
10900
10915
|
const mapPath = join78(repo, "path-map.json");
|
|
10901
10916
|
const map = existsSync58(mapPath) ? readPathMap(mapPath) : { projects: {} };
|
|
10902
|
-
divergenceCheckExtras(ts);
|
|
10917
|
+
divergenceCheckExtras(ts, void 0, true);
|
|
10903
10918
|
computePreview(ts, map, "diff");
|
|
10904
10919
|
} catch (err) {
|
|
10905
10920
|
if (err instanceof NomadFatal) {
|
|
@@ -11468,7 +11483,7 @@ function parseSyncArgs(argv) {
|
|
|
11468
11483
|
// package.json
|
|
11469
11484
|
var package_default = {
|
|
11470
11485
|
name: "claude-nomad",
|
|
11471
|
-
version: "0.69.
|
|
11486
|
+
version: "0.69.5",
|
|
11472
11487
|
type: "module",
|
|
11473
11488
|
description: "Sync Claude Code config (~/.claude/) across machines via a private Git repo, with path remapping and per-host settings overrides.",
|
|
11474
11489
|
keywords: [
|
package/package.json
CHANGED