@lannguyensi/harness 0.10.1 → 0.12.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 +160 -7
- package/README.md +99 -58
- package/dist/cli/apply/apply.js +19 -3
- package/dist/cli/apply/apply.js.map +1 -1
- package/dist/cli/approve/understanding.d.ts +8 -0
- package/dist/cli/approve/understanding.js +154 -15
- package/dist/cli/approve/understanding.js.map +1 -1
- package/dist/cli/audit.d.ts +8 -0
- package/dist/cli/audit.js +2 -2
- package/dist/cli/audit.js.map +1 -1
- package/dist/cli/doctor/codex.d.ts +6 -1
- package/dist/cli/doctor/codex.js +10 -6
- package/dist/cli/doctor/codex.js.map +1 -1
- package/dist/cli/doctor/format.js +7 -1
- package/dist/cli/doctor/format.js.map +1 -1
- package/dist/cli/doctor/index.js +62 -5
- package/dist/cli/doctor/index.js.map +1 -1
- package/dist/cli/doctor/types.d.ts +15 -0
- package/dist/cli/dry-run.js +9 -3
- package/dist/cli/dry-run.js.map +1 -1
- package/dist/cli/explain.d.ts +8 -0
- package/dist/cli/explain.js +6 -4
- package/dist/cli/explain.js.map +1 -1
- package/dist/cli/gate/disable.d.ts +42 -0
- package/dist/cli/gate/disable.js +199 -0
- package/dist/cli/gate/disable.js.map +1 -0
- package/dist/cli/gate/enable.d.ts +33 -0
- package/dist/cli/gate/enable.js +127 -0
- package/dist/cli/gate/enable.js.map +1 -0
- package/dist/cli/gate/snapshot.d.ts +65 -0
- package/dist/cli/gate/snapshot.js +119 -0
- package/dist/cli/gate/snapshot.js.map +1 -0
- package/dist/cli/index.js +141 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/dependencies.js +17 -7
- package/dist/cli/init/dependencies.js.map +1 -1
- package/dist/cli/init/templates.d.ts +1 -1
- package/dist/cli/init/templates.js +14 -5
- package/dist/cli/init/templates.js.map +1 -1
- package/dist/cli/pack/hook-pre-tool-use.d.ts +2 -0
- package/dist/cli/pack/hook-pre-tool-use.js +34 -2
- package/dist/cli/pack/hook-pre-tool-use.js.map +1 -1
- package/dist/cli/policy/intercept.d.ts +7 -1
- package/dist/cli/policy/intercept.js +28 -6
- package/dist/cli/policy/intercept.js.map +1 -1
- package/dist/cli/session-start/index.d.ts +75 -0
- package/dist/cli/session-start/index.js +232 -0
- package/dist/cli/session-start/index.js.map +1 -0
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.d.ts +27 -0
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.js +32 -0
- package/dist/policy-packs/builtin/understanding-before-execution-runtime.js.map +1 -1
- package/dist/policy-packs/builtin/understanding-before-execution.d.ts +16 -1
- package/dist/policy-packs/builtin/understanding-before-execution.js +35 -7
- package/dist/policy-packs/builtin/understanding-before-execution.js.map +1 -1
- package/dist/policy-packs/expand.d.ts +3 -1
- package/dist/policy-packs/expand.js +2 -2
- package/dist/policy-packs/expand.js.map +1 -1
- package/dist/policy-packs/index.d.ts +1 -1
- package/dist/policy-packs/index.js.map +1 -1
- package/dist/policy-packs/registry.d.ts +2 -1
- package/dist/policy-packs/registry.js +2 -2
- package/dist/policy-packs/registry.js.map +1 -1
- package/dist/runtime/git-context.d.ts +16 -0
- package/dist/runtime/git-context.js +97 -0
- package/dist/runtime/git-context.js.map +1 -0
- package/dist/runtime/index.d.ts +1 -0
- package/dist/runtime/index.js +1 -0
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/pending-approval.d.ts +31 -0
- package/dist/runtime/pending-approval.js +80 -0
- package/dist/runtime/pending-approval.js.map +1 -0
- package/dist/runtime/session-id.d.ts +40 -1
- package/dist/runtime/session-id.js +99 -8
- package/dist/runtime/session-id.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { type ResolveReadSessionOptions } from "../../runtime/session-id.js";
|
|
2
|
+
import { type LoaderOptions } from "../loader.js";
|
|
3
|
+
/** The slice of `preflight run --json` output this producer reads. */
|
|
4
|
+
export interface PreflightJson {
|
|
5
|
+
ready?: boolean;
|
|
6
|
+
confidence?: number;
|
|
7
|
+
checks?: Array<{
|
|
8
|
+
name?: string;
|
|
9
|
+
status?: string;
|
|
10
|
+
message?: string;
|
|
11
|
+
}>;
|
|
12
|
+
}
|
|
13
|
+
export type RunPreflightResult = {
|
|
14
|
+
ok: true;
|
|
15
|
+
json: PreflightJson;
|
|
16
|
+
} | {
|
|
17
|
+
ok: false;
|
|
18
|
+
reason: string;
|
|
19
|
+
};
|
|
20
|
+
export interface SessionStartPreflightOptions extends LoaderOptions {
|
|
21
|
+
/** Defaults to process.stdin. */
|
|
22
|
+
stdin?: NodeJS.ReadableStream;
|
|
23
|
+
/** Defaults to process.stderr. stdout is never written (SessionStart). */
|
|
24
|
+
stderr?: NodeJS.WritableStream;
|
|
25
|
+
/**
|
|
26
|
+
* Explicit session id (overrides every other source). Wired to the
|
|
27
|
+
* `--session <id>` CLI flag for manual / scripted invocations where
|
|
28
|
+
* no SessionStart event JSON is being piped on stdin.
|
|
29
|
+
*/
|
|
30
|
+
session?: string;
|
|
31
|
+
/** `preflight` subprocess timeout in ms. */
|
|
32
|
+
preflightTimeoutMs?: number;
|
|
33
|
+
/** Per-call ledger timeout in ms. */
|
|
34
|
+
ledgerTimeoutMs?: number;
|
|
35
|
+
/** Inject the preflight runner (tests). */
|
|
36
|
+
runPreflight?: (cwd: string, timeoutMs: number) => Promise<RunPreflightResult>;
|
|
37
|
+
/** Inject the ledger writer (tests). */
|
|
38
|
+
writeLedger?: (args: {
|
|
39
|
+
sessionId: string;
|
|
40
|
+
content: string;
|
|
41
|
+
source: string;
|
|
42
|
+
}) => Promise<{
|
|
43
|
+
ok: boolean;
|
|
44
|
+
reason?: string;
|
|
45
|
+
}>;
|
|
46
|
+
/**
|
|
47
|
+
* Inject the read-path session resolver (env + transcript discovery).
|
|
48
|
+
* Test seam — production uses `resolveReadSessionId` from
|
|
49
|
+
* `runtime/session-id` so we get the same precedence chain as
|
|
50
|
+
* `harness audit` and `harness explain --trace`.
|
|
51
|
+
*/
|
|
52
|
+
resolveSession?: (explicit: string | undefined, opts: ResolveReadSessionOptions) => string;
|
|
53
|
+
}
|
|
54
|
+
export interface SessionStartPreflightResult {
|
|
55
|
+
/** Always 0 — a SessionStart hook must never break the session loop. */
|
|
56
|
+
exitCode: number;
|
|
57
|
+
/** Whether the `preflight:` ledger fact was written. */
|
|
58
|
+
wrote: boolean;
|
|
59
|
+
/** Resolved repo name (the `${REPO}` a tag is namespaced by). */
|
|
60
|
+
repo: string;
|
|
61
|
+
/** Resolved branch (the `${BRANCH}` a tag is namespaced by; "" if detached). */
|
|
62
|
+
branch: string;
|
|
63
|
+
/**
|
|
64
|
+
* Which tier the session id came from. Surfaced so the CLI can
|
|
65
|
+
* loud-warn when the resolved id is the literal `"default"` (a tag
|
|
66
|
+
* recorded under that id will not satisfy any `preflight-before-*`
|
|
67
|
+
* gate, which queries by the real Claude Code session id).
|
|
68
|
+
*/
|
|
69
|
+
sessionSource: "flag" | "stdin" | "env" | "transcript" | "default";
|
|
70
|
+
/** Resolved session id. */
|
|
71
|
+
sessionId: string;
|
|
72
|
+
/** Human-readable explanation of a non-write outcome, for diagnostics. */
|
|
73
|
+
reason?: string;
|
|
74
|
+
}
|
|
75
|
+
export declare function runSessionStartPreflight(opts?: SessionStartPreflightOptions): Promise<SessionStartPreflightResult>;
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
// `harness session-start preflight` — SessionStart hook entrypoint.
|
|
2
|
+
//
|
|
3
|
+
// Wired by the Full template's `git-preflight` SessionStart hook. Reads
|
|
4
|
+
// the SessionStart event JSON from stdin, runs `agent-preflight`
|
|
5
|
+
// (`preflight run --json <cwd>`), and on a `ready:true` result writes a
|
|
6
|
+
// `preflight:${REPO}` fact to the evidence ledger so the
|
|
7
|
+
// `preflight-before-investigation` / `preflight-before-push` policies
|
|
8
|
+
// have a fresh tag to match within their `within` windows.
|
|
9
|
+
//
|
|
10
|
+
// SessionStart hooks are `blocking:false`: this command MUST NOT break
|
|
11
|
+
// the session loop. Every failure path — `preflight` not on PATH, a
|
|
12
|
+
// timeout, a non-`ready` result, an unreachable ledger — logs one line
|
|
13
|
+
// to stderr and exits 0. The only observable effect of a failure is
|
|
14
|
+
// that the preflight policies stay closed (which is the safe default).
|
|
15
|
+
//
|
|
16
|
+
// `ready:false` deliberately does NOT write the tag: the policy intent
|
|
17
|
+
// is "block investigative git reads until agent-preflight ran cleanly",
|
|
18
|
+
// so a failing preflight must leave the gate shut, not satisfy it.
|
|
19
|
+
import { execFile } from "node:child_process";
|
|
20
|
+
import { addLedgerFact, resolveGitContext, } from "../../runtime/index.js";
|
|
21
|
+
import { resolveReadSessionId, } from "../../runtime/session-id.js";
|
|
22
|
+
import { loadManifest } from "../loader.js";
|
|
23
|
+
const FALLBACK_SESSION = "default";
|
|
24
|
+
const PREFLIGHT_BIN = "preflight";
|
|
25
|
+
const DEFAULT_PREFLIGHT_TIMEOUT_MS = 25_000;
|
|
26
|
+
const LEDGER_SOURCE = "harness-session-start-preflight";
|
|
27
|
+
async function readStdin(stream) {
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
let data = "";
|
|
30
|
+
stream.setEncoding("utf8");
|
|
31
|
+
stream.on("data", (chunk) => {
|
|
32
|
+
data += chunk;
|
|
33
|
+
});
|
|
34
|
+
stream.on("end", () => resolve(data));
|
|
35
|
+
stream.on("error", reject);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function findGroundingMcp(manifest) {
|
|
39
|
+
return manifest.tools.mcp.find((m) => m.name === "grounding-mcp") ?? null;
|
|
40
|
+
}
|
|
41
|
+
function mcpCommandList(server) {
|
|
42
|
+
return Array.isArray(server.command)
|
|
43
|
+
? server.command
|
|
44
|
+
: server.command.trim().split(/\s+/);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Default `preflight` runner: spawn `preflight run --json <cwd>` and
|
|
48
|
+
* parse its stdout. Resolves `{ ok: false }` (never throws) for the
|
|
49
|
+
* not-installed / timeout / unparseable cases so the caller can degrade.
|
|
50
|
+
*/
|
|
51
|
+
function spawnPreflight(cwd, timeoutMs) {
|
|
52
|
+
return new Promise((resolve) => {
|
|
53
|
+
execFile(PREFLIGHT_BIN, ["run", "--json", cwd], { timeout: timeoutMs, maxBuffer: 16 * 1024 * 1024, encoding: "utf8" }, (err, stdout) => {
|
|
54
|
+
// `preflight` may exit non-zero on a not-ready result while still
|
|
55
|
+
// emitting valid JSON, so a parseable stdout wins over the exit
|
|
56
|
+
// code. Only a missing binary / timeout / unparseable output is a
|
|
57
|
+
// genuine "could not run".
|
|
58
|
+
const text = (stdout ?? "").trim();
|
|
59
|
+
if (text.length > 0) {
|
|
60
|
+
try {
|
|
61
|
+
return resolve({ ok: true, json: JSON.parse(text) });
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
/* fall through to the error path */
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (err) {
|
|
68
|
+
const e = err;
|
|
69
|
+
if (e.code === "ENOENT") {
|
|
70
|
+
return resolve({
|
|
71
|
+
ok: false,
|
|
72
|
+
reason: `\`${PREFLIGHT_BIN}\` not on PATH (npm i -g @lannguyensi/agent-preflight)`,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
// maxBuffer overflow also sets `killed:true`; check it first so
|
|
76
|
+
// an over-budget output is not mis-reported as a timeout.
|
|
77
|
+
if (e.code === "ERR_CHILD_PROCESS_STDIO_MAXBUFFER") {
|
|
78
|
+
return resolve({
|
|
79
|
+
ok: false,
|
|
80
|
+
reason: `\`${PREFLIGHT_BIN} run --json\` output exceeded the read buffer`,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
if (e.killed) {
|
|
84
|
+
return resolve({
|
|
85
|
+
ok: false,
|
|
86
|
+
reason: `\`${PREFLIGHT_BIN} run\` timed out after ${timeoutMs}ms`,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
return resolve({ ok: false, reason: `\`${PREFLIGHT_BIN} run\` failed: ${e.message}` });
|
|
90
|
+
}
|
|
91
|
+
return resolve({
|
|
92
|
+
ok: false,
|
|
93
|
+
reason: `\`${PREFLIGHT_BIN} run --json\` produced no parseable JSON`,
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
function describeNotReady(json) {
|
|
99
|
+
const failing = (json.checks ?? [])
|
|
100
|
+
.filter((c) => c.status === "fail" || c.status === "error")
|
|
101
|
+
.map((c) => c.name ?? "(unnamed)");
|
|
102
|
+
const confidence = typeof json.confidence === "number" ? json.confidence.toFixed(2) : "?";
|
|
103
|
+
const failSuffix = failing.length > 0 ? `; failing: ${failing.join(", ")}` : "";
|
|
104
|
+
return `preflight not ready (confidence ${confidence})${failSuffix}`;
|
|
105
|
+
}
|
|
106
|
+
export async function runSessionStartPreflight(opts = {}) {
|
|
107
|
+
const stdin = opts.stdin ?? process.stdin;
|
|
108
|
+
const stderr = opts.stderr ?? process.stderr;
|
|
109
|
+
const preflightTimeoutMs = opts.preflightTimeoutMs ?? DEFAULT_PREFLIGHT_TIMEOUT_MS;
|
|
110
|
+
const note = (msg) => {
|
|
111
|
+
stderr.write(`harness session-start preflight: ${msg}\n`);
|
|
112
|
+
};
|
|
113
|
+
const done = (wrote, repo, branch, sessionId, sessionSource, reason) => ({
|
|
114
|
+
exitCode: 0,
|
|
115
|
+
wrote,
|
|
116
|
+
repo,
|
|
117
|
+
branch,
|
|
118
|
+
sessionId,
|
|
119
|
+
sessionSource,
|
|
120
|
+
...(reason !== undefined && { reason }),
|
|
121
|
+
});
|
|
122
|
+
let event;
|
|
123
|
+
try {
|
|
124
|
+
event = JSON.parse((await readStdin(stdin)).trim() || "{}");
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
const reason = `malformed event JSON: ${err.message}`;
|
|
128
|
+
note(reason);
|
|
129
|
+
return done(false, "", "", FALLBACK_SESSION, "default", reason);
|
|
130
|
+
}
|
|
131
|
+
const cwd = typeof event.cwd === "string" && event.cwd.length > 0 ? event.cwd : process.cwd();
|
|
132
|
+
const { repo, branch } = resolveGitContext(cwd);
|
|
133
|
+
if (repo === "") {
|
|
134
|
+
const reason = `cwd is not inside a git work tree (${cwd}); nothing to preflight`;
|
|
135
|
+
note(reason);
|
|
136
|
+
return done(false, "", "", FALLBACK_SESSION, "default", reason);
|
|
137
|
+
}
|
|
138
|
+
// Session-id resolution chain. The hook-driven path (Claude Code feeds
|
|
139
|
+
// SessionStart event JSON on stdin) lands at tier "stdin" and is the
|
|
140
|
+
// common case. Manual invocations from an operator's `!`-shell — where
|
|
141
|
+
// there is no event JSON — fall back through env, then transcript
|
|
142
|
+
// discovery (same heuristic `harness audit` / `harness explain --trace`
|
|
143
|
+
// use), and only as a last resort to the literal `"default"`. Tags
|
|
144
|
+
// recorded under `"default"` will never satisfy a `preflight-before-*`
|
|
145
|
+
// gate, so we loud-warn rather than letting the success line read as
|
|
146
|
+
// if the producer worked.
|
|
147
|
+
const explicit = typeof opts.session === "string" && opts.session.length > 0
|
|
148
|
+
? opts.session
|
|
149
|
+
: typeof event.session_id === "string" && event.session_id.length > 0
|
|
150
|
+
? event.session_id
|
|
151
|
+
: undefined;
|
|
152
|
+
const resolveSession = opts.resolveSession ?? resolveReadSessionId;
|
|
153
|
+
const sessionId = resolveSession(explicit, {});
|
|
154
|
+
const sessionSource = typeof opts.session === "string" && opts.session.length > 0
|
|
155
|
+
? "flag"
|
|
156
|
+
: typeof event.session_id === "string" && event.session_id.length > 0
|
|
157
|
+
? "stdin"
|
|
158
|
+
: sessionId === FALLBACK_SESSION
|
|
159
|
+
? "default"
|
|
160
|
+
: typeof process.env.CLAUDE_SESSION_ID === "string" &&
|
|
161
|
+
process.env.CLAUDE_SESSION_ID === sessionId
|
|
162
|
+
? "env"
|
|
163
|
+
: "transcript";
|
|
164
|
+
const runPreflight = opts.runPreflight ?? spawnPreflight;
|
|
165
|
+
const preflight = await runPreflight(cwd, preflightTimeoutMs);
|
|
166
|
+
if (!preflight.ok) {
|
|
167
|
+
note(preflight.reason);
|
|
168
|
+
return done(false, repo, branch, sessionId, sessionSource, preflight.reason);
|
|
169
|
+
}
|
|
170
|
+
if (preflight.json.ready !== true) {
|
|
171
|
+
const reason = describeNotReady(preflight.json);
|
|
172
|
+
note(`${reason} — leaving the preflight tag unwritten so the gate stays closed`);
|
|
173
|
+
return done(false, repo, branch, sessionId, sessionSource, reason);
|
|
174
|
+
}
|
|
175
|
+
const confidence = typeof preflight.json.confidence === "number"
|
|
176
|
+
? preflight.json.confidence.toFixed(2)
|
|
177
|
+
: "?";
|
|
178
|
+
// Emit BOTH per-repo and per-branch tags in one fact: the requires
|
|
179
|
+
// evaluator substring-matches, so a single entry containing
|
|
180
|
+
// `preflight:${REPO}` and `preflight:${BRANCH}` satisfies both
|
|
181
|
+
// `preflight-before-investigation` (REPO, within 1h) and
|
|
182
|
+
// `preflight-before-push` (BRANCH, within 10m). Caveat: a SessionStart
|
|
183
|
+
// producer cannot keep the 10m push window fresh through a long
|
|
184
|
+
// session — a push-time refresh is a separate concern (see task notes).
|
|
185
|
+
// On a detached HEAD `branch` is "" — only the REPO tag is written.
|
|
186
|
+
const tags = branch.length > 0 ? `preflight:${repo} preflight:${branch}` : `preflight:${repo}`;
|
|
187
|
+
const content = `${tags} ready:true confidence:${confidence}`;
|
|
188
|
+
let writeLedger = opts.writeLedger;
|
|
189
|
+
if (!writeLedger) {
|
|
190
|
+
let manifest;
|
|
191
|
+
try {
|
|
192
|
+
manifest = loadManifest(opts).manifest;
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
const reason = `manifest load failed: ${err.message}`;
|
|
196
|
+
note(reason);
|
|
197
|
+
return done(false, repo, branch, sessionId, sessionSource, reason);
|
|
198
|
+
}
|
|
199
|
+
const server = findGroundingMcp(manifest);
|
|
200
|
+
if (!server) {
|
|
201
|
+
const reason = "grounding-mcp not declared in manifest; cannot record preflight tag";
|
|
202
|
+
note(reason);
|
|
203
|
+
return done(false, repo, branch, sessionId, sessionSource, reason);
|
|
204
|
+
}
|
|
205
|
+
const command = mcpCommandList(server);
|
|
206
|
+
const env = server.env ?? undefined;
|
|
207
|
+
const timeoutMs = opts.ledgerTimeoutMs ?? server.health?.timeout_ms ?? 5_000;
|
|
208
|
+
writeLedger = (args) => addLedgerFact({
|
|
209
|
+
mcpCommand: command,
|
|
210
|
+
...(env && { mcpEnv: env }),
|
|
211
|
+
timeoutMs,
|
|
212
|
+
...args,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
const result = await writeLedger({ sessionId, content, source: LEDGER_SOURCE });
|
|
216
|
+
if (!result.ok) {
|
|
217
|
+
const reason = `ledger write failed: ${result.reason ?? "unknown error"}`;
|
|
218
|
+
note(reason);
|
|
219
|
+
return done(false, repo, branch, sessionId, sessionSource, reason);
|
|
220
|
+
}
|
|
221
|
+
note(`recorded ${content} for session ${sessionId}`);
|
|
222
|
+
if (sessionSource === "default") {
|
|
223
|
+
// Loud-warn: the tag landed under the literal "default" session, which
|
|
224
|
+
// no `preflight-before-*` policy ever queries. The recorded line above
|
|
225
|
+
// can read as success; this second line is the actionable corrective.
|
|
226
|
+
note("WARNING: session resolved to the literal \"default\". preflight-before-* gates query " +
|
|
227
|
+
"the real Claude Code session id and will NOT see this tag. Pipe SessionStart event JSON " +
|
|
228
|
+
"on stdin, export $CLAUDE_SESSION_ID, or pass --session <id> for manual / scripted use.");
|
|
229
|
+
}
|
|
230
|
+
return done(true, repo, branch, sessionId, sessionSource);
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/session-start/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,34 @@ export interface PersistedReport {
|
|
|
12
12
|
approvalStatus: string | null;
|
|
13
13
|
approvedAt: string | null;
|
|
14
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Env var the persisted-report directory can be set from. Honored by
|
|
17
|
+
* harness (`defaultReportsDir` below + emitted by `harness apply` onto
|
|
18
|
+
* the pack-contributed hook commands) AND by `@lannguyensi/understanding-gate`
|
|
19
|
+
* (its `core/persistence.js:resolveReportDir` reads the same name), so
|
|
20
|
+
* the three actors that touch the directory — Stop hook (package),
|
|
21
|
+
* PreToolUse blocker (harness), `harness approve understanding` — can
|
|
22
|
+
* agree on the path regardless of each process's cwd.
|
|
23
|
+
*/
|
|
24
|
+
export declare const REPORTS_DIR_ENV = "UNDERSTANDING_GATE_REPORT_DIR";
|
|
25
|
+
/**
|
|
26
|
+
* Resolve the persisted-report directory. Precedence:
|
|
27
|
+
* 1. `UNDERSTANDING_GATE_REPORT_DIR` (taken verbatim — apply emits an
|
|
28
|
+
* absolute path, operator-exported values are shell-expanded before
|
|
29
|
+
* we see them).
|
|
30
|
+
* 2. `<cwd>/.understanding-gate/reports` — backward-compat fallback.
|
|
31
|
+
* Callers that have a stable anchor (the manifest directory) pass
|
|
32
|
+
* it as `cwd` so the fallback agrees with whatever path apply
|
|
33
|
+
* baked into the hook commands.
|
|
34
|
+
*/
|
|
15
35
|
export declare function defaultReportsDir(cwd?: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* Project root anchor for the reports directory: `<dir-of-manifest>/.understanding-gate/reports`.
|
|
38
|
+
* Used by `harness apply` to bake an absolute, manifest-anchored value into
|
|
39
|
+
* the pack-contributed hook commands' env, and by `harness approve` as the
|
|
40
|
+
* fallback when `UNDERSTANDING_GATE_REPORT_DIR` is unset.
|
|
41
|
+
*/
|
|
42
|
+
export declare function reportsDirForManifest(manifestPath: string): string;
|
|
16
43
|
/** Build the per-session ledger tag the pack searches for. */
|
|
17
44
|
export declare function approvedLedgerTagFor(sessionId: string): string;
|
|
18
45
|
/**
|
|
@@ -20,9 +20,41 @@ import { POLICY_DECISION_TYPE } from "../../runtime/ledger-record.js";
|
|
|
20
20
|
export const APPROVED_LEDGER_TAG_PREFIX = "understanding-approved:";
|
|
21
21
|
const DEFAULT_REPORTS_DIRNAME = ".understanding-gate";
|
|
22
22
|
const REPORTS_SUBDIR = "reports";
|
|
23
|
+
/**
|
|
24
|
+
* Env var the persisted-report directory can be set from. Honored by
|
|
25
|
+
* harness (`defaultReportsDir` below + emitted by `harness apply` onto
|
|
26
|
+
* the pack-contributed hook commands) AND by `@lannguyensi/understanding-gate`
|
|
27
|
+
* (its `core/persistence.js:resolveReportDir` reads the same name), so
|
|
28
|
+
* the three actors that touch the directory — Stop hook (package),
|
|
29
|
+
* PreToolUse blocker (harness), `harness approve understanding` — can
|
|
30
|
+
* agree on the path regardless of each process's cwd.
|
|
31
|
+
*/
|
|
32
|
+
export const REPORTS_DIR_ENV = "UNDERSTANDING_GATE_REPORT_DIR";
|
|
33
|
+
/**
|
|
34
|
+
* Resolve the persisted-report directory. Precedence:
|
|
35
|
+
* 1. `UNDERSTANDING_GATE_REPORT_DIR` (taken verbatim — apply emits an
|
|
36
|
+
* absolute path, operator-exported values are shell-expanded before
|
|
37
|
+
* we see them).
|
|
38
|
+
* 2. `<cwd>/.understanding-gate/reports` — backward-compat fallback.
|
|
39
|
+
* Callers that have a stable anchor (the manifest directory) pass
|
|
40
|
+
* it as `cwd` so the fallback agrees with whatever path apply
|
|
41
|
+
* baked into the hook commands.
|
|
42
|
+
*/
|
|
23
43
|
export function defaultReportsDir(cwd = process.cwd()) {
|
|
44
|
+
const fromEnv = process.env[REPORTS_DIR_ENV];
|
|
45
|
+
if (typeof fromEnv === "string" && fromEnv.length > 0)
|
|
46
|
+
return fromEnv;
|
|
24
47
|
return path.join(cwd, DEFAULT_REPORTS_DIRNAME, REPORTS_SUBDIR);
|
|
25
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Project root anchor for the reports directory: `<dir-of-manifest>/.understanding-gate/reports`.
|
|
51
|
+
* Used by `harness apply` to bake an absolute, manifest-anchored value into
|
|
52
|
+
* the pack-contributed hook commands' env, and by `harness approve` as the
|
|
53
|
+
* fallback when `UNDERSTANDING_GATE_REPORT_DIR` is unset.
|
|
54
|
+
*/
|
|
55
|
+
export function reportsDirForManifest(manifestPath) {
|
|
56
|
+
return path.join(path.dirname(manifestPath), DEFAULT_REPORTS_DIRNAME, REPORTS_SUBDIR);
|
|
57
|
+
}
|
|
26
58
|
/** Build the per-session ledger tag the pack searches for. */
|
|
27
59
|
export function approvedLedgerTagFor(sessionId) {
|
|
28
60
|
return `${APPROVED_LEDGER_TAG_PREFIX}${sessionId}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"understanding-before-execution-runtime.js","sourceRoot":"","sources":["../../../src/policy-packs/builtin/understanding-before-execution-runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"understanding-before-execution-runtime.js","sourceRoot":"","sources":["../../../src/policy-packs/builtin/understanding-before-execution-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,11 +5,26 @@ export declare const PACK_NAME = "understanding-before-execution";
|
|
|
5
5
|
export type Mode = "fast_confirm" | "grill_me" | "strict";
|
|
6
6
|
export declare const DEFAULT_MODE: Mode;
|
|
7
7
|
export declare function isMode(value: unknown): value is Mode;
|
|
8
|
+
export interface ResolvePackOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Absolute path to the persisted-report directory the pack's hooks
|
|
11
|
+
* should write/read. When provided, the pack prefixes each contributed
|
|
12
|
+
* hook command with `UNDERSTANDING_GATE_REPORT_DIR=<path>` so the
|
|
13
|
+
* Stop hook (writes the report), the PreToolUse blocker (reads it),
|
|
14
|
+
* and `harness approve understanding` (flips it) all resolve the same
|
|
15
|
+
* directory regardless of each process's cwd. Apply sets this to a
|
|
16
|
+
* manifest-anchored absolute path; in test/legacy paths it may be
|
|
17
|
+
* omitted, in which case the commands are emitted unchanged and the
|
|
18
|
+
* runtime `defaultReportsDir()` falls back to the env-var-or-cwd
|
|
19
|
+
* precedence.
|
|
20
|
+
*/
|
|
21
|
+
reportsDir?: string;
|
|
22
|
+
}
|
|
8
23
|
export declare function resolveMode(pack: PolicyPack): {
|
|
9
24
|
mode: Mode;
|
|
10
25
|
warning: string | null;
|
|
11
26
|
};
|
|
12
|
-
export declare function resolve(pack: PolicyPack, runtime?: Runtime): {
|
|
27
|
+
export declare function resolve(pack: PolicyPack, runtime?: Runtime, opts?: ResolvePackOptions): {
|
|
13
28
|
contribution: PackContribution;
|
|
14
29
|
warnings: string[];
|
|
15
30
|
};
|
|
@@ -13,6 +13,14 @@
|
|
|
13
13
|
import { profileToSettingsPermissions } from "../permission-translator.js";
|
|
14
14
|
import { DEFAULT_RUNTIME } from "../runtime.js";
|
|
15
15
|
import { isKnownProfileName, resolveProfile, KNOWN_PROFILE_NAMES, } from "./permission-profiles.js";
|
|
16
|
+
// Local copy of the env var name so this module does NOT need to import
|
|
17
|
+
// from `understanding-before-execution-runtime.js`. That sibling pulls
|
|
18
|
+
// in `runtime/ledger-record.js`, which sits in a pre-existing cycle
|
|
19
|
+
// with `policies/ledger-client.js` (POLICY_DECISION_TYPE); routing the
|
|
20
|
+
// import here would cause a TDZ failure at CLI startup. The runtime
|
|
21
|
+
// helper exports the same constant under the same name for the consumer
|
|
22
|
+
// side (defaultReportsDir + the test assertions).
|
|
23
|
+
const REPORTS_DIR_ENV = "UNDERSTANDING_GATE_REPORT_DIR";
|
|
16
24
|
export const PACK_NAME = "understanding-before-execution";
|
|
17
25
|
const MODES = ["fast_confirm", "grill_me", "strict"];
|
|
18
26
|
export const DEFAULT_MODE = "grill_me";
|
|
@@ -59,6 +67,20 @@ const COMMAND_PRE_TOOL_USE_CODEX = "harness pack hook codex-pre-tool-use";
|
|
|
59
67
|
export function isMode(value) {
|
|
60
68
|
return typeof value === "string" && MODES.includes(value);
|
|
61
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* POSIX single-quote-escape for an arbitrary path. Safe inside the
|
|
72
|
+
* `VAR=<value>` prefix of a `sh -c` command line. Always quotes — paths
|
|
73
|
+
* derived from `path.dirname()` may contain spaces or other shell
|
|
74
|
+
* metacharacters, and a plain `VAR=$path` would split on whitespace.
|
|
75
|
+
*/
|
|
76
|
+
function shellQuoteSingle(s) {
|
|
77
|
+
return `'${s.replace(/'/g, "'\\''")}'`;
|
|
78
|
+
}
|
|
79
|
+
function prefixCommandWithReportsDir(command, reportsDir) {
|
|
80
|
+
if (!reportsDir)
|
|
81
|
+
return command;
|
|
82
|
+
return `${REPORTS_DIR_ENV}=${shellQuoteSingle(reportsDir)} ${command}`;
|
|
83
|
+
}
|
|
62
84
|
export function resolveMode(pack) {
|
|
63
85
|
const raw = pack.config["mode"];
|
|
64
86
|
if (raw === undefined)
|
|
@@ -68,11 +90,17 @@ export function resolveMode(pack) {
|
|
|
68
90
|
const warning = `policy_packs[${pack.name}].config.mode: unrecognised value ${JSON.stringify(raw)}, falling back to "${DEFAULT_MODE}". Allowed: ${MODES.join(", ")}.`;
|
|
69
91
|
return { mode: DEFAULT_MODE, warning };
|
|
70
92
|
}
|
|
71
|
-
function buildHooks(runtime) {
|
|
93
|
+
function buildHooks(runtime, opts = {}) {
|
|
72
94
|
// Per-mode hook commands are identical (the mode is passed via the
|
|
73
95
|
// package's UNDERSTANDING_GATE_MODE env var, set elsewhere — out of
|
|
74
96
|
// scope for Phase 6 #2). What changes per mode is the instructions.md
|
|
75
97
|
// content + the actual injected prompt (owned by the npm package).
|
|
98
|
+
//
|
|
99
|
+
// When `opts.reportsDir` is set (the apply path), each command is
|
|
100
|
+
// prefixed with `UNDERSTANDING_GATE_REPORT_DIR=<absolute>` so all hooks
|
|
101
|
+
// — including the standalone-package Stop bin which honors the same
|
|
102
|
+
// env var — write/read the same directory.
|
|
103
|
+
const wrap = (cmd) => prefixCommandWithReportsDir(cmd, opts.reportsDir);
|
|
76
104
|
if (runtime === "codex") {
|
|
77
105
|
return [
|
|
78
106
|
{
|
|
@@ -86,7 +114,7 @@ function buildHooks(runtime) {
|
|
|
86
114
|
{
|
|
87
115
|
name: `${HOOK_NAME_PREFIX}:codex:stop`,
|
|
88
116
|
event: "Stop",
|
|
89
|
-
command: COMMAND_STOP_CODEX,
|
|
117
|
+
command: wrap(COMMAND_STOP_CODEX),
|
|
90
118
|
blocking: false,
|
|
91
119
|
budget_ms: 5000,
|
|
92
120
|
description: "Codex adapter: capture the agent's Understanding Report into .understanding-gate/reports/ as approvalStatus:pending. Phase 6 #6 follow-up.",
|
|
@@ -95,7 +123,7 @@ function buildHooks(runtime) {
|
|
|
95
123
|
name: `${HOOK_NAME_PREFIX}:codex:pre-tool-use`,
|
|
96
124
|
event: "PreToolUse",
|
|
97
125
|
match: PRE_TOOL_USE_MATCH_CODEX,
|
|
98
|
-
command: COMMAND_PRE_TOOL_USE_CODEX,
|
|
126
|
+
command: wrap(COMMAND_PRE_TOOL_USE_CODEX),
|
|
99
127
|
blocking: "hard",
|
|
100
128
|
budget_ms: 5000,
|
|
101
129
|
description: "Codex adapter: block apply_patch/Bash/shell until an approved Understanding Report exists for the session. Consults both the evidence-ledger tag and the persisted JSON report.",
|
|
@@ -114,7 +142,7 @@ function buildHooks(runtime) {
|
|
|
114
142
|
{
|
|
115
143
|
name: `${HOOK_NAME_PREFIX}:stop`,
|
|
116
144
|
event: "Stop",
|
|
117
|
-
command: BIN_STOP_CLAUDE,
|
|
145
|
+
command: wrap(BIN_STOP_CLAUDE),
|
|
118
146
|
blocking: false,
|
|
119
147
|
budget_ms: 5000,
|
|
120
148
|
description: "Capture the agent's Understanding Report into .understanding-gate/reports/. Source: @lannguyensi/understanding-gate.",
|
|
@@ -123,7 +151,7 @@ function buildHooks(runtime) {
|
|
|
123
151
|
name: `${HOOK_NAME_PREFIX}:pre-tool-use`,
|
|
124
152
|
event: "PreToolUse",
|
|
125
153
|
match: PRE_TOOL_USE_MATCH_CLAUDE,
|
|
126
|
-
command: PRE_TOOL_USE_COMMAND_CLAUDE,
|
|
154
|
+
command: wrap(PRE_TOOL_USE_COMMAND_CLAUDE),
|
|
127
155
|
blocking: "hard",
|
|
128
156
|
budget_ms: 5000,
|
|
129
157
|
description: "Block Edit/Write/Bash until an approved Understanding Report exists for the session. Consults both the evidence-ledger tag (understanding-approved:${SESSION_ID}) and the persisted JSON report.",
|
|
@@ -230,9 +258,9 @@ function resolvePermissionProfile(pack) {
|
|
|
230
258
|
return { permissions: null, warning: null };
|
|
231
259
|
return { permissions: profileToSettingsPermissions(profile), warning: null };
|
|
232
260
|
}
|
|
233
|
-
export function resolve(pack, runtime = DEFAULT_RUNTIME) {
|
|
261
|
+
export function resolve(pack, runtime = DEFAULT_RUNTIME, opts = {}) {
|
|
234
262
|
const { mode, warning } = resolveMode(pack);
|
|
235
|
-
const hooks = buildHooks(runtime);
|
|
263
|
+
const hooks = buildHooks(runtime, opts);
|
|
236
264
|
const instructionsContent = buildInstructions(pack, mode, runtime);
|
|
237
265
|
const files = [
|
|
238
266
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"understanding-before-execution.js","sourceRoot":"","sources":["../../../src/policy-packs/builtin/understanding-before-execution.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,EAAE;AACF,sEAAsE;AACtE,yEAAyE;AACzE,yEAAyE;AACzE,8EAA8E;AAC9E,0EAA0E;AAC1E,yEAAyE;AACzE,yEAAyE;AACzE,sEAAsE;AACtE,oEAAoE;AACpE,wCAAwC;AAGxC,OAAO,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAgB,MAAM,eAAe,CAAC;AAM9D,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAElC,MAAM,CAAC,MAAM,SAAS,GAAG,gCAAgC,CAAC;AAI1D,MAAM,KAAK,GAAoB,CAAC,cAAc,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,YAAY,GAAS,UAAU,CAAC;AAE7C,MAAM,gBAAgB,GAAG,eAAe,SAAS,EAAE,CAAC;AAEpD,6EAA6E;AAC7E,sEAAsE;AACtE,sEAAsE;AACtE,qEAAqE;AACrE,oEAAoE;AACpE,6DAA6D;AAC7D,MAAM,yBAAyB,GAAG,iBAAiB,CAAC;AACpD,MAAM,wBAAwB,GAAG,wBAAwB,CAAC;AAE1D,2EAA2E;AAC3E,sEAAsE;AACtE,sEAAsE;AACtE,sEAAsE;AACtE,+BAA+B;AAC/B,MAAM,6BAA6B,GAAG,gCAAgC,CAAC;AACvE,MAAM,eAAe,GAAG,gCAAgC,CAAC;AACzD,yEAAyE;AACzE,sEAAsE;AACtE,iEAAiE;AACjE,yEAAyE;AACzE,mEAAmE;AACnE,0BAA0B;AAC1B,MAAM,2BAA2B,GAAG,gCAAgC,CAAC;AAErE,qEAAqE;AACrE,wDAAwD;AACxD,EAAE;AACF,yDAAyD;AACzD,kEAAkE;AAClE,8BAA8B;AAC9B,iEAAiE;AACjE,EAAE;AACF,sEAAsE;AACtE,iEAAiE;AACjE,mEAAmE;AACnE,oEAAoE;AACpE,oEAAoE;AACpE,0DAA0D;AAC1D,MAAM,gCAAgC,GAAG,4CAA4C,CAAC;AACtF,MAAM,kBAAkB,GAAG,8BAA8B,CAAC;AAC1D,MAAM,0BAA0B,GAAG,sCAAsC,CAAC;AAE1E,MAAM,UAAU,MAAM,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,KAA2B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAgB;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACpE,IAAI,MAAM,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACrD,MAAM,OAAO,GAAG,gBAAgB,IAAI,CAAC,IAAI,qCAAqC,IAAI,CAAC,SAAS,CAC1F,GAAG,CACJ,sBAAsB,YAAY,eAAe,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACtE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,UAAU,CAAC,OAAgB;
|
|
1
|
+
{"version":3,"file":"understanding-before-execution.js","sourceRoot":"","sources":["../../../src/policy-packs/builtin/understanding-before-execution.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { Manifest } from "../schema/index.js";
|
|
2
|
+
import type { ResolvePackOptions } from "./builtin/understanding-before-execution.js";
|
|
2
3
|
import { type Runtime } from "./runtime.js";
|
|
3
4
|
import type { PackExpansionResult } from "./types.js";
|
|
4
|
-
export
|
|
5
|
+
export type ExpandPolicyPacksOptions = ResolvePackOptions;
|
|
6
|
+
export declare function expandPolicyPacks(manifest: Manifest, runtime?: Runtime, opts?: ExpandPolicyPacksOptions): PackExpansionResult;
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
import { resolveBuiltin } from "./registry.js";
|
|
17
17
|
import { DEFAULT_RUNTIME } from "./runtime.js";
|
|
18
18
|
import { parsePackSource } from "./source.js";
|
|
19
|
-
export function expandPolicyPacks(manifest, runtime = DEFAULT_RUNTIME) {
|
|
19
|
+
export function expandPolicyPacks(manifest, runtime = DEFAULT_RUNTIME, opts = {}) {
|
|
20
20
|
const out = { hooks: [], files: [], warnings: [], skipped: [] };
|
|
21
21
|
if (manifest.policy_packs.length === 0)
|
|
22
22
|
return out;
|
|
@@ -36,7 +36,7 @@ export function expandPolicyPacks(manifest, runtime = DEFAULT_RUNTIME) {
|
|
|
36
36
|
out.warnings.push(`policy_packs[${pack.name}]: source ${JSON.stringify(pack.source)} is not recognised in v1 (only "builtin" resolves); skipping.`);
|
|
37
37
|
continue;
|
|
38
38
|
}
|
|
39
|
-
const resolved = resolveBuiltin(pack, runtime);
|
|
39
|
+
const resolved = resolveBuiltin(pack, runtime, opts);
|
|
40
40
|
if (!resolved) {
|
|
41
41
|
out.warnings.push(`policy_packs[${pack.name}]: not a known builtin pack; skipping. See docs/policy-packs/ for supported names.`);
|
|
42
42
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expand.js","sourceRoot":"","sources":["../../src/policy-packs/expand.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,oEAAoE;AACpE,oEAAoE;AACpE,yEAAyE;AACzE,mEAAmE;AACnE,oEAAoE;AACpE,sDAAsD;AACtD,EAAE;AACF,0DAA0D;AAC1D,sEAAsE;AACtE,uEAAuE;AACvE,qEAAqE;AACrE,oEAAoE;AACpE,qCAAqC;
|
|
1
|
+
{"version":3,"file":"expand.js","sourceRoot":"","sources":["../../src/policy-packs/expand.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { expandPolicyPacks } from "./expand.js";
|
|
1
|
+
export { expandPolicyPacks, type ExpandPolicyPacksOptions } from "./expand.js";
|
|
2
2
|
export { KNOWN_BUILTIN_PACKS, isBuiltinPackName, resolveBuiltin, type BuiltinPackName, type ResolveBuiltinResult, } from "./registry.js";
|
|
3
3
|
export { KNOWN_RUNTIMES, DEFAULT_RUNTIME, isRuntime, parseRuntime, type Runtime, } from "./runtime.js";
|
|
4
4
|
export { parsePackSource, type PackSourceKind, type PackSourceParseResult } from "./source.js";
|