@lannguyensi/harness 0.14.0 → 0.16.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 (83) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +20 -2
  3. package/dist/cli/doctor/format.js +24 -0
  4. package/dist/cli/doctor/format.js.map +1 -1
  5. package/dist/cli/doctor/index.d.ts +7 -0
  6. package/dist/cli/doctor/index.js +10 -0
  7. package/dist/cli/doctor/index.js.map +1 -1
  8. package/dist/cli/doctor/rogue-ledger.d.ts +25 -0
  9. package/dist/cli/doctor/rogue-ledger.js +106 -0
  10. package/dist/cli/doctor/rogue-ledger.js.map +1 -0
  11. package/dist/cli/doctor/types.d.ts +10 -1
  12. package/dist/cli/doctor/types.js.map +1 -1
  13. package/dist/cli/index.js +177 -0
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/init/composer.d.ts +29 -0
  16. package/dist/cli/init/composer.js +377 -0
  17. package/dist/cli/init/composer.js.map +1 -0
  18. package/dist/cli/init/dependencies.d.ts +25 -0
  19. package/dist/cli/init/dependencies.js +100 -10
  20. package/dist/cli/init/dependencies.js.map +1 -1
  21. package/dist/cli/init/index.d.ts +18 -1
  22. package/dist/cli/init/index.js +17 -7
  23. package/dist/cli/init/index.js.map +1 -1
  24. package/dist/cli/init/interactive.d.ts +31 -2
  25. package/dist/cli/init/interactive.js +321 -79
  26. package/dist/cli/init/interactive.js.map +1 -1
  27. package/dist/cli/init/templates.d.ts +1 -1
  28. package/dist/cli/init/templates.js +60 -9
  29. package/dist/cli/init/templates.js.map +1 -1
  30. package/dist/cli/pack/hook-branch-protection.d.ts +30 -0
  31. package/dist/cli/pack/hook-branch-protection.js +279 -0
  32. package/dist/cli/pack/hook-branch-protection.js.map +1 -0
  33. package/dist/cli/pack/hook-codex-pre-tool-use.js +3 -1
  34. package/dist/cli/pack/hook-codex-pre-tool-use.js.map +1 -1
  35. package/dist/cli/pack/hook-pre-tool-use.d.ts +1 -1
  36. package/dist/cli/pack/hook-pre-tool-use.js +42 -3
  37. package/dist/cli/pack/hook-pre-tool-use.js.map +1 -1
  38. package/dist/cli/pack/understanding-report-schema-hint.d.ts +13 -0
  39. package/dist/cli/pack/understanding-report-schema-hint.js +54 -0
  40. package/dist/cli/pack/understanding-report-schema-hint.js.map +1 -0
  41. package/dist/cli/session-start/branch-check.d.ts +44 -0
  42. package/dist/cli/session-start/branch-check.js +165 -0
  43. package/dist/cli/session-start/branch-check.js.map +1 -0
  44. package/dist/cli/uninstall/index.d.ts +68 -0
  45. package/dist/cli/uninstall/index.js +586 -0
  46. package/dist/cli/uninstall/index.js.map +1 -0
  47. package/dist/cli/uninstall/snapshot.d.ts +40 -0
  48. package/dist/cli/uninstall/snapshot.js +34 -0
  49. package/dist/cli/uninstall/snapshot.js.map +1 -0
  50. package/dist/cli/validate/checks.d.ts +1 -1
  51. package/dist/cli/validate/checks.js +1 -7
  52. package/dist/cli/validate/checks.js.map +1 -1
  53. package/dist/io/harness-lock.js +1 -9
  54. package/dist/io/harness-lock.js.map +1 -1
  55. package/dist/policies/ledger-client.js +3 -9
  56. package/dist/policies/ledger-client.js.map +1 -1
  57. package/dist/policies/producers.d.ts +12 -0
  58. package/dist/policies/producers.js +61 -0
  59. package/dist/policies/producers.js.map +1 -0
  60. package/dist/policy-packs/builtin/branch-protection-runtime.d.ts +47 -0
  61. package/dist/policy-packs/builtin/branch-protection-runtime.js +92 -0
  62. package/dist/policy-packs/builtin/branch-protection-runtime.js.map +1 -0
  63. package/dist/policy-packs/builtin/branch-protection.d.ts +9 -0
  64. package/dist/policy-packs/builtin/branch-protection.js +146 -0
  65. package/dist/policy-packs/builtin/branch-protection.js.map +1 -0
  66. package/dist/policy-packs/registry.d.ts +1 -1
  67. package/dist/policy-packs/registry.js +10 -3
  68. package/dist/policy-packs/registry.js.map +1 -1
  69. package/dist/runtime/expand-home.d.ts +14 -0
  70. package/dist/runtime/expand-home.js +54 -0
  71. package/dist/runtime/expand-home.js.map +1 -0
  72. package/dist/runtime/intercept.js +13 -2
  73. package/dist/runtime/intercept.js.map +1 -1
  74. package/dist/runtime/ledger-add.js +10 -3
  75. package/dist/runtime/ledger-add.js.map +1 -1
  76. package/dist/runtime/ledger-record.js +11 -10
  77. package/dist/runtime/ledger-record.js.map +1 -1
  78. package/dist/schema/index.d.ts +281 -101
  79. package/dist/schema/permission-profiles.d.ts +125 -125
  80. package/dist/schema/policies.d.ts +261 -0
  81. package/dist/schema/policies.js +50 -0
  82. package/dist/schema/policies.js.map +1 -1
  83. package/package.json +2 -1
