rea-agents 6.5.0 → 6.7.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 (921) hide show
  1. package/README.md +12 -3
  2. package/THIRD_PARTY_NOTICES.md +1 -0
  3. package/bridge/android/ReaJadxBridge.java +167 -23
  4. package/bridge/cutter/rea_bridge.py +19 -10
  5. package/bridge/ghidra/ReaGhidraBridge.java +98 -66
  6. package/bridge/hopper_bridge.py +9 -1
  7. package/bridge/native/rea_lldb_tracer.py +48 -4
  8. package/bridge/pwndbg/core_context.py +15 -2
  9. package/dist/adb/AdbCommand.js +148 -0
  10. package/dist/adb/AdbConfiguration.js +26 -4
  11. package/dist/adb/AdbInputSnapshot.js +126 -0
  12. package/dist/adb/AdbProvider.js +765 -248
  13. package/dist/adb/AdbShellOutput.js +92 -21
  14. package/dist/android/AndroidTargetSnapshot.js +7 -7
  15. package/dist/android/JadxAnalysis.js +27 -32
  16. package/dist/android/JadxConfiguration.js +173 -125
  17. package/dist/android/JadxDoctor.js +11 -3
  18. package/dist/android/JadxFailure.js +154 -0
  19. package/dist/android/JadxInterruption.js +13 -0
  20. package/dist/android/JadxJavaProbe.js +246 -0
  21. package/dist/android/JadxMcpTransport.js +48 -15
  22. package/dist/android/JadxProtocol.js +29 -2
  23. package/dist/android/JadxProvider.js +171 -96
  24. package/dist/android/JadxRelease.js +5 -1
  25. package/dist/android/JadxSession.js +35 -14
  26. package/dist/apktool/ApktoolCommandCleanup.js +134 -0
  27. package/dist/apktool/ApktoolCommandOutput.js +22 -0
  28. package/dist/apktool/ApktoolConfiguration.js +162 -44
  29. package/dist/apktool/ApktoolDecodeOutput.js +29 -23
  30. package/dist/apktool/ApktoolDecodedInventory.js +52 -0
  31. package/dist/apktool/ApktoolProvider.js +254 -335
  32. package/dist/apktool/ApktoolStringTables.js +178 -0
  33. package/dist/apktool/ApktoolWorkspace.js +162 -0
  34. package/dist/application/AnalysisDocument.js +19 -4
  35. package/dist/application/AnalysisProvider.js +15 -1
  36. package/dist/application/AppBundleExecutable.js +11 -4
  37. package/dist/application/BinaryTargetResolver.js +9 -2
  38. package/dist/application/BrowserObservationService.js +54 -20
  39. package/dist/application/BrowserScenarioCaptureService.js +26 -6
  40. package/dist/application/CapabilityInventory.js +14 -8
  41. package/dist/application/ClaudeDesktopConfigLocation.js +5 -5
  42. package/dist/application/ClientConfigurationCleanup.js +73 -0
  43. package/dist/application/ClientConfigurationDocument.js +170 -128
  44. package/dist/application/ClientConfigurationPublication.js +167 -0
  45. package/dist/application/ClientRegistrationEnvironment.js +31 -1
  46. package/dist/application/ClientRegistrationIdentity.js +54 -39
  47. package/dist/application/ClientRegistrationStatus.js +123 -48
  48. package/dist/application/DirectAnalysis.js +15 -2
  49. package/dist/application/DirectAnalysisCleanup.js +5 -1
  50. package/dist/application/DirectAnalysisStatus.js +1 -1
  51. package/dist/application/Doctor.js +83 -9
  52. package/dist/application/DoctorDiagnostics.js +25 -4
  53. package/dist/application/DoctorProviderIds.js +7 -1
  54. package/dist/application/DshCordisPatch.js +1 -1
  55. package/dist/application/EnhancedTools.js +9 -21
  56. package/dist/application/HermesClientHome.js +20 -0
  57. package/dist/application/HermesConfigurationYaml.js +43 -3
  58. package/dist/application/HopperDownload.js +11 -3
  59. package/dist/application/HopperReleaseFeed.js +71 -0
  60. package/dist/application/InvestigationProviders.js +4 -3
  61. package/dist/application/JsonFiles.js +1 -1
  62. package/dist/application/LinuxHopper.js +96 -71
  63. package/dist/application/LinuxHopperPublisher.js +656 -0
  64. package/dist/application/MacHopper.js +182 -66
  65. package/dist/application/MipsElfMetadata.js +1 -1
  66. package/dist/application/MsixPackageStorage.js +13 -6
  67. package/dist/application/ProviderOperationExecution.js +13 -20
  68. package/dist/application/ReconstructionObligationCandidates.js +17 -2
  69. package/dist/application/ReconstructionObligationLedgerEvaluation.js +4 -0
  70. package/dist/application/ReconstructionObligationLedgerService.js +5 -3
  71. package/dist/application/ReconstructionObligationOriginalCases.js +8 -0
  72. package/dist/application/ReferenceSourceImportEntries.js +160 -18
  73. package/dist/application/ReferenceSourceImportPolicy.js +5 -3
  74. package/dist/application/ReferenceSourceVcsAdapter.js +3 -1
  75. package/dist/application/RegularFileRead.js +107 -88
  76. package/dist/application/Setup.js +23 -11
  77. package/dist/application/SetupClientConfiguration.js +155 -89
  78. package/dist/application/SetupClients.js +22 -13
  79. package/dist/application/SetupHost.js +90 -34
  80. package/dist/application/SetupInstallFailure.js +18 -3
  81. package/dist/application/SetupPlan.js +15 -5
  82. package/dist/application/SetupRecoveryBackup.js +40 -13
  83. package/dist/application/SetupRegistrationEnvironment.js +12 -0
  84. package/dist/application/SetupSkill.js +10 -30
  85. package/dist/application/SourceLimitations.js +35 -0
  86. package/dist/application/SupportedClients.js +4 -4
  87. package/dist/application/Uninstall.js +91 -36
  88. package/dist/application/UpdateCommandProgress.js +66 -0
  89. package/dist/application/UpdateMaintenance.js +7 -2
  90. package/dist/application/UpdateRuntime.js +60 -30
  91. package/dist/application/WebModuleTraceService.js +35 -22
  92. package/dist/application/WebNetworkCaptureService.js +8 -5
  93. package/dist/application/WebRuntimeService.js +41 -8
  94. package/dist/application/WebScriptExportService.js +6 -4
  95. package/dist/application/WebSourceLocationService.js +3 -4
  96. package/dist/application/WorkflowEvidence.js +11 -4
  97. package/dist/application/analysisView/AnalysisViewService.js +9 -52
  98. package/dist/application/android/AndroidAnalysisService.js +5 -4
  99. package/dist/application/android/AndroidSearchEvidenceSummary.js +6 -8
  100. package/dist/application/artifacts/ArtifactComparisonEvidence.js +32 -0
  101. package/dist/application/binary/AnalysisProviderEvaluation.js +14 -11
  102. package/dist/application/binary/AnalysisProviderRegistry.js +340 -50
  103. package/dist/application/binary/BinarySession.js +73 -34
  104. package/dist/application/binary/BinarySessionRecords.js +3 -0
  105. package/dist/application/binary/BinarySessionStatus.js +3 -4
  106. package/dist/application/binary/CompositeProvider.js +75 -30
  107. package/dist/application/binary/LazyAnalysisProvider.js +6 -68
  108. package/dist/application/binary/SessionProviderRouter.js +11 -2
  109. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +3 -4
  110. package/dist/application/binaryDiagnostics/PeResourcesService.js +22 -5
  111. package/dist/application/binaryDiagnostics/RecordedCrashService.js +3 -4
  112. package/dist/application/captures/PacketCaptureService.js +3 -2
  113. package/dist/application/closeOwnedWebResources.js +32 -2
  114. package/dist/application/electron/ElectronFuseService.js +8 -43
  115. package/dist/application/evm/EvmInterfaceEvidence.js +11 -0
  116. package/dist/application/evm/EvmInterfaceService.js +4 -15
  117. package/dist/application/firmware/FirmwareAnalysisService.js +4 -3
  118. package/dist/application/go/GoBinaryService.js +4 -5
  119. package/dist/application/investigation/EvidenceLedger.js +3 -4
  120. package/dist/application/javascript/ElectronBoundaryGraphWindows.js +14 -2
  121. package/dist/application/javascript/ElectronEvidence.js +1 -2
  122. package/dist/application/javascript/ElectronObservationService.js +41 -7
  123. package/dist/application/javascript/JavaScriptApplicationEvidence.js +6 -0
  124. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +35 -17
  125. package/dist/application/javascript/JavaScriptArtifactAnalysisTypes.js +30 -1
  126. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +3 -2
  127. package/dist/application/javascript/JavaScriptArtifactGraphEvidence.js +3 -3
  128. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +41 -11
  129. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +18 -8
  130. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +84 -24
  131. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +15 -3
  132. package/dist/application/javascript/JavaScriptModuleRelationships.js +1 -1
  133. package/dist/application/javascript/JavaScriptRuntimeObservationEvidence.js +1 -2
  134. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +33 -10
  135. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
  136. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +103 -24
  137. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +13 -4
  138. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +23 -3
  139. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +18 -5
  140. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +4 -6
  141. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +2 -3
  142. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  143. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +5 -8
  144. package/dist/application/native/NativeCallRoutes.js +40 -23
  145. package/dist/application/native/NativeUiActionTrace.js +8 -0
  146. package/dist/application/native/NativeValueTrace.js +8 -0
  147. package/dist/application/reverse/ReverseEngineeringService.js +2 -2
  148. package/dist/application/rust/RustBinaryService.js +6 -4
  149. package/dist/application/signals/SignalRecordingService.js +3 -2
  150. package/dist/application/wasm/WasmArtifactService.js +4 -5
  151. package/dist/artifacts/AnalysisCleanupLease.js +119 -0
  152. package/dist/artifacts/ArtifactFileOperation.js +150 -0
  153. package/dist/artifacts/ArtifactHash.js +2 -1
  154. package/dist/artifacts/ArtifactProvider.js +16 -5
  155. package/dist/artifacts/ArtifactReader.js +50 -4
  156. package/dist/artifacts/ArtifactResourceScope.js +80 -6
  157. package/dist/artifacts/AsarArtifactReader.js +12 -11
  158. package/dist/artifacts/AsarEntryStream.js +49 -17
  159. package/dist/artifacts/DirectoryArtifactReader.js +28 -7
  160. package/dist/artifacts/MachOSliceArtifactReader.js +70 -13
  161. package/dist/artifacts/NativeDmgArtifactReader.js +112 -13
  162. package/dist/artifacts/SafeOutputTree.js +5 -3
  163. package/dist/artifacts/SafeOutputTreeCreationFailure.js +1 -0
  164. package/dist/artifacts/SafeOutputTreeReadback.js +10 -16
  165. package/dist/artifacts/ZipArtifactReader.js +34 -14
  166. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +3 -1
  167. package/dist/artifacts/apple/DylibFileAccess.js +106 -0
  168. package/dist/artifacts/apple/DylibResolutionReader.js +64 -155
  169. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +52 -9
  170. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +25 -24
  171. package/dist/artifacts/apple/KeyedArchiveReader.js +20 -11
  172. package/dist/artifacts/apple/MachoLoadCommandReader.js +17 -2
  173. package/dist/artifacts/apple/PlistNumberLiterals.js +104 -116
  174. package/dist/artifacts/extraction/ArtifactExtraction.js +15 -12
  175. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +9 -11
  176. package/dist/artifacts/inventory/ArtifactInventory.js +2 -2
  177. package/dist/artifacts/inventory/classify.js +4 -2
  178. package/dist/artifacts/inventory/hashStableRootArtifact.js +14 -7
  179. package/dist/artifacts/inventory/scanCanonical.js +3 -4
  180. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +3 -1
  181. package/dist/artifacts/readArtifactFileChunks.js +9 -0
  182. package/dist/artifacts/readStableArtifact.js +12 -34
  183. package/dist/browser/BrowserScenarioPartialObservation.js +14 -48
  184. package/dist/browser/CdpBrowserProvider.js +81 -30
  185. package/dist/browser/CdpCaptureDocuments.js +99 -131
  186. package/dist/browser/CdpCaptureDomSvg.js +31 -60
  187. package/dist/browser/CdpCaptureValues.js +12 -0
  188. package/dist/browser/CdpConnection.js +133 -27
  189. package/dist/browser/CdpElectronInspection.js +60 -60
  190. package/dist/browser/CdpElectronProvider.js +56 -4
  191. package/dist/browser/CdpElectronScriptEvents.js +4 -1
  192. package/dist/browser/CdpElectronScripts.js +2 -5
  193. package/dist/browser/CdpElectronWorkers.js +13 -2
  194. package/dist/browser/CdpPageCapture.js +2 -1
  195. package/dist/browser/CdpPageCaptureScripts.js +14 -10
  196. package/dist/browser/CdpPageCaptureWorkers.js +45 -14
  197. package/dist/browser/CdpSafeMetadata.js +23 -19
  198. package/dist/browser/CdpSnapshotNodes.js +103 -0
  199. package/dist/browser/CdpSnapshotStrings.js +0 -6
  200. package/dist/browser/CdpTargetSession.js +52 -10
  201. package/dist/browser/CdpTargetSessionOwner.js +198 -0
  202. package/dist/browser/ElectronCaptureCleanup.js +82 -0
  203. package/dist/browser/ElectronProcessCleanup.js +91 -0
  204. package/dist/browser/PlaywrightBrowserScenarioProvider.js +71 -16
  205. package/dist/browser/PlaywrightElectronActiveActions.js +53 -5
  206. package/dist/browser/PlaywrightElectronActiveFuses.js +86 -0
  207. package/dist/browser/PlaywrightElectronActiveProjection.js +5 -0
  208. package/dist/browser/PlaywrightElectronActiveProvider.js +140 -151
  209. package/dist/browser/PlaywrightExecutionBoundary.js +4 -2
  210. package/dist/browser/PlaywrightScenarioBrowser.js +236 -90
  211. package/dist/browser/PlaywrightScenarioEvents.js +135 -48
  212. package/dist/browser/PlaywrightScenarioServiceWorkers.js +121 -34
  213. package/dist/browser/PlaywrightScenarioSession.js +95 -22
  214. package/dist/browser/PlaywrightScenarioStorage.js +15 -7
  215. package/dist/browser/StructuredFieldToken.js +53 -0
  216. package/dist/browser/WebArtifactCleanup.js +53 -0
  217. package/dist/browser/WebSourceMapFetcher.js +19 -10
  218. package/dist/browser/assets/WebArtifactReads.js +6 -2
  219. package/dist/browser/assets/WebSourceLocationArtifacts.js +12 -3
  220. package/dist/browser/execution/CdpRuntimeSession.js +36 -7
  221. package/dist/browser/execution/CdpWebRuntimeProvider.js +22 -4
  222. package/dist/browser/history/CaptureFailures.js +7 -2
  223. package/dist/browser/history/HarCapture.js +42 -11
  224. package/dist/browser/history/SazMetadata.js +10 -47
  225. package/dist/browser/modules/NativeModuleResolver.js +108 -58
  226. package/dist/browser/modules/WebModuleArtifacts.js +12 -3
  227. package/dist/browser/network/PlaywrightNetworkContent.js +40 -17
  228. package/dist/browser/network/PlaywrightScenarioNetwork.js +182 -73
  229. package/dist/captures/TsharkCaptureProvider.js +13 -6
  230. package/dist/catalogIdentity.js +19 -14
  231. package/dist/cli/adbCommands.js +18 -19
  232. package/dist/cli/androidCommands.js +2 -14
  233. package/dist/cli/apktoolCommands.js +4 -14
  234. package/dist/cli/binaryDiagnosticsCommands.js +5 -5
  235. package/dist/cli/browserAdvancedCommands.js +11 -4
  236. package/dist/cli/browserCommands.js +21 -12
  237. package/dist/cli/captureCommands.js +4 -4
  238. package/dist/cli/cliResultOutput.js +175 -89
  239. package/dist/cli/coreBinaryCommands.js +4 -3
  240. package/dist/cli/cutterCommands.js +51 -13
  241. package/dist/cli/electronCommands.js +34 -13
  242. package/dist/cli/evmCommands.js +6 -15
  243. package/dist/cli/finishAnalysisCommand.js +10 -2
  244. package/dist/cli/firmwareCommands.js +6 -14
  245. package/dist/cli/flutterCommands.js +2 -18
  246. package/dist/cli/fridaCommands.js +8 -0
  247. package/dist/cli/goCommands.js +2 -2
  248. package/dist/cli/javascriptRecoveryCommands.js +14 -26
  249. package/dist/cli/jebCommands.js +2 -14
  250. package/dist/cli/options.js +6 -0
  251. package/dist/cli/pcapCommands.js +2 -20
  252. package/dist/cli/rustCommands.js +6 -7
  253. package/dist/cli/setupCommands.js +4 -3
  254. package/dist/cli/signalCommands.js +4 -4
  255. package/dist/cli/sqliteCommands.js +17 -44
  256. package/dist/cli/wasmCommands.js +7 -18
  257. package/dist/cli/webModuleCommands.js +19 -34
  258. package/dist/cli/webNetworkCaptureCommands.js +3 -2
  259. package/dist/cli/webRuntimeCommands.js +15 -6
  260. package/dist/cli/webSourceLocationCommands.js +14 -33
  261. package/dist/cli-runtime/AnalysisCleanupLease-CWfTGYKd.js +103 -0
  262. package/dist/cli-runtime/{AnalysisProvider-D0Us2OTk.js → AnalysisProvider-BGrYaMVo.js} +14 -3
  263. package/dist/cli-runtime/{AnalysisSnapshotCache-BXS0wRd2.js → AnalysisSnapshotCache-BjRlXeUS.js} +14 -13
  264. package/dist/cli-runtime/ArtifactFileOperation-Dg4BcoEM.js +122 -0
  265. package/dist/cli-runtime/{ArtifactReader-BXkffc1D.js → ArtifactReader-DMwm42bk.js} +29 -6
  266. package/dist/cli-runtime/ArtifactResourceScope-CokZGcII.js +175 -0
  267. package/dist/cli-runtime/{AsarHeader-CnzOzYEH.js → AsarHeader-BxwU17DJ.js} +1 -1
  268. package/dist/cli-runtime/{BinarySessionStatus-DnMxMk-r.js → BinarySessionStatus-DRhjr7Vb.js} +4 -3
  269. package/dist/cli-runtime/{BinaryTargetResolver-CVIJ_s1A.js → BinaryTargetResolver-tuCTjBlQ.js} +38 -108
  270. package/dist/cli-runtime/{BoundedFileBytes-BU30odTm.js → BoundedFileBytes-DRtiQNAQ.js} +7 -3
  271. package/dist/cli-runtime/{CdpTargetSession-DGX5pV9w.js → CdpTargetSession-CQ08KHbh.js} +318 -43
  272. package/dist/cli-runtime/ClientConfigPath-Dn-V_GUf.js +255 -0
  273. package/dist/cli-runtime/{ClientConfigurationDocument-ffQ9X0Se.js → ClientConfigurationDocument-C9T8MNGc.js} +206 -142
  274. package/dist/cli-runtime/{ClientRegistrationStatus-DszCyPEU.js → ClientRegistrationStatus-PnD29RTX.js} +112 -36
  275. package/dist/cli-runtime/{CurrentEntrypointPath-D5FRNdkq.js → CurrentEntrypointPath-m7QCIVN0.js} +1 -1
  276. package/dist/cli-runtime/{DirectAnalysis-BgvAtpN3.js → DirectAnalysis-C5NyUryV.js} +76 -23
  277. package/dist/cli-runtime/DirectoryArtifactReader-CokAJ8vo.js +448 -0
  278. package/dist/cli-runtime/{Doctor-DIpf_I7N.js → Doctor-DrkWsav4.js} +105 -25
  279. package/dist/cli-runtime/{ElectronFileScope-dpHm2nrS.js → ElectronFileScope-AP7VoVr7.js} +204 -149
  280. package/dist/cli-runtime/ElectronFuseFailures-DsjXR7Xp.js +609 -0
  281. package/dist/cli-runtime/{ExecFileOutput-BEQs-lDD.js → ExecFileOutput-D6KLYTve.js} +11 -9
  282. package/dist/cli-runtime/{InterfaceBuilderDecodeBudget-D4omRUe4.js → InterfaceBuilderDecodeBudget-CW1IO3dG.js} +40 -21
  283. package/dist/cli-runtime/{InventoryProjectionEvidence-DIsI4DJ6.js → InventoryProjectionEvidence-DTH5QAqL.js} +3 -3
  284. package/dist/cli-runtime/{InvestigationProviders-DoQRIHii.js → InvestigationProviders-CFh4a64d.js} +3 -2
  285. package/dist/cli-runtime/{JavaScriptApplicationEvidenceGraph-D5aI_FSJ.js → JavaScriptApplicationEvidenceGraph-gOmPB2L6.js} +6 -6
  286. package/dist/cli-runtime/{JavaScriptApplicationWorkflowEvidence-Bz4-V0Ct.js → JavaScriptApplicationWorkflowEvidence-WZgtK_Ok.js} +2 -2
  287. package/dist/cli-runtime/JebMcpEndpoint-BEalGZh9.js +710 -0
  288. package/dist/cli-runtime/{JsonFiles-DQa1PRKy.js → JsonFiles-uvd6ZyQi.js} +10 -118
  289. package/dist/cli-runtime/KunaInstallation-P0j3x851.js +1781 -0
  290. package/dist/cli-runtime/MacHopperPaths-bGzqjF1Z.js +34 -0
  291. package/dist/cli-runtime/{MachoLoadCommandReader-C7e074Ze.js → MachoLoadCommandReader-CZm6N5vF.js} +12 -192
  292. package/dist/cli-runtime/{ManagedSnapshot-rqyBHcdL.js → ManagedSnapshot-CPE9C3OD.js} +406 -110
  293. package/dist/cli-runtime/OwnedCommandCleanup-BN_V6Erc.js +187 -0
  294. package/dist/cli-runtime/OwnedRegularFile-D1f5nUCx.js +256 -0
  295. package/dist/cli-runtime/OwnedStagedOutput-D31dOozz.js +126 -0
  296. package/dist/cli-runtime/{PrivateRuntimeRoot-DAy0PiBM.js → PrivateRuntimeRoot-Cd23u6jd.js} +39 -6
  297. package/dist/cli-runtime/ProcessOwnership-CtrNr6ee.js +545 -0
  298. package/dist/cli-runtime/{ProcessOwnership-DXC5-UWt.js → ProcessOwnershipObservation-C006iCtZ.js} +149 -607
  299. package/dist/cli-runtime/{ProviderDeadline-8m2pFRDc.js → ProviderDeadline-rSuH4Pm8.js} +27 -1
  300. package/dist/cli-runtime/ProviderOperationExecution-CmU-XrQr.js +38 -0
  301. package/dist/cli-runtime/{snapshotEnvironment-D_tWyOub.js → ProviderProcess-D87A7ctp.js} +117 -160
  302. package/dist/cli-runtime/RegularFileRead-mbgGYtxe.js +125 -0
  303. package/dist/cli-runtime/{SafeOutputTree-D6U15GXd.js → SafeOutputTree-i904hd_2.js} +21 -20
  304. package/dist/cli-runtime/{SetupHost-FkYWswsq.js → SetupHost-CMPmPraB.js} +365 -195
  305. package/dist/cli-runtime/SharedStartupAttempt-BxKyf3Uv.js +1424 -0
  306. package/dist/cli-runtime/StableFileHash-Ame_h3lY.js +61 -0
  307. package/dist/cli-runtime/{SupportedClients-DaX6Lt2d.js → SupportedClients-DMafjitv.js} +89 -72
  308. package/dist/cli-runtime/{Update-CbTC_eg1.js → Update-DAsASWlE.js} +1 -1
  309. package/dist/cli-runtime/{AbortablePromise-BVBemxbD.js → WindowsBatchCommand-Cx9kaVNf.js} +2 -28
  310. package/dist/cli-runtime/WindowsNativeLoader-BqyZO0ZD.js +142 -0
  311. package/dist/cli-runtime/{ZipArtifactReader-B8ZgNe4D.js → ZipArtifactReader-Jed69LEL.js} +20 -16
  312. package/dist/cli-runtime/{analysisErrorCleanup-Do6YeeoD.js → analysisErrorCleanup-COdAmDsb.js} +4 -3
  313. package/dist/cli-runtime/{appleArchiveFormat-tVoI2ykA.js → appleArchiveFormat-Bb3G5CCI.js} +13 -7
  314. package/dist/cli-runtime/{application__DirectAnalysisStatus-DpOejOf0.js → application__DirectAnalysisStatus-F74bu9oy.js} +10 -10
  315. package/dist/cli-runtime/{application__EnhancedTools-oFE2bOjs.js → application__EnhancedTools-Bg51b0Yp.js} +84 -51
  316. package/dist/cli-runtime/{application__FunctionAnalysisEvidence-B6osuhvW.js → application__FunctionAnalysisEvidence-DBWIaYCh.js} +3 -3
  317. package/dist/cli-runtime/{application__ReconstructionCoverageService-DN3wTFQj.js → application__ReconstructionCoverageService-AEPNpZqJ.js} +3 -3
  318. package/dist/cli-runtime/{application__ReconstructionObligationLedgerService-CKcTppX9.js → application__ReconstructionObligationLedgerService-Cl9cPEZf.js} +22 -9
  319. package/dist/cli-runtime/{application__Setup-XpMaRNjy.js → application__Setup-DwQzEewK.js} +30 -18
  320. package/dist/cli-runtime/{application__Uninstall-_23pU2yB.js → application__Uninstall-BOf9oyvQ.js} +78 -37
  321. package/dist/cli-runtime/{application__UpdateRuntime-DPvY8ohd.js → application__UpdateRuntime-CzWkRJHa.js} +119 -29
  322. package/dist/cli-runtime/{application__android__AndroidApplicationService-CFgIFPM4.js → application__android__AndroidApplicationService-shW_aKlj.js} +3 -3
  323. package/dist/cli-runtime/{application__apple__AppleApplicationService-Db6QCsun.js → application__apple__AppleApplicationService-DIv6d3wB.js} +3 -3
  324. package/dist/cli-runtime/{application__harmony__HarmonyApplicationService-CFjocHoK.js → application__harmony__HarmonyApplicationService-OIUFVQFV.js} +3 -3
  325. package/dist/cli-runtime/{application__javascript__ElectronActiveObservationService-CmVDUI_Z.js → application__javascript__ElectronActiveObservationService-wvCh72hK.js} +3 -3
  326. package/dist/cli-runtime/application__javascript__ElectronObservationService-SydXPCwM.js +88 -0
  327. package/dist/cli-runtime/{application__javascript__JavaScriptApplicationService-CCkp8KBh.js → application__javascript__JavaScriptApplicationService-o0uEsjEc.js} +1120 -316
  328. package/dist/cli-runtime/{application__javascript__JavaScriptApplicationWorkflowService-lPy0tzr3.js → application__javascript__JavaScriptApplicationWorkflowService-BAheG_71.js} +51 -44
  329. package/dist/cli-runtime/{application__javascript__JavaScriptRuntimeReconciliationService-DWleA8K9.js → application__javascript__JavaScriptRuntimeReconciliationService-Cnn4GP8q.js} +5 -5
  330. package/dist/cli-runtime/{application__javascript__JavaScriptSemanticTraceService-DkALH4rL.js → application__javascript__JavaScriptSemanticTraceService-CmvLfV1A.js} +6 -6
  331. package/dist/cli-runtime/{artifacts__ArtifactProvider-zXI0QjSL.js → artifacts__ArtifactProvider-wx2K0F2I.js} +377 -359
  332. package/dist/cli-runtime/{binary-BVOr2mgE.js → binary-CWVNJhAC.js} +8561 -3159
  333. package/dist/cli-runtime/{catalogIdentity-DLoXgfIR.js → catalogIdentity-DAEEsOdX.js} +260 -81
  334. package/dist/cli-runtime/cli.js +6177 -3556
  335. package/dist/cli-runtime/{cliOutput-BC1BdAcB.js → cliOutput-CgSuw782.js} +47 -6
  336. package/dist/cli-runtime/cliOutput.js +2 -2
  337. package/dist/cli-runtime/cliResultOutput-10sd6xGx.js +1453 -0
  338. package/dist/cli-runtime/cliResultOutput.js +2 -1
  339. package/dist/cli-runtime/{composition__browserScenario-DHXC1a8n.js → composition__browserScenario-BtPb1c1y.js} +843 -356
  340. package/dist/cli-runtime/{composition__electronObservation-GecK2EID.js → composition__electronObservation-Bk8R6DJo.js} +128 -69
  341. package/dist/cli-runtime/{composition__electronScenario-CEZnVrAL.js → composition__electronScenario-BVF0qStH.js} +398 -135
  342. package/dist/cli-runtime/{cutterToolContracts-TZH9EHr5.js → cutterToolContracts-BQtG_Nzo.js} +195 -62
  343. package/dist/cli-runtime/{doctorRuntime-BE5ZX8it.js → doctorRuntime-B__SIpm-.js} +241 -21
  344. package/dist/cli-runtime/{dotnet__ManagedStaticProvider-C8_yZCDc.js → dotnet__ManagedStaticProvider-DO5Yzcp4.js} +1 -1
  345. package/dist/cli-runtime/{errorSchemas-CTRmvMl3.js → errorSchemas-Ixz_q7qt.js} +58 -4
  346. package/dist/cli-runtime/homeDirectory-DC_DeJIg.js +18 -0
  347. package/dist/cli-runtime/{javascriptApplicationAnalysis-HgMzVMQw.js → javascriptApplicationAnalysis-Dk6yBV8g.js} +688 -668
  348. package/dist/cli-runtime/{javascriptExportReturnShapeProjection-Dg00g35t.js → javascriptExportReturnShapeProjection-CObOIiQ6.js} +3 -3
  349. package/dist/cli-runtime/{javascriptExportShapeComparisonSchemas-BYnoIqIk.js → javascriptExportShapeComparisonSchemas-DpwuBenh.js} +5 -3
  350. package/dist/cli-runtime/{javascriptRuntimeReconciliation-DNjDoL3S.js → javascriptRuntimeReconciliation-C6ZgWMys.js} +61 -59
  351. package/dist/cli-runtime/{javascriptRuntimeReconciliationSchemas-BWpGWNcI.js → javascriptRuntimeReconciliationSchemas-D6tZKUQs.js} +2 -2
  352. package/dist/cli-runtime/{javascriptSemanticTraceSchemas-BTCNcvbc.js → javascriptSemanticTraceSchemas-C7m0b6_w.js} +3 -3
  353. package/dist/cli-runtime/{lipo-DSWP6fv-.js → lipo-DPQ6qurH.js} +9 -11
  354. package/dist/cli-runtime/{logger-CQQCI4a2.js → logger-BuDJ9xxO.js} +2 -2
  355. package/dist/cli-runtime/{machoContainer-C8BIkkq3.js → machoContainer-Cy98bkFm.js} +180 -0
  356. package/dist/cli-runtime/{managedApplicationGraph-B08jb3jq.js → managedApplicationGraph-BazVqpJv.js} +16 -10
  357. package/dist/cli-runtime/{managedToolContracts-D60QmIYj.js → managedToolContracts-BuFkMBH5.js} +2 -2
  358. package/dist/cli-runtime/mcpDoctor.js +8 -6
  359. package/dist/cli-runtime/mcpStartupPolicy-imCbM3qo.js +28 -0
  360. package/dist/cli-runtime/{native__NativeMacOSProvider-YBTvUeJO.js → native__NativeMacOSProvider-DTcRhuGA.js} +1384 -757
  361. package/dist/cli-runtime/{officialToolContracts-CCFF0an9.js → officialToolContracts-CzzVLx8I.js} +74 -53
  362. package/dist/cli-runtime/peMachine-B9ggfSJJ.js +95 -0
  363. package/dist/cli-runtime/propertyListKeys-D5dSASEy.js +355 -0
  364. package/dist/cli-runtime/{providerCleanupError-Ceq8f0wK.js → providerCleanupError-BhsJyAhk.js} +3 -5
  365. package/dist/cli-runtime/readArtifactFileChunks-BbTL_PtB.js +129 -0
  366. package/dist/cli-runtime/{reconstructionObligationLedgerSchemas-Bao0xMr-.js → reconstructionObligationLedgerSchemas-Bi6sect1.js} +6329 -3651
  367. package/dist/cli-runtime/{scanCanonical-KP4T9jSl.js → scanCanonical-CcDFUr-w.js} +233 -363
  368. package/dist/cli-runtime/snapshotEnvironment-Yvx5qwsl.js +196 -0
  369. package/dist/cli-runtime/{toolContracts-D2FOG_Nb.js → toolContracts-CJzEyZ38.js} +126 -52
  370. package/dist/cli-runtime/{toolOutputSchemaGroups-DRiYs1je.js → toolOutputSchemaGroups-BqdSzySu.js} +768 -589
  371. package/dist/cli-runtime/{workflowInputError-n8Oo-bLA.js → workflowInputError-BP8z9Wxl.js} +2 -2
  372. package/dist/cli.js +10 -0
  373. package/dist/cliBrowserScenarioCommands.js +2 -3
  374. package/dist/cliLogging.js +22 -7
  375. package/dist/cliObservationOptions.js +3 -0
  376. package/dist/cliOutput.js +68 -3
  377. package/dist/composition/binary.js +15 -2
  378. package/dist/composition/directAnalysis.js +8 -0
  379. package/dist/composition/javascriptAnalysisWorkerProcess.js +4 -5
  380. package/dist/composition/jeb.js +32 -21
  381. package/dist/config/environment.js +36 -2
  382. package/dist/config/mcpInputSchemaProfile.js +1 -1
  383. package/dist/config/parseConfig.js +7 -3
  384. package/dist/contracts/adb/adbToolContracts.js +2 -2
  385. package/dist/contracts/analysisViewApiSurfaceExample.js +4 -4
  386. package/dist/contracts/analysisViewToolContracts.js +42 -1
  387. package/dist/contracts/android/androidToolContracts.js +1 -1
  388. package/dist/contracts/apktool/apktoolToolContracts.js +5 -1
  389. package/dist/contracts/artifactComparisonExample.js +18 -14
  390. package/dist/contracts/artifactToolContracts.js +2 -1
  391. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  392. package/dist/contracts/browserToolContracts.js +12 -1
  393. package/dist/contracts/compactInputSchema.js +13 -6
  394. package/dist/contracts/fridaToolContracts.js +5 -4
  395. package/dist/contracts/gdbToolContracts.js +2 -3
  396. package/dist/contracts/inputSchemaPresentation.js +173 -79
  397. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +1 -0
  398. package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +1 -0
  399. package/dist/contracts/jsonSchemaKeywords.js +29 -0
  400. package/dist/contracts/managed/managedWorkflowExamples.js +3 -0
  401. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  402. package/dist/contracts/mobileApplicationGraphExamples.js +15 -12
  403. package/dist/contracts/officialToolContracts.js +2 -2
  404. package/dist/contracts/rizinDebugToolContracts.js +3 -2
  405. package/dist/contracts/sessionToolContracts.js +3 -3
  406. package/dist/contracts/toolEffects.js +6 -2
  407. package/dist/contracts/toolOutputSchemaGroups.js +7 -4
  408. package/dist/contracts/toolOutputSchemaPrimitives.js +7 -0
  409. package/dist/contracts/toolSchemaMetadata.js +99 -27
  410. package/dist/cutter/CutterBridgeClient.js +206 -67
  411. package/dist/cutter/CutterBridgeService.js +52 -4
  412. package/dist/doctorRuntime.js +25 -4
  413. package/dist/domain/adb/adbDeviceAnalysis.js +19 -1
  414. package/dist/domain/analysisErrorBase.js +59 -2
  415. package/dist/domain/analysisErrorCleanup.js +3 -1
  416. package/dist/domain/analysisErrorCore.js +13 -0
  417. package/dist/domain/analysisErrorPresentation.js +23 -4
  418. package/dist/domain/analysisErrorProjection.js +44 -28
  419. package/dist/domain/analysisSearch.js +26 -0
  420. package/dist/domain/analysisSnapshot.js +11 -11
  421. package/dist/domain/analysisView/WebNetworkApiSurfaceAccumulator.js +4 -65
  422. package/dist/domain/analysisView/analysisView.js +25 -0
  423. package/dist/domain/analysisView/analysisViewDataAdmission.js +86 -0
  424. package/dist/domain/analysisView/artifactInventoryView.js +4 -18
  425. package/dist/domain/analysisView/javascriptApplicationCoverage.js +27 -0
  426. package/dist/domain/analysisView/javascriptApplicationView.js +100 -27
  427. package/dist/domain/analysisView/javascriptFactsView.js +92 -0
  428. package/dist/domain/analysisView/javascriptModuleReferences.js +37 -0
  429. package/dist/domain/analysisView/managedMemberView.js +6 -0
  430. package/dist/domain/android/androidApplication.js +8 -7
  431. package/dist/domain/apktool/apktoolResourceAnalysis.js +52 -2
  432. package/dist/domain/apple/appleApplication.js +41 -60
  433. package/dist/domain/apple/appleBundleAnatomy.js +56 -68
  434. package/dist/domain/apple/dylibResolution.js +5 -1
  435. package/dist/domain/apple/interfaceBuilderGraph.js +29 -8
  436. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +11 -4
  437. package/dist/domain/apple/jvmClassFile.js +226 -0
  438. package/dist/domain/apple/keyedArchive.js +39 -17
  439. package/dist/domain/apple/machoContainer.js +3 -0
  440. package/dist/domain/apple/plistNumbers.js +67 -5
  441. package/dist/domain/apple/plistValue.js +89 -18
  442. package/dist/domain/artifactComparison.js +7 -5
  443. package/dist/domain/artifactGraph.js +4 -12
  444. package/dist/domain/artifactInspection.js +6 -17
  445. package/dist/domain/artifactInventoryEvidence.js +68 -60
  446. package/dist/domain/binaryTarget.js +11 -26
  447. package/dist/domain/binaryTargetTypes.js +10 -0
  448. package/dist/domain/browserNetworkEvidence.js +20 -3
  449. package/dist/domain/browserObservation.js +5 -28
  450. package/dist/domain/browserObservationError.js +4 -4
  451. package/dist/domain/browserScenarioCapture.js +11 -2
  452. package/dist/domain/browserScenarioCaptureLimits.js +34 -0
  453. package/dist/domain/browserScenarioCaptureValues.js +50 -0
  454. package/dist/domain/browserScenarioDiffEvidence.js +1 -3
  455. package/dist/domain/browserScenarioValues.js +5 -1
  456. package/dist/domain/captures/packetCapture.js +2 -1
  457. package/dist/domain/dosMz.js +14 -5
  458. package/dist/domain/electron/electronFuseEvidence.js +42 -0
  459. package/dist/domain/elfFixedHeader.js +24 -0
  460. package/dist/domain/evidence.js +7 -6
  461. package/dist/domain/evidenceBundle.js +9 -2
  462. package/dist/domain/explicitSensitiveFailure.js +3 -0
  463. package/dist/domain/fileSnapshotObservation.js +25 -0
  464. package/dist/domain/fixedTupleSchema.js +9 -0
  465. package/dist/domain/functionCallCoverage.js +6 -6
  466. package/dist/domain/functionComparisonDimensions.js +38 -11
  467. package/dist/domain/functionComparisonNormalization.js +17 -9
  468. package/dist/domain/functionDossierEvidence.js +4 -3
  469. package/dist/domain/harmony/harmonyApplication.js +8 -8
  470. package/dist/domain/hopperErrors.js +4 -2
  471. package/dist/domain/hopperValues.js +27 -4
  472. package/dist/domain/javascript/electronActiveObservation.js +1 -0
  473. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +80 -20
  474. package/dist/domain/javascript/electronStaticAnalysisValues.js +0 -20
  475. package/dist/domain/javascript/electronStaticOptionObjects.js +45 -0
  476. package/dist/domain/javascript/electronWrappedCallPaths.js +70 -17
  477. package/dist/domain/javascript/javascriptAnalysisResourceControls.js +20 -4
  478. package/dist/domain/javascript/javascriptApplicationAnalysis.js +4 -0
  479. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +3 -0
  480. package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +3 -1
  481. package/dist/domain/javascript/javascriptApplicationVersionItems.js +49 -21
  482. package/dist/domain/javascript/javascriptAstFingerprint.js +41 -10
  483. package/dist/domain/javascript/javascriptAstValues.js +83 -5
  484. package/dist/domain/javascript/javascriptBundledRequireOrigin.js +23 -36
  485. package/dist/domain/javascript/javascriptCommonJsExportReceivers.js +231 -0
  486. package/dist/domain/javascript/javascriptElectronMemberWrites.js +14 -4
  487. package/dist/domain/javascript/javascriptFeatureSeed.js +1 -1
  488. package/dist/domain/javascript/javascriptGraphqlOperations.js +382 -0
  489. package/dist/domain/javascript/javascriptModuleDeclaration.js +20 -0
  490. package/dist/domain/javascript/javascriptNativeHandoff.js +7 -11
  491. package/dist/domain/javascript/javascriptRpcEndpoints.js +7 -171
  492. package/dist/domain/javascript/javascriptRuntimeLoadState.js +9 -4
  493. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +35 -12
  494. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +50 -45
  495. package/dist/domain/javascript/javascriptSemanticAmbientWrites.js +284 -24
  496. package/dist/domain/javascript/javascriptSemanticAnalysis.js +452 -182
  497. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +37 -20
  498. package/dist/domain/javascript/javascriptSemanticCallResolution.js +55 -27
  499. package/dist/domain/javascript/javascriptSemanticCalls.js +4 -4
  500. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +134 -50
  501. package/dist/domain/javascript/javascriptSemanticCoverage.js +5 -1
  502. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -13
  503. package/dist/domain/javascript/javascriptSemanticDataEffects.js +33 -10
  504. package/dist/domain/javascript/javascriptSemanticDerivedAnalysis.js +1 -1
  505. package/dist/domain/javascript/javascriptSemanticEvaluationOrder.js +126 -0
  506. package/dist/domain/javascript/javascriptSemanticExpressionShapes.js +111 -0
  507. package/dist/domain/javascript/javascriptSemanticGetterQueries.js +147 -0
  508. package/dist/domain/javascript/javascriptSemanticGetterResults.js +264 -0
  509. package/dist/domain/javascript/javascriptSemanticGraph.js +18 -1
  510. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +13 -0
  511. package/dist/domain/javascript/javascriptSemanticIterationSources.js +3 -2
  512. package/dist/domain/javascript/javascriptSemanticMapOperations.js +51 -0
  513. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +215 -81
  514. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +395 -118
  515. package/dist/domain/javascript/javascriptSemanticObjectReferences.js +241 -328
  516. package/dist/domain/javascript/javascriptSemanticObjects.js +33 -27
  517. package/dist/domain/javascript/javascriptSemanticOpaqueEffects.js +163 -0
  518. package/dist/domain/javascript/javascriptSemanticPrimitives.js +11 -1
  519. package/dist/domain/javascript/javascriptSemanticProjection.js +44 -67
  520. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +2 -1
  521. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +1 -1
  522. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +45 -7
  523. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +3 -19
  524. package/dist/domain/javascript/javascriptSemanticResources.js +27 -4
  525. package/dist/domain/javascript/javascriptSemanticReturnedReferences.js +78 -37
  526. package/dist/domain/javascript/javascriptSemanticReturns.js +2 -2
  527. package/dist/domain/javascript/javascriptSemanticState.js +191 -42
  528. package/dist/domain/javascript/javascriptSemanticValues.js +167 -41
  529. package/dist/domain/javascript/javascriptSourceParser.js +54 -9
  530. package/dist/domain/javascript/javascriptStaticAnalysis.js +24 -13
  531. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +276 -16
  532. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +33 -25
  533. package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -0
  534. package/dist/domain/javascript/javascriptStaticAnalysisTypes.js +1 -1
  535. package/dist/domain/javascript/javascriptSymbolicBindings.js +424 -142
  536. package/dist/domain/javascript/javascriptSymbolicControlFlow.js +4 -0
  537. package/dist/domain/javascript/javascriptSymbolicValues.js +12 -1
  538. package/dist/domain/javascript/sourceToBundleSignals.js +3 -0
  539. package/dist/domain/managed/managedApplicationGraphNodes.js +14 -9
  540. package/dist/domain/managed/managedArtifact.js +26 -0
  541. package/dist/domain/managed/managedMemberComparison.js +3 -0
  542. package/dist/domain/managed/managedMemberComparisonCoverage.js +14 -1
  543. package/dist/domain/managed/managedMemberComparisonItems.js +124 -52
  544. package/dist/domain/managed/managedMemberComparisonMatch.js +76 -72
  545. package/dist/domain/managed/managedMemberSignatureIdentity.js +40 -0
  546. package/dist/domain/managed/managedNativeVerificationMatch.js +5 -5
  547. package/dist/domain/managed/managedNativeVerificationSchemas.js +2 -2
  548. package/dist/domain/mobileApplicationGraphProjection.js +33 -18
  549. package/dist/domain/native/bytePattern.js +21 -0
  550. package/dist/domain/native/nativeAotPe.js +29 -2
  551. package/dist/domain/native/nativeAotSnapshotObservation.js +18 -0
  552. package/dist/domain/native/nativeCallPartialObservation.js +14 -12
  553. package/dist/domain/native/nativeLoadImage.js +13 -0
  554. package/dist/domain/native/objcSwiftMetadata.js +15 -8
  555. package/dist/domain/native/peResources.js +6 -2
  556. package/dist/domain/peMachine.js +2 -0
  557. package/dist/domain/process/processComparison.js +3 -3
  558. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  559. package/dist/domain/process/processTraceEvaluation.js +65 -24
  560. package/dist/domain/propertyListKeys.js +84 -69
  561. package/dist/domain/propertyListXml.js +149 -0
  562. package/dist/domain/providerAdapterError.js +2 -0
  563. package/dist/domain/providerCleanupError.js +2 -4
  564. package/dist/domain/rawBinary.js +11 -2
  565. package/dist/domain/reconstructionCoverage.js +35 -23
  566. package/dist/domain/reconstructionCoverageEvaluation.js +36 -36
  567. package/dist/domain/reconstructionCoverageEvidence.js +26 -0
  568. package/dist/domain/reconstructionVerification.js +40 -26
  569. package/dist/domain/referenceSourceImportParsing.js +4 -0
  570. package/dist/domain/referenceSourcePathIdentity.js +2 -0
  571. package/dist/domain/referenceSourceRequireBindings.js +40 -101
  572. package/dist/domain/relationshipCoverage.js +4 -5
  573. package/dist/domain/sqlite/sqliteDatabase.js +2 -1
  574. package/dist/domain/symbolAnalysis.js +9 -8
  575. package/dist/domain/webBundleAnalyzerInspection.js +65 -25
  576. package/dist/domain/webCaptureDiff.js +124 -41
  577. package/dist/domain/webInventory.js +28 -14
  578. package/dist/domain/webModuleTrace.js +22 -0
  579. package/dist/domain/webScriptExportError.js +2 -3
  580. package/dist/domain/xmlDocument.js +41 -0
  581. package/dist/domain/zipPackageFormat.js +0 -4
  582. package/dist/dotnet/ManagedArtifactInspector.js +2 -4
  583. package/dist/dotnet/ManagedDecodeBudget.js +21 -1
  584. package/dist/dotnet/ManagedMemberInspector.js +31 -6
  585. package/dist/dotnet/ManagedMemberInspectorCore.js +63 -12
  586. package/dist/dotnet/ManagedMemberRows.js +8 -8
  587. package/dist/dotnet/ManagedMetadataHeaps.js +0 -1
  588. package/dist/dotnet/ManagedMetadataLayout.js +17 -15
  589. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +20 -19
  590. package/dist/dotnet/ManagedNativeBoundaryInspector.js +7 -8
  591. package/dist/dotnet/ManagedPeReader.js +5 -0
  592. package/dist/dotnet/ManagedSnapshot.js +25 -20
  593. package/dist/dotnet/ManagedTypeNameDigests.js +177 -0
  594. package/dist/dotnet/ManagedTypeNames.js +6 -46
  595. package/dist/dotnet/ManagedTypeNesting.js +25 -0
  596. package/dist/dotnet/ManagedTypeReferences.js +94 -0
  597. package/dist/electron/ElectronFuseFailures.js +105 -0
  598. package/dist/electron/ElectronFusePath.js +4 -3
  599. package/dist/electron/ElectronFuseProvider.js +67 -92
  600. package/dist/electron/ElectronFuseReader.js +46 -30
  601. package/dist/evm/EvmoleFailures.js +1 -0
  602. package/dist/evm/EvmoleInterfaceProvider.js +13 -16
  603. package/dist/filesystem/OwnedRegularFile.js +116 -0
  604. package/dist/filesystem/OwnedStagedOutput.js +28 -11
  605. package/dist/filesystem/RegularFile.js +20 -8
  606. package/dist/filesystem/StableFileHash.js +56 -38
  607. package/dist/filesystem/callerPath.js +26 -0
  608. package/dist/filesystem/readFileHandleChunks.js +55 -5
  609. package/dist/filesystem/readStableFileBytes.js +85 -0
  610. package/dist/firmware/FirmwareCommand.js +13 -7
  611. package/dist/firmware/FirmwareFailures.js +56 -0
  612. package/dist/firmware/FirmwareFiles.js +128 -98
  613. package/dist/firmware/FirmwareProvider.js +120 -65
  614. package/dist/firmware/FirmwarePublication.js +26 -11
  615. package/dist/flutter/DartElf.js +27 -0
  616. package/dist/flutter/FlutterBuildProvider.js +44 -4
  617. package/dist/gdb/GdbSessionManager.js +202 -14
  618. package/dist/generatedPackageMetadata.js +1 -1
  619. package/dist/ghidra/GhidraAnalysisProfile.js +24 -10
  620. package/dist/ghidra/GhidraAnalysisSeeds.js +39 -55
  621. package/dist/ghidra/GhidraBridgeSources.js +12 -0
  622. package/dist/ghidra/GhidraClient.js +362 -148
  623. package/dist/ghidra/GhidraClientStartup.js +5 -3
  624. package/dist/ghidra/GhidraClientWire.js +5 -2
  625. package/dist/ghidra/GhidraDiagnostics.js +16 -5
  626. package/dist/ghidra/GhidraDoctor.js +45 -14
  627. package/dist/ghidra/GhidraDosSnapshot.js +83 -0
  628. package/dist/ghidra/GhidraExecutableHeader.js +54 -0
  629. package/dist/ghidra/GhidraFileArtifacts.js +93 -0
  630. package/dist/ghidra/GhidraFunctionValues.js +1 -0
  631. package/dist/ghidra/GhidraInstallation.js +143 -142
  632. package/dist/ghidra/GhidraInstallationPolicy.js +20 -79
  633. package/dist/ghidra/GhidraInstallationProperties.js +57 -0
  634. package/dist/ghidra/GhidraInventoryValues.js +22 -6
  635. package/dist/ghidra/GhidraJavaLaunch.js +11 -4
  636. package/dist/ghidra/GhidraJavaProbe.js +267 -0
  637. package/dist/ghidra/GhidraJavaProperties.js +9 -7
  638. package/dist/ghidra/GhidraLanguageCatalog.js +12 -7
  639. package/dist/ghidra/GhidraLauncher.js +128 -65
  640. package/dist/ghidra/GhidraLoadImageAttest.js +75 -78
  641. package/dist/ghidra/GhidraLoadImageValues.js +39 -29
  642. package/dist/ghidra/GhidraMipsProfile.js +13 -5
  643. package/dist/ghidra/GhidraNativeAotSnapshotOwner.js +221 -0
  644. package/dist/ghidra/GhidraPeProfile.js +88 -18
  645. package/dist/ghidra/GhidraProvider.js +219 -32
  646. package/dist/ghidra/GhidraProviderCapabilities.js +17 -4
  647. package/dist/ghidra/GhidraProviderClient.js +199 -239
  648. package/dist/ghidra/GhidraPspExtension.js +104 -34
  649. package/dist/ghidra/GhidraPspProfile.js +4 -1
  650. package/dist/ghidra/GhidraRawBinaryLanguage.js +13 -4
  651. package/dist/ghidra/GhidraReleasePolicy.js +93 -0
  652. package/dist/ghidra/GhidraRequestQueue.js +64 -40
  653. package/dist/ghidra/GhidraSessionError.js +152 -19
  654. package/dist/ghidra/GhidraSessionValues.js +13 -3
  655. package/dist/ghidra/GhidraSocketConnection.js +25 -11
  656. package/dist/ghidra/GhidraTargetSnapshot.js +67 -50
  657. package/dist/ghidra/GhidraTransport.js +86 -63
  658. package/dist/ghidra/extensions/GhidraExtensions.js +30 -45
  659. package/dist/go/GoBinaryProvider.js +89 -60
  660. package/dist/go/GoElfImage.js +3 -3
  661. package/dist/hopper/BridgeLauncher.js +43 -4
  662. package/dist/hopper/HopperAnalysisProfile.js +4 -2
  663. package/dist/hopper/HopperCleanup.js +14 -1
  664. package/dist/hopper/HopperClient.js +135 -63
  665. package/dist/hopper/HopperProvider.js +4 -7
  666. package/dist/hopper/HopperProviderCapabilities.js +2 -1
  667. package/dist/hopper/HopperRegexSearch.js +21 -60
  668. package/dist/ida/IdaBusyHealth.js +36 -2
  669. package/dist/ida/IdaMcpConnection.js +17 -11
  670. package/dist/ida/IdaNativeProtocol.js +1 -9
  671. package/dist/ida/IdaOperationRunner.js +8 -26
  672. package/dist/ida/IdaProtocolValues.js +2 -1
  673. package/dist/ida/IdaProvider.js +18 -2
  674. package/dist/ida/IdaSessionClient.js +54 -12
  675. package/dist/inspector/V8InspectorCaptureProjection.js +7 -0
  676. package/dist/inspector/V8InspectorProvider.js +2 -0
  677. package/dist/javascript/analysis/JavaScriptAnalysisTransfer.js +25 -4
  678. package/dist/javascript/analysis/JavaScriptAnalysisWorker.js +4 -3
  679. package/dist/javascript/analysis/JavaScriptAnalysisWorkerProtocol.js +3 -2
  680. package/dist/javascript/analysis/JavaScriptAnalysisWorkerSchemas.js +7 -1
  681. package/dist/javascript/analysis/JavaScriptAnalysisWorkerServer.js +1 -1
  682. package/dist/javascript/recovery/RecoveryFiles.js +57 -8
  683. package/dist/jeb/JebMcpConnection.js +129 -70
  684. package/dist/jeb/JebMcpConnectionOwner.js +116 -0
  685. package/dist/jeb/JebMcpDeadline.js +46 -0
  686. package/dist/jeb/JebProvider.js +77 -51
  687. package/dist/kuna/KunaAddress.js +11 -0
  688. package/dist/kuna/KunaCommand.js +217 -0
  689. package/dist/kuna/KunaConfiguration.js +90 -0
  690. package/dist/kuna/KunaDoctor.js +198 -0
  691. package/dist/kuna/KunaInstallation.js +137 -0
  692. package/dist/kuna/KunaJson.js +23 -0
  693. package/dist/kuna/KunaJsonStream.js +433 -0
  694. package/dist/kuna/KunaLimits.js +5 -0
  695. package/dist/kuna/KunaProjectCache.js +804 -0
  696. package/dist/kuna/KunaProjectExport.js +202 -0
  697. package/dist/kuna/KunaProjectFiles.js +191 -0
  698. package/dist/kuna/KunaProjectReader.js +115 -0
  699. package/dist/kuna/KunaProvider.js +217 -0
  700. package/dist/kuna/KunaProviderCapabilities.js +102 -0
  701. package/dist/kuna/KunaQueryErrors.js +12 -0
  702. package/dist/kuna/KunaQueryWork.js +113 -0
  703. package/dist/kuna/KunaReferenceFiles.js +258 -0
  704. package/dist/kuna/KunaReferenceQueries.js +211 -0
  705. package/dist/kuna/KunaRelease.js +10 -0
  706. package/dist/kuna/KunaRunSlots.js +56 -0
  707. package/dist/kuna/KunaSessionClient.js +1162 -0
  708. package/dist/kuna/KunaStringInventory.js +145 -0
  709. package/dist/kuna/KunaStringQueries.js +133 -0
  710. package/dist/kuna/KunaTargetCommands.js +205 -0
  711. package/dist/kuna/KunaUnavailable.js +11 -0
  712. package/dist/main/processShutdown.js +17 -0
  713. package/dist/main/transport.js +21 -1
  714. package/dist/main.js +2 -12
  715. package/dist/mcp/AnalysisProvider-BABWbLoM.js +38 -0
  716. package/dist/mcp/{AnalysisSnapshotFiles-BAbiJQOc.js → AnalysisSnapshotFiles-BXz0c37-.js} +39 -28
  717. package/dist/mcp/{ProcessOwnership-Bl_3ejLe.js → ArtifactFileOperation-64cQKI7B.js} +274 -72
  718. package/dist/mcp/{ArtifactProvider-DViCU_rn.js → ArtifactProvider-Dx6pmil1.js} +371 -354
  719. package/dist/mcp/ArtifactProviderMetadata-UCJr2oZW.js +167 -0
  720. package/dist/mcp/{ArtifactReader-OyM03Gjn.js → ArtifactReader-BrnwNaKY.js} +29 -6
  721. package/dist/mcp/ArtifactResourceScope-zi3Dkqzy.js +175 -0
  722. package/dist/mcp/{AsarHeader-WsPgoooH.js → AsarHeader-B_IbppTz.js} +1 -1
  723. package/dist/mcp/{BinarySessionStatus-B4P9gf-S.js → BinarySessionStatus-CZ9nnXMt.js} +5 -4
  724. package/dist/mcp/{BinaryTargetResolver-BMaE_0H1.js → BinaryTargetResolver-BUncASDP.js} +146 -215
  725. package/dist/mcp/BoundedFileBytes-DYt5q9G2.js +43 -0
  726. package/dist/mcp/{CdpCaptureDocuments-HDiF2O7k.js → CdpCaptureDocuments-Y2uFcBpl.js} +194 -145
  727. package/dist/mcp/{CdpCaptureValues-M-j6CIh1.js → CdpCaptureValues-tNIg-gQK.js} +12 -5
  728. package/dist/mcp/{CdpConnection-BpDfz4MK.js → CdpEndpoint-BrhMhpSi.js} +352 -281
  729. package/dist/mcp/{CdpOptionalCommand-BPjRD9Kz.js → CdpOptionalCommand-PZZhlqxv.js} +2 -2
  730. package/dist/mcp/CdpTargetSession-BmmDC3XO.js +290 -0
  731. package/dist/mcp/{DirectAnalysis-DrafbXke.js → DirectAnalysis-B9KuCHTG.js} +29 -21
  732. package/dist/mcp/{DirectAnalysisStatus-CjjeDLzW.js → DirectAnalysisStatus-BgzopkIt.js} +7 -7
  733. package/dist/mcp/{ElectronFileScope-BPG_YoyU.js → ElectronFileScope-FXtK0d6I.js} +1 -1
  734. package/dist/mcp/ElectronFuseFailures-uZ_wOV6T.js +610 -0
  735. package/dist/mcp/MachoLoadCommandReader-C2VGgHA3.js +330 -0
  736. package/dist/mcp/{ManagedStaticProvider-BthZbKyZ.js → ManagedStaticProvider-CZuoPme2.js} +429 -131
  737. package/dist/mcp/{NativeMacOSProvider-Bh79k8dI.js → NativeMacOSProvider-CMguKrvN.js} +1376 -748
  738. package/dist/mcp/{NativeMacOSProviderMetadata-N1lPOaY_.js → NativeMacOSProviderMetadata-B_RH4KXF.js} +97 -7
  739. package/dist/mcp/{ProviderDeadline-DskQ94YD.js → OwnedCommand-BW1jBSt9.js} +436 -127
  740. package/dist/mcp/ProcedureAddressResolution-H6Qwpb_Y.js +59 -0
  741. package/dist/mcp/{WorkflowEvidence-umWrB_wm.js → WorkflowEvidence-CO4C7ALz.js} +16 -9
  742. package/dist/mcp/analysisErrorCleanup-Q344SnTO.js +34 -0
  743. package/dist/mcp/analysisErrorCore-BIEP7tvF.js +509 -0
  744. package/dist/mcp/{analysisErrorProjection-BN0EPM-3.js → analysisErrorProjection-B8teQwwD.js} +80 -30
  745. package/dist/mcp/{artifactToolContracts-Di4qZlEt.js → artifactToolContracts-C9dRDo-D.js} +6 -4
  746. package/dist/mcp/{browserObservation-C0s4i8UI.js → browserObservation-DUraZs62.js} +272 -107
  747. package/dist/mcp/{browserObservationError-CyLugqX4.js → browserObservationError-C5okJ5el.js} +27 -4
  748. package/dist/mcp/{browserObservationSchemas-tgqjH7aA.js → browserObservationSchemas-DwGGxBpu.js} +3 -3
  749. package/dist/mcp/{browserScenario-CAQ8Fns9.js → browserScenario-BRUz7yN0.js} +844 -358
  750. package/dist/mcp/{browserScenarioCapture-CTNFN-FI.js → browserScenarioCapture-CiMAsMx8.js} +127 -11
  751. package/dist/mcp/{InterfaceBuilderDecodeBudget-5F2AkxJT.js → callerPath-CpPnMZyN.js} +91 -65
  752. package/dist/mcp/{electronActiveObservation-lDvQTMR0.js → electronActiveObservation-DV0Ffy9X.js} +1 -0
  753. package/dist/mcp/electronFuses-D5SS7XXw.js +367 -0
  754. package/dist/mcp/{electronObservation-i7LcILQ-.js → electronObservation-DsN-NqY1.js} +134 -75
  755. package/dist/mcp/{electronObservation-DFOFEood.js → electronObservation-wOYWwqgF.js} +3 -3
  756. package/dist/mcp/{electronScenario-nCzE6IfJ.js → electronScenario-CYrt2zBK.js} +395 -135
  757. package/dist/mcp/{emptyArraySchema-tL6Qymyd.js → emptyArraySchema-C0o2Sxwp.js} +2 -2
  758. package/dist/mcp/{enhancedInputs-DgdEnzHy.js → enhancedInputs-6CCgB3VB.js} +1 -1
  759. package/dist/mcp/{javascriptRuntimeObservation-61NhCf7H.js → javascriptRuntimeObservation-BVbhkO2-.js} +12 -9
  760. package/dist/mcp/{javascriptRuntimeObservation-PIUoLfX6.js → javascriptRuntimeObservation-Cu0Yedqq.js} +2 -2
  761. package/dist/mcp/{lipo-Bnkoq_6W.js → lipo-DSTgUqL1.js} +11 -118
  762. package/dist/mcp/{logger-BQY5ulYv.js → logger-BGdGHadX.js} +2 -2
  763. package/dist/mcp/machoContainer-CMSxUBlK.js +605 -0
  764. package/dist/mcp/{main-kBXHZ8S5.js → main-Cx-Z7m_n.js} +16788 -5902
  765. package/dist/mcp/main.js +1 -1
  766. package/dist/mcp/{managedToolContracts-CK--I_s7.js → managedToolContracts-CSlbKJP-.js} +3 -3
  767. package/dist/mcp/{nativeValueTrace-DR9UE62L.js → nativeValueTrace-BEZbDieM.js} +2630 -2468
  768. package/dist/mcp/{officialToolContracts-B67NJ2tC.js → officialToolContracts-CauCcSsc.js} +74 -55
  769. package/dist/mcp/peMachine-aP1iYnHq.js +95 -0
  770. package/dist/mcp/propertyListKeys-BfCo0k4w.js +356 -0
  771. package/dist/mcp/providerCleanupError-DIRHxzWo.js +125 -0
  772. package/dist/mcp/{providerOperationHealth-CTYa3iLf.js → providerOperationHealth-9DRSGM8N.js} +24 -1
  773. package/dist/mcp/{scanCanonical-CRXSpule.js → scanCanonical-CF3ATd1V.js} +269 -463
  774. package/dist/mcp/{serverIdentity-Cio4iFV3.js → serverIdentity-BK0Ejd_Y.js} +262 -83
  775. package/dist/mcp/{sourceMapEnvelope-C0uJlrOh.js → sourceMapEnvelope-DAaRUIGj.js} +4 -4
  776. package/dist/mcp/{toolContracts-BW05wpcr.js → toolContracts-BPoHQdlC.js} +541 -327
  777. package/dist/mcp/{toolOutputSchemaGroups-ColvNZ1r.js → toolOutputSchemaGroups-MJ_f-PMK.js} +2551 -2354
  778. package/dist/mcp/{webContentArtifact-Dzjc1z-R.js → webContentArtifact-DfGkgDcI.js} +2 -17
  779. package/dist/mcp/{webRuntime-K__NYzXm.js → webRuntime-ccyhkRru.js} +2 -2
  780. package/dist/mcp/{webSourceLocation-DbMAT2J9.js → webSourceLocation-DKIum0vJ.js} +6451 -4414
  781. package/dist/mcpDoctor.js +4 -2
  782. package/dist/mcpStartupPolicy.js +18 -3
  783. package/dist/native/AppleDispatchMetadata.js +76 -27
  784. package/dist/native/AppleMachoFixups.js +20 -10
  785. package/dist/native/AppleObjcCategories.js +12 -1
  786. package/dist/native/AppleObjcDispatchFacets.js +21 -12
  787. package/dist/native/AppleObjcProperties.js +61 -17
  788. package/dist/native/AppleObjcProtocols.js +25 -7
  789. package/dist/native/AppleSwiftVtables.js +2 -0
  790. package/dist/native/CommandRunner.js +13 -9
  791. package/dist/native/LldbCallTracer.js +232 -178
  792. package/dist/native/LldbReadbackFiles.js +70 -0
  793. package/dist/native/LldbRetainedObservations.js +28 -56
  794. package/dist/native/NativeCallObservation.js +53 -52
  795. package/dist/native/NativeCallTarget.js +95 -0
  796. package/dist/native/NativeMacOSProvider.js +240 -171
  797. package/dist/native/NativeMachoInspection.js +21 -7
  798. package/dist/native/NativePlistSource.js +179 -0
  799. package/dist/native/NativeUiCleanupError.js +30 -0
  800. package/dist/native/NativeUiHelperRuntime.js +48 -35
  801. package/dist/native/NativeUiObservation.js +67 -45
  802. package/dist/native/SignatureTargetBinding.js +72 -53
  803. package/dist/native/parsers/demangle.js +16 -12
  804. package/dist/native/parsers/machoUuid.js +4 -4
  805. package/dist/native/parsers/otool.js +57 -17
  806. package/dist/native/parsers/plist.js +40 -25
  807. package/dist/native/pe/PeResourceLayout.js +22 -7
  808. package/dist/native/pe/PeResourceParser.js +10 -9
  809. package/dist/native/pe/PeResourcesProvider.js +63 -16
  810. package/dist/native/pwndbg/CoreFileMappingAuthority.js +51 -0
  811. package/dist/native/pwndbg/PwndbgCoreContext.js +26 -15
  812. package/dist/native/pwntools/PwntoolsDecoder.js +116 -53
  813. package/dist/native/pwntools/PwntoolsFailures.js +17 -3
  814. package/dist/native/pwntools/PwntoolsRecordedCrashProvider.js +11 -1
  815. package/dist/objdump/ObjdumpCommand.js +5 -2
  816. package/dist/pcap/PcapOutput.js +38 -2
  817. package/dist/pcap/PcapProvider.js +45 -15
  818. package/dist/pcap/PcapSnapshot.js +24 -4
  819. package/dist/process/ArtifactAnalysisResources.js +145 -52
  820. package/dist/process/BoundedFileBytes.js +8 -3
  821. package/dist/process/CurrentEntrypointPath.js +3 -1
  822. package/dist/process/DarwinProcessRunTokenReader.js +174 -63
  823. package/dist/process/DetachedPgpSignature.js +57 -0
  824. package/dist/process/ExecFileOutput.js +14 -11
  825. package/dist/{hopper/HopperTargetLease.js → process/HopperLease.js} +10 -0
  826. package/dist/process/LinuxResourceLimits.js +4 -24
  827. package/dist/process/OwnedCommand.js +109 -14
  828. package/dist/process/ProviderProcess.js +129 -10
  829. package/dist/process/RegexMatcher.js +96 -0
  830. package/dist/process/SharedStartupAttempt.js +59 -0
  831. package/dist/process/WindowsAuthority.js +1 -1
  832. package/dist/process/capture/FilesystemSnapshot.js +3 -2
  833. package/dist/process/capture/ProcessCaptureError.js +55 -17
  834. package/dist/process/capture/ProcessCaptureLifecycle.js +17 -20
  835. package/dist/process/capture/ProcessCaptureProgress.js +5 -3
  836. package/dist/process/capture/ProcessHarness.js +17 -3
  837. package/dist/process/snapshotEnvironment.js +8 -8
  838. package/dist/{application/binary → providers}/AnalysisClientCleanup.js +3 -3
  839. package/dist/providers/AnalysisClientCreation.js +193 -0
  840. package/dist/providers/AnalysisClientFailure.js +191 -0
  841. package/dist/providers/DeferredAnalysisClient.js +48 -0
  842. package/dist/providers/OwnedCommandCleanup.js +65 -0
  843. package/dist/providers/ProviderInspectionScope.js +10 -0
  844. package/dist/recordedCatalogDigests.js +2 -0
  845. package/dist/reference/ReferenceSourceReader.js +64 -0
  846. package/dist/reference/ReferenceSourceReaderEntries.js +12 -3
  847. package/dist/reference/ReferenceSourceReaderFile.js +2 -1
  848. package/dist/rizin/RizinCommand.js +2 -2
  849. package/dist/rizin/RizinDebugSessionManager.js +249 -210
  850. package/dist/rust/RustBinaryProvider.js +55 -23
  851. package/dist/server/EvidenceMcpServer.js +2 -2
  852. package/dist/server/contractToolHandler.js +17 -11
  853. package/dist/server/createServer.js +27 -8
  854. package/dist/server/promptCompletion.js +24 -22
  855. package/dist/server/registerArtifactComparisonTool.js +13 -2
  856. package/dist/server/registerBrowserScenarioTool.js +7 -5
  857. package/dist/server/registerBrowserTools.js +2 -4
  858. package/dist/server/registerCutterTools.js +2 -3
  859. package/dist/server/registerElectronTools.js +2 -13
  860. package/dist/server/registerFridaTools.js +8 -12
  861. package/dist/server/registerInvestigationTools.js +20 -20
  862. package/dist/server/registerJavaScriptRuntimeObservationTools.js +2 -4
  863. package/dist/server/registerManagedWorkflowTools/evidence.js +14 -7
  864. package/dist/server/registerProcessComparisonTool.js +3 -0
  865. package/dist/server/registerSessionStatusTool.js +13 -6
  866. package/dist/server/registerSessionTools.js +16 -29
  867. package/dist/server/runDerivedOperation.js +2 -0
  868. package/dist/signals/SigrokRecordingProvider.js +13 -6
  869. package/dist/sqlite/SqliteDatabaseFailures.js +25 -12
  870. package/dist/sqlite/SqliteDatabaseInspection.js +27 -12
  871. package/dist/sqlite/SqliteDatabaseSnapshot.js +58 -32
  872. package/dist/sqlite/SqliteDatabaseWorkerExecution.js +18 -3
  873. package/dist/wasm/WabtArtifactProvider.js +64 -42
  874. package/dist/wasm/WabtFailures.js +19 -1
  875. package/dist/wasm/WabtRuntime.js +58 -0
  876. package/dist/wasm/WasmGlueAdapter.js +20 -7
  877. package/dist/windows/WindowsNativeLoader.js +16 -2
  878. package/dist/windows/WindowsPrivateRuntime.js +44 -1
  879. package/licenses/npm-dependencies.txt +146 -1
  880. package/licenses/npm-runtime-notices.txt +175 -1
  881. package/native/windows/README.md +44 -7
  882. package/native/windows/build/manifest.json +2 -2
  883. package/native/windows/build/rea-windows-x64.node +0 -0
  884. package/package.json +11 -3
  885. package/scripts/electron-active-hook-boundaries.cjs +15 -2
  886. package/scripts/electron-active-hook.cjs +408 -46
  887. package/scripts/hopper-demo-x11.py +12 -10
  888. package/scripts/rea.mjs +62 -15
  889. package/skills/reverse-engineer-anything/SKILL.md +21 -7
  890. package/skills/reverse-engineer-anything/references/android-applications.md +3 -1
  891. package/skills/reverse-engineer-anything/references/javascript-applications.md +44 -1
  892. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +30 -10
  893. package/dist/cli-runtime/ArtifactResourceScope-DQWTcUwE.js +0 -114
  894. package/dist/cli-runtime/ClientConfigPath-c6jr6INc.js +0 -36
  895. package/dist/cli-runtime/IdaConfiguration-CtGP7EKo.js +0 -1094
  896. package/dist/cli-runtime/JebMcpEndpoint-DUytrn5G.js +0 -428
  897. package/dist/cli-runtime/MacHopperPaths-CwL5lYPX.js +0 -434
  898. package/dist/cli-runtime/OwnedCommand-Cj9GhmPR.js +0 -112
  899. package/dist/cli-runtime/RegularFile-B_6KPCNQ.js +0 -139
  900. package/dist/cli-runtime/RegularFileRead-DVlC5faM.js +0 -125
  901. package/dist/cli-runtime/analysisErrorPresentation-DGt7TdsH.js +0 -497
  902. package/dist/cli-runtime/application__javascript__ElectronObservationService-DEsR8KDN.js +0 -63
  903. package/dist/cli-runtime/artifactOperationError-B7n03FbD.js +0 -27
  904. package/dist/cli-runtime/browserObservationError-Dx6xRTjb.js +0 -40
  905. package/dist/cli-runtime/cliResultOutput-DsRMI8CJ.js +0 -780
  906. package/dist/cli-runtime/mcpStartupPolicy-CVVSOmRc.js +0 -21
  907. package/dist/cli-runtime/propertyListKeys-G8e74YWb.js +0 -248
  908. package/dist/cli-runtime/providerAdapterError-DAjhICdr.js +0 -25
  909. package/dist/cli-runtime/readFileHandleChunks-dp60iZ6v.js +0 -38
  910. package/dist/hopper/HopperRegexWorker.js +0 -27
  911. package/dist/mcp/ArtifactProviderMetadata-b7pOK5_t.js +0 -76
  912. package/dist/mcp/ArtifactResourceScope-P3tq5z8Z.js +0 -162
  913. package/dist/mcp/BoundedFileBytes-DuczXiQZ.js +0 -68
  914. package/dist/mcp/CdpTargetSession-BsPoKhEU.js +0 -86
  915. package/dist/mcp/ProcedureAddressResolution-CQpuwm1h.js +0 -19
  916. package/dist/mcp/analysisErrorCore-DXRTvF_m.js +0 -235
  917. package/dist/mcp/artifactOperationError-CkHMMaf7.js +0 -27
  918. package/dist/mcp/digests-BFoWUT_-.js +0 -223
  919. package/dist/mcp/propertyListKeys-DD25WsjI.js +0 -553
  920. package/dist/mcp/providerAdapterError-sDxToNal.js +0 -25
  921. package/dist/mcp/unicodeCodePointOrder-BezCbTpg.js +0 -26
