rea-agents 6.2.0 → 6.4.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 (636) hide show
  1. package/README.md +24 -23
  2. package/bridge/ghidra/ReaGhidraApplySeeds.java +151 -0
  3. package/bridge/ghidra/ReaGhidraBridge.java +597 -209
  4. package/bridge/ghidra/ReaGhidraNoReturnFix.java +123 -0
  5. package/bridge/hopper_bridge.py +2 -0
  6. package/dist/adb/AdbConfiguration.js +88 -0
  7. package/dist/adb/AdbDeviceOutput.js +186 -0
  8. package/dist/adb/AdbProvider.js +1190 -0
  9. package/dist/adb/AdbShellOutput.js +309 -0
  10. package/dist/android/AndroidTargetSnapshot.js +104 -22
  11. package/dist/android/JadxConfiguration.js +44 -24
  12. package/dist/android/JadxProvider.js +59 -21
  13. package/dist/android/JadxSession.js +51 -9
  14. package/dist/apktool/ApktoolConfiguration.js +84 -0
  15. package/dist/apktool/ApktoolDecodeOutput.js +59 -0
  16. package/dist/apktool/ApktoolProvider.js +506 -0
  17. package/dist/application/AnalysisProvider.js +8 -2
  18. package/dist/application/AppBundleExecutable.js +27 -22
  19. package/dist/application/BinaryTargetResolver.js +85 -19
  20. package/dist/application/BrowserScenarioEvidence.js +2 -2
  21. package/dist/application/CapabilityInventory.js +11 -1
  22. package/dist/application/ClientConfigurationDocument.js +98 -0
  23. package/dist/application/ClientConfigurationFiles.js +91 -0
  24. package/dist/application/ClientRegistrationEnvironment.js +35 -0
  25. package/dist/application/ClientRegistrationStatus.js +75 -27
  26. package/dist/application/DirectAnalysis.js +14 -8
  27. package/dist/application/DirectAnalysisCleanup.js +1 -2
  28. package/dist/application/DirectAnalysisStatus.js +3 -6
  29. package/dist/application/Doctor.js +27 -34
  30. package/dist/application/DoctorDiagnostics.js +1 -1
  31. package/dist/application/EvidenceBundleCommands.js +6 -12
  32. package/dist/application/EvidenceBundleFiles.js +1 -1
  33. package/dist/application/GeminiClientSettings.js +139 -0
  34. package/dist/application/HermesClientHome.js +115 -0
  35. package/dist/application/HopperDownload.js +39 -0
  36. package/dist/application/InvestigationProviders.js +10 -4
  37. package/dist/application/JsonFiles.js +16 -15
  38. package/dist/application/JsonInputFile.js +252 -0
  39. package/dist/application/LinuxHopper.js +6 -13
  40. package/dist/application/MacHopper.js +172 -149
  41. package/dist/application/MipsElfAbiFlags.js +140 -0
  42. package/dist/application/ProviderOperationExecution.js +31 -0
  43. package/dist/application/ReconstructionObligationCandidates.js +16 -3
  44. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
  45. package/dist/application/ReferenceSourceImport.js +76 -29
  46. package/dist/application/ReferenceSourceImportEntries.js +18 -9
  47. package/dist/application/ReferenceSourceImportPolicy.js +99 -23
  48. package/dist/application/ReferenceSourceImportTypes.js +30 -22
  49. package/dist/application/ReferenceSourceVcsAdapter.js +145 -30
  50. package/dist/application/RegularFileRead.js +103 -0
  51. package/dist/application/Setup.js +69 -10
  52. package/dist/application/SetupClientConfiguration.js +134 -23
  53. package/dist/application/SetupHost.js +102 -22
  54. package/dist/application/SetupPlan.js +18 -17
  55. package/dist/application/SetupSkill.js +81 -13
  56. package/dist/application/SupportedClients.js +305 -37
  57. package/dist/application/Uninstall.js +172 -8
  58. package/dist/application/UpdateMaintenance.js +23 -23
  59. package/dist/application/Utf8JsonInput.js +71 -0
  60. package/dist/application/WebScriptExportService.js +130 -57
  61. package/dist/application/WebSourceLocationService.js +3 -0
  62. package/dist/application/adb/AdbDeviceAnalysisPort.js +1 -0
  63. package/dist/application/adb/AdbDeviceAnalysisService.js +13 -0
  64. package/dist/application/analysisView/AnalysisViewService.js +40 -2
  65. package/dist/application/android/AndroidAnalysisService.js +1 -1
  66. package/dist/application/apktool/ApktoolResourceAnalysisPort.js +1 -0
  67. package/dist/application/apktool/ApktoolResourceAnalysisService.js +13 -0
  68. package/dist/application/binary/AnalysisClientCleanup.js +0 -24
  69. package/dist/application/binary/AnalysisSnapshotCache.js +5 -4
  70. package/dist/application/binary/BinarySession.js +18 -1
  71. package/dist/application/binary/BinarySessionOpen.js +9 -1
  72. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +2 -1
  73. package/dist/application/binaryDiagnostics/PeResourcesPort.js +1 -0
  74. package/dist/application/binaryDiagnostics/PeResourcesService.js +111 -0
  75. package/dist/application/binaryDiagnostics/RecordedCrashService.js +2 -1
  76. package/dist/application/evm/EvmInterfaceService.js +3 -0
  77. package/dist/application/firmware/FirmwareAnalysisService.js +3 -0
  78. package/dist/application/investigation/InspectEvidenceBundle.js +18 -0
  79. package/dist/application/javascript/ElectronActiveEvidence.js +2 -2
  80. package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
  81. package/dist/application/javascript/ElectronBoundaryGraphContext.js +3 -2
  82. package/dist/application/javascript/ElectronBoundaryGraphIpc.js +2 -2
  83. package/dist/application/javascript/ElectronBoundaryGraphNative.js +20 -3
  84. package/dist/application/javascript/ElectronBoundaryGraphWindows.js +3 -3
  85. package/dist/application/javascript/JavaScriptApplicationEvidence.js +1 -0
  86. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
  87. package/dist/application/javascript/JavaScriptApplicationService.js +23 -11
  88. package/dist/application/javascript/JavaScriptApplicationWorkflowEvidence.js +5 -6
  89. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
  90. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +171 -36
  91. package/dist/application/javascript/JavaScriptArtifactGraphAccumulator.js +14 -16
  92. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +74 -36
  93. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +4 -3
  94. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +11 -5
  95. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +53 -42
  96. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +92 -10
  97. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +293 -238
  98. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +120 -28
  99. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +4 -0
  100. package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
  101. package/dist/application/javascript/JavaScriptModuleRelationships.js +10 -20
  102. package/dist/application/javascript/JavaScriptRecoveryService.js +3 -0
  103. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
  104. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +11 -5
  105. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +206 -66
  106. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -1
  107. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +18 -23
  108. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +5 -2
  109. package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
  110. package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
  111. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +7 -5
  112. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +6 -4
  113. package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
  114. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +1 -1
  115. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +29 -15
  116. package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
  117. package/dist/application/jeb/JebAnalysisPort.js +1 -0
  118. package/dist/application/jeb/JebAnalysisService.js +13 -0
  119. package/dist/application/managed/ManagedApplicationGraphService.js +1 -1
  120. package/dist/application/native/NativeCallRoutes.js +2 -4
  121. package/dist/application/native/NativeUiActionTrace.js +16 -8
  122. package/dist/application/native/NativeValueTrace.js +23 -6
  123. package/dist/application/process/ProcessCli.js +25 -20
  124. package/dist/artifacts/ArtifactPaths.js +129 -8
  125. package/dist/artifacts/ArtifactProvider.js +34 -31
  126. package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
  127. package/dist/artifacts/ArtifactReader.js +23 -0
  128. package/dist/artifacts/ArtifactResourceScope.js +100 -0
  129. package/dist/artifacts/AsarArtifactReader.js +218 -80
  130. package/dist/artifacts/AsarHeader.js +24 -0
  131. package/dist/artifacts/DirectoryArtifactReader.js +168 -65
  132. package/dist/artifacts/MachOSliceArtifactReader.js +116 -39
  133. package/dist/artifacts/NativeDmgArtifactReader.js +179 -87
  134. package/dist/artifacts/NativeDmgOwnership.js +109 -0
  135. package/dist/artifacts/SafeOutputTree.js +245 -70
  136. package/dist/artifacts/SafeOutputTreeCleanup.js +45 -0
  137. package/dist/artifacts/SafeOutputTreeCreationFailure.js +20 -0
  138. package/dist/artifacts/SafeOutputTreeIdentity.js +42 -0
  139. package/dist/artifacts/SafeOutputTreeReadback.js +33 -0
  140. package/dist/artifacts/ZipArtifactReader.js +77 -27
  141. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +58 -18
  142. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +62 -24
  143. package/dist/artifacts/apple/KeyedArchiveReader.js +76 -49
  144. package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
  145. package/dist/artifacts/extraction/ArtifactExtraction.js +134 -92
  146. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +116 -50
  147. package/dist/artifacts/inventory/ArtifactInventory.js +5 -4
  148. package/dist/artifacts/inventory/classify.js +87 -25
  149. package/dist/artifacts/inventory/hashStableRootArtifact.js +70 -0
  150. package/dist/artifacts/inventory/reader.js +13 -5
  151. package/dist/artifacts/inventory/scanCanonical.js +73 -30
  152. package/dist/artifacts/inventory/scanReader.js +43 -20
  153. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +72 -28
  154. package/dist/artifacts/javascript/JavaScriptSourceAnalysis.js +3 -0
  155. package/dist/browser/BrowserScenarioPartialObservation.js +8 -2
  156. package/dist/browser/BrowserScenarioSecrets.js +52 -37
  157. package/dist/browser/CdpBrowserProvider.js +9 -3
  158. package/dist/browser/CdpCaptureDocuments.js +40 -6
  159. package/dist/browser/CdpCaptureDomSvg.js +210 -0
  160. package/dist/browser/CdpCaptureEventBodyShapes.js +4 -8
  161. package/dist/browser/CdpCaptureEventHandlers.js +26 -9
  162. package/dist/browser/CdpCaptureEvents.js +4 -9
  163. package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
  164. package/dist/browser/CdpConnection.js +22 -5
  165. package/dist/browser/CdpElectronInspection.js +2 -2
  166. package/dist/browser/CdpElectronProvider.js +4 -3
  167. package/dist/browser/CdpElectronScripts.js +2 -2
  168. package/dist/browser/CdpPageCapture.js +1 -1
  169. package/dist/browser/CdpTargetSession.js +30 -34
  170. package/dist/browser/CdpWebMcpDiscovery.js +48 -23
  171. package/dist/browser/ElectronFileScope.js +99 -9
  172. package/dist/browser/PlaywrightBrowserScenarioProvider.js +63 -7
  173. package/dist/browser/PlaywrightElectronActiveProvider.js +11 -6
  174. package/dist/browser/PlaywrightScenarioArtifacts.js +5 -5
  175. package/dist/browser/PlaywrightScenarioBrowser.js +208 -43
  176. package/dist/browser/PlaywrightScenarioSession.js +130 -65
  177. package/dist/browser/PlaywrightScenarioStorage.js +507 -0
  178. package/dist/browser/PngVisualDiff.js +198 -29
  179. package/dist/browser/WebSourceMapFetcher.js +35 -9
  180. package/dist/browser/assets/LocalWebScriptArtifacts.js +3 -1
  181. package/dist/browser/assets/PublishWebScripts.js +75 -20
  182. package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
  183. package/dist/browser/assets/WebArtifactReads.js +23 -1
  184. package/dist/browser/assets/WebSourceLocationArtifacts.js +1 -0
  185. package/dist/browser/execution/CdpExecutionCapture.js +3 -3
  186. package/dist/browser/execution/CdpPreciseCoverage.js +5 -8
  187. package/dist/browser/history/HarCapture.js +14 -0
  188. package/dist/browser/history/HarCaptureProcess.js +2 -10
  189. package/dist/browser/history/MitmproxyCaptureAdapter.js +3 -1
  190. package/dist/browser/modules/WebModuleArtifacts.js +1 -0
  191. package/dist/cli/adbCommands.js +337 -0
  192. package/dist/cli/analysisViewCommands.js +39 -1
  193. package/dist/cli/apktoolCommands.js +53 -0
  194. package/dist/cli/artifactCommands.js +8 -11
  195. package/dist/cli/binaryDiagnosticsCommands.js +19 -1
  196. package/dist/cli/browserAdvancedCommands.js +65 -36
  197. package/dist/cli/coreAnalysisCommands.js +2 -2
  198. package/dist/cli/coreBinaryCommands.js +12 -13
  199. package/dist/cli/coreNativeCommands.js +1 -14
  200. package/dist/cli/electronCommands.js +14 -10
  201. package/dist/cli/evmCommands.js +13 -4
  202. package/dist/cli/firmwareCommands.js +7 -2
  203. package/dist/cli/javascriptApplicationAnalysis.js +19 -13
  204. package/dist/cli/javascriptRecoveryCommands.js +22 -15
  205. package/dist/cli/jebCommands.js +99 -0
  206. package/dist/cli/jsonOutput.js +12 -4
  207. package/dist/cli/referenceSourceImportStatus.js +7 -0
  208. package/dist/cli/setupCommands.js +15 -3
  209. package/dist/cli/streamedJsonOutput.js +83 -4
  210. package/dist/cli/utilityCommands.js +68 -22
  211. package/dist/cli/webScriptCommands.js +20 -1
  212. package/dist/cli/webSourceLocationCommands.js +21 -9
  213. package/dist/cli.js +11 -2
  214. package/dist/cliBrowserScenarioCommands.js +2 -1
  215. package/dist/cliCommandNames.js +32 -0
  216. package/dist/cliJsonInput.js +47 -34
  217. package/dist/cliObservationOptions.js +7 -0
  218. package/dist/composition/adb.js +3 -0
  219. package/dist/composition/apktool.js +3 -0
  220. package/dist/composition/auxiliaryAnalysisProviders.js +5 -4
  221. package/dist/composition/binaryDiagnostics.js +4 -0
  222. package/dist/composition/browserScenario.js +2 -2
  223. package/dist/composition/directAnalysis.js +14 -7
  224. package/dist/composition/javascriptAnalysisWorkerProcess.js +48 -0
  225. package/dist/composition/jeb.js +6 -0
  226. package/dist/config/environment.js +10 -0
  227. package/dist/config/ghidraLanguageOverride.js +9 -0
  228. package/dist/config/mcpInputSchemaProfile.js +27 -0
  229. package/dist/config/parseConfig.js +28 -1
  230. package/dist/contracts/adb/adbToolContracts.js +353 -0
  231. package/dist/contracts/advertisedInputExamples.js +48 -0
  232. package/dist/contracts/analysisDetail.js +10 -0
  233. package/dist/contracts/analysisViewToolContracts.js +17 -2
  234. package/dist/contracts/apktool/apktoolToolContracts.js +33 -0
  235. package/dist/contracts/artifactComparisonExample.js +5 -5
  236. package/dist/contracts/artifactToolContracts.js +8 -5
  237. package/dist/contracts/browserToolContracts.js +1 -1
  238. package/dist/contracts/compactInputSchema.js +256 -0
  239. package/dist/contracts/errorSchemas.js +3 -1
  240. package/dist/contracts/functionComparisonExample.js +8 -0
  241. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  242. package/dist/contracts/inputSchemaPresentation.js +104 -13
  243. package/dist/contracts/javascript/electronToolContracts.js +16 -3
  244. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -2
  245. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +6 -3
  246. package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +1 -1
  247. package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
  248. package/dist/contracts/jeb/jebToolContracts.js +64 -0
  249. package/dist/contracts/managed/managedToolContracts.js +3 -2
  250. package/dist/contracts/mobileApplicationGraphExamples.js +5 -5
  251. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +25 -3
  252. package/dist/contracts/native/nativeToolContracts.js +1 -1
  253. package/dist/contracts/officialToolContracts.js +5 -5
  254. package/dist/contracts/sessionLifecycleInputs.js +4 -3
  255. package/dist/contracts/sessionStatusContract.js +3 -2
  256. package/dist/contracts/sessionToolContracts.js +5 -4
  257. package/dist/contracts/sessionToolSchemas.js +9 -4
  258. package/dist/contracts/toolContractExamples.js +6 -0
  259. package/dist/contracts/toolContractTypes.js +3 -0
  260. package/dist/contracts/toolContracts.js +6 -0
  261. package/dist/contracts/toolEffects.js +167 -0
  262. package/dist/contracts/toolOutputSchemaGroups.js +7 -5
  263. package/dist/contracts/toolOutputSchemaPrimitives.js +2 -5
  264. package/dist/contracts/toolSchemaMetadata.js +82 -7
  265. package/dist/domain/adb/adbDeviceAnalysis.js +583 -0
  266. package/dist/domain/analysisErrorBase.js +5 -0
  267. package/dist/domain/analysisErrorCleanup.js +29 -0
  268. package/dist/domain/analysisErrorPresentation.js +18 -4
  269. package/dist/domain/analysisErrorProjection.js +4 -1
  270. package/dist/domain/analysisSnapshot.js +5 -2
  271. package/dist/domain/analysisView/analysisView.js +53 -5
  272. package/dist/domain/analysisView/binaryLayoutView.js +2 -0
  273. package/dist/domain/analysisView/javascriptApplicationView.js +2 -0
  274. package/dist/domain/analysisView/nativeFunctionView.js +155 -0
  275. package/dist/domain/android/androidApplication.js +25 -20
  276. package/dist/domain/android/androidPartialObservation.js +36 -0
  277. package/dist/domain/apktool/apktoolResourceAnalysis.js +77 -0
  278. package/dist/domain/apple/appleApplication.js +40 -23
  279. package/dist/domain/apple/appleBundleAnatomy.js +95 -28
  280. package/dist/domain/apple/dyldPaths.js +9 -1
  281. package/dist/domain/apple/dylibResolution.js +3 -3
  282. package/dist/domain/apple/interfaceBuilderGraph.js +22 -19
  283. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +10 -1
  284. package/dist/domain/artifactComparison.js +39 -11
  285. package/dist/domain/artifactGraph.js +6 -4
  286. package/dist/domain/artifactIdentity.js +37 -9
  287. package/dist/domain/artifactInspection.js +10 -50
  288. package/dist/domain/artifactIntegrityPolicy.js +10 -0
  289. package/dist/domain/artifactInventoryEvidence.js +16 -17
  290. package/dist/domain/artifactPathSyntax.js +1 -1
  291. package/dist/domain/binaryTarget.js +16 -0
  292. package/dist/domain/binaryTargetTypes.js +8 -1
  293. package/dist/domain/browserCompleteness.js +3 -2
  294. package/dist/domain/browserObservationSchemas.js +8 -4
  295. package/dist/domain/browserScenarioCaptureValues.js +2 -2
  296. package/dist/domain/browserScenarioNormalization.js +3 -3
  297. package/dist/domain/browserScenarioValues.js +3 -2
  298. package/dist/domain/callPath.js +8 -10
  299. package/dist/domain/canonicalDigest.js +7 -1
  300. package/dist/domain/canonicalJsonDigestSteps.js +34 -12
  301. package/dist/domain/canonicalOrdering.js +1 -13
  302. package/dist/domain/changedBehavior.js +2 -3
  303. package/dist/domain/compactStringIdentity.js +9 -0
  304. package/dist/domain/comparisonSemantics.js +0 -5
  305. package/dist/domain/digests.js +0 -3
  306. package/dist/domain/evidence.js +12 -6
  307. package/dist/domain/evidenceBundle.js +51 -33
  308. package/dist/domain/evidenceRecordSummary.js +144 -0
  309. package/dist/domain/firmware/firmwareAnalysis.js +4 -3
  310. package/dist/domain/functionComparison.js +2 -1
  311. package/dist/domain/functionComparisonNormalization.js +4 -3
  312. package/dist/domain/functionComparisonResults.js +2 -2
  313. package/dist/domain/functionDossierEvidence.js +2 -1
  314. package/dist/domain/hopperValues.js +11 -15
  315. package/dist/domain/inputIssueProjection.js +16 -1
  316. package/dist/domain/javascript/electronActiveObservation.js +4 -3
  317. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +14 -15
  318. package/dist/domain/javascript/electronStaticAnalysisIpc.js +20 -21
  319. package/dist/domain/javascript/electronStaticAnalysisNative.js +73 -41
  320. package/dist/domain/javascript/electronStaticAnalysisValues.js +24 -4
  321. package/dist/domain/javascript/javascriptAnalysisResourceControls.js +45 -0
  322. package/dist/domain/javascript/javascriptApplicationAnalysis.js +6 -1
  323. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +18 -14
  324. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +4 -0
  325. package/dist/domain/javascript/javascriptApplicationGraph.js +91 -28
  326. package/dist/domain/javascript/javascriptApplicationProjectionResources.js +35 -0
  327. package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
  328. package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
  329. package/dist/domain/javascript/javascriptApplicationVersionItems.js +72 -45
  330. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +16 -8
  331. package/dist/domain/javascript/javascriptAstFingerprint.js +60 -33
  332. package/dist/domain/javascript/javascriptAstValues.js +54 -0
  333. package/dist/domain/javascript/javascriptElectronMemberWrites.js +50 -0
  334. package/dist/domain/javascript/javascriptExportShapeComparison.js +3 -2
  335. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +31 -23
  336. package/dist/domain/javascript/javascriptExportShapeSelection.js +2 -2
  337. package/dist/domain/javascript/javascriptExportShapeVariants.js +3 -2
  338. package/dist/domain/javascript/javascriptFeatureSeed.js +5 -3
  339. package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
  340. package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
  341. package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -4
  342. package/dist/domain/javascript/javascriptModuleSemanticIr.js +15 -0
  343. package/dist/domain/javascript/javascriptNativeHandoff.js +12 -7
  344. package/dist/domain/javascript/javascriptRpcEndpoints.js +253 -0
  345. package/dist/domain/javascript/javascriptRuntimeLoadState.js +1 -3
  346. package/dist/domain/javascript/javascriptRuntimeObservation.js +8 -5
  347. package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
  348. package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
  349. package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
  350. package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +12 -6
  351. package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
  352. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +5 -5
  353. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -223
  354. package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
  355. package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
  356. package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
  357. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +15 -17
  358. package/dist/domain/javascript/javascriptSemanticAnalysis.js +379 -30
  359. package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
  360. package/dist/domain/javascript/javascriptSemanticCallableResults.js +42 -0
  361. package/dist/domain/javascript/javascriptSemanticCalls.js +8 -1
  362. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -2
  363. package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
  364. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
  365. package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
  366. package/dist/domain/javascript/javascriptSemanticDerivedAnalysis.js +15 -4
  367. package/dist/domain/javascript/javascriptSemanticFileProjection.js +1 -0
  368. package/dist/domain/javascript/javascriptSemanticFingerprints.js +43 -42
  369. package/dist/domain/javascript/javascriptSemanticGraph.js +205 -52
  370. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +21 -11
  371. package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
  372. package/dist/domain/javascript/javascriptSemanticIterationSources.js +139 -0
  373. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +774 -136
  374. package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
  375. package/dist/domain/javascript/javascriptSemanticMutationValues.js +98 -41
  376. package/dist/domain/javascript/javascriptSemanticObjectReferences.js +381 -0
  377. package/dist/domain/javascript/javascriptSemanticObjects.js +9 -7
  378. package/dist/domain/javascript/javascriptSemanticPrimitives.js +7 -2
  379. package/dist/domain/javascript/javascriptSemanticProjection.js +72 -28
  380. package/dist/domain/javascript/javascriptSemanticPromises.js +15 -21
  381. package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +100 -0
  382. package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
  383. package/dist/domain/javascript/javascriptSemanticQuery.js +33 -29
  384. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +4 -5
  385. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
  386. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
  387. package/dist/domain/javascript/javascriptSemanticReturnedReferences.js +219 -0
  388. package/dist/domain/javascript/javascriptSemanticReturns.js +34 -48
  389. package/dist/domain/javascript/javascriptSemanticState.js +22 -2
  390. package/dist/domain/javascript/javascriptSemanticTraversal.js +25 -2
  391. package/dist/domain/javascript/javascriptSemanticValues.js +169 -30
  392. package/dist/domain/javascript/javascriptSourceAnalysis.js +1 -0
  393. package/dist/domain/javascript/javascriptSourceMapPaths.js +11 -1
  394. package/dist/domain/javascript/javascriptSourceParser.js +34 -9
  395. package/dist/domain/javascript/javascriptStaticAnalysis.js +29 -17
  396. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +13 -12
  397. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +49 -5
  398. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +8 -4
  399. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -15
  400. package/dist/domain/javascript/javascriptStaticAnalysisState.js +1 -0
  401. package/dist/domain/javascript/sourceToBundleComparison.js +7 -5
  402. package/dist/domain/javascript/sourceToBundleSignals.js +7 -7
  403. package/dist/domain/jeb/jebAnalysis.js +114 -0
  404. package/dist/domain/jsonSerialization.js +109 -55
  405. package/dist/domain/jsonShape.js +69 -31
  406. package/dist/domain/jsonValue.js +3 -0
  407. package/dist/domain/localPath.js +10 -4
  408. package/dist/domain/managed/managedApplicationGraph.js +47 -6
  409. package/dist/domain/managed/managedApplicationGraphCoverage.js +8 -2
  410. package/dist/domain/managed/managedApplicationGraphNodes.js +94 -59
  411. package/dist/domain/managed/managedArtifact.js +1 -0
  412. package/dist/domain/managed/managedInspectionEvidence.js +13 -0
  413. package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
  414. package/dist/domain/native/nativeAotPe.js +1408 -0
  415. package/dist/domain/native/nativeCallObservation.js +2 -4
  416. package/dist/domain/native/nativeInstruction.js +21 -0
  417. package/dist/domain/native/nativeMetadataRecovery.js +79 -6
  418. package/dist/domain/native/nativeValueFlow.js +5 -11
  419. package/dist/domain/native/objcSwiftMetadata.js +15 -17
  420. package/dist/domain/native/peResources.js +94 -0
  421. package/dist/domain/nativeConvention.js +33 -0
  422. package/dist/domain/process/processCapture.js +102 -11
  423. package/dist/domain/process/processCaptureCoverage.js +8 -5
  424. package/dist/domain/process/processCaptureExample.js +67 -0
  425. package/dist/domain/process/processCaptureValidation.js +83 -3
  426. package/dist/domain/process/processComparison.js +0 -23
  427. package/dist/domain/process/processScenario.js +62 -10
  428. package/dist/domain/process/processTraceEvaluation.js +4 -4
  429. package/dist/domain/process/processTraceSpecification.js +1 -3
  430. package/dist/domain/propertyListKeys.js +3 -1
  431. package/dist/domain/providerCleanupError.js +6 -2
  432. package/dist/domain/reconstructionCoverage.js +2 -1
  433. package/dist/domain/reconstructionUnknowns.js +4 -3
  434. package/dist/domain/reconstructionVerification.js +3 -2
  435. package/dist/domain/referenceSourceGraph.js +32 -23
  436. package/dist/domain/referenceSourceImportParsing.js +40 -48
  437. package/dist/domain/referenceSourcePathIdentity.js +22 -0
  438. package/dist/domain/referenceSourceRequireBindings.js +137 -0
  439. package/dist/domain/residualUnknown.js +3 -2
  440. package/dist/domain/staticRuntimeCorrelation.js +2 -1
  441. package/dist/domain/swiftSymbolClassification.js +6 -1
  442. package/dist/domain/symbolAnalysis.js +17 -2
  443. package/dist/domain/unicodeCodePointOrder.js +6 -0
  444. package/dist/domain/webBundleAnalyzerInspection.js +23 -3
  445. package/dist/domain/webCaptureDiff.js +170 -30
  446. package/dist/domain/webCaptureDiffSchemas.js +2 -8
  447. package/dist/domain/webInventory.js +3 -2
  448. package/dist/domain/webMcpDiscovery.js +4 -3
  449. package/dist/domain/webScriptExport.js +1 -1
  450. package/dist/domain/webScriptExportError.js +10 -4
  451. package/dist/domain/webScriptExportPlan.js +7 -13
  452. package/dist/domain/zipPackageFormat.js +4 -1
  453. package/dist/domain/zodCollectionSteps.js +24 -0
  454. package/dist/dotnet/ManagedArtifactInspector.js +55 -43
  455. package/dist/dotnet/ManagedDecodeBudget.js +80 -0
  456. package/dist/dotnet/ManagedMemberInspector.js +13 -6
  457. package/dist/dotnet/ManagedMemberInspectorCore.js +2 -2
  458. package/dist/dotnet/ManagedMemberInstructionDecoder.js +5 -4
  459. package/dist/dotnet/ManagedMemberRows.js +9 -4
  460. package/dist/dotnet/ManagedMetadataHeaps.js +15 -5
  461. package/dist/dotnet/ManagedMetadataInventoryRows.js +20 -11
  462. package/dist/dotnet/ManagedMetadataLayout.js +10 -4
  463. package/dist/dotnet/ManagedMethodBodyReader.js +8 -3
  464. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +3 -2
  465. package/dist/dotnet/ManagedNativeBoundaryInspector.js +49 -34
  466. package/dist/dotnet/ManagedPeReader.js +41 -25
  467. package/dist/dotnet/ManagedReaderFailure.js +2 -1
  468. package/dist/dotnet/ManagedStaticProvider.js +65 -31
  469. package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
  470. package/dist/evaluation/AgentEvaluationReport.js +9 -5
  471. package/dist/evaluation/CodexAgentEval.js +43 -13
  472. package/dist/evm/EvmoleFailures.js +0 -2
  473. package/dist/evm/EvmoleInterfaceProvider.js +67 -2
  474. package/dist/filesystem/OwnedDirectoryHandle.js +29 -0
  475. package/dist/filesystem/OwnedFileHandle.js +36 -0
  476. package/dist/filesystem/RegularFile.js +73 -0
  477. package/dist/filesystem/StableFileHash.js +46 -0
  478. package/dist/filesystem/readFileHandleChunks.js +26 -0
  479. package/dist/firmware/FirmwareCommand.js +25 -3
  480. package/dist/firmware/FirmwareFiles.js +23 -8
  481. package/dist/firmware/FirmwareProvider.js +156 -32
  482. package/dist/firmware/FirmwarePublication.js +24 -3
  483. package/dist/firmware/FirmwareRelease.js +1 -0
  484. package/dist/generatedPackageMetadata.js +2 -2
  485. package/dist/ghidra/GhidraAnalysisProfile.js +55 -4
  486. package/dist/ghidra/GhidraAnalysisSeeds.js +211 -0
  487. package/dist/ghidra/GhidraClient.js +90 -8
  488. package/dist/ghidra/GhidraDiagnostics.js +11 -8
  489. package/dist/ghidra/GhidraFunctionValues.js +26 -2
  490. package/dist/ghidra/GhidraInstallation.js +111 -10
  491. package/dist/ghidra/GhidraInventoryValues.js +23 -1
  492. package/dist/ghidra/GhidraLanguageCatalog.js +99 -0
  493. package/dist/ghidra/GhidraLauncher.js +123 -58
  494. package/dist/ghidra/GhidraLoadImageAttest.js +49 -2
  495. package/dist/ghidra/GhidraMipsProfile.js +79 -0
  496. package/dist/ghidra/GhidraProvider.js +57 -9
  497. package/dist/ghidra/GhidraProviderCapabilities.js +18 -8
  498. package/dist/ghidra/GhidraProviderClient.js +282 -21
  499. package/dist/ghidra/GhidraSessionValues.js +9 -2
  500. package/dist/hopper/HopperAnalysisProfile.js +2 -0
  501. package/dist/hopper/HopperCleanup.js +1 -1
  502. package/dist/hopper/HopperClient.js +15 -6
  503. package/dist/hopper/HopperMachOImage.js +2 -0
  504. package/dist/hopper/HopperProvider.js +13 -2
  505. package/dist/ida/IdaOperationRunner.js +10 -2
  506. package/dist/ida/IdaProvider.js +7 -0
  507. package/dist/ida/IdaSessionClient.js +7 -3
  508. package/dist/ida/IdaWorkspace.js +4 -2
  509. package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
  510. package/dist/inspector/V8InspectorCaptureProjection.js +46 -13
  511. package/dist/inspector/V8InspectorProvider.js +60 -8
  512. package/dist/javascript/analysis/JavaScriptAnalysisTransfer.js +326 -0
  513. package/dist/javascript/analysis/JavaScriptAnalysisWorker.js +520 -0
  514. package/dist/javascript/analysis/JavaScriptAnalysisWorkerProtocol.js +63 -0
  515. package/dist/javascript/analysis/JavaScriptAnalysisWorkerSchemas.js +521 -0
  516. package/dist/javascript/analysis/JavaScriptAnalysisWorkerServer.js +116 -0
  517. package/dist/javascript/recovery/RecoveryFiles.js +18 -7
  518. package/dist/javascript/recovery/WakaruCommand.js +22 -9
  519. package/dist/javascript/recovery/WakaruExecution.js +11 -7
  520. package/dist/javascript/recovery/WakaruProvider.js +139 -16
  521. package/dist/javascript/recovery/WakaruPublication.js +14 -4
  522. package/dist/javascript/recovery/WakaruRelease.js +10 -3
  523. package/dist/javascript/recovery/WakaruReport.js +12 -7
  524. package/dist/javascript/recovery/WakaruVersion.js +24 -0
  525. package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -3
  526. package/dist/javascript/sourceMaps/SourceMapDecoder.js +63 -7
  527. package/dist/javascript/sourceMaps/SourceMapFormat.js +15 -4
  528. package/dist/jeb/JebMcpConnection.js +179 -0
  529. package/dist/jeb/JebMcpEndpoint.js +40 -0
  530. package/dist/jeb/JebProvider.js +299 -0
  531. package/dist/main/shutdown.js +76 -32
  532. package/dist/main/transport.js +1 -1
  533. package/dist/mcpDoctor.js +15 -6
  534. package/dist/native/AppleDispatchCoverage.js +25 -12
  535. package/dist/native/AppleDispatchMetadata.js +14 -7
  536. package/dist/native/AppleMachoFixups.js +71 -15
  537. package/dist/native/AppleMachoSelection.js +23 -3
  538. package/dist/native/AppleObjcDispatchFacets.js +3 -3
  539. package/dist/native/AppleObjcProperties.js +17 -7
  540. package/dist/native/LldbCallTracer.js +241 -75
  541. package/dist/native/NativeMacOSProvider.js +100 -20
  542. package/dist/native/NativeMacOSProviderMetadata.js +1 -2
  543. package/dist/native/NativeMachoInspection.js +11 -7
  544. package/dist/native/NativeUiHelperRuntime.js +6 -1
  545. package/dist/native/NativeUiObservation.js +4 -3
  546. package/dist/native/pe/PeResourceLayout.js +120 -0
  547. package/dist/native/pe/PeResourceParser.js +286 -0
  548. package/dist/native/pe/PeResourcesProvider.js +63 -0
  549. package/dist/process/BoundedFileBytes.js +30 -7
  550. package/dist/process/DarwinProcessRunTokenReader.js +8 -3
  551. package/dist/process/OwnedCommand.js +4 -3
  552. package/dist/process/ProcessOwnership.js +104 -112
  553. package/dist/process/ProcessOwnershipObservation.js +104 -51
  554. package/dist/process/ProcessOwnershipProcessTree.js +4 -4
  555. package/dist/process/ProcessRunTokenObservations.js +48 -0
  556. package/dist/process/ProviderDiagnosticRedaction.js +17 -0
  557. package/dist/process/ProviderProcess.js +4 -3
  558. package/dist/process/capture/FilesystemSnapshot.js +116 -22
  559. package/dist/process/capture/ProcessCaptureLifecycle.js +363 -86
  560. package/dist/process/capture/ProcessCaptureProgress.js +62 -0
  561. package/dist/process/capture/ProcessFilesystemEffects.js +19 -4
  562. package/dist/process/capture/ProcessHarness.js +202 -47
  563. package/dist/process/capture/ProcessNormalization.js +3 -1
  564. package/dist/process/capture/ProcessScenarioRuntimeValidation.js +5 -2
  565. package/dist/process/capture/TerminalRenderer.js +24 -7
  566. package/dist/reference/ReferenceSourceReader.js +22 -5
  567. package/dist/reference/ReferenceSourceReaderEntries.js +114 -51
  568. package/dist/reference/ReferenceSourceReaderErrors.js +12 -0
  569. package/dist/reference/ReferenceSourceReaderFile.js +50 -10
  570. package/dist/reference/ReferenceSourceReaderValidate.js +4 -4
  571. package/dist/server/EvidenceMcpServer.js +36 -1
  572. package/dist/server/admittedToolOperation.js +9 -0
  573. package/dist/server/analysisAdmission.js +8 -0
  574. package/dist/server/contractToolHandler.js +21 -0
  575. package/dist/server/createServer.js +118 -47
  576. package/dist/server/registerAdbTools.js +36 -0
  577. package/dist/server/registerAnalysisViewTool.js +4 -9
  578. package/dist/server/registerAndroidTools.js +3 -12
  579. package/dist/server/registerApktoolTools.js +14 -0
  580. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -7
  581. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  582. package/dist/server/registerApplicationTools/compareVersions.js +3 -2
  583. package/dist/server/registerApplicationTools/coverage.js +3 -2
  584. package/dist/server/registerApplicationTools/helpers.js +3 -2
  585. package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
  586. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -2
  587. package/dist/server/registerApplicationTools/traceFeature.js +3 -2
  588. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  589. package/dist/server/registerArtifactComparisonTool.js +5 -2
  590. package/dist/server/registerArtifactTools.js +2 -2
  591. package/dist/server/registerBinaryDiagnosticsTools.js +16 -4
  592. package/dist/server/registerBrowserScenarioTool.js +10 -7
  593. package/dist/server/registerBrowserTools.js +12 -9
  594. package/dist/server/registerBundleComparisonTool.js +16 -2
  595. package/dist/server/registerCloseLifecycleTool.js +36 -5
  596. package/dist/server/registerElectronTools.js +28 -10
  597. package/dist/server/registerEnhancedTools.js +78 -73
  598. package/dist/server/registerEvidenceTools.js +54 -46
  599. package/dist/server/registerEvmTools.js +4 -9
  600. package/dist/server/registerFirmwareTools.js +3 -11
  601. package/dist/server/registerFunctionComparisonTool.js +5 -2
  602. package/dist/server/registerJavaScriptRecoveryTool.js +4 -9
  603. package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -6
  604. package/dist/server/registerJebTools.js +16 -0
  605. package/dist/server/registerManagedTools.js +7 -4
  606. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +4 -6
  607. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -2
  608. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +3 -2
  609. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +3 -2
  610. package/dist/server/registerOfficialTools.js +31 -25
  611. package/dist/server/registerPeResourcesTool.js +9 -0
  612. package/dist/server/registerProcessComparisonTool.js +5 -2
  613. package/dist/server/registerRecordedCrashTools.js +4 -9
  614. package/dist/server/registerSessionRecordTools.js +2 -1
  615. package/dist/server/registerSessionTools.js +58 -21
  616. package/dist/server/registerWebModuleTool.js +4 -9
  617. package/dist/server/registerWebNetworkCaptureTool.js +4 -9
  618. package/dist/server/registerWebRuntimeTools.js +6 -5
  619. package/dist/server/registerWebScriptTool.js +6 -3
  620. package/dist/server/registerWebSourceLocationTool.js +4 -9
  621. package/dist/server/toolResult.js +21 -2
  622. package/dist/windows/WindowsPrivateRuntime.js +12 -5
  623. package/install.sh +7 -4
  624. package/licenses/nativeaot-parser-MIT.txt +28 -0
  625. package/native/windows/build/manifest.json +2 -2
  626. package/native/windows/build/rea-windows-x64.node +0 -0
  627. package/package.json +38 -7
  628. package/scripts/rea.mjs +16 -1
  629. package/skills/reverse-engineer-anything/SKILL.md +52 -51
  630. package/skills/reverse-engineer-anything/references/connection-and-recovery.md +127 -0
  631. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -0
  632. package/skills/reverse-engineer-anything/references/javascript-applications.md +92 -13
  633. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +31 -1
  634. package/dist/artifacts/inventory/policy.js +0 -2
  635. package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
  636. package/dist/server/registerNativeTools.js +0 -6
