@lannguyensi/harness 0.43.0 → 0.44.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 (35) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist/cli/dry-run.js +18 -12
  3. package/dist/cli/dry-run.js.map +1 -1
  4. package/dist/cli/index.js +4 -3
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/cli/init/templates.d.ts +1 -1
  7. package/dist/cli/init/templates.js +6 -4
  8. package/dist/cli/init/templates.js.map +1 -1
  9. package/dist/cli/pack/hook-post-merge-gate.js +43 -25
  10. package/dist/cli/pack/hook-post-merge-gate.js.map +1 -1
  11. package/dist/cli/policy/intercept.js +168 -40
  12. package/dist/cli/policy/intercept.js.map +1 -1
  13. package/dist/policy-packs/builtin/post-merge-gate-runtime.d.ts +90 -10
  14. package/dist/policy-packs/builtin/post-merge-gate-runtime.js +112 -16
  15. package/dist/policy-packs/builtin/post-merge-gate-runtime.js.map +1 -1
  16. package/dist/policy-packs/builtin/post-merge-gate.js +39 -22
  17. package/dist/policy-packs/builtin/post-merge-gate.js.map +1 -1
  18. package/dist/policy-packs/builtin/solution-acceptance-runtime.d.ts +13 -0
  19. package/dist/policy-packs/builtin/solution-acceptance-runtime.js +14 -1
  20. package/dist/policy-packs/builtin/solution-acceptance-runtime.js.map +1 -1
  21. package/dist/runtime/command-normalize.d.ts +317 -4
  22. package/dist/runtime/command-normalize.js +741 -35
  23. package/dist/runtime/command-normalize.js.map +1 -1
  24. package/dist/runtime/index.d.ts +1 -1
  25. package/dist/runtime/index.js +1 -1
  26. package/dist/runtime/index.js.map +1 -1
  27. package/dist/runtime/intercept.d.ts +171 -3
  28. package/dist/runtime/intercept.js +422 -42
  29. package/dist/runtime/intercept.js.map +1 -1
  30. package/dist/runtime/read-only-bash.js +58 -7
  31. package/dist/runtime/read-only-bash.js.map +1 -1
  32. package/dist/runtime/shell-word.d.ts +21 -0
  33. package/dist/runtime/shell-word.js +242 -0
  34. package/dist/runtime/shell-word.js.map +1 -0
  35. package/package.json +3 -1
@@ -55,6 +55,7 @@
55
55
  // harness. If the @lannguyensi/understanding-gate package adds a
56
56
  // parallel classifier in the future, it should mirror this allowlist
57
57
  // verbatim, not diverge.
58
+ import { decodeShellWord } from "./shell-word.js";
58
59
  /**
59
60
  * Single-token read-only binaries. Each accepts arguments without
60
61
  * changing classification: `ls -la /tmp` is still read-only.
@@ -378,7 +379,16 @@ export function isReadOnlyBashPipeline(command) {
378
379
  * dash is a write vector. Conservative: a filename token like `foo.txt`
379
380
  * does not start with `-` and is therefore never matched.
380
381
  */