@@ -1,22 +1,33 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { constants as fsConstants } from "node:fs";
3
- import { access, copyFile, lstat, mkdtemp, mkdir, rmdir, rm, stat, writeFile, } from "node:fs/promises";
3
+ import { access, copyFile, lstat, link, mkdtemp, mkdir, open, rmdir, rm, stat, writeFile, } from "node:fs/promises";
4
4
  import { basename, dirname, extname, join, resolve } from "node:path";
5
5
  import { providerConfigurationRefusal } from "../domain/providerConfigurationRefusal.js";
6
6
  import { createAnalysisExecution, } from "../application/AnalysisProvider.js";
7
+ import { ArtifactReaderFailure } from "../artifacts/ArtifactReader.js";
8
+ import { ArtifactResourceRetryFailure, ArtifactResourceScope, } from "../artifacts/ArtifactResourceScope.js";
9
+ import { AnalysisCleanupLease, AnalysisCleanupLeaseGroup, } from "../artifacts/AnalysisCleanupLease.js";
7
10
  import { adbResultSchemas } from "../domain/adb/adbDeviceAnalysis.js";
8
- import { AnalysisArtifactChangedError, AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, AnalysisProtocolError, AnalysisResourceConstraintError, AnalysisTimeoutError, AnalysisUnsupportedTargetError, } from "../domain/analysisErrorCore.js";
11
+ import { AnalysisCapabilityUnavailableError, AnalysisArtifactChangedError, AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, AnalysisProtocolError, AnalysisResourceConstraintError, AnalysisTimeoutError, AnalysisUnsupportedTargetError, } from "../domain/analysisErrorCore.js";
9
12
  import { AnalysisError } from "../domain/analysisErrorBase.js";
