rea-agents 6.0.0 → 6.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 (611) hide show
  1. package/README.md +26 -18
  2. package/bridge/android/ReaJadxBridge.java +14 -5
  3. package/bridge/ghidra/ReaGhidraBridge.java +205 -51
  4. package/bridge/hopper_bridge.py +314 -127
  5. package/bridge/mitmproxy/capture.py +0 -2
  6. package/bridge/native/rea_lldb_tracer.py +630 -94
  7. package/bridge/process/ProcessRunTokenReader.swift +39 -5
  8. package/bridge/pwntools/recorded_crash_impl.py +4 -0
  9. package/dist/android/JadxConfiguration.js +274 -31
  10. package/dist/android/JadxMcpTransport.js +18 -2
  11. package/dist/android/JadxProtocol.js +6 -0
  12. package/dist/android/JadxProvider.js +76 -37
  13. package/dist/android/JadxSession.js +23 -4
  14. package/dist/application/AnalysisContextQueries.js +8 -35
  15. package/dist/application/AnalysisDocument.js +32 -0
  16. package/dist/application/AppBundleExecutable.js +67 -21
  17. package/dist/application/BinaryTargetResolver.js +5 -3
  18. package/dist/application/BrowserEvidence.js +3 -8
  19. package/dist/application/BrowserScenarioEvidence.js +2 -18
  20. package/dist/application/CallPathTracing.js +19 -3
  21. package/dist/application/CapabilityInventory.js +48 -11
  22. package/dist/application/ClientConfigurationDocument.js +917 -8
  23. package/dist/application/ClientRegistrationIdentity.js +26 -5
  24. package/dist/application/ClientRegistrationStatus.js +29 -14
  25. package/dist/application/DirectAnalysis.js +56 -51
  26. package/dist/application/DirectAnalysisCleanup.js +72 -0
  27. package/dist/application/DirectAnalysisStatus.js +4 -5
  28. package/dist/application/Doctor.js +19 -21
  29. package/dist/application/DoctorDiagnostics.js +1 -2
  30. package/dist/application/DoctorScope.js +25 -13
  31. package/dist/application/EnhancedLiteralTracing.js +22 -25
  32. package/dist/application/EnhancedTools.js +64 -17
  33. package/dist/application/EvidenceBundleFiles.js +30 -13
  34. package/dist/application/FunctionAnalysisEvidence.js +2 -3
  35. package/dist/application/InventoryProjectionEvidence.js +4 -3
  36. package/dist/application/InvestigationProviders.js +11 -2
  37. package/dist/application/JsonFiles.js +83 -28
  38. package/dist/application/LinuxHopper.js +9 -6
  39. package/dist/application/MacHopper.js +15 -18
  40. package/dist/application/ProcedureAddressResolution.js +11 -0
  41. package/dist/application/RealHopperAssertions.js +0 -11
  42. package/dist/application/ReconstructionCoverageService.js +7 -4
  43. package/dist/application/ReconstructionObligationCandidates.js +1 -1
  44. package/dist/application/ReconstructionObligationLedgerService.js +4 -3
  45. package/dist/application/ReferenceSourceImportEntries.js +1 -1
  46. package/dist/application/Setup.js +21 -17
  47. package/dist/application/SetupClientConfiguration.js +10 -15
  48. package/dist/application/SetupHost.js +21 -29
  49. package/dist/application/SetupPlan.js +11 -9
  50. package/dist/application/SupportedClients.js +34 -1
  51. package/dist/application/Uninstall.js +82 -29
  52. package/dist/application/Update.js +18 -3
  53. package/dist/application/UpdateMaintenance.js +7 -5
  54. package/dist/application/UpdateRuntime.js +57 -36
  55. package/dist/application/WebModuleTraceService.js +4 -2
  56. package/dist/application/WebNetworkCaptureService.js +4 -2
  57. package/dist/application/WebRuntimeService.js +5 -3
  58. package/dist/application/WebScriptExportService.js +32 -6
  59. package/dist/application/WebSourceLocationService.js +4 -2
  60. package/dist/application/WorkflowEvidence.js +105 -0
  61. package/dist/application/XrefsAddressResolution.js +45 -0
  62. package/dist/application/analysisView/AnalysisViewService.js +76 -0
  63. package/dist/application/binary/AnalysisClientCleanup.js +30 -5
  64. package/dist/application/binary/AnalysisProviderEvaluation.js +22 -7
  65. package/dist/application/binary/AnalysisProviderRegistry.js +4 -6
  66. package/dist/application/binary/AnalysisSnapshotCache.js +13 -14
  67. package/dist/application/binary/BinarySession.js +161 -93
  68. package/dist/application/binary/BinarySessionComposition.js +1 -3
  69. package/dist/application/binary/BinarySessionExecution.js +3 -5
  70. package/dist/application/binary/BinarySessionOpen.js +4 -4
  71. package/dist/application/binary/BinarySessionRecords.js +26 -4
  72. package/dist/application/binary/BinarySessionStatus.js +18 -7
  73. package/dist/application/binary/CompositeProvider.js +16 -17
  74. package/dist/application/binary/LazyAnalysisProvider.js +8 -5
  75. package/dist/application/binary/SessionProviderRouter.js +27 -135
  76. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +4 -2
  77. package/dist/application/binaryDiagnostics/RecordedCrashService.js +4 -2
  78. package/dist/application/evm/EvmInterfaceService.js +4 -2
  79. package/dist/application/homebrew.js +48 -0
  80. package/dist/application/investigation/EvidenceLedger.js +21 -7
  81. package/dist/application/investigation/InvestigationRecords.js +8 -0
  82. package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
  83. package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
  84. package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -4
  85. package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
  86. package/dist/application/javascript/JavaScriptApplicationService.js +27 -15
  87. package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
  88. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +10 -7
  89. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +44 -10
  90. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
  91. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
  92. package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
  93. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
  94. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
  95. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +49 -19
  96. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +56 -8
  97. package/dist/application/javascript/JavaScriptModuleRelationships.js +38 -9
  98. package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
  99. package/dist/application/javascript/JavaScriptRuntimeObservationService.js +6 -4
  100. package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
  101. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
  102. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +63 -61
  103. package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
  104. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
  105. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
  106. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
  107. package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
  108. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +64 -19
  109. package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
  110. package/dist/application/managed/ManagedMemberComparisonService.js +9 -5
  111. package/dist/application/managed/ManagedNativeVerificationService.js +6 -4
  112. package/dist/application/managed/ManagedReconstructionService.js +4 -3
  113. package/dist/application/process/ProcessCli.js +25 -17
  114. package/dist/application/process/ProcessEvidence.js +4 -4
  115. package/dist/application/workflowInputError.js +18 -0
  116. package/dist/artifacts/ArtifactProvider.js +48 -13
  117. package/dist/artifacts/ArtifactReader.js +31 -0
  118. package/dist/artifacts/DirectoryArtifactReader.js +2 -1
  119. package/dist/artifacts/MachOSliceArtifactReader.js +106 -15
  120. package/dist/artifacts/NativeDmgArtifactReader.js +73 -21
  121. package/dist/artifacts/SafeOutputTree.js +16 -2
  122. package/dist/artifacts/ZipArtifactReader.js +11 -4
  123. package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +26 -5
  124. package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
  125. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
  126. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
  127. package/dist/artifacts/apple/KeyedArchiveReader.js +55 -23
  128. package/dist/artifacts/apple/MachoLoadCommandReader.js +92 -31
  129. package/dist/artifacts/apple/NibArchive.js +81 -14
  130. package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
  131. package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
  132. package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
  133. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +79 -68
  134. package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
  135. package/dist/artifacts/inventory/reader.js +3 -3
  136. package/dist/artifacts/inventory/scanCanonical.js +59 -38
  137. package/dist/artifacts/inventory/scanReader.js +5 -9
  138. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
  139. package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
  140. package/dist/browser/CdpBrowserProvider.js +2 -3
  141. package/dist/browser/CdpCaptureCompleteness.js +2 -0
  142. package/dist/browser/CdpCaptureEventHandlers.js +78 -15
  143. package/dist/browser/CdpCaptureEventTypes.js +5 -1
  144. package/dist/browser/CdpCaptureEvents.js +25 -1
  145. package/dist/browser/CdpCaptureValues.js +20 -0
  146. package/dist/browser/CdpConnection.js +30 -11
  147. package/dist/browser/CdpElectronProvider.js +0 -2
  148. package/dist/browser/CdpElectronScriptEvents.js +2 -8
  149. package/dist/browser/CdpElectronScripts.js +2 -3
  150. package/dist/browser/CdpOptionalCommand.js +2 -3
  151. package/dist/browser/CdpPageCapture.js +23 -1
  152. package/dist/browser/CdpPageCaptureScripts.js +2 -3
  153. package/dist/browser/CdpSafeMetadata.js +10 -10
  154. package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
  155. package/dist/browser/PlaywrightElectronActiveActions.js +34 -79
  156. package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
  157. package/dist/browser/PlaywrightElectronActiveProvider.js +133 -130
  158. package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
  159. package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
  160. package/dist/browser/PlaywrightScenarioEvents.js +1 -1
  161. package/dist/browser/PlaywrightScenarioSession.js +39 -22
  162. package/dist/browser/WebSourceMapFetcher.js +426 -72
  163. package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
  164. package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
  165. package/dist/browser/history/CaptureFailures.js +41 -1
  166. package/dist/browser/history/CaptureRelease.js +5 -0
  167. package/dist/browser/history/HarCaptureAdapter.js +3 -3
  168. package/dist/browser/history/HarJson.js +3 -2
  169. package/dist/browser/history/HistoricalCaptureDecoder.js +4 -2
  170. package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
  171. package/dist/catalogIdentity.js +0 -1
  172. package/dist/cli/analysisSelector.js +23 -0
  173. package/dist/cli/analysisViewCommands.js +36 -0
  174. package/dist/cli/applicationCommands.js +2 -3
  175. package/dist/cli/artifactCommands.js +11 -12
  176. package/dist/cli/coreAnalysisCommands.js +3 -3
  177. package/dist/cli/coreBinaryCommands.js +100 -37
  178. package/dist/cli/coreNativeCommands.js +9 -10
  179. package/dist/cli/electronCommands.js +10 -9
  180. package/dist/cli/interactiveSetup.js +6 -6
  181. package/dist/cli/javascriptApplicationAnalysis.js +7 -3
  182. package/dist/cli/jsonOutput.js +4 -99
  183. package/dist/cli/managedCommands.js +7 -8
  184. package/dist/cli/nativeCallCommands.js +3 -5
  185. package/dist/cli/omittableDefaults.js +50 -0
  186. package/dist/cli/processCommands.js +3 -2
  187. package/dist/cli/setupCommands.js +16 -15
  188. package/dist/cli/utilityCommands.js +9 -9
  189. package/dist/cli/webRuntimeCommands.js +8 -8
  190. package/dist/cli.js +18 -9
  191. package/dist/cliBrowserScenarioCommands.js +2 -2
  192. package/dist/cliCommandNames.js +1 -1
  193. package/dist/cliJsonInput.js +24 -5
  194. package/dist/cliOutput.js +0 -38
  195. package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
  196. package/dist/composition/binary.js +9 -9
  197. package/dist/composition/browserScenario.js +2 -1
  198. package/dist/composition/directAnalysis.js +20 -13
  199. package/dist/composition/electronScenario.js +1 -1
  200. package/dist/composition/optionalObservationProviders.js +12 -7
  201. package/dist/config/environment.js +10 -0
  202. package/dist/config/ghidraStartupTimeout.js +12 -0
  203. package/dist/config/homeDirectory.js +12 -0
  204. package/dist/config/mcpResponseBudget.js +30 -0
  205. package/dist/config/parseConfig.js +8 -3
  206. package/dist/config/parsers.js +19 -22
  207. package/dist/contracts/analysisViewToolContracts.js +56 -0
  208. package/dist/contracts/applicationToolContracts.js +5 -4
  209. package/dist/contracts/artifactComparisonExample.js +2 -2
  210. package/dist/contracts/artifactToolContracts.js +1 -1
  211. package/dist/contracts/browserScenarioToolContracts.js +1 -1
  212. package/dist/contracts/browserToolContracts.js +19 -15
  213. package/dist/contracts/enhancedInputs.js +7 -5
  214. package/dist/contracts/enhancedToolContracts.js +7 -6
  215. package/dist/contracts/evm/evmToolContracts.js +1 -1
  216. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  217. package/dist/contracts/hopperMemoryContracts.js +2 -5
  218. package/dist/contracts/inputSchemaPresentation.js +90 -0
  219. package/dist/contracts/investigationExamples.js +4 -3
  220. package/dist/contracts/javascript/electronToolContracts.js +2 -2
  221. package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
  222. package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
  223. package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
  224. package/dist/contracts/managed/managedToolContracts.js +7 -14
  225. package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
  226. package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
  227. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
  228. package/dist/contracts/native/nativeToolContracts.js +5 -3
  229. package/dist/contracts/officialToolContracts.js +16 -16
  230. package/dist/contracts/promptContracts.js +5 -5
  231. package/dist/contracts/providerSelection.js +1 -1
  232. package/dist/contracts/sessionLifecycleInputs.js +3 -7
  233. package/dist/contracts/sessionStatusContract.js +2 -4
  234. package/dist/contracts/sessionToolContracts.js +18 -8
  235. package/dist/contracts/sessionToolSchemas.js +3 -19
  236. package/dist/contracts/toolContractExamples.js +0 -1
  237. package/dist/contracts/toolContractHelpers.js +4 -1
  238. package/dist/contracts/toolContracts.js +2 -0
  239. package/dist/contracts/toolEffects.js +1 -1
  240. package/dist/contracts/toolOutputSchemaGroups.js +160 -115
  241. package/dist/contracts/toolOutputSchemaPrimitives.js +28 -20
  242. package/dist/contracts/toolSchemaMetadata.js +41 -33
  243. package/dist/contracts/webNetworkCaptureToolContracts.js +2 -2
  244. package/dist/contracts/webRuntimeToolContracts.js +1 -1
  245. package/dist/contracts/webScriptToolContracts.js +1 -1
  246. package/dist/doctorRuntime.js +7 -5
  247. package/dist/domain/analysisErrorBase.js +8 -3
  248. package/dist/domain/analysisErrorCore.js +6 -1
  249. package/dist/domain/analysisErrorPresentation.js +90 -20
  250. package/dist/domain/analysisErrorProjection.js +130 -32
  251. package/dist/domain/analysisSnapshot.js +29 -31
  252. package/dist/domain/analysisView/analysisView.js +243 -0
  253. package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
  254. package/dist/domain/analysisView/binaryLayoutView.js +159 -0
  255. package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
  256. package/dist/domain/android/androidAnalysis.js +2 -4
  257. package/dist/domain/android/androidApplication.js +18 -10
  258. package/dist/domain/apple/appleApplication.js +42 -15
  259. package/dist/domain/apple/dyldEnvironment.js +73 -0
  260. package/dist/domain/apple/dylibResolution.js +130 -12
  261. package/dist/domain/apple/dylibResolutionFindings.js +9 -7
  262. package/dist/domain/apple/interfaceBuilderGraph.js +25 -14
  263. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
  264. package/dist/domain/apple/keyedArchive.js +35 -3
  265. package/dist/domain/apple/machoContainer.js +54 -0
  266. package/dist/domain/apple/plistNumbers.js +76 -0
  267. package/dist/domain/artifactComparison.js +15 -6
  268. package/dist/domain/artifactGraph.js +16 -3
  269. package/dist/domain/artifactIdentity.js +29 -0
  270. package/dist/domain/artifactInventoryEvidence.js +28 -40
  271. package/dist/domain/artifactOperationError.js +3 -3
  272. package/dist/domain/artifactPartialObservation.js +1 -0
  273. package/dist/domain/artifactPathSyntax.js +49 -0
  274. package/dist/domain/binaryTarget.js +39 -13
  275. package/dist/domain/bridgeCandidateProjection.js +71 -0
  276. package/dist/domain/browserCaptureComparison.js +13 -49
  277. package/dist/domain/browserCompleteness.js +1 -0
  278. package/dist/domain/browserNetworkEvidence.js +10 -4
  279. package/dist/domain/browserObservation.js +0 -1
  280. package/dist/domain/browserObservationError.js +24 -5
  281. package/dist/domain/browserObservationSchemas.js +14 -3
  282. package/dist/domain/browserScenario.js +0 -1
  283. package/dist/domain/browserScenarioCapture.js +1 -2
  284. package/dist/domain/browserScenarioDiff.js +0 -2
  285. package/dist/domain/browserScenarioDiffEvidence.js +0 -12
  286. package/dist/domain/browserScenarioDiffValues.js +2 -2
  287. package/dist/domain/browserScenarioValues.js +5 -10
  288. package/dist/domain/bundleComparison.js +3 -2
  289. package/dist/domain/callPath.js +8 -9
  290. package/dist/domain/callPathSchemas.js +2 -2
  291. package/dist/domain/canonicalJsonDigestSteps.js +133 -0
  292. package/dist/domain/canonicalOrdering.js +9 -5
  293. package/dist/domain/changedBehavior.js +9 -9
  294. package/dist/domain/comparisonSourceEvidence.js +40 -0
  295. package/dist/domain/completionLedgerGeneration.js +2 -1
  296. package/dist/domain/configurationErrors.js +13 -1
  297. package/dist/domain/conformancePackage.js +4 -3
  298. package/dist/domain/evidence.js +65 -36
  299. package/dist/domain/evidenceBundle.js +47 -8
  300. package/dist/domain/evidenceCompletionLedger.js +2 -1
  301. package/dist/domain/evidenceErrors.js +12 -1
  302. package/dist/domain/explicitSensitiveFailure.js +17 -1
  303. package/dist/domain/firmware/firmwareAnalysis.js +6 -7
  304. package/dist/domain/functionComparison.js +4 -5
  305. package/dist/domain/functionComparisonDimensions.js +120 -87
  306. package/dist/domain/functionComparisonNormalization.js +23 -34
  307. package/dist/domain/functionComparisonResults.js +1 -4
  308. package/dist/domain/functionComparisonSchemas.js +2 -8
  309. package/dist/domain/functionDossierEvidence.js +2 -37
  310. package/dist/domain/hopperErrors.js +23 -2
  311. package/dist/domain/hopperValues.js +51 -8
  312. package/dist/domain/immutableJson.js +114 -0
  313. package/dist/domain/inputIssueProjection.js +3 -0
  314. package/dist/domain/javascript/electronActiveObservation.js +47 -64
  315. package/dist/domain/javascript/electronObservation.js +14 -3
  316. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
  317. package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
  318. package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
  319. package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
  320. package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
  321. package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
  322. package/dist/domain/javascript/javascriptApplicationGraph.js +39 -3
  323. package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
  324. package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
  325. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
  326. package/dist/domain/javascript/javascriptAstValues.js +20 -0
  327. package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
  328. package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
  329. package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
  330. package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
  331. package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
  332. package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
  333. package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
  334. package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
  335. package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascript/javascriptRecovery.js +3 -8
  337. package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
  338. package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
  339. package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
  340. package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
  341. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
  342. package/dist/domain/javascript/javascriptSemanticAnalysis.js +106 -5
  343. package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
  344. package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
  345. package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
  346. package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
  347. package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
  348. package/dist/domain/javascript/javascriptSemanticDataEffects.js +23 -6
  349. package/dist/domain/javascript/javascriptSemanticGraph.js +98 -43
  350. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
  351. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
  352. package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
  353. package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
  354. package/dist/domain/javascript/javascriptSemanticPrimitives.js +18 -21
  355. package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
  356. package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
  357. package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
  358. package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
  359. package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
  360. package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
  361. package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
  362. package/dist/domain/javascript/javascriptSemanticValues.js +126 -61
  363. package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
  364. package/dist/domain/javascript/javascriptSourceParser.js +6 -2
  365. package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
  366. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
  367. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +16 -5
  368. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
  369. package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -17
  370. package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
  371. package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
  372. package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
  373. package/dist/domain/jsonSerialization.js +109 -0
  374. package/dist/domain/jsonValue.js +90 -6
  375. package/dist/domain/localPath.js +6 -0
  376. package/dist/domain/managed/managedApplicationGraph.js +10 -10
  377. package/dist/domain/managed/managedArtifact.js +6 -4
  378. package/dist/domain/managed/managedInspectionEvidence.js +16 -0
  379. package/dist/domain/managed/managedMemberComparison.js +2 -9
  380. package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
  381. package/dist/domain/managed/managedNativeVerification.js +3 -11
  382. package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
  383. package/dist/domain/native/binaryLayout.js +2 -3
  384. package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
  385. package/dist/domain/native/nativeApiBoundary.js +1 -1
  386. package/dist/domain/native/nativeCallObservation.js +37 -13
  387. package/dist/domain/native/nativeCallPartialObservation.js +33 -0
  388. package/dist/domain/native/nativeInstruction.js +7 -0
  389. package/dist/domain/native/recordedCrash.js +2 -3
  390. package/dist/domain/offsetDateTime.js +17 -0
  391. package/dist/domain/process/processCapture.js +21 -16
  392. package/dist/domain/process/processCaptureCoverage.js +67 -0
  393. package/dist/domain/process/processCaptureExample.js +2 -1
  394. package/dist/domain/process/processCaptureParsing.js +1 -34
  395. package/dist/domain/process/processCaptureValidation.js +81 -13
  396. package/dist/domain/process/processComparison.js +79 -26
  397. package/dist/domain/process/processObservation.js +10 -2
  398. package/dist/domain/process/processScenario.js +35 -12
  399. package/dist/domain/process/processTraceComparison.js +0 -2
  400. package/dist/domain/process/processTraceDimensionProjection.js +1 -1
  401. package/dist/domain/process/processTraceEvaluation.js +15 -11
  402. package/dist/domain/process/processTraceSpecification.js +3 -4
  403. package/dist/domain/propertyListKeys.js +1 -1
  404. package/dist/domain/propertyListXmlText.js +19 -0
  405. package/dist/domain/providerAdapterError.js +3 -1
  406. package/dist/domain/providerOperationHealth.js +54 -0
  407. package/dist/domain/reconstructionCoverage.js +5 -2
  408. package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
  409. package/dist/domain/reconstructionReadinessSchemas.js +2 -1
  410. package/dist/domain/reconstructionVerification.js +9 -46
  411. package/dist/domain/reconstructionVerificationSchemas.js +4 -3
  412. package/dist/domain/referenceSourceGraph.js +20 -21
  413. package/dist/domain/staticRuntimeCorrelation.js +8 -45
  414. package/dist/domain/stringPatterns.js +6 -0
  415. package/dist/domain/swiftSymbolClassification.js +61 -0
  416. package/dist/domain/symbolAnalysis.js +66 -18
  417. package/dist/domain/webBundleAnalysis.js +20 -8
  418. package/dist/domain/webBundleAnalyzerInspection.js +13 -8
  419. package/dist/domain/webBundleAnalyzerResult.js +41 -2
  420. package/dist/domain/webCaptureDiff.js +0 -1
  421. package/dist/domain/webCaptureDiffSchemas.js +6 -3
  422. package/dist/domain/webEventListeners.js +3 -2
  423. package/dist/domain/webExecution.js +3 -2
  424. package/dist/domain/webRuntime.js +19 -7
  425. package/dist/domain/webScriptExport.js +1 -1
  426. package/dist/domain/webSourceLocation.js +1 -0
  427. package/dist/dotnet/ManagedArtifactInspector.js +2 -19
  428. package/dist/dotnet/ManagedMemberInspector.js +12 -18
  429. package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
  430. package/dist/dotnet/ManagedMemberRows.js +75 -62
  431. package/dist/dotnet/ManagedMetadataInventory.js +16 -22
  432. package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
  433. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
  434. package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
  435. package/dist/dotnet/ManagedReaderFailure.js +16 -0
  436. package/dist/dotnet/ManagedStaticProvider.js +3 -5
  437. package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
  438. package/dist/evaluation/AgentEvaluationReport.js +28 -0
  439. package/dist/evaluation/CodexAgentEval.js +12 -8
  440. package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
  441. package/dist/evm/EvmoleInterfaceProvider.js +2 -1
  442. package/dist/firmware/FirmwareCommand.js +9 -5
  443. package/dist/firmware/FirmwareFiles.js +1 -1
  444. package/dist/firmware/FirmwareProvider.js +4 -4
  445. package/dist/generatedPackageMetadata.js +2 -2
  446. package/dist/ghidra/GhidraAnalysisProfile.js +7 -5
  447. package/dist/ghidra/GhidraClient.js +126 -34
  448. package/dist/ghidra/GhidraClientStartup.js +0 -2
  449. package/dist/ghidra/GhidraDiagnostics.js +7 -7
  450. package/dist/ghidra/GhidraDoctor.js +6 -5
  451. package/dist/ghidra/GhidraFunctionValues.js +13 -12
  452. package/dist/ghidra/GhidraInstallation.js +58 -33
  453. package/dist/ghidra/GhidraInventoryValues.js +14 -4
  454. package/dist/ghidra/GhidraJavaLaunch.js +66 -0
  455. package/dist/ghidra/GhidraLauncher.js +47 -22
  456. package/dist/ghidra/GhidraProvider.js +6 -2
  457. package/dist/ghidra/GhidraProviderCapabilities.js +20 -2
  458. package/dist/ghidra/GhidraProviderClient.js +36 -15
  459. package/dist/ghidra/GhidraSessionError.js +13 -7
  460. package/dist/ghidra/GhidraSessionRoot.js +39 -0
  461. package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
  462. package/dist/ghidra/GhidraTransport.js +20 -0
  463. package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
  464. package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
  465. package/dist/hopper/BridgeLauncher.js +65 -56
  466. package/dist/hopper/HopperAnalysisProfile.js +65 -12
  467. package/dist/hopper/HopperCleanup.js +63 -22
  468. package/dist/hopper/HopperClient.js +288 -59
  469. package/dist/hopper/HopperFileOffset.js +237 -0
  470. package/dist/hopper/HopperMachOImage.js +197 -0
  471. package/dist/hopper/HopperOperationStage.js +6 -0
  472. package/dist/hopper/HopperProvider.js +71 -19
  473. package/dist/hopper/HopperProviderCapabilities.js +19 -1
  474. package/dist/hopper/HopperRegexSearch.js +134 -0
  475. package/dist/hopper/HopperRegexWorker.js +27 -0
  476. package/dist/hopper/HopperRequestQueue.js +68 -19
  477. package/dist/hopper/HopperTargetLease.js +133 -49
  478. package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
  479. package/dist/ida/IdaConfiguration.js +8 -3
  480. package/dist/ida/IdaInput.js +1 -7
  481. package/dist/ida/IdaMcpConnection.js +8 -4
  482. package/dist/ida/IdaOperationRunner.js +3 -3
  483. package/dist/ida/IdaProvider.js +8 -12
  484. package/dist/ida/IdaSessionClient.js +20 -18
  485. package/dist/ida/IdaWorkspace.js +12 -13
  486. package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
  487. package/dist/inspector/V8InspectorCaptureProjection.js +9 -4
  488. package/dist/inspector/V8InspectorProvider.js +82 -36
  489. package/dist/javascript/recovery/WakaruCommand.js +7 -2
  490. package/dist/javascript/recovery/WakaruExecution.js +5 -2
  491. package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
  492. package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -0
  493. package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
  494. package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
  495. package/dist/main/shutdown.js +11 -3
  496. package/dist/main/startup.js +9 -2
  497. package/dist/main/transport.js +22 -2
  498. package/dist/main.js +11 -18
  499. package/dist/mcpDoctor.js +62 -2
  500. package/dist/native/AppleDispatchCoverage.js +47 -6
  501. package/dist/native/AppleDispatchDecodeFacts.js +6 -0
  502. package/dist/native/AppleDispatchMetadata.js +6 -3
  503. package/dist/native/AppleMachoFixups.js +48 -24
  504. package/dist/native/AppleMachoSelection.js +48 -22
  505. package/dist/native/AppleObjcCategories.js +6 -2
  506. package/dist/native/AppleObjcDispatchFacets.js +5 -2
  507. package/dist/native/AppleObjcProperties.js +2 -1
  508. package/dist/native/AppleSwiftDispatchFacets.js +27 -21
  509. package/dist/native/AppleSwiftVtables.js +21 -15
  510. package/dist/native/CommandRunner.js +87 -88
  511. package/dist/native/LldbCallTracer.js +372 -103
  512. package/dist/native/LldbRetainedObservations.js +178 -0
  513. package/dist/native/NativeCallObservation.js +62 -3
  514. package/dist/native/NativeMacOSProvider.js +122 -31
  515. package/dist/native/NativeUiHelperRuntime.js +11 -2
  516. package/dist/native/NativeUiObservation.js +2 -2
  517. package/dist/native/SignatureTargetBinding.js +155 -0
  518. package/dist/native/parsers/lipo.js +71 -1
  519. package/dist/native/pwndbg/PwndbgCoreContext.js +25 -5
  520. package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
  521. package/dist/native/pwntools/RecordedCrashStructureBindings.js +2 -0
  522. package/dist/process/DarwinProcessRunTokenReader.js +23 -10
  523. package/dist/process/ExecFileOutput.js +108 -6
  524. package/dist/process/OwnedCommand.js +7 -2
  525. package/dist/process/PrivateRuntimeRoot.js +10 -5
  526. package/dist/process/ProcessOwnership.js +204 -57
  527. package/dist/process/ProcessOwnershipObservation.js +60 -9
  528. package/dist/process/ProviderProcess.js +39 -10
  529. package/dist/process/capture/FilesystemSnapshot.js +50 -13
  530. package/dist/process/capture/ProcessCaptureError.js +15 -2
  531. package/dist/process/capture/ProcessCaptureLifecycle.js +235 -81
  532. package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
  533. package/dist/process/capture/ProcessHarness.js +21 -25
  534. package/dist/process/capture/ProcessNormalization.js +20 -2
  535. package/dist/process/capture/ProcessSampling.js +25 -2
  536. package/dist/process/capture/TerminalRenderer.js +14 -0
  537. package/dist/process/snapshotEnvironment.js +14 -0
  538. package/dist/server/EvidenceMcpServer.js +157 -0
  539. package/dist/server/createServer.js +61 -41
  540. package/dist/server/mcpClientMetadata.js +12 -5
  541. package/dist/server/promptCompletion.js +3 -8
  542. package/dist/server/registerAnalysisViewTool.js +15 -0
  543. package/dist/server/registerAndroidTools.js +2 -5
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  546. package/dist/server/registerApplicationTools/compareVersions.js +4 -5
  547. package/dist/server/registerApplicationTools/coverage.js +1 -2
  548. package/dist/server/registerApplicationTools/helpers.js +1 -4
  549. package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
  550. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
  551. package/dist/server/registerApplicationTools/traceFeature.js +4 -5
  552. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  553. package/dist/server/registerArtifactComparisonTool.js +13 -10
  554. package/dist/server/registerBinaryDiagnosticsTools.js +2 -5
  555. package/dist/server/registerBrowserScenarioTool.js +3 -6
  556. package/dist/server/registerBrowserTools.js +13 -18
  557. package/dist/server/registerBundleComparisonTool.js +5 -7
  558. package/dist/server/registerCloseLifecycleTool.js +9 -20
  559. package/dist/server/registerElectronTools.js +10 -15
  560. package/dist/server/registerEnhancedTools.js +36 -77
  561. package/dist/server/registerEvidenceTools.js +3 -6
  562. package/dist/server/registerEvmTools.js +2 -5
  563. package/dist/server/registerFirmwareTools.js +2 -5
  564. package/dist/server/registerFunctionComparisonTool.js +15 -12
  565. package/dist/server/registerInvestigationTools.js +16 -17
  566. package/dist/server/registerJavaScriptRecoveryTool.js +2 -5
  567. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -8
  568. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -8
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -7
  570. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -9
  571. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -9
  572. package/dist/server/registerOfficialTools.js +4 -21
  573. package/dist/server/registerProcessComparisonTool.js +74 -48
  574. package/dist/server/registerRecordedCrashTools.js +2 -5
  575. package/dist/server/registerSessionRecordTools.js +19 -24
  576. package/dist/server/registerSessionStatusTool.js +19 -6
  577. package/dist/server/registerSessionTools.js +20 -18
  578. package/dist/server/registerWebModuleTool.js +2 -5
  579. package/dist/server/registerWebNetworkCaptureTool.js +2 -5
  580. package/dist/server/registerWebRuntimeTools.js +4 -9
  581. package/dist/server/registerWebScriptTool.js +2 -5
  582. package/dist/server/registerWebSourceLocationTool.js +2 -5
  583. package/dist/server/runDerivedOperation.js +15 -3
  584. package/dist/server/sessionAvailabilityPolicy.js +0 -1
  585. package/dist/server/toolRegistrationOptions.js +2 -2
  586. package/dist/server/toolResult.js +75 -51
  587. package/dist/server/toolResultEncoding.js +34 -0
  588. package/dist/windows/WindowsNativeLoader.js +1 -0
  589. package/dist/windows/WindowsOwnedProcess.js +60 -15
  590. package/dist/windows/WindowsPrivateRuntime.js +7 -8
  591. package/install.sh +1 -1
  592. package/native/windows/README.md +3 -1
  593. package/native/windows/build/manifest.json +2 -2
  594. package/native/windows/build/rea-windows-x64.node +0 -0
  595. package/package.json +44 -30
  596. package/scripts/electron-active-hook-boundaries.cjs +18 -20
  597. package/scripts/electron-active-hook.cjs +241 -37
  598. package/scripts/rea.mjs +3 -6
  599. package/skills/reverse-engineer-anything/SKILL.md +12 -3
  600. package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
  601. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
  602. package/skills/reverse-engineer-anything/references/javascript-applications.md +20 -3
  603. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
  604. package/dist/config.js +0 -1
  605. package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
  606. package/dist/contracts/process/processCaptureExample.js +0 -2
  607. package/dist/contracts/toolOutputSchemas.js +0 -2
  608. package/dist/ghidra/GhidraDefaults.js +0 -2
  609. package/dist/main/reload.js +0 -12
  610. package/dist/main/state.js +0 -3
  611. package/dist/server/sessionToolPolicies.js +0 -2
