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