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.
- package/dist/audit/extractors/analyzers/css.d.ts.map +1 -1
- package/dist/audit/extractors/analyzers/css.js +2 -30
- package/dist/audit/extractors/analyzers/css.js.map +1 -1
- package/dist/audit/extractors/analyzers/html.d.ts.map +1 -1
- package/dist/audit/extractors/analyzers/html.js +2 -30
- package/dist/audit/extractors/analyzers/html.js.map +1 -1
- package/dist/audit/extractors/analyzers/python.d.ts.map +1 -1
- package/dist/audit/extractors/analyzers/python.js +9 -34
- package/dist/audit/extractors/analyzers/python.js.map +1 -1
- package/dist/audit/extractors/analyzers/treeSitterBatch.d.ts +6 -0
- package/dist/audit/extractors/analyzers/treeSitterBatch.d.ts.map +1 -0
- package/dist/audit/extractors/analyzers/treeSitterBatch.js +38 -0
- package/dist/audit/extractors/analyzers/treeSitterBatch.js.map +1 -0
- package/dist/audit/extractors/graph.d.ts.map +1 -1
- package/dist/audit/extractors/graph.js +9 -7
- package/dist/audit/extractors/graph.js.map +1 -1
- package/dist/audit/extractors/graphPathIndex.d.ts +8 -0
- package/dist/audit/extractors/graphPathIndex.d.ts.map +1 -0
- package/dist/audit/extractors/graphPathIndex.js +47 -0
- package/dist/audit/extractors/graphPathIndex.js.map +1 -0
- package/dist/audit/extractors/graphPythonImports.d.ts +5 -4
- package/dist/audit/extractors/graphPythonImports.d.ts.map +1 -1
- package/dist/audit/extractors/graphPythonImports.js +15 -27
- package/dist/audit/extractors/graphPythonImports.js.map +1 -1
- package/dist/audit/extractors/graphRouteSources.d.ts +2 -1
- package/dist/audit/extractors/graphRouteSources.d.ts.map +1 -1
- package/dist/audit/extractors/graphRouteSources.js +5 -4
- package/dist/audit/extractors/graphRouteSources.js.map +1 -1
- package/dist/audit/extractors/graphSuites.d.ts +2 -1
- package/dist/audit/extractors/graphSuites.d.ts.map +1 -1
- package/dist/audit/extractors/graphSuites.js +6 -7
- package/dist/audit/extractors/graphSuites.js.map +1 -1
- package/dist/audit/orchestrator/flowPlanning.d.ts +2 -6
- package/dist/audit/orchestrator/flowPlanning.d.ts.map +1 -1
- package/dist/audit/orchestrator/flowPlanning.js +2 -9
- package/dist/audit/orchestrator/flowPlanning.js.map +1 -1
- package/dist/audit/orchestrator/taskBuilder.js +1 -1
- package/dist/audit/orchestrator/taskBuilder.js.map +1 -1
- package/dist/shared/decompose/contentCoherence.d.ts.map +1 -1
- package/dist/shared/decompose/contentCoherence.js +25 -9
- package/dist/shared/decompose/contentCoherence.js.map +1 -1
- package/dist/shared/io/schemaVersion.d.ts.map +1 -1
- package/dist/shared/io/schemaVersion.js +3 -1
- package/dist/shared/io/schemaVersion.js.map +1 -1
- package/dist/shared/tooling/allowlistedExec.d.ts +7 -7
- package/dist/shared/tooling/allowlistedExec.d.ts.map +1 -1
- package/dist/shared/tooling/allowlistedExec.js +222 -64
- package/dist/shared/tooling/allowlistedExec.js.map +1 -1
- package/package.json +1 -1
- package/wrapper/audit-code-wrapper-io.mjs +12 -107
- package/wrapper/remediate-code-wrapper-io.mjs +12 -107
- 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
|
|
199
|
-
|
|
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(
|
|
211
|
-
shared_critical_flow: intersects(left.
|
|
212
|
-
shared_file: intersects(left.
|
|
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.
|
|
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(
|
|
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":"
|
|
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
|
-
`
|
|
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,
|
|
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
|
|
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
|
-
*
|
|
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
|
|
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
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
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":"
|
|
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
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
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`),
|
|
26
|
-
*
|
|
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 {
|
|
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.
|
|
41
|
-
*
|
|
42
|
-
*
|
|
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
|
-
//
|
|
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
|
-
//
|
|
138
|
-
//
|
|
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
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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
|
-
*
|
|
174
|
-
*
|
|
175
|
-
*
|
|
176
|
-
*
|
|
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
|
|
179
|
-
"-
|
|
180
|
-
"--
|
|
181
|
-
"-
|
|
182
|
-
"--
|
|
183
|
-
"--
|
|
184
|
-
"
|
|
185
|
-
"--
|
|
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
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
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
|
-
|
|
257
|
-
|
|
258
|
-
|
|
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 (
|
|
291
|
+
if (policy.equalsOnly?.has(name) && equals < 0)
|
|
261
292
|
return false;
|
|
262
|
-
|
|
263
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
|
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
|
|
297
|
-
*
|
|
298
|
-
*
|
|
299
|
-
*
|
|
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
|
-
|
|
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) });
|