rea-agents 6.3.0 → 6.4.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 (487) hide show
  1. package/README.md +7 -4
  2. package/bridge/ghidra/ReaGhidraApplySeeds.java +151 -0
  3. package/bridge/ghidra/ReaGhidraBridge.java +597 -209
  4. package/bridge/ghidra/ReaGhidraNoReturnFix.java +123 -0
  5. package/dist/adb/AdbConfiguration.js +88 -0
  6. package/dist/adb/AdbDeviceOutput.js +186 -0
  7. package/dist/adb/AdbProvider.js +1190 -0
  8. package/dist/adb/AdbShellOutput.js +309 -0
  9. package/dist/android/AndroidTargetSnapshot.js +104 -22
  10. package/dist/android/JadxConfiguration.js +44 -24
  11. package/dist/android/JadxProvider.js +51 -19
  12. package/dist/apktool/ApktoolConfiguration.js +84 -0
  13. package/dist/apktool/ApktoolDecodeOutput.js +59 -0
  14. package/dist/apktool/ApktoolProvider.js +506 -0
  15. package/dist/application/AnalysisProvider.js +8 -2
  16. package/dist/application/AppBundleExecutable.js +27 -22
  17. package/dist/application/BinaryTargetResolver.js +22 -2
  18. package/dist/application/CapabilityInventory.js +11 -1
  19. package/dist/application/ClientConfigurationDocument.js +70 -0
  20. package/dist/application/ClientConfigurationFiles.js +91 -0
  21. package/dist/application/ClientRegistrationEnvironment.js +35 -0
  22. package/dist/application/ClientRegistrationStatus.js +66 -31
  23. package/dist/application/DirectAnalysis.js +2 -2
  24. package/dist/application/DirectAnalysisCleanup.js +1 -1
  25. package/dist/application/DirectAnalysisStatus.js +1 -1
  26. package/dist/application/Doctor.js +5 -3
  27. package/dist/application/DoctorDiagnostics.js +1 -1
  28. package/dist/application/EvidenceBundleCommands.js +6 -12
  29. package/dist/application/GeminiClientSettings.js +139 -0
  30. package/dist/application/HermesClientHome.js +115 -0
  31. package/dist/application/HopperDownload.js +39 -0
  32. package/dist/application/InvestigationProviders.js +6 -0
  33. package/dist/application/JsonFiles.js +6 -5
  34. package/dist/{cliJsonFile.js → application/JsonInputFile.js} +108 -35
  35. package/dist/application/LinuxHopper.js +4 -12
  36. package/dist/application/MacHopper.js +172 -149
  37. package/dist/application/MipsElfAbiFlags.js +140 -0
  38. package/dist/application/ProviderOperationExecution.js +31 -0
  39. package/dist/application/ReconstructionObligationCandidates.js +9 -3
  40. package/dist/application/ReferenceSourceImport.js +76 -29
  41. package/dist/application/ReferenceSourceImportEntries.js +18 -9
  42. package/dist/application/ReferenceSourceImportPolicy.js +99 -23
  43. package/dist/application/ReferenceSourceImportTypes.js +30 -22
  44. package/dist/application/ReferenceSourceVcsAdapter.js +145 -30
  45. package/dist/application/RegularFileRead.js +93 -7
  46. package/dist/application/Setup.js +54 -6
  47. package/dist/application/SetupClientConfiguration.js +116 -16
  48. package/dist/application/SetupHost.js +102 -24
  49. package/dist/application/SetupPlan.js +5 -8
  50. package/dist/application/SetupSkill.js +58 -39
  51. package/dist/application/SupportedClients.js +290 -65
  52. package/dist/application/Uninstall.js +158 -10
  53. package/dist/application/UpdateMaintenance.js +17 -21
  54. package/dist/application/Utf8JsonInput.js +7 -0
  55. package/dist/application/WebScriptExportService.js +131 -65
  56. package/dist/application/WebSourceLocationService.js +3 -0
  57. package/dist/application/adb/AdbDeviceAnalysisPort.js +1 -0
  58. package/dist/application/adb/AdbDeviceAnalysisService.js +13 -0
  59. package/dist/application/analysisView/AnalysisViewService.js +40 -2
  60. package/dist/application/apktool/ApktoolResourceAnalysisPort.js +1 -0
  61. package/dist/application/apktool/ApktoolResourceAnalysisService.js +13 -0
  62. package/dist/application/binary/AnalysisClientCleanup.js +0 -24
  63. package/dist/application/binary/BinarySession.js +2 -1
  64. package/dist/application/binaryDiagnostics/BinaryLayoutService.js +2 -1
  65. package/dist/application/binaryDiagnostics/PeResourcesPort.js +1 -0
  66. package/dist/application/binaryDiagnostics/PeResourcesService.js +111 -0
  67. package/dist/application/binaryDiagnostics/RecordedCrashService.js +2 -1
  68. package/dist/application/evm/EvmInterfaceService.js +3 -0
  69. package/dist/application/firmware/FirmwareAnalysisService.js +3 -0
  70. package/dist/application/investigation/InspectEvidenceBundle.js +18 -0
  71. package/dist/application/javascript/ElectronBoundaryGraphContext.js +3 -2
  72. package/dist/application/javascript/ElectronBoundaryGraphIpc.js +2 -2
  73. package/dist/application/javascript/ElectronBoundaryGraphNative.js +19 -6
  74. package/dist/application/javascript/ElectronBoundaryGraphWindows.js +3 -3
  75. package/dist/application/javascript/JavaScriptApplicationService.js +22 -11
  76. package/dist/application/javascript/JavaScriptApplicationWorkflowEvidence.js +5 -6
  77. package/dist/application/javascript/JavaScriptArtifactAnalysis.js +171 -30
  78. package/dist/application/javascript/JavaScriptArtifactGraphAccumulator.js +14 -16
  79. package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +67 -19
  80. package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +4 -3
  81. package/dist/application/javascript/JavaScriptArtifactGraphContext.js +11 -5
  82. package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +19 -16
  83. package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +92 -10
  84. package/dist/application/javascript/JavaScriptArtifactPathResolution.js +258 -235
  85. package/dist/application/javascript/JavaScriptArtifactReconstruction.js +115 -26
  86. package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +4 -1
  87. package/dist/application/javascript/JavaScriptModuleRelationships.js +6 -4
  88. package/dist/application/javascript/JavaScriptRecoveryService.js +3 -0
  89. package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +9 -3
  90. package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +199 -61
  91. package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +12 -19
  92. package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +4 -1
  93. package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +5 -3
  94. package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +5 -3
  95. package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +19 -8
  96. package/dist/application/jeb/JebAnalysisPort.js +1 -0
  97. package/dist/application/jeb/JebAnalysisService.js +13 -0
  98. package/dist/application/managed/ManagedApplicationGraphService.js +1 -1
  99. package/dist/application/native/NativeUiActionTrace.js +16 -8
  100. package/dist/application/native/NativeValueTrace.js +23 -6
  101. package/dist/application/process/ProcessCli.js +25 -20
  102. package/dist/artifacts/ArtifactPaths.js +129 -8
  103. package/dist/artifacts/ArtifactProvider.js +20 -15
  104. package/dist/artifacts/ArtifactReader.js +23 -0
  105. package/dist/artifacts/ArtifactResourceScope.js +100 -0
  106. package/dist/artifacts/AsarArtifactReader.js +176 -102
  107. package/dist/artifacts/AsarHeader.js +24 -0
  108. package/dist/artifacts/DirectoryArtifactReader.js +168 -65
  109. package/dist/artifacts/MachOSliceArtifactReader.js +116 -39
  110. package/dist/artifacts/NativeDmgArtifactReader.js +29 -22
  111. package/dist/artifacts/SafeOutputTree.js +245 -70
  112. package/dist/artifacts/SafeOutputTreeCleanup.js +45 -0
  113. package/dist/artifacts/SafeOutputTreeCreationFailure.js +20 -0
  114. package/dist/artifacts/SafeOutputTreeIdentity.js +42 -0
  115. package/dist/artifacts/SafeOutputTreeReadback.js +33 -0
  116. package/dist/artifacts/ZipArtifactReader.js +77 -27
  117. package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +58 -18
  118. package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +62 -24
  119. package/dist/artifacts/apple/KeyedArchiveReader.js +32 -13
  120. package/dist/artifacts/extraction/ArtifactExtraction.js +110 -86
  121. package/dist/artifacts/inventory/ArtifactGraphConstruction.js +110 -43
  122. package/dist/artifacts/inventory/ArtifactInventory.js +5 -4
  123. package/dist/artifacts/inventory/classify.js +75 -32
  124. package/dist/artifacts/inventory/hashStableRootArtifact.js +48 -15
  125. package/dist/artifacts/inventory/reader.js +13 -5
  126. package/dist/artifacts/inventory/scanCanonical.js +62 -25
  127. package/dist/artifacts/inventory/scanReader.js +38 -11
  128. package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +15 -9
  129. package/dist/artifacts/javascript/JavaScriptSourceAnalysis.js +3 -0
  130. package/dist/browser/BrowserScenarioPartialObservation.js +8 -2
  131. package/dist/browser/BrowserScenarioSecrets.js +52 -37
  132. package/dist/browser/CdpBrowserProvider.js +5 -0
  133. package/dist/browser/CdpCaptureDocuments.js +40 -6
  134. package/dist/browser/CdpCaptureDomSvg.js +210 -0
  135. package/dist/browser/CdpCaptureEventBodyShapes.js +4 -8
  136. package/dist/browser/CdpCaptureEventHandlers.js +26 -9
  137. package/dist/browser/CdpCaptureEvents.js +4 -9
  138. package/dist/browser/CdpConnection.js +22 -5
  139. package/dist/browser/CdpPageCapture.js +1 -1
  140. package/dist/browser/CdpTargetSession.js +30 -34
  141. package/dist/browser/CdpWebMcpDiscovery.js +32 -10
  142. package/dist/browser/ElectronFileScope.js +99 -9
  143. package/dist/browser/PlaywrightBrowserScenarioProvider.js +60 -4
  144. package/dist/browser/PlaywrightElectronActiveProvider.js +11 -6
  145. package/dist/browser/PlaywrightScenarioArtifacts.js +5 -5
  146. package/dist/browser/PlaywrightScenarioBrowser.js +69 -7
  147. package/dist/browser/PlaywrightScenarioSession.js +127 -54
  148. package/dist/browser/PlaywrightScenarioStorage.js +507 -0
  149. package/dist/browser/PngVisualDiff.js +198 -29
  150. package/dist/browser/WebSourceMapFetcher.js +3 -3
  151. package/dist/browser/assets/LocalWebScriptArtifacts.js +3 -1
  152. package/dist/browser/assets/PublishWebScripts.js +75 -20
  153. package/dist/browser/assets/WebArtifactReads.js +23 -1
  154. package/dist/browser/assets/WebSourceLocationArtifacts.js +1 -0
  155. package/dist/browser/execution/CdpExecutionCapture.js +3 -3
  156. package/dist/browser/execution/CdpPreciseCoverage.js +5 -8
  157. package/dist/browser/history/HarCapture.js +14 -0
  158. package/dist/browser/history/HarCaptureProcess.js +2 -10
  159. package/dist/browser/history/MitmproxyCaptureAdapter.js +3 -1
  160. package/dist/browser/modules/WebModuleArtifacts.js +1 -0
  161. package/dist/cli/adbCommands.js +337 -0
  162. package/dist/cli/analysisViewCommands.js +39 -1
  163. package/dist/cli/apktoolCommands.js +53 -0
  164. package/dist/cli/artifactCommands.js +8 -11
  165. package/dist/cli/binaryDiagnosticsCommands.js +19 -1
  166. package/dist/cli/browserAdvancedCommands.js +65 -36
  167. package/dist/cli/coreBinaryCommands.js +0 -5
  168. package/dist/cli/coreNativeCommands.js +1 -14
  169. package/dist/cli/electronCommands.js +6 -1
  170. package/dist/cli/evmCommands.js +13 -4
  171. package/dist/cli/firmwareCommands.js +7 -2
  172. package/dist/cli/javascriptApplicationAnalysis.js +17 -1
  173. package/dist/cli/javascriptRecoveryCommands.js +22 -15
  174. package/dist/cli/jebCommands.js +99 -0
  175. package/dist/cli/jsonOutput.js +11 -4
  176. package/dist/cli/referenceSourceImportStatus.js +7 -0
  177. package/dist/cli/setupCommands.js +15 -3
  178. package/dist/cli/utilityCommands.js +66 -18
  179. package/dist/cli/webScriptCommands.js +20 -1
  180. package/dist/cli/webSourceLocationCommands.js +21 -9
  181. package/dist/cli.js +6 -0
  182. package/dist/cliBrowserScenarioCommands.js +2 -1
  183. package/dist/cliCommandNames.js +32 -0
  184. package/dist/cliJsonInput.js +2 -2
  185. package/dist/cliObservationOptions.js +3 -0
  186. package/dist/composition/adb.js +3 -0
  187. package/dist/composition/apktool.js +3 -0
  188. package/dist/composition/binaryDiagnostics.js +4 -0
  189. package/dist/composition/directAnalysis.js +12 -4
  190. package/dist/composition/javascriptAnalysisWorkerProcess.js +48 -0
  191. package/dist/composition/jeb.js +6 -0
  192. package/dist/config/environment.js +10 -0
  193. package/dist/config/ghidraLanguageOverride.js +9 -0
  194. package/dist/config/mcpInputSchemaProfile.js +27 -0
  195. package/dist/config/parseConfig.js +28 -1
  196. package/dist/contracts/adb/adbToolContracts.js +353 -0
  197. package/dist/contracts/advertisedInputExamples.js +48 -0
  198. package/dist/contracts/analysisDetail.js +10 -0
  199. package/dist/contracts/analysisViewToolContracts.js +17 -2
  200. package/dist/contracts/apktool/apktoolToolContracts.js +33 -0
  201. package/dist/contracts/artifactToolContracts.js +8 -5
  202. package/dist/contracts/browserToolContracts.js +1 -1
  203. package/dist/contracts/compactInputSchema.js +256 -0
  204. package/dist/contracts/functionWorkflowToolContracts.js +1 -1
  205. package/dist/contracts/inputSchemaPresentation.js +10 -10
  206. package/dist/contracts/javascript/electronToolContracts.js +15 -3
  207. package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +1 -1
  208. package/dist/contracts/jeb/jebToolContracts.js +64 -0
  209. package/dist/contracts/native/binaryDiagnosticsToolContracts.js +25 -3
  210. package/dist/contracts/officialToolContracts.js +5 -5
  211. package/dist/contracts/sessionToolContracts.js +2 -2
  212. package/dist/contracts/sessionToolSchemas.js +6 -2
  213. package/dist/contracts/toolContractExamples.js +6 -0
  214. package/dist/contracts/toolContractTypes.js +3 -0
  215. package/dist/contracts/toolContracts.js +6 -0
  216. package/dist/contracts/toolEffects.js +167 -0
  217. package/dist/contracts/toolOutputSchemaGroups.js +5 -3
  218. package/dist/contracts/toolSchemaMetadata.js +82 -7
  219. package/dist/domain/adb/adbDeviceAnalysis.js +583 -0
  220. package/dist/domain/analysisErrorCleanup.js +29 -0
  221. package/dist/domain/analysisErrorPresentation.js +18 -6
  222. package/dist/domain/analysisErrorProjection.js +4 -1
  223. package/dist/domain/analysisSnapshot.js +2 -1
  224. package/dist/domain/analysisView/analysisView.js +52 -2
  225. package/dist/domain/analysisView/binaryLayoutView.js +2 -0
  226. package/dist/domain/analysisView/javascriptApplicationView.js +2 -0
  227. package/dist/domain/analysisView/nativeFunctionView.js +155 -0
  228. package/dist/domain/android/androidApplication.js +25 -20
  229. package/dist/domain/apktool/apktoolResourceAnalysis.js +77 -0
  230. package/dist/domain/apple/appleApplication.js +40 -23
  231. package/dist/domain/apple/appleBundleAnatomy.js +95 -28
  232. package/dist/domain/apple/dyldPaths.js +9 -1
  233. package/dist/domain/apple/dylibResolution.js +2 -2
  234. package/dist/domain/apple/interfaceBuilderGraph.js +22 -19
  235. package/dist/domain/apple/interfaceBuilderKeyedArchive.js +10 -1
  236. package/dist/domain/artifactComparison.js +35 -7
  237. package/dist/domain/artifactGraph.js +5 -3
  238. package/dist/domain/artifactIdentity.js +30 -2
  239. package/dist/domain/artifactInspection.js +3 -43
  240. package/dist/domain/artifactIntegrityPolicy.js +10 -0
  241. package/dist/domain/artifactInventoryEvidence.js +11 -12
  242. package/dist/domain/artifactPathSyntax.js +1 -1
  243. package/dist/domain/binaryTarget.js +16 -0
  244. package/dist/domain/binaryTargetTypes.js +8 -1
  245. package/dist/domain/browserObservationSchemas.js +8 -4
  246. package/dist/domain/canonicalJsonDigestSteps.js +34 -12
  247. package/dist/domain/compactStringIdentity.js +9 -0
  248. package/dist/domain/evidence.js +2 -1
  249. package/dist/domain/evidenceRecordSummary.js +144 -0
  250. package/dist/domain/inputIssueProjection.js +16 -1
  251. package/dist/domain/javascript/electronStaticAnalysisBrowser.js +12 -13
  252. package/dist/domain/javascript/electronStaticAnalysisIpc.js +11 -20
  253. package/dist/domain/javascript/electronStaticAnalysisNative.js +70 -40
  254. package/dist/domain/javascript/electronStaticAnalysisValues.js +16 -0
  255. package/dist/domain/javascript/javascriptAnalysisResourceControls.js +45 -0
  256. package/dist/domain/javascript/javascriptApplicationAnalysis.js +4 -1
  257. package/dist/domain/javascript/javascriptApplicationChangeGraph.js +6 -6
  258. package/dist/domain/javascript/javascriptApplicationGraph.js +79 -18
  259. package/dist/domain/javascript/javascriptApplicationProjectionResources.js +35 -0
  260. package/dist/domain/javascript/javascriptApplicationVersionItems.js +28 -12
  261. package/dist/domain/javascript/javascriptApplicationVersionKeys.js +9 -1
  262. package/dist/domain/javascript/javascriptAstFingerprint.js +58 -31
  263. package/dist/domain/javascript/javascriptAstValues.js +32 -0
  264. package/dist/domain/javascript/javascriptElectronMemberWrites.js +50 -0
  265. package/dist/domain/javascript/javascriptModuleSemanticIr.js +15 -0
  266. package/dist/domain/javascript/javascriptNativeHandoff.js +6 -1
  267. package/dist/domain/javascript/javascriptRpcEndpoints.js +253 -0
  268. package/dist/domain/javascript/javascriptRuntimeLoadState.js +1 -3
  269. package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +7 -2
  270. package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +8 -11
  271. package/dist/domain/javascript/javascriptSemanticAnalysis.js +190 -33
  272. package/dist/domain/javascript/javascriptSemanticCallableResults.js +42 -0
  273. package/dist/domain/javascript/javascriptSemanticCalls.js +8 -1
  274. package/dist/domain/javascript/javascriptSemanticDerivedAnalysis.js +15 -4
  275. package/dist/domain/javascript/javascriptSemanticFileProjection.js +1 -0
  276. package/dist/domain/javascript/javascriptSemanticFingerprints.js +42 -41
  277. package/dist/domain/javascript/javascriptSemanticGraph.js +69 -23
  278. package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +2 -10
  279. package/dist/domain/javascript/javascriptSemanticIterationSources.js +40 -7
  280. package/dist/domain/javascript/javascriptSemanticMemberMutations.js +341 -87
  281. package/dist/domain/javascript/javascriptSemanticMutationValues.js +78 -35
  282. package/dist/domain/javascript/javascriptSemanticObjectReferences.js +381 -0
  283. package/dist/domain/javascript/javascriptSemanticObjects.js +7 -1
  284. package/dist/domain/javascript/javascriptSemanticProjection.js +52 -14
  285. package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +77 -0
  286. package/dist/domain/javascript/javascriptSemanticQuery.js +27 -29
  287. package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +1 -3
  288. package/dist/domain/javascript/javascriptSemanticReturnedReferences.js +219 -0
  289. package/dist/domain/javascript/javascriptSemanticReturns.js +13 -23
  290. package/dist/domain/javascript/javascriptSemanticState.js +22 -2
  291. package/dist/domain/javascript/javascriptSemanticTraversal.js +19 -1
  292. package/dist/domain/javascript/javascriptSemanticValues.js +47 -19
  293. package/dist/domain/javascript/javascriptSourceAnalysis.js +1 -0
  294. package/dist/domain/javascript/javascriptStaticAnalysis.js +29 -17
  295. package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +8 -6
  296. package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +49 -5
  297. package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +8 -4
  298. package/dist/domain/javascript/javascriptStaticAnalysisState.js +1 -0
  299. package/dist/domain/jeb/jebAnalysis.js +114 -0
  300. package/dist/domain/jsonShape.js +63 -52
  301. package/dist/domain/jsonValue.js +3 -0
  302. package/dist/domain/managed/managedApplicationGraph.js +37 -0
  303. package/dist/domain/managed/managedApplicationGraphCoverage.js +8 -2
  304. package/dist/domain/managed/managedApplicationGraphNodes.js +32 -22
  305. package/dist/domain/managed/managedArtifact.js +1 -0
  306. package/dist/domain/managed/managedInspectionEvidence.js +13 -0
  307. package/dist/domain/native/nativeAotPe.js +1408 -0
  308. package/dist/domain/native/nativeInstruction.js +21 -0
  309. package/dist/domain/native/nativeMetadataRecovery.js +79 -6
  310. package/dist/domain/native/peResources.js +94 -0
  311. package/dist/domain/nativeConvention.js +33 -0
  312. package/dist/domain/process/processCapture.js +91 -1
  313. package/dist/domain/process/processCaptureExample.js +24 -0
  314. package/dist/domain/process/processCaptureValidation.js +79 -0
  315. package/dist/domain/process/processScenario.js +59 -7
  316. package/dist/domain/propertyListKeys.js +3 -1
  317. package/dist/domain/referenceSourceGraph.js +25 -16
  318. package/dist/domain/referenceSourceImportParsing.js +6 -3
  319. package/dist/domain/referenceSourcePathIdentity.js +22 -0
  320. package/dist/domain/referenceSourceRequireBindings.js +137 -0
  321. package/dist/domain/webBundleAnalyzerInspection.js +14 -2
  322. package/dist/domain/webCaptureDiff.js +102 -4
  323. package/dist/domain/webScriptExportError.js +10 -4
  324. package/dist/domain/webScriptExportPlan.js +7 -13
  325. package/dist/domain/zipPackageFormat.js +4 -1
  326. package/dist/domain/zodCollectionSteps.js +24 -0
  327. package/dist/dotnet/ManagedArtifactInspector.js +55 -43
  328. package/dist/dotnet/ManagedDecodeBudget.js +80 -0
  329. package/dist/dotnet/ManagedMemberInspector.js +13 -6
  330. package/dist/dotnet/ManagedMemberInspectorCore.js +2 -2
  331. package/dist/dotnet/ManagedMemberInstructionDecoder.js +4 -2
  332. package/dist/dotnet/ManagedMemberRows.js +9 -4
  333. package/dist/dotnet/ManagedMetadataHeaps.js +15 -5
  334. package/dist/dotnet/ManagedMetadataInventoryRows.js +20 -11
  335. package/dist/dotnet/ManagedMetadataLayout.js +10 -4
  336. package/dist/dotnet/ManagedMethodBodyReader.js +8 -3
  337. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +3 -2
  338. package/dist/dotnet/ManagedNativeBoundaryInspector.js +49 -34
  339. package/dist/dotnet/ManagedPeReader.js +41 -25
  340. package/dist/dotnet/ManagedReaderFailure.js +2 -1
  341. package/dist/dotnet/ManagedStaticProvider.js +55 -24
  342. package/dist/evaluation/AgentEvaluationReport.js +9 -5
  343. package/dist/evaluation/CodexAgentEval.js +43 -13
  344. package/dist/evm/EvmoleFailures.js +0 -2
  345. package/dist/evm/EvmoleInterfaceProvider.js +67 -2
  346. package/dist/filesystem/OwnedDirectoryHandle.js +29 -0
  347. package/dist/filesystem/OwnedFileHandle.js +36 -0
  348. package/dist/filesystem/RegularFile.js +33 -1
  349. package/dist/filesystem/StableFileHash.js +46 -0
  350. package/dist/filesystem/readFileHandleChunks.js +26 -0
  351. package/dist/firmware/FirmwareCommand.js +25 -3
  352. package/dist/firmware/FirmwareFiles.js +23 -8
  353. package/dist/firmware/FirmwareProvider.js +156 -32
  354. package/dist/firmware/FirmwarePublication.js +24 -3
  355. package/dist/firmware/FirmwareRelease.js +1 -0
  356. package/dist/generatedPackageMetadata.js +2 -2
  357. package/dist/ghidra/GhidraAnalysisProfile.js +55 -4
  358. package/dist/ghidra/GhidraAnalysisSeeds.js +211 -0
  359. package/dist/ghidra/GhidraClient.js +76 -4
  360. package/dist/ghidra/GhidraDiagnostics.js +11 -8
  361. package/dist/ghidra/GhidraFunctionValues.js +26 -2
  362. package/dist/ghidra/GhidraInstallation.js +1 -1
  363. package/dist/ghidra/GhidraInventoryValues.js +23 -1
  364. package/dist/ghidra/GhidraLanguageCatalog.js +99 -0
  365. package/dist/ghidra/GhidraLauncher.js +80 -39
  366. package/dist/ghidra/GhidraLoadImageAttest.js +49 -2
  367. package/dist/ghidra/GhidraMipsProfile.js +79 -0
  368. package/dist/ghidra/GhidraProvider.js +57 -9
  369. package/dist/ghidra/GhidraProviderCapabilities.js +18 -8
  370. package/dist/ghidra/GhidraProviderClient.js +282 -21
  371. package/dist/ghidra/GhidraSessionValues.js +9 -2
  372. package/dist/hopper/HopperAnalysisProfile.js +2 -0
  373. package/dist/hopper/HopperClient.js +15 -6
  374. package/dist/hopper/HopperMachOImage.js +2 -0
  375. package/dist/hopper/HopperProvider.js +13 -2
  376. package/dist/ida/IdaOperationRunner.js +8 -2
  377. package/dist/ida/IdaProvider.js +7 -0
  378. package/dist/ida/IdaSessionClient.js +3 -1
  379. package/dist/ida/IdaWorkspace.js +4 -2
  380. package/dist/javascript/analysis/JavaScriptAnalysisTransfer.js +326 -0
  381. package/dist/javascript/analysis/JavaScriptAnalysisWorker.js +520 -0
  382. package/dist/javascript/analysis/JavaScriptAnalysisWorkerProtocol.js +63 -0
  383. package/dist/javascript/analysis/JavaScriptAnalysisWorkerSchemas.js +521 -0
  384. package/dist/javascript/analysis/JavaScriptAnalysisWorkerServer.js +116 -0
  385. package/dist/javascript/recovery/RecoveryFiles.js +18 -7
  386. package/dist/javascript/recovery/WakaruCommand.js +22 -9
  387. package/dist/javascript/recovery/WakaruExecution.js +11 -7
  388. package/dist/javascript/recovery/WakaruProvider.js +139 -16
  389. package/dist/javascript/recovery/WakaruPublication.js +14 -4
  390. package/dist/javascript/recovery/WakaruRelease.js +10 -3
  391. package/dist/javascript/recovery/WakaruReport.js +12 -7
  392. package/dist/javascript/recovery/WakaruVersion.js +24 -0
  393. package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -3
  394. package/dist/javascript/sourceMaps/SourceMapDecoder.js +63 -7
  395. package/dist/javascript/sourceMaps/SourceMapFormat.js +15 -4
  396. package/dist/jeb/JebMcpConnection.js +179 -0
  397. package/dist/jeb/JebMcpEndpoint.js +40 -0
  398. package/dist/jeb/JebProvider.js +299 -0
  399. package/dist/mcpDoctor.js +15 -6
  400. package/dist/native/AppleDispatchCoverage.js +25 -12
  401. package/dist/native/AppleDispatchMetadata.js +14 -7
  402. package/dist/native/AppleMachoFixups.js +71 -15
  403. package/dist/native/AppleMachoSelection.js +23 -3
  404. package/dist/native/NativeMacOSProvider.js +91 -16
  405. package/dist/native/NativeMachoInspection.js +11 -7
  406. package/dist/native/NativeUiHelperRuntime.js +6 -1
  407. package/dist/native/NativeUiObservation.js +4 -3
  408. package/dist/native/pe/PeResourceLayout.js +120 -0
  409. package/dist/native/pe/PeResourceParser.js +286 -0
  410. package/dist/native/pe/PeResourcesProvider.js +63 -0
  411. package/dist/process/BoundedFileBytes.js +30 -7
  412. package/dist/process/DarwinProcessRunTokenReader.js +8 -3
  413. package/dist/process/OwnedCommand.js +4 -3
  414. package/dist/process/ProcessOwnership.js +104 -112
  415. package/dist/process/ProcessOwnershipObservation.js +96 -39
  416. package/dist/process/ProcessOwnershipProcessTree.js +4 -4
  417. package/dist/process/ProcessRunTokenObservations.js +48 -0
  418. package/dist/process/ProviderDiagnosticRedaction.js +17 -0
  419. package/dist/process/ProviderProcess.js +4 -3
  420. package/dist/process/capture/FilesystemSnapshot.js +28 -4
  421. package/dist/process/capture/ProcessCaptureLifecycle.js +350 -59
  422. package/dist/process/capture/ProcessCaptureProgress.js +62 -0
  423. package/dist/process/capture/ProcessHarness.js +194 -26
  424. package/dist/process/capture/ProcessNormalization.js +3 -1
  425. package/dist/process/capture/ProcessScenarioRuntimeValidation.js +5 -2
  426. package/dist/process/capture/TerminalRenderer.js +24 -7
  427. package/dist/reference/ReferenceSourceReader.js +22 -5
  428. package/dist/reference/ReferenceSourceReaderEntries.js +114 -51
  429. package/dist/reference/ReferenceSourceReaderErrors.js +12 -0
  430. package/dist/reference/ReferenceSourceReaderFile.js +50 -10
  431. package/dist/reference/ReferenceSourceReaderValidate.js +4 -4
  432. package/dist/server/EvidenceMcpServer.js +36 -1
  433. package/dist/server/admittedToolOperation.js +9 -0
  434. package/dist/server/contractToolHandler.js +21 -0
  435. package/dist/server/createServer.js +97 -25
  436. package/dist/server/registerAdbTools.js +36 -0
  437. package/dist/server/registerAnalysisViewTool.js +4 -9
  438. package/dist/server/registerAndroidTools.js +3 -12
  439. package/dist/server/registerApktoolTools.js +14 -0
  440. package/dist/server/registerApplicationTools/compareExportShapes.js +4 -6
  441. package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
  442. package/dist/server/registerApplicationTools/compareVersions.js +3 -2
  443. package/dist/server/registerApplicationTools/coverage.js +3 -2
  444. package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
  445. package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -2
  446. package/dist/server/registerApplicationTools/traceFeature.js +3 -2
  447. package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
  448. package/dist/server/registerArtifactComparisonTool.js +5 -2
  449. package/dist/server/registerBinaryDiagnosticsTools.js +16 -4
  450. package/dist/server/registerBrowserScenarioTool.js +10 -7
  451. package/dist/server/registerBrowserTools.js +12 -9
  452. package/dist/server/registerBundleComparisonTool.js +16 -2
  453. package/dist/server/registerCloseLifecycleTool.js +32 -3
  454. package/dist/server/registerElectronTools.js +28 -10
  455. package/dist/server/registerEvmTools.js +4 -9
  456. package/dist/server/registerFirmwareTools.js +3 -11
  457. package/dist/server/registerFunctionComparisonTool.js +5 -2
  458. package/dist/server/registerJavaScriptRecoveryTool.js +4 -9
  459. package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -6
  460. package/dist/server/registerJebTools.js +16 -0
  461. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +4 -6
  462. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -2
  463. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +3 -2
  464. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +3 -2
  465. package/dist/server/registerPeResourcesTool.js +9 -0
  466. package/dist/server/registerProcessComparisonTool.js +5 -2
  467. package/dist/server/registerRecordedCrashTools.js +4 -9
  468. package/dist/server/registerSessionRecordTools.js +2 -1
  469. package/dist/server/registerSessionTools.js +49 -18
  470. package/dist/server/registerWebModuleTool.js +4 -9
  471. package/dist/server/registerWebNetworkCaptureTool.js +4 -9
  472. package/dist/server/registerWebRuntimeTools.js +6 -5
  473. package/dist/server/registerWebScriptTool.js +6 -3
  474. package/dist/server/registerWebSourceLocationTool.js +4 -9
  475. package/dist/server/toolResult.js +21 -2
  476. package/dist/windows/WindowsPrivateRuntime.js +12 -5
  477. package/install.sh +7 -4
  478. package/licenses/nativeaot-parser-MIT.txt +28 -0
  479. package/native/windows/build/manifest.json +2 -2
  480. package/native/windows/build/rea-windows-x64.node +0 -0
  481. package/package.json +33 -5
  482. package/scripts/rea.mjs +16 -1
  483. package/skills/reverse-engineer-anything/SKILL.md +52 -51
  484. package/skills/reverse-engineer-anything/references/connection-and-recovery.md +127 -0
  485. package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -0
  486. package/skills/reverse-engineer-anything/references/javascript-applications.md +92 -13
  487. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +22 -1
