@lannguyensi/harness 0.61.0 → 0.63.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 (48) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +1 -1
  3. package/dist/cli/apply/install-codex-config.d.ts +8 -5
  4. package/dist/cli/apply/install-codex-config.js +196 -25
  5. package/dist/cli/apply/install-codex-config.js.map +1 -1
  6. package/dist/cli/approve/understanding.d.ts +36 -2
  7. package/dist/cli/approve/understanding.js +191 -42
  8. package/dist/cli/approve/understanding.js.map +1 -1
  9. package/dist/cli/bounded-stdin.d.ts +15 -2
  10. package/dist/cli/bounded-stdin.js +32 -3
  11. package/dist/cli/bounded-stdin.js.map +1 -1
  12. package/dist/cli/explain-policy.d.ts +11 -0
  13. package/dist/cli/explain-policy.js +41 -3
  14. package/dist/cli/explain-policy.js.map +1 -1
  15. package/dist/cli/gc/index.d.ts +6 -2
  16. package/dist/cli/gc/index.js +22 -7
  17. package/dist/cli/gc/index.js.map +1 -1
  18. package/dist/cli/index.js +15 -14
  19. package/dist/cli/index.js.map +1 -1
  20. package/dist/cli/pack/auto-approve-path.js +29 -3
  21. package/dist/cli/pack/auto-approve-path.js.map +1 -1
  22. package/dist/cli/pack/hook-bootstrap.d.ts +0 -12
  23. package/dist/cli/pack/hook-bootstrap.js +1 -27
  24. package/dist/cli/pack/hook-bootstrap.js.map +1 -1
  25. package/dist/cli/pack/hook-codex-pre-tool-use.js +4 -2
  26. package/dist/cli/pack/hook-codex-pre-tool-use.js.map +1 -1
  27. package/dist/cli/pack/hook-pre-tool-use.js +19 -5
  28. package/dist/cli/pack/hook-pre-tool-use.js.map +1 -1
  29. package/dist/cli/pack/hook-runtime-reality.js +2 -2
  30. package/dist/cli/pack/hook-runtime-reality.js.map +1 -1
  31. package/dist/cli/policy/intercept.js +75 -103
  32. package/dist/cli/policy/intercept.js.map +1 -1
  33. package/dist/cli/policy/risk-envelope-enrichment.d.ts +40 -0
  34. package/dist/cli/policy/risk-envelope-enrichment.js +108 -0
  35. package/dist/cli/policy/risk-envelope-enrichment.js.map +1 -0
  36. package/dist/io/atomic-write.d.ts +37 -1
  37. package/dist/io/atomic-write.js +61 -8
  38. package/dist/io/atomic-write.js.map +1 -1
  39. package/dist/io/display-path.d.ts +11 -0
  40. package/dist/io/display-path.js +29 -0
  41. package/dist/io/display-path.js.map +1 -0
  42. package/dist/policy-packs/builtin/understanding-before-execution/index.d.ts +1 -1
  43. package/dist/policy-packs/builtin/understanding-before-execution/index.js +1 -1
  44. package/dist/policy-packs/builtin/understanding-before-execution/index.js.map +1 -1
  45. package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.d.ts +152 -21
  46. package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js +286 -48
  47. package/dist/policy-packs/builtin/understanding-before-execution/persisted-reports.js.map +1 -1
  48. package/package.json +1 -1
@@ -6,11 +6,10 @@
6
6
  import { openLedgerSession, } from "../../policies/index.js";
7
7
  import * as fs from "node:fs";
8
8
  import * as os from "node:os";
9
- import * as path from "node:path";
10
- import { readStdinBounded, STDIN_IDLE_TIMEOUT_MS, stdinTimeoutNote } from "../bounded-stdin.js";
9
+ import { readStdinBounded, STDIN_IDLE_TIMEOUT_MS, stdinTimeoutNote, stdinTimeoutBlockJson, stdinTimeoutBlockReason } from "../bounded-stdin.js";
11
10
  import { buildActionEnvelope, intercept, isBlockingDecision, recordPolicyDecisionOnSession, resolveEnvironment, resolveGitContext, resolveKubeContext, sanitizeEnvelopeReason, } from "../../runtime/index.js";
12
11
  import { resolveGeneratedDir, writePendingApproval } from "../../runtime/pending-approval.js";
13
- import { parseBashPrefix } from "../../runtime/bash-prefix-parse.js";
12
+ import { ENV_RANK, resolveBashPrefixEnrichment } from "./risk-envelope-enrichment.js";
14
13
  import { parseKubectlTarget } from "../../runtime/kubectl-target-parse.js";