@@ -6,13 +6,15 @@ import { fileURLToPath } from "node:url";
6
6
  import { z } from "zod";
7
7
  import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisTimeoutError, } from "../domain/analysisErrorCore.js";
8
8
  import { EvidenceIntegrityError } from "../domain/evidenceErrors.js";
9
+ import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
9
10
  import { nativeCallEventSchema, nativeCodeLocationSchema, } from "../domain/native/nativeCallObservation.js";
10
11
  import { ProviderAdapterError } from "../domain/providerAdapterError.js";
12
+ import { ProviderCleanupError } from "../domain/providerCleanupError.js";
11
13
  import { err, ok } from "../domain/result.js";
12
14
  import { safeParseJson } from "../domain/safeJson.js";
13
15
  import { ProviderProcessSupervisor, spawnOwnedProviderProcess, } from "../process/ProviderProcess.js";
14
16
  import { cleanupOwnedProcessGroup } from "../process/ProcessOwnership.js";
15
- import { observeProcessStartIdentity, prepareProcessOwnershipInspection, signalProcessWithStartIdentity, } from "../process/ProcessOwnershipObservation.js";
17
+ import { observeProcessStartIdentity, signalProcessWithStartIdentity, } from "../process/ProcessOwnershipObservation.js";
16
18
  import { ProviderStartupDeadline, waitForAbortableDelay, } from "../process/ProviderDeadline.js";
