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,25 +1,15 @@
1
- import { ghidraExtensionFailure } from "./extensions/GhidraExtensionFailures.js";
2
- import { fileURLToPath } from "node:url";
3
- import { createAnalysisExecution, } from "../application/AnalysisProvider.js";
4
- import { createAnalysisProfile } from "../domain/analysisProfile.js";
1
+ import {} from "../application/AnalysisProvider.js";
2
+ import { createAnalysisProfile, } from "../domain/analysisProfile.js";
5
3
  import { jsonObjectSchema, jsonValueSchema, } from "../domain/jsonValue.js";
6
- import { nativeLoadImageObservationSchema, nativeLoadImageSchema, } from "../domain/nativeLoadImage.js";
7
- import { attestGhidraDosLoadImage, attestGhidraDosComLoadImage, } from "./GhidraLoadImageValues.js";
8
- import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisTimeoutError, } from "../domain/analysisErrorCore.js";
9
- import {} from "../domain/analysisErrorBase.js";
10
- import { ProviderAdapterError } from "../domain/providerAdapterError.js";
11
- import { err, ok } from "../domain/result.js";
4
+ import { ok } from "../domain/result.js";
12
5
  import { GhidraClient } from "./GhidraClient.js";
13
- import { GHIDRA_STARTUP_TIMEOUT_MS } from "./GhidraDefaults.js";
14
- import { isGhidraFunctionOperation, parseGhidraFunctionInput, parseGhidraFunctionResult, } from "./GhidraFunctionValues.js";
15
- import { isGhidraInventoryOperation, parseGhidraInventoryInput, parseGhidraInventoryResult, } from "./GhidraInventoryValues.js";
16
6
  import { ghidraInstallationDiagnostics, inspectGhidraInstallation, } from "./GhidraInstallation.js";
17
- import { GhidraHeadlessLauncher } from "./GhidraLauncher.js";
18
7
  import { resolveGhidraAnalysisProfile } from "./GhidraAnalysisProfile.js";
19
- import { ghidraExtensionSchema, resolveGhidraExtensions, validateGhidraExtensionProfile, ghidraExtensionLimitations, } from "./extensions/GhidraExtensions.js";
20
- import { CAPABILITIES, windowsP0Capabilities, GHIDRA_PROVIDER_IDENTITY, GHIDRA_PROVIDER_TOOL_CONTRACTS, healthLimitations, windowsP0Limitations, limitationsFor, } from "./GhidraProviderCapabilities.js";
8
+ import { resolveGhidraExtensions } from "./extensions/GhidraExtensions.js";
9
+ import { CAPABILITIES, windowsP0Capabilities, GHIDRA_PROVIDER_IDENTITY, GHIDRA_OPERATIONS, } from "./GhidraProviderCapabilities.js";
10
+ import { createGhidraProviderClient, } from "./GhidraProviderClient.js";
21
11
  import { windowsNativeAuthorityUnavailableReason, hasWindowsNativeAuthority, windowsNativeCapabilities, } from "../process/WindowsAuthority.js";
22
- export { GHIDRA_PROVIDER_IDENTITY, GHIDRA_PROVIDER_TOOL_CONTRACTS };
12
+ export { GHIDRA_PROVIDER_IDENTITY, GHIDRA_OPERATIONS };
23
13
  const SUPPORTED_ARCHITECTURES = new Set(["x86", "x86_64", "arm", "arm64"]);
24
14
  /** Ghidra candidate backed by an isolated ephemeral headless import. */
25
15
  export class GhidraProvider {
@@ -133,178 +123,15 @@ export class GhidraProvider {
133
123
  });
134
124
  }