10
13
  import { analysisErrorWithCleanupFailure } from "../domain/analysisErrorCleanup.js";
11
14
  import { err, ok } from "../domain/result.js";
12
- import { hashStableFile } from "../filesystem/StableFileHash.js";
15
+ import { jsonObjectSchema } from "../domain/jsonValue.js";
16
+ import { hashStableFile, stableFileHashCause, } from "../filesystem/StableFileHash.js";
17
+ import { regularFileCancellation, RegularFileCancelled, RegularFileCleanupFailure, } from "../filesystem/OwnedRegularFile.js";
18
+ import { RegularFileOperationCancelled } from "../filesystem/RegularFile.js";
19
+ import { OwnedFileHandle } from "../filesystem/OwnedFileHandle.js";
20
+ import { createEvidence } from "../domain/evidence.js";
21
+ import { PrivateRuntimeRoot, } from "../process/PrivateRuntimeRoot.js";
13
22
  import { ProviderCleanupError } from "../domain/providerCleanupError.js";
14
- import { execFileBytes, execFileOutputFailure, } from "../process/ExecFileOutput.js";
23
+ import { PrivateRuntimeRootUnavailableError } from "../process/PrivateRuntimeRootUnavailableError.js";
24
+ import { adbArguments, runAdb, runAdbCapture, packageChangeRefusal, probeAdbPathExistence, } from "./AdbCommand.js";
15
25
  import { AdbConfigurationFailure, adbConfigurationAvailability, inspectAdbClient, resolveAdbBinary, } from "./AdbConfiguration.js";
