rea-agents 3.1.0 → 3.2.1

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 (590) hide show
  1. package/README.md +72 -95
  2. package/bridge/ghidra/ReaGhidraBridge.java +609 -841
  3. package/bridge/hopper_bridge.py +99 -344
  4. package/dist/application/AbortablePromise.js +6 -3
  5. package/dist/application/AnalysisSnapshotCache.js +0 -1
  6. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  7. package/dist/application/AndroidApplicationService.js +1 -1
  8. package/dist/application/AppleApplicationService.js +1 -1
  9. package/dist/application/ArtifactExtraction.js +35 -54
  10. package/dist/application/ArtifactExtractionDestination.js +17 -0
  11. package/dist/application/ArtifactGraphConstruction.js +2 -17
  12. package/dist/application/ArtifactInventory/classify.js +2 -6
  13. package/dist/application/ArtifactInventory/hash.js +2 -20
  14. package/dist/application/ArtifactInventory/scanCanonical.js +8 -12
  15. package/dist/application/ArtifactInventory/scanReader.js +69 -51
  16. package/dist/application/ArtifactInventory.js +6 -14
  17. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  18. package/dist/application/BinarySession.js +41 -13
  19. package/dist/application/BinarySessionComposition.js +0 -11
  20. package/dist/application/BinarySessionOpen.js +2 -1
  21. package/dist/application/BinarySessionRecords.js +5 -93
  22. package/dist/application/BinarySessionStatus.js +5 -16
  23. package/dist/application/BinaryTargetResolver.js +216 -0
  24. package/dist/application/BrowserEvidence.js +42 -58
  25. package/dist/application/BrowserObservationService.js +3 -6
  26. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  27. package/dist/application/BrowserScenarioEvidence.js +3 -3
  28. package/dist/application/CallPathTracing.js +2 -36
  29. package/dist/application/CapabilityInventory.js +10 -15
  30. package/dist/application/ClientConfigurationDocument.js +27 -0
  31. package/dist/application/ClientRegistrationStatus.js +16 -13
  32. package/dist/application/CommandShimReplay.js +14 -1
  33. package/dist/application/DirectAnalysis.js +22 -46
  34. package/dist/application/DirectAnalysisStatus.js +5 -61
  35. package/dist/application/Doctor.js +11 -32
  36. package/dist/application/DoctorDiagnostics.js +1 -2
  37. package/dist/application/DoctorScope.js +1 -1
  38. package/dist/application/ElectronActiveEvidence.js +3 -8
  39. package/dist/application/ElectronActiveObservationService.js +3 -6
  40. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  41. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  42. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  43. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  44. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  45. package/dist/application/ElectronEvidence.js +4 -7
  46. package/dist/application/ElectronObservationService.js +5 -9
  47. package/dist/application/EnhancedLiteralTracing.js +42 -65
  48. package/dist/application/EnhancedTools.js +76 -44
  49. package/dist/application/EvidenceBundleCommands.js +11 -11
  50. package/dist/application/EvidenceBundleFiles.js +9 -15
  51. package/dist/application/EvidenceLedger.js +6 -41
  52. package/dist/application/FilesystemSnapshot.js +2 -3
  53. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  54. package/dist/application/InventoryProjectionEvidence.js +4 -2
  55. package/dist/application/InvestigationProviders.js +1 -1
  56. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  57. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  58. package/dist/application/JavaScriptApplicationService.js +6 -29
  59. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  60. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  61. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  62. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  63. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  64. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  65. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  66. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  67. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  68. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  69. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  70. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  71. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  72. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  73. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  74. package/dist/application/JavaScriptJsonModules.js +2 -2
  75. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  76. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  77. package/dist/application/JavaScriptReplayService.js +6 -32
  78. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  79. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  80. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  81. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  82. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  83. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  84. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  85. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  86. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  87. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  88. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  89. package/dist/application/JsonFiles.js +79 -0
  90. package/dist/application/LinuxHopper.js +11 -9
  91. package/dist/application/LoopbackReplay.js +26 -23
  92. package/dist/application/LoopbackReplayRecorder.js +29 -1
  93. package/dist/application/ManagedApplicationGraphService.js +1 -2
  94. package/dist/application/ManagedMemberComparisonService.js +11 -41
  95. package/dist/application/ManagedNativeVerificationService.js +1 -2
  96. package/dist/application/ManagedReconstructionService.js +1 -1
  97. package/dist/application/ManagedRuntimeCorrelationService.js +5 -8
  98. package/dist/application/NativeApiInspection.js +2 -7
  99. package/dist/application/NativeUiActionTrace.js +394 -0
  100. package/dist/application/NodeRuntimeCharacterizationService.js +3 -7
  101. package/dist/application/PermissionAuthority.js +15 -7
  102. package/dist/application/PermissionFailure.js +5 -0
  103. package/dist/application/ProcessCaptureAuthority.js +5 -7
  104. package/dist/application/ProcessCaptureJournal.js +3 -2
  105. package/dist/application/ProcessCaptureLifecycle.js +5 -12
  106. package/dist/application/ProcessCheckpoints.js +29 -11
  107. package/dist/application/ProcessCli.js +6 -16
  108. package/dist/application/ProcessEvidence.js +5 -7
  109. package/dist/application/ProcessHarness.js +52 -17
  110. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  111. package/dist/application/ProcessReactiveEffects.js +9 -3
  112. package/dist/application/ProcessReactiveHarness.js +13 -7
  113. package/dist/application/ProcessSampling.js +2 -4
  114. package/dist/application/ProcessTimer.js +39 -0
  115. package/dist/application/ProjectPermissionStore.js +39 -96
  116. package/dist/application/RealHopperAssertions.js +20 -66
  117. package/dist/application/ReconstructionCoverageService.js +12 -58
  118. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  119. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  120. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  121. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  122. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  123. package/dist/application/ReferenceSourceImport.js +19 -45
  124. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  125. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  126. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  127. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  128. package/dist/application/SessionProviderRouter.js +2 -2
  129. package/dist/application/Setup.js +1 -3
  130. package/dist/application/SetupClientConfiguration.js +22 -93
  131. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  132. package/dist/application/StoreFileLock.js +119 -0
  133. package/dist/application/TerminalRenderer.js +2 -3
  134. package/dist/application/Uninstall.js +9 -14
  135. package/dist/application/UnknownEvidence.js +1 -1
  136. package/dist/artifacts/ArtifactPaths.js +2 -5
  137. package/dist/artifacts/ArtifactProvider.js +36 -58
  138. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  139. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  140. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  141. package/dist/artifacts/NibArchive.js +269 -0
  142. package/dist/artifacts/SafeOutputTree.js +15 -24
  143. package/dist/browser/BrowserProcessStartup.js +1 -2
  144. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  145. package/dist/browser/CdpBrowserProvider.js +3 -13
  146. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  147. package/dist/browser/CdpCaptureDocuments.js +28 -76
  148. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  149. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  150. package/dist/browser/CdpCaptureEvents.js +2 -8
  151. package/dist/browser/CdpCaptureStorage.js +9 -20
  152. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -98
  153. package/dist/browser/CdpCaptureValues.js +21 -21
  154. package/dist/browser/CdpConnection.js +10 -25
  155. package/dist/browser/CdpElectronInspection.js +26 -50
  156. package/dist/browser/CdpElectronProvider.js +10 -35
  157. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  158. package/dist/browser/CdpElectronScripts.js +6 -35
  159. package/dist/browser/CdpElectronWorkers.js +6 -10
  160. package/dist/browser/CdpEndpoint.js +25 -41
  161. package/dist/browser/CdpObservationSession.js +14 -26
  162. package/dist/browser/CdpPageCapture.js +34 -48
  163. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  164. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  165. package/dist/browser/CdpSafeMetadata.js +19 -22
  166. package/dist/browser/CdpScreenshot.js +3 -5
  167. package/dist/browser/CdpTargetSession.js +1 -2
  168. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  169. package/dist/browser/ElectronFileScope.js +8 -19
  170. package/dist/browser/JavaScriptRuntimeScope.js +9 -14
  171. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  172. package/dist/browser/PlaywrightElectronActiveActions.js +54 -69
  173. package/dist/browser/PlaywrightElectronActiveProvider.js +14 -34
  174. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  175. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  176. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  177. package/dist/browser/PlaywrightScenarioBrowser.js +3 -5
  178. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  179. package/dist/browser/PlaywrightScenarioSession.js +14 -30
  180. package/dist/browser/PngVisualDiff.js +22 -14
  181. package/dist/browser/SensitiveTextCapture.js +0 -17
  182. package/dist/browser/V8InspectorCaptureProjection.js +7 -8
  183. package/dist/browser/V8InspectorEndpoint.js +12 -14
  184. package/dist/browser/V8InspectorProvider.js +20 -61
  185. package/dist/browser/WebSourceMapFetcher.js +56 -176
  186. package/dist/catalogIdentity.js +0 -54
  187. package/dist/cli/artifactCommands.js +49 -77
  188. package/dist/cli/coreAnalysisCommands.js +83 -133
  189. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  190. package/dist/cli/managedCommands.js +5 -270
  191. package/dist/cli/setupCommands.js +3 -12
  192. package/dist/cli/utilityCommands.js +7 -41
  193. package/dist/cli.js +0 -2
  194. package/dist/cliApplicationCommands.js +42 -112
  195. package/dist/cliBrowserAdvancedCommands.js +10 -106
  196. package/dist/cliBrowserCommands.js +15 -127
  197. package/dist/cliBrowserContext.js +30 -0
  198. package/dist/cliCommandNames.js +4 -5
  199. package/dist/cliElectronCommands.js +8 -72
  200. package/dist/cliEvidenceCommands.js +8 -77
  201. package/dist/cliJavaScriptRuntimeCommands.js +9 -91
  202. package/dist/cliJsonInput.js +4 -14
  203. package/dist/cliObservationOptions.js +11 -96
  204. package/dist/cliPolicyCommands.js +2 -17
  205. package/dist/cliProcessCommands.js +3 -3
  206. package/dist/cliSetup.js +0 -13
  207. package/dist/config/browserScenario.js +2 -2
  208. package/dist/config/environment.js +0 -9
  209. package/dist/config/parseConfig.js +1 -33
  210. package/dist/config/parsers.js +6 -27
  211. package/dist/config/passiveObservation.js +7 -77
  212. package/dist/config/permissions.js +0 -7
  213. package/dist/contracts/analysisSearchContract.js +2 -5
  214. package/dist/contracts/applicationToolContracts.js +56 -109
  215. package/dist/contracts/applicationWorkflowInputContracts.js +27 -102
  216. package/dist/contracts/artifactComparisonExample.js +58 -60
  217. package/dist/contracts/artifactToolContracts.js +20 -67
  218. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  219. package/dist/contracts/browserToolContracts.js +8 -73
  220. package/dist/contracts/electronToolContracts.js +8 -108
  221. package/dist/contracts/enhancedInputs.js +23 -54
  222. package/dist/contracts/errorSchemas.js +0 -1
  223. package/dist/contracts/functionComparisonExample.js +10 -24
  224. package/dist/contracts/functionInstructionContract.js +1 -3
  225. package/dist/contracts/functionWorkflowToolContracts.js +2 -2
  226. package/dist/contracts/hopperMemoryContracts.js +3 -3
  227. package/dist/contracts/investigationExamples.js +14 -11
  228. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  229. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  230. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  231. package/dist/contracts/managedToolContracts.js +6 -95
  232. package/dist/contracts/managedWorkflowExamples.js +77 -128
  233. package/dist/contracts/managedWorkflowToolContracts.js +51 -77
  234. package/dist/contracts/nativeToolContracts.js +7 -11
  235. package/dist/contracts/processCaptureExample.js +2 -69
  236. package/dist/contracts/promptContracts.js +49 -67
  237. package/dist/contracts/providerSelection.js +0 -1
  238. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  239. package/dist/contracts/sessionStatusContract.js +1 -17
  240. package/dist/contracts/sessionToolSchemas.js +6 -15
  241. package/dist/contracts/toolContractExamples.js +11 -11
  242. package/dist/contracts/toolContractHelpers.js +0 -4
  243. package/dist/contracts/toolContracts.js +60 -71
  244. package/dist/contracts/toolEffects.js +5 -13
  245. package/dist/contracts/toolOutputSchemaGroups.js +37 -91
  246. package/dist/contracts/toolOutputSchemaPrimitives.js +16 -56
  247. package/dist/contracts/toolSchemaMetadata.js +8 -19
  248. package/dist/contracts/unknownContractExamples.js +0 -2
  249. package/dist/domain/analysisErrorPresentation.js +46 -54
  250. package/dist/domain/analysisErrorProjection.js +28 -37
  251. package/dist/domain/analysisProfile.js +3 -31
  252. package/dist/domain/analysisSnapshot.js +3 -12
  253. package/dist/domain/androidApplication.js +15 -54
  254. package/dist/domain/appleApplication.js +24 -67
  255. package/dist/domain/artifactComparison.js +11 -29
  256. package/dist/domain/artifactGraph.js +14 -44
  257. package/dist/domain/artifactInspection.js +38 -69
  258. package/dist/domain/artifactInventoryEvidence.js +27 -21
  259. package/dist/domain/binaryTarget.js +2 -221
  260. package/dist/domain/browserCaptureComparison.js +47 -24
  261. package/dist/domain/browserObservation.js +28 -193
  262. package/dist/domain/browserObservationSchemas.js +5 -23
  263. package/dist/domain/browserScenario.js +11 -14
  264. package/dist/domain/browserScenarioCapture.js +11 -12
  265. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  266. package/dist/domain/browserScenarioDiff.js +2 -59
  267. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  268. package/dist/domain/browserScenarioDiffValues.js +21 -38
  269. package/dist/domain/browserScenarioValues.js +80 -109
  270. package/dist/domain/browserSession.js +4 -7
  271. package/dist/domain/bundleComparison.js +6 -32
  272. package/dist/domain/bytecodeProvider.js +20 -19
  273. package/dist/domain/callPath.js +47 -167
  274. package/dist/domain/callPathSchemas.js +79 -0
  275. package/dist/domain/changedBehavior.js +34 -60
  276. package/dist/domain/completionLedgerGeneration.js +8 -14
  277. package/dist/domain/conformancePackage.js +126 -97
  278. package/dist/domain/conformanceReplay.js +36 -8
  279. package/dist/domain/conformanceTrustGate.js +23 -14
  280. package/dist/domain/customProtocolCapture.js +1 -1
  281. package/dist/domain/electronActiveObservation.js +70 -103
  282. package/dist/domain/electronObservation.js +14 -80
  283. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  284. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  285. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  286. package/dist/domain/electronStaticAnalysisValues.js +10 -17
  287. package/dist/domain/errors.js +33 -54
  288. package/dist/domain/eventProcessTree.js +20 -12
  289. package/dist/domain/evidence.js +2 -10
  290. package/dist/domain/evidenceBundle.js +3 -5
  291. package/dist/domain/evidenceCompletionLedger.js +6 -8
  292. package/dist/domain/functionComparison.js +4 -14
  293. package/dist/domain/functionComparisonNormalization.js +4 -11
  294. package/dist/domain/functionComparisonResults.js +25 -15
  295. package/dist/domain/functionComparisonSchemas.js +49 -33
  296. package/dist/domain/functionDossierEvidence.js +31 -156
  297. package/dist/domain/hopperStartupFailure.js +1 -1
  298. package/dist/domain/hopperValues.js +15 -136
  299. package/dist/domain/interfaceBuilderGraph.js +654 -0
  300. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  301. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  302. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  303. package/dist/domain/javascriptApplicationGraph.js +3 -13
  304. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  305. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  306. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  307. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  308. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  309. package/dist/domain/javascriptAstFingerprint.js +25 -58
  310. package/dist/domain/javascriptAstValues.js +9 -0
  311. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  312. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  313. package/dist/domain/javascriptExportShapeComparisonSchemas.js +68 -75
  314. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  315. package/dist/domain/javascriptFeatureSeed.js +20 -12
  316. package/dist/domain/javascriptFeatureTrace.js +13 -67
  317. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  318. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  319. package/dist/domain/javascriptNativeHandoff.js +1 -1
  320. package/dist/domain/javascriptReplay.js +24 -41
  321. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  322. package/dist/domain/javascriptRuntimeObservation.js +42 -103
  323. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  324. package/dist/domain/javascriptRuntimeReconciliationActive.js +8 -17
  325. package/dist/domain/javascriptRuntimeReconciliationGraph.js +10 -23
  326. package/dist/domain/javascriptRuntimeReconciliationMatching.js +18 -12
  327. package/dist/domain/javascriptRuntimeReconciliationParsing.js +16 -45
  328. package/dist/domain/javascriptRuntimeReconciliationResult.js +4 -5
  329. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  330. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +33 -48
  331. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  332. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  333. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  334. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  335. package/dist/domain/javascriptSemanticCalls.js +5 -32
  336. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  337. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  338. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  339. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  340. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  341. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  342. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  343. package/dist/domain/javascriptSemanticIr.js +1 -29
  344. package/dist/domain/javascriptSemanticObjects.js +1 -5
  345. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  346. package/dist/domain/javascriptSemanticProjection.js +0 -18
  347. package/dist/domain/javascriptSemanticPromises.js +9 -16
  348. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  349. package/dist/domain/javascriptSemanticQuery.js +17 -139
  350. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  351. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  352. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  353. package/dist/domain/javascriptSemanticResources.js +1 -6
  354. package/dist/domain/javascriptSemanticReturns.js +10 -27
  355. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  356. package/dist/domain/javascriptSemanticValues.js +44 -62
  357. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  358. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  359. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  360. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  361. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  362. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  363. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  364. package/dist/domain/jsonShape.js +7 -33
  365. package/dist/domain/localPath.js +7 -0
  366. package/dist/domain/managedApplicationGraph.js +9 -41
  367. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  368. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  369. package/dist/domain/managedArtifact.js +14 -27
  370. package/dist/domain/managedMemberComparison.js +90 -92
  371. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  372. package/dist/domain/managedMemberComparisonItems.js +221 -0
  373. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  374. package/dist/domain/managedNativeVerification.js +3 -6
  375. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  376. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  377. package/dist/domain/managedReconstruction.js +19 -23
  378. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  379. package/dist/domain/nativeApiBoundary.js +2 -7
  380. package/dist/domain/nativeInspection.js +0 -2
  381. package/dist/domain/nativeInvestigationGraph.js +351 -0
  382. package/dist/domain/nativeValueFlow.js +61 -0
  383. package/dist/domain/nodeRuntimeCharacterization.js +1 -5
  384. package/dist/domain/objcSwiftMetadata.js +254 -0
  385. package/dist/domain/peInspection.js +1 -1
  386. package/dist/domain/permissionPolicy.js +13 -0
  387. package/dist/domain/processCapture.js +76 -113
  388. package/dist/domain/processCaptureExample.js +68 -0
  389. package/dist/domain/processCaptureParsing.js +21 -0
  390. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  391. package/dist/domain/processCaptureValidation.js +1 -7
  392. package/dist/domain/processComparison.js +3 -12
  393. package/dist/domain/processReactiveMatching.js +29 -50
  394. package/dist/domain/processReactiveRuntime.js +4 -8
  395. package/dist/domain/processReactiveScenario.js +28 -94
  396. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  397. package/dist/domain/processReactiveTransition.js +33 -18
  398. package/dist/domain/processScenario.js +56 -90
  399. package/dist/domain/processTraceComparison.js +0 -8
  400. package/dist/domain/processTraceEvaluation.js +14 -4
  401. package/dist/domain/processTraceSpecification.js +11 -17
  402. package/dist/domain/protocolCapture.js +3 -3
  403. package/dist/domain/reconstructionCoverage.js +62 -129
  404. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  405. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  406. package/dist/domain/reconstructionReadiness.js +1 -2
  407. package/dist/domain/reconstructionReadinessSchemas.js +36 -38
  408. package/dist/domain/reconstructionUnknowns.js +3 -3
  409. package/dist/domain/reconstructionVerification.js +13 -47
  410. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  411. package/dist/domain/referenceSourceGraph.js +53 -61
  412. package/dist/domain/referenceSourceImportParsing.js +1 -5
  413. package/dist/domain/replayMachine.js +19 -31
  414. package/dist/domain/replayMachineRun.js +15 -63
  415. package/dist/domain/replayMachineRuntime.js +41 -41
  416. package/dist/domain/replayMachineValues.js +84 -0
  417. package/dist/domain/residualUnknown.js +25 -30
  418. package/dist/domain/runtimeCharacterization.js +15 -16
  419. package/dist/domain/runtimeIdentification.js +48 -47
  420. package/dist/domain/sourceToBundleComparison.js +9 -85
  421. package/dist/domain/sourceToBundleComparisonSchemas.js +17 -42
  422. package/dist/domain/sourceToBundleSignals.js +4 -15
  423. package/dist/domain/staticRuntimeCorrelation.js +37 -49
  424. package/dist/domain/symbolAnalysis.js +10 -19
  425. package/dist/domain/unicodeCodePointOrder.js +12 -0
  426. package/dist/domain/webBundleAnalysis.js +70 -99
  427. package/dist/domain/webBundleAnalyzer.js +2 -4
  428. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  429. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  430. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  431. package/dist/domain/webCaptureDiff.js +33 -73
  432. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  433. package/dist/domain/webContentArtifact.js +1 -10
  434. package/dist/domain/webMcpDiscovery.js +3 -14
  435. package/dist/domain/webScreenshot.js +58 -34
  436. package/dist/domain/zipPackageFormat.js +7 -0
  437. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  438. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  439. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  440. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  441. package/dist/dotnet/ManagedMemberRows.js +16 -16
  442. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  443. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  444. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  445. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  446. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  447. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  448. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -41
  449. package/dist/dotnet/ManagedPeReader.js +2 -2
  450. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  451. package/dist/generatedMcpToolCatalog.js +1 -1
  452. package/dist/generatedPackageMetadata.js +1 -1
  453. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  454. package/dist/ghidra/GhidraClient.js +4 -12
  455. package/dist/ghidra/GhidraClientWire.js +9 -5
  456. package/dist/ghidra/GhidraDefaults.js +0 -18
  457. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  458. package/dist/ghidra/GhidraDoctor.js +16 -12
  459. package/dist/ghidra/GhidraFunctionValues.js +65 -108
  460. package/dist/ghidra/GhidraInstallation.js +98 -42
  461. package/dist/ghidra/GhidraInventoryValues.js +16 -85
  462. package/dist/ghidra/GhidraLauncher.js +0 -8
  463. package/dist/ghidra/GhidraProvider.js +15 -22
  464. package/dist/ghidra/GhidraProviderCapabilities.js +6 -47
  465. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  466. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  467. package/dist/ghidra/GhidraSessionValues.js +0 -2
  468. package/dist/ghidra/GhidraTransport.js +4 -7
  469. package/dist/ghidra/protocol.js +2 -2
  470. package/dist/hopper/BridgeLauncher.js +112 -36
  471. package/dist/hopper/HopperAnalysisProfile.js +1 -1
  472. package/dist/hopper/HopperCleanup.js +6 -3
  473. package/dist/hopper/HopperClient.js +4 -7
  474. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  475. package/dist/hopper/HopperProvider.js +0 -16
  476. package/dist/hopper/HopperRequestQueue.js +21 -40
  477. package/dist/hopper/HopperResponseStream.js +1 -9
  478. package/dist/hopper/HopperSessionValues.js +3 -2
  479. package/dist/hopper/HopperTargetLease.js +119 -0
  480. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  481. package/dist/hopper/LinuxPrivateDisplayProbe.js +5 -16
  482. package/dist/hopper/protocol.js +6 -4
  483. package/dist/main/reload.js +0 -3
  484. package/dist/main/shutdown.js +1 -1
  485. package/dist/main/state.js +0 -9
  486. package/dist/main/transport.js +0 -5
  487. package/dist/mcpDoctor.js +25 -45
  488. package/dist/native/CommandRunner.js +18 -25
  489. package/dist/native/NativeMacOSProvider.js +13 -38
  490. package/dist/native/NativeMachoInspection.js +1 -1
  491. package/dist/process/BoundedFileBytes.js +17 -0
  492. package/dist/process/ExecFileOutput.js +11 -0
  493. package/dist/process/PendingOperations.js +8 -6
  494. package/dist/process/ProcessOwnership.js +3 -2
  495. package/dist/process/ProcessOwnershipObservation.js +0 -1
  496. package/dist/process/ProviderProcess.js +7 -28
  497. package/dist/reference/ReferenceSourceReader.js +8 -24
  498. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  499. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  500. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  501. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  502. package/dist/replay/JavaScriptReplayWorker.js +3 -5
  503. package/dist/replay/LinuxJavaScriptReplayRunner.js +33 -29
  504. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  505. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  506. package/dist/replay/ReplayOutcome.js +1 -3
  507. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  508. package/dist/replay/ReplaySeccompFile.js +29 -0
  509. package/dist/replay/ReplayWorkerProtocol.js +0 -2
  510. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  511. package/dist/server/ProcessCaptureElicitation.js +4 -8
  512. package/dist/server/createServer.js +6 -44
  513. package/dist/server/promptCompletion.js +37 -61
  514. package/dist/server/recordDerivedEvidence.js +1 -1
  515. package/dist/server/registerApplicationTools/characterization.js +4 -8
  516. package/dist/server/registerApplicationTools/compareExportShapes.js +5 -10
  517. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -10
  518. package/dist/server/registerApplicationTools/compareVersions.js +5 -10
  519. package/dist/server/registerApplicationTools/controlledReplay.js +3 -5
  520. package/dist/server/registerApplicationTools/coverage.js +6 -71
  521. package/dist/server/registerApplicationTools/helpers.js +1 -13
  522. package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
  523. package/dist/server/registerApplicationTools/traceFeature.js +5 -9
  524. package/dist/server/registerApplicationTools/traceSemantics.js +5 -8
  525. package/dist/server/registerApplicationTools.js +0 -2
  526. package/dist/server/registerArtifactComparisonTool.js +23 -27
  527. package/dist/server/registerBrowserScenarioTool.js +4 -4
  528. package/dist/server/registerBrowserTools.js +5 -8
  529. package/dist/server/registerBundleComparisonTool.js +5 -7
  530. package/dist/server/registerCloseLifecycleTool.js +2 -16
  531. package/dist/server/registerElectronTools.js +10 -29
  532. package/dist/server/registerEnhancedTools.js +10 -11
  533. package/dist/server/registerEvidenceTools.js +15 -22
  534. package/dist/server/registerFunctionComparisonTool.js +30 -25
  535. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  536. package/dist/server/registerInvestigationTools.js +20 -116
  537. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -4
  538. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +15 -17
  539. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  540. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -8
  541. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +3 -8
  542. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +10 -14
  543. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +9 -15
  544. package/dist/server/registerOfficialTools.js +1 -43
  545. package/dist/server/registerProcessComparisonTool.js +33 -23
  546. package/dist/server/registerPrompts.js +19 -17
  547. package/dist/server/registerSessionRecordTools.js +10 -156
  548. package/dist/server/registerSessionStatusTool.js +6 -69
  549. package/dist/server/registerSessionTools.js +10 -51
  550. package/dist/server/sessionAvailabilityPolicy.js +0 -2
  551. package/dist/server/sessionEvidence.js +9 -15
  552. package/dist/server/sessionToolPolicies.js +0 -8
  553. package/dist/server/toolResult.js +14 -50
  554. package/dist/serverIdentity.js +0 -20
  555. package/install.sh +1 -1
  556. package/package.json +11 -7
  557. package/scripts/electron-active-hook.cjs +23 -55
  558. package/scripts/hopper-demo-x11.py +13 -32
  559. package/skills/reverse-engineer-anything/SKILL.md +47 -12
  560. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  561. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  562. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  563. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -188
  564. package/dist/application/BoundedJsonFiles.js +0 -86
  565. package/dist/application/CrossVersionInventory.js +0 -129
  566. package/dist/application/CrossVersionInvestigation.js +0 -301
  567. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  568. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  569. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  570. package/dist/application/DeferredFileAuthorization.js +0 -61
  571. package/dist/application/DoctorProjection.js +0 -43
  572. package/dist/application/EnhancedToolPagination.js +0 -22
  573. package/dist/application/EvidenceReferenceResolver.js +0 -26
  574. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  575. package/dist/application/ProcessPairedExperiment.js +0 -72
  576. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  577. package/dist/application/ReconstructionReadinessService.js +0 -48
  578. package/dist/cliInvestigationCommands.js +0 -173
  579. package/dist/domain/boundedCartesianProjection.js +0 -15
  580. package/dist/domain/investigationWorkspace.js +0 -347
  581. package/dist/domain/jsonLimits.js +0 -26
  582. package/dist/domain/knownPageCoverage.js +0 -29
  583. package/dist/domain/processPairedExperiment.js +0 -128
  584. package/dist/server/javascriptApplicationResult.js +0 -106
  585. package/dist/server/permissionFailure.js +0 -12
  586. package/dist/server/registerApplicationTools/readiness.js +0 -50
  587. package/dist/server/registerEvidenceResources.js +0 -315
  588. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  589. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  590. package/dist/server/registerReconstructionReadinessResource.js +0 -32
