audit-tools 0.50.13 → 0.50.14
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/cli/nextStepHelpers.js +1 -1
- package/dist/audit/cli/nextStepHelpers.js.map +1 -1
- package/dist/audit/cli/reviewRun.js +1 -1
- package/dist/audit/cli/reviewRun.js.map +1 -1
- package/dist/audit/orchestrator/ingestionExecutors.js +1 -1
- package/dist/audit/orchestrator/ingestionExecutors.js.map +1 -1
- package/dist/audit/reporting/mergeFindings.js +1 -1
- package/dist/audit/reporting/mergeFindings.js.map +1 -1
- package/dist/audit/reporting/workBlocks.js +1 -1
- package/dist/audit/reporting/workBlocks.js.map +1 -1
- package/dist/remediate/steps/nextStep.js +1 -1
- package/dist/remediate/steps/nextStep.js.map +1 -1
- package/dist/shared/loopCorePaths.d.ts.map +1 -1
- package/dist/shared/loopCorePaths.js +0 -1
- package/dist/shared/loopCorePaths.js.map +1 -1
- package/dist/shared/tooling/allowlistedExec.d.ts +4 -4
- package/dist/shared/tooling/allowlistedExec.js +7 -7
- package/package.json +4 -5
- package/dist/audit/adapters/astGrep.d.ts +0 -30
- package/dist/audit/adapters/astGrep.d.ts.map +0 -1
- package/dist/audit/adapters/astGrep.js +0 -46
- package/dist/audit/adapters/astGrep.js.map +0 -1
- package/dist/audit/adapters/codeql.d.ts +0 -47
- package/dist/audit/adapters/codeql.d.ts.map +0 -1
- package/dist/audit/adapters/codeql.js +0 -52
- package/dist/audit/adapters/codeql.js.map +0 -1
- package/dist/audit/adapters/coverageSummary.d.ts +0 -9
- package/dist/audit/adapters/coverageSummary.d.ts.map +0 -1
- package/dist/audit/adapters/coverageSummary.js +0 -18
- package/dist/audit/adapters/coverageSummary.js.map +0 -1
- package/dist/audit/adapters/eslint.d.ts +0 -14
- package/dist/audit/adapters/eslint.d.ts.map +0 -1
- package/dist/audit/adapters/eslint.js +0 -28
- package/dist/audit/adapters/eslint.js.map +0 -1
- package/dist/audit/adapters/npmAudit.d.ts +0 -16
- package/dist/audit/adapters/npmAudit.d.ts.map +0 -1
- package/dist/audit/adapters/npmAudit.js +0 -24
- package/dist/audit/adapters/npmAudit.js.map +0 -1
- package/dist/audit/adapters/semgrep.d.ts +0 -42
- package/dist/audit/adapters/semgrep.d.ts.map +0 -1
- package/dist/audit/adapters/semgrep.js +0 -93
- package/dist/audit/adapters/semgrep.js.map +0 -1
- package/dist/audit/cli/dispatch.d.ts +0 -10
- package/dist/audit/cli/dispatch.d.ts.map +0 -1
- package/dist/audit/cli/dispatch.js +0 -10
- package/dist/audit/cli/dispatch.js.map +0 -1
- package/dist/audit/cli/paths.d.ts +0 -2
- package/dist/audit/cli/paths.d.ts.map +0 -1
- package/dist/audit/cli/paths.js +0 -10
- package/dist/audit/cli/paths.js.map +0 -1
- package/dist/audit/orchestrator/chunking.d.ts +0 -6
- package/dist/audit/orchestrator/chunking.d.ts.map +0 -1
- package/dist/audit/orchestrator/chunking.js +0 -14
- package/dist/audit/orchestrator/chunking.js.map +0 -1
- package/dist/audit/orchestrator/continuityScore.d.ts +0 -2
- package/dist/audit/orchestrator/continuityScore.d.ts.map +0 -1
- package/dist/audit/orchestrator/continuityScore.js +0 -9
- package/dist/audit/orchestrator/continuityScore.js.map +0 -1
- package/dist/audit/orchestrator/fileAnchors.d.ts +0 -69
- package/dist/audit/orchestrator/fileAnchors.d.ts.map +0 -1
- package/dist/audit/orchestrator/fileAnchors.js +0 -314
- package/dist/audit/orchestrator/fileAnchors.js.map +0 -1
- package/dist/audit/orchestrator/knipGraphCrosscheck.d.ts +0 -65
- package/dist/audit/orchestrator/knipGraphCrosscheck.d.ts.map +0 -1
- package/dist/audit/orchestrator/knipGraphCrosscheck.js +0 -85
- package/dist/audit/orchestrator/knipGraphCrosscheck.js.map +0 -1
- package/dist/audit/orchestrator/selectiveDeepening.d.ts +0 -3
- package/dist/audit/orchestrator/selectiveDeepening.d.ts.map +0 -1
- package/dist/audit/orchestrator/selectiveDeepening.js +0 -7
- package/dist/audit/orchestrator/selectiveDeepening.js.map +0 -1
- package/dist/audit/orchestrator.d.ts +0 -7
- package/dist/audit/orchestrator.d.ts.map +0 -1
- package/dist/audit/orchestrator.js +0 -60
- package/dist/audit/orchestrator.js.map +0 -1
- package/dist/audit/reporting/findingRanks.d.ts +0 -2
- package/dist/audit/reporting/findingRanks.d.ts.map +0 -1
- package/dist/audit/reporting/findingRanks.js +0 -7
- package/dist/audit/reporting/findingRanks.js.map +0 -1
- package/dist/audit/types/workerResult.d.ts +0 -14
- package/dist/audit/types/workerResult.d.ts.map +0 -1
- package/dist/audit/types/workerResult.js +0 -2
- package/dist/audit/types/workerResult.js.map +0 -1
- package/dist/audit/validation/anchorGrounding.d.ts +0 -59
- package/dist/audit/validation/anchorGrounding.d.ts.map +0 -1
- package/dist/audit/validation/anchorGrounding.js +0 -187
- package/dist/audit/validation/anchorGrounding.js.map +0 -1
- package/dist/audit/validation/quoteGrounding.d.ts +0 -18
- package/dist/audit/validation/quoteGrounding.d.ts.map +0 -1
- package/dist/audit/validation/quoteGrounding.js +0 -18
- package/dist/audit/validation/quoteGrounding.js.map +0 -1
- package/dist/remediate/state/accessMemory.d.ts +0 -53
- package/dist/remediate/state/accessMemory.d.ts.map +0 -1
- package/dist/remediate/state/accessMemory.js +0 -105
- package/dist/remediate/state/accessMemory.js.map +0 -1
- package/dist/remediate/steps/dispatch.d.ts +0 -4
- package/dist/remediate/steps/dispatch.d.ts.map +0 -1
- package/dist/remediate/steps/dispatch.js +0 -12
- package/dist/remediate/steps/dispatch.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fileAnchors.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/fileAnchors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,oBAAoB,CAAC;AAGjE,MAAM,MAAM,cAAc,GACtB,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,SAAS,GACT,OAAO,GACP,iBAAiB,CAAC;AAEtB,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,EAAE,kCAAkC,CAAC;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,qBAAqB,CAAC;IACnC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAuGD;;;;;;;GAOG;AACH,MAAM,MAAM,yBAAyB,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AAElE,wBAAgB,8BAA8B,CAC5C,uBAAuB,EAAE,uBAAuB,EAAE,GAAG,SAAS,GAC7D,yBAAyB,CAkC3B;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,yBAAyB,GAAG,SAAS,GAC3C,UAAU,EAAE,CAEd;AAyHD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,uBAAuB,CAAC,EAAE,uBAAuB,EAAE,CAAC;CACrD,GAAG,iBAAiB,CA8FpB"}
|
|
@@ -1,314 +0,0 @@
|
|
|
1
|
-
import { normalizeRepoRelPath, compareCodeUnits } from "audit-tools/shared";
|
|
2
|
-
/**
|
|
3
|
-
* Graph buckets in `graph_bundle.json` that carry file-to-file edges relevant to
|
|
4
|
-
* large-file anchoring. Named here (rather than inlined as bare strings in the
|
|
5
|
-
* collection loop) so the set of scanned buckets is a single typed source of
|
|
6
|
-
* truth and each bucket key doubles as a typed fallback edge `kind`. `as const`
|
|
7
|
-
* narrows the element type from `string` to the literal union.
|
|
8
|
-
*/
|
|
9
|
-
const GRAPH_EDGE_BUCKETS = ["imports", "calls", "references"];
|
|
10
|
-
const MAX_ANCHORS = 160;
|
|
11
|
-
// Keywords that signal elevated-risk or review-worthy lines, grouped by concern:
|
|
12
|
-
// auth/access: auth, password, permission, role, secret, token
|
|
13
|
-
// injection/execution: deserialize, eval, exec, query, spawn, sql
|
|
14
|
-
// crypto: decrypt, encrypt
|
|
15
|
-
// concurrency/reliability: cache, lock, race, retry, timeout, transaction
|
|
16
|
-
// debt markers: FIXME, TODO
|
|
17
|
-
const KEYWORD_PATTERN = /\b(auth|password|permission|role|secret|token|deserialize|eval|exec|query|spawn|sql|decrypt|encrypt|cache|lock|race|retry|timeout|transaction|FIXME|TODO)\b/i;
|
|
18
|
-
const SYMBOL_PATTERNS = [
|
|
19
|
-
{
|
|
20
|
-
kind: "import",
|
|
21
|
-
pattern: /^\s*import\s+(?:type\s+)?(?:[^"'()]*?\s+from\s+)?["']([^"']+)["']/,
|
|
22
|
-
label: "import",
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
kind: "symbol",
|
|
26
|
-
pattern: /^\s*(?:export\s+)?(?:async\s+)?function\s+([A-Za-z_$][\w$]*)\b/,
|
|
27
|
-
label: "function",
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
kind: "symbol",
|
|
31
|
-
pattern: /^\s*(?:export\s+)?class\s+([A-Za-z_$][\w$]*)\b/,
|
|
32
|
-
label: "class",
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
kind: "symbol",
|
|
36
|
-
pattern: /^\s*(?:export\s+)?interface\s+([A-Za-z_$][\w$]*)\b/,
|
|
37
|
-
label: "interface",
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
kind: "symbol",
|
|
41
|
-
pattern: /^\s*(?:export\s+)?type\s+([A-Za-z_$][\w$]*)\b/,
|
|
42
|
-
label: "type",
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
kind: "symbol",
|
|
46
|
-
pattern: /^\s*(?:export\s+)?(?:const|let|var)\s+([A-Za-z_$][\w$]*)\b/,
|
|
47
|
-
label: "binding",
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
kind: "export",
|
|
51
|
-
pattern: /^\s*export\s+(?:type\s+)?(?:[^"'()]*?\s+from\s+["']([^"']+)["']|(?:default\s+)?(?:async\s+)?(?:function|class|const|let|var|interface|type)\s+([A-Za-z_$][\w$-]*))/,
|
|
52
|
-
label: "export",
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
kind: "symbol",
|
|
56
|
-
pattern: /^\s*(?:export\s+)?def\s+([A-Za-z_][\w]*)\b/,
|
|
57
|
-
label: "function",
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
kind: "symbol",
|
|
61
|
-
pattern: /^\s*(?:export\s+)?func\s+(?:\([^)]+\)\s*)?([A-Za-z_][\w]*)\b/,
|
|
62
|
-
label: "function",
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
kind: "symbol",
|
|
66
|
-
pattern: /^\s*(?:pub\s+)?fn\s+([A-Za-z_][\w]*)\b/,
|
|
67
|
-
label: "function",
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
kind: "route",
|
|
71
|
-
pattern: /\b(?:app|router|server)\s*\.\s*(get|post|put|patch|delete|use)\s*\(/i,
|
|
72
|
-
label: "route",
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
kind: "route",
|
|
76
|
-
pattern: /^\s*@(?:Get|Post|Put|Patch|Delete|Route|Controller)\b/,
|
|
77
|
-
label: "route",
|
|
78
|
-
},
|
|
79
|
-
];
|
|
80
|
-
function truncate(value, maxLength) {
|
|
81
|
-
const normalized = value.replace(/\s+/g, " ").trim();
|
|
82
|
-
return normalized.length > maxLength
|
|
83
|
-
? `${normalized.slice(0, maxLength - 3)}...`
|
|
84
|
-
: normalized;
|
|
85
|
-
}
|
|
86
|
-
function addAnchor(anchors, seen, anchor) {
|
|
87
|
-
const key = `${anchor.kind}\0${anchor.line ?? ""}\0${anchor.name}\0${anchor.detail ?? ""}`;
|
|
88
|
-
if (seen.has(key)) {
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
seen.add(key);
|
|
92
|
-
anchors.push(anchor);
|
|
93
|
-
}
|
|
94
|
-
export function buildAnalyzerSignalAnchorIndex(externalAnalyzerResults) {
|
|
95
|
-
// Group raw signals by path first so the (line_start, id) sort — and thus the
|
|
96
|
-
// rendered order — is byte-identical to the pre-index per-path extraction.
|
|
97
|
-
const grouped = new Map();
|
|
98
|
-
for (const tool of externalAnalyzerResults ?? []) {
|
|
99
|
-
for (const result of tool.results ?? []) {
|
|
100
|
-
const key = normalizeRepoRelPath(result.path).toLowerCase();
|
|
101
|
-
const bucket = grouped.get(key);
|
|
102
|
-
if (bucket) {
|
|
103
|
-
bucket.push(result);
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
grouped.set(key, [result]);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
const index = new Map();
|
|
111
|
-
for (const [key, results] of grouped) {
|
|
112
|
-
results.sort((a, b) => (a.line_start ?? 0) - (b.line_start ?? 0) ||
|
|
113
|
-
compareCodeUnits(a.id, b.id));
|
|
114
|
-
index.set(key, results.map((signal) => ({
|
|
115
|
-
kind: "analyzer_signal",
|
|
116
|
-
name: truncate(signal.rule ?? signal.category, 80),
|
|
117
|
-
line: signal.line_start,
|
|
118
|
-
detail: truncate(signal.summary, 180),
|
|
119
|
-
...(signal.provenance !== undefined ? { provenance: signal.provenance } : {}),
|
|
120
|
-
})));
|
|
121
|
-
}
|
|
122
|
-
return index;
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* External-analyzer signal anchors (rule/line/summary) for one path — an O(1)
|
|
126
|
-
* read of the pre-built {@link AnalyzerSignalAnchorIndex}. Split out of
|
|
127
|
-
* {@link buildFileAnchorSummary} so packet-level prompt rendering (any
|
|
128
|
-
* multi-file packet, not just isolated-large-file mode) can surface the same
|
|
129
|
-
* grounded lead detail without paying for whole-file content scanning.
|
|
130
|
-
*/
|
|
131
|
-
export function analyzerSignalAnchorsForPath(path, index) {
|
|
132
|
-
return index?.get(normalizeRepoRelPath(path).toLowerCase()) ?? [];
|
|
133
|
-
}
|
|
134
|
-
function collectGraphEdges(graphBundle, path) {
|
|
135
|
-
if (!graphBundle?.graphs) {
|
|
136
|
-
return [];
|
|
137
|
-
}
|
|
138
|
-
const normalizedPath = normalizeRepoRelPath(path).toLowerCase();
|
|
139
|
-
const edges = [];
|
|
140
|
-
// Typed as `string` (not the literal union) so the lookup resolves through the
|
|
141
|
-
// `[key: string]: unknown` index signature on `graphs` — the loop body then
|
|
142
|
-
// re-validates each entry's shape, matching the original deterministic parse.
|
|
143
|
-
for (const bucket of GRAPH_EDGE_BUCKETS) {
|
|
144
|
-
const raw = graphBundle.graphs[bucket];
|
|
145
|
-
if (!Array.isArray(raw)) {
|
|
146
|
-
continue;
|
|
147
|
-
}
|
|
148
|
-
for (const item of raw) {
|
|
149
|
-
const record = item;
|
|
150
|
-
if (item &&
|
|
151
|
-
typeof item === "object" &&
|
|
152
|
-
!Array.isArray(item) &&
|
|
153
|
-
typeof record.from === "string" &&
|
|
154
|
-
typeof record.to === "string") {
|
|
155
|
-
const from = normalizeRepoRelPath(record.from).toLowerCase();
|
|
156
|
-
const to = normalizeRepoRelPath(record.to).toLowerCase();
|
|
157
|
-
if (from === normalizedPath || to === normalizedPath) {
|
|
158
|
-
edges.push({
|
|
159
|
-
from: record.from,
|
|
160
|
-
to: record.to,
|
|
161
|
-
kind: typeof record.kind === "string" ? record.kind : bucket,
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
return edges.sort((a, b) => compareCodeUnits(a.kind ?? "", b.kind ?? "") ||
|
|
168
|
-
compareCodeUnits(a.from, b.from) ||
|
|
169
|
-
compareCodeUnits(a.to, b.to));
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Assigns an approximate `end_line` span to each TOP-LEVEL `symbol`-kind anchor
|
|
173
|
-
* (increment 2d, `path::symbol` slicing). A top-level declaration's body runs
|
|
174
|
-
* from its line to the line before the NEXT top-level declaration, or to the
|
|
175
|
-
* file end for the last one. Only top-level (zero-indentation) declarations are
|
|
176
|
-
* boundaries and slice targets — a NESTED binding (an indented `const`/`let`
|
|
177
|
-
* the flat regex scanner also matches as a `symbol`) must NOT fragment the
|
|
178
|
-
* enclosing function/class span, and is not itself a useful slice, so it gets no
|
|
179
|
-
* span. `topLevelDeclLines` is the ascending set of zero-indent symbol/route
|
|
180
|
-
* declaration lines gathered during the content scan.
|
|
181
|
-
*
|
|
182
|
-
* This is a deterministic, content-derived, brace-agnostic heuristic (no nesting
|
|
183
|
-
* awareness) — advisory guidance the worker fail-safes past, never a hard read
|
|
184
|
-
* boundary. Mutates the anchors in place; must run on the fully line-sorted list
|
|
185
|
-
* BEFORE the MAX_ANCHORS cap so a surviving anchor's span is independent of the
|
|
186
|
-
* cap.
|
|
187
|
-
*/
|
|
188
|
-
function assignSymbolSpans(sorted, totalLines, topLevelDeclLines) {
|
|
189
|
-
const topLevelSet = new Set(topLevelDeclLines);
|
|
190
|
-
// Ascending — a linear scan finds the first boundary strictly after a line.
|
|
191
|
-
const boundaries = [...topLevelDeclLines].sort((a, b) => a - b);
|
|
192
|
-
for (const anchor of sorted) {
|
|
193
|
-
if (anchor.kind !== "symbol" || !anchor.line || !topLevelSet.has(anchor.line)) {
|
|
194
|
-
continue;
|
|
195
|
-
}
|
|
196
|
-
const nextBoundary = boundaries.find((line) => line > anchor.line);
|
|
197
|
-
const end = nextBoundary !== undefined ? nextBoundary - 1 : totalLines;
|
|
198
|
-
anchor.end_line = Math.max(anchor.line, Math.min(end, totalLines));
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
function scanSymbol(line, lineNumber, anchors, seen) {
|
|
202
|
-
for (const { kind, pattern, label } of SYMBOL_PATTERNS) {
|
|
203
|
-
const match = line.match(pattern);
|
|
204
|
-
if (!match) {
|
|
205
|
-
continue;
|
|
206
|
-
}
|
|
207
|
-
const name = match.slice(1).find((value) => value && value.trim().length > 0) ?? label;
|
|
208
|
-
addAnchor(anchors, seen, {
|
|
209
|
-
kind,
|
|
210
|
-
name: truncate(name, 80),
|
|
211
|
-
line: lineNumber,
|
|
212
|
-
detail: truncate(`${label}: ${line}`, 180),
|
|
213
|
-
});
|
|
214
|
-
return kind;
|
|
215
|
-
}
|
|
216
|
-
return null;
|
|
217
|
-
}
|
|
218
|
-
function scanKeyword(line, lineNumber, anchors, seen) {
|
|
219
|
-
if (!KEYWORD_PATTERN.test(line)) {
|
|
220
|
-
return false;
|
|
221
|
-
}
|
|
222
|
-
addAnchor(anchors, seen, {
|
|
223
|
-
kind: "keyword",
|
|
224
|
-
name: truncate(line.match(KEYWORD_PATTERN)?.[1] ?? "keyword", 80),
|
|
225
|
-
line: lineNumber,
|
|
226
|
-
detail: truncate(line, 180),
|
|
227
|
-
});
|
|
228
|
-
return true;
|
|
229
|
-
}
|
|
230
|
-
export function buildFileAnchorSummary(params) {
|
|
231
|
-
const anchors = [];
|
|
232
|
-
const seen = new Set();
|
|
233
|
-
const path = normalizeRepoRelPath(params.path);
|
|
234
|
-
const lines = params.content.split(/\r?\n/);
|
|
235
|
-
let symbolCount = 0;
|
|
236
|
-
let routeCount = 0;
|
|
237
|
-
let keywordCount = 0;
|
|
238
|
-
// Zero-indent symbol/route declaration lines — the top-level boundaries that
|
|
239
|
-
// bound per-symbol slice spans (see assignSymbolSpans). A nested (indented)
|
|
240
|
-
// binding the flat scanner also matches is deliberately excluded so it neither
|
|
241
|
-
// fragments an enclosing span nor becomes a spurious slice target.
|
|
242
|
-
const topLevelDeclLines = [];
|
|
243
|
-
addAnchor(anchors, seen, {
|
|
244
|
-
kind: "boundary",
|
|
245
|
-
name: "file_start",
|
|
246
|
-
line: 1,
|
|
247
|
-
detail: "Start of isolated large-file review boundary.",
|
|
248
|
-
});
|
|
249
|
-
if (params.totalLines > 1) {
|
|
250
|
-
addAnchor(anchors, seen, {
|
|
251
|
-
kind: "boundary",
|
|
252
|
-
name: "file_end",
|
|
253
|
-
line: params.totalLines,
|
|
254
|
-
detail: "End of isolated large-file review boundary.",
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
lines.forEach((line, index) => {
|
|
258
|
-
const lineNumber = index + 1;
|
|
259
|
-
const symbolKind = scanSymbol(line, lineNumber, anchors, seen);
|
|
260
|
-
if (symbolKind === "route")
|
|
261
|
-
routeCount += 1;
|
|
262
|
-
else if (symbolKind === "symbol")
|
|
263
|
-
symbolCount += 1;
|
|
264
|
-
// A zero-indent symbol/route declaration is a top-level slice boundary.
|
|
265
|
-
if ((symbolKind === "symbol" || symbolKind === "route") && /^\S/.test(line)) {
|
|
266
|
-
topLevelDeclLines.push(lineNumber);
|
|
267
|
-
}
|
|
268
|
-
if (scanKeyword(line, lineNumber, anchors, seen))
|
|
269
|
-
keywordCount += 1;
|
|
270
|
-
});
|
|
271
|
-
const graphEdges = collectGraphEdges(params.graphBundle, path);
|
|
272
|
-
for (const edge of graphEdges) {
|
|
273
|
-
addAnchor(anchors, seen, {
|
|
274
|
-
kind: "graph",
|
|
275
|
-
name: edge.kind ?? "edge",
|
|
276
|
-
detail: normalizeRepoRelPath(edge.from).toLowerCase() === path.toLowerCase()
|
|
277
|
-
? `outbound: ${edge.to}`
|
|
278
|
-
: `inbound: ${edge.from}`,
|
|
279
|
-
});
|
|
280
|
-
}
|
|
281
|
-
const analyzerSignals = analyzerSignalAnchorsForPath(path, buildAnalyzerSignalAnchorIndex(params.externalAnalyzerResults));
|
|
282
|
-
for (const signal of analyzerSignals) {
|
|
283
|
-
addAnchor(anchors, seen, signal);
|
|
284
|
-
}
|
|
285
|
-
const sorted = anchors.sort((a, b) => (a.line ?? Number.MAX_SAFE_INTEGER) - (b.line ?? Number.MAX_SAFE_INTEGER) ||
|
|
286
|
-
compareCodeUnits(a.kind, b.kind) ||
|
|
287
|
-
compareCodeUnits(a.name, b.name));
|
|
288
|
-
// Seed per-symbol spans on the full sorted list (before the cap) so a
|
|
289
|
-
// surviving anchor's span never depends on which anchors the cap dropped.
|
|
290
|
-
assignSymbolSpans(sorted, params.totalLines, topLevelDeclLines);
|
|
291
|
-
const boundedAnchors = sorted.slice(0, MAX_ANCHORS);
|
|
292
|
-
return {
|
|
293
|
-
contract_version: "audit-code-file-anchors/v1alpha1",
|
|
294
|
-
path,
|
|
295
|
-
total_lines: params.totalLines,
|
|
296
|
-
review_mode: "isolated_large_file",
|
|
297
|
-
scope_basis: [
|
|
298
|
-
"single assigned file",
|
|
299
|
-
"single review packet",
|
|
300
|
-
"mechanically extracted symbols, routes, graph edges, keywords, and analyzer signals",
|
|
301
|
-
"host-owned bound result artifact",
|
|
302
|
-
],
|
|
303
|
-
anchors: boundedAnchors,
|
|
304
|
-
omitted_anchor_count: Math.max(0, sorted.length - boundedAnchors.length),
|
|
305
|
-
counts: {
|
|
306
|
-
symbols: symbolCount,
|
|
307
|
-
routes: routeCount,
|
|
308
|
-
keywords: keywordCount,
|
|
309
|
-
graph_edges: graphEdges.length,
|
|
310
|
-
analyzer_signals: analyzerSignals.length,
|
|
311
|
-
},
|
|
312
|
-
};
|
|
313
|
-
}
|
|
314
|
-
//# sourceMappingURL=fileAnchors.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fileAnchors.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/fileAnchors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import type { GraphBundle, SurfaceManifest, CriticalFlowManifest } from "audit-tools/shared";
|
|
2
|
-
/**
|
|
3
|
-
* Render-time knip↔graph cross-check tag for a single knip "unused export" lead.
|
|
4
|
-
*
|
|
5
|
-
* - `LIKELY-DEAD` — the lead file has normalized in-degree 0, is NOT a known
|
|
6
|
-
* entrypoint, AND its own language analyzer actually ran
|
|
7
|
-
* (present in `graph_bundle.analyzers_used`). Only then is a
|
|
8
|
-
* zero-in-degree verdict trustworthy for this file.
|
|
9
|
-
* - `HAS-IMPORTERS` — the lead file has normalized in-degree > 0 (something
|
|
10
|
-
* imports it) → refutes "dead".
|
|
11
|
-
* - `ENTRYPOINT` — in-degree 0 but the file is a surface/critical-flow
|
|
12
|
-
* entrypoint → reachable by definition, not dead.
|
|
13
|
-
* - `UNVERIFIED` — `analyzers_used` is empty OR the lead's language analyzer
|
|
14
|
-
* is absent from it → per-file graph fidelity is unknown, so
|
|
15
|
-
* the graph cannot confirm or refute deadness.
|
|
16
|
-
*/
|
|
17
|
-
export type KnipGraphTag = "LIKELY-DEAD" | "HAS-IMPORTERS" | "UNVERIFIED" | "ENTRYPOINT";
|
|
18
|
-
/**
|
|
19
|
-
* A pre-derived, normalized index over one {@link GraphBundle} +
|
|
20
|
-
* surface/critical-flow entrypoints, ready for O(1) lookups per lead.
|
|
21
|
-
*
|
|
22
|
-
* CE-001: `deriveGraphSignals` keys fanIn by the RAW `edge.to`, so a
|
|
23
|
-
* Windows-backslash / mixed-case graph node id (`src\\Foo.ts`) never matches a
|
|
24
|
-
* POSIX-normalized knip lead path (`src/Foo.ts`). This index re-keys EVERY node
|
|
25
|
-
* (both `from` and `to` endpoints) and every entrypoint through
|
|
26
|
-
* `normalizeNodeKey` (POSIX separators, `./` stripped, lower-cased) so the lead
|
|
27
|
-
* path — normalized the same way — matches regardless of separator or case.
|
|
28
|
-
*/
|
|
29
|
-
export interface KnipGraphIndex {
|
|
30
|
-
/** Normalized node id → incoming edge count over the structural edge set. */
|
|
31
|
-
inDegree: Map<string, number>;
|
|
32
|
-
/** Normalized entrypoint paths from surface_manifest + critical_flows. */
|
|
33
|
-
entrypoints: Set<string>;
|
|
34
|
-
/** Analyzer ids that actually ran (from graph_bundle.analyzers_used). */
|
|
35
|
-
analyzersUsed: Set<string>;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Normalize a graph node id / path / entrypoint to one comparable key:
|
|
39
|
-
* backslashes → forward slashes, leading `./` stripped, lower-cased. Single
|
|
40
|
-
* source so the index and every lookup key agree (CE-001).
|
|
41
|
-
*/
|
|
42
|
-
export declare function normalizeNodeKey(path: string): string;
|
|
43
|
-
/**
|
|
44
|
-
* Map a lead file's extension to the id of the language analyzer that owns it
|
|
45
|
-
* (CE-003). Reuses the analyzer registry's own `supports(file)` predicate
|
|
46
|
-
* so extension→analyzer stays single-sourced in the analyzers, not duplicated.
|
|
47
|
-
* Returns null when no registered analyzer claims the file.
|
|
48
|
-
*/
|
|
49
|
-
export declare function analyzerIdForFile(path: string): string | null;
|
|
50
|
-
/**
|
|
51
|
-
* Build the normalized cross-check index from the three artifacts. Degrades to
|
|
52
|
-
* empty (never throws) on any missing/malformed input — an absent bundle yields
|
|
53
|
-
* an empty index whose every lead classifies UNVERIFIED.
|
|
54
|
-
*/
|
|
55
|
-
export declare function buildKnipGraphIndex(params: {
|
|
56
|
-
graphBundle?: GraphBundle;
|
|
57
|
-
surfaceManifest?: SurfaceManifest;
|
|
58
|
-
criticalFlows?: CriticalFlowManifest;
|
|
59
|
-
}): KnipGraphIndex;
|
|
60
|
-
/**
|
|
61
|
-
* Classify one knip lead path against the pre-built index. Pure: no IO, no
|
|
62
|
-
* mutation. See {@link KnipGraphTag} for the decision table.
|
|
63
|
-
*/
|
|
64
|
-
export declare function classifyKnipLead(leadPath: string, index: KnipGraphIndex): KnipGraphTag;
|
|
65
|
-
//# sourceMappingURL=knipGraphCrosscheck.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"knipGraphCrosscheck.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/knipGraphCrosscheck.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAI5B;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,YAAY,GACpB,aAAa,GACb,eAAe,GACf,YAAY,GACZ,YAAY,CAAC;AAEjB;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;IAC7B,6EAA6E;IAC7E,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,0EAA0E;IAC1E,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,yEAAyE;IACzE,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK7D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC,GAAG,cAAc,CAoCjB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,cAAc,GACpB,YAAY,CAkBd"}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { allGraphEdges } from "../extractors/graphSignals.js";
|
|
2
|
-
import { ANALYZER_REGISTRY } from "../extractors/analyzers/registry.js";
|
|
3
|
-
/**
|
|
4
|
-
* Normalize a graph node id / path / entrypoint to one comparable key:
|
|
5
|
-
* backslashes → forward slashes, leading `./` stripped, lower-cased. Single
|
|
6
|
-
* source so the index and every lookup key agree (CE-001).
|
|
7
|
-
*/
|
|
8
|
-
export function normalizeNodeKey(path) {
|
|
9
|
-
return path.replace(/\\/g, "/").replace(/^\.\//, "").toLowerCase();
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Map a lead file's extension to the id of the language analyzer that owns it
|
|
13
|
-
* (CE-003). Reuses the analyzer registry's own `supports(file)` predicate
|
|
14
|
-
* so extension→analyzer stays single-sourced in the analyzers, not duplicated.
|
|
15
|
-
* Returns null when no registered analyzer claims the file.
|
|
16
|
-
*/
|
|
17
|
-
export function analyzerIdForFile(path) {
|
|
18
|
-
for (const analyzer of ANALYZER_REGISTRY) {
|
|
19
|
-
if (analyzer.supports(path))
|
|
20
|
-
return analyzer.id;
|
|
21
|
-
}
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Build the normalized cross-check index from the three artifacts. Degrades to
|
|
26
|
-
* empty (never throws) on any missing/malformed input — an absent bundle yields
|
|
27
|
-
* an empty index whose every lead classifies UNVERIFIED.
|
|
28
|
-
*/
|
|
29
|
-
export function buildKnipGraphIndex(params) {
|
|
30
|
-
const inDegree = new Map();
|
|
31
|
-
const entrypoints = new Set();
|
|
32
|
-
const analyzersUsed = new Set();
|
|
33
|
-
const { graphBundle, surfaceManifest, criticalFlows } = params;
|
|
34
|
-
if (graphBundle?.graphs) {
|
|
35
|
-
for (const edge of allGraphEdges(graphBundle)) {
|
|
36
|
-
const to = normalizeNodeKey(edge.to);
|
|
37
|
-
inDegree.set(to, (inDegree.get(to) ?? 0) + 1);
|
|
38
|
-
// Ensure `from`-only nodes are still known (in-degree 0), so a lead that
|
|
39
|
-
// appears only as an edge source is treated as present-but-uncited, not
|
|
40
|
-
// absent. Lookups default missing keys to 0 anyway; recording the source
|
|
41
|
-
// node keeps the index a faithful node set.
|
|
42
|
-
const from = normalizeNodeKey(edge.from);
|
|
43
|
-
if (!inDegree.has(from))
|
|
44
|
-
inDegree.set(from, 0);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
for (const surface of surfaceManifest?.surfaces ?? []) {
|
|
48
|
-
if (typeof surface.entrypoint === "string") {
|
|
49
|
-
entrypoints.add(normalizeNodeKey(surface.entrypoint));
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
for (const flow of criticalFlows?.flows ?? []) {
|
|
53
|
-
for (const entry of flow.entrypoints ?? []) {
|
|
54
|
-
if (typeof entry === "string")
|
|
55
|
-
entrypoints.add(normalizeNodeKey(entry));
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
for (const id of graphBundle?.analyzers_used ?? []) {
|
|
59
|
-
if (typeof id === "string")
|
|
60
|
-
analyzersUsed.add(id);
|
|
61
|
-
}
|
|
62
|
-
return { inDegree, entrypoints, analyzersUsed };
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Classify one knip lead path against the pre-built index. Pure: no IO, no
|
|
66
|
-
* mutation. See {@link KnipGraphTag} for the decision table.
|
|
67
|
-
*/
|
|
68
|
-
export function classifyKnipLead(leadPath, index) {
|
|
69
|
-
const key = normalizeNodeKey(leadPath);
|
|
70
|
-
const inDegree = index.inDegree.get(key) ?? 0;
|
|
71
|
-
if (inDegree > 0)
|
|
72
|
-
return "HAS-IMPORTERS";
|
|
73
|
-
if (index.entrypoints.has(key))
|
|
74
|
-
return "ENTRYPOINT";
|
|
75
|
-
// In-degree 0 and non-entrypoint: only trust the "dead" reading when this
|
|
76
|
-
// file's OWN language analyzer actually ran (per-file fidelity, CE-003).
|
|
77
|
-
const analyzerId = analyzerIdForFile(leadPath);
|
|
78
|
-
if (index.analyzersUsed.size === 0 ||
|
|
79
|
-
analyzerId === null ||
|
|
80
|
-
!index.analyzersUsed.has(analyzerId)) {
|
|
81
|
-
return "UNVERIFIED";
|
|
82
|
-
}
|
|
83
|
-
return "LIKELY-DEAD";
|
|
84
|
-
}
|
|
85
|
-
//# sourceMappingURL=knipGraphCrosscheck.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"knipGraphCrosscheck.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/knipGraphCrosscheck.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"selectiveDeepening.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/selectiveDeepening.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,4BAA4B,GAC7B,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAE,kCAAkC,EAAE,MAAM,+BAA+B,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
// Public entry for selective deepening. The implementation was split by
|
|
2
|
-
// task-building strategy into ./selectiveDeepening/ (finding-followup, conflict,
|
|
3
|
-
// high-risk-clean, runtime-validation, lens-verification, steward-followup) with
|
|
4
|
-
// the shared primitives in ./selectiveDeepening/shared.ts. This barrel preserves
|
|
5
|
-
// the original module path so importers and tests are unaffected.
|
|
6
|
-
export { buildSelectiveDeepeningTasks, } from "./selectiveDeepening/index.js";
|
|
7
|
-
//# sourceMappingURL=selectiveDeepening.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"selectiveDeepening.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/selectiveDeepening.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,iFAAiF;AACjF,iFAAiF;AACjF,iFAAiF;AACjF,kEAAkE;AAClE,OAAO,EACL,4BAA4B,GAC7B,MAAM,+BAA+B,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { AuditTask, UnitManifest } from "./types.js";
|
|
2
|
-
export interface TaskBuildOptions {
|
|
3
|
-
pass_prefix?: string;
|
|
4
|
-
limit_lenses?: string[];
|
|
5
|
-
}
|
|
6
|
-
export declare function buildAuditTasks(unitManifest: UnitManifest, options?: TaskBuildOptions | string): AuditTask[];
|
|
7
|
-
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/audit/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAO1D,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAwDD,wBAAgB,eAAe,CAC7B,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE,gBAAgB,GAAG,MAAW,GACtC,SAAS,EAAE,CAuBb"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { coerceJsonObjectArg, isRecord } from "audit-tools/shared";
|
|
2
|
-
function assertStringArray(value, label) {
|
|
3
|
-
if (!Array.isArray(value) || value.some((item) => typeof item !== "string")) {
|
|
4
|
-
throw new TypeError(`${label} must be an array of strings.`);
|
|
5
|
-
}
|
|
6
|
-
}
|
|
7
|
-
function assertUnitManifest(value) {
|
|
8
|
-
if (!isRecord(value) || !Array.isArray(value.units)) {
|
|
9
|
-
throw new TypeError("buildAuditTasks requires unitManifest.units to be an array.");
|
|
10
|
-
}
|
|
11
|
-
value.units.forEach((unit, index) => {
|
|
12
|
-
const label = `unitManifest.units[${index}]`;
|
|
13
|
-
if (!isRecord(unit)) {
|
|
14
|
-
throw new TypeError(`${label} must be an object.`);
|
|
15
|
-
}
|
|
16
|
-
if (typeof unit.unit_id !== "string" || unit.unit_id.length === 0) {
|
|
17
|
-
throw new TypeError(`${label}.unit_id must be a non-empty string.`);
|
|
18
|
-
}
|
|
19
|
-
if (typeof unit.name !== "string" || unit.name.length === 0) {
|
|
20
|
-
throw new TypeError(`${label}.name must be a non-empty string.`);
|
|
21
|
-
}
|
|
22
|
-
assertStringArray(unit.files, `${label}.files`);
|
|
23
|
-
assertStringArray(unit.required_lenses, `${label}.required_lenses`);
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
function normalizedOptions(rawOptions) {
|
|
27
|
-
const options = coerceJsonObjectArg(rawOptions, "buildAuditTasks options");
|
|
28
|
-
if (options.pass_prefix !== undefined && typeof options.pass_prefix !== "string") {
|
|
29
|
-
throw new TypeError("buildAuditTasks options.pass_prefix must be a string.");
|
|
30
|
-
}
|
|
31
|
-
if (options.limit_lenses !== undefined) {
|
|
32
|
-
assertStringArray(options.limit_lenses, "buildAuditTasks options.limit_lenses");
|
|
33
|
-
}
|
|
34
|
-
return {
|
|
35
|
-
passPrefix: options.pass_prefix ?? "pass",
|
|
36
|
-
allowed: options.limit_lenses ? new Set(options.limit_lenses) : null,
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
export function buildAuditTasks(unitManifest, options = {}) {
|
|
40
|
-
assertUnitManifest(unitManifest);
|
|
41
|
-
const { allowed, passPrefix } = normalizedOptions(options);
|
|
42
|
-
const tasks = [];
|
|
43
|
-
for (const unit of unitManifest.units) {
|
|
44
|
-
for (const lens of unit.required_lenses) {
|
|
45
|
-
if (allowed && !allowed.has(lens)) {
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
tasks.push({
|
|
49
|
-
task_id: `${unit.unit_id}:${lens}`,
|
|
50
|
-
unit_id: unit.unit_id,
|
|
51
|
-
pass_id: `${passPrefix}:${lens}`,
|
|
52
|
-
lens,
|
|
53
|
-
file_paths: unit.files,
|
|
54
|
-
rationale: `Audit ${unit.name} under the ${lens} lens.`,
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return tasks;
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/audit/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"findingRanks.d.ts","sourceRoot":"","sources":["../../../src/audit/reporting/findingRanks.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
// Severity / confidence ranking is single-sourced in audit-tools/shared
|
|
2
|
-
// (derived from the canonical SEVERITIES/CONFIDENCES tuples so it can never
|
|
3
|
-
// drift). This module re-exports the shared functions under the existing import
|
|
4
|
-
// path so the auditor's reporting code (workBlocks, mergeFindings) keeps working
|
|
5
|
-
// without each package hand-copying a rank table.
|
|
6
|
-
export { severityRank, confidenceRank, severityCompare } from "audit-tools/shared";
|
|
7
|
-
//# sourceMappingURL=findingRanks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"findingRanks.js","sourceRoot":"","sources":["../../../src/audit/reporting/findingRanks.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,4EAA4E;AAC5E,gFAAgF;AAChF,iFAAiF;AACjF,kDAAkD;AAClD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export type WorkerResultStatus = "completed" | "blocked" | "failed" | "no_progress";
|
|
2
|
-
export interface WorkerResult {
|
|
3
|
-
contract_version: "audit-code-worker-result/v1alpha1";
|
|
4
|
-
run_id: string;
|
|
5
|
-
obligation_id: string | null;
|
|
6
|
-
status: WorkerResultStatus;
|
|
7
|
-
progress_made: boolean;
|
|
8
|
-
selected_executor: string | null;
|
|
9
|
-
artifacts_written: string[];
|
|
10
|
-
summary: string;
|
|
11
|
-
next_likely_step: string | null;
|
|
12
|
-
errors: string[];
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=workerResult.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workerResult.d.ts","sourceRoot":"","sources":["../../../src/audit/types/workerResult.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,SAAS,GACT,QAAQ,GACR,aAAa,CAAC;AAElB,MAAM,WAAW,YAAY;IAC3B,gBAAgB,EAAE,mCAAmC,CAAC;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB"}
|