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