rea-agents 3.2.0 → 4.0.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.
- package/README.md +183 -332
- package/bridge/ghidra/ReaGhidraBridge.java +561 -74
- package/bridge/hopper_bridge.py +70 -27
- package/bridge/native/ReaNativeUI.swift +157 -0
- package/dist/application/AnalysisContextQueries.js +19 -5
- package/dist/application/AnalysisSnapshotCache.js +30 -11
- package/dist/application/AppleAssetCatalogAnalysis.js +171 -0
- package/dist/application/ArtifactExtractionDestination.js +0 -12
- package/dist/application/ArtifactGraphConstruction.js +44 -11
- package/dist/application/ArtifactInventory/classify.js +7 -15
- package/dist/application/ArtifactInventory/hash.js +4 -2
- package/dist/application/ArtifactInventory/policy.js +2 -17
- package/dist/application/ArtifactInventory/reader.js +3 -3
- package/dist/application/ArtifactInventory/scanCanonical.js +2 -2
- package/dist/application/ArtifactInventory/scanReader.js +12 -4
- package/dist/application/ArtifactInventory/types.js +0 -3
- package/dist/application/BinarySession.js +28 -43
- package/dist/application/BinarySessionExecution.js +37 -1
- package/dist/application/BinaryTargetResolver.js +50 -4
- package/dist/application/BrowserEvidence.js +36 -7
- package/dist/application/BrowserObservationService.js +17 -44
- package/dist/application/BrowserScenarioCaptureService.js +2 -35
- package/dist/application/BrowserScenarioEvidence.js +13 -9
- package/dist/application/CapabilityClientRequirements.js +2 -11
- package/dist/application/CapabilityInventory.js +21 -35
- package/dist/application/ClientConfigurationDocument.js +84 -7
- package/dist/application/ClientRegistrationIdentity.js +32 -0
- package/dist/application/ClientRegistrationStatus.js +59 -6
- package/dist/application/DirectAnalysis.js +37 -58
- package/dist/application/DirectAnalysisStatus.js +4 -4
- package/dist/application/Doctor.js +89 -80
- package/dist/application/DoctorDiagnostics.js +2 -26
- package/dist/application/DoctorScope.js +8 -14
- package/dist/application/ElectronActiveEvidence.js +10 -27
- package/dist/application/ElectronActiveObservationService.js +9 -36
- package/dist/application/ElectronBoundaryAnalysis.js +2 -0
- package/dist/application/ElectronBoundaryGraphNative.js +1 -1
- package/dist/application/ElectronEvidence.js +8 -3
- package/dist/application/ElectronObservationService.js +9 -25
- package/dist/application/EnhancedLiteralTracing.js +4 -8
- package/dist/application/EnhancedTools.js +15 -35
- package/dist/application/FilesystemSnapshot.js +7 -8
- package/dist/application/JavaScriptApplicationEvidenceGraph.js +2 -1
- package/dist/application/JavaScriptApplicationWorkflowService.js +31 -7
- package/dist/application/JavaScriptArtifactAnalysis.js +6 -4
- package/dist/application/JavaScriptArtifactFiles.js +5 -0
- package/dist/application/JavaScriptArtifactPathResolution.js +179 -47
- package/dist/application/JavaScriptRuntimeObservationEvidence.js +6 -3
- package/dist/application/JavaScriptRuntimeObservationService.js +9 -25
- package/dist/application/JavaScriptRuntimeReconciliationService.js +45 -4
- package/dist/application/JavaScriptSemanticGraphAsyncProjection.js +11 -0
- package/dist/application/JavaScriptSemanticGraphChildProcessProjection.js +11 -0
- package/dist/application/JavaScriptSemanticGraphDataProjection.js +11 -0
- package/dist/application/JavaScriptSemanticGraphFlowProjection.js +14 -5
- package/dist/application/JsonFiles.js +1 -1
- package/dist/application/LazyAnalysisProvider.js +27 -6
- package/dist/application/ManagedMemberComparisonService.js +19 -6
- package/dist/application/NativeApiInspection.js +2 -0
- package/dist/application/NativeCallRoutes.js +72 -0
- package/dist/application/NativeDispatchMetadataInspection.js +33 -0
- package/dist/application/NativeUiActionTrace.js +73 -49
- package/dist/application/NativeValueTrace.js +320 -0
- package/dist/application/ProcessCaptureCapability.js +32 -5
- package/dist/application/ProcessCaptureEnvironment.js +9 -26
- package/dist/application/ProcessCaptureError.js +1 -5
- package/dist/application/ProcessCaptureJournal.js +3 -40
- package/dist/application/ProcessCaptureLifecycle.js +102 -111
- package/dist/application/ProcessCli.js +18 -25
- package/dist/application/ProcessEvidence.js +5 -7
- package/dist/application/ProcessFilesystemEffects.js +36 -0
- package/dist/application/ProcessHarness.js +41 -120
- package/dist/application/ProcessNormalization.js +2 -17
- package/dist/application/ProcessScenarioRuntimeValidation.js +76 -0
- package/dist/application/ReferenceSourceImport.js +3 -4
- package/dist/application/Setup.js +236 -84
- package/dist/application/SetupClientConfiguration.js +14 -9
- package/dist/application/SetupPlan.js +138 -86
- package/dist/application/SetupSkill.js +0 -1
- package/dist/application/SupportedClients.js +102 -21
- package/dist/application/Uninstall.js +31 -20
- package/dist/application/Update.js +93 -0
- package/dist/application/UpdateMaintenance.js +108 -0
- package/dist/application/UpdateRuntime.js +126 -0
- package/dist/application/runtime.js +13 -2
- package/dist/artifacts/ArtifactPaths.js +6 -8
- package/dist/artifacts/ArtifactProvider.js +94 -41
- package/dist/artifacts/AsarArtifactReader.js +19 -4
- package/dist/artifacts/KeyedArchiveReader.js +110 -0
- package/dist/artifacts/MachOSliceArtifactReader.js +53 -5
- package/dist/artifacts/ZipArtifactReader.js +18 -1
- package/dist/browser/BrowserScenarioSecrets.js +28 -1
- package/dist/browser/CdpBrowserProvider.js +36 -15
- package/dist/browser/CdpCaptureDocuments.js +22 -8
- package/dist/browser/CdpCaptureEventHandlers.js +14 -5
- package/dist/browser/CdpCaptureEventHelpers.js +13 -0
- package/dist/browser/CdpCaptureEvents.js +10 -1
- package/dist/browser/CdpElectronInspection.js +5 -10
- package/dist/browser/CdpElectronProvider.js +1 -5
- package/dist/browser/CdpElectronScripts.js +1 -1
- package/dist/browser/CdpEndpoint.js +3 -2
- package/dist/browser/CdpObservationSession.js +14 -10
- package/dist/browser/CdpPageCapture.js +1 -1
- package/dist/browser/CdpPageCaptureScripts.js +1 -1
- package/dist/browser/CdpSafeMetadata.js +5 -4
- package/dist/browser/CdpScreenshot.js +16 -5
- package/dist/browser/CdpTargetSession.js +25 -4
- package/dist/browser/CdpWebMcpDiscovery.js +93 -20
- package/dist/browser/JavaScriptRuntimeScope.js +28 -2
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +9 -8
- package/dist/browser/PlaywrightElectronActiveActions.js +3 -10
- package/dist/browser/PlaywrightElectronActiveProvider.js +5 -5
- package/dist/browser/PlaywrightScenarioActions.js +1 -1
- package/dist/browser/PlaywrightScenarioArtifacts.js +13 -25
- package/dist/browser/PlaywrightScenarioBrowser.js +28 -25
- package/dist/browser/PlaywrightScenarioEvents.js +82 -93
- package/dist/browser/PlaywrightScenarioSession.js +27 -123
- package/dist/browser/PngVisualDiff.js +22 -3
- package/dist/browser/V8InspectorCaptureProjection.js +7 -1
- package/dist/browser/V8InspectorProvider.js +60 -7
- package/dist/browser/WebSourceMapFetcher.js +99 -53
- package/dist/cli/artifactCommands.js +56 -12
- package/dist/cli/coreAnalysisCommands.js +110 -0
- package/dist/cli/managedCommands.js +1 -31
- package/dist/cli/setupCommands.js +16 -14
- package/dist/cli/utilityCommands.js +61 -4
- package/dist/cli.js +5 -7
- package/dist/cliApplicationCommands.js +0 -83
- package/dist/cliBrowserAdvancedCommands.js +7 -11
- package/dist/cliBrowserCommands.js +15 -23
- package/dist/cliBrowserContext.js +3 -24
- package/dist/cliBrowserScenarioCommands.js +2 -10
- package/dist/cliCommandNames.js +82 -7
- package/dist/cliElectronCommands.js +10 -36
- package/dist/cliJavaScriptRuntimeCommands.js +6 -30
- package/dist/cliJsonInput.js +4 -2
- package/dist/cliLogging.js +16 -7
- package/dist/cliObservationOptions.js +1 -1
- package/dist/cliOutput.js +2 -4
- package/dist/cliProcessCommands.js +6 -33
- package/dist/cliSetup.js +90 -160
- package/dist/config/environment.js +2 -78
- package/dist/config/parseConfig.js +18 -109
- package/dist/config/parsers.js +0 -23
- package/dist/contracts/applicationToolContracts.js +1 -118
- package/dist/contracts/artifactToolContracts.js +11 -19
- package/dist/contracts/browserScenarioToolContracts.js +1 -5
- package/dist/contracts/browserToolContracts.js +9 -16
- package/dist/contracts/electronToolContracts.js +5 -6
- package/dist/contracts/enhancedInputs.js +3 -2
- package/dist/contracts/errorSchemas.js +16 -40
- package/dist/contracts/functionWorkflowToolContracts.js +2 -2
- package/dist/contracts/javascriptApplicationWorkflowExamples.js +2 -2
- package/dist/contracts/javascriptRuntimeObservationToolContracts.js +4 -4
- package/dist/contracts/javascriptRuntimeReconciliationExample.js +1 -1
- package/dist/contracts/managedToolContracts.js +7 -4
- package/dist/contracts/managedWorkflowExamples.js +0 -22
- package/dist/contracts/managedWorkflowToolContracts.js +16 -31
- package/dist/contracts/nativeToolContracts.js +9 -0
- package/dist/contracts/promptContracts.js +6 -6
- package/dist/contracts/sessionToolSchemas.js +3 -3
- package/dist/contracts/toolContractExamples.js +4 -3
- package/dist/contracts/toolContracts.js +18 -7
- package/dist/contracts/toolEffects.js +34 -21
- package/dist/contracts/toolOutputSchemaGroups.js +18 -5
- package/dist/contracts/toolOutputSchemaPrimitives.js +9 -6
- package/dist/contracts/toolSchemaMetadata.js +5 -8
- package/dist/doctorRuntime.js +0 -41
- package/dist/domain/analysisErrorPresentation.js +4 -28
- package/dist/domain/analysisErrorProjection.js +33 -50
- package/dist/domain/analysisProfile.js +1 -1
- package/dist/domain/analysisSnapshot.js +77 -3
- package/dist/domain/androidApplication.js +5 -4
- package/dist/domain/appleApplication.js +5 -4
- package/dist/domain/appleAssetCatalog.js +127 -0
- package/dist/domain/artifactComparison.js +7 -11
- package/dist/domain/artifactGraph.js +8 -6
- package/dist/domain/artifactInspection.js +13 -12
- package/dist/domain/binaryTarget.js +23 -9
- package/dist/domain/browserObservation.js +43 -24
- package/dist/domain/browserObservationSchemas.js +2 -1
- package/dist/domain/browserScenario.js +7 -107
- package/dist/domain/browserScenarioCapture.js +0 -1
- package/dist/domain/browserScenarioCaptureValues.js +5 -4
- package/dist/domain/browserScenarioDiff.js +1 -3
- package/dist/domain/browserScenarioValues.js +16 -107
- package/dist/domain/bundleComparison.js +18 -17
- package/dist/domain/callPathSchemas.js +17 -7
- package/dist/domain/changedBehavior.js +2 -3
- package/dist/domain/comparisonSemantics.js +19 -0
- package/dist/domain/completionLedgerGeneration.js +3 -2
- package/dist/domain/conformancePackage.js +2 -1
- package/dist/domain/conformanceTrustGate.js +3 -5
- package/dist/domain/customProtocolCapture.js +2 -2
- package/dist/domain/digests.js +30 -0
- package/dist/domain/dosMz.js +83 -0
- package/dist/domain/electronActiveObservation.js +7 -5
- package/dist/domain/electronObservation.js +3 -2
- package/dist/domain/electronStaticAnalysisNative.js +15 -6
- package/dist/domain/emptyArraySchema.js +3 -0
- package/dist/domain/errors.js +10 -28
- package/dist/domain/evidence.js +5 -3
- package/dist/domain/evidenceCompletionLedger.js +3 -2
- package/dist/domain/functionComparisonNormalization.js +24 -18
- package/dist/domain/functionComparisonResults.js +3 -7
- package/dist/domain/functionComparisonSchemas.js +3 -2
- package/dist/domain/hopperValues.js +108 -8
- package/dist/domain/javascriptApplicationAnalysis.js +4 -7
- package/dist/domain/javascriptApplicationEvidenceSchemas.js +4 -3
- package/dist/domain/javascriptApplicationGraphSchemas.js +8 -7
- package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +9 -7
- package/dist/domain/javascriptApplicationVersionItems.js +12 -18
- package/dist/domain/javascriptAstValues.js +4 -0
- package/dist/domain/javascriptExportShapeComparison.js +1 -6
- package/dist/domain/javascriptExportShapeComparisonSchemas.js +6 -10
- package/dist/domain/javascriptExportShapeVariants.js +15 -2
- package/dist/domain/javascriptFeatureTraceSchemas.js +8 -7
- package/dist/domain/javascriptRuntimeObservation.js +14 -2
- package/dist/domain/javascriptRuntimeReconciliationMatching.js +8 -0
- package/dist/domain/javascriptRuntimeReconciliationParsing.js +4 -2
- package/dist/domain/javascriptRuntimeReconciliationResult.js +6 -4
- package/dist/domain/javascriptRuntimeReconciliationRuntime.js +15 -4
- package/dist/domain/javascriptRuntimeReconciliationSchemas.js +19 -18
- package/dist/domain/javascriptRuntimeStaticCandidates.js +18 -6
- package/dist/domain/javascriptSemanticAnalysis.js +57 -19
- package/dist/domain/javascriptSemanticAsyncEffects.js +39 -40
- package/dist/domain/javascriptSemanticCalls.js +46 -27
- package/dist/domain/javascriptSemanticChildProcesses.js +43 -50
- package/dist/domain/javascriptSemanticDataEffectHelpers.js +91 -18
- package/dist/domain/javascriptSemanticDataEffects.js +22 -10
- package/dist/domain/javascriptSemanticGraphSchemas.js +8 -6
- package/dist/domain/javascriptSemanticObjects.js +13 -3
- package/dist/domain/javascriptSemanticProjection.js +144 -38
- package/dist/domain/javascriptSemanticPromises.js +14 -27
- package/dist/domain/javascriptSemanticQuerySchemas.js +6 -9
- package/dist/domain/javascriptSemanticResources.js +2 -5
- package/dist/domain/javascriptSemanticState.js +4 -0
- package/dist/domain/javascriptSemanticTraceSchemas.js +2 -1
- package/dist/domain/javascriptSemanticTraversal.js +13 -5
- package/dist/domain/javascriptSemanticValues.js +10 -9
- package/dist/domain/javascriptSourceParser.js +5 -1
- package/dist/domain/javascriptStaticAnalysisCalls.js +8 -5
- package/dist/domain/javascriptStaticAnalysisHelpers.js +16 -7
- package/dist/domain/keyedArchive.js +181 -0
- package/dist/domain/managedApplicationGraph.js +4 -3
- package/dist/domain/managedArtifact.js +2 -1
- package/dist/domain/managedMemberComparison.js +18 -13
- package/dist/domain/managedMemberComparisonCoverage.js +2 -1
- package/dist/domain/managedMemberComparisonItems.js +27 -7
- package/dist/domain/managedMemberComparisonMatch.js +22 -6
- package/dist/domain/managedNativeVerificationMatch.js +2 -2
- package/dist/domain/managedNativeVerificationSchemas.js +7 -5
- package/dist/domain/managedReconstruction.js +6 -5
- package/dist/domain/nativeApiBoundary.js +7 -0
- package/dist/domain/nativeDataType.js +51 -0
- package/dist/domain/nativeInspection.js +0 -1
- package/dist/domain/nativeInstruction.js +82 -0
- package/dist/domain/nativeInvestigationGraph.js +9 -5
- package/dist/domain/nativeUiObservation.js +123 -0
- package/dist/domain/nativeValueFlow.js +17 -0
- package/dist/domain/nativeValueTrace.js +64 -0
- package/dist/domain/objcSwiftMetadata.js +39 -0
- package/dist/domain/peInspection.js +1 -0
- package/dist/domain/processCapture.js +5 -55
- package/dist/domain/processCaptureExample.js +0 -9
- package/dist/domain/processCaptureValidation.js +13 -144
- package/dist/domain/processComparison.js +3 -25
- package/dist/domain/processObservation.js +0 -29
- package/dist/domain/processScenario.js +28 -228
- package/dist/domain/processTraceDimensionProjection.js +0 -15
- package/dist/domain/processTraceEvaluation.js +0 -6
- package/dist/domain/protocolCapture.js +8 -36
- package/dist/domain/reconstructionCoverage.js +3 -2
- package/dist/domain/reconstructionObligationLedgerSchemas.js +4 -12
- package/dist/domain/reconstructionReadinessSchemas.js +4 -3
- package/dist/domain/reconstructionVerification.js +2 -1
- package/dist/domain/reconstructionVerificationSchemas.js +6 -13
- package/dist/domain/referenceSourceClassification.js +0 -110
- package/dist/domain/referenceSourceGraph.js +15 -5
- package/dist/domain/residualUnknown.js +3 -2
- package/dist/domain/runtimeIdentification.js +6 -5
- package/dist/domain/sourceMapContents.js +5 -0
- package/dist/domain/sourceToBundleComparison.js +3 -10
- package/dist/domain/sourceToBundleComparisonSchemas.js +7 -6
- package/dist/domain/sourceToBundleSignals.js +9 -3
- package/dist/domain/staticRuntimeCorrelation.js +5 -11
- package/dist/domain/webBundleAnalysis.js +17 -9
- package/dist/domain/webBundleAnalyzer.js +1 -1
- package/dist/domain/webCaptureDiff.js +5 -11
- package/dist/domain/webCaptureDiffSchemas.js +2 -1
- package/dist/domain/webMcpDiscovery.js +2 -1
- package/dist/dotnet/ManagedMemberInspectorCore.js +15 -7
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +57 -40
- package/dist/dotnet/ManagedMemberRows.js +2 -0
- package/dist/dotnet/ManagedMethodBodyReader.js +15 -8
- package/dist/dotnet/ManagedPeReader.js +2 -0
- package/dist/generatedMcpToolCatalog.js +1 -1
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +15 -5
- package/dist/ghidra/GhidraClient.js +38 -8
- package/dist/ghidra/GhidraFunctionValues.js +56 -20
- package/dist/ghidra/GhidraInstallation.js +7 -4
- package/dist/ghidra/GhidraInventoryValues.js +44 -9
- package/dist/ghidra/GhidraLauncher.js +18 -3
- package/dist/ghidra/GhidraProvider.js +23 -2
- package/dist/ghidra/GhidraRequestQueue.js +45 -4
- package/dist/ghidra/GhidraSessionValues.js +5 -0
- package/dist/hopper/HopperAnalysisProfile.js +2 -0
- package/dist/hopper/HopperProvider.js +29 -6
- package/dist/hopper/HopperTargetLease.js +18 -4
- package/dist/logger.js +0 -13
- package/dist/main/messages.js +0 -1
- package/dist/main/reload.js +3 -32
- package/dist/main/shutdown.js +1 -2
- package/dist/main/transport.js +0 -17
- package/dist/main.js +0 -10
- package/dist/native/AppleDispatchMetadata.js +582 -0
- package/dist/native/AppleObjcProtocols.js +88 -0
- package/dist/native/AppleSwiftVtables.js +86 -0
- package/dist/native/CommandRunner.js +1 -1
- package/dist/native/NativeHostCapabilities.js +23 -0
- package/dist/native/NativeMacOSProvider.js +61 -9
- package/dist/native/NativeMachoInspection.js +39 -6
- package/dist/native/NativeUiHelperRuntime.js +42 -0
- package/dist/native/NativeUiObservation.js +174 -0
- package/dist/native/parsers/codesign.js +4 -1
- package/dist/native/parsers/dyldInfo.js +51 -25
- package/dist/native/parsers/lipo.js +13 -4
- package/dist/native/parsers/otool.js +84 -39
- package/dist/native/parsers/plist.js +2 -1
- package/dist/process/ExecFileOutput.js +5 -1
- package/dist/process/ProcessOwnership.js +69 -33
- package/dist/process/ProcessOwnershipObservation.js +31 -12
- package/dist/process/ProviderProcess.js +4 -2
- package/dist/reference/ReferenceSourceReaderEntries.js +48 -31
- package/dist/reference/ReferenceSourceReaderErrors.js +24 -0
- package/dist/reference/ReferenceSourceReaderFile.js +11 -5
- package/dist/reference/ReferenceSourceReaderValidate.js +22 -8
- package/dist/server/createServer.js +7 -62
- package/dist/server/registerApplicationTools/helpers.js +2 -9
- package/dist/server/registerApplicationTools.js +0 -4
- package/dist/server/registerArtifactComparisonTool.js +1 -1
- package/dist/server/registerBrowserScenarioTool.js +4 -2
- package/dist/server/registerBrowserTools.js +7 -7
- package/dist/server/registerBundleComparisonTool.js +1 -1
- package/dist/server/registerCloseLifecycleTool.js +1 -1
- package/dist/server/registerElectronTools.js +10 -4
- package/dist/server/registerEnhancedTools.js +20 -12
- package/dist/server/registerEvidenceTools.js +4 -28
- package/dist/server/registerFunctionComparisonTool.js +1 -1
- package/dist/server/registerInvestigationTools.js +6 -6
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +2 -2
- package/dist/server/registerManagedTools.js +28 -14
- package/dist/server/registerManagedWorkflowTools.js +0 -2
- package/dist/server/registerProcessComparisonTool.js +1 -3
- package/dist/server/registerSessionRecordTools.js +9 -9
- package/dist/server/registerSessionStatusTool.js +1 -1
- package/dist/server/registerSessionTools.js +28 -57
- package/dist/server/sessionAvailabilityPolicy.js +2 -3
- package/dist/server/sessionToolPolicies.js +0 -4
- package/dist/server/toolResult.js +8 -10
- package/package.json +32 -22
- package/skills/reverse-engineer-anything/SKILL.md +15 -11
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +3 -2
- package/skills/reverse-engineer-anything/references/javascript-applications.md +3 -2
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +8 -6
- package/skills/reverse-engineer-anything/references/runtime-observation.md +15 -11
- package/dist/application/CommandShimReplay.js +0 -152
- package/dist/application/ConfiguredRoots.js +0 -19
- package/dist/application/InstrumentedJavaScriptReplayHost.js +0 -36
- package/dist/application/JavaScriptReplayPermission.js +0 -16
- package/dist/application/JavaScriptReplayPlanning.js +0 -207
- package/dist/application/JavaScriptReplayService.js +0 -274
- package/dist/application/LoopbackReplay.js +0 -389
- package/dist/application/LoopbackReplayRecorder.js +0 -129
- package/dist/application/ManagedRuntimeCorrelationService.js +0 -104
- package/dist/application/NodeRuntimeCharacterizationService.js +0 -191
- package/dist/application/PermissionAuthority.js +0 -268
- package/dist/application/PermissionConfiguration.js +0 -26
- package/dist/application/PermissionFailure.js +0 -5
- package/dist/application/ProcessCaptureAuthority.js +0 -24
- package/dist/application/ProcessCapturePermission.js +0 -13
- package/dist/application/ProcessCheckpoints.js +0 -178
- package/dist/application/ProcessReactiveCoordinator.js +0 -223
- package/dist/application/ProcessReactiveEffects.js +0 -153
- package/dist/application/ProcessReactiveHarness.js +0 -106
- package/dist/application/ProcessReactiveObservations.js +0 -105
- package/dist/application/ProjectPermissionStore.js +0 -199
- package/dist/application/RuntimeExecutableDiagnostics.js +0 -198
- package/dist/application/Upgrade.js +0 -134
- package/dist/browser/SensitiveTextCapture.js +0 -8
- package/dist/cliPolicyCommands.js +0 -185
- package/dist/config/browserScenario.js +0 -77
- package/dist/config/electronAutomation.js +0 -35
- package/dist/config/javascriptReplay.js +0 -41
- package/dist/config/managedRuntime.js +0 -25
- package/dist/config/passiveObservation.js +0 -87
- package/dist/config/permissions.js +0 -23
- package/dist/config/processCapture.js +0 -47
- package/dist/contracts/replayMachineExample.js +0 -37
- package/dist/domain/javascriptExportInstrumentation.js +0 -95
- package/dist/domain/javascriptReplay.js +0 -360
- package/dist/domain/managedRuntimeCorrelation.js +0 -181
- package/dist/domain/nodeRuntimeCharacterization.js +0 -63
- package/dist/domain/permissionPolicy.js +0 -176
- package/dist/domain/processCaptureReactiveSchema.js +0 -68
- package/dist/domain/processCaptureReactiveValidation.js +0 -180
- package/dist/domain/processReactiveCheckpointDataflow.js +0 -32
- package/dist/domain/processReactiveMatching.js +0 -196
- package/dist/domain/processReactiveRuntime.js +0 -116
- package/dist/domain/processReactiveScenario.js +0 -296
- package/dist/domain/processReactiveScenarioPreflight.js +0 -95
- package/dist/domain/processReactiveTransition.js +0 -187
- package/dist/domain/replayMachine.js +0 -320
- package/dist/domain/replayMachineRun.js +0 -168
- package/dist/domain/replayMachineRuntime.js +0 -296
- package/dist/domain/replayMachineValues.js +0 -84
- package/dist/domain/runtimeCharacterization.js +0 -84
- package/dist/replay/JavaScriptReplayWorker.js +0 -382
- package/dist/replay/JavaScriptReplayWorkerTypes.js +0 -1
- package/dist/replay/LinuxJavaScriptReplayRunner.js +0 -216
- package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -121
- package/dist/replay/LinuxRuntimeClosure.js +0 -44
- package/dist/replay/LinuxSeccompPolicy.js +0 -40
- package/dist/replay/ReplayOutcome.js +0 -104
- package/dist/replay/ReplayProcessLifecycle.js +0 -96
- package/dist/replay/ReplaySeccompFile.js +0 -29
- package/dist/replay/ReplayWorkerProtocol.js +0 -58
- package/dist/replay/SystemJavaScriptReplayHost.js +0 -153
- package/dist/server/ProcessCaptureElicitation.js +0 -153
- package/dist/server/registerApplicationTools/characterization.js +0 -46
- package/dist/server/registerApplicationTools/controlledReplay.js +0 -31
- package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +0 -29
- package/dist/server/registerReplayMachineTool.js +0 -14
- package/skills/reverse-engineer-anything/references/controlled-replay.md +0 -12
package/README.md
CHANGED
|
@@ -13,44 +13,52 @@
|
|
|
13
13
|
[](#tool-catalog-for-investigation)
|
|
14
14
|
[](https://nodejs.org/)
|
|
15
15
|
[](LICENSE)
|
|
16
|
+
[](https://discord.gg/GkcryMnJDM)
|
|
16
17
|
|
|
17
18
|
[Quick start](#quick-start) · [Current status](#current-status) · [Investigation model](#the-investigation-model) · [Tool catalog](#tool-catalog-for-investigation) · [Roadmap](#roadmap) · [How it works](#how-it-works)
|
|
18
19
|
|
|
20
|
+
<code>npx rea-agents setup</code>
|
|
21
|
+
|
|
19
22
|
<br />
|
|
20
23
|
|
|
21
|
-
<
|
|
24
|
+
<img src="docs/assets/rea-hopper-analysis.png" alt="REA launching its analysis bridge inside Hopper while inspecting a native binary" width="1200" />
|
|
22
25
|
|
|
23
26
|
<br />
|
|
24
27
|
|
|
25
|
-
<
|
|
28
|
+
<table aria-label="REA community">
|
|
29
|
+
<tr>
|
|
30
|
+
<td align="center" width="360">
|
|
31
|
+
<a href="https://discord.gg/GkcryMnJDM">
|
|
32
|
+
<img src="docs/assets/discord.svg" height="42" alt="Discord" /><br />
|
|
33
|
+
<strong>Join the Reverse Engineering Community</strong>
|
|
34
|
+
</a><br />
|
|
35
|
+
<sub>Discord · Q&A · Show and Tell</sub>
|
|
36
|
+
</td>
|
|
37
|
+
</tr>
|
|
38
|
+
</table>
|
|
39
|
+
|
|
40
|
+
<br />
|
|
26
41
|
|
|
27
42
|
</div>
|
|
28
43
|
|
|
29
44
|
---
|
|
30
45
|
|
|
31
|
-
See a feature in an app that you want in your own product?
|
|
46
|
+
See a feature in an app that you want in your own product? Ask your agent to investigate it with REA. It can inspect the app without its source code, explain how the feature works, show the evidence, and build a version for your project.
|
|
32
47
|
|
|
33
|
-
REA
|
|
48
|
+
REA connects your agent to tools for inspecting native binaries, JavaScript and Electron apps, .NET assemblies, and websites. You can also use the same tools from your terminal. Analysis runs locally, and results include the evidence and limitations behind each conclusion.
|
|
34
49
|
|
|
35
|
-
|
|
50
|
+
Setup configures your agent and connects it to Hopper or Ghidra. If you need an analysis tool, setup can install Hopper for you.
|
|
36
51
|
|
|
37
52
|
## Just ask your agent
|
|
38
53
|
|
|
39
|
-
|
|
40
|
-
bundled routing skill together:
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
npx rea-agents setup
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
Then ask:
|
|
54
|
+
After [setup](#quick-start), restart your agent and ask:
|
|
47
55
|
|
|
48
56
|
```text
|
|
49
57
|
Understand how search works in the Notes app, show me the evidence, and build a
|
|
50
58
|
similar feature for my project.
|
|
51
59
|
```
|
|
52
60
|
|
|
53
|
-
Notes
|
|
61
|
+
Replace Notes with the app you want to understand, or ask for an overview first.
|
|
54
62
|
|
|
55
63
|
## The investigation model
|
|
56
64
|
|
|
@@ -79,119 +87,69 @@ REA shows how it reached its conclusions. It does not claim to recover original
|
|
|
79
87
|
| ------------------------ | ----------------------------------------------------------------------------------------------------- |
|
|
80
88
|
| **Built for agents** | Ask what an app does and let your agent inspect it instead of guessing. |
|
|
81
89
|
| **CLI and MCP** | Run the same reverse-engineering capabilities from your terminal or agent. |
|
|
82
|
-
| **
|
|
90
|
+
| **Guided setup** | Configure your agent, connect an existing analysis tool, or install Hopper with your approval. |
|
|
83
91
|
| **From insight to code** | Understand a feature, then build your own version in the same coding session. |
|
|
84
92
|
| **Local by design** | Analysis runs on your supported local host. REA does not upload the app to a hosted analysis service. |
|
|
85
93
|
| **Keeps context** | Investigate several apps without starting over for every question. |
|
|
86
94
|
|
|
87
95
|
## Quick start
|
|
88
96
|
|
|
89
|
-
### Run setup
|
|
90
|
-
|
|
91
|
-
```bash
|
|
92
|
-
npx --yes rea-agents@latest setup
|
|
93
|
-
```
|
|
97
|
+
### Run setup (recommended)
|
|
94
98
|
|
|
95
|
-
|
|
96
|
-
invocation; it does not approve any setup changes. The REA wizard separately
|
|
97
|
-
shows its complete plan and asks before applying it. Setup does not update
|
|
98
|
-
Homebrew, Node.js, or npm. The setup command opens with the work it
|
|
99
|
-
enables: investigate local apps from an agent, recover evidence through a
|
|
100
|
-
deep-analysis provider, and reuse REA's guided workflow. It summarizes the
|
|
101
|
-
detected agents, then asks which capabilities to set up: agent integration
|
|
102
|
-
(MCP plus the matching guided workflow) and—when needed—the Hopper provider.
|
|
103
|
-
Nothing is preselected. Choosing agent integration opens a second empty
|
|
104
|
-
checklist for the specific detected agents that should receive a registration.
|
|
105
|
-
|
|
106
|
-
`@latest` makes the requested release explicit and asks npm for the release
|
|
107
|
-
currently published under that tag. REA does not silently replace the package
|
|
108
|
-
version npm selected. Intentional rollbacks therefore remain available through
|
|
109
|
-
an exact package request.
|
|
110
|
-
|
|
111
|
-
REA keeps the journey inline so its history remains in the terminal. Selecting
|
|
112
|
-
a capability does not select every detected target or authorize a change.
|
|
113
|
-
Before anything changes, REA validates existing configuration, prints exact
|
|
114
|
-
paths and external effects, and asks for final approval with **No** as the
|
|
115
|
-
default. The screen keeps the available keys visible while you choose; Ctrl-C
|
|
116
|
-
and declining leave the system unchanged.
|
|
117
|
-
|
|
118
|
-
REA detects Claude Code, Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, and Devin. It configures the first six when detected; Devin is reported but left unchanged because it has no documented local MCP configuration boundary. Registrations are additive, backup-first, and read back after writing. You can safely rerun setup.
|
|
119
|
-
|
|
120
|
-
Use `rea setup --dry-run` to inspect the plan, repeat `--client` to select exact
|
|
121
|
-
agents, and `--accessible` for sequential vertical prompts. Machine output
|
|
122
|
-
remains available through `--json`; prompt UI and progress go to stderr.
|
|
123
|
-
|
|
124
|
-
After a successful setup, REA reports the capabilities now ready to use and a
|
|
125
|
-
concrete next step, such as restarting a configured agent before asking it to
|
|
126
|
-
investigate an application. It does not claim an integration or provider is
|
|
127
|
-
ready unless setup and its final diagnostic check verified it.
|
|
128
|
-
|
|
129
|
-
An optional curl wrapper installs the same CLI package and starts setup only when a terminal is available:
|
|
99
|
+
Set up REA with your agent:
|
|
130
100
|
|
|
131
101
|
```bash
|
|
132
|
-
|
|
102
|
+
npx rea-agents setup
|
|
133
103
|
```
|
|
134
104
|
|
|
135
|
-
|
|
105
|
+
Choose which supported agents should use REA, then review the exact paths and changes before approving. Existing REA registrations are selected by default; newly detected agents are available to select, but detection alone does not select them. Setup adds MCP access and REA's guided workflow for selected agents. Hopper is a separate optional choice with its own consent. Setup can also record an existing Ghidra installation.
|
|
136
106
|
|
|
137
|
-
|
|
107
|
+
Setup shows its changes before applying them and backs up existing configuration. See [Installation and setup](docs/installation.md) for requirements and setup options.
|
|
138
108
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
109
|
+
### With an agent (recommended)
|
|
110
|
+
|
|
111
|
+
After setup, restart your agent and [describe the app or feature](#just-ask-your-agent) you want to understand. Hopper can run in demo mode; if it shows a first-run prompt, choose the demo or enter an existing license.
|
|
142
112
|
|
|
143
|
-
|
|
144
|
-
registration and its matching routing skill as one transaction. After setup,
|
|
145
|
-
restart the configured agent so it loads the aligned integration.
|
|
113
|
+
REA supports Claude Code, Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, Antigravity, GitHub Copilot CLI, and VS Code. Existing REA registrations are selected by default during setup; other detected agents remain unselected until chosen. Other agents can use the [manual MCP configuration](#manual-mcp-configuration).
|
|
146
114
|
|
|
147
|
-
|
|
115
|
+
### From the terminal with npx
|
|
148
116
|
|
|
149
|
-
|
|
117
|
+
After setup, run:
|
|
150
118
|
|
|
151
119
|
```bash
|
|
152
|
-
npx --yes rea-agents@latest setup
|
|
153
120
|
npx -y rea-agents@latest doctor
|
|
154
121
|
npx -y rea-agents@latest analyze /Applications/Notes.app
|
|
155
122
|
```
|
|
156
123
|
|
|
157
|
-
|
|
124
|
+
### Install the rea command
|
|
158
125
|
|
|
159
|
-
|
|
126
|
+
Install the command-line interface:
|
|
160
127
|
|
|
161
128
|
```bash
|
|
162
|
-
|
|
163
|
-
rea setup
|
|
164
|
-
rea doctor
|
|
165
|
-
rea analyze /Applications/Notes.app
|
|
129
|
+
curl -fsSL https://raw.githubusercontent.com/morluto/rea/main/install.sh | bash
|
|
166
130
|
```
|
|
167
131
|
|
|
168
|
-
|
|
132
|
+
The installer adds `rea` to your system and starts setup when run in a terminal. It requires Node.js and npm to be installed already.
|
|
133
|
+
|
|
134
|
+
Alternatively, install with npm, then run setup:
|
|
169
135
|
|
|
170
136
|
```bash
|
|
171
|
-
rea
|
|
137
|
+
npm install --global rea-agents
|
|
138
|
+
rea setup
|
|
172
139
|
```
|
|
173
140
|
|
|
174
|
-
|
|
175
|
-
the global installation it will replace. Source, local, and `npx` copies report
|
|
176
|
-
the manual `npm install --global rea-agents@latest` command instead of updating
|
|
177
|
-
an unrelated global package.
|
|
178
|
-
|
|
179
|
-
Choose either the no-install commands or the global installation. You do not need both.
|
|
180
|
-
|
|
181
|
-
`npm install rea-agents` without `--global` installs `rea` only into the
|
|
182
|
-
current project's `node_modules/.bin`; it does not add `rea` to your shell
|
|
183
|
-
`PATH`. Use the `npx` commands above for one-off runs or `--global` when you
|
|
184
|
-
want a shell-visible `rea` command.
|
|
141
|
+
Update either installation with `rea update`.
|
|
185
142
|
|
|
186
143
|
### Requirements
|
|
187
144
|
|
|
188
145
|
- macOS 12 or newer
|
|
189
146
|
- Ubuntu 24.04+, Fedora 41+, or 64-bit Arch Linux
|
|
190
|
-
- Windows x64 for the experimental, Ghidra-only native PE P0 boundary
|
|
191
147
|
- Node.js 22.19+ or 24.11+ (including newer releases)
|
|
192
148
|
- npm; REA does not require or install a particular npm version
|
|
193
149
|
|
|
194
|
-
|
|
150
|
+
Native binary analysis requires [Hopper](https://www.hopperapp.com/) or [Ghidra](#ghidra-read-only-analysis-provider). Hopper is separate software with its own license; its demo supports analysis with vendor-defined limits. REA can use Ghidra that you have already installed.
|
|
151
|
+
|
|
152
|
+
Windows Ghidra support is experimental and currently unavailable. The required Windows process ownership, private-directory permissions, and safe-path checks are not implemented. See [Windows Ghidra P0](docs/windows-ghidra-p0.md) for the remaining requirements.
|
|
195
153
|
|
|
196
154
|
If something is not working, run:
|
|
197
155
|
|
|
@@ -199,13 +157,13 @@ If something is not working, run:
|
|
|
199
157
|
npx -y rea-agents@latest doctor
|
|
200
158
|
```
|
|
201
159
|
|
|
202
|
-
`
|
|
160
|
+
`doctor` checks your host, dependencies, analysis tools, and agent configuration without changing them. Use `--json` for structured diagnostics.
|
|
203
161
|
|
|
204
162
|
### Linux installation and troubleshooting
|
|
205
163
|
|
|
206
|
-
On macOS,
|
|
164
|
+
On macOS, setup can install Hopper in `~/Applications` after approval. It verifies the official download and does not need Homebrew or administrator privileges.
|
|
207
165
|
|
|
208
|
-
On
|
|
166
|
+
On supported Linux distributions, setup can install Hopper and its demo-session dependencies through your system package manager. You may see a system authorization prompt. Demo sessions use a private virtual display, leaving your desktop alone. See [Hopper installation](docs/installation.md#hopper) for download verification and platform details.
|
|
209
167
|
|
|
210
168
|
The normal Linux launcher is `/opt/hopper/bin/Hopper`. If Hopper was installed elsewhere:
|
|
211
169
|
|
|
@@ -220,13 +178,15 @@ If doctor reports a missing analysis engine even though the file exists, inspect
|
|
|
220
178
|
ldd /opt/hopper/bin/Hopper | grep 'not found'
|
|
221
179
|
```
|
|
222
180
|
|
|
223
|
-
Install the missing
|
|
181
|
+
Install the missing packages and rerun `rea setup`. The Linux demo needs Xvfb, Python 3, X11, and XTEST; approved setup installs these dependencies. If you use the curl installer, add `~/.local/bin` to your shell `PATH` when needed.
|
|
224
182
|
|
|
225
183
|
REA defaults `HOPPER_LAUNCHER_PATH` to `/Applications/Hopper Disassembler.app/Contents/MacOS/hopper` on macOS and `/opt/hopper/bin/Hopper` on Linux. Explicit configuration always takes precedence.
|
|
226
184
|
|
|
227
185
|
### Ghidra read-only analysis provider
|
|
228
186
|
|
|
229
|
-
|
|
187
|
+
Already use Ghidra? REA can connect it to your agent on Linux x64 or macOS x64/arm64. It requires **Ghidra 12.1.4** and a **64-bit JDK 21**. On macOS, your Ghidra installation must also include the native decompiler for your architecture.
|
|
188
|
+
|
|
189
|
+
Set the installation paths, then run setup:
|
|
230
190
|
|
|
231
191
|
```bash
|
|
232
192
|
export GHIDRA_INSTALL_DIR=/absolute/path/to/ghidra_12.1.4_PUBLIC
|
|
@@ -236,21 +196,15 @@ rea setup
|
|
|
236
196
|
rea providers --json
|
|
237
197
|
```
|
|
238
198
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
On Windows, set the same variables in PowerShell and run `rea doctor --json`; automated `rea setup` and Hopper installation remain unavailable. The P0 target boundary rejects DLLs, managed PE files, non-x86-64 images, mutable/hostile inputs, and non-PE formats. See the [Windows Ghidra P0 operations guide](docs/windows-ghidra-p0.md) for registration, exact limitations, CI evidence, and acceptance gates.
|
|
199
|
+
Setup checks the installations and saves their paths in your selected agents' configuration after approval. Ghidra and Java must already be installed; REA does not download or change them.
|
|
242
200
|
|
|
243
|
-
|
|
201
|
+
The adapter exposes **22 read-only operations** for functions, strings, symbols, assembly, decompilation, calls, references, instructions, and data types. These also support REA's overview, search, call-graph, and function-analysis workflows. Ghidra does not provide GUI controls or annotation changes through REA.
|
|
244
202
|
|
|
245
|
-
|
|
203
|
+
REA analyzes a temporary copy of the target and removes the temporary project when the session closes. Results identify what Ghidra observed and what it could not resolve. Decompilation produces pseudocode rather than the original source.
|
|
246
204
|
|
|
247
|
-
|
|
205
|
+
Ghidra also imports DOS MZ executables with an explicit 16-bit x86 real-mode profile. Function results include complete observed body ranges, distinguishing owned bytes from the enclosing span. See the [DOS analysis guide](docs/ghidra-dos.md) for addresses, packing, and verification boundaries.
|
|
248
206
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
`npm run verify:ghidra:cross-format` adds AArch64 ELF, x86-64 PE, and x86-64 Mach-O fixtures. This separate lane requires `clang`, LLD, and `lld-link`; use `REA_CLANG`, `REA_LLD`, or `REA_LLD_LINK` to select alternate command paths. It preflights the required toolchain before compiling fixtures.
|
|
252
|
-
|
|
253
|
-
`npm run verify:ghidra:windows` uses a deterministic source-owned native x86-64 PE application and requires all 19 operations, target/snapshot/import digest linkage, authenticated loopback transport, and cleanup on a controlled Windows x64 Ghidra 12.1.4 runner. This proof does not establish Job Object ownership, private DACLs, or reparse-point-safe authority.
|
|
207
|
+
Windows operations remain unavailable pending the controls described in the [Windows Ghidra P0 guide](docs/windows-ghidra-p0.md). See [Ghidra installation](docs/installation.md#ghidra), [provider evaluation](docs/provider-evaluation.md), and [testing](docs/testing.md) for configuration details, coverage, and real-provider verification.
|
|
254
208
|
|
|
255
209
|
To remove only REA-owned MCP registrations and the managed skill:
|
|
256
210
|
|
|
@@ -263,15 +217,15 @@ Uninstall preserves Hopper, Node.js, Evidence files, captures, unrelated skills,
|
|
|
263
217
|
|
|
264
218
|
### CLI or agent?
|
|
265
219
|
|
|
266
|
-
| If you want to… | Use
|
|
267
|
-
| ---------------------------------------------------------------- |
|
|
268
|
-
| Ask an agent to investigate an app and build a feature |
|
|
269
|
-
| Inspect or decompile one part of an app from the Terminal | `rea analyze` or `rea decompile`
|
|
270
|
-
| Validate, canonicalize, or compare Evidence bundles | `rea evidence-import`, `rea evidence-export`, or `rea compare`
|
|
271
|
-
| Map a local JavaScript/Electron application without executing it | `rea analyze PATH` or `rea analyze-javascript-application`
|
|
272
|
-
| Reuse immutable analysis results without relaunching a provider | Pass `--snapshot /
|
|
273
|
-
| Import source as historical reference | `rea import-reference-source`
|
|
274
|
-
| Capture or compare controlled process behavior | `rea capture-process` or `rea compare-process-captures`
|
|
220
|
+
| If you want to… | Use |
|
|
221
|
+
| ---------------------------------------------------------------- | ------------------------------------------------------------------- |
|
|
222
|
+
| Ask an agent to investigate an app and build a feature | Run setup, restart your agent, then describe the task |
|
|
223
|
+
| Inspect or decompile one part of an app from the Terminal | `rea analyze` or `rea decompile` |
|
|
224
|
+
| Validate, canonicalize, or compare Evidence bundles | `rea evidence-import`, `rea evidence-export`, or `rea compare` |
|
|
225
|
+
| Map a local JavaScript/Electron application without executing it | `rea analyze PATH` or `rea analyze-javascript-application` |
|
|
226
|
+
| Reuse immutable analysis results without relaunching a provider | Pass `--snapshot /path/to/analysis.json` to a deep-analysis command |
|
|
227
|
+
| Import source as historical reference | `rea import-reference-source` |
|
|
228
|
+
| Capture or compare controlled process behavior | `rea capture-process` or `rea compare-process-captures` |
|
|
275
229
|
|
|
276
230
|
```bash
|
|
277
231
|
rea evidence-import /absolute/path/to/evidence/bundle.json
|
|
@@ -279,8 +233,7 @@ rea evidence-export /absolute/path/to/evidence/bundle.json /absolute/path/to/evi
|
|
|
279
233
|
rea compare /absolute/path/to/evidence/left.json /absolute/path/to/evidence/right.json
|
|
280
234
|
```
|
|
281
235
|
|
|
282
|
-
JavaScript application
|
|
283
|
-
the command uses the supplied path directly:
|
|
236
|
+
Analyze a JavaScript application directory or ASAR without executing it:
|
|
284
237
|
|
|
285
238
|
```bash
|
|
286
239
|
rea analyze /absolute/path/to/releases/app.asar --json
|
|
@@ -292,25 +245,15 @@ static JavaScript application provider when neither `--provider` nor
|
|
|
292
245
|
`--snapshot` is supplied. Both routes return the analysis and its Evidence
|
|
293
246
|
context inline.
|
|
294
247
|
|
|
295
|
-
|
|
296
|
-
as current behavioral authority:
|
|
248
|
+
Import an older source tree as a reference. REA keeps it separate from observations of the current app:
|
|
297
249
|
|
|
298
250
|
```bash
|
|
299
251
|
rea import-reference-source /absolute/path/to/source
|
|
300
252
|
```
|
|
301
253
|
|
|
302
|
-
Imports read the path supplied to the command
|
|
254
|
+
Imports read the path supplied to the command. File names do not cause automatic omissions; files are represented by hashes and metadata. To exclude selected paths, set `REA_REFERENCE_SECRET_PATTERNS_JSON` to a JSON string array of ignore patterns. Exports never replace an existing file unless `--overwrite` is explicit.
|
|
303
255
|
|
|
304
|
-
|
|
305
|
-
their Evidence records. They are exact caches rather than Hopper databases:
|
|
306
|
-
REA reuses a v2 entry only when the binary digest, kind, format, architecture,
|
|
307
|
-
operation parameters, concrete provider build, and canonical analysis-profile
|
|
308
|
-
digest match. Hopper loader defaults and configured overrides are normalized by
|
|
309
|
-
the Hopper adapter and committed to that profile, so overrides occupy a distinct
|
|
310
|
-
safe cache partition instead of disabling snapshots. Cursor-dependent and
|
|
311
|
-
mutating calls are never cached. Snapshot files can contain proprietary analysis
|
|
312
|
-
results and local paths, so REA keeps them local and writes them with owner-only
|
|
313
|
-
permissions. The caller supplies the snapshot path directly:
|
|
256
|
+
Use a snapshot to save successful analysis results and reuse them on later runs. REA reuses a result only when the target bytes, operation, parameters, analysis tool, and settings match. It does not cache changes or cursor-dependent calls. Snapshot files stay local and use owner-only permissions.
|
|
314
257
|
|
|
315
258
|
```bash
|
|
316
259
|
rea analyze /absolute/path/to/app --snapshot /absolute/path/to/analysis/app.json
|
|
@@ -318,10 +261,10 @@ rea analyze /absolute/path/to/app --snapshot /absolute/path/to/analysis/app.json
|
|
|
318
261
|
rea analyze /absolute/path/to/app --snapshot /absolute/path/to/analysis/app.json
|
|
319
262
|
```
|
|
320
263
|
|
|
321
|
-
Exact CLI evidence
|
|
264
|
+
Exact CLI cached-evidence reads happen before any provider process starts. In MCP sessions,
|
|
322
265
|
pass `snapshot_path` to `open_binary` to import a snapshot atomically while
|
|
323
266
|
opening its matching target; MCP providers may still start before a cached call
|
|
324
|
-
is
|
|
267
|
+
result is returned. Pass `snapshot_path` and, when required, `overwrite: true` to
|
|
325
268
|
`close_binary` to save atomically before Hopper resources are released. If the
|
|
326
269
|
save fails, REA deliberately leaves the session open.
|
|
327
270
|
|
|
@@ -343,7 +286,7 @@ REA gives the agent a clear path from that request to working code:
|
|
|
343
286
|
| 5 | Decompiles the relevant routines | `procedure_pseudo_code`, `procedure_assembly`, `batch_decompile` |
|
|
344
287
|
| 6 | Builds the feature in your project | code adapted to your stack, product, and requirements |
|
|
345
288
|
|
|
346
|
-
REA handles the app analysis in steps 1
|
|
289
|
+
REA handles the app analysis in steps 1 through 5. The agent performs step 6 with its normal file-editing and test tools, using what it learned about the app.
|
|
347
290
|
|
|
348
291
|
## What agents can do
|
|
349
292
|
|
|
@@ -356,155 +299,119 @@ REA handles the app analysis in steps 1–5. The agent performs step 6 with its
|
|
|
356
299
|
- Analyze Swift and Objective-C metadata without manually untangling every mangled symbol.
|
|
357
300
|
- Leave names, comments, and bookmarks in Hopper so human and agent analysis reinforce each other.
|
|
358
301
|
|
|
302
|
+
See [native investigation](docs/native-investigation.md) for keyed archives, instruction/call/type primitives, typed dispatch metadata, value traces and native desktop observation.
|
|
303
|
+
|
|
359
304
|
## Tool catalog for investigation
|
|
360
305
|
|
|
361
|
-
| Tool family | Count | Examples
|
|
362
|
-
| ------------------------- | ----: |
|
|
363
|
-
| Native inspection |
|
|
364
|
-
| Investigation workflows | 14 |
|
|
365
|
-
| Native macOS utilities |
|
|
366
|
-
| Artifact graph |
|
|
367
|
-
| Managed PE/CLI |
|
|
368
|
-
| Browser observation | 9 |
|
|
369
|
-
| Electron analysis | 5 |
|
|
370
|
-
| JavaScript runtime | 2 |
|
|
371
|
-
| Application workflows |
|
|
372
|
-
| Workspace and observation |
|
|
373
|
-
|
|
374
|
-
The public interface describes what the agent is trying to learn. Providers decide how to answer. macOS utilities handle common semantic inspection without launching Hopper; Hopper handles deeper native analysis; the process harness
|
|
306
|
+
| Tool family | Count | Examples |
|
|
307
|
+
| ------------------------- | ----: | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
308
|
+
| Native inspection | 39 | functions, pseudocode, assembly, strings, symbols, calls, references, annotations, byte reads, and file offsets |
|
|
309
|
+
| Investigation workflows | 14 | app overviews, function dossiers, native APIs and dispatch, batch decompilation, feature traces, call paths, call graphs, Swift and Objective-C discovery |
|
|
310
|
+
| Native macOS utilities | 7 | Mach-O metadata, code signatures, plists, architectures, and Swift demangling without launching Hopper |
|
|
311
|
+
| Artifact graph | 5 | directory and package inventories, compiled Interface Builder files, Apple asset catalogs, and extraction |
|
|
312
|
+
| Managed PE/CLI | 7 | .NET identity, metadata, CIL instructions, native dependencies, reconstruction imports, and build comparisons |
|
|
313
|
+
| Browser observation | 9 | page structure, network metadata, scripts, source maps, WebMCP discovery, screenshots, and capture comparisons |
|
|
314
|
+
| Electron analysis | 5 | renderer observation, static app mapping, and static/runtime reconciliation |
|
|
315
|
+
| JavaScript runtime | 2 | Node/Electron Inspector target discovery, script locations, and execution-context events |
|
|
316
|
+
| Application workflows | 7 | cross-layer feature traces, build comparisons, historical source mapping, static return-shape comparison, and reconstruction checks |
|
|
317
|
+
| Workspace and observation | 21 | sessions, evidence bundles, navigation context, process/artifact/function comparisons, and open-question tracking |
|
|
318
|
+
|
|
319
|
+
The public interface describes what the agent is trying to learn. Providers decide how to answer. macOS utilities handle common semantic inspection without launching Hopper; Hopper handles deeper native analysis; the process harness records direct behavioral captures.
|
|
375
320
|
|
|
376
321
|
## Current status
|
|
377
322
|
|
|
378
|
-
REA
|
|
379
|
-
|
|
380
|
-
- Open Mach-O, ELF, PE, `.app
|
|
381
|
-
-
|
|
382
|
-
-
|
|
383
|
-
- Inspect
|
|
384
|
-
-
|
|
385
|
-
-
|
|
386
|
-
-
|
|
387
|
-
-
|
|
388
|
-
-
|
|
389
|
-
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
real reconstruction oracle. REA does not install ILSpy and does not treat
|
|
393
|
-
decompiler text as canonical metadata or CIL observation.
|
|
394
|
-
- Traverse content-addressed artifact graphs without extraction; on macOS, read-only DMG traversal additionally requires `native_mount_approved: true` and `REA_ARTIFACT_NATIVE_MOUNT_ENABLED=true`. Materialize only approved occurrences into absent output roots.
|
|
395
|
-
- Build function dossiers with pseudocode, assembly, CFG edges, comments, calls, references, strings, and names.
|
|
396
|
-
- Search and trace features across symbols, strings, metadata, references, and call paths.
|
|
397
|
-
- Record every successful result as deterministic Evidence with artifact and provider identity, confidence, authority, limitations, and locations.
|
|
398
|
-
- Export and import evidence bundles across sessions.
|
|
399
|
-
- Capture approved PTY scenarios as Process Capture Evidence, including committed run manifests, raw and rendered terminal frames, scripted interactions, descendant settlement, named filesystem checkpoints, deterministic command shims, and loopback HTTP/WebSocket exchanges.
|
|
400
|
-
- Validate finite replay machines without launching a target through `run_replay_machine` or `rea run-replay-machine`; ordered events return typed decisions, actions, captured aliases, transition journals, final state, and exact limit use without echoing request or captured values.
|
|
401
|
-
- Compare complete artifact inventories by stable path, content, metadata, and relations; incomplete evidence never implies equivalence.
|
|
402
|
-
- Compare explicit function dossiers across text, calls, references, strings, and address-normalized CFG topology with per-facet unknowns.
|
|
403
|
-
- Compare canonical Evidence bundles by exact membership, explicit observation pairs, and residual-unknown histories without turning omissions into behavioral absence.
|
|
404
|
-
- Aggregate runtime comparisons into observed behavior changes while keeping static artifact/function differences labeled as candidates.
|
|
405
|
-
- Build Evidence-cited direct call paths by exact address without treating missing dossiers as graph leaves.
|
|
406
|
-
- Correlate exact static/runtime findings through explicit hypotheses without claiming causality from cochange.
|
|
407
|
-
- Verify finite behavioral and structural reconstruction specifications with pass, fail, and unknown kept distinct.
|
|
408
|
-
- Track residual unknowns through immutable CAS revisions, evidence-qualified resolution, contradictions, probes, and validated dependency relationships.
|
|
409
|
-
- Evidence-producing workflows record returned residual uncertainty as residual unknowns linked to their result Evidence. Errors without supporting Evidence do not create registry records.
|
|
410
|
-
- Start six [guided MCP workflows](docs/mcp-prompts.md) with live, session-aware completion for documents, procedures, providers, evidence, captures, artifact IDs, and active unknowns.
|
|
411
|
-
|
|
412
|
-
Hopper is the first provider, not the boundary of the project. Some current workflows still require Hopper and macOS; every evidence record identifies the provider and limitations behind its result.
|
|
323
|
+
REA supports native application, JavaScript, Electron, .NET, and browser investigation on macOS and Linux. Individual tools have platform and runtime prerequisites; use `rea capabilities` to check what is available on your host.
|
|
324
|
+
|
|
325
|
+
- **Native binaries:** Open Mach-O, ELF, PE, and Mac `.app` targets through Hopper or Ghidra. Inspect functions, strings, assembly, decompilation, calls, and references. Hopper also accepts `.hop` databases and supports annotations.
|
|
326
|
+
- **Packages and resources:** Inspect directories, ZIP, APK, IPA, ASAR, plists, compiled Interface Builder files, and Apple asset catalogs. Artifact requests name the input and requested extraction or traversal directly; macOS DMG traversal also requires the host's native mounting support.
|
|
327
|
+
- **JavaScript and Electron:** Map modules, imports, source maps, routes, IPC channels, storage, and native add-ons without running the app. Compare builds and trace a feature across the recovered graph. Dynamic and ambiguous relationships remain unresolved. See [JavaScript application workflows](docs/javascript-application-workflows.md).
|
|
328
|
+
- **Websites:** Inspect a selected page in an existing Chrome-family browser. Capture page structure, network metadata, script evidence, and screenshots requested by the call. Passive observation does not navigate or execute page JavaScript. See [browser observation](docs/browser-observation.md).
|
|
329
|
+
- **Electron and Node runtime observation:** Inspect selected Electron pages or attach to a Node/Electron V8 Inspector target. Inspector observation records script locations and execution-context events; it does not infer imports, IPC activity, or which modules executed. See [runtime observation](docs/javascript-runtime-observation.md).
|
|
330
|
+
- **.NET assemblies:** Inspect metadata and CIL instructions, compare builds, and check declared native dependencies without loading or running the assembly. Imported decompiler output is labeled as analyst inference. See [managed-code analysis](docs/managed-code-analysis.md).
|
|
331
|
+
- **Controlled behavior capture:** Run process, browser, or Electron scenarios with the target, actions, and lifecycle declared in each request, then compare the resulting evidence. Missing observations cannot establish that two runs behaved the same way.
|
|
332
|
+
- **Evidence and comparison:** Save results with artifact identity, provider, locations, confidence, and limitations. Export or import bundles, compare artifacts and functions, and connect static findings to runtime observations without claiming causality from correlation.
|
|
333
|
+
- **Open questions:** Track unresolved findings, contradictions, and follow-up probes. Reconstruction checks report pass, fail, or unknown rather than treating missing evidence as a pass.
|
|
334
|
+
- **Guided workflows:** Start six [MCP investigation workflows](docs/mcp-prompts.md) with suggestions based on your current session.
|
|
335
|
+
|
|
336
|
+
Windows Ghidra operations are currently unavailable. Hopper-only features, such as GUI controls and annotations, are not available through Ghidra.
|
|
413
337
|
|
|
414
338
|
### Website observation with CDP
|
|
415
339
|
|
|
416
|
-
REA can inspect an already-running Chrome-family browser
|
|
340
|
+
REA can inspect an already-running Chrome-family browser through a literal loopback CDP endpoint. Each request names the endpoint and target; an optional origin filter can narrow discovery:
|
|
417
341
|
|
|
418
342
|
```bash
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
export REA_BROWSER_ALLOWED_ORIGINS_JSON='["http://127.0.0.1:3000"]'
|
|
422
|
-
|
|
423
|
-
rea list-browser-targets http://127.0.0.1:9222 --approved --json
|
|
424
|
-
rea inspect-web-page http://127.0.0.1:9222 TARGET_ID --approved --json
|
|
343
|
+
rea list-browser-targets http://127.0.0.1:9222 --json
|
|
344
|
+
rea inspect-web-page http://127.0.0.1:9222 TARGET_ID --json
|
|
425
345
|
```
|
|
426
346
|
|
|
427
|
-
|
|
347
|
+
The eight passive browser tools work through both CLI and MCP. They inspect the selected page without navigating, clicking, or evaluating its JavaScript. Credentials, cookies, authorization headers, and raw payload values are not retained. A request selects whether to include script sources, accessibility text, screenshots, or console and payload summaries. REA cannot observe activity that happened before it attached. See [browser observation](docs/browser-observation.md) for browser startup, capture options, and limits.
|
|
428
348
|
|
|
429
349
|
### Controlled browser scenarios
|
|
430
350
|
|
|
431
|
-
`capture_browser_scenario`
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
claims.
|
|
351
|
+
`capture_browser_scenario` runs a caller-declared sequence of browser actions through
|
|
352
|
+
Playwright. Unlike passive observation, it can interact with the page. Each
|
|
353
|
+
step records evidence such as screenshots, page structure, navigation, and
|
|
354
|
+
network activity. Missing or truncated observations cannot establish that two
|
|
355
|
+
runs behaved the same way.
|
|
437
356
|
|
|
438
357
|
```bash
|
|
439
|
-
export REA_BROWSER_SCENARIO_ENABLED=true
|
|
440
|
-
export REA_BROWSER_SCENARIO_EXECUTABLE_ROOTS_JSON='["/usr/bin"]'
|
|
441
|
-
export REA_BROWSER_SCENARIO_CDP_ENDPOINTS_JSON='["http://127.0.0.1:9222"]'
|
|
442
|
-
export REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON='["http://127.0.0.1:3000"]'
|
|
443
|
-
export REA_BROWSER_SCENARIO_ALLOWED_ENV_JSON='["REA_TEST_PASSWORD"]'
|
|
444
|
-
|
|
445
358
|
rea capture-browser-scenario ./scenario.json --json
|
|
446
359
|
```
|
|
447
360
|
|
|
448
361
|
Launch mode owns a temporary browser profile and removes it after terminating
|
|
449
362
|
the launched browser. Connect mode accepts one exact loopback CDP target and
|
|
450
|
-
disconnects without closing the external browser.
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
environment
|
|
454
|
-
names, never secret values. See the
|
|
363
|
+
disconnects without closing the external browser. The request supplies the
|
|
364
|
+
selected executable or endpoint, actions, and any origin or environment
|
|
365
|
+
selections needed by the scenario. Scenario JSON contains secret references and
|
|
366
|
+
environment-variable names, never secret values. See the
|
|
455
367
|
[browser scenario contract](docs/browser-scenario-contract.md).
|
|
456
368
|
|
|
457
369
|
### Node and Electron V8 Inspector observation
|
|
458
370
|
|
|
459
|
-
|
|
371
|
+
Node and Electron runtime observation attaches to an existing Inspector target named in the request:
|
|
460
372
|
|
|
461
373
|
```bash
|
|
462
|
-
export REA_V8_INSPECTOR_OBSERVE_ENABLED=true
|
|
463
|
-
|
|
464
374
|
rea list-javascript-runtime-targets http://127.0.0.1:9229 --json
|
|
465
375
|
rea observe-javascript-runtime http://127.0.0.1:9229 TARGET_ID \
|
|
466
376
|
--runtime-kind node --json
|
|
467
377
|
```
|
|
468
378
|
|
|
469
|
-
REA
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
379
|
+
REA records script locations and execution-context events without evaluating
|
|
380
|
+
code or setting breakpoints. These observations do not establish import
|
|
381
|
+
relationships, event activity, IPC, process identity, or Electron roles. See
|
|
382
|
+
[Node and Electron runtime observation](docs/javascript-runtime-observation.md)
|
|
383
|
+
for the exact coverage.
|
|
474
384
|
|
|
475
385
|
Exact package, tool-family, provider, setup-client, schema, and CLI facts are generated from source in [`docs/product-catalog.json`](docs/product-catalog.json). PR CI verifies this catalog, narrative documentation, generated schemas, and a clean TypeDoc render.
|
|
476
386
|
|
|
477
387
|
## Roadmap
|
|
478
388
|
|
|
479
|
-
|
|
389
|
+
The [current status](#current-status) section describes shipped capabilities. These are the next areas of work.
|
|
480
390
|
|
|
481
391
|
### Now
|
|
482
392
|
|
|
483
|
-
1. **
|
|
484
|
-
2. **
|
|
393
|
+
1. **Keep documentation accurate:** update the generated catalog and documentation checks when tools, providers, setup options, or versions change.
|
|
394
|
+
2. **Test more native binaries:** expand architecture and indirect-call coverage across Hopper and Ghidra.
|
|
485
395
|
|
|
486
396
|
### Next
|
|
487
397
|
|
|
488
|
-
1. **
|
|
489
|
-
2. **
|
|
490
|
-
3. **
|
|
491
|
-
4. **Deterministic behavior harnesses** — extend process ownership, protocol fixtures, filesystem observation, reconnects, and cross-version behavioral comparison.
|
|
398
|
+
1. **Connect more application layers:** add static extractors and runtime observations to feature traces.
|
|
399
|
+
2. **Extend .NET analysis:** improve comparisons of obfuscated assemblies and connect managed findings to verified native analysis. See the [managed-code guide](docs/managed-code-analysis.md).
|
|
400
|
+
3. **Compare more runtime behavior:** expand process, protocol, filesystem, reconnect, and version-comparison coverage.
|
|
492
401
|
|
|
493
402
|
### Later
|
|
494
403
|
|
|
495
|
-
1. **
|
|
496
|
-
2. **
|
|
497
|
-
3. **
|
|
498
|
-
|
|
499
|
-
New providers must produce the same evidence and safety metadata as existing capabilities before they become part of the public workflow. Once REA has multiple optional toolchains, setup can become capability-selective; the consent rules for that future work are recorded in the [installation roadmap](docs/roadmap.md).
|
|
404
|
+
1. **Expand browser and Electron interaction:** add scenario actions beyond the current click and wait operations.
|
|
405
|
+
2. **Observe native apps at runtime:** explore LLDB, Frida, system logs, and native API tracing.
|
|
406
|
+
3. **Evaluate more tools and targets:** assess IDA/Hex-Rays, Binary Ninja, Rizin, LIEF, Windows-native tools, mobile apps, and firmware.
|
|
500
407
|
|
|
501
|
-
|
|
408
|
+
Setup already lets you choose agent integration and Hopper installation. Support for installing additional analysis tools is future work, described in the [installation roadmap](docs/roadmap.md).
|
|
502
409
|
|
|
503
|
-
See
|
|
410
|
+
See [provider evaluation](docs/provider-evaluation.md) for coverage and remaining requirements, and the [native investigation guide](docs/native-investigation.md) for UI, dispatch, and value-flow analysis.
|
|
504
411
|
|
|
505
412
|
## Using REA with other agents
|
|
506
413
|
|
|
507
|
-
Setup
|
|
414
|
+
Setup offers supported agent integrations for selection. Existing REA registrations are selected by default; newly detected agents remain unselected until chosen. Any agent that supports local MCP servers can use the configuration below.
|
|
508
415
|
|
|
509
416
|
### Manual MCP configuration
|
|
510
417
|
|
|
@@ -515,7 +422,7 @@ Setup detects Claude Code, Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf,
|
|
|
515
422
|
"mcpServers": {
|
|
516
423
|
"rea": {
|
|
517
424
|
"command": "npx",
|
|
518
|
-
"args": ["-y", "rea-agents@
|
|
425
|
+
"args": ["-y", "rea-agents@4.0.0", "mcp"]
|
|
519
426
|
}
|
|
520
427
|
}
|
|
521
428
|
}
|
|
@@ -524,11 +431,11 @@ Setup detects Claude Code, Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf,
|
|
|
524
431
|
<!-- x-release-please-end -->
|
|
525
432
|
|
|
526
433
|
Persistent registrations should use one exact package version. `rea setup`
|
|
527
|
-
maintains that pin,
|
|
528
|
-
a 30-second startup allowance for a cold package-runner start.
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
434
|
+
maintains that pin, updates the bundled skill at the same time, and gives Codex
|
|
435
|
+
a 30-second startup allowance for a cold package-runner start. `rea update`
|
|
436
|
+
installs an exact release and verifies the new executable. It returns an
|
|
437
|
+
unapplied maintenance plan for existing REA integrations, with a scoped setup
|
|
438
|
+
command to review and approve their changes. Restart affected agents afterward.
|
|
532
439
|
|
|
533
440
|
MCP clients that support prompts can also discover six ordered investigation
|
|
534
441
|
workflows through `prompts/list`. Their optional identifier arguments use the
|
|
@@ -584,7 +491,7 @@ Or install the `rea` command globally:
|
|
|
584
491
|
```bash
|
|
585
492
|
npm install --global rea-agents
|
|
586
493
|
rea --help
|
|
587
|
-
rea
|
|
494
|
+
rea update
|
|
588
495
|
rea mcp
|
|
589
496
|
```
|
|
590
497
|
|
|
@@ -592,8 +499,7 @@ REA accepts a Mac `.app` folder directly. If an agent cannot find an app by name
|
|
|
592
499
|
|
|
593
500
|
### Choosing a deep-analysis provider
|
|
594
501
|
|
|
595
|
-
|
|
596
|
-
same selector and precedence apply to the CLI, MCP, and startup configuration:
|
|
502
|
+
Choose which analysis tool to use from the CLI:
|
|
597
503
|
|
|
598
504
|
```bash
|
|
599
505
|
rea providers --json
|
|
@@ -610,47 +516,27 @@ For MCP, pass the optional selector on `open_binary`:
|
|
|
610
516
|
}
|
|
611
517
|
```
|
|
612
518
|
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
operations
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
the authoritative `analysis_provider_candidates` and
|
|
621
|
-
`analysis_provider_binding` fields. Each open target also has an
|
|
622
|
-
`analysis_run.run_id` allocated before provider startup. When dynamic providers
|
|
623
|
-
start, `analysis_run.process_lineage` changes from `not_observed` to `snapshots`
|
|
624
|
-
and retains one provider-attributed, token-verified observation per started
|
|
625
|
-
provider. Each observation carries `observed_at` and remains `unavailable` or
|
|
626
|
-
`verified`; a verified empty descendant list is distinct from both. Snapshots
|
|
627
|
-
describe bounded observations, not current live state or historical absence.
|
|
628
|
-
For providers with serial work, `analysis_activity` distinguishes `idle`,
|
|
629
|
-
`busy`, and `timed_out_busy`, and reports the active operation, elapsed time,
|
|
630
|
-
caller state, timeout, and queued-request count. A caller timeout therefore
|
|
631
|
-
does not falsely imply that Hopper's Python thread is available. `close_binary`
|
|
632
|
-
clears the REA session but returns `cleanup_incomplete` when authenticated
|
|
633
|
-
document shutdown, owned process cleanup, or private runtime removal cannot be
|
|
634
|
-
verified.
|
|
635
|
-
Reopening same target without a selector keeps its binding; runtime failure
|
|
636
|
-
never selects another provider silently.
|
|
637
|
-
Ghidra can appear as an available, target-compatible candidate after doctor
|
|
638
|
-
validates its exact installation. Its capability list contains the 19 admitted
|
|
639
|
-
read-only inventory and function-analysis operations; selecting it still does
|
|
640
|
-
not make Hopper-only GUI or mutation operations available and never triggers a
|
|
641
|
-
silent fallback.
|
|
519
|
+
Use `--provider`, or `provider_id` in MCP, to choose Hopper or Ghidra for a target. This choice overrides `REA_ANALYSIS_PROVIDER`.
|
|
520
|
+
|
|
521
|
+
With `auto`, REA selects the only available tool that supports the target. If both are available, specify one before opening the target. The session keeps that choice until you explicitly switch or close it; a failure never silently switches tools. Artifact-only analysis can work without a native analysis tool.
|
|
522
|
+
|
|
523
|
+
Run `rea providers` and `rea capabilities` to check availability and supported operations. Ghidra exposes 22 read-only operations on supported Linux and macOS hosts. GUI controls and annotation changes require Hopper. Windows Ghidra operations remain unavailable.
|
|
524
|
+
|
|
525
|
+
The session also reports active work and cleanup status. If a caller times out, the analysis tool may still be busy; `analysis_activity` reports that state. A `cleanup_incomplete` result identifies resources whose shutdown or removal could not be verified. See [provider selection and analysis profiles](docs/adr/0001-provider-selection-and-analysis-profiles.md) for session, cache, and process-tracking details.
|
|
642
526
|
|
|
643
527
|
### CLI exit status
|
|
644
528
|
|
|
645
|
-
| Status | Meaning
|
|
646
|
-
| --------- |
|
|
647
|
-
| `0` | The
|
|
648
|
-
| `1` |
|
|
649
|
-
| `128 + N` | The process ended from signal `N`, where the shell or runtime preserves the conventional signal-derived status.
|
|
529
|
+
| Status | Meaning |
|
|
530
|
+
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
531
|
+
| `0` | The operation completed. Results may still include warnings, partial evidence, or unresolved questions. |
|
|
532
|
+
| `1` | The operation could not complete, for example because of invalid input, host permission denial, cancellation, or timeout. Structured output reports the reason when available. |
|
|
533
|
+
| `128 + N` | The process ended from signal `N`, where the shell or runtime preserves the conventional signal-derived status. |
|
|
650
534
|
|
|
651
535
|
`setup` returns `1` for `planned`, `needs_confirmation`, or `needs_human`
|
|
652
536
|
because configuration is not ready; rerun it after approval or remediation.
|
|
653
|
-
`doctor` returns `1` when
|
|
537
|
+
`doctor` returns `1` when required checks for its readiness scope are unhealthy.
|
|
538
|
+
Unavailable optional provider prerequisites remain visible as informational
|
|
539
|
+
diagnostics and do not block setup or unrelated providers. Output format, full envelopes,
|
|
654
540
|
filters, and token controls never change the operation status.
|
|
655
541
|
|
|
656
542
|
When REA feeds a shell pipeline, enable `pipefail` so a downstream formatter
|
|
@@ -663,28 +549,20 @@ rea inventory-artifact ./app.asar --json | jq . > inventory.json
|
|
|
663
549
|
|
|
664
550
|
## Current Hopper provider
|
|
665
551
|
|
|
666
|
-
REA starts Hopper when
|
|
552
|
+
REA starts Hopper when an operation needs it. On macOS, Hopper may bring its window or a dialog to the foreground even though REA requests background startup. Demo or license prompts may need your attention.
|
|
667
553
|
|
|
668
|
-
|
|
554
|
+
Hopper handles one analysis request at a time. Cancelling your wait does not stop work already running inside Hopper; the session reports whether it is still busy. Successful decompilation results are cached until a relevant rename or comment change.
|
|
669
555
|
|
|
670
|
-
|
|
556
|
+
Use `rea instructions` when you only need assembly instructions for a function. It avoids decompilation and a whole-program inventory.
|
|
671
557
|
|
|
672
|
-
|
|
558
|
+
Closing a session shuts down REA's bridge and removes its temporary socket directory while preserving a Hopper application you may be using. If cleanup cannot be verified, `close_binary` reports `cleanup_incomplete` and the affected resources.
|
|
673
559
|
|
|
674
|
-
|
|
560
|
+
## Process capture
|
|
675
561
|
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
`REA_PROCESS_EXECUTABLE_ROOTS_JSON` and `REA_PROCESS_WORKING_ROOTS_JSON`, and an
|
|
681
|
-
environment allowlist in `REA_PROCESS_ALLOWED_ENV_JSON`. Because the current PTY
|
|
682
|
-
adapter uses host networking, it also requires
|
|
683
|
-
`REA_PROCESS_ALLOW_EXTERNAL_NETWORK=true`.
|
|
684
|
-
|
|
685
|
-
Set `REA_PROCESS_CAPTURE_AUTO_GRANT=false` to configure those process-capture
|
|
686
|
-
limits as a ceiling without implicitly granting them. This mode remains
|
|
687
|
-
fail-closed until a narrower grant is established.
|
|
562
|
+
Process capture runs the exact executable and scenario declared in the request,
|
|
563
|
+
with the requested working directory and environment. Filesystem observation
|
|
564
|
+
paths select what to snapshot. The process runs with your user permissions;
|
|
565
|
+
Process Capture records behavior and is not a security sandbox.
|
|
688
566
|
|
|
689
567
|
Capture a scenario or compare two saved Process Capture Evidence records:
|
|
690
568
|
|
|
@@ -695,9 +573,9 @@ rea compare-process-captures authority.json reconstruction.json
|
|
|
695
573
|
```
|
|
696
574
|
|
|
697
575
|
The comparison reports each observed dimension separately and identifies the
|
|
698
|
-
first terminal, interaction, exit, filesystem,
|
|
699
|
-
|
|
700
|
-
|
|
576
|
+
first terminal, interaction, exit, filesystem, or process divergence.
|
|
577
|
+
See [Process Capture](docs/process-capture.md) for scenario fields, limits, and
|
|
578
|
+
evidence boundaries.
|
|
701
579
|
|
|
702
580
|
REA installs a prebuilt PTY backend for supported macOS, Linux, and Windows
|
|
703
581
|
architectures. If the capability check reports that the backend is unavailable,
|
|
@@ -714,7 +592,11 @@ verified or absent.
|
|
|
714
592
|
|
|
715
593
|
## Security model
|
|
716
594
|
|
|
717
|
-
|
|
595
|
+
Analysis runs locally. REA communicates with Hopper and Ghidra through authenticated private local sockets. Your agent or model provider has its own data policy.
|
|
596
|
+
|
|
597
|
+
Runtime requests act on the declared target and lifecycle. Analysis tools and launched targets run with your user permissions, and native UI capture still depends on macOS Accessibility and Screen Recording access. Static JavaScript analysis does not execute extracted modules; use direct browser, Electron, or process capture when runtime behavior is needed.
|
|
598
|
+
|
|
599
|
+
Windows Ghidra operations are blocked until REA implements the required process ownership, private-directory permissions, and safe-path checks. Report vulnerabilities through the private process in [SECURITY.md](SECURITY.md).
|
|
718
600
|
|
|
719
601
|
## FAQ
|
|
720
602
|
|
|
@@ -728,7 +610,7 @@ No. REA starts Hopper when an operation needs it. An already-running Hopper appl
|
|
|
728
610
|
<details>
|
|
729
611
|
<summary><strong>Why did Hopper appear in front of my other windows?</strong></summary>
|
|
730
612
|
|
|
731
|
-
Hopper's launcher internally activates the application. REA requests background startup, but macOS and Hopper may still bring a window or dialog forward. See [Hopper
|
|
613
|
+
Hopper's launcher internally activates the application. REA requests background startup, but macOS and Hopper may still bring a window or dialog forward. See [Current Hopper provider](#current-hopper-provider).
|
|
732
614
|
|
|
733
615
|
</details>
|
|
734
616
|
|
|
@@ -742,7 +624,7 @@ No. Setup can install Hopper for you, but Hopper remains separate software with
|
|
|
742
624
|
<details>
|
|
743
625
|
<summary><strong>Does REA install or include Ghidra or Java?</strong></summary>
|
|
744
626
|
|
|
745
|
-
No.
|
|
627
|
+
No. REA connects to an existing Ghidra installation. Run setup after providing the Ghidra and Java paths shown in the [Ghidra section](#ghidra-read-only-analysis-provider).
|
|
746
628
|
|
|
747
629
|
</details>
|
|
748
630
|
|
|
@@ -763,48 +645,17 @@ No decompiler can guarantee the original source. REA gives an agent pseudocode,
|
|
|
763
645
|
<details>
|
|
764
646
|
<summary><strong>Which agents can use REA?</strong></summary>
|
|
765
647
|
|
|
766
|
-
Any agent that can run a local MCP server can use the manual configuration. Setup
|
|
648
|
+
Any agent that can run a local MCP server can use the manual configuration. Setup offers the supported integrations listed in [Installation and setup](docs/installation.md#supported-agents); existing REA registrations are selected by default, and other detected agents require selection.
|
|
767
649
|
|
|
768
650
|
</details>
|
|
769
651
|
|
|
770
652
|
## Development
|
|
771
653
|
|
|
772
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md) for setup
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
`npm run verify:agent` runs brandless native, JavaScript-application, managed,
|
|
778
|
-
and browser prompts through a real local Codex CLI. Its JSON report measures
|
|
779
|
-
natural MCP use, first-tool routing, repeated calls, actual Codex token usage,
|
|
780
|
-
completion quality, and explicit treatment of authority and unknowns.
|
|
781
|
-
|
|
782
|
-
`npm run evidence:generate` regenerates the managed conformance manifest and
|
|
783
|
-
Evidence completion ledger from live verifier output. `npm run
|
|
784
|
-
evidence:check` reruns the verifier and fails when artifacts, scenarios,
|
|
785
|
-
providers, schemas, claim counts, Evidence IDs, or the bundled skill have
|
|
786
|
-
drifted. Unsupported claims remain explicit and never count as passes.
|
|
787
|
-
Verifier JSON reports include an ephemeral `verifier_run` UUID allocated before
|
|
788
|
-
the verifier performs work and inherited by its child processes through
|
|
789
|
-
`REA_PROCESS_RUN_ID`. The final report includes the verifier and parent PIDs
|
|
790
|
-
plus `process_lineage` and its ISO `observed_at` timestamp: POSIX verifiers
|
|
791
|
-
report a token-verified, point-in-time launcher process group and live
|
|
792
|
-
descendants, while platforms without an owned
|
|
793
|
-
lineage primitive report `status: "unavailable"` and a reason. An empty verified
|
|
794
|
-
descendant list means no child was live during the final observation; it does
|
|
795
|
-
not claim the verifier launched no children earlier. Nested verifier entrypoints
|
|
796
|
-
in the same process reuse its UUID; each new verifier process replaces any
|
|
797
|
-
inherited parent token with a fresh run identity.
|
|
798
|
-
Generated completion commitments deliberately exclude this per-execution
|
|
799
|
-
identity, so check mode remains deterministic while live reports remain
|
|
800
|
-
attributable.
|
|
801
|
-
|
|
802
|
-
Owned Hopper shutdown logs retain the launcher PID, process-group ID, cleanup
|
|
803
|
-
status, and whether a verified group signal was required. They omit the run
|
|
804
|
-
token and unexpected exception text. The real-Hopper verifier also starts an
|
|
805
|
-
unrelated `Hopper`-named sentinel in a distinct process group and fails unless
|
|
806
|
-
that process survives every session close; the sentinel is removed only by the
|
|
807
|
-
verifier after the survival check.
|
|
654
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and contribution checks, and [docs/testing.md](docs/testing.md) for test scopes and real-tool verification. PR CI publishes generated API documentation as the `api-docs` artifact.
|
|
655
|
+
|
|
656
|
+
`npm run verify:agent` evaluates native, JavaScript, managed, and browser investigation tasks through a real local Codex CLI. Its report covers tool selection, repeated calls, token use, completion quality, and handling of permissions and unknowns.
|
|
657
|
+
|
|
658
|
+
`npm run evidence:generate` regenerates the managed conformance manifest and Evidence completion ledger from live verification results. `npm run evidence:check` reruns verification and checks for drift. Unsupported claims remain explicit and do not count as passes. See [testing](docs/testing.md) for verification commands and process-cleanup checks.
|
|
808
659
|
|
|
809
660
|
## Project links
|
|
810
661
|
|