15
14
  import { MAX_NORMALIZE_LENGTH, normalizeCommand, normalizeCommandAmpAware, normalizeCommandQuoteAware, segmentViewOf, } from "../../runtime/command-normalize.js";
16
15
  import { extractShellCommand, SHELL_ALIASES } from "../../runtime/tool-name-aliases.js";
@@ -84,18 +83,6 @@ function isVerboseEnabled(opts) {
84
83
  // Accept anything truthy except literal disable-words (case-insensitive).
85
84
  return !/^(0|false|no|off)$/i.test(env.trim());
86
85
  }
87
- /**
88
- * Read the command string out of a Bash tool's `tool_input.command`,
89
- * returning null when the shape is wrong (defensive — production input
90
- * comes from Claude Code, but tests and Codex bridges have varied
91
- * payload shapes).
92
- */
93
- function readBashCommand(input) {
94
- if (!input || typeof input !== "object" || Array.isArray(input))
95
- return null;
96
- const cmd = input.command;
97
- return typeof cmd === "string" && cmd.length > 0 ? cmd : null;
98
- }
99
86
  // Derived from `SHELL_ALIASES` rather than hand-copying its members (fix
100
87
  // round 2): `tool-name-aliases.ts`'s own header warns against the copy,
101
88
  // and since fix round 1 the precompute-matches-matcher argument above
@@ -144,48 +131,6 @@ function resolvePolicyCwd(event, codexCommandCwd) {
144
131
  }
145
132
  return process.cwd();
146
133
  }