@@ -102,7 +102,7 @@ export const readFirmwareReport = async (path, operation) => {
102
102
  if (bytes === undefined)
103
103
  throw new AnalysisOutputError(operation, `Report exceeded ${FIRMWARE_LIMITS.reportBytes} bytes`);
104
104
  try {
105
- const value = JSON.parse(bytes.toString("utf8"));
105
+ const value = JSON.parse(new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }).decode(bytes));
106
106
  return value;
107
107
  }
108
108
  catch (cause) {
@@ -3,7 +3,7 @@ import { z } from "zod";
3
3
  import { createAnalysisExecution, } from "../application/AnalysisProvider.js";
4
4
  import { firmwareResultSchemas, } from "../domain/firmware/firmwareAnalysis.js";
5
5
  import { AnalysisError } from "../domain/analysisErrorBase.js";
6
- import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisOutputError, AnalysisTimeoutError, } from "../domain/analysisErrorCore.js";
6
+ import { AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, AnalysisTimeoutError, } from "../domain/analysisErrorCore.js";
7
7
  import { ProviderAdapterError } from "../domain/providerAdapterError.js";
8
8
  import { ProviderCleanupError } from "../domain/providerCleanupError.js";
9
9
  import { err, ok } from "../domain/result.js";
@@ -11,7 +11,7 @@ import { PrivateRuntimeRoot } from "../process/PrivateRuntimeRoot.js";
11
11
  import { publishFirmwareExtraction } from "./FirmwarePublication.js";