@@ -2,10 +2,12 @@ import { getNavigationContext, inspectAddressContext, } from "../application/Ana
2
2
  import { readAnalysisSnapshot } from "../application/binary/AnalysisSnapshotFiles.js";
3
3
  import { createProcessCaptureEvidence } from "../application/process/ProcessEvidence.js";
4
4
  import { captureProcessScenario } from "../process/capture/ProcessHarness.js";
5
+ import { ProcessCaptureResourceScope } from "../process/capture/ProcessCaptureLifecycle.js";
6
+ import { ProcessCaptureError } from "../process/capture/ProcessCaptureError.js";
5
7
  import { toolContract } from "../contracts/toolContracts.js";
6
8
  import { UnknownRegistryError } from "../domain/unknownRegistryError.js";
7
9
  import {} from "../domain/analysisErrorBase.js";
8
- import { ok } from "../domain/result.js";
10
+ import { err, ok } from "../domain/result.js";
9
11
  import { mcpProgressReporter } from "./mcpProgress.js";
10
12
  import { registerArtifactComparisonTool } from "./registerArtifactComparisonTool.js";
11
13
  import { registerBundleComparisonTool } from "./registerBundleComparisonTool.js";
@@ -18,6 +20,8 @@ import { registerSessionStatusTool } from "./registerSessionStatusTool.js";
18
20
  import { sessionAvailabilityPolicy } from "./sessionAvailabilityPolicy.js";
