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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "rea-agents",
3
3
  "mcpName": "io.github.morluto/rea",
4
- "version": "4.1.0",
4
+ "version": "5.0.0",
5
5
  "description": "Reverse engineer anything from your terminal or agent with one CLI and MCP server.",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -42,10 +42,12 @@
42
42
  "dist",
43
43
  "install.sh",
44
44
  "bridge/hopper_bridge.py",
45
+ "bridge/native/NativeUIChildren.swift",
45
46
  "bridge/native/ReaNativeUI.swift",
46
47
  "bridge/ghidra/ReaGhidraBridge.java",
47
48
  "bridge/ghidra/ReaGhidraExtensions.java",
48
49
  "bridge/ghidra/ReaGhidraPrepareCom.java",
50
+ "bridge/android/ReaJadxBridge.java",
49
51
  "scripts/rea.mjs",
50
52
  "scripts/electron-active-hook.cjs",
51
53
  "scripts/electron-active-hook-boundaries.cjs",
@@ -81,11 +83,11 @@
81
83
  "check:pr": "turbo run typecheck lint format:check knip metadata:check test:run && npm run docs:check && npm run jscpd && npm run scan:todos",
82
84
  "precheck:ci": "npm run deps:check",
83
85
  "check:ci": "turbo run typecheck lint format:check knip metadata:check jscpd scan:todos",
84
- "build:cached": "turbo run build",
86
+ "build:cached": "node scripts/check-dependency-install.mjs && turbo run build",
85
87
  "format": "oxfmt .",
86
88
  "format:check": "oxfmt --check .",
87
- "lint": "oxlint",
88
- "lint:fix": "oxlint --fix",
89
+ "lint": "oxlint && npm run verify:module-boundaries",
90
+ "lint:fix": "oxlint --fix && npm run verify:module-boundaries",
89
91
  "knip": "knip",
90
92
  "jscpd": "jscpd src/ tests/",
91
93
  "scan:todos": "node scripts/scan-todos.mjs",
@@ -119,29 +121,32 @@
119
121
  "typecheck": "tsc --noEmit",
120
122
  "verify:test-temp-hygiene": "npm run build:cached && node scripts/verify-test-temp-hygiene.mjs",
121
123
  "verify:hopper": "npm run verify:fixtures && npm run build:cached && node scripts/verify-real-hopper.mjs",
122
- "verify:apple-dispatch": "npm run build:cached && node scripts/verify-apple-dispatch.mjs",
124
+ "verify:apple-dispatch": "npm run build:cached && node scripts/verify/apple/dispatch.mjs",
123
125
  "verify:native-ui": "npm run build:cached && node scripts/verify-native-ui.mjs",
124
- "verify:keyed-archive": "npm run build:cached && node scripts/verify-keyed-archive.mjs",
126
+ "verify:keyed-archive": "npm run build:cached && node scripts/verify/apple/keyed-archive.mjs",
127
+ "verify:macos-bundle": "npm run build:cached && node scripts/verify/apple/macos-bundle.mjs",
125
128
  "verify:ghidra": "npm run build:cached && node scripts/verify-real-ghidra.mjs",
126
129
  "verify:ida": "npm run build:cached && node scripts/verify-real-ida.mjs",
127
130
  "verify:ghidra:switch": "npm run build:cached && node scripts/verify-real-ghidra-switch.mjs",
128
131
  "verify:ghidra:dos": "npm run build:cached && node scripts/verify-real-ghidra-dos.mjs",
129
132
  "verify:ghidra:com": "npm run build:cached && node scripts/verify-real-ghidra-com.mjs",
130
133
  "verify:ghidra:aarch64-jump-table": "npm run build:cached && node scripts/verify-real-ghidra.mjs --aarch64-jump-table",
131
- "verify:interface-builder": "npm run build:cached && node scripts/verify-interface-builder.mjs",
134
+ "verify:interface-builder": "npm run build:cached && node scripts/verify/apple/interface-builder.mjs",
132
135
  "verify:ghidra:cross-format": "npm run build:cached && node scripts/verify-real-ghidra.mjs --cross-format",
133
136
  "verify:ghidra:windows": "npm run build:cached && npm run build:ghidra-windows-fixture && node scripts/verify-real-ghidra-windows.mjs",
134
137
  "verify:browser": "npm run build:cached && node scripts/verify-real-browser.mjs",
138
+ "verify:browser:dom": "node scripts/verify-browser-dom-destinations.mjs",
139
+ "verify:browser:network": "npm run build:cached && node scripts/verify-browser-network.mjs",
135
140
  "verify:electron": "npm run build:cached && node scripts/verify-real-electron.mjs",
