rea-agents 6.0.0 → 6.2.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 (611) hide show
  1. package/README.md +26 -18
  2. package/bridge/android/ReaJadxBridge.java +14 -5
  3. package/bridge/ghidra/ReaGhidraBridge.java +205 -51
  4. package/bridge/hopper_bridge.py +314 -127
  5. package/bridge/mitmproxy/capture.py +0 -2
  6. package/bridge/native/rea_lldb_tracer.py +630 -94
  7. package/bridge/process/ProcessRunTokenReader.swift +39 -5
  8. package/bridge/pwntools/recorded_crash_impl.py +4 -0
  9. package/dist/android/JadxConfiguration.js +274 -31
  10. package/dist/android/JadxMcpTransport.js +18 -2
  11. package/dist/android/JadxProtocol.js +6 -0
  12. package/dist/android/JadxProvider.js +76 -37
  13. package/dist/android/JadxSession.js +23 -4
  14. package/dist/application/AnalysisContextQueries.js +8 -35
  15. package/dist/application/AnalysisDocument.js +32 -0
  16. package/dist/application/AppBundleExecutable.js +67 -21
  17. package/dist/application/BinaryTargetResolver.js +5 -3
  18. package/dist/application/BrowserEvidence.js +3 -8
  19. package/dist/application/BrowserScenarioEvidence.js +2 -18
  20. package/dist/application/CallPathTracing.js +19 -3
  21. package/dist/application/CapabilityInventory.js +48 -11
  22. package/dist/application/ClientConfigurationDocument.js +917 -8
  23. package/dist/application/ClientRegistrationIdentity.js +26 -5
  24. package/dist/application/ClientRegistrationStatus.js +29 -14
  25. package/dist/application/DirectAnalysis.js +56 -51
  26. package/dist/application/DirectAnalysisCleanup.js +72 -0
  27. package/dist/application/DirectAnalysisStatus.js +4 -5
  28. package/dist/application/Doctor.js +19 -21
  29. package/dist/application/DoctorDiagnostics.js +1 -2
  30. package/dist/application/DoctorScope.js +25 -13
  31. package/dist/application/EnhancedLiteralTracing.js +22 -25
  32. package/dist/application/EnhancedTools.js +64 -17
  33. package/dist/application/EvidenceBundleFiles.js +30 -13
  34. package/dist/application/FunctionAnalysisEvidence.js +2 -3
  35. package/dist/application/InventoryProjectionEvidence.js +4 -3
  36. package/dist/application/InvestigationProviders.js +11 -2
  37. package/dist/application/JsonFiles.js +83 -28
  38. package/dist/application/LinuxHopper.js +9 -6
  39. package/dist/application/MacHopper.js +15 -18
  40. package/dist/application/ProcedureAddressResolution.js +11 -0
  41. package/dist/application/RealHopperAssertions.js +0 -11
  42. package/dist/application/ReconstructionCoverageService.js +7 -4
  43. package/dist/application/ReconstructionObligationCandidates.js +1 -1
  44. package/dist/application/ReconstructionObligationLedgerService.js +4 -3
  45. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  46. package/dist/application/Setup.js +21 -17
  47. package/dist/application/SetupClientConfiguration.js +10 -15
  48. package/dist/application/SetupHost.js +21 -29
  49. package/dist/application/SetupPlan.js +11 -9
  50. package/dist/application/SupportedClients.js +34 -1
  51. package/dist/application/Uninstall.js +82 -29
  52. package/dist/application/Update.js +18 -3
  53. package/dist/application/UpdateMaintenance.js +7 -5
  54. package/dist/application/UpdateRuntime.js +57 -36
  55. package/dist/application/WebModuleTraceService.js +4 -2
  56. package/dist/application/WebNetworkCaptureService.js +4 -2
  57. package/dist/application/WebRuntimeService.js +5 -3
  58. package/dist/application/WebScriptExportService.js +32 -6
  59. package/dist/application/WebSourceLocationService.js +4 -2
  60. package/dist/application/WorkflowEvidence.js +105 -0
  61. package/dist/application/XrefsAddressResolution.js +45 -0
  62. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  63. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  64. package/dist/application/binary/AnalysisProviderEvaluation.js +22 -7
  65. package/dist/application/binary/AnalysisProviderRegistry.js +4 -6
  66. package/dist/application/binary/AnalysisSnapshotCache.js +13 -14
  67. package/dist/application/binary/BinarySession.js +161 -93
  68. package/dist/application/binary/BinarySessionComposition.js +1 -3
  69. package/dist/application/binary/BinarySessionExecution.js +3 -5
  70. package/dist/application/binary/BinarySessionOpen.js +4 -4
  71. package/dist/application/binary/BinarySessionRecords.js +26 -4
  72. package/dist/application/binary/BinarySessionStatus.js +18 -7
  73. package/dist/application/binary/CompositeProvider.js +16 -17
  74. package/dist/application/binary/LazyAnalysisProvider.js +8 -5
  75. package/dist/application/binary/SessionProviderRouter.js +27 -135
  76. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +4 -2
  77. package/dist/application/binaryDiagnostics/RecordedCrashService.js +4 -2
  78. package/dist/application/evm/EvmInterfaceService.js +4 -2
  79. package/dist/application/homebrew.js +48 -0
  80. package/dist/application/investigation/EvidenceLedger.js +21 -7
  81. package/dist/application/investigation/InvestigationRecords.js +8 -0
  82. package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
  83. package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
  84. package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -4
  85. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
  86. package/dist/application/javascript/JavaScriptApplicationService.js +27 -15
  87. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
  88. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +10 -7
  89. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +44 -10
  90. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  91. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  92. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  93. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
  94. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  95. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +49 -19
  96. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +56 -8
  97. package/dist/application/javascript/JavaScriptModuleRelationships.js +38 -9
  98. package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
  99. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +6 -4
  100. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
  101. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
  102. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +63 -61
  103. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
  104. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
  105. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
  106. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
  107. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  108. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +64 -19
  109. package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
  110. package/dist/application/managed/ManagedMemberComparisonService.js +9 -5
  111. package/dist/application/managed/ManagedNativeVerificationService.js +6 -4
  112. package/dist/application/managed/ManagedReconstructionService.js +4 -3
  113. package/dist/application/process/ProcessCli.js +25 -17
  114. package/dist/application/process/ProcessEvidence.js +4 -4
  115. package/dist/application/workflowInputError.js +18 -0
  116. package/dist/artifacts/ArtifactProvider.js +48 -13
  117. package/dist/artifacts/ArtifactReader.js +31 -0
  118. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  119. package/dist/artifacts/MachOSliceArtifactReader.js +106 -15
  120. package/dist/artifacts/NativeDmgArtifactReader.js +73 -21
  121. package/dist/artifacts/SafeOutputTree.js +16 -2
  122. package/dist/artifacts/ZipArtifactReader.js +11 -4
  123. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +26 -5
  124. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  125. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
  126. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
  127. package/dist/artifacts/apple/KeyedArchiveReader.js +55 -23
  128. package/dist/artifacts/apple/MachoLoadCommandReader.js +92 -31
  129. package/dist/artifacts/apple/NibArchive.js +81 -14
  130. package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
  131. package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
  132. package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
  133. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +79 -68
  134. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  135. package/dist/artifacts/inventory/reader.js +3 -3
  136. package/dist/artifacts/inventory/scanCanonical.js +59 -38
  137. package/dist/artifacts/inventory/scanReader.js +5 -9
  138. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
  139. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  140. package/dist/browser/CdpBrowserProvider.js +2 -3
  141. package/dist/browser/CdpCaptureCompleteness.js +2 -0
  142. package/dist/browser/CdpCaptureEventHandlers.js +78 -15
  143. package/dist/browser/CdpCaptureEventTypes.js +5 -1
  144. package/dist/browser/CdpCaptureEvents.js +25 -1
  145. package/dist/browser/CdpCaptureValues.js +20 -0
  146. package/dist/browser/CdpConnection.js +30 -11
  147. package/dist/browser/CdpElectronProvider.js +0 -2
  148. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  149. package/dist/browser/CdpElectronScripts.js +2 -3
  150. package/dist/browser/CdpOptionalCommand.js +2 -3
  151. package/dist/browser/CdpPageCapture.js +23 -1
  152. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  153. package/dist/browser/CdpSafeMetadata.js +10 -10
  154. package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
  155. package/dist/browser/PlaywrightElectronActiveActions.js +34 -79
  156. package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
  157. package/dist/browser/PlaywrightElectronActiveProvider.js +133 -130
  158. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  159. package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
  160. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  161. package/dist/browser/PlaywrightScenarioSession.js +39 -22
  162. package/dist/browser/WebSourceMapFetcher.js +426 -72
  163. package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
  164. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  165. package/dist/browser/history/CaptureFailures.js +41 -1
  166. package/dist/browser/history/CaptureRelease.js +5 -0
  167. package/dist/browser/history/HarCaptureAdapter.js +3 -3
  168. package/dist/browser/history/HarJson.js +3 -2
  169. package/dist/browser/history/HistoricalCaptureDecoder.js +4 -2
  170. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  171. package/dist/catalogIdentity.js +0 -1
  172. package/dist/cli/analysisSelector.js +23 -0
  173. package/dist/cli/analysisViewCommands.js +36 -0
  174. package/dist/cli/applicationCommands.js +2 -3
  175. package/dist/cli/artifactCommands.js +11 -12
  176. package/dist/cli/coreAnalysisCommands.js +3 -3
  177. package/dist/cli/coreBinaryCommands.js +100 -37
  178. package/dist/cli/coreNativeCommands.js +9 -10
  179. package/dist/cli/electronCommands.js +10 -9
  180. package/dist/cli/interactiveSetup.js +6 -6
  181. package/dist/cli/javascriptApplicationAnalysis.js +7 -3
  182. package/dist/cli/jsonOutput.js +4 -99
  183. package/dist/cli/managedCommands.js +7 -8
  184. package/dist/cli/nativeCallCommands.js +3 -5
  185. package/dist/cli/omittableDefaults.js +50 -0
  186. package/dist/cli/processCommands.js +3 -2
  187. package/dist/cli/setupCommands.js +16 -15
  188. package/dist/cli/utilityCommands.js +9 -9
  189. package/dist/cli/webRuntimeCommands.js +8 -8
  190. package/dist/cli.js +18 -9
  191. package/dist/cliBrowserScenarioCommands.js +2 -2
  192. package/dist/cliCommandNames.js +1 -1
  193. package/dist/cliJsonInput.js +24 -5
  194. package/dist/cliOutput.js +0 -38
  195. package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
  196. package/dist/composition/binary.js +9 -9
  197. package/dist/composition/browserScenario.js +2 -1
  198. package/dist/composition/directAnalysis.js +20 -13
  199. package/dist/composition/electronScenario.js +1 -1
  200. package/dist/composition/optionalObservationProviders.js +12 -7
  201. package/dist/config/environment.js +10 -0
  202. package/dist/config/ghidraStartupTimeout.js +12 -0
  203. package/dist/config/homeDirectory.js +12 -0
  204. package/dist/config/mcpResponseBudget.js +30 -0
  205. package/dist/config/parseConfig.js +8 -3
  206. package/dist/config/parsers.js +19 -22
  207. package/dist/contracts/analysisViewToolContracts.js +56 -0
  208. package/dist/contracts/applicationToolContracts.js +5 -4
  209. package/dist/contracts/artifactComparisonExample.js +2 -2
  210. package/dist/contracts/artifactToolContracts.js +1 -1
  211. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  212. package/dist/contracts/browserToolContracts.js +19 -15
  213. package/dist/contracts/enhancedInputs.js +7 -5
  214. package/dist/contracts/enhancedToolContracts.js +7 -6
  215. package/dist/contracts/evm/evmToolContracts.js +1 -1
  216. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  217. package/dist/contracts/hopperMemoryContracts.js +2 -5
  218. package/dist/contracts/inputSchemaPresentation.js +90 -0
  219. package/dist/contracts/investigationExamples.js +4 -3
  220. package/dist/contracts/javascript/electronToolContracts.js +2 -2
  221. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
  222. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
  223. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  224. package/dist/contracts/managed/managedToolContracts.js +7 -14
  225. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  226. package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
  227. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  228. package/dist/contracts/native/nativeToolContracts.js +5 -3
  229. package/dist/contracts/officialToolContracts.js +16 -16
  230. package/dist/contracts/promptContracts.js +5 -5
  231. package/dist/contracts/providerSelection.js +1 -1
  232. package/dist/contracts/sessionLifecycleInputs.js +3 -7
  233. package/dist/contracts/sessionStatusContract.js +2 -4
  234. package/dist/contracts/sessionToolContracts.js +18 -8
  235. package/dist/contracts/sessionToolSchemas.js +3 -19
  236. package/dist/contracts/toolContractExamples.js +0 -1
  237. package/dist/contracts/toolContractHelpers.js +4 -1
  238. package/dist/contracts/toolContracts.js +2 -0
  239. package/dist/contracts/toolEffects.js +1 -1
  240. package/dist/contracts/toolOutputSchemaGroups.js +160 -115
  241. package/dist/contracts/toolOutputSchemaPrimitives.js +28 -20
  242. package/dist/contracts/toolSchemaMetadata.js +41 -33
  243. package/dist/contracts/webNetworkCaptureToolContracts.js +2 -2
  244. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  245. package/dist/contracts/webScriptToolContracts.js +1 -1
  246. package/dist/doctorRuntime.js +7 -5
  247. package/dist/domain/analysisErrorBase.js +8 -3
  248. package/dist/domain/analysisErrorCore.js +6 -1
  249. package/dist/domain/analysisErrorPresentation.js +90 -20
  250. package/dist/domain/analysisErrorProjection.js +130 -32
  251. package/dist/domain/analysisSnapshot.js +29 -31
  252. package/dist/domain/analysisView/analysisView.js +243 -0
  253. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  254. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  255. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  256. package/dist/domain/android/androidAnalysis.js +2 -4
  257. package/dist/domain/android/androidApplication.js +18 -10
  258. package/dist/domain/apple/appleApplication.js +42 -15
  259. package/dist/domain/apple/dyldEnvironment.js +73 -0
  260. package/dist/domain/apple/dylibResolution.js +130 -12
  261. package/dist/domain/apple/dylibResolutionFindings.js +9 -7
  262. package/dist/domain/apple/interfaceBuilderGraph.js +25 -14
  263. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
  264. package/dist/domain/apple/keyedArchive.js +35 -3
  265. package/dist/domain/apple/machoContainer.js +54 -0
  266. package/dist/domain/apple/plistNumbers.js +76 -0
  267. package/dist/domain/artifactComparison.js +15 -6
  268. package/dist/domain/artifactGraph.js +16 -3
  269. package/dist/domain/artifactIdentity.js +29 -0
  270. package/dist/domain/artifactInventoryEvidence.js +28 -40
  271. package/dist/domain/artifactOperationError.js +3 -3
  272. package/dist/domain/artifactPartialObservation.js +1 -0
  273. package/dist/domain/artifactPathSyntax.js +49 -0
  274. package/dist/domain/binaryTarget.js +39 -13
  275. package/dist/domain/bridgeCandidateProjection.js +71 -0
  276. package/dist/domain/browserCaptureComparison.js +13 -49
  277. package/dist/domain/browserCompleteness.js +1 -0
  278. package/dist/domain/browserNetworkEvidence.js +10 -4
  279. package/dist/domain/browserObservation.js +0 -1
  280. package/dist/domain/browserObservationError.js +24 -5
  281. package/dist/domain/browserObservationSchemas.js +14 -3
  282. package/dist/domain/browserScenario.js +0 -1
  283. package/dist/domain/browserScenarioCapture.js +1 -2
  284. package/dist/domain/browserScenarioDiff.js +0 -2
  285. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  286. package/dist/domain/browserScenarioDiffValues.js +2 -2
  287. package/dist/domain/browserScenarioValues.js +5 -10
  288. package/dist/domain/bundleComparison.js +3 -2
  289. package/dist/domain/callPath.js +8 -9
  290. package/dist/domain/callPathSchemas.js +2 -2
  291. package/dist/domain/canonicalJsonDigestSteps.js +133 -0
  292. package/dist/domain/canonicalOrdering.js +9 -5
  293. package/dist/domain/changedBehavior.js +9 -9
  294. package/dist/domain/comparisonSourceEvidence.js +40 -0
  295. package/dist/domain/completionLedgerGeneration.js +2 -1
  296. package/dist/domain/configurationErrors.js +13 -1
  297. package/dist/domain/conformancePackage.js +4 -3
  298. package/dist/domain/evidence.js +65 -36
  299. package/dist/domain/evidenceBundle.js +47 -8
  300. package/dist/domain/evidenceCompletionLedger.js +2 -1
  301. package/dist/domain/evidenceErrors.js +12 -1
  302. package/dist/domain/explicitSensitiveFailure.js +17 -1
  303. package/dist/domain/firmware/firmwareAnalysis.js +6 -7
  304. package/dist/domain/functionComparison.js +4 -5
  305. package/dist/domain/functionComparisonDimensions.js +120 -87
  306. package/dist/domain/functionComparisonNormalization.js +23 -34
  307. package/dist/domain/functionComparisonResults.js +1 -4
  308. package/dist/domain/functionComparisonSchemas.js +2 -8
  309. package/dist/domain/functionDossierEvidence.js +2 -37
  310. package/dist/domain/hopperErrors.js +23 -2
  311. package/dist/domain/hopperValues.js +51 -8
  312. package/dist/domain/immutableJson.js +114 -0
  313. package/dist/domain/inputIssueProjection.js +3 -0
  314. package/dist/domain/javascript/electronActiveObservation.js +47 -64
  315. package/dist/domain/javascript/electronObservation.js +14 -3
  316. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
  317. package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
  318. package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
  319. package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
  320. package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
  321. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
  322. package/dist/domain/javascript/javascriptApplicationGraph.js +39 -3
  323. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  324. package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
  325. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
  326. package/dist/domain/javascript/javascriptAstValues.js +20 -0
  327. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  328. package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
  329. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  330. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
  331. package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
  332. package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
  333. package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
  334. package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
  335. package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascript/javascriptRecovery.js +3 -8
  337. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  338. package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
  339. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
  340. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
  341. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
  342. package/dist/domain/javascript/javascriptSemanticAnalysis.js +106 -5
  343. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  344. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  345. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
  346. package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
  347. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
  348. package/dist/domain/javascript/javascriptSemanticDataEffects.js +23 -6
  349. package/dist/domain/javascript/javascriptSemanticGraph.js +98 -43
  350. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
  351. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
  352. package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
  353. package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
  354. package/dist/domain/javascript/javascriptSemanticPrimitives.js +18 -21
  355. package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
  356. package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
  357. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
  358. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
  359. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  360. package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
  361. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  362. package/dist/domain/javascript/javascriptSemanticValues.js +126 -61
  363. package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
  364. package/dist/domain/javascript/javascriptSourceParser.js +6 -2
  365. package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
  366. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
  367. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +16 -5
  368. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
  369. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -17
  370. package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
  371. package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
  372. package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
  373. package/dist/domain/jsonSerialization.js +109 -0
  374. package/dist/domain/jsonValue.js +90 -6
  375. package/dist/domain/localPath.js +6 -0
  376. package/dist/domain/managed/managedApplicationGraph.js +10 -10
  377. package/dist/domain/managed/managedArtifact.js +6 -4
  378. package/dist/domain/managed/managedInspectionEvidence.js +16 -0
  379. package/dist/domain/managed/managedMemberComparison.js +2 -9
  380. package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
  381. package/dist/domain/managed/managedNativeVerification.js +3 -11
  382. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  383. package/dist/domain/native/binaryLayout.js +2 -3
  384. package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
  385. package/dist/domain/native/nativeApiBoundary.js +1 -1
  386. package/dist/domain/native/nativeCallObservation.js +37 -13
  387. package/dist/domain/native/nativeCallPartialObservation.js +33 -0
  388. package/dist/domain/native/nativeInstruction.js +7 -0
  389. package/dist/domain/native/recordedCrash.js +2 -3
  390. package/dist/domain/offsetDateTime.js +17 -0
  391. package/dist/domain/process/processCapture.js +21 -16
  392. package/dist/domain/process/processCaptureCoverage.js +67 -0
  393. package/dist/domain/process/processCaptureExample.js +2 -1
  394. package/dist/domain/process/processCaptureParsing.js +1 -34
  395. package/dist/domain/process/processCaptureValidation.js +81 -13
  396. package/dist/domain/process/processComparison.js +79 -26
  397. package/dist/domain/process/processObservation.js +10 -2
  398. package/dist/domain/process/processScenario.js +35 -12
  399. package/dist/domain/process/processTraceComparison.js +0 -2
  400. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  401. package/dist/domain/process/processTraceEvaluation.js +15 -11
  402. package/dist/domain/process/processTraceSpecification.js +3 -4
  403. package/dist/domain/propertyListKeys.js +1 -1
  404. package/dist/domain/propertyListXmlText.js +19 -0
  405. package/dist/domain/providerAdapterError.js +3 -1
  406. package/dist/domain/providerOperationHealth.js +54 -0
  407. package/dist/domain/reconstructionCoverage.js +5 -2
  408. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  409. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  410. package/dist/domain/reconstructionVerification.js +9 -46
  411. package/dist/domain/reconstructionVerificationSchemas.js +4 -3
  412. package/dist/domain/referenceSourceGraph.js +20 -21
  413. package/dist/domain/staticRuntimeCorrelation.js +8 -45
  414. package/dist/domain/stringPatterns.js +6 -0
  415. package/dist/domain/swiftSymbolClassification.js +61 -0
  416. package/dist/domain/symbolAnalysis.js +66 -18
  417. package/dist/domain/webBundleAnalysis.js +20 -8
  418. package/dist/domain/webBundleAnalyzerInspection.js +13 -8
  419. package/dist/domain/webBundleAnalyzerResult.js +41 -2
  420. package/dist/domain/webCaptureDiff.js +0 -1
  421. package/dist/domain/webCaptureDiffSchemas.js +6 -3
  422. package/dist/domain/webEventListeners.js +3 -2
  423. package/dist/domain/webExecution.js +3 -2
  424. package/dist/domain/webRuntime.js +19 -7
  425. package/dist/domain/webScriptExport.js +1 -1
  426. package/dist/domain/webSourceLocation.js +1 -0
  427. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  428. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  429. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  430. package/dist/dotnet/ManagedMemberRows.js +75 -62
  431. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  432. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  433. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  434. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  435. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  436. package/dist/dotnet/ManagedStaticProvider.js +3 -5
  437. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  438. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  439. package/dist/evaluation/CodexAgentEval.js +12 -8
  440. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  441. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  442. package/dist/firmware/FirmwareCommand.js +9 -5
  443. package/dist/firmware/FirmwareFiles.js +1 -1
  444. package/dist/firmware/FirmwareProvider.js +4 -4
  445. package/dist/generatedPackageMetadata.js +2 -2
  446. package/dist/ghidra/GhidraAnalysisProfile.js +7 -5
  447. package/dist/ghidra/GhidraClient.js +126 -34
  448. package/dist/ghidra/GhidraClientStartup.js +0 -2
  449. package/dist/ghidra/GhidraDiagnostics.js +7 -7
  450. package/dist/ghidra/GhidraDoctor.js +6 -5
  451. package/dist/ghidra/GhidraFunctionValues.js +13 -12
  452. package/dist/ghidra/GhidraInstallation.js +58 -33
  453. package/dist/ghidra/GhidraInventoryValues.js +14 -4
  454. package/dist/ghidra/GhidraJavaLaunch.js +66 -0
  455. package/dist/ghidra/GhidraLauncher.js +47 -22
  456. package/dist/ghidra/GhidraProvider.js +6 -2
  457. package/dist/ghidra/GhidraProviderCapabilities.js +20 -2
  458. package/dist/ghidra/GhidraProviderClient.js +36 -15
  459. package/dist/ghidra/GhidraSessionError.js +13 -7
  460. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  461. package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
  462. package/dist/ghidra/GhidraTransport.js +20 -0
  463. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  464. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  465. package/dist/hopper/BridgeLauncher.js +65 -56
  466. package/dist/hopper/HopperAnalysisProfile.js +65 -12
  467. package/dist/hopper/HopperCleanup.js +63 -22
  468. package/dist/hopper/HopperClient.js +288 -59
  469. package/dist/hopper/HopperFileOffset.js +237 -0
  470. package/dist/hopper/HopperMachOImage.js +197 -0
  471. package/dist/hopper/HopperOperationStage.js +6 -0
  472. package/dist/hopper/HopperProvider.js +71 -19
  473. package/dist/hopper/HopperProviderCapabilities.js +19 -1
  474. package/dist/hopper/HopperRegexSearch.js +134 -0
  475. package/dist/hopper/HopperRegexWorker.js +27 -0
  476. package/dist/hopper/HopperRequestQueue.js +68 -19
  477. package/dist/hopper/HopperTargetLease.js +133 -49
  478. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  479. package/dist/ida/IdaConfiguration.js +8 -3
  480. package/dist/ida/IdaInput.js +1 -7
  481. package/dist/ida/IdaMcpConnection.js +8 -4
  482. package/dist/ida/IdaOperationRunner.js +3 -3
  483. package/dist/ida/IdaProvider.js +8 -12
  484. package/dist/ida/IdaSessionClient.js +20 -18
  485. package/dist/ida/IdaWorkspace.js +12 -13
  486. package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
  487. package/dist/inspector/V8InspectorCaptureProjection.js +9 -4
  488. package/dist/inspector/V8InspectorProvider.js +82 -36
  489. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  490. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  491. package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
  492. package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -0
  493. package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
  494. package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
  495. package/dist/main/shutdown.js +11 -3
  496. package/dist/main/startup.js +9 -2
  497. package/dist/main/transport.js +22 -2
  498. package/dist/main.js +11 -18
  499. package/dist/mcpDoctor.js +62 -2
  500. package/dist/native/AppleDispatchCoverage.js +47 -6
  501. package/dist/native/AppleDispatchDecodeFacts.js +6 -0
  502. package/dist/native/AppleDispatchMetadata.js +6 -3
  503. package/dist/native/AppleMachoFixups.js +48 -24
  504. package/dist/native/AppleMachoSelection.js +48 -22
  505. package/dist/native/AppleObjcCategories.js +6 -2
  506. package/dist/native/AppleObjcDispatchFacets.js +5 -2
  507. package/dist/native/AppleObjcProperties.js +2 -1
  508. package/dist/native/AppleSwiftDispatchFacets.js +27 -21
  509. package/dist/native/AppleSwiftVtables.js +21 -15
  510. package/dist/native/CommandRunner.js +87 -88
  511. package/dist/native/LldbCallTracer.js +372 -103
  512. package/dist/native/LldbRetainedObservations.js +178 -0
  513. package/dist/native/NativeCallObservation.js +62 -3
  514. package/dist/native/NativeMacOSProvider.js +122 -31
  515. package/dist/native/NativeUiHelperRuntime.js +11 -2
  516. package/dist/native/NativeUiObservation.js +2 -2
  517. package/dist/native/SignatureTargetBinding.js +155 -0
  518. package/dist/native/parsers/lipo.js +71 -1
  519. package/dist/native/pwndbg/PwndbgCoreContext.js +25 -5
  520. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  521. package/dist/native/pwntools/RecordedCrashStructureBindings.js +2 -0
  522. package/dist/process/DarwinProcessRunTokenReader.js +23 -10
  523. package/dist/process/ExecFileOutput.js +108 -6
  524. package/dist/process/OwnedCommand.js +7 -2
  525. package/dist/process/PrivateRuntimeRoot.js +10 -5
  526. package/dist/process/ProcessOwnership.js +204 -57
  527. package/dist/process/ProcessOwnershipObservation.js +60 -9
  528. package/dist/process/ProviderProcess.js +39 -10
  529. package/dist/process/capture/FilesystemSnapshot.js +50 -13
  530. package/dist/process/capture/ProcessCaptureError.js +15 -2
  531. package/dist/process/capture/ProcessCaptureLifecycle.js +235 -81
  532. package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
  533. package/dist/process/capture/ProcessHarness.js +21 -25
  534. package/dist/process/capture/ProcessNormalization.js +20 -2
  535. package/dist/process/capture/ProcessSampling.js +25 -2
  536. package/dist/process/capture/TerminalRenderer.js +14 -0
  537. package/dist/process/snapshotEnvironment.js +14 -0
  538. package/dist/server/EvidenceMcpServer.js +157 -0
  539. package/dist/server/createServer.js +61 -41
  540. package/dist/server/mcpClientMetadata.js +12 -5
  541. package/dist/server/promptCompletion.js +3 -8
  542. package/dist/server/registerAnalysisViewTool.js +15 -0
  543. package/dist/server/registerAndroidTools.js +2 -5
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  546. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  547. package/dist/server/registerApplicationTools/coverage.js +1 -2
  548. package/dist/server/registerApplicationTools/helpers.js +1 -4
  549. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  550. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  551. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  552. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  553. package/dist/server/registerArtifactComparisonTool.js +13 -10
  554. package/dist/server/registerBinaryDiagnosticsTools.js +2 -5
  555. package/dist/server/registerBrowserScenarioTool.js +3 -6
  556. package/dist/server/registerBrowserTools.js +13 -18
  557. package/dist/server/registerBundleComparisonTool.js +5 -7
  558. package/dist/server/registerCloseLifecycleTool.js +9 -20
  559. package/dist/server/registerElectronTools.js +10 -15
  560. package/dist/server/registerEnhancedTools.js +36 -77
  561. package/dist/server/registerEvidenceTools.js +3 -6
  562. package/dist/server/registerEvmTools.js +2 -5
  563. package/dist/server/registerFirmwareTools.js +2 -5
  564. package/dist/server/registerFunctionComparisonTool.js +15 -12
  565. package/dist/server/registerInvestigationTools.js +16 -17
  566. package/dist/server/registerJavaScriptRecoveryTool.js +2 -5
  567. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -8
  568. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -8
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -7
  570. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -9
  571. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -9
  572. package/dist/server/registerOfficialTools.js +4 -21
  573. package/dist/server/registerProcessComparisonTool.js +74 -48
  574. package/dist/server/registerRecordedCrashTools.js +2 -5
  575. package/dist/server/registerSessionRecordTools.js +19 -24
  576. package/dist/server/registerSessionStatusTool.js +19 -6
  577. package/dist/server/registerSessionTools.js +20 -18
  578. package/dist/server/registerWebModuleTool.js +2 -5
  579. package/dist/server/registerWebNetworkCaptureTool.js +2 -5
  580. package/dist/server/registerWebRuntimeTools.js +4 -9
  581. package/dist/server/registerWebScriptTool.js +2 -5
  582. package/dist/server/registerWebSourceLocationTool.js +2 -5
  583. package/dist/server/runDerivedOperation.js +15 -3
  584. package/dist/server/sessionAvailabilityPolicy.js +0 -1
  585. package/dist/server/toolRegistrationOptions.js +2 -2
  586. package/dist/server/toolResult.js +75 -51
  587. package/dist/server/toolResultEncoding.js +34 -0
  588. package/dist/windows/WindowsNativeLoader.js +1 -0
  589. package/dist/windows/WindowsOwnedProcess.js +60 -15
  590. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  591. package/install.sh +1 -1
  592. package/native/windows/README.md +3 -1
  593. package/native/windows/build/manifest.json +2 -2
  594. package/native/windows/build/rea-windows-x64.node +0 -0
  595. package/package.json +44 -30
  596. package/scripts/electron-active-hook-boundaries.cjs +18 -20
  597. package/scripts/electron-active-hook.cjs +241 -37
  598. package/scripts/rea.mjs +3 -6
  599. package/skills/reverse-engineer-anything/SKILL.md +12 -3
  600. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  601. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  602. package/skills/reverse-engineer-anything/references/javascript-applications.md +20 -3
  603. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
  604. package/dist/config.js +0 -1
  605. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  606. package/dist/contracts/process/processCaptureExample.js +0 -2
  607. package/dist/contracts/toolOutputSchemas.js +0 -2
  608. package/dist/ghidra/GhidraDefaults.js +0 -2
  609. package/dist/main/reload.js +0 -12
  610. package/dist/main/state.js +0 -3
  611. package/dist/server/sessionToolPolicies.js +0 -2