147
- // Mirrors `ENV_PRECEDENCE` in `../../runtime/environment-resolver.ts`
148
- // (most-dangerous-first). Kept as a local, small, duplicate table
149
- // instead of importing that module's private const, so this file stays
150
- // a read-only consumer of `resolveEnvironment`'s public API rather than
151
- // reaching into its internals. `unknown` is deliberately ranked lowest:
152
- // resolving to no signal at all must never look like an "upgrade" over
153
- // a branch that DID fire a resolver.
154
- const ENV_RANK = {
155
- production: 0,
156
- staging: 1,
157
- dev: 2,
158
- local: 3,
159
- unknown: 4,
160
- };
161
- /**
162
- * Branch-switch, upgrade-only merge (task 341e024b): a leading `git
163
- * switch <branch>` / `git checkout <branch>` names the branch the REST
164
- * of the command actually runs against, the same way a leading `cd
165
- * <path>` names a different working directory (see `resolverGit`'s own
166
- * comment at the call site). Unlike that `cd` merge — which fully
167
- * REPLACES the git context and can move the resolved environment in
168
- * EITHER direction (G5, pre-existing, out of scope for this task) —
169
- * this merge is deliberately asymmetric: it only ever pushes the
170
- * resolved environment to something MORE dangerous, never less.
171
- *
172
- * Both the base git context and the switch-target candidate (same repo
173
- * / sha, only `branch` differs) are run through the SAME
174
- * `resolveEnvironment` call with IDENTICAL env / kube inputs, so any
175
- * difference in the result is attributable to the branch alone. The
176
- * more dangerous of the two (`ENV_RANK` order) wins; a switch AWAY from
177
- * a production branch never downgrades — when the candidate resolves to
178
- * something equally or less dangerous, `baseGit` is returned unchanged.
179
- */
180
- function applyBranchSwitchUpgrade(event, manifest, cwd, baseGit, branchTarget, inputs, user, host, now) {
181
- if (branchTarget === null || branchTarget === baseGit.branch)
182
- return baseGit;
183
- const candidateGit = { ...baseGit, branch: branchTarget };
184
- const effectiveNow = now ?? new Date();
185
- const baseResolution = resolveEnvironment(buildActionEnvelope(event, { cwd, git: baseGit, user, host, now: effectiveNow }), manifest.environments.resolvers, inputs);
186
- const candidateResolution = resolveEnvironment(buildActionEnvelope(event, { cwd, git: candidateGit, user, host, now: effectiveNow }), manifest.environments.resolvers, inputs);
187
- return ENV_RANK[candidateResolution.name] < ENV_RANK[baseResolution.name] ? candidateGit : baseGit;
188
- }
189
134
  /**
190
135
  * Explicit kubectl target, upgrade-only merge (task a7eb1a71): an
191
136
  * explicit --context/--namespace/-n on a kubectl command can only push
@@ -507,17 +452,65 @@ function degradedLedgerClient(reason, stderr, hookName) {
507
452
  },
508
453
  };
509
454
  }
455
+ /**
456
+ * The hook event name a timed-out read carries when it names a hook event other
457
+ * than PreToolUse, else `undefined`: the text is empty, truncated, not a JSON
458
+ * object, names no event, or names PreToolUse. The caller keeps its pre-existing
459
+ * continue behaviour only for an event this returns a name for.
460
+ */
461
+ function otherHookEventName(text) {
462
+ let parsed;
463
+ try {
464
+ parsed = JSON.parse(text.trim());
465
+ }
466
+ catch {
467
+ return undefined;
468
+ }
469
+ if (typeof parsed !== "object" || parsed === null)
470
+ return undefined;
471
+ const name = parsed.hook_event_name;
472
+ return typeof name === "string" && name.length > 0 && name !== "PreToolUse" ? name : undefined;
473
+ }
510
474
  export async function runInterceptCli(opts = {}) {
511
475
  const stdin = opts.stdin ?? process.stdin;
512
476
  const stdout = opts.stdout ?? process.stdout;
513
477
  const stderr = opts.stderr ?? process.stderr;
514
478
  const verbose = isVerboseEnabled(opts);
515
479
  const idleTimeoutMs = opts.stdinIdleTimeoutMs ?? STDIN_IDLE_TIMEOUT_MS;
480
+ // Single pause-check options, shared by both checkPauseFromLoader calls.
481
+ const pauseOpts = {
482
+ loaderOpts: opts,
483
+ hookLabel: "policy intercept",
484
+ stderr,
485
+ };
486
+ if (opts.generatedDir !== undefined)
487
+ pauseOpts.generatedDir = opts.generatedDir;
488
+ if (opts.now !== undefined)
489
+ pauseOpts.now = opts.now;
516
490
  const read = await readStdinBounded(stdin, idleTimeoutMs);
491
+ if (read.timedOut && otherHookEventName(read.text) === undefined) {
492
+ // A timed-out read leaves no event to judge, and this verb is the
493
+ // PreToolUse gate entrypoint: continuing as an empty event turned a block
494
+ // into an allow whenever the host stalled past the bound and then wrote a
495
+ // complete gated event. The rendered hook command carries no event name, so
496
+ // the event the read itself declares is the only signal there is: an event
497
+ // naming another hook event keeps the continue path below, anything else
498
+ // (nothing read, a truncated or unparseable prefix, a PreToolUse event, or
499
+ // an object with no event name) is treated as the PreToolUse call this
500
+ // verb is registered for. The operator pause still wins, and a paused run
501
+ // allows exactly as it does after a read that closed.
502
+ if (checkPauseFromLoader(pauseOpts).paused) {
503
+ return { exitCode: 0, decisions: [], blocked: false };
504
+ }
505
+ const reason = stdinTimeoutBlockReason(idleTimeoutMs);
506
+ stderr.write(`harness policy intercept${hookSuffix(opts.hookName)}: BLOCK: ${reason}\n`);
507
+ stdout.write(`${stdinTimeoutBlockJson(reason)}\n`);
508
+ return { exitCode: 0, decisions: [], blocked: true };
509
+ }
517
510
  if (read.timedOut) {
518
- // Same fail posture as an absent event: an empty read continues as an
519
- // empty event, partial text is parsed (and fails open below when malformed).
520
- stderr.write(`harness policy intercept${hookSuffix(opts.hookName)}: ${stdinTimeoutNote(read, idleTimeoutMs, "continuing as an empty event")}\n`);
511
+ // Only an event that names another hook event gets here (see above), so the
512
+ // text read is non-empty and parsed as that event below.
513
+ stderr.write(`harness policy intercept${hookSuffix(opts.hookName)}: ${stdinTimeoutNote(read, idleTimeoutMs)}\n`);
521
514
  }
522
515
  const raw = read.text;
523
516
  let event;
@@ -535,15 +528,6 @@ export async function runInterceptCli(opts = {}) {
535
528
  // very gates the kill switch most needs to silence (a wedged preflight /
536
529
  // grounding gate is the canonical reason an operator pauses at all).
537
530
  {
538
- const pauseOpts = {
539
- loaderOpts: opts,
540
- hookLabel: "policy intercept",
541
- stderr,
542
- };
543
- if (opts.generatedDir !== undefined)
544
- pauseOpts.generatedDir = opts.generatedDir;
545
- if (opts.now !== undefined)
546
- pauseOpts.now = opts.now;
547
531
  if (checkPauseFromLoader(pauseOpts).paused) {
548
532
  return { exitCode: 0, decisions: [], blocked: false };
549
533
  }
@@ -811,7 +795,7 @@ export async function runInterceptCli(opts = {}) {
811
795
  // names the hook's own cwd; ${REPO}/${BRANCH} (`cwdGitContext`
812
796
  // above, feeding `builtins`) are cwd-only too — see the comment
813
797
  // above `cwdGitContext`'s declaration. The Risk Gate resolver's git
814
- // base, `resolverGit` below, is its own independent narrow parse: it
798
+ // base, `resolverGit` (risk-envelope-enrichment.ts), is its own narrow parse: it
815
799
  // recognises only a leading `cd`, never `git -C` / `--work-tree` /
816
800
  // `--git-dir` / `env -C`. Bottom line: `resolverGit` must never read
817
801
  // anything other than `cwdGitContext`, or the leading-`cd` target
@@ -833,15 +817,32 @@ export async function runInterceptCli(opts = {}) {
833
817
  // branch, as in the example above) — `resolverGit` trusts whichever
834
818
  // of the two the command happens to name, with no independent check
835
819
  // that the `cd` target is the repo the destructive command actually
836
- // runs against. The `git switch`/`checkout` merge added below
837
- // (`gitForRisk`, via `applyBranchSwitchUpgrade`) deliberately does
820
+ // runs against. The `git switch`/`checkout` merge in that helper
821
+ // (`gitForRisk`, `applyBranchSwitchUpgrade`, same module) deliberately does
838
822
  // NOT share this bidirectional-risk shape: it is a SEPARATE,
839
823
  // upgrade-only step layered on top of `resolverGit`, not a change to
840
824
  // `resolverGit` itself — a switch away from a production branch can
841
825
  // never downgrade what `resolverGit` (cwd- or cd-based) already
842
826
  // resolved.
843
- const riskBashCommand = event.tool_name === "Bash" ? readBashCommand(event.tool_input) : null;
844
- const bashPrefix = riskBashCommand === null ? null : parseBashPrefix(riskBashCommand);
827
+ const riskUser = safeOs(() => os.userInfo().username);
828
+ const riskHost = safeOs(() => os.hostname());
829
+ // The leading-prefix parse and the three merges it feeds (inline
830
+ // `VAR=value` env, leading `cd`, leading `git switch|checkout`)
831
+ // live in `resolveBashPrefixEnrichment`, shared with `harness
832
+ // explain-policy` so the debug verb cannot drift from this hook.
833
+ // The kubectl-target merge below stays hook-only.
834
+ const { bashPrefix, riskBashCommand, git: gitForRisk, env: resolverEnv } = resolveBashPrefixEnrichment({
835
+ event,
836
+ manifest,
837
+ cwd,
838
+ cwdGitContext,
839
+ env: opts.env ?? process.env,
840
+ kubeContext: kube.context,
841
+ kubeNamespace: kube.namespace,
842
+ user: riskUser,
843
+ host: riskHost,
844
+ now: opts.now,
845
+ });
845
846
  // Explicit `--context`/`--namespace`/`-n` on a `kubectl ...`
846
847
  // invocation (task a7eb1a71). Fed the REMAINDER after `bashPrefix`
847
848
  // consumed a leading `cd <path> &&` / `VAR=value` / `git switch
@@ -853,35 +854,6 @@ export async function runInterceptCli(opts = {}) {
853
854
  // that is not the first chained segment, a piped kubectl).
854
855
  const kubectlSubject = riskBashCommand === null ? null : riskBashCommand.slice(bashPrefix?.remainderStart ?? 0);
855
856
  const kubectlTarget = kubectlSubject === null ? null : parseKubectlTarget(kubectlSubject);
856
- const resolverGit = (() => {
857
- if (bashPrefix === null || bashPrefix.cdTarget === null)
858
- return cwdGitContext;
859
- const effective = path.isAbsolute(bashPrefix.cdTarget)
860
- ? bashPrefix.cdTarget
861
- : path.resolve(cwd, bashPrefix.cdTarget);
862
- // resolveGitContext returns empty strings for non-git paths;
863
- // an empty repo means cd-target was bogus, fall through.
864
- const candidate = resolveGitContext(effective);
865
- return candidate.repo.length > 0 ? candidate : cwdGitContext;
866
- })();
867
- const resolverEnv = (() => {
868
- const base = opts.env ?? process.env;
869
- if (bashPrefix === null || Object.keys(bashPrefix.inlineEnv).length === 0)
870
- return base;
871
- // Inline assignments are the operator's explicit override; they
872
- // win over process.env (matches POSIX `VAR=value cmd` semantics).
873
- return { ...base, ...bashPrefix.inlineEnv };
874
- })();
875
- const riskUser = safeOs(() => os.userInfo().username);
876
- const riskHost = safeOs(() => os.hostname());
877
- // A leading `git switch`/`checkout <branch>` (task 341e024b) is
878
- // merged on top of `resolverGit` above, upgrade-only, using the
879
- // AMBIENT kube state (`kube` from `resolveKubeContext()` / the
880
- // `opts.kubeContext`/`opts.kubeNamespace` test override), unaffected
881
- // by the kubectl-target merge below. See
882
- // `applyBranchSwitchUpgrade`'s own doc comment for why this one is
883
- // NOT a straight replacement the way the `cd` merge is.
884
- const gitForRisk = applyBranchSwitchUpgrade(event, manifest, cwd, resolverGit, bashPrefix?.branchTarget ?? null, { env: resolverEnv, kubeContext: kube.context, kubeNamespace: kube.namespace }, riskUser, riskHost, opts.now);
885
857
  // CONFLICT PRIORITY (task a7eb1a71): an explicit kubectl
886
858
  // --context/--namespace/-n is merged on top of the AMBIENT kube
887
859
  // state (`kube`), on top of `gitForRisk` above (the git context
@@ -1 +1 @@
1
- {"version":3,"file":"intercept.js","sourceRoot":"","sources":["../../../src/cli/policy/intercept.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"intercept.js","sourceRoot":"","sources":["../../../src/cli/policy/intercept.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { type GitRepoContext, type ToolEvent } from "../../runtime/index.js";
2
+ import { type BashPrefix } from "../../runtime/bash-prefix-parse.js";
3
+ import type { Manifest, MatchableEnvironment } from "../../schema/index.js";
4
+ /**
5
+ * Read the command string out of a Bash tool's `tool_input.command`,
6
+ * returning null when the shape is wrong (defensive — production input
7
+ * comes from Claude Code, but tests and Codex bridges have varied
8
+ * payload shapes).
9
+ */
10
+ export declare function readBashCommand(input: unknown): string | null;
11
+ export declare const ENV_RANK: Record<MatchableEnvironment, number>;
12
+ export interface BashPrefixEnrichmentInput {
13
+ event: ToolEvent;
14
+ manifest: Manifest;
15
+ cwd: string;
16
+ /** Git context of `cwd` itself (the base the prefix merges on top of). */
17
+ cwdGitContext: GitRepoContext;
18
+ /** Ambient env the inline assignments are merged over. */
19
+ env: Record<string, string | undefined>;
20
+ kubeContext: string;
21
+ kubeNamespace: string;
22
+ user: string;
23
+ host: string;
24
+ now: Date | undefined;
25
+ }
26
+ export interface BashPrefixEnrichment {
27
+ /** The Bash command string, or null for a non-Bash / shapeless event. */
28
+ riskBashCommand: string | null;
29
+ bashPrefix: BashPrefix | null;
30
+ /** Git context after the `cd` merge and the branch-switch upgrade. */
31
+ git: GitRepoContext;
32
+ /** Ambient env with the inline `VAR=value` assignments merged on top. */
33
+ env: Record<string, string | undefined>;
34
+ }
35
+ /**
36
+ * Parse the leading Bash prefix once and merge it into the resolver
37
+ * inputs (see the module header). Pure apart from `resolveGitContext`
38
+ * for a `cd` target.
39
+ */
40
+ export declare function resolveBashPrefixEnrichment(input: BashPrefixEnrichmentInput): BashPrefixEnrichment;
@@ -0,0 +1,108 @@
1
+ // Shared Risk Gate envelope enrichment for the verbs that predict or
2
+ // enforce a `when:` verdict: `harness policy intercept` (the PreToolUse
3
+ // hook) and `harness explain-policy` (the debug verb).
4
+ //
5
+ // Both must resolve the environment from the SAME inputs, or the tool an
6
+ // operator uses to predict a gate disagrees with the gate (task
7
+ // 7c3919a2: `DATABASE_URL=...prod... psql ...` resolved `production` in
8
+ // the hook and `unknown` in explain-policy). This module owns the
9
+ // leading-prefix parse of a Bash command and the three merges it feeds:
10
+ // inline `VAR=value` env, a leading `cd <path> &&` (git context), and a
11
+ // leading `git switch|checkout <branch> &&` (upgrade-only).
12
+ //
13
+ // Deliberately NOT here: any ledger or evidence read (explain-policy
14
+ // stays hypothetical and read-free; keep this module free of
15
+ // `policies/` imports), and the kubectl `--context`/`--namespace`
16
+ // merge (hook-only today, tracked separately).
17
+ import * as path from "node:path";
18
+ import { buildActionEnvelope, resolveEnvironment, resolveGitContext, } from "../../runtime/index.js";
19
+ import { parseBashPrefix } from "../../runtime/bash-prefix-parse.js";
20
+ /**
21
+ * Read the command string out of a Bash tool's `tool_input.command`,
22
+ * returning null when the shape is wrong (defensive — production input
23
+ * comes from Claude Code, but tests and Codex bridges have varied
24
+ * payload shapes).
25
+ */
26
+ export function readBashCommand(input) {
27
+ if (!input || typeof input !== "object" || Array.isArray(input))
28
+ return null;
29
+ const cmd = input.command;
30
+ return typeof cmd === "string" && cmd.length > 0 ? cmd : null;
31
+ }
32
+ // Mirrors `ENV_PRECEDENCE` in `../../runtime/environment-resolver.ts`
33
+ // (most-dangerous-first). Kept as a local, small, duplicate table
34
+ // instead of importing that module's private const, so this file stays
35
+ // a read-only consumer of `resolveEnvironment`'s public API rather than
36
+ // reaching into its internals. `unknown` is deliberately ranked lowest:
37
+ // resolving to no signal at all must never look like an "upgrade" over
38
+ // a branch that DID fire a resolver.
39
+ export const ENV_RANK = {
40
+ production: 0,
41
+ staging: 1,
42
+ dev: 2,
43
+ local: 3,
44
+ unknown: 4,
45
+ };
46
+ /**
47
+ * Branch-switch, upgrade-only merge (task 341e024b): a leading `git
48
+ * switch <branch>` / `git checkout <branch>` names the branch the REST
49
+ * of the command actually runs against, the same way a leading `cd
50
+ * <path>` names a different working directory (see `resolverGit`'s own
51
+ * comment at the call site). Unlike that `cd` merge — which fully
52
+ * REPLACES the git context and can move the resolved environment in
53
+ * EITHER direction (G5, pre-existing, out of scope for this task) —
54
+ * this merge is deliberately asymmetric: it only ever pushes the
55
+ * resolved environment to something MORE dangerous, never less.
56
+ *
57
+ * Both the base git context and the switch-target candidate (same repo
58
+ * / sha, only `branch` differs) are run through the SAME
59
+ * `resolveEnvironment` call with IDENTICAL env / kube inputs, so any
60
+ * difference in the result is attributable to the branch alone. The
61
+ * more dangerous of the two (`ENV_RANK` order) wins; a switch AWAY from
62
+ * a production branch never downgrades — when the candidate resolves to
63
+ * something equally or less dangerous, `baseGit` is returned unchanged.
64
+ */
65
+ function applyBranchSwitchUpgrade(event, manifest, cwd, baseGit, branchTarget, inputs, user, host, now) {
66
+ if (branchTarget === null || branchTarget === baseGit.branch)
67
+ return baseGit;
68
+ const candidateGit = { ...baseGit, branch: branchTarget };
69
+ const effectiveNow = now ?? new Date();
70
+ const baseResolution = resolveEnvironment(buildActionEnvelope(event, { cwd, git: baseGit, user, host, now: effectiveNow }), manifest.environments.resolvers, inputs);
71
+ const candidateResolution = resolveEnvironment(buildActionEnvelope(event, { cwd, git: candidateGit, user, host, now: effectiveNow }), manifest.environments.resolvers, inputs);
72
+ return ENV_RANK[candidateResolution.name] < ENV_RANK[baseResolution.name] ? candidateGit : baseGit;
73
+ }
74
+ /**
75
+ * Parse the leading Bash prefix once and merge it into the resolver
76
+ * inputs (see the module header). Pure apart from `resolveGitContext`
77
+ * for a `cd` target.
78
+ */
79
+ export function resolveBashPrefixEnrichment(input) {
80
+ const { event, manifest, cwd, cwdGitContext } = input;
81
+ const riskBashCommand = event.tool_name === "Bash" ? readBashCommand(event.tool_input) : null;
82
+ const bashPrefix = riskBashCommand === null ? null : parseBashPrefix(riskBashCommand);
83
+ const resolverGit = (() => {
84
+ if (bashPrefix === null || bashPrefix.cdTarget === null)
85
+ return cwdGitContext;
86
+ const effective = path.isAbsolute(bashPrefix.cdTarget)
87
+ ? bashPrefix.cdTarget
88
+ : path.resolve(cwd, bashPrefix.cdTarget);
89
+ // resolveGitContext returns empty strings for non-git paths;
90
+ // an empty repo means cd-target was bogus, fall through.
91
+ const candidate = resolveGitContext(effective);
92
+ return candidate.repo.length > 0 ? candidate : cwdGitContext;
93
+ })();
94
+ const env = (() => {
95
+ const base = input.env;
96
+ if (bashPrefix === null || Object.keys(bashPrefix.inlineEnv).length === 0)
97
+ return base;
98
+ // Inline assignments are the operator's explicit override; they
99
+ // win over process.env (matches POSIX `VAR=value cmd` semantics).
100
+ return { ...base, ...bashPrefix.inlineEnv };
101
+ })();
102
+ // A leading `git switch`/`checkout <branch>` (task 341e024b) is
103
+ // merged on top of `resolverGit`, upgrade-only, using the AMBIENT kube
104
+ // state. See `applyBranchSwitchUpgrade`.
105
+ const git = applyBranchSwitchUpgrade(event, manifest, cwd, resolverGit, bashPrefix?.branchTarget ?? null, { env, kubeContext: input.kubeContext, kubeNamespace: input.kubeNamespace }, input.user, input.host, input.now);
106
+ return { riskBashCommand, bashPrefix, git, env };
107
+ }
108
+ //# sourceMappingURL=risk-envelope-enrichment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk-envelope-enrichment.js","sourceRoot":"","sources":["../../../src/cli/policy/risk-envelope-enrichment.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,43 @@ import { Document, parseDocument } from "yaml";
2
2
  export interface AtomicWriteOptions {
3
3
  mode?: number;
4
4
  }
5
- export declare function atomicWriteFile(filePath: string, content: string, options?: AtomicWriteOptions): void;
5
+ /**
6
+ * Open flags for the temp file. The temp file is created by this call or the
7
+ * write fails:
8
+ *
9
+ * - `O_EXCL` (with `O_CREAT`) makes the open fail with `EEXIST` on anything
10
+ * already at the name: a regular file, a FIFO (which a plain `O_WRONLY`
11
+ * open would block on until a reader shows up), or a symlink (which a
12
+ * plain open follows, writing through the link). It never follows a
13
+ * symlink on create and never blocks, so a file planted in the target's
14
+ * directory (an agent-writable reports directory, for one) can neither
15
+ * hang the writer nor redirect the write.
16
+ * - `O_NOFOLLOW` repeats the symlink refusal for the final path component on
17
+ * its own (defence in depth: `O_EXCL | O_CREAT` already refuses a symlink).
18
+ * On a platform that does not define it (Windows), the constant is absent
19
+ * and the flag is dropped; `O_EXCL | O_CREAT` alone then carries the
20
+ * refusal.
21
+ */
22
+ export declare const ATOMIC_WRITE_TEMP_FLAGS: number;
23
+ /** 64 random bits as lowercase hex, so the temp name cannot be predicted and pre-planted. */
24
+ export declare function randomTempSuffix(): string;
25
+ /**
26
+ * Write `content` to `filePath` through a temp file renamed into place.
27
+ * Successful writes are byte-identical to a plain write and keep the
28
+ * requested mode (default 0o644, subject to the umask, as before).
29
+ *
30
+ * The temp file sits next to the target and is opened with
31
+ * {@link ATOMIC_WRITE_TEMP_FLAGS} under a name carrying a random suffix. A
32
+ * file already at that name makes the call throw (`EEXIST`) at once, without
33
+ * touching it: the caller sees an ordinary write failure and keeps its own
34
+ * failure posture. Once the temp file is open, any later failure (write,
35
+ * fsync, close, rename) removes it again; the one path never removed is the
36
+ * one this call did not create.
37
+ *
38
+ * `suffix` is a seam for tests that plant a file at a chosen candidate name;
39
+ * production callers never pass it.
40
+ */
41
+ export declare function atomicWriteFile(filePath: string, content: string, options?: AtomicWriteOptions, suffix?: () => string): void;
6
42
  export declare function withDocument(yamlString: string, mutate: (doc: Document.Parsed) => void): string;
7
43
  export { parseDocument };
8
44
  export type { Document };
@@ -1,20 +1,73 @@
1
+ import * as crypto from "node:crypto";
1
2
  import * as fs from "node:fs";
2
3
  import * as path from "node:path";
3
4
  import { parseDocument } from "yaml";
4
- export function atomicWriteFile(filePath, content, options = {}) {
5
+ /**
6
+ * Open flags for the temp file. The temp file is created by this call or the
7
+ * write fails:
8
+ *
9
+ * - `O_EXCL` (with `O_CREAT`) makes the open fail with `EEXIST` on anything
10
+ * already at the name: a regular file, a FIFO (which a plain `O_WRONLY`
11
+ * open would block on until a reader shows up), or a symlink (which a
12
+ * plain open follows, writing through the link). It never follows a
13
+ * symlink on create and never blocks, so a file planted in the target's
14
+ * directory (an agent-writable reports directory, for one) can neither
15
+ * hang the writer nor redirect the write.
16
+ * - `O_NOFOLLOW` repeats the symlink refusal for the final path component on
17
+ * its own (defence in depth: `O_EXCL | O_CREAT` already refuses a symlink).
18
+ * On a platform that does not define it (Windows), the constant is absent
19
+ * and the flag is dropped; `O_EXCL | O_CREAT` alone then carries the
20
+ * refusal.
21
+ */
22
+ export const ATOMIC_WRITE_TEMP_FLAGS = fs.constants.O_WRONLY |
23
+ fs.constants.O_CREAT |
24
+ fs.constants.O_EXCL |
25
+ (fs.constants.O_NOFOLLOW ?? 0);
26
+ /** 64 random bits as lowercase hex, so the temp name cannot be predicted and pre-planted. */
27
+ export function randomTempSuffix() {
28
+ return crypto.randomBytes(8).toString("hex");
29
+ }
30
+ /**
31
+ * Write `content` to `filePath` through a temp file renamed into place.
32
+ * Successful writes are byte-identical to a plain write and keep the
33
+ * requested mode (default 0o644, subject to the umask, as before).
34
+ *
35
+ * The temp file sits next to the target and is opened with
36
+ * {@link ATOMIC_WRITE_TEMP_FLAGS} under a name carrying a random suffix. A
37
+ * file already at that name makes the call throw (`EEXIST`) at once, without
38
+ * touching it: the caller sees an ordinary write failure and keeps its own
39
+ * failure posture. Once the temp file is open, any later failure (write,
40
+ * fsync, close, rename) removes it again; the one path never removed is the
41
+ * one this call did not create.
42
+ *
43
+ * `suffix` is a seam for tests that plant a file at a chosen candidate name;
44
+ * production callers never pass it.
45
+ */
46
+ export function atomicWriteFile(filePath, content, options = {}, suffix = randomTempSuffix) {
5
47
  const dir = path.dirname(filePath);
6
48
  fs.mkdirSync(dir, { recursive: true });
7
49
  const base = path.basename(filePath);
8
- const tmpPath = path.join(dir, `.${base}.${process.pid}.${Date.now()}.tmp`);
9
- const fd = fs.openSync(tmpPath, "w", options.mode ?? 0o644);
50
+ const tmpPath = path.join(dir, `.${base}.${process.pid}.${suffix()}.tmp`);
51
+ const fd = fs.openSync(tmpPath, ATOMIC_WRITE_TEMP_FLAGS, options.mode ?? 0o644);
10
52
  try {
11
- fs.writeSync(fd, content);
12
- fs.fsyncSync(fd);
53
+ try {
54
+ fs.writeSync(fd, content);
55
+ fs.fsyncSync(fd);
56
+ }
57
+ finally {
58
+ fs.closeSync(fd);
59
+ }
60
+ fs.renameSync(tmpPath, filePath);
13
61
  }
14
- finally {
15
- fs.closeSync(fd);
62
+ catch (err) {
63
+ try {
64
+ fs.unlinkSync(tmpPath);
65
+ }
66
+ catch {
67
+ // Best effort: the original failure is the one worth reporting.
68
+ }
69
+ throw err;
16
70
  }
17
- fs.renameSync(tmpPath, filePath);
18
71
  }
19
72
  export function withDocument(yamlString, mutate) {
20
73
  const doc = parseDocument(yamlString);