17
19
  import { PrivateRuntimeRoot } from "../process/PrivateRuntimeRoot.js";
18
20
  import { resolveXcrunTool } from "./CommandRunner.js";
@@ -93,37 +95,147 @@ export class LldbCallTracer {
93
95
  launch;
94
96
  resolveTool;
95
97
  environment;
98
+ #tail = Promise.resolve();
99
+ #pendingCleanup;
96
100
  constructor(environment, launch = runLldb, resolveTool = (tool, signal) => resolveXcrunTool(tool, this.environment, signal)) {
97
101
  this.launch = launch;
98
102
  this.resolveTool = resolveTool;
99
103
  this.environment = snapshotEnvironment(environment);
100
104
  }
101
105
  async trace(request, signal) {
106
+ return this.#serialize(() => this.#trace(request, signal));
107
+ }
108
+ async #trace(request, signal) {
109
+ const pendingCleanup = await this.#retryPendingCleanup();
110
+ if (pendingCleanup !== undefined)
111
+ return err(pendingCleanup);
102
112
  const lldb = await this.resolveTool("lldb", signal);
103
113
  if (!lldb.ok)
104
114
  return err(lldb.error.reason === "cancelled"
105
115
  ? new AnalysisCancelledError(OPERATION)
106
116
  : new AnalysisCapabilityUnavailableError(PROVIDER, OPERATION, LLDB_REQUIREMENT, { userMessage: LLDB_REQUIREMENT }));
107
117
  const root = await PrivateRuntimeRoot.create({ prefix: "rea-lldb-" });
118
+ const paths = lldbRuntimePaths(root.path);
119
+ let result;
108
120
  try {
109
- return await this.#run(lldb.value, root.path, request, signal);
121
+ result = await this.#run(lldb.value, root, request, signal);
110
122
  }
111
- finally {
123
+ catch (cause) {
124
+ const partialObservation = await partialNativeObservation({
125
+ request,
126
+ pidPath: paths.pid,
127
+ stdoutPath: paths.stdoutCapture,
128
+ stderrPath: paths.stderrCapture,
129
+ observationPath: paths.observations,
130
+ version: null,
131
+ reason: "tracer-failure",
132
+ });
133
+ const retained = this.#pendingCleanup;
134
+ const resources = retained === undefined ? [] : await lldbCleanupResources(retained);
135
+ result = err(new ProviderAdapterError(PROVIDER, OPERATION, {
136
+ cause,
137
+ diagnostics: {
138
+ reason: cause instanceof Error ? cause.message : String(cause),
139
+ },
140
+ partialObservation,
141
+ ...(retained === undefined
142
+ ? {}
143
+ : {
144
+ cleanup: {
145
+ reason: "LLDB trace failed while owned resources remain",
146
+ resources,
147
+ },
148
+ }),
149
+ }));
150
+ }
151
+ if (this.#pendingCleanup?.root === root)
152
+ return result;
153
+ try {
112
154
  await root.close();
113
155
  }
156
+ catch (cause) {
157
+ this.#pendingCleanup = {
158
+ root,
159
+ supervisor: undefined,
160
+ pidPath: paths.pid,
161
+ targetIdentity: undefined,
162
+ processStopped: true,
163
+ targetStopped: true,
164
+ };
165
+ const partialObservation = result.ok
166
+ ? partialObservationFromTrace(request, result.value)
167
+ : result.error.partialObservation;
168
+ return err(new ProviderCleanupError(PROVIDER, [root.path], {
169
+ reason: cause instanceof Error ? cause.message : String(cause),
170
+ ...(result.ok
171
+ ? {}
172
+ : {
173
+ execution_failure: projectAnalysisError(result.error).code,
174
+ primary_failure: result.error.message,
175
+ }),
176
+ }, {
177
+ operation: OPERATION,
178
+ cause: result.ok
179
+ ? cause
180
+ : new AggregateError([result.error, cause], "LLDB trace and runtime cleanup both failed"),
181
+ ...(partialObservation === undefined ? {} : { partialObservation }),
182
+ }));
183
+ }
184
+ return result;
114
185
  }
115
- async #run(lldb, directory, request, signal) {
116
- const paths = {
117
- config: join(directory, "config.json"),
118
- result: join(directory, "result.json"),
119
- pid: join(directory, "pid"),
120
- identityAck: join(directory, "identity.ack"),
121
- stdout: join(directory, "stdout"),
122
- stderr: join(directory, "stderr"),
123
- stdoutCapture: join(directory, "stdout.capture"),
124
- stderrCapture: join(directory, "stderr.capture"),
125
- observations: join(directory, "observations.jsonl"),
126
- };
186
+ /** Retry retained LLDB cleanup without abandoning its process or runtime owner. */
187
+ async close() {
188
+ return this.#serialize(() => this.#close());
189
+ }
190
+ async #close() {
191
+ const failure = await this.#retryPendingCleanup();
192
+ return failure === undefined ? ok(null) : err(failure);
193
+ }
194
+ #serialize(operation) {
195
+ const call = this.#tail.then(operation, operation);
196
+ this.#tail = call.then(() => undefined, () => undefined);
197
+ return call;
198
+ }
199
+ async #retryPendingCleanup() {
200
+ const owner = this.#pendingCleanup;
201
+ if (owner === undefined)
202
+ return undefined;
203
+ let firstFailure;
204
+ if (!owner.processStopped) {
205
+ const stopped = await owner.supervisor?.stop();
206
+ if (stopped?.status === "incomplete")
207
+ firstFailure = stopped.reason;
208
+ else {
209
+ owner.supervisor?.dispose();
210
+ owner.processStopped = true;
211
+ }
212
+ }
213
+ if (firstFailure === undefined && !owner.targetStopped) {
214
+ const targetTermination = await ensureTerminated(owner.pidPath, owner.targetIdentity, true);
215
+ if (targetTermination !== "terminated")
216
+ firstFailure = targetTerminationReason(targetTermination);
217
+ else
218
+ owner.targetStopped = true;
219
+ }
220
+ if (firstFailure === undefined) {
221
+ try {
222
+ await owner.root.close();
223
+ this.#pendingCleanup = undefined;
224
+ return undefined;
225
+ }
226
+ catch (cause) {
227
+ firstFailure = cause instanceof Error ? cause.message : String(cause);
228
+ }
229
+ }
230
+ const resources = await lldbCleanupResources(owner);
231
+ return new ProviderCleanupError(PROVIDER, resources, {
232
+ reason: firstFailure ?? "LLDB cleanup remains incomplete",
233
+ resources,
234
+ }, { operation: OPERATION });
235
+ }
236
+ async #run(lldb, root, request, signal) {
237
+ const directory = root.path;
238
+ const paths = lldbRuntimePaths(directory);
127
239
  const { input } = request;
