claude-nomad 0.50.0 → 0.50.2
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 +27 -0
- package/README.md +2 -0
- package/dist/nomad.mjs +42 -12
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.50.2](https://github.com/funkadelic/claude-nomad/compare/v0.50.1...v0.50.2) (2026-06-15)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Fixed
|
|
7
|
+
|
|
8
|
+
* **push:** skip gsd-dropped hooks and agents from shared push ([#295](https://github.com/funkadelic/claude-nomad/issues/295)) ([b8f6665](https://github.com/funkadelic/claude-nomad/commit/b8f66658dd47dac40bfafd9899206a481d04a87a))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Dependencies
|
|
12
|
+
|
|
13
|
+
* bump SonarSource/sonarqube-scan-action from 8.1.0 to 8.2.0 ([#297](https://github.com/funkadelic/claude-nomad/issues/297)) ([fdb681c](https://github.com/funkadelic/claude-nomad/commit/fdb681c4d346b9bd82b34fe6d9dee2d202186473))
|
|
14
|
+
* bump the dev-dependencies group with 5 updates ([#298](https://github.com/funkadelic/claude-nomad/issues/298)) ([0909a02](https://github.com/funkadelic/claude-nomad/commit/0909a025b698162c7a695354465046973ee93ab4))
|
|
15
|
+
|
|
16
|
+
## [0.50.1](https://github.com/funkadelic/claude-nomad/compare/v0.50.0...v0.50.1) (2026-06-12)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
* **doctor:** tidy summary verdict and dependency-version lines ([#289](https://github.com/funkadelic/claude-nomad/issues/289)) ([43d38a7](https://github.com/funkadelic/claude-nomad/commit/43d38a7bbf1780cd0e1e1b5e6bd85f9d75de7630))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### Documentation
|
|
25
|
+
|
|
26
|
+
* **hero:** plain-language status rows, drop gsd-owned files ([#291](https://github.com/funkadelic/claude-nomad/issues/291)) ([c144b0d](https://github.com/funkadelic/claude-nomad/commit/c144b0d01eea801d39b012ad3d4b3780d2ffafd1))
|
|
27
|
+
* **how-it-works:** use neutral sharedDirs example, not a gsd dir ([#292](https://github.com/funkadelic/claude-nomad/issues/292)) ([e000ecf](https://github.com/funkadelic/claude-nomad/commit/e000ecf67e814855d09c664b9dae6ce5d8287a97))
|
|
28
|
+
* **recipes:** add recipes page with example configs ([#293](https://github.com/funkadelic/claude-nomad/issues/293)) ([c339372](https://github.com/funkadelic/claude-nomad/commit/c3393723062bd9e639acff31e5236a9ff2ac2802))
|
|
29
|
+
|
|
3
30
|
## [0.50.0](https://github.com/funkadelic/claude-nomad/compare/v0.49.0...v0.50.0) (2026-06-11)
|
|
4
31
|
|
|
5
32
|
|
package/README.md
CHANGED
|
@@ -156,6 +156,8 @@ version-staleness check and `nomad doctor --check-schema`. The CLI works without
|
|
|
156
156
|
GSD users out of the box
|
|
157
157
|
- [Setup and migration](https://funkadelic.github.io/claude-nomad/quickstart/) -- full setup
|
|
158
158
|
walkthrough, migrating an existing `~/.claude/`
|
|
159
|
+
- [Recipes](https://funkadelic.github.io/claude-nomad/recipes/) -- copy-pasteable example configs
|
|
160
|
+
for common setups, from scratch to cross-OS remapping and GSD integration
|
|
159
161
|
- [Commands reference](https://funkadelic.github.io/claude-nomad/commands/) -- all CLI flags
|
|
160
162
|
- [Claude Code plugin](https://funkadelic.github.io/claude-nomad/plugin/) -- /nomad slash commands
|
|
161
163
|
and the session-start drift check
|
package/dist/nomad.mjs
CHANGED
|
@@ -5,11 +5,20 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __esm = (fn, res) => function __init() {
|
|
9
|
-
|
|
8
|
+
var __esm = (fn, res, err) => function __init() {
|
|
9
|
+
if (err) throw err[0];
|
|
10
|
+
try {
|
|
11
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
12
|
+
} catch (e) {
|
|
13
|
+
throw err = [e], e;
|
|
14
|
+
}
|
|
10
15
|
};
|
|
11
16
|
var __commonJS = (cb, mod) => function __require() {
|
|
12
|
-
|
|
17
|
+
try {
|
|
18
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
19
|
+
} catch (e) {
|
|
20
|
+
throw mod = 0, e;
|
|
21
|
+
}
|
|
13
22
|
};
|
|
14
23
|
var __export = (target, all) => {
|
|
15
24
|
for (var name in all)
|
|
@@ -3024,7 +3033,7 @@ function reportNodeEngineCheck(section2) {
|
|
|
3024
3033
|
);
|
|
3025
3034
|
return;
|
|
3026
3035
|
}
|
|
3027
|
-
addItem(section2, `${green(okGlyph)} node: ${process.version}
|
|
3036
|
+
addItem(section2, `${green(okGlyph)} node: ${process.version}`);
|
|
3028
3037
|
}
|
|
3029
3038
|
|
|
3030
3039
|
// src/spinner.ts
|
|
@@ -3796,7 +3805,7 @@ function reportGitleaksVersionCheck(section2, run = execFileSync8, tomlExists =
|
|
|
3796
3805
|
if (pin === null) return;
|
|
3797
3806
|
const sameMajorMinor = local[0] === pin[0] && local[1] === pin[1];
|
|
3798
3807
|
if (sameMajorMinor) {
|
|
3799
|
-
addItem(section2, `${green(okGlyph)} gitleaks: ${raw}
|
|
3808
|
+
addItem(section2, `${green(okGlyph)} gitleaks: ${raw}`);
|
|
3800
3809
|
return;
|
|
3801
3810
|
}
|
|
3802
3811
|
addItem(
|
|
@@ -3967,17 +3976,14 @@ function buildVerdictSection(sections) {
|
|
|
3967
3976
|
const lines = sections.flatMap((s) => s.items).map((item2) => item2.replace(/^\t/, ""));
|
|
3968
3977
|
const failures = lines.filter(isFailLine);
|
|
3969
3978
|
const warnings = lines.filter(isWarnLine);
|
|
3970
|
-
for (const line of [...failures, ...warnings]) addItem(summary, line);
|
|
3971
3979
|
if (failures.length > 0) {
|
|
3972
|
-
addItem(
|
|
3973
|
-
summary,
|
|
3974
|
-
`${red(failGlyph)} ${failures.length} failure(s), ${warnings.length} warning(s)`
|
|
3975
|
-
);
|
|
3980
|
+
addItem(summary, red(`${failures.length} failure(s), ${warnings.length} warning(s)`));
|
|
3976
3981
|
} else if (warnings.length > 0) {
|
|
3977
|
-
addItem(summary,
|
|
3982
|
+
addItem(summary, yellow(`${warnings.length} warning(s)`));
|
|
3978
3983
|
} else {
|
|
3979
3984
|
addItem(summary, `${green(okGlyph)} healthy`);
|
|
3980
3985
|
}
|
|
3986
|
+
for (const line of [...failures, ...warnings]) addChildItem(summary, line);
|
|
3981
3987
|
return summary;
|
|
3982
3988
|
}
|
|
3983
3989
|
|
|
@@ -5524,6 +5530,19 @@ function isNeverSync(path) {
|
|
|
5524
5530
|
}
|
|
5525
5531
|
return false;
|
|
5526
5532
|
}
|
|
5533
|
+
var GSD_HOOKS_SUPPORT_FILES = /* @__PURE__ */ new Set(["managed-hooks-registry.cjs", "package.json"]);
|
|
5534
|
+
var GSD_HOOKS_SUPPORT_DIR = "lib";
|
|
5535
|
+
function isGsdDropped(path) {
|
|
5536
|
+
const segments = path.split("/");
|
|
5537
|
+
if (segments[0] !== "shared" || segments.length < 3) return false;
|
|
5538
|
+
const dirName = segments[1];
|
|
5539
|
+
if (!GSD_DROPPED_NAMES.includes(dirName)) return false;
|
|
5540
|
+
const childName = segments[2];
|
|
5541
|
+
if (childName.startsWith(GSD_PREFIX)) return true;
|
|
5542
|
+
if (dirName !== "hooks") return false;
|
|
5543
|
+
if (segments.length === 3) return GSD_HOOKS_SUPPORT_FILES.has(childName);
|
|
5544
|
+
return childName === GSD_HOOKS_SUPPORT_DIR;
|
|
5545
|
+
}
|
|
5527
5546
|
function parsePorcelainZ2(statusPorcelain) {
|
|
5528
5547
|
const records = statusPorcelain.split("\0");
|
|
5529
5548
|
const paths = [];
|
|
@@ -5557,6 +5576,7 @@ function enforceAllowList(statusPorcelain, map) {
|
|
|
5557
5576
|
for (const path of parsePorcelainZ2(statusPorcelain)) {
|
|
5558
5577
|
if (isNeverSync(path)) {
|
|
5559
5578
|
neverSyncHits.push(path);
|
|
5579
|
+
} else if (isGsdDropped(path)) {
|
|
5560
5580
|
} else if (!isAllowed(path, allowed)) {
|
|
5561
5581
|
violations.push(path);
|
|
5562
5582
|
}
|
|
@@ -5748,6 +5768,16 @@ function guardGitlinks(repo) {
|
|
|
5748
5768
|
}
|
|
5749
5769
|
async function commitAndPush(st, ts, map, redactAll, allowAll, allowRule, repo) {
|
|
5750
5770
|
gitOrFatal(["add", "-A"], "git add", repo);
|
|
5771
|
+
const staged = parsePorcelainZ2(gitStatusPorcelainZ(repo));
|
|
5772
|
+
const toDrop = staged.filter((p) => isGsdDropped(p));
|
|
5773
|
+
if (toDrop.length > 0) {
|
|
5774
|
+
gitOrFatal(["restore", "--staged", "--", ...toDrop], "git restore --staged", repo);
|
|
5775
|
+
}
|
|
5776
|
+
if (staged.length === toDrop.length) {
|
|
5777
|
+
log("nothing to commit");
|
|
5778
|
+
renderNoScanTree(st);
|
|
5779
|
+
return;
|
|
5780
|
+
}
|
|
5751
5781
|
st.globalConfig = collectGlobalConfigChanges(repo, HOST, { staged: true });
|
|
5752
5782
|
let verdict = withSpinner("Scanning for secrets", () => scanPushVerdict(repo));
|
|
5753
5783
|
if (verdict.leak) {
|
|
@@ -6353,7 +6383,7 @@ function parsePushArgs(argv) {
|
|
|
6353
6383
|
// package.json
|
|
6354
6384
|
var package_default = {
|
|
6355
6385
|
name: "claude-nomad",
|
|
6356
|
-
version: "0.50.
|
|
6386
|
+
version: "0.50.2",
|
|
6357
6387
|
type: "module",
|
|
6358
6388
|
description: "Sync Claude Code config (~/.claude/) across machines via a private Git repo, with path remapping and per-host settings overrides.",
|
|
6359
6389
|
keywords: [
|
package/package.json
CHANGED