audit-tools 0.55.10 → 0.55.12

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 (52) hide show
  1. package/dist/audit/extractors/analyzers/css.d.ts.map +1 -1
  2. package/dist/audit/extractors/analyzers/css.js +2 -30
  3. package/dist/audit/extractors/analyzers/css.js.map +1 -1
  4. package/dist/audit/extractors/analyzers/html.d.ts.map +1 -1
  5. package/dist/audit/extractors/analyzers/html.js +2 -30
  6. package/dist/audit/extractors/analyzers/html.js.map +1 -1
  7. package/dist/audit/extractors/analyzers/python.d.ts.map +1 -1
  8. package/dist/audit/extractors/analyzers/python.js +9 -34
  9. package/dist/audit/extractors/analyzers/python.js.map +1 -1
  10. package/dist/audit/extractors/analyzers/treeSitterBatch.d.ts +6 -0
  11. package/dist/audit/extractors/analyzers/treeSitterBatch.d.ts.map +1 -0
  12. package/dist/audit/extractors/analyzers/treeSitterBatch.js +38 -0
  13. package/dist/audit/extractors/analyzers/treeSitterBatch.js.map +1 -0
  14. package/dist/audit/extractors/graph.d.ts.map +1 -1
  15. package/dist/audit/extractors/graph.js +9 -7
  16. package/dist/audit/extractors/graph.js.map +1 -1
  17. package/dist/audit/extractors/graphPathIndex.d.ts +8 -0
  18. package/dist/audit/extractors/graphPathIndex.d.ts.map +1 -0
  19. package/dist/audit/extractors/graphPathIndex.js +47 -0
  20. package/dist/audit/extractors/graphPathIndex.js.map +1 -0
  21. package/dist/audit/extractors/graphPythonImports.d.ts +5 -4
  22. package/dist/audit/extractors/graphPythonImports.d.ts.map +1 -1
  23. package/dist/audit/extractors/graphPythonImports.js +15 -27
  24. package/dist/audit/extractors/graphPythonImports.js.map +1 -1
  25. package/dist/audit/extractors/graphRouteSources.d.ts +2 -1
  26. package/dist/audit/extractors/graphRouteSources.d.ts.map +1 -1
  27. package/dist/audit/extractors/graphRouteSources.js +5 -4
  28. package/dist/audit/extractors/graphRouteSources.js.map +1 -1
  29. package/dist/audit/extractors/graphSuites.d.ts +2 -1
  30. package/dist/audit/extractors/graphSuites.d.ts.map +1 -1
  31. package/dist/audit/extractors/graphSuites.js +6 -7
  32. package/dist/audit/extractors/graphSuites.js.map +1 -1
  33. package/dist/audit/orchestrator/flowPlanning.d.ts +2 -6
  34. package/dist/audit/orchestrator/flowPlanning.d.ts.map +1 -1
  35. package/dist/audit/orchestrator/flowPlanning.js +2 -9
  36. package/dist/audit/orchestrator/flowPlanning.js.map +1 -1
  37. package/dist/audit/orchestrator/taskBuilder.js +1 -1
  38. package/dist/audit/orchestrator/taskBuilder.js.map +1 -1
  39. package/dist/shared/decompose/contentCoherence.d.ts.map +1 -1
  40. package/dist/shared/decompose/contentCoherence.js +25 -9
  41. package/dist/shared/decompose/contentCoherence.js.map +1 -1
  42. package/dist/shared/io/schemaVersion.d.ts.map +1 -1
  43. package/dist/shared/io/schemaVersion.js +3 -1
  44. package/dist/shared/io/schemaVersion.js.map +1 -1
  45. package/dist/shared/tooling/allowlistedExec.d.ts +7 -7
  46. package/dist/shared/tooling/allowlistedExec.d.ts.map +1 -1
  47. package/dist/shared/tooling/allowlistedExec.js +222 -64
  48. package/dist/shared/tooling/allowlistedExec.js.map +1 -1
  49. package/package.json +1 -1
  50. package/wrapper/audit-code-wrapper-io.mjs +12 -107
  51. package/wrapper/remediate-code-wrapper-io.mjs +12 -107
  52. package/wrapper/shared-wrapper-io.mjs +109 -0
@@ -195,23 +195,35 @@ function normalizeRelationshipEvidence(value, itemIds) {
195
195
  return evidenceByPair;
196
196
  }
197
197
  function intersects(left, right) {
198
- const values = new Set(left);
199
- return right.some((entry) => values.has(entry));
198
+ const smaller = left.size <= right.size ? left : right;
199
+ const larger = smaller === left ? right : left;
200
+ for (const entry of smaller) {
201
+ if (larger.has(entry))
202
+ return true;
203
+ }
204
+ return false;
200
205
  }
201
206
  function parentDirectory(path) {
202
207
  const slash = path.lastIndexOf("/");
203
208
  return slash < 0 ? "" : path.slice(0, slash);
204
209
  }