136
- "verify:inspector": "npm run build:cached && node scripts/verify-real-javascript-runtime-observation.mjs",
137
- "verify:javascript-runtime": "npm run build:cached && node scripts/verify-local-javascript-runtime.mjs",
138
- "verify:javascript:digests": "npm run build:cached && node scripts/verify-large-javascript-digests.mjs",
139
- "verify:application-workflows": "npm run build:cached && node scripts/verify-local-application-workflows.mjs",
140
- "verify:managed": "npm run build:cached && node scripts/verify-managed-conformance.mjs",
141
- "verify:firmware": "npm run build:cached && node scripts/verify-real-firmware.mjs",
142
- "fixtures:firmware": "node scripts/generate-firmware-fixtures.mjs",
143
- "verify:android": "npm run build:cached && node scripts/verify-real-android.mjs",
144
- "fixtures:android": "node scripts/fetch-android-fixtures.mjs",
141
+ "verify:inspector": "npm run build:cached && node scripts/verify/inspector/runtime-observation.mjs",
142
+ "verify:javascript-runtime": "npm run build:cached && node scripts/verify/javascript/runtime-observation.mjs",
143
+ "verify:javascript:digests": "npm run build:cached && node scripts/verify/javascript/digests.mjs",
144
+ "verify:application-workflows": "npm run build:cached && node scripts/verify/javascript/application-workflows.mjs",
145
+ "verify:managed": "npm run build:cached && node scripts/verify/managed/conformance.mjs",
146
+ "verify:firmware": "npm run build:cached && node scripts/verify/firmware/analysis.mjs",
147
+ "fixtures:firmware": "node scripts/fixtures/firmware/generate.mjs",
148
+ "verify:android": "npm run build:cached && node scripts/verify/android/analysis.mjs",
149
+ "fixtures:android": "node scripts/fixtures/android/fetch.mjs",
145
150
  "verify:agent": "npm run build:cached && node scripts/verify-agent-experience.mjs",
146
151
  "verify:hopper:linux": "npm run verify:fixtures && npm run build:cached && node scripts/verify-real-hopper-linux.mjs",
147
152
  "verify:setup:linux": "npm run build:cached && node scripts/verify-linux-setup-e2e.mjs",
@@ -156,6 +161,9 @@
156
161
  "config:print": "node scripts/print-mcp-config.mjs",
157
162
  "evidence:generate": "npm run build:cached && node scripts/generate-completion-ledger.mjs",
158
163
  "evidence:check": "npm run build:cached && node scripts/generate-completion-ledger.mjs --check",
164
+ "docs:dev": "vitepress dev docs",
165
+ "docs:build": "vitepress build docs",
166
+ "docs:preview": "vitepress preview docs",
159
167
  "docs:generate": "node scripts/run-exclusive.mjs docs npm run docs:generate:unlocked",
160
168
  "docs:generate:unlocked": "npm run metadata:generate && npm run build:cached && node scripts/generate-mcp-tool-catalog.mjs && node scripts/generate-skill-metadata.mjs && node scripts/generate-product-catalog.mjs && node scripts/generate-completion-ledger.mjs && node scripts/generate-error-schema.mjs",
161
169
  "docs:check": "node scripts/run-exclusive.mjs docs turbo run docs:check:built",
@@ -163,7 +171,7 @@
163
171
  "docs:error-schema": "npm run build:cached && node scripts/generate-error-schema.mjs",
164
172
  "prepack": "node scripts/prepack.mjs",
165
173
  "prepare": "node scripts/prepare.mjs",
166
- "verify:asset-catalog": "npm run build:cached && node scripts/verify-asset-catalog.mjs",
174
+ "verify:asset-catalog": "npm run build:cached && node scripts/verify/apple/asset-catalog.mjs",
167
175
  "verify:native-ui:permissions": "npm run build:cached && node scripts/verify-native-ui.mjs --allow-permission-denial",
168
176
  "test:focused": "node scripts/run-development-tests.mjs focused",
169
177
  "build:windows-native": "node scripts/build-windows-native.mjs",
@@ -173,7 +181,14 @@
173
181
  "verify:ghidra:windows:package": "node scripts/verify-packaged-ghidra-windows.mjs",
174
182
  "build:ghidra:nativeaot": "node scripts/build-ghidra-nativeaot.mjs",
175
183
  "build:fixtures:nativeaot": "node scripts/generate-nativeaot-fixtures.mjs",
