@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.
Files changed (56) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/README.md +56 -16
  3. package/dist/cli/add/mutate.d.ts +4 -0
  4. package/dist/cli/add/mutate.js +30 -1
  5. package/dist/cli/add/mutate.js.map +1 -1
  6. package/dist/cli/adopt/derive.d.ts +23 -0
  7. package/dist/cli/adopt/derive.js +85 -0
  8. package/dist/cli/adopt/derive.js.map +1 -1
  9. package/dist/cli/adopt/index.d.ts +9 -1
  10. package/dist/cli/adopt/index.js +72 -4
  11. package/dist/cli/adopt/index.js.map +1 -1
  12. package/dist/cli/apply/apply.d.ts +45 -1
  13. package/dist/cli/apply/apply.js +237 -25
  14. package/dist/cli/apply/apply.js.map +1 -1
  15. package/dist/cli/apply/generate-settings.d.ts +13 -1
  16. package/dist/cli/apply/generate-settings.js +45 -0
  17. package/dist/cli/apply/generate-settings.js.map +1 -1
  18. package/dist/cli/apply/index.d.ts +1 -0
  19. package/dist/cli/apply/index.js +1 -0
  20. package/dist/cli/apply/index.js.map +1 -1
  21. package/dist/cli/apply/next-steps.d.ts +7 -0
  22. package/dist/cli/apply/next-steps.js +37 -0
  23. package/dist/cli/apply/next-steps.js.map +1 -0
  24. package/dist/cli/audit.js +2 -1
  25. package/dist/cli/audit.js.map +1 -1
  26. package/dist/cli/diff/since-apply.js +1 -1
  27. package/dist/cli/diff/since-apply.js.map +1 -1
  28. package/dist/cli/doctor/format.js +17 -3
  29. package/dist/cli/doctor/format.js.map +1 -1
  30. package/dist/cli/doctor/index.js +9 -2
  31. package/dist/cli/doctor/index.js.map +1 -1
  32. package/dist/cli/doctor/types.d.ts +0 -2
  33. package/dist/cli/index.js +83 -5
  34. package/dist/cli/index.js.map +1 -1
  35. package/dist/cli/validate/index.d.ts +8 -0
  36. package/dist/cli/validate/index.js +37 -1
  37. package/dist/cli/validate/index.js.map +1 -1
  38. package/dist/io/harness-lock.d.ts +6 -1
  39. package/dist/io/harness-lock.js +2 -2
  40. package/dist/io/harness-lock.js.map +1 -1
  41. package/dist/io/merge-settings.d.ts +8 -0
  42. package/dist/io/merge-settings.js +47 -0
  43. package/dist/io/merge-settings.js.map +1 -0
  44. package/dist/policies/ledger-client.js +3 -2
  45. package/dist/policies/ledger-client.js.map +1 -1
  46. package/dist/policies/requires.js +3 -2
  47. package/dist/policies/requires.js.map +1 -1
  48. package/dist/probes/mcp.d.ts +13 -0
  49. package/dist/probes/mcp.js +26 -3
  50. package/dist/probes/mcp.js.map +1 -1
  51. package/dist/runtime/intercept.js +3 -2
  52. package/dist/runtime/intercept.js.map +1 -1
  53. package/dist/runtime/ledger-record.d.ts +8 -0
  54. package/dist/runtime/ledger-record.js +11 -3
  55. package/dist/runtime/ledger-record.js.map +1 -1
  56. 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>;
@@ -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 { generateSettings } from "./generate-settings.js";
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 settings = `${JSON.stringify(generateSettings(manifest), null, 2)}\n`;
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
- return {
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
- writeLock(lockPath, refreshed);
390
+ const refreshedWithTarget = appendTargetEntry(refreshed, targetPath, targetContent, previousLock);
391
+ writeLock(lockPath, refreshedWithTarget);
253
392
  }
254
- return {
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
- fs.mkdirSync(generatedDir, { recursive: true });
268
- for (const f of expected) {
269
- const target = path.join(generatedDir, f.basename);
270
- atomicWriteFile(target, f.content);
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
- const newRecord = buildLastApply(Object.fromEntries(expected.map((f) => [f.basename, f.content])));
283
- const manifestSnapshotJson = JSON.stringify(manifest);
284
- newRecord.manifest = {
285
- sha256: sha256Hex(manifestSnapshotJson),
286
- content: manifestSnapshotJson,
287
- };
288
- const memoryDirSnapshots = collectMemoryDirSnapshots(lockEntries);
289
- if (Object.keys(memoryDirSnapshots).length > 0) {
290
- newRecord.memoryDirs = memoryDirSnapshots;
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
- writeLastApply(generatedDir, newRecord);
293
- writeLock(lockPath, lockEntries);
294
- return {
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: true,
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":"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"}
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":"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"}
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";
@@ -1,2 +1,3 @@
1
1
  export { apply, DRIFT_HINT_MESSAGE, GENERATED_DIRNAME, MANIFEST_BASENAME, MEMORY_BASENAME, SETTINGS_BASENAME, } from "./apply.js";
2
+ export { formatNextSteps } from "./next-steps.js";
2
3
  //# sourceMappingURL=index.js.map
@@ -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"}