210
+ function indexEvidence(item) {
211
+ return {
212
+ filePaths: new Set(item.file_paths),
213
+ directories: new Set(item.file_paths.map(parentDirectory)),
214
+ unitIds: new Set(item.unit_ids),
215
+ tags: new Set(item.tags),
216
+ criticalFlowIds: new Set(item.critical_flow_ids ?? []),
217
+ };
218
+ }
205
219
  function directEvidence(left, right) {
206
- const leftDirectories = left.file_paths.map(parentDirectory);
207
- const rightDirectories = right.file_paths.map(parentDirectory);
208
220
  return {
209
221
  call_import_reference_adjacency: false,
210
- same_directory: intersects(leftDirectories, rightDirectories),
211
- shared_critical_flow: intersects(left.critical_flow_ids ?? [], right.critical_flow_ids ?? []),
212
- shared_file: intersects(left.file_paths, right.file_paths),
222
+ same_directory: intersects(left.directories, right.directories),
223
+ shared_critical_flow: intersects(left.criticalFlowIds, right.criticalFlowIds),
224
+ shared_file: intersects(left.filePaths, right.filePaths),
213
225
  shared_semantic_tag_or_same_lens: intersects(left.tags, right.tags),
214
- shared_unit: intersects(left.unit_ids, right.unit_ids),
226
+ shared_unit: intersects(left.unitIds, right.unitIds),
215
227
  };
216
228
  }
