@lannguyensi/harness 0.47.0 → 0.49.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 +215 -0
- package/dist/cli/doctor/format.js +46 -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 +131 -4
- package/dist/cli/doctor/index.js.map +1 -1
- package/dist/cli/doctor/types.d.ts +91 -3
- package/dist/cli/init/templates.d.ts +34 -1
- package/dist/cli/init/templates.js +72 -2
- package/dist/cli/init/templates.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/policy/intercept.js +59 -9
- package/dist/cli/policy/intercept.js.map +1 -1
- package/dist/cli/validate/checks.d.ts +1 -0
- package/dist/cli/validate/checks.js +185 -9
- package/dist/cli/validate/checks.js.map +1 -1
- package/dist/runtime/bash-prefix-parse.d.ts +12 -1
- package/dist/runtime/bash-prefix-parse.js +2 -2
- package/dist/runtime/bash-prefix-parse.js.map +1 -1
- package/dist/runtime/kubectl-target-parse.d.ts +15 -0
- package/dist/runtime/kubectl-target-parse.js +241 -0
- package/dist/runtime/kubectl-target-parse.js.map +1 -0
- package/package.json +2 -2
|
@@ -987,10 +987,22 @@ risk:
|
|
|
987
987
|
- pattern: 'DROP\\s+TABLE|TRUNCATE\\s+TABLE|DELETE\\s+FROM'
|
|
988
988
|
categories: [destructive, data_loss]
|
|
989
989
|
severity: high
|
|
990
|
-
-
|
|
990
|
+
# Token-based, flag-tolerant: a flag between \`kubectl\` and
|
|
991
|
+
# \`delete\` (e.g. \`kubectl --context=x delete namespace payments\`)
|
|
992
|
+
# must not defeat the match, without matching \`kubectl
|
|
993
|
+
# get\`/\`describe\` and without exponential-backtracking on a long
|
|
994
|
+
# flag run. \`(?:\\s+-\\S+(?:\\s+(?!delete\\b)(?!-)\\S+)?)*\` consumes
|
|
995
|
+
# zero or more \`-\`/\`--\` flag tokens (each optionally taking one
|
|
996
|
+
# following, non-flag, non-"delete" value token), linear in
|
|
997
|
+
# command length. See docs/risk-gate.md for the full rationale
|
|
998
|
+
# and the earlier quadratic-alternation form this replaced.
|
|
999
|
+
- pattern: 'kubectl(?:\\s+-\\S+(?:\\s+(?!delete\\b)(?!-)\\S+)?)*\\s+delete\\s+(namespace|deployment|statefulset|pvc)'
|
|
991
1000
|
categories: [destructive, infrastructure_change]
|
|
992
1001
|
severity: high
|
|
993
|
-
-
|
|
1002
|
+
# Same flag-tolerance treatment for terraform's own \`-chdir=DIR\`
|
|
1003
|
+
# global flag, which sits between the tool name and the
|
|
1004
|
+
# subcommand (\`terraform -chdir=infra destroy\`).
|
|
1005
|
+
- pattern: 'terraform(?:\\s+-\\S+(?:\\s+(?!destroy\\b)(?!-)\\S+)?)*\\s+destroy'
|
|
994
1006
|
categories: [destructive, infrastructure_change]
|
|
995
1007
|
severity: critical
|
|
996
1008
|
|
|
@@ -1047,4 +1059,62 @@ export function shippedOperatorOnlyPolicyNames() {
|
|
|
1047
1059
|
}
|
|
1048
1060
|
return shippedOperatorOnlyCache;
|
|
1049
1061
|
}
|
|
1062
|
+
// Matches the leading `(...)` group of a bash_match regex source string.
|
|
1063
|
+
// Every shipped bash_match opens with the boundary-alternation group and
|
|
1064
|
+
// none of its branches contain a literal `)` (parens inside are always
|
|
1065
|
+
// escaped as `\(`), so a non-greedy scan to the first `)` is exact for
|
|
1066
|
+
// every entry in FULL_TEMPLATE.
|
|
1067
|
+
const BOUNDARY_GROUP_RE = /^\(([^)]*)\)/;
|
|
1068
|
+
/**
|
|
1069
|
+
* Extracts the leading boundary-alternation group from a `bash_match`
|
|
1070
|
+
* regex source string (e.g. `"(^|\\n|;|\\||&|\\()..."` -> `"^|\\n|;|\\||&|\\("`).
|
|
1071
|
+
* Returns `undefined` when the string does not open with a parenthesized
|
|
1072
|
+
* group; defensive only, every shipped template entry does.
|
|
1073
|
+
*
|
|
1074
|
+
* Known limitation: the scan is not escape-aware, so an escaped closing
|
|
1075
|
+
* paren (`\\)`) inside the group would truncate the match early at that
|
|
1076
|
+
* `)` character instead of continuing past it. No shipped FULL_TEMPLATE
|
|
1077
|
+
* boundary contains one today; a future boundary that needs a literal
|
|
1078
|
+
* `)` inside the alternation would need this scan widened first.
|
|
1079
|
+
*/
|
|
1080
|
+
export function extractBashMatchBoundary(bashMatch) {
|
|
1081
|
+
return BOUNDARY_GROUP_RE.exec(bashMatch)?.[1];
|
|
1082
|
+
}
|
|
1083
|
+
/**
|
|
1084
|
+
* Every FULL_TEMPLATE `hooks[]` / `policies[].trigger` entry that
|
|
1085
|
+
* declares a `bash_match`, paired with its boundary-alternation group
|
|
1086
|
+
* (task 037cfb7c). Parsed from FULL_TEMPLATE itself, the same
|
|
1087
|
+
* single-source-of-truth pattern as `shippedOperatorOnlyPolicyNames`
|
|
1088
|
+
* immediately above, so this list can never drift from what
|
|
1089
|
+
* `harness init --template full` actually writes; unlike
|
|
1090
|
+
* `shippedOperatorOnlyPolicyNames`, this one is pinned by its own
|
|
1091
|
+
* fixed-point test in tests/cli/doctor-trigger-boundary-drift.test.ts
|
|
1092
|
+
* (entry count and the literal shipped boundary), not by
|
|
1093
|
+
* tests/cli/init-full-template-parity.test.ts, which does not reference
|
|
1094
|
+
* it. Memoized: the parse is pure and FULL_TEMPLATE is a build constant.
|
|
1095
|
+
*/
|
|
1096
|
+
let shippedBashMatchBoundariesCache;
|
|
1097
|
+
export function shippedBashMatchBoundaries() {
|
|
1098
|
+
if (shippedBashMatchBoundariesCache === undefined) {
|
|
1099
|
+
const manifest = parseManifest(parseYaml(FULL_TEMPLATE));
|
|
1100
|
+
const entries = [];
|
|
1101
|
+
for (const hook of manifest.hooks) {
|
|
1102
|
+
if (!hook.bash_match)
|
|
1103
|
+
continue;
|
|
1104
|
+
const boundary = extractBashMatchBoundary(hook.bash_match);
|
|
1105
|
+
if (boundary !== undefined)
|
|
1106
|
+
entries.push({ level: "hook", name: hook.name, boundary });
|
|
1107
|
+
}
|
|
1108
|
+
for (const policy of manifest.policies) {
|
|
1109
|
+
const bashMatch = policy.trigger.bash_match;
|
|
1110
|
+
if (!bashMatch)
|
|
1111
|
+
continue;
|
|
1112
|
+
const boundary = extractBashMatchBoundary(bashMatch);
|
|
1113
|
+
if (boundary !== undefined)
|
|
1114
|
+
entries.push({ level: "policy", name: policy.name, boundary });
|
|
1115
|
+
}
|
|
1116
|
+
shippedBashMatchBoundariesCache = entries;
|
|
1117
|
+
}
|
|
1118
|
+
return shippedBashMatchBoundariesCache;
|
|
1119
|
+
}
|
|
1050
1120
|
//# sourceMappingURL=templates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/cli/init/templates.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;CAqB/B,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/cli/init/templates.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;CAqB/B,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAq+B5B,CAAC;AAEF,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI7D,MAAM,UAAU,WAAW,CAAC,IAAkB;IAC5C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,aAAa,CAAC;QACvB,KAAK,MAAM;YACT,OAAO,aAAa,CAAC;QACvB,KAAK,MAAM;YACT,OAAO,aAAa,CAAC;QACvB,KAAK,SAAS;YACZ,OAAO,gBAAgB,CAAC;IAC5B,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,IAAI,wBAAuD,CAAC;AAC5D,MAAM,UAAU,8BAA8B;IAC5C,IAAI,wBAAwB,KAAK,SAAS,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;QACzD,wBAAwB,GAAG,QAAQ,CAAC,QAAQ;aACzC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,IAAI,CAAC;aACvC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,wBAAwB,CAAC;AAClC,CAAC;AAsBD,yEAAyE;AACzE,yEAAyE;AACzE,uEAAuE;AACvE,uEAAuE;AACvE,gCAAgC;AAChC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,wBAAwB,CAAC,SAAiB;IACxD,OAAO,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,IAAI,+BAA8E,CAAC;AACnF,MAAM,UAAU,0BAA0B;IACxC,IAAI,+BAA+B,KAAK,SAAS,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;QACzD,MAAM,OAAO,GAA6B,EAAE,CAAC;QAC7C,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,UAAU;gBAAE,SAAS;YAC/B,MAAM,QAAQ,GAAG,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC3D,IAAI,QAAQ,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzF,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;YAC5C,IAAI,CAAC,SAAS;gBAAE,SAAS;YACzB,MAAM,QAAQ,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;YACrD,IAAI,QAAQ,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7F,CAAC;QACD,+BAA+B,GAAG,OAAO,CAAC;IAC5C,CAAC;IACD,OAAO,+BAA+B,CAAC;AACzC,CAAC"}
|
|
@@ -26,7 +26,12 @@
|
|
|
26
26
|
// isTTY guard, which is a legitimately different contract.
|
|
27
27
|
// - hook-solution-acceptance-writeguard.ts: loads no manifest.
|
|
28
28
|
// - hook-stay-in-scope.ts: loads no manifest.
|
|
29
|
-
//
|
|
29
|
+
//
|
|
30
|
+
// hook-codex-stop.ts and hook-codex-user-prompt-submit.ts now also call
|
|
31
|
+
// the pause check (2, `checkHookPause`), on top of the stdin reader (1) and
|
|
32
|
+
// manifest loader (3) they already used (tasks 63fefe3a, 1432e053); they
|
|
33
|
+
// used to be listed here as "no pause check" exceptions. Neither one pulls
|
|
34
|
+
// in 4-6, so "use all of the above" would overstate it.
|
|
30
35
|
//
|
|
31
36
|
// Per-hook decision logic, error envelopes, and early-return shapes stay local
|
|
32
37
|
// to each hook. This module covers structural boilerplate only, not semantics.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-bootstrap.js","sourceRoot":"","sources":["../../../src/cli/pack/hook-bootstrap.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,gEAAgE;AAChE,+BAA+B;AAC/B,EAAE;AACF,8DAA8D;AAC9D,6EAA6E;AAC7E,6DAA6D;AAC7D,2EAA2E;AAC3E,0EAA0E;AAC1E,iDAAiD;AACjD,oEAAoE;AACpE,8CAA8C;AAC9C,4EAA4E;AAC5E,wEAAwE;AACxE,sEAAsE;AACtE,wEAAwE;AACxE,6DAA6D;AAC7D,qEAAqE;AACrE,mEAAmE;AACnE,sEAAsE;AACtE,yBAAyB;AACzB,EAAE;AACF,eAAe;AACf,0EAA0E;AAC1E,+DAA+D;AAC/D,iEAAiE;AACjE,gDAAgD;AAChD,
|
|
1
|
+
{"version":3,"file":"hook-bootstrap.js","sourceRoot":"","sources":["../../../src/cli/pack/hook-bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,10 @@ export interface PackHookCodexStopOptions extends LoaderOptions {
|
|
|
9
9
|
manifest?: Manifest;
|
|
10
10
|
/** Test-injectable clock; defaults to new Date(). */
|
|
11
11
|
now?: Date;
|
|
12
|
+
/** Test-injected generatedDir for the pause-sentinel check; bypasses
|
|
13
|
+
* path resolution when supplied (mirrors `hook-codex-pre-tool-use.ts`
|
|
14
|
+
* / `hook-codex-post-tool-use.ts`). */
|
|
15
|
+
generatedDir?: string;
|
|
12
16
|
}
|
|
13
17
|
export interface ParsedReport {
|
|
14
18
|
interpretation: string;
|
|
@@ -31,7 +31,7 @@ import * as fs from "node:fs";
|
|
|
31
31
|
import * as path from "node:path";
|
|
32
32
|
import { atomicWriteFile } from "../../io/atomic-write.js";
|
|
33
33
|
import { defaultReportsDir } from "../../policy-packs/builtin/understanding-before-execution-runtime.js";
|
|
34
|
-
import { loadManifestOrInjected, pickString, readStdin } from "./hook-bootstrap.js";
|
|
34
|
+
import { checkHookPause, loadManifestOrInjected, pickString, readStdin } from "./hook-bootstrap.js";
|
|
35
35
|
const PACK_NAME = "understanding-before-execution";
|
|
36
36
|
const RUNTIME_TAG = "codex";
|
|
37
37
|
function extractLastAssistantText(env) {
|
|
@@ -257,6 +257,20 @@ export async function runPackHookCodexStopCli(opts = {}) {
|
|
|
257
257
|
catch (err) {
|
|
258
258
|
return allowResult(`harness pack hook codex-stop: stdin read failed (${err.message}), skipping capture.`, stderr);
|
|
259
259
|
}
|
|
260
|
+
// Pause sentinel (task 1432e053, parity with pre-tool-use / post-tool-use /
|
|
261
|
+
// user-prompt-submit), honoured BEFORE stdin JSON parsing (and before
|
|
262
|
+
// manifest load), so an active `harness pause` is honoured and announced
|
|
263
|
+
// even when the stdin payload cannot be parsed at all. This deliberately
|
|
264
|
+
// diverges from `hook-codex-pre-tool-use.ts`, which parses stdin first
|
|
265
|
+
// and checks the pause afterward: pre-tool-use's malformed-JSON path
|
|
266
|
+
// still needs to run (it emits a diagnostic and falls through to allow),
|
|
267
|
+
// while here checking the pause first means an unparsable payload during
|
|
268
|
+
// an active pause never reaches the parse step at all, so the
|
|
269
|
+
// malformed-JSON diagnostic below is intentionally not emitted in that
|
|
270
|
+
// case.
|
|
271
|
+
if (checkHookPause("codex-stop", stderr, opts, opts.generatedDir, opts.now).paused) {
|
|
272
|
+
return allowResult("harness pack hook codex-stop: harness paused, skipping capture.", stderr);
|
|
273
|
+
}
|
|
260
274
|
let envelope = {};
|
|
261
275
|
try {
|
|
262
276
|
envelope = JSON.parse(raw.trim() || "{}");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-codex-stop.js","sourceRoot":"","sources":["../../../src/cli/pack/hook-codex-stop.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hook-codex-stop.js","sourceRoot":"","sources":["../../../src/cli/pack/hook-codex-stop.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,EAAE;AACF,uEAAuE;AACvE,uEAAuE;AACvE,gEAAgE;AAChE,iEAAiE;AACjE,oEAAoE;AACpE,mEAAmE;AACnE,wDAAwD;AACxD,EAAE;AACF,8DAA8D;AAC9D,uDAAuD;AACvD,EAAE;AACF,4DAA4D;AAC5D,4DAA4D;AAC5D,EAAE;AACF,oEAAoE;AACpE,2DAA2D;AAC3D,EAAE;AACF,gEAAgE;AAChE,mEAAmE;AACnE,qEAAqE;AACrE,iEAAiE;AACjE,EAAE;AACF,sDAAsD;AACtD,qCAAqC;AACrC,sEAAsE;AACtE,6BAA6B;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sEAAsE,CAAC;AAGzG,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEpG,MAAM,SAAS,GAAG,gCAAgC,CAAC;AACnD,MAAM,WAAW,GAAG,OAAO,CAAC;AA8C5B,SAAS,wBAAwB,CAAC,GAAiB;IACjD,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACtD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAe,CAAC;QAC1C,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/D,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,OAAO,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oEAAoE;AACpE,qEAAqE;AACrE,YAAY;AACZ,MAAM,MAAM,GAAG;IACb,gBAAgB;IAChB,aAAa;IACb,eAAe;IACf,YAAY;IACZ,OAAO;IACP,kBAAkB;CACV,CAAC;AAGX,MAAM,aAAa,GAA0B,IAAI,GAAG,CAAC,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,CAAC;AAE7F,SAAS,iBAAiB,CAAC,GAAW;IACpC,kEAAkE;IAClE,+DAA+D;IAC/D,yDAAyD;IACzD,MAAM,OAAO,GAAG,GAAG;SAChB,IAAI,EAAE;SACN,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,WAAW,EAAE;SACb,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,eAAe,CAAC;QACrB,KAAK,WAAW;YACd,OAAO,eAAe,CAAC;QACzB,KAAK,YAAY,CAAC;QAClB,KAAK,iBAAiB,CAAC;QACvB,KAAK,YAAY;YACf,OAAO,YAAY,CAAC;QACtB,KAAK,kBAAkB,CAAC;QACxB,KAAK,YAAY,CAAC;QAClB,KAAK,cAAc;YACjB,OAAO,kBAAkB,CAAC;QAC5B;YACE,IAAK,MAA4B,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpD,OAAO,OAAmB,CAAC;YAC7B,CAAC;YACD,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,oDAAoD;AACpD,mDAAmD;AACnD,6CAA6C;AAC7C,6DAA6D;AAC7D,mEAAmE;AACnE,0DAA0D;AAC1D,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAEhC,iEAAiE;IACjE,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACrD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAClD,IAAI,KAAK;YAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAC9C,CAAC;IAED,8DAA8D;IAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC7D,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/C,IAAI,KAAK;YAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;IACjE,CAAC;IAED,uEAAuE;IACvE,qEAAqE;IACrE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACnE,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAChD,IAAI,KAAK;YAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;IAClE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC1C,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,MAAM,GAAG,GAAiB;QACxB,cAAc,EAAE,EAAE;QAClB,WAAW,EAAE,EAAE;QACf,aAAa,EAAE,EAAE;QACjB,UAAU,EAAE,EAAE;QACd,KAAK,EAAE,EAAE;QACT,gBAAgB,EAAE,EAAE;KACrB,CAAC;IACF,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,GAAG,CAAC;IAE/D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,MAAM,GAAoB,IAAI,CAAC;IACnC,IAAI,YAAY,GAAa,EAAE,CAAC;IAEhC,MAAM,WAAW,GAAG,GAAS,EAAE;QAC7B,IAAI,MAAM,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnE,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAClE,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;QACD,YAAY,GAAG,EAAE,CAAC;IACpB,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,MAAM,EAAE,CAAC;YACX,WAAW,EAAE,CAAC;YACd,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;YACtB,IAAI,MAAM,CAAC,UAAU,KAAK,EAAE,EAAE,CAAC;gBAC7B,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9B,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACvC,CAAC;qBAAM,CAAC;oBACN,kEAAkE;oBAClE,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,MAAM;YAAE,SAAS;QAEtB,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;gBACnB,gEAAgE;gBAChE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;oBAAE,WAAW,EAAE,CAAC;gBAC3C,SAAS;YACX,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAClC,CAAC;YACD,gEAAgE;YAChE,2DAA2D;YAC3D,8CAA8C;QAChD,CAAC;IACH,CAAC;IACD,WAAW,EAAE,CAAC;IACd,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,GAAiB,EAAE,KAAe,EAAE,KAAa;IACpE,IAAI,KAAK,KAAK,gBAAgB;QAAE,GAAG,CAAC,cAAc,GAAG,KAAK,CAAC;SACtD,IAAI,KAAK,KAAK,kBAAkB;QAAE,GAAG,CAAC,gBAAgB,GAAG,KAAK,CAAC;AACtE,CAAC;AAED,SAAS,UAAU,CAAC,GAAiB,EAAE,KAAe,EAAE,KAAa;IACnE,IAAI,KAAK,KAAK,aAAa;QAAE,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACpD,IAAI,KAAK,KAAK,eAAe;QAAE,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC7D,IAAI,KAAK,KAAK,YAAY;QAAE,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACvD,IAAI,KAAK,KAAK,OAAO;QAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,CAAe;IAC9C,OAAO,CACL,CAAC,CAAC,cAAc,KAAK,EAAE;QACvB,CAAC,CAAC,gBAAgB,KAAK,EAAE;QACzB,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QACxB,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;QAC1B,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QACvB,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CACnB,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAiB;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAS;IACjC,kDAAkD;IAClD,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACvF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAiB,EAAE,GAAS;IACvD,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,GAAG,KAAK,IAAI,WAAW,IAAI,IAAI,OAAO,CAAC;AAChD,CAAC;AAED,SAAS,eAAe,CACtB,UAAkB,EAClB,QAAgB,EAChB,IAA6B;IAE7B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC/C,eAAe,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,UAAkB,EAAE,MAA6B;IACpE,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;IAChC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAiC,EAAE;IAEnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IAEnC,oEAAoE;IACpE,iEAAiE;IACjE,oDAAoD;IACpD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAChB,oDAAqD,GAAa,CAAC,OAAO,sBAAsB,EAChG,MAAM,CACP,CAAC;IACJ,CAAC;IACD,4EAA4E;IAC5E,sEAAsE;IACtE,yEAAyE;IACzE,yEAAyE;IACzE,uEAAuE;IACvE,qEAAqE;IACrE,yEAAyE;IACzE,yEAAyE;IACzE,8DAA8D;IAC9D,uEAAuE;IACvE,QAAQ;IACR,IAAI,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACnF,OAAO,WAAW,CAChB,iEAAiE,EACjE,MAAM,CACP,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,GAAiB,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,CAAiB,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAChB,0EAA0E,EAC1E,MAAM,CACP,CAAC;IACJ,CAAC;IAED,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,CAAC,EAAE,QAAQ,EAAE,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAChB,uDAAwD,GAAa,CAAC,OAAO,sBAAsB,EACnG,MAAM,CACP,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACxE,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnC,OAAO,WAAW,CAChB,uCAAuC,QAAQ,kCAAkC,EACjF,MAAM,CACP,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GACb,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAChC,EAAE,CAAC;IACL,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACrB,OAAO,WAAW,CAChB,2EAA2E,EAC3E,MAAM,CACP,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtD,OAAO,WAAW,CAChB,qFAAqF,EACrF,MAAM,CACP,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;IACrD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,WAAW,CAChB,mJAAmJ,EACnJ,MAAM,CACP,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,iBAAiB,EAAE,CAAC;IAC1D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,IAAI,GAA4B;QACpC,SAAS;QACT,OAAO,EAAE,WAAW;QACpB,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;QAC5B,cAAc,EAAE,SAAS;QACzB,MAAM;QACN,UAAU,EAAE,WAAW;KACxB,CAAC;IACF,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAChB,yDAA0D,GAAa,CAAC,OAAO,sBAAsB,EACrG,MAAM,CACP,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,kEAAkE,MAAM,6BAA6B,CAAC;IACzH,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;IAChC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AACvE,CAAC"}
|
|
@@ -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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"}
|
|
@@ -10,6 +10,7 @@ import * as path from "node:path";
|
|
|
10
10
|
import { buildActionEnvelope, intercept, isBlockingDecision, recordPolicyDecisionOnSession, resolveEnvironment, resolveGitContext, resolveKubeContext, sanitizeEnvelopeReason, } from "../../runtime/index.js";
|
|
11
11
|
import { resolveGeneratedDir, writePendingApproval } from "../../runtime/pending-approval.js";
|
|
12
12
|
import { parseBashPrefix } from "../../runtime/bash-prefix-parse.js";
|
|
13
|
+
import { parseKubectlTarget } from "../../runtime/kubectl-target-parse.js";
|
|
13
14
|
import { MAX_NORMALIZE_LENGTH, normalizeCommand, normalizeCommandAmpAware, normalizeCommandQuoteAware, segmentViewOf, } from "../../runtime/command-normalize.js";
|
|
14
15
|
import { extractShellCommand, SHELL_ALIASES } from "../../runtime/tool-name-aliases.js";
|
|
15
16
|
import { loadManifest } from "../loader.js";
|
|
@@ -195,6 +196,35 @@ function applyBranchSwitchUpgrade(event, manifest, cwd, baseGit, branchTarget, i
|
|
|
195
196
|
const candidateResolution = resolveEnvironment(buildActionEnvelope(event, { cwd, git: candidateGit, user, host, now: effectiveNow }), manifest.environments.resolvers, inputs);
|
|
196
197
|
return ENV_RANK[candidateResolution.name] < ENV_RANK[baseResolution.name] ? candidateGit : baseGit;
|
|
197
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* Explicit kubectl target, upgrade-only merge (task a7eb1a71): an
|
|
201
|
+
* explicit --context/--namespace/-n on a kubectl command can only push
|
|
202
|
+
* the resolved environment to something MORE dangerous than the
|
|
203
|
+
* ambient kubeconfig alone already gave, never less, mirroring
|
|
204
|
+
* applyBranchSwitchUpgrade exactly (both the ambient-only base and the
|
|
205
|
+
* merged-candidate kube inputs run through the SAME resolveEnvironment
|
|
206
|
+
* call with identical git/env inputs, so ENV_RANK picks the more
|
|
207
|
+
* dangerous of the two). See CHANGELOG.md's `[Unreleased]` entry for
|
|
208
|
+
* the measured downgrade this fixes.
|
|
209
|
+
*/
|
|
210
|
+
function applyKubeTargetUpgrade(event, manifest, cwd, git, ambientKube, kubectlTarget, env, user, host, now) {
|
|
211
|
+
if (kubectlTarget === null)
|
|
212
|
+
return ambientKube;
|
|
213
|
+
const candidateKube = {
|
|
214
|
+
context: kubectlTarget.context ?? ambientKube.context,
|
|
215
|
+
namespace: kubectlTarget.namespace ?? ambientKube.namespace,
|
|
216
|
+
};
|
|
217
|
+
if (candidateKube.context === ambientKube.context &&
|
|
218
|
+
candidateKube.namespace === ambientKube.namespace) {
|
|
219
|
+
return ambientKube;
|
|
220
|
+
}
|
|
221
|
+
const effectiveNow = now ?? new Date();
|
|
222
|
+
const baseResolution = resolveEnvironment(buildActionEnvelope(event, { cwd, git, user, host, now: effectiveNow }), manifest.environments.resolvers, { env, kubeContext: ambientKube.context, kubeNamespace: ambientKube.namespace });
|
|
223
|
+
const candidateResolution = resolveEnvironment(buildActionEnvelope(event, { cwd, git, user, host, now: effectiveNow }), manifest.environments.resolvers, { env, kubeContext: candidateKube.context, kubeNamespace: candidateKube.namespace });
|
|
224
|
+
return ENV_RANK[candidateResolution.name] < ENV_RANK[baseResolution.name]
|
|
225
|
+
? candidateKube
|
|
226
|
+
: ambientKube;
|
|
227
|
+
}
|
|
198
228
|
/**
|
|
199
229
|
* Real grounding-mcp-backed ledger client. Exported for testing: the
|
|
200
230
|
* `record` adapter's failure-surfacing path is exercised against a
|
|
@@ -813,12 +843,19 @@ export async function runInterceptCli(opts = {}) {
|
|
|
813
843
|
// `resolverGit` itself — a switch away from a production branch can
|
|
814
844
|
// never downgrade what `resolverGit` (cwd- or cd-based) already
|
|
815
845
|
// resolved.
|
|
816
|
-
const
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
846
|
+
const riskBashCommand = event.tool_name === "Bash" ? readBashCommand(event.tool_input) : null;
|
|
847
|
+
const bashPrefix = riskBashCommand === null ? null : parseBashPrefix(riskBashCommand);
|
|
848
|
+
// Explicit `--context`/`--namespace`/`-n` on a `kubectl ...`
|
|
849
|
+
// invocation (task a7eb1a71). Fed the REMAINDER after `bashPrefix`
|
|
850
|
+
// consumed a leading `cd <path> &&` / `VAR=value` / `git switch
|
|
851
|
+
// <branch> &&` prefix, not the raw command, so a wrapped invocation
|
|
852
|
+
// like `cd /tmp && kubectl ... --context x` is still covered; see
|
|
853
|
+
// `parseKubectlTarget`'s own doc comment for the narrow,
|
|
854
|
+
// command-head-anchored scope this is otherwise kept to, and for
|
|
855
|
+
// the forms still NOT unwrapped (sudo/time/env wrappers, a kubectl
|
|
856
|
+
// that is not the first chained segment, a piped kubectl).
|
|
857
|
+
const kubectlSubject = riskBashCommand === null ? null : riskBashCommand.slice(bashPrefix?.remainderStart ?? 0);
|
|
858
|
+
const kubectlTarget = kubectlSubject === null ? null : parseKubectlTarget(kubectlSubject);
|
|
822
859
|
const resolverGit = (() => {
|
|
823
860
|
if (bashPrefix === null || bashPrefix.cdTarget === null)
|
|
824
861
|
return cwdGitContext;
|
|
@@ -841,18 +878,31 @@ export async function runInterceptCli(opts = {}) {
|
|
|
841
878
|
const riskUser = safeOs(() => os.userInfo().username);
|
|
842
879
|
const riskHost = safeOs(() => os.hostname());
|
|
843
880
|
// A leading `git switch`/`checkout <branch>` (task 341e024b) is
|
|
844
|
-
// merged on top of `resolverGit` above
|
|
881
|
+
// merged on top of `resolverGit` above, upgrade-only, using the
|
|
882
|
+
// AMBIENT kube state (`kube` from `resolveKubeContext()` / the
|
|
883
|
+
// `opts.kubeContext`/`opts.kubeNamespace` test override), unaffected
|
|
884
|
+
// by the kubectl-target merge below. See
|
|
845
885
|
// `applyBranchSwitchUpgrade`'s own doc comment for why this one is
|
|
846
886
|
// NOT a straight replacement the way the `cd` merge is.
|
|
847
887
|
const gitForRisk = applyBranchSwitchUpgrade(event, manifest, cwd, resolverGit, bashPrefix?.branchTarget ?? null, { env: resolverEnv, kubeContext: kube.context, kubeNamespace: kube.namespace }, riskUser, riskHost, opts.now);
|
|
888
|
+
// CONFLICT PRIORITY (task a7eb1a71): an explicit kubectl
|
|
889
|
+
// --context/--namespace/-n is merged on top of the AMBIENT kube
|
|
890
|
+
// state (`kube`), on top of `gitForRisk` above (the git context
|
|
891
|
+
// AFTER the branch-switch upgrade), upgrade-only, exactly the same
|
|
892
|
+
// asymmetric shape the branch-switch merge itself uses. Command
|
|
893
|
+
// text can only raise the resolved environment toward production,
|
|
894
|
+
// never lower an already-resolved production; see
|
|
895
|
+
// `applyKubeTargetUpgrade`'s own doc comment for the measured
|
|
896
|
+
// downgrade this fixes.
|
|
897
|
+
const kubeForRisk = applyKubeTargetUpgrade(event, manifest, cwd, gitForRisk, { context: kube.context, namespace: kube.namespace }, kubectlTarget, resolverEnv, riskUser, riskHost, opts.now);
|
|
848
898
|
riskContext = {
|
|
849
899
|
git: gitForRisk,
|
|
850
900
|
cwd,
|
|
851
901
|
user: riskUser,
|
|
852
902
|
host: riskHost,
|
|
853
903
|
env: resolverEnv,
|
|
854
|
-
kubeContext:
|
|
855
|
-
kubeNamespace:
|
|
904
|
+
kubeContext: kubeForRisk.context,
|
|
905
|
+
kubeNamespace: kubeForRisk.namespace,
|
|
856
906
|
};
|
|
857
907
|
}
|
|
858
908
|
let result;
|