audit-tools 0.45.0 → 0.46.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 (227) hide show
  1. package/README.md +15 -2
  2. package/dist/audit/cli/charterExtractionPrompt.d.ts.map +1 -1
  3. package/dist/audit/cli/charterExtractionPrompt.js +11 -1
  4. package/dist/audit/cli/charterExtractionPrompt.js.map +1 -1
  5. package/dist/audit/cli/cleanupCommand.d.ts +25 -0
  6. package/dist/audit/cli/cleanupCommand.d.ts.map +1 -1
  7. package/dist/audit/cli/cleanupCommand.js +69 -0
  8. package/dist/audit/cli/cleanupCommand.js.map +1 -1
  9. package/dist/audit/cli/dispatch/hostHandoff.d.ts.map +1 -1
  10. package/dist/audit/cli/dispatch/hostHandoff.js +52 -76
  11. package/dist/audit/cli/dispatch/hostHandoff.js.map +1 -1
  12. package/dist/audit/cli/dispatch/packetFilter.d.ts +1 -1
  13. package/dist/audit/cli/fanoutLanes.d.ts.map +1 -1
  14. package/dist/audit/cli/fanoutLanes.js +6 -1
  15. package/dist/audit/cli/fanoutLanes.js.map +1 -1
  16. package/dist/audit/cli/laneSubmissions.d.ts +13 -0
  17. package/dist/audit/cli/laneSubmissions.d.ts.map +1 -1
  18. package/dist/audit/cli/laneSubmissions.js +38 -27
  19. package/dist/audit/cli/laneSubmissions.js.map +1 -1
  20. package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
  21. package/dist/audit/cli/nextStepCommand.js +8 -6
  22. package/dist/audit/cli/nextStepCommand.js.map +1 -1
  23. package/dist/audit/cli/nextStepHelpers.d.ts +3 -2
  24. package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
  25. package/dist/audit/cli/nextStepHelpers.js +37 -35
  26. package/dist/audit/cli/nextStepHelpers.js.map +1 -1
  27. package/dist/audit/cli/reviewRun.d.ts +1 -1
  28. package/dist/audit/cli/reviewRun.d.ts.map +1 -1
  29. package/dist/audit/cli/reviewRun.js +2 -9
  30. package/dist/audit/cli/reviewRun.js.map +1 -1
  31. package/dist/audit/cli/sampleRunCommand.d.ts.map +1 -1
  32. package/dist/audit/cli/sampleRunCommand.js +12 -1
  33. package/dist/audit/cli/sampleRunCommand.js.map +1 -1
  34. package/dist/audit/cli/semanticReviewStep.d.ts.map +1 -1
  35. package/dist/audit/cli/semanticReviewStep.js +9 -1
  36. package/dist/audit/cli/semanticReviewStep.js.map +1 -1
  37. package/dist/audit/cli/steps.d.ts +6 -6
  38. package/dist/audit/contracts/workerSchemas.d.ts +36 -26
  39. package/dist/audit/contracts/workerSchemas.d.ts.map +1 -1
  40. package/dist/audit/contracts/workerSchemas.js +11 -1
  41. package/dist/audit/contracts/workerSchemas.js.map +1 -1
  42. package/dist/audit/contracts/wrapperResponse.d.ts +52 -28
  43. package/dist/audit/contracts/wrapperResponse.d.ts.map +1 -1
  44. package/dist/audit/contracts/wrapperResponse.js +8 -5
  45. package/dist/audit/contracts/wrapperResponse.js.map +1 -1
  46. package/dist/audit/decompose/sources.d.ts.map +1 -1
  47. package/dist/audit/decompose/sources.js +21 -5
  48. package/dist/audit/decompose/sources.js.map +1 -1
  49. package/dist/audit/extractors/analyzers/registry.d.ts +8 -5
  50. package/dist/audit/extractors/analyzers/registry.d.ts.map +1 -1
  51. package/dist/audit/extractors/analyzers/registry.js +28 -7
  52. package/dist/audit/extractors/analyzers/registry.js.map +1 -1
  53. package/dist/audit/extractors/designAssessment.js +1 -1
  54. package/dist/audit/extractors/gitHistory.d.ts +1 -1
  55. package/dist/audit/extractors/gitHistory.js +1 -1
  56. package/dist/audit/extractors/graph.d.ts +1 -1
  57. package/dist/audit/extractors/graph.js +1 -1
  58. package/dist/audit/extractors/risk.d.ts +1 -1
  59. package/dist/audit/extractors/risk.js +1 -1
  60. package/dist/audit/io/artifacts.d.ts.map +1 -1
  61. package/dist/audit/io/artifacts.js +5 -5
  62. package/dist/audit/io/artifacts.js.map +1 -1
  63. package/dist/audit/orchestrator/acquisitionExecutor.d.ts +11 -6
  64. package/dist/audit/orchestrator/acquisitionExecutor.d.ts.map +1 -1
  65. package/dist/audit/orchestrator/acquisitionExecutor.js +1 -1
  66. package/dist/audit/orchestrator/acquisitionExecutor.js.map +1 -1
  67. package/dist/audit/orchestrator/advance.d.ts +14 -10
  68. package/dist/audit/orchestrator/advance.d.ts.map +1 -1
  69. package/dist/audit/orchestrator/advance.js +49 -24
  70. package/dist/audit/orchestrator/advance.js.map +1 -1
  71. package/dist/audit/orchestrator/advanceTypes.d.ts +14 -0
  72. package/dist/audit/orchestrator/advanceTypes.d.ts.map +1 -1
  73. package/dist/audit/orchestrator/autoFixExecutor.d.ts +20 -1
  74. package/dist/audit/orchestrator/autoFixExecutor.d.ts.map +1 -1
  75. package/dist/audit/orchestrator/autoFixExecutor.js +77 -15
  76. package/dist/audit/orchestrator/autoFixExecutor.js.map +1 -1
  77. package/dist/audit/orchestrator/dependencyMap.js +1 -1
  78. package/dist/audit/orchestrator/dependencyMap.js.map +1 -1
  79. package/dist/audit/orchestrator/executorRunners.d.ts.map +1 -1
  80. package/dist/audit/orchestrator/executorRunners.js +18 -4
  81. package/dist/audit/orchestrator/executorRunners.js.map +1 -1
  82. package/dist/audit/orchestrator/executors.d.ts +54 -0
  83. package/dist/audit/orchestrator/executors.d.ts.map +1 -1
  84. package/dist/audit/orchestrator/executors.js +352 -0
  85. package/dist/audit/orchestrator/executors.js.map +1 -1
  86. package/dist/audit/orchestrator/hostInputPause.d.ts +20 -11
  87. package/dist/audit/orchestrator/hostInputPause.d.ts.map +1 -1
  88. package/dist/audit/orchestrator/hostInputPause.js +17 -11
  89. package/dist/audit/orchestrator/hostInputPause.js.map +1 -1
  90. package/dist/audit/orchestrator/localCommands.d.ts +24 -1
  91. package/dist/audit/orchestrator/localCommands.d.ts.map +1 -1
  92. package/dist/audit/orchestrator/localCommands.js +44 -9
  93. package/dist/audit/orchestrator/localCommands.js.map +1 -1
  94. package/dist/audit/orchestrator/nextStep.d.ts +13 -0
  95. package/dist/audit/orchestrator/nextStep.d.ts.map +1 -1
  96. package/dist/audit/orchestrator/nextStep.js +13 -0
  97. package/dist/audit/orchestrator/nextStep.js.map +1 -1
  98. package/dist/audit/orchestrator/requeueCommand.d.ts +1 -1
  99. package/dist/audit/orchestrator/runtimeCommand.d.ts +32 -1
  100. package/dist/audit/orchestrator/runtimeCommand.d.ts.map +1 -1
  101. package/dist/audit/orchestrator/runtimeCommand.js +90 -3
  102. package/dist/audit/orchestrator/runtimeCommand.js.map +1 -1
  103. package/dist/audit/orchestrator/structureExecutors.js +1 -1
  104. package/dist/audit/orchestrator/structureExecutors.js.map +1 -1
  105. package/dist/audit/orchestrator/syntaxResolutionExecutor.d.ts +11 -1
  106. package/dist/audit/orchestrator/syntaxResolutionExecutor.d.ts.map +1 -1
  107. package/dist/audit/orchestrator/syntaxResolutionExecutor.js +25 -9
  108. package/dist/audit/orchestrator/syntaxResolutionExecutor.js.map +1 -1
  109. package/dist/audit/supervisor/operatorHandoff.d.ts +0 -1
  110. package/dist/audit/supervisor/operatorHandoff.d.ts.map +1 -1
  111. package/dist/audit/supervisor/operatorHandoff.js +2 -1
  112. package/dist/audit/supervisor/operatorHandoff.js.map +1 -1
  113. package/dist/audit/types.d.ts +18 -18
  114. package/dist/remediate/contractPipeline/derive.d.ts.map +1 -1
  115. package/dist/remediate/contractPipeline/derive.js +1 -0
  116. package/dist/remediate/contractPipeline/derive.js.map +1 -1
  117. package/dist/remediate/contractPipeline/semanticProjection.d.ts +5 -4
  118. package/dist/remediate/contractPipeline/semanticProjection.d.ts.map +1 -1
  119. package/dist/remediate/contractPipeline/semanticProjection.js +34 -19
  120. package/dist/remediate/contractPipeline/semanticProjection.js.map +1 -1
  121. package/dist/remediate/index.d.ts.map +1 -1
  122. package/dist/remediate/index.js +3 -2
  123. package/dist/remediate/index.js.map +1 -1
  124. package/dist/remediate/phases/close.d.ts +37 -2
  125. package/dist/remediate/phases/close.d.ts.map +1 -1
  126. package/dist/remediate/phases/close.js +100 -31
  127. package/dist/remediate/phases/close.js.map +1 -1
  128. package/dist/remediate/phases/closeVerifyAnalyzerLeads.js +2 -2
  129. package/dist/remediate/phases/closeVerifyAnalyzerLeads.js.map +1 -1
  130. package/dist/remediate/phases/triage.d.ts.map +1 -1
  131. package/dist/remediate/phases/triage.js +61 -19
  132. package/dist/remediate/phases/triage.js.map +1 -1
  133. package/dist/remediate/steps/contractPipeline.d.ts +13 -0
  134. package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
  135. package/dist/remediate/steps/contractPipeline.js +82 -3
  136. package/dist/remediate/steps/contractPipeline.js.map +1 -1
  137. package/dist/remediate/steps/dispatch/hostHandoff.d.ts +1 -1
  138. package/dist/remediate/steps/dispatch/hostHandoff.d.ts.map +1 -1
  139. package/dist/remediate/steps/dispatch/hostHandoff.js +297 -139
  140. package/dist/remediate/steps/dispatch/hostHandoff.js.map +1 -1
  141. package/dist/remediate/steps/nextStep.d.ts.map +1 -1
  142. package/dist/remediate/steps/nextStep.js +37 -7
  143. package/dist/remediate/steps/nextStep.js.map +1 -1
  144. package/dist/remediate/types/options.d.ts +1 -1
  145. package/dist/shared/analyzers/acquisitionEngine.d.ts +61 -28
  146. package/dist/shared/analyzers/acquisitionEngine.d.ts.map +1 -1
  147. package/dist/shared/analyzers/acquisitionEngine.js +83 -24
  148. package/dist/shared/analyzers/acquisitionEngine.js.map +1 -1
  149. package/dist/shared/analyzers/binaryAcquisition.d.ts +8 -2
  150. package/dist/shared/analyzers/binaryAcquisition.d.ts.map +1 -1
  151. package/dist/shared/analyzers/binaryAcquisition.js +4 -4
  152. package/dist/shared/analyzers/binaryAcquisition.js.map +1 -1
  153. package/dist/shared/constitutionalDocPaths.d.ts.map +1 -1
  154. package/dist/shared/constitutionalDocPaths.js +7 -0
  155. package/dist/shared/constitutionalDocPaths.js.map +1 -1
  156. package/dist/shared/engine/obligationEngine.d.ts +44 -3
  157. package/dist/shared/engine/obligationEngine.d.ts.map +1 -1
  158. package/dist/shared/engine/obligationEngine.js +53 -7
  159. package/dist/shared/engine/obligationEngine.js.map +1 -1
  160. package/dist/shared/findings/dedupe.d.ts.map +1 -1
  161. package/dist/shared/findings/dedupe.js +8 -0
  162. package/dist/shared/findings/dedupe.js.map +1 -1
  163. package/dist/shared/friction/frictionRecord.d.ts +42 -2
  164. package/dist/shared/friction/frictionRecord.d.ts.map +1 -1
  165. package/dist/shared/friction/frictionRecord.js +111 -3
  166. package/dist/shared/friction/frictionRecord.js.map +1 -1
  167. package/dist/shared/friction/triage.d.ts +15 -0
  168. package/dist/shared/friction/triage.d.ts.map +1 -1
  169. package/dist/shared/friction/triage.js +33 -2
  170. package/dist/shared/friction/triage.js.map +1 -1
  171. package/dist/shared/index.d.ts +13 -9
  172. package/dist/shared/index.d.ts.map +1 -1
  173. package/dist/shared/index.js +14 -7
  174. package/dist/shared/index.js.map +1 -1
  175. package/dist/shared/io/fileLock.d.ts.map +1 -1
  176. package/dist/shared/io/fileLock.js +22 -3
  177. package/dist/shared/io/fileLock.js.map +1 -1
  178. package/dist/shared/io/frictionCapture.d.ts +73 -19
  179. package/dist/shared/io/frictionCapture.d.ts.map +1 -1
  180. package/dist/shared/io/frictionCapture.js +21 -30
  181. package/dist/shared/io/frictionCapture.js.map +1 -1
  182. package/dist/shared/io/lockedJsonStore.d.ts +24 -3
  183. package/dist/shared/io/lockedJsonStore.d.ts.map +1 -1
  184. package/dist/shared/io/lockedJsonStore.js +35 -7
  185. package/dist/shared/io/lockedJsonStore.js.map +1 -1
  186. package/dist/shared/io/stepContractWriter.d.ts +3 -3
  187. package/dist/shared/io/stepContractWriter.d.ts.map +1 -1
  188. package/dist/shared/io/stepContractWriter.js +97 -13
  189. package/dist/shared/io/stepContractWriter.js.map +1 -1
  190. package/dist/shared/submission/expectedSubmissions.d.ts +18 -0
  191. package/dist/shared/submission/expectedSubmissions.d.ts.map +1 -1
  192. package/dist/shared/submission/expectedSubmissions.js +17 -0
  193. package/dist/shared/submission/expectedSubmissions.js.map +1 -1
  194. package/dist/shared/submission/handRecovery.d.ts.map +1 -1
  195. package/dist/shared/submission/handRecovery.js +9 -11
  196. package/dist/shared/submission/handRecovery.js.map +1 -1
  197. package/dist/shared/submission/hostHandoffCore.d.ts +155 -0
  198. package/dist/shared/submission/hostHandoffCore.d.ts.map +1 -0
  199. package/dist/shared/submission/hostHandoffCore.js +210 -0
  200. package/dist/shared/submission/hostHandoffCore.js.map +1 -0
  201. package/dist/shared/submission/submissionLedger.d.ts +5 -1
  202. package/dist/shared/submission/submissionLedger.d.ts.map +1 -1
  203. package/dist/shared/submission/submissionLedger.js +33 -3
  204. package/dist/shared/submission/submissionLedger.js.map +1 -1
  205. package/dist/shared/tooling/commandShape.d.ts +29 -0
  206. package/dist/shared/tooling/commandShape.d.ts.map +1 -1
  207. package/dist/shared/tooling/commandShape.js +82 -10
  208. package/dist/shared/tooling/commandShape.js.map +1 -1
  209. package/dist/shared/tooling/exec.d.ts +32 -0
  210. package/dist/shared/tooling/exec.d.ts.map +1 -1
  211. package/dist/shared/tooling/exec.js +189 -0
  212. package/dist/shared/tooling/exec.js.map +1 -1
  213. package/docs/audit-pkg/contracts.md +2 -1
  214. package/docs/audit-pkg/operator-guide.md +5 -2
  215. package/docs/audit-pkg/product.md +22 -6
  216. package/package.json +10 -6
  217. package/schemas/audit-code-v1alpha1.schema.json +297 -0
  218. package/schemas/audit_result.schema.json +4 -0
  219. package/schemas/audit_results.schema.json +4 -0
  220. package/scripts/shared/install-host-assets.mjs +8 -5
  221. package/skills/audit-code/SKILL.md +4 -2
  222. package/skills/audit-code/audit-code.prompt.md +5 -2
  223. package/skills/audit-code/opencode-command-template.txt +1 -1
  224. package/wrapper/audit-code-wrapper-lib.mjs +81 -16
  225. package/wrapper/installer-verb-help.mjs +14 -4
  226. package/docs/audit-pkg/development.md +0 -113
  227. package/docs/audit-pkg/release.md +0 -140
