@lannguyensi/harness 0.60.0 → 0.62.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 (89) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/README.md +1 -1
  3. package/dist/cli/apply/install-codex-config.d.ts +24 -7
  4. package/dist/cli/apply/install-codex-config.js +353 -81
  5. package/dist/cli/apply/install-codex-config.js.map +1 -1
  6. package/dist/cli/approve/understanding.d.ts +31 -6
  7. package/dist/cli/approve/understanding.js +197 -56
  8. package/dist/cli/approve/understanding.js.map +1 -1
  9. package/dist/cli/bounded-stdin.d.ts +40 -0
  10. package/dist/cli/bounded-stdin.js +111 -0
  11. package/dist/cli/bounded-stdin.js.map +1 -0
  12. package/dist/cli/doctor/settings-drift.js +12 -2
  13. package/dist/cli/doctor/settings-drift.js.map +1 -1
  14. package/dist/cli/gc/index.d.ts +6 -2
  15. package/dist/cli/gc/index.js +22 -7
  16. package/dist/cli/gc/index.js.map +1 -1
  17. package/dist/cli/index.js +15 -14
  18. package/dist/cli/index.js.map +1 -1
  19. package/dist/cli/pack/auto-approve-path.js +39 -4
  20. package/dist/cli/pack/auto-approve-path.js.map +1 -1
  21. package/dist/cli/pack/hook-bootstrap.d.ts +59 -5
  22. package/dist/cli/pack/hook-bootstrap.js +67 -19
  23. package/dist/cli/pack/hook-bootstrap.js.map +1 -1
  24. package/dist/cli/pack/hook-branch-protection.d.ts +6 -0
  25. package/dist/cli/pack/hook-branch-protection.js +11 -2
  26. package/dist/cli/pack/hook-branch-protection.js.map +1 -1
  27. package/dist/cli/pack/hook-codex-pre-tool-use.d.ts +6 -0
  28. package/dist/cli/pack/hook-codex-pre-tool-use.js +20 -2
  29. package/dist/cli/pack/hook-codex-pre-tool-use.js.map +1 -1
  30. package/dist/cli/pack/hook-post-merge-gate.d.ts +6 -0
  31. package/dist/cli/pack/hook-post-merge-gate.js +17 -2
  32. package/dist/cli/pack/hook-post-merge-gate.js.map +1 -1
  33. package/dist/cli/pack/hook-pre-tool-use.d.ts +7 -0
  34. package/dist/cli/pack/hook-pre-tool-use.js +26 -4
  35. package/dist/cli/pack/hook-pre-tool-use.js.map +1 -1
  36. package/dist/cli/pack/hook-runtime-reality.d.ts +2 -0
  37. package/dist/cli/pack/hook-runtime-reality.js +48 -8
  38. package/dist/cli/pack/hook-runtime-reality.js.map +1 -1
  39. package/dist/cli/pack/hook-solution-acceptance-writeguard.d.ts +6 -0
  40. package/dist/cli/pack/hook-solution-acceptance-writeguard.js +11 -2
  41. package/dist/cli/pack/hook-solution-acceptance-writeguard.js.map +1 -1
  42. package/dist/cli/pack/hook-solution-acceptance.d.ts +6 -0
  43. package/dist/cli/pack/hook-solution-acceptance.js +11 -2
  44. package/dist/cli/pack/hook-solution-acceptance.js.map +1 -1
  45. package/dist/cli/pack/hook-subagent-start.d.ts +2 -0
  46. package/dist/cli/pack/hook-subagent-start.js +21 -4
  47. package/dist/cli/pack/hook-subagent-start.js.map +1 -1
  48. package/dist/cli/policy/intercept.d.ts +2 -0
  49. package/dist/cli/policy/intercept.js +57 -21
  50. package/dist/cli/policy/intercept.js.map +1 -1
  51. package/dist/cli/record/index.js +97 -21
  52. package/dist/cli/record/index.js.map +1 -1
  53. package/dist/cli/session-start/branch-check.js +4 -1
  54. package/dist/cli/session-start/branch-check.js.map +1 -1
  55. package/dist/cli/session-start/index.d.ts +0 -15
  56. package/dist/cli/session-start/index.js +4 -62
  57. package/dist/cli/session-start/index.js.map +1 -1
  58. package/dist/cli/session-start/shared-options.d.ts +15 -4
  59. package/dist/cli/session-start/shared-options.js +13 -15
  60. package/dist/cli/session-start/shared-options.js.map +1 -1
  61. package/dist/cli/session-start/stale-base-check.js +4 -1
  62. package/dist/cli/session-start/stale-base-check.js.map +1 -1
  63. package/dist/cli/session-start/toolchain-parity.js +4 -1
  64. package/dist/cli/session-start/toolchain-parity.js.map +1 -1
  65. package/dist/io/atomic-write.d.ts +37 -1
  66. package/dist/io/atomic-write.js +61 -8
  67. package/dist/io/atomic-write.js.map +1 -1
  68. package/dist/io/display-path.d.ts +11 -0
  69. package/dist/io/display-path.js +29 -0
  70. package/dist/io/display-path.js.map +1 -0
  71. package/dist/policy-packs/builtin/post-merge-gate.js +5 -2
  72. package/dist/policy-packs/builtin/post-merge-gate.js.map +1 -1
  73. package/dist/policy-packs/builtin/understanding-before-execution/index.d.ts +1 -1
  74. package/dist/policy-packs/builtin/understanding-before-execution/index.js +1 -1
  75. package/dist/policy-packs/builtin/understanding-before-execution/index.js.map +1 -1
  76. package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.d.ts +127 -16
  77. package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js +192 -45
  78. package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js.map +1 -1
  79. package/dist/policy-packs/builtin/understanding-before-execution.d.ts +3 -2
  80. package/dist/policy-packs/builtin/understanding-before-execution.js +4 -1
  81. package/dist/policy-packs/builtin/understanding-before-execution.js.map +1 -1
  82. package/dist/runtime/deletion-target-resolve.js +24 -1
  83. package/dist/runtime/deletion-target-resolve.js.map +1 -1
  84. package/dist/runtime/destructive-shell-floor.js +15 -1
  85. package/dist/runtime/destructive-shell-floor.js.map +1 -1
  86. package/dist/runtime/shell-word.d.ts +26 -0
  87. package/dist/runtime/shell-word.js +94 -7
  88. package/dist/runtime/shell-word.js.map +1 -1
  89. package/package.json +1 -1
@@ -17,7 +17,8 @@ import * as fs from "node:fs";
17
17
  import * as os from "node:os";
18
18
  import * as path from "node:path";
19
19
  import { atomicWriteFile } from "../../io/atomic-write.js";
20
- import { approvedLedgerTagFor, canonicalReportHashOfFile, defaultReportsDir, hashReportFile, listPersistedReports, readActiveClaim, selectReportForSession, TOLERANT_FALLBACK_MAX_AGE_MS, writeApprovalMarker, writeTaskApprovalMarker, } from "../../policy-packs/builtin/understanding-before-execution-runtime.js";
20
+ import { escapeForDisplay } from "../../io/display-path.js";
21
+ import { approvedLedgerTagFor, defaultReportsDir, hashReportFile, listPersistedReportsBoundedWithSkips, MAX_HASHED_REPORT_BYTES, readReportFileBounded, readActiveClaim, selectReportForSession, TOLERANT_FALLBACK_MAX_AGE_MS, writeApprovalMarker, writeTaskApprovalMarker, } from "../../policy-packs/builtin/understanding-before-execution-runtime.js";
21
22
  import { PACK_NAME as UNDERSTANDING_PACK_NAME, resolveMode, toPackageMode, } from "../../policy-packs/builtin/understanding-before-execution.js";
