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
@@ -1,4 +1,6 @@
1
1
  import { z } from "incur";
2
+ import { ArtifactReaderFailure } from "../artifacts/ArtifactReader.js";
3
+ import { ArtifactResourceScope } from "../artifacts/ArtifactResourceScope.js";
2
4
  import { importReferenceSource } from "../application/ReferenceSourceImport.js";
3
5
  import { projectReferenceSourceImportError } from "../application/ReferenceSourceImportTypes.js";
4
6
  import { parseConfig } from "../config/parseConfig.js";
@@ -54,10 +56,6 @@ export const registerUtilityCommands = (cli, logger, environment, analysis) => {
54
56
  .default(500)
55
57
  .describe("Maximum accessibility nodes per capture"),
56
58
  }),
57
- alias: {
58
- windowId: "window-id",
59
- maxNodes: "max-nodes",
60
- },
61
59
  run: ({ args, options }) => logCliCommand(logger, command, async () => {
62
60
  const parameters = {
63
61
  pid: options.pid,
@@ -129,9 +127,8 @@ const registerNativeCommands = (cli, logger, runProviderAnalysis) => {
129
127
  relativePath: z
130
128
  .string()
131
129
  .optional()
132
- .describe("Plist path relative to the app root (default: Contents/Info.plist)"),
130
+ .describe("Plist path relative to the app root, or an absolute path (default: the bundle's Info.plist)"),
133
131
  }),
134
- alias: { relativePath: "relative-path" },
135
132
  run: ({ args, options }) => logCliCommand(logger, "inspect-plist", () => runProviderAnalysis(args.path, "inspect_plist", options.relativePath === undefined
136
133
  ? {}
137
134
  : { path: options.relativePath }, logger)),
@@ -160,19 +157,70 @@ const registerReferenceSourceCommand = (cli, logger, environment) => {
160
157
  error: "Import failed",
161
158
  ...projectAnalysisError(config.error),
162
159
  };
163
- const imported = await importReferenceSource({
164
- root: args.root,
160
+ return runReferenceSourceImport(args.root, config.value.referenceSourcePolicy);
161
+ }, isReferenceSourceImportCliFailure),
162
+ });
163
+ };
164
+ const runReferenceSourceImport = async (root, policy) => {
165
+ const resources = new ArtifactResourceScope();
166
+ let outcome;
167
+ try {
168
+ outcome = {
169
+ kind: "result",
170
+ imported: await importReferenceSource({
171
+ root,
165
172
  caller: "rea-cli",
166
- policy: config.value.referenceSourcePolicy,
173
+ policy,
167
174
  importer: PRODUCT_IDENTITY.packageName,
168
175
  importerVersion: null,
169
- });
170
- return imported.ok
171
- ? imported.value
172
- : {
173
- error: "Import failed",
174
- ...projectReferenceSourceImportError(imported.error),
175
- };
176
- }, isReferenceSourceImportCliFailure),
177
- });
176
+ }, resources),
177
+ };
178
+ }
179
+ catch (cause) {
180
+ outcome = { kind: "thrown", cause };
181
+ }
182
+ let closeOutcome;
183
+ try {
184
+ await resources.close();
185
+ closeOutcome = { kind: "closed" };
186
+ }
187
+ catch (cause) {
188
+ closeOutcome = { kind: "failed", cause };
189
+ }
190
+ if (outcome.kind === "thrown") {
191
+ if (closeOutcome.kind === "failed")
192
+ throw new AggregateError([outcome.cause, closeOutcome.cause], "Reference source import and cleanup both failed", { cause: outcome.cause });
193
+ throw outcome.cause;
194
+ }
195
+ const imported = outcome.imported;
196
+ if (!imported.ok) {
197
+ const cleanup = closeOutcome.kind === "closed"
198
+ ? imported.error.cleanup
199
+ : mergeReferenceSourceCleanup(imported.error.cleanup, ArtifactReaderFailure.cleanupObservation(closeOutcome.cause, "reference source"));
200
+ return {
201
+ error: "Import failed",
202
+ ...projectReferenceSourceImportError({
203
+ ...imported.error,
204
+ ...(cleanup === undefined ? {} : { cleanup }),
205
+ }),
206
+ };
207
+ }
208
+ if (closeOutcome.kind === "failed")
209
+ return {
210
+ error: "Import failed",
211
+ ...projectReferenceSourceImportError({
212
+ tag: "reference-source-import",
213
+ code: "io",
214
+ message: "Reference source cleanup failed after import",
215
+ cleanup: ArtifactReaderFailure.cleanupObservation(closeOutcome.cause, "reference source"),
216
+ cause: closeOutcome.cause,
217
+ }),
218
+ };
219
+ return imported.value;
178
220
  };
