rea-agents 3.1.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (590) hide show
  1. package/README.md +72 -95
  2. package/bridge/ghidra/ReaGhidraBridge.java +609 -841
  3. package/bridge/hopper_bridge.py +99 -344
  4. package/dist/application/AbortablePromise.js +6 -3
  5. package/dist/application/AnalysisSnapshotCache.js +0 -1
  6. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  7. package/dist/application/AndroidApplicationService.js +1 -1
  8. package/dist/application/AppleApplicationService.js +1 -1
  9. package/dist/application/ArtifactExtraction.js +35 -54
  10. package/dist/application/ArtifactExtractionDestination.js +17 -0
  11. package/dist/application/ArtifactGraphConstruction.js +2 -17
  12. package/dist/application/ArtifactInventory/classify.js +2 -6
  13. package/dist/application/ArtifactInventory/hash.js +2 -20
  14. package/dist/application/ArtifactInventory/scanCanonical.js +8 -12
  15. package/dist/application/ArtifactInventory/scanReader.js +69 -51
  16. package/dist/application/ArtifactInventory.js +6 -14
  17. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  18. package/dist/application/BinarySession.js +41 -13
  19. package/dist/application/BinarySessionComposition.js +0 -11
  20. package/dist/application/BinarySessionOpen.js +2 -1
  21. package/dist/application/BinarySessionRecords.js +5 -93
  22. package/dist/application/BinarySessionStatus.js +5 -16
  23. package/dist/application/BinaryTargetResolver.js +216 -0
  24. package/dist/application/BrowserEvidence.js +42 -58
  25. package/dist/application/BrowserObservationService.js +3 -6
  26. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  27. package/dist/application/BrowserScenarioEvidence.js +3 -3
  28. package/dist/application/CallPathTracing.js +2 -36
  29. package/dist/application/CapabilityInventory.js +10 -15
  30. package/dist/application/ClientConfigurationDocument.js +27 -0
  31. package/dist/application/ClientRegistrationStatus.js +16 -13
  32. package/dist/application/CommandShimReplay.js +14 -1
  33. package/dist/application/DirectAnalysis.js +22 -46
  34. package/dist/application/DirectAnalysisStatus.js +5 -61
  35. package/dist/application/Doctor.js +11 -32
  36. package/dist/application/DoctorDiagnostics.js +1 -2
  37. package/dist/application/DoctorScope.js +1 -1
  38. package/dist/application/ElectronActiveEvidence.js +3 -8
  39. package/dist/application/ElectronActiveObservationService.js +3 -6
  40. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  41. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  42. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  43. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  44. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  45. package/dist/application/ElectronEvidence.js +4 -7
  46. package/dist/application/ElectronObservationService.js +5 -9
  47. package/dist/application/EnhancedLiteralTracing.js +42 -65
  48. package/dist/application/EnhancedTools.js +76 -44
  49. package/dist/application/EvidenceBundleCommands.js +11 -11
  50. package/dist/application/EvidenceBundleFiles.js +9 -15
  51. package/dist/application/EvidenceLedger.js +6 -41
  52. package/dist/application/FilesystemSnapshot.js +2 -3
  53. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  54. package/dist/application/InventoryProjectionEvidence.js +4 -2
  55. package/dist/application/InvestigationProviders.js +1 -1
  56. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  57. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  58. package/dist/application/JavaScriptApplicationService.js +6 -29
  59. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  60. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  61. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  62. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  63. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  64. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  65. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  66. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  67. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  68. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  69. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  70. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  71. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  72. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  73. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  74. package/dist/application/JavaScriptJsonModules.js +2 -2
  75. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  76. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  77. package/dist/application/JavaScriptReplayService.js +6 -32
  78. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  79. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  80. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  81. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  82. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  83. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  84. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  85. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  86. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  87. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  88. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  89. package/dist/application/JsonFiles.js +79 -0
  90. package/dist/application/LinuxHopper.js +11 -9
  91. package/dist/application/LoopbackReplay.js +26 -23
  92. package/dist/application/LoopbackReplayRecorder.js +29 -1
  93. package/dist/application/ManagedApplicationGraphService.js +1 -2
  94. package/dist/application/ManagedMemberComparisonService.js +11 -41
  95. package/dist/application/ManagedNativeVerificationService.js +1 -2
  96. package/dist/application/ManagedReconstructionService.js +1 -1
  97. package/dist/application/ManagedRuntimeCorrelationService.js +5 -8
  98. package/dist/application/NativeApiInspection.js +2 -7
  99. package/dist/application/NativeUiActionTrace.js +394 -0
  100. package/dist/application/NodeRuntimeCharacterizationService.js +3 -7
  101. package/dist/application/PermissionAuthority.js +15 -7
  102. package/dist/application/PermissionFailure.js +5 -0
  103. package/dist/application/ProcessCaptureAuthority.js +5 -7
  104. package/dist/application/ProcessCaptureJournal.js +3 -2
  105. package/dist/application/ProcessCaptureLifecycle.js +5 -12
  106. package/dist/application/ProcessCheckpoints.js +29 -11
  107. package/dist/application/ProcessCli.js +6 -16
  108. package/dist/application/ProcessEvidence.js +5 -7
  109. package/dist/application/ProcessHarness.js +52 -17
  110. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  111. package/dist/application/ProcessReactiveEffects.js +9 -3
  112. package/dist/application/ProcessReactiveHarness.js +13 -7
  113. package/dist/application/ProcessSampling.js +2 -4
  114. package/dist/application/ProcessTimer.js +39 -0
  115. package/dist/application/ProjectPermissionStore.js +39 -96
  116. package/dist/application/RealHopperAssertions.js +20 -66
  117. package/dist/application/ReconstructionCoverageService.js +12 -58
  118. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  119. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  120. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  121. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  122. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  123. package/dist/application/ReferenceSourceImport.js +19 -45
  124. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  125. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  126. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  127. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  128. package/dist/application/SessionProviderRouter.js +2 -2
  129. package/dist/application/Setup.js +1 -3
  130. package/dist/application/SetupClientConfiguration.js +22 -93
  131. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  132. package/dist/application/StoreFileLock.js +119 -0
  133. package/dist/application/TerminalRenderer.js +2 -3
  134. package/dist/application/Uninstall.js +9 -14
  135. package/dist/application/UnknownEvidence.js +1 -1
  136. package/dist/artifacts/ArtifactPaths.js +2 -5
  137. package/dist/artifacts/ArtifactProvider.js +36 -58
  138. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  139. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  140. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  141. package/dist/artifacts/NibArchive.js +269 -0
  142. package/dist/artifacts/SafeOutputTree.js +15 -24
  143. package/dist/browser/BrowserProcessStartup.js +1 -2
  144. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  145. package/dist/browser/CdpBrowserProvider.js +3 -13
  146. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  147. package/dist/browser/CdpCaptureDocuments.js +28 -76
  148. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  149. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  150. package/dist/browser/CdpCaptureEvents.js +2 -8
  151. package/dist/browser/CdpCaptureStorage.js +9 -20
  152. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -98
  153. package/dist/browser/CdpCaptureValues.js +21 -21
  154. package/dist/browser/CdpConnection.js +10 -25
  155. package/dist/browser/CdpElectronInspection.js +26 -50
  156. package/dist/browser/CdpElectronProvider.js +10 -35
  157. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  158. package/dist/browser/CdpElectronScripts.js +6 -35
  159. package/dist/browser/CdpElectronWorkers.js +6 -10
  160. package/dist/browser/CdpEndpoint.js +25 -41
  161. package/dist/browser/CdpObservationSession.js +14 -26
  162. package/dist/browser/CdpPageCapture.js +34 -48
  163. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  164. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  165. package/dist/browser/CdpSafeMetadata.js +19 -22
  166. package/dist/browser/CdpScreenshot.js +3 -5
  167. package/dist/browser/CdpTargetSession.js +1 -2
  168. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  169. package/dist/browser/ElectronFileScope.js +8 -19
  170. package/dist/browser/JavaScriptRuntimeScope.js +9 -14
  171. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  172. package/dist/browser/PlaywrightElectronActiveActions.js +54 -69
  173. package/dist/browser/PlaywrightElectronActiveProvider.js +14 -34
  174. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  175. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  176. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  177. package/dist/browser/PlaywrightScenarioBrowser.js +3 -5
  178. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  179. package/dist/browser/PlaywrightScenarioSession.js +14 -30
  180. package/dist/browser/PngVisualDiff.js +22 -14
  181. package/dist/browser/SensitiveTextCapture.js +0 -17
  182. package/dist/browser/V8InspectorCaptureProjection.js +7 -8
  183. package/dist/browser/V8InspectorEndpoint.js +12 -14
  184. package/dist/browser/V8InspectorProvider.js +20 -61
  185. package/dist/browser/WebSourceMapFetcher.js +56 -176
  186. package/dist/catalogIdentity.js +0 -54
  187. package/dist/cli/artifactCommands.js +49 -77
  188. package/dist/cli/coreAnalysisCommands.js +83 -133
  189. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  190. package/dist/cli/managedCommands.js +5 -270
  191. package/dist/cli/setupCommands.js +3 -12
  192. package/dist/cli/utilityCommands.js +7 -41
  193. package/dist/cli.js +0 -2
  194. package/dist/cliApplicationCommands.js +42 -112
  195. package/dist/cliBrowserAdvancedCommands.js +10 -106
  196. package/dist/cliBrowserCommands.js +15 -127
  197. package/dist/cliBrowserContext.js +30 -0
  198. package/dist/cliCommandNames.js +4 -5
  199. package/dist/cliElectronCommands.js +8 -72
  200. package/dist/cliEvidenceCommands.js +8 -77
  201. package/dist/cliJavaScriptRuntimeCommands.js +9 -91
  202. package/dist/cliJsonInput.js +4 -14
  203. package/dist/cliObservationOptions.js +11 -96
  204. package/dist/cliPolicyCommands.js +2 -17
  205. package/dist/cliProcessCommands.js +3 -3
  206. package/dist/cliSetup.js +0 -13
  207. package/dist/config/browserScenario.js +2 -2
  208. package/dist/config/environment.js +0 -9
  209. package/dist/config/parseConfig.js +1 -33
  210. package/dist/config/parsers.js +6 -27
  211. package/dist/config/passiveObservation.js +7 -77
  212. package/dist/config/permissions.js +0 -7
  213. package/dist/contracts/analysisSearchContract.js +2 -5
  214. package/dist/contracts/applicationToolContracts.js +56 -109
  215. package/dist/contracts/applicationWorkflowInputContracts.js +27 -102
  216. package/dist/contracts/artifactComparisonExample.js +58 -60
  217. package/dist/contracts/artifactToolContracts.js +20 -67
  218. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  219. package/dist/contracts/browserToolContracts.js +8 -73
  220. package/dist/contracts/electronToolContracts.js +8 -108
  221. package/dist/contracts/enhancedInputs.js +23 -54
  222. package/dist/contracts/errorSchemas.js +0 -1
  223. package/dist/contracts/functionComparisonExample.js +10 -24
  224. package/dist/contracts/functionInstructionContract.js +1 -3
  225. package/dist/contracts/functionWorkflowToolContracts.js +2 -2
  226. package/dist/contracts/hopperMemoryContracts.js +3 -3
  227. package/dist/contracts/investigationExamples.js +14 -11
  228. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  229. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  230. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  231. package/dist/contracts/managedToolContracts.js +6 -95
  232. package/dist/contracts/managedWorkflowExamples.js +77 -128
  233. package/dist/contracts/managedWorkflowToolContracts.js +51 -77
  234. package/dist/contracts/nativeToolContracts.js +7 -11
  235. package/dist/contracts/processCaptureExample.js +2 -69
  236. package/dist/contracts/promptContracts.js +49 -67
  237. package/dist/contracts/providerSelection.js +0 -1
  238. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  239. package/dist/contracts/sessionStatusContract.js +1 -17
  240. package/dist/contracts/sessionToolSchemas.js +6 -15
  241. package/dist/contracts/toolContractExamples.js +11 -11
  242. package/dist/contracts/toolContractHelpers.js +0 -4
  243. package/dist/contracts/toolContracts.js +60 -71
  244. package/dist/contracts/toolEffects.js +5 -13
  245. package/dist/contracts/toolOutputSchemaGroups.js +37 -91
  246. package/dist/contracts/toolOutputSchemaPrimitives.js +16 -56
  247. package/dist/contracts/toolSchemaMetadata.js +8 -19
  248. package/dist/contracts/unknownContractExamples.js +0 -2
  249. package/dist/domain/analysisErrorPresentation.js +46 -54
  250. package/dist/domain/analysisErrorProjection.js +28 -37
  251. package/dist/domain/analysisProfile.js +3 -31
  252. package/dist/domain/analysisSnapshot.js +3 -12
  253. package/dist/domain/androidApplication.js +15 -54
  254. package/dist/domain/appleApplication.js +24 -67
  255. package/dist/domain/artifactComparison.js +11 -29
  256. package/dist/domain/artifactGraph.js +14 -44
  257. package/dist/domain/artifactInspection.js +38 -69
  258. package/dist/domain/artifactInventoryEvidence.js +27 -21
  259. package/dist/domain/binaryTarget.js +2 -221
  260. package/dist/domain/browserCaptureComparison.js +47 -24
  261. package/dist/domain/browserObservation.js +28 -193
  262. package/dist/domain/browserObservationSchemas.js +5 -23
  263. package/dist/domain/browserScenario.js +11 -14
  264. package/dist/domain/browserScenarioCapture.js +11 -12
  265. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  266. package/dist/domain/browserScenarioDiff.js +2 -59
  267. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  268. package/dist/domain/browserScenarioDiffValues.js +21 -38
  269. package/dist/domain/browserScenarioValues.js +80 -109
  270. package/dist/domain/browserSession.js +4 -7
  271. package/dist/domain/bundleComparison.js +6 -32
  272. package/dist/domain/bytecodeProvider.js +20 -19
  273. package/dist/domain/callPath.js +47 -167
  274. package/dist/domain/callPathSchemas.js +79 -0
  275. package/dist/domain/changedBehavior.js +34 -60
  276. package/dist/domain/completionLedgerGeneration.js +8 -14
  277. package/dist/domain/conformancePackage.js +126 -97
  278. package/dist/domain/conformanceReplay.js +36 -8
  279. package/dist/domain/conformanceTrustGate.js +23 -14
  280. package/dist/domain/customProtocolCapture.js +1 -1
  281. package/dist/domain/electronActiveObservation.js +70 -103
  282. package/dist/domain/electronObservation.js +14 -80
  283. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  284. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  285. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  286. package/dist/domain/electronStaticAnalysisValues.js +10 -17
  287. package/dist/domain/errors.js +33 -54
  288. package/dist/domain/eventProcessTree.js +20 -12
  289. package/dist/domain/evidence.js +2 -10
  290. package/dist/domain/evidenceBundle.js +3 -5
  291. package/dist/domain/evidenceCompletionLedger.js +6 -8
  292. package/dist/domain/functionComparison.js +4 -14
  293. package/dist/domain/functionComparisonNormalization.js +4 -11
  294. package/dist/domain/functionComparisonResults.js +25 -15
  295. package/dist/domain/functionComparisonSchemas.js +49 -33
  296. package/dist/domain/functionDossierEvidence.js +31 -156
  297. package/dist/domain/hopperStartupFailure.js +1 -1
  298. package/dist/domain/hopperValues.js +15 -136
  299. package/dist/domain/interfaceBuilderGraph.js +654 -0
  300. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  301. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  302. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  303. package/dist/domain/javascriptApplicationGraph.js +3 -13
  304. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  305. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  306. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  307. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  308. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  309. package/dist/domain/javascriptAstFingerprint.js +25 -58
  310. package/dist/domain/javascriptAstValues.js +9 -0
  311. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  312. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  313. package/dist/domain/javascriptExportShapeComparisonSchemas.js +68 -75
  314. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  315. package/dist/domain/javascriptFeatureSeed.js +20 -12
  316. package/dist/domain/javascriptFeatureTrace.js +13 -67
  317. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  318. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  319. package/dist/domain/javascriptNativeHandoff.js +1 -1
  320. package/dist/domain/javascriptReplay.js +24 -41
  321. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  322. package/dist/domain/javascriptRuntimeObservation.js +42 -103
  323. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  324. package/dist/domain/javascriptRuntimeReconciliationActive.js +8 -17
  325. package/dist/domain/javascriptRuntimeReconciliationGraph.js +10 -23
  326. package/dist/domain/javascriptRuntimeReconciliationMatching.js +18 -12
  327. package/dist/domain/javascriptRuntimeReconciliationParsing.js +16 -45
  328. package/dist/domain/javascriptRuntimeReconciliationResult.js +4 -5
  329. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  330. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +33 -48
  331. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  332. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  333. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  334. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  335. package/dist/domain/javascriptSemanticCalls.js +5 -32
  336. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  337. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  338. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  339. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  340. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  341. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  342. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  343. package/dist/domain/javascriptSemanticIr.js +1 -29
  344. package/dist/domain/javascriptSemanticObjects.js +1 -5
  345. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  346. package/dist/domain/javascriptSemanticProjection.js +0 -18
  347. package/dist/domain/javascriptSemanticPromises.js +9 -16
  348. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  349. package/dist/domain/javascriptSemanticQuery.js +17 -139
  350. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  351. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  352. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  353. package/dist/domain/javascriptSemanticResources.js +1 -6
  354. package/dist/domain/javascriptSemanticReturns.js +10 -27
  355. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  356. package/dist/domain/javascriptSemanticValues.js +44 -62
  357. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  358. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  359. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  360. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  361. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  362. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  363. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  364. package/dist/domain/jsonShape.js +7 -33
  365. package/dist/domain/localPath.js +7 -0
  366. package/dist/domain/managedApplicationGraph.js +9 -41
  367. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  368. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  369. package/dist/domain/managedArtifact.js +14 -27
  370. package/dist/domain/managedMemberComparison.js +90 -92
  371. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  372. package/dist/domain/managedMemberComparisonItems.js +221 -0
  373. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  374. package/dist/domain/managedNativeVerification.js +3 -6
  375. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  376. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  377. package/dist/domain/managedReconstruction.js +19 -23
  378. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  379. package/dist/domain/nativeApiBoundary.js +2 -7
  380. package/dist/domain/nativeInspection.js +0 -2
  381. package/dist/domain/nativeInvestigationGraph.js +351 -0
  382. package/dist/domain/nativeValueFlow.js +61 -0
  383. package/dist/domain/nodeRuntimeCharacterization.js +1 -5
  384. package/dist/domain/objcSwiftMetadata.js +254 -0
  385. package/dist/domain/peInspection.js +1 -1
  386. package/dist/domain/permissionPolicy.js +13 -0
  387. package/dist/domain/processCapture.js +76 -113
  388. package/dist/domain/processCaptureExample.js +68 -0
  389. package/dist/domain/processCaptureParsing.js +21 -0
  390. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  391. package/dist/domain/processCaptureValidation.js +1 -7
  392. package/dist/domain/processComparison.js +3 -12
  393. package/dist/domain/processReactiveMatching.js +29 -50
  394. package/dist/domain/processReactiveRuntime.js +4 -8
  395. package/dist/domain/processReactiveScenario.js +28 -94
  396. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  397. package/dist/domain/processReactiveTransition.js +33 -18
  398. package/dist/domain/processScenario.js +56 -90
  399. package/dist/domain/processTraceComparison.js +0 -8
  400. package/dist/domain/processTraceEvaluation.js +14 -4
  401. package/dist/domain/processTraceSpecification.js +11 -17
  402. package/dist/domain/protocolCapture.js +3 -3
  403. package/dist/domain/reconstructionCoverage.js +62 -129
  404. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  405. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  406. package/dist/domain/reconstructionReadiness.js +1 -2
  407. package/dist/domain/reconstructionReadinessSchemas.js +36 -38
  408. package/dist/domain/reconstructionUnknowns.js +3 -3
  409. package/dist/domain/reconstructionVerification.js +13 -47
  410. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  411. package/dist/domain/referenceSourceGraph.js +53 -61
  412. package/dist/domain/referenceSourceImportParsing.js +1 -5
  413. package/dist/domain/replayMachine.js +19 -31
  414. package/dist/domain/replayMachineRun.js +15 -63
  415. package/dist/domain/replayMachineRuntime.js +41 -41
  416. package/dist/domain/replayMachineValues.js +84 -0
  417. package/dist/domain/residualUnknown.js +25 -30
  418. package/dist/domain/runtimeCharacterization.js +15 -16
  419. package/dist/domain/runtimeIdentification.js +48 -47
  420. package/dist/domain/sourceToBundleComparison.js +9 -85
  421. package/dist/domain/sourceToBundleComparisonSchemas.js +17 -42
  422. package/dist/domain/sourceToBundleSignals.js +4 -15
  423. package/dist/domain/staticRuntimeCorrelation.js +37 -49
  424. package/dist/domain/symbolAnalysis.js +10 -19
  425. package/dist/domain/unicodeCodePointOrder.js +12 -0
  426. package/dist/domain/webBundleAnalysis.js +70 -99
  427. package/dist/domain/webBundleAnalyzer.js +2 -4
  428. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  429. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  430. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  431. package/dist/domain/webCaptureDiff.js +33 -73
  432. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  433. package/dist/domain/webContentArtifact.js +1 -10
  434. package/dist/domain/webMcpDiscovery.js +3 -14
  435. package/dist/domain/webScreenshot.js +58 -34
  436. package/dist/domain/zipPackageFormat.js +7 -0
  437. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  438. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  439. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  440. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  441. package/dist/dotnet/ManagedMemberRows.js +16 -16
  442. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  443. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  444. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  445. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  446. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  447. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  448. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -41
  449. package/dist/dotnet/ManagedPeReader.js +2 -2
  450. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  451. package/dist/generatedMcpToolCatalog.js +1 -1
  452. package/dist/generatedPackageMetadata.js +1 -1
  453. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  454. package/dist/ghidra/GhidraClient.js +4 -12
  455. package/dist/ghidra/GhidraClientWire.js +9 -5
  456. package/dist/ghidra/GhidraDefaults.js +0 -18
  457. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  458. package/dist/ghidra/GhidraDoctor.js +16 -12
  459. package/dist/ghidra/GhidraFunctionValues.js +65 -108
  460. package/dist/ghidra/GhidraInstallation.js +98 -42
  461. package/dist/ghidra/GhidraInventoryValues.js +16 -85
  462. package/dist/ghidra/GhidraLauncher.js +0 -8
  463. package/dist/ghidra/GhidraProvider.js +15 -22
  464. package/dist/ghidra/GhidraProviderCapabilities.js +6 -47
  465. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  466. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  467. package/dist/ghidra/GhidraSessionValues.js +0 -2
  468. package/dist/ghidra/GhidraTransport.js +4 -7
  469. package/dist/ghidra/protocol.js +2 -2
  470. package/dist/hopper/BridgeLauncher.js +112 -36
  471. package/dist/hopper/HopperAnalysisProfile.js +1 -1
  472. package/dist/hopper/HopperCleanup.js +6 -3
  473. package/dist/hopper/HopperClient.js +4 -7
  474. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  475. package/dist/hopper/HopperProvider.js +0 -16
  476. package/dist/hopper/HopperRequestQueue.js +21 -40
  477. package/dist/hopper/HopperResponseStream.js +1 -9
  478. package/dist/hopper/HopperSessionValues.js +3 -2
  479. package/dist/hopper/HopperTargetLease.js +119 -0
  480. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  481. package/dist/hopper/LinuxPrivateDisplayProbe.js +5 -16
  482. package/dist/hopper/protocol.js +6 -4
  483. package/dist/main/reload.js +0 -3
  484. package/dist/main/shutdown.js +1 -1
  485. package/dist/main/state.js +0 -9
  486. package/dist/main/transport.js +0 -5
  487. package/dist/mcpDoctor.js +25 -45
  488. package/dist/native/CommandRunner.js +18 -25
  489. package/dist/native/NativeMacOSProvider.js +13 -38
  490. package/dist/native/NativeMachoInspection.js +1 -1
  491. package/dist/process/BoundedFileBytes.js +17 -0
  492. package/dist/process/ExecFileOutput.js +11 -0
  493. package/dist/process/PendingOperations.js +8 -6
  494. package/dist/process/ProcessOwnership.js +3 -2
  495. package/dist/process/ProcessOwnershipObservation.js +0 -1
  496. package/dist/process/ProviderProcess.js +7 -28
  497. package/dist/reference/ReferenceSourceReader.js +8 -24
  498. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  499. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  500. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  501. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  502. package/dist/replay/JavaScriptReplayWorker.js +3 -5
  503. package/dist/replay/LinuxJavaScriptReplayRunner.js +33 -29
  504. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  505. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  506. package/dist/replay/ReplayOutcome.js +1 -3
  507. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  508. package/dist/replay/ReplaySeccompFile.js +29 -0
  509. package/dist/replay/ReplayWorkerProtocol.js +0 -2
  510. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  511. package/dist/server/ProcessCaptureElicitation.js +4 -8
  512. package/dist/server/createServer.js +6 -44
  513. package/dist/server/promptCompletion.js +37 -61
  514. package/dist/server/recordDerivedEvidence.js +1 -1
  515. package/dist/server/registerApplicationTools/characterization.js +4 -8
  516. package/dist/server/registerApplicationTools/compareExportShapes.js +5 -10
  517. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -10
  518. package/dist/server/registerApplicationTools/compareVersions.js +5 -10
  519. package/dist/server/registerApplicationTools/controlledReplay.js +3 -5
  520. package/dist/server/registerApplicationTools/coverage.js +6 -71
  521. package/dist/server/registerApplicationTools/helpers.js +1 -13
  522. package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
  523. package/dist/server/registerApplicationTools/traceFeature.js +5 -9
  524. package/dist/server/registerApplicationTools/traceSemantics.js +5 -8
  525. package/dist/server/registerApplicationTools.js +0 -2
  526. package/dist/server/registerArtifactComparisonTool.js +23 -27
  527. package/dist/server/registerBrowserScenarioTool.js +4 -4
  528. package/dist/server/registerBrowserTools.js +5 -8
  529. package/dist/server/registerBundleComparisonTool.js +5 -7
  530. package/dist/server/registerCloseLifecycleTool.js +2 -16
  531. package/dist/server/registerElectronTools.js +10 -29
  532. package/dist/server/registerEnhancedTools.js +10 -11
  533. package/dist/server/registerEvidenceTools.js +15 -22
  534. package/dist/server/registerFunctionComparisonTool.js +30 -25
  535. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  536. package/dist/server/registerInvestigationTools.js +20 -116
  537. package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -4
  538. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +15 -17
  539. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  540. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -8
  541. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +3 -8
  542. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +10 -14
  543. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +9 -15
  544. package/dist/server/registerOfficialTools.js +1 -43
  545. package/dist/server/registerProcessComparisonTool.js +33 -23
  546. package/dist/server/registerPrompts.js +19 -17
  547. package/dist/server/registerSessionRecordTools.js +10 -156
  548. package/dist/server/registerSessionStatusTool.js +6 -69
  549. package/dist/server/registerSessionTools.js +10 -51
  550. package/dist/server/sessionAvailabilityPolicy.js +0 -2
  551. package/dist/server/sessionEvidence.js +9 -15
  552. package/dist/server/sessionToolPolicies.js +0 -8
  553. package/dist/server/toolResult.js +14 -50
  554. package/dist/serverIdentity.js +0 -20
  555. package/install.sh +1 -1
  556. package/package.json +11 -7
  557. package/scripts/electron-active-hook.cjs +23 -55
  558. package/scripts/hopper-demo-x11.py +13 -32
  559. package/skills/reverse-engineer-anything/SKILL.md +47 -12
  560. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  561. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  562. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  563. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -188
  564. package/dist/application/BoundedJsonFiles.js +0 -86
  565. package/dist/application/CrossVersionInventory.js +0 -129
  566. package/dist/application/CrossVersionInvestigation.js +0 -301
  567. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  568. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  569. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  570. package/dist/application/DeferredFileAuthorization.js +0 -61
  571. package/dist/application/DoctorProjection.js +0 -43
  572. package/dist/application/EnhancedToolPagination.js +0 -22
  573. package/dist/application/EvidenceReferenceResolver.js +0 -26
  574. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  575. package/dist/application/ProcessPairedExperiment.js +0 -72
  576. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  577. package/dist/application/ReconstructionReadinessService.js +0 -48
  578. package/dist/cliInvestigationCommands.js +0 -173
  579. package/dist/domain/boundedCartesianProjection.js +0 -15
  580. package/dist/domain/investigationWorkspace.js +0 -347
  581. package/dist/domain/jsonLimits.js +0 -26
  582. package/dist/domain/knownPageCoverage.js +0 -29
  583. package/dist/domain/processPairedExperiment.js +0 -128
  584. package/dist/server/javascriptApplicationResult.js +0 -106
  585. package/dist/server/permissionFailure.js +0 -12
  586. package/dist/server/registerApplicationTools/readiness.js +0 -50
  587. package/dist/server/registerEvidenceResources.js +0 -315
  588. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  589. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  590. package/dist/server/registerReconstructionReadinessResource.js +0 -32
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "rea-agents",
3
3
  "mcpName": "io.github.morluto/rea",
