@lannguyensi/harness 0.18.0 → 0.20.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 (47) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +82 -208
  3. package/dist/cli/approve/understanding.d.ts +38 -0
  4. package/dist/cli/approve/understanding.js +45 -1
  5. package/dist/cli/approve/understanding.js.map +1 -1
  6. package/dist/cli/doctor/format.js +20 -2
  7. package/dist/cli/doctor/format.js.map +1 -1
  8. package/dist/cli/doctor/index.d.ts +8 -0
  9. package/dist/cli/doctor/index.js +27 -1
  10. package/dist/cli/doctor/index.js.map +1 -1
  11. package/dist/cli/doctor/npm-bin-path.d.ts +23 -0
  12. package/dist/cli/doctor/npm-bin-path.js +82 -0
  13. package/dist/cli/doctor/npm-bin-path.js.map +1 -0
  14. package/dist/cli/doctor/types.d.ts +20 -4
  15. package/dist/cli/doctor/types.js.map +1 -1
  16. package/dist/cli/index.js +32 -0
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/cli/init/agent-tasks-auth.d.ts +32 -0
  19. package/dist/cli/init/agent-tasks-auth.js +75 -0
  20. package/dist/cli/init/agent-tasks-auth.js.map +1 -0
  21. package/dist/cli/init/composer.js +3 -1
  22. package/dist/cli/init/composer.js.map +1 -1
  23. package/dist/cli/init/interactive.d.ts +5 -0
  24. package/dist/cli/init/interactive.js +162 -4
  25. package/dist/cli/init/interactive.js.map +1 -1
  26. package/dist/cli/init/profiles.d.ts +2 -2
  27. package/dist/cli/init/profiles.js +23 -15
  28. package/dist/cli/init/profiles.js.map +1 -1
  29. package/dist/cli/init/templates.d.ts +1 -1
  30. package/dist/cli/init/templates.js +113 -10
  31. package/dist/cli/init/templates.js.map +1 -1
  32. package/dist/cli/pack/hook-branch-protection.js +52 -5
  33. package/dist/cli/pack/hook-branch-protection.js.map +1 -1
  34. package/dist/cli/pack/hook-post-tool-use.d.ts +25 -1
  35. package/dist/cli/pack/hook-post-tool-use.js +103 -10
  36. package/dist/cli/pack/hook-post-tool-use.js.map +1 -1
  37. package/dist/cli/pack/hook-pre-tool-use.js +25 -4
  38. package/dist/cli/pack/hook-pre-tool-use.js.map +1 -1
  39. package/dist/cli/pack/hook-track-active-claim.d.ts +25 -0
  40. package/dist/cli/pack/hook-track-active-claim.js +162 -0
  41. package/dist/cli/pack/hook-track-active-claim.js.map +1 -0
  42. package/dist/policy-packs/builtin/understanding-before-execution-runtime.d.ts +76 -0
  43. package/dist/policy-packs/builtin/understanding-before-execution-runtime.js +272 -1
  44. package/dist/policy-packs/builtin/understanding-before-execution-runtime.js.map +1 -1
  45. package/dist/policy-packs/builtin/understanding-before-execution.js +28 -2
  46. package/dist/policy-packs/builtin/understanding-before-execution.js.map +1 -1
  47. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"hook-pre-tool-use.js","sourceRoot":"","sources":["../../../src/cli/pack/hook-pre-tool-use.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hook-pre-tool-use.js","sourceRoot":"","sources":["../../../src/cli/pack/hook-pre-tool-use.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { Manifest } from "../../schema/index.js";
2
+ import { type LoaderOptions } from "../loader.js";
3
+ export declare const TOOL_NAME_TASK_START = "mcp__agent-tasks__task_start";
4
+ export declare const TOOL_NAME_TASK_FINISH = "mcp__agent-tasks__task_finish";
5
+ export declare const TOOL_NAME_TASK_ABANDON = "mcp__agent-tasks__task_abandon";
6
+ export declare const TRACK_ACTIVE_CLAIM_TOOLS: readonly string[];
7
+ export interface PackHookTrackActiveClaimOptions extends LoaderOptions {
8
+ pack?: string;
9
+ generatedDir?: string;
10
+ stdin?: NodeJS.ReadableStream;
11
+ stderr?: NodeJS.WritableStream;
12
+ manifest?: Manifest;
13
+ }
14
+ export interface PackHookTrackActiveClaimResult {
15
+ exitCode: number;
16
+ /** Was the active-claim file written (task_start path)? */
17
+ claimWritten: boolean;
18
+ /** Was the active-claim file cleared (task_finish / abandon path)? */
19
+ claimCleared: boolean;
20
+ /** The taskId acted on, or null when the event carried none. */
21
+ taskId: string | null;
22
+ /** Diagnostic line emitted to stderr. */
23
+ diagnostic: string;
24
+ }
25
+ export declare function runPackHookTrackActiveClaimCli(opts?: PackHookTrackActiveClaimOptions): Promise<PackHookTrackActiveClaimResult>;
@@ -0,0 +1,162 @@
1
+ // `harness pack hook track-active-claim` — agent-tasks claim tracking.
2
+ //
3
+ // PostToolUse hook for the understanding-before-execution pack
4
+ // (harness/494fd1e5). Maintains a small file at
5
+ // `<generatedDir>/active-claim` that names the currently-claimed
6
+ // agent-tasks task id. The file lets `harness approve understanding`
7
+ // auto-resolve the task id when --task is absent, so the operator
8
+ // does not have to type the UUID by hand on every approval.
9
+ //
10
+ // File lifecycle:
11
+ // - `mcp__agent-tasks__task_start` with `tool_input.taskId` → write
12
+ // the taskId into the file (atomic).
13
+ // - `mcp__agent-tasks__task_finish` / `mcp__agent-tasks__task_abandon`
14
+ // → remove the file (idempotent).
15
+ //
16
+ // The hook is intentionally separate from `hook-post-tool-use` because
17
+ // the existing marker-expiry hook fires on a configurable list of
18
+ // task-boundary verbs (`expire_on_tool_match`) that does NOT include
19
+ // `task_start`. Folding task_start in there would either expand that
20
+ // matcher's semantics (now "boundary + start") or require a parallel
21
+ // config field. A dedicated hook keeps each surface single-purpose.
22
+ //
23
+ // Failure mode mirrors `hook-post-tool-use`: every error path resolves
24
+ // to no-op + stderr log. The active-claim file is an ergonomic shortcut,
25
+ // not a security-relevant signal — `harness approve understanding`
26
+ // still treats explicit --task as authoritative, and falls back to
27
+ // session-scoped marker when no claim is resolved.
28
+ //
29
+ // Hardcoded agent-tasks tool names: the v2 contract is agent-tasks
30
+ // specific. Operators on Linear / JIRA can ignore this hook (the
31
+ // matcher will never fire for them); a config-driven extension can
32
+ // land later if a second tasking system asks for it.
33
+ import { clearActiveClaim, writeActiveClaim, } from "../../policy-packs/builtin/understanding-before-execution-runtime.js";
34
+ import { resolveGeneratedDir } from "../../runtime/pending-approval.js";
35
+ import { loadManifest } from "../loader.js";
36
+ const PACK_NAME = "understanding-before-execution";
37
+ export const TOOL_NAME_TASK_START = "mcp__agent-tasks__task_start";
38
+ export const TOOL_NAME_TASK_FINISH = "mcp__agent-tasks__task_finish";
39
+ export const TOOL_NAME_TASK_ABANDON = "mcp__agent-tasks__task_abandon";
40
+ export const TRACK_ACTIVE_CLAIM_TOOLS = [
41
+ TOOL_NAME_TASK_START,
42
+ TOOL_NAME_TASK_FINISH,
43
+ TOOL_NAME_TASK_ABANDON,
44
+ ];
45
+ async function readStdin(stream) {
46
+ return new Promise((resolve, reject) => {
47
+ let data = "";
48
+ stream.setEncoding("utf8");
49
+ stream.on("data", (chunk) => {
50
+ data += chunk;
51
+ });
52
+ stream.on("end", () => resolve(data));
53
+ stream.on("error", reject);
54
+ });
55
+ }
56
+ function extractTaskId(toolInput) {
57
+ if (typeof toolInput !== "object" ||
58
+ toolInput === null ||
59
+ Array.isArray(toolInput)) {
60
+ return "";
61
+ }
62
+ const tid = toolInput["taskId"];
63
+ return typeof tid === "string" ? tid : "";
64
+ }
65
+ function noop(diagnostic, stderr) {
66
+ stderr.write(`${diagnostic}\n`);
67
+ return {
68
+ exitCode: 0,
69
+ claimWritten: false,
70
+ claimCleared: false,
71
+ taskId: null,
72
+ diagnostic,
73
+ };
74
+ }
75
+ export async function runPackHookTrackActiveClaimCli(opts = {}) {
76
+ const stdin = opts.stdin ?? process.stdin;
77
+ const stderr = opts.stderr ?? process.stderr;
78
+ const packName = opts.pack ?? PACK_NAME;
79
+ const raw = await readStdin(stdin);
80
+ let event = {};
81
+ try {
82
+ event = JSON.parse(raw.trim() || "{}");
83
+ }
84
+ catch {
85
+ return noop("harness pack hook track-active-claim: malformed event JSON, skipping", stderr);
86
+ }
87
+ const toolName = typeof event.tool_name === "string" ? event.tool_name : "";
88
+ if (toolName === "") {
89
+ return noop("harness pack hook track-active-claim: missing tool_name, skipping", stderr);
90
+ }
91
+ // Loader gate: pack must exist and be enabled. Mirrors the same
92
+ // structure as hook-post-tool-use so a single disabled-pack opt-out
93
+ // suppresses BOTH hooks.
94
+ let manifest;
95
+ let manifestPath;
96
+ try {
97
+ if (opts.manifest) {
98
+ manifest = opts.manifest;
99
+ }
100
+ else {
101
+ const loaded = loadManifest(opts);
102
+ manifest = loaded.manifest;
103
+ manifestPath = loaded.resolved.base;
104
+ }
105
+ }
106
+ catch (err) {
107
+ return noop(`harness pack hook track-active-claim: manifest load failed (${err.message}), skipping`, stderr);
108
+ }
109
+ const declared = manifest.policy_packs.find((p) => p.name === packName);
110
+ if (!declared) {
111
+ return noop(`harness pack hook track-active-claim: pack "${packName}" not declared in manifest, skipping`, stderr);
112
+ }
113
+ if (!declared.enabled) {
114
+ return noop(`harness pack hook track-active-claim: pack "${packName}" is enabled:false, skipping`, stderr);
115
+ }
116
+ const generatedDir = opts.generatedDir ??
117
+ (manifestPath !== undefined
118
+ ? resolveGeneratedDir({
119
+ ...(opts.homeDir !== undefined ? { homeDir: opts.homeDir } : {}),
120
+ manifestPath,
121
+ })
122
+ : undefined);
123
+ if (generatedDir === undefined) {
124
+ return noop("harness pack hook track-active-claim: generatedDir unresolvable, skipping", stderr);
125
+ }
126
+ const taskId = extractTaskId(event.tool_input);
127
+ if (toolName === TOOL_NAME_TASK_START) {
128
+ if (taskId === "") {
129
+ return noop(`harness pack hook track-active-claim: task_start without tool_input.taskId, skipping`, stderr);
130
+ }
131
+ try {
132
+ writeActiveClaim(generatedDir, taskId);
133
+ }
134
+ catch (err) {
135
+ return noop(`harness pack hook track-active-claim: writeActiveClaim failed for ${taskId}: ${err.message}`, stderr);
136
+ }
137
+ const diagnostic = `harness pack hook track-active-claim: wrote active-claim for ${taskId}`;
138
+ stderr.write(`${diagnostic}\n`);
139
+ return {
140
+ exitCode: 0,
141
+ claimWritten: true,
142
+ claimCleared: false,
143
+ taskId,
144
+ diagnostic,
145
+ };
146
+ }
147
+ if (toolName === TOOL_NAME_TASK_FINISH ||
148
+ toolName === TOOL_NAME_TASK_ABANDON) {
149
+ clearActiveClaim(generatedDir);
150
+ const diagnostic = `harness pack hook track-active-claim: cleared active-claim after ${toolName}`;
151
+ stderr.write(`${diagnostic}\n`);
152
+ return {
153
+ exitCode: 0,
154
+ claimWritten: false,
155
+ claimCleared: true,
156
+ taskId: taskId === "" ? null : taskId,
157
+ diagnostic,
158
+ };
159
+ }
160
+ return noop(`harness pack hook track-active-claim: tool ${toolName} not tracked, skipping`, stderr);
161
+ }
162
+ //# sourceMappingURL=hook-track-active-claim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-track-active-claim.js","sourceRoot":"","sources":["../../../src/cli/pack/hook-track-active-claim.ts"],"names":[],"mappings":"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"}
@@ -145,6 +145,8 @@ export declare function checkApprovalMarker(generatedDir: string, sessionId: str
145
145
  export interface ApprovalLifecycle {
146
146
  /** Tool-name patterns whose successful PostToolUse expires the marker. */
147
147
  expireOnToolMatch: string[];
148
+ /** Pre-compiled regex patterns matched against `Bash` tool_input.command. */
149
+ expireOnBashMatch: RegExp[];
148
150
  /** Max marker age in milliseconds. Undefined means no TTL. */
149
151
  maxAgeMs?: number;
150
152
  /** Whether the operator explicitly opted out via `{ mode: "session" }`. */
@@ -160,6 +162,80 @@ export interface ApprovalLifecycle {
160
162
  export declare function parseApprovalLifecycle(raw: unknown, stderr?: {
161
163
  write: (s: string) => void;
162
164
  } | null): ApprovalLifecycle;
165
+ /**
166
+ * Flip the latest matching persisted report's approvalStatus to
167
+ * `expired` so it no longer satisfies the gate's persisted-report
168
+ * fallback (harness/1ee26e77 follow-up: post-tool-use expiry was
169
+ * marker-only; the persisted report at .understanding-gate/reports/
170
+ * silently kept satisfying the gate even after task_finish deleted
171
+ * the marker).
172
+ *
173
+ * Atomic rewrite. Preserves the rest of the report body so the audit
174
+ * trail (the operator's actual Understanding text + previous approval
175
+ * timestamps) stays intact; only the status fields change.
176
+ *
177
+ * Returns `{ ok: true, filePath, previousStatus }` on success,
178
+ * `{ ok: false, reason }` when no matching report exists or rewrite
179
+ * failed. Non-throwing: caller (post-tool-use hook) uses this as a
180
+ * best-effort cleanup so a missing report dir or unrelated I/O issue
181
+ * does not escalate into a session-breaking hook failure.
182
+ */
183
+ export declare function expirePersistedReport(reportsDir: string, sessionId: string, now?: Date): {
184
+ ok: true;
185
+ filePath: string;
186
+ previousStatus: string | null;
187
+ } | {
188
+ ok: false;
189
+ reason: string;
190
+ };
163
191
  /** Clear the per-session marker (used by `harness approve --revoke` and tests). */
164
192
  export declare function clearApprovalMarker(generatedDir: string, sessionId: string): void;
193
+ export declare const APPROVAL_MARKER_TASK_PREFIX = "task-";
194
+ /** Filesystem path of a per-task approval marker. */
195
+ export declare function taskApprovalMarkerPathFor(generatedDir: string, taskId: string): string;
196
+ /**
197
+ * Operator-side: write a task-scoped marker file. Atomic. Caller is
198
+ * `harness approve understanding --task <id>`. The session marker is
199
+ * written separately by the same caller for back-compat.
200
+ */
201
+ export declare function writeTaskApprovalMarker(generatedDir: string, taskId: string, marker: ApprovalMarker): string;
202
+ /**
203
+ * Gate-side: scan the approvals directory for any task-scoped marker
204
+ * (`task-<id>`) that is present, readable, and (when `maxAgeMs` is set)
205
+ * fresh. Returns the first matching marker's path; null when none match.
206
+ *
207
+ * Two-tier filter mirrors `checkApprovalMarker`: existence is the
208
+ * operator's intent (a body-unreadable marker counts as approved), and
209
+ * symlinks are refused for safety. Stale markers (older than maxAgeMs)
210
+ * are skipped silently so a long-running session doesn't latch onto a
211
+ * marker from a previous day's task.
212
+ */
213
+ export declare function checkAnyTaskApprovalMarker(generatedDir: string, opts?: CheckApprovalMarkerOptions): MarkerCheck;
214
+ /** Clear a specific task-scoped marker. Used by the post-tool-use hook. */
215
+ export declare function clearTaskApprovalMarker(generatedDir: string, taskId: string): void;
216
+ export declare const ACTIVE_CLAIM_FILENAME = "active-claim";
217
+ export declare function activeClaimPathFor(generatedDir: string): string;
218
+ /**
219
+ * Hook-side: write the active claim file. Atomic. Called from the
220
+ * track-active-claim PostToolUse hook on `task_start`. The body is
221
+ * just the taskId (no JSON) so an operator running
222
+ * `cat ~/.claude/harness.generated/active-claim` sees the id directly.
223
+ */
224
+ export declare function writeActiveClaim(generatedDir: string, taskId: string): string;
225
+ /**
226
+ * Operator-side: read the active claim file. Returns the taskId or
227
+ * null when the file is absent / unreadable / empty. `harness approve
228
+ * understanding` calls this when --task is absent, then passes the
229
+ * resolved id to writeTaskApprovalMarker.
230
+ *
231
+ * Defense-in-depth: if the on-disk content fails the same
232
+ * path-traversal / newline check that gates writes, the read returns
233
+ * null instead of surfacing a poisoned id. The write side guards
234
+ * against a malformed taskId reaching the file in the first place,
235
+ * but a stale file authored before this guard (or hand-edited)
236
+ * shouldn't escalate into a forged task-marker write downstream.
237
+ */
238
+ export declare function readActiveClaim(generatedDir: string): string | null;
239
+ /** Hook-side: remove the active claim file. Idempotent. */
240
+ export declare function clearActiveClaim(generatedDir: string): void;
165
241
  export declare function checkPersistedReport(reportsDir: string, sessionId: string): PersistedReportApprovalCheck;
@@ -319,6 +319,7 @@ export function checkApprovalMarker(generatedDir, sessionId, opts = {}) {
319
319
  }
320
320
  const DEFAULT_LIFECYCLE = {
321
321
  expireOnToolMatch: [],
322
+ expireOnBashMatch: [],
322
323
  legacyMode: false,
323
324
  };
324
325
  /**
@@ -337,7 +338,7 @@ export function parseApprovalLifecycle(raw, stderr) {
337
338
  }
338
339
  const obj = raw;
339
340
  if (obj["mode"] === "session") {
340
- return { expireOnToolMatch: [], legacyMode: true };
341
+ return { expireOnToolMatch: [], expireOnBashMatch: [], legacyMode: true };
341
342
  }
342
343
  const expireOnToolMatch = [];
343
344
  const list = obj["expire_on_tool_match"];
@@ -350,6 +351,23 @@ export function parseApprovalLifecycle(raw, stderr) {
350
351
  else if (list !== undefined) {
351
352
  stderr?.write(`harness pack hook: config.approval_lifecycle.expire_on_tool_match ignored (expected string[], got ${typeof list})\n`);
352
353
  }
354
+ const expireOnBashMatch = [];
355
+ const bashList = obj["expire_on_bash_match"];
356
+ if (Array.isArray(bashList)) {
357
+ for (const v of bashList) {
358
+ if (typeof v !== "string" || v.length === 0)
359
+ continue;
360
+ try {
361
+ expireOnBashMatch.push(new RegExp(v));
362
+ }
363
+ catch (err) {
364
+ stderr?.write(`harness pack hook: config.approval_lifecycle.expire_on_bash_match entry ignored ("${v}"): ${err.message}\n`);
365
+ }
366
+ }
367
+ }
368
+ else if (bashList !== undefined) {
369
+ stderr?.write(`harness pack hook: config.approval_lifecycle.expire_on_bash_match ignored (expected string[], got ${typeof bashList})\n`);
370
+ }
353
371
  let maxAgeMs;
354
372
  const maxAgeRaw = obj["max_age"];
355
373
  if (typeof maxAgeRaw === "string" && maxAgeRaw.length > 0) {
@@ -366,10 +384,75 @@ export function parseApprovalLifecycle(raw, stderr) {
366
384
  }
367
385
  return {
368
386
  expireOnToolMatch,
387
+ expireOnBashMatch,
369
388
  ...(maxAgeMs !== undefined && { maxAgeMs }),
370
389
  legacyMode: false,
371
390
  };
372
391
  }
392
+ /**
393
+ * Flip the latest matching persisted report's approvalStatus to
394
+ * `expired` so it no longer satisfies the gate's persisted-report
395
+ * fallback (harness/1ee26e77 follow-up: post-tool-use expiry was
396
+ * marker-only; the persisted report at .understanding-gate/reports/
397
+ * silently kept satisfying the gate even after task_finish deleted
398
+ * the marker).
399
+ *
400
+ * Atomic rewrite. Preserves the rest of the report body so the audit
401
+ * trail (the operator's actual Understanding text + previous approval
402
+ * timestamps) stays intact; only the status fields change.
403
+ *
404
+ * Returns `{ ok: true, filePath, previousStatus }` on success,
405
+ * `{ ok: false, reason }` when no matching report exists or rewrite
406
+ * failed. Non-throwing: caller (post-tool-use hook) uses this as a
407
+ * best-effort cleanup so a missing report dir or unrelated I/O issue
408
+ * does not escalate into a session-breaking hook failure.
409
+ */
410
+ export function expirePersistedReport(reportsDir, sessionId, now = new Date()) {
411
+ const reports = listPersistedReports(reportsDir);
412
+ if (reports.length === 0) {
413
+ return { ok: false, reason: `no reports under ${reportsDir}` };
414
+ }
415
+ const latest = findLatestReportForSession(reports, sessionId);
416
+ if (!latest) {
417
+ return {
418
+ ok: false,
419
+ reason: `no report matched session_id=${sessionId} (${reports.length} report(s) for other sessions)`,
420
+ };
421
+ }
422
+ if (latest.approvalStatus !== "approved") {
423
+ return {
424
+ ok: false,
425
+ reason: `latest report ${path.basename(latest.filePath)} already has approvalStatus=${latest.approvalStatus ?? "<missing>"}, nothing to expire`,
426
+ };
427
+ }
428
+ let raw;
429
+ try {
430
+ raw = fs.readFileSync(latest.filePath, "utf8");
431
+ }
432
+ catch (err) {
433
+ return { ok: false, reason: `failed to read ${latest.filePath}: ${err.message}` };
434
+ }
435
+ let parsed;
436
+ try {
437
+ parsed = JSON.parse(raw);
438
+ }
439
+ catch (err) {
440
+ return { ok: false, reason: `failed to parse ${latest.filePath}: ${err.message}` };
441
+ }
442
+ const previousStatus = typeof parsed["approvalStatus"] === "string" ? parsed["approvalStatus"] : null;
443
+ parsed["approvalStatus"] = "expired";
444
+ parsed["expiredAt"] = now.toISOString();
445
+ try {
446
+ atomicWriteFile(latest.filePath, `${JSON.stringify(parsed, null, 2)}\n`);
447
+ }
448
+ catch (err) {
449
+ return {
450
+ ok: false,
451
+ reason: `failed to rewrite ${latest.filePath}: ${err.message}`,
452
+ };
453
+ }
454
+ return { ok: true, filePath: latest.filePath, previousStatus };
455
+ }
373
456
  /** Clear the per-session marker (used by `harness approve --revoke` and tests). */
374
457
  export function clearApprovalMarker(generatedDir, sessionId) {
375
458
  try {
@@ -379,6 +462,194 @@ export function clearApprovalMarker(generatedDir, sessionId) {
379
462
  /* already gone */
380
463
  }
381
464
  }
465
+ // Task-scoped approval markers (harness/1ee26e77). When the operator
466
+ // passes `--task <id>` to `harness approve understanding`, a second
467
+ // marker file is written next to the session marker, keyed by the
468
+ // agent-tasks task id and prefixed `task-` so a directory scan can
469
+ // distinguish them from session-keyed markers (UUIDs do not start with
470
+ // `task-`). Either marker satisfies the gate; the session marker
471
+ // remains for back-compat with operators who don't pass --task and for
472
+ // non-agent-tasks workflows.
473
+ //
474
+ // Why task-scope: a session can span many distinct tasks; the operator's
475
+ // Understanding Report for task A doesn't transfer trust to task B
476
+ // (different surface, different acceptance criteria). Without per-task
477
+ // markers a multi-task session re-uses the first task's approval for
478
+ // every subsequent task. The expire_on_tool_match PostToolUse hook
479
+ // already deletes the session marker on `task_finish`, but if delivery
480
+ // is unreliable (e.g. PostToolUse skipped for an MCP tool) the marker
481
+ // silently persists. A task-keyed marker side-steps that delivery
482
+ // concern because the next task's id is different even if the previous
483
+ // marker file outlives its scope.
484
+ export const APPROVAL_MARKER_TASK_PREFIX = "task-";
485
+ /**
486
+ * Reject taskIds that would escape the approvals/ namespace via path
487
+ * traversal or directory separators. The operator's --task flag value
488
+ * lands here verbatim; an accidental shell-expanded `..` or `/` would
489
+ * otherwise write to a sibling directory. This is defensive — the
490
+ * caller is the operator's own shell — but pins the trust boundary.
491
+ */
492
+ function rejectMalformedTaskId(taskId) {
493
+ if (taskId.length === 0) {
494
+ throw new Error("taskId is empty");
495
+ }
496
+ if (taskId.includes("/") || taskId.includes("\\") || taskId.includes("..")) {
497
+ throw new Error(`taskId contains path-separator or traversal characters: ${JSON.stringify(taskId)}`);
498
+ }
499
+ }
500
+ /** Filesystem path of a per-task approval marker. */
501
+ export function taskApprovalMarkerPathFor(generatedDir, taskId) {
502
+ rejectMalformedTaskId(taskId);
503
+ return path.join(generatedDir, APPROVAL_MARKER_DIRNAME, `${APPROVAL_MARKER_TASK_PREFIX}${taskId}`);
504
+ }
505
+ /**
506
+ * Operator-side: write a task-scoped marker file. Atomic. Caller is
507
+ * `harness approve understanding --task <id>`. The session marker is
508
+ * written separately by the same caller for back-compat.
509
+ */
510
+ export function writeTaskApprovalMarker(generatedDir, taskId, marker) {
511
+ const filePath = taskApprovalMarkerPathFor(generatedDir, taskId);
512
+ atomicWriteFile(filePath, `${JSON.stringify(marker, null, 2)}\n`);
513
+ return filePath;
514
+ }
515
+ /**
516
+ * Gate-side: scan the approvals directory for any task-scoped marker
517
+ * (`task-<id>`) that is present, readable, and (when `maxAgeMs` is set)
518
+ * fresh. Returns the first matching marker's path; null when none match.
519
+ *
520
+ * Two-tier filter mirrors `checkApprovalMarker`: existence is the
521
+ * operator's intent (a body-unreadable marker counts as approved), and
522
+ * symlinks are refused for safety. Stale markers (older than maxAgeMs)
523
+ * are skipped silently so a long-running session doesn't latch onto a
524
+ * marker from a previous day's task.
525
+ */
526
+ export function checkAnyTaskApprovalMarker(generatedDir, opts = {}) {
527
+ const approvalsDir = path.join(generatedDir, APPROVAL_MARKER_DIRNAME);
528
+ let names;
529
+ try {
530
+ names = fs.readdirSync(approvalsDir);
531
+ }
532
+ catch {
533
+ return {
534
+ matched: false,
535
+ detail: `no approvals directory at ${approvalsDir}`,
536
+ marker: null,
537
+ };
538
+ }
539
+ const taskMarkerNames = names.filter((n) => n.startsWith(APPROVAL_MARKER_TASK_PREFIX));
540
+ if (taskMarkerNames.length === 0) {
541
+ return {
542
+ matched: false,
543
+ detail: `no task-scoped markers under ${approvalsDir}`,
544
+ marker: null,
545
+ };
546
+ }
547
+ for (const name of taskMarkerNames) {
548
+ const taskId = name.slice(APPROVAL_MARKER_TASK_PREFIX.length);
549
+ const check = checkApprovalMarker(generatedDir, name, opts);
550
+ if (check.matched) {
551
+ return {
552
+ matched: true,
553
+ detail: `task-scoped marker for task ${taskId}: ${check.detail}`,
554
+ marker: check.marker,
555
+ };
556
+ }
557
+ }
558
+ return {
559
+ matched: false,
560
+ detail: `${taskMarkerNames.length} task-scoped marker(s) present but none fresh`,
561
+ marker: null,
562
+ };
563
+ }
564
+ /** Clear a specific task-scoped marker. Used by the post-tool-use hook. */
565
+ export function clearTaskApprovalMarker(generatedDir, taskId) {
566
+ try {
567
+ fs.rmSync(taskApprovalMarkerPathFor(generatedDir, taskId));
568
+ }
569
+ catch {
570
+ /* already gone */
571
+ }
572
+ }
573
+ // Active-claim tracking (harness/494fd1e5). When the agent calls
574
+ // `mcp__agent-tasks__task_start`, a PostToolUse hook writes the claimed
575
+ // task id to a stable file. `harness approve understanding` reads it
576
+ // when --task is absent and auto-supplies it as the task-scoped marker
577
+ // target. This closes the v1 ergonomics gap from PR #184 where the
578
+ // operator had to type the taskId by hand.
579
+ //
580
+ // File contract: a single line containing just the taskId. No JSON,
581
+ // no metadata. Operators can `cat` it to debug. The post-tool-use
582
+ // hook on task_finish / task_abandon removes the file.
583
+ export const ACTIVE_CLAIM_FILENAME = "active-claim";
584
+ export function activeClaimPathFor(generatedDir) {
585
+ return path.join(generatedDir, ACTIVE_CLAIM_FILENAME);
586
+ }
587
+ function rejectMalformedClaimId(taskId) {
588
+ if (taskId.length === 0) {
589
+ throw new Error("taskId is empty");
590
+ }
591
+ if (taskId.includes("\n") ||
592
+ taskId.includes("\r") ||
593
+ taskId.includes("/") ||
594
+ taskId.includes("\\") ||
595
+ taskId.includes("..")) {
596
+ throw new Error(`taskId contains forbidden characters (newline / path-separator / traversal): ${JSON.stringify(taskId)}`);
597
+ }
598
+ }
599
+ /**
600
+ * Hook-side: write the active claim file. Atomic. Called from the
601
+ * track-active-claim PostToolUse hook on `task_start`. The body is
602
+ * just the taskId (no JSON) so an operator running
603
+ * `cat ~/.claude/harness.generated/active-claim` sees the id directly.
604
+ */
605
+ export function writeActiveClaim(generatedDir, taskId) {
606
+ rejectMalformedClaimId(taskId);
607
+ const filePath = activeClaimPathFor(generatedDir);
608
+ atomicWriteFile(filePath, `${taskId}\n`);
609
+ return filePath;
610
+ }
611
+ /**
612
+ * Operator-side: read the active claim file. Returns the taskId or
613
+ * null when the file is absent / unreadable / empty. `harness approve
614
+ * understanding` calls this when --task is absent, then passes the
615
+ * resolved id to writeTaskApprovalMarker.
616
+ *
617
+ * Defense-in-depth: if the on-disk content fails the same
618
+ * path-traversal / newline check that gates writes, the read returns
619
+ * null instead of surfacing a poisoned id. The write side guards
620
+ * against a malformed taskId reaching the file in the first place,
621
+ * but a stale file authored before this guard (or hand-edited)
622
+ * shouldn't escalate into a forged task-marker write downstream.
623
+ */
624
+ export function readActiveClaim(generatedDir) {
625
+ const filePath = activeClaimPathFor(generatedDir);
626
+ let raw;
627
+ try {
628
+ raw = fs.readFileSync(filePath, "utf8");
629
+ }
630
+ catch {
631
+ return null;
632
+ }
633
+ const trimmed = raw.trim();
634
+ if (trimmed.length === 0)
635
+ return null;
636
+ try {
637
+ rejectMalformedClaimId(trimmed);
638
+ }
639
+ catch {
640
+ return null;
641
+ }
642
+ return trimmed;
643
+ }
644
+ /** Hook-side: remove the active claim file. Idempotent. */
645
+ export function clearActiveClaim(generatedDir) {
646
+ try {
647
+ fs.rmSync(activeClaimPathFor(generatedDir));
648
+ }
649
+ catch {
650
+ /* already gone */
651
+ }
652
+ }
382
653
  export function checkPersistedReport(reportsDir, sessionId) {
383
654
  const reports = listPersistedReports(reportsDir);
384
655
  if (reports.length === 0) {