221
+ const mergeReferenceSourceCleanup = (first, second) => first === undefined
222
+ ? second
223
+ : {
224
+ reason: `${first.reason}; ${second.reason}`,
225
+ resources: [...new Set([...first.resources, ...second.resources])],
226
+ };
@@ -1,8 +1,12 @@
1
1
  import { Cli, z } from "incur";
2
2
  import { exportWebScripts } from "../application/WebScriptExportService.js";
3
+ import { ArtifactReaderFailure } from "../artifacts/ArtifactReader.js";
4
+ import { ArtifactResourceScope } from "../artifacts/ArtifactResourceScope.js";
3
5
  import { CLI_COMMANDS } from "../cliCommandNames.js";
4
6
  import { logCliCommand } from "../cliLogging.js";
7
+ import { analysisErrorWithCleanupFailure } from "../domain/analysisErrorCleanup.js";
5
8
  import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
9
+ import { ProviderCleanupError } from "../domain/providerCleanupError.js";
6
10
  /** Register the local captured-script export CLI workflow. */
7
11
  export const registerWebScriptCommands = (cli, logger) => {
8
12
  cli.command(CLI_COMMANDS.exportWebScripts, {
@@ -16,10 +20,25 @@ export const registerWebScriptCommands = (cli, logger) => {
16
20
  .describe("Absolute absent directory for verified scripts and manifest"),
17
21
  }),
18
22
  run: ({ args }) => logCliCommand(logger, CLI_COMMANDS.exportWebScripts, async () => {
23
+ const resources = new ArtifactResourceScope();
19
24
  const result = await exportWebScripts({
20
25
  capture_path: args.capturePath,
21
26
  output_directory: args.outputDirectory,
22
- });
27
+ }, resources);
28
+ try {
29
+ await resources.close();
30
+ }
31
+ catch (cause) {
32
+ const cleanup = ArtifactReaderFailure.cleanupObservation(cause, "Web script export resources");
33
+ const failure = new ProviderCleanupError("web-script-export", cleanup.resources, { reason: cleanup.reason }, { cause, operation: "export_web_scripts" });
34
+ const error = result.ok
35
+ ? failure
36
+ : analysisErrorWithCleanupFailure(result.error, failure, "export_web_scripts");
37
+ return {
38
+ error: "Script export failed",
39
+ ...projectAnalysisError(error),
40
+ };
41
+ }
23
42
  return result.ok
24
43
  ? result.value
25
44
  : {
@@ -29,14 +29,26 @@ export const registerWebSourceLocationCommands = (cli, logger, environment) => {
29
29
  .min(0)
30
30
  .describe("Zero-based UTF-16 generated column"),
31
31
  }),
32
- run: ({ args }) => withCommandCancellation((signal) => logCliCommand(logger, CLI_COMMANDS.traceWebSourceLocation, async () => {
33
- const result = await service.trace({
34
- manifest_path: args.manifestPath,
35
- script_index: args.scriptIndex,
36
- source_map: { path: args.sourceMapPath, url: args.sourceMapUrl },
37
- generated_position: { line: args.line, column: args.column },
38
- }, { signal });
39
- return result.ok ? result.value : projectAnalysisError(result.error);
40
- })),
32
+ run: ({ args }) => withCommandCancellation(async (signal) => {
33
+ try {
34
+ return await logCliCommand(logger, CLI_COMMANDS.traceWebSourceLocation, async () => {
35
+ const result = await service.trace({
36
+ manifest_path: args.manifestPath,
37
+ script_index: args.scriptIndex,
38
+ source_map: {
39
+ path: args.sourceMapPath,
40
+ url: args.sourceMapUrl,
41
+ },
42
+ generated_position: { line: args.line, column: args.column },
43
+ }, { signal });
44
+ return result.ok
45
+ ? result.value
46
+ : projectAnalysisError(result.error);
47
+ });
48
+ }
49
+ finally {
50
+ await service.close();
51
+ }
52
+ }),
41
53
  });