128
240
  await writeFile(paths.config, JSON.stringify({
129
241
  executable: request.executable,
@@ -149,7 +261,6 @@ export class LldbCallTracer {
149
261
  identity_ack_path: paths.identityAck,
150
262
  observation_path: paths.observations,
151
263
  }), { mode: 0o600 });
152
- await prepareProcessOwnershipInspection(signal);
153
264
  const exited = await this.launch(lldb.path, [
154
265
  "--batch",
155
266
  "--no-lldbinit",
@@ -165,16 +276,30 @@ export class LldbCallTracer {
165
276
  environment: this.environment,
166
277
  ...(signal === undefined ? {} : { signal }),
167
278
  });
279
+ const retained = {
280
+ root,
281
+ supervisor: exited.cleanupOwner,
282
+ pidPath: paths.pid,
283
+ targetIdentity: exited.targetIdentity,
284
+ processStopped: exited.cleanupOwner === undefined,
285
+ targetStopped: !exited.targetLaunched,
286
+ };
287
+ this.#pendingCleanup = retained;
168
288
  const output = exited.kind === "exited"
169
289
  ? await readTracerOutput(paths.result)
170
290
  : undefined;
171
- let targetTermination = await ensureTerminated(paths.pid, exited.targetIdentity, true);
291
+ let targetTermination = exited.targetLaunched
292
+ ? await ensureTerminated(paths.pid, exited.targetIdentity, true)
293
+ : "terminated";
172
294
  // These two bridge outcomes are emitted before a target process exists.
173
295
  // Other missing-PID cases, including a missing result, remain unknown.
174
296
  if (output !== undefined &&
175
297
  (output.status === "target-error" || output.status === "launch-error") &&
176
298
  (await readTargetPid(paths.pid)) === undefined)
177
299
  targetTermination = "terminated";
300
+ retained.targetStopped = targetTermination === "terminated";
301
+ if (retained.processStopped && retained.targetStopped)
302
+ this.#pendingCleanup = undefined;
178
303
  const terminated = targetTermination === "terminated";
179
304
  const cleanupDetails = [
180
305
  exited.cleanupFailure,
@@ -184,16 +309,7 @@ export class LldbCallTracer {
184
309
  ? undefined
185
310
  : {
186
311
  reason: cleanupDetails.join("; "),
187
- resources: [
188
- ...(exited.cleanupFailure === undefined
189
- ? []
190
- : ["lldb-process-group"]),
191
- ...(terminated
192
- ? []
193
- : [
194
- `native-target:${String((await readTargetPid(paths.pid)) ?? "unknown")}`,
195
- ]),
196
- ],
312
+ resources: await lldbCleanupResources(retained),
197
313
  };
198
314
  const partialReason = exited.kind === "cancelled"
199
315
  ? "cancelled"
@@ -228,18 +344,24 @@ export class LldbCallTracer {
228
344
  if (output !== undefined && output.status !== "traced")
229
345
  return err(tracerFailure(output, lifecycleCleanup, await getPartialObservation()));
230
346
  if (exited.cleanupFailure !== undefined)
231
- return err(new ProviderAdapterError(PROVIDER, OPERATION, {
232
- cleanup: lifecycleCleanup ?? {
233
- reason: exited.cleanupFailure,
234
- resources: ["lldb-process-group"],
235
- },
236
- diagnostics: {
237
- reason: "LLDB process-group cleanup could not be verified",
238
- cleanup_failure: exited.cleanupFailure,
239
- ...(lifecycleCleanup === undefined
240
- ? {}
241
- : { target_cleanup: lifecycleCleanup }),
242
- },
347
+ return err(new ProviderCleanupError(PROVIDER, await lldbCleanupResources(retained), {
348
+ reason: "LLDB process-group cleanup could not be verified",
349
+ cleanup_failure: exited.cleanupFailure,
350
+ ...(lifecycleCleanup === undefined
351
+ ? {}
352
+ : { target_cleanup: lifecycleCleanup }),
353
+ }, {
354
+ operation: OPERATION,
355
+ partialObservation: await getPartialObservation(),
356
+ }));
357
+ if (!terminated)
358
+ return err(new ProviderCleanupError(PROVIDER, await lldbCleanupResources(retained), {
359
+ reason: "LLDB target process termination could not be verified",
360
+ ...(lifecycleCleanup === undefined
361
+ ? {}
362
+ : { target_cleanup: lifecycleCleanup }),
363
+ }, {
364
+ operation: OPERATION,
243
365
  partialObservation: await getPartialObservation(),
244
366
  }));
245
367
  if (output === undefined)
@@ -345,6 +467,37 @@ const partialNativeObservation = async (options) => {
345
467
  reason: options.reason,
346
468
  });
347
469
  };
470
+ const partialObservationFromTrace = (request, trace) => projectLldbPartialObservation({
471
+ target: {
472
+ path: request.executable,
473
+ sha256: request.expectedSha256,
474
+ architecture: request.architecture,
475
+ arguments: request.input.arguments,
476
+ environment: request.input.environment,
477
+ working_directory: request.input.working_directory ?? null,
478
+ },
479
+ pid: trace.run.pid,
480
+ stdout: trace.stdout,
481
+ stderr: trace.stderr,
482
+ version: trace.run.version,
483
+ journal: {
484
+ events: trace.run.events,
485
+ otherStops: trace.run.other_stops,
486
+ limitations: [],
487
+ },
488
+ reason: "cleanup-failure",
489
+ });
490
+ const lldbRuntimePaths = (directory) => ({
491
+ config: join(directory, "config.json"),
492
+ result: join(directory, "result.json"),
493
+ pid: join(directory, "pid"),
494
+ identityAck: join(directory, "identity.ack"),
495
+ stdout: join(directory, "stdout"),
496
+ stderr: join(directory, "stderr"),
497
+ stdoutCapture: join(directory, "stdout.capture"),
498
+ stderrCapture: join(directory, "stderr.capture"),
499
+ observations: join(directory, "observations.jsonl"),
500
+ });
348
501
  const readTracerOutput = async (path) => {
349
502
  let text;
350
503
  try {
@@ -389,17 +542,43 @@ const capturedOutput = async (path, observedBytes, truncated, complete) => {
389
542
  return err(failure);
390
543
  }
391
544
  };
545
+ const lldbCleanupResources = async (owner) => [
546
+ ...(owner.processStopped ? [] : ["lldb-process-group"]),
547
+ ...(owner.targetStopped
548
+ ? []
549
+ : [
550
+ `native-target:${String((await readTargetPid(owner.pidPath)) ?? "unknown")}`,
551
+ ]),
552
+ owner.root.path,
553
+ ];
392
554
  /** Supervise LLDB as an owned process group while observing its target PID identity. */
393
555
  const runLldb = async (executable, arguments_, options) => {
394
556
  if (options.signal?.aborted === true)
395
557
  return {
396
558
  kind: "cancelled",
559
+ targetLaunched: false,
397
560
  targetIdentity: undefined,
398
561
  cleanupFailure: undefined,
399
562
  };
400
563
  const deadline = new ProviderStartupDeadline(options.deadlineMs, options.signal);
401
564
  let targetIdentity;
402
565
  let supervisor;
566
+ let retained = false;
567
+ const finish = async (outcome) => {
568
+ const stopped = await supervisor?.stop();
569
+ retained = stopped?.status === "incomplete";
570
+ return {
571
+ ...(deadline.interruption === undefined
572
+ ? outcome
573
+ : { kind: deadline.interruption }),
574
+ targetLaunched: supervisor !== undefined,
575
+ targetIdentity,
576
+ cleanupFailure: stopped?.status === "incomplete" ? stopped.reason : undefined,
577
+ ...(retained && supervisor !== undefined
578
+ ? { cleanupOwner: supervisor }
579
+ : {}),
580
+ };
581
+ };
403
582
  try {
404
583
  const launched = await spawnOwnedProviderProcess({
405
584
  command: executable,
@@ -431,49 +610,33 @@ const runLldb = async (executable, arguments_, options) => {
431
610
  identityAckWritten = true;
432
611
  }
433
612
  const interruption = deadline.interruption;
434
- if (interruption !== undefined) {
435
- const stopped = await supervisor.stop();
436
- const cleanupFailure = stopped.status === "incomplete" ? stopped.reason : undefined;
437
- return interruption === "cancelled"
438
- ? { kind: "cancelled", targetIdentity, cleanupFailure }
439
- : { kind: "timeout", targetIdentity, cleanupFailure };
440
- }
613
+ if (interruption !== undefined)
614
+ return await finish({ kind: interruption });
441
615
  await waitForAbortableDelay(20, deadline.signal);
442
616
  }
443
617
  const snapshot = supervisor.snapshot();
444
- const stopped = await supervisor.stop();
445
- const cleanupFailure = stopped.status === "incomplete" ? stopped.reason : undefined;
446
618
  const interruption = deadline.interruption;
447
- if (interruption === "cancelled")
448
- return { kind: "cancelled", targetIdentity, cleanupFailure };
449
- if (interruption === "timeout")
450
- return { kind: "timeout", targetIdentity, cleanupFailure };
451
- return {
452
- kind: "exited",
453
- exitCode: snapshot.exitCode ?? null,
454
- output: `${snapshot.stdout.text}${snapshot.stderr.text}`.slice(-DIAGNOSTIC_BYTES),
455
- targetIdentity,
456
- cleanupFailure,
457
- };
619
+ return await finish(interruption === undefined
620
+ ? {
621
+ kind: "exited",
622
+ exitCode: snapshot.exitCode ?? null,
623
+ output: `${snapshot.stdout.text}${snapshot.stderr.text}`.slice(-DIAGNOSTIC_BYTES),
624
+ }
625
+ : { kind: interruption });
458
626
  }
459
627
  catch (cause) {
460
628
  const interruption = deadline.interruption;
461
- const stopped = await supervisor?.stop();
462
- const cleanupFailure = stopped?.status === "incomplete" ? stopped.reason : undefined;
463
- return interruption === "timeout"
464
- ? { kind: "timeout", targetIdentity, cleanupFailure }
465
- : interruption === "cancelled"
466
- ? { kind: "cancelled", targetIdentity, cleanupFailure }
467
- : {
468
- kind: "exited",
469
- exitCode: null,
470
- output: cause instanceof Error ? cause.message : String(cause),
471
- targetIdentity,
472
- cleanupFailure,
473
- };
629
+ return await finish(interruption === undefined
630
+ ? {
631
+ kind: "exited",
632
+ exitCode: null,
633
+ output: cause instanceof Error ? cause.message : String(cause),
634
+ }
635
+ : { kind: interruption });
474
636
  }
475
637
  finally {
476
- supervisor?.dispose();
638
+ if (!retained)
639
+ supervisor?.dispose();
477
640
  deadline.dispose();
478
641
  }
479
642
  };
@@ -483,8 +646,11 @@ const runLldb = async (executable, arguments_, options) => {
483
646
  */
484
647
  const readTargetPid = async (pidPath) => {
485
648
  try {
486
- const pid = Number.parseInt(await readFile(pidPath, "utf8"), 10);
487
- return Number.isSafeInteger(pid) && pid > 0 ? pid : undefined;
649
+ const contents = (await readFile(pidPath, "utf8")).trim();
650
+ if (!/^[1-9]\d*$/u.test(contents))
651
+ return undefined;
652
+ const pid = Number(contents);
653
+ return Number.isSafeInteger(pid) ? pid : undefined;
488
654
  }
489
655
  catch {
490
656
  return undefined;
@@ -12,8 +12,10 @@ import { NATIVE_TOOL_CONTRACTS, } from "../contracts/native/nativeToolContracts.
12
12
  import { toolContract } from "../contracts/toolContracts.js";
13
13
  import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
14
14
  import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisOutputError, AnalysisResourceConstraintError, AnalysisTimeoutError, } from "../domain/analysisErrorCore.js";
15
+ import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
15
16
  import { BinaryTargetError } from "../domain/configurationErrors.js";
16
17
  import { ProviderAdapterError } from "../domain/providerAdapterError.js";
18
+ import { ProviderCleanupError } from "../domain/providerCleanupError.js";
17
19
  import { AnalysisError } from "../domain/analysisErrorBase.js";
18
20
  import { jsonValueSchema } from "../domain/jsonValue.js";
19
21
  import { omittedPrototypeKeysLimitation, parseXmlPropertyList, } from "../domain/propertyListKeys.js";
@@ -26,16 +28,19 @@ import { parseDemangledSymbols } from "./parsers/demangle.js";
26
28
  import { parseLipoArchitectures } from "./parsers/lipo.js";
27
29
  import { parsePlistJson, parsePlistXml, plistJsonNeedsNumberTypes, } from "./parsers/plist.js";
28
30
  import { architectureLocations, inspectNativeMacho, } from "./NativeMachoInspection.js";
31
+ import { analysisErrorWithCleanupFailure } from "../domain/analysisErrorCleanup.js";
32
+ import { createNativeUiHelperRuntime, } from "./NativeUiHelperRuntime.js";
29
33
  /** Read-only semantic provider composed from Xcode command-line utilities. */
30
34
  export class NativeMacOSProvider {
31
35
  runner;
32
- tracer;
33
36
  #capabilities;
34
37
  #environment;
35
- constructor(environment, runner = new XcrunCommandRunner(environment), platform = process.platform, tracer = new LldbCallTracer(environment)) {
38
+ #tracerFactory;
39
+ constructor(environment, runner = new XcrunCommandRunner(environment), platform = process.platform, tracerFactory) {
36
40
  this.runner = runner;
37
- this.tracer = tracer;
38
41
  this.#environment = snapshotEnvironment(environment, platform);
42
+ this.#tracerFactory =
43
+ tracerFactory ?? (() => new LldbCallTracer(this.#environment));
39
44
  this.#capabilities = nativeMacOSCapabilities(platform);
40
45
  }
41
46
  identity() {
@@ -45,7 +50,7 @@ export class NativeMacOSProvider {
45
50
  return this.#capabilities;
46
51
  }
47
52
  createClient(target) {
48
- return new NativeMacOSClient(target, this.runner, this.tracer, this.#environment);
53
+ return new NativeMacOSClient(target, this.runner, this.#tracerFactory(), this.#environment);
49
54
  }
50
55
  }
51
56
  class NativeMacOSClient {
@@ -53,6 +58,9 @@ class NativeMacOSClient {
53
58
  runner;
54
59
  tracer;
55
60
  environment;
61
+ #pendingNativeUiRuntimes = new Set();
62
+ #nativeUiTail = Promise.resolve();
63
+ #closed = false;
56
64
  constructor(target, runner, tracer, environment) {
57
65
  this.target = target;
58
66
  this.runner = runner;
@@ -60,6 +68,8 @@ class NativeMacOSClient {
60
68
  this.environment = environment;
61
69
  }
62
70
  async execute(operation, parameters, options) {
71
+ if (this.#closed)
72
+ return err(new AnalysisCapabilityUnavailableError(IDENTITY.id, operation, "Native provider client is closed"));
63
73
  if (options?.signal?.aborted === true)
64
74
  return err(new AnalysisCancelledError(operation));
65
75
  if (operation === "health")
@@ -106,21 +116,12 @@ class NativeMacOSClient {
106
116
  }
107
117
  if (operation === "observe_native_ui" ||
108
118
  operation === "capture_native_ui_scenario") {
109
- const result = await observeNativeUi(this.target, operation, parameters, {
110
- environment: this.environment,
111
- signal: options?.signal,
112
- });
113
- return result.ok
114
- ? ok(createAnalysisExecution(result.value, IDENTITY, {
115
- limitations: result.value.limitations,
116
- }))
117
- : result;
119
+ return this.#observeNativeUi(operation, parameters, options?.signal);
118
120
  }
119
121
  try {
120
122
  const observation = await this.#dispatch(operation, parameters, options?.signal);
121
123
  return observation.ok
122
124
  ? ok(createAnalysisExecution(observation.value.result, IDENTITY, {
123
- rawResult: { provenance: observation.value.provenance },
124
125
  limitations: observation.value.limitations,
125
126
  locations: observation.value.locations,
126
127
  }))
@@ -132,8 +133,87 @@ class NativeMacOSClient {
132
133
  }));
133
134
  }
134
135
  }
135
- close() {
136
- return Promise.resolve(ok(null));
136
+ async close() {
137
+ this.#closed = true;
138
+ const uiCleanupFailures = await this.#serializeNativeUi(() => this.#retryNativeUiCleanup());
139
+ const tracer = await this.tracer.close();
140
+ if (uiCleanupFailures.length === 0)
141
+ return tracer;
142
+ const uiCleanup = this.#nativeUiCleanupFailure(uiCleanupFailures, "close_binary");
143
+ return tracer.ok
144
+ ? err(uiCleanup)
145
+ : err(analysisErrorWithCleanupFailure(tracer.error, uiCleanup));
146
+ }
147
+ #observeNativeUi(operation, parameters, signal) {
148
+ return this.#serializeNativeUi(async () => {
149
+ if (this.#closed)
150
+ return err(new AnalysisCapabilityUnavailableError(IDENTITY.id, operation, "Native provider client is closed"));
151
+ const earlierCleanupFailures = await this.#retryNativeUiCleanup();
152
+ if (earlierCleanupFailures.length > 0)
153
+ return err(this.#nativeUiCleanupFailure(earlierCleanupFailures, operation));
154
+ const runtime = createNativeUiHelperRuntime(this.environment);
155
+ this.#pendingNativeUiRuntimes.add(runtime);
156
+ let result;
157
+ try {
158
+ result = await observeNativeUi(this.target, operation, parameters, {
159
+ environment: this.environment,
160
+ signal,
161
+ runtime,
162
+ });
163
+ }
164
+ catch (cause) {
165
+ result = err(cause instanceof AnalysisError
166
+ ? cause
167
+ : new ProviderAdapterError(IDENTITY.id, operation, { cause }));
168
+ }
169
+ try {
170
+ await runtime.close();
171
+ this.#pendingNativeUiRuntimes.delete(runtime);
172
+ }
173
+ catch (cause) {
174
+ const cleanup = this.#nativeUiCleanupFailure([{ runtime, cause }], operation, result.ok ? result.value : undefined);
175
+ return err(result.ok
176
+ ? cleanup
177
+ : analysisErrorWithCleanupFailure(result.error, cleanup, operation));
178
+ }
179
+ return result.ok
180
+ ? ok(createAnalysisExecution(result.value, IDENTITY, {
181
+ limitations: result.value.limitations,
182
+ }))
183
+ : result;
184
+ });
185
+ }
186
+ #serializeNativeUi(operation) {
187
+ const call = this.#nativeUiTail.then(operation, operation);
188
+ this.#nativeUiTail = call.then(() => undefined, () => undefined);
189
+ return call;
190
+ }
191
+ async #retryNativeUiCleanup() {
192
+ const failures = [];
193
+ for (const runtime of this.#pendingNativeUiRuntimes) {
194
+ try {
195
+ await runtime.close();
196
+ this.#pendingNativeUiRuntimes.delete(runtime);
197
+ }
198
+ catch (cause) {
199
+ failures.push({ runtime, cause });
200
+ }
201
+ }
202
+ return failures;
203
+ }
204
+ #nativeUiCleanupFailure(failures, operation, partialObservation) {
205
+ const resources = failures.flatMap(({ runtime }) => runtime.resources());
206
+ return new ProviderCleanupError(IDENTITY.id, resources.length === 0 ? ["native-ui-runtime"] : resources, {
207
+ reason: "Native UI runtime cleanup remains incomplete",
208
+ failures: failures.map(({ runtime, cause }) => ({
209
+ resources: [...runtime.resources()],
210
+ reason: cause instanceof Error ? cause.message : String(cause),
211
+ })),
212
+ }, {
213
+ operation,
214
+ cause: new AggregateError(failures.map(({ cause }) => cause), "Native UI runtime cleanup failed"),
215
+ ...(partialObservation === undefined ? {} : { partialObservation }),
216
+ });
137
217
  }
138
218
  #dispatch(operation, parameters, signal) {
139
219
  switch (operation) {
@@ -154,6 +234,10 @@ class NativeMacOSClient {
154
234
  }
155
235
  }
156
236
  async #listArchitectures(signal) {
237
+ // lipo reads only Mach-O; its refusal of a PE, ELF, or plist target is not
238
+ // a tool failure that a retry or `rea doctor` could repair.
239
+ if (this.target.format !== "mach-o")
240
+ return err(new AnalysisCapabilityUnavailableError(IDENTITY.id, "list_architectures", "Active artifact is not Mach-O."));
157
241
  const capture = await this.#run("list_architectures", "lipo", ["-detailed_info", this.target.path], { signal });
158
242
  if (!capture.ok)
159
243
  return capture;
@@ -171,7 +255,6 @@ class NativeMacOSClient {
171
255
  });
172
256
  return ok({
173
257
  result: jsonValueSchema.parse(result),
174
- provenance,
175
258
  limitations: [],
176
259
  locations: architectureLocations(result.architectures.items),
177
260
  });
@@ -193,7 +276,6 @@ class NativeMacOSClient {
193
276
  });
194
277
  return ok({
195
278
  result: jsonValueSchema.parse(result),
196
- provenance,
197
279
  limitations: [],
198
280
  locations: [],
199
281
  });
@@ -266,7 +348,6 @@ class NativeMacOSClient {
266
348
  });
267
349
  return ok({
268
350
  result: jsonValueSchema.parse(result),
269
- provenance,
270
351
  limitations: result.limitations,
271
352
  locations: [],
272
353
  });
@@ -380,7 +461,6 @@ class NativeMacOSClient {
380
461
  });
381
462
  return ok({
382
463
  result: jsonValueSchema.parse(result),
383
- provenance,
384
464
  limitations: parsed.value.limitations,
385
465
  locations: [{ kind: "artifact-path", path: plist.value }],
386
466
  });
@@ -5,7 +5,6 @@ export const NATIVE_MACOS_PROVIDER_IDENTITY = Object.freeze({
5
5
  name: "macOS native inspection utilities",
6
6
  version: null,
7
7
  });
8
- const IDENTITY = NATIVE_MACOS_PROVIDER_IDENTITY;
9
8
  /** Operations whose target process can show UI, use the network and write files. */
10
9
  const OWNED_PROCESS_OPERATIONS = new Set([
11
10
  "capture_native_ui_scenario",
@@ -26,7 +25,7 @@ export const nativeMacOSCapabilities = (platform = process.platform) => {
26
25
  reason: "Native macOS utilities require macOS.",
27
26
  };
28
27
  return Object.freeze({
29
- provider: IDENTITY,
28
+ provider: NATIVE_MACOS_PROVIDER_IDENTITY,
30
29
  operation: contract.name,
31
30
  ...availability,
32
31
  effects: Object.freeze({