4
- "version": "3.1.0",
4
+ "version": "3.2.1",
5
5
  "description": "Reverse engineer anything from your terminal or agent with one CLI and MCP server.",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -89,17 +89,17 @@
89
89
  "test:run": "node scripts/run-exclusive.mjs test vitest run",
90
90
  "test:local": "node scripts/run-exclusive.mjs test vitest run --changed --passWithNoTests --maxWorkers=1",
91
91
  "pretest:fast": "npm run build:cached",
92
- "test:fast": "vitest run --project domain --project services --project adapters --project composition --project boundary --project mcp-boundary --project conformance",
92
+ "test:fast": "vitest run --project domain --project services --project adapters --project composition --project boundary --project process-boundary --project mcp-boundary --project conformance",
93
93
  "pretest:boundary": "npm run build:cached",
94
- "test:boundary": "vitest run --project boundary --project mcp-boundary --project process-global",
94
+ "test:boundary": "vitest run --project boundary --project process-boundary --project mcp-boundary --project process-global",
95
95
  "pretest:mcp": "npm run build:cached",
96
96
  "test:mcp": "vitest run --project mcp-boundary",
97
97
  "pretest:acceptance": "npm run build:cached",
98
98
  "test:acceptance": "vitest run --project acceptance",
99
99
  "pretest:changed": "npm run build:cached",
