audit-tools 0.42.0 → 0.43.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.
Files changed (261) hide show
  1. package/dispatch/merge-results.mjs +229 -140
  2. package/dispatch/validate-result.mjs +98 -40
  3. package/dist/audit/cli/conceptualDispatch.d.ts.map +1 -1
  4. package/dist/audit/cli/conceptualDispatch.js +35 -3
  5. package/dist/audit/cli/conceptualDispatch.js.map +1 -1
  6. package/dist/audit/cli/dispatch/hostHandoff.d.ts +9 -1
  7. package/dist/audit/cli/dispatch/hostHandoff.d.ts.map +1 -1
  8. package/dist/audit/cli/dispatch/hostHandoff.js +94 -38
  9. package/dist/audit/cli/dispatch/hostHandoff.js.map +1 -1
  10. package/dist/audit/cli/nextStepCommand.d.ts +64 -0
  11. package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
  12. package/dist/audit/cli/nextStepCommand.js +877 -783
  13. package/dist/audit/cli/nextStepCommand.js.map +1 -1
  14. package/dist/audit/cli/nextStepHelpers.d.ts +12 -0
  15. package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
  16. package/dist/audit/cli/nextStepHelpers.js +34 -1
  17. package/dist/audit/cli/nextStepHelpers.js.map +1 -1
  18. package/dist/audit/cli/steps.d.ts +2 -2
  19. package/dist/audit/extractors/graph.d.ts +28 -2
  20. package/dist/audit/extractors/graph.d.ts.map +1 -1
  21. package/dist/audit/extractors/graph.js +122 -11
  22. package/dist/audit/extractors/graph.js.map +1 -1
  23. package/dist/audit/extractors/graphRoutes.d.ts +8 -0
  24. package/dist/audit/extractors/graphRoutes.d.ts.map +1 -1
  25. package/dist/audit/extractors/graphRoutes.js +71 -4
  26. package/dist/audit/extractors/graphRoutes.js.map +1 -1
  27. package/dist/audit/io/artifacts.d.ts +55 -0
  28. package/dist/audit/io/artifacts.d.ts.map +1 -1
  29. package/dist/audit/io/artifacts.js +189 -12
  30. package/dist/audit/io/artifacts.js.map +1 -1
  31. package/dist/audit/io/toolingManifest.d.ts +11 -0
  32. package/dist/audit/io/toolingManifest.d.ts.map +1 -1
  33. package/dist/audit/io/toolingManifest.js +13 -3
  34. package/dist/audit/io/toolingManifest.js.map +1 -1
  35. package/dist/audit/orchestrator/advance.d.ts +64 -0
  36. package/dist/audit/orchestrator/advance.d.ts.map +1 -1
  37. package/dist/audit/orchestrator/advance.js +191 -57
  38. package/dist/audit/orchestrator/advance.js.map +1 -1
  39. package/dist/audit/orchestrator/charterClarificationExecutor.d.ts.map +1 -1
  40. package/dist/audit/orchestrator/charterClarificationExecutor.js +55 -21
  41. package/dist/audit/orchestrator/charterClarificationExecutor.js.map +1 -1
  42. package/dist/audit/orchestrator/flowCoverage.d.ts.map +1 -1
  43. package/dist/audit/orchestrator/flowCoverage.js +7 -10
  44. package/dist/audit/orchestrator/flowCoverage.js.map +1 -1
  45. package/dist/audit/orchestrator/flowPlanning.d.ts +54 -1
  46. package/dist/audit/orchestrator/flowPlanning.d.ts.map +1 -1
  47. package/dist/audit/orchestrator/flowPlanning.js +77 -18
  48. package/dist/audit/orchestrator/flowPlanning.js.map +1 -1
  49. package/dist/audit/orchestrator/flowRequeue.d.ts.map +1 -1
  50. package/dist/audit/orchestrator/flowRequeue.js +6 -10
  51. package/dist/audit/orchestrator/flowRequeue.js.map +1 -1
  52. package/dist/audit/orchestrator/partitionTaskGraph.d.ts.map +1 -1
  53. package/dist/audit/orchestrator/partitionTaskGraph.js +2 -2
  54. package/dist/audit/orchestrator/partitionTaskGraph.js.map +1 -1
  55. package/dist/audit/orchestrator/requeueFold.d.ts.map +1 -1
  56. package/dist/audit/orchestrator/requeueFold.js +18 -5
  57. package/dist/audit/orchestrator/requeueFold.js.map +1 -1
  58. package/dist/audit/orchestrator/staleness.d.ts +24 -1
  59. package/dist/audit/orchestrator/staleness.d.ts.map +1 -1
  60. package/dist/audit/orchestrator/staleness.js +147 -16
  61. package/dist/audit/orchestrator/staleness.js.map +1 -1
  62. package/dist/audit/orchestrator/syntaxResolutionExecutor.d.ts +26 -0
  63. package/dist/audit/orchestrator/syntaxResolutionExecutor.d.ts.map +1 -1
  64. package/dist/audit/orchestrator/syntaxResolutionExecutor.js +97 -12
  65. package/dist/audit/orchestrator/syntaxResolutionExecutor.js.map +1 -1
  66. package/dist/audit/orchestrator/taskBuilder.d.ts.map +1 -1
  67. package/dist/audit/orchestrator/taskBuilder.js +111 -21
  68. package/dist/audit/orchestrator/taskBuilder.js.map +1 -1
  69. package/dist/audit/orchestrator/trivialAudit.d.ts +17 -1
  70. package/dist/audit/orchestrator/trivialAudit.d.ts.map +1 -1
  71. package/dist/audit/orchestrator/trivialAudit.js +31 -4
  72. package/dist/audit/orchestrator/trivialAudit.js.map +1 -1
  73. package/dist/audit/reporting/synthesis.d.ts.map +1 -1
  74. package/dist/audit/reporting/synthesis.js +2 -3
  75. package/dist/audit/reporting/synthesis.js.map +1 -1
  76. package/dist/audit/reporting/workBlocks.d.ts.map +1 -1
  77. package/dist/audit/reporting/workBlocks.js +4 -38
  78. package/dist/audit/reporting/workBlocks.js.map +1 -1
  79. package/dist/audit/types/analyzerCapability.d.ts +6 -6
  80. package/dist/audit/types/charterRegister.d.ts +30 -12
  81. package/dist/audit/types/charterRegister.d.ts.map +1 -1
  82. package/dist/audit/types/charterRegister.js +22 -9
  83. package/dist/audit/types/charterRegister.js.map +1 -1
  84. package/dist/audit/validation/anchorGrounding.d.ts.map +1 -1
  85. package/dist/audit/validation/anchorGrounding.js +17 -0
  86. package/dist/audit/validation/anchorGrounding.js.map +1 -1
  87. package/dist/audit/validation/auditResults.d.ts +17 -0
  88. package/dist/audit/validation/auditResults.d.ts.map +1 -1
  89. package/dist/audit/validation/auditResults.js +50 -17
  90. package/dist/audit/validation/auditResults.js.map +1 -1
  91. package/dist/remediate/contractPipeline/cyclicSeamResolution.d.ts +48 -0
  92. package/dist/remediate/contractPipeline/cyclicSeamResolution.d.ts.map +1 -1
  93. package/dist/remediate/contractPipeline/cyclicSeamResolution.js +128 -0
  94. package/dist/remediate/contractPipeline/cyclicSeamResolution.js.map +1 -1
  95. package/dist/remediate/contractPipeline/derive.d.ts +8 -5
  96. package/dist/remediate/contractPipeline/derive.d.ts.map +1 -1
  97. package/dist/remediate/contractPipeline/derive.js +8 -16
  98. package/dist/remediate/contractPipeline/derive.js.map +1 -1
  99. package/dist/remediate/index.d.ts.map +1 -1
  100. package/dist/remediate/index.js +43 -2
  101. package/dist/remediate/index.js.map +1 -1
  102. package/dist/remediate/intent/intentOrdering.d.ts +13 -5
  103. package/dist/remediate/intent/intentOrdering.d.ts.map +1 -1
  104. package/dist/remediate/intent/intentOrdering.js +56 -25
  105. package/dist/remediate/intent/intentOrdering.js.map +1 -1
  106. package/dist/remediate/phases/close.d.ts +57 -2
  107. package/dist/remediate/phases/close.d.ts.map +1 -1
  108. package/dist/remediate/phases/close.js +260 -36
  109. package/dist/remediate/phases/close.js.map +1 -1
  110. package/dist/remediate/state/disposition.d.ts +26 -4
  111. package/dist/remediate/state/disposition.d.ts.map +1 -1
  112. package/dist/remediate/state/itemStatus.d.ts +33 -6
  113. package/dist/remediate/state/itemStatus.d.ts.map +1 -1
  114. package/dist/remediate/state/itemStatus.js +154 -39
  115. package/dist/remediate/state/itemStatus.js.map +1 -1
  116. package/dist/remediate/state/types.d.ts +41 -2
  117. package/dist/remediate/state/types.d.ts.map +1 -1
  118. package/dist/remediate/state/types.js.map +1 -1
  119. package/dist/remediate/steps/contractPipeline.d.ts +287 -15
  120. package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
  121. package/dist/remediate/steps/contractPipeline.js +1664 -987
  122. package/dist/remediate/steps/contractPipeline.js.map +1 -1
  123. package/dist/remediate/steps/contractPipelinePrompts.js +1 -1
  124. package/dist/remediate/steps/contractPipelinePrompts.js.map +1 -1
  125. package/dist/remediate/steps/dispatch/hostHandoff.d.ts +137 -2
  126. package/dist/remediate/steps/dispatch/hostHandoff.d.ts.map +1 -1
  127. package/dist/remediate/steps/dispatch/hostHandoff.js +713 -59
  128. package/dist/remediate/steps/dispatch/hostHandoff.js.map +1 -1
  129. package/dist/remediate/steps/finalGate.d.ts +136 -37
  130. package/dist/remediate/steps/finalGate.d.ts.map +1 -1
  131. package/dist/remediate/steps/finalGate.js +120 -86
  132. package/dist/remediate/steps/finalGate.js.map +1 -1
  133. package/dist/remediate/steps/gateCommands.d.ts +8 -0
  134. package/dist/remediate/steps/gateCommands.d.ts.map +1 -1
  135. package/dist/remediate/steps/gateCommands.js +40 -11
  136. package/dist/remediate/steps/gateCommands.js.map +1 -1
  137. package/dist/remediate/steps/nextStep.d.ts +96 -5
  138. package/dist/remediate/steps/nextStep.d.ts.map +1 -1
  139. package/dist/remediate/steps/nextStep.js +668 -147
  140. package/dist/remediate/steps/nextStep.js.map +1 -1
  141. package/dist/remediate/steps/types.d.ts +4 -1
  142. package/dist/remediate/steps/types.d.ts.map +1 -1
  143. package/dist/remediate/steps/types.js +10 -0
  144. package/dist/remediate/steps/types.js.map +1 -1
  145. package/dist/remediate/validation/artifacts.d.ts +20 -0
  146. package/dist/remediate/validation/artifacts.d.ts.map +1 -1
  147. package/dist/remediate/validation/artifacts.js +239 -13
  148. package/dist/remediate/validation/artifacts.js.map +1 -1
  149. package/dist/remediate/validation/contractPipelineGates.d.ts +58 -0
  150. package/dist/remediate/validation/contractPipelineGates.d.ts.map +1 -1
  151. package/dist/remediate/validation/contractPipelineGates.js +167 -43
  152. package/dist/remediate/validation/contractPipelineGates.js.map +1 -1
  153. package/dist/shared/analyzers/acquisitionEngine.d.ts +72 -25
  154. package/dist/shared/analyzers/acquisitionEngine.d.ts.map +1 -1
  155. package/dist/shared/analyzers/acquisitionEngine.js +149 -15
  156. package/dist/shared/analyzers/acquisitionEngine.js.map +1 -1
  157. package/dist/shared/analyzers/binaryAcquisition.d.ts +27 -2
  158. package/dist/shared/analyzers/binaryAcquisition.d.ts.map +1 -1
  159. package/dist/shared/analyzers/binaryAcquisition.js +149 -43
  160. package/dist/shared/analyzers/binaryAcquisition.js.map +1 -1
  161. package/dist/shared/analyzers/candidates.d.ts +9 -8
  162. package/dist/shared/analyzers/candidates.d.ts.map +1 -1
  163. package/dist/shared/analyzers/candidates.js +96 -64
  164. package/dist/shared/analyzers/candidates.js.map +1 -1
  165. package/dist/shared/analyzers/normalizeExternal.d.ts +40 -12
  166. package/dist/shared/analyzers/normalizeExternal.d.ts.map +1 -1
  167. package/dist/shared/analyzers/normalizeExternal.js +74 -18
  168. package/dist/shared/analyzers/normalizeExternal.js.map +1 -1
  169. package/dist/shared/analyzers/rubocop.d.ts +14 -13
  170. package/dist/shared/analyzers/rubocop.d.ts.map +1 -1
  171. package/dist/shared/analyzers/rubocop.js +29 -6
  172. package/dist/shared/analyzers/rubocop.js.map +1 -1
  173. package/dist/shared/analyzers/types.d.ts +196 -13
  174. package/dist/shared/analyzers/types.d.ts.map +1 -1
  175. package/dist/shared/analyzers/types.js +122 -9
  176. package/dist/shared/analyzers/types.js.map +1 -1
  177. package/dist/shared/decompose/charterClarification.d.ts +12 -1
  178. package/dist/shared/decompose/charterClarification.d.ts.map +1 -1
  179. package/dist/shared/decompose/charterClarification.js +11 -4
  180. package/dist/shared/decompose/charterClarification.js.map +1 -1
  181. package/dist/shared/decompose/charterExtraction.d.ts +20 -10
  182. package/dist/shared/decompose/charterExtraction.d.ts.map +1 -1
  183. package/dist/shared/decompose/charterExtraction.js +52 -23
  184. package/dist/shared/decompose/charterExtraction.js.map +1 -1
  185. package/dist/shared/decompose/contentCoherence.d.ts +43 -2
  186. package/dist/shared/decompose/contentCoherence.d.ts.map +1 -1
  187. package/dist/shared/decompose/contentCoherence.js +109 -5
  188. package/dist/shared/decompose/contentCoherence.js.map +1 -1
  189. package/dist/shared/decompose/modularity.d.ts +17 -0
  190. package/dist/shared/decompose/modularity.d.ts.map +1 -1
  191. package/dist/shared/decompose/modularity.js +78 -3
  192. package/dist/shared/decompose/modularity.js.map +1 -1
  193. package/dist/shared/decompose/workBlockSeams.d.ts +45 -0
  194. package/dist/shared/decompose/workBlockSeams.d.ts.map +1 -0
  195. package/dist/shared/decompose/workBlockSeams.js +82 -0
  196. package/dist/shared/decompose/workBlockSeams.js.map +1 -0
  197. package/dist/shared/index.d.ts +4 -3
  198. package/dist/shared/index.d.ts.map +1 -1
  199. package/dist/shared/index.js +4 -2
  200. package/dist/shared/index.js.map +1 -1
  201. package/dist/shared/intent/freeFormIntentInterpreter.d.ts +12 -2
  202. package/dist/shared/intent/freeFormIntentInterpreter.d.ts.map +1 -1
  203. package/dist/shared/intent/freeFormIntentInterpreter.js +27 -22
  204. package/dist/shared/intent/freeFormIntentInterpreter.js.map +1 -1
  205. package/dist/shared/intent/pathScope.d.ts +12 -1
  206. package/dist/shared/intent/pathScope.d.ts.map +1 -1
  207. package/dist/shared/intent/pathScope.js +56 -19
  208. package/dist/shared/intent/pathScope.js.map +1 -1
  209. package/dist/shared/intent/sharedIntentData.d.ts +19 -1
  210. package/dist/shared/intent/sharedIntentData.d.ts.map +1 -1
  211. package/dist/shared/intent/sharedIntentData.js +33 -8
  212. package/dist/shared/intent/sharedIntentData.js.map +1 -1
  213. package/dist/shared/io/fileLock.d.ts +12 -0
  214. package/dist/shared/io/fileLock.d.ts.map +1 -1
  215. package/dist/shared/io/fileLock.js +48 -5
  216. package/dist/shared/io/fileLock.js.map +1 -1
  217. package/dist/shared/io/json.d.ts +13 -0
  218. package/dist/shared/io/json.d.ts.map +1 -1
  219. package/dist/shared/io/json.js +19 -1
  220. package/dist/shared/io/json.js.map +1 -1
  221. package/dist/shared/reporting/auditDeliverable.d.ts.map +1 -1
  222. package/dist/shared/reporting/auditDeliverable.js +8 -3
  223. package/dist/shared/reporting/auditDeliverable.js.map +1 -1
  224. package/dist/shared/steps/stepEmissionScaffold.d.ts +69 -0
  225. package/dist/shared/steps/stepEmissionScaffold.d.ts.map +1 -0
  226. package/dist/shared/steps/stepEmissionScaffold.js +83 -0
  227. package/dist/shared/steps/stepEmissionScaffold.js.map +1 -0
  228. package/dist/shared/submission/handRecovery.d.ts.map +1 -1
  229. package/dist/shared/submission/handRecovery.js +69 -4
  230. package/dist/shared/submission/handRecovery.js.map +1 -1
  231. package/dist/shared/submission/submissionIdentity.d.ts +10 -1
  232. package/dist/shared/submission/submissionIdentity.d.ts.map +1 -1
  233. package/dist/shared/submission/submissionIdentity.js +12 -3
  234. package/dist/shared/submission/submissionIdentity.js.map +1 -1
  235. package/dist/shared/submission/submissionLedger.d.ts +43 -2
  236. package/dist/shared/submission/submissionLedger.d.ts.map +1 -1
  237. package/dist/shared/submission/submissionLedger.js +50 -7
  238. package/dist/shared/submission/submissionLedger.js.map +1 -1
  239. package/dist/shared/tooling/allowlistedExec.d.ts +9 -0
  240. package/dist/shared/tooling/allowlistedExec.d.ts.map +1 -1
  241. package/dist/shared/tooling/allowlistedExec.js +19 -2
  242. package/dist/shared/tooling/allowlistedExec.js.map +1 -1
  243. package/dist/shared/types/charter.d.ts +24 -0
  244. package/dist/shared/types/charter.d.ts.map +1 -1
  245. package/dist/shared/types/charter.js +9 -0
  246. package/dist/shared/types/charter.js.map +1 -1
  247. package/dist/shared/types/finding.d.ts +105 -53
  248. package/dist/shared/types/finding.d.ts.map +1 -1
  249. package/dist/shared/types/finding.js +38 -11
  250. package/dist/shared/types/finding.js.map +1 -1
  251. package/dist/shared/types/remediationOutcome.d.ts +282 -9
  252. package/dist/shared/types/remediationOutcome.d.ts.map +1 -1
  253. package/dist/shared/types/remediationOutcome.js +174 -1
  254. package/dist/shared/types/remediationOutcome.js.map +1 -1
  255. package/dist/shared/validation/findingsReport.d.ts.map +1 -1
  256. package/dist/shared/validation/findingsReport.js +19 -1
  257. package/dist/shared/validation/findingsReport.js.map +1 -1
  258. package/package.json +2 -1
  259. package/remediate-code.mjs +15 -0
  260. package/wrapper/remediate-code-wrapper-install-hosts.mjs +45 -4
  261. package/wrapper/remediate-code-wrapper-install-renderers.mjs +12 -2
