@lannguyensi/harness 0.46.0 → 0.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +176 -0
- package/README.md +14 -4
- package/dist/cli/apply/apply.js +12 -1
- package/dist/cli/apply/apply.js.map +1 -1
- package/dist/cli/doctor/format.js +29 -0
- package/dist/cli/doctor/format.js.map +1 -1
- package/dist/cli/doctor/index.d.ts +10 -0
- package/dist/cli/doctor/index.js +95 -1
- package/dist/cli/doctor/index.js.map +1 -1
- package/dist/cli/doctor/types.d.ts +60 -3
- package/dist/cli/init/composer.js +16 -0
- package/dist/cli/init/composer.js.map +1 -1
- package/dist/cli/pack/hook-bootstrap.js +6 -1
- package/dist/cli/pack/hook-bootstrap.js.map +1 -1
- package/dist/cli/pack/hook-codex-stop.d.ts +4 -0
- package/dist/cli/pack/hook-codex-stop.js +15 -1
- package/dist/cli/pack/hook-codex-stop.js.map +1 -1
- package/dist/cli/pack/hook-codex-user-prompt-submit.d.ts +38 -0
- package/dist/cli/pack/hook-codex-user-prompt-submit.js +127 -8
- package/dist/cli/pack/hook-codex-user-prompt-submit.js.map +1 -1
- package/dist/cli/pack/hook-solution-acceptance.js +7 -3
- package/dist/cli/pack/hook-solution-acceptance.js.map +1 -1
- package/dist/io/generated-dir.d.ts +15 -0
- package/dist/io/generated-dir.js +21 -3
- package/dist/io/generated-dir.js.map +1 -1
- package/dist/io/safe-json-parse.d.ts +5 -0
- package/dist/io/safe-json-parse.js +21 -0
- package/dist/io/safe-json-parse.js.map +1 -0
- package/dist/policy-packs/builtin/understanding-before-execution/markers.js +1 -1
- package/dist/policy-packs/builtin/understanding-before-execution/markers.js.map +1 -1
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.d.ts +0 -1
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js +7 -11
- package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js.map +1 -1
- package/dist/policy-packs/builtin/understanding-before-execution.d.ts +13 -0
- package/dist/policy-packs/builtin/understanding-before-execution.js +28 -2
- package/dist/policy-packs/builtin/understanding-before-execution.js.map +1 -1
- package/dist/runtime/command-normalize.d.ts +29 -0
- package/dist/runtime/command-normalize.js +35 -0
- package/dist/runtime/command-normalize.js.map +1 -1
- package/dist/runtime/read-only-bash.js +214 -14
- package/dist/runtime/read-only-bash.js.map +1 -1
- package/package.json +2 -2
|
@@ -7,6 +7,12 @@ export interface PackHookCodexUserPromptSubmitOptions extends LoaderOptions {
|
|
|
7
7
|
stdout?: NodeJS.WritableStream;
|
|
8
8
|
stderr?: NodeJS.WritableStream;
|
|
9
9
|
manifest?: Manifest;
|
|
10
|
+
/** Test-injected generatedDir for the pause-sentinel check; bypasses
|
|
11
|
+
* path resolution when supplied (mirrors `hook-pre-tool-use.ts`). */
|
|
12
|
+
generatedDir?: string;
|
|
13
|
+
/** Override "now" for deterministic pause-expiry tests. Forwarded to
|
|
14
|
+
* `checkHookPause` / `checkPauseFromLoader`. */
|
|
15
|
+
now?: Date;
|
|
10
16
|
}
|
|
11
17
|
export interface PackHookCodexUserPromptSubmitResult {
|
|
12
18
|
exitCode: number;
|
|
@@ -15,4 +21,36 @@ export interface PackHookCodexUserPromptSubmitResult {
|
|
|
15
21
|
text: string;
|
|
16
22
|
}
|
|
17
23
|
export declare function buildInstructionBlock(mode: Mode): string;
|
|
24
|
+
/**
|
|
25
|
+
* True when the UserPromptSubmit envelope should trigger injection.
|
|
26
|
+
*
|
|
27
|
+
* FAIL-OPEN TO INJECT: this only returns `false` (suppress) when at
|
|
28
|
+
* least one recognized prompt-carrying field (see
|
|
29
|
+
* `REAL_PROMPT_FIELD_ALIASES`) is POSITIVELY present on the parsed
|
|
30
|
+
* envelope with a string value, and every string-valued alias present
|
|
31
|
+
* is empty or whitespace-only, a real signal that the sender
|
|
32
|
+
* explicitly marked this turn as carrying no operator text. The
|
|
33
|
+
* decision considers every alias present, not just the first match in
|
|
34
|
+
* list order: a single non-empty string alias anywhere in the envelope
|
|
35
|
+
* (for example `{"prompt":"","text":"real operator text"}`) is real
|
|
36
|
+
* user input and must inject, even when an earlier-listed alias on the
|
|
37
|
+
* same envelope is empty. Everything else defaults to `true` (inject,
|
|
38
|
+
* i.e. the pre-task-63fefe3a behavior):
|
|
39
|
+
*
|
|
40
|
+
* - unparsable / non-JSON stdin,
|
|
41
|
+
* - a parsed value that is not an object,
|
|
42
|
+
* - an object that carries none of the known aliases as a string
|
|
43
|
+
* value at all (this is the documented `{ session_id?, tool_name?,
|
|
44
|
+
* raw_input?, event? }` shape from the generated config.toml
|
|
45
|
+
* header, no prompt field by design, not evidence of a
|
|
46
|
+
* notification turn, and a non-string alias value is ignored the
|
|
47
|
+
* same way),
|
|
48
|
+
*
|
|
49
|
+
* An envelope harness cannot parse, or cannot recognize, is not
|
|
50
|
+
* evidence that there was no real user input; it is evidence this
|
|
51
|
+
* module's assumption about the wire format was wrong, and the correct
|
|
52
|
+
* failure direction for a governance-adjacent injector is to keep
|
|
53
|
+
* injecting, not to go silently dark.
|
|
54
|
+
*/
|
|
55
|
+
export declare function hasRealUserPrompt(raw: string): boolean;
|
|
18
56
|
export declare function runPackHookCodexUserPromptSubmitCli(opts?: PackHookCodexUserPromptSubmitOptions): Promise<PackHookCodexUserPromptSubmitResult>;
|
|
@@ -8,10 +8,16 @@
|
|
|
8
8
|
// instruction block on stdout that Codex will prepend to its system
|
|
9
9
|
// prompt before the agent runs.
|
|
10
10
|
//
|
|
11
|
-
// Wire format on stdin
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
11
|
+
// Wire format on stdin: UNVERIFIED against a real Codex payload. This
|
|
12
|
+
// module does not trust a single field name; it alias-tolerates any of
|
|
13
|
+
// `REAL_PROMPT_FIELD_ALIASES` below (`prompt`, `text`, `input`,
|
|
14
|
+
// `message`, `user_prompt`, `user_input`) as the carrier of the
|
|
15
|
+
// operator's actual prompt text, the same way the sibling Codex hooks
|
|
16
|
+
// alias-tolerate `tool`/`tool_name` and `raw_input`/`tool_input`. The
|
|
17
|
+
// generated `config.toml` header for other Codex hooks documents the
|
|
18
|
+
// wire shape as `{ session_id?, tool_name?, raw_input?, event? }`, with
|
|
19
|
+
// no prompt field at all, so an envelope carrying none of the known
|
|
20
|
+
// aliases is expected, not an error.
|
|
15
21
|
//
|
|
16
22
|
// stdout: a plain-text instruction block (no JSON wrapper) that Codex
|
|
17
23
|
// concatenates into `additional_instructions`. The block is identical
|
|
@@ -20,8 +26,39 @@
|
|
|
20
26
|
//
|
|
21
27
|
// Failure mode: any error → exit 0, no stdout, diagnostic on stderr.
|
|
22
28
|
// A missing injector text must never fail the agent's prompt path.
|
|
29
|
+
//
|
|
30
|
+
// Two short-circuits happen before any manifest/mode logic runs, both
|
|
31
|
+
// producing the same "no stdout, no injection" outcome:
|
|
32
|
+
//
|
|
33
|
+
// 1. Pause sentinel (task 63fefe3a): honoured the same way every other
|
|
34
|
+
// pack hook honours it (`checkHookPause`, mirrored from
|
|
35
|
+
// `hook-pre-tool-use.ts`), an active, unexpired
|
|
36
|
+
// `harness pause` must silence this injector exactly like it silences
|
|
37
|
+
// the PreToolUse/PostToolUse gates. Checked BEFORE manifest load so a
|
|
38
|
+
// broken install still respects an active pause.
|
|
39
|
+
// 2. No real user input (task 63fefe3a, corrected same task after an
|
|
40
|
+
// advisor review caught the first cut fail-closed): a notification
|
|
41
|
+
// turn, subagent completion, a Monitor event, a background-bash
|
|
42
|
+
// finishing, carries no operator text, and injecting the full
|
|
43
|
+
// instruction block on it is pure noise (and, per the pack's own
|
|
44
|
+
// contract, prompts the agent to write a fresh Understanding Report
|
|
45
|
+
// against nothing). BUT the module's own documented envelope
|
|
46
|
+
// (`{ session_id?, prompt? }` above) is unverified against a real
|
|
47
|
+
// Codex payload: the generated `config.toml` header for every other
|
|
48
|
+
// Codex hook documents the wire shape as `{ session_id?, tool_name?,
|
|
49
|
+
// raw_input?, event? }`, no `prompt` field at all, and the sibling
|
|
50
|
+
// hooks (`hook-codex-pre-tool-use.ts` etc.) never trust a single
|
|
51
|
+
// field name, they alias-tolerate (`tool`/`tool_name`,
|
|
52
|
+
// `raw_input`/`tool_input`) via `pickString`. So this check is
|
|
53
|
+
// FAIL-OPEN-TO-INJECT: it only suppresses when a recognized
|
|
54
|
+
// prompt-carrying field is POSITIVELY present and empty. A missing
|
|
55
|
+
// field, an unrecognized envelope shape, or unparsable stdin is not
|
|
56
|
+
// evidence of "no user input", it is evidence the real Codex wire
|
|
57
|
+
// format is not what this module assumed, and the safe default in
|
|
58
|
+
// that case is the pre-task-63fefe3a behavior: inject. See
|
|
59
|
+
// `hasRealUserPrompt` below.
|
|
23
60
|
import { resolveMode } from "../../policy-packs/builtin/understanding-before-execution.js";
|
|
24
|
-
import { loadManifestOrInjected, readStdin } from "./hook-bootstrap.js";
|
|
61
|
+
import { checkHookPause, loadManifestOrInjected, readStdin } from "./hook-bootstrap.js";
|
|
25
62
|
const PACK_NAME = "understanding-before-execution";
|
|
26
63
|
export function buildInstructionBlock(mode) {
|
|
27
64
|
// Self-contained instruction text. The richer template owned by
|
|
@@ -50,14 +87,96 @@ export function buildInstructionBlock(mode) {
|
|
|
50
87
|
].join("\n");
|
|
51
88
|
return base + "\n";
|
|
52
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Field names that could plausibly carry the operator's actual prompt
|
|
92
|
+
* text on a Codex UserPromptSubmit envelope. `prompt` is this module's
|
|
93
|
+
* own documented guess; the others are tolerated the same way the
|
|
94
|
+
* sibling Codex hooks tolerate `tool`/`tool_name` and
|
|
95
|
+
* `raw_input`/`tool_input`, a real integration may use a different
|
|
96
|
+
* name than the one this package assumed. None of this is confirmed
|
|
97
|
+
* against a real Codex payload (see module header); the alias list only
|
|
98
|
+
* WIDENS which fields can prove a real prompt, it never narrows what
|
|
99
|
+
* counts as "unknown, so inject".
|
|
100
|
+
*/
|
|
101
|
+
const REAL_PROMPT_FIELD_ALIASES = [
|
|
102
|
+
"prompt",
|
|
103
|
+
"text",
|
|
104
|
+
"input",
|
|
105
|
+
"message",
|
|
106
|
+
"user_prompt",
|
|
107
|
+
"user_input",
|
|
108
|
+
];
|
|
109
|
+
/**
|
|
110
|
+
* True when the UserPromptSubmit envelope should trigger injection.
|
|
111
|
+
*
|
|
112
|
+
* FAIL-OPEN TO INJECT: this only returns `false` (suppress) when at
|
|
113
|
+
* least one recognized prompt-carrying field (see
|
|
114
|
+
* `REAL_PROMPT_FIELD_ALIASES`) is POSITIVELY present on the parsed
|
|
115
|
+
* envelope with a string value, and every string-valued alias present
|
|
116
|
+
* is empty or whitespace-only, a real signal that the sender
|
|
117
|
+
* explicitly marked this turn as carrying no operator text. The
|
|
118
|
+
* decision considers every alias present, not just the first match in
|
|
119
|
+
* list order: a single non-empty string alias anywhere in the envelope
|
|
120
|
+
* (for example `{"prompt":"","text":"real operator text"}`) is real
|
|
121
|
+
* user input and must inject, even when an earlier-listed alias on the
|
|
122
|
+
* same envelope is empty. Everything else defaults to `true` (inject,
|
|
123
|
+
* i.e. the pre-task-63fefe3a behavior):
|
|
124
|
+
*
|
|
125
|
+
* - unparsable / non-JSON stdin,
|
|
126
|
+
* - a parsed value that is not an object,
|
|
127
|
+
* - an object that carries none of the known aliases as a string
|
|
128
|
+
* value at all (this is the documented `{ session_id?, tool_name?,
|
|
129
|
+
* raw_input?, event? }` shape from the generated config.toml
|
|
130
|
+
* header, no prompt field by design, not evidence of a
|
|
131
|
+
* notification turn, and a non-string alias value is ignored the
|
|
132
|
+
* same way),
|
|
133
|
+
*
|
|
134
|
+
* An envelope harness cannot parse, or cannot recognize, is not
|
|
135
|
+
* evidence that there was no real user input; it is evidence this
|
|
136
|
+
* module's assumption about the wire format was wrong, and the correct
|
|
137
|
+
* failure direction for a governance-adjacent injector is to keep
|
|
138
|
+
* injecting, not to go silently dark.
|
|
139
|
+
*/
|
|
140
|
+
export function hasRealUserPrompt(raw) {
|
|
141
|
+
let parsed;
|
|
142
|
+
try {
|
|
143
|
+
parsed = JSON.parse(raw);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
if (typeof parsed !== "object" || parsed === null)
|
|
149
|
+
return true;
|
|
150
|
+
const obj = parsed;
|
|
151
|
+
let sawStringAlias = false;
|
|
152
|
+
for (const key of REAL_PROMPT_FIELD_ALIASES) {
|
|
153
|
+
const value = obj[key];
|
|
154
|
+
if (typeof value !== "string")
|
|
155
|
+
continue;
|
|
156
|
+
sawStringAlias = true;
|
|
157
|
+
if (value.trim().length > 0)
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
return !sawStringAlias;
|
|
161
|
+
}
|
|
53
162
|
export async function runPackHookCodexUserPromptSubmitCli(opts = {}) {
|
|
54
163
|
const stdin = opts.stdin ?? process.stdin;
|
|
55
164
|
const stdout = opts.stdout ?? process.stdout;
|
|
56
165
|
const stderr = opts.stderr ?? process.stderr;
|
|
57
166
|
const packName = opts.pack ?? PACK_NAME;
|
|
58
|
-
|
|
59
|
-
//
|
|
60
|
-
|
|
167
|
+
const raw = await readStdin(stdin).catch(() => "");
|
|
168
|
+
// Pause sentinel, operator-only kill switch. Honoured BEFORE manifest
|
|
169
|
+
// load, same ordering as every other pack hook (see module header).
|
|
170
|
+
if (checkHookPause("codex-user-prompt-submit", stderr, opts, opts.generatedDir, opts.now).paused) {
|
|
171
|
+
stderr.write("harness pack hook codex-user-prompt-submit: harness paused, skipping injection.\n");
|
|
172
|
+
return { exitCode: 0, emitted: false, text: "" };
|
|
173
|
+
}
|
|
174
|
+
// No real user input on this turn: nothing to react to, so nothing to
|
|
175
|
+
// inject. See `hasRealUserPrompt` above.
|
|
176
|
+
if (!hasRealUserPrompt(raw)) {
|
|
177
|
+
stderr.write("harness pack hook codex-user-prompt-submit: no real user prompt on this turn, suppressing injection.\n");
|
|
178
|
+
return { exitCode: 0, emitted: false, text: "" };
|
|
179
|
+
}
|
|
61
180
|
let manifest;
|
|
62
181
|
try {
|
|
63
182
|
({ manifest } = loadManifestOrInjected(opts, opts.manifest));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-codex-user-prompt-submit.js","sourceRoot":"","sources":["../../../src/cli/pack/hook-codex-user-prompt-submit.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,EAAE;AACF,qEAAqE;AACrE,2EAA2E;AAC3E,iEAAiE;AACjE,uEAAuE;AACvE,iEAAiE;AACjE,oEAAoE;AACpE,gCAAgC;AAChC,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"hook-codex-user-prompt-submit.js","sourceRoot":"","sources":["../../../src/cli/pack/hook-codex-user-prompt-submit.ts"],"names":[],"mappings":"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"}
|
|
@@ -191,9 +191,13 @@ export async function runPackHookSolutionAcceptanceCli(opts = {}) {
|
|
|
191
191
|
const detail = opts.activeClaim === undefined && generatedDir === undefined
|
|
192
192
|
? " (could not resolve harness.generated/; pass --config)"
|
|
193
193
|
: "";
|
|
194
|
-
const reason = `no verdict id: no active-claim task id recorded${detail} and ${VERDICT_ID_ENV} is unset or invalid
|
|
195
|
-
`
|
|
196
|
-
`
|
|
194
|
+
const reason = `no verdict id: no active-claim task id recorded${detail} and ${VERDICT_ID_ENV} is unset or invalid.\n` +
|
|
195
|
+
`\n` +
|
|
196
|
+
`Converge one of two ways:\n` +
|
|
197
|
+
`\n` +
|
|
198
|
+
`1. Agent-tasks workflow: Call mcp__agent-tasks__task_start first to claim the task (the verdict id is the active task). For post-done work (Release, deploy, etc.), create a separate task and call task_start for it.\n` +
|
|
199
|
+
`\n` +
|
|
200
|
+
`2. Solo / non-agent-tasks session: ${VERDICT_ID_ENV} must be set in the environment at Session-Start time (Operator option; it is read at Hook startup, not agent-sideeffect-settable from within the session).`;
|
|
197
201
|
const diagnostic = `BLOCK — ${reason}`;
|
|
198
202
|
note(diagnostic);
|
|
199
203
|
stdout.write(`${blockJson(actionLabel, toolName, "<no-verdict-id>", reason, configUx, sessionId)}\n`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-solution-acceptance.js","sourceRoot":"","sources":["../../../src/cli/pack/hook-solution-acceptance.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hook-solution-acceptance.js","sourceRoot":"","sources":["../../../src/cli/pack/hook-solution-acceptance.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
export declare const GENERATED_DIRNAME = "harness.generated";
|
|
2
|
+
/**
|
|
3
|
+
* Single normalization point for every `generatedDir` consumer (task
|
|
4
|
+
* 8254e357, follow-up to review round H1-R2 on task 03a917fd). Normalizes
|
|
5
|
+
* EXACTLY ONCE, here, via `expandHome` + `path.resolve`.
|
|
6
|
+
*
|
|
7
|
+
* - Tilde expansion: a leading `~/` or bare `~` in `homeDir` expands
|
|
8
|
+
* against `opts.userHome` (default: the process home, `os.homedir()`
|
|
9
|
+
* via `expandHome`'s own default). `~user/x` and `${HOME}/x` do NOT
|
|
10
|
+
* expand (see `expandHome`'s own doc comment for that scope).
|
|
11
|
+
* - Relative inputs resolve against `process.cwd()` at CALL time.
|
|
12
|
+
* - Idempotent: re-applying this function to its own output returns the
|
|
13
|
+
* same absolute path unchanged.
|
|
14
|
+
*/
|
|
2
15
|
export declare function resolveGeneratedDir(opts: {
|
|
3
16
|
homeDir?: string;
|
|
4
17
|
manifestPath: string;
|
|
18
|
+
/** Overrides the home tilde expansion resolves against; defaults to `os.homedir()` (see `expandHome`). */
|
|
19
|
+
userHome?: string;
|
|
5
20
|
}): string;
|
package/dist/io/generated-dir.js
CHANGED
|
@@ -1,14 +1,32 @@
|
|
|
1
1
|
import * as path from "node:path";
|
|
2
|
+
import { expandHome } from "./expand-home.js";
|
|
2
3
|
// `harness.generated/` lives next to whichever manifest is in use. If the
|
|
3
4
|
// user passed `--config /repo/path/harness.yaml`, generated artefacts go to
|
|
4
5
|
// `/repo/path/harness.generated/` (NOT `~/.claude/harness.generated/`). This
|
|
5
6
|
// avoids the footgun of `harness apply --config <some-other-tree>` writing
|
|
6
7
|
// state into the user's global runtime directory. The `homeDir` override
|
|
7
8
|
// path is for tests and non-default-home installs.
|
|
9
|
+
//
|
|
10
|
+
// Sibling manifest/lock paths (e.g. the lockfile next to `harness.yaml`)
|
|
11
|
+
// are NOT normalized here — only the `generatedDir` this function returns.
|
|
8
12
|
export const GENERATED_DIRNAME = "harness.generated";
|
|
13
|
+
/**
|
|
14
|
+
* Single normalization point for every `generatedDir` consumer (task
|
|
15
|
+
* 8254e357, follow-up to review round H1-R2 on task 03a917fd). Normalizes
|
|
16
|
+
* EXACTLY ONCE, here, via `expandHome` + `path.resolve`.
|
|
17
|
+
*
|
|
18
|
+
* - Tilde expansion: a leading `~/` or bare `~` in `homeDir` expands
|
|
19
|
+
* against `opts.userHome` (default: the process home, `os.homedir()`
|
|
20
|
+
* via `expandHome`'s own default). `~user/x` and `${HOME}/x` do NOT
|
|
21
|
+
* expand (see `expandHome`'s own doc comment for that scope).
|
|
22
|
+
* - Relative inputs resolve against `process.cwd()` at CALL time.
|
|
23
|
+
* - Idempotent: re-applying this function to its own output returns the
|
|
24
|
+
* same absolute path unchanged.
|
|
25
|
+
*/
|
|
9
26
|
export function resolveGeneratedDir(opts) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
27
|
+
const raw = opts.homeDir !== undefined
|
|
28
|
+
? path.join(opts.homeDir, GENERATED_DIRNAME)
|
|
29
|
+
: path.join(path.dirname(opts.manifestPath), GENERATED_DIRNAME);
|
|
30
|
+
return path.resolve(expandHome(raw, opts.userHome));
|
|
13
31
|
}
|
|
14
32
|
//# sourceMappingURL=generated-dir.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generated-dir.js","sourceRoot":"","sources":["../../src/io/generated-dir.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"generated-dir.js","sourceRoot":"","sources":["../../src/io/generated-dir.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,0EAA0E;AAC1E,4EAA4E;AAC5E,6EAA6E;AAC7E,2EAA2E;AAC3E,yEAAyE;AACzE,mDAAmD;AACnD,EAAE;AACF,yEAAyE;AACzE,2EAA2E;AAE3E,MAAM,CAAC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAErD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAKnC;IACC,MAAM,GAAG,GACP,IAAI,CAAC,OAAO,KAAK,SAAS;QACxB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC;QAC5C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Small shared JSON-parse helper. Moved here (structural-concentration
|
|
2
|
+
// slice, task 9bc0d546) from
|
|
3
|
+
// src/policy-packs/builtin/understanding-before-execution/persisted-reports.ts,
|
|
4
|
+
// which used to be the only definition; markers.ts imported it from there
|
|
5
|
+
// too, creating an internal markers.ts -> persisted-reports.ts edge purely
|
|
6
|
+
// for this one helper. Giving it a neutral home in src/io removes that
|
|
7
|
+
// edge: both call sites now import the same function from here instead of
|
|
8
|
+
// from each other. Pure move, no behavior change.
|
|
9
|
+
/**
|
|
10
|
+
* Parse `text` as JSON, returning `null` instead of throwing on malformed
|
|
11
|
+
* input.
|
|
12
|
+
*/
|
|
13
|
+
export function safeJsonParse(text) {
|
|
14
|
+
try {
|
|
15
|
+
return JSON.parse(text);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=safe-json-parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-json-parse.js","sourceRoot":"","sources":["../../src/io/safe-json-parse.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,6BAA6B;AAC7B,gFAAgF;AAChF,0EAA0E;AAC1E,2EAA2E;AAC3E,uEAAuE;AACvE,0EAA0E;AAC1E,kDAAkD;AAElD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -10,7 +10,7 @@ import { atomicWriteFile } from "../../../io/atomic-write.js";
|
|
|
10
10
|
import { readRegularFileRejectingSymlink } from "../../../io/read-regular-file.js";
|
|
11
11
|
import { signMarker, verifyMarkerSignature } from "../../../runtime/approval-signing.js";
|
|
12
12
|
import { rejectMalformedSessionId } from "../../../runtime/reject-malformed-session-id.js";
|
|
13
|
-
import { safeJsonParse } from "
|
|
13
|
+
import { safeJsonParse } from "../../../io/safe-json-parse.js";
|
|
14
14
|
export const APPROVAL_MARKER_DIRNAME = ".approvals";
|
|
15
15
|
/** Filesystem path of the per-session approval marker. */
|
|
16
16
|
export function approvalMarkerPathFor(generatedDir, sessionId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markers.js","sourceRoot":"","sources":["../../../../src/policy-packs/builtin/understanding-before-execution/markers.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,iEAAiE;AACjE,sEAAsE;AACtE,iDAAiD;AACjD,uEAAuE;AACvE,kCAAkC;AAElC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"markers.js","sourceRoot":"","sources":["../../../../src/policy-packs/builtin/understanding-before-execution/markers.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,iEAAiE;AACjE,sEAAsE;AACtE,iDAAiD;AACjD,uEAAuE;AACvE,kCAAkC;AAElC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,MAAM,CAAC,MAAM,uBAAuB,GAAG,YAAY,CAAC;AAEpD,0DAA0D;AAC1D,MAAM,UAAU,qBAAqB,CAAC,YAAoB,EAAE,SAAiB;IAC3E,wBAAwB,CAAC,SAAS,CAAC,CAAC;IACpC,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,uBAAuB,EAAE,SAAS,CAAC,CAAC;AACrE,CAAC;AAeD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,mBAAmB,CACjC,YAAoB,EACpB,SAAiB,EACjB,MAAsB;IAEtB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC3D,eAAe,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACnF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAmDD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,mBAAmB,CACjC,YAAoB,EACpB,SAAiB,EACjB,OAAmC,EAAE;IAErC,yEAAyE;IACzE,uEAAuE;IACvE,uEAAuE;IACvE,2DAA2D;IAC3D,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,qBAAqB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,0CACN,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACjD,EAAE;YACF,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,KAAK;SACd,CAAC;IACJ,CAAC;IACD,yEAAyE;IACzE,uDAAuD;IACvD,uEAAuE;IACvE,MAAM,IAAI,GAAG,+BAA+B,CAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,yBAAyB,QAAQ,EAAE;YAC3C,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,KAAK;SACd,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,sDAAsD,QAAQ,EAAE;YACxE,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,KAAK;SACd,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAChC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,+CAA+C,QAAQ,EAAE;YACjE,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,KAAK;SACd,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAC/B,oEAAoE;QACpE,iEAAiE;QACjE,mEAAmE;QACnE,yDAAyD;QACzD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,sBAAsB,QAAQ,0GAA0G;YAChJ,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,KAAK;SACd,CAAC;IACJ,CAAC;IACD,qBAAqB;IACrB,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,mDAAmD,QAAQ,uBAAuB;YAC1F,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,MAAM,YAAY,GAAG,qBAAqB,CAAC,YAAY,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IACzE,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;QACrB,IAAI,YAAY,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC5C,oEAAoE;YACpE,+DAA+D;YAC/D,oEAAoE;YACpE,oEAAoE;YACpE,yDAAyD;YACzD,mEAAmE;YACnE,qEAAqE;YACrE,SAAS;YACT,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,sBAAsB,QAAQ,2BAA2B,YAAY,CAAC,MAAM,0BAA0B;gBAC9G,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,KAAK;aACd,CAAC;QACJ,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,oCAAoC,YAAY,CAAC,MAAM,KAAK,QAAQ,GAAG;YAC/E,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAW,CAAC;IAC/C,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAW,CAAC;IAC/C,MAAM,iBAAiB,GACrB,OAAO,GAAG,CAAC,mBAAmB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,GAAG,CAAC,mBAAmB,CAAY,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7F,MAAM,MAAM,GAAmB,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAE7E,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,KAAK,GAAG,YAAY,CAAC;YACnC,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;gBAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;gBAClD,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,mBAAmB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,MAAM,WAAW,MAAM,kBAAkB,UAAU,GAAG;oBACzH,MAAM;oBACN,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,KAAK;iBACd,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO;QACL,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,uBAAuB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,UAAU,OAAO,UAAU,sBAAsB;QACxH,MAAM;QACN,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;KACd,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,mBAAmB,CAAC,YAAoB,EAAE,SAAiB;IACzE,IAAI,CAAC;QACH,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,kBAAkB;IACpB,CAAC;AACH,CAAC"}
|
|
@@ -44,7 +44,6 @@ export declare function defaultReportsDir(cwd?: string): string;
|
|
|
44
44
|
* fallback when `UNDERSTANDING_GATE_REPORT_DIR` is unset.
|
|
45
45
|
*/
|
|
46
46
|
export declare function reportsDirForManifest(manifestPath: string): string;
|
|
47
|
-
export declare function safeJsonParse(text: string): unknown;
|
|
48
47
|
/**
|
|
49
48
|
* List persisted reports under `dir`, newest-first by creation time
|
|
50
49
|
* (JSON `createdAt`, falling back to the filename ISO prefix, falling
|
|
@@ -4,12 +4,16 @@
|
|
|
4
4
|
// src/policy-packs/builtin/understanding-before-execution/index.ts for
|
|
5
5
|
// the re-exported public surface.
|
|
6
6
|
//
|
|
7
|
-
// `safeJsonParse`
|
|
8
|
-
// markers.ts
|
|
9
|
-
//
|
|
7
|
+
// `safeJsonParse` used to be defined and exported here (module-private in
|
|
8
|
+
// the monolith, then exported so markers.ts could reuse it for
|
|
9
|
+
// marker-body parsing). It has since moved to src/io/safe-json-parse.ts
|
|
10
|
+
// (task 9bc0d546) so both call sites import a shared helper instead of one
|
|
11
|
+
// importing it from the other -- import/export mechanics only, no
|
|
12
|
+
// behavior change.
|
|
10
13
|
import * as fs from "node:fs";
|
|
11
14
|
import * as path from "node:path";
|
|
12
15
|
import { atomicWriteFile } from "../../../io/atomic-write.js";
|
|
16
|
+
import { safeJsonParse } from "../../../io/safe-json-parse.js";
|
|
13
17
|
const DEFAULT_REPORTS_DIRNAME = ".understanding-gate";
|
|
14
18
|
const REPORTS_SUBDIR = "reports";
|
|
15
19
|
/**
|
|
@@ -47,14 +51,6 @@ export function defaultReportsDir(cwd = process.cwd()) {
|
|
|
47
51
|
export function reportsDirForManifest(manifestPath) {
|
|
48
52
|
return path.join(path.dirname(manifestPath), DEFAULT_REPORTS_DIRNAME, REPORTS_SUBDIR);
|
|
49
53
|
}
|
|
50
|
-
export function safeJsonParse(text) {
|
|
51
|
-
try {
|
|
52
|
-
return JSON.parse(text);
|
|
53
|
-
}
|
|
54
|
-
catch {
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
54
|
/**
|
|
59
55
|
* Parse the ISO prefix of a producer filename
|
|
60
56
|
* (`2026-05-24T06-16-39-409Z-<slug>-<hash>.json`) into epoch ms. The
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persisted-reports.js","sourceRoot":"","sources":["../../../../src/policy-packs/builtin/understanding-before-execution/persisted-reports.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,yEAAyE;AACzE,2EAA2E;AAC3E,uEAAuE;AACvE,kCAAkC;AAClC,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"persisted-reports.js","sourceRoot":"","sources":["../../../../src/policy-packs/builtin/understanding-before-execution/persisted-reports.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { z } from "zod";
|
|
|
2
2
|
import type { PolicyPack, PolicyUx, Producer } from "../../schema/index.js";
|
|
3
3
|
import { type Runtime } from "../runtime.js";
|
|
4
4
|
import type { PackContribution } from "../types.js";
|
|
5
|
+
export declare const PAUSE_FILE_ENV = "UNDERSTANDING_GATE_PAUSE_FILE";
|
|
5
6
|
export declare const PACK_NAME = "understanding-before-execution";
|
|
6
7
|
export declare const VERSION_COMMAND: readonly [string, string];
|
|
7
8
|
export type Mode = "fast_confirm" | "grill_me" | "strict";
|
|
@@ -259,6 +260,18 @@ export interface ResolvePackOptions {
|
|
|
259
260
|
* `verdictDir()` falls back to the env-var-or-XDG precedence.
|
|
260
261
|
*/
|
|
261
262
|
solutionVerdictDir?: string;
|
|
263
|
+
/**
|
|
264
|
+
* Absolute path to the harness pause sentinel file (`sentinelPath(generatedDir)`
|
|
265
|
+
* from `src/runtime/pause-sentinel.ts`). When provided, the pack prefixes
|
|
266
|
+
* ONLY the Claude UserPromptSubmit hook command with
|
|
267
|
+
* `UNDERSTANDING_GATE_PAUSE_FILE=<path>` so the npm-backed
|
|
268
|
+
* `understanding-gate-claude-hook` bin — which runs outside harness's own
|
|
269
|
+
* runtime and cannot resolve `generatedDir` itself — can read the same
|
|
270
|
+
* sentinel harness's own hooks already consult. Apply sets this to
|
|
271
|
+
* `sentinelPath(generatedDir)`; in test/legacy paths it may be omitted,
|
|
272
|
+
* in which case the command is emitted unchanged (agent-tasks 63fefe3a).
|
|
273
|
+
*/
|
|
274
|
+
pauseFile?: string;
|
|
262
275
|
}
|
|
263
276
|
/**
|
|
264
277
|
* POSIX single-quote-escape for an arbitrary path. Safe inside the
|
|
@@ -17,6 +17,15 @@ import { DEFAULT_RUNTIME } from "../runtime.js";
|
|
|
17
17
|
import { isKnownProfileName, resolveProfile, KNOWN_PROFILE_NAMES, } from "./permission-profiles.js";
|
|
18
18
|
import { REPORTS_DIR_ENV } from "./understanding-before-execution-runtime.js";
|
|
19
19
|
import { SHELL_ALIASES } from "../../runtime/tool-name-aliases.js";
|
|
20
|
+
// Env var the npm-backed `understanding-gate-claude-hook` bin reads to find
|
|
21
|
+
// the harness pause sentinel (`src/runtime/pause-sentinel.ts`,
|
|
22
|
+
// SENTINEL_BASENAME = ".harness-paused"). The bin runs OUTSIDE harness's
|
|
23
|
+
// own runtime (it's a package-owned process, not a `harness pack hook ...`
|
|
24
|
+
// subcommand), so it cannot resolve `generatedDir` itself the way
|
|
25
|
+
// `src/cli/pause-check.ts` does for harness's own hooks — the apply path
|
|
26
|
+
// bakes the resolved sentinel path in as an env-var prefix instead, same
|
|
27
|
+
// mechanism as UNDERSTANDING_GATE_REPORT_DIR below (agent-tasks 63fefe3a).
|
|
28
|
+
export const PAUSE_FILE_ENV = "UNDERSTANDING_GATE_PAUSE_FILE";
|
|
20
29
|
export const PACK_NAME = "understanding-before-execution";
|
|
21
30
|
// Canonical version probe for the pack's package-side bin. Consumed by
|
|
22
31
|
// `harness doctor` when the operator declares a pack-level `min_version`
|
|
@@ -251,6 +260,11 @@ function prefixCommandWithReportsDir(command, reportsDir) {
|
|
|
251
260
|
return command;
|
|
252
261
|
return `${REPORTS_DIR_ENV}=${shellQuoteSingle(reportsDir)} ${command}`;
|
|
253
262
|
}
|
|
263
|
+
function prefixCommandWithPauseFile(command, pauseFile) {
|
|
264
|
+
if (!pauseFile)
|
|
265
|
+
return command;
|
|
266
|
+
return `${PAUSE_FILE_ENV}=${shellQuoteSingle(pauseFile)} ${command}`;
|
|
267
|
+
}
|
|
254
268
|
/**
|
|
255
269
|
* Resolve the pack's effective mode from `pack.config.mode` alone —
|
|
256
270
|
* `pack.config.mode` (harness.yaml) > {@link DEFAULT_MODE}. Never reads
|
|
@@ -561,6 +575,13 @@ function buildHooks(runtime, pack, mode, opts = {}) {
|
|
|
561
575
|
// — including the standalone-package Stop bin which honors the same
|
|
562
576
|
// env var — write/read the same directory.
|
|
563
577
|
const wrap = (cmd) => prefixCommandWithReportsDir(cmd, opts.reportsDir);
|
|
578
|
+
// When `opts.pauseFile` is set (the apply path), the Claude
|
|
579
|
+
// UserPromptSubmit command ALSO gets prefixed with
|
|
580
|
+
// `UNDERSTANDING_GATE_PAUSE_FILE=<absolute>` (see {@link PAUSE_FILE_ENV}'s
|
|
581
|
+
// doc comment for why only this one hook needs it: the npm-backed bin
|
|
582
|
+
// runs outside harness's own runtime and cannot resolve `generatedDir`
|
|
583
|
+
// the way harness's own hooks do).
|
|
584
|
+
const wrapPause = (cmd) => prefixCommandWithPauseFile(cmd, opts.pauseFile);
|
|
564
585
|
// Task 5d73d78d review MEDIUM-7: omit the prefix entirely when the
|
|
565
586
|
// resolved mode already coerces to the package's OWN default
|
|
566
587
|
// (`fast_confirm`). Baking `UNDERSTANDING_GATE_MODE=fast_confirm`
|
|
@@ -695,7 +716,12 @@ function buildHooks(runtime, pack, mode, opts = {}) {
|
|
|
695
716
|
// #80 + #81); 0.4.0 supersedes it. The PreToolUse blocker below is
|
|
696
717
|
// the harness CLI itself, not an npm-backed bin, so it does not carry
|
|
697
718
|
// a floor here.
|
|
698
|
-
|
|
719
|
+
// 0.5.0 raises the floor again: the UserPromptSubmit hook now carries an
|
|
720
|
+
// UNDERSTANDING_GATE_PAUSE_FILE prefix, and only 0.5.0 and later read that
|
|
721
|
+
// variable. On an older gate the prefix is set but ignored, so the pause
|
|
722
|
+
// wiring is silently inert; the floor makes `harness doctor` say so instead
|
|
723
|
+
// of leaving the operator to discover it.
|
|
724
|
+
const UG_MIN_VERSION = "0.5.0";
|
|
699
725
|
const UG_VERSION_COMMAND = [
|
|
700
726
|
"understanding-gate",
|
|
701
727
|
"--version",
|
|
@@ -704,7 +730,7 @@ function buildHooks(runtime, pack, mode, opts = {}) {
|
|
|
704
730
|
{
|
|
705
731
|
name: `${HOOK_NAME_PREFIX}:user-prompt-submit`,
|
|
706
732
|
event: "UserPromptSubmit",
|
|
707
|
-
command: wrapMode(BIN_USER_PROMPT_SUBMIT_CLAUDE),
|
|
733
|
+
command: wrapMode(wrapPause(BIN_USER_PROMPT_SUBMIT_CLAUDE)),
|
|
708
734
|
blocking: false,
|
|
709
735
|
budget_ms: 5000,
|
|
710
736
|
min_version: UG_MIN_VERSION,
|