42
54
  };
package/dist/cli.js CHANGED
@@ -14,6 +14,9 @@ import { registerArtifactCommands } from "./cli/artifactCommands.js";
14
14
  import { registerManagedCommands } from "./cli/managedCommands.js";
15
15
  import { registerFirmwareCommands } from "./cli/firmwareCommands.js";
16
16
  import { registerAndroidCommands } from "./cli/androidCommands.js";
17
+ import { registerApktoolCommands } from "./cli/apktoolCommands.js";
18
+ import { registerJebCommands } from "./cli/jebCommands.js";
19
+ import { registerAdbCommands } from "./cli/adbCommands.js";
17
20
  import { registerEvidenceCommands } from "./cliEvidenceCommands.js";
18
21
  import { registerProcessCommands } from "./cli/processCommands.js";
19
22
  import { registerBrowserCommands } from "./cli/browserCommands.js";
@@ -57,6 +60,9 @@ export const createCli = (selectedEnvironment = process.env, resultOutput) => {
57
60
  registerArtifactCommands(cli, logger, analysis.runProviderAnalysis);
58
61
  registerManagedCommands(cli, logger, analysis.runProviderAnalysis);
59
62
  registerAndroidCommands(cli, logger, environment);
63
+ registerApktoolCommands(cli, logger, environment);
64
+ registerJebCommands(cli, logger, environment);
65
+ registerAdbCommands(cli, logger, environment);
60
66
  registerFirmwareCommands(cli, logger, environment);
61
67
  registerBinaryDiagnosticsCommands(cli, logger, environment);
62
68
  registerAnalysisViewCommands(cli, logger);
@@ -1,7 +1,6 @@
1
1
  import { Cli } from "incur";
2
2
  import { z } from "zod";
3
3
  import { captureBrowserScenario } from "./application/BrowserScenarioCaptureService.js";
4
- import { createBrowserScenarioProvider } from "./composition/browserScenario.js";
5
4
  import { CLI_COMMANDS } from "./cliCommandNames.js";
6
5
  import { parseCliJsonInput, resolveCliJsonPaths } from "./cliJsonInput.js";
7
6
  import { logCliCommand } from "./cliLogging.js";
@@ -26,6 +25,8 @@ export const registerBrowserScenarioCommands = (cli, logger, environment) => {
26
25
  const scenario = browserScenarioSchema.safeParse(resolveCliJsonPaths(input.value, [["browser", "executable_path"]]));
27
26
  if (!scenario.success)
28
27
  return cliError(new AnalysisInputError(OPERATION, { cause: scenario.error }, projectInputIssues(scenario.error.issues, input.value)));
28
+ // Load Playwright only for this command, not during CLI startup.
29
+ const { createBrowserScenarioProvider } = await import("./composition/browserScenario.js");
29
30
  const result = await captureBrowserScenario(createBrowserScenarioProvider(environment), scenario.data);
30
31
  return result.ok ? result.value : cliError(result.error);
31
32
  }),