@@ -59,25 +59,33 @@ export const hashFile = async (path, expected, maxBytes, signal) => {
59
59
  /** Capture bounded, root-aliased filesystem state without following symlinks. */
60
60
  export const snapshotRoots = async (scenario, signal) => {
61
61
  const entries = [];
62
+ const completeRoots = [];
62
63
  let remainingBytes = scenario.limits.file_bytes;
63
64
  let truncated = false;
65
+ const enumerationReasons = new Set();
66
+ const hashOmissions = [];
64
67
  const visit = async (root, rootAlias, path, depth) => {
65
68
  signal?.throwIfAborted();
66
69
  if (entries.length >= scenario.limits.files ||
67
70
  depth > scenario.limits.filesystem_depth) {
68
71
  truncated = true;
69
- return;
72
+ if (entries.length >= scenario.limits.files)
73
+ enumerationReasons.add("files_limit");
74
+ if (depth > scenario.limits.filesystem_depth)
75
+ enumerationReasons.add("depth_limit");
76
+ return false;
70
77
  }
71
78
  const stats = await lstatIfPresent(path);
72
79
  if (stats === undefined)
73
- return;
80
+ return true;
74
81
  const relativePath = relative(root, path) || ".";
75
82
  if (stats.isSymbolicLink()) {
76
83
  const target = resolve(dirname(path), await readlink(path));
77
84
  const afterRead = await lstat(path);
78
85
  if (!hasSameIdentity(stats, afterRead, "symlink")) {
79
86
  truncated = true;
80
- return;
87
+ enumerationReasons.add("identity_changed");
88
+ return false;
81
89
  }
82
90
  entries.push({
83
91
  path: `${rootAlias}:${relativePath}`,
@@ -87,15 +95,24 @@ export const snapshotRoots = async (scenario, signal) => {
87
95
  sha256: null,
88
96
  symlink_target: target,
89
97
  });
90
- return;
98
+ return true;
91
99
  }
92
100
  if (stats.isFile()) {
93
101
  const sha256 = remainingBytes >= stats.size
94
102
  ? await hashFile(path, stats, remainingBytes, signal)
95
103
  : null;
96
104
  remainingBytes -= sha256 === null ? 0 : stats.size;
97
- if (sha256 === null)
105
+ if (sha256 === null) {
98
106
  truncated = true;
107
+ hashOmissions.push({
108
+ path: `${rootAlias}:${relativePath}`,
109
+ size_bytes: stats.size,
110
+ remaining_budget_bytes: remainingBytes,
111
+ reason: remainingBytes < stats.size
112
+ ? "file_bytes_budget"
113
+ : "file_changed_or_short_read",
114
+ });
115
+ }
99
116
  entries.push({
100
117
  path: `${rootAlias}:${relativePath}`,
101
118
  type: "file",
@@ -104,7 +121,7 @@ export const snapshotRoots = async (scenario, signal) => {
104
121
  sha256,
105
122
  symlink_target: null,
106
123
  });
107
- return;
124
+ return true;
108
125
  }
109
126
  const type = stats.isDirectory() ? "directory" : "other";
110
127
  entries.push({
@@ -116,22 +133,42 @@ export const snapshotRoots = async (scenario, signal) => {
116
133
  symlink_target: null,
117
134
  });
118
135
  if (type !== "directory")
119
- return;
136
+ return true;
120
137
  const children = await readdir(path);
121
138
  const afterRead = await lstat(path);
122
139
  if (!hasSameIdentity(stats, afterRead, "directory")) {
123
140
  truncated = true;
124
- return;
141
+ enumerationReasons.add("identity_changed");
142
+ return false;
143
+ }
144
+ let complete = true;
145
+ for (const child of children.sort()) {
146
+ if (!(await visit(root, rootAlias, join(path, child), depth + 1)))
147
+ complete = false;
125
148
  }
126
- for (const child of children.sort())
127
- await visit(root, rootAlias, join(path, child), depth + 1);
149
+ return complete;
128
150
  };
129
151
  for (const [index, root] of scenario.filesystem_observation_paths.entries()) {
152
+ const alias = `root_${String(index)}`;
130
153
  if ((await lstatIfPresent(root)) === undefined) {
131
- truncated = true;
154
+ completeRoots.push(alias);
132
155
  continue;
133
156
  }
134
- await visit(root, `root_${String(index)}`, root, 0);
157
+ if (await visit(root, alias, root, 0))
158
+ completeRoots.push(alias);
135
159
  }
136
- return { files: entries, truncated };
160
+ return {
161
+ files: entries,
162
+ truncated,
163
+ completeRoots,
164
+ coverage: {
165
+ files_limit: scenario.limits.files,
166
+ depth_limit: scenario.limits.filesystem_depth,
167
+ enumeration_truncated: completeRoots.length !== scenario.filesystem_observation_paths.length,
168
+ enumeration_reasons: [...enumerationReasons],
169
+ hash_budget_bytes: scenario.limits.file_bytes,
170
+ hashed_bytes: scenario.limits.file_bytes - remainingBytes,
171
+ hash_omissions: hashOmissions,
172
+ },
173
+ };
137
174
  };
@@ -1,3 +1,4 @@
1
+ import { DarwinProcessOwnershipInspectionError } from "../DarwinProcessRunTokenReader.js";
1
2
  import { AnalysisError } from "../../domain/analysisErrorBase.js";
2
3
  /** Typed application failure produced by controlled process capture. */
3
4
  export class ProcessCaptureError extends AnalysisError {
@@ -12,14 +13,14 @@ export class ProcessCaptureError extends AnalysisError {
12
13
  cleanupReport;
13
14
  constructor(message, options) {
14
15
  super(message, options);
15
- this.userMessage = options?.userMessage;
16
+ this.userMessage = options?.userMessage ?? message;
16
17
  this.userCategory = options?.userCategory;
17
18
  this.reason =
18
19
  options?.reason ??
19
20
  (options?.userCategory === "cancelled" ? "cancelled" : "capture_failed");
20
21
  this.cleanupIncomplete = this.reason === "cleanup_incomplete";
21
22
  this.cleanupResources = options?.cleanupResources ?? [];
22
- this.executionFailure = options?.executionFailure;
23
+ this.executionFailure = options?.executionFailure ?? message;
23
24
  this.partialObservation = options?.partialObservation;
24
25
  this.cleanupReport = options?.cleanupReport;
25
26
  }
@@ -40,3 +41,15 @@ export const processCaptureCancelled = () => new ProcessCaptureError("process ca
40
41
  reason: "cancelled",
41
42
  userMessage: "Process capture was cancelled. Start it again when ready.",
42
43
  });
44
+ /** Preserve typed process-inspection preflight failures at the capture boundary. */
45
+ export const normalizeCaptureFailure = (cause, signal) => {
46
+ if (cause instanceof ProcessCaptureError)
47
+ return cause;
48
+ if (cause instanceof DarwinProcessOwnershipInspectionError)
49
+ return new ProcessCaptureError(cause.message, { cause });
50
+ if (signal?.aborted === true &&
51
+ (cause === signal.reason ||
52
+ (cause instanceof Error && cause.name === "AbortError")))
53
+ return processCaptureCancelled();
54
+ return cause;
55
+ };
@@ -3,18 +3,22 @@ import { constants, statSync } from "node:fs";
3
3
  import { open, mkdtemp, rm, stat } from "node:fs/promises";
4
4
  import { tmpdir } from "node:os";
5
5
  import { join } from "node:path";
6
- import { digestProcessCommitment, parseProcessCapture, partialProcessCaptureObservationSchema, processComparisonContract, processScenarioCommitment, } from "../../domain/process/processCapture.js";
6
+ import { setTimeout as delay } from "node:timers/promises";
7
+ import { digestProcessCommitment, processComparisonContract, processScenarioCommitment, } from "../../domain/process/processScenario.js";
8
+ import { parseProcessCapture } from "../../domain/process/processCaptureParsing.js";
7
9
  import { PRODUCT_IDENTITY } from "../../identity.js";
8
10
  import { snapshotRoots } from "./FilesystemSnapshot.js";
9
11
  import { classifyFilesystemEffects } from "./ProcessFilesystemEffects.js";
10
12
  import { cleanupOwnedProcessGroup, verifyNoTokenOwnedProcesses, } from "../ProcessOwnership.js";
11
13
  import { observeOwnedProcessGroup, prepareProcessOwnershipInspection, systemProcessOwnershipHost, } from "../ProcessOwnershipObservation.js";
12
- import { describeProcessCaptureExecutionFailure, ProcessCaptureError, } from "./ProcessCaptureError.js";
14
+ import { describeProcessCaptureExecutionFailure, normalizeCaptureFailure, ProcessCaptureError, } from "./ProcessCaptureError.js";
13
15
  import { assertNotCancelled } from "./ProcessScenarioRuntimeValidation.js";
14
16
  import { normalizeProcessElapsedTime, normalizeProcessSamples, normalizeProcessText, } from "./ProcessNormalization.js";
15
17
  import { PROCESS_PROVIDER } from "../../domain/process/processEvidenceProvider.js";
16
18
  import { TerminalRenderer } from "./TerminalRenderer.js";
19
+ import { hasCaptureTruncation, } from "../../domain/process/processCaptureCoverage.js";
17
20
  import { scheduleProcessInterval } from "./ProcessTimer.js";
21
+ import { partialProcessCaptureObservationSchema } from "../../domain/process/processCapture.js";
18
22
  /** Seed explicit observation availability before capture completion begins. */
19
23
  export const createProcessCaptureObservationBuffer = (options) => ({
20
24
  target_pid: {
@@ -92,6 +96,9 @@ export const buildCaptureResult = (options) => {
92
96
  const sensitiveInputUnknown = "Sensitive scripted input values are redacted from process capture Evidence.";
93
97
  const filesystemObservationUnknown = "No filesystem observation paths were selected; filesystem effects remain unknown.";
94
98
  const hasFilesystemObservations = options.scenario.filesystem_observation_paths.length > 0;
99
+ const filesystemEffects = classifyFilesystemEffects(options.before, options.after);
100
+ const hasUnknownFilesystemEffects = filesystemEffects.some(({ status }) => status === "unknown");
101
+ const incompleteFilesystemUnknown = "Path absence in incomplete enumeration or below an unfollowed symbolic link remains unknown.";
95
102
  return {
96
103
  manifest: options.manifest,
97
104
  normalization: options.scenario.normalization,
@@ -111,8 +118,13 @@ export const buildCaptureResult = (options) => {
111
118
  event_journal: options.eventJournal,
112
119
  files_before: options.before.files,
113
120
  files_after: options.after.files,
114
- filesystem_effects: classifyFilesystemEffects(options.before.files, options.after.files),
115
- truncated: options.truncated,
121
+ filesystem_effects: filesystemEffects,
122
+ truncated: options.truncationDetails === undefined
123
+ ? options.truncated
124
+ : hasCaptureTruncation(options.truncationDetails),
125
+ ...(options.truncationDetails === undefined
126
+ ? {}
127
+ : { truncation_details: options.truncationDetails }),
116
128
  limitations: [
117
129
  "The executable digest is a prelaunch file sample; matching path metadata immediately after spawn does not prove an atomic operating-system image binding.",
118
130
  "Process trees are sampled and may omit short-lived descendants.",
@@ -122,6 +134,10 @@ export const buildCaptureResult = (options) => {
122
134
  "Filesystem observations are before/after snapshots, not syscall traces.",
123
135
  "Inherited host environment variables are not recorded and may affect results.",
124
136
  ...(!hasFilesystemObservations ? [filesystemObservationUnknown] : []),
137
+ ...(hasUnknownFilesystemEffects ? [incompleteFilesystemUnknown] : []),
138
+ ...(options.truncationDetails === undefined
139
+ ? []
140
+ : captureCoverageUnknowns(options.truncationDetails).map(({ reason }) => reason)),
125
141
  ...(hasSensitiveScriptedInput ? [sensitiveInputUnknown] : []),
126
142
  ],
127
143
  residual_unknowns: [
@@ -149,12 +165,58 @@ export const buildCaptureResult = (options) => {
149
165
  },
150
166
  ]
151
167
  : []),
168
+ ...(hasUnknownFilesystemEffects
169
+ ? [
170
+ {
171
+ scope: "filesystem",
172
+ reason: incompleteFilesystemUnknown,
173
+ },
174
+ ]
175
+ : []),
152
176
  ...(hasSensitiveScriptedInput
153
177
  ? [{ scope: "interaction", reason: sensitiveInputUnknown }]
154
178
  : []),
179
+ ...(options.truncationDetails === undefined
180
+ ? []
181
+ : captureCoverageUnknowns(options.truncationDetails).filter(({ scope }) => scope !== "terminal")),
155
182
  ],
156
183
  };
157
184
  };
185
+ const captureCoverageUnknowns = (details) => {
186
+ const unknowns = [];
187
+ if (details.raw_terminal.observed_frames > details.raw_terminal.retained_frames)
188
+ unknowns.push({
189
+ scope: "terminal",
190
+ reason: "Raw PTY chunks exceeded output_bytes and were omitted; rendered states also lack those inputs. See truncation_details.raw_terminal.",
191
+ });
192
+ if (details.rendered_terminal.observed_frames >
193
+ details.rendered_terminal.retained_frames)
194
+ unknowns.push({
195
+ scope: "terminal",
196
+ reason: "Cumulative rendered state and visible-line bytes exceeded output_bytes; whole rendered frames were omitted. Raw PTY coverage is reported separately. See truncation_details.rendered_terminal.",
197
+ });
198
+ for (const [name, coverage] of [
199
+ ["before", details.filesystem_before],
200
+ ["after_settlement", details.filesystem_after],
201
+ ]) {
202
+ if (coverage.enumeration_truncated)
203
+ unknowns.push({
204
+ scope: "filesystem",
205
+ reason: `Filesystem ${name} path enumeration was incomplete: ${coverage.enumeration_reasons.join(", ")}. See truncation_details.`,
206
+ });
207
+ if (coverage.hash_omissions.length > 0)
208
+ unknowns.push({
209
+ scope: "filesystem",
210
+ reason: `Filesystem ${name} omitted ${String(coverage.hash_omissions.length)} whole-file digests; per-path reasons and remaining file_bytes budget are in truncation_details.`,
211
+ });
212
+ }
213
+ if (details.process.sampling_partial)
214
+ unknowns.push({
215
+ scope: "process",
216
+ reason: "Process sampling stopped with incomplete observations; sample_limit is reported in truncation_details.process.",
217
+ });
218
+ return unknowns;
219
+ };
158
220
  const identityFromStats = (stats) => ({
159
221
  dev: stats.dev,
160
222
  ino: stats.ino,
@@ -301,7 +363,8 @@ export const createRunManifest = async (scenario, startedAt, completedAt, execut
301
363
  normalization_sha256: digestProcessCommitment(scenario.normalization),
302
364
  };
303
365
  };
304
- export const observeSettlement = async (runId, processGroupIds, settleMs, recordEvent = () => undefined, platform = process.platform) => {
366
+ export const observeSettlement = async (runId, processGroupIds, settleMs, recordEvent = () => undefined, platform = process.platform, signal) => {
367
+ assertNotCancelled(signal);
305
368
  if (platform === "win32") {
306
369
  recordEvent("lifecycle", 1);
307
370
  return { state: "unverifiable", elapsed_ms: 0 };
@@ -310,11 +373,9 @@ export const observeSettlement = async (runId, processGroupIds, settleMs, record
310
373
  let consecutiveEmpty = 0;
311
374
  let deadlineReached = false;
312
375
  while (!deadlineReached) {
313
- const observations = await Promise.all([...new Set(processGroupIds)].map((processGroupId) => observeOwnedProcessGroup({
314
- runId,
315
- leaderPid: processGroupId,
316
- processGroupId,
317
- })));
376
+ assertNotCancelled(signal);
377
+ const observations = await Promise.all([...new Set(processGroupIds)].map((processGroupId) => observeOwnedProcessGroup({ runId, leaderPid: processGroupId, processGroupId }, undefined, signal)));
378
+ assertNotCancelled(signal);
318
379
  if (observations.some(({ state }) => state === "unverifiable")) {
319
380
  recordEvent("lifecycle", 1);
320
381
  return { state: "unverifiable", elapsed_ms: Date.now() - started };
@@ -331,7 +392,7 @@ export const observeSettlement = async (runId, processGroupIds, settleMs, record
331
392
  deadlineReached = Date.now() - started >= settleMs;
332
393
  if (deadlineReached)
333
394
  break;
334
- await new Promise((resolve) => setTimeout(resolve, 50));
395
+ await delay(50, undefined, { signal });
335
396
  }
336
397
  recordEvent("lifecycle", 1);
337
398
  return { state: "alive_at_deadline", elapsed_ms: Date.now() - started };
@@ -403,6 +464,50 @@ const verifyTokenOwnedProcessesUntilSettled = async (verify) => {
403
464
  }
404
465
  return result;
405
466
  };
467
+ const releaseCapturedProcessGroup = async (ownership, host) => {
468
+ if (host.platform === "win32")
469
+ return {
470
+ state: "unverified",
471
+ reason: "owned process cleanup is unverifiable on Windows without process-job authority",
472
+ };
473
+ let outcome = {
474
+ state: "cleaned",
475
+ reason: null,
476
+ };
477
+ const unverified = [];
478
+ try {
479
+ const cleaned = await host.cleanupProcessGroup(ownership);
480
+ unverified.push(...(cleaned.unverified ?? []));
481
+ if (!cleaned.cleaned) {
482
+ outcome = { state: "unverified", reason: cleaned.reason };
483
+ }
484
+ else {
485
+ const verified = await verifyTokenOwnedProcessesUntilSettled(() => host.verifyTokenOwnedProcesses(ownership.runId, undefined, ownership.captureBaseline, ownership));
486
+ unverified.push(...(verified.unverified ?? []));
487
+ if (!verified.cleaned)
488
+ outcome = { state: "unverified", reason: verified.reason };
489
+ }
490
+ }
491
+ catch (cause) {
492
+ outcome = {
493
+ state: "failed",
494
+ reason: cause instanceof Error
495
+ ? cause.message || cause.name || "owned process cleanup failed"
496
+ : "owned process cleanup failed",
497
+ };
498
+ }
499
+ return unverified.length === 0
500
+ ? outcome
501
+ : {
502
+ ...outcome,
503
+ unverified_processes: [
504
+ ...new Map(unverified.map(({ pid, diagnostic }) => [
505
+ `${String(pid)}:${diagnostic}`,
506
+ { pid, reason: diagnostic },
507
+ ])).values(),
508
+ ],
509
+ };
510
+ };
406
511
  export const releaseProcessResources = async (options) => {
407
512
  const host = options.host ?? processCaptureCleanupHost;
408
513
  for (const timer of options.timers)
@@ -422,40 +527,20 @@ export const releaseProcessResources = async (options) => {
422
527
  : "renderer dispose failed",
423
528
  };
424
529
  }
425
- let ownedProcessGroup = {
426
- state: options.terminal === undefined ? "not_required" : "cleaned",
427
- reason: null,
428
- };
429
- if (options.terminal !== undefined) {
430
- if (host.platform === "win32") {
431
- ownedProcessGroup = {
432
- state: "unverified",
433
- reason: "owned process cleanup is unverifiable on Windows without process-job authority",
434
- };
435
- }
436
- else {
437
- const cleaned = await host.cleanupProcessGroup({
438
- runId: options.runId,
439
- leaderPid: options.terminal.pid,
440
- processGroupId: options.terminal.pid,
441
- sweepTokenOwnedProcesses: true,
442
- ...(options.sampledProcessGroupIds === undefined
443
- ? {}
444
- : { sampledProcessGroupIds: options.sampledProcessGroupIds }),
445
- ...(options.captureBaseline === undefined
446
- ? {}
447
- : { captureBaseline: options.captureBaseline }),
448
- });
449
- if (!cleaned.cleaned) {
450
- ownedProcessGroup = { state: "unverified", reason: cleaned.reason };
451
- }
452
- else {
453
- const verified = await verifyTokenOwnedProcessesUntilSettled(() => host.verifyTokenOwnedProcesses(options.runId, undefined, options.captureBaseline));
454
- if (!verified.cleaned)
455
- ownedProcessGroup = { state: "unverified", reason: verified.reason };
456
- }
457
- }
458
- }
530
+ const ownedProcessGroup = options.terminal === undefined
531
+ ? { state: "not_required", reason: null }
532
+ : await releaseCapturedProcessGroup({
533
+ runId: options.runId,
534
+ leaderPid: options.terminal.pid,
535
+ processGroupId: options.terminal.pid,
536
+ sweepTokenOwnedProcesses: true,
537
+ ...(options.sampledProcessGroupIds === undefined
538
+ ? {}
539
+ : { sampledProcessGroupIds: options.sampledProcessGroupIds }),
540
+ ...(options.captureBaseline === undefined
541
+ ? {}
542
+ : { captureBaseline: options.captureBaseline }),
543
+ }, host);
459
544
  let temporaryRoot = {
460
545
  state: "cleaned",
461
546
  reason: null,
@@ -487,12 +572,14 @@ export const cleanupReportFailure = (report) => {
487
572
  };
488
573
  export const captureTerminalFrames = (options) => {
489
574
  let outputBytes = 0;
490
- let truncated = false;
575
+ let observedBytes = 0;
576
+ let observedFrames = 0;
491
577
  options.terminal.onData((data) => {
492
578
  options.onOutput();
493
579
  const bytes = Buffer.byteLength(data);
580
+ observedBytes += bytes;
581
+ observedFrames += 1;
494
582
  if (outputBytes + bytes > options.scenario.limits.output_bytes) {
495
- truncated = true;
496
583
  return;
497
584
  }
498
585
  outputBytes += bytes;
@@ -503,49 +590,68 @@ export const captureTerminalFrames = (options) => {
503
590
  sequence,
504
591
  at_ms: atMs,
505
592
  data: normalized,
593
+ ...(normalized === data ? {} : { raw_data: data }),
506
594
  });
507
595
  options.renderer.write(data, atMs);
508
596
  options.recordEvent("frames", sequence);
509
597
  });
510
- return () => truncated;
598
+ return () => ({
599
+ budget_bytes: options.scenario.limits.output_bytes,
600
+ observed_bytes: observedBytes,
601
+ retained_bytes: outputBytes,
602
+ observed_frames: observedFrames,
603
+ retained_frames: options.frames.length,
604
+ });
511
605
  };
512
606
  export const resolveProcessResult = (capture, executionFailure, cleanup, observations, partialContext) => {
513
607
  const cleanupFailure = cleanupReportFailure(cleanup);
514
- if (cleanupFailure !== undefined) {
515
- const cleanupResources = Object.entries(cleanup)
516
- .filter(([, outcome]) => outcome.state === "failed" || outcome.state === "unverified")
517
- .map(([resource]) => resource);
518
- const executionFailureReason = describeProcessCaptureExecutionFailure(executionFailure);
519
- let partialObservation;
520
- if (capture !== undefined || observations !== undefined) {
521
- const normalizedObservations = observations === undefined || partialContext === undefined
522
- ? observations
523
- : normalizePartialProcessObservations(observations, partialContext);
524
- const partialPayload = capture === undefined
525
- ? { observations: normalizedObservations }
526
- : { capture };
527
- const pendingCapture = capture === undefined
528
- ? undefined
529
- : {
530
- ...capture,
531
- settlement: {
608
+ const executionFailureReason = describeProcessCaptureExecutionFailure(executionFailure);
609
+ let partialObservation;
610
+ if ((cleanupFailure !== undefined || executionFailure !== undefined) &&
611
+ (capture !== undefined || observations !== undefined)) {
612
+ const normalizedObservations = observations === undefined || partialContext === undefined
613
+ ? observations
614
+ : normalizePartialProcessObservations(observations, partialContext);
615
+ if (capture === undefined) {
616
+ if (normalizedObservations !== undefined) {
617
+ const partialResult = partialProcessCaptureObservationSchema.safeParse({
618
+ observations: normalizedObservations,
619
+ cleanup,
620
+ execution_failure: executionFailureReason ?? null,
621
+ });
622
+ if (partialResult.success)
623
+ partialObservation = partialResult.data;
624
+ }
625
+ }
626
+ else {
627
+ const captureData = "cleanup" in capture
628
+ ? (() => {
629
+ const { cleanup: _cleanup, ...data } = capture;
630
+ void _cleanup;
631
+ return data;
632
+ })()
633
+ : capture;
634
+ const settlement = cleanupFailure !== undefined
635
+ ? { ...capture.settlement, cleanup_outcome: "failed" }
636
+ : capture.settlement.state === "quiesced"
637
+ ? {
532
638
  ...capture.settlement,
533
- cleanup_outcome: "failed",
534
- },
535
- };
639
+ cleanup_outcome: "not_required",
640
+ }
641
+ : { ...capture.settlement, cleanup_outcome: "cleaned" };
536
642
  const partialResult = partialProcessCaptureObservationSchema.safeParse({
537
- ...partialPayload,
538
- ...(pendingCapture === undefined
539
- ? {}
540
- : {
541
- capture: Object.fromEntries(Object.entries(pendingCapture).filter(([key]) => key !== "cleanup")),
542
- }),
643
+ capture: { ...captureData, settlement },
543
644
  cleanup,
544
645
  execution_failure: executionFailureReason ?? null,
545
646
  });
546
647
  if (partialResult.success)
547
648
  partialObservation = partialResult.data;
548
649
  }
650
+ }
651
+ if (cleanupFailure !== undefined) {
652
+ const cleanupResources = Object.entries(cleanup)
653
+ .filter(([, outcome]) => outcome.state === "failed" || outcome.state === "unverified")
654
+ .map(([resource]) => resource);
549
655
  throw new ProcessCaptureError(cleanupFailure, {
550
656
  cause: executionFailure,
551
657
  reason: "cleanup_incomplete",
@@ -557,20 +663,43 @@ export const resolveProcessResult = (capture, executionFailure, cleanup, observa
557
663
  cleanupReport: cleanup,
558
664
  });
559
665
  }
560
- if (executionFailure instanceof ProcessCaptureError)
561
- throw executionFailure;
666
+ if (executionFailure instanceof ProcessCaptureError) {
667
+ const retainedExecutionFailure = executionFailure.executionFailure ?? executionFailureReason;
668
+ const retainedPartialObservation = executionFailure.partialObservation ?? partialObservation;
669
+ throw new ProcessCaptureError(executionFailure.message, {
670
+ cause: executionFailure,
671
+ ...(executionFailure.userMessage === undefined
672
+ ? {}
673
+ : { userMessage: executionFailure.userMessage }),
674
+ ...(executionFailure.userCategory === undefined
675
+ ? {}
676
+ : { userCategory: executionFailure.userCategory }),
677
+ reason: executionFailure.reason,
678
+ cleanupResources: executionFailure.cleanupResources,
679
+ ...(retainedExecutionFailure === undefined
680
+ ? {}
681
+ : { executionFailure: retainedExecutionFailure }),
682
+ ...(retainedPartialObservation === undefined
683
+ ? {}
684
+ : { partialObservation: retainedPartialObservation }),
685
+ cleanupReport: executionFailure.cleanupReport ?? cleanup,
686
+ });
687
+ }
562
688
  if (executionFailure !== undefined) {
563
- const executionFailureReason = describeProcessCaptureExecutionFailure(executionFailure);
564
689
  throw new ProcessCaptureError("process capture failed", {
565
690
  cause: executionFailure,
691
+ reason: "capture_failed",
566
692
  ...(executionFailureReason === undefined
567
693
  ? {}
568
694
  : { executionFailure: executionFailureReason }),
695
+ ...(partialObservation === undefined ? {} : { partialObservation }),
696
+ cleanupReport: cleanup,
569
697
  });
570
698
  }
571
699
  if (capture === undefined)
572
700
  throw new ProcessCaptureError("process capture produced no result");
573
- if ("cleanup" in capture)
701
+ const unverifiedProcesses = cleanup.owned_process_group.unverified_processes;
702
+ if ("cleanup" in capture && unverifiedProcesses === undefined)
574
703
  return capture;
575
704
  const settlement = capture.settlement.state === "quiesced"
576
705
  ? { ...capture.settlement, cleanup_outcome: "not_required" }
@@ -579,9 +708,20 @@ export const resolveProcessResult = (capture, executionFailure, cleanup, observa
579
708
  return parseProcessCapture({
580
709
  ...capture,
581
710
  settlement,
711
+ residual_unknowns: [
712
+ ...capture.residual_unknowns,
713
+ ...(unverifiedProcesses ?? []).map(({ pid, reason }) => ({
714
+ scope: "process",
715
+ reason: `Ownership of unrelated process ${String(pid)} could not be verified; it was left untouched: ${reason}`,
716
+ })),
717
+ ],
582
718
  cleanup: {
719
+ ...("cleanup" in capture ? capture.cleanup : {}),
583
720
  owned_process_group: "verified",
584
721
  temporary_root: "removed",
722
+ ...(unverifiedProcesses === undefined
723
+ ? {}
724
+ : { unverified_processes: unverifiedProcesses }),
585
725
  },
586
726
  });
587
727
  }
@@ -594,16 +734,30 @@ export const prepareProcessCapture = async (scenario, signal, captureSnapshot =
594
734
  await host.prepareOwnershipInspector?.(signal);
595
735
  assertNotCancelled(signal);
596
736
  const before = await captureSnapshot(scenario, signal);
737
+ const runId = randomUUID();
597
738
  const temporaryRoot = await host.createTemporaryRoot();
598
739
  try {
599
740
  assertNotCancelled(signal);
600
- const runId = randomUUID();
601
741
  const ownershipBaseline = (await host.captureOwnershipBaseline?.(signal)) ?? [];
602
742
  assertNotCancelled(signal);
603
743
  return { temporaryRoot, runId, ownershipBaseline, before };
604
744
  }
605
745
  catch (cause) {
606
- await host.cleanup(temporaryRoot);
746
+ const cleanup = await releaseProcessResources({
747
+ timers: new Set(),
748
+ terminal: undefined,
749
+ renderer: undefined,
750
+ runId,
751
+ temporaryRoot,
752
+ host: { ...processCaptureCleanupHost, removeTemporaryRoot: host.cleanup },
753
+ });
754
+ resolveProcessResult(undefined, normalizeCaptureFailure(cause, signal), cleanup, createProcessCaptureObservationBuffer({
755
+ frames: [],
756
+ interactions: [],
757
+ samples: [],
758
+ eventJournal: [],
759
+ before,
760
+ }), { scenario });
607
761
  throw cause;
608
762
  }
609
763
  };