@@ -1,16 +1,39 @@
1
+ import { type AnalyzerConsentDecisions } from "audit-tools/shared";
1
2
  export interface LocalCommandCandidate {
2
3
  command: string;
3
4
  args: string[];
4
5
  display?: string;
6
+ /**
7
+ * Explicit registry key for admission, for an arm whose argv cannot yield
8
+ * its real tool (`python -m black`, `uvx black`, `pipx run black`). Absent
9
+ * ⇒ the key derives from the full argv ({@link localToolIdFor}).
10
+ */
11
+ toolId?: string;
5
12
  }
6
13
  export interface LocalCommandResult {
7
14
  candidate: LocalCommandCandidate;
8
15
  exitCode: number | null;
9
16
  stdout: string;
10
17
  stderr: string;
18
+ /** The refusal reason when a recorded operator decline vetoed the candidate. */
19
+ declinedReason?: string;
11
20
  error?: Error;
12
21
  }
13
22
  export declare function __resolveFromPathForTests(command: string): string | null;
14
- export declare function runFirstAvailableCommand(root: string, candidates: LocalCommandCandidate[]): LocalCommandResult | null;
23
+ /**
24
+ * Run the first resolvable, ADMITTED candidate. Admission is the shared
25
+ * decline-first veto ({@link admitLocalSpawn}): a recorded operator `declined`
26
+ * for this tool id refuses the spawn OUTRIGHT — the remaining candidates are
27
+ * still walked (a decline names ONE tool, not every formatter), so `prettier`
28
+ * being declined does not silently route formatting to `black`. The returned
29
+ * record carries `declinedReason` when a candidate was refused for that reason.
30
+ *
31
+ * Spawns go through the SHARED exec boundary (`runTracked`): argv-only, the
32
+ * control-env scrub applied, windowsHide forced — never a direct
33
+ * `node:child_process` call with the unscrubbed parent environment.
34
+ */
35
+ export declare function runFirstAvailableCommand(root: string, candidates: LocalCommandCandidate[], options?: {
36
+ analyzerConsent?: AnalyzerConsentDecisions;
37
+ }): LocalCommandResult | null;
15
38
  export declare function resolveNodeTool(root: string, relativePath: string, args: string[], display: string): LocalCommandCandidate[];