135
125
  createClient(target, profile, context) {
136
- const installation = this.#inspectInstallation();
137
- const prerequisites = ghidraClientPrerequisites(target, profile, installation);
138
- if (!prerequisites.ok)
139
- return unavailableClient(prerequisites.error);
140
- const committedProfile = prerequisites.value.profile;
141
- const extensionProfile = ghidraExtensionSchema
142
- .array()
143
- .safeParse(committedProfile.parameters.analysis_extensions ?? []);
144
- if (!extensionProfile.success ||
145
- (this.config.ghidraNativeAotJar !== undefined &&
146
- extensionProfile.data.length === 0))
147
- return unavailableClient(new ProviderAdapterError("ghidra", "open_binary", {
148
- diagnostics: {
149
- reason: "Resolve the configured Ghidra extensions into an analysis profile before opening the session.",
150
- },
151
- }));
152
- const extensions = extensionProfile.data;
153
- const invalidProfile = validateGhidraExtensionProfile(extensions, this.config, target, installation.platform);
154
- if (invalidProfile !== null)
155
- return unavailableClient(new ProviderAdapterError("ghidra", "open_binary", {
156
- diagnostics: { reason: invalidProfile },
157
- }));
158
- let extensionFailure;
159
- const targetLimitations = target.format === "dos-mz"
160
- ? [
161
- "DOS MZ uses 16-bit x86 real mode with the Ghidra load segment 0x1000. Returned addresses are linear byte coordinates; they do not identify a unique segment:offset alias.",
162
- "Static DOS analysis does not emulate BIOS, DOS interrupts, device ports, or self-modifying unpacking code. Packed targets require a separately identified unpacked artifact for original-program analysis; appended overlays are not the initialized load module.",
163
- ]
164
- : [];
165
- const providerLimitations = installation.platform === "win32"
166
- ? windowsP0Limitations
167
- : installation.platform === "darwin"
168
- ? [
169
- "macOS sessions require a matching executable Ghidra native decompiler; REA checks for it but does not build native components or change Gatekeeper quarantine state.",
170
- ]
171
- : [];
172
- const client = this.clientFactory({
173
- platform: installation.platform,
174
- launcher: new GhidraHeadlessLauncher({
175
- analyzeHeadlessPath: prerequisites.value.analyzeHeadlessPath,
176
- ...(this.config.ghidraJavaHome === undefined
177
- ? {}
178
- : { javaHome: this.config.ghidraJavaHome }),
179
- bridgeScriptPath: fileURLToPath(new URL("../../bridge/ghidra/ReaGhidraBridge.java", import.meta.url)),
180
- ...(target.format === "dos-mz" ? { dosMz: true } : {}),
181
- ...(target.format === "dos-com" ? { dosCom: true } : {}),
182
- platform: installation.platform,
183
- ...(extensions.length === 0 ? {} : { analysisExtensions: extensions }),
184
- }),
185
- targetPath: installation.platform === "win32"
186
- ? (target.sourcePath ?? target.path)
187
- : target.path,
188
- targetSha256: target.sha256,
189
- transport: installation.platform === "win32"
190
- ? "authenticated-loopback-tcp"
191
- : "unix-socket",
192
- providerVersion: prerequisites.value.providerVersion,
193
- profileDigest: committedProfile.digest,
194
- ...(["dos-mz", "dos-com"].includes(target.format)
195
- ? {
196
- expectedLanguageId: "x86:LE:16:Real Mode",
197
- expectedCompilerSpecId: "default",
198
- }
199
- : {}),
200
- ...(context === undefined ? {} : { runId: context.runId }),
201
- logger: this.logger.child({ layer: "ghidra-bridge" }),
126
+ return createGhidraProviderClient({
127
+ config: this.config,
128
+ logger: this.logger,
129
+ clientFactory: this.clientFactory,
130
+ target,
131
+ ...(profile === undefined ? {} : { profile }),
132
+ ...(context === undefined ? {} : { context }),
133
+ installation: this.#inspectInstallation(),
202
134
  });
203
- const checkExtensions = async (operation, info) => {
204
- extensionFailure = ghidraExtensionFailure(extensions, info.analysis_extensions ?? [], operation);
205
- if (extensionFailure === undefined)
206
- return undefined;
207
- await client.close();
208
- return extensionFailure;
209
- };
210
- return {
211
- execute: async (operation, parameters, options) => {
212
- if (extensionFailure !== undefined)
213
- return err(extensionFailure);
214
- if (operation !== "health" &&
215
- !isGhidraInventoryOperation(operation) &&
216
- !isGhidraFunctionOperation(operation))
217
- return err(new AnalysisCapabilityUnavailableError(GHIDRA_PROVIDER_IDENTITY.id, operation, "The Ghidra adapter does not declare this operation."));
218
- if (operation === "health") {
219
- const started = await client.start(options?.signal);
220
- if (!started.ok)
221
- return err(projectSessionError(operation, started.error));
222
- const failed = await checkExtensions(operation, started.value);
223
- if (failed !== undefined)
224
- return err(failed);
225
- return ok(createAnalysisExecution(started.value, committedProfile.provider, {
226
- analysisProfile: committedProfile,
227
- limitations: [
228
- ...healthLimitations,
229
- ...providerLimitations,
230
- ...targetLimitations,
231
- ...ghidraExtensionLimitations(extensions),
232
- ],
233
- }));
234
- }
235
- const input = isGhidraFunctionOperation(operation)
236
- ? parseGhidraFunctionInput(operation, parameters)
237
- : parseGhidraInventoryInput(operation, parameters);
238
- if (!input.ok)
239
- return input;
240
- if (extensions.length > 0) {
241
- const started = await client.start(options?.signal);
242
- if (!started.ok)
243
- return err(projectSessionError(operation, started.error));
244
- const failed = await checkExtensions(operation, started.value);
245
- if (failed !== undefined)
246
- return err(failed);
247
- }
248
- const called = await client.callTool(operation, input.value, options?.signal === undefined ? {} : { signal: options.signal });
249
- if (!called.ok)
250
- return err(projectSessionError(operation, called.error));
251
- const result = isGhidraFunctionOperation(operation)
252
- ? parseGhidraFunctionResult(operation, called.value)
253
- : parseGhidraInventoryResult(operation, called.value);
254
- if (!result.ok)
255
- return result;
256
- let normalized = result.value;
257
- if (operation === "inspect_native_load_image") {
258
- const observations = nativeLoadImageObservationSchema.parse(result.value);
259
- if (target.format !== "dos-mz" && target.format !== "dos-com") {
260
- normalized = jsonValueSchema.parse(nativeLoadImageSchema.parse({
261
- status: "unsupported",
262
- reason: "Independent load-image verification currently supports DOS MZ and explicit DOS COM targets only.",
263
- observations,
264
- limitations: [
265
- "Other formats expose measured mappings and source identities; no format-specific verification was performed.",
266
- ],
267
- }));
268
- }
269
- else {
270
- if (client.readTargetSnapshot === undefined)
271
- return err(new ProviderAdapterError("ghidra", operation, {
272
- diagnostics: {
273
- reason: "The Ghidra client does not expose its immutable target snapshot for independent load-image verification.",
274
- },
275
- }));
276
- const snapshot = await client.readTargetSnapshot();
277
- if (!snapshot.ok)
278
- return err(projectSessionError(operation, snapshot.error));
279
- const attested = (target.format === "dos-com"
280
- ? attestGhidraDosComLoadImage
281
- : attestGhidraDosLoadImage)(snapshot.value, target.sha256 ?? "", observations);
282
- if (!attested.ok)
283
- return err(new ProviderAdapterError("ghidra", operation, {
284
- diagnostics: { reason: attested.error },
285
- }));
286
- normalized = jsonValueSchema.parse(attested.value);
287
- }
288
- }
289
- return ok(createAnalysisExecution(normalized, committedProfile.provider, {
290
- rawResult: called.value,
291
- analysisProfile: committedProfile,
292
- limitations: [
293
- ...limitationsFor(operation),
294
- ...providerLimitations,
295
- ...targetLimitations,
296
- ...ghidraExtensionLimitations(extensions),
297
- ],
298
- }));
299
- },
300
- runtimeLineageSnapshots: () => {
301
- const observation = client.runtimeLineage?.() ?? null;
302
- return observation === null
303
- ? []
304
- : [{ provider: committedProfile.provider, observation }];
305
- },
306
- close: () => client.close(),
307
- };
308
135
  }
309
136
  #inspectInstallation() {
310
137
  const options = {
@@ -364,48 +191,3 @@ const inspectWindowsP0TargetSupport = (target, diagnostics) => {
364
191
  diagnostics,
365
192
  };
366
193
  };
367
- const ghidraClientPrerequisites = (target, profile, installation) => {
368
- if (target.kind !== "executable")
369
- return err(new AnalysisCapabilityUnavailableError("ghidra", "health", `Ghidra cannot import ${target.kind} targets through this adapter.`));
370
- if (installation.status === "unavailable")
371
- return err(new ProviderAdapterError("ghidra", "health", {
372
- diagnostics: ghidraInstallationDiagnostics(installation),
373
- }));
374
- if (installation.platform === "win32" &&
375
- !hasWindowsNativeAuthority(installation.platform))
376
- return err(new AnalysisCapabilityUnavailableError("ghidra", "health", windowsNativeAuthorityUnavailableReason(installation.platform)));
377
- if (profile === undefined || profile.provider.id !== "ghidra")
378
- return err(new ProviderAdapterError("ghidra", "health"));
379
- return ok({
380
- analyzeHeadlessPath: installation.analyzeHeadlessPath,
381
- providerVersion: installation.providerVersion,
382
- profile,
383
- });
384
- };
385
- const unavailableClient = (failure) => ({
386
- execute: () => Promise.resolve(err(failure)),
387
- close: () => Promise.resolve(),
388
- });
389
- const projectSessionError = (operation, failure) => {
390
- if (operation === "annotate_native_function" &&
391
- failure.kind === "remote" &&
392
- failure.remoteCode === "invalid_function_name")
393
- return new AnalysisInputError(operation, { cause: failure }, [
394
- { path: ["name"], reason: "invalid_value", message: failure.message },
395
- ]);
396
- if (failure.kind === "cancelled")
397
- return new AnalysisCancelledError(operation);
398
- if (failure.kind === "timeout" || failure.kind === "analysis_timeout")
399
- return new AnalysisTimeoutError(operation, failure.timeoutMs ?? GHIDRA_STARTUP_TIMEOUT_MS);
400
- if (failure.kind === "remote" && failure.remoteCode === "decompile_cancelled")
401
- return new AnalysisCancelledError(operation);
402
- if (failure.kind === "remote" &&
403
- ["invalid_request", "not_found", "ambiguous"].includes(failure.remoteCode ?? ""))
404
- return new AnalysisInputError(operation, { cause: failure });
405
- if (failure.kind === "remote" && failure.remoteCode === "method_unavailable")
406
- return new AnalysisCapabilityUnavailableError("ghidra", operation, failure.message);
407
- return new ProviderAdapterError("ghidra", operation, {
408
- cause: failure,
409
- diagnostics: failure.diagnostics,
410
- });
411
- };
@@ -1,5 +1,4 @@
1
1
  import { hasWindowsNativeAuthority, windowsNativeAuthorityUnavailableReason, } from "../process/WindowsAuthority.js";
2
- import { GENERATED_MCP_TOOL_CATALOG } from "../generatedMcpToolCatalog.js";
3
2
  import { GHIDRA_FUNCTION_OPERATIONS } from "./GhidraFunctionValues.js";
4
3
  import { GHIDRA_INVENTORY_OPERATIONS } from "./GhidraInventoryValues.js";
5
4
  /** Public identity committed by every Ghidra-backed observation. */
@@ -8,14 +7,11 @@ export const GHIDRA_PROVIDER_IDENTITY = Object.freeze({
8
7
  name: "Ghidra",
9
8
  version: null,
10
9
  });
11
- const providerContractByName = new Map(GENERATED_MCP_TOOL_CATALOG.filter(({ kind }) => kind === "official-proxy" || kind === "enhanced").map((contract) => [contract.name, contract]));
12
- /** Provider-neutral contracts implemented by the Ghidra adapter. */
13
- export const GHIDRA_PROVIDER_TOOL_CONTRACTS = Object.freeze([...GHIDRA_INVENTORY_OPERATIONS, ...GHIDRA_FUNCTION_OPERATIONS].map((operation) => {
14
- const contract = providerContractByName.get(operation);
15
- if (contract === undefined)
16
- throw new TypeError(`Missing provider-neutral contract for ${operation}`);
17
- return contract;
18
- }));
10
+ /** Analyst operations implemented by the Ghidra inventory and function adapters. */
11
+ export const GHIDRA_OPERATIONS = Object.freeze([
12
+ ...GHIDRA_INVENTORY_OPERATIONS,
13
+ ...GHIDRA_FUNCTION_OPERATIONS,
14
+ ]);
19
15
  /** Health limitations shared by every Ghidra-backed capability. */
20
16
  export const healthLimitations = Object.freeze([
21
17
  "The session serves operations only after Ghidra reports default auto-analysis complete; incomplete analysis does not expose partial results.",
@@ -132,10 +128,7 @@ export const limitationsFor = (operation) => {
132
128
  }
133
129
  };
134
130
  /** Provider-neutral capabilities advertised by every non-Windows Ghidra session. */
135
- export const CAPABILITIES = Object.freeze(GHIDRA_PROVIDER_TOOL_CONTRACTS.map((contract) => {
136
- const operation = contract.analysisOperation;
137
- if (operation === null)
138
- throw new TypeError(`Missing analysis operation for ${contract.name}`);
131
+ export const CAPABILITIES = Object.freeze(GHIDRA_OPERATIONS.map((operation) => {
139
132
  return Object.freeze({
140
133
  provider: GHIDRA_PROVIDER_IDENTITY,
141
134
  operation,
@@ -150,7 +143,7 @@ export const CAPABILITIES = Object.freeze(GHIDRA_PROVIDER_TOOL_CONTRACTS.map((co
150
143
  changesPermissions: false,
151
144
  requiresRoot: false,
152
145
  }),
153
- limitations: Object.freeze(limitationsFor(contract.name)),
146
+ limitations: Object.freeze(limitationsFor(operation)),
154
147
  });
155
148
  }));
156
149
  /** Capabilities advertised for the experimental Windows x64 P0 boundary. */
@@ -0,0 +1,209 @@
1
+ import { fileURLToPath } from "node:url";
2
+ import { createAnalysisExecution, } from "../application/AnalysisProvider.js";
3
+ import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisTimeoutError, } from "../domain/analysisErrorCore.js";
4
+ import {} from "../domain/analysisErrorBase.js";
5
+ import { ProviderAdapterError } from "../domain/providerAdapterError.js";
6
+ import { err, ok } from "../domain/result.js";
7
+ import { GhidraClient } from "./GhidraClient.js";
8
+ import { GHIDRA_STARTUP_TIMEOUT_MS } from "./GhidraDefaults.js";
9
+ import { isGhidraFunctionOperation, parseGhidraFunctionInput, parseGhidraFunctionResult, } from "./GhidraFunctionValues.js";
10
+ import { isGhidraInventoryOperation, parseGhidraInventoryInput, parseGhidraInventoryResult, } from "./GhidraInventoryValues.js";
11
+ import { ghidraInstallationDiagnostics, } from "./GhidraInstallation.js";
12
+ import { unverifiedGhidraBuildLimitation } from "./GhidraInstallationPolicy.js";
13
+ import { GhidraHeadlessLauncher } from "./GhidraLauncher.js";
14
+ import { attestGhidraNativeLoadImage } from "./GhidraLoadImageAttest.js";
15
+ import { GHIDRA_PROVIDER_IDENTITY, healthLimitations, windowsP0Limitations, limitationsFor, } from "./GhidraProviderCapabilities.js";
16
+ import { ghidraExtensionFailure } from "./extensions/GhidraExtensionFailures.js";
17
+ import { ghidraExtensionSchema, validateGhidraExtensionProfile, ghidraExtensionLimitations, } from "./extensions/GhidraExtensions.js";
18
+ import { windowsNativeAuthorityUnavailableReason, hasWindowsNativeAuthority, } from "../process/WindowsAuthority.js";
19
+ /** Build one AnalysisClient for an admitted Ghidra target and profile. */
20
+ export const createGhidraProviderClient = (input) => {
21
+ const { config, logger, clientFactory, target, context, installation } = input;
22
+ const prerequisites = ghidraClientPrerequisites(target, input.profile, installation);
23
+ if (!prerequisites.ok)
24
+ return unavailableClient(prerequisites.error);
25
+ const committedProfile = prerequisites.value.profile;
26
+ const extensionProfile = ghidraExtensionSchema
27
+ .array()
28
+ .safeParse(committedProfile.parameters.analysis_extensions ?? []);
29
+ if (!extensionProfile.success ||
30
+ (config.ghidraNativeAotJar !== undefined &&
31
+ extensionProfile.data.length === 0))
32
+ return unavailableClient(new ProviderAdapterError("ghidra", "open_binary", {
33
+ diagnostics: {
34
+ reason: "Resolve the configured Ghidra extensions into an analysis profile before opening the session.",
35
+ },
36
+ }));
37
+ const extensions = extensionProfile.data;
38
+ const invalidProfile = validateGhidraExtensionProfile(extensions, config, target, installation.platform);
39
+ if (invalidProfile !== null)
40
+ return unavailableClient(new ProviderAdapterError("ghidra", "open_binary", {
41
+ diagnostics: { reason: invalidProfile },
42
+ }));
43
+ let extensionFailure;
44
+ const targetLimitations = target.format === "dos-mz"
45
+ ? [
46
+ "DOS MZ uses 16-bit x86 real mode with the Ghidra load segment 0x1000. Returned addresses are linear byte coordinates; they do not identify a unique segment:offset alias.",
47
+ "Static DOS analysis does not emulate BIOS, DOS interrupts, device ports, or self-modifying unpacking code. Packed targets require a separately identified unpacked artifact for original-program analysis; appended overlays are not the initialized load module.",
48
+ ]
49
+ : [];
50
+ const providerLimitations = installation.platform === "win32"
51
+ ? windowsP0Limitations
52
+ : installation.platform === "darwin"
53
+ ? [
54
+ "macOS sessions require a matching executable Ghidra native decompiler; REA checks for it but does not build native components or change Gatekeeper quarantine state.",
55
+ ]
56
+ : [];
57
+ const client = clientFactory({
58
+ platform: installation.platform,
59
+ launcher: new GhidraHeadlessLauncher({
60
+ analyzeHeadlessPath: prerequisites.value.analyzeHeadlessPath,
61
+ ...(config.ghidraJavaHome === undefined
62
+ ? {}
63
+ : { javaHome: config.ghidraJavaHome }),
64
+ bridgeScriptPath: fileURLToPath(new URL("../../bridge/ghidra/ReaGhidraBridge.java", import.meta.url)),
65
+ ...(target.format === "dos-mz" ? { dosMz: true } : {}),
66
+ ...(target.format === "dos-com" ? { dosCom: true } : {}),
67
+ platform: installation.platform,
68
+ ...(extensions.length === 0 ? {} : { analysisExtensions: extensions }),
69
+ }),
70
+ targetPath: installation.platform === "win32"
71
+ ? (target.sourcePath ?? target.path)
72
+ : target.path,
73
+ targetSha256: target.sha256,
74
+ transport: installation.platform === "win32"
75
+ ? "authenticated-loopback-tcp"
76
+ : "unix-socket",
77
+ providerVersion: prerequisites.value.providerVersion,
78
+ profileDigest: committedProfile.digest,
79
+ ...(["dos-mz", "dos-com"].includes(target.format)
80
+ ? {
81
+ expectedLanguageId: "x86:LE:16:Real Mode",
82
+ expectedCompilerSpecId: "default",
83
+ }
84
+ : {}),
85
+ ...(context === undefined ? {} : { runId: context.runId }),
86
+ logger: logger.child({ layer: "ghidra-bridge" }),
87
+ });
88
+ const checkExtensions = async (operation, info) => {
89
+ extensionFailure = ghidraExtensionFailure(extensions, info.analysis_extensions ?? [], operation);
90
+ if (extensionFailure === undefined)
91
+ return undefined;
92
+ await client.close();
93
+ return extensionFailure;
94
+ };
95
+ const releaseLimitation = unverifiedGhidraBuildLimitation(prerequisites.value.providerVersion);
96
+ const sessionLimitations = [
97
+ ...providerLimitations,
98
+ ...targetLimitations,
99
+ ...ghidraExtensionLimitations(extensions),
100
+ ...(releaseLimitation === undefined ? [] : [releaseLimitation]),
101
+ ];
102
+ return {
103
+ execute: async (operation, parameters, options) => {
104
+ if (extensionFailure !== undefined)
105
+ return err(extensionFailure);
106
+ if (operation !== "health" &&
107
+ !isGhidraInventoryOperation(operation) &&
108
+ !isGhidraFunctionOperation(operation))
109
+ return err(new AnalysisCapabilityUnavailableError(GHIDRA_PROVIDER_IDENTITY.id, operation, "The Ghidra adapter does not declare this operation."));
110
+ if (operation === "health") {
111
+ const started = await client.start(options?.signal);
112
+ if (!started.ok)
113
+ return err(projectSessionError(operation, started.error));
114
+ const failed = await checkExtensions(operation, started.value);
115
+ if (failed !== undefined)
116
+ return err(failed);
117
+ return ok(createAnalysisExecution(started.value, committedProfile.provider, {
118
+ analysisProfile: committedProfile,
119
+ limitations: [...healthLimitations, ...sessionLimitations],
120
+ }));
121
+ }
122
+ const input = isGhidraFunctionOperation(operation)
123
+ ? parseGhidraFunctionInput(operation, parameters)
124
+ : parseGhidraInventoryInput(operation, parameters);
125
+ if (!input.ok)
126
+ return input;
127
+ if (extensions.length > 0) {
128
+ const started = await client.start(options?.signal);
129
+ if (!started.ok)
130
+ return err(projectSessionError(operation, started.error));
131
+ const failed = await checkExtensions(operation, started.value);
132
+ if (failed !== undefined)
133
+ return err(failed);
134
+ }
135
+ const called = await client.callTool(operation, input.value, options?.signal === undefined ? {} : { signal: options.signal });
136
+ if (!called.ok)
137
+ return err(projectSessionError(operation, called.error));
138
+ const result = isGhidraFunctionOperation(operation)
139
+ ? parseGhidraFunctionResult(operation, called.value)
140
+ : parseGhidraInventoryResult(operation, called.value);
141
+ if (!result.ok)
142
+ return result;
143
+ let normalized = result.value;
144
+ if (operation === "inspect_native_load_image") {
145
+ const attested = await attestGhidraNativeLoadImage(target, operation, result.value, client, (failure) => projectSessionError(operation, failure));
146
+ if (!attested.ok)
147
+ return attested;
148
+ normalized = attested.value;
149
+ }
150
+ return ok(createAnalysisExecution(normalized, committedProfile.provider, {
151
+ rawResult: called.value,
152
+ analysisProfile: committedProfile,
153
+ limitations: [...limitationsFor(operation), ...sessionLimitations],
154
+ }));
155
+ },
156
+ runtimeLineageSnapshots: () => {
157
+ const observation = client.runtimeLineage?.() ?? null;
158
+ return observation === null
159
+ ? []
160
+ : [{ provider: committedProfile.provider, observation }];
161
+ },
162
+ close: () => client.close(),
163
+ };
164
+ };
165
+ const ghidraClientPrerequisites = (target, profile, installation) => {
166
+ if (target.kind !== "executable")
167
+ return err(new AnalysisCapabilityUnavailableError("ghidra", "health", `Ghidra cannot import ${target.kind} targets through this adapter.`));
168
+ if (installation.status === "unavailable")
169
+ return err(new ProviderAdapterError("ghidra", "health", {
170
+ diagnostics: ghidraInstallationDiagnostics(installation),
171
+ }));
172
+ if (installation.platform === "win32" &&
173
+ !hasWindowsNativeAuthority(installation.platform))
174
+ return err(new AnalysisCapabilityUnavailableError("ghidra", "health", windowsNativeAuthorityUnavailableReason(installation.platform)));
175
+ if (profile === undefined || profile.provider.id !== "ghidra")
176
+ return err(new ProviderAdapterError("ghidra", "health"));
177
+ return ok({
178
+ analyzeHeadlessPath: installation.analyzeHeadlessPath,
179
+ providerVersion: installation.providerVersion,
180
+ profile,
181
+ });
182
+ };
183
+ const unavailableClient = (failure) => ({
184
+ execute: () => Promise.resolve(err(failure)),
185
+ close: () => Promise.resolve(),
186
+ });
187
+ const projectSessionError = (operation, failure) => {
188
+ if (operation === "annotate_native_function" &&
189
+ failure.kind === "remote" &&
190
+ failure.remoteCode === "invalid_function_name")
191
+ return new AnalysisInputError(operation, { cause: failure }, [
192
+ { path: ["name"], reason: "invalid_value", message: failure.message },
193
+ ]);
194
+ if (failure.kind === "cancelled")
195
+ return new AnalysisCancelledError(operation);
196
+ if (failure.kind === "timeout" || failure.kind === "analysis_timeout")
197
+ return new AnalysisTimeoutError(operation, failure.timeoutMs ?? GHIDRA_STARTUP_TIMEOUT_MS);
198
+ if (failure.kind === "remote" && failure.remoteCode === "decompile_cancelled")
199
+ return new AnalysisCancelledError(operation);
200
+ if (failure.kind === "remote" &&
201
+ ["invalid_request", "not_found", "ambiguous"].includes(failure.remoteCode ?? ""))
202
+ return new AnalysisInputError(operation, { cause: failure });
203
+ if (failure.kind === "remote" && failure.remoteCode === "method_unavailable")
204
+ return new AnalysisCapabilityUnavailableError("ghidra", operation, failure.message);
205
+ return new ProviderAdapterError("ghidra", operation, {
206
+ cause: failure,
207
+ diagnostics: failure.diagnostics,
208
+ });
209
+ };
@@ -2,12 +2,17 @@
2
2
  export class GhidraResponseBuffer {
3
3
  #options;
4
4
  #buffer = "";
5
+ #fragments = [];
5
6
  constructor(options) {
6
7
  this.#options = options;
7
8
  }
8
9
  /** Consume one decoded socket chunk. */
9
10
  push(chunk) {
10
- this.#buffer += chunk;
11
+ this.#fragments.push(chunk);
12
+ if (!chunk.includes("\n"))
13
+ return;
14
+ this.#buffer += this.#fragments.join("");
15
+ this.#fragments = [];
11
16
  let newline = this.#buffer.indexOf("\n");
12
17
  while (newline >= 0) {
13
18
  const encodedLine = this.#buffer.slice(0, newline);
@@ -21,5 +26,6 @@ export class GhidraResponseBuffer {
21
26
  /** Drop any incomplete line when a session closes. */
22
27
  reset() {
23
28
  this.#buffer = "";
29
+ this.#fragments = [];
24
30
  }
25
31
  }
@@ -45,6 +45,18 @@ const report = z
45
45
  .optional(),
46
46
  })
47
47
  .strict();
48
+ const validateNonRecoveryMetadata = (value, recovered) => {
49
+ if (recovered)
50
+ return null;
51
+ if (value.reason === null || value.reason.trim().length === 0)
52
+ return "NativeAOT non-recovery status omits its required reason.";
53
+ return value.method_tables !== 0 ||
54
+ value.types !== undefined ||
55
+ value.derived_memory !== undefined ||
56
+ value.coverage !== undefined
57
+ ? "NativeAOT non-recovery status carries recovered metadata."
58
+ : null;
59
+ };
48
60
  /** Validate the pinned producer representation before its result enters Evidence. */
49
61
  export const validateNativeAotReport = (value) => {
50
62
  if (value.status === "failed" &&
@@ -59,7 +71,8 @@ export const validateNativeAotReport = (value) => {
59
71
  return validateRecoveredMetadata(parsed.data);
60
72
  };
61
73
  const validateRecoveredMetadata = (value) => {
62
- if (["complete", "partial"].includes(value.status) &&
74
+ const recovered = ["complete", "partial"].includes(value.status);
75
+ if (recovered &&
63
76
  (value.method_tables === 0 ||
64
77
  value.format_major !== 9 ||
65
78
  value.format_minor !== 1 ||
@@ -70,6 +83,9 @@ const validateRecoveredMetadata = (value) => {
70
83
  value.coverage === undefined ||
71
84
  value.reason !== null))
72
85
  return "NativeAOT recovery omitted its supported format, method-table inventory or derived-memory identity.";
86
+ const nonRecoveryInvalid = validateNonRecoveryMetadata(value, recovered);
87
+ if (nonRecoveryInvalid !== null)
88
+ return nonRecoveryInvalid;
73
89
  const coverage = value.coverage;
74
90
  if (coverage !== undefined &&
75
91
  (coverage.frozen_objects_annotated > coverage.frozen_object_candidates ||
@@ -3,58 +3,12 @@ import { accessSync, constants } from "node:fs";
3
3
  import { createAnalysisExecution } from "../application/AnalysisProvider.js";
4
4
  import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js";
5
5
  import { err } from "../domain/result.js";
6
- import { GENERATED_MCP_TOOL_CATALOG } from "../generatedMcpToolCatalog.js";
7
6
  import { HopperApplicationLauncher } from "./BridgeLauncher.js";
8
7
  import { hopperLoaderArgsForTarget, resolveHopperAnalysisProfile, } from "./HopperAnalysisProfile.js";
9
8
  import { HopperClient } from "./HopperClient.js";
10
- /** Public identity committed by every Hopper-backed observation. */
11
- export const HOPPER_PROVIDER_IDENTITY = Object.freeze({
12
- id: "hopper",
13
- name: "Hopper Disassembler",
14
- version: null,
15
- });
9
+ import { CAPABILITIES, HOPPER_PROVIDER_IDENTITY, } from "./HopperProviderCapabilities.js";
10
+ export { HOPPER_PROVIDER_IDENTITY, HOPPER_OPERATIONS, } from "./HopperProviderCapabilities.js";
16
11
  const IDENTITY = HOPPER_PROVIDER_IDENTITY;
17
- const MUTATING_OPERATIONS = new Set([
18
- "set_address_name",
19
- "set_addresses_names",
20
- "set_bookmark",
21
- "set_comment",
22
- "set_inline_comment",
23
- "unset_bookmark",
24
- ]);
25
- /** Tool contracts implemented directly by the Hopper adapter. */
26
- export const HOPPER_PROVIDER_TOOL_CONTRACTS = Object.freeze([
27
- ...GENERATED_MCP_TOOL_CATALOG.filter(({ kind, name }) => kind === "official-proxy" &&
28
- name !== "annotate_native_function" &&
29
- name !== "inspect_native_load_image" &&
30
- name !== "inspect_native_data_type" &&
31
- name !== "inspect_native_instruction" &&
32
- name !== "resolve_native_call_targets"),
33
- ...GENERATED_MCP_TOOL_CATALOG.filter(({ name }) => name === "analyze_function"),
34
- ]);
35
- const CAPABILITIES = Object.freeze(HOPPER_PROVIDER_TOOL_CONTRACTS.map((contract) => {
36
- const operation = contract.analysisOperation;
37
- if (operation === null)
38
- throw new TypeError(`Missing analysis operation for ${contract.name}`);
39
- return Object.freeze({
40
- provider: IDENTITY,
41
- operation,
42
- available: true,
43
- reason: null,
44
- effects: Object.freeze({
45
- mutatesArtifact: MUTATING_OPERATIONS.has(contract.name),
46
- launchesProcess: true,
47
- mayShowUi: true,
48
- mayAccessNetwork: false,
49
- mayWriteFilesystem: MUTATING_OPERATIONS.has(contract.name),
50
- changesPermissions: false,
51
- requiresRoot: false,
52
- }),
53
- limitations: Object.freeze([
54
- "Results depend on Hopper's completed static analysis.",
55
- ]),
56
- });
57
- }));
58
12
  /** Concrete analysis provider backed by REA's private Hopper bridge. */
59
13
  export class HopperProvider {
60
14
  config;