100
- "test:changed": "vitest run --project domain --project services --project adapters --project composition --project boundary --project mcp-boundary --project conformance --project evaluation --changed",
100
+ "test:changed": "vitest run --project domain --project services --project adapters --project composition --project boundary --project process-boundary --project mcp-boundary --project conformance --project evaluation --changed",
101
101
  "pretest:integration": "npm run build:cached",
102
- "test:integration": "vitest run --project boundary --project mcp-boundary --project process-global --project acceptance",
102
+ "test:integration": "vitest run --project boundary --project process-boundary --project mcp-boundary --project process-global --project acceptance",
103
103
  "pretest:coverage": "npm run build:cached",
104
104
  "test:coverage": "vitest run --coverage.enabled --coverage.provider=v8",
105
105
  "test:ci": "npm run test:coverage -- --reporter=default --reporter=junit --outputFile.junit=test-results.xml",
@@ -110,13 +110,16 @@
110
110
  "pretest:verbose": "npm run build:cached",
111
111
  "test:verbose": "vitest run --reporter=verbose",
112
112
  "pretest:watch": "npm run build:cached",
113
- "test:watch": "vitest --project domain --project services --project adapters --project composition --project boundary --project mcp-boundary --project conformance --project evaluation --changed",
113
+ "test:watch": "vitest --project domain --project services --project adapters --project composition --project boundary --project process-boundary --project mcp-boundary --project conformance --project evaluation --changed",
114
114
  "pretest:watch:all": "npm run build:cached",