@@ -1,14 +1,122 @@
1
1
  import { createHash } from "node:crypto";
2
- import { chmodSync, existsSync, mkdirSync, readdirSync, rmSync, statSync, writeFileSync, } from "node:fs";
3
- import { join } from "node:path";
4
- import { tmpdir } from "node:os";
2
+ import { chmodSync, existsSync, mkdirSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync, } from "node:fs";
3
+ import { isAbsolute, join, relative } from "node:path";
4
+ import { homedir } from "node:os";
5
+ import { AUDIT_TOOLS_DIRNAME } from "../io/auditToolsPaths.js";
5
6
  import { runTracked } from "../tooling/exec.js";
7
+ /**
8
+ * Per-USER cache root, deliberately NOT the system temp dir. Defaults to
9
+ * `~/.audit-tools/bincache`; `AUDIT_TOOLS_BINARY_CACHE` overrides it so a run can be
10
+ * pinned to an isolated cache — the same override shape as
11
+ * {@link analyzerCacheRoot}'s `AUDIT_TOOLS_ANALYZER_CACHE`, and what lets a test
12
+ * exercise the DEFAULT path without ever writing to the real home directory.
13
+ *
14
+ * The digest manifest beside a cached binary proves the bytes match what the manifest
15
+ * says — but an attacker who can write the cache dir writes BOTH, so a self-consistent
16
+ * pair inside a world-writable location proves nothing. The manifest only has meaning
17
+ * when the directory it lives in is not attacker-writable, which is what moving the
18
+ * default root under the user's home buys. `cacheDir` remains overridable per call for
19
+ * a caller that has its own private location.
20
+ *
21
+ * Consequence, deliberate: caches warmed under the old `<tmpdir>/audit-tools-bincache`
22
+ * are simply never consulted again — the first resolution under the new root
23
+ * re-downloads, or degrades to `unavailable` offline.
24
+ */
6
25
  function defaultCacheDir() {
7
- return join(tmpdir(), "audit-tools-bincache");
26
+ const override = process.env.AUDIT_TOOLS_BINARY_CACHE;
27
+ if (override && override.trim().length > 0)
28
+ return override;
29
+ return join(homedir(), AUDIT_TOOLS_DIRNAME, "bincache");
30
+ }
31
+ /**
32
+ * Create the cache root restricted to its owner where the platform honours modes.
33
+ * On win32 the mode is ignored (ACLs govern), and the per-user home root is the
34
+ * protection there.
35
+ *
36
+ * ⚠ The mode applies AT CREATION ONLY. An existing directory keeps whatever mode it
37
+ * already has — `mkdirSync` does not chmod one it did not create — so a root that was
38
+ * created loosely by something else is not repaired here.
39
+ */
40
+ function ensureCacheRoot(cacheDir) {
41
+ try {
42
+ mkdirSync(cacheDir, { recursive: true, mode: 0o700 });
43
+ }
44
+ catch {
45
+ /* a later mkdir of the version dir surfaces any real failure */
46
+ }
8
47
  }
