claude-nomad 0.62.0 → 0.62.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 +19 -0
- package/dist/nomad.mjs +24 -23
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.62.1](https://github.com/funkadelic/claude-nomad/compare/v0.62.0...v0.62.1) (2026-07-20)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Changed
|
|
7
|
+
|
|
8
|
+
* **coderabbit:** skip Snyk security-bump PRs ([#436](https://github.com/funkadelic/claude-nomad/issues/436)) ([10ded7c](https://github.com/funkadelic/claude-nomad/commit/10ded7cb5657b1180f8d33b1fbf73c3000fea6c3))
|
|
9
|
+
* **deps:** refresh lockfile for brace-expansion and fast-uri patches ([#445](https://github.com/funkadelic/claude-nomad/issues/445)) ([d4ea973](https://github.com/funkadelic/claude-nomad/commit/d4ea9739a450c71763a98769f48a7deefb38eca5))
|
|
10
|
+
* drop 3 dead exports flagged by knip ([#437](https://github.com/funkadelic/claude-nomad/issues/437)) ([51750d8](https://github.com/funkadelic/claude-nomad/commit/51750d8801f96b4bca8137ac863c851d63f7c074))
|
|
11
|
+
* **redact:** extract shared live-session guard ([#438](https://github.com/funkadelic/claude-nomad/issues/438)) ([59d8208](https://github.com/funkadelic/claude-nomad/commit/59d82085aaf59a53d8341de6850240fdce4aa7ea))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Dependencies
|
|
15
|
+
|
|
16
|
+
* bump actions/setup-node from 6.4.0 to 7.0.0 ([#441](https://github.com/funkadelic/claude-nomad/issues/441)) ([f24a847](https://github.com/funkadelic/claude-nomad/commit/f24a847476e6ec63c4e85715c2ebfc42cce138c3))
|
|
17
|
+
* bump astro from 7.0.7 to 7.1.3 in /docs-site ([#444](https://github.com/funkadelic/claude-nomad/issues/444)) ([01d56b7](https://github.com/funkadelic/claude-nomad/commit/01d56b7f20e1ea71f1dd64b7076411abc4fe9c02))
|
|
18
|
+
* bump SonarSource/sonarqube-scan-action from 8.2.0 to 8.2.1 ([#443](https://github.com/funkadelic/claude-nomad/issues/443)) ([2928f0f](https://github.com/funkadelic/claude-nomad/commit/2928f0f87e40147a17b068b0053486fee6cbd6e6))
|
|
19
|
+
* bump the codeql-action group with 2 updates ([#440](https://github.com/funkadelic/claude-nomad/issues/440)) ([8d30319](https://github.com/funkadelic/claude-nomad/commit/8d303191e692128c5fdc9dfaab7ff1f16eb0780d))
|
|
20
|
+
* bump the dev-dependencies group with 2 updates ([#442](https://github.com/funkadelic/claude-nomad/issues/442)) ([22427db](https://github.com/funkadelic/claude-nomad/commit/22427dbbe4fb3f455a6ec24f0d4105dee904ee17))
|
|
21
|
+
|
|
3
22
|
## [0.62.0](https://github.com/funkadelic/claude-nomad/compare/v0.61.0...v0.62.0) (2026-07-18)
|
|
4
23
|
|
|
5
24
|
|
package/dist/nomad.mjs
CHANGED
|
@@ -4895,12 +4895,12 @@ import { isAbsolute as isAbsolute2, resolve as resolve3, sep as sep7 } from "nod
|
|
|
4895
4895
|
// src/commands.push.recovery.redact.ts
|
|
4896
4896
|
init_config();
|
|
4897
4897
|
init_config_sharedDirs_guard();
|
|
4898
|
-
import { cpSync as cpSync8, existsSync as existsSync32, mkdirSync as mkdirSync10
|
|
4898
|
+
import { cpSync as cpSync8, existsSync as existsSync32, mkdirSync as mkdirSync10 } from "node:fs";
|
|
4899
4899
|
import { dirname as dirname10, join as join39, sep as sep5 } from "node:path";
|
|
4900
4900
|
|
|
4901
4901
|
// src/commands.redact.ts
|
|
4902
4902
|
init_config();
|
|
4903
|
-
import { existsSync as existsSync30
|
|
4903
|
+
import { existsSync as existsSync30 } from "node:fs";
|
|
4904
4904
|
import { dirname as dirname9, join as join37 } from "node:path";
|
|
4905
4905
|
|
|
4906
4906
|
// src/commands.redact.subtree.ts
|
|
@@ -4936,6 +4936,10 @@ function newestSubtreeMtimeMs(mainPath, subtreeFiles, statMtime = (p) => statSyn
|
|
|
4936
4936
|
}
|
|
4937
4937
|
return newest;
|
|
4938
4938
|
}
|
|
4939
|
+
function isSubtreeActive(mainPath, subtreeFiles, now) {
|
|
4940
|
+
const subtreeMtime = newestSubtreeMtimeMs(mainPath, subtreeFiles, (p) => statSync6(p).mtimeMs);
|
|
4941
|
+
return isRecentlyModified(subtreeMtime, now);
|
|
4942
|
+
}
|
|
4939
4943
|
function applySubtreeRedactions(mainPath, mainFindings, subtreeFiles, rule, ts, scan, dryRun) {
|
|
4940
4944
|
const dirty = [];
|
|
4941
4945
|
if (mainFindings.length > 0) dirty.push({ path: mainPath, findings: mainFindings });
|
|
@@ -5059,8 +5063,7 @@ function cmdRedact(opts, nowMs = Date.now, scan = scanFile) {
|
|
|
5059
5063
|
}
|
|
5060
5064
|
const sessionDir = join37(dirname9(localPath), id);
|
|
5061
5065
|
const subtreeFiles = listSubtreeFiles(sessionDir);
|
|
5062
|
-
|
|
5063
|
-
if (isRecentlyModified(subtreeMtime, nowMs())) {
|
|
5066
|
+
if (isSubtreeActive(localPath, subtreeFiles, nowMs())) {
|
|
5064
5067
|
log(
|
|
5065
5068
|
`session ${id} was modified recently and may be active.
|
|
5066
5069
|
Refusing to rewrite a potentially live transcript.
|
|
@@ -5260,8 +5263,7 @@ function preflightRedactable(f, map, nowMs) {
|
|
|
5260
5263
|
if (localPath === null) return `session ${sid}: local transcript not found`;
|
|
5261
5264
|
const sessionDir = join39(dirname10(localPath), sid);
|
|
5262
5265
|
const subtreeFiles = listSubtreeFiles(sessionDir);
|
|
5263
|
-
|
|
5264
|
-
if (isRecentlyModified(subtreeMtime, nowMs())) {
|
|
5266
|
+
if (isSubtreeActive(localPath, subtreeFiles, nowMs())) {
|
|
5265
5267
|
return `session ${sid}: looks active (modified within the last 5 minutes)`;
|
|
5266
5268
|
}
|
|
5267
5269
|
if (resolveStagedDir(localPath, map, claudeHome(), repoHome()) === null) {
|
|
@@ -5290,8 +5292,7 @@ function applyRedact(f, ts, map, nowMs, scan = scanFile) {
|
|
|
5290
5292
|
}
|
|
5291
5293
|
const sessionDir = join39(dirname10(localPath), sid);
|
|
5292
5294
|
const subtreeFiles = listSubtreeFiles(sessionDir);
|
|
5293
|
-
|
|
5294
|
-
if (isRecentlyModified(subtreeMtime, nowMs())) {
|
|
5295
|
+
if (isSubtreeActive(localPath, subtreeFiles, nowMs())) {
|
|
5295
5296
|
return refuse(
|
|
5296
5297
|
`session ${sid} looks active (modified within the last 5 minutes); refusing to redact, no changes made.
|
|
5297
5298
|
End the session and choose Redact again, or choose Drop session (holds this session back from the push, local copy kept) or Skip.`
|
|
@@ -5354,7 +5355,7 @@ import {
|
|
|
5354
5355
|
mkdirSync as mkdirSync12,
|
|
5355
5356
|
readFileSync as readFileSync16,
|
|
5356
5357
|
realpathSync as realpathSync4,
|
|
5357
|
-
statSync as
|
|
5358
|
+
statSync as statSync7,
|
|
5358
5359
|
writeFileSync as writeFileSync8
|
|
5359
5360
|
} from "node:fs";
|
|
5360
5361
|
import { dirname as dirname11, join as join42, sep as sep6 } from "node:path";
|
|
@@ -5435,7 +5436,7 @@ function resolveSkillLocalPath(name, relPath) {
|
|
|
5435
5436
|
const realLocal = realpathSync4(localPath);
|
|
5436
5437
|
const realRoot = realpathSync4(skillsRoot);
|
|
5437
5438
|
if (!realLocal.startsWith(realRoot + sep6)) return null;
|
|
5438
|
-
if (!
|
|
5439
|
+
if (!statSync7(realLocal).isFile()) return null;
|
|
5439
5440
|
} catch {
|
|
5440
5441
|
return null;
|
|
5441
5442
|
}
|
|
@@ -6223,7 +6224,7 @@ function parseDoctorArgs(args) {
|
|
|
6223
6224
|
// src/commands.drop-session.ts
|
|
6224
6225
|
init_config();
|
|
6225
6226
|
import { execFileSync as execFileSync20 } from "node:child_process";
|
|
6226
|
-
import { existsSync as existsSync38, readdirSync as readdirSync15, statSync as
|
|
6227
|
+
import { existsSync as existsSync38, readdirSync as readdirSync15, statSync as statSync8 } from "node:fs";
|
|
6227
6228
|
import { join as join47, relative as relative6 } from "node:path";
|
|
6228
6229
|
|
|
6229
6230
|
// src/commands.drop-session.git.ts
|
|
@@ -6343,7 +6344,7 @@ function collectMatches(repoProjects, id, repo) {
|
|
|
6343
6344
|
matches.push(relative6(repo, candidate));
|
|
6344
6345
|
}
|
|
6345
6346
|
const dir = join47(repoProjects, logical, id);
|
|
6346
|
-
if (existsSync38(dir) &&
|
|
6347
|
+
if (existsSync38(dir) && statSync8(dir).isDirectory()) {
|
|
6347
6348
|
const dirRel = relative6(repo, dir);
|
|
6348
6349
|
const staged = expandStagedDir(dirRel, repo);
|
|
6349
6350
|
if (staged.length > 0) matches.push(...staged);
|
|
@@ -6487,7 +6488,7 @@ init_config();
|
|
|
6487
6488
|
|
|
6488
6489
|
// src/extras-sync.ts
|
|
6489
6490
|
init_config();
|
|
6490
|
-
import { existsSync as existsSync40, statSync as
|
|
6491
|
+
import { existsSync as existsSync40, statSync as statSync9 } from "node:fs";
|
|
6491
6492
|
import { join as join50 } from "node:path";
|
|
6492
6493
|
init_utils();
|
|
6493
6494
|
init_utils_json();
|
|
@@ -6799,7 +6800,7 @@ function divergenceCheckExtras(ts, prePostHeads) {
|
|
|
6799
6800
|
divergenceWarnLine({
|
|
6800
6801
|
dirname: dirname13,
|
|
6801
6802
|
logical,
|
|
6802
|
-
isDir:
|
|
6803
|
+
isDir: statSync9(local).isDirectory(),
|
|
6803
6804
|
count: modified.length,
|
|
6804
6805
|
projectBackupRoot
|
|
6805
6806
|
})
|
|
@@ -7466,7 +7467,7 @@ import { join as join57 } from "node:path";
|
|
|
7466
7467
|
|
|
7467
7468
|
// src/commands.push.selection.ts
|
|
7468
7469
|
init_config();
|
|
7469
|
-
import { existsSync as existsSync43, statSync as
|
|
7470
|
+
import { existsSync as existsSync43, statSync as statSync10 } from "node:fs";
|
|
7470
7471
|
import { join as join53 } from "node:path";
|
|
7471
7472
|
init_utils_json();
|
|
7472
7473
|
function buildCurrentMap(map) {
|
|
@@ -7479,7 +7480,7 @@ function buildCurrentMap(map) {
|
|
|
7479
7480
|
const localDir = join53(claude, "projects", encodePath(localPath));
|
|
7480
7481
|
if (!existsSync43(localDir)) continue;
|
|
7481
7482
|
for (const f of enumerateSourceFiles(localDir)) {
|
|
7482
|
-
const st =
|
|
7483
|
+
const st = statSync10(f);
|
|
7483
7484
|
current[f] = { size: st.size, mtime: st.mtimeMs };
|
|
7484
7485
|
}
|
|
7485
7486
|
}
|
|
@@ -8251,7 +8252,7 @@ init_config();
|
|
|
8251
8252
|
|
|
8252
8253
|
// src/crash-report.write.ts
|
|
8253
8254
|
init_config();
|
|
8254
|
-
import { mkdirSync as mkdirSync16, readdirSync as readdirSync18, statSync as
|
|
8255
|
+
import { mkdirSync as mkdirSync16, readdirSync as readdirSync18, statSync as statSync11, unlinkSync as unlinkSync2, writeFileSync as writeFileSync11 } from "node:fs";
|
|
8255
8256
|
import { join as join60 } from "node:path";
|
|
8256
8257
|
|
|
8257
8258
|
// src/crash-report.ts
|
|
@@ -8364,7 +8365,7 @@ function listCrashFiles(dir = crashDir()) {
|
|
|
8364
8365
|
try {
|
|
8365
8366
|
return readdirSync18(dir).flatMap((name) => {
|
|
8366
8367
|
try {
|
|
8367
|
-
return [{ name, mtimeMs:
|
|
8368
|
+
return [{ name, mtimeMs: statSync11(join60(dir, name)).mtimeMs }];
|
|
8368
8369
|
} catch {
|
|
8369
8370
|
return [];
|
|
8370
8371
|
}
|
|
@@ -8525,7 +8526,7 @@ init_config();
|
|
|
8525
8526
|
init_utils();
|
|
8526
8527
|
init_utils_fs();
|
|
8527
8528
|
init_utils_json();
|
|
8528
|
-
import { copyFileSync as copyFileSync2, cpSync as cpSync10, existsSync as existsSync49, rmSync as rmSync19, statSync as
|
|
8529
|
+
import { copyFileSync as copyFileSync2, cpSync as cpSync10, existsSync as existsSync49, rmSync as rmSync19, statSync as statSync12 } from "node:fs";
|
|
8529
8530
|
import { join as join62 } from "node:path";
|
|
8530
8531
|
function snapshotIntoShared(map) {
|
|
8531
8532
|
const repo = repoHome();
|
|
@@ -8534,7 +8535,7 @@ function snapshotIntoShared(map) {
|
|
|
8534
8535
|
const src = join62(claude, name);
|
|
8535
8536
|
if (!existsSync49(src)) continue;
|
|
8536
8537
|
const dst = join62(repo, "shared", name);
|
|
8537
|
-
if (
|
|
8538
|
+
if (statSync12(src).isDirectory()) {
|
|
8538
8539
|
const gk = join62(dst, ".gitkeep");
|
|
8539
8540
|
if (existsSync49(gk)) rmSync19(gk);
|
|
8540
8541
|
cpSync10(src, dst, { recursive: true, force: false, errorOnExist: true });
|
|
@@ -8676,13 +8677,13 @@ function maybeDisableRepoActions(repoHome2, run) {
|
|
|
8676
8677
|
// src/init.prompt.ts
|
|
8677
8678
|
init_config();
|
|
8678
8679
|
init_utils();
|
|
8679
|
-
import { existsSync as existsSync51, readdirSync as readdirSync19, statSync as
|
|
8680
|
+
import { existsSync as existsSync51, readdirSync as readdirSync19, statSync as statSync13 } from "node:fs";
|
|
8680
8681
|
import { join as join64 } from "node:path";
|
|
8681
8682
|
import { createInterface as createInterface3 } from "node:readline/promises";
|
|
8682
8683
|
function nonEmptyExists(path) {
|
|
8683
8684
|
if (!existsSync51(path)) return false;
|
|
8684
8685
|
try {
|
|
8685
|
-
if (
|
|
8686
|
+
if (statSync13(path).isDirectory()) return readdirSync19(path).length > 0;
|
|
8686
8687
|
return true;
|
|
8687
8688
|
} catch {
|
|
8688
8689
|
return false;
|
|
@@ -8997,7 +8998,7 @@ function parseSyncArgs(argv) {
|
|
|
8997
8998
|
// package.json
|
|
8998
8999
|
var package_default = {
|
|
8999
9000
|
name: "claude-nomad",
|
|
9000
|
-
version: "0.62.
|
|
9001
|
+
version: "0.62.1",
|
|
9001
9002
|
type: "module",
|
|
9002
9003
|
description: "Sync Claude Code config (~/.claude/) across machines via a private Git repo, with path remapping and per-host settings overrides.",
|
|
9003
9004
|
keywords: [
|
package/package.json
CHANGED