115
115
  "test:watch:all": "vitest --changed",
116
116
  "typecheck": "tsc --noEmit",
117
117
  "verify:test-temp-hygiene": "npm run build:cached && node scripts/verify-test-temp-hygiene.mjs",
118
118
  "verify:hopper": "npm run verify:fixtures && npm run build:cached && node scripts/verify-real-hopper.mjs",
119
119
  "verify:ghidra": "npm run build:cached && node scripts/verify-real-ghidra.mjs",
120
+ "verify:ghidra:aarch64-jump-table": "npm run build:cached && node scripts/verify-real-ghidra.mjs --aarch64-jump-table",
121
+ "verify:interface-builder": "npm run build:cached && node scripts/verify-interface-builder.mjs",
122
+ "verify:ghidra:cross-format": "npm run build:cached && node scripts/verify-real-ghidra.mjs --cross-format",
120
123
  "verify:ghidra:windows": "npm run build:cached && npm run build:ghidra-windows-fixture && node scripts/verify-real-ghidra-windows.mjs",
121
124
  "verify:browser": "npm run build:cached && node scripts/verify-real-browser.mjs",
122
125
  "verify:electron": "npm run build:cached && node scripts/verify-real-electron.mjs",
@@ -200,6 +203,7 @@
200
203
  "turbo": "2.10.5",