9
48
  function exeName(binaryName, platform) {
10
49
  return platform === "win32" ? `${binaryName}.exe` : binaryName;
11
50
  }
51
+ /** `unavailable` with its cause carried in BOTH forms — machine member + human note. */
52
+ function unavailable(reason, note) {
53
+ return { status: "unavailable", command: null, reason, note };
54
+ }
55
+ /**
56
+ * Cache manifest filename. Written beside the cached executable at download time and
57
+ * the ONLY evidence that these bytes came from a checksum-verified acquisition.
58
+ */
59
+ const CACHE_MANIFEST_FILENAME = ".audit-tools-binary.json";
60
+ /** Remove a cache version dir wholesale; best-effort, never throws. */
61
+ function purgeVersionDir(versionDir) {
62
+ try {
63
+ rmSync(versionDir, { recursive: true, force: true });
64
+ }
65
+ catch {
66
+ /* best-effort — a later resolution re-verifies regardless */
67
+ }
68
+ }
69
+ function writeCacheManifest(versionDir, spec, executablePath) {
70
+ try {
71
+ const manifest = {
72
+ binaryName: spec.binaryName,
73
+ version: spec.version,
74
+ executable_relative_path: relative(versionDir, executablePath).replace(/\\/g, "/"),
75
+ executable_sha256: sha256(readFileSync(executablePath)),
76
+ };
77
+ writeFileSync(join(versionDir, CACHE_MANIFEST_FILENAME), `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
78
+ }
79
+ catch {
80
+ /* An unwritable manifest simply means the next resolution re-downloads. */
81
+ }
82
+ }
83
+ /**
84
+ * The cached executable's path — but ONLY when its bytes still hash to the digest
85
+ * recorded when it was acquired. A missing, unreadable, or mismatched manifest, an
86
+ * escaping relative path, or drifted bytes all return null and the caller purges:
87
+ * filename existence is never sufficient to execute.
88
+ */
89
+ function verifiedCachedExecutable(versionDir, spec) {
90
+ let manifest;
91
+ try {
92
+ manifest = JSON.parse(readFileSync(join(versionDir, CACHE_MANIFEST_FILENAME), "utf8"));
93
+ }
94
+ catch {
95
+ return null;
96
+ }
97
+ if (!manifest ||
98
+ manifest.binaryName !== spec.binaryName ||
99
+ manifest.version !== spec.version ||
100
+ typeof manifest.executable_relative_path !== "string" ||
101
+ manifest.executable_relative_path.length === 0 ||
102
+ typeof manifest.executable_sha256 !== "string" ||
103
+ manifest.executable_sha256.length !== 64) {
104
+ return null;
105
+ }
106
+ const executablePath = join(versionDir, manifest.executable_relative_path);
107
+ const containment = relative(versionDir, executablePath);
108
+ if (containment.startsWith("..") || isAbsolute(containment))
109
+ return null;
110
+ try {
111
+ if (sha256(readFileSync(executablePath)) !== manifest.executable_sha256.toLowerCase()) {
112
+ return null;
113
+ }
114
+ }
115
+ catch {
116
+ return null;
117
+ }
118
+ return executablePath;
119
+ }
12
120
  /** Parse a `<sha256>␠␠<asset>` checksums file for one asset's expected digest. */
13
121
  export function expectedSha256For(checksumsText, assetName) {
14
122
  for (const line of checksumsText.split(/\r?\n/)) {
@@ -31,29 +139,34 @@ export async function resolveBinary(spec, options = {}) {
31
139
  const arch = options.arch ?? process.arch;
32
140
  const run = options.run ?? ((argv, cwd) => runTracked(argv, { cwd }));
33
141
  const cacheDir = options.cacheDir ?? defaultCacheDir();
34
- // 1. PATH — already installed.
142
+ // 1. PATH — already installed. Nothing below this point runs, so a tool the machine
143
+ // already has must not cause a cache directory to be created as a side effect.
35
144
  const probe = run(spec.versionProbeArgs, process.cwd());
36
145
  if (!probe.error && probe.status === 0) {
37
146
  return { status: "path", command: spec.binaryName };
38
147
  }
39
- // 2. cache — a previously-downloaded pinned binary.
148
+ // 2. cache — a previously-downloaded pinned binary, RE-VERIFIED on every
149
+ // resolution. The cache path is derivable from public pinned constants, so a
150
+ // file at the expected name is a claim, not a proof: it is executed only when its
151
+ // bytes still match the digest recorded at acquisition. Anything else — including
152
+ // a version dir a failed extraction left behind — is purged and re-acquired.
40
153
  const versionDir = join(cacheDir, `${spec.binaryName}-${spec.version}`);
41
- const cachedPath = join(versionDir, exeName(spec.binaryName, platform));
42
- if (existsSync(cachedPath)) {
43
- return { status: "cached", command: cachedPath };
154
+ if (existsSync(versionDir)) {
155
+ const verified = verifiedCachedExecutable(versionDir, spec);
156
+ if (verified)
157
+ return { status: "cached", command: verified };
158
+ // Unverifiable bytes, or a dir a failed extraction left behind: purge so nothing
159
+ // half-written or pre-planted can become a later "cache hit".
160
+ purgeVersionDir(versionDir);
44
161
  }
45
162
  // 3. download — pinned release asset, SHA256-verified, then extracted.
46
163
  const fetch = options.fetch;
47
164
  if (!fetch) {
48
- return { status: "unavailable", command: null, note: "no fetcher configured (offline)" };
165
+ return unavailable("offline", "no fetcher configured (offline)");
49
166
  }
50
167
  const assetName = spec.assetFor(platform, arch);
51
168
  if (!assetName) {
52
- return {
53
- status: "unavailable",
54
- command: null,
55
- note: `no release asset for ${platform}/${arch}`,
56
- };
169
+ return unavailable("no_asset_for_platform", `no release asset for ${platform}/${arch}`);
57
170
  }
58
171
  let assetBytes;
59
172
  let checksumsBytes;
@@ -65,27 +178,25 @@ export async function resolveBinary(spec, options = {}) {
65
178
  assetBytes = await fetch(spec.releaseUrlForAsset(assetName));
66
179
  }
67
180
  catch (error) {
68
- return {
69
- status: "unavailable",
70
- command: null,
71
- note: `download failed: ${error instanceof Error ? error.message : String(error)}`,
72
- };
181
+ return unavailable("download_failed", `download failed: ${error instanceof Error ? error.message : String(error)}`);
73
182
  }
74
183
  if (!checksumsBytes || !assetBytes) {
75
- return { status: "unavailable", command: null, note: "download returned no bytes" };
184
+ return unavailable("download_empty", "download returned no bytes");
76
185
  }
77
186
  const expected = expectedSha256For(Buffer.from(checksumsBytes).toString("utf8"), assetName);
78
187
  if (!expected) {
79
- return { status: "unavailable", command: null, note: `no checksum for ${assetName}` };
188
+ return unavailable("no_checksum_for_asset", `no checksum for ${assetName}`);
80
189
  }
81
190
  const actual = sha256(assetBytes);
82
191
  if (actual !== expected) {
83
- return {
84
- status: "unavailable",
85
- command: null,
86
- note: `checksum mismatch for ${assetName} (expected ${expected}, got ${actual})`,
87
- };
192
+ return unavailable("checksum_mismatch", `checksum mismatch for ${assetName} (expected ${expected}, got ${actual})`);
88
193
  }
194
+ // Only here — past the PATH probe, past a cache miss, past verification — is
195
+ // anything about to be WRITTEN. Creating the root any earlier would grow an empty
196
+ // cache directory on every resolution that never caches anything: a tool already on
197
+ // PATH, an offline degrade, an unsupported platform. Read paths only ever ask
198
+ // whether the directory exists.
199
+ ensureCacheRoot(cacheDir);
89
200
  // Non-archived asset (e.g. osv-scanner): the verified bytes ARE the
90
201
  // executable — write directly to the cached path, no `tar` involved.
91
202
  if (spec.archived === false) {
@@ -101,14 +212,12 @@ export async function resolveBinary(spec, options = {}) {
101
212
  /* best-effort */
102
213
  }
103
214
  }
215
+ writeCacheManifest(versionDir, spec, resolved);
104
216
  return { status: "downloaded", command: resolved };
105
217
  }
106
218
  catch (error) {
107
- return {
108
- status: "unavailable",
109
- command: null,
110
- note: `write error: ${error instanceof Error ? error.message : String(error)}`,
111
- };
219
+ purgeVersionDir(versionDir);
220
+ return unavailable("write_failed", `write error: ${error instanceof Error ? error.message : String(error)}`);
112
221
  }
113
222
  }
114
223
  // Verified — write the archive and extract it with the system `tar` (bsdtar
@@ -120,24 +229,20 @@ export async function resolveBinary(spec, options = {}) {
120
229
  const extract = run(["tar", "-xf", archivePath, "-C", versionDir], versionDir);
121
230
  rmSync(archivePath, { force: true });
122
231
  if (extract.error || extract.status !== 0) {
123
- return {
124
- status: "unavailable",
125
- command: null,
126
- note: `extract failed: ${extract.error?.message ?? `tar exit ${extract.status}`}`,
127
- };
232
+ // Whatever tar managed to write before failing must NOT survive as a cache hit.
233
+ purgeVersionDir(versionDir);
234
+ return unavailable("extract_failed", `extract failed: ${extract.error?.message ?? `tar exit ${extract.status}`}`);
128
235
  }
129
236
  }
130
237
  catch (error) {
131
- return {
132
- status: "unavailable",
133
- command: null,
134
- note: `extract error: ${error instanceof Error ? error.message : String(error)}`,
135
- };
238
+ purgeVersionDir(versionDir);
239
+ return unavailable("extract_failed", `extract error: ${error instanceof Error ? error.message : String(error)}`);
136
240
  }
137
241
  // Locate the executable (archives may nest it); chmod +x on POSIX.
138
242
  const resolved = findExecutable(versionDir, exeName(spec.binaryName, platform));
139
243
  if (!resolved) {
140
- return { status: "unavailable", command: null, note: "binary not found in archive" };
244
+ purgeVersionDir(versionDir);
245
+ return unavailable("not_found_in_archive", "binary not found in archive");
141
246
  }
142
247
  if (platform !== "win32") {
143
248
  try {
@@ -147,6 +252,7 @@ export async function resolveBinary(spec, options = {}) {
147
252
  /* best-effort */
148
253
  }
149
254
  }
255
+ writeCacheManifest(versionDir, spec, resolved);
150
256
  return { status: "downloaded", command: resolved };
151
257
  }
152
258
  /** Shallow-then-recursive search for `name` under `dir`. */
@@ -1 +1 @@
1
- {"version":3,"file":"binaryAcquisition.js","sourceRoot":"","sources":["../../../src/shared/analyzers/binaryAcquisition.ts"],"names":[],"mappings":"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"}
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): ReturnType<ExternalAnalyzerCandidate["parse"]>;
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): ReturnType<ExternalAnalyzerCandidate["parse"]>;
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): ReturnType<ExternalAnalyzerCandidate["parse"]>;
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): ReturnType<ExternalAnalyzerCandidate["parse"]>;
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): ReturnType<ExternalAnalyzerCandidate["parse"]>;
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): ReturnType<ExternalAnalyzerCandidate["parse"]>;
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): ReturnType<ExternalAnalyzerCandidate["parse"]>;
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): ReturnType<ExternalAnalyzerCandidate["parse"]>;
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;AAaxE;;;;;;;GAOG;AAKH,QAAA,MAAM,gBAAgB,WAAW,CAAC;AAkDlC;;;;GAIG;AACH,iBAAS,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAqCrF;AAED,QAAA,MAAM,iBAAiB,EAAE,yBA4BxB,CAAC;AAiCF,QAAA,MAAM,gBAAgB,EAAE,yBAevB,CAAC;AAqCF,QAAA,MAAM,eAAe,EAAE,yBAetB,CAAC;AAkBF,iBAAS,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAyEjF;AAED,QAAA,MAAM,aAAa,EAAE,yBA2BpB,CAAC;AA+FF;;;;;;;GAOG;AACH,iBAAS,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAkClF;AAED,QAAA,MAAM,cAAc,EAAE,yBA4BrB,CAAC;AAOF,QAAA,MAAM,mBAAmB,UAAU,CAAC;AA2BpC;;;;;;;;GAQG;AACH,iBAAS,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CA+DvF;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,UAAU,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CA6BrF;AAED,QAAA,MAAM,iBAAiB,EAAE,yBAiBxB,CAAC;AAOF,QAAA,MAAM,kBAAkB,WAAW,CAAC;AAkCpC;;;;GAIG;AACH,iBAAS,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CA2BvF;AAED,QAAA,MAAM,mBAAmB,EAAE,yBAkB1B,CAAC;AAKF;;;;;GAKG;AACH,iBAAS,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CA4BzF;AAED,QAAA,MAAM,qBAAqB,EAAE,yBAkB5B,CAAC;AA0CF;;;;GAIG;AACH,iBAAS,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,CAuCnF;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"}
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"}