16
26
  import { displayDevicePath, parseAdbDevicesOutput, parseGetpropOutput, parsePackageListOutput, parsePmPathOutput, } from "./AdbDeviceOutput.js";
17
27
  import { adbHostFileName } from "./AdbHostFileName.js";
28
+ import { AdbInputSnapshotFailure, snapshotAdbInput, } from "./AdbInputSnapshot.js";
18
29
  import { ADB_DIRECTORY_BATCH_SCRIPT, parseAdbDirectoryListing, } from "./AdbDirectoryListing.js";
19
- import { parseAmStartOutput, parseBugreportCopiedPath, parseDumpsysPackageOutput, parseFeatureListOutput, packageChangeFailureReason, parsePackageChangeOutput, parseProcessListOutput, parsePngDimensions, parseResolveActivityOutput, parseServiceListOutput, parseSettingsGetOutput, parseWindowFocusOutput, parseWmDensityOutput, parseWmSizeOutput, } from "./AdbShellOutput.js";
30
+ import { parseAmStartOutput, parseBugreportCopiedPath, parseDumpsysPackageOutput, parseFeatureListOutput, parsePackageChangeOutput, parseProcessListOutput, parsePngDimensions, parseResolveActivityOutput, parseServiceListOutput, parseSettingsGetOutput, parseWindowFocusOutput, parseWmDensityOutput, parseWmSizeOutput, } from "./AdbShellOutput.js";
20
31
  /** Stable identity for the ADB device-acquisition provider. */