201
204
  "typedoc": "0.28.20",
202
205
  "typescript": "5.9.3",
203
- "vitest": "4.1.10"
206
+ "vitest": "4.1.10",
207
+ "yaml": "2.9.0"
204
208
  }
205
209
  }
@@ -4,21 +4,6 @@ const {
4
4
  createElectronActiveBoundaryPatches,
5
5
  } = require("./electron-active-hook-boundaries.cjs");
6
6
 
7
- const boundedEnvironmentNumber = (name, fallback) => {
8
- const value = Number(process.env[name]);
9
- return Number.isInteger(value)
10
- ? Math.min(20_000, Math.max(1, value))
11
- : fallback;
12
- };
13
-
14
- const MAX_EVENT_NAME_LENGTH = 128;
15
- const MAX_CHANNEL_LENGTH = 1_024;
16
- const MAX_IDENTIFIER_LENGTH = 256;
17
- const MAX_ARGUMENT_SHAPES = 32;
18
- const maxEvents = boundedEnvironmentNumber(
19
- "REA_ELECTRON_ACTIVE_MAX_RUNTIME_EVENTS",
20
- 5_000,
21
- );
22
7
  const ipcEventKinds = new Set([
23
8
  "main-handler-invocation",
24
9
  "main-event-invocation",
@@ -34,13 +19,9 @@ const events = [];
34
19
  let observed = 0;
35
20
  let observedIpc = 0;
36
21
  let observedRuntime = 0;
37
- let truncated = false;
38
22
  let sequence = 0;
39
23
  let correlationSequence = 0;
40
24
 
41
- const boundedString = (value, maximum) =>
42
- typeof value === "string" ? value.slice(0, maximum) : null;
43
-
44
25
  const shape = (value, depth = 0) => {
45
26
  if (depth > 2 || value === null) return value === null ? "null" : "nested";
46
27
  if (Array.isArray(value)) return "array";
@@ -78,7 +59,7 @@ const isAllowedNavigation = (value) => {
78
59
 
79
60
  const processType = () =>
80
61
  typeof process.type === "string" && process.type.length > 0
81
- ? process.type.slice(0, MAX_IDENTIFIER_LENGTH)
62
+ ? process.type
82
63
  : "main";
83
64
 
84
65
  const identity = (value, prefix) => {
@@ -86,9 +67,9 @@ const identity = (value, prefix) => {
86
67
  const id = value.id;
87
68
  const processId = value.pid;
88
69
  return typeof id === "string" || typeof id === "number"
89
- ? `${prefix}:${String(id)}`.slice(0, MAX_IDENTIFIER_LENGTH)
70
+ ? `${prefix}:${String(id)}`
90
71
  : typeof processId === "number"
91
- ? `${prefix}:pid:${String(processId)}`.slice(0, MAX_IDENTIFIER_LENGTH)
72
+ ? `${prefix}:pid:${String(processId)}`
92
73
  : null;
93
74
  };
94
75
 
@@ -96,7 +77,7 @@ const frameIdentity = (event) => {
96
77
  const frame = event?.senderFrame ?? event?.frame;
97
78
  const id = frame?.frameTreeNodeId ?? frame?.routingId ?? frame?.id;
98
79
  return typeof id === "string" || typeof id === "number"
99
- ? `frame:${String(id)}`.slice(0, MAX_IDENTIFIER_LENGTH)
80
+ ? `frame:${String(id)}`
100
81
  : null;
101
82
  };
102
83
 
@@ -104,10 +85,6 @@ const record = (event) => {
104
85
  observed += 1;
105
86
  if (ipcEventKinds.has(event.kind)) observedIpc += 1;
106
87
  else observedRuntime += 1;
107
- if (events.length >= maxEvents) {
108
- truncated = true;
109
- return null;
110
- }
111
88
  const raw = {
112
89
  sequence: ++sequence,
113
90
  correlation_id:
@@ -117,14 +94,12 @@ const record = (event) => {
117
94
  event: null,
118
95
  phase: "observed",
119
96
  channel: null,
120
- channel_truncated: false,
121
97
  direction: null,
122
98
  sender: null,
123
99
  receiver: null,
124
100
  frame: null,
125
101
  target: null,
126
102
  argument_shapes: [],
127
- argument_shapes_truncated: false,
128
103
  result_shape: null,
129
104
  process_type: processType(),
130
105
  source: "electron-active-hook",
@@ -139,27 +114,24 @@ const record = (event) => {
139
114
  : [];
140
115
  events.push({
141
116
  ...raw,
142
- correlation_id: boundedString(raw.correlation_id, MAX_IDENTIFIER_LENGTH),
143
- event: boundedString(raw.event, MAX_EVENT_NAME_LENGTH),
144
- channel: boundedString(raw.channel, MAX_CHANNEL_LENGTH),
145
- channel_truncated:
146
- raw.channel_truncated === true ||
147
- (typeof raw.channel === "string" &&
148
- raw.channel.length > MAX_CHANNEL_LENGTH),
149
- sender: boundedString(raw.sender, MAX_IDENTIFIER_LENGTH),
150
- receiver: boundedString(raw.receiver, MAX_IDENTIFIER_LENGTH),
151
- frame: boundedString(raw.frame, MAX_IDENTIFIER_LENGTH),
152
- target: boundedString(raw.target, MAX_IDENTIFIER_LENGTH),
153
- argument_shapes: argumentShapes
154
- .slice(0, MAX_ARGUMENT_SHAPES)
155
- .map((value) => boundedString(value, 64) ?? "unknown"),
156
- argument_shapes_truncated:
157
- raw.argument_shapes_truncated === true ||
158
- argumentShapes.length > MAX_ARGUMENT_SHAPES,
159
- result_shape: boundedString(raw.result_shape, 64),
160
- process_type: boundedString(raw.process_type, MAX_IDENTIFIER_LENGTH),
161
- artifact_path: boundedString(raw.artifact_path, 16_384),
162
- artifact_sha256: boundedString(raw.artifact_sha256, 64),
117
+ correlation_id: raw.correlation_id,
118
+ event: typeof raw.event === "string" ? raw.event : null,
119
+ channel: typeof raw.channel === "string" ? raw.channel : null,
120
+ sender: typeof raw.sender === "string" ? raw.sender : null,
121
+ receiver: typeof raw.receiver === "string" ? raw.receiver : null,
122
+ frame: typeof raw.frame === "string" ? raw.frame : null,
123
+ target: typeof raw.target === "string" ? raw.target : null,
124
+ argument_shapes: argumentShapes.map((value) =>
125
+ typeof value === "string" ? value : "unknown",
126
+ ),
127
+ result_shape:
128
+ typeof raw.result_shape === "string" ? raw.result_shape : null,
129
+ process_type:
130
+ typeof raw.process_type === "string" ? raw.process_type : null,
131
+ artifact_path:
132
+ typeof raw.artifact_path === "string" ? raw.artifact_path : null,
133
+ artifact_sha256:
134
+ typeof raw.artifact_sha256 === "string" ? raw.artifact_sha256 : null,
163
135
  });
164
136
  return events.at(-1);
165
137
  };
@@ -173,10 +145,7 @@ const recordIpc = (kind, channel, args, details = {}) =>
173
145
  return record({
174
146
  kind,
175
147
  channel: typeof channel === "string" ? channel : null,
176
- argument_shapes: values
177
- .slice(0, MAX_ARGUMENT_SHAPES)
178
- .map((value) => shape(value)),
179
- argument_shapes_truncated: values.length > MAX_ARGUMENT_SHAPES,
148
+ argument_shapes: values.map((value) => shape(value)),
180
149
  ...details,
181
150
  });
182
151
  })();
@@ -496,6 +465,5 @@ globalThis.__reaElectronActiveSnapshot = () => ({
496
465
  observed,
497
466
  observed_ipc: observedIpc,
498
467
  observed_runtime: observedRuntime,
499
- truncated,
500
468
  hook_error: globalThis.__reaElectronActiveHookError === true,
501
469
  });
@@ -36,11 +36,8 @@ UNEXPECTED_DISPLAY_GEOMETRY = 77
36
36
  X11_INPUT_FAILED = 78
37
37
  RUNTIME_DEPENDENCY_UNAVAILABLE = 79
38
38
  X11_SOCKET_DIRECTORY_UNUSABLE = 80
39
- DIAGNOSTIC_PREFIX = "REA_X11_DIAGNOSTIC_V1="
39
+ DIAGNOSTIC_PREFIX = "REA_X11_DIAGNOSTIC="
40
40
  X11_SOCKET_DIRECTORY = Path("/tmp/.X11-unix")
41
- XVFB_STDERR_LIMIT = 16 * 1024
42
-
43
-
44
41
  class AdapterFailure(Exception):
45
42
  def __init__(
46
43
  self,
@@ -48,20 +45,18 @@ class AdapterFailure(Exception):
48
45
  reason: str,
49
46
  message: str,
50
47
  stderr_bytes: int = 0,
51
- stderr_truncated: bool = False,
52
48
  ) -> None:
53
49
  super().__init__(message)
54
50
  self.code = code
55
51
  self.reason = reason
56
52
  self.stderr_bytes = stderr_bytes
57
- self.stderr_truncated = stderr_truncated
58
53
 
59
- def with_stderr(self, capture: BoundedStderr) -> AdapterFailure:
60
- self.stderr_bytes, self.stderr_truncated, _ = capture.snapshot()
54
+ def with_stderr(self, capture: CapturedStderr) -> AdapterFailure:
55
+ self.stderr_bytes, _ = capture.snapshot()
61
56
  return self
62
57
 
63
58
 
64
- class BoundedStderr:
59
+ class CapturedStderr:
65
60
  def __init__(self, stream: object) -> None:
66
61
  self._stream = stream
67
62
  self._retained = bytearray()
@@ -77,15 +72,13 @@ class BoundedStderr:
77
72
  return
78
73
  with self._lock:
79
74
  self._bytes += len(chunk)
80
- remaining = XVFB_STDERR_LIMIT - len(self._retained)
81
- if remaining > 0:
82
- self._retained.extend(chunk[:remaining])
75
+ self._retained.extend(chunk)
83
76
 
84
- def snapshot(self) -> tuple[int, bool, str]:
77
+ def snapshot(self) -> tuple[int, str]:
85
78
  with self._lock:
86
79
  retained = bytes(self._retained)
87
80
  total = self._bytes
88
- return total, total > len(retained), retained.decode("utf-8", "replace")
81
+ return total, retained.decode("utf-8", "replace")
89
82
 
90
83
  def close(self) -> None:
91
84
  self._thread.join(timeout=0.5)
@@ -284,14 +277,11 @@ def diagnostic(
284
277
  operation: str,
285
278
  status: str,
286
279
  failure: AdapterFailure | None = None,
287
- capture: BoundedStderr | None = None,
280
+ capture: CapturedStderr | None = None,
288
281
  ) -> dict[str, object]:
289
282
  mode, read_only, _ = socket_directory_state()
290
- captured_bytes, captured_truncated, _ = (
291
- (0, False, "") if capture is None else capture.snapshot()
292
- )
283
+ captured_bytes, _ = (0, "") if capture is None else capture.snapshot()
293
284
  return {
294
- "schema_version": 1,
295
285
  "component": "hopper_private_display",
296
286
  "operation": operation,
297
287
  "status": status,
@@ -308,9 +298,6 @@ def diagnostic(
308
298
  "xvfb_stderr_bytes": captured_bytes
309
299
  if failure is None
310
300
  else failure.stderr_bytes,
311
- "xvfb_stderr_truncated": captured_truncated
312
- if failure is None
313
- else failure.stderr_truncated,
314
301
  }
315
302
 
316
303
 
@@ -441,8 +428,8 @@ def authorize_display(
441
428
  ) from error
442
429
 
443
430
 
444
- def classify_xvfb_failure(capture: BoundedStderr) -> AdapterFailure:
445
- stderr_bytes, stderr_truncated, text = capture.snapshot()
431
+ def classify_xvfb_failure(capture: CapturedStderr) -> AdapterFailure:
432
+ stderr_bytes, text = capture.snapshot()
446
433
  mode, read_only, directory = socket_directory_state()
447
434
  if read_only is True:
448
435
  return AdapterFailure(
@@ -450,7 +437,6 @@ def classify_xvfb_failure(capture: BoundedStderr) -> AdapterFailure:
450
437
  "socket_directory_read_only",
451
438
  "X11 socket directory is read-only",
452
439
  stderr_bytes,
453
- stderr_truncated,
454
440
  )
455
441
  if directory and mode != "1777":
456
442
  return AdapterFailure(
@@ -458,7 +444,6 @@ def classify_xvfb_failure(capture: BoundedStderr) -> AdapterFailure:
458
444
  "socket_directory_mode",
459
445
  "X11 socket directory mode is not 1777",
460
446
  stderr_bytes,
461
- stderr_truncated,
462
447
  )
463
448
  if mode is not None and not directory:
464
449
  return AdapterFailure(
@@ -466,7 +451,6 @@ def classify_xvfb_failure(capture: BoundedStderr) -> AdapterFailure:
466
451
  "socket_directory_type",
467
452
  "X11 socket path is not a directory",
468
453
  stderr_bytes,
469
- stderr_truncated,
470
454
  )
471
455
  lowered = text.lower()
472
456
  if "error while loading shared libraries" in lowered:
@@ -475,7 +459,6 @@ def classify_xvfb_failure(capture: BoundedStderr) -> AdapterFailure:
475
459
  "missing_library",
476
460
  "Xvfb shared library unavailable",
477
461
  stderr_bytes,
478
- stderr_truncated,
479
462
  )
480
463
  if any(
481
464
  marker in lowered
@@ -490,21 +473,19 @@ def classify_xvfb_failure(capture: BoundedStderr) -> AdapterFailure:
490
473
  "address_collision",
491
474
  "private display address collision",
492
475
  stderr_bytes,
493
- stderr_truncated,
494
476
  )
495
477
  return AdapterFailure(
496
478
  PRIVATE_DISPLAY_UNAVAILABLE,
497
479
  "xvfb_startup_failed",
498
480
  "private X display unavailable",
499
481
  stderr_bytes,
500
- stderr_truncated,
501
482
  )
502
483
 
503
484
 
504
485
  def start_xvfb(
505
486
  session: Path,
506
487
  args: argparse.Namespace,
507
- ) -> tuple[subprocess.Popen[bytes], str, Path, BoundedStderr]:
488
+ ) -> tuple[subprocess.Popen[bytes], str, Path, CapturedStderr]:
508
489
  authority = session / "Xauthority"
509
490
  collision: AdapterFailure | None = None
510
491
  for _ in range(3):
@@ -551,7 +532,7 @@ def start_xvfb(
551
532
  "xvfb_startup_failed",
552
533
  "Xvfb stderr unavailable",
553
534
  )
554
- capture = BoundedStderr(process.stderr)
535
+ capture = CapturedStderr(process.stderr)
555
536
  deadline = time.monotonic() + 2
556
537
  socket = Path(f"/tmp/.X11-unix/X{display_number}")
557
538
  while time.monotonic() < deadline and process.poll() is None:
@@ -3,8 +3,8 @@ name: reverse-engineer-anything
3
3
  description: Reverse engineer native, managed, Electron/JavaScript, packaged, and browser applications with REA. Use shipped-artifact or approved runtime evidence to explain features, compare versions, decompile code, or guide a reconstruction. Skip REA for ordinary source-repository architecture analysis.
4
4
  metadata:
5
5
  version: "23"
6
- tool_count: 116
7
- catalog_digest: "bab5657d9525ec4f798d0a9ef6001412d9c11f77fb0ddc925c7076fd10921dc9"
6
+ tool_count: 114
7
+ catalog_digest: "3e9ab4e05563ea2609b7cf4db67638a79cd8a74188c292718d99a63451d5b9db"
8
8
  ---
9
9
 
10
10
  # REA
@@ -23,13 +23,14 @@ Choose the first tool from the target the user supplied. Do not call
23
23
  - ASAR or extracted JavaScript/Electron tree:
24
24
  `analyze_javascript_application`.
25
25
  - Archive, application package, ZIP/APK/IPA/MSIX/AppX, or DMG:
26
- `open_binary` with the supplied local path, then `inspect_artifact` or
27
- `inventory_artifact` (both operate on the active target and accept no path).
26
+ `open_binary` with the supplied local path; use `inspect_artifact` when its
27
+ graph and findings help answer the question.
28
28
  - Managed PE/CLI assembly: `inspect_managed_artifact`.
29
29
  - User-owned browser page already open: `list_browser_targets`.
30
30
  - User-owned Electron runtime already open: `list_electron_targets`.
31
31
  - Native executable, library, or analysis database: `open_binary`, then
32
- `binary_overview`.
32
+ use focused analysis tools directly; call `binary_overview` when metadata or
33
+ inventory context is useful.
33
34
 
34
35
  If the app is missing, ask which app to inspect. Resolve a human-readable app
35
36
  name to one clear installed artifact when possible; ask only when matches are
@@ -43,16 +44,48 @@ is unavailable.
43
44
 
44
45
  ## Work summary-first
45
46
 
46
- Start with the default summary projection. Do not repeat an identical tool call.
47
- Do not fetch full Evidence or a full application graph unless a specific claim
48
- requires detail absent from the summary. For JavaScript graphs, follow the
49
- paged resource URIs returned by the summary and fetch only the relevant page.
47
+ Start with the default result and use its inline Evidence and graph context.
48
+ Do not repeat an identical tool call. Make a focused follow-up only when the
49
+ returned result leaves a specific question unanswered.
50
50
 
51
51
  Every conclusion must distinguish observations, inferences, and unknowns. Cite
52
52
  Evidence IDs, preserve limitations and incomplete coverage, and never imply
53
53
  that static analysis observed execution. Ask for approval only where a tool or
54
54
  policy requires it; approval never broadens a different authority boundary.
55
55
 
56
+ ## Plan broader investigations
57
+
58
+ For requests that span multiple features or subsystems, use a staged workflow:
59
+
60
+ 1. Turn the request into a checklist of questions and the evidence each answer
61
+ needs. Resolve target identity and constraints from the conversation and
62
+ workspace before asking for information again.
63
+ 2. Inspect the current REA session, artifact identity, saved analysis database,
64
+ bookmarks, and prior evidence. Reuse matching state; do not open duplicate
65
+ sessions or repeat identical analysis.
66
+ 3. Start with the smallest useful overview or inventory. Follow each question
67
+ from its entry point through relevant data and state changes to its result.
68
+ Batch related operations around a specific hypothesis, then expand only when
69
+ the returned evidence leaves a concrete gap.
70
+ 4. Inspect relevant packaged resources and configuration alongside code when
71
+ they affect the question. Use format-aware inventory and parsers; do not
72
+ infer behavior from filenames, strings, or layout alone.
73
+ 5. Corroborate a conclusion with the evidence type it requires. Use runtime
74
+ observation or controlled replay only when static evidence cannot answer the
75
+ question and the required authority is available.
76
+ 6. Decompose work into independent questions. When parallel workers are
77
+ available and the questions do not depend on one another, assign distinct
78
+ scopes, point workers to existing evidence, and ask them to return sources,
79
+ conclusions, and unresolved gaps. Otherwise, work sequentially.
80
+ 7. Keep a concise finding ledger linking each conclusion to Evidence IDs,
81
+ confidence/evidence type, search boundary, and remaining unknowns. Update
82
+ the shared index or investigation report so later passes can reuse results.
83
+
84
+ Before finishing, revisit the original checklist. Mark each question as
85
+ answered, partially answered, or unresolved based on its evidence; keep
86
+ bounded negative searches bounded, and do not describe a broad investigation
87
+ as complete while required questions remain open.
88
+
56
89
  ## Read only the relevant guide
57
90
 
58
91
  - Native binaries, managed assemblies, archives, and extraction:
@@ -68,9 +101,11 @@ policy requires it; approval never broadens a different authority boundary.
68
101
 
69
102
  ## Readiness and setup
70
103
 
71
- If REA tools are available, use them directly; do not run `doctor` on every
72
- task. If the MCP server is unavailable or registration is reported stale, run
73
- `npx -y rea-agents@latest doctor`. Propose
104
+ The readiness rule is conditional: when REA tools are available and their
105
+ registration is not known to be stale, proceed directly; do not run `doctor`
106
+ before every task. Run `npx -y rea-agents@latest doctor` when the MCP server or
107
+ required provider is unavailable, registration is reported stale, or the user
108
+ asks for an environment diagnosis. Propose
74
109
  `npx -y rea-agents@latest setup` only when doctor identifies an alignment or
75
110
  provider problem. Show the exact plan and obtain approval before setup writes
76
111
  configuration or installs Hopper. Restart the agent after MCP registration
@@ -1,9 +1,11 @@
1
1
  # Evidence, comparison, and verification workflows
2
2
 
3
- REA results are Evidence v2. Cite evidence IDs and preserve authority,
4
- limitations, coverage, and residual unknowns. Read the smallest deterministic
5
- page that answers the question. Continue from a returned next offset while
6
- `has_more` is true only when exhaustive coverage matters.
3
+ REA returns Evidence with each result. Read that result directly, cite its
4
+ Evidence ID when another tool or your explanation needs a stable reference, and
5
+ preserve authority, limitations, coverage, and residual unknowns. If a result
6
+ is incomplete or paginated, continue only when the remaining data matters to
7
+ the task; do not fetch a bundle or resource merely to read a result already
8
+ returned inline.
7
9
 
8
10
  Use `record_unknown` only with explicit approval and name the authority or
9
11
  environment still required. Supply supporting and contradicting evidence IDs.
@@ -1,10 +1,10 @@
1
1
  # JavaScript and Electron application artifacts
2
2
 
3
- Use `analyze_javascript_application` for an operator-supplied ASAR or extracted
4
- tree beneath an approved investigation root. Every call requires `approved:
5
- true`; source-map contents require separate approval. Keep the default summary.
6
- Use its counts, roots, node kinds, top findings, coverage, unknowns, and graph
7
- page URIs before requesting more data.
3
+ Use `analyze_javascript_application` directly on the operator-supplied ASAR or
4
+ extracted tree. The complete result, graph, and Evidence context are returned
5
+ inline. Source-map contents are part of the static analysis. Start from its
6
+ findings, coverage, unknowns, and graph context, then make a focused follow-up
7
+ only when a specific question remains unanswered.
8
8
 
9
9
  BrowserWindow preferences, preload and contextBridge surfaces, IPC
10
10
  registrations, utility processes, and native binding requests are static syntax
@@ -15,8 +15,8 @@ registration, defaults, or policy enforcement from static analysis.
15
15
 
16
16
  Use `trace_application_feature` on existing application Evidence for one
17
17
  literal node ID, route, string, API, IPC channel, module, or native export.
18
- Choose a direction and finite bounds. Link Hopper or Ghidra Evidence only when
19
- the exact artifact digest matches.
18
+ Choose a direction and include the complete application Evidence inline. Include
19
+ Hopper or Ghidra Evidence only when its artifact digest matches exactly.
20
20
 
21
21
  For version comparison, analyze each version once, then call
22
22
  `compare_application_versions`. Accept only its digest, source-map, structural
@@ -27,9 +27,9 @@ opposite-side coverage; otherwise report unknown.
27
27
  When the question asks how one exact exported callable's returned object shape
28
28
  changed, analyze each version once and then call
29
29
  `compare_javascript_export_shapes` with explicit module paths and export names.
30
- Use the Evidence IDs returned by the two analysis calls. Accept variant pairing
31
- only through the tool's unique exact literal discriminant. Cite the comparison
32
- Evidence and report JSON Pointer changes; dynamic values, ambiguous variants,
33
- and incomplete parent-property coverage stay unknown. This is static inference,
34
- not runtime behavior. Use `run_controlled_replay` separately only when the user
35
- needs approved runtime semantics.
30
+ Include the complete Evidence records from both analysis calls. Accept variant
31
+ pairing only through the tool's unique exact literal discriminant. Cite the
32
+ comparison Evidence and report JSON Pointer changes; dynamic values, ambiguous
33
+ variants, and incomplete parent-property coverage stay unknown. This is static
34
+ inference, not runtime behavior. Use `run_controlled_replay` separately only
35
+ when the user needs approved runtime semantics.
@@ -2,8 +2,9 @@
2
2
 
3
3
  ## Native targets
4
4
 
5
- After `open_binary`, use `binary_overview` once and narrow around the requested
6
- feature. Prefer literal search, names, decompilation, callers, callees, and
5
+ After `open_binary`, use focused search, procedure, or function tools directly.
6
+ Use `binary_overview` when target metadata or inventory context helps answer the
7
+ question. Prefer literal search, names, decompilation, callers, callees, and
7
8
  cross-references. Addresses and recovered pseudocode are analysis observations,
8
9
  not original source. Provider unavailability and unsupported metadata remain
9
10
  unknown rather than false.
@@ -23,13 +24,16 @@ parser and must not become an implicit setup dependency.
23
24
 
24
25
  ## Packages and extraction
25
26
 
26
- Call `inventory_artifact` before extraction for application bundles, archives,
27
- ZIP/APK/IPA/MSIX/AppX, ASAR, or DMG inputs. Continue deterministic occurrence
28
- pages from the returned offset only when needed. Cite graph manifest IDs.
27
+ Use `inspect_artifact` for application bundles, archives, ZIP/APK/IPA/MSIX/AppX,
28
+ ASAR, or DMG inputs when the artifact graph and findings help answer the
29
+ question. It returns the complete artifact graph inline. Cite graph manifest
30
+ IDs when using them.
29
31
 
30
- `extract_artifact` requires explicit approval, an absent absolute output root,
31
- and selected occurrence IDs. Never extract every entry implicitly. Symlinks and
32
- encrypted entries are inventory facts, not extractable files.
32
+ Use `extract_artifact` when materialized files are needed. It takes no arguments
33
+ and materializes all regular files into a fresh temporary directory chosen by
34
+ REA. Symlinks and encrypted entries are inventory facts, not extractable files.
35
+ The operation still requires the filesystem-write permission grant; callers do
36
+ not choose the destination.
33
37
 
34
38
  Native DMG traversal is macOS-only, read-only, and requires both operator policy
35
39
  and `native_mount_approved: true`; without both, retain the root-hash-only result.