audit-tools 0.42.1 → 0.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dispatch/merge-results.mjs +229 -140
- package/dispatch/validate-result.mjs +98 -40
- package/dist/audit/cli/conceptualDispatch.d.ts.map +1 -1
- package/dist/audit/cli/conceptualDispatch.js +35 -3
- package/dist/audit/cli/conceptualDispatch.js.map +1 -1
- package/dist/audit/cli/dispatch/hostHandoff.d.ts +9 -1
- package/dist/audit/cli/dispatch/hostHandoff.d.ts.map +1 -1
- package/dist/audit/cli/dispatch/hostHandoff.js +94 -38
- package/dist/audit/cli/dispatch/hostHandoff.js.map +1 -1
- package/dist/audit/cli/laneSubmissions.d.ts +2 -2
- package/dist/audit/cli/laneSubmissions.js +2 -2
- package/dist/audit/cli/nextStepCommand.d.ts +64 -0
- package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
- package/dist/audit/cli/nextStepCommand.js +877 -783
- package/dist/audit/cli/nextStepCommand.js.map +1 -1
- package/dist/audit/cli/nextStepHelpers.d.ts +12 -36
- package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
- package/dist/audit/cli/nextStepHelpers.js +34 -77
- package/dist/audit/cli/nextStepHelpers.js.map +1 -1
- package/dist/audit/cli/steps.d.ts +2 -2
- package/dist/audit/extractors/graph.d.ts +28 -2
- package/dist/audit/extractors/graph.d.ts.map +1 -1
- package/dist/audit/extractors/graph.js +122 -11
- package/dist/audit/extractors/graph.js.map +1 -1
- package/dist/audit/extractors/graphRoutes.d.ts +8 -0
- package/dist/audit/extractors/graphRoutes.d.ts.map +1 -1
- package/dist/audit/extractors/graphRoutes.js +71 -4
- package/dist/audit/extractors/graphRoutes.js.map +1 -1
- package/dist/audit/io/artifacts.d.ts +55 -0
- package/dist/audit/io/artifacts.d.ts.map +1 -1
- package/dist/audit/io/artifacts.js +189 -12
- package/dist/audit/io/artifacts.js.map +1 -1
- package/dist/audit/io/toolingManifest.d.ts +11 -0
- package/dist/audit/io/toolingManifest.d.ts.map +1 -1
- package/dist/audit/io/toolingManifest.js +13 -3
- package/dist/audit/io/toolingManifest.js.map +1 -1
- package/dist/audit/orchestrator/advance.d.ts +64 -0
- package/dist/audit/orchestrator/advance.d.ts.map +1 -1
- package/dist/audit/orchestrator/advance.js +191 -57
- package/dist/audit/orchestrator/advance.js.map +1 -1
- package/dist/audit/orchestrator/charterClarificationExecutor.d.ts.map +1 -1
- package/dist/audit/orchestrator/charterClarificationExecutor.js +55 -21
- package/dist/audit/orchestrator/charterClarificationExecutor.js.map +1 -1
- package/dist/audit/orchestrator/flowCoverage.d.ts.map +1 -1
- package/dist/audit/orchestrator/flowCoverage.js +7 -10
- package/dist/audit/orchestrator/flowCoverage.js.map +1 -1
- package/dist/audit/orchestrator/flowPlanning.d.ts +54 -1
- package/dist/audit/orchestrator/flowPlanning.d.ts.map +1 -1
- package/dist/audit/orchestrator/flowPlanning.js +77 -18
- package/dist/audit/orchestrator/flowPlanning.js.map +1 -1
- package/dist/audit/orchestrator/flowRequeue.d.ts.map +1 -1
- package/dist/audit/orchestrator/flowRequeue.js +6 -10
- package/dist/audit/orchestrator/flowRequeue.js.map +1 -1
- package/dist/audit/orchestrator/requeueFold.d.ts.map +1 -1
- package/dist/audit/orchestrator/requeueFold.js +18 -5
- package/dist/audit/orchestrator/requeueFold.js.map +1 -1
- package/dist/audit/orchestrator/staleness.d.ts +24 -1
- package/dist/audit/orchestrator/staleness.d.ts.map +1 -1
- package/dist/audit/orchestrator/staleness.js +147 -16
- package/dist/audit/orchestrator/staleness.js.map +1 -1
- package/dist/audit/orchestrator/syntaxResolutionExecutor.d.ts +26 -0
- package/dist/audit/orchestrator/syntaxResolutionExecutor.d.ts.map +1 -1
- package/dist/audit/orchestrator/syntaxResolutionExecutor.js +97 -12
- package/dist/audit/orchestrator/syntaxResolutionExecutor.js.map +1 -1
- package/dist/audit/orchestrator/taskBuilder.d.ts.map +1 -1
- package/dist/audit/orchestrator/taskBuilder.js +111 -21
- package/dist/audit/orchestrator/taskBuilder.js.map +1 -1
- package/dist/audit/orchestrator/trivialAudit.d.ts +17 -1
- package/dist/audit/orchestrator/trivialAudit.d.ts.map +1 -1
- package/dist/audit/orchestrator/trivialAudit.js +31 -4
- package/dist/audit/orchestrator/trivialAudit.js.map +1 -1
- package/dist/audit/types/analyzerCapability.d.ts +6 -6
- package/dist/audit/types/charterRegister.d.ts +30 -12
- package/dist/audit/types/charterRegister.d.ts.map +1 -1
- package/dist/audit/types/charterRegister.js +22 -9
- package/dist/audit/types/charterRegister.js.map +1 -1
- package/dist/audit/validation/anchorGrounding.d.ts.map +1 -1
- package/dist/audit/validation/anchorGrounding.js +17 -0
- package/dist/audit/validation/anchorGrounding.js.map +1 -1
- package/dist/audit/validation/auditResults.d.ts +17 -0
- package/dist/audit/validation/auditResults.d.ts.map +1 -1
- package/dist/audit/validation/auditResults.js +50 -17
- package/dist/audit/validation/auditResults.js.map +1 -1
- package/dist/remediate/contractPipeline/cyclicSeamResolution.d.ts +48 -0
- package/dist/remediate/contractPipeline/cyclicSeamResolution.d.ts.map +1 -1
- package/dist/remediate/contractPipeline/cyclicSeamResolution.js +128 -0
- package/dist/remediate/contractPipeline/cyclicSeamResolution.js.map +1 -1
- package/dist/remediate/contractPipeline/derive.d.ts +8 -5
- package/dist/remediate/contractPipeline/derive.d.ts.map +1 -1
- package/dist/remediate/contractPipeline/derive.js +8 -16
- package/dist/remediate/contractPipeline/derive.js.map +1 -1
- package/dist/remediate/index.d.ts.map +1 -1
- package/dist/remediate/index.js +43 -2
- package/dist/remediate/index.js.map +1 -1
- package/dist/remediate/intent/intentOrdering.d.ts +13 -5
- package/dist/remediate/intent/intentOrdering.d.ts.map +1 -1
- package/dist/remediate/intent/intentOrdering.js +56 -25
- package/dist/remediate/intent/intentOrdering.js.map +1 -1
- package/dist/remediate/phases/close.d.ts +57 -2
- package/dist/remediate/phases/close.d.ts.map +1 -1
- package/dist/remediate/phases/close.js +260 -36
- package/dist/remediate/phases/close.js.map +1 -1
- package/dist/remediate/phases/triage.d.ts.map +1 -1
- package/dist/remediate/phases/triage.js +14 -2
- package/dist/remediate/phases/triage.js.map +1 -1
- package/dist/remediate/state/disposition.d.ts +26 -4
- package/dist/remediate/state/disposition.d.ts.map +1 -1
- package/dist/remediate/state/itemStatus.d.ts +33 -6
- package/dist/remediate/state/itemStatus.d.ts.map +1 -1
- package/dist/remediate/state/itemStatus.js +154 -39
- package/dist/remediate/state/itemStatus.js.map +1 -1
- package/dist/remediate/state/types.d.ts +41 -2
- package/dist/remediate/state/types.d.ts.map +1 -1
- package/dist/remediate/state/types.js.map +1 -1
- package/dist/remediate/steps/contractPipeline.d.ts +296 -15
- package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
- package/dist/remediate/steps/contractPipeline.js +1783 -1001
- package/dist/remediate/steps/contractPipeline.js.map +1 -1
- package/dist/remediate/steps/dispatch/hostHandoff.d.ts +137 -2
- package/dist/remediate/steps/dispatch/hostHandoff.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch/hostHandoff.js +657 -59
- package/dist/remediate/steps/dispatch/hostHandoff.js.map +1 -1
- package/dist/remediate/steps/finalGate.d.ts +136 -37
- package/dist/remediate/steps/finalGate.d.ts.map +1 -1
- package/dist/remediate/steps/finalGate.js +120 -86
- package/dist/remediate/steps/finalGate.js.map +1 -1
- package/dist/remediate/steps/gateCommands.d.ts +8 -0
- package/dist/remediate/steps/gateCommands.d.ts.map +1 -1
- package/dist/remediate/steps/gateCommands.js +40 -11
- package/dist/remediate/steps/gateCommands.js.map +1 -1
- package/dist/remediate/steps/nextStep.d.ts +96 -5
- package/dist/remediate/steps/nextStep.d.ts.map +1 -1
- package/dist/remediate/steps/nextStep.js +668 -147
- package/dist/remediate/steps/nextStep.js.map +1 -1
- package/dist/remediate/steps/types.d.ts +4 -3
- package/dist/remediate/steps/types.d.ts.map +1 -1
- package/dist/remediate/steps/types.js +10 -2
- package/dist/remediate/steps/types.js.map +1 -1
- package/dist/remediate/validation/artifacts.d.ts +20 -2
- package/dist/remediate/validation/artifacts.d.ts.map +1 -1
- package/dist/remediate/validation/artifacts.js +224 -130
- package/dist/remediate/validation/artifacts.js.map +1 -1
- package/dist/remediate/validation/contractPipelineGates.d.ts +58 -0
- package/dist/remediate/validation/contractPipelineGates.d.ts.map +1 -1
- package/dist/remediate/validation/contractPipelineGates.js +143 -27
- package/dist/remediate/validation/contractPipelineGates.js.map +1 -1
- package/dist/shared/analyzers/acquisitionEngine.d.ts +72 -25
- package/dist/shared/analyzers/acquisitionEngine.d.ts.map +1 -1
- package/dist/shared/analyzers/acquisitionEngine.js +149 -15
- package/dist/shared/analyzers/acquisitionEngine.js.map +1 -1
- package/dist/shared/analyzers/binaryAcquisition.d.ts +27 -2
- package/dist/shared/analyzers/binaryAcquisition.d.ts.map +1 -1
- package/dist/shared/analyzers/binaryAcquisition.js +149 -43
- package/dist/shared/analyzers/binaryAcquisition.js.map +1 -1
- package/dist/shared/analyzers/candidates.d.ts +9 -8
- package/dist/shared/analyzers/candidates.d.ts.map +1 -1
- package/dist/shared/analyzers/candidates.js +96 -64
- package/dist/shared/analyzers/candidates.js.map +1 -1
- package/dist/shared/analyzers/normalizeExternal.d.ts +40 -12
- package/dist/shared/analyzers/normalizeExternal.d.ts.map +1 -1
- package/dist/shared/analyzers/normalizeExternal.js +74 -18
- package/dist/shared/analyzers/normalizeExternal.js.map +1 -1
- package/dist/shared/analyzers/rubocop.d.ts +14 -13
- package/dist/shared/analyzers/rubocop.d.ts.map +1 -1
- package/dist/shared/analyzers/rubocop.js +29 -6
- package/dist/shared/analyzers/rubocop.js.map +1 -1
- package/dist/shared/analyzers/types.d.ts +196 -13
- package/dist/shared/analyzers/types.d.ts.map +1 -1
- package/dist/shared/analyzers/types.js +122 -9
- package/dist/shared/analyzers/types.js.map +1 -1
- package/dist/shared/decompose/charterClarification.d.ts +12 -1
- package/dist/shared/decompose/charterClarification.d.ts.map +1 -1
- package/dist/shared/decompose/charterClarification.js +11 -4
- package/dist/shared/decompose/charterClarification.js.map +1 -1
- package/dist/shared/decompose/charterExtraction.d.ts +20 -10
- package/dist/shared/decompose/charterExtraction.d.ts.map +1 -1
- package/dist/shared/decompose/charterExtraction.js +52 -23
- package/dist/shared/decompose/charterExtraction.js.map +1 -1
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +5 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/intent/freeFormIntentInterpreter.d.ts +12 -2
- package/dist/shared/intent/freeFormIntentInterpreter.d.ts.map +1 -1
- package/dist/shared/intent/freeFormIntentInterpreter.js +27 -22
- package/dist/shared/intent/freeFormIntentInterpreter.js.map +1 -1
- package/dist/shared/intent/pathScope.d.ts +12 -1
- package/dist/shared/intent/pathScope.d.ts.map +1 -1
- package/dist/shared/intent/pathScope.js +56 -19
- package/dist/shared/intent/pathScope.js.map +1 -1
- package/dist/shared/intent/sharedIntentData.d.ts +19 -1
- package/dist/shared/intent/sharedIntentData.d.ts.map +1 -1
- package/dist/shared/intent/sharedIntentData.js +33 -8
- package/dist/shared/intent/sharedIntentData.js.map +1 -1
- package/dist/shared/io/fileLock.d.ts +12 -0
- package/dist/shared/io/fileLock.d.ts.map +1 -1
- package/dist/shared/io/fileLock.js +48 -5
- package/dist/shared/io/fileLock.js.map +1 -1
- package/dist/shared/io/json.d.ts +13 -0
- package/dist/shared/io/json.d.ts.map +1 -1
- package/dist/shared/io/json.js +19 -1
- package/dist/shared/io/json.js.map +1 -1
- package/dist/shared/steps/stepEmissionScaffold.d.ts +69 -0
- package/dist/shared/steps/stepEmissionScaffold.d.ts.map +1 -0
- package/dist/shared/steps/stepEmissionScaffold.js +83 -0
- package/dist/shared/steps/stepEmissionScaffold.js.map +1 -0
- package/dist/shared/submission/handRecovery.d.ts.map +1 -1
- package/dist/shared/submission/handRecovery.js +69 -4
- package/dist/shared/submission/handRecovery.js.map +1 -1
- package/dist/shared/submission/submissionIdentity.d.ts +10 -1
- package/dist/shared/submission/submissionIdentity.d.ts.map +1 -1
- package/dist/shared/submission/submissionIdentity.js +12 -3
- package/dist/shared/submission/submissionIdentity.js.map +1 -1
- package/dist/shared/submission/submissionLedger.d.ts +43 -2
- package/dist/shared/submission/submissionLedger.d.ts.map +1 -1
- package/dist/shared/submission/submissionLedger.js +50 -7
- package/dist/shared/submission/submissionLedger.js.map +1 -1
- package/dist/shared/tooling/allowlistedExec.d.ts +9 -0
- package/dist/shared/tooling/allowlistedExec.d.ts.map +1 -1
- package/dist/shared/tooling/allowlistedExec.js +19 -2
- package/dist/shared/tooling/allowlistedExec.js.map +1 -1
- package/dist/shared/tooling/commandShape.d.ts +21 -0
- package/dist/shared/tooling/commandShape.d.ts.map +1 -0
- package/dist/shared/tooling/commandShape.js +120 -0
- package/dist/shared/tooling/commandShape.js.map +1 -0
- package/dist/shared/types/charter.d.ts +24 -0
- package/dist/shared/types/charter.d.ts.map +1 -1
- package/dist/shared/types/charter.js +9 -0
- package/dist/shared/types/charter.js.map +1 -1
- package/dist/shared/types/remediationOutcome.d.ts +282 -9
- package/dist/shared/types/remediationOutcome.d.ts.map +1 -1
- package/dist/shared/types/remediationOutcome.js +174 -1
- package/dist/shared/types/remediationOutcome.js.map +1 -1
- package/package.json +2 -1
- package/remediate-code.mjs +15 -0
- package/wrapper/remediate-code-wrapper-install-hosts.mjs +45 -4
- package/wrapper/remediate-code-wrapper-install-renderers.mjs +12 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binaryAcquisition.js","sourceRoot":"","sources":["../../../src/shared/analyzers/binaryAcquisition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,SAAS,EACT,UAAU,EACV,SAAS,EACT,WAAW,EACX,MAAM,EACN,QAAQ,EACR,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"binaryAcquisition.js","sourceRoot":"","sources":["../../../src/shared/analyzers/binaryAcquisition.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ExternalAnalyzerCandidate } from "./acquisitionEngine.js";
|
|
2
|
+
import type { ExternalAnalyzerParseReport } from "./types.js";
|
|
2
3
|
/**
|
|
3
4
|
* The value-curated EXTERNAL analyzer candidate registry. This is the only place
|
|
4
5
|
* concrete tools are named; the engine is tool-agnostic. Membership in the
|
|
@@ -13,11 +14,11 @@ declare const GITLEAKS_VERSION = "8.21.2";
|
|
|
13
14
|
* the engine's generic item shape. The raw secret value is NEVER carried through
|
|
14
15
|
* (Secret/Match are dropped) so the persisted artifact cannot leak a credential.
|
|
15
16
|
*/
|
|
16
|
-
declare function parseGitleaks(report: string):
|
|
17
|
+
declare function parseGitleaks(report: string): ExternalAnalyzerParseReport;
|
|
17
18
|
declare const gitleaksCandidate: ExternalAnalyzerCandidate;
|
|
18
19
|
declare const semgrepCandidate: ExternalAnalyzerCandidate;
|
|
19
20
|
declare const eslintCandidate: ExternalAnalyzerCandidate;
|
|
20
|
-
declare function parseKnip(stdout: string):
|
|
21
|
+
declare function parseKnip(stdout: string): ExternalAnalyzerParseReport;
|
|
21
22
|
declare const knipCandidate: ExternalAnalyzerCandidate;
|
|
22
23
|
/**
|
|
23
24
|
* Parse jscpd's JSON reporter output (`{ duplicates: [{ firstFile, secondFile,
|
|
@@ -27,7 +28,7 @@ declare const knipCandidate: ExternalAnalyzerCandidate;
|
|
|
27
28
|
* normalization path, not to a candidate's own parse function (same as
|
|
28
29
|
* parseKnip/parseEslint/parseSemgrep above).
|
|
29
30
|
*/
|
|
30
|
-
declare function parseJscpd(report: string):
|
|
31
|
+
declare function parseJscpd(report: string): ExternalAnalyzerParseReport;
|
|
31
32
|
declare const jscpdCandidate: ExternalAnalyzerCandidate;
|
|
32
33
|
declare const OSV_SCANNER_VERSION = "2.4.0";
|
|
33
34
|
/**
|
|
@@ -39,7 +40,7 @@ declare const OSV_SCANNER_VERSION = "2.4.0";
|
|
|
39
40
|
* raw vulnerability id, so CVE/GHSA aliases for the same underlying issue
|
|
40
41
|
* don't fan out into duplicate items.
|
|
41
42
|
*/
|
|
42
|
-
declare function parseOsvScanner(stdout: string):
|
|
43
|
+
declare function parseOsvScanner(stdout: string): ExternalAnalyzerParseReport;
|
|
43
44
|
declare const osvScannerCandidate: ExternalAnalyzerCandidate;
|
|
44
45
|
declare const clippyCandidate: ExternalAnalyzerCandidate;
|
|
45
46
|
declare const rubocopCandidate: ExternalAnalyzerCandidate;
|
|
@@ -50,7 +51,7 @@ declare const HADOLINT_VERSION = "2.14.0";
|
|
|
50
51
|
* message }]`. `level` ∈ error|warning|info|style. Degrades to `[]` on
|
|
51
52
|
* empty/malformed/non-array input.
|
|
52
53
|
*/
|
|
53
|
-
declare function parseHadolint(stdout: string):
|
|
54
|
+
declare function parseHadolint(stdout: string): ExternalAnalyzerParseReport;
|
|
54
55
|
declare const hadolintCandidate: ExternalAnalyzerCandidate;
|
|
55
56
|
declare const ACTIONLINT_VERSION = "1.7.12";
|
|
56
57
|
/**
|
|
@@ -58,7 +59,7 @@ declare const ACTIONLINT_VERSION = "1.7.12";
|
|
|
58
59
|
* against actionlint's template output: `[{ message, filepath, line, column,
|
|
59
60
|
* kind }]`. Degrades to `[]` on empty/malformed/non-array input.
|
|
60
61
|
*/
|
|
61
|
-
declare function parseActionlint(stdout: string):
|
|
62
|
+
declare function parseActionlint(stdout: string): ExternalAnalyzerParseReport;
|
|
62
63
|
declare const actionlintCandidate: ExternalAnalyzerCandidate;
|
|
63
64
|
/**
|
|
64
65
|
* Parse type-coverage's `--json --detail` stdout — grounded against
|
|
@@ -66,14 +67,14 @@ declare const actionlintCandidate: ExternalAnalyzerCandidate;
|
|
|
66
67
|
* line, character, text }] }`. Each `anys` entry is one implicit/explicit `any`
|
|
67
68
|
* site; degrades to `[]` on empty/malformed input or a missing `anys` array.
|
|
68
69
|
*/
|
|
69
|
-
declare function parseTypeCoverage(stdout: string):
|
|
70
|
+
declare function parseTypeCoverage(stdout: string): ExternalAnalyzerParseReport;
|
|
70
71
|
declare const typeCoverageCandidate: ExternalAnalyzerCandidate;
|
|
71
72
|
/**
|
|
72
73
|
* Parse lizard's CSV output (default: `lizard -l <languages> --csv <path>`).
|
|
73
74
|
* CSV format: "NLOC,CCN,Token,PARAM,Length,Location,File,Function"
|
|
74
75
|
* Degrades to `[]` on parse failure; reports lead findings for complexity overages.
|
|
75
76
|
*/
|
|
76
|
-
declare function parseLizard(stdout: string):
|
|
77
|
+
declare function parseLizard(stdout: string): ExternalAnalyzerParseReport;
|
|
77
78
|
declare const lizardCandidate: ExternalAnalyzerCandidate;
|
|
78
79
|
/** The curated external analyzer candidate set. `defaultRun` marks the consent-free default members. */
|
|
79
80
|
export declare const EXTERNAL_ANALYZER_CANDIDATES: ExternalAnalyzerCandidate[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"candidates.d.ts","sourceRoot":"","sources":["../../../src/shared/analyzers/candidates.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"candidates.d.ts","sourceRoot":"","sources":["../../../src/shared/analyzers/candidates.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAUxE,OAAO,KAAK,EAEV,2BAA2B,EAC5B,MAAM,YAAY,CAAC;AAIpB;;;;;;;GAOG;AAKH,QAAA,MAAM,gBAAgB,WAAW,CAAC;AAqElC;;;;GAIG;AACH,iBAAS,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CAuClE;AAED,QAAA,MAAM,iBAAiB,EAAE,yBA4BxB,CAAC;AAiCF,QAAA,MAAM,gBAAgB,EAAE,yBAevB,CAAC;AAuCF,QAAA,MAAM,eAAe,EAAE,yBAetB,CAAC;AAkBF,iBAAS,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CAyE9D;AAED,QAAA,MAAM,aAAa,EAAE,yBA2BpB,CAAC;AA+FF;;;;;;;GAOG;AACH,iBAAS,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CAkC/D;AAED,QAAA,MAAM,cAAc,EAAE,yBA4BrB,CAAC;AAOF,QAAA,MAAM,mBAAmB,UAAU,CAAC;AA2BpC;;;;;;;;GAQG;AACH,iBAAS,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CA+DpE;AAED,QAAA,MAAM,mBAAmB,EAAE,yBAoB1B,CAAC;AAKF,QAAA,MAAM,eAAe,EAAE,yBAmBtB,CAAC;AAKF,QAAA,MAAM,gBAAgB,EAAE,yBAkBvB,CAAC;AAOF,QAAA,MAAM,gBAAgB,WAAW,CAAC;AA2BlC;;;;;GAKG;AACH,iBAAS,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CA+BlE;AAED,QAAA,MAAM,iBAAiB,EAAE,yBAiBxB,CAAC;AAOF,QAAA,MAAM,kBAAkB,WAAW,CAAC;AAkCpC;;;;GAIG;AACH,iBAAS,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CA6BpE;AAED,QAAA,MAAM,mBAAmB,EAAE,yBAkB1B,CAAC;AAKF;;;;;GAKG;AACH,iBAAS,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CA4BtE;AAED,QAAA,MAAM,qBAAqB,EAAE,yBAkB5B,CAAC;AA0CF;;;;GAIG;AACH,iBAAS,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,2BAA2B,CAgDhE;AAED,QAAA,MAAM,eAAe,EAAE,yBA0BtB,CAAC;AAEF,wGAAwG;AACxG,eAAO,MAAM,4BAA4B,EAAE,yBAAyB,EAanE,CAAC;AAEF,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,SAAS,EACT,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,WAAW,GACZ,CAAC"}
|
|
@@ -4,7 +4,7 @@ import { readdirSync } from "node:fs";
|
|
|
4
4
|
import { AUDIT_TOOLS_DIRNAME } from "../io/auditToolsPaths.js";
|
|
5
5
|
import { detectNodeEcosystem, detectPythonEcosystem, detectRustEcosystem, detectRubyEcosystem, detectDockerEcosystem, detectGithubActionsEcosystem, } from "./acquisitionEngine.js";
|
|
6
6
|
import { parseClippy } from "./clippy.js";
|
|
7
|
-
import {
|
|
7
|
+
import { parseRubocopOutcome } from "./rubocop.js";
|
|
8
8
|
/**
|
|
9
9
|
* The value-curated EXTERNAL analyzer candidate registry. This is the only place
|
|
10
10
|
* concrete tools are named; the engine is tool-agnostic. Membership in the
|
|
@@ -18,6 +18,22 @@ import { parseRubocop } from "./rubocop.js";
|
|
|
18
18
|
// before execution — see binaryAcquisition.ts).
|
|
19
19
|
const GITLEAKS_VERSION = "8.21.2";
|
|
20
20
|
const GITLEAKS_RELEASE_BASE = `https://github.com/gitleaks/gitleaks/releases/download/v${GITLEAKS_VERSION}`;
|
|
21
|
+
/** A clean parse that produced exactly these items and dropped nothing. */
|
|
22
|
+
function items(parsed) {
|
|
23
|
+
return { items: parsed };
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* A parse that could not read the payload at all. This is the affirmation that
|
|
27
|
+
* replaces the bare `[]` every parser used to return: an empty item list plus
|
|
28
|
+
* `parse_failed` is what lets the engine classify the run `parse_error` instead of
|
|
29
|
+
* labelling upstream schema drift a clean scan.
|
|
30
|
+
*/
|
|
31
|
+
function parseFailure(tool, cause) {
|
|
32
|
+
return { items: [], parse_failed: true, note: `${tool}: ${cause}` };
|
|
33
|
+
}
|
|
34
|
+
function isRecord(value) {
|
|
35
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
36
|
+
}
|
|
21
37
|
/**
|
|
22
38
|
* Look up a release-asset name part (os or cpu) in a per-tool naming table.
|
|
23
39
|
* Every external tool names its assets differently (windows vs macos, x64 vs
|
|
@@ -70,11 +86,12 @@ function parseGitleaks(report) {
|
|
|
70
86
|
findings = JSON.parse(report || "[]");
|
|
71
87
|
}
|
|
72
88
|
catch {
|
|
73
|
-
return
|
|
89
|
+
return parseFailure("gitleaks", "report is not valid JSON");
|
|
74
90
|
}
|
|
75
|
-
if (!Array.isArray(findings))
|
|
76
|
-
return
|
|
77
|
-
|
|
91
|
+
if (!Array.isArray(findings)) {
|
|
92
|
+
return parseFailure("gitleaks", "report is not a JSON array of findings");
|
|
93
|
+
}
|
|
94
|
+
return items(findings
|
|
78
95
|
.filter((f) => Boolean(f) && typeof f === "object")
|
|
79
96
|
.map((f) => {
|
|
80
97
|
const ruleId = typeof f.RuleID === "string" ? f.RuleID : "secret";
|
|
@@ -100,7 +117,7 @@ function parseGitleaks(report) {
|
|
|
100
117
|
// the raw credential.
|
|
101
118
|
raw: { rule: ruleId, fingerprint, entropy: f.Entropy },
|
|
102
119
|
};
|
|
103
|
-
});
|
|
120
|
+
}));
|
|
104
121
|
}
|
|
105
122
|
const gitleaksCandidate = {
|
|
106
123
|
id: "gitleaks",
|
|
@@ -138,12 +155,13 @@ function parseSemgrep(stdout) {
|
|
|
138
155
|
payload = JSON.parse(stdout || "{}");
|
|
139
156
|
}
|
|
140
157
|
catch {
|
|
141
|
-
return
|
|
158
|
+
return parseFailure("semgrep", "output is not valid JSON");
|
|
159
|
+
}
|
|
160
|
+
if (!isRecord(payload) || !Array.isArray(payload.results)) {
|
|
161
|
+
return parseFailure("semgrep", "output has no `results` array");
|
|
142
162
|
}
|
|
143
|
-
const results = payload
|
|
144
|
-
|
|
145
|
-
: [];
|
|
146
|
-
return results.map((r) => {
|
|
163
|
+
const results = payload.results;
|
|
164
|
+
return items(results.map((r) => {
|
|
147
165
|
const extra = (r.extra ?? {});
|
|
148
166
|
const start = (r.start ?? {});
|
|
149
167
|
const end = (r.end ?? {});
|
|
@@ -159,7 +177,7 @@ function parseSemgrep(stdout) {
|
|
|
159
177
|
summary: typeof extra.message === "string" ? extra.message : checkId,
|
|
160
178
|
rule: checkId,
|
|
161
179
|
};
|
|
162
|
-
});
|
|
180
|
+
}));
|
|
163
181
|
}
|
|
164
182
|
const semgrepCandidate = {
|
|
165
183
|
id: "semgrep",
|
|
@@ -184,11 +202,12 @@ function parseEslint(stdout) {
|
|
|
184
202
|
files = JSON.parse(stdout || "[]");
|
|
185
203
|
}
|
|
186
204
|
catch {
|
|
187
|
-
return
|
|
205
|
+
return parseFailure("eslint", "output is not valid JSON");
|
|
206
|
+
}
|
|
207
|
+
if (!Array.isArray(files)) {
|
|
208
|
+
return parseFailure("eslint", "output is not a JSON array of file results");
|
|
188
209
|
}
|
|
189
|
-
|
|
190
|
-
return [];
|
|
191
|
-
const items = [];
|
|
210
|
+
const parsed = [];
|
|
192
211
|
for (const file of files) {
|
|
193
212
|
if (!file || typeof file !== "object")
|
|
194
213
|
continue;
|
|
@@ -201,7 +220,7 @@ function parseEslint(stdout) {
|
|
|
201
220
|
for (const m of messages) {
|
|
202
221
|
const ruleId = typeof m.ruleId === "string" ? m.ruleId : "eslint";
|
|
203
222
|
const line = typeof m.line === "number" ? m.line : undefined;
|
|
204
|
-
|
|
223
|
+
parsed.push({
|
|
205
224
|
id: `${ruleId}:${filePath}:${line ?? 0}`,
|
|
206
225
|
category: "maintainability",
|
|
207
226
|
severity: m.severity === 2 ? "medium" : "low",
|
|
@@ -212,7 +231,7 @@ function parseEslint(stdout) {
|
|
|
212
231
|
});
|
|
213
232
|
}
|
|
214
233
|
}
|
|
215
|
-
return items;
|
|
234
|
+
return items(parsed);
|
|
216
235
|
}
|
|
217
236
|
const eslintCandidate = {
|
|
218
237
|
id: "eslint",
|
|
@@ -251,12 +270,13 @@ function parseKnip(stdout) {
|
|
|
251
270
|
payload = JSON.parse(stdout || "{}");
|
|
252
271
|
}
|
|
253
272
|
catch {
|
|
254
|
-
return
|
|
273
|
+
return parseFailure("knip", "output is not valid JSON");
|
|
255
274
|
}
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
const
|
|
275
|
+
if (!isRecord(payload) || !Array.isArray(payload.issues)) {
|
|
276
|
+
return parseFailure("knip", "output has no `issues` array");
|
|
277
|
+
}
|
|
278
|
+
const issues = payload.issues;
|
|
279
|
+
const parsed = [];
|
|
260
280
|
for (const row of issues) {
|
|
261
281
|
const file = typeof row.file === "string" ? row.file : "";
|
|
262
282
|
if (!file)
|
|
@@ -274,7 +294,7 @@ function parseKnip(stdout) {
|
|
|
274
294
|
const line = typeof symbol.line === "number"
|
|
275
295
|
? symbol.line
|
|
276
296
|
: undefined;
|
|
277
|
-
|
|
297
|
+
parsed.push({
|
|
278
298
|
id: `knip-${issueType}:${file}:${name}:${line ?? 0}`,
|
|
279
299
|
category: "maintainability",
|
|
280
300
|
severity: "low",
|
|
@@ -288,7 +308,7 @@ function parseKnip(stdout) {
|
|
|
288
308
|
// Whole-file dead code: a non-empty `files` array on this row means the module
|
|
289
309
|
// itself is imported by nothing. One lead per file (path === the file).
|
|
290
310
|
if (Array.isArray(row.files) && row.files.length > 0) {
|
|
291
|
-
|
|
311
|
+
parsed.push({
|
|
292
312
|
id: `knip-files:${file}`,
|
|
293
313
|
category: "maintainability",
|
|
294
314
|
severity: "low",
|
|
@@ -309,7 +329,7 @@ function parseKnip(stdout) {
|
|
|
309
329
|
const line = typeof symbol.line === "number"
|
|
310
330
|
? symbol.line
|
|
311
331
|
: undefined;
|
|
312
|
-
|
|
332
|
+
parsed.push({
|
|
313
333
|
id: `knip-dependencies:${file}:${name}`,
|
|
314
334
|
category: "maintainability",
|
|
315
335
|
severity: "low",
|
|
@@ -321,7 +341,7 @@ function parseKnip(stdout) {
|
|
|
321
341
|
}
|
|
322
342
|
}
|
|
323
343
|
}
|
|
324
|
-
return items;
|
|
344
|
+
return items(parsed);
|
|
325
345
|
}
|
|
326
346
|
const knipCandidate = {
|
|
327
347
|
id: "knip",
|
|
@@ -459,12 +479,13 @@ function parseJscpd(report) {
|
|
|
459
479
|
payload = JSON.parse(report || "{}");
|
|
460
480
|
}
|
|
461
481
|
catch {
|
|
462
|
-
return
|
|
482
|
+
return parseFailure("jscpd", "report is not valid JSON");
|
|
483
|
+
}
|
|
484
|
+
if (!isRecord(payload) || !Array.isArray(payload.duplicates)) {
|
|
485
|
+
return parseFailure("jscpd", "report has no `duplicates` array");
|
|
463
486
|
}
|
|
464
|
-
const duplicates = payload
|
|
465
|
-
|
|
466
|
-
: [];
|
|
467
|
-
return duplicates
|
|
487
|
+
const duplicates = payload.duplicates;
|
|
488
|
+
return items(duplicates
|
|
468
489
|
.filter((d) => Boolean(d) && typeof d === "object")
|
|
469
490
|
.map((d) => {
|
|
470
491
|
const firstFile = (d.firstFile ?? {});
|
|
@@ -486,7 +507,7 @@ function parseJscpd(report) {
|
|
|
486
507
|
summary: `jscpd: duplicate code block (${lines ?? "?"} lines) shared with ${otherPath || "another file"}`,
|
|
487
508
|
rule: "jscpd-duplicate",
|
|
488
509
|
};
|
|
489
|
-
});
|
|
510
|
+
}));
|
|
490
511
|
}
|
|
491
512
|
const jscpdCandidate = {
|
|
492
513
|
id: "jscpd",
|
|
@@ -562,12 +583,13 @@ function parseOsvScanner(stdout) {
|
|
|
562
583
|
payload = JSON.parse(stdout || "{}");
|
|
563
584
|
}
|
|
564
585
|
catch {
|
|
565
|
-
return
|
|
586
|
+
return parseFailure("osv-scanner", "output is not valid JSON");
|
|
566
587
|
}
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
const
|
|
588
|
+
if (!isRecord(payload) || !Array.isArray(payload.results)) {
|
|
589
|
+
return parseFailure("osv-scanner", "output has no `results` array");
|
|
590
|
+
}
|
|
591
|
+
const results = payload.results;
|
|
592
|
+
const parsed = [];
|
|
571
593
|
for (const result of results) {
|
|
572
594
|
if (!result || typeof result !== "object")
|
|
573
595
|
continue;
|
|
@@ -607,7 +629,7 @@ function parseOsvScanner(stdout) {
|
|
|
607
629
|
: primary && typeof primary.details === "string"
|
|
608
630
|
? primary.details.slice(0, 200)
|
|
609
631
|
: `known vulnerability in ${pkgName}`;
|
|
610
|
-
|
|
632
|
+
parsed.push({
|
|
611
633
|
id: `osv:${ids.join(",")}:${pkgName}@${pkgVersion}`,
|
|
612
634
|
category: "security",
|
|
613
635
|
severity,
|
|
@@ -618,7 +640,7 @@ function parseOsvScanner(stdout) {
|
|
|
618
640
|
}
|
|
619
641
|
}
|
|
620
642
|
}
|
|
621
|
-
return items;
|
|
643
|
+
return items(parsed);
|
|
622
644
|
}
|
|
623
645
|
const osvScannerCandidate = {
|
|
624
646
|
id: "osv-scanner",
|
|
@@ -684,7 +706,7 @@ const rubocopCandidate = {
|
|
|
684
706
|
detect: (root) => detectRubyEcosystem(root),
|
|
685
707
|
// Read-only: NO `--autocorrect`/`-a`/`-A`. `--format json` → single JSON doc.
|
|
686
708
|
buildArgv: (prefix, root) => [...prefix, "--format", "json", root],
|
|
687
|
-
parse:
|
|
709
|
+
parse: parseRubocopOutcome,
|
|
688
710
|
};
|
|
689
711
|
// ---------------------------------------------------------------------------
|
|
690
712
|
// hadolint — Dockerfile linter, shipped as a RAW (non-archived) release binary
|
|
@@ -728,11 +750,12 @@ function parseHadolint(stdout) {
|
|
|
728
750
|
findings = JSON.parse(stdout || "[]");
|
|
729
751
|
}
|
|
730
752
|
catch {
|
|
731
|
-
return
|
|
753
|
+
return parseFailure("hadolint", "output is not valid JSON");
|
|
754
|
+
}
|
|
755
|
+
if (!Array.isArray(findings)) {
|
|
756
|
+
return parseFailure("hadolint", "output is not a JSON array of diagnostics");
|
|
732
757
|
}
|
|
733
|
-
|
|
734
|
-
return [];
|
|
735
|
-
return findings
|
|
758
|
+
return items(findings
|
|
736
759
|
.filter((f) => Boolean(f) && typeof f === "object")
|
|
737
760
|
.map((f) => {
|
|
738
761
|
const file = typeof f.file === "string" ? f.file : "";
|
|
@@ -751,7 +774,7 @@ function parseHadolint(stdout) {
|
|
|
751
774
|
rule: code,
|
|
752
775
|
};
|
|
753
776
|
})
|
|
754
|
-
.filter((item) => item.path.length > 0);
|
|
777
|
+
.filter((item) => item.path.length > 0));
|
|
755
778
|
}
|
|
756
779
|
const hadolintCandidate = {
|
|
757
780
|
id: "hadolint",
|
|
@@ -820,11 +843,12 @@ function parseActionlint(stdout) {
|
|
|
820
843
|
findings = JSON.parse(stdout || "[]");
|
|
821
844
|
}
|
|
822
845
|
catch {
|
|
823
|
-
return
|
|
846
|
+
return parseFailure("actionlint", "output is not valid JSON");
|
|
824
847
|
}
|
|
825
|
-
if (!Array.isArray(findings))
|
|
826
|
-
return
|
|
827
|
-
|
|
848
|
+
if (!Array.isArray(findings)) {
|
|
849
|
+
return parseFailure("actionlint", "output is not a JSON array of diagnostics");
|
|
850
|
+
}
|
|
851
|
+
return items(findings
|
|
828
852
|
.filter((f) => Boolean(f) && typeof f === "object")
|
|
829
853
|
.map((f) => {
|
|
830
854
|
const path = typeof f.filepath === "string" ? f.filepath : "";
|
|
@@ -841,7 +865,7 @@ function parseActionlint(stdout) {
|
|
|
841
865
|
rule: kind,
|
|
842
866
|
};
|
|
843
867
|
})
|
|
844
|
-
.filter((item) => item.path.length > 0);
|
|
868
|
+
.filter((item) => item.path.length > 0));
|
|
845
869
|
}
|
|
846
870
|
const actionlintCandidate = {
|
|
847
871
|
id: "actionlint",
|
|
@@ -877,12 +901,13 @@ function parseTypeCoverage(stdout) {
|
|
|
877
901
|
payload = JSON.parse(stdout || "{}");
|
|
878
902
|
}
|
|
879
903
|
catch {
|
|
880
|
-
return
|
|
904
|
+
return parseFailure("type-coverage", "output is not valid JSON");
|
|
905
|
+
}
|
|
906
|
+
if (!isRecord(payload) || !Array.isArray(payload.anys)) {
|
|
907
|
+
return parseFailure("type-coverage", "output has no `anys` array");
|
|
881
908
|
}
|
|
882
|
-
const anys = payload
|
|
883
|
-
|
|
884
|
-
: [];
|
|
885
|
-
return anys
|
|
909
|
+
const anys = payload.anys;
|
|
910
|
+
return items(anys
|
|
886
911
|
.filter((a) => Boolean(a) && typeof a === "object")
|
|
887
912
|
.map((a) => {
|
|
888
913
|
const file = typeof a.file === "string" ? a.file : "";
|
|
@@ -898,7 +923,7 @@ function parseTypeCoverage(stdout) {
|
|
|
898
923
|
rule: "type-coverage-any",
|
|
899
924
|
};
|
|
900
925
|
})
|
|
901
|
-
.filter((item) => item.path.length > 0);
|
|
926
|
+
.filter((item) => item.path.length > 0));
|
|
902
927
|
}
|
|
903
928
|
const typeCoverageCandidate = {
|
|
904
929
|
id: "type-coverage",
|
|
@@ -965,12 +990,15 @@ function parseCsvLine(line) {
|
|
|
965
990
|
*/
|
|
966
991
|
function parseLizard(stdout) {
|
|
967
992
|
if (!stdout || stdout.trim().length === 0) {
|
|
968
|
-
return [];
|
|
993
|
+
return items([]);
|
|
969
994
|
}
|
|
970
995
|
const lines = stdout.trim().split("\n");
|
|
971
996
|
if (lines.length < 2)
|
|
972
|
-
return []; // CSV header only, no data rows
|
|
973
|
-
const
|
|
997
|
+
return items([]); // CSV header only, no data rows
|
|
998
|
+
const parsed = [];
|
|
999
|
+
// A row the CSV shape does not fit is COUNTED, not silently discarded: a schema
|
|
1000
|
+
// drift that drops every row must not be reportable as a clean scan.
|
|
1001
|
+
let droppedRows = 0;
|
|
974
1002
|
// Skip the CSV header (line 0) and process data rows
|
|
975
1003
|
for (let i = 1; i < lines.length; i++) {
|
|
976
1004
|
const line = lines[i];
|
|
@@ -978,15 +1006,19 @@ function parseLizard(stdout) {
|
|
|
978
1006
|
continue;
|
|
979
1007
|
// Parse CSV line, handling quoted fields with embedded commas
|
|
980
1008
|
const parts = parseCsvLine(line);
|
|
981
|
-
if (parts.length < 8)
|
|
1009
|
+
if (parts.length < 8) {
|
|
1010
|
+
droppedRows += 1;
|
|
982
1011
|
continue;
|
|
1012
|
+
}
|
|
983
1013
|
const nloc = parseInt(parts[0], 10);
|
|
984
1014
|
const ccn = parseInt(parts[1], 10);
|
|
985
1015
|
const param = parseInt(parts[3], 10);
|
|
986
1016
|
const file = parts[6] || "";
|
|
987
1017
|
const func = parts[7] || "unknown";
|
|
988
|
-
if (!file || isNaN(nloc) || isNaN(ccn) || isNaN(param))
|
|
1018
|
+
if (!file || isNaN(nloc) || isNaN(ccn) || isNaN(param)) {
|
|
1019
|
+
droppedRows += 1;
|
|
989
1020
|
continue;
|
|
1021
|
+
}
|
|
990
1022
|
// Emit leads for complexity overages: CCN > 10, NLOC > 200, PARAM > 5
|
|
991
1023
|
const issues = [];
|
|
992
1024
|
if (ccn > 10)
|
|
@@ -996,7 +1028,7 @@ function parseLizard(stdout) {
|
|
|
996
1028
|
if (param > 5)
|
|
997
1029
|
issues.push({ rule: "lizard-params", threshold: 5, actual: param });
|
|
998
1030
|
for (const issue of issues) {
|
|
999
|
-
|
|
1031
|
+
parsed.push({
|
|
1000
1032
|
id: `${issue.rule}:${file}:${func}`,
|
|
1001
1033
|
category: "maintainability",
|
|
1002
1034
|
// Threshold bands (leads only, never verdicts): ≥2× the threshold is a
|
|
@@ -1008,7 +1040,7 @@ function parseLizard(stdout) {
|
|
|
1008
1040
|
});
|
|
1009
1041
|
}
|
|
1010
1042
|
}
|
|
1011
|
-
return items;
|
|
1043
|
+
return { items: parsed, ...(droppedRows > 0 ? { dropped_rows: droppedRows } : {}) };
|
|
1012
1044
|
}
|
|
1013
1045
|
const lizardCandidate = {
|
|
1014
1046
|
id: "lizard",
|