@lannguyensi/harness 0.5.0 → 0.6.0
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 +77 -0
- package/README.md +56 -16
- package/dist/cli/add/mutate.d.ts +4 -0
- package/dist/cli/add/mutate.js +30 -1
- package/dist/cli/add/mutate.js.map +1 -1
- package/dist/cli/adopt/derive.d.ts +23 -0
- package/dist/cli/adopt/derive.js +85 -0
- package/dist/cli/adopt/derive.js.map +1 -1
- package/dist/cli/adopt/index.d.ts +9 -1
- package/dist/cli/adopt/index.js +72 -4
- package/dist/cli/adopt/index.js.map +1 -1
- package/dist/cli/apply/apply.d.ts +45 -1
- package/dist/cli/apply/apply.js +237 -25
- package/dist/cli/apply/apply.js.map +1 -1
- package/dist/cli/apply/generate-settings.d.ts +13 -1
- package/dist/cli/apply/generate-settings.js +45 -0
- package/dist/cli/apply/generate-settings.js.map +1 -1
- package/dist/cli/apply/index.d.ts +1 -0
- package/dist/cli/apply/index.js +1 -0
- package/dist/cli/apply/index.js.map +1 -1
- package/dist/cli/apply/next-steps.d.ts +7 -0
- package/dist/cli/apply/next-steps.js +37 -0
- package/dist/cli/apply/next-steps.js.map +1 -0
- package/dist/cli/audit.js +2 -1
- package/dist/cli/audit.js.map +1 -1
- package/dist/cli/diff/since-apply.js +1 -1
- package/dist/cli/diff/since-apply.js.map +1 -1
- package/dist/cli/doctor/format.js +17 -3
- package/dist/cli/doctor/format.js.map +1 -1
- package/dist/cli/doctor/index.js +9 -2
- package/dist/cli/doctor/index.js.map +1 -1
- package/dist/cli/doctor/types.d.ts +0 -2
- package/dist/cli/index.js +83 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/validate/index.d.ts +8 -0
- package/dist/cli/validate/index.js +37 -1
- package/dist/cli/validate/index.js.map +1 -1
- package/dist/io/harness-lock.d.ts +6 -1
- package/dist/io/harness-lock.js +2 -2
- package/dist/io/harness-lock.js.map +1 -1
- package/dist/io/merge-settings.d.ts +8 -0
- package/dist/io/merge-settings.js +47 -0
- package/dist/io/merge-settings.js.map +1 -0
- package/dist/policies/ledger-client.js +3 -2
- package/dist/policies/ledger-client.js.map +1 -1
- package/dist/policies/requires.js +3 -2
- package/dist/policies/requires.js.map +1 -1
- package/dist/probes/mcp.d.ts +13 -0
- package/dist/probes/mcp.js +26 -3
- package/dist/probes/mcp.js.map +1 -1
- package/dist/runtime/intercept.js +3 -2
- package/dist/runtime/intercept.js.map +1 -1
- package/dist/runtime/ledger-record.d.ts +8 -0
- package/dist/runtime/ledger-record.js +11 -3
- package/dist/runtime/ledger-record.js.map +1 -1
- package/package.json +1 -1
|
@@ -10,10 +10,40 @@ export interface ApplyOptions {
|
|
|
10
10
|
project?: string;
|
|
11
11
|
dryRun?: boolean;
|
|
12
12
|
overwriteDrift?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Phase 3 follow-up: when set, any non-empty `lockDrift` causes apply
|
|
15
|
+
* to refuse with the `lock-drift-refuse` outcome before writing,
|
|
16
|
+
* prompting, or regenerating the lock (no on-disk side effects). The
|
|
17
|
+
* user must either re-run without `--strict-lock` to acknowledge and
|
|
18
|
+
* refresh the lock, or revert the upstream asset edit.
|
|
19
|
+
*
|
|
20
|
+
* Dry-run wins: `--strict-lock --dry-run` reports the would-be drift
|
|
21
|
+
* and exits 0, leaving the existing dry-run scope intact.
|
|
22
|
+
*/
|
|
23
|
+
strictLock?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* `--target <path>`: also write the generated settings.json to <path>
|
|
26
|
+
* (in addition to harness.generated/). Resolved relative to cwd if not
|
|
27
|
+
* absolute; `~` is expanded. Pairs with `--merge` (3-way merge into an
|
|
28
|
+
* existing target file) or `--force` (overwrite existing target).
|
|
29
|
+
*/
|
|
30
|
+
target?: string;
|
|
31
|
+
/**
|
|
32
|
+
* `--merge`: when --target points at a file that already exists, do a
|
|
33
|
+
* 3-way merge: replace the keys harness owns (whichever appear in the
|
|
34
|
+
* generated output, today: `hooks`); preserve every other top-level
|
|
35
|
+
* key in the existing file verbatim.
|
|
36
|
+
*/
|
|
37
|
+
merge?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* `--force`: overwrite an existing target file with the generated
|
|
40
|
+
* settings as-is. Mutually exclusive with --merge.
|
|
41
|
+
*/
|
|
42
|
+
force?: boolean;
|
|
13
43
|
/** Test-injectable confirmation prompt; defaults to a stdin readline. */
|
|
14
44
|
prompt?: (message: string) => Promise<string>;
|
|
15
45
|
}
|
|
16
|
-
export type ApplyOutcome = "no-changes" | "applied" | "drift-refuse" | "drift-discarded" | "would-apply";
|
|
46
|
+
export type ApplyOutcome = "no-changes" | "applied" | "drift-refuse" | "drift-discarded" | "would-apply" | "lock-drift-refuse" | "target-exists-refuse";
|
|
17
47
|
export interface FileApplyOutcome {
|
|
18
48
|
basename: string;
|
|
19
49
|
path: string;
|
|
@@ -43,6 +73,20 @@ export interface ApplyResult {
|
|
|
43
73
|
dryRun: boolean;
|
|
44
74
|
/** Path of the harness.lock that was (or would be) written. */
|
|
45
75
|
lockPath: string;
|
|
76
|
+
/**
|
|
77
|
+
* Set when --target was passed: the absolute resolved target path.
|
|
78
|
+
* Present on every outcome (including target-exists-refuse and dry-run)
|
|
79
|
+
* so the CLI layer can include it in user-facing messages.
|
|
80
|
+
*/
|
|
81
|
+
targetPath?: string;
|
|
82
|
+
/** Whether the target file was written this run. */
|
|
83
|
+
targetWritten?: boolean;
|
|
84
|
+
/**
|
|
85
|
+
* Human-readable one-liner describing the merge outcome, e.g.
|
|
86
|
+
* `merged into /path: replaced 1 owned key (hooks), preserved 4 other keys`.
|
|
87
|
+
* Present when --merge succeeded against an existing target.
|
|
88
|
+
*/
|
|
89
|
+
targetMergeSummary?: string;
|
|
46
90
|
}
|
|
47
91
|
declare const DRIFT_HINT_MESSAGE = "run \"harness adopt <file>\" to capture changes, or re-run with --overwrite-drift to discard them";
|
|
48
92
|
export declare function apply(opts?: ApplyOptions): Promise<ApplyResult>;
|
package/dist/cli/apply/apply.js
CHANGED
|
@@ -31,6 +31,7 @@ import * as path from "node:path";
|
|
|
31
31
|
import * as readline from "node:readline/promises";
|
|
32
32
|
import { atomicWriteFile } from "../../io/atomic-write.js";
|
|
33
33
|
import { LOCK_BASENAME, buildLockEntries, computeDrift, readLock, writeLock, } from "../../io/harness-lock.js";
|
|
34
|
+
import { mergeSettings, summarizeMerge } from "../../io/merge-settings.js";
|
|
34
35
|
import { buildLastApply, readLastApply, sha256Hex, verifyLastApplyIntegrity, writeLastApply, } from "../../io/last-apply.js";
|
|
35
36
|
import { unifiedDiff } from "../../io/patch.js";
|
|
36
37
|
import { emitRestartHints } from "../../io/restart-hints.js";
|
|
@@ -39,7 +40,7 @@ import { parseManifest } from "../../schema/index.js";
|
|
|
39
40
|
import { EX_NOINPUT, HarnessExitError } from "../exit-codes.js";
|
|
40
41
|
import { loadManifest } from "../loader.js";
|
|
41
42
|
import { generateMemoryIndex } from "./generate-memory-index.js";
|
|
42
|
-
import {
|
|
43
|
+
import { generateSettingsWithWarnings } from "./generate-settings.js";
|
|
43
44
|
export const GENERATED_DIRNAME = "harness.generated";
|
|
44
45
|
export const SETTINGS_BASENAME = "settings.json";
|
|
45
46
|
export const MEMORY_BASENAME = "MEMORY.md";
|
|
@@ -50,6 +51,43 @@ function resolveManifestPath(opts) {
|
|
|
50
51
|
return path.resolve(opts.configPath);
|
|
51
52
|
return path.join(opts.homeDir ?? path.join(os.homedir(), ".claude"), MANIFEST_BASENAME);
|
|
52
53
|
}
|
|
54
|
+
function resolveTargetPath(target, homeDir) {
|
|
55
|
+
let p = target;
|
|
56
|
+
if (p === "~")
|
|
57
|
+
p = homeDir ?? os.homedir();
|
|
58
|
+
else if (p.startsWith("~/"))
|
|
59
|
+
p = path.join(homeDir ?? os.homedir(), p.slice(2));
|
|
60
|
+
return path.resolve(p);
|
|
61
|
+
}
|
|
62
|
+
function readTargetJson(targetPath) {
|
|
63
|
+
let raw;
|
|
64
|
+
try {
|
|
65
|
+
raw = fs.readFileSync(targetPath, "utf8");
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
const err = e;
|
|
69
|
+
if (err.code === "EISDIR") {
|
|
70
|
+
return { parsed: null, parseError: "target path is a directory, not a file" };
|
|
71
|
+
}
|
|
72
|
+
return { parsed: null, parseError: null };
|
|
73
|
+
}
|
|
74
|
+
if (raw.trim() === "")
|
|
75
|
+
return { parsed: {}, parseError: null };
|
|
76
|
+
let parsed;
|
|
77
|
+
try {
|
|
78
|
+
parsed = JSON.parse(raw);
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
return { parsed: null, parseError: e.message };
|
|
82
|
+
}
|
|
83
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
84
|
+
return { parsed: null, parseError: "target file is not a JSON object" };
|
|
85
|
+
}
|
|
86
|
+
return { parsed: parsed, parseError: null };
|
|
87
|
+
}
|
|
88
|
+
function serializeJson(obj) {
|
|
89
|
+
return `${JSON.stringify(obj, null, 2)}\n`;
|
|
90
|
+
}
|
|
53
91
|
// `harness.generated/` lives next to whichever manifest is in use. If the
|
|
54
92
|
// user passed `--config /repo/path/harness.yaml`, generated artefacts go to
|
|
55
93
|
// `/repo/path/harness.generated/` (NOT `~/.claude/harness.generated/`). This
|
|
@@ -73,7 +111,8 @@ async function readlinePrompt(message) {
|
|
|
73
111
|
}
|
|
74
112
|
}
|
|
75
113
|
function buildExpectedFiles(manifest, opts) {
|
|
76
|
-
const
|
|
114
|
+
const settingsResult = generateSettingsWithWarnings(manifest);
|
|
115
|
+
const settings = `${JSON.stringify(settingsResult.root, null, 2)}\n`;
|
|
77
116
|
const indexResult = generateMemoryIndex(manifest, {
|
|
78
117
|
...(opts.homeDir !== undefined ? { homeDir: opts.homeDir } : {}),
|
|
79
118
|
...(opts.project !== undefined ? { projectName: opts.project } : {}),
|
|
@@ -83,7 +122,7 @@ function buildExpectedFiles(manifest, opts) {
|
|
|
83
122
|
{ basename: SETTINGS_BASENAME, content: settings },
|
|
84
123
|
{ basename: MEMORY_BASENAME, content: indexResult.content },
|
|
85
124
|
],
|
|
86
|
-
warnings: indexResult.warnings,
|
|
125
|
+
warnings: [...settingsResult.warnings, ...indexResult.warnings],
|
|
87
126
|
};
|
|
88
127
|
}
|
|
89
128
|
function readOnDisk(filePath) {
|
|
@@ -150,6 +189,98 @@ export async function apply(opts = {}) {
|
|
|
150
189
|
// whether the manifest still references it.
|
|
151
190
|
const previousLock = readLock(lockPath);
|
|
152
191
|
const lockDrift = previousLock !== null ? computeDrift(previousLock) : [];
|
|
192
|
+
// Phase 3 follow-up (strict-lock): when --strict-lock is set and any
|
|
193
|
+
// locked asset has drifted, refuse with a distinct outcome before we
|
|
194
|
+
// write anything, prompt, or regenerate the lock. (buildExpectedFiles
|
|
195
|
+
// ran above; that is pure computation against the in-memory manifest
|
|
196
|
+
// and produces no on-disk side effects, so running it pre-gate is
|
|
197
|
+
// harmless and keeps the order independent of strict-lock.) Dry-run
|
|
198
|
+
// wins per the task spec: `--strict-lock --dry-run` falls through to
|
|
199
|
+
// the regular dry-run path so the user can preview the would-be
|
|
200
|
+
// drift without exiting non-zero.
|
|
201
|
+
if (opts.strictLock && lockDrift.length > 0 && !opts.dryRun) {
|
|
202
|
+
return {
|
|
203
|
+
manifestPath,
|
|
204
|
+
generatedDir,
|
|
205
|
+
files: [],
|
|
206
|
+
warnings,
|
|
207
|
+
restartHints: [],
|
|
208
|
+
outcome: "lock-drift-refuse",
|
|
209
|
+
lockDrift,
|
|
210
|
+
written: false,
|
|
211
|
+
dryRun: false,
|
|
212
|
+
lockPath,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
// --target precondition: validate up front so we don't half-apply (write
|
|
216
|
+
// harness.generated/, then refuse on the target). The settings.json
|
|
217
|
+
// expected content is the manifest's projection — so the merge inputs
|
|
218
|
+
// are already known here.
|
|
219
|
+
const targetPath = opts.target ? resolveTargetPath(opts.target, opts.homeDir) : undefined;
|
|
220
|
+
if (!targetPath && (opts.merge || opts.force)) {
|
|
221
|
+
throw new HarnessExitError(`--${opts.merge ? "merge" : "force"} requires --target`, EX_NOINPUT);
|
|
222
|
+
}
|
|
223
|
+
let targetContent;
|
|
224
|
+
let targetMergeSummary;
|
|
225
|
+
let targetChanged = false;
|
|
226
|
+
if (targetPath) {
|
|
227
|
+
if (opts.merge && opts.force) {
|
|
228
|
+
throw new HarnessExitError("--merge and --force are mutually exclusive", EX_NOINPUT);
|
|
229
|
+
}
|
|
230
|
+
const settingsExpected = expected.find((f) => f.basename === SETTINGS_BASENAME);
|
|
231
|
+
if (!settingsExpected) {
|
|
232
|
+
throw new HarnessExitError("internal: settings.json missing from expected files", EX_NOINPUT);
|
|
233
|
+
}
|
|
234
|
+
const generatedSettings = JSON.parse(settingsExpected.content);
|
|
235
|
+
let targetStat = null;
|
|
236
|
+
try {
|
|
237
|
+
targetStat = fs.statSync(targetPath);
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
targetStat = null;
|
|
241
|
+
}
|
|
242
|
+
if (targetStat !== null && !targetStat.isFile()) {
|
|
243
|
+
throw new HarnessExitError(`target ${targetPath} exists but is not a regular file (e.g. directory or device)`, EX_NOINPUT);
|
|
244
|
+
}
|
|
245
|
+
const targetExists = targetStat !== null;
|
|
246
|
+
if (targetExists) {
|
|
247
|
+
const { parsed, parseError } = readTargetJson(targetPath);
|
|
248
|
+
if (opts.merge) {
|
|
249
|
+
if (parseError !== null) {
|
|
250
|
+
throw new HarnessExitError(`cannot --merge into ${targetPath}: ${parseError}`, EX_NOINPUT);
|
|
251
|
+
}
|
|
252
|
+
const mergeResult = mergeSettings(parsed, generatedSettings);
|
|
253
|
+
targetContent = serializeJson(mergeResult.merged);
|
|
254
|
+
targetMergeSummary = summarizeMerge(targetPath, mergeResult);
|
|
255
|
+
}
|
|
256
|
+
else if (opts.force) {
|
|
257
|
+
targetContent = settingsExpected.content;
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
return {
|
|
261
|
+
manifestPath,
|
|
262
|
+
generatedDir,
|
|
263
|
+
files: [],
|
|
264
|
+
warnings,
|
|
265
|
+
restartHints: [],
|
|
266
|
+
outcome: "target-exists-refuse",
|
|
267
|
+
lockDrift,
|
|
268
|
+
written: false,
|
|
269
|
+
dryRun: opts.dryRun ?? false,
|
|
270
|
+
lockPath,
|
|
271
|
+
targetPath,
|
|
272
|
+
targetWritten: false,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
targetContent = settingsExpected.content;
|
|
278
|
+
}
|
|
279
|
+
if (targetContent !== undefined) {
|
|
280
|
+
const currentTargetContent = readOnDisk(targetPath);
|
|
281
|
+
targetChanged = currentTargetContent !== targetContent;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
153
284
|
const fileOutcomes = [];
|
|
154
285
|
let anyDriftRefuse = false;
|
|
155
286
|
let anyChanged = false;
|
|
@@ -224,20 +355,27 @@ export async function apply(opts = {}) {
|
|
|
224
355
|
const prevManifest = buildPrevManifestForHints(lastApply);
|
|
225
356
|
const restartHints = prevManifest ? emitRestartHints(prevManifest, manifest) : [];
|
|
226
357
|
if (opts.dryRun) {
|
|
227
|
-
|
|
358
|
+
const result = {
|
|
228
359
|
manifestPath,
|
|
229
360
|
generatedDir,
|
|
230
361
|
files: fileOutcomes,
|
|
231
362
|
warnings,
|
|
232
363
|
restartHints,
|
|
233
|
-
outcome: anyChanged ? "would-apply" : "no-changes",
|
|
364
|
+
outcome: anyChanged || targetChanged ? "would-apply" : "no-changes",
|
|
234
365
|
lockDrift,
|
|
235
366
|
written: false,
|
|
236
367
|
dryRun: true,
|
|
237
368
|
lockPath,
|
|
238
369
|
};
|
|
370
|
+
if (targetPath) {
|
|
371
|
+
result.targetPath = targetPath;
|
|
372
|
+
result.targetWritten = false;
|
|
373
|
+
if (targetMergeSummary !== undefined)
|
|
374
|
+
result.targetMergeSummary = targetMergeSummary;
|
|
375
|
+
}
|
|
376
|
+
return result;
|
|
239
377
|
}
|
|
240
|
-
if (!anyChanged && lastApply !== null) {
|
|
378
|
+
if (!anyChanged && !targetChanged && lastApply !== null) {
|
|
241
379
|
// Idempotent no-op for generated files. If asset-content drift was
|
|
242
380
|
// detected against harness.lock, rewrite the lock now with current
|
|
243
381
|
// SHAs so the drift is not "sticky": the user sees the drift line
|
|
@@ -249,9 +387,10 @@ export async function apply(opts = {}) {
|
|
|
249
387
|
...(opts.homeDir !== undefined ? { homeDir: opts.homeDir } : {}),
|
|
250
388
|
...(opts.project !== undefined ? { projectName: opts.project } : {}),
|
|
251
389
|
});
|
|
252
|
-
|
|
390
|
+
const refreshedWithTarget = appendTargetEntry(refreshed, targetPath, targetContent, previousLock);
|
|
391
|
+
writeLock(lockPath, refreshedWithTarget);
|
|
253
392
|
}
|
|
254
|
-
|
|
393
|
+
const result = {
|
|
255
394
|
manifestPath,
|
|
256
395
|
generatedDir,
|
|
257
396
|
files: fileOutcomes,
|
|
@@ -263,11 +402,24 @@ export async function apply(opts = {}) {
|
|
|
263
402
|
dryRun: false,
|
|
264
403
|
lockPath,
|
|
265
404
|
};
|
|
405
|
+
if (targetPath) {
|
|
406
|
+
result.targetPath = targetPath;
|
|
407
|
+
result.targetWritten = false;
|
|
408
|
+
}
|
|
409
|
+
return result;
|
|
266
410
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
411
|
+
// Only write generated files if anything in harness.generated/ actually
|
|
412
|
+
// changed. When the user passed --target on an otherwise-clean tree,
|
|
413
|
+
// anyChanged may be false but targetChanged true: we still want to write
|
|
414
|
+
// the target without re-touching harness.generated/ files (and without
|
|
415
|
+
// re-stamping .last-apply, which would invalidate the no-changes
|
|
416
|
+
// shortcut on the very next apply).
|
|
417
|
+
if (anyChanged) {
|
|
418
|
+
fs.mkdirSync(generatedDir, { recursive: true });
|
|
419
|
+
for (const f of expected) {
|
|
420
|
+
const target = path.join(generatedDir, f.basename);
|
|
421
|
+
atomicWriteFile(target, f.content);
|
|
422
|
+
}
|
|
271
423
|
}
|
|
272
424
|
// Compute lock + memory-dir snapshot BEFORE writing .last-apply so the
|
|
273
425
|
// record is built once and persisted atomically. A previous version of
|
|
@@ -279,19 +431,32 @@ export async function apply(opts = {}) {
|
|
|
279
431
|
...(opts.homeDir !== undefined ? { homeDir: opts.homeDir } : {}),
|
|
280
432
|
...(opts.project !== undefined ? { projectName: opts.project } : {}),
|
|
281
433
|
});
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
434
|
+
// Target write happens BEFORE the lock + .last-apply records so the
|
|
435
|
+
// recorded sha matches what's actually on disk (and so a crash between
|
|
436
|
+
// target-write and lock-write produces a re-applyable state, not a
|
|
437
|
+
// permanently-drifted lock).
|
|
438
|
+
let targetWritten = false;
|
|
439
|
+
if (targetPath && targetContent !== undefined && targetChanged) {
|
|
440
|
+
fs.mkdirSync(path.dirname(targetPath), { recursive: true });
|
|
441
|
+
atomicWriteFile(targetPath, targetContent);
|
|
442
|
+
targetWritten = true;
|
|
291
443
|
}
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
444
|
+
const lockEntriesWithTarget = appendTargetEntry(lockEntries, targetPath, targetContent, previousLock);
|
|
445
|
+
if (anyChanged) {
|
|
446
|
+
const newRecord = buildLastApply(Object.fromEntries(expected.map((f) => [f.basename, f.content])));
|
|
447
|
+
const manifestSnapshotJson = JSON.stringify(manifest);
|
|
448
|
+
newRecord.manifest = {
|
|
449
|
+
sha256: sha256Hex(manifestSnapshotJson),
|
|
450
|
+
content: manifestSnapshotJson,
|
|
451
|
+
};
|
|
452
|
+
const memoryDirSnapshots = collectMemoryDirSnapshots(lockEntries);
|
|
453
|
+
if (Object.keys(memoryDirSnapshots).length > 0) {
|
|
454
|
+
newRecord.memoryDirs = memoryDirSnapshots;
|
|
455
|
+
}
|
|
456
|
+
writeLastApply(generatedDir, newRecord);
|
|
457
|
+
}
|
|
458
|
+
writeLock(lockPath, lockEntriesWithTarget);
|
|
459
|
+
const result = {
|
|
295
460
|
manifestPath,
|
|
296
461
|
generatedDir,
|
|
297
462
|
files: fileOutcomes,
|
|
@@ -299,10 +464,57 @@ export async function apply(opts = {}) {
|
|
|
299
464
|
restartHints,
|
|
300
465
|
outcome: "applied",
|
|
301
466
|
lockDrift,
|
|
302
|
-
written:
|
|
467
|
+
written: anyChanged,
|
|
303
468
|
dryRun: false,
|
|
304
469
|
lockPath,
|
|
305
470
|
};
|
|
471
|
+
if (targetPath) {
|
|
472
|
+
result.targetPath = targetPath;
|
|
473
|
+
result.targetWritten = targetWritten;
|
|
474
|
+
if (targetMergeSummary !== undefined)
|
|
475
|
+
result.targetMergeSummary = targetMergeSummary;
|
|
476
|
+
}
|
|
477
|
+
return result;
|
|
478
|
+
}
|
|
479
|
+
function appendTargetEntry(entries, targetPath, targetContent, previousLock) {
|
|
480
|
+
// Current invocation passed --target: emit an entry hashing the content
|
|
481
|
+
// we're writing this run.
|
|
482
|
+
if (targetPath && targetContent !== undefined) {
|
|
483
|
+
return [
|
|
484
|
+
...entries,
|
|
485
|
+
{
|
|
486
|
+
kind: "target",
|
|
487
|
+
path: targetPath,
|
|
488
|
+
sha256: crypto.createHash("sha256").update(targetContent).digest("hex"),
|
|
489
|
+
},
|
|
490
|
+
];
|
|
491
|
+
}
|
|
492
|
+
// No --target this run, but a prior apply set one up: carry every prior
|
|
493
|
+
// target entry forward, re-hashing the on-disk content so the lock
|
|
494
|
+
// remains an accurate drift baseline. A target file deleted out-of-band
|
|
495
|
+
// is dropped from the lock here (the next `validate --check-lock` would
|
|
496
|
+
// otherwise report it as missing forever); this matches the existing
|
|
497
|
+
// asset-handling at the same layer.
|
|
498
|
+
if (!previousLock)
|
|
499
|
+
return entries;
|
|
500
|
+
const carried = [];
|
|
501
|
+
for (const e of previousLock) {
|
|
502
|
+
if (e.kind !== "target")
|
|
503
|
+
continue;
|
|
504
|
+
let content;
|
|
505
|
+
try {
|
|
506
|
+
content = fs.readFileSync(e.path);
|
|
507
|
+
}
|
|
508
|
+
catch {
|
|
509
|
+
continue;
|
|
510
|
+
}
|
|
511
|
+
carried.push({
|
|
512
|
+
kind: "target",
|
|
513
|
+
path: e.path,
|
|
514
|
+
sha256: crypto.createHash("sha256").update(content).digest("hex"),
|
|
515
|
+
});
|
|
516
|
+
}
|
|
517
|
+
return [...entries, ...carried];
|
|
306
518
|
}
|
|
307
519
|
function sha256OfFile(filePath) {
|
|
308
520
|
return crypto.createHash("sha256").update(fs.readFileSync(filePath)).digest("hex");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../src/cli/apply/apply.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,YAAY;AACZ,oCAAoC;AACpC,oEAAoE;AACpE,qCAAqC;AACrC,qEAAqE;AACrE,2DAA2D;AAC3D,sEAAsE;AACtE,iEAAiE;AACjE,kEAAkE;AAClE,uDAAuD;AACvD,kDAAkD;AAClD,6DAA6D;AAC7D,mEAAmE;AACnE,qEAAqE;AACrE,sEAAsE;AACtE,iEAAiE;AACjE,uBAAuB;AACvB,wEAAwE;AACxE,wBAAwB;AACxB,sEAAsE;AACtE,qEAAqE;AACrE,sEAAsE;AACtE,sEAAsE;AACtE,yDAAyD;AAEzD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,SAAS,GAEV,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,cAAc,EACd,aAAa,EACb,SAAS,EACT,wBAAwB,EACxB,cAAc,GAEf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAA0B,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAiB,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AACrD,MAAM,CAAC,MAAM,iBAAiB,GAAG,eAAe,CAAC;AACjD,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAC3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAmDhD,MAAM,kBAAkB,GACtB,iGAAiG,CAAC;AAEpG,SAAS,mBAAmB,CAAC,IAAkB;IAC7C,IAAI,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAC1F,CAAC;AAED,0EAA0E;AAC1E,4EAA4E;AAC5E,6EAA6E;AAC7E,2EAA2E;AAC3E,kDAAkD;AAClD,SAAS,mBAAmB,CAAC,IAAkB,EAAE,YAAoB;IACnE,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAClF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAClE,CAAC;AAED,0EAA0E;AAC1E,yEAAyE;AACzE,oDAAoD;AACpD,KAAK,UAAU,cAAc,CAAC,OAAe;IAC3C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAOD,SAAS,kBAAkB,CACzB,QAAkB,EAClB,IAAkB;IAElB,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IAC5E,MAAM,WAAW,GAAG,mBAAmB,CAAC,QAAQ,EAAE;QAChD,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrE,CAAC,CAAC;IACH,OAAO;QACL,KAAK,EAAE;YACL,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,QAAQ,EAAE;YAClD,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE;SAC5D;QACD,QAAQ,EAAE,WAAW,CAAC,QAAQ;KAC/B,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,QAAgB;IAClC,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAAC,MAA8B;IAC/D,IAAI,CAAC,MAAM,EAAE,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnC,oEAAoE;IACpE,wEAAwE;IACxE,yEAAyE;IACzE,gEAAgE;IAChE,MAAM,SAAS,GAAG,wBAAwB,CAAC;QACzC,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;KACrC,CAAC,CAAC;IACH,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAqB,EAAE;IACjD,MAAM,YAAY,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,gBAAgB,CACxB,iCAAiC,YAAY,8BAA8B,EAC3E,UAAU,CACX,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,mBAAmB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,CAAC;IAEtE,MAAM,UAAU,GAAuC;QACrD,UAAU,EAAE,YAAY;KACzB,CAAC;IACF,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAClE,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAClE,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAE9C,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACzE,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IAE9C,wEAAwE;IACxE,0EAA0E;IAC1E,wEAAwE;IACxE,0EAA0E;IAC1E,0CAA0C;IAC1C,EAAE;IACF,yEAAyE;IACzE,0EAA0E;IAC1E,yEAAyE;IACzE,yEAAyE;IACzE,4CAA4C;IAC5C,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,SAAS,GAAmB,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1F,MAAM,YAAY,GAAuB,EAAE,CAAC;IAC5C,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,kBAAkB,GAAG,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC;QACzE,MAAM,OAAO,GAAG,OAAO,CAAC;YACtB,gBAAgB,EAAE,CAAC,CAAC,OAAO;YAC3B,WAAW,EAAE,kBAAkB;YAC/B,aAAa,EAAE,MAAM;SACtB,CAAC,CAAC;QACH,MAAM,OAAO,GAAqB;YAChC,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,IAAI,EAAE,MAAM;YACZ,OAAO;YACP,OAAO,EAAE,CAAC,CAAC,OAAO,KAAK,MAAM;SAC9B,CAAC;QACF,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;YAC/B,cAAc,GAAG,IAAI,CAAC;YACtB,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC;gBACzB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,OAAO,EAAE,kBAAkB,IAAI,EAAE;gBACjC,OAAO,EAAE,MAAM,IAAI,EAAE;gBACrB,SAAS,EAAE,YAAY;gBACvB,SAAS,EAAE,SAAS;aACrB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,CAAC,OAAO;YAAE,UAAU,GAAG,IAAI,CAAC;QACvC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QAC3C,OAAO;YACL,YAAY;YACZ,YAAY;YACZ,KAAK,EAAE,YAAY;YACnB,QAAQ;YACR,YAAY,EAAE,EAAE;YAChB,OAAO,EAAE,cAAc;YACvB,SAAS;YACT,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;YAC5B,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,IAAI,cAAc,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B,yFAAyF,CAC1F,CAAC;QACF,uEAAuE;QACvE,mEAAmE;QACnE,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;YAC1C,OAAO;gBACL,YAAY;gBACZ,YAAY;gBACZ,KAAK,EAAE,YAAY;gBACnB,QAAQ;gBACR,YAAY,EAAE,EAAE;gBAChB,OAAO,EAAE,iBAAiB;gBAC1B,SAAS;gBACT,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;gBAC5B,QAAQ;aACT,CAAC;QACJ,CAAC;QACD,uEAAuE;QACvE,oEAAoE;QACpE,kEAAkE;IACpE,CAAC;IAED,uEAAuE;IACvE,8BAA8B;IAC9B,MAAM,YAAY,GAAG,yBAAyB,CAAC,SAAS,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAElF,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO;YACL,YAAY;YACZ,YAAY;YACZ,KAAK,EAAE,YAAY;YACnB,QAAQ;YACR,YAAY;YACZ,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY;YAClD,SAAS;YACT,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,IAAI;YACZ,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,UAAU,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACtC,mEAAmE;QACnE,mEAAmE;QACnE,kEAAkE;QAClE,gEAAgE;QAChE,kEAAkE;QAClE,wBAAwB;QACxB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,EAAE;gBAC3C,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrE,CAAC,CAAC;YACH,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACjC,CAAC;QACD,OAAO;YACL,YAAY;YACZ,YAAY;YACZ,KAAK,EAAE,YAAY;YACnB,QAAQ;YACR,YAAY;YACZ,OAAO,EAAE,YAAY;YACrB,SAAS;YACT,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,KAAK;YACb,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;QACnD,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,uEAAuE;IACvE,uEAAuE;IACvE,yEAAyE;IACzE,oEAAoE;IACpE,wEAAwE;IACxE,uEAAuE;IACvE,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,EAAE;QAC7C,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrE,CAAC,CAAC;IAEH,MAAM,SAAS,GAAoB,cAAc,CAC/C,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACjE,CAAC;IACF,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtD,SAAS,CAAC,QAAQ,GAAG;QACnB,MAAM,EAAE,SAAS,CAAC,oBAAoB,CAAC;QACvC,OAAO,EAAE,oBAAoB;KAC9B,CAAC;IACF,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAC;IAClE,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,SAAS,CAAC,UAAU,GAAG,kBAAkB,CAAC;IAC5C,CAAC;IAED,cAAc,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IACxC,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAEjC,OAAO;QACL,YAAY;QACZ,YAAY;QACZ,KAAK,EAAE,YAAY;QACnB,QAAQ;QACR,YAAY;QACZ,OAAO,EAAE,SAAS;QAClB,SAAS;QACT,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,KAAK;QACb,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IACpC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,yBAAyB,CAChC,WAAgD;IAEhD,MAAM,GAAG,GAA2E,EAAE,CAAC;IACvF,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY;YAAE,SAAS;QACtC,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,IAAI,OAAoB,CAAC;QACzB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;YACrD,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../src/cli/apply/apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Manifest } from "../../schema/index.js";
|
|
1
|
+
import type { Manifest, McpServer } from "../../schema/index.js";
|
|
2
2
|
export declare const DEFAULT_BUDGET_MS = 30000;
|
|
3
3
|
export interface SettingsHookCommand {
|
|
4
4
|
type: "command";
|
|
@@ -9,7 +9,19 @@ export interface SettingsHookGroup {
|
|
|
9
9
|
matcher?: string;
|
|
10
10
|
hooks: SettingsHookCommand[];
|
|
11
11
|
}
|
|
12
|
+
export interface SettingsMcpServer {
|
|
13
|
+
command: string;
|
|
14
|
+
args?: string[];
|
|
15
|
+
env?: Record<string, string>;
|
|
16
|
+
}
|
|
12
17
|
export interface SettingsRoot {
|
|
13
18
|
hooks: Record<string, SettingsHookGroup[]>;
|
|
19
|
+
mcpServers?: Record<string, SettingsMcpServer>;
|
|
20
|
+
}
|
|
21
|
+
export interface GenerateSettingsResult {
|
|
22
|
+
root: SettingsRoot;
|
|
23
|
+
warnings: string[];
|
|
14
24
|
}
|
|
15
25
|
export declare function generateSettings(manifest: Manifest): SettingsRoot;
|
|
26
|
+
export declare function generateSettingsWithWarnings(manifest: Manifest): GenerateSettingsResult;
|
|
27
|
+
export declare function buildMcpServers(entries: McpServer[], warnings: string[]): Record<string, SettingsMcpServer>;
|
|
@@ -45,6 +45,10 @@
|
|
|
45
45
|
// and is sorted by command for the same reason.
|
|
46
46
|
export const DEFAULT_BUDGET_MS = 30_000;
|
|
47
47
|
export function generateSettings(manifest) {
|
|
48
|
+
return generateSettingsWithWarnings(manifest).root;
|
|
49
|
+
}
|
|
50
|
+
export function generateSettingsWithWarnings(manifest) {
|
|
51
|
+
const warnings = [];
|
|
48
52
|
const byEvent = new Map();
|
|
49
53
|
for (const h of manifest.hooks) {
|
|
50
54
|
const list = byEvent.get(h.event) ?? [];
|
|
@@ -57,6 +61,47 @@ export function generateSettings(manifest) {
|
|
|
57
61
|
const hooks = byEvent.get(event) ?? [];
|
|
58
62
|
out.hooks[event] = buildGroups(hooks);
|
|
59
63
|
}
|
|
64
|
+
const mcp = buildMcpServers(manifest.tools.mcp, warnings);
|
|
65
|
+
if (Object.keys(mcp).length > 0)
|
|
66
|
+
out.mcpServers = mcp;
|
|
67
|
+
return { root: out, warnings };
|
|
68
|
+
}
|
|
69
|
+
// Translate manifest `tools.mcp[]` into Claude Code's `mcpServers` map.
|
|
70
|
+
// - `enabled: false` entries are dropped (matches ARCHITECTURE §3 and the
|
|
71
|
+
// asset-locking surface in harness-lock.ts: disabled MCPs are removed
|
|
72
|
+
// from runtime config).
|
|
73
|
+
// - String `command` is split on whitespace, informed by the splitting at
|
|
74
|
+
// harness-lock.ts:259. Caveat: a string command with embedded spaces in
|
|
75
|
+
// a path (e.g. `"node /opt/path with spaces.js"`) is mis-split into
|
|
76
|
+
// individual tokens. The schema accepts both string and array forms;
|
|
77
|
+
// users with embedded whitespace MUST use the array form to preserve
|
|
78
|
+
// token boundaries.
|
|
79
|
+
// - Empty `args` and `env` are omitted to keep the JSON tight.
|
|
80
|
+
// - Server names are emitted in stable lexical order so two applies of
|
|
81
|
+
// the same manifest produce byte-identical settings.json.
|
|
82
|
+
// - Warnings (not errors) for entries that survive schema but produce no
|
|
83
|
+
// runnable command (defensive: schema's `min(1)` makes this nearly
|
|
84
|
+
// impossible to hit, but a string of pure whitespace would).
|
|
85
|
+
export function buildMcpServers(entries, warnings) {
|
|
86
|
+
const out = {};
|
|
87
|
+
const enabled = entries.filter((e) => e.enabled !== false);
|
|
88
|
+
const sorted = [...enabled].sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0);
|
|
89
|
+
for (const e of sorted) {
|
|
90
|
+
const tokens = Array.isArray(e.command)
|
|
91
|
+
? e.command.filter((t) => t.length > 0)
|
|
92
|
+
: e.command.trim().split(/\s+/).filter((t) => t.length > 0);
|
|
93
|
+
if (tokens.length === 0) {
|
|
94
|
+
warnings.push(`tools.mcp.${e.name}: empty command, skipping`);
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
// tokens[0]! is safe — guarded by the length check above.
|
|
98
|
+
const spec = { command: tokens[0] };
|
|
99
|
+
if (tokens.length > 1)
|
|
100
|
+
spec.args = tokens.slice(1);
|
|
101
|
+
if (e.env && Object.keys(e.env).length > 0)
|
|
102
|
+
spec.env = { ...e.env };
|
|
103
|
+
out[e.name] = spec;
|
|
104
|
+
}
|
|
60
105
|
return out;
|
|
61
106
|
}
|
|
62
107
|
function buildGroups(hooks) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-settings.js","sourceRoot":"","sources":["../../../src/cli/apply/generate-settings.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,iFAAiF;AACjF,sEAAsE;AACtE,EAAE;AACF,sEAAsE;AACtE,EAAE;AACF,uFAAuF;AACvF,EAAE;AACF,wEAAwE;AACxE,0EAA0E;AAC1E,2EAA2E;AAC3E,kCAAkC;AAClC,6EAA6E;AAC7E,0EAA0E;AAC1E,mDAAmD;AACnD,4EAA4E;AAC5E,uEAAuE;AACvE,wEAAwE;AACxE,yEAAyE;AACzE,qEAAqE;AACrE,yEAAyE;AACzE,0EAA0E;AAC1E,sEAAsE;AACtE,yEAAyE;AACzE,2EAA2E;AAC3E,yEAAyE;AACzE,0EAA0E;AAC1E,uEAAuE;AACvE,sEAAsE;AACtE,yEAAyE;AACzE,uEAAuE;AACvE,oEAAoE;AACpE,0EAA0E;AAC1E,qEAAqE;AACrE,uEAAuE;AACvE,wEAAwE;AACxE,0CAA0C;AAC1C,EAAE;AACF,0EAA0E;AAC1E,gBAAgB;AAChB,uEAAuE;AACvE,0DAA0D;AAC1D,4DAA4D;AAC5D,yEAAyE;AACzE,oDAAoD;AAIpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"generate-settings.js","sourceRoot":"","sources":["../../../src/cli/apply/generate-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1,2 @@
|
|
|
1
1
|
export { apply, DRIFT_HINT_MESSAGE, GENERATED_DIRNAME, MANIFEST_BASENAME, MEMORY_BASENAME, SETTINGS_BASENAME, type ApplyOptions, type ApplyOutcome, type ApplyResult, type FileApplyOutcome, } from "./apply.js";
|
|
2
|
+
export { formatNextSteps, type NextStepsContext } from "./next-steps.js";
|
package/dist/cli/apply/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/apply/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,GAKlB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/apply/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,GAKlB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAyB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface NextStepsContext {
|
|
2
|
+
/** Set when --target was passed and the target file was actually written. */
|
|
3
|
+
targetPath?: string;
|
|
4
|
+
/** Path of harness.generated/settings.json (always present on a successful apply). */
|
|
5
|
+
generatedSettingsPath: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function formatNextSteps(ctx: NextStepsContext): string;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Post-apply "Next steps" hint.
|
|
2
|
+
//
|
|
3
|
+
// Motivation: a fresh adopter who runs `harness apply` for the first time
|
|
4
|
+
// gets a one-line summary and is then on their own to figure out what to
|
|
5
|
+
// do with `harness.generated/`. Concrete failure mode (2026-05-03): an
|
|
6
|
+
// agent left a task note suggesting `claude -p ... --output-dir ...`, a
|
|
7
|
+
// hallucinated flag. Surfacing the actual wire-up incantations in the
|
|
8
|
+
// apply output prevents that class of fabrication.
|
|
9
|
+
//
|
|
10
|
+
// Pure function: takes the relevant subset of an ApplyResult, returns the
|
|
11
|
+
// hint text (or empty string when there's nothing to suggest). The CLI
|
|
12
|
+
// layer is responsible for deciding whether to print it (--quiet, --json,
|
|
13
|
+
// dry-run, etc).
|
|
14
|
+
export function formatNextSteps(ctx) {
|
|
15
|
+
if (ctx.targetPath) {
|
|
16
|
+
// Always include `--settings ${targetPath}` in the verify line: Claude
|
|
17
|
+
// Code only auto-discovers `.claude/settings*.json` and the user-global
|
|
18
|
+
// path. For non-canonical targets (e.g. /tmp/foo.json), a bare
|
|
19
|
+
// `claude -p` would silently skip the file and the verify would
|
|
20
|
+
// misleadingly succeed.
|
|
21
|
+
return [
|
|
22
|
+
"",
|
|
23
|
+
`wired into ${ctx.targetPath}`,
|
|
24
|
+
`verify: claude -p "say hi" --settings ${ctx.targetPath} --output-format stream-json --include-hook-events`,
|
|
25
|
+
"",
|
|
26
|
+
].join("\n");
|
|
27
|
+
}
|
|
28
|
+
return [
|
|
29
|
+
"",
|
|
30
|
+
"Next steps to wire into Claude Code:",
|
|
31
|
+
` • One-shot: claude -p "..." --settings ${ctx.generatedSettingsPath}`,
|
|
32
|
+
` • Project: harness apply --target .claude/settings.local.json`,
|
|
33
|
+
` • User-global: harness apply --target ~/.claude/settings.json --merge`,
|
|
34
|
+
"",
|
|
35
|
+
].join("\n");
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=next-steps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next-steps.js","sourceRoot":"","sources":["../../../src/cli/apply/next-steps.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,uEAAuE;AACvE,wEAAwE;AACxE,sEAAsE;AACtE,mDAAmD;AACnD,EAAE;AACF,0EAA0E;AAC1E,uEAAuE;AACvE,0EAA0E;AAC1E,iBAAiB;AASjB,MAAM,UAAU,eAAe,CAAC,GAAqB;IACnD,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACnB,uEAAuE;QACvE,wEAAwE;QACxE,+DAA+D;QAC/D,gEAAgE;QAChE,wBAAwB;QACxB,OAAO;YACL,EAAE;YACF,cAAc,GAAG,CAAC,UAAU,EAAE;YAC9B,yCAAyC,GAAG,CAAC,UAAU,oDAAoD;YAC3G,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IACD,OAAO;QACL,EAAE;QACF,sCAAsC;QACtC,+CAA+C,GAAG,CAAC,qBAAqB,EAAE;QAC1E,qEAAqE;QACrE,yEAAyE;QACzE,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|