217
229
  function scoreEvidence(evidence) {
@@ -304,6 +316,10 @@ export function buildContentCoherenceTrace(input, policy) {
304
316
  const normalizedItems = normalizeItems(input.items);
305
317
  const itemIds = new Set(normalizedItems.map((item) => item.id));
306
318
  const relationshipEvidence = normalizeRelationshipEvidence(input.relationships, itemIds);
319
+ // sites-pinned: tests/shared/content-coherence.test.ts
320
+ // Index only after item and relationship validation, preserving first errors.
321
+ // Each item's five sets and parent directories are built once per invocation.
322
+ const evidenceIndexes = normalizedItems.map(indexEvidence);
307
323
  // Only ELIGIBLE pairs are retained. The ineligible majority (82% of pairs on
308
324
  // the 3,194-finding dogfood run) can affect nothing downstream — union-find
309
325
  // consumes eligibility alone — so materializing the full O(N²) pair layer was
@@ -315,7 +331,7 @@ export function buildContentCoherenceTrace(input, policy) {
315
331
  for (let rightIndex = leftIndex + 1; rightIndex < normalizedItems.length; rightIndex += 1) {
316
332
  const left = normalizedItems[leftIndex];
317
333
  const right = normalizedItems[rightIndex];
318
- const evidence = directEvidence(left, right);
334
+ const evidence = directEvidence(evidenceIndexes[leftIndex], evidenceIndexes[rightIndex]);
319
335
  // Captured BEFORE relationship evidence is folded in — the conjunctive
320
336
  // policy must read only what the items themselves assert.
321
337
  const direct = {
@@ -1 +1 @@
1
- {"version":3,"file":"contentCoherence.js","sourceRoot":"","sources":["../../../src/shared/decompose/contentCoherence.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contentCoherence.js","sourceRoot":"","sources":["../../../src/shared/decompose/contentCoherence.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"schemaVersion.d.ts","sourceRoot":"","sources":["../../../src/shared/io/schemaVersion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH;;;;GAIG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;aAEjC,YAAY,EAAE,MAAM;aACpB,QAAQ,EAAE,MAAM;aAChB,MAAM,EAAE,MAAM;gBAFd,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM;CASjC;AAsCD;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAAC,CAAC,SAAS,MAAM,EAC7D,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,EAC3B,QAAQ,EAAE,MAAM,GACf,CAAC,GAAG,SAAS,CAGf;AAED;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAChC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,IAAI,CASN"}
1
+ {"version":3,"file":"schemaVersion.d.ts","sourceRoot":"","sources":["../../../src/shared/io/schemaVersion.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH;;;;GAIG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;aAEjC,YAAY,EAAE,MAAM;aACpB,QAAQ,EAAE,MAAM;aAChB,MAAM,EAAE,MAAM;gBAFd,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM;CAUjC;AAsCD;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAAC,CAAC,SAAS,MAAM,EAC7D,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,EAC3B,QAAQ,EAAE,MAAM,GACf,CAAC,GAAG,SAAS,CAGf;AAED;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAChC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,IAAI,CASN"}
@@ -1,3 +1,4 @@
1
+ // sites-pinned: tests/shared/schema-version-read-policy.test.ts, tests/remediate/store.test.ts
1
2
  /**
2
3
  * Schema-version read policy — the two directions, named so the choice is
3
4
  * unmissable at the call site.
@@ -41,7 +42,8 @@ export class SchemaVersionMismatchError extends Error {
41
42
  constructor(artifactName, expected, actual) {
42
43
  super(`Artifact "${artifactName}" has schema_version "${actual}" but expected "${expected}". ` +
43
44
  `This likely means the artifact was produced by an incompatible version of this tool. ` +
44
- `Delete ${artifactName} from the artifacts directory to regenerate it.`);
45
+ `Preserve this artifact; do not delete it. Back up the run before recovery, ` +
46
+ `then use a compatible tool version or an explicitly supported migration.`);
45
47
  this.artifactName = artifactName;
46
48
  this.expected = expected;
47
49
  this.actual = actual;
@@ -1 +1 @@
1
- {"version":3,"file":"schemaVersion.js","sourceRoot":"","sources":["../../../src/shared/io/schemaVersion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH;;;;GAIG;AACH,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAEjC;IACA;IACA;IAHlB,YACkB,YAAoB,EACpB,QAAgB,EAChB,MAAc;QAE9B,KAAK,CACH,aAAa,YAAY,yBAAyB,MAAM,mBAAmB,QAAQ,KAAK;YACtF,uFAAuF;YACvF,UAAU,YAAY,iDAAiD,CAC1E,CAAC;QARc,iBAAY,GAAZ,YAAY,CAAQ;QACpB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,WAAM,GAAN,MAAM,CAAQ;QAO9B,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,8EAA8E;AAC9E,6EAA6E;AAC7E,mEAAmE;AACnE,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,gFAAgF;AAChF,+EAA+E;AAC/E,gFAAgF;AAChF,uEAAuE;AACvE,6EAA6E;AAC7E,yEAAyE;AACzE,qDAAqD;AACrD,EAAE;AACF,gFAAgF;AAChF,4EAA4E;AAC5E,+EAA+E;AAC/E,gFAAgF;AAChF,2EAA2E;AAC3E,gFAAgF;AAChF,gFAAgF;AAChF,8EAA8E;AAC9E,gEAAgE;AAChE,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,IAAI,gBAAgB,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,cAAc,CAAC;IAC7D,IAAI,kBAAkB,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,gBAAgB,CAAC;IACjE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/E,MAAM,KAAK,GAAG,OAAkC,CAAC;QACjD,IAAI,gBAAgB,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,cAAc,CAAC;QAC3D,IAAI,kBAAkB,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,gBAAgB,CAAC;IACjE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,8BAA8B,CAC5C,KAA2B,EAC3B,QAAgB;IAEhB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5D,OAAO,cAAc,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAChE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,4BAA4B,CAC1C,KAAgC,EAChC,YAAoB,EACpB,QAAgB;IAEhB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO;IAClD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,0BAA0B,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,IAAI,0BAA0B,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"schemaVersion.js","sourceRoot":"","sources":["../../../src/shared/io/schemaVersion.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH;;;;GAIG;AACH,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAEjC;IACA;IACA;IAHlB,YACkB,YAAoB,EACpB,QAAgB,EAChB,MAAc;QAE9B,KAAK,CACH,aAAa,YAAY,yBAAyB,MAAM,mBAAmB,QAAQ,KAAK;YACtF,uFAAuF;YACvF,6EAA6E;YAC7E,0EAA0E,CAC7E,CAAC;QATc,iBAAY,GAAZ,YAAY,CAAQ;QACpB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,WAAM,GAAN,MAAM,CAAQ;QAQ9B,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,8EAA8E;AAC9E,6EAA6E;AAC7E,mEAAmE;AACnE,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,gFAAgF;AAChF,+EAA+E;AAC/E,gFAAgF;AAChF,uEAAuE;AACvE,6EAA6E;AAC7E,yEAAyE;AACzE,qDAAqD;AACrD,EAAE;AACF,gFAAgF;AAChF,4EAA4E;AAC5E,+EAA+E;AAC/E,gFAAgF;AAChF,2EAA2E;AAC3E,gFAAgF;AAChF,gFAAgF;AAChF,8EAA8E;AAC9E,gEAAgE;AAChE,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,IAAI,gBAAgB,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,cAAc,CAAC;IAC7D,IAAI,kBAAkB,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,gBAAgB,CAAC;IACjE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/E,MAAM,KAAK,GAAG,OAAkC,CAAC;QACjD,IAAI,gBAAgB,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,cAAc,CAAC;QAC3D,IAAI,kBAAkB,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,gBAAgB,CAAC;IACjE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,8BAA8B,CAC5C,KAA2B,EAC3B,QAAgB;IAEhB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5D,OAAO,cAAc,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAChE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,4BAA4B,CAC1C,KAAgC,EAChC,YAAoB,EACpB,QAAgB;IAEhB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO;IAClD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,0BAA0B,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,IAAI,0BAA0B,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACvE,CAAC;AACH,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { type OwnedProcessCleanup } from "./ownedProcessLifecycle.js";
2
2
  /** Default per-anchor wall-clock budget; a slower command is killed and inconclusive. */
3
3
  export declare const ALLOWLISTED_EXEC_TIMEOUT_MS = 60000;
4
- /** Read-only git subcommands an anchor may run (no checkout/reset/clean/push/…). */
4
+ /** Read-only Git subcommands, derived from the grammar used for admission. */
5
5
  export declare const GIT_READONLY_SUBCOMMANDS: ReadonlySet<string>;
6
6
  /**
7
7
  * The set of executables the runner will auto-run, for callers that want to
@@ -14,7 +14,7 @@ export declare function executableBaseName(token: string): string;
14
14
  * The single authority for what the tool will auto-run on the model's behalf:
15
15
  * `command[0]` must be an allowlisted inspection-only executable, AND every
16
16
  * argument must satisfy that executable's default-deny argument policy (git:
17
- * read-only subcommand + no write/reconfigure option). Anything else → false.
17
+ * subcommand-specific grammar). Anything else → false.
18
18
  *
19
19
  * CRIT ARC-a06a3945: argument validation is the point — an allowed executable
20
20
  * carrying a code-exec/file-write flag (`rg --pre`, `ast-grep --rewrite`,
@@ -41,7 +41,7 @@ export interface AllowlistedExecOutcome {
41
41
  * True when the internal allowlist gate refused `command` BEFORE any spawn
42
42
  * was attempted (`isAllowedAnchorCommand` returned false) — a structured
43
43
  * refusal, never a spawn, never a throw. Distinct from `spawn_error` (which
44
- * means a spawn WAS attempted and the OS failed to launch it): a refusal
44
+ * means trusted resolution or launching failed): a refusal
45
45
  * never touches the child_process API at all. Absent (not `false`) on every
46
46
  * outcome that reached a real spawn attempt.
47
47
  */
@@ -53,10 +53,10 @@ export type AllowlistedExecRunner = (command: string[], cwd: string, timeoutMs:
53
53
  /**
54
54
  * Spawn an allowlisted read-only command argv-only (never a shell), capturing
55
55
  * combined stdout+stderr (bounded). Strips the host-signalling env
56
- * (`stripAuditToolsControlEnv`), resolves the platform-correct argv via the shared
57
- * `resolveExecArgv`, and kills a command that exceeds `timeoutMs`
58
- * (SIGTERM→SIGKILL). The single runner both orchestrators use for the grounding
59
- * anchor pass.
56
+ * (`stripAuditToolsControlEnv`), resolves a trusted native executable outside
57
+ * the inspected worktree and caller cwd, and kills commands exceeding `timeoutMs`
58
+ * with bounded owned-process cleanup. This library entry point is shared by
59
+ * callers of the exported inspection API.
60
60
  *
61
61
  * INTERNAL GATE (invariants[2]): enforces {@link isAllowedAnchorCommand} on
62
62
  * itself, unconditionally, before ever spawning — `isAllowedAnchorCommand` is
@@ -1 +1 @@
1
- {"version":3,"file":"allowlistedExec.d.ts","sourceRoot":"","sources":["../../../src/shared/tooling/allowlistedExec.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAmD,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEvH,yFAAyF;AACzF,eAAO,MAAM,2BAA2B,QAAS,CAAC;AA6IlD,oFAAoF;AACpF,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAUvD,CAAC;AAkBH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAG/C,CAAC;AAEH,qFAAqF;AACrF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQxD;AA8DD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CASjE;AAED,iFAAiF;AACjF,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oFAAoF;IACpF,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED,MAAM,MAAM,qBAAqB,GAAG,CAClC,OAAO,EAAE,MAAM,EAAE,EACjB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,KACd,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,6BAA6B,EAAE,qBAkF3C,CAAC"}
1
+ {"version":3,"file":"allowlistedExec.d.ts","sourceRoot":"","sources":["../../../src/shared/tooling/allowlistedExec.ts"],"names":[],"mappings":"AAoCA,OAAO,EAAmD,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEvH,yFAAyF;AACzF,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAiLlD,8EAA8E;AAC9E,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAAgC,CAAC;AAE1F;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAG/C,CAAC;AAEH,qFAAqF;AACrF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQxD;AAsFD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAYjE;AAwFD,iFAAiF;AACjF,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oFAAoF;IACpF,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED,MAAM,MAAM,qBAAqB,GAAG,CAClC,OAAO,EAAE,MAAM,EAAE,EACjB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,KACd,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,6BAA6B,EAAE,qBA4F3C,CAAC"}
@@ -4,13 +4,12 @@
4
4
  * allowlist — single source for both orchestrators (drift-plan E2; CRIT
5
5
  * ARC-a06a3945).
6
6
  *
7
- * The auditor's executable-anchor pass (S7 tier-2) runs *model-authored* commands
8
- * at ingest to confirm/refute behavior claims. That is a trust surface: the tool
9
- * spawns whatever the model wrote. The earlier guard checked only `command[0]`
10
- * (the executable) against an allowlist and waved every argument through, so
11
- * `rg --pre <cmd>` (preprocessor exec), `rg --search-zip`, `ast-grep --rewrite`
12
- * (file write), a non-read-only `git` option, etc. slipped past — arbitrary
13
- * code-exec / file-writes at ingest.
7
+ * Exported inspection-command library boundary. There are currently no in-tree
8
+ * production callers. Admission rejects paths and flags outside declared policies;
9
+ * execution resolves a trusted native identity outside the inspected worktree
10
+ * and caller cwd. Git and ripgrep receive fixed configuration protections.
11
+ * Other tools retain their existing argument policies; this is no general
12
+ * sandbox or claim about Madge configuration trust.
14
13
  *
15
14
  * This module replaces that denylist posture with a **default-deny allowlist of
16
15
  * arguments**: each allowed executable declares the exact set of flags it may
@@ -22,14 +21,19 @@
22
21
  *
23
22
  * SAFETY of the runner: commands run only via `runAllowlistedReadOnlyCommand`,
24
23
  * which spawns argv-only (never a shell), under a timeout, with the
25
- * wrapper-only control env stripped (`stripAuditToolsControlEnv`), platform-resolved via the
26
- * shared `resolveExecArgv`, and SIGTERM→SIGKILL on timeout. The runner ENFORCES
24
+ * wrapper-only control env stripped (`stripAuditToolsControlEnv`), a trusted
25
+ * native executable identity, and bounded owned-process cleanup. It ENFORCES
27
26
  * `isAllowedAnchorCommand` on itself, unconditionally, before ever spawning
28
27
  * (invariants[2]) — a caller-side pre-check is only an OPTIONAL fast path,
29
28
  * never the sole guarantee: correctness must not rest on every call site
30
29
  * remembering to gate first.
31
30
  */
32
- import { resolveExecArgv, stripAuditToolsControlEnv } from "./exec.js";
31
+ import { accessSync, constants, existsSync, realpathSync, statSync } from "node:fs";
32
+ import { delimiter, dirname, isAbsolute, join, resolve } from "node:path";
33
+ import { devNull } from "node:os";
34
+ import { stripAuditToolsControlEnv } from "./exec.js";
35
+ import { resolveExecutableFile } from "./resolveExecutable.js";
36
+ import { resolveWithinRoot } from "../io/pathContainment.js";
33
37
  import { beginOwnedProcessTermination, spawnOwnedProcess } from "./ownedProcessLifecycle.js";
34
38
  /** Default per-anchor wall-clock budget; a slower command is killed and inconclusive. */
35
39
  export const ALLOWLISTED_EXEC_TIMEOUT_MS = 60_000;
@@ -37,9 +41,10 @@ export const ALLOWLISTED_EXEC_TIMEOUT_MS = 60_000;
37
41
  const MAX_CAPTURED_OUTPUT = 256 * 1024;
38
42
  /**
39
43
  * The inspection-only executables a model-authored anchor may invoke, each with
40
- * the explicit set of flags it may carry. Every listed flag is read-only: it
41
- * cannot write a file, execute a sub-process/preprocessor, or decompress
42
- * arbitrary input. Deliberately ABSENT (so default-deny refuses them):
44
+ * the explicit set of flags it may carry. These historical policies do not
45
+ * establish configuration/subcommand safety for every analyzer: Madge config
46
+ * modules and ast-grep positional subcommands/config discovery remain separate
47
+ * review scopes. Deliberately ABSENT (so default-deny refuses them):
43
48
  * - ripgrep: --pre / --pre-glob (run a preprocessor), --search-zip / -z
44
49
  * (decompress), --hostname-bin, -o is fine (only-matching) but
45
50
  * --files-from style file reads are omitted out of caution.
@@ -83,7 +88,7 @@ const ARG_POLICIES = new Map([
83
88
  "--hidden", "--no-ignore", "--color", "--colors", "-H", "--with-filename",
84
89
  "--no-filename", "--no-heading", "--heading", "-U", "--multiline",
85
90
  "--multiline-dotall", "-P", "--pcre2", "--json", "--vimgrep", "-0",
86
- "--null", "-m", "--max-count", "--max-depth", "--maxdepth",
91
+ "--null", "-m", "--max-count", "--max-depth", "--maxdepth", "--no-config",
87
92
  ]),
88
93
  allowPositionals: true,
89
94
  },
@@ -103,7 +108,7 @@ const ARG_POLICIES = new Map([
103
108
  "--hidden", "--no-ignore", "--color", "--colors", "-H", "--with-filename",
104
109
  "--no-filename", "--no-heading", "--heading", "-U", "--multiline",
105
110
  "--multiline-dotall", "-P", "--pcre2", "--json", "--vimgrep", "-0",
106
- "--null", "-m", "--max-count", "--max-depth", "--maxdepth",
111
+ "--null", "-m", "--max-count", "--max-depth", "--maxdepth", "--no-config",
107
112
  ]),
108
113
  allowPositionals: true,
109
114
  },
@@ -121,7 +126,7 @@ const ARG_POLICIES = new Map([
121
126
  [
122
127
  "madge",
123
128
  {
124
- // Read-only dependency analysis: circular detection, orphans, JSON. The
129
+ // Dependency-reporting flags; config modules remain a separate trust surface. The
125
130
  // image/dot/svg output-writing flags are absent → refused.
126
131
  flags: new Set([
127
132
  "--circular", "-c", "--orphans", "--leaves", "--summary", "-s",
@@ -134,8 +139,8 @@ const ARG_POLICIES = new Map([
134
139
  [
135
140
  "ast-grep",
136
141
  {
137
- // Structural search only. --rewrite/-r/--update-all/-U/--interactive/-i
138
- // (all of which edit files) are absent → refused. `run`/`scan` are positional.
142
+ // Known editing flags are absent. Positional subcommands and configuration/
143
+ // native parser discovery remain separate review scopes.
139
144
  flags: new Set([
140
145
  "-p", "--pattern", "-l", "--lang", "--language", "--json", "--globs",
141
146
  "-A", "--after", "-B", "--before", "-C", "--context", "--heading",
@@ -157,33 +162,33 @@ const ARG_POLICIES = new Map([
157
162
  },
158
163
  ],
159
164
  ]);
160
- /** Read-only git subcommands an anchor may run (no checkout/reset/clean/push/…). */
161
- export const GIT_READONLY_SUBCOMMANDS = new Set([
162
- "grep",
163
- "log",
164
- "diff",
165
- "show",
166
- "ls-files",
167
- "cat-file",
168
- "blame",
169
- "rev-parse",
170
- "status",
171
- ]);
165
+ const nonempty = value => value.length > 0 && !value.startsWith("-");
166
+ const count = value => /^\d+$/.test(value);
167
+ const anyPositionals = () => true;
168
+ const gitFlags = (zero, values = []) => new Map([...zero.map(flag => [flag, null]), ...values]);
169
+ const diffFlags = ["--stat", "--numstat", "--shortstat", "--name-only", "--name-status", "--patch", "-p", "--no-patch", "-s", "--raw", "--check", "--no-renames", "--no-ext-diff", "--no-textconv", "--exit-code", "--quiet", "-w", "--ignore-all-space", "--ignore-space-change", "--no-color"];
170
+ const logValues = [["-n", count], ["--max-count", count], ["--skip", count], ["--since", nonempty], ["--until", nonempty], ["--author", nonempty], ["--grep", nonempty]];
172
171
  /**
173
- * git flags that write a file or otherwise escape read-only inspection, refused
174
- * even on a read-only subcommand. `-o`/`--output` write to a file; `-c`,
175
- * `--exec-path`, `--config-env` reconfigure git arbitrarily (incl. running
176
- * pagers/externals). Anything in this set, anywhere in the argv, refuses.
172
+ * Small per-subcommand grammar, not Git's complete CLI. Exact flag names only;
173
+ * null means zero operands, a predicate means one required operand. Required
174
+ * short operands may be attached; long operands may use '='. Short clusters,
175
+ * abbreviations and arbitrary pretty formats are omitted. Optional-value Git
176
+ * flags require an explicit '=' value when included (equalsOnly).
177
+ * '--' ends option parsing only for commands with path positionals.
177
178
  */
178
- const GIT_REFUSED_OPTIONS = new Set([
179
- "-o",
180
- "--output",
181
- "-c",
182
- "--exec-path",
183
- "--config-env",
184
- "--upload-pack",
185
- "--receive-pack",
179
+ const GIT_POLICIES = new Map([
180
+ ["grep", { flags: gitFlags(["-n", "--line-number", "-i", "--ignore-case", "-I", "-l", "--files-with-matches", "-c", "--count", "-w", "--word-regexp", "-v", "--invert-match", "-E", "--extended-regexp", "-F", "--fixed-strings", "--cached", "--no-index", "--full-name", "--no-textconv"], [["-e", nonempty], ["-A", count], ["-B", count], ["-C", count]]), paths: true, positionals: (values, flags) => flags.has("-e") || values.length > 0 }],
181
+ ["log", { flags: gitFlags([...diffFlags, "--oneline", "--decorate", "--no-decorate", "--all", "--reverse", "--first-parent", "--no-merges", "--merges", "--follow"], [...logValues, ["-U", count]]), paths: true, positionals: anyPositionals }],
182
+ ["diff", { flags: gitFlags(diffFlags, [["-U", count], ["--unified", count]]), paths: true, positionals: anyPositionals }],
183
+ ["show", { flags: gitFlags([...diffFlags, "--oneline"], [["-U", count], ["--unified", count]]), paths: true, positionals: anyPositionals }],
184
+ ["ls-files", { flags: gitFlags(["-z", "--cached", "-c", "--deleted", "-d", "--modified", "-m", "--others", "-o", "--ignored", "-i", "--exclude-standard", "--stage", "-s", "--unmerged", "-u", "--full-name"]), paths: true, positionals: anyPositionals }],
185
+ ["cat-file", { flags: gitFlags(["-p", "-t", "-s", "-e"]), paths: false, positionals: (values, flags) => values.length === 1 && flags.size === 1 }],
186
+ ["blame", { flags: gitFlags(["--porcelain", "--line-porcelain", "--incremental", "-w", "--show-email", "-e", "--root", "--no-textconv"], [["-L", value => /^\d+(?:,\d+)?$/.test(value)]]), paths: true, positionals: values => values.length >= 1 && values.length <= 2 }],
187
+ ["rev-parse", { flags: gitFlags(["--verify", "--short", "--abbrev-ref", "--symbolic-full-name", "--is-inside-work-tree", "--show-toplevel", "--show-prefix", "--git-dir", "--is-bare-repository"]), paths: false, positionals: values => values.length <= 1 }],
188
+ ["status", { flags: gitFlags(["--short", "-s", "--branch", "-b", "--porcelain", "-z", "--no-renames"], [["--untracked-files", value => ["no", "normal", "all"].includes(value)]]), equalsOnly: new Set(["--untracked-files"]), paths: true, positionals: anyPositionals }],
186
189
  ]);
190
+ /** Read-only Git subcommands, derived from the grammar used for admission. */
191
+ export const GIT_READONLY_SUBCOMMANDS = new Set(GIT_POLICIES.keys());
187
192
  /**
188
193
  * The set of executables the runner will auto-run, for callers that want to
189
194
  * display the allowlist. Derived from the per-executable policies plus git.
@@ -246,32 +251,64 @@ function isAllowedNonGitCommand(args, policy) {
246
251
  }
247
252
  return true;
248
253
  }
249
- /**
250
- * Validate a git command: the first positional must be a read-only subcommand,
251
- * and no token (before OR after the subcommand) may be a write/reconfigure
252
- * option from {@link GIT_REFUSED_OPTIONS}. A `-c key=val` style reconfiguration
253
- * before the subcommand is refused, as is an `--output=file` on `git log`.
254
- */
254
+ const GIT_GLOBAL_FLAGS = new Set(["--no-pager", "--no-optional-locks", "--literal-pathspecs"]);
255
+ function gitSubcommandIndex(args) {
256
+ let index = 0;
257
+ while (GIT_GLOBAL_FLAGS.has(args[index]))
258
+ index++;
259
+ return index;
260
+ }
261
+ /** Default-deny Git grammar; positionals after '--' are never reparsed. */
255
262
  function isAllowedGitCommand(args) {
256
- let subcommand;
257
- for (const arg of args) {
258
- if (typeof arg !== "string")
263
+ const sub = gitSubcommandIndex(args);
264
+ const policy = GIT_POLICIES.get(args[sub]);
265
+ if (!policy)
266
+ return false;
267
+ const positionals = [];
268
+ const flags = new Set();
269
+ let pathsOnly = false;
270
+ for (let index = sub + 1; index < args.length; index++) {
271
+ const arg = args[index];
272
+ if (pathsOnly || !arg.startsWith("-")) {
273
+ positionals.push(arg);
274
+ continue;
275
+ }
276
+ if (arg === "--") {
277
+ if (!policy.paths)
278
+ return false;
279
+ pathsOnly = true;
280
+ continue;
281
+ }
282
+ const equals = arg.startsWith("--") ? arg.indexOf("=") : -1;
283
+ let name = equals < 0 ? arg : arg.slice(0, equals);
284
+ let value = equals < 0 ? undefined : arg.slice(equals + 1);
285
+ if (!policy.flags.has(name) && /^-[^-].+/.test(arg)) {
286
+ name = arg.slice(0, 2);
287
+ value = arg.slice(2);
288
+ }
289
+ if (!policy.flags.has(name))
259
290
  return false;
260
- if (GIT_REFUSED_OPTIONS.has(flagName(arg)))
291
+ if (policy.equalsOnly?.has(name) && equals < 0)
261
292
  return false;
262
- if (subcommand === undefined && !arg.startsWith("-")) {
263
- subcommand = arg.trim().toLowerCase();
293
+ const validate = policy.flags.get(name);
294
+ if (validate === null) {
295
+ if (value !== undefined)
296
+ return false;
264
297
  }
298
+ else {
299
+ value ??= args[++index];
300
+ if (value === undefined || !validate(value))
301
+ return false;
302
+ }
303
+ flags.add(name);
265
304
  }
266
- if (subcommand === undefined)
267
- return false;
268
- return GIT_READONLY_SUBCOMMANDS.has(subcommand);
305
+ return policy.positionals(positionals, flags);
269
306
  }
270
307
  /**
271
308
  * The single authority for what the tool will auto-run on the model's behalf:
272
309
  * `command[0]` must be an allowlisted inspection-only executable, AND every
273
310
  * argument must satisfy that executable's default-deny argument policy (git:
274
- * read-only subcommand + no write/reconfigure option). Anything else → false.
311
+ * subcommand-specific grammar). Anything else → false.
275
312
  *
276
313
  * CRIT ARC-a06a3945: argument validation is the point — an allowed executable
277
314
  * carrying a code-exec/file-write flag (`rg --pre`, `ast-grep --rewrite`,
@@ -279,8 +316,12 @@ function isAllowedGitCommand(args) {
279
316
  */
280
317
  export function isAllowedAnchorCommand(command) {
281
318
  const exe = command[0];
282
- if (typeof exe !== "string" || exe.trim() === "")
319
+ if (typeof exe !== "string" || !/^[a-zA-Z0-9.-]+$/.test(exe))
283
320
  return false;
321
+ for (const arg of command) {
322
+ if (typeof arg !== "string" || /[\x00-\x1f\x7f]/.test(arg))
323
+ return false;
324
+ }
284
325
  const base = executableBaseName(exe);
285
326
  const args = command.slice(1);
286
327
  if (base === "git")
@@ -290,13 +331,117 @@ export function isAllowedAnchorCommand(command) {
290
331
  return false;
291
332
  return isAllowedNonGitCommand(args, policy);
292
333
  }
334
+ /** Discover the enclosing worktree without executing repository config. */
335
+ function inspectionRoot(cwd) {
336
+ let path = realpathSync(cwd);
337
+ const initial = path;
338
+ let bareRoot;
339
+ for (;;) {
340
+ if (existsSync(join(path, ".git")))
341
+ return path;
342
+ // Metadata inside a normal worktree also resembles a bare repository.
343
+ // Keep searching for the enclosing worktree before using this fallback.
344
+ if (existsSync(join(path, "HEAD")) && existsSync(join(path, "objects")) && existsSync(join(path, "refs")))
345
+ bareRoot ??= path;
346
+ const parent = dirname(path);
347
+ if (parent === path)
348
+ return bareRoot ?? initial;
349
+ path = parent;
350
+ }
351
+ }
352
+ /**
353
+ * Inspection-specific installation trust: absolute physical PATH directories and
354
+ * final executable targets outside the inspected worktree and caller cwd only.
355
+ * The general resolver retains its normal relative/empty PATH semantics.
356
+ * Windows uses native EXE/COM only, never PATHEXT, CMD/BAT or ComSpec fallback.
357
+ * Host-managed installations outside those roots are trusted, not sandboxed;
358
+ * this does not protect against concurrent executable replacement.
359
+ */
360
+ function inspectionExecutable(base, cwd) {
361
+ const roots = [inspectionRoot(cwd), realpathSync(process.cwd())];
362
+ const env = stripAuditToolsControlEnv();
363
+ const pathKey = Object.keys(env).find(key => process.platform === "win32" ? key.toUpperCase() === "PATH" : key === "PATH");
364
+ const directories = [];
365
+ for (let entry of (pathKey ? env[pathKey] ?? "" : "").split(delimiter)) {
366
+ if (process.platform === "win32" && entry.startsWith('"') && entry.endsWith('"'))
367
+ entry = entry.slice(1, -1);
368
+ if (!isAbsolute(entry) || roots.some(root => resolveWithinRoot(root, resolve(entry)) !== null))
369
+ continue;
370
+ try {
371
+ const physical = realpathSync(entry);
372
+ if (statSync(physical).isDirectory() && !roots.some(root => resolveWithinRoot(root, physical) !== null))
373
+ directories.push(physical);
374
+ }
375
+ catch { /* Missing PATH entries cannot establish trusted identity. */ }
376
+ }
377
+ for (const key of Object.keys(env)) {
378
+ if (key.toUpperCase() === "PATH" || key.toUpperCase() === "PATHEXT")
379
+ delete env[key];
380
+ }
381
+ env.PATH = directories.join(delimiter);
382
+ if (process.platform === "win32")
383
+ env.PATHEXT = ".EXE;.COM";
384
+ const file = resolveExecutableFile(base, {
385
+ cwd, env,
386
+ executableFile: candidate => {
387
+ try {
388
+ if (!statSync(candidate).isFile())
389
+ return null;
390
+ if (process.platform !== "win32")
391
+ accessSync(candidate, constants.X_OK);
392
+ const physical = realpathSync(candidate);
393
+ if (process.platform === "win32" && !/\.(exe|com)$/i.test(physical))
394
+ return null;
395
+ return roots.some(root => resolveWithinRoot(root, physical) !== null) ? null : physical;
396
+ }
397
+ catch {
398
+ return null;
399
+ }
400
+ },
401
+ });
402
+ if (!file)
403
+ throw new Error("No trusted native inspection executable found for " + base);
404
+ return { file, env };
405
+ }
406
+ /**
407
+ * Git >=2.45 is required by the fixed --no-lazy-fetch global flag: older Git
408
+ * rejects that flag before repository setup/subcommand execution. This also
409
+ * excludes old Git's interpretation of core.fsmonitor=false as a hook path.
410
+ * https://github.com/git/git/blob/v2.45.1/git.c (handle_options)
411
+ * https://git-scm.com/docs/git-config#Documentation/git-config.txt-corefsmonitor
412
+ */
413
+ function inspectionGit(args, env) {
414
+ for (const key of Object.keys(env))
415
+ if (key.toUpperCase().startsWith("GIT_"))
416
+ delete env[key];
417
+ Object.assign(env, {
418
+ GIT_CONFIG_NOSYSTEM: "1", GIT_CONFIG_SYSTEM: process.platform === "win32" ? "NUL" : devNull,
419
+ GIT_CONFIG_GLOBAL: process.platform === "win32" ? "NUL" : devNull,
420
+ GIT_PAGER: "cat", GIT_TERMINAL_PROMPT: "0", GIT_OPTIONAL_LOCKS: "0", GIT_NO_LAZY_FETCH: "1",
421
+ });
422
+ const index = gitSubcommandIndex(args);
423
+ const sub = args[index];
424
+ const fixed = ["--no-lazy-fetch", "--no-pager", "--no-optional-locks", "--literal-pathspecs"];
425
+ for (const config of [
426
+ "core.fsmonitor=false", "core.pager=cat", "log.showSignature=false",
427
+ "format.pretty=format:%h %s", "submodule.recurse=false",
428
+ "diff.submodule=short", "status.submoduleSummary=false",
429
+ ])
430
+ fixed.push("-c", config);
431
+ const protections = ["log", "show", "diff"].includes(sub) ? ["--no-ext-diff", "--no-textconv"] : [];
432
+ if (["diff", "status"].includes(sub))
433
+ protections.push("--ignore-submodules=all");
434
+ if (["grep", "blame"].includes(sub))
435
+ protections.push("--no-textconv");
436
+ return [...fixed, sub, ...protections, ...args.slice(index + 1)];
437
+ }
293
438
  /**
294
439
  * Spawn an allowlisted read-only command argv-only (never a shell), capturing
295
440
  * combined stdout+stderr (bounded). Strips the host-signalling env
296
- * (`stripAuditToolsControlEnv`), resolves the platform-correct argv via the shared
297
- * `resolveExecArgv`, and kills a command that exceeds `timeoutMs`
298
- * (SIGTERM→SIGKILL). The single runner both orchestrators use for the grounding
299
- * anchor pass.
441
+ * (`stripAuditToolsControlEnv`), resolves a trusted native executable outside
442
+ * the inspected worktree and caller cwd, and kills commands exceeding `timeoutMs`
443
+ * with bounded owned-process cleanup. This library entry point is shared by
444
+ * callers of the exported inspection API.
300
445
  *
301
446
  * INTERNAL GATE (invariants[2]): enforces {@link isAllowedAnchorCommand} on
302
447
  * itself, unconditionally, before ever spawning — `isAllowedAnchorCommand` is
@@ -325,7 +470,20 @@ export const runAllowlistedReadOnlyCommand = (command, cwd, timeoutMs) => {
325
470
  return new Promise((resolvePromise) => {
326
471
  let owned;
327
472
  try {
328
- owned = spawnOwnedProcess(resolveExecArgv(command), { cwd, env: stripAuditToolsControlEnv(), deadlineAt: Date.now() + Math.max(1, Number.isFinite(timeoutMs) ? timeoutMs : 1) });
473
+ const base = executableBaseName(command[0]);
474
+ const { file, env } = inspectionExecutable(base, cwd);
475
+ let args = command.slice(1);
476
+ if (base === "git")
477
+ args = inspectionGit(args, env);
478
+ else if (base === "rg" || base === "ripgrep") {
479
+ // Fixed before pattern/path operands, even if a caller uses '--'.
480
+ // https://github.com/BurntSushi/ripgrep/blob/master/GUIDE.md#configuration-file
481
+ for (const key of Object.keys(env))
482
+ if (key.toUpperCase() === "RIPGREP_CONFIG_PATH")
483
+ delete env[key];
484
+ args = ["--no-config", ...args];
485
+ }
486
+ owned = spawnOwnedProcess([file, ...args], { cwd, env, deadlineAt: Date.now() + Math.max(1, Number.isFinite(timeoutMs) ? timeoutMs : 1) });
329
487
  }
330
488
  catch (error) {
331
489
  resolvePromise({ exit_code: null, timed_out: false, output: "", spawn_error: error instanceof Error ? error.message : String(error) });