claude-nomad 0.55.0 → 0.55.1

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,30 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.55.1](https://github.com/funkadelic/claude-nomad/compare/v0.55.0...v0.55.1) (2026-06-29)
4
+
5
+
6
+ ### Fixed
7
+
8
+ * **config:** raise gitleaks scan timeout from 5 min to 15 min ([#367](https://github.com/funkadelic/claude-nomad/issues/367)) ([30e7344](https://github.com/funkadelic/claude-nomad/commit/30e73443be6d58330716418dced44aa6cf772623))
9
+ * **doctor:** de-backtrack super-linear regexes and group test hook ([#363](https://github.com/funkadelic/claude-nomad/issues/363)) ([4fdbdaa](https://github.com/funkadelic/claude-nomad/commit/4fdbdaa595d3e62cf87cab8e147da130c574f272))
10
+ * **push:** bound gitleaks scans and show dry-run leak-scan spinner ([#365](https://github.com/funkadelic/claude-nomad/issues/365)) ([a04d06a](https://github.com/funkadelic/claude-nomad/commit/a04d06a9624f9fa60d68cc01c69009fb0908e05f))
11
+ * **remap:** match Claude Code's transcript-dir path encoder ([#360](https://github.com/funkadelic/claude-nomad/issues/360)) ([77a4835](https://github.com/funkadelic/claude-nomad/commit/77a4835629a04fbf045930b1938b2404f0b00922))
12
+
13
+
14
+ ### Documentation
15
+
16
+ * correct path-encoding rule and note Windows-style paths ([#362](https://github.com/funkadelic/claude-nomad/issues/362)) ([970aae4](https://github.com/funkadelic/claude-nomad/commit/970aae42ebba734a878f9712ac304f0c393b9398))
17
+
18
+
19
+ ### Testing
20
+
21
+ * use specific assertions for length and exit-code checks ([#364](https://github.com/funkadelic/claude-nomad/issues/364)) ([95549d4](https://github.com/funkadelic/claude-nomad/commit/95549d4694e5f0dc09ac1aa13d4240e01cb264f9))
22
+
23
+
24
+ ### Dependencies
25
+
26
+ * **deps-dev:** bump the dev-dependencies group with 6 updates ([#366](https://github.com/funkadelic/claude-nomad/issues/366)) ([70d1057](https://github.com/funkadelic/claude-nomad/commit/70d10578eb8d58010b160b88a6d61eaa9e8405a0))
27
+
3
28
  ## [0.55.0](https://github.com/funkadelic/claude-nomad/compare/v0.54.0...v0.55.0) (2026-06-28)
4
29
 
5
30
 
package/dist/nomad.mjs CHANGED
@@ -423,7 +423,7 @@ function allSharedLinks(map) {
423
423
  }
424
424
  return [...SHARED_LINKS, ...extras];
425
425
  }
426
- var SETTINGS_SCHEMA_URL, NPM_REGISTRY_LATEST_URL, GITLEAKS_PINNED_VERSION, HOST, SHARED_LINKS, GSD_PREFIX, GSD_DROPPED_NAMES, SUPPORTED_EXTRAS, ALWAYS_NEVER_SYNC, PUSH_ALLOWED_STATIC;
426
+ var SETTINGS_SCHEMA_URL, NPM_REGISTRY_LATEST_URL, GITLEAKS_PINNED_VERSION, GITLEAKS_SCAN_TIMEOUT_MS, HOST, SHARED_LINKS, GSD_PREFIX, GSD_DROPPED_NAMES, SUPPORTED_EXTRAS, ALWAYS_NEVER_SYNC, PUSH_ALLOWED_STATIC;
427
427
  var init_config = __esm({
428
428
  "src/config.ts"() {
429
429
  "use strict";
@@ -434,6 +434,7 @@ var init_config = __esm({
434
434
  SETTINGS_SCHEMA_URL = "https://json.schemastore.org/claude-code-settings.json";
435
435
  NPM_REGISTRY_LATEST_URL = "https://registry.npmjs.org/claude-nomad/latest";
436
436
  GITLEAKS_PINNED_VERSION = "8.30.1";
437
+ GITLEAKS_SCAN_TIMEOUT_MS = 9e5;
437
438
  HOST = (process.env.NOMAD_HOST || hostname()).toLowerCase();
438
439
  SHARED_LINKS = ["CLAUDE.md", "commands", "rules", "my-statusline.cjs"];
439
440
  GSD_PREFIX = "gsd-";
@@ -523,13 +524,23 @@ function sortKeysDeep(value) {
523
524
  }
524
525
  return value;
525
526
  }
526
- var encodePath;
527
+ var ENCODE_MAX, hashPath, encodePath;
527
528
  var init_utils_json = __esm({
528
529
  "src/utils.json.ts"() {
529
530
  "use strict";
530
531
  init_config();
531
532
  init_utils();
532
- encodePath = (absPath) => absPath.replaceAll("/", "-");
533
+ ENCODE_MAX = 200;
534
+ hashPath = (s) => {
535
+ let h2 = 0;
536
+ for (let i = 0; i < s.length; i++) h2 = (h2 << 5) - h2 + s.charCodeAt(i) | 0;
537
+ return h2;
538
+ };
539
+ encodePath = (absPath) => {
540
+ const enc = absPath.replace(/[^a-zA-Z0-9]/g, "-");
541
+ if (enc.length <= ENCODE_MAX) return enc;
542
+ return `${enc.slice(0, ENCODE_MAX)}-${Math.abs(hashPath(absPath)).toString(36)}`;
543
+ };
533
544
  }
534
545
  });
535
546
 
@@ -769,7 +780,7 @@ var init_push_gitleaks_config = __esm({
769
780
  "use strict";
770
781
  init_config();
771
782
  init_utils();
772
- OVERLAY_EXTEND_RE = /^\s*(?:\[\s*extend\s*\]|extend\s*[.=])/m;
783
+ OVERLAY_EXTEND_RE = /^[ \t]*(?:\[[ \t]*extend[ \t]*\]|extend[ \t]*[.=])/m;
773
784
  TABLE_HEADER_RE = /^\s*\[/;
774
785
  OVERLAY_ALLOWLIST_HEADER_RE = /^\s*\[\[?\s*allowlists?\s*\]\]?/;
775
786
  OVERLAY_INLINE_ALLOWLIST_RE = /^[ \t]*allowlists?[ \t]*[.=]/m;
@@ -912,10 +923,11 @@ function scanStagedTree(repoDir, forwardStreams = false) {
912
923
  ];
913
924
  if (toml !== null) args.push("--config", toml);
914
925
  const opts = { cwd: repoDir, stdio: ["ignore", "pipe", "pipe"] };
926
+ const gitleaksOpts = { ...opts, timeout: GITLEAKS_SCAN_TIMEOUT_MS };
915
927
  try {
916
928
  execFileSync8("git", ["init", "-q"], opts);
917
929
  execFileSync8("git", ["add", "-A"], opts);
918
- execFileSync8("gitleaks", args, opts);
930
+ execFileSync8("gitleaks", args, gitleaksOpts);
919
931
  return [];
920
932
  } catch (err) {
921
933
  const e = err;
@@ -945,7 +957,10 @@ function scanFile(filePath, forwardStreams = false) {
945
957
  `--report-path=${reportPath}`
946
958
  ];
947
959
  if (toml !== null) args.push("--config", toml);
948
- const opts = { stdio: ["ignore", "pipe", "pipe"] };
960
+ const opts = {
961
+ stdio: ["ignore", "pipe", "pipe"],
962
+ timeout: GITLEAKS_SCAN_TIMEOUT_MS
963
+ };
949
964
  try {
950
965
  execFileSync8("gitleaks", args, opts);
951
966
  return [];
@@ -966,6 +981,7 @@ function scanFile(filePath, forwardStreams = false) {
966
981
  var init_push_gitleaks_scan = __esm({
967
982
  "src/push-gitleaks.scan.ts"() {
968
983
  "use strict";
984
+ init_config();
969
985
  init_push_gitleaks_config();
970
986
  init_utils_fs();
971
987
  }
@@ -3285,7 +3301,7 @@ function stripCommentsAndStrings(src) {
3285
3301
  function classifySource(src) {
3286
3302
  const code = stripCommentsAndStrings(src);
3287
3303
  const cjs = /\brequire\s*\(/.test(code) || /\bmodule\.exports\b/.test(code) || /\bexports\.\w/.test(code);
3288
- const esm = /^[^\S\r\n]*import\s/m.test(code) || /^[^\S\r\n]*export\s/m.test(code) || /\bimport\.meta\b/.test(code);
3304
+ const esm = /^[ \t]*import\s/m.test(code) || /^[ \t]*export\s/m.test(code) || /\bimport\.meta\b/.test(code);
3289
3305
  if (cjs && !esm) return "cjs";
3290
3306
  if (esm && !cjs) return "esm";
3291
3307
  if (cjs && esm) return "cjs";
@@ -3344,8 +3360,12 @@ function expandHome(token) {
3344
3360
  const h2 = home();
3345
3361
  return token.replace(/^\$\{HOME\}/, h2).replace(/^\$HOME/, h2).replace(/^~/, h2);
3346
3362
  }
3363
+ var TRAILING_SHELL_PUNCT = /* @__PURE__ */ new Set(["'", '"', "`", ";", ")", "|", "&", ">"]);
3347
3364
  function stripShellPunctuation(token) {
3348
- return token.replace(/^['"]+/, "").replace(/['"`;)|&>]+$/, "");
3365
+ const stripped = token.replace(/^['"]+/, "");
3366
+ let end = stripped.length;
3367
+ while (end > 0 && TRAILING_SHELL_PUNCT.has(stripped[end - 1])) end--;
3368
+ return stripped.slice(0, end);
3349
3369
  }
3350
3370
  function* claudePathsIn(command) {
3351
3371
  const claudePrefix = `${claudeHome()}/`;
@@ -6541,7 +6561,7 @@ function runDryRunPreview(st, map, repo) {
6541
6561
  renderNoScanTree(st, { noMapHint: true });
6542
6562
  return;
6543
6563
  }
6544
- const verdict = previewPushLeaks(map);
6564
+ const verdict = withSpinner("Scanning for secrets", () => previewPushLeaks(map));
6545
6565
  renderPushTree(st, verdict);
6546
6566
  if (verdict.recovery !== null) fail(verdict.recovery);
6547
6567
  }
@@ -7209,7 +7229,7 @@ function parsePushArgs(argv) {
7209
7229
  // package.json
7210
7230
  var package_default = {
7211
7231
  name: "claude-nomad",
7212
- version: "0.55.0",
7232
+ version: "0.55.1",
7213
7233
  type: "module",
7214
7234
  description: "Sync Claude Code config (~/.claude/) across machines via a private Git repo, with path remapping and per-host settings overrides.",
7215
7235
  keywords: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-nomad",
3
- "version": "0.55.0",
3
+ "version": "0.55.1",
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": [