381
- function isOutputWriteToken(t) {
382
+ function isOutputWriteToken(raw) {
383
+ // Monotone BY CONSTRUCTION (review round 1, decision D3): testing
384
+ // raw OR decoded means decoding can only ADD a match, never remove
385
+ // one. The earlier shape (test the decoded value alone) was measured
386
+ // to LOSE matches here, because these predicates exclude `--` by
387
+ // construction and a token like `-"-out"=x` decodes out of the
388
+ // cluster branch entirely.
389
+ return checkOutputWrite(raw) || checkOutputWrite(decodeShellWord(raw));
390
+ }
391
+ function checkOutputWrite(t) {
382
392
  if (t === "--output" || t.startsWith("--output="))
383
393
  return true;
384
394
  // Short flag or cluster: single leading '-' (not '--'), containing
@@ -389,9 +399,27 @@ function isOutputWriteToken(t) {
389
399
  * Returns true when a token is a write flag for `tree`. tree's only
390
400
  * file-writing vector is the output redirect `-o` / `--output`; it has
391
401
  * no exec or temp-dir flags, so this delegates to `isOutputWriteToken`.
402
+ *
403
+ * NOT MEASURED against a real `tree` (task fdee7d0f): the binary is not
404
+ * installed on the machine this was verified on, so the quoted-spelling
405
+ * family could only be confirmed for `find`, `sort` and `file`. The fix
406
+ * below is applied here on the same reasoning, but this sentence is the
407
+ * honest status rather than a claim of coverage.
392
408
  */
393
- function isTreeWriteToken(t) {
394
- return isOutputWriteToken(t);
409
+ function isTreeWriteToken(raw) {
410
+ // Pass the RAW token through: isOutputWriteToken owns the single decode.
411
+ // Decoding here too would decode TWICE, and decode(decode(x)) goes past
412
+ // bash whenever the first pass leaves a quote behind (`-"'o'"` -> `-'o'`
413
+ // -> `-o`).
414
+ //
415
+ // Measured honestly: since the guards became raw-OR-decoded, re-adding
416
+ // the second decode no longer changes any classification I could find —
417
+ // the raw arm already matches `-"'o'"` (it starts with one `-` and
418
+ // contains `o`). A mutation restoring the double decode leaves the suite
419
+ // green, and that is the structural fix absorbing the mistake rather than
420
+ // a gap in the tests. Single-decode stays because it is what bash does;
421
+ // do not rely on the raw arm to keep covering for it.
422
+ return isOutputWriteToken(raw);
395
423
  }
396
424
  /**
397
425
  * Returns true when a token is a write OR exec flag for `sort`.
@@ -410,7 +438,16 @@ function isTreeWriteToken(t) {
410
438
  * over-block a few benign size values (e.g. `-S2T`); over-blocking a
411
439
  * read is acceptable, under-blocking a write is not.
412
440
  */
413
- function isSortWriteToken(t) {
441
+ function isSortWriteToken(raw) {
442
+ // Monotone BY CONSTRUCTION (review round 1, decision D3): testing
443
+ // raw OR decoded means decoding can only ADD a match, never remove
444
+ // one. The earlier shape (test the decoded value alone) was measured
445
+ // to LOSE matches here, because these predicates exclude `--` by
446
+ // construction and a token like `-"-out"=x` decodes out of the
447
+ // cluster branch entirely.
448
+ return checkSortWrite(raw) || checkSortWrite(decodeShellWord(raw));
449
+ }
450
+ function checkSortWrite(t) {
414
451
  if (t === "--compress-program" || t.startsWith("--compress-program="))
415
452
  return true;
416
453
  if (t === "--temporary-directory" || t.startsWith("--temporary-directory="))
@@ -428,7 +465,16 @@ function isSortWriteToken(t) {
428
465
  * `C` triggers a write. Cluster detection: `-bC`, `-Cb`, and `-bCx`
429
466
  * all contain uppercase `C` after the leading dash and are write vectors.
430
467
  */
431
- function isFileWriteToken(t) {
468
+ function isFileWriteToken(raw) {
469
+ // Monotone BY CONSTRUCTION (review round 1, decision D3): testing
470
+ // raw OR decoded means decoding can only ADD a match, never remove
471
+ // one. The earlier shape (test the decoded value alone) was measured
472
+ // to LOSE matches here, because these predicates exclude `--` by
473
+ // construction and a token like `-"-out"=x` decodes out of the
474
+ // cluster branch entirely.
475
+ return checkFileWrite(raw) || checkFileWrite(decodeShellWord(raw));
476
+ }
477
+ function checkFileWrite(t) {
432
478
  if (t === "--compile" || t.startsWith("--compile="))
433
479
  return true;
434
480
  // Short flag or cluster: single leading '-' (not '--'), containing
@@ -485,7 +531,7 @@ function classifyTokens(tokens) {
485
531
  break;
486
532
  // `env -S` / `--split-string` re-parses a string into a command:
487
533
  // forfeit read-only classification (fail closed).
488
- if (ENV_SPLIT_STRING_FLAGS.test(t))
534
+ if ((ENV_SPLIT_STRING_FLAGS.test(t) || ENV_SPLIT_STRING_FLAGS.test(decodeShellWord(t))))
489
535
  return false;
490
536
  if (t === "--") {
491
537
  i += 1;
@@ -528,7 +574,12 @@ function classifyTokens(tokens) {
528
574
  // write to operator-supplied paths without going through shell
529
575
  // redirection. If any such flag appears, fall through to block.
530
576
  if (bin === "find") {
531
- return !tokens.slice(1).some((t) => FIND_WRITE_FLAGS.has(t));
577
+ // Decode each token first: `-"delete"`, `-'delete'`, `-\delete`,
578
+ // `-$'delete'` and `-de"lete"` are all the single argv entry `-delete`
579
+ // to bash, and all five really deleted while classifying as read-only
580
+ // (task fdee7d0f, measured with a canary file per form). Set membership
581
+ // on the RAW token is what they defeated.
582
+ return !tokens.slice(1).some((t) => (FIND_WRITE_FLAGS.has(t) || FIND_WRITE_FLAGS.has(decodeShellWord(t))));
532
583
  }
533
584
  // `sort` is read-only ONLY when none of its argv tokens are write or
534
585
  // exec flags: `-o`/`--output` (file output), `--compress-program`
@@ -1 +1 @@
1
- {"version":3,"file":"read-only-bash.js","sourceRoot":"","sources":["../../src/runtime/read-only-bash.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"read-only-bash.js","sourceRoot":"","sources":["../../src/runtime/read-only-bash.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Decode one shell WORD to the literal string bash would pass as an argv
3
+ * entry, as far as that is derivable from the text alone.
4
+ *
5
+ * Handles the four run kinds bash concatenates within a single word, in any
6
+ * combination and any number: unquoted (with `\X` escapes), `'single'`
7
+ * (fully literal), `"double"` (backslash escapes a small set only), and
8
+ * `$'ansi-c'` (including `\xHH`, `\NNN`, `\0NNN`, `\uHHHH`, `\UHHHHHHHH`).
9
+ * That concatenation is the point — `-de"lete"`, `-'delete'` and
10
+ * `-$'\x64elete'` are all the single argv entry `-delete`, which is exactly
11
+ * how the measured bypasses hid a write flag from a raw string comparison.
12
+ *
13
+ * Returns the input UNCHANGED when the word cannot be resolved: an
14
+ * unterminated quote, or a truncated escape at end of input. Per the module
15
+ * header's direction rule, callers compare the result against a set of
16
+ * things to REJECT, so falling back to the raw token reproduces today's
17
+ * behaviour instead of inventing one.
18
+ *
19
+ * Never throws.
20
+ */
21
+ export declare function decodeShellWord(word: string): string;
@@ -0,0 +1,242 @@
1
+ // `decodeShellWord` — the shared "what literal value does bash see for this
2
+ // word?" primitive (task `fdee7d0f`).
3
+ //
4
+ // WHY THIS EXISTS: three consumers each carried their own partial model of
5
+ // shell quoting, and the same missing unquoting logic produced a separate
6
+ // bypass in each (`cf3dff51`, `b093911d`, `2dfdf472`). This module is the
7
+ // single source of truth for the decoding half of that; each consumer keeps
8
+ // its own decision about what a decoded value MEANS.
9
+ //
10
+ // DIRECTION RULE (binding, and the reason this module is allowed to exist
11
+ // at all). A hand-written partial model of another language's grammar is a
12
+ // design smell, and one was removed from this codebase on 2026-08-02 for
13
+ // exactly that reason (see the post-merge-gate blocker's
14
+ // `isGateEligibleCommand`). What separates the two is which side of a
15
+ // security boundary the model sits on:
16
+ //
17
+ // - There, the model gated a PERMISSIVE decision: every construct it
18
+ // failed to model became a silent pass-through, i.e. a new bypass.
19
+ // - Here, callers test their predicate on the raw token OR the decoded
20
+ // one and take either match, so decoding can only ADD a match, never
21
+ // remove one. An incomplete decode therefore yields today's behaviour
22
+ // (a detection this codebase already misses), never a new fail-open.
23
+ //
24
+ // That `raw || decoded` shape is load-bearing and must not be "simplified"
25
+ // to testing the decoded value alone. This module shipped once with the
26
+ // simplified form and the guarantee above stated as an ARGUMENT; review
27
+ // measured it false at three of five call sites, because those predicates
28
+ // exclude `--` by construction and a token like `-"-out"=x` decodes out of
29
+ // the branch that used to match it (`sort -"-out"=x` went BLOCKED ->
30
+ // READONLY, artefact-confirmed). Testing both makes the property hold by
31
+ // construction rather than by reasoning.
32
+ //
33
+ // A caller that wants to use this on the permissive side (to EXEMPT
34
+ // something) is outside the rule and must be measured on its own terms.
35
+ // `decodeShellWord` returns the RAW token unchanged for anything it cannot
36
+ // resolve, which keeps that guarantee mechanical rather than aspirational.
37
+ //
38
+ // SCOPE, deliberately narrow: quote removal and escape decoding only. No
39
+ // expansion of any kind — `$VAR`, `$(...)`, backticks, `~`, globs and
40
+ // brace expansion are left verbatim, because their values are not derivable
41
+ // from the command text alone. A word containing them decodes to something
42
+ // that still contains them, which is the honest answer.
43
+ /** Characters a backslash can escape inside a double-quoted run (bash). */
44
+ const DOUBLE_QUOTE_ESCAPABLE = new Set(['$', '`', '"', "\\", "\n"]);
45
+ /** Single-character ANSI-C (`$'...'`) escapes. */
46
+ const ANSI_C_SIMPLE = new Map([
47
+ ["a", "\x07"],
48
+ ["b", "\b"],
49
+ ["e", "\x1b"],
50
+ ["E", "\x1b"],
51
+ ["f", "\f"],
52
+ ["n", "\n"],
53
+ ["r", "\r"],
54
+ ["t", "\t"],
55
+ ["v", "\v"],
56
+ ["\\", "\\"],
57
+ ["'", "'"],
58
+ ['"', '"'],
59
+ ["?", "?"],
60
+ ]);
61
+ /**
62
+ * Decode one shell WORD to the literal string bash would pass as an argv
63
+ * entry, as far as that is derivable from the text alone.
64
+ *
65
+ * Handles the four run kinds bash concatenates within a single word, in any
66
+ * combination and any number: unquoted (with `\X` escapes), `'single'`
67
+ * (fully literal), `"double"` (backslash escapes a small set only), and
68
+ * `$'ansi-c'` (including `\xHH`, `\NNN`, `\0NNN`, `\uHHHH`, `\UHHHHHHHH`).
69
+ * That concatenation is the point — `-de"lete"`, `-'delete'` and
70
+ * `-$'\x64elete'` are all the single argv entry `-delete`, which is exactly
71
+ * how the measured bypasses hid a write flag from a raw string comparison.
72
+ *
73
+ * Returns the input UNCHANGED when the word cannot be resolved: an
74
+ * unterminated quote, or a truncated escape at end of input. Per the module
75
+ * header's direction rule, callers compare the result against a set of
76
+ * things to REJECT, so falling back to the raw token reproduces today's
77
+ * behaviour instead of inventing one.
78
+ *
79
+ * Never throws.
80
+ */
81
+ export function decodeShellWord(word) {
82
+ if (typeof word !== "string" || word.length === 0)
83
+ return typeof word === "string" ? word : "";
84
+ // Fast path: nothing quotable present, so the word is already literal.
85
+ if (!/['"\\]/.test(word))
86
+ return word;
87
+ try {
88
+ const decoded = decodeInner(word);
89
+ return decoded === null ? word : decoded;
90
+ }
91
+ catch {
92
+ return word;
93
+ }
94
+ }
95
+ /** Returns null when the word is unresolvable (caller falls back to raw). */
96
+ function decodeInner(word) {
97
+ let out = "";
98
+ let i = 0;
99
+ while (i < word.length) {
100
+ const ch = word[i];
101
+ if (ch === "'") {
102
+ const end = word.indexOf("'", i + 1);
103
+ if (end === -1)
104
+ return null; // unterminated
105
+ out += word.slice(i + 1, end);
106
+ i = end + 1;
107
+ continue;
108
+ }
109
+ if (ch === '"') {
110
+ const run = readDoubleQuoted(word, i + 1);
111
+ if (run === null)
112
+ return null;
113
+ out += run.value;
114
+ i = run.next;
115
+ continue;
116
+ }
117
+ if (ch === "$" && word[i + 1] === '"') {
118
+ // `$"..."` is locale translation. With no catalog loaded bash returns
119
+ // the contents unchanged with the quotes removed, so the value is the
120
+ // same as a plain double-quoted run. Measured: `printf '%s' -$"delete"`
121
+ // -> `-delete`. Without this branch the `$` was emitted literally and
122
+ // the decode SUCCEEDED with a wrong value, so the raw-token fallback
123
+ // never fired — five artefact-confirmed writes slipped through
124
+ // (review round 1).
125
+ const run = readDoubleQuoted(word, i + 2);
126
+ if (run === null)
127
+ return null;
128
+ out += run.value;
129
+ i = run.next;
130
+ continue;
131
+ }
132
+ if (ch === "$" && word[i + 1] === "'") {
133
+ const run = readAnsiC(word, i + 2);
134
+ if (run === null)
135
+ return null;
136
+ out += run.value;
137
+ i = run.next;
138
+ continue;
139
+ }
140
+ if (ch === "\\") {
141
+ // Outside quotes a backslash escapes ANY next character. A trailing
142
+ // backslash is a line continuation, which a single word cannot carry.
143
+ if (i + 1 >= word.length)
144
+ return null;
145
+ out += word[i + 1];
146
+ i += 2;
147
+ continue;
148
+ }
149
+ out += ch;
150
+ i++;
151
+ }
152
+ return out;
153
+ }
154
+ function readDoubleQuoted(word, start) {
155
+ let out = "";
156
+ let i = start;
157
+ while (i < word.length) {
158
+ const ch = word[i];
159
+ if (ch === '"')
160
+ return { value: out, next: i + 1 };
161
+ if (ch === "\\") {
162
+ const nxt = word[i + 1];
163
+ if (nxt === undefined)
164
+ return null;
165
+ // Inside double quotes a backslash is literal UNLESS it precedes one
166
+ // of the few characters bash lets it escape there.
167
+ if (DOUBLE_QUOTE_ESCAPABLE.has(nxt)) {
168
+ out += nxt;
169
+ i += 2;
170
+ }
171
+ else {
172
+ out += "\\";
173
+ i += 1;
174
+ }
175
+ continue;
176
+ }
177
+ out += ch;
178
+ i++;
179
+ }
180
+ return null; // unterminated
181
+ }
182
+ function readAnsiC(word, start) {
183
+ let out = "";
184
+ let i = start;
185
+ while (i < word.length) {
186
+ const ch = word[i];
187
+ if (ch === "'")
188
+ return { value: out, next: i + 1 };
189
+ if (ch !== "\\") {
190
+ out += ch;
191
+ i++;
192
+ continue;
193
+ }
194
+ const nxt = word[i + 1];
195
+ if (nxt === undefined)
196
+ return null;
197
+ const simple = ANSI_C_SIMPLE.get(nxt);
198
+ if (simple !== undefined) {
199
+ out += simple;
200
+ i += 2;
201
+ continue;
202
+ }
203
+ if (nxt === "x" || nxt === "u" || nxt === "U") {
204
+ // \xHH (1-2 hex), \uHHHH (1-4), \UHHHHHHHH (1-8).
205
+ const max = nxt === "x" ? 2 : nxt === "u" ? 4 : 8;
206
+ let j = i + 2;
207
+ let hex = "";
208
+ while (j < word.length && hex.length < max && /[0-9a-fA-F]/.test(word[j])) {
209
+ hex += word[j];
210
+ j++;
211
+ }
212
+ if (hex.length === 0) {
213
+ // Not a valid escape. Bash keeps the BACKSLASH as well as the
214
+ // character: `printf '%s' $'\xz'` emits `\xz` (3 chars, verified
215
+ // with od -c). An earlier version dropped the backslash.
216
+ out += "\\" + nxt;
217
+ i += 2;
218
+ continue;
219
+ }
220
+ out += String.fromCodePoint(Number.parseInt(hex, 16));
221
+ i = j;
222
+ continue;
223
+ }
224
+ if (/[0-7]/.test(nxt)) {
225
+ // \NNN — up to three octal digits (a leading 0 is one of them).
226
+ let j = i + 1;
227
+ let oct = "";
228
+ while (j < word.length && oct.length < 3 && /[0-7]/.test(word[j])) {
229
+ oct += word[j];
230
+ j++;
231
+ }
232
+ out += String.fromCharCode(Number.parseInt(oct, 8));
233
+ i = j;
234
+ continue;
235
+ }
236
+ // Unrecognised escape: bash keeps the backslash AND the character.
237
+ out += "\\" + nxt;
238
+ i += 2;
239
+ }
240
+ return null; // unterminated
241
+ }
242
+ //# sourceMappingURL=shell-word.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-word.js","sourceRoot":"","sources":["../../src/runtime/shell-word.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lannguyensi/harness",
3
- "version": "0.43.0",
3
+ "version": "0.44.0",
4
4
  "description": "Declarative control plane for agent harnesses — one YAML for grounding, tools, memory, and hooks.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/LanNguyenSi/harness",
@@ -45,6 +45,8 @@
45
45
  "check:duplication": "node scripts/check-duplication.mjs",
46
46
  "check:no-only": "node scripts/check-no-only.mjs",
47
47
  "measure:bash-prefix-parse": "node scripts/measure-bash-prefix-parse.mjs",
48
+ "measure:command-normalize": "node scripts/measure-command-normalize.mjs",
49
+ "measure:additive-attribution-matrix": "node scripts/measure-additive-attribution-matrix.mjs",
48
50
  "prepublishOnly": "npm run build"
49
51
  },
50
52
  "dependencies": {