16
39
  //# sourceMappingURL=localCommands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"localCommands.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/localCommands.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,qBAAqB,CAAC;IACjC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAaD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAExE;AA4ED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,qBAAqB,EAAE,GAClC,kBAAkB,GAAG,IAAI,CAgC3B;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,MAAM,GACd,qBAAqB,EAAE,CAWzB"}
1
+ {"version":3,"file":"localCommands.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/localCommands.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,wBAAwB,EAC9B,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,qBAAqB,CAAC;IACjC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAaD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAExE;AA4ED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,qBAAqB,EAAE,EACnC,OAAO,GAAE;IAAE,eAAe,CAAC,EAAE,wBAAwB,CAAA;CAAO,GAC3D,kBAAkB,GAAG,IAAI,CA6D3B;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,MAAM,GACd,qBAAqB,EAAE,CAWzB"}
@@ -1,7 +1,6 @@
1
1
  import { existsSync } from "node:fs";
2
- import { spawnSync } from "node:child_process";
3
2
  import { delimiter, extname, isAbsolute, join } from "node:path";
4
- import { resolveExecArgv } from "audit-tools/shared";
3
+ import { admitLocalSpawn, resolveExecArgv, runTracked, } from "audit-tools/shared";
5
4
  function toSpawnTuple(candidate) {
6
5
  // Shared resolver applies the single Windows `.cmd`/`.bat` wrapping impl.
7
6
  // The candidate command is already PATH-resolved (absolute path or
@@ -69,18 +68,42 @@ function resolveCandidate(root, candidate) {
69
68
  }
70
69
  return null;
71
70
  }
