rea-agents 4.1.0 → 5.0.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 (577) hide show
  1. package/README.md +184 -86
  2. package/bridge/android/ReaJadxBridge.java +247 -0
  3. package/bridge/native/NativeUIChildren.swift +27 -0
  4. package/bridge/native/ReaNativeUI.swift +30 -16
  5. package/dist/android/AndroidTargetSnapshot.js +5 -3
  6. package/dist/android/JadxAnalysis.js +8 -6
  7. package/dist/android/JadxConfiguration.js +19 -3
  8. package/dist/android/JadxMcpTransport.js +43 -16
  9. package/dist/android/JadxProtocol.js +8 -0
  10. package/dist/android/JadxProvider.js +117 -28
  11. package/dist/android/JadxRelease.js +8 -0
  12. package/dist/android/JadxSession.js +32 -18
  13. package/dist/application/AppBundleExecutable.js +141 -0
  14. package/dist/application/ArtifactInventory/classify.js +1 -1
  15. package/dist/application/ArtifactInventory/scanCanonical.js +1 -1
  16. package/dist/application/ArtifactInventory/scanReader.js +1 -1
  17. package/dist/application/ArtifactInventory.js +1 -1
  18. package/dist/application/BinaryTargetResolver.js +9 -64
  19. package/dist/application/CapabilityInventory.js +61 -3
  20. package/dist/application/ClientConfigurationDocument.js +72 -12
  21. package/dist/application/ClientRegistrationStatus.js +7 -8
  22. package/dist/application/DirectAnalysis.js +12 -14
  23. package/dist/application/DirectAnalysisStatus.js +4 -5
  24. package/dist/application/DoctorDiagnostics.js +3 -3
  25. package/dist/application/EnhancedTools.js +4 -4
  26. package/dist/application/EvidenceBundleCommands.js +1 -1
  27. package/dist/application/FilesystemSnapshot.js +20 -5
  28. package/dist/application/InvestigationProviders.js +6 -0
  29. package/dist/application/LinuxHopper.js +8 -2
  30. package/dist/application/OptionalObservationProviders.js +3 -0
  31. package/dist/application/ProcessCaptureCapability.js +1 -1
  32. package/dist/application/ProcessCaptureLifecycle.js +2 -2
  33. package/dist/application/ProcessCli.js +5 -1
  34. package/dist/application/ProcessHarness.js +20 -9
  35. package/dist/application/ReconstructionCoverageService.js +2 -6
  36. package/dist/application/ReconstructionObligationCandidates.js +5 -2
  37. package/dist/application/ReferenceSourceImport.js +2 -0
  38. package/dist/application/ReferenceSourceImportEntries.js +20 -3
  39. package/dist/application/ReferenceSourceImportTypes.js +5 -0
  40. package/dist/application/Setup.js +10 -2
  41. package/dist/application/SetupClientConfiguration.js +19 -16
  42. package/dist/application/SetupHost.js +18 -3
  43. package/dist/application/SetupPlan.js +1 -1
  44. package/dist/application/Uninstall.js +23 -17
  45. package/dist/application/UpdateMaintenance.js +3 -3
  46. package/dist/application/ValidateSelectedWebScript.js +27 -0
  47. package/dist/application/WebModuleTraceService.js +209 -0
  48. package/dist/application/WebRuntimeService.js +73 -0
  49. package/dist/application/WebScriptExportService.js +115 -0
  50. package/dist/application/WebSourceLocationService.js +160 -0
  51. package/dist/application/{AndroidAnalysisService.js → android/AndroidAnalysisService.js} +6 -6
  52. package/dist/application/{AndroidApplicationService.js → android/AndroidApplicationService.js} +3 -3
  53. package/dist/application/{AppleApplicationService.js → apple/AppleApplicationService.js} +5 -5
  54. package/dist/application/{AnalysisClientCleanup.js → binary/AnalysisClientCleanup.js} +2 -2
  55. package/dist/application/{AnalysisProviderEvaluation.js → binary/AnalysisProviderEvaluation.js} +4 -4
  56. package/dist/application/{AnalysisProviderRegistry.js → binary/AnalysisProviderRegistry.js} +5 -5
  57. package/dist/application/{AnalysisSnapshotCache.js → binary/AnalysisSnapshotCache.js} +7 -9
  58. package/dist/application/{AnalysisSnapshotFiles.js → binary/AnalysisSnapshotFiles.js} +4 -4
  59. package/dist/application/{BinarySession.js → binary/BinarySession.js} +12 -10
  60. package/dist/application/{BinarySessionComposition.js → binary/BinarySessionComposition.js} +2 -1
  61. package/dist/application/{BinarySessionExecution.js → binary/BinarySessionExecution.js} +9 -7
  62. package/dist/application/{BinarySessionOpen.js → binary/BinarySessionOpen.js} +6 -6
  63. package/dist/application/{BinarySessionRecords.js → binary/BinarySessionRecords.js} +28 -40
  64. package/dist/application/{CompositeProvider.js → binary/CompositeProvider.js} +2 -2
  65. package/dist/application/{LazyAnalysisProvider.js → binary/LazyAnalysisProvider.js} +6 -6
  66. package/dist/application/{SessionProviderRouter.js → binary/SessionProviderRouter.js} +7 -7
  67. package/dist/application/{FirmwareAnalysisService.js → firmware/FirmwareAnalysisService.js} +5 -5
  68. package/dist/application/{EvidenceLedger.js → investigation/EvidenceLedger.js} +44 -7
  69. package/dist/application/investigation/InvestigationRecords.js +69 -0
  70. package/dist/application/{UnknownEvidence.js → investigation/UnknownEvidence.js} +1 -1
  71. package/dist/application/{ElectronActiveEvidence.js → javascript/ElectronActiveEvidence.js} +3 -3
  72. package/dist/application/javascript/ElectronActiveObservationPort.js +1 -0
  73. package/dist/application/{ElectronActiveObservationService.js → javascript/ElectronActiveObservationService.js} +3 -3
  74. package/dist/application/{ElectronBoundaryAnalysis.js → javascript/ElectronBoundaryAnalysis.js} +1 -1
  75. package/dist/application/{ElectronBoundaryGraphContext.js → javascript/ElectronBoundaryGraphContext.js} +1 -1
  76. package/dist/application/{ElectronEvidence.js → javascript/ElectronEvidence.js} +2 -2
  77. package/dist/application/javascript/ElectronObservationPort.js +1 -0
  78. package/dist/application/{ElectronObservationService.js → javascript/ElectronObservationService.js} +3 -3
  79. package/dist/application/{JavaScriptApplicationEvidence.js → javascript/JavaScriptApplicationEvidence.js} +3 -3
  80. package/dist/application/{JavaScriptApplicationEvidenceGraph.js → javascript/JavaScriptApplicationEvidenceGraph.js} +5 -5
  81. package/dist/application/{JavaScriptApplicationService.js → javascript/JavaScriptApplicationService.js} +10 -10
  82. package/dist/application/{JavaScriptApplicationWorkflowEvidence.js → javascript/JavaScriptApplicationWorkflowEvidence.js} +3 -3
  83. package/dist/application/{JavaScriptApplicationWorkflowService.js → javascript/JavaScriptApplicationWorkflowService.js} +12 -12
  84. package/dist/application/{JavaScriptArtifactAnalysis.js → javascript/JavaScriptArtifactAnalysis.js} +8 -24
  85. package/dist/application/javascript/JavaScriptArtifactAnalysisTypes.js +1 -0
  86. package/dist/application/{JavaScriptArtifactGraphAccumulator.js → javascript/JavaScriptArtifactGraphAccumulator.js} +16 -2
  87. package/dist/application/{JavaScriptArtifactGraphBuilder.js → javascript/JavaScriptArtifactGraphBuilder.js} +2 -2
  88. package/dist/application/{JavaScriptArtifactGraphContext.js → javascript/JavaScriptArtifactGraphContext.js} +1 -1
  89. package/dist/application/{JavaScriptArtifactGraphDocuments.js → javascript/JavaScriptArtifactGraphDocuments.js} +1 -1
  90. package/dist/application/{JavaScriptArtifactGraphFindings.js → javascript/JavaScriptArtifactGraphFindings.js} +20 -7
  91. package/dist/application/{JavaScriptArtifactGraphStructure.js → javascript/JavaScriptArtifactGraphStructure.js} +1 -1
  92. package/dist/application/{JavaScriptArtifactPathResolution.js → javascript/JavaScriptArtifactPathResolution.js} +6 -12
  93. package/dist/application/{JavaScriptArtifactReconstruction.js → javascript/JavaScriptArtifactReconstruction.js} +4 -8
  94. package/dist/application/{JavaScriptJsonModules.js → javascript/JavaScriptJsonModules.js} +1 -1
  95. package/dist/application/{JavaScriptModuleRelationships.js → javascript/JavaScriptModuleRelationships.js} +2 -2
  96. package/dist/application/javascript/JavaScriptRecoveryPort.js +1 -0
  97. package/dist/application/javascript/JavaScriptRecoveryService.js +52 -0
  98. package/dist/application/{JavaScriptReturnShapeProjection.js → javascript/JavaScriptReturnShapeProjection.js} +3 -3
  99. package/dist/application/{JavaScriptRuntimeObservationEvidence.js → javascript/JavaScriptRuntimeObservationEvidence.js} +2 -2
  100. package/dist/application/javascript/JavaScriptRuntimeObservationPort.js +1 -0
  101. package/dist/application/{JavaScriptRuntimeObservationService.js → javascript/JavaScriptRuntimeObservationService.js} +3 -3
  102. package/dist/application/{JavaScriptRuntimeReconciliationEvidence.js → javascript/JavaScriptRuntimeReconciliationEvidence.js} +3 -3
  103. package/dist/application/{JavaScriptRuntimeReconciliationService.js → javascript/JavaScriptRuntimeReconciliationService.js} +6 -6
  104. package/dist/application/{JavaScriptSemanticGraphAsyncProjection.js → javascript/JavaScriptSemanticGraphAsyncProjection.js} +1 -1
  105. package/dist/application/{JavaScriptSemanticGraphBuilder.js → javascript/JavaScriptSemanticGraphBuilder.js} +5 -3
  106. package/dist/application/{JavaScriptSemanticGraphChildProcessProjection.js → javascript/JavaScriptSemanticGraphChildProcessProjection.js} +1 -1
  107. package/dist/application/{JavaScriptSemanticGraphConstruction.js → javascript/JavaScriptSemanticGraphConstruction.js} +3 -2
  108. package/dist/application/{JavaScriptSemanticGraphDataProjection.js → javascript/JavaScriptSemanticGraphDataProjection.js} +1 -1
  109. package/dist/application/{JavaScriptSemanticGraphFingerprintProjection.js → javascript/JavaScriptSemanticGraphFingerprintProjection.js} +1 -1
  110. package/dist/application/{JavaScriptSemanticGraphFlowProjection.js → javascript/JavaScriptSemanticGraphFlowProjection.js} +2 -2
  111. package/dist/application/{JavaScriptSemanticGraphObjectProjection.js → javascript/JavaScriptSemanticGraphObjectProjection.js} +1 -1
  112. package/dist/application/{JavaScriptSemanticGraphProjection.js → javascript/JavaScriptSemanticGraphProjection.js} +2 -2
  113. package/dist/application/{JavaScriptSemanticGraphResourceProjection.js → javascript/JavaScriptSemanticGraphResourceProjection.js} +1 -1
  114. package/dist/application/{JavaScriptSemanticTraceService.js → javascript/JavaScriptSemanticTraceService.js} +6 -6
  115. package/dist/application/{ManagedApplicationGraphService.js → managed/ManagedApplicationGraphService.js} +7 -7
  116. package/dist/application/{ManagedMemberComparisonService.js → managed/ManagedMemberComparisonService.js} +10 -10
  117. package/dist/application/{ManagedNativeVerificationService.js → managed/ManagedNativeVerificationService.js} +7 -7
  118. package/dist/application/{ManagedReconstructionService.js → managed/ManagedReconstructionService.js} +7 -7
  119. package/dist/application/{NativeApiInspection.js → native/NativeApiInspection.js} +1 -1
  120. package/dist/application/{NativeCallRoutes.js → native/NativeCallRoutes.js} +3 -3
  121. package/dist/application/{NativeDispatchMetadataInspection.js → native/NativeDispatchMetadataInspection.js} +4 -4
  122. package/dist/application/{NativeUiActionTrace.js → native/NativeUiActionTrace.js} +7 -7
  123. package/dist/application/{NativeValueTrace.js → native/NativeValueTrace.js} +6 -6
  124. package/dist/{application/ArtifactInventory/hash.js → artifacts/ArtifactHash.js} +4 -2
  125. package/dist/artifacts/ArtifactPaths.js +3 -3
  126. package/dist/artifacts/ArtifactProvider.js +7 -37
  127. package/dist/artifacts/ArtifactProviderMetadata.js +36 -0
  128. package/dist/artifacts/AsarArtifactReader.js +195 -23
  129. package/dist/artifacts/AsarEntryStream.js +76 -0
  130. package/dist/artifacts/DirectoryArtifactReader.js +41 -7
  131. package/dist/artifacts/NativeDmgArtifactReader.js +161 -9
  132. package/dist/{application → artifacts/apple}/AppleAssetCatalogAnalysis.js +4 -4
  133. package/dist/{application → artifacts/apple}/InterfaceBuilderAnalysis.js +125 -51
  134. package/dist/artifacts/{KeyedArchiveReader.js → apple/KeyedArchiveReader.js} +21 -27
  135. package/dist/artifacts/apple/NibViewHierarchy.js +150 -0
  136. package/dist/{application → artifacts/javascript}/JavaScriptArtifactFiles.js +27 -6
  137. package/dist/artifacts/javascript/JavaScriptArtifactReader.js +6 -0
  138. package/dist/artifacts/readStableArtifact.js +52 -0
  139. package/dist/browser/BrowserScenarioSecrets.js +50 -8
  140. package/dist/browser/CdpAuthorizedMainFrame.js +4 -4
  141. package/dist/browser/CdpAuthorizedTarget.js +22 -0
  142. package/dist/browser/CdpBrowserProvider.js +4 -15
  143. package/dist/browser/CdpCaptureDocuments.js +33 -21
  144. package/dist/browser/CdpCaptureEventBodyShapes.js +3 -3
  145. package/dist/browser/CdpCaptureEventHandlers.js +26 -26
  146. package/dist/browser/CdpCaptureEventHelpers.js +6 -6
  147. package/dist/browser/CdpCaptureStorage.js +10 -8
  148. package/dist/browser/CdpCaptureStorageFingerprints.js +24 -22
  149. package/dist/browser/CdpCaptureValues.js +2 -2
  150. package/dist/browser/CdpCommandRejection.js +17 -0
  151. package/dist/browser/CdpConnection.js +51 -11
  152. package/dist/browser/CdpElectronInspection.js +10 -10
  153. package/dist/browser/CdpElectronProvider.js +3 -6
  154. package/dist/browser/CdpElectronScriptEvents.js +6 -6
  155. package/dist/browser/CdpElectronScripts.js +2 -2
  156. package/dist/browser/CdpElectronWorkers.js +4 -4
  157. package/dist/browser/CdpObservationSession.js +18 -23
  158. package/dist/browser/CdpPageCapture.js +4 -4
  159. package/dist/browser/CdpPageCaptureScripts.js +2 -2
  160. package/dist/browser/CdpPageCaptureWorkers.js +9 -9
  161. package/dist/browser/CdpSafeMetadata.js +48 -10
  162. package/dist/browser/CdpScreenshot.js +5 -5
  163. package/dist/browser/CdpTargetEvents.js +8 -0
  164. package/dist/browser/CdpTargetSession.js +2 -2
  165. package/dist/browser/CdpWebMcpDiscovery.js +22 -16
  166. package/dist/browser/PlaywrightBrowserScenarioProvider.js +7 -6
  167. package/dist/browser/PlaywrightElectronActiveProvider.js +3 -6
  168. package/dist/browser/PlaywrightScenarioEvents.js +59 -51
  169. package/dist/browser/PlaywrightScenarioSession.js +8 -1
  170. package/dist/browser/WebSourceMapFetcher.js +37 -53
  171. package/dist/browser/assets/LocalWebScriptArtifacts.js +87 -0
  172. package/dist/browser/assets/PageScriptCapture.js +32 -0
  173. package/dist/browser/assets/PublishWebScripts.js +74 -0
  174. package/dist/browser/assets/ScenarioScriptCapture.js +76 -0
  175. package/dist/browser/assets/ScriptCaptureAdapters.js +57 -0
  176. package/dist/browser/assets/WebArtifactReads.js +56 -0
  177. package/dist/browser/assets/WebSourceLocationArtifacts.js +40 -0
  178. package/dist/browser/execution/CdpEventListeners.js +79 -0
  179. package/dist/browser/execution/CdpExecutionCapture.js +135 -0
  180. package/dist/browser/execution/CdpExecutionCollection.js +57 -0
  181. package/dist/browser/execution/CdpExecutionWindow.js +100 -0
  182. package/dist/browser/execution/CdpListenerSelector.js +22 -0
  183. package/dist/browser/execution/CdpPreciseCoverage.js +48 -0
  184. package/dist/browser/execution/CdpRuntimeInitiator.js +18 -0
  185. package/dist/browser/execution/CdpRuntimeProtocol.js +106 -0
  186. package/dist/browser/execution/CdpRuntimeRequests.js +81 -0
  187. package/dist/browser/execution/CdpRuntimeSession.js +163 -0
  188. package/dist/browser/execution/CdpRuntimeSources.js +223 -0
  189. package/dist/browser/execution/CdpWebRuntimeProvider.js +51 -0
  190. package/dist/browser/modules/NativeModuleResolver.js +210 -0
  191. package/dist/browser/modules/WebModuleArtifacts.js +40 -0
  192. package/dist/browser/network/PlaywrightNetworkContent.js +71 -0
  193. package/dist/browser/network/PlaywrightScenarioNetwork.js +180 -0
  194. package/dist/browser/providerIdentities.js +24 -0
  195. package/dist/catalogIdentity.js +23 -15
  196. package/dist/cli/androidCommands.js +13 -3
  197. package/dist/cli/applicationCommands.js +39 -8
  198. package/dist/cli/artifactCommands.js +1 -1
  199. package/dist/cli/browserAdvancedCommands.js +27 -9
  200. package/dist/cli/coreAnalysisCommands.js +5 -493
  201. package/dist/cli/coreBinaryCommands.js +211 -0
  202. package/dist/cli/coreNativeCommands.js +293 -0
  203. package/dist/cli/electronCommands.js +13 -18
  204. package/dist/cli/firmwareCommands.js +3 -3
  205. package/dist/cli/javascriptApplicationAnalysis.js +1 -1
  206. package/dist/cli/javascriptRecoveryCommands.js +45 -0
  207. package/dist/cli/managedCommands.js +4 -4
  208. package/dist/cli/managedProjectGraphCommand.js +1 -1
  209. package/dist/cli/referenceSourceImportStatus.js +6 -1
  210. package/dist/cli/utilityCommands.js +47 -23
  211. package/dist/cli/webModuleCommands.js +56 -0
  212. package/dist/cli/webRuntimeCommands.js +60 -0
  213. package/dist/cli/webScriptCommands.js +31 -0
  214. package/dist/cli/webSourceLocationCommands.js +42 -0
  215. package/dist/cli.js +10 -0
  216. package/dist/cliBrowserContext.js +4 -2
  217. package/dist/cliBrowserScenarioCommands.js +4 -3
  218. package/dist/cliCommandNames.js +8 -0
  219. package/dist/cliJavaScriptRuntimeCommands.js +6 -4
  220. package/dist/cliJsonInput.js +9 -2
  221. package/dist/cliOutput.js +37 -11
  222. package/dist/composition/android.js +3 -0
  223. package/dist/composition/auxiliaryAnalysisProviders.js +30 -0
  224. package/dist/composition/binary.js +25 -0
  225. package/dist/composition/browserObservation.js +3 -0
  226. package/dist/composition/browserScenario.js +3 -0
  227. package/dist/composition/directAnalysis.js +17 -0
  228. package/dist/composition/electronObservation.js +3 -0
  229. package/dist/composition/electronScenario.js +3 -0
  230. package/dist/composition/firmware.js +3 -0
  231. package/dist/composition/javascriptRecovery.js +3 -0
  232. package/dist/composition/javascriptRuntimeObservation.js +3 -0
  233. package/dist/composition/optionalObservationProviders.js +49 -0
  234. package/dist/composition/webModules.js +5 -0
  235. package/dist/composition/webRuntime.js +4 -0
  236. package/dist/composition/webSourceLocations.js +5 -0
  237. package/dist/config/parseConfig.js +22 -3
  238. package/dist/contracts/{androidToolContracts.js → android/androidToolContracts.js} +5 -5
  239. package/dist/contracts/applicationToolContracts.js +43 -8
  240. package/dist/contracts/artifactToolContracts.js +2 -2
  241. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  242. package/dist/contracts/enhancedInputs.js +1 -1
  243. package/dist/contracts/{firmwareToolContracts.js → firmware/firmwareToolContracts.js} +5 -5
  244. package/dist/contracts/{applicationWorkflowInputContracts.js → javascript/applicationWorkflowInputContracts.js} +6 -6
  245. package/dist/contracts/{electronToolContracts.js → javascript/electronToolContracts.js} +6 -6
  246. package/dist/contracts/{javascriptApplicationWorkflowExamples.js → javascript/javascriptApplicationWorkflowExamples.js} +3 -3
  247. package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +23 -0
  248. package/dist/contracts/{javascriptRuntimeObservationToolContracts.js → javascript/javascriptRuntimeObservationToolContracts.js} +3 -3
  249. package/dist/contracts/{javascriptRuntimeReconciliationExample.js → javascript/javascriptRuntimeReconciliationExample.js} +5 -5
  250. package/dist/contracts/{managedToolContracts.js → managed/managedToolContracts.js} +3 -3
  251. package/dist/contracts/{managedWorkflowExamples.js → managed/managedWorkflowExamples.js} +1 -1
  252. package/dist/contracts/{managedWorkflowToolContracts.js → managed/managedWorkflowToolContracts.js} +6 -6
  253. package/dist/contracts/mobileApplicationGraphExamples.js +105 -0
  254. package/dist/contracts/{nativeToolContracts.js → native/nativeToolContracts.js} +14 -7
  255. package/dist/contracts/officialToolContracts.js +3 -3
  256. package/dist/contracts/sessionToolContracts.js +1 -1
  257. package/dist/contracts/toolContracts.js +13 -7
  258. package/dist/contracts/toolEffects.js +32 -0
  259. package/dist/contracts/toolOutputSchemaGroups.js +18 -18
  260. package/dist/contracts/webRuntimeToolContracts.js +43 -0
  261. package/dist/contracts/webScriptToolContracts.js +68 -0
  262. package/dist/domain/analysisErrorCore.js +4 -2
  263. package/dist/domain/analysisErrorProjection.js +1 -0
  264. package/dist/domain/{androidApplication.js → android/androidApplication.js} +7 -6
  265. package/dist/domain/apple/appleApplication.js +277 -0
  266. package/dist/domain/{appleAssetCatalog.js → apple/appleAssetCatalog.js} +2 -2
  267. package/dist/domain/apple/appleBundleAnatomy.js +236 -0
  268. package/dist/domain/{interfaceBuilderGraph.js → apple/interfaceBuilderGraph.js} +47 -314
  269. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +411 -0
  270. package/dist/domain/{keyedArchive.js → apple/keyedArchive.js} +10 -9
  271. package/dist/domain/apple/plistValue.js +35 -0
  272. package/dist/domain/artifactInventoryEvidence.js +12 -2
  273. package/dist/domain/artifactInventorySnapshot.js +1 -0
  274. package/dist/domain/artifactOperationError.js +5 -1
  275. package/dist/domain/artifactPathSyntax.js +26 -0
  276. package/dist/domain/browserNetworkEvidence.js +82 -0
  277. package/dist/domain/browserObservationError.js +2 -0
  278. package/dist/domain/browserObservationSchemas.js +2 -1
  279. package/dist/domain/browserScenarioCapture.js +22 -0
  280. package/dist/domain/browserScenarioCaptureValues.js +25 -0
  281. package/dist/domain/browserScenarioDiff.js +6 -3
  282. package/dist/domain/browserScenarioDiffEvidence.js +35 -1
  283. package/dist/domain/browserScenarioValues.js +12 -1
  284. package/dist/domain/browserSession.js +2 -7
  285. package/dist/domain/bundleComparison.js +2 -1
  286. package/dist/domain/callPath.js +52 -44
  287. package/dist/domain/comparisonStatus.js +39 -0
  288. package/dist/domain/evidenceBundle.js +98 -35
  289. package/dist/domain/{firmwareAnalysis.js → firmware/firmwareAnalysis.js} +2 -2
  290. package/dist/domain/functionComparisonNormalization.js +11 -13
  291. package/dist/domain/hopperValues.js +2 -2
  292. package/dist/domain/inputIssueProjection.js +17 -2
  293. package/dist/domain/{electronObservation.js → javascript/electronObservation.js} +5 -11
  294. package/dist/domain/{electronStaticAnalysisBrowser.js → javascript/electronStaticAnalysisBrowser.js} +4 -3
  295. package/dist/domain/{electronStaticAnalysisIpc.js → javascript/electronStaticAnalysisIpc.js} +2 -2
  296. package/dist/domain/{electronStaticAnalysisNative.js → javascript/electronStaticAnalysisNative.js} +12 -13
  297. package/dist/domain/javascript/electronStaticAnalysisTypes.js +1 -0
  298. package/dist/domain/{electronStaticAnalysisValues.js → javascript/electronStaticAnalysisValues.js} +3 -3
  299. package/dist/domain/{javascriptApplicationAnalysis.js → javascript/javascriptApplicationAnalysis.js} +2 -2
  300. package/dist/domain/{javascriptApplicationChangeGraph.js → javascript/javascriptApplicationChangeGraph.js} +1 -1
  301. package/dist/domain/{javascriptApplicationEvidenceSchemas.js → javascript/javascriptApplicationEvidenceSchemas.js} +6 -4
  302. package/dist/domain/{javascriptApplicationGraph.js → javascript/javascriptApplicationGraph.js} +2 -2
  303. package/dist/domain/{javascriptApplicationGraphSchemas.js → javascript/javascriptApplicationGraphSchemas.js} +2 -2
  304. package/dist/domain/{javascriptApplicationVersionComparison.js → javascript/javascriptApplicationVersionComparison.js} +2 -2
  305. package/dist/domain/{javascriptApplicationVersionComparisonSchemas.js → javascript/javascriptApplicationVersionComparisonSchemas.js} +3 -3
  306. package/dist/domain/{javascriptApplicationVersionItems.js → javascript/javascriptApplicationVersionItems.js} +2 -2
  307. package/dist/domain/{javascriptApplicationVersionKeys.js → javascript/javascriptApplicationVersionKeys.js} +16 -9
  308. package/dist/domain/javascript/javascriptArtifactFiles.js +1 -0
  309. package/dist/domain/{javascriptAstFingerprint.js → javascript/javascriptAstFingerprint.js} +38 -22
  310. package/dist/domain/javascript/javascriptAstValues.js +23 -0
  311. package/dist/domain/{javascriptExportShapeComparison.js → javascript/javascriptExportShapeComparison.js} +1 -1
  312. package/dist/domain/{javascriptExportShapeComparisonSchemas.js → javascript/javascriptExportShapeComparisonSchemas.js} +2 -2
  313. package/dist/domain/{javascriptExportShapeSelection.js → javascript/javascriptExportShapeSelection.js} +1 -1
  314. package/dist/domain/{javascriptExportShapeVariants.js → javascript/javascriptExportShapeVariants.js} +1 -1
  315. package/dist/domain/{javascriptFeatureSeed.js → javascript/javascriptFeatureSeed.js} +4 -3
  316. package/dist/domain/{javascriptFeatureTrace.js → javascript/javascriptFeatureTrace.js} +2 -2
  317. package/dist/domain/{javascriptFeatureTraceSchemas.js → javascript/javascriptFeatureTraceSchemas.js} +32 -18
  318. package/dist/domain/{javascriptFeatureTraversal.js → javascript/javascriptFeatureTraversal.js} +6 -2
  319. package/dist/domain/{javascriptNativeHandoff.js → javascript/javascriptNativeHandoff.js} +1 -1
  320. package/dist/domain/javascript/javascriptRecovery.js +88 -0
  321. package/dist/domain/{javascriptRuntimeLoadState.js → javascript/javascriptRuntimeLoadState.js} +1 -1
  322. package/dist/domain/{javascriptRuntimeObservation.js → javascript/javascriptRuntimeObservation.js} +2 -2
  323. package/dist/domain/{javascriptRuntimeReconciliationActive.js → javascript/javascriptRuntimeReconciliationActive.js} +3 -3
  324. package/dist/domain/{javascriptRuntimeReconciliationGraph.js → javascript/javascriptRuntimeReconciliationGraph.js} +1 -1
  325. package/dist/domain/{javascriptRuntimeReconciliationMatching.js → javascript/javascriptRuntimeReconciliationMatching.js} +2 -2
  326. package/dist/domain/{javascriptRuntimeReconciliationParsing.js → javascript/javascriptRuntimeReconciliationParsing.js} +5 -5
  327. package/dist/domain/{javascriptRuntimeReconciliationResult.js → javascript/javascriptRuntimeReconciliationResult.js} +2 -2
  328. package/dist/domain/{javascriptRuntimeReconciliationSchemas.js → javascript/javascriptRuntimeReconciliationSchemas.js} +4 -4
  329. package/dist/domain/{javascriptRuntimeStaticCandidates.js → javascript/javascriptRuntimeStaticCandidates.js} +1 -1
  330. package/dist/domain/{javascriptSemanticAnalysis.js → javascript/javascriptSemanticAnalysis.js} +40 -14
  331. package/dist/domain/{javascriptSemanticAsyncEffects.js → javascript/javascriptSemanticAsyncEffects.js} +2 -1
  332. package/dist/domain/{javascriptSemanticCallResolution.js → javascript/javascriptSemanticCallResolution.js} +10 -5
  333. package/dist/domain/{javascriptSemanticCalls.js → javascript/javascriptSemanticCalls.js} +7 -4
  334. package/dist/domain/{javascriptSemanticChildProcesses.js → javascript/javascriptSemanticChildProcesses.js} +4 -2
  335. package/dist/domain/{javascriptSemanticDataEffectHelpers.js → javascript/javascriptSemanticDataEffectHelpers.js} +7 -6
  336. package/dist/domain/{javascriptSemanticDataEffects.js → javascript/javascriptSemanticDataEffects.js} +8 -6
  337. package/dist/domain/{javascriptSemanticFingerprints.js → javascript/javascriptSemanticFingerprints.js} +40 -16
  338. package/dist/domain/{javascriptSemanticGraph.js → javascript/javascriptSemanticGraph.js} +2 -2
  339. package/dist/domain/{javascriptSemanticGraphSchemas.js → javascript/javascriptSemanticGraphSchemas.js} +3 -3
  340. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +116 -0
  341. package/dist/domain/javascript/javascriptSemanticMutationValues.js +53 -0
  342. package/dist/domain/{javascriptSemanticObjects.js → javascript/javascriptSemanticObjects.js} +5 -5
  343. package/dist/domain/{javascriptSemanticPrimitives.js → javascript/javascriptSemanticPrimitives.js} +1 -1
  344. package/dist/domain/{javascriptSemanticProjection.js → javascript/javascriptSemanticProjection.js} +31 -44
  345. package/dist/domain/{javascriptSemanticPromises.js → javascript/javascriptSemanticPromises.js} +77 -22
  346. package/dist/domain/{javascriptSemanticProvenance.js → javascript/javascriptSemanticProvenance.js} +4 -1
  347. package/dist/domain/{javascriptSemanticQuery.js → javascript/javascriptSemanticQuery.js} +1 -1
  348. package/dist/domain/{javascriptSemanticQueryAssessment.js → javascript/javascriptSemanticQueryAssessment.js} +1 -1
  349. package/dist/domain/{javascriptSemanticQueryIdentity.js → javascript/javascriptSemanticQueryIdentity.js} +1 -1
  350. package/dist/domain/{javascriptSemanticQuerySchemas.js → javascript/javascriptSemanticQuerySchemas.js} +3 -3
  351. package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +25 -0
  352. package/dist/domain/{javascriptSemanticResources.js → javascript/javascriptSemanticResources.js} +2 -1
  353. package/dist/domain/{javascriptSemanticReturns.js → javascript/javascriptSemanticReturns.js} +1 -1
  354. package/dist/domain/{javascriptSemanticTraceSchemas.js → javascript/javascriptSemanticTraceSchemas.js} +2 -2
  355. package/dist/domain/javascript/javascriptSemanticTraversal.js +55 -0
  356. package/dist/domain/javascript/javascriptSemanticValueTypes.js +1 -0
  357. package/dist/domain/{javascriptSemanticValues.js → javascript/javascriptSemanticValues.js} +72 -48
  358. package/dist/domain/{javascriptStaticAnalysis.js → javascript/javascriptStaticAnalysis.js} +7 -4
  359. package/dist/domain/{javascriptStaticAnalysisBundler.js → javascript/javascriptStaticAnalysisBundler.js} +14 -11
  360. package/dist/domain/{javascriptStaticAnalysisCalls.js → javascript/javascriptStaticAnalysisCalls.js} +2 -2
  361. package/dist/domain/{javascriptStaticAnalysisHelpers.js → javascript/javascriptStaticAnalysisHelpers.js} +231 -40
  362. package/dist/domain/{sourceToBundleComparison.js → javascript/sourceToBundleComparison.js} +2 -2
  363. package/dist/domain/{sourceToBundleComparisonSchemas.js → javascript/sourceToBundleComparisonSchemas.js} +4 -4
  364. package/dist/domain/{sourceToBundleSignals.js → javascript/sourceToBundleSignals.js} +2 -2
  365. package/dist/domain/{managedApplicationGraph.js → managed/managedApplicationGraph.js} +4 -4
  366. package/dist/domain/{managedApplicationGraphNodes.js → managed/managedApplicationGraphNodes.js} +1 -1
  367. package/dist/domain/{managedArtifact.js → managed/managedArtifact.js} +1 -1
  368. package/dist/domain/{managedMemberComparison.js → managed/managedMemberComparison.js} +4 -4
  369. package/dist/domain/{managedMemberComparisonCoverage.js → managed/managedMemberComparisonCoverage.js} +2 -1
  370. package/dist/domain/{managedMemberComparisonItems.js → managed/managedMemberComparisonItems.js} +97 -40
  371. package/dist/domain/{managedMemberComparisonMatch.js → managed/managedMemberComparisonMatch.js} +22 -11
  372. package/dist/domain/{managedNativeVerification.js → managed/managedNativeVerification.js} +1 -1
  373. package/dist/domain/{managedNativeVerificationMatch.js → managed/managedNativeVerificationMatch.js} +3 -3
  374. package/dist/domain/{managedNativeVerificationSchemas.js → managed/managedNativeVerificationSchemas.js} +6 -5
  375. package/dist/domain/{managedReconstruction.js → managed/managedReconstruction.js} +3 -3
  376. package/dist/domain/{nativeFunctionAnnotations.js → native/nativeFunctionAnnotations.js} +1 -1
  377. package/dist/domain/{nativeInspection.js → native/nativeInspection.js} +1 -1
  378. package/dist/domain/{nativeInvestigationGraph.js → native/nativeInvestigationGraph.js} +13 -4
  379. package/dist/domain/{nativeLoadImage.js → native/nativeLoadImage.js} +1 -1
  380. package/dist/domain/{nativeUiObservation.js → native/nativeUiObservation.js} +20 -6
  381. package/dist/domain/{objcSwiftMetadata.js → native/objcSwiftMetadata.js} +17 -0
  382. package/dist/domain/processCapture.js +4 -2
  383. package/dist/domain/processScenario.js +17 -17
  384. package/dist/domain/propertyListKeys.js +69 -0
  385. package/dist/domain/providerCleanupError.js +5 -2
  386. package/dist/domain/reconstructionCoverageEvaluation.js +46 -24
  387. package/dist/domain/reconstructionCoverageInput.js +7 -0
  388. package/dist/domain/runtimeVersion.js +2 -0
  389. package/dist/domain/sourceMapEnvelope.js +38 -0
  390. package/dist/domain/unicodeCodePointOrder.js +11 -6
  391. package/dist/domain/webBundleAnalyzerAst.js +2 -34
  392. package/dist/domain/webBundleAnalyzerInspection.js +12 -9
  393. package/dist/domain/webEventListeners.js +28 -0
  394. package/dist/domain/webExecution.js +74 -0
  395. package/dist/domain/webMcpDiscovery.js +1 -7
  396. package/dist/domain/webModuleImports.js +104 -0
  397. package/dist/domain/webModuleTrace.js +106 -0
  398. package/dist/domain/webRuntime.js +69 -0
  399. package/dist/domain/webScreenshot.js +1 -7
  400. package/dist/domain/webScriptArtifacts.js +39 -0
  401. package/dist/domain/webScriptExport.js +86 -0
  402. package/dist/domain/webScriptExportError.js +13 -0
  403. package/dist/domain/webScriptExportPlan.js +108 -0
  404. package/dist/domain/webSourceLocation.js +106 -0
  405. package/dist/domain/webSourcePosition.js +21 -0
  406. package/dist/dotnet/ManagedArtifactInspector.js +1 -1
  407. package/dist/dotnet/ManagedMemberInspector.js +1 -1
  408. package/dist/dotnet/ManagedMemberInspectorCore.js +34 -0
  409. package/dist/dotnet/ManagedMemberRows.js +5 -3
  410. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +22 -16
  411. package/dist/dotnet/ManagedNativeBoundaryInspector.js +56 -50
  412. package/dist/dotnet/ManagedStaticProvider.js +3 -33
  413. package/dist/dotnet/ManagedStaticProviderMetadata.js +36 -0
  414. package/dist/evaluation/CodexAgentEval.js +2 -1
  415. package/dist/firmware/FirmwareProvider.js +18 -12
  416. package/dist/firmware/FirmwarePublication.js +1 -1
  417. package/dist/firmware/FirmwareRelease.js +1 -1
  418. package/dist/firmware/FirmwareReports.js +12 -0
  419. package/dist/firmware/FirmwareVersion.js +80 -0
  420. package/dist/generatedMcpToolCatalog.js +1 -1
  421. package/dist/generatedPackageMetadata.js +2 -2
  422. package/dist/ghidra/GhidraFunctionValues.js +5 -5
  423. package/dist/ghidra/GhidraInstallation.js +38 -34
  424. package/dist/ghidra/GhidraInstallationPolicy.js +140 -0
  425. package/dist/ghidra/GhidraInventoryValues.js +1 -1
  426. package/dist/ghidra/GhidraLauncher.js +12 -4
  427. package/dist/ghidra/GhidraLoadImageAttest.js +36 -0
  428. package/dist/ghidra/GhidraLoadImageValues.js +1 -1
  429. package/dist/ghidra/GhidraProvider.js +15 -233
  430. package/dist/ghidra/GhidraProviderCapabilities.js +7 -14
  431. package/dist/ghidra/GhidraProviderClient.js +209 -0
  432. package/dist/ghidra/GhidraResponseBuffer.js +7 -1
  433. package/dist/ghidra/extensions/nativeaot/NativeAotReport.js +17 -1
  434. package/dist/hopper/HopperProvider.js +2 -48
  435. package/dist/hopper/HopperProviderCapabilities.js +73 -0
  436. package/dist/hopper/HopperResponseStream.js +7 -1
  437. package/dist/hopper/LinuxPrivateDisplayProbe.js +4 -4
  438. package/dist/ida/IdaProviderCapabilities.js +3 -11
  439. package/dist/ida/IdaSessionClient.js +12 -0
  440. package/dist/{browser → inspector}/JavaScriptRuntimeScope.js +16 -5
  441. package/dist/{browser → inspector}/V8InspectorCaptureProjection.js +46 -8
  442. package/dist/{browser → inspector}/V8InspectorEndpoint.js +1 -1
  443. package/dist/{browser → inspector}/V8InspectorProvider.js +10 -13
  444. package/dist/inspector/providerIdentity.js +6 -0
  445. package/dist/javascript/recovery/RecoveryFiles.js +122 -0
  446. package/dist/javascript/recovery/WakaruCommand.js +116 -0
  447. package/dist/javascript/recovery/WakaruExecution.js +100 -0
  448. package/dist/javascript/recovery/WakaruProvider.js +96 -0
  449. package/dist/javascript/recovery/WakaruPublication.js +102 -0
  450. package/dist/javascript/recovery/WakaruRelease.js +29 -0
  451. package/dist/javascript/recovery/WakaruReport.js +134 -0
  452. package/dist/javascript/sourceMaps/SourceMapCodecProcess.js +37 -0
  453. package/dist/javascript/sourceMaps/SourceMapCodecProtocol.js +20 -0
  454. package/dist/javascript/sourceMaps/SourceMapCommand.js +176 -0
  455. package/dist/javascript/sourceMaps/SourceMapDecoder.js +61 -0
  456. package/dist/javascript/sourceMaps/SourceMapFormat.js +185 -0
  457. package/dist/javascript/sourceMaps/TraceSourceMap.js +138 -0
  458. package/dist/main/shutdown.js +8 -2
  459. package/dist/main/transport.js +24 -7
  460. package/dist/main.js +4 -18
  461. package/dist/native/AppleDispatchCoverage.js +58 -0
  462. package/dist/native/AppleDispatchMetadata.js +71 -509
  463. package/dist/native/AppleMachoFixups.js +292 -0
  464. package/dist/native/AppleMachoSelection.js +188 -0
  465. package/dist/native/AppleObjcCategories.js +59 -0
  466. package/dist/native/AppleObjcDispatchFacets.js +257 -0
  467. package/dist/native/AppleObjcProperties.js +68 -0
  468. package/dist/native/AppleObjcProtocols.js +2 -1
  469. package/dist/native/AppleSwiftDispatchFacets.js +150 -0
  470. package/dist/native/NativeMacOSProvider.js +132 -72
  471. package/dist/native/NativeMacOSProviderMetadata.js +42 -0
  472. package/dist/native/NativeMachoInspection.js +45 -14
  473. package/dist/native/NativeUiHelperRuntime.js +7 -3
  474. package/dist/native/NativeUiObservation.js +8 -4
  475. package/dist/native/NativeUiOutputBudget.js +8 -0
  476. package/dist/native/parsers/codesign.js +40 -5
  477. package/dist/native/parsers/demangle.js +6 -2
  478. package/dist/native/parsers/dyldInfo.js +13 -4
  479. package/dist/native/parsers/echoedPath.js +14 -0
  480. package/dist/native/parsers/lipo.js +14 -0
  481. package/dist/native/parsers/otool.js +1 -1
  482. package/dist/native/parsers/plist.js +174 -19
  483. package/dist/process/ExecFileOutput.js +2 -0
  484. package/dist/process/ProviderProcess.js +38 -17
  485. package/dist/reference/ReferenceSourceReaderEntries.js +6 -1
  486. package/dist/server/createServer.js +48 -6
  487. package/dist/server/mcpClientMetadata.js +6 -3
  488. package/dist/server/registerAndroidTools.js +1 -1
  489. package/dist/server/registerApplicationTools/compareExportShapes.js +2 -2
  490. package/dist/server/registerApplicationTools/compareSourceToBundle.js +2 -2
  491. package/dist/server/registerApplicationTools/compareVersions.js +2 -2
  492. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +43 -0
  493. package/dist/server/registerApplicationTools/traceFeature.js +1 -1
  494. package/dist/server/registerApplicationTools/traceSemantics.js +1 -1
  495. package/dist/server/registerApplicationTools.js +2 -0
  496. package/dist/server/registerBrowserScenarioTool.js +6 -2
  497. package/dist/server/registerBrowserTools.js +13 -2
  498. package/dist/server/registerCloseLifecycleTool.js +1 -1
  499. package/dist/server/registerElectronTools.js +21 -7
  500. package/dist/server/registerJavaScriptRecoveryTool.js +17 -0
  501. package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -4
  502. package/dist/server/registerManagedTools.js +3 -3
  503. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +2 -2
  504. package/dist/server/registerManagedWorkflowTools/contract.js +1 -1
  505. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +1 -1
  506. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +1 -1
  507. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +2 -2
  508. package/dist/server/registerNativeTools.js +1 -1
  509. package/dist/server/registerPrompts.js +5 -1
  510. package/dist/server/registerSessionTools.js +1 -1
  511. package/dist/server/registerWebModuleTool.js +17 -0
  512. package/dist/server/registerWebRuntimeTools.js +31 -0
  513. package/dist/server/registerWebScriptTool.js +18 -0
  514. package/dist/server/registerWebSourceLocationTool.js +17 -0
  515. package/dist/server/sessionAvailabilityPolicy.js +24 -12
  516. package/dist/windows/WindowsOwnedProcess.js +3 -1
  517. package/install.sh +12 -2
  518. package/native/windows/README.md +5 -0
  519. package/native/windows/build/manifest.json +2 -2
  520. package/native/windows/build/rea-windows-x64.node +0 -0
  521. package/package.json +40 -19
  522. package/scripts/hopper-demo-x11.py +67 -8
  523. package/scripts/rea.mjs +9 -1
  524. package/skills/reverse-engineer-anything/SKILL.md +3 -3
  525. package/skills/reverse-engineer-anything/references/android-applications.md +2 -2
  526. package/skills/reverse-engineer-anything/references/javascript-applications.md +1 -1
  527. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +32 -23
  528. package/dist/application/runtime.js +0 -53
  529. package/dist/domain/appleApplication.js +0 -181
  530. package/dist/domain/javascriptAstValues.js +0 -13
  531. package/dist/domain/javascriptSemanticTraversal.js +0 -30
  532. package/dist/native/NativeHostCapabilities.js +0 -23
  533. /package/dist/application/{AndroidAnalysisPort.js → DirectAnalysisDependencies.js} +0 -0
  534. /package/dist/application/{BinarySessionPort.js → WebModulePorts.js} +0 -0
  535. /package/dist/application/{ElectronActiveObservationPort.js → WebRuntimePort.js} +0 -0
  536. /package/dist/application/{ElectronObservationPort.js → WebScriptArtifactPort.js} +0 -0
  537. /package/dist/application/{FirmwareAnalysisPort.js → WebSourceLocationPorts.js} +0 -0
  538. /package/dist/application/{JavaScriptArtifactAnalysisTypes.js → android/AndroidAnalysisPort.js} +0 -0
  539. /package/dist/application/{AbortablePromise.js → binary/AbortablePromise.js} +0 -0
  540. /package/dist/application/{JavaScriptRuntimeObservationPort.js → binary/BinarySessionPort.js} +0 -0
  541. /package/dist/application/{BinarySessionStatus.js → binary/BinarySessionStatus.js} +0 -0
  542. /package/dist/{domain/electronStaticAnalysisTypes.js → application/firmware/FirmwareAnalysisPort.js} +0 -0
  543. /package/dist/{domain/javascriptSemanticValueTypes.js → application/investigation/InvestigationRecordPort.js} +0 -0
  544. /package/dist/application/{ElectronBoundaryGraph.js → javascript/ElectronBoundaryGraph.js} +0 -0
  545. /package/dist/application/{ElectronBoundaryGraphIpc.js → javascript/ElectronBoundaryGraphIpc.js} +0 -0
  546. /package/dist/application/{ElectronBoundaryGraphNative.js → javascript/ElectronBoundaryGraphNative.js} +0 -0
  547. /package/dist/application/{ElectronBoundaryGraphWindows.js → javascript/ElectronBoundaryGraphWindows.js} +0 -0
  548. /package/dist/application/{JavaScriptArtifactGraphBundlers.js → javascript/JavaScriptArtifactGraphBundlers.js} +0 -0
  549. /package/dist/application/{JavaScriptArtifactGraphEvidence.js → javascript/JavaScriptArtifactGraphEvidence.js} +0 -0
  550. /package/dist/application/{JavaScriptArtifactReconstructionInput.js → javascript/JavaScriptArtifactReconstructionInput.js} +0 -0
  551. /package/dist/application/{JavaScriptSemanticGraphEvidence.js → javascript/JavaScriptSemanticGraphEvidence.js} +0 -0
  552. /package/dist/application/{JavaScriptSemanticGraphValueProjection.js → javascript/JavaScriptSemanticGraphValueProjection.js} +0 -0
  553. /package/dist/artifacts/{NibArchive.js → apple/NibArchive.js} +0 -0
  554. /package/dist/domain/{androidAnalysis.js → android/androidAnalysis.js} +0 -0
  555. /package/dist/domain/{electronActiveObservation.js → javascript/electronActiveObservation.js} +0 -0
  556. /package/dist/domain/{electronStaticAnalysis.js → javascript/electronStaticAnalysis.js} +0 -0
  557. /package/dist/domain/{javascriptExportShapeComparisonIdentity.js → javascript/javascriptExportShapeComparisonIdentity.js} +0 -0
  558. /package/dist/domain/{javascriptRuntimeReconciliation.js → javascript/javascriptRuntimeReconciliation.js} +0 -0
  559. /package/dist/domain/{javascriptRuntimeReconciliationRuntime.js → javascript/javascriptRuntimeReconciliationRuntime.js} +0 -0
  560. /package/dist/domain/{javascriptSemanticCoverage.js → javascript/javascriptSemanticCoverage.js} +0 -0
  561. /package/dist/domain/{javascriptSemanticDerivedAnalysis.js → javascript/javascriptSemanticDerivedAnalysis.js} +0 -0
  562. /package/dist/domain/{javascriptSemanticGraphSerialization.js → javascript/javascriptSemanticGraphSerialization.js} +0 -0
  563. /package/dist/domain/{javascriptSemanticIr.js → javascript/javascriptSemanticIr.js} +0 -0
  564. /package/dist/domain/{javascriptSemanticQueryRelations.js → javascript/javascriptSemanticQueryRelations.js} +0 -0
  565. /package/dist/domain/{javascriptSemanticState.js → javascript/javascriptSemanticState.js} +0 -0
  566. /package/dist/domain/{javascriptSourceParser.js → javascript/javascriptSourceParser.js} +0 -0
  567. /package/dist/domain/{javascriptStaticAnalysisFindings.js → javascript/javascriptStaticAnalysisFindings.js} +0 -0
  568. /package/dist/domain/{javascriptStaticAnalysisState.js → javascript/javascriptStaticAnalysisState.js} +0 -0
  569. /package/dist/domain/{javascriptStaticAnalysisTypes.js → javascript/javascriptStaticAnalysisTypes.js} +0 -0
  570. /package/dist/domain/{managedApplicationGraphCoverage.js → managed/managedApplicationGraphCoverage.js} +0 -0
  571. /package/dist/domain/{managedApplicationGraphNodeCoverage.js → managed/managedApplicationGraphNodeCoverage.js} +0 -0
  572. /package/dist/domain/{nativeApiBoundary.js → native/nativeApiBoundary.js} +0 -0
  573. /package/dist/domain/{nativeDataType.js → native/nativeDataType.js} +0 -0
  574. /package/dist/domain/{nativeInstruction.js → native/nativeInstruction.js} +0 -0
  575. /package/dist/domain/{nativeMetadataRecovery.js → native/nativeMetadataRecovery.js} +0 -0
  576. /package/dist/domain/{nativeValueFlow.js → native/nativeValueFlow.js} +0 -0
  577. /package/dist/domain/{nativeValueTrace.js → native/nativeValueTrace.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import { providerCapability, } from "../contracts/toolOutputSchemaPrimitives.js";
3
- import { GENERATED_MCP_TOOL_CATALOG } from "../generatedMcpToolCatalog.js";
3
+ import { TOOL_CONTRACTS } from "../contracts/toolContracts.js";
4
4
  import { clientRequirementsFor, NO_CLIENT_FEATURES, } from "./CapabilityClientRequirements.js";
5
5
  const statusSchema = z.object({
6
6
  open: z.boolean(),
@@ -55,7 +55,7 @@ const NAVIGATION_CONTEXT_MODES = [
55
55
  export const buildCapabilityInventory = (sessionStatus, policy, clientFeatures = NO_CLIENT_FEATURES) => {
56
56
  const status = statusSchema.parse(sessionStatus);
57
57
  const descriptors = new Map(status.capabilities.map((descriptor) => [descriptor.operation, descriptor]));
58
- return GENERATED_MCP_TOOL_CATALOG.map((contract) => {
58
+ return TOOL_CONTRACTS.map((contract) => {
59
59
  const availability = availabilityFor({
60
60
  name: contract.name,
61
61
  kind: contract.kind,
@@ -107,11 +107,21 @@ export const buildCapabilityInventory = (sessionStatus, policy, clientFeatures =
107
107
  }).sort((left, right) => left.name.localeCompare(right.name));
108
108
  };
109
109
  const availabilityFor = (context) => {
110
+ // These built-in workflows accept a caller-selected endpoint; they do not load the optional passive provider.
111
+ if (context.name === "observe_web_execution" ||
112
+ context.name === "inspect_web_event_listeners")
113
+ return { reason: "available", remediation: null };
110
114
  if (context.name === "get_navigation_context")
111
115
  return navigationContextAvailability(context.descriptors);
112
116
  const javascriptApplication = javascriptApplicationAvailability(context);
113
117
  if (javascriptApplication !== null)
114
118
  return javascriptApplication;
119
+ const failure = optionalProviderFailureFor(context);
120
+ if (failure !== undefined)
121
+ return {
122
+ reason: "provider_unavailable",
123
+ remediation: `Adapter ${failure.providerId} could not load: ${failure.reason}. Repair the adapter installation and restart REA; other capabilities remain available.`,
124
+ };
115
125
  const workflowAvailability = workflowAvailabilityFor(context);
116
126
  if (workflowAvailability !== null)
117
127
  return workflowAvailability;
@@ -120,6 +130,20 @@ const availabilityFor = (context) => {
120
130
  return targetDecision;
121
131
  return providerAvailability(context);
122
132
  };
133
+ const optionalProviderFailureFor = ({ name, kind, policy, }) => {
134
+ const failures = policy.optionalProviderLoadFailures;
135
+ if (name === "capture_browser_scenario")
136
+ return failures?.browserScenarioCapture;
137
+ if (kind === "browser-provider")
138
+ return failures?.browserObservation;
139
+ if (name === "capture_electron_scenario")
140
+ return failures?.electronActiveObservation;
141
+ if (kind === "electron-provider")
142
+ return failures?.electronObservation;
143
+ if (kind === "runtime-provider")
144
+ return failures?.javascriptRuntimeObservation;
145
+ return undefined;
146
+ };
123
147
  const javascriptApplicationAvailability = ({ name, }) => {
124
148
  if (name === "analyze_javascript_application")
125
149
  return { reason: "available", remediation: null };
@@ -128,6 +152,40 @@ const javascriptApplicationAvailability = ({ name, }) => {
128
152
  : null;
129
153
  };
130
154
  const workflowAvailabilityFor = ({ name, kind, policy, }) => {
155
+ if (name === "trace_web_module_imports")
156
+ return {
157
+ reason: "available",
158
+ remediation: null,
159
+ defaultModeAvailable: policy.webModuleResolutionEnabled === true,
160
+ modes: [
161
+ {
162
+ name: "sources-without-literal-imports",
163
+ available: true,
164
+ missing_operations: [],
165
+ remediation: null,
166
+ },
167
+ policy.webModuleResolutionEnabled === true
168
+ ? {
169
+ name: "native-literal-resolution",
170
+ available: true,
171
+ missing_operations: [],
172
+ remediation: null,
173
+ }
174
+ : {
175
+ name: "native-literal-resolution",
176
+ available: false,
177
+ missing_operations: ["native-module-resolver"],
178
+ remediation: "Provide an absolute REA_BROWSER_EXECUTABLE supporting import.meta.resolve; no binary target is required.",
179
+ },
180
+ ],
181
+ };
182
+ if (name === "recover_javascript_sources")
183
+ return policy.javascriptRecoveryEnabled === true
184
+ ? { reason: "available", remediation: null }
185
+ : {
186
+ reason: "provider_missing",
187
+ remediation: "On Linux x64, provide an absolute REA_WAKARU_COMMAND for Wakaru 1.13.0 and util-linux prlimit. No binary target is required.",
188
+ };
131
189
  if (kind === "firmware-provider") {
132
190
  const enabled = name === "inspect_firmware_regions"
133
191
  ? policy.firmwareInspectionEnabled
@@ -136,7 +194,7 @@ const workflowAvailabilityFor = ({ name, kind, policy, }) => {
136
194
  ? { reason: "available", remediation: null }
137
195
  : {
138
196
  reason: "provider_missing",
139
- remediation: "On Linux, provide an absolute REA_BINWALK_COMMAND (Binwalk 3.1.0) or REA_UNBLOB_COMMAND (Unblob 26.6.4) path and util-linux prlimit. Extraction also requires the selected format’s external extractor.",
197
+ remediation: "On Linux, provide an absolute REA_BINWALK_COMMAND (Binwalk 3.1.x, verified with 3.1.0) or REA_UNBLOB_COMMAND (Unblob 26.6.x, verified with 26.6.4) path and util-linux prlimit. Extraction also requires the selected format’s external extractor.",
140
198
  };
141
199
  }
142
200
  if (kind === "android-provider")
@@ -39,6 +39,8 @@ const parseDocument = (text, format) => {
39
39
  throw new SyntaxError(`Invalid JSON/JSONC at offset ${firstError.offset}: ${printParseErrorCode(firstError.error)}`);
40
40
  return objectSchema.parse(document);
41
41
  };
42
+ /** Members of OpenCode V2's `mcp` object that are not server names. */
43
+ const OPENCODE_V2_MCP_SETTINGS = new Set(["servers", "timeout"]);
42
44
  /** Parse a client document and reject malformed roots or MCP server tables. */
43
45
  export const parseClientConfiguration = (text, format) => {
44
46
  if (format === undefined || format === "unsupported")
@@ -47,27 +49,76 @@ export const parseClientConfiguration = (text, format) => {
47
49
  const serversKey = clientConfigurationServersKey(format);
48
50
  const value = document[serversKey];
49
51
  const servers = value === undefined ? {} : objectSchema.parse(value);
50
- return { document, servers, serversKey };
52
+ const native = servers.servers;
53
+ // A V1 server named `servers` has a string `type` discriminator; the V2
54
+ // table may instead hold a server object named `type`.
55
+ if (format !== "opencode" ||
56
+ native === undefined ||
57
+ (typeof native === "object" &&
58
+ native !== null &&
59
+ "type" in native &&
60
+ typeof native.type === "string"))
61
+ return {
62
+ document,
63
+ servers,
64
+ serversPath: [serversKey],
65
+ dialect: format,
66
+ legacyServers: {},
67
+ };
68
+ return {
69
+ document,
70
+ servers: objectSchema.parse(native),
71
+ serversPath: [serversKey, "servers"],
72
+ dialect: "opencode_v2",
73
+ legacyServers: Object.fromEntries(Object.entries(servers).filter(([name]) => !OPENCODE_V2_MCP_SETTINGS.has(name))),
74
+ };
75
+ };
76
+ /** The registration a client loads for `name`, including OpenCode V1 entries. */
77
+ export const effectiveClientServer = (parsed, name) => Object.hasOwn(parsed.servers, name)
78
+ ? parsed.servers[name]
79
+ : parsed.legacyServers[name];
80
+ /**
81
+ * Return `parsed.document` with `servers` at its server table. A legacy OpenCode
82
+ * V1 member named in `removeLegacy` is removed beside a native V2 table.
83
+ */
84
+ export const withClientServers = (parsed, servers, removeLegacy) => {
85
+ const [key = "", nested] = parsed.serversPath;
86
+ if (nested === undefined)
87
+ return { ...parsed.document, [key]: servers };
88
+ const outer = { ...objectSchema.parse(parsed.document[key]) };
89
+ if (removeLegacy !== undefined && !OPENCODE_V2_MCP_SETTINGS.has(removeLegacy))
90
+ delete outer[removeLegacy];
91
+ return { ...parsed.document, [key]: { ...outer, [nested]: servers } };
92
+ };
93
+ /** Read the value at a key path, or `undefined` when any member is absent. */
94
+ const valueAt = (document, path) => {
95
+ let current = document;
96
+ for (const key of path) {
97
+ const object = objectSchema.safeParse(current);
98
+ if (!object.success || !Object.hasOwn(object.data, key))
99
+ return undefined;
100
+ current = object.data[key];
101
+ }
102
+ return current;
51
103
  };
52
104
  /** Serialize a validated client document, retaining JSONC comments. */
53
- export const serializeClientConfiguration = (document, format, originalText, editedServerName) => {
105
+ export const serializeClientConfiguration = (document, format, originalText, editedPaths) => {
54
106
  if (format === undefined || format === "unsupported")
55
107
  throw new TypeError("client does not have a supported MCP config format");
56
108
  if (format === "toml")
57
109
  return stringifyToml(document);
58
- if (originalText !== undefined && editedServerName !== undefined) {
59
- const serversKey = clientConfigurationServersKey(format);
60
- const servers = objectSchema.parse(document[serversKey] ?? {});
61
- const editedValue = Object.hasOwn(servers, editedServerName)
62
- ? servers[editedServerName]
63
- : undefined;
64
- const edits = modify(originalText, [serversKey, editedServerName], editedValue, {
110
+ if (originalText !== undefined && editedPaths !== undefined)
111
+ return editedPaths.reduce((text, path) => applyEdits(text, modify(text, [...path], valueAt(document, path), {
65
112
  formattingOptions: { insertSpaces: true, tabSize: 2, eol: "\n" },
66
- });
67
- return applyEdits(originalText, edits);
68
- }
113
+ })), originalText);
69
114
  return `${JSON.stringify(document, null, 2)}\n`;
70
115
  };
116
+ /** Key path of a named registration in the server table. */
117
+ export const clientServerPath = (parsed, name) => [...parsed.serversPath, name];
118
+ /** Key path of a present OpenCode V1 entry beside a native V2 table. */
119
+ export const legacyClientServerPath = (parsed, name) => Object.hasOwn(parsed.legacyServers, name)
120
+ ? [parsed.serversPath[0] ?? "mcp", name]
121
+ : undefined;
71
122
  /** Build the stdio entry shape expected by one client's configuration dialect. */
72
123
  export const clientRegistrationEntry = (format, command, environment) => {
73
124
  const [executable = "rea", ...args] = command;
@@ -81,6 +132,15 @@ export const clientRegistrationEntry = (format, command, environment) => {
81
132
  ? {}
82
133
  : { environment: { ...environment } }),
83
134
  };
135
+ case "opencode_v2":
136
+ // V2 connects servers unless `disabled` is true.
137
+ return {
138
+ type: "local",
139
+ command: [...command],
140
+ ...(Object.keys(environment).length === 0
141
+ ? {}
142
+ : { environment: { ...environment } }),
143
+ };
84
144
  case "vscode":
85
145
  return {
86
146
  type: "stdio",
@@ -1,4 +1,4 @@
1
- import { parseClientConfiguration } from "./ClientConfigurationDocument.js";
1
+ import { effectiveClientServer, parseClientConfiguration, } from "./ClientConfigurationDocument.js";
2
2
  import { access, readFile } from "node:fs/promises";
3
3
  import { resolve } from "node:path";
4
4
  import { z } from "zod";
@@ -36,8 +36,7 @@ export const readClientRegistrationStatuses = async (home, currentCommandPath =
36
36
  continue;
37
37
  try {
38
38
  const content = await readFile(client.configPath, "utf8");
39
- const { servers } = parseClientConfiguration(content, client.format);
40
- const raw = servers[PRODUCT_IDENTITY.mcpServerKey];
39
+ const raw = effectiveClientServer(parseClientConfiguration(content, client.format), PRODUCT_IDENTITY.mcpServerKey);
41
40
  if (raw === undefined) {
42
41
  statuses.push(unavailableStatus(client.name, client.configPath, "missing"));
43
42
  continue;
@@ -63,11 +62,6 @@ const registrationAligned = (registration, client, currentCommandPath) => {
63
62
  return false;
64
63
  if (!isOwnedClientRegistrationCommand(command, currentCommandPath))
65
64
  return false;
66
- if (command.length === 3 &&
67
- command[2] === "mcp" &&
68
- resolve(command[0] ?? "") === resolve(process.execPath) &&
69
- resolve(command[1] ?? "") === currentCommandPath)
70
- return true;
71
65
  if (client.name === "codex" &&
72
66
  registration.startup_timeout_sec !==
73
67
  MCP_STARTUP_POLICY.codexStartupTimeoutSeconds)
@@ -80,6 +74,11 @@ const registrationAligned = (registration, client, currentCommandPath) => {
80
74
  return false;
81
75
  if (client.format === "commandcode" && registration.transport !== "stdio")
82
76
  return false;
77
+ if (command.length === 3 &&
78
+ command[2] === "mcp" &&
79
+ resolve(command[0] ?? "") === resolve(process.execPath) &&
80
+ resolve(command[1] ?? "") === currentCommandPath)
81
+ return true;
83
82
  if (command.length === 4 &&
84
83
  command[0] === "npx" &&
85
84
  command[1] === "-y" &&
@@ -1,27 +1,25 @@
1
1
  import { parseConfig } from "../config.js";
2
2
  import { EnhancedTools } from "./EnhancedTools.js";
3
3
  import { executeFunctionAnalysisEvidence } from "./FunctionAnalysisEvidence.js";
4
- import { createBinarySession, createManagedBinarySession } from "./runtime.js";
5
4
  import { silentLogger } from "../logger.js";
6
5
  import { createEvidence } from "../domain/evidence.js";
7
- import { isManagedToolName, } from "../contracts/managedToolContracts.js";
6
+ import { isManagedToolName, } from "../contracts/managed/managedToolContracts.js";
8
7
  import { EvidenceIntegrityError } from "../domain/evidenceErrors.js";
9
8
  import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
10
9
  import {} from "../domain/analysisErrorBase.js";
11
10
  import { access } from "node:fs/promises";
12
- import { readAnalysisSnapshot, writeAnalysisSnapshot, } from "./AnalysisSnapshotFiles.js";
11
+ import { readAnalysisSnapshot, writeAnalysisSnapshot, } from "./binary/AnalysisSnapshotFiles.js";
13
12
  import { parseBinaryTarget } from "./BinaryTargetResolver.js";
14
13
  import { snapshotEvidenceForQuery, snapshotMatchesTarget, } from "../domain/analysisSnapshot.js";
15
14
  import { err, ok } from "../domain/result.js";
16
15
  import { REA_WORKFLOW_PROVIDER, workflowAnalysisProfile, } from "./InvestigationProviders.js";
17
16
  import { artifactInspectionResultSchema } from "../domain/artifactInspection.js";
18
- export { runCapabilityStatus, runProviderStatus, } from "./DirectAnalysisStatus.js";
19
17
  /**
20
18
  * Open one binary, execute one tool, and always release provider resources.
21
19
  * Unlike MCP mode, every CLI invocation is intentionally isolated and does not
22
20
  * retain a target or provider client for a subsequent command.
23
21
  */
24
- export const runDirectAnalysis = async (path, tool, arguments_, options = {}) => withProcessCancellation(options.signal, (signal) => runAnalysis(path, tool, arguments_, {
22
+ export const runDirectAnalysis = async (dependencies, path, tool, arguments_, options = {}) => withProcessCancellation(options.signal, (signal) => runAnalysis(dependencies, path, tool, arguments_, {
25
23
  logger: options.logger ?? silentLogger,
26
24
  snapshotPath: options.snapshotPath,
27
25
  signal,
@@ -33,16 +31,16 @@ export const runDirectAnalysis = async (path, tool, arguments_, options = {}) =>
33
31
  : { providerId: options.providerId }),
34
32
  }));
35
33
  /** Execute one provider-native semantic operation with atomic provenance. */
36
- export const runProviderAnalysis = async (...[path, tool, arguments_, logger = silentLogger, signal]) => isManagedToolName(tool)
37
- ? runManagedProviderAnalysis(path, tool, signal)
38
- : withProcessCancellation(signal, (operationSignal) => runAnalysis(path, tool, arguments_, {
34
+ export const runProviderAnalysis = async (dependencies, ...[path, tool, arguments_, logger = silentLogger, signal]) => isManagedToolName(tool)
35
+ ? runManagedProviderAnalysis(dependencies, path, tool, signal)
36
+ : withProcessCancellation(signal, (operationSignal) => runAnalysis(dependencies, path, tool, arguments_, {
39
37
  logger,
40
38
  snapshotPath: undefined,
41
39
  signal: operationSignal,
42
40
  }));
43
41
  /** Execute managed metadata inspection in an isolated managed-only session. */
44
- export const runManagedProviderExecution = async (path, tool, signal) => withProcessCancellation(signal, async (operationSignal) => {
45
- const session = createManagedBinarySession();
42
+ export const runManagedProviderExecution = async (dependencies, path, tool, signal) => withProcessCancellation(signal, async (operationSignal) => {
43
+ const session = dependencies.createManagedBinarySession();
46
44
  try {
47
45
  const opened = await session.open(path, { signal: operationSignal });
48
46
  if (!opened.ok)
@@ -53,8 +51,8 @@ export const runManagedProviderExecution = async (path, tool, signal) => withPro
53
51
  await session.close();
54
52
  }
55
53
  });
56
- const runManagedProviderAnalysis = async (path, tool, signal) => {
57
- const execution = await runManagedProviderExecution(path, tool, signal);
54
+ const runManagedProviderAnalysis = async (dependencies, path, tool, signal) => {
55
+ const execution = await runManagedProviderExecution(dependencies, path, tool, signal);
58
56
  if (!execution.ok)
59
57
  return cliError(execution.error);
60
58
  const value = execution.value;
@@ -67,12 +65,12 @@ const runManagedProviderAnalysis = async (path, tool, signal) => {
67
65
  locations: value.locations,
68
66
  });
69
67
  };
70
- const runAnalysis = async (path, tool, arguments_, options) => {
68
+ const runAnalysis = async (dependencies, path, tool, arguments_, options) => {
71
69
  const { logger, signal, snapshotPath } = options;
72
70
  const config = parseConfig(options.environment ?? process.env);
73
71
  if (!config.ok)
74
72
  return cliError(config.error);
75
- const session = createBinarySession(config.value, logger);
73
+ const session = dependencies.createBinarySession(config.value, logger);
76
74
  try {
77
75
  const prepared = await prepareSnapshot({
78
76
  path,
@@ -3,12 +3,11 @@ import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
3
3
  import { jsonObjectSchema } from "../domain/jsonValue.js";
4
4
  import { createServerIdentity } from "../serverIdentity.js";
5
5
  import { silentLogger } from "../logger.js";
6
- import { createBinarySession } from "./runtime.js";
7
- const runSessionStatus = async (logger = silentLogger, environment = process.env) => {
6
+ const runSessionStatus = async (dependencies, logger = silentLogger, environment = process.env) => {
8
7
  const config = parseConfig(environment);
9
8
  if (!config.ok)
10
9
  return { error: projectAnalysisError(config.error) };
11
- const session = createBinarySession(config.value, logger);
10
+ const session = dependencies.createBinarySession(config.value, logger);
12
11
  try {
13
12
  return {
14
13
  ...jsonObjectSchema.parse(session.status()),
@@ -22,6 +21,6 @@ const runSessionStatus = async (logger = silentLogger, environment = process.env
22
21
  }
23
22
  };
24
23
  /** List binary-session provider candidates and auxiliary operation availability. */
25
- export const runProviderStatus = (logger = silentLogger, environment = process.env) => runSessionStatus(logger, environment);
24
+ export const runProviderStatus = (dependencies, logger = silentLogger, environment = process.env) => runSessionStatus(dependencies, logger, environment);
26
25
  /** List binary-session operation descriptors; this is not the full MCP catalog. */
27
- export const runCapabilityStatus = (logger = silentLogger, environment = process.env) => runSessionStatus(logger, environment);
26
+ export const runCapabilityStatus = (dependencies, logger = silentLogger, environment = process.env) => runSessionStatus(dependencies, logger, environment);
@@ -1,5 +1,5 @@
1
1
  import { homedir } from "node:os";
2
- import { supportsNodeVersion } from "../domain/runtimeVersion.js";
2
+ import { SUPPORTED_NODE_VERSION_PROSE, supportsNodeVersion, } from "../domain/runtimeVersion.js";
3
3
  import { linuxHopperLauncherPath } from "./LinuxHopper.js";
4
4
  const DEFAULT_HOPPER = "/Applications/Hopper Disassembler.app/Contents/MacOS/hopper";
5
5
  const SYSTEM_LINUX_HOPPER = "/opt/hopper/bin/Hopper";
@@ -52,7 +52,7 @@ export const doctorHealthy = (checks, providers) => {
52
52
  providers.providerInspections.some(({ available }) => available)));
53
53
  };
54
54
  const nodeCheck = (host) => check("node", supportsNodeVersion(host.nodeVersion), host.nodeVersion, {
55
- remediation: "Install Node.js 22.x (>=22.19), 24.x (>=24.11), or 26+.",
55
+ remediation: `Install ${SUPPORTED_NODE_VERSION_PROSE}.`,
56
56
  classification: "missing_dependency",
57
57
  });
58
58
  const hostCheck = async (host) => {
@@ -66,7 +66,7 @@ const hostCheck = async (host) => {
66
66
  ? `${host.platform} ${host.architecture}`
67
67
  : `${linuxDistribution.id} ${linuxDistribution.versionId ?? "unknown"}`);
68
68
  return check("host", supported, detail, {
69
- remediation: "REA supports macOS 12+, Ubuntu 24.04+, Fedora 41+, 64-bit Arch Linux, and the experimental Windows x64 Ghidra P0 boundary.",
69
+ remediation: "REA supports macOS 12+, Ubuntu 24.04+, Fedora 41+, 64-bit Arch Linux, CachyOS, and the experimental Windows x64 Ghidra P0 boundary.",
70
70
  classification: "unsupported_host",
71
71
  });
72
72
  };
@@ -6,14 +6,14 @@ import {} from "../domain/analysisErrorBase.js";
6
6
  import { addressDistance, functionDossierSchema, parseDocuments, parseFunctionDossier, parseListCount, parseRelatedAddresses, parseSegments, } from "../domain/hopperValues.js";
7
7
  import { err, ok } from "../domain/result.js";
8
8
  import { categorizeSwiftTypes, discoverObjcClasses, discoverObjcProtocols, } from "../domain/symbolAnalysis.js";
9
- import { inspectNativeDispatch } from "./NativeDispatchMetadataInspection.js";
10
- import { traceNativeValues } from "./NativeValueTrace.js";
11
- import { traceNativeUiAction } from "./NativeUiActionTrace.js";
9
+ import { inspectNativeDispatch } from "./native/NativeDispatchMetadataInspection.js";
10
+ import { traceNativeValues } from "./native/NativeValueTrace.js";
11
+ import { traceNativeUiAction } from "./native/NativeUiActionTrace.js";
12
12
  import { jsonValueSchema } from "../domain/jsonValue.js";
13
13
  import { invalidEnhancedInput, } from "./EnhancedToolTypes.js";
14
14
  import { traceCallPath } from "./CallPathTracing.js";
15
15
  import { traceLiteralFeature } from "./EnhancedLiteralTracing.js";
16
- import { projectNativeApiInspection } from "./NativeApiInspection.js";
16
+ import { projectNativeApiInspection } from "./native/NativeApiInspection.js";
17
17
  /**
18
18
  * Composes direct provider operations into bounded reverse-engineering tools.
19
19
  * Direct callers use `execute`; adapters that own validation use
@@ -3,7 +3,7 @@ import {} from "../domain/analysisErrorBase.js";
3
3
  import { jsonValueSchema } from "../domain/jsonValue.js";
4
4
  import { err, ok } from "../domain/result.js";
5
5
  import { compareBundles } from "../domain/bundleComparison.js";
6
- import { EvidenceLedger } from "./EvidenceLedger.js";
6
+ import { EvidenceLedger } from "./investigation/EvidenceLedger.js";
7
7
  import { readEvidenceBundle, writeEvidenceBundle, } from "./EvidenceBundleFiles.js";
8
8
  /** Validate and merge one bundle using the session Evidence ledger. */
9
9
  export const importEvidenceBundleCommand = async (path) => {
@@ -5,6 +5,14 @@ import { dirname, join, relative, resolve } from "node:path";
5
5
  const hasSameIdentity = (before, after, expected) => before.dev === after.dev &&
6
6
  before.ino === after.ino &&
7
7
  (expected === "directory" ? after.isDirectory() : after.isSymbolicLink());
8
+ const hasSameFileState = (before, after) => before.dev === after.dev &&
9
+ before.ino === after.ino &&
10
+ before.isFile() &&
11
+ after.isFile() &&
12
+ before.mode === after.mode &&
13
+ before.size === after.size &&
14
+ before.mtimeMs === after.mtimeMs &&
15
+ before.ctimeMs === after.ctimeMs;
8
16
  const lstatIfPresent = async (path) => {
9
17
  try {
10
18
  return await lstat(path);
@@ -15,11 +23,17 @@ const lstatIfPresent = async (path) => {
15
23
  throw cause;
16
24
  }
17
25
  };
18
- const hashFile = async (path, maxBytes, signal) => {
19
- const handle = await open(path, fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW ?? 0));
26
+ /** Hash a file only when its opened descriptor still matches the captured path state. */
27
+ export const hashFile = async (path, expected, maxBytes, signal) => {
28
+ signal?.throwIfAborted();
29
+ const handle = await open(path, fsConstants.O_RDONLY |
30
+ (fsConstants.O_NOFOLLOW ?? 0) |
31
+ (fsConstants.O_NONBLOCK ?? 0));
20
32
  try {
33
+ signal?.throwIfAborted();
21
34
  const stats = await handle.stat();
22
- if (!stats.isFile() || stats.size > maxBytes)
35
+ signal?.throwIfAborted();
36
+ if (!hasSameFileState(expected, stats) || stats.size > maxBytes)
23
37
  return null;
24
38
  const hash = createHash("sha256");
25
39
  const buffer = Buffer.allocUnsafe(Math.min(64 * 1024, maxBytes));
@@ -33,7 +47,8 @@ const hashFile = async (path, maxBytes, signal) => {
33
47
  position += bytesRead;
34
48
  }
35
49
  const after = await handle.stat();
36
- if (after.size !== stats.size || after.mtimeMs !== stats.mtimeMs)
50
+ signal?.throwIfAborted();
51
+ if (!hasSameFileState(stats, after))
37
52
  return null;
38
53
  return hash.digest("hex");
39
54
  }
@@ -76,7 +91,7 @@ export const snapshotRoots = async (scenario, signal) => {
76
91
  }
77
92
  if (stats.isFile()) {
78
93
  const sha256 = remainingBytes >= stats.size
79
- ? await hashFile(path, remainingBytes, signal)
94
+ ? await hashFile(path, stats, remainingBytes, signal)
80
95
  : null;
81
96
  remainingBytes -= sha256 === null ? 0 : stats.size;
82
97
  if (sha256 === null)
@@ -39,6 +39,12 @@ export const ANDROID_APPLICATION_PROVIDER = {
39
39
  name: "REA Android application workflows",
40
40
  version: "1",
41
41
  };
42
+ /** Provider identity for verified publication of retained website scripts. */
43
+ export const WEB_SCRIPT_EXPORT_PROVIDER = {
44
+ id: "rea-web-script-export",
45
+ name: "REA captured script export",
46
+ version: "1",
47
+ };
42
48
  /** Provider identity for deterministic static JavaScript application analysis. */
43
49
  export const JAVASCRIPT_APPLICATION_PROVIDER = {
44
50
  id: "rea-javascript-application",
@@ -9,7 +9,10 @@ import { execFileOutput } from "../process/ExecFileOutput.js";
9
9
  const execFileAsync = promisify(execFile);
10
10
  const DOWNLOAD_PREFIX = "https://www.hopperapp.com:443/downloader/public/";
11
11
  const MAX_PACKAGE_BYTES = 100_000_000;
12
- const SUPPORTED_HOPPER_SHA256 = "0294ced141cc373468ee22d8343e7dac41980cb05a937994ca81c9f09afe7ded";
12
+ const SUPPORTED_HOPPER_SHA256 = new Set([
13
+ "0294ced141cc373468ee22d8343e7dac41980cb05a937994ca81c9f09afe7ded",
14
+ "1339f9e58377442b0c6fcb0dfc3cec20d593cc557408521fad9a00dbc6b8da13",
15
+ ]);
13
16
  const SUPPORTED_RELEASES = {
14
17
  deb: {
15
18
  filename: `${DOWNLOAD_PREFIX}Hopper-6.4.2-Linux-demo.deb`,
@@ -58,6 +61,7 @@ export const parseLinuxDistribution = (text) => {
58
61
  const packageFamily = packageFamilyFor(id, fields.get("ID_LIKE"));
59
62
  const supported = packageFamily !== undefined &&
60
63
  (id === "arch" ||
64
+ id === "cachyos" ||
61
65
  (id === "ubuntu" && versionAtLeast(versionId, 24)) ||
62
66
  (id === "fedora" && versionAtLeast(versionId, 41)));
63
67
  const identity = {
@@ -159,7 +163,7 @@ export const linuxHopperBinarySupported = async (path) => {
159
163
  const hash = createHash("sha256");
160
164
  for await (const chunk of createReadStream(path))
161
165
  hash.update(chunk);
162
- return hash.digest("hex") === SUPPORTED_HOPPER_SHA256;
166
+ return linuxHopperLauncherDigestSupported(hash.digest("hex"));
163
167
  }
164
168
  catch (cause) {
165
169
  // best-effort cleanup: optional build probing; unreadable means unsupported.
@@ -167,6 +171,8 @@ export const linuxHopperBinarySupported = async (path) => {
167
171
  return false;
168
172
  }
169
173
  };
174
+ /** Match a launcher extracted from one of the pinned official Linux packages. */
175
+ export const linuxHopperLauncherDigestSupported = (digest) => SUPPORTED_HOPPER_SHA256.has(digest);
170
176
  /** Interpret ldd output conservatively so a present but broken launcher is unhealthy. */
171
177
  export const linuxSharedLibrariesAvailable = (output) => !/(?:=>\s+not found|error while loading shared libraries)/iu.test(output);
172
178
  const installSystemPackage = async (family, archive) => {
@@ -0,0 +1,3 @@
1
+ import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js";
2
+ /** Preserve the module's failure reason through the existing tool error algebra. */
3
+ export const optionalProviderUnavailable = (failure, operation) => new AnalysisCapabilityUnavailableError(failure.providerId, operation, `Adapter could not load: ${failure.reason}`);
@@ -1,7 +1,7 @@
1
1
  import { tmpdir } from "node:os";
2
2
  /** Explain why process capture cannot claim owned-process cleanup on a host. */
3
3
  export const processCaptureOwnershipUnavailableReason = (platform) => platform === "win32"
4
- ? "Windows process-tree ownership and cleanup are unavailable; REA cannot verify that descendants have stopped."
4
+ ? "Windows PTY process capture is unavailable because this adapter does not yet verify descendant cleanup. Use Linux (including WSL for Linux commands) or macOS. Reinstalling the PTY backend does not enable native Windows capture."
5
5
  : undefined;
6
6
  /** Probe the native PTY seam and explain loader failures at their source. */
7
7
  export const processCaptureProbeFailureReason = (cause) => {
@@ -280,9 +280,9 @@ export const resolveProcessResult = (capture, executionFailure, cleanupFailure)
280
280
  throw new ProcessCaptureError("process capture produced no result");
281
281
  return capture;
282
282
  };
283
- export const prepareProcessCapture = async (scenario, signal, host = systemProcessPreparationHost) => {
283
+ export const prepareProcessCapture = async (scenario, signal, captureSnapshot = snapshotRoots, host = systemProcessPreparationHost) => {
284
284
  assertNotCancelled(signal);
285
- const before = await snapshotRoots(scenario, signal);
285
+ const before = await captureSnapshot(scenario, signal);
286
286
  const temporaryRoot = await host.createTemporaryRoot();
287
287
  try {
288
288
  const runId = randomUUID();
@@ -114,7 +114,11 @@ const readJson = async (path) => {
114
114
  throw new ProcessCliFailure("invalid_input", "Process input file could not be read. Check that the path exists and is readable.");
115
115
  }
116
116
  try {
117
- const parsed = JSON.parse(bytes.toString("utf8"));
117
+ const text = new TextDecoder("utf-8", {
118
+ fatal: true,
119
+ ignoreBOM: true,
120
+ }).decode(bytes);
121
+ const parsed = JSON.parse(text);
118
122
  return parsed;
119
123
  }
120
124
  catch (cause) {
@@ -131,6 +131,15 @@ const finishProcessRun = async (options) => {
131
131
  }
132
132
  return resolveProcessResult(verifiedCapture, executionFailure, cleanupFailure);
133
133
  };
134
+ const normalizeCaptureFailure = (cause, signal) => {
135
+ if (cause instanceof ProcessCaptureError)
136
+ return cause;
137
+ if (signal?.aborted === true &&
138
+ (cause === signal.reason ||
139
+ (cause instanceof Error && cause.name === "AbortError")))
140
+ return processCaptureCancelled();
141
+ return cause;
142
+ };
134
143
  const completeCapture = async (options) => {
135
144
  const { runtime, scenario } = options;
136
145
  const { reason } = options.exit;
@@ -140,7 +149,7 @@ const completeCapture = async (options) => {
140
149
  const samplingPartial = (await runtime.stopSampler()).partial;
141
150
  await settleProcessCaptureJournal(options.eventJournal);
142
151
  assertNotCancelled(options.signal);
143
- const after = await snapshotRoots(scenario, options.signal);
152
+ const after = await options.captureSnapshot(scenario, options.signal);
144
153
  options.recordEvent("filesystem_checkpoints", 1);
145
154
  const renderedFrames = await runtime.renderer.frames();
146
155
  const checkpoints = [
@@ -185,8 +194,8 @@ const completeCapture = async (options) => {
185
194
  });
186
195
  };
187
196
  /** Execute one caller-selected scenario and return bounded observations. */
188
- const runProcessScenario = async (scenario, signal, hostEnvironment = process.env, hostPlatform = process.platform) => {
189
- const { temporaryRoot, runId, before } = await prepareProcessCapture(scenario, signal);
197
+ const runProcessScenario = async (scenario, signal, hostEnvironment = process.env, hostPlatform = process.platform, captureSnapshot = snapshotRoots) => {
198
+ const { temporaryRoot, runId, before } = await prepareProcessCapture(scenario, signal, captureSnapshot);
190
199
  const frames = [];
191
200
  const samples = [];
192
201
  const journal = createProcessCaptureJournal();
@@ -239,12 +248,13 @@ const runProcessScenario = async (scenario, signal, hostEnvironment = process.en
239
248
  initiallyTruncated: before.truncated,
240
249
  eventJournal,
241
250
  recordEvent,
251
+ captureSnapshot,
242
252
  ...(signal === undefined ? {} : { signal }),
243
253
  });
244
254
  }
245
255
  catch (cause) {
246
256
  runtime?.terminal.kill("SIGKILL");
247
- executionFailure = cause;
257
+ executionFailure = normalizeCaptureFailure(cause, signal);
248
258
  }
249
259
  return finishProcessRun({
250
260
  runtime,
@@ -258,18 +268,19 @@ const runProcessScenario = async (scenario, signal, hostEnvironment = process.en
258
268
  });
259
269
  };
260
270
  /** Execute one scenario through a typed expected-failure channel. */
261
- export const captureProcessScenario = async (scenario, signal, platform = process.platform, environment = process.env) => {
271
+ export const captureProcessScenario = async (scenario, signal, platform = process.platform, environment = process.env, captureSnapshot = snapshotRoots) => {
262
272
  const ownershipReason = processCaptureOwnershipUnavailableReason(platform);
263
273
  if (ownershipReason !== undefined)
264
- return err(new AnalysisCapabilityUnavailableError("rea-process", "capture_process_scenario", ownershipReason));
274
+ return err(new AnalysisCapabilityUnavailableError("rea-process", "capture_process_scenario", ownershipReason, { userMessage: ownershipReason }));
265
275
  try {
266
276
  assertNotCancelled(signal);
267
277
  const resolvedScenario = await resolveProcessScenarioRuntimePaths(scenario, environment);
268
- return ok(await runProcessScenario(resolvedScenario, signal, environment, platform));
278
+ return ok(await runProcessScenario(resolvedScenario, signal, environment, platform, captureSnapshot));
269
279
  }
270
280
  catch (cause) {
271
- return err(cause instanceof ProcessCaptureError
272
- ? cause
281
+ const failure = normalizeCaptureFailure(cause, signal);
282
+ return err(failure instanceof ProcessCaptureError
283
+ ? failure
273
284
  : new ProcessCaptureError("process capture failed", { cause }));
274
285
  }
275
286
  };