22
23
  import { addLedgerFact } from "../../runtime/ledger-add.js";
23
24
  import { clearPendingApproval, resolveGeneratedDir, } from "../../runtime/pending-approval.js";
@@ -152,19 +153,18 @@ export function findLatestParseError(dir, sessionId) {
152
153
  catch {
153
154
  continue;
154
155
  }
155
- if (!stat.isFile())
156
- continue;
157
156
  candidates.push({ filePath: full, mtimeMs: stat.mtimeMs });
158
157
  }
159
158
  candidates.sort((a, b) => b.mtimeMs - a.mtimeMs);
160
159
  for (const cand of candidates) {
161
- let raw;
162
- try {
163
- raw = fs.readFileSync(cand.filePath, "utf8");
164
- }
165
- catch {
160
+ // Agent-writable dir, reached by both hooks on the no-marker path: the stat
161
+ // above only orders the candidates; the bounded reader's descriptor decides
162
+ // type and size, so a FIFO, a huge or a growing log is skipped like an
163
+ // unreadable one.
164
+ const bounded = readReportFileBounded(cand.filePath);
165
+ if (!bounded.ok)
166
166
  continue;
167
- }
167
+ const raw = bounded.raw;
168
168
  // The standalone package writes a JSON header followed by `--- raw ---`
169
169
  // and the original assistant text. Read the header for a `message`,
170
170
  // `reason`, or `missing` field; fall back to the first line if the
@@ -291,14 +291,54 @@ export function validatePersistedReport(parsed) {
291
291
  return { ok: true, mode };
292
292
  }
293
293
  /**
294
- * Exported (agent-tasks/74b4b17d) so the PreToolUse hook's auto-approval
295
- * path CONSUMES the report it used through the identical rewrite this
296
- * CLI performs (ADR Option A condition 5: consumption plus the
297
- * `pending`-only eligibility rule is what makes one report mintable at
298
- * most once). Export only; the logic is unchanged.
294
+ * Exported (agent-tasks/74b4b17d) so the PreToolUse hook's auto-approval path
295
+ * CONSUMES the report it used through the identical rewrite this CLI performs
296
+ * (ADR Option A condition 5). `boundedRaw`: the text that path already read
297
+ * through the bounded reader, so the consume never re-reads the agent-writable
298
+ * path (a retargeted symlink); `harness approve understanding` reads by path
299
+ * through the same bounded reader.
300
+ */
301
+ export function rewriteReportApproved(filePath, approvedAt, approvedBy, sessionId, boundedRaw) {
302
+ let raw = boundedRaw;
303
+ if (raw === undefined) {
304
+ // Bounded like every other read of this agent-writable directory: the path
305
+ // can be swapped for an oversized file or a FIFO after the listing.
306
+ const read = readReportFileBounded(filePath, { noFollow: true });
307
+ if (!read.ok)
308
+ throw new Error(`report ${read.detail}`);
309
+ raw = read.raw;
310
+ }
311
+ const { text, previousStatus, sessionIdStamped } = renderApprovedReport(raw, approvedAt, approvedBy, sessionId);
312
+ // Temp file plus rename: the rename replaces the directory entry (a symlink
313
+ // included) and never opens whatever a retargeted symlink points at.
314
+ atomicWriteFile(filePath, text);
315
+ return { previousStatus, sessionIdStamped };
316
+ }
317
+ /**
318
+ * Thrown by {@link renderApprovedReport} when the approved report, once
319
+ * pretty-printed with its approval fields, is over `MAX_HASHED_REPORT_BYTES`.
320
+ * The gate-read scan reads no file over that cap, so a marker signed for such
321
+ * a report would deny on every call and neither re-approval nor `--force`
322
+ * could clear it.
299
323
  */
300
- export function rewriteReportApproved(filePath, approvedAt, approvedBy, sessionId) {
301
- const raw = fs.readFileSync(filePath, "utf8");
324
+ export class ApprovedReportTooLargeError extends Error {
325
+ bytes;
326
+ constructor(bytes) {
327
+ super(`the approved report would be ${bytes} bytes, over the ${MAX_HASHED_REPORT_BYTES}-byte cap ` +
328
+ "for hashing its content, so the gate could not match it");
329
+ this.bytes = bytes;
330
+ this.name = "ApprovedReportTooLargeError";
331
+ }
332
+ }
333
+ /**
334
+ * The text `rewriteReportApproved` writes: the report with its approval
335
+ * fields stamped and pretty-printed. Pure, so a producer can check the size
336
+ * of the rewritten bytes before it signs a marker or changes any file. Throws
337
+ * {@link ApprovedReportTooLargeError} when those bytes exceed
338
+ * `MAX_HASHED_REPORT_BYTES`: a report accepted just under the cap can cross
339
+ * it through the pretty-print and the added fields.
340
+ */
341
+ export function renderApprovedReport(raw, approvedAt, approvedBy, sessionId) {
302
342
  const parsed = JSON.parse(raw);
303
343
  const previousStatus = typeof parsed["approvalStatus"] === "string" ? parsed["approvalStatus"] : null;
304
344
  parsed["approvalStatus"] = "approved";
@@ -307,31 +347,31 @@ export function rewriteReportApproved(filePath, approvedAt, approvedBy, sessionI
307
347
  // `expiredAt` and `expiredBy` are `expirePersistedReport`'s stamp for how a
308
348
  // report reached "expired" (understanding-before-execution-runtime.ts); they
309
349
  // describe that specific past state, not the report's current one.
310
- // Approving a report that was previously expired must not let that
311
- // stale timestamp survive into the new snapshot, or the persisted
312
- // record becomes self-contradictory: {approvalStatus: "approved",
313
- // expiredAt: ...}. Mirrors the same idiom in the standalone package's
314
- // `withApprovalStatus` (agent-grounding PR #173 / 5120938c review
315
- // round 2). `delete` (not `= undefined`) so `JSON.stringify` below
316
- // drops the key entirely instead of serializing `"expiredAt": null`-
317
- // adjacent noise.
350
+ // Approving a report that was previously expired must not let that stale
351
+ // timestamp survive into the new snapshot, or the persisted record becomes
352
+ // self-contradictory: {approvalStatus: "approved", expiredAt: ...}. Mirrors
353
+ // the same idiom in the standalone package's `withApprovalStatus`
354
+ // (agent-grounding PR #173, from the 5120938c review). `delete` (not
355
+ // `= undefined`) so `JSON.stringify` below drops the key entirely instead
356
+ // of serializing `"expiredAt": null`-adjacent noise.
318
357
  delete parsed["expiredAt"];
319
358
  delete parsed["expiredBy"];
320
- // Stamp the session id when the report lacks one (older Stop-hook
321
- // package versions write reports without a `sessionId` field). This
322
- // binds the report to the session that approved it, so every later
323
- // lookup strict-matches it and the sessionId-null tolerant fallback
324
- // can never re-adopt it for a different session (harness/0dce3880
325
- // friction #1). A report that already carries a sessionId is left
326
- // untouched — it is not this command's place to rewrite identity.
359
+ // Stamp the session id when the report lacks one (older Stop-hook package
360
+ // versions write reports without a `sessionId` field). This binds the report
361
+ // to the session that approved it, so every later lookup strict-matches it and
362
+ // the sessionId-null fallback can never re-adopt it for a different session
363
+ // (harness/0dce3880 friction #1). An existing sessionId is left untouched.
327
364
  let sessionIdStamped = false;
328
365
  const existing = parsed["sessionId"];
329
366
  if (typeof existing !== "string" || existing.length === 0) {
330
367
  parsed["sessionId"] = sessionId;
331
368
  sessionIdStamped = true;
332
369
  }
333
- atomicWriteFile(filePath, `${JSON.stringify(parsed, null, 2)}\n`);
334
- return { previousStatus, sessionIdStamped };
370
+ const text = `${JSON.stringify(parsed, null, 2)}\n`;
371
+ const bytes = Buffer.byteLength(text);
372
+ if (bytes > MAX_HASHED_REPORT_BYTES)
373
+ throw new ApprovedReportTooLargeError(bytes);
374
+ return { text, previousStatus, sessionIdStamped };
335
375
  }
336
376
  /**
337
377
  * Normalise a list of task ids supplied via `opts.tasks` (or the CLI's
@@ -353,6 +393,40 @@ export function dedupeTaskIds(raw) {
353
393
  }
354
394
  return out;
355
395
  }
396
+ /**
397
+ * A reason `hashReportFile` gives for a report whose CONTENT cannot be hashed
398
+ * (`--force` may sign a marker without a content binding over it), as opposed
399
+ * to one that could not be read within the bound (oversized, not a regular
400
+ * file, a link, unreadable, growing), which `--force` never overrides.
401
+ */
402
+ function isContentReason(reason) {
403
+ return reason === "too-deep" || reason === "not-json-object";
404
+ }
405
+ /**
406
+ * The reports directory is writable by the gated agent, so `harness approve
407
+ * understanding` lists it through the bounded reader (one `O_NOFOLLOW` open
408
+ * and `fstat` per entry, never a read past the size cap) and refuses while any `*.json`
409
+ * entry cannot be read as a report: oversized, a FIFO or other non-regular
410
+ * file, a symbolic link, unreadable, or growing. Refusing, rather than
411
+ * leaving the entry out, keeps the approval from binding an older report
412
+ * while a newer one is hidden from it. Thrown before any side effect, so
413
+ * no marker, ledger tag or report flip is written; `--force` does not
414
+ * override it (it overrides report content validation only).
415
+ */
416
+ function refuseSkippedReports(skipped, reportsDir) {
417
+ if (skipped.length === 0)
418
+ return;
419
+ const lines = skipped.map((s) => ` ${escapeForDisplay(s.filePath)}: ${s.detail}`);
420
+ throw new HarnessExitError([
421
+ `refusing to approve: ${skipped.length === 1 ? "an entry" : `${skipped.length} entries`} in the reports directory ` +
422
+ `cannot be read as a report, so approval cannot tell which report it would bind:`,
423
+ ...lines,
424
+ "",
425
+ `Remove or move ${skipped.length === 1 ? "that file" : "those files"} out of ${reportsDir}, then re-run ` +
426
+ "`harness approve understanding`. No approval marker, ledger tag or report change was written.",
427
+ "(`harness gc` lists such entries too and leaves them in place.)",
428
+ ].join("\n"), EX_FAIL);
429
+ }
356
430
  export async function approveUnderstanding(opts = {}) {
357
431
  // harness.generated/ holds the `.pending-approval` staging file (the
358
432
  // third resolution tier below) and is the directory this command cleans
@@ -393,6 +467,9 @@ export async function approveUnderstanding(opts = {}) {
393
467
  // HARNESS_ALLOW_REAL_GENERATED_DIR loader guard.
394
468
  const reportsDir = opts.reportsDir ??
395
469
  defaultReportsDir(path.dirname(resolvePaths(opts).base));
470
+ // Refuse a planted entry before anything else: the session-id fallback
471
+ // below and the report lookup further down both list this directory.
472
+ refuseSkippedReports(listPersistedReportsBoundedWithSkips(reportsDir, { refuseSymlinks: true }).skipped, reportsDir);
396
473
  const resolved = resolveApprovalSessionId({
397
474
  session: opts.session,
398
475
  generatedDir,
@@ -410,7 +487,9 @@ export async function approveUnderstanding(opts = {}) {
410
487
  // the loud newest-report warning the CLI prints, which names the report
411
488
  // file so the operator can verify before trusting the marker.
412
489
  newestReportFallback: () => {
413
- const newest = listPersistedReports(reportsDir).find((r) => r.sessionId !== null && r.approvalStatus === "pending");
490
+ const newest = listPersistedReportsBoundedWithSkips(reportsDir, {
491
+ refuseSymlinks: true,
492
+ }).reports.find((r) => r.sessionId !== null && r.approvalStatus === "pending");
414
493
  if (newest && newest.sessionId !== null) {
415
494
  return { sessionId: newest.sessionId, filePath: newest.filePath };
416
495
  }
@@ -523,7 +602,11 @@ export async function approveUnderstanding(opts = {}) {
523
602
  // weeks-old sessionId-less leftover from being adopted, validated,
524
603
  // and stamped as if it were the live session's report when the
525
604
  // producer Stop hook silently failed (harness-discovery C1).
526
- const reports = listPersistedReports(reportsDir);
605
+ // Listed again here (the stdin capture above may have written a report);
606
+ // a planted entry that appeared since the first listing is refused too.
607
+ const listing = listPersistedReportsBoundedWithSkips(reportsDir, { refuseSymlinks: true });
608
+ refuseSkippedReports(listing.skipped, reportsDir);
609
+ const reports = listing.reports;
527
610
  const selection = selectReportForSession(reports, sessionId, {
528
611
  tolerantFallback: "uncompleted",
529
612
  maxFallbackAgeMs: TOLERANT_FALLBACK_MAX_AGE_MS,
@@ -536,13 +619,30 @@ export async function approveUnderstanding(opts = {}) {
536
619
  }
537
620
  else {
538
621
  let parsed = null;
539
- try {
540
- parsed = JSON.parse(fs.readFileSync(latest.filePath, "utf8"));
622
+ // Bounded read, not following a symbolic link: the listing above saw the
623
+ // file within the cap, but the path can be swapped for an oversized file,
624
+ // a FIFO or a link since.
625
+ const reread = readReportFileBounded(latest.filePath, { noFollow: true });
626
+ if (reread.ok) {
627
+ try {
628
+ parsed = JSON.parse(reread.raw);
629
+ }
630
+ catch {
631
+ parsed = null;
632
+ }
541
633
  }
542
- catch {
543
- parsed = null;
634
+ if (!reread.ok) {
635
+ // Enforced even under --force: a report that cannot be read within the
636
+ // bound has no content to bind, and --force never signs a marker over
637
+ // one (it overrides content validation only).
638
+ validation = {
639
+ ok: false,
640
+ field: "report",
641
+ reason: `${reread.detail}, so the approval could not bind it`,
642
+ enforced: true,
643
+ };
544
644
  }
545
- if (!parsed) {
645
+ else if (!parsed) {
546
646
  validation = { skipped: true };
547
647
  }
548
648
  else {
@@ -551,17 +651,19 @@ export async function approveUnderstanding(opts = {}) {
551
651
  // A report the canonical hash cannot cover (larger than the size cap
552
652
  // the gate reads, not a regular file, nested too deeply) would sign a
553
653
  // marker whose `reportContentHash` is null, i.e. one the gate-read
554
- // content check never applies to, so it fails validation instead
555
- // (`--force` still overrides, as for any other validation failure).
556
- // `hashReportFile` reads the file exactly as the gate-read scan does.
654
+ // content check never applies to, so it fails validation instead.
655
+ // `--force` overrides only a content reason (too deep, not a JSON
656
+ // object); a size, type or read failure is enforced whatever the flag
657
+ // says. `hashReportFile` reads the file exactly as the gate-read scan
658
+ // does, except that it does not follow a symbolic link.
557
659
  if (validation.ok) {
558
- const hashed = hashReportFile(latest.filePath);
660
+ const hashed = hashReportFile(latest.filePath, { noFollow: true });
559
661
  if (!hashed.ok) {
560
662
  validation = {
561
663
  ok: false,
562
664
  field: "report",
563
665
  reason: `${hashed.detail}, so the approval could not bind it`,
564
- enforced: !opts.force,
666
+ enforced: !isContentReason(hashed.reason) || !opts.force,
565
667
  };
566
668
  }
567
669
  }
@@ -658,16 +760,55 @@ export async function approveUnderstanding(opts = {}) {
658
760
  // time (`verifyApprovedReportHash`, task fa423e9b) and refuse the marker
659
761
  // when none is left. null when no persisted report was resolved or it
660
762
  // cannot be read as a JSON object (validation skipped above, nothing to
661
- // bind), or when it cannot be hashed: larger than the size cap, not a
662
- // regular file, nested too deeply (reachable only under --force: the
663
- // validation above refuses such a report otherwise).
664
- const reportContentHash = latest ? canonicalReportHashOfFile(latest.filePath) : null;
763
+ // bind), or when its content cannot be hashed: nested too deeply or not a
764
+ // JSON object (reachable only under --force: the validation above refuses
765
+ // the first otherwise). A report larger than the size cap, not a regular
766
+ // file or a link never gets here: the validation above enforces that
767
+ // refusal under --force too, and the check below repeats it for a swap
768
+ // since.
769
+ let reportContentHash = null;
770
+ if (latest) {
771
+ const hashed = hashReportFile(latest.filePath, { noFollow: true });
772
+ if (hashed.ok) {
773
+ reportContentHash = hashed.hash;
774
+ }
775
+ else if (!isContentReason(hashed.reason)) {
776
+ // Swapped for an oversized file, a FIFO or a link after the validation
777
+ // above read it: refuse before any marker, ledger tag or report flip is
778
+ // written, `--force` or not (the validation above enforces the same).
779
+ throw new HarnessExitError(`refusing to approve: report ${escapeForDisplay(latest.filePath)} ${hashed.detail} ` +
780
+ "since it was validated, so the approval cannot bind it. No approval marker, " +
781
+ "ledger tag or report change was written; re-run `harness approve understanding`.", EX_FAIL);
782
+ }
783
+ }
665
784
  // Write the canonical approval marker first. The gate consults this
666
785
  // file (not the ledger) since agent-tasks/88ca4bb3 closed the self-
667
786
  // approval backdoor: the agent has direct MCP access to the ledger,
668
787
  // but no path to write a file under harness.generated/.
669
788
  const approvedAtMarker = (opts.now ?? new Date()).toISOString();
670
789
  const approvedByMarker = opts.approvedBy ?? DEFAULT_APPROVED_BY;
790
+ // The rewrite below pretty-prints the report and adds its approval fields,
791
+ // which can carry a report accepted just under the size cap over it. The
792
+ // gate-read scan reads no file over the cap, so the marker signed here would
793
+ // deny on every call, and neither re-approval nor --force could clear it.
794
+ // Render the rewrite first and refuse on its bytes, before any marker,
795
+ // ledger tag or report change is written, `--force` or not.
796
+ if (latest) {
797
+ const current = readReportFileBounded(latest.filePath, { noFollow: true });
798
+ if (current.ok) {
799
+ try {
800
+ renderApprovedReport(current.raw, approvedAtMarker, approvedByMarker, sessionId);
801
+ }
802
+ catch (err) {
803
+ if (err instanceof ApprovedReportTooLargeError) {
804
+ throw new HarnessExitError(`refusing to approve: report ${escapeForDisplay(latest.filePath)}: ${err.message}. ` +
805
+ "Shorten the report and re-run `harness approve understanding`. No approval marker, " +
806
+ "ledger tag or report change was written.", EX_FAIL);
807
+ }
808
+ // Any other failure (unparseable text) keeps its existing handling below.
809
+ }
810
+ }
811
+ }
671
812
  let markerResult;
672
813
  try {
673
814
  const filePath = writeApprovalMarker(generatedDir, sessionId, {
@@ -769,7 +910,7 @@ export async function approveUnderstanding(opts = {}) {
769
910
  if (reports.length === 0) {
770
911
  reason = `no reports found at ${reportsDir}`;
771
912
  if (latestParseError) {
772
- reason += `; latest parse-error at ${latestParseError.filePath}: ${latestParseError.summary}`;
913
+ reason += `; latest parse-error at ${escapeForDisplay(latestParseError.filePath)}: ${escapeForDisplay(latestParseError.summary)}`;
773
914
  }
774
915
  }
775
916
  else if (selection.staleRejected.length > 0) {
@@ -782,17 +923,17 @@ export async function approveUnderstanding(opts = {}) {
782
923
  const age = formatAge((opts.now ?? new Date()).getTime() - newest.createdAtMs);
783
924
  const maxMin = Math.round(TOLERANT_FALLBACK_MAX_AGE_MS / 60_000);
784
925
  reason =
785
- `no report matched session_id=${sessionId}; rejected ${selection.staleRejected.length} ` +
786
- `stale sessionId-less candidate(s) for age (newest: ${newest.filePath}, ` +
787
- `created ${newest.createdAt ?? "<unknown>"}, age ${age} > max ${maxMin}m). ` +
926
+ `no report matched session_id=${escapeForDisplay(sessionId)}; rejected ${selection.staleRejected.length} ` +
927
+ `stale sessionId-less candidate(s) for age (newest: ${escapeForDisplay(newest.filePath)}, ` +
928
+ `created ${escapeForDisplay(newest.createdAt ?? "<unknown>")}, age ${age} > max ${maxMin}m). ` +
788
929
  `If the agent just wrote an Understanding Report, the Stop hook likely failed to ` +
789
930
  `persist it; check ${parseErrorsDir}`;
790
931
  if (latestParseError) {
791
- reason += `; latest parse-error at ${latestParseError.filePath}: ${latestParseError.summary}`;
932
+ reason += `; latest parse-error at ${escapeForDisplay(latestParseError.filePath)}: ${escapeForDisplay(latestParseError.summary)}`;
792
933
  }
793
934
  }
794
935
  else {
795
- reason = `no report matched session_id=${sessionId} (${reports.length} report(s) for other sessions)`;
936
+ reason = `no report matched session_id=${escapeForDisplay(sessionId)} (${reports.length} report(s) for other sessions)`;
796
937
  }
797
938
  persistedReport = { ok: false, reason };
798
939
  }
@@ -820,7 +961,7 @@ export async function approveUnderstanding(opts = {}) {
820
961
  catch (err) {
821
962
  persistedReport = {
822
963
  ok: false,
823
- reason: `failed to rewrite ${latest.filePath}: ${err.message}`,
964
+ reason: `failed to rewrite ${escapeForDisplay(latest.filePath)}: ${escapeForDisplay(err.message)}`,
824
965
  };
825
966
  }
826
967
  }
@@ -1 +1 @@
1
- {"version":3,"file":"understanding.js","sourceRoot":"","sources":["../../../src/cli/approve/understanding.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,EAAE;AACF,4CAA4C;AAC5C,yCAAyC;AACzC,EAAE;AACF,6EAA6E;AAC7E,wEAAwE;AACxE,mDAAmD;AACnD,uEAAuE;AACvE,oEAAoE;AACpE,EAAE;AACF,uEAAuE;AACvE,uEAAuE;AACvE,qEAAqE;AACrE,oEAAoE;AAEpE,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,4BAA4B,EAC5B,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,sEAAsE,CAAC;AAC9E,OAAO,EAEL,SAAS,IAAI,uBAAuB,EACpC,WAAW,EACX,aAAa,GACd,MAAM,8DAA8D,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAsB,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAA2B,MAAM,mBAAmB,CAAC;AA2EhF;;;;GAIG;AACH,SAAS,SAAS,CAAC,EAAU;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IACpC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG;QAAE,OAAO,GAAG,GAAG,GAAG,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;QAAE,OAAO,GAAG,KAAK,GAAG,CAAC;IAC7C,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC;AACtC,CAAC;AAwGD,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAElD,SAAS,gBAAgB,CAAC,QAAkB;IAC1C,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,IAAI,CAAC;AAC5E,CAAC;AAED,SAAS,cAAc,CAAC,CAAS;IAC/B,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACvD,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,OAAO,CAAC,CAAC;AACX,CAAC;AAiBD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,6BAA6B,CAC3C,IAA6C;IAE7C,IAAI,QAAQ,GAAoB,IAAI,CAAC;IACrC,IAAI,iBAAiB,GAAkB,IAAI,CAAC;IAC5C,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,iBAAiB,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,YAAY,GAAqB,QAAQ,EAAE,YAAY,CAAC,IAAI,CAChE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,uBAAuB,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,CACjE,IAAI,EAAE,IAAI,EAAE,uBAAuB,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACnD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC;AACvD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAkB,EAClB,SAAiB,EACjB,OAAe,EACf,IAAiC,EACjC,MAAM,GAAG,+BAA+B;IAExC,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,wCAAwC,EAAE,CAAC;IACzE,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QAC3C,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACpC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC3D,OAAO,aAAa,CAAC;QACnB,UAAU,EAAE,OAAO;QACnB,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;QACzC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,IAAI,KAAK;QAC7C,SAAS;QACT,OAAO;QACP,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAoBD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW,EAAE,SAAiB;IACjE,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,UAAU,GAA4C,EAAE,CAAC;IAC/D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,SAAS;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,IAAc,CAAC;QACnB,IAAI,CAAC;YACH,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,SAAS;QAC7B,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,wEAAwE;QACxE,oEAAoE;QACpE,mEAAmE;QACnE,gEAAgE;QAChE,wCAAwC;QACxC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QACpD,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,IAAI,eAAe,GAAkB,IAAI,CAAC;QAC1C,IAAI,iBAAiB,GAAa,EAAE,CAAC;QACrC,qEAAqE;QACrE,uEAAuE;QACvE,gEAAgE;QAChE,qEAAqE;QACrE,sEAAsE;QACtE,uEAAuE;QACvE,mEAAmE;QACnE,oDAAoD;QACpD,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAA4B,CAAC;YAC7D,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC5C,eAAe,GAAG,MAAM,CAAC,WAAW,CAAW,CAAC;YAClD,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC;gBAC/C,iBAAiB,GAAI,MAAM,CAAC,mBAAmB,CAAe,CAAC,MAAM,CACnE,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAC1C,CAAC;YACJ,CAAC;YACD,IAAI,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1E,OAAO,GAAG,MAAM,CAAC,SAAS,CAAW,CAAC;gBACtC,kBAAkB,GAAG,IAAI,CAAC;YAC5B,CAAC;iBAAM,IAAI,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAChD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBAC9C,CAAC,CAAC,cAAe,MAAM,CAAC,SAAS,CAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;oBACnG,CAAC,CAAC,EAAE,CAAC;gBACP,OAAO,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAW,GAAG,OAAO,EAAE,CAAC;YACtD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8DAA8D;QAChE,CAAC;QACD,IAAI,eAAe,KAAK,SAAS;YAAE,SAAS;QAC5C,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxD,OAAO,GAAG,GAAG,OAAO,kDAAkD,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvG,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;IACjE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,6BAA6B,CAAC,QAAkB;IAC9D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,OAAO,CACL,oEAAoE;QACpE,sCAAsC,KAAK,GAAG,CAC/C,CAAC;AACJ,CAAC;AA6BD;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAA+B;IACrE,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAM,CAAC,MAAM,CAAY,CAAC,CAAC,CAAC,IAAI,CAAC;IACpF,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAEnD,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,UAAU;YACjB,MAAM,EACJ,8DAA8D;gBAC9D,oEAAoE;gBACpE,oCAAoC;SACvC,CAAC;IACJ,CAAC;IAED,iEAAiE;IACjE,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzD,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,UAAU;gBACjB,MAAM,EACJ,kEAAkE;oBAClE,yCAAyC;aAC5C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,sEAAsE;IACtE,mEAAmE;IACnE,qEAAqE;IACrE,4BAA4B;IAC5B,MAAM,MAAM,GAAG,CAAC,CAAU,EAAW,EAAE,CACrC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/E,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,UAAU;YACjB,MAAM,EACJ,oEAAoE;gBACpE,kEAAkE;gBAClE,0EAA0E;SAC7E,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAgB,EAChB,UAAkB,EAClB,UAAkB,EAClB,SAAiB;IAEjB,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;IAC1D,MAAM,cAAc,GAClB,OAAO,MAAM,CAAC,gBAAgB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAM,CAAC,gBAAgB,CAAY,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7F,MAAM,CAAC,gBAAgB,CAAC,GAAG,UAAU,CAAC;IACtC,MAAM,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC;IAClC,MAAM,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC;IAClC,4EAA4E;IAC5E,6EAA6E;IAC7E,mEAAmE;IACnE,mEAAmE;IACnE,kEAAkE;IAClE,kEAAkE;IAClE,sEAAsE;IACtE,kEAAkE;IAClE,mEAAmE;IACnE,qEAAqE;IACrE,kBAAkB;IAClB,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;IAC3B,kEAAkE;IAClE,oEAAoE;IACpE,mEAAmE;IACnE,oEAAoE;IACpE,kEAAkE;IAClE,kEAAkE;IAClE,kEAAkE;IAClE,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;QAChC,gBAAgB,GAAG,IAAI,CAAC;IAC1B,CAAC;IACD,eAAe,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAClE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,GAAa;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAS;YAC9C,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAoC,EAAE;IAEtC,qEAAqE;IACrE,wEAAwE;IACxE,uEAAuE;IACvE,qEAAqE;IACrE,gDAAgD;IAChD,MAAM,YAAY,GAChB,IAAI,CAAC,YAAY;QACjB,mBAAmB,CAAC;YAClB,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI;SACtC,CAAC,CAAC;IAEL,8CAA8C;IAC9C,+BAA+B;IAC/B,oEAAoE;IACpE,sEAAsE;IACtE,sEAAsE;IACtE,8CAA8C;IAC9C,kEAAkE;IAClE,sEAAsE;IACtE,sDAAsD;IACtD,sEAAsE;IACtE,6DAA6D;IAC7D,qEAAqE;IACrE,qEAAqE;IACrE,yEAAyE;IACzE,sEAAsE;IACtE,iEAAiE;IACjE,iEAAiE;IACjE,wEAAwE;IACxE,wEAAwE;IACxE,EAAE;IACF,uEAAuE;IACvE,6DAA6D;IAC7D,qEAAqE;IACrE,oEAAoE;IACpE,mEAAmE;IACnE,wDAAwD;IACxD,iDAAiD;IACjD,MAAM,UAAU,GACd,IAAI,CAAC,UAAU;QACf,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,wBAAwB,CAAC;QACxC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,YAAY;QACZ,gEAAgE;QAChE,6DAA6D;QAC7D,6DAA6D;QAC7D,iEAAiE;QACjE,mDAAmD;QACnD,8DAA8D;QAC9D,gEAAgE;QAChE,4DAA4D;QAC5D,gEAAgE;QAChE,6DAA6D;QAC7D,gEAAgE;QAChE,wEAAwE;QACxE,8DAA8D;QAC9D,oBAAoB,EAAE,GAAG,EAAE;YACzB,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC,IAAI,CAClD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,CAAC,cAAc,KAAK,SAAS,CAC9D,CAAC;YACF,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBACxC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpE,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;IACrC,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;IAC7C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC;IAEnD,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACrB,qEAAqE;QACrE,0DAA0D;QAC1D,gEAAgE;QAChE,kEAAkE;QAClE,qEAAqE;QACrE,yDAAyD;QACzD,gEAAgE;QAChE,iEAAiE;QACjE,oBAAoB;QACpB,MAAM,IAAI,gBAAgB,CACxB;YACE,6DAA6D;YAC7D,uEAAuE;YACvE,4BAA4B;YAC5B,EAAE;YACF,qFAAqF;YACrF,yBAAyB;YACzB,KAAK,YAAY,oBAAoB;YACrC,0EAA0E;YAC1E,iFAAiF;YACjF,0FAA0F;YAC1F,EAAE;YACF,yEAAyE;YACzE,yEAAyE;YACzE,EAAE;YACF,uCAAuC;YACvC,oEAAoE;YACpE,SAAS,UAAU,EAAE;YACrB,uEAAuE;YACvE,qEAAqE;YACrE,2CAA2C;YAC3C,mEAAmE;YACnE,iEAAiE;YACjE,qEAAqE;YACrE,EAAE;YACF,kEAAkE;YAClE,qEAAqE;YACrE,gEAAgE;YAChE,gCAAgC;SACjC,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,OAAO,CACR,CAAC;IACJ,CAAC;IAED,oEAAoE;IACpE,qEAAqE;IACrE,sEAAsE;IACtE,uEAAuE;IACvE,uEAAuE;IACvE,yEAAyE;IACzE,OAAO;IACP,iEAAiE;IACjE,4DAA4D;IAC5D,uEAAuE;IACvE,mEAAmE;IACnE,wEAAwE;IACxE,uEAAuE;IACvE,sEAAsE;IACtE,6DAA6D;IAC7D,sEAAsE;IACtE,oEAAoE;IACpE,mEAAmE;IACnE,aAAa;IACb,EAAE;IACF,oEAAoE;IACpE,sEAAsE;IACtE,oEAAoE;IACpE,iEAAiE;IACjE,+DAA+D;IAC/D,sEAAsE;IACtE,mEAAmE;IACnE,mEAAmE;IACnE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;IAC1F,sEAAsE;IACtE,wEAAwE;IACxE,kEAAkE;IAClE,iEAAiE;IACjE,sEAAsE;IACtE,sEAAsE;IACtE,iEAAiE;IACjE,sEAAsE;IACtE,uEAAuE;IACvE,WAAW;IACX,MAAM,cAAc,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAExD,gEAAgE;IAChE,sEAAsE;IACtE,qEAAqE;IACrE,gEAAgE;IAChE,IAAI,WAA2C,CAAC;IAChD,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrF,WAAW,GAAG,kBAAkB,CAAC;YAC/B,QAAQ,EAAE,IAAI,CAAC,cAAc;YAC7B,UAAU;YACV,SAAS;YACT,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;YAC3B,IAAI,EAAE,YAAY;SACnB,CAAC,CAAC;IACL,CAAC;IAED,mEAAmE;IACnE,sEAAsE;IACtE,sEAAsE;IACtE,sEAAsE;IACtE,mEAAmE;IACnE,+DAA+D;IAC/D,6DAA6D;IAC7D,MAAM,OAAO,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,sBAAsB,CAAC,OAAO,EAAE,SAAS,EAAE;QAC3D,gBAAgB,EAAE,aAAa;QAC/B,gBAAgB,EAAE,4BAA4B;QAC9C,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAChC,IAAI,UAAoD,CAAC;IACzD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,UAAU,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,IAAI,MAAM,GAAmC,IAAI,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAG3D,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,UAAU,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;YAC1C,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACxD,qEAAqE;YACrE,sEAAsE;YACtE,mEAAmE;YACnE,iEAAiE;YACjE,oEAAoE;YACpE,sEAAsE;YACtE,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC;gBAClB,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC/C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;oBACf,UAAU,GAAG;wBACX,EAAE,EAAE,KAAK;wBACT,KAAK,EAAE,QAAQ;wBACf,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,qCAAqC;wBAC7D,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK;qBACtB,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,uEAAuE;IACvE,6DAA6D;IAC7D,kEAAkE;IAClE,wEAAwE;IACxE,wEAAwE;IACxE,oEAAoE;IACpE,sEAAsE;IACtE,uEAAuE;IACvE,uEAAuE;IACvE,qEAAqE;IACrE,kDAAkD;IAClD,EAAE;IACF,gEAAgE;IAChE,oEAAoE;IACpE,+DAA+D;IAC/D,wEAAwE;IACxE,uEAAuE;IACvE,qEAAqE;IACrE,oEAAoE;IACpE,wEAAwE;IACxE,wEAAwE;IACxE,wEAAwE;IACxE,sEAAsE;IACtE,sEAAsE;IACtE,wDAAwD;IACxD,uEAAuE;IACvE,4BAA4B;IAC5B,EAAE;IACF,8DAA8D;IAC9D,8DAA8D;IAC9D,qEAAqE;IACrE,uEAAuE;IACvE,eAAe;IACf,IACE,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ;QACvC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QACrC,WAAW,KAAK,SAAS;QACzB,WAAW,CAAC,EAAE,KAAK,KAAK;QACxB,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,eAAe,CAAC,EACtC,CAAC;QACD,UAAU,GAAG;YACX,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,aAAa;YACpB,MAAM,EAAE,WAAW,CAAC,MAAM;YAC1B,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK;SACtB,CAAC;IACJ,CAAC;IAED,qEAAqE;IACrE,qEAAqE;IACrE,8DAA8D;IAC9D,oEAAoE;IACpE,mDAAmD;IACnD,IAAI,IAAI,IAAI,UAAU,IAAI,UAAU,CAAC,EAAE,KAAK,KAAK,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACzE,kEAAkE;QAClE,oEAAoE;QACpE,oEAAoE;QACpE,mEAAmE;QACnE,mEAAmE;QACnE,0CAA0C;QAC1C,OAAO;YACL,SAAS;YACT,aAAa;YACb,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,GAAG,CAAC,cAAc,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnF,MAAM,EAAE;gBACN,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,sBAAsB,UAAU,CAAC,KAAK,MAAM,UAAU,CAAC,MAAM,EAAE;aACxE;YACD,WAAW,EAAE,EAAE;YACf,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,MAAM,EAAE;gBACN,EAAE,EAAE,KAAK;gBACT,GAAG,EAAE,oBAAoB,CAAC,SAAS,CAAC;gBACpC,MAAM,EAAE,YAAY,UAAU,CAAC,KAAK,oBAAoB;aACzD;YACD,eAAe,EAAE;gBACf,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,YAAY,UAAU,CAAC,KAAK,oBAAoB;aACzD;YACD,UAAU;SACX,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,wEAAwE;IACxE,oEAAoE;IACpE,uEAAuE;IACvE,0EAA0E;IAC1E,wEAAwE;IACxE,2EAA2E;IAC3E,yEAAyE;IACzE,sEAAsE;IACtE,wEAAwE;IACxE,sEAAsE;IACtE,qEAAqE;IACrE,qDAAqD;IACrD,MAAM,iBAAiB,GACrB,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7D,oEAAoE;IACpE,oEAAoE;IACpE,oEAAoE;IACpE,wDAAwD;IACxD,MAAM,gBAAgB,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAChE,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAC;IAChE,IAAI,YAAkD,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,mBAAmB,CAAC,YAAY,EAAE,SAAS,EAAE;YAC5D,UAAU,EAAE,gBAAgB;YAC5B,UAAU,EAAE,gBAAgB;YAC5B,iBAAiB;SAClB,CAAC,CAAC;QACH,YAAY,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC;IACtE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,GAAG;YACb,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,oCAAqC,GAAa,CAAC,OAAO,EAAE;SACrE,CAAC;IACJ,CAAC;IAED,6DAA6D;IAC7D,oEAAoE;IACpE,uDAAuD;IACvD,mEAAmE;IACnE,oDAAoD;IACpD,sDAAsD;IACtD,oEAAoE;IACpE,iEAAiE;IACjE,uDAAuD;IACvD,IAAI,eAAe,GAAa,EAAE,CAAC;IACnC,IAAI,UAAU,GAA4B,MAAM,CAAC;IACjD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,eAAe,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,UAAU,GAAG,MAAM,CAAC;IACtB,CAAC;SAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjE,eAAe,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,UAAU,GAAG,MAAM,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;QAC/C,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,eAAe,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC7B,UAAU,GAAG,cAAc,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,MAAM,WAAW,GAAwB,EAAE,CAAC;IAC5C,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,uBAAuB,CAAC,YAAY,EAAE,MAAM,EAAE;gBAC7D,UAAU,EAAE,gBAAgB;gBAC5B,UAAU,EAAE,gBAAgB;gBAC5B,iBAAiB;aAClB,CAAC,CAAC;YACH,WAAW,CAAC,IAAI,CAAC;gBACf,EAAE,EAAE,IAAI;gBACR,MAAM;gBACN,QAAQ;gBACR,UAAU,EAAE,gBAAgB;gBAC5B,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,IAAI,CAAC;gBACf,EAAE,EAAE,KAAK;gBACT,MAAM;gBACN,MAAM,EAAE,gCAAiC,GAAa,CAAC,OAAO,EAAE;gBAChE,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,kEAAkE;IAClE,kEAAkE;IAClE,sEAAsE;IACtE,+DAA+D;IAC/D,qBAAqB;IACrB,MAAM,GAAG,GACP,IAAI,IAAI,UAAU,IAAI,UAAU,CAAC,EAAE,KAAK,KAAK;QAC3C,CAAC,CAAC,GAAG,oBAAoB,CAAC,SAAS,CAAC,WAAW,UAAU,CAAC,KAAK,EAAE;QACjE,CAAC,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,QAAQ;QAC3B,CAAC,CAAC,MAAM,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC;QACtD,CAAC,CAAC;YACE,EAAE,EAAE,KAAc;YAClB,MAAM,EAAE,iBAAiB;gBACvB,CAAC,CAAC,wBAAwB,iBAAiB,yBAAyB;gBACpE,CAAC,CAAC,2CAA2C;SAChD,CAAC;IAEN,uEAAuE;IACvE,oEAAoE;IACpE,wBAAwB;IAExB,IAAI,eAA8D,CAAC;IACnE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,mEAAmE;QACnE,+DAA+D;QAC/D,iEAAiE;QACjE,iEAAiE;QACjE,gEAAgE;QAChE,kEAAkE;QAClE,0BAA0B;QAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC;QAC3E,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QACzE,IAAI,MAAc,CAAC;QACnB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,GAAG,uBAAuB,UAAU,EAAE,CAAC;YAC7C,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAM,IAAI,2BAA2B,gBAAgB,CAAC,QAAQ,KAAK,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAChG,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,2DAA2D;YAC3D,kEAAkE;YAClE,8DAA8D;YAC9D,+DAA+D;YAC/D,uDAAuD;YACvD,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC,CAAE,CAAC;YAC3C,MAAM,GAAG,GAAG,SAAS,CACnB,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,WAAW,CACxD,CAAC;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,GAAG,MAAM,CAAC,CAAC;YACjE,MAAM;gBACJ,gCAAgC,SAAS,cAAc,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG;oBACxF,sDAAsD,MAAM,CAAC,QAAQ,IAAI;oBACzE,WAAW,MAAM,CAAC,SAAS,IAAI,WAAW,SAAS,GAAG,UAAU,MAAM,MAAM;oBAC5E,kFAAkF;oBAClF,qBAAqB,cAAc,EAAE,CAAC;YACxC,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAM,IAAI,2BAA2B,gBAAgB,CAAC,QAAQ,KAAK,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAChG,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,gCAAgC,SAAS,KAAK,OAAO,CAAC,MAAM,gCAAgC,CAAC;QACxG,CAAC;QACD,eAAe,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAC;QAC1D,IAAI,CAAC;YACH,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,qBAAqB,CAChE,MAAM,CAAC,QAAQ,EACf,UAAU,EACV,UAAU,EACV,SAAS,CACV,CAAC;YACF,eAAe,GAAG;gBAChB,EAAE,EAAE,IAAI;gBACR,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,cAAc;gBACd,UAAU;gBACV,gBAAgB;gBAChB,GAAG,CAAC,SAAS,CAAC,eAAe;oBAC3B,CAAC,CAAC;wBACE,eAAe,EAAE;4BACf,SAAS,EAAE,MAAM,CAAC,SAAS;4BAC3B,UAAU,EAAE,IAAI,CAAC,KAAK,CACpB,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,CACnE;yBACF;qBACF;oBACH,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,eAAe,GAAG;gBAChB,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,qBAAqB,MAAM,CAAC,QAAQ,KAAM,GAAa,CAAC,OAAO,EAAE;aAC1E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,sEAAsE;IACtE,uEAAuE;IACvE,sEAAsE;IACtE,IAAI,aAAa,KAAK,kBAAkB,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;QAC5D,oBAAoB,CAAC,YAAY,CAAC,CAAC;IACrC,CAAC;IAED,OAAO;QACL,SAAS;QACT,aAAa;QACb,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,cAAc,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,MAAM,EAAE,YAAY;QACpB,WAAW;QACX,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,MAAM,EAAE,YAAY,CAAC,EAAE;YACrB,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;YACnB,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE;QACnD,eAAe;QACf,UAAU;KACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"understanding.js","sourceRoot":"","sources":["../../../src/cli/approve/understanding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Idle bound for the stdin read. The timer restarts on every chunk, so a slow
3
+ * but live pipe is never cut off mid-write; it stays well under the 60 s
4
+ * preflight timeout so the fallback costs little.
5
+ */
6
+ export declare const STDIN_IDLE_TIMEOUT_MS = 3000;
7
+ export interface StdinRead {
8
+ text: string;
9
+ /** True when the idle bound fired before `end`. */
10
+ timedOut: boolean;
11
+ }
12
+ /**
13
+ * Read a stream as UTF-8 text until `end`, or until no chunk has arrived for
14
+ * `idleTimeoutMs`. After a timeout the stream is paused and a no-op error
15
+ * handler stays attached, so a late `error` is not an unhandled event.
16
+ */
17
+ export declare function readStdinBounded(stream: NodeJS.ReadableStream, idleTimeoutMs?: number): Promise<StdinRead>;
18
+ /** Tail of the empty-read note used by the session-start producers. */
19
+ export declare const DEFAULT_EMPTY_READ_TAIL = "falling back to the default session resolution";
20
+ /**
21
+ * The stderr note for a read the idle bound cut off (no trailing newline).
22
+ * `emptyReadTail` says what the caller does when nothing was read; it defaults
23
+ * to the session-start wording, and a caller with a different fallback (the pack
24
+ * hook readers continue as an empty event) passes its own. The partial-data note
25
+ * is the same for every caller.
26
+ */
27
+ export declare function stdinTimeoutNote(read: StdinRead, idleTimeoutMs: number, emptyReadTail?: string): string;
28
+ /**
29
+ * The block reason a PreToolUse gate gives when its stdin read timed out. It
30
+ * names the stdin timeout and the bound; the gate fails closed because an
31
+ * event that did not finish arriving cannot be judged.
32
+ */
33
+ export declare function stdinTimeoutBlockReason(idleTimeoutMs: number): string;
34
+ /**
35
+ * The Claude Code block envelope for a stdin-timeout refusal: `decision:
36
+ * "block"` for legacy CLIs plus the 2.1+ `hookSpecificOutput` PreToolUse deny.
37
+ * Same shape every PreToolUse gate under src/cli/pack/ and `harness policy
38
+ * intercept` emit for a block.
39
+ */
40
+ export declare function stdinTimeoutBlockJson(reason: string): string;
@@ -0,0 +1,111 @@
1
+ // One idle-bounded stdin reader shared by every hook-style CLI entry that
2
+ // parses an event JSON from stdin (session-start preflight, branch-check,
3
+ // stale-base-check, toolchain-parity, policy intercept, and the pack hook
4
+ // readers: `readStdin` / `readStdinChecked` in pack/hook-bootstrap.ts and the
5
+ // runtime-reality reader in pack/hook-runtime-reality.ts). It also holds the
6
+ // shared stdin-timeout refusal reason and block envelope those PreToolUse
7
+ // gates emit when the read timed out.
8
+ //
9
+ // A hook pipes the event JSON and closes stdin at once, so a real pipe never
10
+ // gets near the bound; it only bites when stdin is an open pipe or a TTY that
11
+ // never produces `end` (a backgrounded compound command with no controlling
12
+ // terminal), where an end-only read hangs the process forever.
13
+ /**
14
+ * Idle bound for the stdin read. The timer restarts on every chunk, so a slow
15
+ * but live pipe is never cut off mid-write; it stays well under the 60 s
16
+ * preflight timeout so the fallback costs little.
17
+ */
18
+ export const STDIN_IDLE_TIMEOUT_MS = 3000;
19
+ function ignoreLateError() {
20
+ // Deliberately empty: the read already resolved, see readStdinBounded.
21
+ }
22
+ /**
23
+ * Read a stream as UTF-8 text until `end`, or until no chunk has arrived for
24
+ * `idleTimeoutMs`. After a timeout the stream is paused and a no-op error
25
+ * handler stays attached, so a late `error` is not an unhandled event.
26
+ */
27
+ export async function readStdinBounded(stream, idleTimeoutMs = STDIN_IDLE_TIMEOUT_MS) {
28
+ return new Promise((resolve, reject) => {
29
+ let data = "";
30
+ let timer;
31
+ const arm = () => {
32
+ if (timer !== undefined)
33
+ clearTimeout(timer);
34
+ timer = setTimeout(() => {
35
+ stream.removeListener("data", onData);
36
+ stream.removeListener("end", onEnd);
37
+ stream.removeListener("error", onError);
38
+ // A later 'error' on a stream nobody listens to any more would be an
39
+ // unhandled event and throw, so keep a no-op handler attached.
40
+ stream.on("error", ignoreLateError);
41
+ // Stop reading so a caller that passed a live stream is not left with
42
+ // a flowing one (the CLI itself exits through process.exit regardless).
43
+ stream.pause();
44
+ resolve({ text: data, timedOut: true });
45
+ }, idleTimeoutMs);
46
+ };
47
+ const onData = (chunk) => {
48
+ data += chunk;
49
+ arm();
50
+ };
51
+ const onEnd = () => {
52
+ if (timer !== undefined)
53
+ clearTimeout(timer);
54
+ resolve({ text: data, timedOut: false });
55
+ };
56
+ const onError = (err) => {
57
+ if (timer !== undefined)
58
+ clearTimeout(timer);
59
+ reject(err);
60
+ };
61
+ stream.setEncoding("utf8");
62
+ stream.on("data", onData);
63
+ stream.on("end", onEnd);
64
+ stream.on("error", onError);
65
+ arm();
66
+ });
67
+ }
68
+ /** Tail of the empty-read note used by the session-start producers. */
69
+ export const DEFAULT_EMPTY_READ_TAIL = "falling back to the default session resolution";
70
+ /**
71
+ * The stderr note for a read the idle bound cut off (no trailing newline).
72
+ * `emptyReadTail` says what the caller does when nothing was read; it defaults
73
+ * to the session-start wording, and a caller with a different fallback (the pack
74
+ * hook readers continue as an empty event) passes its own. The partial-data note
75
+ * is the same for every caller.
76
+ */
77
+ export function stdinTimeoutNote(read, idleTimeoutMs, emptyReadTail = DEFAULT_EMPTY_READ_TAIL) {
78
+ return read.text.length === 0
79
+ ? `no complete event JSON on stdin within ${idleTimeoutMs} ms (stdin never closed); ` +
80
+ emptyReadTail
81
+ : `stdin did not close within ${idleTimeoutMs} ms of the last data; ` +
82
+ `using the ${Buffer.byteLength(read.text)} bytes read`;
83
+ }
84
+ /**
85
+ * The block reason a PreToolUse gate gives when its stdin read timed out. It
86
+ * names the stdin timeout and the bound; the gate fails closed because an
87
+ * event that did not finish arriving cannot be judged.
88
+ */
89
+ export function stdinTimeoutBlockReason(idleTimeoutMs) {
90
+ return (`stdin timeout: no complete event arrived and closed on stdin within ${idleTimeoutMs} ms, ` +
91
+ `so this gate cannot judge the tool call and refuses it (fail closed). ` +
92
+ `Retry the tool call. Operator override: \`harness pause\`.`);
93
+ }
94
+ /**
95
+ * The Claude Code block envelope for a stdin-timeout refusal: `decision:
96
+ * "block"` for legacy CLIs plus the 2.1+ `hookSpecificOutput` PreToolUse deny.
97
+ * Same shape every PreToolUse gate under src/cli/pack/ and `harness policy
98
+ * intercept` emit for a block.
99
+ */
100
+ export function stdinTimeoutBlockJson(reason) {
101
+ return JSON.stringify({
102
+ decision: "block",
103
+ reason,
104
+ hookSpecificOutput: {
105
+ hookEventName: "PreToolUse",
106
+ permissionDecision: "deny",
107
+ permissionDecisionReason: reason,
108
+ },
109
+ });
110
+ }
111
+ //# sourceMappingURL=bounded-stdin.js.map