@@ -21,9 +21,13 @@
21
21
  // secondary safety net for solo users, and `harness explain --trace`
22
22
  // (Phase 4 #6) surfaces the runtime audit trail when configured.
23
23
  import { queryLedgerByTag, } from "../../policies/index.js";
24
+ import { renderProducers } from "../../policies/producers.js";
24
25
  import { checkApprovalMarker, checkPersistedReport, defaultReportsDir, matchLedgerEntries, } from "../../policy-packs/builtin/understanding-before-execution-runtime.js";
25
26
  import { resolveGeneratedDir, writePendingApproval, } from "../../runtime/pending-approval.js";
27
+ import { ProducerSchema, } from "../../schema/index.js";
28
+ import { z } from "zod";
26
29
  import { loadManifest } from "../loader.js";
30
+ import { renderReportSchemaHint } from "./understanding-report-schema-hint.js";
27
31
  const PACK_NAME = "understanding-before-execution";
28
32
  async function readStdin(stream) {
29
33
  return new Promise((resolve, reject) => {
@@ -46,8 +50,42 @@ function findGroundingMcp(manifest) {
46
50
  // PreToolUse (the pack contributes only a PreToolUse hook), so the
47
51
  // envelope is unconditional here — no event-kind branch like
48
52
  // runtime/intercept.ts needs.
49
- function blockJson(toolName, reason) {
50
- const reasonText = `Understanding Gate: ${reason}. Tool: ${toolName}. Run \`harness approve understanding\` once you have produced and confirmed an Understanding Report.`;
53
+ // Producers list from the pack's config (agent-tasks/25bced52). Same
54
+ // shape as the policy engine's `producers:` field, surfaced through the
55
+ // understanding-gate's separate deny path. The constraint differs from
56
+ // the policy engine: here we require at-least-one `ask` (the canonical
57
+ // unblock surface) rather than at-least-one `mcp`, because post-v0.14.0
58
+ // the gate signal is a filesystem marker and the mcp ledger_add path no
59
+ // longer satisfies the gate. Only the operator-approval (`ask`) or a
60
+ // shell from an un-hooked terminal can write the marker.
61
+ const ProducersConfigSchema = z
62
+ .array(ProducerSchema)
63
+ .min(1)
64
+ .refine((arr) => arr.some((p) => p.kind === "ask"), "understanding-gate config.producers must include at least one kind:ask entry (the canonical unblock surface)");
65
+ function parseConfigProducers(raw, stderr) {
66
+ if (raw === undefined)
67
+ return undefined;
68
+ const result = ProducersConfigSchema.safeParse(raw);
69
+ if (!result.success) {
70
+ stderr.write(`harness pack hook: config.producers ignored (${result.error.issues
71
+ .map((i) => `${i.path.join(".") || "<root>"}: ${i.message}`)
72
+ .join("; ")})\n`);
73
+ return undefined;
74
+ }
75
+ return result.data;
76
+ }
77
+ function blockJson(toolName, reason, producers, sessionId) {
78
+ // Legacy suffix kept unchanged so existing operators / docs that quote
79
+ // the old surface still find the recognizable string. The producers
80
+ // block (when configured) appends AFTER, so a reader's eye lands on
81
+ // the structured recipe last. The schema-hint paragraph sits between
82
+ // them: the agent reads the call-to-action first, then learns what
83
+ // shape the report needs to take (without this, freeform prose
84
+ // satisfies the marker write but silently fails the parser).
85
+ const suffix = `Run \`harness approve understanding\` once you have produced and confirmed an Understanding Report.`;
86
+ const schemaHint = renderReportSchemaHint();
87
+ const producersBlock = renderProducers(producers, { SESSION_ID: sessionId });
88
+ const reasonText = `Understanding Gate: ${reason}. Tool: ${toolName}. ${suffix}\n${schemaHint}${producersBlock}`;
51
89
  return JSON.stringify({
52
90
  decision: "block",
53
91
  reason: reasonText,
@@ -290,7 +328,8 @@ export async function runPackHookPreToolUseCli(opts = {}) {
290
328
  }
291
329
  const diagnostic = `harness pack hook: BLOCK — ${reason}`;
292
330
  stderr.write(`${diagnostic}\n`);
293
- stdout.write(`${blockJson(toolName, "no approved Understanding Report for this session")}\n`);
331
+ const configProducers = parseConfigProducers(declared.config["producers"], stderr);
332
+ stdout.write(`${blockJson(toolName, "no approved Understanding Report for this session", configProducers, sessionId)}\n`);
294
333
  return {
295
334
  exitCode: 0,
296
335
  blocked: true,
@@ -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":"AAAA,8EAA8E;AAC9E,EAAE;AACF,yDAAyD;AACzD,wEAAwE;AACxE,qEAAqE;AACrE,kEAAkE;AAClE,yEAAyE;AACzE,2CAA2C;AAC3C,EAAE;AACF,kEAAkE;AAClE,sEAAsE;AACtE,oEAAoE;AACpE,sEAAsE;AACtE,sEAAsE;AACtE,sEAAsE;AACtE,EAAE;AACF,iEAAiE;AACjE,wEAAwE;AACxE,qEAAqE;AACrE,oEAAoE;AACpE,qEAAqE;AACrE,iEAAiE;AAEjE,OAAO,EACL,gBAAgB,GAEjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,GAEnB,MAAM,sEAAsE,CAAC;AAC9E,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,cAAc,GAIf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAsB,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,MAAM,SAAS,GAAG,gCAAgC,CAAC;AA4CnD,KAAK,UAAU,SAAS,CAAC,MAA6B;IACpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YAClC,IAAI,IAAI,KAAK,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,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,qEAAqE;AACrE,wEAAwE;AACxE,qEAAqE;AACrE,wEAAwE;AACxE,mEAAmE;AACnE,6DAA6D;AAC7D,8BAA8B;AAC9B,qEAAqE;AACrE,wEAAwE;AACxE,uEAAuE;AACvE,uEAAuE;AACvE,wEAAwE;AACxE,wEAAwE;AACxE,qEAAqE;AACrE,yDAAyD;AACzD,MAAM,qBAAqB,GAAG,CAAC;KAC5B,KAAK,CAAC,cAAc,CAAC;KACrB,GAAG,CAAC,CAAC,CAAC;KACN,MAAM,CACL,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,EAC1C,8GAA8G,CAC/G,CAAC;AAEJ,SAAS,oBAAoB,CAC3B,GAAY,EACZ,MAA6B;IAE7B,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,CAAC,KAAK,CACV,gDAAgD,MAAM,CAAC,KAAK,CAAC,MAAM;aAChE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aAC3D,IAAI,CAAC,IAAI,CAAC,KAAK,CACnB,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,SAAS,SAAS,CAChB,QAAgB,EAChB,MAAc,EACd,SAAiC,EACjC,SAAiB;IAEjB,uEAAuE;IACvE,oEAAoE;IACpE,oEAAoE;IACpE,qEAAqE;IACrE,mEAAmE;IACnE,+DAA+D;IAC/D,6DAA6D;IAC7D,MAAM,MAAM,GAAG,qGAAqG,CAAC;IACrH,MAAM,UAAU,GAAG,sBAAsB,EAAE,CAAC;IAC5C,MAAM,cAAc,GAAG,eAAe,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7E,MAAM,UAAU,GAAG,uBAAuB,MAAM,WAAW,QAAQ,KAAK,MAAM,KAAK,UAAU,GAAG,cAAc,EAAE,CAAC;IACjH,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,QAAQ,EAAE,OAAO;QACjB,MAAM,EAAE,UAAU;QAClB,kBAAkB,EAAE;YAClB,aAAa,EAAE,YAAY;YAC3B,kBAAkB,EAAE,MAAM;YAC1B,wBAAwB,EAAE,UAAU;SACrC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACtC,yEAAyE;IACzE,uEAAuE;IACvE,0EAA0E;IAC1E,wEAAwE;IACxE,0EAA0E;IAC1E,2EAA2E;IAC3E,4BAA4B;IAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAClE,OAAO,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,4EAA4E;AAC5E,2EAA2E;AAC3E,2EAA2E;AAC3E,wEAAwE;AACxE,kBAAkB;AAClB,SAAS,OAAO;IACd,MAAM,MAAM,GACV,sEAAsE;QACtE,uEAAuE;QACvE,2BAA2B,CAAC;IAC9B,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,kBAAkB,EAAE;YAClB,aAAa,EAAE,YAAY;YAC3B,kBAAkB,EAAE,KAAK;YACzB,wBAAwB,EAAE,MAAM;SACjC;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,QAAkB,EAClB,SAAiB,EACjB,IAA+B;IAE/B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;YACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC;QAC5E,CAAC;QACD,OAAO,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,wCAAwC,EAAE,CAAC;IAC9E,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QAC3C,CAAC,CAAC,MAAM,CAAC,OAAO;QAChB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,IAAI,KAAK,CAAC;IAC7E,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;QACpC,UAAU,EAAE,OAAO;QACnB,GAAG,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAC3B,SAAS;QACT,SAAS;KACV,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IAC1E,CAAC;IACD,OAAO,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAkC,EAAE;IAEpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC;IAExC,mEAAmE;IACnE,oCAAoC;IACpC,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,KAAK,GAAkB,EAAE,CAAC;IAC9B,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,CAAkB,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;IAED,MAAM,SAAS,GACb,CAAC,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7B,EAAE,CAAC;IACL,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;IACrF,MAAM,UAAU,GACd,KAAK,CAAC,UAAU,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QACtD,CAAC,CAAE,KAAK,CAAC,UAAoC,CAAC,OAAO;QACrD,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,UAAU,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpE,sEAAsE;IACtE,iEAAiE;IACjE,uEAAuE;IACvE,qEAAqE;IACrE,kDAAkD;IAClD,IAAI,QAAkB,CAAC;IACvB,IAAI,YAAgC,CAAC;IACrC,IAAI,CAAC;QACH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAClC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YAC3B,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtC,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,UAAU,GAAG,4CAChB,GAAa,CAAC,OACjB,cAAc,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;QAChC,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE;YACrE,UAAU;SACX,CAAC;IACJ,CAAC;IAED,sEAAsE;IACtE,4DAA4D;IAC5D,mEAAmE;IACnE,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACxE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,UAAU,GAAG,4BAA4B,QAAQ,uCAAuC,CAAC;QAC/F,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;QAChC,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE;YACrE,UAAU;SACX,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,4BAA4B,QAAQ,+BAA+B,CAAC;QACvF,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;QAChC,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE;YACrE,UAAU;SACX,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACrB,MAAM,UAAU,GACd,yFAAyF,CAAC;QAC5F,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;QAChC,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE;YACrE,UAAU;SACX,CAAC;IACJ,CAAC;IAED,mEAAmE;IACnE,6BAA6B;IAC7B,MAAM,YAAY,GAChB,IAAI,CAAC,YAAY;QACjB,CAAC,YAAY,KAAK,SAAS;YACzB,CAAC,CAAC,mBAAmB,CAAC;gBAClB,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,YAAY;aACb,CAAC;YACJ,CAAC,CAAC,SAAS,CAAC,CAAC;IAEjB,oEAAoE;IACpE,kEAAkE;IAClE,iEAAiE;IACjE,kEAAkE;IAClE,mEAAmE;IACnE,mEAAmE;IACnE,4DAA4D;IAC5D,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,mBAAmB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,UAAU,GAAG,sBAAsB,MAAM,CAAC,MAAM,aAAa,CAAC;YACpE,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;YAChC,OAAO;gBACL,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,KAAK;gBACd,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;gBAC1E,UAAU;aACX,CAAC;QACJ,CAAC;IACH,CAAC;IAED,kEAAkE;IAClE,kEAAkE;IAClE,kEAAkE;IAClE,6DAA6D;IAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,iBAAiB,EAAE,CAAC;IAC1D,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,sBAAsB,MAAM,CAAC,MAAM,aAAa,CAAC;QACpE,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;QAChC,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YACpF,UAAU;SACX,CAAC;IACJ,CAAC;IAED,+DAA+D;IAC/D,kEAAkE;IAClE,oEAAoE;IACpE,kEAAkE;IAClE,wBAAwB;IACxB,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAE5D,oCAAoC;IACpC,MAAM,MAAM,GAAG,YAAY,KAAK,SAAS;QACvC,CAAC,CAAC,kCAAkC,SAAS,KAAK,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;QACnF,CAAC,CAAC,sDAAsD,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;IAE5F,qEAAqE;IACrE,kEAAkE;IAClE,kEAAkE;IAClE,sEAAsE;IACtE,2CAA2C;IAC3C,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,oBAAoB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,4DAA4D;QAC9D,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,wEAAwE;IACxE,uEAAuE;IACvE,yEAAyE;IACzE,qEAAqE;IACrE,uEAAuE;IACvE,IAAI,QAAQ,KAAK,MAAM,IAAI,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;QACvD,MAAM,UAAU,GAAG,mGAAmG,CAAC;QACvH,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/B,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,IAAI;YACX,aAAa,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;YAClE,UAAU;SACX,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,8BAA8B,MAAM,EAAE,CAAC;IAC1D,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;IAChC,MAAM,eAAe,GAAG,oBAAoB,CACzC,QAAQ,CAAC,MAAkC,CAAC,WAAW,CAAC,EACzD,MAAM,CACP,CAAC;IACF,MAAM,CAAC,KAAK,CACV,GAAG,SAAS,CAAC,QAAQ,EAAE,mDAAmD,EAAE,eAAe,EAAE,SAAS,CAAC,IAAI,CAC5G,CAAC;IACF,OAAO;QACL,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,IAAI;QACb,aAAa,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;QAClE,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ export declare const UNDERSTANDING_REPORT_REQUIRED_SECTIONS: readonly ["Current Understanding (paragraph)", "Intended Outcome (paragraph)", "Derived Todos (list)", "Acceptance Criteria (list)", "Assumptions (list)", "Open Questions (list)", "Out Of Scope (list)", "Risks (list)", "Verification Plan (list)"];
2
+ /**
3
+ * Render a compact, agent-readable hint listing the canonical sections
4
+ * the `@lannguyensi/understanding-gate` parser expects. Suitable for
5
+ * inlining in a `permissionDecisionReason` string (claude-code) or a
6
+ * stderr diagnostic (codex).
7
+ *
8
+ * Format chosen for legibility in both a JSON-stringified block envelope
9
+ * and a plain stderr write: single newline-separated lines, "- " bullets,
10
+ * no surrounding code-fence (Claude Code wraps the reason in its own
11
+ * formatter, and stderr is read as-is by the operator).
12
+ */
13
+ export declare function renderReportSchemaHint(): string;
@@ -0,0 +1,54 @@
1
+ // Single source of truth (within harness) for the Understanding-Report
2
+ // schema hint that the PreToolUse gate emits when blocking a tool call.
3
+ //
4
+ // The canonical parser lives in `@lannguyensi/understanding-gate`
5
+ // (its `core/parser.js` SECTIONS array). Harness inlines the section
6
+ // names here so the gate's block message tells the agent exactly what
7
+ // to produce — without this, a freeform prose report parses to "Missing
8
+ // required sections" and the audit trail is silently empty even though
9
+ // the gate-approval marker still gets written.
10
+ //
11
+ // Drift risk: if the standalone parser adds, renames, or reorders
12
+ // sections, this constant goes out of sync. Mitigation:
13
+ // 1. Keep the comment + linked file path at the top, so a reviewer
14
+ // who touches the standalone parser notices the harness mirror.
15
+ // 2. The standalone Stop hook still logs the actual reject-list to
16
+ // `.understanding-gate/parse-errors/`, so a stale harness hint
17
+ // gracefully degrades to "your report has the wrong sections —
18
+ // here is what the parser wanted" rather than silent failure.
19
+ export const UNDERSTANDING_REPORT_REQUIRED_SECTIONS = [
20
+ "Current Understanding (paragraph)",
21
+ "Intended Outcome (paragraph)",
22
+ "Derived Todos (list)",
23
+ "Acceptance Criteria (list)",
24
+ "Assumptions (list)",
25
+ "Open Questions (list)",
26
+ "Out Of Scope (list)",
27
+ "Risks (list)",
28
+ "Verification Plan (list)",
29
+ ];
30
+ /**
31
+ * Render a compact, agent-readable hint listing the canonical sections
32
+ * the `@lannguyensi/understanding-gate` parser expects. Suitable for
33
+ * inlining in a `permissionDecisionReason` string (claude-code) or a
34
+ * stderr diagnostic (codex).
35
+ *
36
+ * Format chosen for legibility in both a JSON-stringified block envelope
37
+ * and a plain stderr write: single newline-separated lines, "- " bullets,
38
+ * no surrounding code-fence (Claude Code wraps the reason in its own
39
+ * formatter, and stderr is read as-is by the operator).
40
+ */
41
+ export function renderReportSchemaHint() {
42
+ // Note on the intro wording: the previous iteration included an "e.g."
43
+ // alias example ("Current Understanding" or "My Current Understanding")
44
+ // that suggested those two were the canonical pair. The parser
45
+ // actually accepts more aliases (e.g. `derivedTodos` ⇄ "todos", "derived
46
+ // todos / specs"; `verificationPlan` ⇄ "verification"), and listing
47
+ // one pair implied exhaustiveness. The bullets below show the canonical
48
+ // names; the parser's alias-tolerance is a quiet bonus, not something
49
+ // the agent needs to choose between.
50
+ const intro = "Report format (parsed by `@lannguyensi/understanding-gate`): markdown with these nine sections, any heading level (#, ##, ###), names case-insensitive. Missing any section produces a parse-error under `.understanding-gate/parse-errors/` and the audit trail is empty even though the gate-approval marker still gets written.";
51
+ const bullets = UNDERSTANDING_REPORT_REQUIRED_SECTIONS.map((s) => ` - ${s}`).join("\n");
52
+ return `${intro}\n${bullets}`;
53
+ }
54
+ //# sourceMappingURL=understanding-report-schema-hint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"understanding-report-schema-hint.js","sourceRoot":"","sources":["../../../src/cli/pack/understanding-report-schema-hint.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,wEAAwE;AACxE,EAAE;AACF,kEAAkE;AAClE,qEAAqE;AACrE,sEAAsE;AACtE,wEAAwE;AACxE,uEAAuE;AACvE,+CAA+C;AAC/C,EAAE;AACF,kEAAkE;AAClE,wDAAwD;AACxD,qEAAqE;AACrE,qEAAqE;AACrE,qEAAqE;AACrE,oEAAoE;AACpE,oEAAoE;AACpE,mEAAmE;AAEnE,MAAM,CAAC,MAAM,sCAAsC,GAAG;IACpD,mCAAmC;IACnC,8BAA8B;IAC9B,sBAAsB;IACtB,4BAA4B;IAC5B,oBAAoB;IACpB,uBAAuB;IACvB,qBAAqB;IACrB,cAAc;IACd,0BAA0B;CAClB,CAAC;AAEX;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB;IACpC,uEAAuE;IACvE,wEAAwE;IACxE,+DAA+D;IAC/D,yEAAyE;IACzE,oEAAoE;IACpE,wEAAwE;IACxE,sEAAsE;IACtE,qCAAqC;IACrC,MAAM,KAAK,GACT,oUAAoU,CAAC;IACvU,MAAM,OAAO,GAAG,sCAAsC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzF,OAAO,GAAG,KAAK,KAAK,OAAO,EAAE,CAAC;AAChC,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { type ResolveReadSessionOptions } from "../../runtime/session-id.js";
2
+ import type { Manifest } from "../../schema/index.js";
3
+ import { type LoaderOptions } from "../loader.js";
4
+ export interface SessionStartBranchCheckOptions extends LoaderOptions {
5
+ /** Defaults to process.stdin. */
6
+ stdin?: NodeJS.ReadableStream;
7
+ /** Defaults to process.stderr. stdout is never written (SessionStart). */
8
+ stderr?: NodeJS.WritableStream;
9
+ /** Explicit session id (overrides every other source). */
10
+ session?: string;
11
+ /** Override the cwd resolution (test injection). Falls back to event.cwd then process.cwd(). */
12
+ cwd?: string;
13
+ /** Per-call ledger timeout in ms. */
14
+ ledgerTimeoutMs?: number;
15
+ /** Inject the ledger writer (tests). */
16
+ writeLedger?: (args: {
17
+ sessionId: string;
18
+ content: string;
19
+ source: string;
20
+ }) => Promise<{
21
+ ok: boolean;
22
+ reason?: string;
23
+ }>;
24
+ /** Inject the read-path session resolver (env + transcript discovery). Test seam. */
25
+ resolveSession?: (explicit: string | undefined, opts: ResolveReadSessionOptions) => string;
26
+ /** Inject a manifest (tests). Bypasses loadManifest. */
27
+ manifest?: Manifest;
28
+ }
29
+ export interface SessionStartBranchCheckResult {
30
+ /** Always 0 — SessionStart hooks must never break the session loop. */
31
+ exitCode: number;
32
+ /** Whether the `branch:non-protected` ledger fact was written. */
33
+ wrote: boolean;
34
+ /** Resolved branch name ("" when detached or outside a repo). */
35
+ branch: string;
36
+ /** True when the resolved branch matched the protected list. */
37
+ protected: boolean;
38
+ /** Resolved session id. */
39
+ sessionId: string;
40
+ sessionSource: "flag" | "stdin" | "env" | "transcript" | "default";
41
+ /** Human-readable explanation of a non-write outcome (when applicable). */
42
+ reason?: string;
43
+ }
44
+ export declare function runSessionStartBranchCheck(opts?: SessionStartBranchCheckOptions): Promise<SessionStartBranchCheckResult>;
@@ -0,0 +1,165 @@
1
+ // `harness session-start branch-check` — SessionStart hook entrypoint
2
+ // for the `branch-protection` policy pack.
3
+ //
4
+ // Reads `.git/HEAD` for the cwd and, when the current branch is NOT in
5
+ // the operator's protected list, writes a `branch:non-protected:<branch>`
6
+ // fact to the evidence ledger so the pack's PreToolUse blocker has a
7
+ // fresh tag to satisfy its 5-minute freshness window.
8
+ //
9
+ // SessionStart contract: `blocking:false`. Every failure path (no git
10
+ // dir, manifest load fails, no grounding-mcp wired, ledger write
11
+ // fails) logs one line to stderr and exits 0. The only observable
12
+ // effect of a failure is that the blocker stays closed, which is the
13
+ // safe default: a session that can't prove it's NOT on a protected
14
+ // branch is treated as if it might be.
15
+ //
16
+ // Detached HEAD (`branch === ""`) is treated as PROTECTED: we can't
17
+ // audit-by-name what the agent might commit. The producer leaves the
18
+ // tag unwritten and stderr-notes the reason.
19
+ //
20
+ // Re-runnable on demand from the operator's `!` shell with no event
21
+ // JSON piped on stdin — same CLI verb, no SessionStart event needed.
22
+ import { addLedgerFact, resolveGitContext, } from "../../runtime/index.js";
23
+ import { resolveReadSessionId, } from "../../runtime/session-id.js";
24
+ import { DEFAULT_PROTECTED_BRANCHES, isProtectedBranch, NON_PROTECTED_TAG_PREFIX, PACK_NAME, resolveProtectedBranches, } from "../../policy-packs/builtin/branch-protection-runtime.js";
25
+ import { loadManifest } from "../loader.js";
26
+ const FALLBACK_SESSION = "default";
27
+ const LEDGER_SOURCE = "harness-session-start-branch-check";
28
+ async function readStdin(stream) {
29
+ return new Promise((resolve, reject) => {
30
+ let data = "";
31
+ stream.setEncoding("utf8");
32
+ stream.on("data", (chunk) => {
33
+ data += chunk;
34
+ });
35
+ stream.on("end", () => resolve(data));
36
+ stream.on("error", reject);
37
+ });
38
+ }
39
+ function findGroundingMcp(manifest) {
40
+ return manifest.tools.mcp.find((m) => m.name === "grounding-mcp") ?? null;
41
+ }
42
+ function mcpCommandList(server) {
43
+ return Array.isArray(server.command)
44
+ ? server.command
45
+ : server.command.trim().split(/\s+/);
46
+ }
47
+ export async function runSessionStartBranchCheck(opts = {}) {
48
+ const stdin = opts.stdin ?? process.stdin;
49
+ const stderr = opts.stderr ?? process.stderr;
50
+ const note = (msg) => {
51
+ stderr.write(`harness session-start branch-check: ${msg}\n`);
52
+ };
53
+ const done = (wrote, branch, isProtected, sessionId, sessionSource, reason) => ({
54
+ exitCode: 0,
55
+ wrote,
56
+ branch,
57
+ protected: isProtected,
58
+ sessionId,
59
+ sessionSource,
60
+ ...(reason !== undefined && { reason }),
61
+ });
62
+ let event;
63
+ try {
64
+ event = JSON.parse((await readStdin(stdin)).trim() || "{}");
65
+ }
66
+ catch (err) {
67
+ const reason = `malformed event JSON: ${err.message}`;
68
+ note(reason);
69
+ return done(false, "", false, FALLBACK_SESSION, "default", reason);
70
+ }
71
+ const cwd = typeof opts.cwd === "string" && opts.cwd.length > 0
72
+ ? opts.cwd
73
+ : typeof event.cwd === "string" && event.cwd.length > 0
74
+ ? event.cwd
75
+ : process.cwd();
76
+ const { branch } = resolveGitContext(cwd);
77
+ // Load manifest to resolve the pack's protected_branches override.
78
+ // Fallback to defaults on any load failure (the producer's job is
79
+ // best-effort; an unresolvable manifest still permits a sane gate).
80
+ let manifest = null;
81
+ if (opts.manifest) {
82
+ manifest = opts.manifest;
83
+ }
84
+ else {
85
+ try {
86
+ manifest = loadManifest(opts).manifest;
87
+ }
88
+ catch (err) {
89
+ note(`manifest load failed: ${err.message}; falling back to default protected list`);
90
+ }
91
+ }
92
+ const pack = manifest?.policy_packs.find((p) => p.name === PACK_NAME);
93
+ const { branches: protectedList, warning: protectedWarning } = pack
94
+ ? resolveProtectedBranches(pack)
95
+ : { branches: [...DEFAULT_PROTECTED_BRANCHES], warning: null };
96
+ if (protectedWarning)
97
+ note(protectedWarning);
98
+ // Resolve session id with the same precedence chain as
99
+ // session-start/preflight so the two producers stay symmetric.
100
+ const explicit = typeof opts.session === "string" && opts.session.length > 0
101
+ ? opts.session
102
+ : typeof event.session_id === "string" && event.session_id.length > 0
103
+ ? event.session_id
104
+ : undefined;
105
+ const resolveSession = opts.resolveSession ?? resolveReadSessionId;
106
+ const sessionId = resolveSession(explicit, {});
107
+ const sessionSource = typeof opts.session === "string" && opts.session.length > 0
108
+ ? "flag"
109
+ : typeof event.session_id === "string" && event.session_id.length > 0
110
+ ? "stdin"
111
+ : sessionId === FALLBACK_SESSION
112
+ ? "default"
113
+ : typeof process.env.CLAUDE_SESSION_ID === "string" &&
114
+ process.env.CLAUDE_SESSION_ID === sessionId
115
+ ? "env"
116
+ : "transcript";
117
+ if (branch === "") {
118
+ const reason = `cwd is not on a named branch (detached HEAD or outside a git work tree); leaving the gate closed (treated as protected)`;
119
+ note(reason);
120
+ return done(false, "", true, sessionId, sessionSource, reason);
121
+ }
122
+ const isProtected = isProtectedBranch(branch, protectedList);
123
+ if (isProtected) {
124
+ const reason = `branch "${branch}" is in the protected list (${protectedList.join(", ")}); leaving the gate closed`;
125
+ note(reason);
126
+ return done(false, branch, true, sessionId, sessionSource, reason);
127
+ }
128
+ // Branch is non-protected: write the tag.
129
+ const content = `${NON_PROTECTED_TAG_PREFIX}:${branch}`;
130
+ let writeLedger = opts.writeLedger;
131
+ if (!writeLedger) {
132
+ if (!manifest) {
133
+ const reason = `manifest unavailable; cannot record ${content}`;
134
+ note(reason);
135
+ return done(false, branch, false, sessionId, sessionSource, reason);
136
+ }
137
+ const server = findGroundingMcp(manifest);
138
+ if (!server) {
139
+ const reason = `grounding-mcp not declared in manifest; cannot record ${content}`;
140
+ note(reason);
141
+ return done(false, branch, false, sessionId, sessionSource, reason);
142
+ }
143
+ const command = mcpCommandList(server);
144
+ const env = server.env ?? undefined;
145
+ const timeoutMs = opts.ledgerTimeoutMs ?? server.health?.timeout_ms ?? 5_000;
146
+ writeLedger = (args) => addLedgerFact({
147
+ mcpCommand: command,
148
+ ...(env && { mcpEnv: env }),
149
+ timeoutMs,
150
+ ...args,
151
+ });
152
+ }
153
+ const result = await writeLedger({ sessionId, content, source: LEDGER_SOURCE });
154
+ if (!result.ok) {
155
+ const reason = `ledger write failed: ${result.reason ?? "unknown error"}`;
156
+ note(reason);
157
+ return done(false, branch, false, sessionId, sessionSource, reason);
158
+ }
159
+ note(`recorded ${content} for session ${sessionId}`);
160
+ if (sessionSource === "default") {
161
+ note("WARNING: session resolved to the literal \"default\". The blocker queries the real Claude Code session id and will NOT see this tag. Pipe SessionStart event JSON on stdin, export $CLAUDE_SESSION_ID, or pass --session <id>.");
162
+ }
163
+ return done(true, branch, false, sessionId, sessionSource);
164
+ }
165
+ //# sourceMappingURL=branch-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-check.js","sourceRoot":"","sources":["../../../src/cli/session-start/branch-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ export declare class UninstallError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ export interface UninstallOptions {
5
+ /** Override for `~/.claude/`. Falls back to `os.homedir()/.claude`. */
6
+ homeDir?: string;
7
+ /** Override settings.json path (test injection / non-default install). */
8
+ settingsPath?: string;
9
+ /** Mutate when true; pure listing otherwise. */
10
+ apply?: boolean;
11
+ /**
12
+ * Atomic restore from a specific backup (typically a
13
+ * `settings.json.pre-harness-<TS>` file). Implies `apply`; mutually
14
+ * exclusive with the standard selective-removal flow.
15
+ */
16
+ restoreFrom?: string;
17
+ /** Override "now" for deterministic timestamps in tests. */
18
+ now?: Date;
19
+ }
20
+ export interface HookGroupRef {
21
+ event: string;
22
+ index: number;
23
+ matcher: string | null;
24
+ /** Short summary of the inner `hooks[].command` list for the listing UI. */
25
+ description: string;
26
+ }
27
+ export interface UninstallInventory {
28
+ /** Resolved `~/.claude/` (or override). */
29
+ homeDir: string;
30
+ /** Resolved settings.json path (or override). */
31
+ settingsPath: string;
32
+ /** `~/.claude/harness.yaml` when present, else null. */
33
+ manifestPath: string | null;
34
+ /** `~/.claude/harness.lock` when present, else null. */
35
+ lockPath: string | null;
36
+ /** `~/.claude/harness.generated/` when present, else null. */
37
+ generatedDir: string | null;
38
+ /** Harness-owned hook groups currently in settings.json. */
39
+ hookGroups: HookGroupRef[];
40
+ /** Harness-owned mcpServers keys currently in settings.json. */
41
+ mcpServers: string[];
42
+ /** Discovered `settings.json.pre-harness-*` backups in the settings directory. */
43
+ preHarnessBackups: string[];
44
+ /** Soft notices (e.g. project-local `~/.claude.json` registers grounding-mcp). */
45
+ warnings: string[];
46
+ }
47
+ export type UninstallResult = {
48
+ mode: "list";
49
+ inventory: UninstallInventory;
50
+ } | {
51
+ mode: "apply";
52
+ inventory: UninstallInventory;
53
+ /** Backup path (null when settings.json had nothing to remove). */
54
+ backupPath: string | null;
55
+ /** Snapshot path (null when no settings.json mutation was needed). */
56
+ snapshotPath: string | null;
57
+ /** Filesystem entries removed from disk (manifest, lock, generated dir). */
58
+ removedFiles: string[];
59
+ } | {
60
+ mode: "restore";
61
+ inventory: UninstallInventory;
62
+ restoredFrom: string;
63
+ backupPath: string;
64
+ snapshotPath: string;
65
+ /** Filesystem entries removed from disk (manifest, lock, generated dir). */
66
+ removedFiles: string[];
67
+ };
68
+ export declare function uninstall(opts?: UninstallOptions): UninstallResult;