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 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
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
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
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
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} (satisfies >=${min})`);
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} (matches pinned ${pin[0]}.${pin[1]})`);
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, `${yellow(warnGlyph)} ${warnings.length} warning(s)`);
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.0",
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-nomad",
3
- "version": "0.50.0",
3
+ "version": "0.50.2",
4
4
  "type": "module",
5
5
  "description": "Sync Claude Code config (~/.claude/) across machines via a private Git repo, with path remapping and per-host settings overrides.",
6
6
  "keywords": [