19
21
  import { logToolExecution } from "./toolLogging.js";
20
22
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
23
+ import { withAdmittedAnalysis } from "./analysisAdmission.js";
24
+ import { runAdmittedToolOperation } from "./admittedToolOperation.js";
21
25
  const recordProcessResidualUnknowns = (session, evidence, residuals) => {
22
26
  for (const residual of residuals) {
23
27
  const unknown = session.recordUnknown({
@@ -44,23 +48,11 @@ const recordProcessResidualUnknowns = (session, evidence, residuals) => {
44
48
  }
45
49
  return ok(null);
46
50
  };
47
- const registerProcessTools = ({ server, session, logger, captureContract, }) => {
48
- server.registerTool(captureContract.name, toolRegistrationOptions(captureContract), async (input, context) => {
51
+ const registerProcessTools = ({ server, session, logger, captureContract, resourceScope, }) => {
52
+ const admission = withAdmittedAnalysis({ kind: "session", session });
53
+ server.registerTool(captureContract.name, toolRegistrationOptions(captureContract), async (input, context) => runAdmittedToolOperation(server, admission, captureContract.name, context.mcpReq.signal, async () => {
49
54
  const progress = mcpProgressReporter(context);
50
- await progress.report({
51
- phase: captureContract.name,
52
- completed: 0,
53
- total: 1,
54
- message: "started",
55
- });
56
- const captured = await logToolExecution(logger, captureContract.name, () => captureProcessScenario(input, context.mcpReq.signal));
57
- await progress.report({
58
- phase: captureContract.name,
59
- completed: 1,
60
- total: 1,
61
- message: captured.ok ? "completed" : "failed",
62
- terminal: true,
63
- });
55
+ const captured = await logToolExecution(logger, captureContract.name, () => captureProcessScenario(input, context.mcpReq.signal, process.platform, process.env, undefined, undefined, progress, resourceScope));
64
56
  if (!captured.ok)
65
57
  return server.delivery.toCallToolResult(captured, captureContract);
66
58
  const evidence = createProcessCaptureEvidence(input, captured.value);
@@ -71,7 +63,7 @@ const registerProcessTools = ({ server, session, logger, captureContract, }) =>
71
63
  if (!unknowns.ok)
72
64
  return server.delivery.toCallToolResult(unknowns, captureContract);
73
65
  return server.delivery.toEvidenceToolResult(evidence, captureContract, recorded);
74
- });
66
+ }));
75
67
  };
76
68
  const registerLifecycleTools = (registration) => {
77
69
  const { server, session, statusContract, startedAt, availabilityPolicy, androidAnalysisAvailability, } = registration;
@@ -145,6 +137,7 @@ export const registerSessionTools = (server, session, logger, options = {}) => {
145
137
  const compareFunctionsContract = toolContract("compare_functions");
146
138
  const compareBundlesContract = toolContract("compare_bundles");
147
139
  const snapshotContract = toolContract("get_evidence_bundle");
140
+ const processResources = new ProcessCaptureResourceScope();
148
141
  registerLifecycleTools({
149
142
  server,
150
143
  session,
@@ -155,6 +148,22 @@ export const registerSessionTools = (server, session, logger, options = {}) => {
155
148
  startedAt: options.startedAt ?? new Date().toISOString(),
156
149
  availabilityPolicy: sessionAvailabilityPolicy(options.availabilityPolicy, {}),
157
150
  androidAnalysisAvailability: options.androidAnalysisAvailability ?? missingAndroidAvailability,
151
+ closeProcessResources: async () => {
152
+ try {
153
+ await processResources.retryCleanup();
154
+ return ok(null);
155
+ }
156
+ catch (cause) {
157
+ return err(new ProcessCaptureError("process capture cleanup remains incomplete", {
158
+ cause,
159
+ reason: "cleanup_incomplete",
160
+ cleanupResources: ["process_capture_resources"],
161
+ executionFailure: cause instanceof Error
162
+ ? cause.message || cause.name
163
+ : String(cause),
164
+ }));
165
+ }
166
+ },
158
167
  });
159
168
  registerEvidenceTools({
160
169
  server,
@@ -168,7 +177,29 @@ export const registerSessionTools = (server, session, logger, options = {}) => {
168
177
  session,
169
178
  logger,
170
179
  captureContract,
180
+ resourceScope: processResources,
171
181
  });
182
+ const closeServer = server.close.bind(server);
183
+ server.close = async () => {
184
+ const results = await Promise.allSettled([
185
+ closeServer(),
186
+ processResources.close(),
187
+ ]);
188
+ const failures = results.flatMap((result) => result.status === "rejected" ? [result.reason] : []);
189
+ if (failures.length > 0)
190
+ throw new AggregateError(failures, "REA session cleanup failed");
191
+ };
192
+ const previousOnclose = server.server.onclose;
193
+ server.server.onclose = () => {
194
+ try {
195
+ previousOnclose?.();
196
+ }
197
+ finally {
198
+ void processResources.close().catch((cause) => {
199
+ logger.error({ error: cause instanceof Error ? cause.message : String(cause) }, "Process capture cleanup failed during server shutdown");
200
+ });
201
+ }
202
+ };
172
203
  registerProcessComparisonTool(server, session, compareContract);
173
204
  registerArtifactComparisonTool(server, session, compareArtifactsContract);
174
205
  registerFunctionComparisonTool(server, session, compareFunctionsContract);
@@ -1,14 +1,9 @@
1
1
  import { toolContract } from "../contracts/toolContracts.js";
2
- import { logToolExecution } from "./toolLogging.js";
2
+ import { createEvidenceToolHandler } from "./contractToolHandler.js";
3
3
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
4
4
  /** Bind the module relationship workflow to its exact canonical contract. */
5
- export const registerWebModuleTool = (server, service, logger, recordEvidence) => {
5
+ export const registerWebModuleTool = (server, service, logger, recordEvidence, withAdmittedAnalysis) => {
6
6
  const contract = toolContract("trace_web_module_imports");
7
- server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
8
- const result = await logToolExecution(logger, contract.name, () => service.trace(input, { signal: context.mcpReq.signal }));
9
- if (!result.ok)
10
- return server.delivery.toCallToolResult(result, contract);
11
- const recorded = recordEvidence?.(result.value);
12
- return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
13
- });
7
+ const handler = createEvidenceToolHandler(server, (input, options) => service.trace(input, options), logger, recordEvidence, withAdmittedAnalysis);
8
+ server.registerTool(contract.name, toolRegistrationOptions(contract), handler(contract));
14
9
  };
@@ -1,8 +1,8 @@
1
1
  import { toolContract } from "../contracts/toolContracts.js";
2
- import { logToolExecution } from "./toolLogging.js";
2
+ import { createEvidenceToolHandler } from "./contractToolHandler.js";
3
3
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
4
4
  /** Bind historical inspection to its named contract and caller-owned Evidence writer. */
5
- export const registerWebNetworkCaptureTool = (server, service, logger, recordEvidence) => {
5
+ export const registerWebNetworkCaptureTool = (server, service, logger, recordEvidence, withAdmittedAnalysis) => {
6
6
  const contract = toolContract("inspect_web_network_capture");
7
7
  const registration = toolRegistrationOptions(contract);
8
8
  // Keep the exact advertised contract; the shared service validates raw input
@@ -15,11 +15,6 @@ export const registerWebNetworkCaptureTool = (server, service, logger, recordEvi
15
15
  validate: (value) => ({ value }),
16
16
  },
17
17
  };
18
- server.registerTool(contract.name, { ...registration, inputSchema }, async (input, context) => {
19
- const result = await logToolExecution(logger, contract.name, () => service.inspect(input, { signal: context.mcpReq.signal }));
20
- if (!result.ok)
21
- return server.delivery.toCallToolResult(result, contract);
22
- const recorded = recordEvidence?.(result.value);
23
- return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
24
- });
18
+ const handler = createEvidenceToolHandler(server, (input, options) => service.inspect(input, options), logger, recordEvidence, withAdmittedAnalysis);
19
+ server.registerTool(contract.name, { ...registration, inputSchema }, handler(contract));
25
20
  };
@@ -2,11 +2,12 @@ import { toolContract } from "../contracts/toolContracts.js";
2
2
  import { mcpProgressReporter } from "./mcpProgress.js";
3
3
  import { logToolExecution } from "./toolLogging.js";
4
4
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
5
+ import { runAdmittedToolOperation } from "./admittedToolOperation.js";
5
6
  /** Bind distinct runtime operations to named contracts and the session's Evidence owner. */
6
- export const registerWebRuntimeTools = (server, service, logger, recordEvidence) => {
7
+ export const registerWebRuntimeTools = (server, service, logger, recordEvidence, withAdmittedAnalysis) => {
7
8
  const execution = toolContract("observe_web_execution");
8
9
  const listeners = toolContract("inspect_web_event_listeners");
9
- server.registerTool(execution.name, toolRegistrationOptions(execution), async (input, context) => {
10
+ server.registerTool(execution.name, toolRegistrationOptions(execution), async (input, context) => runAdmittedToolOperation(server, withAdmittedAnalysis, execution.name, context.mcpReq.signal, async () => {
10
11
  const result = await logToolExecution(logger, execution.name, () => service.observe(input, {
11
12
  signal: context.mcpReq.signal,
12
13
  progress: mcpProgressReporter(context),
@@ -15,12 +16,12 @@ export const registerWebRuntimeTools = (server, service, logger, recordEvidence)
15
16
  return server.delivery.toCallToolResult(result, execution);
16
17
  const recorded = recordEvidence?.(result.value);
17
18
  return server.delivery.toEvidenceToolResult(result.value, execution, recorded);
18
- });
19
- server.registerTool(listeners.name, toolRegistrationOptions(listeners), async (input, context) => {
19
+ }));
20
+ server.registerTool(listeners.name, toolRegistrationOptions(listeners), async (input, context) => runAdmittedToolOperation(server, withAdmittedAnalysis, listeners.name, context.mcpReq.signal, async () => {
20
21
  const result = await logToolExecution(logger, listeners.name, () => service.inspect(input, { signal: context.mcpReq.signal }));
21
22
  if (!result.ok)
22
23
  return server.delivery.toCallToolResult(result, listeners);
23
24
  const recorded = recordEvidence?.(result.value);
24
25
  return server.delivery.toEvidenceToolResult(result.value, listeners, recorded);
25
- });
26
+ }));
26
27
  };
@@ -2,14 +2,17 @@ import { exportWebScriptsValidated } from "../application/WebScriptExportService
2
2
  import { toolContract } from "../contracts/toolContracts.js";
3
3
  import { logToolExecution } from "./toolLogging.js";
4
4
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
5
+ import { runAdmittedToolOperation } from "./admittedToolOperation.js";
5
6
  /** Register local script export without requiring a live browser provider. */
6
7
  export const registerWebScriptTool = (server, options) => {
7
8
  const contract = toolContract("export_web_scripts");
8
- server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
9
- const result = await logToolExecution(options.logger, contract.name, () => exportWebScriptsValidated(input, { signal: context.mcpReq.signal }));
9
+ server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => runAdmittedToolOperation(server, options.withAdmittedAnalysis, contract.name, context.mcpReq.signal, async () => {
10
+ const result = await logToolExecution(options.logger, contract.name, () => exportWebScriptsValidated(input, options.artifactResources, {
11
+ signal: context.mcpReq.signal,
12
+ }));
10
13
  if (!result.ok)
11
14
  return server.delivery.toCallToolResult(result, contract);
12
15
  const recorded = options.recordEvidence?.(result.value);
13
16
  return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
14
- });
17
+ }));
15
18
  };
@@ -1,14 +1,9 @@
1
1
  import { toolContract } from "../contracts/toolContracts.js";
2
- import { logToolExecution } from "./toolLogging.js";
2
+ import { createEvidenceToolHandler } from "./contractToolHandler.js";
3
3
  import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
4
4
  /** Bind source point tracing to its exact named contract and session Evidence owner. */
5
- export const registerWebSourceLocationTool = (server, service, logger, recordEvidence) => {
5
+ export const registerWebSourceLocationTool = (server, service, logger, recordEvidence, withAdmittedAnalysis) => {
6
6
  const contract = toolContract("trace_web_source_location");
7
- server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
8
- const result = await logToolExecution(logger, contract.name, () => service.trace(input, { signal: context.mcpReq.signal }));
9
- if (!result.ok)
10
- return server.delivery.toCallToolResult(result, contract);
11
- const recorded = recordEvidence?.(result.value);
12
- return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
13
- });
7
+ const handler = createEvidenceToolHandler(server, (input, options) => service.trace(input, options), logger, recordEvidence, withAdmittedAnalysis);
8
+ server.registerTool(contract.name, toolRegistrationOptions(contract), handler(contract));
14
9
  };
@@ -1,5 +1,5 @@
1
1
  import { STDIO_DEFAULT_MAX_BUFFER_SIZE } from "@modelcontextprotocol/server";
2
- import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
2
+ import { projectAnalysisError, } from "../domain/analysisErrorProjection.js";
3
3
  import {} from "../domain/analysisErrorBase.js";
4
4
  import { AnalysisResourceConstraintError } from "../domain/analysisErrorCore.js";
5
5
  import { encodeToolResult, MCP_RESULT_STRING_LIMIT, } from "./toolResultEncoding.js";
@@ -36,7 +36,26 @@ export class ToolResultDelivery {
36
36
  }
37
37
  /** Project an error without allocating oversized repeated MCP text. */
38
38
  toErrorToolResult(error) {
39
- const structuredContent = { error: projectAnalysisError(error) };
39
+ return this.projectedErrorResult(projectAnalysisError(error));
40
+ }
41
+ /** Deliver the original failure with the producer-acknowledged partial Evidence reference. */
42
+ toRecordedPartialErrorToolResult(error, evidenceId, recorded) {
43
+ if (!recorded.ok)
44
+ return this.toErrorToolResult(error);
45
+ const projected = projectAnalysisError(error);
46
+ return this.projectedErrorResult({
47
+ ...projected,
48
+ details: {
49
+ ...projected.details,
50
+ partial_observation: {
51
+ kind: "retained-evidence",
52
+ evidence_id: evidenceId,
53
+ },
54
+ },
55
+ });
56
+ }
57
+ projectedErrorResult(projected) {
58
+ const structuredContent = { error: projected };
40
59
  // Errors reach the wire as text only; the structured copy is a private
41
60
  // carrier the transport removes after its own budget check.
42
61
  const encoded = encodeToolResult(structuredContent, this.resultBudgetBytes, "text");
@@ -34,7 +34,7 @@ export class WindowsPrivateRuntime {
34
34
  const authority = requireWindowsNativeAuthority();
35
35
  const observation = runtimeSchema.parse(authority.call("runtime_create", [parent, prefix]));
36
36
  const runtime = new WindowsPrivateRuntime(observation, authority);
37
- runtimes.set(observation.path.toLowerCase(), runtime);
37
+ runtimes.set(windowsRuntimeIdentityKey(observation), runtime);
38
38
  return runtime;
39
39
  }
40
40
  /** Open a private child directory through retained, verified parent handles. */
@@ -119,13 +119,20 @@ export class WindowsPrivateRuntime {
119
119
  await this.#pending?.catch(() => undefined);
120
120
  this.authority.call("runtime_close", [this.observation.handle]);
121
121
  this.#closed = true;
122
- runtimes.delete(this.observation.path.toLowerCase());
122
+ runtimes.delete(windowsRuntimeIdentityKey(this.observation));
123
123
  }
124
124
  }
125
- /** Select an already-owned runtime; an arbitrary pathname cannot grant authority. */
125
+ /** File id returned by the OS. Path spelling is not part of the lease key. */
126
+ const windowsRuntimeIdentityKey = (identity) => `${identity.volumeSerial}:${identity.fileId}`;
127
+ /**
128
+ * Select an already-owned runtime. Only the observed `path` or `finalPath`
129
+ * matches, character for character. A case variant fails closed.
130
+ */
126
131
  export const windowsPrivateRuntime = (rootPath) => {
127
- const runtime = runtimes.get(rootPath.toLowerCase());
128
- if (runtime === undefined)
132
+ const matches = [...runtimes.values()].filter((runtime) => runtime.observation.finalPath === rootPath ||
133
+ runtime.observation.path === rootPath);
134
+ const runtime = matches[0];
135
+ if (matches.length !== 1 || runtime === undefined)
129
136
  throw new Error(`No native private runtime owns ${rootPath}`);
130
137
  return runtime;
131
138
  };
package/install.sh CHANGED
@@ -85,19 +85,22 @@ if [[ "$version" =~ \+ ]]; then
85
85
  fail "npm cannot install an exact version with build metadata. Pass a version without build metadata, then retry."
86
86
  fi
87
87
 
88
- prefix_args=()
88
+ install_args=(install --global)
89
89
  if [[ "$platform" == "Linux" ]]; then
90
- prefix_args=(--prefix "$HOME/.local")
90
+ install_args+=(--prefix "$HOME/.local")
91
91
  install_bin="$HOME/.local/bin/rea"
92
92
  else
93
93
  npm_prefix="$(npm prefix --global)" || fail "the npm global prefix could not be read. Repair the npm configuration, then retry."
94
94
  install_bin="$npm_prefix/bin/rea"
95
95
  fi
96
+ install_args+=("$PACKAGE@$version")
96
97
 
97
98
  printf 'REA install plan\n'
98
99
  printf ' Version: %s\n' "$version"
99
100
  printf ' Runtime: Node.js %s\n' "$node_version"
100
- printf ' Command: npm install --global %s@%s\n' "$PACKAGE" "$version"
101
+ printf ' Command:'
102
+ printf ' %q' npm "${install_args[@]}"
103
+ printf '\n'
101
104
  printf ' Binary: %s\n' "$install_bin"
102
105
  printf ' Setup: %s\n' "$([[ "$start_setup" == true ]] && printf 'start when a terminal is available' || printf 'skipped')"
103
106
 
@@ -107,7 +110,7 @@ if [[ "$dry_run" == true ]]; then
107
110
  fi
108
111
 
109
112
  printf 'Installing %s@%s...\n' "$PACKAGE" "$version"
110
- npm install --global ${prefix_args[@]+"${prefix_args[@]}"} "$PACKAGE@$version" || fail "npm could not install REA. Check registry access and npm permissions, then retry."
113
+ npm "${install_args[@]}" || fail "npm could not install REA. Check registry access and npm permissions, then retry."
111
114
  [[ -x "$install_bin" ]] || fail "npm completed without installing the rea command. Check the npm global bin directory and PATH, then retry."
112
115
  installed_version="$("$install_bin" --version 2>/dev/null | tr -d '[:space:]')" || fail "the installed REA version could not be read. Reinstall the requested version, then retry."
113
116
  [[ "$installed_version" == "$version" ]] || fail "installed version $installed_version does not match $version. Reinstall the requested version, then retry."
@@ -0,0 +1,28 @@
1
+ The MIT License (MIT)
2
+ =====================
3
+
4
+ Copyright © 2023-2025 Washi
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the “Software”), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
23
+
24
+ The read-only NativeAOT parser adapts format and hydration semantics from
25
+ Washi1337/ghidra-nativeaot commit
26
+ effeb734fc570c32650f88b159608979dc7b423e (MIT). MethodTable field layout was
27
+ cross-checked against .NET runtime src/coreclr/nativeaot/Runtime/inc/MethodTable.h
28
+ at dotnet/runtime commit a3b2d40328be0be3f8dd43f0e5cc925b8827b044 (MIT).
@@ -1,9 +1,9 @@
1
1
  {
2
- "packageVersion": "6.3.0",
2
+ "packageVersion": "6.4.0",
3
3
  "platform": "win32",
4
4
  "architecture": "x64",
5
5
  "abiVersion": 1,
6
6
  "nodeApiVersion": 8,
7
7
  "artifact": "rea-windows-x64.node",
8
- "artifactSha256": "fedfd4ce8b3e15784d1a6ef7e9ba7eb9052e8335a1c75b6d69cd7e94f29ab1f8"
8
+ "artifactSha256": "c4fd9f377e567bcf15ba3fec3e0b0ed965d82b765a2adcdac49e46f14524b6d5"
9
9
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "rea-agents",
3
3
  "mcpName": "io.github.morluto/rea",
4
- "version": "6.3.0",
4
+ "version": "6.4.0",
5
5
  "description": "Reverse engineer anything from your terminal or agent with one CLI and MCP server.",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -30,6 +30,9 @@
30
30
  "access": "public"
31
31
  },
32
32
  "type": "module",
33
+ "imports": {
34
+ "#javascript-analysis-worker": "./dist/composition/javascriptAnalysisWorkerProcess.js"
35
+ },
33
36
  "bin": {
34
37
  "rea": "scripts/rea.mjs",
35
38
  "rea-agents": "scripts/rea.mjs"
@@ -50,6 +53,8 @@
50
53
  "bridge/ghidra/ReaGhidraBridge.java",
51
54
  "bridge/ghidra/ReaGhidraExtensions.java",
52
55
  "bridge/ghidra/ReaGhidraPrepareCom.java",
56
+ "bridge/ghidra/ReaGhidraApplySeeds.java",
57
+ "bridge/ghidra/ReaGhidraNoReturnFix.java",
53
58
  "bridge/android/ReaJadxBridge.java",
54
59
  "bridge/mitmproxy/capture.py",
55
60
  "scripts/rea.mjs",
@@ -76,9 +81,11 @@
76
81
  "bridge/pwndbg/launch_impl.py",
77
82
  "bridge/pwndbg/core_context.py",
78
83
  "third_party/pwndbg/README.md",
79
- "third_party/pwndbg/LICENSE.md"
84
+ "third_party/pwndbg/LICENSE.md",
85
+ "licenses/nativeaot-parser-MIT.txt"
80
86
  ],
81
87
  "scripts": {
88
+ "release:notes": "node scripts/release-notes.mjs",
82
89
  "deps:check": "node scripts/check-dependency-install.mjs",
83
90
  "metadata:generate": "node scripts/run-exclusive.mjs artifacts node scripts/generate-package-metadata.mjs",
84
91
  "metadata:check": "node scripts/generate-package-metadata.mjs --check",
@@ -100,6 +107,8 @@
100
107
  "precheck:ci": "npm run deps:check",
101
108
  "check:ci": "node scripts/run-exclusive.mjs artifacts turbo run typecheck lint format:check knip metadata:check jscpd scan:todos && npm run verify:architecture-guards",
102
109
  "build:cached": "node scripts/check-dependency-install.mjs && node scripts/run-exclusive.mjs artifacts turbo run artifacts:skills",
110
+ "build:termux": "node scripts/run-exclusive.mjs artifacts npm run build:termux:run",
111
+ "build:termux:run": "npm run compile:termux && npm run artifacts:skills",
103
112
  "format": "oxfmt .",
104
113
  "format:check": "oxfmt --check .",
105
114
  "lint": "oxlint && npm run verify:module-boundaries",
@@ -146,7 +155,11 @@
146
155
  "verify:macos-bundle": "npm run build:cached && node scripts/verify/apple/macos-bundle.mjs",
147
156
  "verify:legacy-simulator": "npm run build:cached && node scripts/verify/apple/legacy-simulator.mjs",
148
157
  "verify:architecture-guards": "node scripts/verify/architecture-guards.mjs",
158
+ "verify:apktool": "npm run build:cached && node scripts/verify-apktool.mjs",
159
+ "verify:adb": "npm run build:cached && node scripts/verify-adb.mjs",
149
160
  "verify:ghidra": "npm run build:cached && node scripts/verify-real-ghidra.mjs",
161
+ "verify:ghidra:seeds": "npm run build:cached && node scripts/verify/ghidra/seeds.mjs",
162
+ "verify:ghidra:mips": "npm run build:cached && node scripts/verify-real-ghidra-mips.mjs",
150
163
  "verify:ghidra:swift": "npm run build:cached && node scripts/verify-real-ghidra-swift.mjs",
151
164
  "verify:ida": "npm run build:cached && node scripts/verify-real-ida.mjs",
152
165
  "verify:ghidra:switch": "npm run build:cached && node scripts/verify-real-ghidra-switch.mjs",
@@ -169,6 +182,7 @@
169
182
  "verify:firmware": "npm run build:cached && node scripts/verify/firmware/analysis.mjs",
170
183
  "fixtures:firmware": "node scripts/fixtures/firmware/generate.mjs",
171
184
  "verify:android": "npm run build:cached && node scripts/verify/android/analysis.mjs",
185
+ "verify:jeb": "npm run build:cached && node scripts/verify-jeb.mjs",
172
186
  "fixtures:android": "node scripts/fixtures/android/fetch.mjs",
173
187
  "verify:agent": "npm run build:cached && node scripts/verify-agent-experience.mjs",
174
188
  "verify:hopper:linux": "npm run verify:fixtures && npm run build:cached && node scripts/verify-real-hopper-linux.mjs",
@@ -179,6 +193,17 @@
179
193
  "verify:readiness": "npm run build:cached && npm run verify:fixtures && node scripts/verify-reconstruction-readiness.mjs",
180
194
  "verify:package": "npm run build:cached && node scripts/verify-package.mjs",
181
195
  "verify:package:windows": "npm run build:cached && node scripts/verify-windows-package.mjs",
196
+ "verify:qwen-client": "npm run build:cached && node scripts/verify-qwen-client.mjs",
197
+ "verify:gemini-client": "npm run build:cached && node scripts/verify-gemini-client.mjs",
198
+ "verify:opencode-client": "npm run build:cached && node scripts/verify-opencode-client.mjs",
199
+ "verify:grok-client": "npm run build:cached && node scripts/verify-grok-client.mjs",
200
+ "verify:commandcode-client": "npm run build:cached && node scripts/verify-commandcode-client.mjs",
201
+ "verify:omp-client": "npm run build:cached && node scripts/verify-omp-client.mjs",
202
+ "verify:copilot-client": "npm run build:cached && node scripts/verify-copilot-client.mjs",
203
+ "verify:claude-client": "npm run build:cached && node scripts/verify-claude-client.mjs",
204
+ "verify:pi-client": "npm run build:cached && node scripts/verify-native-agent-client.mjs pi",
205
+ "verify:hermes-client": "npm run build:cached && node scripts/verify-native-agent-client.mjs hermes",
206
+ "verify:deepseek-client": "npm run build:cached && node scripts/verify-deepseek-client.mjs",
182
207
  "probe:windows-capabilities": "npm run build:cached && node scripts/windows-capabilities.mjs",
183
208
  "verify:published": "node scripts/verify-published-package.mjs",
184
209
  "config:print": "node scripts/print-mcp-config.mjs",
@@ -220,6 +245,7 @@
220
245
  "verify:recorded:crash": "npm run build:cached && node scripts/verify-recorded-crash.mjs",
221
246
  "mcp-catalog:check:built": "node scripts/generate-mcp-tool-catalog.mjs --check",
222
247
  "compile": "node scripts/clean-build-output.mjs && tsc -p tsconfig.build.json",
248
+ "compile:termux": "node scripts/clean-build-output.mjs && node --max-old-space-size=3072 node_modules/typescript-termux/lib/tsc.js -p tsconfig.build.json",
223
249
  "artifacts:mcp-catalog": "node scripts/generate-mcp-tool-catalog.mjs",
224
250
  "artifacts:skills": "node scripts/generate-skill-metadata.mjs",
225
251
  "artifacts:product-catalog": "node scripts/generate-product-catalog.mjs",
@@ -245,6 +271,7 @@
245
271
  "@lydell/node-pty": "1.1.0",
246
272
  "@modelcontextprotocol/client": "2.3.1",
247
273
  "@modelcontextprotocol/server": "2.3.1",
274
+ "@xmldom/xmldom": "0.9.12",
248
275
  "@xterm/addon-serialize": "0.14.0",
249
276
  "@xterm/headless": "6.0.0",
250
277
  "@zip.js/zip.js": "2.15.0",
@@ -269,7 +296,8 @@
269
296
  "write-file-atomic": "7.0.0",
270
297
  "ws": "8.21.0",
271
298
  "zod": "4.4.3",
272
- "evmole": "0.9.3"
299
+ "evmole": "0.9.3",
300
+ "yaml": "2.9.0"
273
301
  },
274
302
  "overrides": {
275
303
  "vitepress": {
@@ -292,8 +320,8 @@
292
320
  "oxlint": "1.87.0",
293
321
  "turbo": "2.11.7",
294
322
  "typescript": "7.0.2",
323
+ "typescript-termux": "npm:typescript@5.9.3",
295
324
  "vitepress": "1.6.4",
296
- "vitest": "5.0.3",
297
- "yaml": "2.9.0"
325
+ "vitest": "5.0.3"
298
326
  }
299
327
  }
package/scripts/rea.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { access } from "node:fs/promises";
4
- import { dirname, resolve } from "node:path";
4
+ import { dirname, join, resolve } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
6
6
 
7
7
  // Route production MCP before importing Incur. Incur owns registration helpers
@@ -15,6 +15,21 @@ const isMcpMode =
15
15
  args.length === 1 && (args[0] === "--mcp" || args[0] === "mcp");
16
16
  const isMcpDoctorMode = args[0] === "mcp" && args[1] === "doctor";
17
17
  const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
18
+
19
+ // Playwright's registry assumes one of its three desktop host platforms when
20
+ // it chooses the browser cache directory. Termux reports `android`, although
21
+ // its Node runtime and filesystem are POSIX-compatible. Keep the cache path
22
+ // explicit so REA can start on Termux. Browser launch still requires a
23
+ // caller-supplied Android-compatible Chromium executable.
24
+ if (
25
+ process.platform === "android" &&
26
+ process.env.PLAYWRIGHT_BROWSERS_PATH === undefined
27
+ ) {
28
+ const cacheRoot =
29
+ process.env.XDG_CACHE_HOME ?? join(process.env.HOME ?? ".", ".cache");
30
+ process.env.PLAYWRIGHT_BROWSERS_PATH = join(cacheRoot, "ms-playwright");
31
+ }
32
+
18
33
  const runtimeFiles = isMcpMode
19
34
  ? ["dist/main.js"]
20
35
  : isMcpDoctorMode