72
- export function runFirstAvailableCommand(root, candidates) {
71
+ /**
72
+ * Run the first resolvable, ADMITTED candidate. Admission is the shared
73
+ * decline-first veto ({@link admitLocalSpawn}): a recorded operator `declined`
74
+ * for this tool id refuses the spawn OUTRIGHT — the remaining candidates are
75
+ * still walked (a decline names ONE tool, not every formatter), so `prettier`
76
+ * being declined does not silently route formatting to `black`. The returned
77
+ * record carries `declinedReason` when a candidate was refused for that reason.
78
+ *
79
+ * Spawns go through the SHARED exec boundary (`runTracked`): argv-only, the
80
+ * control-env scrub applied, windowsHide forced — never a direct
81
+ * `node:child_process` call with the unscrubbed parent environment.
82
+ */
83
+ export function runFirstAvailableCommand(root, candidates, options = {}) {
84
+ let lastDecline;
73
85
  for (const candidate of candidates) {
86
+ // Decline-first admission, BEFORE resolution and before anything spawns. A
87
+ // recorded refusal is a veto for THIS tool wherever its executable resolves
88
+ // from — including the repo-local `node <script>` arm (the script is the
89
+ // key, never `node`). It runs ahead of resolution because whether the binary
90
+ // happens to be INSTALLED says nothing about whether the operator refused
91
+ // it: resolving first meant an absent tool reported `not_resolved` and the
92
+ // recorded decline was never consulted, so one policy read two ways on two
93
+ // machines.
94
+ const denied = admitLocalSpawn([candidate.command, ...candidate.args], options.analyzerConsent, candidate.toolId);
95
+ if (denied) {
96
+ lastDecline = denied;
97
+ continue;
98
+ }
74
99
  const resolved = resolveCandidate(root, candidate);
75
100
  if (!resolved) {
76
101
  continue;
77
102
  }
78
103
  const spawnTarget = toSpawnTuple(resolved);
79
- const result = spawnSync(spawnTarget.command, spawnTarget.args, {
104
+ const result = runTracked([spawnTarget.command, ...spawnTarget.args], {
80
105
  cwd: root,
81
- env: process.env,
82
106
  encoding: "utf8",
83
- windowsHide: true,
84
107
  stdio: "pipe",
85
108
  });
86
109
  return {
@@ -89,14 +112,26 @@ export function runFirstAvailableCommand(root, candidates) {
89
112
  display: candidate.display ?? [candidate.command, ...candidate.args].join(" "),
90
113
  },
91
114
  exitCode: result.status,
92
- stdout: result.stdout ?? "",
93
- stderr: result.stderr ?? "",
115
+ stdout: result.stdout,
116
+ stderr: result.stderr,
94
117
  error: result.error
95
118
  ? new Error(result.error.message, { cause: result.error })
96
119
  : undefined,
97
120
  };
98
121
  }
99
- return null;
122
+ return lastDecline
123
+ ? {
124
+ candidate: {
125
+ command: "",
126
+ args: [],
127
+ display: "(all candidates declined or unresolved)",
128
+ },
129
+ exitCode: null,
130
+ stdout: "",
131
+ stderr: "",
132
+ declinedReason: lastDecline,
133
+ }
134
+ : null;
100
135
  }
101
136
  export function resolveNodeTool(root, relativePath, args, display) {
102
137
  const localToolPath = join(root, relativePath);
@@ -1 +1 @@
1
- {"version":3,"file":"localCommands.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/localCommands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"localCommands.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/localCommands.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,19 @@ export interface DecideNextStepOptions {
26
26
  emitStaleness?: boolean;
27
27
  }
28
28
  export declare function decideNextStep(bundle: ArtifactBundle, options?: DecideNextStepOptions): NextStepDecision;
29
+ /**
30
+ * The audit friction record's own key. Audit keeps ONE friction record per artifacts
31
+ * dir — its step envelopes carry no per-run id — so the key is a fixed literal rather
32
+ * than a minted run id. Single-sourced here beside the close-out that reads it, so the
33
+ * capture seams, the close-out, the run-linkage writers, and the operator handoff's
34
+ * `friction_record` path cannot spell it differently. Two source sites still write the
35
+ * derived record path out as a literal, each because a mechanical reader requires one
36
+ * there: `friction_capture_executor`'s `artifacts_written` (executorRunners.ts), read
37
+ * structurally by the write-site extractor, and the same executor's
38
+ * `produces[].artifact` in EXECUTOR_REGISTRY (executors.ts), whose producer generator
39
+ * refuses any non-string-literal initializer. DECL-10 pins BOTH against this constant.
40
+ */
41
+ export declare const AUDIT_FRICTION_RUN_ID = "run";
29
42
  /**
30
43
  * Terminal friction-TRIAGE close-out for audit. Folded into the `present_report`
31
44
  * terminal step (not a separate executor) so it fires at exactly the right moment.
@@ -1 +1 @@
1
- {"version":3,"file":"nextStep.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/nextStep.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAI1E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,UAAU,CAAC;IAClB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,6BAA6B,CAAC;AAEzE,eAAO,MAAM,QAAQ,EAAE,MAAM,EAuC5B,CAAC;AAkCF,wBAAgB,cAAc,CAC5B,WAAW,EAAE,eAAe,EAAE,GAC7B,eAAe,GAAG,SAAS,CAE7B;AAED,oCAAoC;AACpC,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,qBAA0B,GAClC,gBAAgB,CAqClB;AAED;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,sBAAsB,CAAC,CAEjC"}
1
+ {"version":3,"file":"nextStep.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/nextStep.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAI1E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,UAAU,CAAC;IAClB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,6BAA6B,CAAC;AAEzE,eAAO,MAAM,QAAQ,EAAE,MAAM,EAuC5B,CAAC;AAkCF,wBAAgB,cAAc,CAC5B,WAAW,EAAE,eAAe,EAAE,GAC7B,eAAe,GAAG,SAAS,CAE7B;AAED,oCAAoC;AACpC,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,qBAA0B,GAClC,gBAAgB,CAqClB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAE3C;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,sBAAsB,CAAC,CAEjC"}
@@ -110,6 +110,19 @@ export function decideNextStep(bundle, options = {}) {
110
110
  : `No executor found for obligation ${next.id}; EXECUTOR_REGISTRY has no entry for this obligation ID. This is a configuration gap — the obligation was selected but cannot be dispatched.`,
111
111
  };
112
112
  }
113
+ /**
114
+ * The audit friction record's own key. Audit keeps ONE friction record per artifacts
115
+ * dir — its step envelopes carry no per-run id — so the key is a fixed literal rather
116
+ * than a minted run id. Single-sourced here beside the close-out that reads it, so the
117
+ * capture seams, the close-out, the run-linkage writers, and the operator handoff's
118
+ * `friction_record` path cannot spell it differently. Two source sites still write the
119
+ * derived record path out as a literal, each because a mechanical reader requires one
120
+ * there: `friction_capture_executor`'s `artifacts_written` (executorRunners.ts), read
121
+ * structurally by the write-site extractor, and the same executor's
122
+ * `produces[].artifact` in EXECUTOR_REGISTRY (executors.ts), whose producer generator
123
+ * refuses any non-string-literal initializer. DECL-10 pins BOTH against this constant.
124
+ */
125
+ export const AUDIT_FRICTION_RUN_ID = "run";
113
126
  /**
114
127
  * Terminal friction-TRIAGE close-out for audit. Folded into the `present_report`
115
128
  * terminal step (not a separate executor) so it fires at exactly the right moment.
@@ -1 +1 @@
1
- {"version":3,"file":"nextStep.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/nextStep.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nextStep.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/nextStep.ts"],"names":[],"mappings":"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"}
@@ -24,8 +24,8 @@ export declare function buildRequeuePayload(matrix: CoverageMatrix, criticalFlow
24
24
  inputs?: Record<string, string> | undefined;
25
25
  line_ranges?: {
26
26
  path: string;
27
- start: number;
28
27
  end: number;
28
+ start: number;
29
29
  }[] | undefined;
30
30
  priority?: "high" | "low" | "medium" | undefined;
31
31
  risk_estimate?: number | undefined;
@@ -1,4 +1,35 @@
1
- export declare function runCommand(command: string[], cwd: string): Promise<{
1
+ /**
2
+ * The bounded wait every runtime-validation command runs under.
3
+ *
4
+ * Stated ONCE and exported so no call site writes its own number: a bound
5
+ * hard-coded per caller is how two callers end up disagreeing about how long
6
+ * "too long" is, and the drain's progress guarantee then depends on which one
7
+ * you happened to read. Generous, because a validation command is host-authored
8
+ * and may legitimately be a whole suite — what matters is that it is FINITE.
9
+ */
10
+ export declare const RUNTIME_COMMAND_TIMEOUT_MS: number;
11
+ /**
12
+ * Terminate a timed-out child, INCLUDING anything it spawned.
13
+ *
14
+ * On win32 this runner wraps package-manager shims in `cmd.exe /d /s /c` (see
15
+ * `resolveRuntimeValidationSpawnCommand`), so the process we hold a handle to is
16
+ * the shell, not the tool: `child.kill()` reaps the wrapper and leaves the npm →
17
+ * node grandchildren running, which is the orphan case the bound exists to
18
+ * prevent. `taskkill /T` walks the tree instead. Everywhere else the executable
19
+ * is spawned DIRECTLY — no wrapper, so no tree of our making — and the signal
20
+ * pair is the whole story. A command that itself forks a daemon on POSIX is
21
+ * beyond what this can promise without a process group, and is left stated
22
+ * rather than silently assumed.
23
+ *
24
+ * `platform` is a parameter so both branches are reachable from a test on either
25
+ * OS; the taskkill spawn failing (absent, denied) falls back to SIGKILL rather
26
+ * than leaving the child alive.
27
+ */
28
+ export declare function killRuntimeCommandTree(child: {
29
+ pid?: number;
30
+ kill: (signal?: NodeJS.Signals) => boolean;
31
+ }, platform?: NodeJS.Platform): void;
32
+ export declare function runCommand(command: string[], cwd: string, timeoutMs?: number): Promise<{
2
33
  status: "confirmed" | "not_confirmed" | "inconclusive";
3
34
  summary: string;
4
35
  evidence: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeCommand.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/runtimeCommand.ts"],"names":[],"mappings":"AAqBA,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EAAE,EACjB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IACT,MAAM,EAAE,WAAW,GAAG,eAAe,GAAG,cAAc,CAAC;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC,CAuED;AAED,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,YAAY,SAAmC,GAC9C;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAkDrC"}
1
+ {"version":3,"file":"runtimeCommand.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/runtimeCommand.ts"],"names":[],"mappings":"AAqBA;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,QAAkB,CAAC;AAQ1D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,KAAK,OAAO,CAAA;CAAE,EACnE,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,IAAI,CAYN;AAED,wBAAsB,UAAU,CAC9B,OAAO,EAAE,MAAM,EAAE,EACjB,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,MAAmC,GAC7C,OAAO,CAAC;IACT,MAAM,EAAE,WAAW,GAAG,eAAe,GAAG,cAAc,CAAC;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC,CA+GD;AAED,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,YAAY,SAAmC,GAC9C;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAkDrC"}
@@ -13,7 +13,52 @@ import { quoteForShellInterpreterCmd, stripAuditToolsControlEnv, } from "audit-t
13
13
  // This strips the host-signaling env vars so a runtime-validation command sees a
14
14
  // clean environment — a suite that branches on CLAUDECODE would otherwise be graded
15
15
  // against the host's interactive-session state, marking healthy code "not_confirmed".
16
- export async function runCommand(command, cwd) {
16
+ /**
17
+ * The bounded wait every runtime-validation command runs under.
18
+ *
19
+ * Stated ONCE and exported so no call site writes its own number: a bound
20
+ * hard-coded per caller is how two callers end up disagreeing about how long
21
+ * "too long" is, and the drain's progress guarantee then depends on which one
22
+ * you happened to read. Generous, because a validation command is host-authored
23
+ * and may legitimately be a whole suite — what matters is that it is FINITE.
24
+ */
25
+ export const RUNTIME_COMMAND_TIMEOUT_MS = 10 * 60 * 1_000;
26
+ /**
27
+ * Grace between the polite stop and the unignorable one. SIGTERM is a request a
28
+ * child may ignore; without the escalation the "bound" would be advisory.
29
+ */
30
+ const KILL_ESCALATION_GRACE_MS = 2_000;
31
+ /**
32
+ * Terminate a timed-out child, INCLUDING anything it spawned.
33
+ *
34
+ * On win32 this runner wraps package-manager shims in `cmd.exe /d /s /c` (see
35
+ * `resolveRuntimeValidationSpawnCommand`), so the process we hold a handle to is
36
+ * the shell, not the tool: `child.kill()` reaps the wrapper and leaves the npm →
37
+ * node grandchildren running, which is the orphan case the bound exists to
38
+ * prevent. `taskkill /T` walks the tree instead. Everywhere else the executable
39
+ * is spawned DIRECTLY — no wrapper, so no tree of our making — and the signal
40
+ * pair is the whole story. A command that itself forks a daemon on POSIX is
41
+ * beyond what this can promise without a process group, and is left stated
42
+ * rather than silently assumed.
43
+ *
44
+ * `platform` is a parameter so both branches are reachable from a test on either
45
+ * OS; the taskkill spawn failing (absent, denied) falls back to SIGKILL rather
46
+ * than leaving the child alive.
47
+ */
48
+ export function killRuntimeCommandTree(child, platform = process.platform) {
49
+ if (platform === "win32" && child.pid !== undefined) {
50
+ const reaper = spawn("taskkill", ["/pid", String(child.pid), "/T", "/F"], {
51
+ stdio: "ignore",
52
+ windowsHide: true,
53
+ });
54
+ reaper.on("error", () => {
55
+ child.kill("SIGKILL");
56
+ });
57
+ return;
58
+ }
59
+ child.kill("SIGTERM");
60
+ }
61
+ export async function runCommand(command, cwd, timeoutMs = RUNTIME_COMMAND_TIMEOUT_MS) {
17
62
  // COR-4a8d9779: fast-fail before spawn so an empty command array produces a
18
63
  // descriptive error instead of an ENOENT from spawn("", ...).
19
64
  if (command.length === 0 || !command[0]) {
@@ -42,7 +87,38 @@ export async function runCommand(command, cwd) {
42
87
  });
43
88
  let exitCode = null;
44
89
  let exitSignal = null;
90
+ // Set when THIS runner's bound fired, so `close` can report a timeout rather
91
+ // than reporting the kill it caused as an ordinary signal death.
92
+ let timedOut = false;
93
+ let escalation = null;
94
+ const deadline = timeoutMs > 0
95
+ ? setTimeout(() => {
96
+ timedOut = true;
97
+ killRuntimeCommandTree(child);
98
+ // SIGTERM is a request; a child that installs a handler and ignores
99
+ // it would never emit `close`, and the bound would be a bound in
100
+ // name only. `unref` so a child that does exit promptly never holds
101
+ // the event loop open waiting for this.
102
+ escalation = setTimeout(() => {
103
+ child.kill("SIGKILL");
104
+ }, KILL_ESCALATION_GRACE_MS);
105
+ escalation.unref?.();
106
+ }, timeoutMs)
107
+ : null;
108
+ /**
109
+ * Clear BOTH timers on every resolution path. A deadline left armed after an
110
+ * early exit is a leaked handle that can hold the process open past the work
111
+ * it was watching — the reason this is one function rather than a line
112
+ * repeated in each branch.
113
+ */
114
+ const clearTimers = () => {
115
+ if (deadline)
116
+ clearTimeout(deadline);
117
+ if (escalation)
118
+ clearTimeout(escalation);
119
+ };
45
120
  child.on("error", (error) => {
121
+ clearTimers();
46
122
  const output = `${stdout}\n${stderr}`.trim();
47
123
  const lines = output.length > 0 ? output.split(/\r?\n/) : [];
48
124
  const truncated = lines.length > 10;
@@ -60,15 +136,26 @@ export async function runCommand(command, cwd) {
60
136
  exitSignal = signal;
61
137
  });
62
138
  child.on("close", () => {
139
+ clearTimers();
63
140
  const output = `${stdout}\n${stderr}`.trim();
64
141
  const lines = output.length > 0 ? output.split(/\r?\n/) : [];
65
142
  const truncated = lines.length > 10;
66
143
  const evidence = truncated
67
144
  ? [`[... truncated: showing last 10 of ${lines.length} lines ...]`, ...lines.slice(-10)]
68
145
  : lines;
69
- const succeeded = exitCode === 0;
146
+ const succeeded = exitCode === 0 && !timedOut;
70
147
  let summary;
71
- if (succeeded) {
148
+ if (timedOut) {
149
+ // NAMED as a timeout, ahead of the exit-code branches: the child died of
150
+ // the kill this runner sent, so its code/signal describe our own bound,
151
+ // not the command's verdict. Reporting "terminated by SIGKILL" here
152
+ // would attribute the runner's action to the code under validation, and
153
+ // a caller triaging the failure could not tell a hang from a crash.
154
+ summary =
155
+ `Deterministic runtime command timed out after ${String(timeoutMs)}ms and was killed: ` +
156
+ `${displayCommand}`;
157
+ }
158
+ else if (succeeded) {
72
159
  summary = `Deterministic runtime command succeeded: ${displayCommand}`;
73
160
  }
74
161
  else if (exitCode !== null) {
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeCommand.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/runtimeCommand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtimeCommand.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/runtimeCommand.ts"],"names":[],"mappings":"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"}
@@ -54,7 +54,7 @@ export async function runStructureExecutor(bundle, root) {
54
54
  // co_change bucket as defense-in-depth).
55
55
  const graphSignals = deriveGraphSignals(graphBundle);
56
56
  const baseRiskRegister = buildRiskRegister(unitManifest, criticalFlows, externalAnalyzerResults, graphSignals);
57
- // F6 — git-history mining. A deterministic, language-neutral extraction source
57
+ // Git-history mining. A deterministic, language-neutral extraction source
58
58
  // (degrades to empty without a root / git): co-change coupling the dependency
59
59
  // graph misses, churn + authorship-breadth risk signals, and the churn ×
60
60
  // complexity compound (the real risk concentration). Merged through the shared
@@ -1 +1 @@
1
- {"version":3,"file":"structureExecutors.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/structureExecutors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"structureExecutors.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/structureExecutors.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { ArtifactBundle } from "../io/artifacts.js";
2
2
  import type { ExecutorRunResult } from "./executorResult.js";
3
+ import { type AnalyzerConsentDecisions } from "audit-tools/shared";
3
4
  /**
4
5
  * The eslint argv for the installed major. `--ext` was removed in ESLint 9 and is
5
6
  * a hard "unrecognized option" there, which kills the whole JSON run and lands it
@@ -26,5 +27,14 @@ export interface EslintConfigState {
26
27
  * distinguishable at the status record, never both silently zero findings.
27
28
  */
28
29
  export declare function resolveEslintConfigState(root: string): EslintConfigState;
29
- export declare function runSyntaxResolutionExecutor(bundle: ArtifactBundle, root: string): ExecutorRunResult;
30
+ export interface SyntaxResolutionExecutorOptions {
31
+ /**
32
+ * Recorded consent decisions (from the durable analyzer policy). A recorded
33
+ * `declined` for `tsc` or `eslint` vetoes that spawn at the shared
34
+ * admitLocalSpawn chokepoint — the same decline-first rule every other local
35
+ * tooling spawn faces.
36
+ */
37
+ analyzerConsent?: AnalyzerConsentDecisions;
38
+ }
39
+ export declare function runSyntaxResolutionExecutor(bundle: ArtifactBundle, root: string, options?: SyntaxResolutionExecutorOptions): ExecutorRunResult;
30
40
  //# sourceMappingURL=syntaxResolutionExecutor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"syntaxResolutionExecutor.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/syntaxResolutionExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAoF7D;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAIrE;AAkBD,MAAM,WAAW,iBAAiB;IAChC,8EAA8E;IAC9E,QAAQ,EAAE,OAAO,CAAC;IAClB,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAwBxE;AA0MD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,GACX,iBAAiB,CA6EnB"}
1
+ {"version":3,"file":"syntaxResolutionExecutor.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/syntaxResolutionExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAKL,KAAK,wBAAwB,EAC9B,MAAM,oBAAoB,CAAC;AA8E5B;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAIrE;AAkBD,MAAM,WAAW,iBAAiB;IAChC,8EAA8E;IAC9E,QAAQ,EAAE,OAAO,CAAC;IAClB,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAwBxE;AAgOD,MAAM,WAAW,+BAA+B;IAC9C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,wBAAwB,CAAC;CAC5C;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,+BAAoC,GAC5C,iBAAiB,CA6EnB"}
@@ -123,6 +123,22 @@ function snippet(value) {
123
123
  return value.replace(/\s+/g, " ").trim().slice(0, 500);
124
124
  }
125
125
  function commandErrorResult(tool, command, results) {
126
+ // A declined candidate resolves to a record with NO command and NO error —
127
+ // only `declinedReason`. `Boolean(record)` alone would read that refusal as
128
+ // "the tool resolved and ran", so the status must branch on the decline
129
+ // marker first: a vetoed spawn is coverage the operator refused, not a
130
+ // resolution failure — and never a resolved:true run.
131
+ if (command?.declinedReason) {
132
+ return {
133
+ results,
134
+ status: {
135
+ tool,
136
+ resolved: false,
137
+ status: "skipped",
138
+ error: command.declinedReason,
139
+ },
140
+ };
141
+ }
126
142
  return {
127
143
  results,
128
144
  status: {
@@ -135,13 +151,13 @@ function commandErrorResult(tool, command, results) {
135
151
  },
136
152
  };
137
153
  }
138
- function runTsc(root) {
154
+ function runTsc(root, analyzerConsent) {
139
155
  const results = [];
140
156
  const command = runFirstAvailableCommand(root, [
141
157
  ...resolveNodeTool(root, join("node_modules", "typescript", "bin", "tsc"), ["--noEmit"], "tsc --noEmit"),
142
158
  { command: "tsc", args: ["--noEmit"], display: "tsc --noEmit" },
143
- ]);
144
- if (!command || command.error) {
159
+ ], { analyzerConsent });
160
+ if (!command || command.error || command.declinedReason) {
145
161
  return commandErrorResult("tsc", command, results);
146
162
  }
147
163
  const output = [command.stdout, command.stderr].filter(Boolean).join("\n");
@@ -201,7 +217,7 @@ function runTsc(root) {
201
217
  },
202
218
  };
203
219
  }
204
- function runEslint(root) {
220
+ function runEslint(root, analyzerConsent) {
205
221
  const results = [];
206
222
  const configState = resolveEslintConfigState(root);
207
223
  if (!configState.runnable) {
@@ -220,8 +236,8 @@ function runEslint(root) {
220
236
  const command = runFirstAvailableCommand(root, [
221
237
  ...resolveNodeTool(root, join("node_modules", "eslint", "bin", "eslint.js"), args, display),
222
238
  { command: "eslint", args, display },
223
- ]);
224
- if (!command || command.error) {
239
+ ], { analyzerConsent });
240
+ if (!command || command.error || command.declinedReason) {
225
241
  return commandErrorResult("eslint", command, results);
226
242
  }
227
243
  const output = [command.stdout, command.stderr].filter(Boolean).join("\n").trim();
@@ -285,17 +301,17 @@ function runEslint(root) {
285
301
  },
286
302
  };
287
303
  }
288
- export function runSyntaxResolutionExecutor(bundle, root) {
304
+ export function runSyntaxResolutionExecutor(bundle, root, options = {}) {
289
305
  const items = [];
290
306
  const toolStatuses = [];
291
307
  if (hasTypeScriptConfig(root) &&
292
308
  bundle.file_disposition?.files.some((f) => f.path.endsWith(".ts"))) {
293
- const tsc = runTsc(root);
309
+ const tsc = runTsc(root, options.analyzerConsent);
294
310
  items.push(...tsc.results);
295
311
  toolStatuses.push(tsc.status);
296
312
  }
297
313
  if (bundle.file_disposition?.files.some((f) => f.path.endsWith(".ts") || f.path.endsWith(".js"))) {
298
- const eslint = runEslint(root);
314
+ const eslint = runEslint(root, options.analyzerConsent);
299
315
  items.push(...eslint.results);
300
316
  toolStatuses.push(eslint.status);
301
317
  }