@@ -3,14 +3,14 @@ import { constants } from "node:fs";
3
3
  import { accessSync, readFileSync } from "node:fs";
4
4
  import { posix, win32 } from "node:path";
5
5
  /** Exact Ghidra build whose Java bridge contract this REA release supports. */
6
- export const SUPPORTED_GHIDRA_VERSION = "12.1.2";
6
+ export const SUPPORTED_GHIDRA_VERSION = "12.1.4";
7
7
  /** Exact JDK major documented by the supported Ghidra release. */
8
8
  export const SUPPORTED_GHIDRA_JAVA_MAJOR = 21;
9
9
  /** Inspect an installation without importing a target or modifying Ghidra. */
10
10
  export const inspectGhidraInstallation = (options, host = systemGhidraInstallationHost()) => {
11
11
  const platform = options.platform ?? process.platform;
12
12
  const architecture = options.architecture ?? process.arch;
13
- const coordinates = installationCoordinates(options, platform, host);
13
+ const coordinates = installationCoordinates(options, platform, architecture, host);
14
14
  const checks = installationChecks({
15
15
  coordinates,
16
16
  platform,
@@ -18,24 +18,49 @@ export const inspectGhidraInstallation = (options, host = systemGhidraInstallati
18
18
  javaHome: options.javaHome,
19
19
  host,
20
20
  });
21
- const failed = checks.find(({ ok }) => !ok);
22
- return {
23
- available: failed === undefined,
21
+ const failed = checks.find((check) => check.status === "failed");
22
+ const observation = {
24
23
  platform,
25
24
  architecture,
26
- installDir: coordinates.installDir,
27
- analyzeHeadlessPath: coordinates.analyzeHeadlessPath,
28
25
  applicationPropertiesPath: coordinates.applicationPropertiesPath,
29
- providerVersion: coordinates.providerVersion,
26
+ nativeDecompilerPath: coordinates.nativeDecompilerPath,
30
27
  javaCommand: coordinates.javaCommand,
31
- javaHome: coordinates.java?.home ?? options.javaHome ?? null,
32
- javaVersion: coordinates.java?.version ?? null,
33
28
  checks,
34
- rejectionCode: failed?.code ?? null,
35
- reason: failed?.remediation ?? null,
29
+ };
30
+ if (failed !== undefined)
31
+ return {
32
+ status: "unavailable",
33
+ ...observation,
34
+ installDir: coordinates.installDir,
35
+ analyzeHeadlessPath: coordinates.analyzeHeadlessPath,
36
+ providerVersion: coordinates.properties?.providerVersion ?? null,
37
+ javaHome: coordinates.java?.home ?? options.javaHome ?? null,
38
+ javaVersion: coordinates.java?.version ?? null,
39
+ rejection: { code: failed.code, reason: failed.remediation },
40
+ };
41
+ return availableInstallation(coordinates, observation);
42
+ };
43
+ const availableInstallation = (coordinates, observation) => {
44
+ const providerVersion = coordinates.properties?.providerVersion;
45
+ if (coordinates.installDir === null ||
46
+ coordinates.applicationPropertiesPath === null ||
47
+ coordinates.analyzeHeadlessPath === null ||
48
+ providerVersion === null ||
49
+ providerVersion === undefined ||
50
+ coordinates.java === undefined)
51
+ throw new TypeError("Passing Ghidra installation checks produced incomplete coordinates");
52
+ return {
53
+ status: "available",
54
+ ...observation,
55
+ installDir: coordinates.installDir,
56
+ analyzeHeadlessPath: coordinates.analyzeHeadlessPath,
57
+ applicationPropertiesPath: coordinates.applicationPropertiesPath,
58
+ providerVersion,
59
+ javaHome: coordinates.java.home,
60
+ javaVersion: coordinates.java.version,
36
61
  };
37
62
  };
38
- const installationCoordinates = (options, platform, host) => {
63
+ const installationCoordinates = (options, platform, architecture, host) => {
39
64
  const path = platform === "win32" ? win32 : posix;
40
65
  const installDir = options.installDir ?? null;
41
66
  const applicationPropertiesPath = installDir === null
@@ -44,6 +69,17 @@ const installationCoordinates = (options, platform, host) => {
44
69
  const analyzeHeadlessPath = installDir === null
45
70
  ? null
46
71
  : path.join(installDir, "support", platform === "win32" ? "analyzeHeadless.bat" : "analyzeHeadless");
72
+ const decompilerPlatform = platform === "darwin"
73
+ ? architecture === "arm64"
74
+ ? "mac_arm_64"
75
+ : "mac_x86_64"
76
+ : null;
77
+ const nativeDecompilerPath = installDir === null || decompilerPlatform === null
78
+ ? null
79
+ : ([
80
+ path.join(installDir, "Ghidra", "Features", "Decompiler", "os", decompilerPlatform, "decompile"),
81
+ path.join(installDir, "Ghidra", "Features", "Decompiler", "build", "os", decompilerPlatform, "decompile"),
82
+ ].find((candidate) => host.executable(candidate)) ?? null);
47
83
  const properties = applicationPropertiesPath === null
48
84
  ? undefined
49
85
  : host.readText(applicationPropertiesPath);
@@ -56,10 +92,10 @@ const installationCoordinates = (options, platform, host) => {
56
92
  installDir,
57
93
  applicationPropertiesPath,
58
94
  analyzeHeadlessPath,
59
- propertiesAvailable: properties !== undefined,
60
- providerVersion: properties === undefined
61
- ? null
62
- : propertyValue(properties, "application.version"),
95
+ nativeDecompilerPath,
96
+ properties: properties === undefined
97
+ ? undefined
98
+ : { providerVersion: propertyValue(properties, "application.version") },
63
99
  javaCommand,
64
100
  java: host.probeJava(javaCommand, ghidraJavaEnvironment(options.javaHome, process.env, platform)),
65
101
  };
@@ -67,28 +103,28 @@ const installationCoordinates = (options, platform, host) => {
67
103
  const installationChecks = ({ coordinates, platform, architecture, javaHome, host, }) => [
68
104
  installationCheck({
69
105
  name: "configuration",
70
- ok: coordinates.installDir !== null,
106
+ passed: coordinates.installDir !== null,
71
107
  code: "not_configured",
72
108
  detail: coordinates.installDir ?? "GHIDRA_INSTALL_DIR is not set",
73
- remediation: "Set GHIDRA_INSTALL_DIR to an extracted Ghidra 12.1.2 release directory.",
109
+ remediation: "Set GHIDRA_INSTALL_DIR to an extracted Ghidra 12.1.4 release directory.",
74
110
  }),
75
111
  installationCheck({
76
112
  name: "platform",
77
- ok: platform === "linux" || platform === "win32",
113
+ passed: platform === "linux" || platform === "win32",
78
114
  code: "unsupported_host",
79
115
  detail: platform,
80
- remediation: "Use REA's Ghidra adapter on a supported Linux or Windows x64 host.",
116
+ remediation: "Use REA's Ghidra adapter on Linux or Windows x64.",
81
117
  }),
82
118
  installationCheck({
83
119
  name: "architecture",
84
- ok: architecture === "x64",
120
+ passed: (platform === "linux" || platform === "win32") && architecture === "x64",
85
121
  code: "unsupported_host",
86
122
  detail: architecture,
87
- remediation: "Use the official x86-64 Ghidra distribution on an x64 Linux or Windows host.",
123
+ remediation: "Use x64 on Linux or Windows.",
88
124
  }),
89
125
  installationCheck({
90
126
  name: "installation",
91
- ok: coordinates.propertiesAvailable,
127
+ passed: coordinates.properties !== undefined,
92
128
  code: "executable_missing",
93
129
  detail: coordinates.applicationPropertiesPath ??
94
130
  "Ghidra application properties unavailable",
@@ -96,27 +132,39 @@ const installationChecks = ({ coordinates, platform, architecture, javaHome, hos
96
132
  }),
97
133
  installationCheck({
98
134
  name: "version",
99
- ok: coordinates.providerVersion === SUPPORTED_GHIDRA_VERSION,
100
- code: coordinates.providerVersion === null
135
+ passed: coordinates.properties?.providerVersion === SUPPORTED_GHIDRA_VERSION,
136
+ code: coordinates.properties?.providerVersion === null ||
137
+ coordinates.properties?.providerVersion === undefined
101
138
  ? "version_unresolved"
102
139
  : "unsupported_version",
103
- detail: coordinates.providerVersion ?? "unknown",
140
+ detail: coordinates.properties?.providerVersion ?? "unknown",
104
141
  remediation: `Install Ghidra ${SUPPORTED_GHIDRA_VERSION}, or update REA for a different Ghidra build.`,
105
142
  }),
106
143
  installationCheck({
107
144
  name: "headless",
108
- ok: coordinates.analyzeHeadlessPath !== null &&
145
+ passed: coordinates.analyzeHeadlessPath !== null &&
109
146
  host.executable(coordinates.analyzeHeadlessPath),
110
147
  code: "executable_missing",
111
148
  detail: coordinates.analyzeHeadlessPath ?? "analyzeHeadless unavailable",
112
149
  remediation: "Restore support/analyzeHeadless or support/analyzeHeadless.bat from the official Ghidra release.",
113
150
  }),
151
+ installationCheck({
152
+ name: "native_decompiler",
153
+ passed: platform !== "darwin" || coordinates.nativeDecompilerPath !== null,
154
+ code: "executable_missing",
155
+ detail: platform !== "darwin"
156
+ ? "not required on this platform"
157
+ : (coordinates.nativeDecompilerPath ??
158
+ "matching macOS native decompiler was not found"),
159
+ remediation: "REA does not build native tools. Build Ghidra's native components for this macOS architecture or provide an installation containing Ghidra/Features/Decompiler/os/<platform>/decompile.",
160
+ }),
114
161
  javaCheck(coordinates.java, coordinates.javaCommand, javaHome),
115
162
  ];
116
163
  /** Project an installation probe into caller-visible, secret-free diagnostics. */
117
164
  export const ghidraInstallationDiagnostics = (inspection) => ({
118
165
  install_dir: inspection.installDir,
119
166
  analyze_headless_path: inspection.analyzeHeadlessPath,
167
+ native_decompiler_path: inspection.nativeDecompilerPath,
120
168
  application_properties_path: inspection.applicationPropertiesPath,
121
169
  provider_version: inspection.providerVersion,
122
170
  java_command: inspection.javaCommand,
@@ -126,8 +174,8 @@ export const ghidraInstallationDiagnostics = (inspection) => ({
126
174
  architecture: inspection.architecture,
127
175
  checks: inspection.checks.map((check) => ({
128
176
  name: check.name,
129
- ok: check.ok,
130
- code: check.code,
177
+ ok: check.status === "passed",
178
+ code: check.status === "failed" ? check.code : null,
131
179
  detail: check.detail,
132
180
  })),
133
181
  });
@@ -148,24 +196,30 @@ export const ghidraJavaEnvironment = (javaHome, environment = process.env, platf
148
196
  PATH: `${(platform === "win32" ? win32 : posix).join(javaHome, "bin")}${platform === "win32" ? win32.delimiter : posix.delimiter}${environment.PATH ?? ""}`,
149
197
  };
150
198
  };
151
- const installationCheck = (options) => ({
152
- name: options.name,
153
- ok: options.ok,
154
- code: options.ok ? null : options.code,
155
- detail: options.detail,
156
- remediation: options.ok ? null : options.remediation,
157
- });
199
+ const installationCheck = (options) => options.passed
200
+ ? {
201
+ status: "passed",
202
+ name: options.name,
203
+ detail: options.detail,
204
+ }
205
+ : {
206
+ status: "failed",
207
+ name: options.name,
208
+ code: options.code,
209
+ detail: options.detail,
210
+ remediation: options.remediation,
211
+ };
158
212
  const javaCheck = (observation, command, configuredHome) => {
159
213
  const supported = observation !== undefined &&
160
214
  observation.major === SUPPORTED_GHIDRA_JAVA_MAJOR &&
161
215
  observation.bits === 64 &&
162
- observation.jdk;
216
+ observation.runtime === "jdk";
163
217
  const detail = observation === undefined
164
218
  ? command
165
- : `${observation.version}; ${String(observation.bits)}-bit; ${observation.jdk ? "JDK" : "runtime only"}; ${observation.home}`;
219
+ : `${observation.version}; ${String(observation.bits)}-bit; ${observation.runtime === "jdk" ? "JDK" : "runtime only"}; ${observation.home}`;
166
220
  return installationCheck({
167
221
  name: "java",
168
- ok: supported,
222
+ passed: supported,
169
223
  code: observation === undefined ? "runtime_missing" : "unsupported_version",
170
224
  detail,
171
225
  remediation: configuredHome === undefined
@@ -206,7 +260,7 @@ const systemGhidraInstallationHost = () => ({
206
260
  encoding: "utf8",
207
261
  env: environment,
208
262
  timeout: 5_000,
209
- maxBuffer: 128 * 1024,
263
+ maxBuffer: Number.POSITIVE_INFINITY,
210
264
  windowsHide: true,
211
265
  });
212
266
  if (observed.error !== undefined || observed.status !== 0)
@@ -222,7 +276,9 @@ const systemGhidraInstallationHost = () => ({
222
276
  major: javaMajor(version),
223
277
  home,
224
278
  bits,
225
- jdk: executablePath((process.platform === "win32" ? win32 : posix).join(home, "bin", process.platform === "win32" ? "javac.exe" : "javac")),
279
+ runtime: executablePath((process.platform === "win32" ? win32 : posix).join(home, "bin", process.platform === "win32" ? "javac.exe" : "javac"))
280
+ ? "jdk"
281
+ : "jre",
226
282
  };
227
283
  },
228
284
  });
@@ -1,7 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { AnalysisInputError, AnalysisOutputError } from "../domain/errors.js";
3
3
  import { err, ok } from "../domain/result.js";
4
- /** Read-only direct operations admitted by the Ghidra v1 adapter. */
4
+ /** Read-only direct inventory operations admitted by the Ghidra adapter. */
5
5
  export const GHIDRA_INVENTORY_OPERATIONS = [
6
6
  "address_name",
7
7
  "list_documents",
@@ -17,37 +17,25 @@ export const GHIDRA_INVENTORY_OPERATIONS = [
17
17
  const operationSet = new Set(GHIDRA_INVENTORY_OPERATIONS);
18
18
  /** Narrow an application operation to the Ghidra inventory surface. */
19
19
  export const isGhidraInventoryOperation = (operation) => operationSet.has(operation);
20
- export const ghidraBoundedIdentifierSchema = z.string().min(1).max(4096);
21
- const boundedIdentifier = ghidraBoundedIdentifierSchema;
22
- const document = boundedIdentifier.nullable().default(null);
23
- const explicitAddress = boundedIdentifier;
20
+ export const ghidraIdentifierSchema = z.string().min(1);
21
+ const identifier = ghidraIdentifierSchema;
22
+ const document = identifier.nullable().default(null);
23
+ const explicitAddress = identifier;
24
24
  const filteredAddress = explicitAddress.nullable().default(null);
25
- const pagination = {
26
- offset: z.number().int().min(0).default(0),
27
- limit: z.number().int().min(1).max(500).default(100),
28
- };
29
25
  const searchInput = {
30
- pattern: z.string().min(1).max(256),
26
+ pattern: z.string().min(1),
31
27
  mode: z.enum(["literal", "regex"]).default("literal"),
32
28
  case_sensitive: z.boolean().default(false),
33
- offset: z.number().int().min(0).default(0),
34
- limit: z.number().int().min(1).max(100).default(100),
35
29
  document,
36
30
  };
37
31
  const inputSchemas = {
38
32
  address_name: z.object({ document, address: explicitAddress }).strict(),
39
33
  list_documents: z.object({}).strict(),
40
- list_names: z
41
- .object({ document, address: filteredAddress, ...pagination })
42
- .strict(),
43
- list_procedures: z.object({ document, ...pagination }).strict(),
34
+ list_names: z.object({ document, address: filteredAddress }).strict(),
35
+ list_procedures: z.object({ document }).strict(),
44
36
  list_segments: z.object({ document }).strict(),
45
- list_strings: z
46
- .object({ document, address: filteredAddress, ...pagination })
47
- .strict(),
48
- procedure_address: z
49
- .object({ document, procedure: boundedIdentifier })
50
- .strict(),
37
+ list_strings: z.object({ document, address: filteredAddress }).strict(),
38
+ procedure_address: z.object({ document, procedure: identifier }).strict(),
51
39
  resolve_containing_procedure: z
52
40
  .object({ document, address: explicitAddress })
53
41
  .strict(),
@@ -65,7 +53,6 @@ export const ghidraCanonicalAddressSchema = z
65
53
  .string()
66
54
  .regex(/^(?:0x[0-9a-f]+|(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:0x[0-9a-f]+)$/u);
67
55
  const canonicalAddress = ghidraCanonicalAddressSchema;
68
- const valueTruncation = { value_truncated: z.boolean() };
69
56
  const symbolFacts = z
70
57
  .object({
71
58
  primary: z.boolean(),
@@ -95,7 +82,6 @@ const stringFacts = z
95
82
  const baseItem = {
96
83
  address: canonicalAddress,
97
84
  value: z.string(),
98
- ...valueTruncation,
99
85
  };
100
86
  const symbolItem = z.object({ ...baseItem, symbol: symbolFacts }).strict();
101
87
  const procedureItem = z
@@ -103,61 +89,6 @@ const procedureItem = z
103
89
  .strict();
104
90
  const stringItem = z.object({ ...baseItem, string: stringFacts }).strict();
105
91
  const searchItem = z.object(baseItem).strict();
106
- const pageSchema = (item, maximumLimit) => {
107
- const pageFacts = {
108
- items: z.array(item),
109
- offset: z.number().int().min(0),
110
- limit: z.number().int().min(1).max(maximumLimit),
111
- total: z.number().int().min(0),
112
- };
113
- return z
114
- .discriminatedUnion("has_more", [
115
- z.strictObject({
116
- ...pageFacts,
117
- has_more: z.literal(true),
118
- next_offset: z.number().int().min(0),
119
- }),
120
- z.strictObject({
121
- ...pageFacts,
122
- has_more: z.literal(false),
123
- next_offset: z.null(),
124
- }),
125
- ])
126
- .superRefine((page, context) => {
127
- const next = page.offset + page.items.length;
128
- const hasMore = next < page.total;
129
- if (page.items.length > page.limit)
130
- context.addIssue({
131
- code: "custom",
132
- path: ["items"],
133
- message: "page exceeds its declared limit",
134
- });
135
- if (page.items.length > 0 && next > page.total)
136
- context.addIssue({
137
- code: "custom",
138
- path: ["total"],
139
- message: "page items exceed its exact total",
140
- });
141
- if (hasMore && page.items.length === 0)
142
- context.addIssue({
143
- code: "custom",
144
- path: ["items"],
145
- message: "page continuation must advance its offset",
146
- });
147
- if (page.has_more !== hasMore)
148
- context.addIssue({
149
- code: "custom",
150
- path: ["has_more"],
151
- message: "page continuation does not match its exact total",
152
- });
153
- if (page.next_offset !== (hasMore ? next : null))
154
- context.addIssue({
155
- code: "custom",
156
- path: ["next_offset"],
157
- message: "page continuation offset is inconsistent",
158
- });
159
- });
160
- };
161
92
  const availablePermissions = z
162
93
  .object({
163
94
  available: z.literal(true),
@@ -209,16 +140,16 @@ const containingProcedure = z.discriminatedUnion("found", [
209
140
  const resultSchemas = {
210
141
  address_name: z.string().nullable(),
211
142
  list_documents: z.array(z.string().min(1)).length(1),
212
- list_names: pageSchema(symbolItem, 500),
213
- list_procedures: pageSchema(procedureItem, 500),
143
+ list_names: z.array(symbolItem),
144
+ list_procedures: z.array(procedureItem),
214
145
  list_segments: z.array(segment),
215
- list_strings: pageSchema(stringItem, 500),
146
+ list_strings: z.array(stringItem),
216
147
  procedure_address: canonicalAddress,
217
148
  resolve_containing_procedure: containingProcedure,
218
- search_procedures: pageSchema(searchItem, 100),
219
- search_strings: pageSchema(searchItem, 100),
149
+ search_procedures: z.array(searchItem),
150
+ search_strings: z.array(searchItem),
220
151
  };
221
- /** Require exact, bounded Java-bridge output before creating Evidence. */
152
+ /** Validate exact Java-bridge output before creating Evidence. */
222
153
  export const parseGhidraInventoryResult = (operation, value) => {
223
154
  const parsed = resultSchemas[operation].safeParse(value);
224
155
  return parsed.success
@@ -5,7 +5,6 @@ import { AnalysisCancelledError } from "../domain/errors.js";
5
5
  import { err, ok } from "../domain/result.js";
6
6
  import { cleanupOwnedProcessGroup, cleanupWindowsProcessTree, } from "../process/ProcessOwnership.js";
7
7
  import { spawnOwnedProviderProcess, } from "../process/ProviderProcess.js";
8
- import { GHIDRA_ANALYSIS_TIMEOUT_SECONDS, GHIDRA_MAX_CPU, GHIDRA_MAX_HEAP, } from "./GhidraDefaults.js";
9
8
  import { ghidraJavaEnvironment } from "./GhidraInstallation.js";
10
9
  /** Local launch failure retained as the cause of a provider-neutral error. */
11
10
  export class GhidraLaunchError extends Error {
@@ -36,7 +35,6 @@ export class GhidraHeadlessLauncher {
36
35
  paths.dataRoot,
37
36
  ].map((path) => mkdir(path, { recursive: true, mode: 0o700 })));
38
37
  await writeFileAtomic(paths.descriptorPath, `${JSON.stringify({
39
- schema_version: 2,
40
38
  transport: session.transport,
41
39
  endpoint_path: session.endpointPath,
42
40
  token: session.token,
@@ -74,7 +72,6 @@ export class GhidraHeadlessLauncher {
74
72
  env: ghidraLaunchEnvironment(paths, this.options.javaHome, platform),
75
73
  });
76
74
  await writeFileAtomic(paths.ownershipPath, `${JSON.stringify({
77
- schema_version: 1,
78
75
  run_id: session.runId,
79
76
  pid: started.ownership.leaderPid,
80
77
  process_group_id: started.ownership.processGroupId,
@@ -156,10 +153,6 @@ export const ghidraHeadlessArguments = (options) => [
156
153
  options.targetPath,
157
154
  "-readOnly",
158
155
  "-deleteProject",
159
- "-analysisTimeoutPerFile",
160
- String(GHIDRA_ANALYSIS_TIMEOUT_SECONDS),
161
- "-max-cpu",
162
- String(GHIDRA_MAX_CPU),
163
156
  "-log",
164
157
  options.ghidraLogPath,
165
158
  "-scriptlog",
@@ -200,7 +193,6 @@ const ghidraLaunchEnvironment = (paths, javaHome, platform) => {
200
193
  XDG_CACHE_HOME: paths.cacheRoot,
201
194
  XDG_CONFIG_HOME: paths.configRoot,
202
195
  XDG_DATA_HOME: paths.dataRoot,
203
- GHIDRA_HEADLESS_MAXMEM: GHIDRA_MAX_HEAP,
204
196
  GHIDRA_HEADLESS_JAVA_OPTIONS: javaOptions,
205
197
  };
206
198
  };
@@ -4,7 +4,7 @@ import { jsonObjectSchema } from "../domain/jsonValue.js";
4
4
  import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisTimeoutError, ProviderAdapterError, } from "../domain/errors.js";
5
5
  import { err, ok } from "../domain/result.js";
6
6
  import { GhidraClient } from "./GhidraClient.js";
7
- import { GHIDRA_ANALYSIS_TIMEOUT_SECONDS, GHIDRA_DECOMPILE_REQUEST_TIMEOUT_MS, GHIDRA_DECOMPILE_TIMEOUT_SECONDS, GHIDRA_STARTUP_TIMEOUT_MS, } from "./GhidraDefaults.js";
7
+ import { GHIDRA_STARTUP_TIMEOUT_MS } from "./GhidraDefaults.js";
8
8
  import { isGhidraFunctionOperation, parseGhidraFunctionInput, parseGhidraFunctionResult, } from "./GhidraFunctionValues.js";
9
9
  import { isGhidraInventoryOperation, parseGhidraInventoryInput, parseGhidraInventoryResult, } from "./GhidraInventoryValues.js";
10
10
  import { ghidraInstallationDiagnostics, inspectGhidraInstallation, } from "./GhidraInstallation.js";
@@ -38,7 +38,7 @@ export class GhidraProvider {
38
38
  inspectAvailability() {
39
39
  const installation = this.#inspectInstallation();
40
40
  const diagnostics = ghidraInstallationDiagnostics(installation);
41
- if (installation.available &&
41
+ if (installation.status === "available" &&
42
42
  installation.platform === "win32" &&
43
43
  !hasWindowsNativeAuthority(installation.platform))
44
44
  return {
@@ -50,7 +50,7 @@ export class GhidraProvider {
50
50
  windows_security: jsonObjectSchema.parse(windowsNativeCapabilities(installation.platform)),
51
51
  },
52
52
  };
53
- return installation.available
53
+ return installation.status === "available"
54
54
  ? {
55
55
  status: "available",
56
56
  code: null,
@@ -59,8 +59,8 @@ export class GhidraProvider {
59
59
  }
60
60
  : {
61
61
  status: "unavailable",
62
- code: installation.rejectionCode ?? "not_configured",
63
- reason: installation.reason ?? "Ghidra installation is not available.",
62
+ code: installation.rejection.code,
63
+ reason: installation.rejection.reason,
64
64
  diagnostics,
65
65
  };
66
66
  }
@@ -106,7 +106,13 @@ export class GhidraProvider {
106
106
  if (!prerequisites.ok)
107
107
  return unavailableClient(prerequisites.error);
108
108
  const committedProfile = prerequisites.value.profile;
109
- const providerLimitations = installation.platform === "win32" ? windowsP0Limitations : [];
109
+ const providerLimitations = installation.platform === "win32"
110
+ ? windowsP0Limitations
111
+ : installation.platform === "darwin"
112
+ ? [
113
+ "macOS sessions require a matching executable Ghidra native decompiler; REA checks for it but does not build native components or change Gatekeeper quarantine state.",
114
+ ]
115
+ : [];
110
116
  const client = this.clientFactory({
111
117
  launcher: new GhidraHeadlessLauncher({
112
118
  analyzeHeadlessPath: prerequisites.value.analyzeHeadlessPath,
@@ -146,13 +152,7 @@ export class GhidraProvider {
146
152
  : parseGhidraInventoryInput(operation, parameters);
147
153
  if (!input.ok)
148
154
  return input;
149
- const called = await client.callTool(operation, input.value, {
150
- ...(options?.signal === undefined ? {} : { signal: options.signal }),
151
- ...(operation === "procedure_pseudo_code" ||
152
- operation === "analyze_function"
153
- ? { timeoutMs: GHIDRA_DECOMPILE_REQUEST_TIMEOUT_MS }
154
- : {}),
155
- });
155
+ const called = await client.callTool(operation, input.value, options?.signal === undefined ? {} : { signal: options.signal });
156
156
  if (!called.ok)
157
157
  return err(projectSessionError(operation, called.error));
158
158
  const result = isGhidraFunctionOperation(operation)
@@ -236,9 +236,7 @@ const inspectWindowsP0TargetSupport = (target, diagnostics) => {
236
236
  const ghidraClientPrerequisites = (target, profile, installation) => {
237
237
  if (target.kind !== "executable")
238
238
  return err(new AnalysisCapabilityUnavailableError("ghidra", "health", `Ghidra cannot import ${target.kind} targets through this adapter.`));
239
- if (!installation.available ||
240
- installation.analyzeHeadlessPath === null ||
241
- installation.providerVersion === null)
239
+ if (installation.status === "unavailable")
242
240
  return err(new ProviderAdapterError("ghidra", "health", {
243
241
  diagnostics: ghidraInstallationDiagnostics(installation),
244
242
  }));
@@ -261,12 +259,7 @@ const projectSessionError = (operation, failure) => {
261
259
  if (failure.kind === "cancelled")
262
260
  return new AnalysisCancelledError(operation);
263
261
  if (failure.kind === "timeout" || failure.kind === "analysis_timeout")
264
- return new AnalysisTimeoutError(operation, failure.timeoutMs ??
265
- (failure.kind === "analysis_timeout"
266
- ? GHIDRA_ANALYSIS_TIMEOUT_SECONDS * 1_000
267
- : GHIDRA_STARTUP_TIMEOUT_MS));
268
- if (failure.kind === "remote" && failure.remoteCode === "decompile_timeout")
269
- return new AnalysisTimeoutError(operation, GHIDRA_DECOMPILE_TIMEOUT_SECONDS * 1_000);
262
+ return new AnalysisTimeoutError(operation, failure.timeoutMs ?? GHIDRA_STARTUP_TIMEOUT_MS);
270
263
  if (failure.kind === "remote" && failure.remoteCode === "decompile_cancelled")
271
264
  return new AnalysisCancelledError(operation);
272
265
  if (failure.kind === "remote" &&