12
12
  import { FIRMWARE_LIMITS, BINWALK_PROVIDER_IDENTITY, UNBLOB_PROVIDER_IDENTITY, } from "./FirmwareRelease.js";
13
13
  import { admitFirmwareVersion } from "./FirmwareVersion.js";
14
- import { resolveFirmwareCommand, runFirmwareCommand, readFirmwareCommandReport, } from "./FirmwareCommand.js";
14
+ import { firmwareToolUnavailable, resolveFirmwareCommand, runFirmwareCommand, readFirmwareCommandReport, } from "./FirmwareCommand.js";
15
15
  import { inventoryFirmwareOutput, snapshotFirmware } from "./FirmwareFiles.js";
16
16
  import { normalizeBinwalkReport, normalizeUnblobReport, } from "./FirmwareReports.js";
17
17
  const waitForPredecessor = (predecessor, operation, signal) => new Promise((resolve, reject) => {
@@ -96,10 +96,10 @@ export class FirmwareProvider {
96
96
  const versionRun = await run(["--version"]);
97
97
  const version = versionRun.stdout.text.trim();
98
98
  if (versionRun.stdout.bytes > 1024)
99
- throw new AnalysisCapabilityUnavailableError(engineName, request.operation, `Tool version banner is ${String(versionRun.stdout.bytes)} bytes; expected a short ${engineName} version line.`);
99
+ throw firmwareToolUnavailable(engineName, request.operation, `Tool version banner is ${String(versionRun.stdout.bytes)} bytes; expected a short ${engineName} version line.`);
100
100
  const admitted = admitFirmwareVersion(engineName, version);
101
101
  if (admitted.status === "unsupported" || admitted.status === "unresolved")
102
- throw new AnalysisCapabilityUnavailableError(engineName, request.operation, admitted.message);
102
+ throw firmwareToolUnavailable(engineName, request.operation, admitted.message);
103
103
  const engine = {
104
104
  name: engineName,
105
105
  version: admitted.version,
@@ -1,9 +1,9 @@
1
1
  /** Generated from package.json and package-lock.json; do not edit. */
2
2
  export const PACKAGE_METADATA = {
3
3
  name: "rea-agents",
4
- version: "6.0.0", // x-release-please-version
4
+ version: "6.2.0", // x-release-please-version
5
5
  serverSdkVersion: "2.3.1",
6
6
  clientSdkVersion: "2.3.1",
7
7
  coreSdkVersion: "2.3.1",
8
- skillVersion: "33",
8
+ skillVersion: "34",
9
9
  };
@@ -8,7 +8,7 @@ export const resolveGhidraAnalysisProfile = (target, identity, installation, sig
8
8
  if (signal?.aborted === true)
9
9
  return Promise.resolve(err(new AnalysisCancelledError("open_binary")));
10
10
  if (target.kind !== "executable")
11
- return Promise.resolve(ok({ profile: null, compatibility: {} }));
11
+ return Promise.resolve(ok({ profile: null }));
12
12
  if (installation.status === "unavailable")
13
13
  return Promise.resolve(err(new ProviderAdapterError(identity.id, "resolve_analysis_profile")));
14
14
  const provider = { ...identity, version: installation.providerVersion };
@@ -27,6 +27,12 @@ export const resolveGhidraAnalysisProfile = (target, identity, installation, sig
27
27
  annotation_policy: "atomic-function-entry-metadata-v1",
28
28
  load_image_observations: "source-mappings-entry-context-v2",
29
29
  function_body_evidence: "complete-inclusive-ranges-v1",
30
+ function_references: "complete-body-and-entry-reference-manager-v2",
31
+ location_resolution: "explicit-address-exact-entry-symbol-first-v3",
32
+ instruction_flow_evidence: "decoded-return-pcode-v1",
33
+ process_launch: installation.platform === "win32"
34
+ ? "official-headless-script-v1"
35
+ : "inspected-jvm-launch-support-v1",
30
36
  ...(dos
31
37
  ? {
32
38
  load_image_evidence: dosCom
@@ -63,9 +69,5 @@ export const resolveGhidraAnalysisProfile = (target, identity, installation, sig
63
69
  : {}),
64
70
  analyzer_preset: "ghidra-default",
65
71
  }),
66
- compatibility: {
67
- languageId: dos ? "x86:LE:16:Real Mode" : "auto",
68
- compilerSpecId: dos ? "default" : "auto",
69
- },
70
72
  }));
71
73
  };
@@ -1,6 +1,6 @@
1
1
  import { randomBytes, randomUUID } from "node:crypto";
2
- import { tmpdir } from "node:os";
3
- import { join } from "node:path";
2
+ import { AnalysisError } from "../domain/analysisErrorBase.js";
3
+ import { ProviderCleanupError } from "../domain/providerCleanupError.js";
4
4
  import { err, ok } from "../domain/result.js";
5
5
  import { silentLogger } from "../logger.js";
6
6
  import { PendingOperations } from "../process/PendingOperations.js";
@@ -8,7 +8,7 @@ import { PrivateRuntimeRoot } from "../process/PrivateRuntimeRoot.js";
8
8
  import { ProviderStartupDeadline } from "../process/ProviderDeadline.js";
9
9
  import { ProviderRunLineage } from "../process/ProviderRunLineage.js";
10
10
  import { ProviderProcessSupervisor, } from "../process/ProviderProcess.js";
11
- import { GHIDRA_STARTUP_TIMEOUT_MS } from "./GhidraDefaults.js";
11
+ import { DEFAULT_GHIDRA_STARTUP_TIMEOUT_MS } from "../config/ghidraStartupTimeout.js";
12
12
  import { createGhidraDiagnostics } from "./GhidraDiagnostics.js";
13
13
  import { GhidraResponseBuffer } from "./GhidraResponseBuffer.js";
14
14
  import { GhidraResponseRouter } from "./GhidraResponseRouter.js";
@@ -18,10 +18,12 @@ import { isGhidraShutdownAcknowledgement, parseGhidraSessionInfo, } from "./Ghid
18
18
  import { createGhidraTargetSnapshot } from "./GhidraTargetSnapshot.js";
19
19
  import { readFile } from "node:fs/promises";
20
20
  import { connectGhidraSocket } from "./GhidraSocketConnection.js";
21
+ import { createGhidraEndpoint, } from "./GhidraTransport.js";
21
22
  import { GhidraWire } from "./GhidraClientWire.js";
22
23
  import { completeGhidraStartupHandshake } from "./GhidraClientStartup.js";
24
+ import { ghidraSessionRoot } from "./GhidraSessionRoot.js";
23
25
  const SHUTDOWN_TIMEOUT_MS = 10_000;
24
- const SESSION_ROOT = tmpdir();
26
+ const SESSION_ROOT = ghidraSessionRoot();
25
27
  /** Owns an authenticated private Ghidra session with transport-bound mutation authority. */
26
28
  export class GhidraClient {
27
29
  #options;
@@ -32,6 +34,8 @@ export class GhidraClient {
32
34
  #launch;
33
35
  #process;
34
36
  #runtimeRoot;
37
+ #socketRoot;
38
+ #endpointPath;
35
39
  #snapshotPath;
36
40
  #targetAdmission;
37
41
  #token;
@@ -71,7 +75,7 @@ export class GhidraClient {
71
75
  constructor(options) {
72
76
  this.#options = {
73
77
  ...options,
74
- startupTimeoutMs: options.startupTimeoutMs ?? GHIDRA_STARTUP_TIMEOUT_MS,
78
+ startupTimeoutMs: options.startupTimeoutMs ?? DEFAULT_GHIDRA_STARTUP_TIMEOUT_MS,
75
79
  platform: options.platform ?? process.platform,
76
80
  transport: options.transport ?? "unix-socket",
77
81
  };
@@ -89,9 +93,14 @@ export class GhidraClient {
89
93
  /** Launch Ghidra once and require its exact post-analysis handshake. */
90
94
  start(signal) {
91
95
  if (this.#closePromise !== undefined)
92
- return this.#closePromise.then(() => this.start(signal));
93
- if (this.#startPromise !== undefined)
96
+ return this.#closePromise.then(() => this.start(signal), (cause) => err(new GhidraSessionError("process", "Ghidra cleanup remains incomplete", this.#diagnostics(), { cause, cleanupFailure: this.#cleanupError(cause) })));
97
+ if (this.#startPromise !== undefined) {
98
+ if (this.#startupController?.signal.aborted && !signal?.aborted)
99
+ return this.#startPromise.then((result) => result.ok || result.error.cleanupFailure !== undefined
100
+ ? result
101
+ : this.start(signal));
94
102
  return this.#startPromise;
103
+ }
95
104
  const controller = new AbortController();
96
105
  const onAbort = () => controller.abort(signal?.reason);
97
106
  if (signal?.aborted === true)
@@ -148,8 +157,43 @@ export class GhidraClient {
148
157
  }
149
158
  }
150
159
  /** Stop the owned process group and remove all project/runtime artifacts. */
151
- close() {
152
- return this.#requestClose(false);
160
+ async close() {
161
+ try {
162
+ await this.#requestClose(false);
163
+ return ok(null);
164
+ }
165
+ catch (cause) {
166
+ return err(this.#cleanupError(cause));
167
+ }
168
+ }
169
+ #cleanupError(cause) {
170
+ if (cause instanceof AnalysisError && cause.cleanupIncomplete)
171
+ return cause;
172
+ return new ProviderCleanupError("ghidra", [
173
+ ...(this.#process === undefined ? [] : ["ghidra-process"]),
174
+ ...[this.#runtimeRoot, this.#socketRoot].flatMap((root) => root === undefined ? [] : [root.path]),
175
+ ], {
176
+ reason: cause instanceof Error ? cause.message : String(cause),
177
+ diagnostics: this.#diagnostics(),
178
+ }, { cause });
179
+ }
180
+ async #startupFailure(primary) {
181
+ try {
182
+ await this.#cleanup();
183
+ return err(primary);
184
+ }
185
+ catch (cause) {
186
+ return err(new GhidraSessionError(primary.kind, primary.message, primary.diagnostics, {
187
+ ...(primary.cause === undefined ? {} : { cause: primary.cause }),
188
+ ...(primary.timeoutMs === undefined
189
+ ? {}
190
+ : { timeoutMs: primary.timeoutMs }),
191
+ ...(primary.remoteCode === undefined
192
+ ? {}
193
+ : { remoteCode: primary.remoteCode }),
194
+ cleanupFailure: this.#cleanupError(cause),
195
+ }));
196
+ }
153
197
  }
154
198
  #requestClose(forceStop) {
155
199
  const starting = this.#startPromise;
@@ -177,10 +221,16 @@ export class GhidraClient {
177
221
  return err(this.#failure("cancelled", "Ghidra startup was cancelled"));
178
222
  if (this.#socket !== undefined || this.#runtimeRoot !== undefined)
179
223
  return err(this.#failure("protocol", "Ghidra client is already started"));
224
+ this.#processSnapshot = undefined;
180
225
  const deadline = new ProviderStartupDeadline(this.#options.startupTimeoutMs, signal);
181
226
  try {
182
227
  return await this.#startWithin(deadline);
183
228
  }
229
+ catch (cause) {
230
+ if (cause instanceof GhidraSessionError)
231
+ return err(cause);
232
+ throw cause;
233
+ }
184
234
  finally {
185
235
  deadline.dispose();
186
236
  }
@@ -198,12 +248,17 @@ export class GhidraClient {
198
248
  }
199
249
  if (deadline.signal.aborted)
200
250
  return this.#startupInterrupted(deadline);
201
- const endpoint = {
202
- transport: this.#options.transport,
203
- path: join(this.#runtimeRoot.path, this.#options.transport === "unix-socket"
204
- ? "bridge.sock"
205
- : "bridge-endpoint.json"),
206
- };
251
+ let endpoint;
252
+ try {
253
+ const allocated = await createGhidraEndpoint(this.#runtimeRoot.path, this.#options.transport, this.#options.platform);
254
+ endpoint = allocated.endpoint;
255
+ this.#socketRoot = allocated.socketRoot;
256
+ this.#endpointPath = endpoint.path;
257
+ }
258
+ catch (cause) {
259
+ const failure = this.#failure("start", "Ghidra private endpoint allocation failed", cause);
260
+ return this.#startupFailure(failure);
261
+ }
207
262
  try {
208
263
  const snapshot = await createGhidraTargetSnapshot(this.#options.targetPath, this.#runtimeRoot.path, this.#options.targetSha256, { signal: deadline.signal, platform: this.#options.platform });
209
264
  this.#snapshotPath = snapshot.path;
@@ -213,8 +268,7 @@ export class GhidraClient {
213
268
  if (deadline.signal.aborted)
214
269
  return this.#startupInterrupted(deadline);
215
270
  const failure = this.#failure("start", "Ghidra target snapshot failed admission", cause);
216
- await this.#cleanup();
217
- return err(failure);
271
+ return this.#startupFailure(failure);
218
272
  }
219
273
  if (deadline.signal.aborted)
220
274
  return this.#startupInterrupted(deadline);
@@ -241,8 +295,7 @@ export class GhidraClient {
241
295
  : launched.error instanceof GhidraSessionError
242
296
  ? launched.error
243
297
  : this.#failure("start", launched.error.message, launched.error);
244
- await this.#cleanup();
245
- return err(failure);
298
+ return this.#startupFailure(failure);
246
299
  }
247
300
  this.#launch = launched.value;
248
301
  this.#process = new ProviderProcessSupervisor(launched.value, {
@@ -251,21 +304,19 @@ export class GhidraClient {
251
304
  const connected = await this.#connect(endpoint, deadline);
252
305
  if (!connected.ok) {
253
306
  const failure = connected.error;
254
- await this.#cleanup();
255
- return err(failure);
307
+ return this.#startupFailure(failure);
256
308
  }
257
309
  const completed = await completeGhidraStartupHandshake({
258
310
  deadline,
259
311
  request: (method, params, requestOptions) => this.#wire.request(method, params, requestOptions),
260
312
  parseSessionInfo: (value) => this.#parseSessionInfo(value),
261
- cleanup: () => this.#cleanup(),
262
313
  failure: this.#failure,
263
314
  startupTimeoutMs: this.#options.startupTimeoutMs,
264
315
  });
265
- if (completed.ok) {
266
- await this.#lineage.observe(this.#launch);
267
- this.#requestQueue.reopen();
268
- }
316
+ if (!completed.ok)
317
+ return this.#startupFailure(completed.error);
318
+ await this.#lineage.observe(this.#launch);
319
+ this.#requestQueue.reopen();
269
320
  return completed;
270
321
  }
271
322
  async #connect(endpoint, deadline) {
@@ -274,7 +325,7 @@ export class GhidraClient {
274
325
  deadline,
275
326
  failure: this.#failure,
276
327
  isClosed: () => this.#closing,
277
- processExited: () => this.#processSnapshot?.exitCode !== undefined,
328
+ processExited: () => this.#process?.snapshot().exitCode !== undefined,
278
329
  startupTimeoutMs: this.#options.startupTimeoutMs,
279
330
  handlers: {
280
331
  data: this.#onSocketData,
@@ -364,17 +415,16 @@ export class GhidraClient {
364
415
  reason: stopped.reason,
365
416
  });
366
417
  this.#logger.warn({ reason: stopped.reason }, "Ghidra process cleanup failed closed");
367
- if (forceStop)
368
- forcedStopFailure = this.#failure("process", `Ghidra process cleanup after cancellation was incomplete: ${stopped.reason}`);
418
+ // Keep the supervisor and private files available for a later close.
419
+ // A still-live JVM can recreate files if its runtime is removed here.
420
+ throw this.#failure("process", `Ghidra process cleanup was incomplete: ${stopped.reason}`);
369
421
  }
370
422
  }
371
423
  this.#lastDiagnostics = this.#diagnostics();
372
424
  this.#process = undefined;
373
425
  this.#launch = undefined;
374
- const runtimeRoot = this.#runtimeRoot;
375
- this.#runtimeRoot = undefined;
376
426
  try {
377
- await runtimeRoot?.close();
427
+ await this.#removeRuntimeRoots();
378
428
  }
379
429
  catch (cause) {
380
430
  if (forceStop)
@@ -383,6 +433,7 @@ export class GhidraClient {
383
433
  throw cause;
384
434
  }
385
435
  this.#snapshotPath = undefined;
436
+ this.#endpointPath = undefined;
386
437
  this.#token = undefined;
387
438
  this.#runId = undefined;
388
439
  this.#responseBuffer.reset();
@@ -393,6 +444,42 @@ export class GhidraClient {
393
444
  this.#closing = false;
394
445
  }
395
446
  }
447
+ /**
448
+ * Remove the runtime and socket roots, keeping each one that could not be
449
+ * removed so a later close retries it rather than reporting success.
450
+ */
451
+ async #removeRuntimeRoots() {
452
+ const roots = [
453
+ {
454
+ root: this.#runtimeRoot,
455
+ release: () => (this.#runtimeRoot = undefined),
456
+ },
457
+ { root: this.#socketRoot, release: () => (this.#socketRoot = undefined) },
458
+ ];
459
+ const leftovers = [];
460
+ let firstCause;
461
+ for (const { root, release } of roots) {
462
+ if (root === undefined)
463
+ continue;
464
+ try {
465
+ await root.close();
466
+ release();
467
+ }
468
+ catch (cause) {
469
+ firstCause ??= cause;
470
+ leftovers.push({
471
+ path: root.path,
472
+ reason: cause instanceof Error ? cause.message : String(cause),
473
+ });
474
+ }
475
+ }
476
+ if (leftovers.length > 0)
477
+ throw new ProviderCleanupError("ghidra", leftovers.map(({ path }) => path), {
478
+ reason: "Ghidra's private runtime directory could not be removed; it is retained for a later close.",
479
+ leftover_paths: leftovers.map(({ path }) => path),
480
+ failures: leftovers.map(({ path, reason }) => `${path}: ${reason}`),
481
+ }, { cause: firstCause });
482
+ }
396
483
  #redactAuthentication(value) {
397
484
  for (const token of this.#authenticationTokens)
398
485
  value = value.replaceAll(token, "[REDACTED]");
@@ -430,8 +517,7 @@ export class GhidraClient {
430
517
  }
431
518
  async #startupInterrupted(deadline) {
432
519
  const failure = this.#interruptionFailure(deadline);
433
- await this.#cleanup();
434
- return err(failure);
520
+ return this.#startupFailure(failure);
435
521
  }
436
522
  #interruptionFailure(deadline) {
437
523
  return deadline.interruption === "cancelled"
@@ -455,6 +541,12 @@ export class GhidraClient {
455
541
  ...(this.#runtimeRoot === undefined
456
542
  ? {}
457
543
  : { runtimeRoot: this.#runtimeRoot.path }),
544
+ ...(this.#socketRoot === undefined
545
+ ? {}
546
+ : { socketRoot: this.#socketRoot.path }),
547
+ ...(this.#endpointPath === undefined
548
+ ? {}
549
+ : { endpointPath: this.#endpointPath }),
458
550
  ...(this.#launch === undefined ? {} : { launch: this.#launch }),
459
551
  ...(snapshot === undefined ? {} : { snapshot }),
460
552
  ...(this.#token === undefined ? {} : { token: this.#token }),
@@ -9,7 +9,6 @@ export async function completeGhidraStartupHandshake(options) {
9
9
  const failure = options.deadline.signal.aborted
10
10
  ? interruptionFailure(options)
11
11
  : ping.error;
12
- await options.cleanup();
13
12
  return err(failure);
14
13
  }
15
14
  const parsed = options.parseSessionInfo(ping.value);
@@ -17,7 +16,6 @@ export async function completeGhidraStartupHandshake(options) {
17
16
  const failure = parsed.ok
18
17
  ? options.failure("analysis_timeout", "Ghidra auto-analysis reached its per-file deadline")
19
18
  : parsed.error;
20
- await options.cleanup();
21
19
  return err(failure);
22
20
  }
23
21
  return parsed;
@@ -1,4 +1,3 @@
1
- import { join } from "node:path";
2
1
  /** Preserve actionable runtime coordinates after cleanup and redact bearer data. */
3
2
  export const createGhidraDiagnostics = (options) => {
4
3
  if (options.runtimeRoot === undefined &&
@@ -20,12 +19,13 @@ export const createGhidraDiagnostics = (options) => {
20
19
  ...(options.runId === undefined ? {} : { run_id: options.runId }),
21
20
  ...(options.runtimeRoot === undefined
22
21
  ? {}
23
- : {
24
- runtime_root: options.runtimeRoot,
25
- endpoint_path: join(options.runtimeRoot, options.transport === "unix-socket"
26
- ? "bridge.sock"
27
- : "bridge-endpoint.json"),
28
- }),
22
+ : { runtime_root: options.runtimeRoot }),
23
+ ...(options.socketRoot === undefined
24
+ ? {}
25
+ : { socket_root: options.socketRoot }),
26
+ ...(options.endpointPath === undefined
27
+ ? {}
28
+ : { endpoint_path: options.endpointPath }),
29
29
  ...(options.launch === undefined
30
30
  ? {}
31
31
  : {
@@ -38,13 +38,14 @@ export const projectGhidraDoctorInspection = (inspection) => {
38
38
  };
39
39
  };
40
40
  /** Inspect the process-configured BYO Ghidra installation for `rea doctor`. */
41
- export const inspectSystemGhidraProvider = () => Promise.resolve(projectGhidraDoctorInspection(inspectGhidraInstallation({
42
- ...(process.env.GHIDRA_INSTALL_DIR === undefined
41
+ export const inspectSystemGhidraProvider = (environment) => Promise.resolve(projectGhidraDoctorInspection(inspectGhidraInstallation({
42
+ environment,
43
+ ...(environment.GHIDRA_INSTALL_DIR === undefined
43
44
  ? {}
44
- : { installDir: process.env.GHIDRA_INSTALL_DIR }),
45
- ...(process.env.JAVA_HOME === undefined
45
+ : { installDir: environment.GHIDRA_INSTALL_DIR }),
46
+ ...(environment.JAVA_HOME === undefined
46
47
  ? {}
47
- : { javaHome: process.env.JAVA_HOME }),
48
+ : { javaHome: environment.JAVA_HOME }),
48
49
  })));
49
50
  const selectedChecks = (inspection) => {
50
51
  const byName = new Map(inspection.checks.map((candidate) => [candidate.name, candidate]));
@@ -2,13 +2,14 @@ import { z } from "zod";
2
2
  import { nativeFunctionAnnotationsInputSchema, nativeFunctionAnnotationsSchema, } from "../domain/native/nativeFunctionAnnotations.js";
3
3
  import { nativeDataTypeSchema } from "../domain/native/nativeDataType.js";
4
4
  import { nativeInstructionSchema, nativeCallTargetsSchema, } from "../domain/native/nativeInstruction.js";
5
- import { AnalysisInputError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
5
+ import { AnalysisOutputError, } from "../domain/analysisErrorCore.js";
6
6
  import { functionBodyEntryAgrees, functionInstructionWindowSchema, functionDossierSchema, } from "../domain/hopperValues.js";
7
7
  import { jsonObjectSchema, jsonValueSchema, } from "../domain/jsonValue.js";
8
8
  import { nativeApiBoundarySchema } from "../domain/native/nativeApiBoundary.js";
9
9
  import { nativeValueFlowSchema } from "../domain/native/nativeValueFlow.js";
10
10
  import { err, ok } from "../domain/result.js";
11
- import { ghidraIdentifierSchema, ghidraCanonicalAddressSchema, ghidraFunctionClassificationSchema as classification, ghidraFunctionBodySchema as ghidraFunctionBody, ghidraProcedureIdentitySchema as procedureIdentity, } from "./GhidraInventoryValues.js";
11
+ import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
12
+ import { ghidraIdentifierSchema, ghidraInputAddressSchema, ghidraCanonicalAddressSchema, ghidraFunctionClassificationSchema as classification, ghidraFunctionBodySchema as ghidraFunctionBody, ghidraProcedureIdentitySchema as procedureIdentity, } from "./GhidraInventoryValues.js";
12
13
  /** Function analysis and annotation operations admitted by the Ghidra adapter. */
13
14
  export const GHIDRA_FUNCTION_OPERATIONS = [
14
15
  "annotate_native_function",
@@ -37,15 +38,15 @@ const inputSchemas = {
37
38
  .object({
38
39
  document,
39
40
  type: z.string().min(1).nullable().default(null),
40
- address: ghidraCanonicalAddressSchema.nullable().default(null),
41
+ address: ghidraInputAddressSchema.nullable().default(null),
41
42
  })
42
43
  .strict()
43
44
  .refine((value) => (value.type === null) !== (value.address === null), "Supply exactly one of type or address"),
44
45
  inspect_native_instruction: z
45
- .object({ document, address: ghidraCanonicalAddressSchema })
46
+ .object({ document, address: ghidraInputAddressSchema })
46
47
  .strict(),
47
48
  resolve_native_call_targets: z
48
- .object({ document, address: ghidraCanonicalAddressSchema })
49
+ .object({ document, address: ghidraInputAddressSchema })
49
50
  .strict(),
50
51
  analyze_function: z.object({ procedure }).strict(),
51
52
  procedure_assembly: z.object(directProcedure).strict(),
@@ -60,14 +61,16 @@ const inputSchemas = {
60
61
  direction: z.enum(["incoming", "outgoing"]).default("outgoing"),
61
62
  })
62
63
  .strict(),
63
- xrefs: z.object({ document, address: ghidraCanonicalAddressSchema }).strict(),
64
+ xrefs: z.object({ document, address: ghidraInputAddressSchema }).strict(),
64
65
  };
65
66
  /** Validate and default one function request before it crosses the socket. */
66
67
  export const parseGhidraFunctionInput = (operation, value) => {
67
68
  const parsed = inputSchemas[operation].safeParse(value);
68
69
  return parsed.success
69
70
  ? ok(jsonObjectSchema.parse(Object.fromEntries(Object.entries(parsed.data).filter(([, value]) => value !== undefined))))
70
- : err(new AnalysisInputError(operation, { cause: parsed.error }));
71
+ : err(analysisInputErrorFromIssues(operation, parsed.error.issues, value, {
72
+ cause: parsed.error,
73
+ }));
71
74
  };
72
75
  const localVariable = z
73
76
  .object({
@@ -109,13 +112,11 @@ const procedureReferences = z
109
112
  procedure: procedureIdentity,
110
113
  direction: z.enum(["incoming", "outgoing"]),
111
114
  references: z.array(referenceEdge),
112
- reference_kinds_available: z.boolean().default(true),
113
- unresolved_calls: z
114
- .array(z.strictObject({
115
+ reference_kinds_available: z.boolean(),
116
+ unresolved_calls: z.array(z.strictObject({
115
117
  address: ghidraCanonicalAddressSchema,
116
118
  reason: z.string(),
117
- }))
118
- .default([]),
119
+ })),
119
120
  })
120
121
  .strict();
121
122
  const procedureInfo = z