21
32
  export const ADB_PROVIDER_IDENTITY = {
22
33
  id: "adb",
@@ -46,98 +57,163 @@ const SCREEN_TIMEOUT_MS = 60_000;
46
57
  const SCREEN_MAX_OUTPUT_BYTES = 32 * 1024 * 1024;
47
58
  const BUGREPORT_TIMEOUT_MS = 600_000;
48
59
  const BUGREPORT_MAX_OUTPUT_BYTES = 1024 * 1024;
49
- const STDERR_EXCERPT_BYTES = 512;
50
60
  const UNPARSED_LINES_REPORTED = 10;
51
- const hashAdbFile = async (path, operation, signal) => {
61
+ /** Carry the exact digest owner through caller-specific partial-result mapping. */
62
+ class AdbDigestFailure extends Error {
63
+ fileFailure;
64
+ bindCleanupError;
65
+ constructor(fileFailure, bindCleanupError) {
66
+ super(fileFailure.message, { cause: fileFailure });
67
+ this.fileFailure = fileFailure;
68
+ this.bindCleanupError = bindCleanupError;
69
+ }
70
+ }
71
+ const hashAdbFile = async (path, operation, signal, resources) => {
72
+ let closeLease;
52
73
  try {
53
- return await hashStableFile(path, signal);
74
+ return await hashStableFile(path, {
75
+ ...(signal === undefined ? {} : { signal }),
76
+ retainFailedClose: (handle) => {
77
+ closeLease = new AnalysisCleanupLease(() => handle.close(), [path]);
78
+ resources.retain({
79
+ kind: "lease",
80
+ resource: `${path} (ADB digest handle)`,
81
+ lease: closeLease,
82
+ });
83
+ },
84
+ });
54
85
  }
55
86
  catch (cause) {
56
- if (signal?.aborted === true)
57
- throw new AnalysisCancelledError(operation, { cause });
87
+ if (cause instanceof RegularFileCleanupFailure ||
88
+ cause instanceof RegularFileCancelled)
89
+ throw new AdbDigestFailure(cause, (error) => {
90
+ closeLease?.bindCleanupError(error);
91
+ });
92
+ if (cause instanceof RegularFileOperationCancelled)
93
+ throw new AnalysisCancelledError(operation, { cause: cause.reason });
58
94
  throw cause;
59
95
  }
60
96
  };
61
- /** adb joins shell operands into a remote POSIX command; quote at that boundary. */
62
- const quoteShellOperand = (value) => /^[A-Za-z0-9_./:=@+,-]+$/u.test(value)
63
- ? value
64
- : "'" + value.replaceAll("'", "'\\''") + "'";
65
- const adbArguments = (serial, arguments_) => {
66
- const operands = arguments_[0] === "shell"
67
- ? ["shell", ...arguments_.slice(1).map(quoteShellOperand)]
68
- : [...arguments_];
69
- return serial === undefined ? operands : ["-s", serial, ...operands];
97
+ const adbDigestError = (cause, operation, partialObservation) => {
98
+ if (!(cause instanceof AdbDigestFailure))
99
+ return undefined;
100
+ const digestFailure = cause.fileFailure;
101
+ const digestOutcome = digestFailure.outcome;
102
+ if (digestOutcome.kind === "completed")
103
+ partialObservation = partialObservationWithDigest(partialObservation, digestOutcome.value);
104
+ if (digestFailure instanceof RegularFileCancelled)
105
+ return new AnalysisCancelledError(operation, {
106
+ cause: digestFailure.reason,
107
+ partialObservation,
108
+ });
109
+ const resource = `${digestFailure.path} (ADB digest handle)`;
110
+ const reason = digestFailure.cleanupCause instanceof Error
111
+ ? digestFailure.cleanupCause.message
112
+ : String(digestFailure.cleanupCause);
113
+ const cleanup = new ProviderCleanupError(ADB_PROVIDER_IDENTITY.id, [resource], { reason }, {
114
+ operation,
115
+ cause: digestFailure,
116
+ partialObservation,
117
+ });
118
+ const primaryCause = digestOutcome.kind === "failed" ? digestOutcome.cause : undefined;
119
+ const cancellation = regularFileCancellation(digestFailure);
120
+ if (cancellation !== undefined) {
121
+ const error = new AnalysisCancelledError(operation, {
122
+ cause: cancellation.reason,
123
+ cleanup: { reason, resources: [resource] },
124
+ partialObservation,
125
+ });
126
+ cause.bindCleanupError(error);
127
+ return error;
128
+ }
129
+ const primary = primaryCause instanceof AnalysisError
130
+ ? primaryCause
131
+ : new AnalysisOutputError(operation, `The pulled file could not be fully digested or its handle could not be closed: ${digestFailure.path}`, {
132
+ cause: digestOutcome.kind === "failed" ? primaryCause : digestFailure,
133
+ partialObservation,
134
+ });
135
+ primary.retainPartialObservation(partialObservation);
136
+ const error = analysisErrorWithCleanupFailure(primary, cleanup, operation);
137
+ cause.bindCleanupError(error);
138
+ return error;
70
139
  };
71
- /** Run one bounded adb invocation and keep its exact failure shape. */
72
- const runAdbCapture = async (operation, targetPath, binary, arguments_, limits, signal) => {
73
- if (signal?.aborted === true)
74
- return err(new AnalysisCancelledError(operation));
140
+ const partialObservationWithDigest = (observation, digest) => {
141
+ if (observation.operation === "pull_adb_file") {
142
+ const { result } = observation;
143
+ if (!("digest_status" in result))
144
+ return observation;
145
+ return {
146
+ ...observation,
147
+ result: {
148
+ client: result.client,
149
+ serial: result.serial,
150
+ local_path: result.local_path,
151
+ device_path: result.device_path,
152
+ bytes: digest.bytes,
153
+ sha256: digest.sha256,
154
+ },
155
+ };
156
+ }
157
+ if (observation.operation === "collect_adb_bugreport") {
158
+ const { result } = observation;
159
+ if (!("digest_status" in result))
160
+ return observation;
161
+ return {
162
+ ...observation,
163
+ result: {
164
+ client: result.client,
165
+ serial: result.serial,
166
+ local_path: result.local_path,
167
+ adb_reported_path: result.adb_reported_path,
168
+ bytes: digest.bytes,
169
+ sha256: digest.sha256,
170
+ },
171
+ };
172
+ }
173
+ return observation;
174
+ };
175
+ const syncStagedAdbFile = async (path, resources, operation) => {
176
+ let owner;
177
+ let primary;
75
178
  try {
76
- return ok(await execFileBytes(binary, arguments_, {
77
- timeout: limits.timeoutMs,
78
- maxBuffer: limits.maxOutputBytes,
79
- stopSignal: "SIGTERM",
80
- ...(signal === undefined ? {} : { signal }),
81
- }));
179
+ owner = new OwnedFileHandle(await open(path, "r+"));
180
+ await owner.handle.sync();
82
181
  }
83
182
  catch (cause) {
84
- if (signal?.aborted || execFileOutputFailure(cause)?.code === "ABORT_ERR")
85
- return err(new AnalysisCancelledError(operation, { cause }));
86
- const failure = execFileOutputFailure(cause);
87
- if (failure === undefined)
88
- return err(new AnalysisProtocolError(`adb failed for ${operation}`, { cause }));
89
- if (failure.outputTruncated)
90
- return err(new AnalysisResourceConstraintError(operation, "memory", `adb output exceeded the ${String(limits.maxOutputBytes)}-byte capture budget`, { max_output_bytes: limits.maxOutputBytes }, { cause }));
91
- const excerpt = failure.stderr.trim().slice(0, STDERR_EXCERPT_BYTES);
92
- if (/unauthorized/iu.test(excerpt))
93
- return err(new AnalysisUnsupportedTargetError(operation, targetPath, excerpt, {
94
- cause,
95
- }));
96
- if (/device[^\n]*not found|device offline|still authorizing|more than one device/iu.test(excerpt))
97
- return err(new AnalysisUnsupportedTargetError(operation, targetPath, excerpt, {
98
- cause,
99
- }));
100
- if (/No such file or directory|Permission denied|read: Permission denied/iu.test(excerpt))
101
- return err(new AnalysisUnsupportedTargetError(operation, targetPath, excerpt, {
102
- cause,
103
- }));
104
- if (failure.killed)
105
- return err(new AnalysisTimeoutError(operation, limits.timeoutMs, { cause }));
106
- return err(new AnalysisProtocolError(excerpt === ""
107
- ? `adb exited with code ${String(failure.code)} for ${operation}`
108
- : excerpt, { cause }));
183
+ primary = cause;
109
184
  }
110
- };
111
- /** Decode textual adb protocols after the shared byte capture and error boundary. */
112
- const runAdb = async (...arguments_) => {
113
- const captured = await runAdbCapture(...arguments_);
114
- if (!captured.ok)
115
- return captured;
116
- return ok({
117
- stdout: captured.value.stdout.toString("utf8"),
118
- stderr: captured.value.stderr.toString("utf8"),
119
- // Byte count of the captured output before UTF-8 decoding, so malformed
120
- // sequences replaced by U+FFFD still report their true captured size.
121
- stdoutBytes: captured.value.stdout.byteLength,
185
+ if (owner === undefined) {
186
+ if (primary !== undefined)
187
+ throw primary;
188
+ return;
189
+ }
190
+ const resource = `${path} (ADB staged-output handle)`;
191
+ const stagedOwner = owner;
192
+ const closeLease = new AnalysisCleanupLease(() => stagedOwner.close(), [resource]);
193
+ const released = await resources.release({
194
+ kind: "lease",
195
+ resource,
196
+ lease: closeLease,
122
197
  });
123
- };
124
- /**
125
- * adb exits nonzero when the device refuses a package change, printing the
126
- * `Failure [...]` verdict to stderr (install) or stdout (uninstall). Read the
127
- * refusal from that failed run so it is not reported as unreadable output.
128
- */
129
- const packageChangeRefusal = (operation, serial, error) => {
130
- if (!(error instanceof AnalysisProtocolError))
131
- return undefined;
132
- const failure = execFileOutputFailure(error.cause);
133
- if (failure === undefined)
134
- return undefined;
135
- const reason = packageChangeFailureReason(`${failure.stdout}\n${failure.stderr}`);
136
- return reason === null
137
- ? undefined
138
- : err(new AnalysisUnsupportedTargetError(operation, serial, reason, {
139
- cause: error,
140
- }));
198
+ if (released.kind === "failed") {
199
+ const cleanup = new ProviderCleanupError(ADB_PROVIDER_IDENTITY.id, [resource], {
200
+ reason: released.cause instanceof Error
201
+ ? released.cause.message
202
+ : String(released.cause),
203
+ }, { operation, cause: released.cause });
204
+ let reported;
205
+ if (primary !== undefined) {
206
+ const failure = new AnalysisOutputError(operation, `The staged ADB output could not be synchronized: ${path}`, { cause: primary });
207
+ reported = analysisErrorWithCleanupFailure(failure, cleanup, operation);
208
+ }
209
+ else {
210
+ reported = cleanup;
211
+ }
212
+ closeLease.bindCleanupError(reported);
213
+ throw reported;
214
+ }
215
+ if (primary !== undefined)
216
+ throw primary;
141
217
  };
142
218
  const clientIdentityResult = (selection, identity) => ({
143
219
  binary_path: selection.binary,
@@ -171,6 +247,131 @@ const refuseExistingTarget = async (operation, path) => {
171
247
  return new AnalysisOutputError(operation, `The output file already exists: ${path}`);
172
248
  return undefined;
173
249
  };
250
+ const hardLinksUnsupported = (cause) => cause instanceof Error &&
251
+ "code" in cause &&
252
+ ["EPERM", "EOPNOTSUPP", "ENOTSUP", "ENOSYS", "EXDEV"].includes(String(cause.code));
253
+ const describeAdbFailure = (cause) => cause instanceof Error ? cause.message : String(cause);
254
+ /** Exclusive-create fallback for filesystems that cannot hard-link staged files. */
255
+ const publishScreenExclusively = async (outputPath, bytes, resources, operation, signal) => {
256
+ if (signal?.aborted === true)
257
+ throw new AnalysisCancelledError(operation, { cause: signal.reason });
258
+ const output = await open(outputPath, "wx", 0o600);
259
+ // Successful exclusive creation is this fallback's cutoff. Finish and sync
260
+ // the visible file despite later cancellation so its receipt remains known.
261
+ const ownedOutput = new OwnedFileHandle(output);
262
+ const handleResource = `${outputPath} (ADB publication handle)`;
263
+ const closeOnly = new AnalysisCleanupLease(() => ownedOutput.close(), [handleResource]);
264
+ const removeOutput = async (expected) => {
265
+ let current;
266
+ try {
267
+ current = await lstat(outputPath);
268
+ }
269
+ catch (cause) {
270
+ if (cause instanceof Error && Reflect.get(cause, "code") === "ENOENT")
271
+ return;
272
+ throw cause;
273
+ }
274
+ if (current.dev !== expected.dev ||
275
+ current.ino !== expected.ino ||
276
+ current.mode !== expected.mode)
277
+ throw new Error(`The screen output changed before cleanup: ${outputPath}`);
278
+ await rm(outputPath);
279
+ };
280
+ let rollbackIdentity;
281
+ const inspectCloseAndRollback = new AnalysisCleanupLease(async () => {
282
+ rollbackIdentity ??= await output.stat();
283
+ await ownedOutput.close();
284
+ await removeOutput(rollbackIdentity);
285
+ });
286
+ let identity;
287
+ try {
288
+ identity = await output.stat();
289
+ }
290
+ catch (cause) {
291
+ resources.retain({
292
+ kind: "lease",
293
+ resource: `${outputPath} (screen output and descriptor)`,
294
+ lease: inspectCloseAndRollback,
295
+ });
296
+ const error = new ProviderCleanupError(ADB_PROVIDER_IDENTITY.id, [handleResource, outputPath], {
297
+ reason: "The newly created screen output identity could not be established; its descriptor remains owned for cleanup retry",
298
+ }, { operation, cause });
299
+ inspectCloseAndRollback.bindCleanupError(error);
300
+ throw error;
301
+ }
302
+ let writeFailure;
303
+ try {
304
+ await output.writeFile(bytes);
305
+ await output.sync();
306
+ }
307
+ catch (cause) {
308
+ writeFailure = { cause };
309
+ }
310
+ if (writeFailure === undefined) {
311
+ try {
312
+ await ownedOutput.close();
313
+ return undefined;
314
+ }
315
+ catch (cause) {
316
+ resources.retain({
317
+ kind: "lease",
318
+ resource: handleResource,
319
+ lease: closeOnly,
320
+ });
321
+ return {
322
+ cause,
323
+ resource: handleResource,
324
+ bindCleanupError(error) {
325
+ closeOnly.bindCleanupError(error);
326
+ },
327
+ };
328
+ }
329
+ }
330
+ const rollback = new AnalysisCleanupLease(async () => {
331
+ await ownedOutput.close();
332
+ await removeOutput(identity);
333
+ });
334
+ try {
335
+ await ownedOutput.close();
336
+ }
337
+ catch (closeCause) {
338
+ resources.retain({ kind: "lease", resource: outputPath, lease: rollback });
339
+ const error = new ProviderCleanupError(ADB_PROVIDER_IDENTITY.id, [outputPath], { reason: describeAdbFailure(closeCause) }, {
340
+ operation,
341
+ cause: new AggregateError([writeFailure.cause, closeCause], "Screen output write and descriptor cleanup failed", { cause: writeFailure.cause }),
342
+ });
343
+ rollback.bindCleanupError(error);
344
+ throw error;
345
+ }
346
+ const removed = await resources.release({
347
+ kind: "lease",
348
+ resource: outputPath,
349
+ lease: rollback,
350
+ });
351
+ if (removed.kind === "failed") {
352
+ const error = new ProviderCleanupError(ADB_PROVIDER_IDENTITY.id, [outputPath], { reason: describeAdbFailure(removed.cause) }, {
353
+ operation,
354
+ cause: new AggregateError([writeFailure.cause, removed.cause], "Screen output write and rollback failed", { cause: writeFailure.cause }),
355
+ });
356
+ rollback.bindCleanupError(error);
357
+ throw error;
358
+ }
359
+ throw writeFailure.cause;
360
+ };
361
+ const cancellationWithCleanupFailure = (primary, cleanup, resources) => new AnalysisCancelledError(primary.operation, {
362
+ cause: new AggregateError([primary, cleanup], "ADB cancellation cleanup failed", { cause: primary }),
363
+ diagnostics: primary.diagnostics,
364
+ ...(primary.capturedOutput === undefined
365
+ ? {}
366
+ : { capturedOutput: primary.capturedOutput }),
367
+ cleanup: {
368
+ reason: [primary.cleanup?.reason, cleanup.message]
369
+ .filter((reason) => reason !== undefined)
370
+ .join("; "),
371
+ resources: [...new Set([...primary.cleanupResources, ...resources])],
372
+ },
373
+ partialObservation: primary.partialObservation,
374
+ });
174
375
  /** Publish an ADB-produced archive without replacing an existing caller file. */
175
376
  const publishBugreport = async (source, directory) => {
176
377
  const fileName = basename(source);
@@ -189,6 +390,11 @@ const publishBugreport = async (source, directory) => {
189
390
  }
190
391
  }
191
392
  };
393
+ /** A root lease releases its children before removing their containing root. */
394
+ const runtimeRootLease = (root, children) => new AnalysisCleanupLease(async () => {
395
+ await children.close();
396
+ await root.close();
397
+ });
192
398
  const removeOwnedOutputDirectory = async (path, identity) => {
193
399
  if (identity === undefined)
194
400
  throw new Error(`Cannot verify the created output directory identity; refusing to remove ${path}`);
@@ -293,6 +499,9 @@ const reservePackageDestinations = async (operation, packageName, packageDirecto
293
499
  */
294
500
  export class AdbProvider {
295
501
  environment;
502
+ #createRuntimeRoot;
503
+ #resources = new ArtifactResourceScope();
504
+ #outputDirectoryRetryLeases = new WeakMap();
296
505
  #pendingOutputDirectoryCleanup = new Set();
297
506
  #activeOperations = new Set();
298
507
  #closing = false;
@@ -300,6 +509,9 @@ export class AdbProvider {
300
509
  #outputCleanupPromise;
301
510
  constructor(options = {}) {
302
511
  this.environment = options.environment ?? process.env;
512
+ this.#createRuntimeRoot =
513
+ options.createRuntimeRoot ??
514
+ ((rootOptions) => PrivateRuntimeRoot.create(rootOptions));
303
515
  }
304
516
  selection() {
305
517
  return resolveAdbBinary(this.environment);
@@ -332,7 +544,46 @@ export class AdbProvider {
332
544
  return this.#closePromise;
333
545
  const closing = (async () => {
334
546
  await Promise.all(this.#activeOperations);
335
- await this.#retryOutputDirectoryCleanup();
547
+ const failures = [];
548
+ const failedLeases = new Set();
549
+ let allFailuresHaveExactLeaseOwners = true;
550
+ // Directory errors may also depend on a retained digest descriptor.
551
+ // Settle those owners before deciding whether the directory error resolved.
552
+ for (const cleanup of [
553
+ () => this.#resources.close(),
554
+ () => this.#retryOutputDirectoryCleanup(),
555
+ ]) {
556
+ try {
557
+ await cleanup();
558
+ }
559
+ catch (cause) {
560
+ failures.push(cause);
561
+ const leases = (cause instanceof AnalysisError
562
+ ? this.#outputDirectoryRetryLeases.get(cause)
563
+ : undefined) ??
564
+ (cause instanceof ArtifactResourceRetryFailure
565
+ ? cause.cleanupLeases
566
+ : undefined);
567
+ if (leases === undefined)
568
+ allFailuresHaveExactLeaseOwners = false;
569
+ for (const lease of leases ?? [])
570
+ failedLeases.add(lease);
571
+ }
572
+ }
573
+ if (failures.length > 0) {
574
+ const resources = failures.flatMap((cause) => this.#cleanupResources(cause, "ADB provider-owned resource"));
575
+ const error = new ProviderCleanupError(ADB_PROVIDER_IDENTITY.id, [...new Set(resources)], {
576
+ reason: failures
577
+ .map((cause) => cause instanceof Error ? cause.message : String(cause))
578
+ .join("; "),
579
+ }, {
580
+ operation: "close_binary",
581
+ cause: new AggregateError(failures, "ADB cleanup remains incomplete"),
582
+ });
583
+ if (allFailuresHaveExactLeaseOwners && failedLeases.size > 0)
584
+ new AnalysisCleanupLeaseGroup(error, [...failedLeases]);
585
+ throw error;
586
+ }
336
587
  })().finally(() => {
337
588
  if (this.#closePromise === closing)
338
589
  this.#closePromise = undefined;
@@ -340,6 +591,137 @@ export class AdbProvider {
340
591
  this.#closePromise = closing;
341
592
  return this.#closePromise;
342
593
  }
594
+ #cleanupResources(cause, resource) {
595
+ if (cause instanceof ArtifactReaderFailure && cause.cleanup !== undefined)
596
+ return cause.cleanup.resources;
597
+ if (cause instanceof AnalysisError && cause.cleanupResources.length > 0)
598
+ return cause.cleanupResources;
599
+ return [resource];
600
+ }
601
+ #cleanupError(operation, parameters, causes, resources, execution) {
602
+ const partialObservation = execution === undefined
603
+ ? undefined
604
+ : createEvidence(execution.subject ?? undefined, execution.provider, {
605
+ operation,
606
+ parameters,
607
+ result: execution.result,
608
+ rawResult: execution.rawResult,
609
+ limitations: execution.limitations,
610
+ locations: execution.locations,
611
+ confidence: "observed",
612
+ });
613
+ return new ProviderCleanupError(ADB_PROVIDER_IDENTITY.id, resources, {
614
+ reason: causes
615
+ .map((cause) => cause instanceof Error ? cause.message : String(cause))
616
+ .join("; "),
617
+ }, {
618
+ operation,
619
+ cause: new AggregateError(causes, "ADB operation cleanup failed"),
620
+ ...(partialObservation === undefined ? {} : { partialObservation }),
621
+ });
622
+ }
623
+ async #withRuntimeRoot(operation, parameters, options, signal, work) {
624
+ let root;
625
+ try {
626
+ root = await this.#createRuntimeRoot(options);
627
+ }
628
+ catch (cause) {
629
+ return err(cause instanceof AnalysisError
630
+ ? cause
631
+ : cause instanceof PrivateRuntimeRootUnavailableError
632
+ ? new AnalysisCapabilityUnavailableError(ADB_PROVIDER_IDENTITY.id, operation, cause.message, { cause, retryable: cause.retryable })
633
+ : new AnalysisOutputError(operation, "Could not create an ADB private workspace", {
634
+ cause,
635
+ }));
636
+ }
637
+ let result;
638
+ let primary;
639
+ const children = new ArtifactResourceScope();
640
+ try {
641
+ result = await work(root, children);
642
+ }
643
+ catch (cause) {
644
+ if (cause instanceof AdbInputSnapshotFailure) {
645
+ primary =
646
+ cause.primaryCause instanceof AnalysisError
647
+ ? cause.primaryCause
648
+ : new AnalysisOutputError(operation, `The caller input could not be staged for adb: ${cause.sourcePath}`, { cause: cause.primaryCause ?? cause });
649
+ // Snapshot handle cleanup may recover when the runtime-root lease is
650
+ // drained below. Keep that historical failure linked to the typed
651
+ // primary error while the lease owns and clears live cleanup state.
652
+ primary.retainSecondaryFailure(new AnalysisOutputError(operation, `ADB input snapshot cleanup previously failed for ${cause.sourcePath}`, { cause }), {});
653
+ }
654
+ else {
655
+ primary =
656
+ cause instanceof AnalysisError
657
+ ? cause
658
+ : new AnalysisProtocolError(`ADB ${operation} failed`, { cause });
659
+ }
660
+ }
661
+ const rootLease = runtimeRootLease(root, children);
662
+ const released = await this.#resources.release({
663
+ kind: "lease",
664
+ resource: root.path,
665
+ lease: rootLease,
666
+ });
667
+ if (primary === undefined && result?.ok && signal?.aborted === true) {
668
+ const completed = result.value;
669
+ primary = new AnalysisCancelledError(operation, {
670
+ cause: signal.reason,
671
+ partialObservation: createEvidence(completed.subject ?? undefined, completed.provider, {
672
+ operation,
673
+ parameters,
674
+ result: completed.result,
675
+ rawResult: completed.rawResult,
676
+ limitations: completed.limitations,
677
+ locations: completed.locations,
678
+ confidence: "observed",
679
+ }),
680
+ });
681
+ }
682
+ if (released.kind === "failed") {
683
+ const cleanupResources = [
684
+ root.path,
685
+ ...(released.cause instanceof ArtifactReaderFailure &&
686
+ released.cause.cleanup !== undefined
687
+ ? released.cause.cleanup.resources
688
+ : []),
689
+ ];
690
+ const cleanup = this.#cleanupError(operation, parameters, [released.cause], cleanupResources, result?.ok ? result.value : undefined);
691
+ const returnCleanupError = (error) => {
692
+ rootLease.bindCleanupError(error);
693
+ return err(error);
694
+ };
695
+ if (primary instanceof AnalysisCancelledError) {
696
+ return returnCleanupError(cancellationWithCleanupFailure(primary, cleanup, cleanupResources));
697
+ }
698
+ if (primary !== undefined)
699
+ return returnCleanupError(analysisErrorWithCleanupFailure(primary, cleanup, operation));
700
+ if (result !== undefined && !result.ok) {
701
+ if (result.error instanceof AnalysisCancelledError) {
702
+ return returnCleanupError(cancellationWithCleanupFailure(result.error, cleanup, cleanupResources));
703
+ }
704
+ return returnCleanupError(analysisErrorWithCleanupFailure(result.error, cleanup, operation));
705
+ }
706
+ return returnCleanupError(cleanup);
707
+ }
708
+ if (primary !== undefined)
709
+ return err(primary);
710
+ if (result === undefined)
711
+ return err(new AnalysisProtocolError(`ADB ${operation} returned no result`));
712
+ return result;
713
+ }
714
+ #retainOutputDirectoryCleanup(owner, cleanup) {
715
+ const lease = new AnalysisCleanupLease(async () => {
716
+ await owner.remove();
717
+ if (owner.primary.cleanupIncomplete)
718
+ throw new Error("ADB output directory primary cleanup remains incomplete");
719
+ });
720
+ const error = analysisErrorWithCleanupFailure(owner.primary, cleanup, owner.operation);
721
+ lease.bindCleanupError(error);
722
+ this.#pendingOutputDirectoryCleanup.add({ ...owner, lease });
723
+ return error;
724
+ }
343
725
  #retryOutputDirectoryCleanup() {
344
726
  if (this.#outputCleanupPromise !== undefined)
345
727
  return this.#outputCleanupPromise;
@@ -354,30 +736,40 @@ export class AdbProvider {
354
736
  const failures = [];
355
737
  for (const owner of this.#pendingOutputDirectoryCleanup) {
356
738
  try {
357
- await owner.remove();
739
+ await owner.lease.release();
358
740
  this.#pendingOutputDirectoryCleanup.delete(owner);
359
741
  }
360
742
  catch (cause) {
361
743
  const cleanup = new ProviderCleanupError(ADB_PROVIDER_IDENTITY.id, [owner.path], {
362
744
  reason: cause instanceof Error ? cause.message : String(cause),
363
745
  }, { operation: owner.operation, cause });
364
- failures.push(analysisErrorWithCleanupFailure(owner.primary, cleanup, owner.operation));
746
+ const error = analysisErrorWithCleanupFailure(owner.primary, cleanup, owner.operation);
747
+ owner.lease.bindCleanupError(error);
748
+ failures.push(error);
365
749
  }
366
750
  }
367
- if (failures.length === 1)
368
- throw failures[0];
369
- if (failures.length > 1)
370
- throw new ProviderCleanupError(ADB_PROVIDER_IDENTITY.id, [...this.#pendingOutputDirectoryCleanup].map(({ path }) => path), {
371
- reason: "Failed ADB output directories remain after cleanup retry",
372
- operations: [...this.#pendingOutputDirectoryCleanup].map(({ operation }) => operation),
373
- failures: failures.map(({ message, cleanupResources }) => ({
374
- message,
375
- resources: [...cleanupResources],
376
- })),
377
- }, {
378
- operation: "close_binary",
379
- cause: new AggregateError(failures, "Multiple ADB output directory cleanups failed"),
380
- });
751
+ if (failures.length > 0) {
752
+ const error = failures.length === 1
753
+ ? failures[0]
754
+ : new ProviderCleanupError(ADB_PROVIDER_IDENTITY.id, [
755
+ ...new Set(failures.flatMap((failure) => failure.cleanupResources)),
756
+ ], {
757
+ reason: "Failed ADB output directories remain after cleanup retry",
758
+ operations: [...this.#pendingOutputDirectoryCleanup].map(({ operation }) => operation),
759
+ failures: failures.map(({ message, cleanupResources }) => ({
760
+ message,
761
+ resources: [...cleanupResources],
762
+ })),
763
+ }, {
764
+ operation: "close_binary",
765
+ cause: new AggregateError(failures, "Multiple ADB output directory cleanups failed"),
766
+ });
767
+ const leases = [...this.#pendingOutputDirectoryCleanup].map(({ lease }) => lease);
768
+ this.#outputDirectoryRetryLeases.set(error, leases);
769
+ if (failures.length > 1)
770
+ new AnalysisCleanupLeaseGroup(error, leases);
771
+ throw error;
772
+ }
381
773
  }
382
774
  async execute(request, options) {
383
775
  if (this.#closing)
@@ -388,6 +780,18 @@ export class AdbProvider {
388
780
  });
389
781
  this.#activeOperations.add(active);
390
782
  try {
783
+ try {
784
+ await this.#resources.retryCleanup();
785
+ }
786
+ catch (cause) {
787
+ const error = this.#cleanupError(request.operation, jsonObjectSchema.parse(request.input), [cause], this.#cleanupResources(cause, "ADB provider-owned resource"));
788
+ const leases = cause instanceof ArtifactResourceRetryFailure
789
+ ? cause.cleanupLeases
790
+ : undefined;
791
+ if (leases !== undefined)
792
+ new AnalysisCleanupLeaseGroup(error, leases);
793
+ return err(error);
794
+ }
391
795
  if (this.#pendingOutputDirectoryCleanup.size > 0) {
392
796
  try {
393
797
  await this.#retryOutputDirectoryCleanup();
@@ -410,7 +814,7 @@ export class AdbProvider {
410
814
  async #executeOperation(request, options) {
411
815
  const signal = options?.signal;
412
816
  if (signal?.aborted === true)
413
- return err(new AnalysisCancelledError(request.operation));
817
+ return err(new AnalysisCancelledError(request.operation, { cause: signal.reason }));
414
818
  let selection;
415
819
  let identity;
416
820
  try {
@@ -418,7 +822,7 @@ export class AdbProvider {
418
822
  identity = await inspectAdbClient(selection, signal);
419
823
  }
420
824
  catch (cause) {
421
- if (cause instanceof AnalysisCancelledError)
825
+ if (cause instanceof AnalysisError)
422
826
  return err(cause);
423
827
  if (cause instanceof AdbConfigurationFailure)
424
828
  return err(providerConfigurationRefusal(ADB_PROVIDER_IDENTITY.id, request.operation, cause));
@@ -569,13 +973,15 @@ export class AdbProvider {
569
973
  user_id: details.userId,
570
974
  pkg_flags: details.pkgFlags,
571
975
  requested_permissions_count: details.requestedPermissions,
572
- coverage: details.versionCode === null && details.versionName === null
976
+ coverage: details.requestedPermissions === null ||
977
+ (details.versionCode === null && details.versionName === null)
573
978
  ? "partial"
574
979
  : "complete",
575
980
  }, provider, {
576
981
  limitations: [
577
982
  "Fields are a fixed projection of dumpsys package output; version-dependent sections are ignored rather than guessed",
578
- "requested_permissions_count counts the listed requested permissions section only",
983
+ "requested_permissions_count counts the listed requested permissions section; an absent section is zero only when dumpsys confirms a loaded parsed package",
984
+ "A null requested_permissions_count means dumpsys reported pkg=null or did not establish that an omitted permission section is an empty inventory",
579
985
  ],
580
986
  }));
581
987
  }
@@ -700,8 +1106,8 @@ export class AdbProvider {
700
1106
  });
701
1107
  if (!ran.ok)
702
1108
  return ran;
703
- let { focusedWindow, focusedApp } = parseWindowFocusOutput(ran.value.stdout);
704
- if (focusedWindow === null && focusedApp === null) {
1109
+ let focus = parseWindowFocusOutput(ran.value.stdout);
1110
+ if (focus.focus_summary === "unavailable") {
705
1111
  section = "displays";
706
1112
  const fallback = await shell(["dumpsys", "window", section], {
707
1113
  timeoutMs: SHELL_TIMEOUT_MS,
@@ -709,24 +1115,25 @@ export class AdbProvider {
709
1115
  });
710
1116
  if (!fallback.ok)
711
1117
  return fallback;
712
- ({ focusedWindow, focusedApp } = parseWindowFocusOutput(fallback.value.stdout));
1118
+ focus = parseWindowFocusOutput(fallback.value.stdout);
713
1119
  }
714
- const declared = focusedWindow !== null || focusedApp !== null;
1120
+ const declared = focus.focus_summary !== "unavailable";
715
1121
  return ok(createAnalysisExecution({
716
1122
  client,
717
1123
  serial: request.input.serial,
718
- focused_window: focusedWindow,
719
- focused_app: focusedApp,
720
- observed_lines: [
721
- ...(focusedWindow === null ? [] : [focusedWindow]),
722
- ...(focusedApp === null ? [] : [focusedApp]),
723
- ],
1124
+ source_section: section,
1125
+ ...focus,
724
1126
  }, provider, {
725
1127
  limitations: [
726
1128
  "Focus values are the window manager's declarations at read time; no interaction occurred",
727
1129
  declared
728
1130
  ? `Focus declarations were read from \`dumpsys window ${section}\``
729
1131
  : "Neither `dumpsys window windows` nor `dumpsys window displays` declared mCurrentFocus or mFocusedApp; focus is unknown, not absent",
1132
+ ...(focus.focus_summary === "ambiguous"
1133
+ ? [
1134
+ "Multiple focus contexts or repeated declarations prevent a singular focus summary; inspect focus_contexts for every declaration",
1135
+ ]
1136
+ : []),
730
1137
  ],
731
1138
  }));
732
1139
  }
@@ -866,21 +1273,18 @@ export class AdbProvider {
866
1273
  const owner = {
867
1274
  operation,
868
1275
  path: packageDirectory,
869
- identity: packageDirectoryIdentity,
870
1276
  primary,
871
1277
  remove: () => removeOwnedOutputDirectory(packageDirectory, packageDirectoryIdentity),
872
1278
  };
873
- this.#pendingOutputDirectoryCleanup.add(owner);
874
1279
  const cleanup = new ProviderCleanupError(ADB_PROVIDER_IDENTITY.id, [packageDirectory], {
875
1280
  reason: "Could not establish an owned package directory identity",
876
1281
  }, { operation, cause });
877
- return err(analysisErrorWithCleanupFailure(primary, cleanup, operation));
1282
+ return err(this.#retainOutputDirectoryCleanup(owner, cleanup));
878
1283
  }
879
1284
  const failOwnedPackage = async (primary) => {
880
1285
  const owner = {
881
1286
  operation,
882
1287
  path: packageDirectory,
883
- identity: packageDirectoryIdentity,
884
1288
  primary,
885
1289
  remove: () => removeOwnedOutputDirectory(packageDirectory, packageDirectoryIdentity),
886
1290
  };
@@ -888,9 +1292,8 @@ export class AdbProvider {
888
1292
  await owner.remove();
889
1293
  }
890
1294
  catch (cause) {
891
- this.#pendingOutputDirectoryCleanup.add(owner);
892
1295
  const cleanup = new ProviderCleanupError(ADB_PROVIDER_IDENTITY.id, [packageDirectory], { reason: cause instanceof Error ? cause.message : String(cause) }, { operation, cause });
893
- return err(analysisErrorWithCleanupFailure(primary, cleanup, operation));
1296
+ return err(this.#retainOutputDirectoryCleanup(owner, cleanup));
894
1297
  }
895
1298
  return err(primary);
896
1299
  };
@@ -899,6 +1302,11 @@ export class AdbProvider {
899
1302
  return failOwnedPackage(destinationError);
900
1303
  const artifacts = [];
901
1304
  const failures = [];
1305
+ const observedFailures = () => failures.map(({ device_path, stage, message }) => ({
1306
+ device_path,
1307
+ stage,
1308
+ message,
1309
+ }));
902
1310
  const cancelledPackagePull = (error, localPath, devicePath, stage) => {
903
1311
  error.retainPartialObservation({
904
1312
  provider_id: "adb",
@@ -910,7 +1318,7 @@ export class AdbProvider {
910
1318
  output_directory: directory.value,
911
1319
  artifacts,
912
1320
  failures: [
913
- ...failures,
1321
+ ...observedFailures(),
914
1322
  {
915
1323
  device_path: devicePath,
916
1324
  stage,
@@ -934,11 +1342,12 @@ export class AdbProvider {
934
1342
  device_path: entry.device_path,
935
1343
  stage: "pull",
936
1344
  message: pulled.error.message,
1345
+ cause: pulled.error,
937
1346
  });
938
1347
  continue;
939
1348
  }
940
1349
  try {
941
- const digest = await hashAdbFile(localPath, operation, signal);
1350
+ const digest = await hashAdbFile(localPath, operation, signal, this.#resources);
942
1351
  artifacts.push({
943
1352
  device_path: entry.device_path,
944
1353
  file_name: entry.file_name,
@@ -950,17 +1359,65 @@ export class AdbProvider {
950
1359
  });
951
1360
  }
952
1361
  catch (cause) {
1362
+ const digestFailure = cause instanceof AdbDigestFailure ? cause.fileFailure : undefined;
1363
+ const completedDigest = digestFailure?.outcome.kind === "completed"
1364
+ ? digestFailure.outcome.value
1365
+ : undefined;
1366
+ const partialObservation = {
1367
+ provider_id: "adb",
1368
+ operation,
1369
+ result: {
1370
+ client,
1371
+ serial,
1372
+ package_name: packageName,
1373
+ output_directory: directory.value,
1374
+ artifacts: completedDigest === undefined
1375
+ ? artifacts
1376
+ : [
1377
+ ...artifacts,
1378
+ {
1379
+ device_path: entry.device_path,
1380
+ file_name: entry.file_name,
1381
+ local_path: localPath,
1382
+ bytes: completedDigest.bytes,
1383
+ sha256: completedDigest.sha256,
1384
+ role: entry.role,
1385
+ role_basis: "file_name",
1386
+ },
1387
+ ],
1388
+ failures: [
1389
+ ...observedFailures(),
1390
+ {
1391
+ device_path: entry.device_path,
1392
+ stage: "digest",
1393
+ message: completedDigest === undefined
1394
+ ? `The pulled file remains at ${localPath}, but its digest and descriptor cleanup are unconfirmed.`
1395
+ : digestFailure instanceof RegularFileCancelled
1396
+ ? `The pulled file digest and descriptor cleanup are confirmed; the request was cancelled: ${localPath}`
1397
+ : `The pulled file digest is known, but its descriptor cleanup is unconfirmed: ${localPath}`,
1398
+ },
1399
+ ],
1400
+ coverage: "partial",
1401
+ },
1402
+ };
1403
+ const cleanupError = adbDigestError(cause, operation, partialObservation);
1404
+ if (cleanupError !== undefined)
1405
+ return err(cleanupError);
953
1406
  if (cause instanceof AnalysisCancelledError)
954
1407
  return cancelledPackagePull(cause, localPath, entry.device_path, "digest");
1408
+ const physicalCause = stableFileHashCause(cause);
955
1409
  failures.push({
956
1410
  device_path: entry.device_path,
957
1411
  stage: "digest",
958
- message: `The pulled file could not be read back after pulling: ${localPath}`,
1412
+ message: `The pulled file could not be read back after pulling: ${localPath}: ${physicalCause instanceof Error ? physicalCause.message : String(physicalCause)}`,
1413
+ cause,
959
1414
  });
960
1415
  }
961
1416
  }
962
1417
  if (artifacts.length === 0 && failures.length > 0) {
963
- const primary = new AnalysisProtocolError(`Every APK pull failed for ${packageName} on ${serial}: ${failures[0].message}`);
1418
+ const primary = new AnalysisProtocolError(`Every APK pull failed for ${packageName} on ${serial}: ${failures[0].message}`, {
1419
+ cause: new AggregateError(failures.map(({ cause }) => cause), "APK pulls failed"),
1420
+ });
964
1421
  return failOwnedPackage(primary);
965
1422
  }
966
1423
  return ok(createAnalysisExecution({
@@ -969,7 +1426,7 @@ export class AdbProvider {
969
1426
  package_name: packageName,
970
1427
  output_directory: directory.value,
971
1428
  artifacts,
972
- failures,
1429
+ failures: observedFailures(),
973
1430
  coverage: failures.length === 0 ? "complete" : "partial",
974
1431
  }, provider, {
975
1432
  limitations: [
@@ -999,7 +1456,7 @@ export class AdbProvider {
999
1456
  if (!pulled.ok)
1000
1457
  return pulled;
1001
1458
  try {
1002
- const digest = await hashAdbFile(localPath, operation, signal);
1459
+ const digest = await hashAdbFile(localPath, operation, signal, this.#resources);
1003
1460
  return ok(createAnalysisExecution({
1004
1461
  client,
1005
1462
  serial: input.serial,
@@ -1014,18 +1471,22 @@ export class AdbProvider {
1014
1471
  }));
1015
1472
  }
1016
1473
  catch (cause) {
1474
+ const partialObservation = {
1475
+ provider_id: "adb",
1476
+ operation,
1477
+ result: {
1478
+ client,
1479
+ serial: input.serial,
1480
+ local_path: localPath,
1481
+ device_path: input.device_path,
1482
+ digest_status: "unknown",
1483
+ },
1484
+ };
1485
+ const cleanupError = adbDigestError(cause, operation, partialObservation);
1486
+ if (cleanupError !== undefined)
1487
+ return err(cleanupError);
1017
1488
  if (cause instanceof AnalysisCancelledError) {
1018
- cause.retainPartialObservation({
1019
- provider_id: "adb",
1020
- operation,
1021
- result: {
1022
- client,
1023
- serial: input.serial,
1024
- local_path: localPath,
1025
- device_path: input.device_path,
1026
- digest_status: "unknown",
1027
- },
1028
- });
1489
+ cause.retainPartialObservation(partialObservation);
1029
1490
  return err(cause);
1030
1491
  }
1031
1492
  return err(new AnalysisOutputError(operation, `The pulled file could not be read back after pulling: ${localPath}`, { cause }));
@@ -1038,63 +1499,74 @@ export class AdbProvider {
1038
1499
  return err(new AnalysisInputError(operation, {
1039
1500
  cause: new Error(`The local file does not exist: ${localPath}`),
1040
1501
  }));
1041
- let digest;
1042
- try {
1043
- digest = await hashAdbFile(localPath, operation, signal);
1044
- }
1045
- catch (cause) {
1046
- if (cause instanceof AnalysisCancelledError)
1047
- return err(cause);
1048
- throw cause;
1049
- }
1050
- const existsProbe = await runAdb(operation, input.device_path, selection.binary, adbArguments(input.serial, ["shell", "test", "-e", input.device_path]), { timeoutMs: SETTINGS_TIMEOUT_MS, maxOutputBytes: 1024 }, signal);
1051
- // `test -e` exits nonzero with no adb diagnosis when the path is absent.
1052
- // Any other probe failure leaves existence unknown, so it is reported as
1053
- // is rather than read as an existing path or followed by a push.
1054
- if (!existsProbe.ok &&
1055
- !(existsProbe.error instanceof AnalysisProtocolError))
1056
- return existsProbe;
1057
- const deviceExists = existsProbe.ok;
1058
- if (deviceExists && !input.overwrite)
1059
- return err(new AnalysisOutputError(operation, `The device path already exists and overwrite was not requested: ${input.device_path}`));
1060
- const pushed = await runAdb(operation, input.device_path, selection.binary, adbArguments(input.serial, ["push", localPath, input.device_path]), { timeoutMs: PULL_TIMEOUT_MS, maxOutputBytes: PULL_MAX_OUTPUT_BYTES }, signal);
1061
- if (!pushed.ok)
1062
- return pushed;
1063
- const deviceDigest = await runAdb(operation, input.device_path, selection.binary, adbArguments(input.serial, ["shell", "sha256sum", input.device_path]), { timeoutMs: SHELL_TIMEOUT_MS, maxOutputBytes: 1024 }, signal);
1064
- if (deviceDigest.ok) {
1065
- const digestMatch = /^([a-f0-9]{64})\s/u.exec(deviceDigest.value.stdout);
1066
- if (digestMatch !== null && digestMatch[1] !== digest.sha256)
1067
- return err(new AnalysisArtifactChangedError(operation, input.device_path, `The device-reported digest does not match the pushed local file: ${localPath}`));
1068
- return ok(createAnalysisExecution({
1502
+ return this.#withRuntimeRoot(operation, {
1503
+ serial: input.serial,
1504
+ local_path: localPath,
1505
+ device_path: input.device_path,
1506
+ overwrite: input.overwrite,
1507
+ }, { prefix: "rea-adb-input-" }, signal, async (root, resources) => {
1508
+ const digest = await snapshotAdbInput(localPath, root, resources, operation, signal);
1509
+ const existsProbe = await probeAdbPathExistence(operation, input.serial, input.device_path, selection.binary, { timeoutMs: SETTINGS_TIMEOUT_MS, maxOutputBytes: 1024 }, signal);
1510
+ if (!existsProbe.ok)
1511
+ return existsProbe;
1512
+ const deviceExists = existsProbe.value;
1513
+ if (deviceExists && !input.overwrite)
1514
+ return err(new AnalysisOutputError(operation, `The device path already exists and overwrite was not requested: ${input.device_path}`));
1515
+ const pushed = await runAdb(operation, input.device_path, selection.binary, adbArguments(input.serial, ["push", digest.path, input.device_path]), { timeoutMs: PULL_TIMEOUT_MS, maxOutputBytes: PULL_MAX_OUTPUT_BYTES }, signal);
1516
+ if (!pushed.ok)
1517
+ return pushed;
1518
+ const receipt = (deviceSha256, source, extra = []) => createAnalysisExecution({
1069
1519
  client,
1070
1520
  serial: input.serial,
1071
1521
  local_path: localPath,
1072
1522
  device_path: input.device_path,
1073
1523
  bytes: digest.bytes,
1074
1524
  sha256: digest.sha256,
1075
- device_sha256: digestMatch?.[1] ?? null,
1525
+ device_sha256: deviceSha256,
1076
1526
  overwritten: deviceExists,
1077
- device_digest_source: "device_sha256sum",
1527
+ device_digest_source: source,
1078
1528
  }, provider, {
1079
- limitations: ["Push writes the caller's file to the device"],
1080
- }));
1081
- }
1082
- return ok(createAnalysisExecution({
1083
- client,
1084
- serial: input.serial,
1085
- local_path: localPath,
1086
- device_path: input.device_path,
1087
- bytes: digest.bytes,
1088
- sha256: digest.sha256,
1089
- device_sha256: null,
1090
- overwritten: deviceExists,
1091
- device_digest_source: "unavailable",
1092
- }, provider, {
1093
- limitations: [
1094
- "The device did not answer sha256sum, so the transfer is not device-side verified",
1095
- "Push writes the caller's file to the device",
1096
- ],
1097
- }));
1529
+ limitations: [
1530
+ "Push writes a private snapshot of the caller's file to the device",
1531
+ ...extra,
1532
+ ],
1533
+ });
1534
+ const deviceDigest = await runAdb(operation, input.device_path, selection.binary, adbArguments(input.serial, ["shell", "sha256sum", input.device_path]), { timeoutMs: SHELL_TIMEOUT_MS, maxOutputBytes: 1024 }, signal);
1535
+ if (!deviceDigest.ok) {
1536
+ const cancelled = deviceDigest.error instanceof AnalysisCancelledError;
1537
+ const completed = receipt(null, "unavailable", [
1538
+ cancelled
1539
+ ? "The device-side digest check was cancelled after push completed"
1540
+ : "The device did not answer sha256sum, so the transfer is not device-side verified",
1541
+ ]);
1542
+ if (cancelled)
1543
+ deviceDigest.error.retainPartialObservation(createEvidence(completed.subject ?? undefined, completed.provider, {
1544
+ operation,
1545
+ parameters: input,
1546
+ result: completed.result,
1547
+ rawResult: completed.rawResult,
1548
+ limitations: completed.limitations,
1549
+ locations: completed.locations,
1550
+ confidence: "observed",
1551
+ }));
1552
+ return cancelled ? err(deviceDigest.error) : ok(completed);
1553
+ }
1554
+ const digestMatch = /^([a-f0-9]{64})\s/u.exec(deviceDigest.value.stdout);
1555
+ const completed = receipt(digestMatch?.[1] ?? null, "device_sha256sum");
1556
+ if (digestMatch !== null && digestMatch[1] !== digest.sha256)
1557
+ return err(new AnalysisArtifactChangedError(operation, input.device_path, `The device-reported digest does not match the staged local file: ${localPath}`, {
1558
+ partialObservation: createEvidence(completed.subject ?? undefined, completed.provider, {
1559
+ operation,
1560
+ parameters: input,
1561
+ result: completed.result,
1562
+ rawResult: completed.rawResult,
1563
+ limitations: completed.limitations,
1564
+ locations: completed.locations,
1565
+ confidence: "observed",
1566
+ }),
1567
+ }));
1568
+ return ok(completed);
1569
+ });
1098
1570
  }
1099
1571
  async installPackage(operation, selection, client, provider, input, signal) {
1100
1572
  const apkPath = resolve(input.apk_path);
@@ -1103,43 +1575,48 @@ export class AdbProvider {
1103
1575
  return err(new AnalysisInputError(operation, {
1104
1576
  cause: new Error(`The local APK does not exist: ${apkPath}`),
1105
1577
  }));
1106
- let digest;
1107
- try {
1108
- digest = await hashAdbFile(apkPath, operation, signal);
1109
- }
1110
- catch (cause) {
1111
- if (cause instanceof AnalysisCancelledError)
1112
- return err(cause);
1113
- throw cause;
1114
- }
1115
- const installed = await runAdb(operation, input.serial, selection.binary, adbArguments(input.serial, [
1116
- "install",
1117
- ...(input.replace ? ["-r"] : []),
1118
- apkPath,
1119
- ]), { timeoutMs: PULL_TIMEOUT_MS, maxOutputBytes: PULL_MAX_OUTPUT_BYTES }, signal);
1120
- if (!installed.ok)
1121
- return (packageChangeRefusal(operation, input.serial, installed.error) ??
1122
- installed);
1123
- const verdict = parsePackageChangeOutput(installed.value.stdout);
1124
- if (verdict.status === "failure")
1125
- return err(new AnalysisUnsupportedTargetError(operation, input.serial, verdict.reason ?? "the device refused the installation"));
1126
- return ok(createAnalysisExecution({
1127
- client,
1578
+ return this.#withRuntimeRoot(operation, {
1128
1579
  serial: input.serial,
1129
1580
  apk_path: apkPath,
1130
- bytes: digest.bytes,
1131
- sha256: digest.sha256,
1132
- replace_requested: input.replace,
1133
- replaced: null,
1134
- }, provider, {
1135
- limitations: [
1136
- "Install changes device state; the installed APK's digest is the host file's digest",
1137
- "Whether an existing package was replaced is unknown; replace_requested records only the adb install mode",
1138
- ],
1139
- }));
1581
+ replace: input.replace,
1582
+ }, { prefix: "rea-adb-apk-" }, signal, async (root, resources) => {
1583
+ const digest = await snapshotAdbInput(apkPath, root, resources, operation, signal);
1584
+ const installed = await runAdb(operation, input.serial, selection.binary, adbArguments(input.serial, [
1585
+ "install",
1586
+ ...(input.replace ? ["-r"] : []),
1587
+ digest.path,
1588
+ ]), { timeoutMs: PULL_TIMEOUT_MS, maxOutputBytes: PULL_MAX_OUTPUT_BYTES }, signal);
1589
+ if (!installed.ok)
1590
+ return (packageChangeRefusal(operation, input.serial, installed.error) ??
1591
+ installed);
1592
+ const verdict = parsePackageChangeOutput(installed.value.stdout);
1593
+ if (verdict.status === "failure")
1594
+ return err(new AnalysisUnsupportedTargetError(operation, input.serial, verdict.reason ?? "the device refused the installation"));
1595
+ return ok(createAnalysisExecution({
1596
+ client,
1597
+ serial: input.serial,
1598
+ apk_path: apkPath,
1599
+ bytes: digest.bytes,
1600
+ sha256: digest.sha256,
1601
+ replace_requested: input.replace,
1602
+ replaced: null,
1603
+ }, provider, {
1604
+ limitations: [
1605
+ "Install changes device state; the installed APK's digest identifies the private host snapshot",
1606
+ "Whether an existing package was replaced is unknown; replace_requested records only the adb install mode",
1607
+ ],
1608
+ }));
1609
+ });
1140
1610
  }
1141
1611
  async uninstallPackage(operation, selection, client, provider, input, signal) {
1142
- const uninstalled = await runAdb(operation, input.serial, selection.binary, adbArguments(input.serial, ["uninstall", input.package]), {
1612
+ const uninstalled = await runAdb(operation, input.serial, selection.binary, adbArguments(input.serial, [
1613
+ "shell",
1614
+ "pm",
1615
+ "uninstall",
1616
+ "--user",
1617
+ "0",
1618
+ input.package,
1619
+ ]), {
1143
1620
  timeoutMs: PACKAGE_LIST_TIMEOUT_MS,
1144
1621
  maxOutputBytes: PULL_MAX_OUTPUT_BYTES,
1145
1622
  }, signal);
@@ -1155,7 +1632,7 @@ export class AdbProvider {
1155
1632
  package_name: input.package,
1156
1633
  }, provider, {
1157
1634
  limitations: [
1158
- "Uninstall removes the package and its data for user 0; keeping data (-k) is not exposed",
1635
+ "Uninstall explicitly requests user 0 without data retention (-k); device enforcement is not independently verified",
1159
1636
  ],
1160
1637
  }));
1161
1638
  }
@@ -1291,31 +1768,68 @@ export class AdbProvider {
1291
1768
  const captured = await runAdbCapture(operation, input.serial, selection.binary, adbArguments(input.serial, ["exec-out", "screencap", "-p"]), { timeoutMs: SCREEN_TIMEOUT_MS, maxOutputBytes: SCREEN_MAX_OUTPUT_BYTES }, signal);
1292
1769
  if (!captured.ok)
1293
1770
  return captured;
1771
+ if (signal?.aborted === true)
1772
+ return err(new AnalysisCancelledError(operation, { cause: signal.reason }));
1294
1773
  const dimensions = parsePngDimensions(captured.value.stdout);
1295
1774
  if (dimensions.width === null)
1296
1775
  return err(new AnalysisProtocolError("screencap did not return a PNG payload; the device may not expose a display"));
1297
- try {
1298
- await writeFile(localPath, captured.value.stdout, { flag: "wx" });
1299
- }
1300
- catch (cause) {
1301
- return err(new AnalysisOutputError(operation, `The screen output could not be created exclusively: ${localPath}`, { cause }));
1302
- }
1303
- const sha256 = createHash("sha256")
1304
- .update(captured.value.stdout)
1305
- .digest("hex");
1306
- return ok(createAnalysisExecution({
1307
- client,
1308
- serial: input.serial,
1309
- local_path: localPath,
1310
- bytes: captured.value.stdout.byteLength,
1311
- sha256,
1312
- width: dimensions.width,
1313
- height: dimensions.height,
1314
- }, provider, {
1315
- limitations: [
1316
- "The capture is one frame at read time; no recording or interaction occurred",
1317
- ],
1318
- }));
1776
+ return this.#withRuntimeRoot(operation, { serial: input.serial, output_directory: directory.value }, { parent: directory.value, prefix: ".rea-screen-" }, signal, async (stage, resources) => {
1777
+ let publicationCloseFailure;
1778
+ let usedExclusiveFallback = false;
1779
+ try {
1780
+ const stagedPath = join(stage.path, "screen.png");
1781
+ await writeFile(stagedPath, captured.value.stdout, { flag: "wx" });
1782
+ await syncStagedAdbFile(stagedPath, resources, operation);
1783
+ if (signal?.aborted === true)
1784
+ return err(new AnalysisCancelledError(operation, { cause: signal.reason }));
1785
+ try {
1786
+ // A same-filesystem hard link atomically publishes without replacing
1787
+ // caller output. Its success is the publication cutoff.
1788
+ await link(stagedPath, localPath);
1789
+ }
1790
+ catch (cause) {
1791
+ if (!hardLinksUnsupported(cause))
1792
+ throw cause;
1793
+ // Exclusive creation prevents replacement, but makes the path
1794
+ // visible while the fallback writes the complete file.
1795
+ usedExclusiveFallback = true;
1796
+ publicationCloseFailure =
1797
+ (await publishScreenExclusively(localPath, captured.value.stdout, resources, operation, signal)) ?? undefined;
1798
+ }
1799
+ }
1800
+ catch (cause) {
1801
+ if (cause instanceof AnalysisError)
1802
+ return err(cause);
1803
+ return err(new AnalysisOutputError(operation, `The screen output could not be published exclusively: ${localPath}`, { cause }));
1804
+ }
1805
+ const sha256 = createHash("sha256")
1806
+ .update(captured.value.stdout)
1807
+ .digest("hex");
1808
+ const completed = createAnalysisExecution({
1809
+ client,
1810
+ serial: input.serial,
1811
+ local_path: localPath,
1812
+ bytes: captured.value.stdout.byteLength,
1813
+ sha256,
1814
+ width: dimensions.width,
1815
+ height: dimensions.height,
1816
+ }, provider, {
1817
+ limitations: [
1818
+ "The capture is one frame at read time; no recording or interaction occurred",
1819
+ ...(usedExclusiveFallback
1820
+ ? [
1821
+ "The exclusive-create fallback makes the output path visible while its bytes are being written",
1822
+ ]
1823
+ : []),
1824
+ ],
1825
+ });
1826
+ if (publicationCloseFailure !== undefined) {
1827
+ const cleanupError = this.#cleanupError(operation, { serial: input.serial, output_directory: directory.value }, [publicationCloseFailure.cause], [publicationCloseFailure.resource], completed);
1828
+ publicationCloseFailure.bindCleanupError(cleanupError);
1829
+ return err(cleanupError);
1830
+ }
1831
+ return ok(completed);
1832
+ });
1319
1833
  }
1320
1834
  async collectBugreport(operation, selection, client, provider, input, signal) {
1321
1835
  const directory = await prepareOutputDirectory(operation, input.output_directory);
@@ -1377,7 +1891,7 @@ export class AdbProvider {
1377
1891
  ...retainedObservation,
1378
1892
  result: { ...retainedObservation.result, local_path: publishedPath },
1379
1893
  };
1380
- const digest = await hashAdbFile(publishedPath, operation, signal);
1894
+ const digest = await hashAdbFile(publishedPath, operation, signal, this.#resources);
1381
1895
  const report = {
1382
1896
  client,
1383
1897
  serial: input.serial,
@@ -1398,6 +1912,11 @@ export class AdbProvider {
1398
1912
  }));
1399
1913
  }
1400
1914
  catch (cause) {
1915
+ const cleanupError = retainedObservation === undefined
1916
+ ? undefined
1917
+ : adbDigestError(cause, operation, retainedObservation);
1918
+ if (cleanupError !== undefined)
1919
+ return err(cleanupError);
1401
1920
  if (cause instanceof AnalysisCancelledError) {
1402
1921
  if (retainedObservation !== undefined)
1403
1922
  cause.retainPartialObservation(retainedObservation);
@@ -1419,14 +1938,12 @@ export class AdbProvider {
1419
1938
  : collectedResult.error;
1420
1939
  if (retainedObservation !== undefined)
1421
1940
  primary.retainPartialObservation(retainedObservation);
1422
- this.#pendingOutputDirectoryCleanup.add({
1941
+ return err(this.#retainOutputDirectoryCleanup({
1423
1942
  operation,
1424
1943
  path: stagingDirectory,
1425
- identity: stagingIdentity,
1426
1944
  primary,
1427
1945
  remove: () => removeOwnedOutputDirectory(stagingDirectory, stagingIdentity),
1428
- });
1429
- return err(analysisErrorWithCleanupFailure(primary, new ProviderCleanupError(ADB_PROVIDER_IDENTITY.id, [stagingDirectory], { reason: cause instanceof Error ? cause.message : String(cause) }, { operation, cause }), operation));
1946
+ }, new ProviderCleanupError(ADB_PROVIDER_IDENTITY.id, [stagingDirectory], { reason: cause instanceof Error ? cause.message : String(cause) }, { operation, cause })));
1430
1947
  }
1431
1948
  return collectedResult;
1432
1949
  }