176
- "verify:ghidra:nativeaot": "npm run build:cached && node scripts/verify-real-ghidra-nativeaot.mjs"
184
+ "verify:ghidra:nativeaot": "npm run build:cached && node scripts/verify-real-ghidra-nativeaot.mjs",
185
+ "verify:browser:scripts": "npm run build:cached && node scripts/verify-browser-scripts.mjs",
186
+ "verify:browser:modules": "npm run build:cached && node scripts/verify-browser-modules.mjs",
187
+ "verify:test-discovery": "node scripts/verify-test-discovery.mjs",
188
+ "verify:javascript:recovery": "node scripts/verify/javascript/recovery.mjs",
189
+ "verify:module-boundaries": "node scripts/verify-module-boundaries.mjs",
190
+ "verify:browser:source-maps": "npm run build:cached && node scripts/verify-browser-source-maps.mjs",
191
+ "verify:browser:runtime": "npm run build:cached && node scripts/verify-browser-runtime.mjs"
177
192
  },
178
193
  "lint-staged": {
179
194
  "*.{cjs,cts,js,jsx,mjs,mts,ts,tsx}": [
@@ -205,11 +220,16 @@
205
220
  "playwright-core": "1.58.2",
206
221
  "plist": "5.0.0",
207
222
  "semver": "7.8.5",
208
- "smol-toml": "1.7.0",
223
+ "smol-toml": "1.9.0",
209
224
  "write-file-atomic": "7.0.0",
210
225
  "ws": "8.21.0",
211
226
  "zod": "4.4.3"
212
227
  },
228
+ "overrides": {
229
+ "vitepress": {
230
+ "vite": "6.4.4"
231
+ }
232
+ },
213
233
  "devDependencies": {
214
234
  "@fast-check/vitest": "0.5.0",
215
235
  "@types/cross-spawn": "6.0.6",
@@ -227,6 +247,7 @@
227
247
  "oxlint": "1.87.0",
228
248
  "turbo": "2.11.7",
229
249
  "typescript": "7.0.2",
250
+ "vitepress": "1.6.4",
230
251
  "vitest": "5.0.3",
231
252
  "yaml": "2.9.0"
232
253
  }
@@ -20,11 +20,14 @@ import time
20
20
  # Keep this digest aligned with LinuxHopper.ts and rerun real-Hopper verification
21
21
  # before accepting another vendor build.
22
22
  SUPPORTED_HOPPER_SHA256 = {
23
- "0294ced141cc373468ee22d8343e7dac41980cb05a937994ca81c9f09afe7ded"
23
+ "0294ced141cc373468ee22d8343e7dac41980cb05a937994ca81c9f09afe7ded",
24
+ "1339f9e58377442b0c6fcb0dfc3cec20d593cc557408521fad9a00dbc6b8da13",
24
25
  }
25
26
  EXPECTED_SCREEN = (1280, 1024)
26
- EXPECTED_DIALOG = (189, 370, 901, 284)
27
- DEMO_CLICK = (305, 632)
27
+ DIALOG_TITLES = {"Registration", "Registration — Hopper Disassembler"}
28
+ HOPPER_WINDOW_TITLE = "Hopper Disassembler"
29
+ DEMO_CLICK_LEFT = 116
30
+ DEMO_CLICK_BOTTOM = 22
28
31
  PRIVATE_DISPLAY_UNAVAILABLE = 70
29
32
  X11_AUTHORIZATION_FAILED = 71
30
33
  UNSUPPORTED_HOPPER_BUILD = 72
@@ -196,6 +199,47 @@ def windows(x11: ctypes.CDLL, display: int, root: int) -> list[tuple[int, int, i
196
199
  return found
197
200
 
198
201
 
202
+ def window_title(x11: ctypes.CDLL, display: int, window: int) -> str | None:
203
+ title = ctypes.c_char_p()
204
+ if not x11.XFetchName(display, window, ctypes.byref(title)) or not title.value:
205
+ return None
206
+ try:
207
+ return title.value.decode("utf-8", "replace")
208
+ finally:
209
+ x11.XFree(ctypes.cast(title, ctypes.c_void_p))
210
+
211
+
212
+ def window_transient_for(
213
+ x11: ctypes.CDLL, display: int, window: int
214
+ ) -> int | None:
215
+ parent = ctypes.c_ulong()
216
+ if not x11.XGetTransientForHint(display, window, ctypes.byref(parent)):
217
+ return None
218
+ return int(parent.value)
219
+
220
+
221
+ def find_demo_dialog(
222
+ x11: ctypes.CDLL,
223
+ display: int,
224
+ observed: list[tuple[int, int, int, int, int]],
225
+ ) -> tuple[int, int, int, int, int] | None:
226
+ for candidate in observed:
227
+ window = candidate[0]
228
+ if window_title(x11, display, window) not in DIALOG_TITLES:
229
+ continue
230
+ parent = window_transient_for(x11, display, window)
231
+ if parent is None:
232
+ continue
233
+ if window_title(x11, display, parent) == HOPPER_WINDOW_TITLE:
234
+ return candidate
235
+ return None
236
+
237
+
238
+ def demo_click(dialog: tuple[int, int, int, int, int]) -> tuple[int, int]:
239
+ _window, x, y, _width, height = dialog
240
+ return x + DEMO_CLICK_LEFT, y + height - DEMO_CLICK_BOTTOM
241
+
242
+
199
243
  def configure_x11(x11: ctypes.CDLL, xtst: ctypes.CDLL) -> None:
200
244
  window_pointer = ctypes.POINTER(ctypes.c_ulong)
201
245
  x11.XOpenDisplay.argtypes = [ctypes.c_char_p]
@@ -212,6 +256,18 @@ def configure_x11(x11: ctypes.CDLL, xtst: ctypes.CDLL) -> None:
212
256
  ctypes.POINTER(XWindowAttributes),
213
257
  ]
214
258
  x11.XGetWindowAttributes.restype = ctypes.c_int
259
+ x11.XFetchName.argtypes = [
260
+ ctypes.c_void_p,
261
+ ctypes.c_ulong,
262
+ ctypes.POINTER(ctypes.c_char_p),
263
+ ]
264
+ x11.XFetchName.restype = ctypes.c_int
265
+ x11.XGetTransientForHint.argtypes = [
266
+ ctypes.c_void_p,
267
+ ctypes.c_ulong,
268
+ ctypes.POINTER(ctypes.c_ulong),
269
+ ]
270
+ x11.XGetTransientForHint.restype = ctypes.c_int
215
271
  x11.XQueryTree.argtypes = [
216
272
  ctypes.c_void_p,
217
273
  ctypes.c_ulong,
@@ -644,6 +700,7 @@ def run_launch(args: argparse.Namespace) -> int:
644
700
 
645
701
  deadline = time.monotonic() + 10
646
702
  observed: list[tuple[int, int, int, int, int]] = []
703
+ dialog: tuple[int, int, int, int, int] | None = None
647
704
  while time.monotonic() < deadline:
648
705
  if socket.exists():
649
706
  x11.XCloseDisplay(display)
@@ -659,7 +716,8 @@ def run_launch(args: argparse.Namespace) -> int:
659
716
  "owned Hopper process exited",
660
717
  )
661
718
  observed = windows(x11, display, root)
662
- if any(window[1:] == EXPECTED_DIALOG for window in observed):
719
+ dialog = find_demo_dialog(x11, display, observed)
720
+ if dialog is not None:
663
721
  break
664
722
  time.sleep(0.1)
665
723
  else:
@@ -675,8 +733,10 @@ def run_launch(args: argparse.Namespace) -> int:
675
733
  "expected Hopper demo dialog not found",
676
734
  )
677
735
 
736
+ assert dialog is not None
737
+ click_x, click_y = demo_click(dialog)
678
738
  input_results = (
679
- xtst.XTestFakeMotionEvent(display, -1, DEMO_CLICK[0], DEMO_CLICK[1], 0),
739
+ xtst.XTestFakeMotionEvent(display, -1, click_x, click_y, 0),
680
740
  xtst.XTestFakeButtonEvent(display, 1, True, 0),
681
741
  xtst.XTestFakeButtonEvent(display, 1, False, 0),
682
742
  )
@@ -695,9 +755,8 @@ def run_launch(args: argparse.Namespace) -> int:
695
755
  finally:
696
756
  if display is not None:
697
757
  x11.XCloseDisplay(display)
698
- if child is not None and child.poll() is None:
699
- child.terminate()
700
- child.wait()
758
+ if child is not None:
759
+ stop_process(child)
701
760
  stop_process(xvfb)
702
761
  capture.close()
703
762
 
package/scripts/rea.mjs CHANGED
@@ -41,6 +41,7 @@ if (!(await compiledRuntimeExists(runtimeFiles))) {
41
41
  const { createCli } = await import("../dist/cli.js");
42
42
  const {
43
43
  renderCliOutputArgumentError,
44
+ renderEmptyFilteredCliOutput,
44
45
  sanitizeCliOutput,
45
46
  validateCliOutputArguments,
46
47
  } = await import("../dist/cliOutput.js");
@@ -49,9 +50,16 @@ if (!(await compiledRuntimeExists(runtimeFiles))) {
49
50
  process.stdout.write(renderCliOutputArgumentError(outputArguments));
50
51
  process.exitCode = 1;
51
52
  } else {
53
+ let wroteOutput = false;
52
54
  await createCli().serve(args, {
53
- stdout: (output) => process.stdout.write(sanitizeCliOutput(output)),
55
+ stdout: (output) => {
56
+ const sanitized = sanitizeCliOutput(output);
57
+ if (sanitized.length > 0) wroteOutput = true;
58
+ process.stdout.write(sanitized);
59
+ },
54
60
  });
61
+ if (!wroteOutput)
62
+ process.stdout.write(renderEmptyFilteredCliOutput(args) ?? "");
55
63
  }
56
64
  }
57
65
 
@@ -2,9 +2,9 @@
2
2
  name: reverse-engineer-anything
3
3
  description: Reverse engineer native, managed, Electron/JavaScript, packaged, firmware, and browser targets with REA. Use shipped-artifact or requested runtime evidence to explain features, compare versions, decompile code, or guide a reconstruction. Skip REA for ordinary source-repository architecture analysis.
4
4
  metadata:
5
- version: "26"
6
- tool_count: 125
7
- catalog_digest: "ed9c36900e9223561d38ba30a44921f4ff101d5eca989920f9edc9dc91df470b"
5
+ version: "27"
6
+ tool_count: 133
7
+ catalog_digest: "83b4c3445ed0ec003c0aeefa3188f123d9ae319484f8b1e2b611d2fe278c9c72"
8
8
  ---
9
9
 
10
10
  # REA
@@ -1,7 +1,7 @@
1
1
  # Android application artifacts
2
2
 
3
- Use the connected server's advertised Android tools. Repository main includes
4
- this family; npm 4.0.1 does not. A skill installation alone cannot add it to an
3
+ Use the connected server's advertised Android tools. Repository main and npm
4
+ 4.1.0 include this family. A skill installation alone cannot add it to an
5
5
  older server.
6
6
 
7
7
  Start with `inspect_android_package` on the caller's APK path for package
@@ -44,7 +44,7 @@ When advertised by the connected server, application trace and compare tools
44
44
  accept complete inline Evidence or
45
45
  `{"kind":"retained-evidence","evidence_id":"ev_<64 lowercase hex characters>"}`
46
46
  for their application input (`application`, or `left`/`right`). This notation is
47
- a template: replace it with the actual returned ID. npm 4.0.1 accepts only full
47
+ a template: replace it with the actual returned ID. Versions before 4.1.0 accept only full
48
48
  inline Evidence. Use the exact ID
49
49
  returned by the producer on the same MCP connection. Resolution does not run
50
50
  analysis or select a provider; findings remain inline. Native observation
@@ -37,29 +37,30 @@ assembly. Keep managed/native boundaries and unavailable reconstruction facts
37
37
  explicit. A bring-your-own reconstruction oracle is separate from the canonical
38
38
  parser and must not become an implicit setup dependency.
39
39
 
40
- ## .NET NativeAOT
41
-
42
- A NativeAOT PE/ELF contains native code. Absence of PE/CLI metadata does not mean
43
- analysis must stop at assembly. Use native function analysis for recovered
44
- pseudocode; it is not reconstructed original C#.
45
-
46
- With an explicitly configured NativeAOT Ghidra adapter, call
47
- `inspect_native_load_image` after opening the target. Its optional
48
- `observations.metadata_recovery` returns the format, positive header evidence,
49
- coverage, derived-memory identity and type addresses/category paths inline.
50
- Then inspect a reported type with `inspect_native_data_type`, follow its
51
- `metadata_recovery.related_type`, interfaces and virtual slot addresses, and use
52
- `analyze_function` plus string/xref searches for implementation evidence. Keep
53
- `not_applicable`, partial recovery and unsupported layouts explicit. Generated
54
- `Class_address` names and inferred System.Object/String identities are not
55
- original names; custom field layouts remain unknown.
56
-
57
- Recovery modifies an ephemeral analysis database and may replace loaded metadata
58
- bytes with derived content. Original executable files remain unchanged. Distinguish
59
- original file offsets from derived analysis memory. Windows x64 PE **targets**
60
- can be analyzed on a supported Linux host; Windows **host** P0 does not admit
61
- this database recovery. See the [NativeAOT guide](https://github.com/morluto/rea/blob/main/docs/ghidra-nativeaot.md)
62
- for the tested layout and optional bring-your-own adapter build.
40
+ ### .NET NativeAOT
41
+
42
+ NativeAOT binaries contain native machine code, so ordinary CIL decompilers
43
+ cannot recover the original method bodies. When managed metadata/CIL is absent,
44
+ classify that as a native-analysis route rather than claiming source recovery.
45
+ Open the native image with the selected deep provider and inspect functions,
46
+ strings, calls, and references; describe decompiler output as pseudocode and
47
+ inference.
48
+
49
+ NativeAOT images can be PE/COFF, ELF, or Mach-O executables and shared
50
+ libraries. Use file bytes and loader metadata rather than suffixes to identify
51
+ them. For packaged apps, inventory/extract with REA's artifact tools and retain
52
+ the exact contained image identity. PDB, ELF debug, or dSYM sidecars are
53
+ additional evidence only when the provider accepts and matches them.
54
+
55
+ For deeper type recovery, the optional third-party
56
+ [Ghidra NativeAOT analyzer](https://github.com/Washi1337/ghidra-nativeaot)
57
+ rehydrates ReadyToRun metadata and can recover method tables, type relationships,
58
+ frozen objects, and strings. This is a Ghidra extension with its own install and
59
+ interactive workflow; it is not currently part of REA's managed parser or
60
+ headless Ghidra bridge. Treat its annotations as analysis evidence, retain the
61
+ binary identity, and do not present recovered types as original source. Header
62
+ discovery may require a symbol or analyst identification of the ReadyToRun
63
+ header, depending on the binary and analyzer version.
63
64
 
64
65
  ## Packages and extraction
65
66
 
@@ -68,6 +69,14 @@ ASAR, or DMG inputs when the artifact graph and findings help answer the
68
69
  question. It returns the complete artifact graph inline. Cite graph manifest
69
70
  IDs when using them.
70
71
 
72
+ For an IPA or a macOS `.app`, ZIP, or DMG, pass the inventory Evidence to
73
+ `project_apple_application_graph`. It reports application roots and nested
74
+ bundles by path convention: app extensions, XPC services, frameworks, login
75
+ items, system and driver extensions, and plug-ins. It also lists privileged
76
+ helpers, launchd plists, symlinks, and each bundle's `info_plist_path` and
77
+ executable candidates. Roles are path conventions, not parsed plists; read the
78
+ listed plists with `inspect_plist`.
79
+
71
80
  Use `extract_artifact` when materialized files are needed. It takes no arguments
72
81
  and materializes all regular files into a fresh temporary directory chosen by
73
82
  REA. Symlinks and encrypted entries are inventory facts, not extractable files.
@@ -1,53 +0,0 @@
1
- import { HopperProvider } from "../hopper/HopperProvider.js";
2
- import { GhidraProvider } from "../ghidra/GhidraProvider.js";
3
- import { IdaProvider } from "../ida/IdaProvider.js";
4
- import { silentLogger } from "../logger.js";
5
- import { GENERATED_AUXILIARY_PROVIDERS } from "../generatedMcpToolCatalog.js";
6
- import { AnalysisProviderRegistry } from "./AnalysisProviderRegistry.js";
7
- import { composeBinarySession } from "./BinarySessionComposition.js";
8
- import { nativeHostCapabilities } from "../native/NativeHostCapabilities.js";
9
- import { LazyAnalysisProvider } from "./LazyAnalysisProvider.js";
10
- import { ManagedStaticProvider } from "../dotnet/ManagedStaticProvider.js";
11
- import { SessionProviderRouter } from "./SessionProviderRouter.js";
12
- /**
13
- * Compose the target-switching runtime shared directly by CLI and MCP adapters.
14
- * This is the sole production wiring point, so both adapters share identical
15
- * provider selection, profile, lifecycle, and Evidence semantics.
16
- */
17
- export const createBinarySession = (config, logger = silentLogger) => {
18
- const hopper = new HopperProvider(config, logger);
19
- const ghidra = new GhidraProvider(config, logger);
20
- const ida = new IdaProvider(config);
21
- const auxiliary = new Map(GENERATED_AUXILIARY_PROVIDERS.map((provider) => [
22
- provider.identity.id,
23
- provider,
24
- ]));
25
- const lazyProvider = (id, load) => {
26
- const generated = auxiliary.get(id);
27
- if (generated === undefined)
28
- throw new TypeError(`Missing generated provider metadata for ${id}`);
29
- return new LazyAnalysisProvider({
30
- ...generated,
31
- capabilities: nativeHostCapabilities(generated.capabilities),
32
- load,
33
- });
34
- };
35
- return composeBinarySession(new AnalysisProviderRegistry([hopper, ghidra, ida], config.analysisProvider), [
36
- lazyProvider("rea-artifact-graph", async () => {
37
- const { ArtifactProvider } = await import("../artifacts/ArtifactProvider.js");
38
- return new ArtifactProvider();
39
- }),
40
- lazyProvider("native-macos", async () => {
41
- const { NativeMacOSProvider } = await import("../native/NativeMacOSProvider.js");
42
- return new NativeMacOSProvider();
43
- }),
44
- lazyProvider("rea-dotnet-static", async () => {
45
- const { ManagedStaticProvider } = await import("../dotnet/ManagedStaticProvider.js");
46
- return new ManagedStaticProvider();
47
- }),
48
- ]);
49
- };
50
- /** Compose an execution-free managed session without native provider selection. */
51
- export const createManagedBinarySession = () => composeBinarySession(SessionProviderRouter.selectable(new AnalysisProviderRegistry([]), [
52
- new ManagedStaticProvider(),
53
- ]));
@@ -1,181 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import canonicalize from "canonicalize";
3
- import { z } from "zod";
4
- import { parseArtifactInventoryEvidence } from "./artifactInventoryEvidence.js";
5
- import { evidenceSchema } from "./evidence.js";
6
- import { digestSchema } from "./../domain/digests.js";
7
- import { prefixedDigestSchema } from "./../domain/digests.js";
8
- const evidenceIdSchema = prefixedDigestSchema("ev");
9
- const pathSchema = z.string().min(1);
10
- const componentSchema = z.strictObject({
11
- path: pathSchema,
12
- artifact_id: prefixedDigestSchema("art"),
13
- sha256: digestSchema,
14
- format: z.string().min(1),
15
- });
16
- /** Authenticated artifact inventory pages projected as one Apple application. */
17
- export const appleApplicationProjectionInputSchema = z.strictObject({
18
- inventory_evidence: z.array(evidenceSchema).min(1),
19
- });
20
- /** Deterministic, execution-free Apple application inventory projection. */
21
- export const appleApplicationProjectionResultSchema = z.strictObject({
22
- projection_id: prefixedDigestSchema("aap"),
23
- root_sha256: digestSchema,
24
- root_format: z.literal("ipa"),
25
- source_evidence_ids: z.array(evidenceIdSchema).min(1),
26
- application_roots: z.array(pathSchema),
27
- components: z.strictObject({
28
- bundle_metadata: z.array(componentSchema),
29
- executables: z.array(componentSchema),
30
- frameworks: z.array(componentSchema),
31
- native_libraries: z.array(componentSchema),
32
- javascript: z.array(componentSchema),
33
- signing: z.array(componentSchema),
34
- }),
35
- runtime_families: z.array(z.enum([
36
- "native",
37
- "swift-objective-c",
38
- "javascript",
39
- "react-native",
40
- "flutter",
41
- "unity",
42
- ])),
43
- bridge_candidates: z.array(z.strictObject({
44
- source_path: pathSchema,
45
- native_path: pathSchema,
46
- basis: z.enum([
47
- "javascript-and-native-content",
48
- "react-native-convention",
49
- "flutter-convention",
50
- "unity-convention",
51
- ]),
52
- })),
53
- coverage: z.strictObject({
54
- status: z.enum(["complete-within-inventory", "partial"]),
55
- inventory_complete: z.boolean(),
56
- }),
57
- limitations: z.array(z.string().min(1)),
58
- });
59
- /** Project exact IPA paths and hashes without parsing or executing target code. */
60
- export const projectAppleApplication = (input) => {
61
- const parsed = appleApplicationProjectionInputSchema.parse(input);
62
- const { evidence, inventory } = parseArtifactInventoryEvidence(parsed.inventory_evidence);
63
- if (inventory.manifest.root_format !== "ipa")
64
- throw new TypeError("Apple application projection requires IPA Evidence");
65
- const nodes = new Map(inventory.nodes.map((node) => [node.artifact_id, node]));
66
- const all = inventory.occurrences
67
- .filter((occurrence) => occurrence.artifact_id !== null && occurrence.logical_path !== ".")
68
- .map((occurrence) => {
69
- const node = nodes.get(occurrence.artifact_id ?? "");
70
- if (node === undefined)
71
- throw new TypeError("Apple application occurrence has no artifact node");
72
- return {
73
- path: occurrence.logical_path,
74
- artifact_id: node.artifact_id,
75
- sha256: node.sha256,
76
- format: node.format,
77
- };
78
- });
79
- const roots = [
80
- ...new Set(inventory.occurrences.flatMap(({ logical_path: path }) => {
81
- const match = /^(Payload\/[^/]+\.app)(?:\/|$)/u.exec(path);
82
- return match?.[1] === undefined ? [] : [match[1]];
83
- })),
84
- ].sort(compare);
85
- const classified = classifyComponents(all, roots);
86
- const runtimeFamilies = identifyRuntimeFamilies(all);
87
- const bridgeProjection = identifyBridgeCandidates(classified.javascript, deduplicateComponents([
88
- ...classified.executables,
89
- ...classified.native_libraries,
90
- ]));
91
- const limitations = projectionLimitations(inventory.complete, roots);
92
- const withoutId = {
93
- root_sha256: inventory.manifest.root_sha256,
94
- root_format: "ipa",
95
- source_evidence_ids: evidence
96
- .map(({ evidence_id: id }) => id)
97
- .sort(compare),
98
- application_roots: roots,
99
- components: classified,
100
- runtime_families: runtimeFamilies,
101
- bridge_candidates: bridgeProjection.candidates,
102
- coverage: {
103
- status: inventory.complete
104
- ? "complete-within-inventory"
105
- : "partial",
106
- inventory_complete: inventory.complete,
107
- },
108
- limitations,
109
- };
110
- return appleApplicationProjectionResultSchema.parse({
111
- ...withoutId,
112
- projection_id: `aap_${digest(withoutId)}`,
113
- });
114
- };
115
- const classifyComponents = (all, roots) => {
116
- const withinApp = (path) => roots.some((root) => path.startsWith(`${root}/`));
117
- return {
118
- bundle_metadata: all.filter(({ path }) => /(?:^|\/)Info\.plist$/u.test(path)),
119
- executables: all.filter(({ path, format }) => withinApp(path) && ["mach-o", "mach-o-universal"].includes(format)),
120
- frameworks: all.filter(({ path }) => /\.framework\//u.test(path)),
121
- native_libraries: all.filter(({ path }) => /\.(?:dylib|so)$/iu.test(path)),
122
- javascript: all.filter(({ format }) => format === "javascript-bundle"),
123
- signing: all.filter(({ path }) => /(?:^|\/)(?:embedded\.mobileprovision|_CodeSignature\/CodeResources)$/u.test(path)),
124
- };
125
- };
126
- const deduplicateComponents = (values) => [...new Map(values.map((value) => [value.path, value])).values()].sort((left, right) => compare(left.path, right.path));
127
- const identifyRuntimeFamilies = (all) => {
128
- const paths = all.map(({ path }) => path.toLowerCase());
129
- const families = new Set();
130
- if (all.some(({ format }) => ["mach-o", "mach-o-universal"].includes(format)))
131
- families.add("native");
132
- if (paths.some((path) => /\.(?:dylib|framework\/[^/]+)$/u.test(path)))
133
- families.add("swift-objective-c");
134
- if (all.some(({ format }) => format === "javascript-bundle"))
135
- families.add("javascript");
136
- if (paths.some((path) => path.includes("reactnative") ||
137
- path.includes("react.framework") ||
138
- path.includes("hermes")))
139
- families.add("react-native");
140
- if (paths.some((path) => path.includes("flutter.framework") || path.includes("app.framework")))
141
- families.add("flutter");
142
- if (paths.some((path) => path.includes("unityframework.framework")))
143
- families.add("unity");
144
- return [...families].sort(compare);
145
- };
146
- const identifyBridgeCandidates = (scripts, native) => ({
147
- candidates: scripts.flatMap((script) => native.map((item) => ({
148
- source_path: script.path,
149
- native_path: item.path,
150
- basis: bridgeBasis(item.path),
151
- }))),
152
- });
153
- const bridgeBasis = (path) => {
154
- const lower = path.toLowerCase();
155
- if (lower.includes("react"))
156
- return "react-native-convention";
157
- if (lower.includes("flutter") || lower.includes("app.framework"))
158
- return "flutter-convention";
159
- if (lower.includes("unity"))
160
- return "unity-convention";
161
- return "javascript-and-native-content";
162
- };
163
- const projectionLimitations = (complete, roots) => [
164
- ...(!complete
165
- ? ["Source inventory pages are incomplete; absence is unknown."]
166
- : []),
167
- ...(roots.length === 0
168
- ? [
169
- "No Payload/*.app directory was present in the supplied inventory pages.",
170
- ]
171
- : []),
172
- "Bundle identifiers and signing claims require dedicated plist and CMS parsing; this projection reports only exact paths and hashes.",
173
- "Bridge candidates are path-based hypotheses, not observed runtime calls.",
174
- ];
175
- const compare = (left, right) => left < right ? -1 : left > right ? 1 : 0;
176
- const digest = (value) => {
177
- const encoded = canonicalize(value);
178
- if (encoded === undefined)
179
- throw new TypeError("Apple application projection is not canonical JSON");
180
- return createHash("sha256").update(encoded).digest("hex");
181
- };
@@ -1,13 +0,0 @@
1
- import * as t from "@babel/types";
2
- /** Read an identifier or literal property name without evaluating syntax. */
3
- export const propertyName = (node) => {
4
- if (t.isIdentifier(node))
5
- return node.name;
6
- if (t.isStringLiteral(node) || t.isNumericLiteral(node))
7
- return String(node.value);
8
- return "";
9
- };
10
- /** Read a property name only when its syntax commits to one exact key. */
11
- export const semanticStaticPropertyName = (property, computed) => computed && !t.isStringLiteral(property) && !t.isNumericLiteral(property)
12
- ? ""
13
- : propertyName(property);