@@ -41,14 +41,46 @@ export const CLI_COMMANDS = Object.freeze({
41
41
  inspectManagedArtifact: "inspect-managed-artifact",
42
42
  inspectRecordedCrash: "inspect-recorded-crash",
43
43
  inspectBinaryLayout: "inspect-binary-layout",
44
+ inspectPeResources: "inspect-pe-resources",
44
45
  inspectAnalysisView: "inspect-analysis-view",
46
+ inspectEvidenceBundle: "inspect-evidence-bundle",
45
47
  inspectFirmwareRegions: "inspect-firmware-regions",
46
48
  extractFirmware: "extract-firmware",
47
49
  inspectAndroidPackage: "inspect-android-package",
50
+ inspectApktoolClient: "inspect-apktool-client",
51
+ decodeAndroidResources: "decode-android-resources",
52
+ inspectAdbClient: "inspect-adb-client",
53
+ listAdbDevices: "list-adb-devices",
54
+ inspectAdbDevice: "inspect-adb-device",
55
+ listAdbPackages: "list-adb-packages",
56
+ pullAdbPackage: "pull-adb-package",
57
+ readAdbLogcat: "read-adb-logcat",
58
+ inspectAdbPackage: "inspect-adb-package",
59
+ pullAdbFile: "pull-adb-file",
60
+ pushAdbFile: "push-adb-file",
61
+ captureAdbScreen: "capture-adb-screen",
62
+ listAdbProcesses: "list-adb-processes",
63
+ listAdbDirectory: "list-adb-directory",
64
+ listAdbFeatures: "list-adb-features",
65
+ listAdbServices: "list-adb-services",
66
+ inspectAdbDisplay: "inspect-adb-display",
67
+ inspectAdbWindow: "inspect-adb-window",
68
+ readAdbSetting: "read-adb-setting",
69
+ collectAdbBugreport: "collect-adb-bugreport",
70
+ resolveAdbPackages: "resolve-adb-packages",
71
+ installAdbPackage: "install-adb-package",
72
+ uninstallAdbPackage: "uninstall-adb-package",
73
+ startAdbApp: "start-adb-app",
74
+ startAdbActivity: "start-adb-activity",
75
+ stopAdbApp: "stop-adb-app",
48
76
  searchAndroidClasses: "search-android-classes",
49
77
  inspectAndroidClass: "inspect-android-class",
50
78
  inspectAndroidMethod: "inspect-android-method",
51
79
  traceAndroidReferences: "trace-android-references",
80
+ inspectJebClient: "inspect-jeb-client",
81
+ openJebProject: "open-jeb-project",
82
+ listJebUnits: "list-jeb-units",
83
+ decompileJebItem: "decompile-jeb-item",
52
84
  inspectManagedMembers: "inspect-managed-members",
53
85
  inspectManagedNativeBoundaries: "inspect-managed-native-boundaries",
54
86
  compareManagedMembers: "compare-managed-members",
@@ -1,5 +1,5 @@
1
1
  import { resolve } from "node:path";
2
- import { readCliJsonFile } from "./cliJsonFile.js";
2
+ import { readJsonInputFile } from "./application/JsonInputFile.js";
3
3
  import { NonRegularFileReadError } from "./filesystem/RegularFile.js";
4
4
  import { AnalysisAccessDeniedError, AnalysisInputError, } from "./domain/analysisErrorCore.js";
5
5
  import { projectAnalysisError } from "./domain/analysisErrorProjection.js";
@@ -10,7 +10,7 @@ export const parseCliJsonInput = async (value, operation) => {
10
10
  if (inline.ok)
11
11
  return { ok: true, value: inline.value };
12
12
  try {
13
- const parsed = await readCliJsonFile(value, operation);
13
+ const parsed = await readJsonInputFile(value, operation);
14
14
  return parsed.ok
15
15
  ? { ok: true, value: parsed.value }
16
16
  : {
@@ -1,4 +1,5 @@
1
1
  import { z } from "incur";
2
+ import { javaScriptAnalysisResourceControlsSchema } from "./domain/javascript/javascriptAnalysisResourceControls.js";
2
3
  /** Accept an agent-selected browser observation duration without an artificial ceiling. */
3
4
  export const observationDuration = (fallback, minimum = 0) => z
4
5
  .number()
@@ -53,6 +54,8 @@ export const electronPageInspectionOptions = z.object({
53
54
  .describe("Include JavaScript source text"),
54
55
  });
55
56
  export const javascriptApplicationOptions = z.object({
57
+ maxHeapMb: javaScriptAnalysisResourceControlsSchema.shape.max_heap_mb,
58
+ analysisTimeoutMs: javaScriptAnalysisResourceControlsSchema.shape.analysis_timeout_ms,
56
59
  artifactFormat: z
57
60
  .enum(["auto", "asar", "directory"])
58
61
  .default("auto")
@@ -0,0 +1,3 @@
1
+ import { AdbProvider } from "../adb/AdbProvider.js";
2
+ /** Construct one ADB provider bound to the caller-selected binary. */
3
+ export const createAdbDeviceAnalysisProvider = (environment = process.env) => new AdbProvider({ environment });
@@ -0,0 +1,3 @@
1
+ import { ApktoolProvider } from "../apktool/ApktoolProvider.js";
2
+ /** Construct one Apktool provider bound to the caller-selected launcher. */
3
+ export const createApktoolResourceAnalysisProvider = (environment = process.env) => new ApktoolProvider({ environment });
@@ -2,6 +2,10 @@ import { RecordedCrashService } from "../application/binaryDiagnostics/RecordedC
2
2
  import { PwntoolsRecordedCrashProvider } from "../native/pwntools/PwntoolsRecordedCrashProvider.js";
3
3
  import { BinaryLayoutService } from "../application/binaryDiagnostics/BinaryLayoutService.js";
4
4
  import { PwntoolsLayoutProvider } from "../native/pwntools/PwntoolsLayoutProvider.js";
5
+ import { PeResourcesService } from "../application/binaryDiagnostics/PeResourcesService.js";
6
+ import { PeResourcesProvider } from "../native/pe/PeResourcesProvider.js";
7
+ /** Portable PE inspection with no engine, installation or target acquisition. */
8
+ export const createPeResourcesService = () => new PeResourcesService(new PeResourcesProvider());
5
9
  /** Compose the offline adapter without import-time I/O or dependency acquisition. */
6
10
  export const createBinaryLayoutService = (environment = process.env) => new BinaryLayoutService(new PwntoolsLayoutProvider(environment));
7
11
  /** Compose recorded-core inspection without acquiring a debugger or toolchain. */
@@ -2,14 +2,19 @@ import { snapshotEnvironment } from "../process/snapshotEnvironment.js";
2
2
  import { parseConfig } from "../config/parseConfig.js";
3
3
  import { runDirectAnalysis as executeDirectAnalysis, runProviderAnalysis as executeProviderAnalysis, runManagedProviderExecution as executeManagedProvider, } from "../application/DirectAnalysis.js";
4
4
  import { runSessionStatus as executeSessionStatus } from "../application/DirectAnalysisStatus.js";
5
- import { createBinarySession, createManagedBinarySession } from "./binary.js";
6
5
  /** Bind one-shot analysis and status commands to one caller-selected environment. */
7
6
  export const createDirectAnalysis = (selectedEnvironment) => {
8
7
  const environment = snapshotEnvironment(selectedEnvironment);
9
8
  const dependencies = {
10
9
  readConfiguration: () => parseConfig(environment),
11
- createBinarySession: (config, logger) => createBinarySession(config, logger, environment),
12
- createManagedBinarySession,
10
+ createBinarySession: async (config, logger) => {
11
+ const { createBinarySession } = await import("./binary.js");
12
+ return createBinarySession(config, logger, environment);
13
+ },
14
+ createManagedBinarySession: async () => {
15
+ const { createManagedBinarySession } = await import("./binary.js");
16
+ return createManagedBinarySession();
17
+ },
13
18
  };
14
19
  return {
15
20
  runDirectAnalysis: executeDirectAnalysis.bind(undefined, dependencies),
@@ -19,5 +24,8 @@ export const createDirectAnalysis = (selectedEnvironment) => {
19
24
  };
20
25
  /** Execute managed metadata without configuration or native provider candidates. */
21
26
  export const runManagedProviderExecution = executeManagedProvider.bind(undefined, {
22
- createManagedBinarySession,
27
+ createManagedBinarySession: async () => {
28
+ const { createManagedBinarySession } = await import("./binary.js");
29
+ return createManagedBinarySession();
30
+ },
23
31
  });
@@ -0,0 +1,48 @@
1
+ import { parseJavaScriptSource } from "../domain/javascript/javascriptSourceParser.js";
2
+ import { analyzeParsedJavaScriptStaticSourceSteps } from "../domain/javascript/javascriptStaticAnalysis.js";
3
+ import { analyzeParsedJavaScriptSemanticsSteps, classifyParsedJavaScriptOpenReceiversSteps, } from "../domain/javascript/javascriptSemanticAnalysis.js";
4
+ import { failedJavaScriptStaticAnalysis } from "../domain/javascript/javascriptStaticAnalysisHelpers.js";
5
+ import { projectJavaScriptModuleSemantics } from "../domain/javascript/javascriptModuleSemanticIr.js";
6
+ import { measureJavaScriptModuleTransfer } from "../javascript/analysis/JavaScriptAnalysisTransfer.js";
7
+ import { AnalysisResourceConstraintError } from "../domain/analysisErrorCore.js";
8
+ import { projectJavaScriptSemanticFileSteps } from "../application/javascript/JavaScriptSemanticGraphBuilder.js";
9
+ import { completeJavaScriptAnalysisSteps } from "../application/javascript/JavaScriptAnalysisControl.js";
10
+ import { serveJavaScriptAnalysisWorker, } from "../javascript/analysis/JavaScriptAnalysisWorkerServer.js";
11
+ const analyze = async (file, nodeBudget, callbacks) => {
12
+ if (!file.text.included)
13
+ throw new TypeError("JavaScript worker requires decoded source text");
14
+ await callbacks.phase("parse");
15
+ let parsed = parseJavaScriptSource(file.text.value, file.path);
16
+ if (parsed === null) {
17
+ await callbacks.checkpoint(failedJavaScriptStaticAnalysis());
18
+ return null;
19
+ }
20
+ await callbacks.phase("static");
21
+ const receivers = await completeJavaScriptAnalysisSteps(classifyParsedJavaScriptOpenReceiversSteps(parsed));
22
+ const facts = await completeJavaScriptAnalysisSteps(analyzeParsedJavaScriptStaticSourceSteps(file.text.value, parsed, receivers));
23
+ const resultBudgetBytes = await callbacks.checkpoint(facts);
24
+ if (facts.parse_status === "failed")
25
+ return null;
26
+ if (resultBudgetBytes === 0)
27
+ throw new AnalysisResourceConstraintError("analyze_javascript_application", "memory", `The parent reserved its remaining result capacity for static observations; semantic analysis of ${file.path} was not started`, { semantic_result_budget_bytes: 0 });
28
+ await callbacks.phase("semantic");
29
+ const ir = await completeJavaScriptAnalysisSteps(analyzeParsedJavaScriptSemanticsSteps(parsed));
30
+ parsed = null;
31
+ const module = projectJavaScriptModuleSemantics(ir);
32
+ const measured = measureJavaScriptModuleTransfer(module);
33
+ if (measured.retentionBytes > resultBudgetBytes)
34
+ throw new AnalysisResourceConstraintError("analyze_javascript_application", "memory", `Completed module facts for ${file.path} exceed the parent's offered result budget; static facts were retained`, {
35
+ semantic_result_budget_bytes: resultBudgetBytes,
36
+ module_transfer_bytes: measured.bytes,
37
+ });
38
+ await callbacks.phase("projection");
39
+ const projection = await completeJavaScriptAnalysisSteps(projectJavaScriptSemanticFileSteps(file, ir, nodeBudget));
40
+ return { module, projection };
41
+ };
42
+ try {
43
+ await serveJavaScriptAnalysisWorker(analyze);
44
+ }
45
+ catch (cause) {
46
+ process.stderr.write(`${cause instanceof Error ? cause.message : String(cause)}\n`);
47
+ process.exitCode = 1;
48
+ }
@@ -0,0 +1,6 @@
1
+ import { JebProvider } from "../jeb/JebProvider.js";
2
+ /** Construct one JEB provider bound to the caller-selected MCP endpoint. */
3
+ export const createJebAnalysisProvider = (environment = process.env, connectionFactory) => new JebProvider({
4
+ environment,
5
+ ...(connectionFactory === undefined ? {} : { connectionFactory }),
6
+ });
@@ -3,11 +3,14 @@ import { isAbsolute } from "node:path";
3
3
  import { ConfigurationError } from "../domain/configurationErrors.js";
4
4
  import { err, ok } from "../domain/result.js";
5
5
  import { analysisProviderSelectorSchema } from "../contracts/providerSelection.js";
6
+ import { ghidraCompilerSpecIdSchema, ghidraLanguageIdSchema, } from "./ghidraLanguageOverride.js";
6
7
  import { ghidraStartupTimeoutSchema } from "./ghidraStartupTimeout.js";
8
+ import { mcpInputSchemaProfileSchema } from "./mcpInputSchemaProfile.js";
7
9
  import { mcpResponseBudgetSchema } from "./mcpResponseBudget.js";
8
10
  const environmentSchema = z.object({
9
11
  REA_ANALYSIS_PROVIDER: analysisProviderSelectorSchema.default("auto"),
10
12
  REA_MCP_MAX_RESPONSE_BYTES: mcpResponseBudgetSchema.optional(),
13
+ REA_MCP_INPUT_SCHEMA_PROFILE: mcpInputSchemaProfileSchema.optional(),
11
14
  REA_IDA_MCP_CONFIG: z
12
15
  .string()
13
16
  .min(1)
@@ -29,6 +32,13 @@ const environmentSchema = z.object({
29
32
  .refine(isAbsolute, "REA_GHIDRA_NATIVEAOT_JAR must be absolute")
30
33
  .optional(),
31
34
  REA_GHIDRA_STARTUP_TIMEOUT_MS: ghidraStartupTimeoutSchema,
35
+ REA_GHIDRA_LANGUAGE_ID: ghidraLanguageIdSchema.optional(),
36
+ REA_GHIDRA_COMPILER_SPEC_ID: ghidraCompilerSpecIdSchema.optional(),
37
+ REA_GHIDRA_SEED_FILE: z
38
+ .string()
39
+ .min(1)
40
+ .refine(isAbsolute, "REA_GHIDRA_SEED_FILE must be absolute")
41
+ .optional(),
32
42
  REA_ILSPY_CMD_PATH: z
33
43
  .string()
34
44
  .min(1)
@@ -0,0 +1,9 @@
1
+ import { z } from "zod";
2
+ // Ghidra language IDs are four colon-separated fields; variants may contain
3
+ // spaces ("x86:LE:16:Real Mode") but never leading or trailing whitespace.
4
+ export const ghidraLanguageIdSchema = z
5
+ .string()
6
+ .regex(/^[A-Za-z0-9_.+-]+:(?:LE|BE):[1-9]\d*:[A-Za-z0-9_.+-](?:[A-Za-z0-9_.+ -]*[A-Za-z0-9_.+-])?$/u, "must be a Ghidra language ID such as x86:LE:32:default");
7
+ export const ghidraCompilerSpecIdSchema = z
8
+ .string()
9
+ .regex(/^[A-Za-z0-9_.+-]+$/u, "must be a Ghidra compiler-spec ID such as default or borlandcpp");
@@ -0,0 +1,27 @@
1
+ import { z } from "zod";
2
+ import { ConfigurationError } from "../domain/configurationErrors.js";
3
+ import { err, ok } from "../domain/result.js";
4
+ // Moonshot's function-calling API rejects requests while any single tool
5
+ // parameters schema exceeds its literal serialized size cap. Community
6
+ // measurements bound the cap between ~13.7 KB (accepted) and ~15 KB
7
+ // (rejected); 13 KiB leaves margin under the lower bound. See
8
+ // https://github.com/morluto/rea/issues/1484 for the measured evidence.
9
+ export const COMPACT_INPUT_SCHEMA_BUDGET_BYTES = 13 * 1024;
10
+ export const mcpInputSchemaProfileSchema = z.enum(["full", "compact"]);
11
+ const profileConstraint = 'REA_MCP_INPUT_SCHEMA_PROFILE must be "full" (default) or "compact". The compact profile advertises input schemas without nested annotation prose for providers that cap each tool schema\'s serialized size.';
12
+ /** Parse the advertised input schema presentation selection. */
13
+ export const parseMcpInputSchemaProfile = (value) => {
14
+ if (value === undefined)
15
+ return ok(undefined);
16
+ const parsed = mcpInputSchemaProfileSchema.safeParse(value);
17
+ return parsed.success
18
+ ? ok(parsed.data)
19
+ : err(new ConfigurationError(profileConstraint, {
20
+ settings: [
21
+ {
22
+ setting: "REA_MCP_INPUT_SCHEMA_PROFILE",
23
+ constraint: profileConstraint,
24
+ },
25
+ ],
26
+ }));
27
+ };
@@ -1,7 +1,7 @@
1
1
  import { accessSync, constants } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { ConfigurationError } from "../domain/configurationErrors.js";
4
- import { ok } from "../domain/result.js";
4
+ import { err, ok } from "../domain/result.js";
5
5
  import { parseEnvironment } from "./environment.js";
6
6
  import { homeDirectoryFromEnvironment } from "./homeDirectory.js";
7
7
  import { parseStringArray, parseLoaderArgs } from "./parsers.js";
@@ -36,10 +36,24 @@ export const parseConfig = (environment) => {
36
36
  const secretPatterns = parseStringArray(env.REA_REFERENCE_SECRET_PATTERNS_JSON, "REA_REFERENCE_SECRET_PATTERNS_JSON");
37
37
  if (!secretPatterns.ok)
38
38
  return secretPatterns;
39
+ // Ghidra's analyzeHeadless accepts -cspec only together with -processor.
40
+ if (env.REA_GHIDRA_COMPILER_SPEC_ID !== undefined &&
41
+ env.REA_GHIDRA_LANGUAGE_ID === undefined)
42
+ return err(new ConfigurationError("Invalid REA environment configuration", {
43
+ settings: [
44
+ {
45
+ setting: "REA_GHIDRA_COMPILER_SPEC_ID",
46
+ constraint: "requires REA_GHIDRA_LANGUAGE_ID",
47
+ },
48
+ ],
49
+ }));
39
50
  return ok({
40
51
  ...(env.REA_MCP_MAX_RESPONSE_BYTES === undefined
41
52
  ? {}
42
53
  : { mcpMaxResponseBytes: env.REA_MCP_MAX_RESPONSE_BYTES }),
54
+ ...(env.REA_MCP_INPUT_SCHEMA_PROFILE === undefined
55
+ ? {}
56
+ : { mcpInputSchemaProfile: env.REA_MCP_INPUT_SCHEMA_PROFILE }),
43
57
  analysisProvider: env.REA_ANALYSIS_PROVIDER,
44
58
  ...(env.REA_IDA_MCP_CONFIG === undefined
45
59
  ? {}
@@ -47,6 +61,19 @@ export const parseConfig = (environment) => {
47
61
  ghidraInstallDir: env.GHIDRA_INSTALL_DIR,
48
62
  ghidraJavaHome: env.JAVA_HOME,
49
63
  ghidraStartupTimeoutMs: env.REA_GHIDRA_STARTUP_TIMEOUT_MS,
64
+ ...(env.REA_GHIDRA_LANGUAGE_ID === undefined
65
+ ? {}
66
+ : {
67
+ ghidraLanguageOverride: {
68
+ languageId: env.REA_GHIDRA_LANGUAGE_ID,
69
+ ...(env.REA_GHIDRA_COMPILER_SPEC_ID === undefined
70
+ ? {}
71
+ : { compilerSpecId: env.REA_GHIDRA_COMPILER_SPEC_ID }),
72
+ },
73
+ }),
74
+ ...(env.REA_GHIDRA_SEED_FILE === undefined
75
+ ? {}
76
+ : { ghidraSeedFile: env.REA_GHIDRA_SEED_FILE }),
50
77
  ...(env.REA_GHIDRA_NATIVEAOT_JAR === undefined
51
78
  ? {}
52
79
  : { ghidraNativeAotJar: env.REA_GHIDRA_NATIVEAOT_JAR }),