rea-agents 4.1.0 → 5.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 +184 -86
- package/bridge/android/ReaJadxBridge.java +247 -0
- package/bridge/native/NativeUIChildren.swift +27 -0
- package/bridge/native/ReaNativeUI.swift +30 -16
- package/dist/android/AndroidTargetSnapshot.js +5 -3
- package/dist/android/JadxAnalysis.js +8 -6
- package/dist/android/JadxConfiguration.js +19 -3
- package/dist/android/JadxMcpTransport.js +43 -16
- package/dist/android/JadxProtocol.js +8 -0
- package/dist/android/JadxProvider.js +117 -28
- package/dist/android/JadxRelease.js +8 -0
- package/dist/android/JadxSession.js +32 -18
- package/dist/application/AppBundleExecutable.js +141 -0
- package/dist/application/ArtifactInventory/classify.js +1 -1
- package/dist/application/ArtifactInventory/scanCanonical.js +1 -1
- package/dist/application/ArtifactInventory/scanReader.js +1 -1
- package/dist/application/ArtifactInventory.js +1 -1
- package/dist/application/BinaryTargetResolver.js +9 -64
- package/dist/application/CapabilityInventory.js +61 -3
- package/dist/application/ClientConfigurationDocument.js +72 -12
- package/dist/application/ClientRegistrationStatus.js +7 -8
- package/dist/application/DirectAnalysis.js +12 -14
- package/dist/application/DirectAnalysisStatus.js +4 -5
- package/dist/application/DoctorDiagnostics.js +3 -3
- package/dist/application/EnhancedTools.js +4 -4
- package/dist/application/EvidenceBundleCommands.js +1 -1
- package/dist/application/FilesystemSnapshot.js +20 -5
- package/dist/application/InvestigationProviders.js +6 -0
- package/dist/application/LinuxHopper.js +8 -2
- package/dist/application/OptionalObservationProviders.js +3 -0
- package/dist/application/ProcessCaptureCapability.js +1 -1
- package/dist/application/ProcessCaptureLifecycle.js +2 -2
- package/dist/application/ProcessCli.js +5 -1
- package/dist/application/ProcessHarness.js +20 -9
- package/dist/application/ReconstructionCoverageService.js +2 -6
- package/dist/application/ReconstructionObligationCandidates.js +5 -2
- package/dist/application/ReferenceSourceImport.js +2 -0
- package/dist/application/ReferenceSourceImportEntries.js +20 -3
- package/dist/application/ReferenceSourceImportTypes.js +5 -0
- package/dist/application/Setup.js +10 -2
- package/dist/application/SetupClientConfiguration.js +19 -16
- package/dist/application/SetupHost.js +18 -3
- package/dist/application/SetupPlan.js +1 -1
- package/dist/application/Uninstall.js +23 -17
- package/dist/application/UpdateMaintenance.js +3 -3
- package/dist/application/ValidateSelectedWebScript.js +27 -0
- package/dist/application/WebModuleTraceService.js +209 -0
- package/dist/application/WebRuntimeService.js +73 -0
- package/dist/application/WebScriptExportService.js +115 -0
- package/dist/application/WebSourceLocationService.js +160 -0
- package/dist/application/{AndroidAnalysisService.js → android/AndroidAnalysisService.js} +6 -6
- package/dist/application/{AndroidApplicationService.js → android/AndroidApplicationService.js} +3 -3
- package/dist/application/{AppleApplicationService.js → apple/AppleApplicationService.js} +5 -5
- package/dist/application/{AnalysisClientCleanup.js → binary/AnalysisClientCleanup.js} +2 -2
- package/dist/application/{AnalysisProviderEvaluation.js → binary/AnalysisProviderEvaluation.js} +4 -4
- package/dist/application/{AnalysisProviderRegistry.js → binary/AnalysisProviderRegistry.js} +5 -5
- package/dist/application/{AnalysisSnapshotCache.js → binary/AnalysisSnapshotCache.js} +7 -9
- package/dist/application/{AnalysisSnapshotFiles.js → binary/AnalysisSnapshotFiles.js} +4 -4
- package/dist/application/{BinarySession.js → binary/BinarySession.js} +12 -10
- package/dist/application/{BinarySessionComposition.js → binary/BinarySessionComposition.js} +2 -1
- package/dist/application/{BinarySessionExecution.js → binary/BinarySessionExecution.js} +9 -7
- package/dist/application/{BinarySessionOpen.js → binary/BinarySessionOpen.js} +6 -6
- package/dist/application/{BinarySessionRecords.js → binary/BinarySessionRecords.js} +28 -40
- package/dist/application/{CompositeProvider.js → binary/CompositeProvider.js} +2 -2
- package/dist/application/{LazyAnalysisProvider.js → binary/LazyAnalysisProvider.js} +6 -6
- package/dist/application/{SessionProviderRouter.js → binary/SessionProviderRouter.js} +7 -7
- package/dist/application/{FirmwareAnalysisService.js → firmware/FirmwareAnalysisService.js} +5 -5
- package/dist/application/{EvidenceLedger.js → investigation/EvidenceLedger.js} +44 -7
- package/dist/application/investigation/InvestigationRecords.js +69 -0
- package/dist/application/{UnknownEvidence.js → investigation/UnknownEvidence.js} +1 -1
- package/dist/application/{ElectronActiveEvidence.js → javascript/ElectronActiveEvidence.js} +3 -3
- package/dist/application/javascript/ElectronActiveObservationPort.js +1 -0
- package/dist/application/{ElectronActiveObservationService.js → javascript/ElectronActiveObservationService.js} +3 -3
- package/dist/application/{ElectronBoundaryAnalysis.js → javascript/ElectronBoundaryAnalysis.js} +1 -1
- package/dist/application/{ElectronBoundaryGraphContext.js → javascript/ElectronBoundaryGraphContext.js} +1 -1
- package/dist/application/{ElectronEvidence.js → javascript/ElectronEvidence.js} +2 -2
- package/dist/application/javascript/ElectronObservationPort.js +1 -0
- package/dist/application/{ElectronObservationService.js → javascript/ElectronObservationService.js} +3 -3
- package/dist/application/{JavaScriptApplicationEvidence.js → javascript/JavaScriptApplicationEvidence.js} +3 -3
- package/dist/application/{JavaScriptApplicationEvidenceGraph.js → javascript/JavaScriptApplicationEvidenceGraph.js} +5 -5
- package/dist/application/{JavaScriptApplicationService.js → javascript/JavaScriptApplicationService.js} +10 -10
- package/dist/application/{JavaScriptApplicationWorkflowEvidence.js → javascript/JavaScriptApplicationWorkflowEvidence.js} +3 -3
- package/dist/application/{JavaScriptApplicationWorkflowService.js → javascript/JavaScriptApplicationWorkflowService.js} +12 -12
- package/dist/application/{JavaScriptArtifactAnalysis.js → javascript/JavaScriptArtifactAnalysis.js} +8 -24
- package/dist/application/javascript/JavaScriptArtifactAnalysisTypes.js +1 -0
- package/dist/application/{JavaScriptArtifactGraphAccumulator.js → javascript/JavaScriptArtifactGraphAccumulator.js} +16 -2
- package/dist/application/{JavaScriptArtifactGraphBuilder.js → javascript/JavaScriptArtifactGraphBuilder.js} +2 -2
- package/dist/application/{JavaScriptArtifactGraphContext.js → javascript/JavaScriptArtifactGraphContext.js} +1 -1
- package/dist/application/{JavaScriptArtifactGraphDocuments.js → javascript/JavaScriptArtifactGraphDocuments.js} +1 -1
- package/dist/application/{JavaScriptArtifactGraphFindings.js → javascript/JavaScriptArtifactGraphFindings.js} +20 -7
- package/dist/application/{JavaScriptArtifactGraphStructure.js → javascript/JavaScriptArtifactGraphStructure.js} +1 -1
- package/dist/application/{JavaScriptArtifactPathResolution.js → javascript/JavaScriptArtifactPathResolution.js} +6 -12
- package/dist/application/{JavaScriptArtifactReconstruction.js → javascript/JavaScriptArtifactReconstruction.js} +4 -8
- package/dist/application/{JavaScriptJsonModules.js → javascript/JavaScriptJsonModules.js} +1 -1
- package/dist/application/{JavaScriptModuleRelationships.js → javascript/JavaScriptModuleRelationships.js} +2 -2
- package/dist/application/javascript/JavaScriptRecoveryPort.js +1 -0
- package/dist/application/javascript/JavaScriptRecoveryService.js +52 -0
- package/dist/application/{JavaScriptReturnShapeProjection.js → javascript/JavaScriptReturnShapeProjection.js} +3 -3
- package/dist/application/{JavaScriptRuntimeObservationEvidence.js → javascript/JavaScriptRuntimeObservationEvidence.js} +2 -2
- package/dist/application/javascript/JavaScriptRuntimeObservationPort.js +1 -0
- package/dist/application/{JavaScriptRuntimeObservationService.js → javascript/JavaScriptRuntimeObservationService.js} +3 -3
- package/dist/application/{JavaScriptRuntimeReconciliationEvidence.js → javascript/JavaScriptRuntimeReconciliationEvidence.js} +3 -3
- package/dist/application/{JavaScriptRuntimeReconciliationService.js → javascript/JavaScriptRuntimeReconciliationService.js} +6 -6
- package/dist/application/{JavaScriptSemanticGraphAsyncProjection.js → javascript/JavaScriptSemanticGraphAsyncProjection.js} +1 -1
- package/dist/application/{JavaScriptSemanticGraphBuilder.js → javascript/JavaScriptSemanticGraphBuilder.js} +5 -3
- package/dist/application/{JavaScriptSemanticGraphChildProcessProjection.js → javascript/JavaScriptSemanticGraphChildProcessProjection.js} +1 -1
- package/dist/application/{JavaScriptSemanticGraphConstruction.js → javascript/JavaScriptSemanticGraphConstruction.js} +3 -2
- package/dist/application/{JavaScriptSemanticGraphDataProjection.js → javascript/JavaScriptSemanticGraphDataProjection.js} +1 -1
- package/dist/application/{JavaScriptSemanticGraphFingerprintProjection.js → javascript/JavaScriptSemanticGraphFingerprintProjection.js} +1 -1
- package/dist/application/{JavaScriptSemanticGraphFlowProjection.js → javascript/JavaScriptSemanticGraphFlowProjection.js} +2 -2
- package/dist/application/{JavaScriptSemanticGraphObjectProjection.js → javascript/JavaScriptSemanticGraphObjectProjection.js} +1 -1
- package/dist/application/{JavaScriptSemanticGraphProjection.js → javascript/JavaScriptSemanticGraphProjection.js} +2 -2
- package/dist/application/{JavaScriptSemanticGraphResourceProjection.js → javascript/JavaScriptSemanticGraphResourceProjection.js} +1 -1
- package/dist/application/{JavaScriptSemanticTraceService.js → javascript/JavaScriptSemanticTraceService.js} +6 -6
- package/dist/application/{ManagedApplicationGraphService.js → managed/ManagedApplicationGraphService.js} +7 -7
- package/dist/application/{ManagedMemberComparisonService.js → managed/ManagedMemberComparisonService.js} +10 -10
- package/dist/application/{ManagedNativeVerificationService.js → managed/ManagedNativeVerificationService.js} +7 -7
- package/dist/application/{ManagedReconstructionService.js → managed/ManagedReconstructionService.js} +7 -7
- package/dist/application/{NativeApiInspection.js → native/NativeApiInspection.js} +1 -1
- package/dist/application/{NativeCallRoutes.js → native/NativeCallRoutes.js} +3 -3
- package/dist/application/{NativeDispatchMetadataInspection.js → native/NativeDispatchMetadataInspection.js} +4 -4
- package/dist/application/{NativeUiActionTrace.js → native/NativeUiActionTrace.js} +7 -7
- package/dist/application/{NativeValueTrace.js → native/NativeValueTrace.js} +6 -6
- package/dist/{application/ArtifactInventory/hash.js → artifacts/ArtifactHash.js} +4 -2
- package/dist/artifacts/ArtifactPaths.js +3 -3
- package/dist/artifacts/ArtifactProvider.js +7 -37
- package/dist/artifacts/ArtifactProviderMetadata.js +36 -0
- package/dist/artifacts/AsarArtifactReader.js +195 -23
- package/dist/artifacts/AsarEntryStream.js +76 -0
- package/dist/artifacts/DirectoryArtifactReader.js +41 -7
- package/dist/artifacts/NativeDmgArtifactReader.js +161 -9
- package/dist/{application → artifacts/apple}/AppleAssetCatalogAnalysis.js +4 -4
- package/dist/{application → artifacts/apple}/InterfaceBuilderAnalysis.js +125 -51
- package/dist/artifacts/{KeyedArchiveReader.js → apple/KeyedArchiveReader.js} +21 -27
- package/dist/artifacts/apple/NibViewHierarchy.js +150 -0
- package/dist/{application → artifacts/javascript}/JavaScriptArtifactFiles.js +27 -6
- package/dist/artifacts/javascript/JavaScriptArtifactReader.js +6 -0
- package/dist/artifacts/readStableArtifact.js +52 -0
- package/dist/browser/BrowserScenarioSecrets.js +50 -8
- package/dist/browser/CdpAuthorizedMainFrame.js +4 -4
- package/dist/browser/CdpAuthorizedTarget.js +22 -0
- package/dist/browser/CdpBrowserProvider.js +4 -15
- package/dist/browser/CdpCaptureDocuments.js +33 -21
- package/dist/browser/CdpCaptureEventBodyShapes.js +3 -3
- package/dist/browser/CdpCaptureEventHandlers.js +26 -26
- package/dist/browser/CdpCaptureEventHelpers.js +6 -6
- package/dist/browser/CdpCaptureStorage.js +10 -8
- package/dist/browser/CdpCaptureStorageFingerprints.js +24 -22
- package/dist/browser/CdpCaptureValues.js +2 -2
- package/dist/browser/CdpCommandRejection.js +17 -0
- package/dist/browser/CdpConnection.js +51 -11
- package/dist/browser/CdpElectronInspection.js +10 -10
- package/dist/browser/CdpElectronProvider.js +3 -6
- package/dist/browser/CdpElectronScriptEvents.js +6 -6
- package/dist/browser/CdpElectronScripts.js +2 -2
- package/dist/browser/CdpElectronWorkers.js +4 -4
- package/dist/browser/CdpObservationSession.js +18 -23
- package/dist/browser/CdpPageCapture.js +4 -4
- package/dist/browser/CdpPageCaptureScripts.js +2 -2
- package/dist/browser/CdpPageCaptureWorkers.js +9 -9
- package/dist/browser/CdpSafeMetadata.js +48 -10
- package/dist/browser/CdpScreenshot.js +5 -5
- package/dist/browser/CdpTargetEvents.js +8 -0
- package/dist/browser/CdpTargetSession.js +2 -2
- package/dist/browser/CdpWebMcpDiscovery.js +22 -16
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +7 -6
- package/dist/browser/PlaywrightElectronActiveProvider.js +3 -6
- package/dist/browser/PlaywrightScenarioEvents.js +59 -51
- package/dist/browser/PlaywrightScenarioSession.js +8 -1
- package/dist/browser/WebSourceMapFetcher.js +37 -53
- package/dist/browser/assets/LocalWebScriptArtifacts.js +87 -0
- package/dist/browser/assets/PageScriptCapture.js +32 -0
- package/dist/browser/assets/PublishWebScripts.js +74 -0
- package/dist/browser/assets/ScenarioScriptCapture.js +76 -0
- package/dist/browser/assets/ScriptCaptureAdapters.js +57 -0
- package/dist/browser/assets/WebArtifactReads.js +56 -0
- package/dist/browser/assets/WebSourceLocationArtifacts.js +40 -0
- package/dist/browser/execution/CdpEventListeners.js +79 -0
- package/dist/browser/execution/CdpExecutionCapture.js +135 -0
- package/dist/browser/execution/CdpExecutionCollection.js +57 -0
- package/dist/browser/execution/CdpExecutionWindow.js +100 -0
- package/dist/browser/execution/CdpListenerSelector.js +22 -0
- package/dist/browser/execution/CdpPreciseCoverage.js +48 -0
- package/dist/browser/execution/CdpRuntimeInitiator.js +18 -0
- package/dist/browser/execution/CdpRuntimeProtocol.js +106 -0
- package/dist/browser/execution/CdpRuntimeRequests.js +81 -0
- package/dist/browser/execution/CdpRuntimeSession.js +163 -0
- package/dist/browser/execution/CdpRuntimeSources.js +223 -0
- package/dist/browser/execution/CdpWebRuntimeProvider.js +51 -0
- package/dist/browser/modules/NativeModuleResolver.js +210 -0
- package/dist/browser/modules/WebModuleArtifacts.js +40 -0
- package/dist/browser/network/PlaywrightNetworkContent.js +71 -0
- package/dist/browser/network/PlaywrightScenarioNetwork.js +180 -0
- package/dist/browser/providerIdentities.js +24 -0
- package/dist/catalogIdentity.js +23 -15
- package/dist/cli/androidCommands.js +13 -3
- package/dist/cli/applicationCommands.js +39 -8
- package/dist/cli/artifactCommands.js +1 -1
- package/dist/cli/browserAdvancedCommands.js +27 -9
- package/dist/cli/coreAnalysisCommands.js +5 -493
- package/dist/cli/coreBinaryCommands.js +211 -0
- package/dist/cli/coreNativeCommands.js +293 -0
- package/dist/cli/electronCommands.js +13 -18
- package/dist/cli/firmwareCommands.js +3 -3
- package/dist/cli/javascriptApplicationAnalysis.js +1 -1
- package/dist/cli/javascriptRecoveryCommands.js +45 -0
- package/dist/cli/managedCommands.js +4 -4
- package/dist/cli/managedProjectGraphCommand.js +1 -1
- package/dist/cli/referenceSourceImportStatus.js +6 -1
- package/dist/cli/utilityCommands.js +47 -23
- package/dist/cli/webModuleCommands.js +56 -0
- package/dist/cli/webRuntimeCommands.js +60 -0
- package/dist/cli/webScriptCommands.js +31 -0
- package/dist/cli/webSourceLocationCommands.js +42 -0
- package/dist/cli.js +10 -0
- package/dist/cliBrowserContext.js +4 -2
- package/dist/cliBrowserScenarioCommands.js +4 -3
- package/dist/cliCommandNames.js +8 -0
- package/dist/cliJavaScriptRuntimeCommands.js +6 -4
- package/dist/cliJsonInput.js +9 -2
- package/dist/cliOutput.js +37 -11
- package/dist/composition/android.js +3 -0
- package/dist/composition/auxiliaryAnalysisProviders.js +30 -0
- package/dist/composition/binary.js +25 -0
- package/dist/composition/browserObservation.js +3 -0
- package/dist/composition/browserScenario.js +3 -0
- package/dist/composition/directAnalysis.js +17 -0
- package/dist/composition/electronObservation.js +3 -0
- package/dist/composition/electronScenario.js +3 -0
- package/dist/composition/firmware.js +3 -0
- package/dist/composition/javascriptRecovery.js +3 -0
- package/dist/composition/javascriptRuntimeObservation.js +3 -0
- package/dist/composition/optionalObservationProviders.js +49 -0
- package/dist/composition/webModules.js +5 -0
- package/dist/composition/webRuntime.js +4 -0
- package/dist/composition/webSourceLocations.js +5 -0
- package/dist/config/parseConfig.js +22 -3
- package/dist/contracts/{androidToolContracts.js → android/androidToolContracts.js} +5 -5
- package/dist/contracts/applicationToolContracts.js +43 -8
- package/dist/contracts/artifactToolContracts.js +2 -2
- package/dist/contracts/browserScenarioToolContracts.js +1 -1
- package/dist/contracts/enhancedInputs.js +1 -1
- package/dist/contracts/{firmwareToolContracts.js → firmware/firmwareToolContracts.js} +5 -5
- package/dist/contracts/{applicationWorkflowInputContracts.js → javascript/applicationWorkflowInputContracts.js} +6 -6
- package/dist/contracts/{electronToolContracts.js → javascript/electronToolContracts.js} +6 -6
- package/dist/contracts/{javascriptApplicationWorkflowExamples.js → javascript/javascriptApplicationWorkflowExamples.js} +3 -3
- package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +23 -0
- package/dist/contracts/{javascriptRuntimeObservationToolContracts.js → javascript/javascriptRuntimeObservationToolContracts.js} +3 -3
- package/dist/contracts/{javascriptRuntimeReconciliationExample.js → javascript/javascriptRuntimeReconciliationExample.js} +5 -5
- package/dist/contracts/{managedToolContracts.js → managed/managedToolContracts.js} +3 -3
- package/dist/contracts/{managedWorkflowExamples.js → managed/managedWorkflowExamples.js} +1 -1
- package/dist/contracts/{managedWorkflowToolContracts.js → managed/managedWorkflowToolContracts.js} +6 -6
- package/dist/contracts/mobileApplicationGraphExamples.js +105 -0
- package/dist/contracts/{nativeToolContracts.js → native/nativeToolContracts.js} +14 -7
- package/dist/contracts/officialToolContracts.js +3 -3
- package/dist/contracts/sessionToolContracts.js +1 -1
- package/dist/contracts/toolContracts.js +13 -7
- package/dist/contracts/toolEffects.js +32 -0
- package/dist/contracts/toolOutputSchemaGroups.js +18 -18
- package/dist/contracts/webRuntimeToolContracts.js +43 -0
- package/dist/contracts/webScriptToolContracts.js +68 -0
- package/dist/domain/analysisErrorCore.js +4 -2
- package/dist/domain/analysisErrorProjection.js +1 -0
- package/dist/domain/{androidApplication.js → android/androidApplication.js} +7 -6
- package/dist/domain/apple/appleApplication.js +277 -0
- package/dist/domain/{appleAssetCatalog.js → apple/appleAssetCatalog.js} +2 -2
- package/dist/domain/apple/appleBundleAnatomy.js +236 -0
- package/dist/domain/{interfaceBuilderGraph.js → apple/interfaceBuilderGraph.js} +47 -314
- package/dist/domain/apple/interfaceBuilderKeyedArchive.js +411 -0
- package/dist/domain/{keyedArchive.js → apple/keyedArchive.js} +10 -9
- package/dist/domain/apple/plistValue.js +35 -0
- package/dist/domain/artifactInventoryEvidence.js +12 -2
- package/dist/domain/artifactInventorySnapshot.js +1 -0
- package/dist/domain/artifactOperationError.js +5 -1
- package/dist/domain/artifactPathSyntax.js +26 -0
- package/dist/domain/browserNetworkEvidence.js +82 -0
- package/dist/domain/browserObservationError.js +2 -0
- package/dist/domain/browserObservationSchemas.js +2 -1
- package/dist/domain/browserScenarioCapture.js +22 -0
- package/dist/domain/browserScenarioCaptureValues.js +25 -0
- package/dist/domain/browserScenarioDiff.js +6 -3
- package/dist/domain/browserScenarioDiffEvidence.js +35 -1
- package/dist/domain/browserScenarioValues.js +12 -1
- package/dist/domain/browserSession.js +2 -7
- package/dist/domain/bundleComparison.js +2 -1
- package/dist/domain/callPath.js +52 -44
- package/dist/domain/comparisonStatus.js +39 -0
- package/dist/domain/evidenceBundle.js +98 -35
- package/dist/domain/{firmwareAnalysis.js → firmware/firmwareAnalysis.js} +2 -2
- package/dist/domain/functionComparisonNormalization.js +11 -13
- package/dist/domain/hopperValues.js +2 -2
- package/dist/domain/inputIssueProjection.js +17 -2
- package/dist/domain/{electronObservation.js → javascript/electronObservation.js} +5 -11
- package/dist/domain/{electronStaticAnalysisBrowser.js → javascript/electronStaticAnalysisBrowser.js} +4 -3
- package/dist/domain/{electronStaticAnalysisIpc.js → javascript/electronStaticAnalysisIpc.js} +2 -2
- package/dist/domain/{electronStaticAnalysisNative.js → javascript/electronStaticAnalysisNative.js} +12 -13
- package/dist/domain/javascript/electronStaticAnalysisTypes.js +1 -0
- package/dist/domain/{electronStaticAnalysisValues.js → javascript/electronStaticAnalysisValues.js} +3 -3
- package/dist/domain/{javascriptApplicationAnalysis.js → javascript/javascriptApplicationAnalysis.js} +2 -2
- package/dist/domain/{javascriptApplicationChangeGraph.js → javascript/javascriptApplicationChangeGraph.js} +1 -1
- package/dist/domain/{javascriptApplicationEvidenceSchemas.js → javascript/javascriptApplicationEvidenceSchemas.js} +6 -4
- package/dist/domain/{javascriptApplicationGraph.js → javascript/javascriptApplicationGraph.js} +2 -2
- package/dist/domain/{javascriptApplicationGraphSchemas.js → javascript/javascriptApplicationGraphSchemas.js} +2 -2
- package/dist/domain/{javascriptApplicationVersionComparison.js → javascript/javascriptApplicationVersionComparison.js} +2 -2
- package/dist/domain/{javascriptApplicationVersionComparisonSchemas.js → javascript/javascriptApplicationVersionComparisonSchemas.js} +3 -3
- package/dist/domain/{javascriptApplicationVersionItems.js → javascript/javascriptApplicationVersionItems.js} +2 -2
- package/dist/domain/{javascriptApplicationVersionKeys.js → javascript/javascriptApplicationVersionKeys.js} +16 -9
- package/dist/domain/javascript/javascriptArtifactFiles.js +1 -0
- package/dist/domain/{javascriptAstFingerprint.js → javascript/javascriptAstFingerprint.js} +38 -22
- package/dist/domain/javascript/javascriptAstValues.js +23 -0
- package/dist/domain/{javascriptExportShapeComparison.js → javascript/javascriptExportShapeComparison.js} +1 -1
- package/dist/domain/{javascriptExportShapeComparisonSchemas.js → javascript/javascriptExportShapeComparisonSchemas.js} +2 -2
- package/dist/domain/{javascriptExportShapeSelection.js → javascript/javascriptExportShapeSelection.js} +1 -1
- package/dist/domain/{javascriptExportShapeVariants.js → javascript/javascriptExportShapeVariants.js} +1 -1
- package/dist/domain/{javascriptFeatureSeed.js → javascript/javascriptFeatureSeed.js} +4 -3
- package/dist/domain/{javascriptFeatureTrace.js → javascript/javascriptFeatureTrace.js} +2 -2
- package/dist/domain/{javascriptFeatureTraceSchemas.js → javascript/javascriptFeatureTraceSchemas.js} +32 -18
- package/dist/domain/{javascriptFeatureTraversal.js → javascript/javascriptFeatureTraversal.js} +6 -2
- package/dist/domain/{javascriptNativeHandoff.js → javascript/javascriptNativeHandoff.js} +1 -1
- package/dist/domain/javascript/javascriptRecovery.js +88 -0
- package/dist/domain/{javascriptRuntimeLoadState.js → javascript/javascriptRuntimeLoadState.js} +1 -1
- package/dist/domain/{javascriptRuntimeObservation.js → javascript/javascriptRuntimeObservation.js} +2 -2
- package/dist/domain/{javascriptRuntimeReconciliationActive.js → javascript/javascriptRuntimeReconciliationActive.js} +3 -3
- package/dist/domain/{javascriptRuntimeReconciliationGraph.js → javascript/javascriptRuntimeReconciliationGraph.js} +1 -1
- package/dist/domain/{javascriptRuntimeReconciliationMatching.js → javascript/javascriptRuntimeReconciliationMatching.js} +2 -2
- package/dist/domain/{javascriptRuntimeReconciliationParsing.js → javascript/javascriptRuntimeReconciliationParsing.js} +5 -5
- package/dist/domain/{javascriptRuntimeReconciliationResult.js → javascript/javascriptRuntimeReconciliationResult.js} +2 -2
- package/dist/domain/{javascriptRuntimeReconciliationSchemas.js → javascript/javascriptRuntimeReconciliationSchemas.js} +4 -4
- package/dist/domain/{javascriptRuntimeStaticCandidates.js → javascript/javascriptRuntimeStaticCandidates.js} +1 -1
- package/dist/domain/{javascriptSemanticAnalysis.js → javascript/javascriptSemanticAnalysis.js} +40 -14
- package/dist/domain/{javascriptSemanticAsyncEffects.js → javascript/javascriptSemanticAsyncEffects.js} +2 -1
- package/dist/domain/{javascriptSemanticCallResolution.js → javascript/javascriptSemanticCallResolution.js} +10 -5
- package/dist/domain/{javascriptSemanticCalls.js → javascript/javascriptSemanticCalls.js} +7 -4
- package/dist/domain/{javascriptSemanticChildProcesses.js → javascript/javascriptSemanticChildProcesses.js} +4 -2
- package/dist/domain/{javascriptSemanticDataEffectHelpers.js → javascript/javascriptSemanticDataEffectHelpers.js} +7 -6
- package/dist/domain/{javascriptSemanticDataEffects.js → javascript/javascriptSemanticDataEffects.js} +8 -6
- package/dist/domain/{javascriptSemanticFingerprints.js → javascript/javascriptSemanticFingerprints.js} +40 -16
- package/dist/domain/{javascriptSemanticGraph.js → javascript/javascriptSemanticGraph.js} +2 -2
- package/dist/domain/{javascriptSemanticGraphSchemas.js → javascript/javascriptSemanticGraphSchemas.js} +3 -3
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +116 -0
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +53 -0
- package/dist/domain/{javascriptSemanticObjects.js → javascript/javascriptSemanticObjects.js} +5 -5
- package/dist/domain/{javascriptSemanticPrimitives.js → javascript/javascriptSemanticPrimitives.js} +1 -1
- package/dist/domain/{javascriptSemanticProjection.js → javascript/javascriptSemanticProjection.js} +31 -44
- package/dist/domain/{javascriptSemanticPromises.js → javascript/javascriptSemanticPromises.js} +77 -22
- package/dist/domain/{javascriptSemanticProvenance.js → javascript/javascriptSemanticProvenance.js} +4 -1
- package/dist/domain/{javascriptSemanticQuery.js → javascript/javascriptSemanticQuery.js} +1 -1
- package/dist/domain/{javascriptSemanticQueryAssessment.js → javascript/javascriptSemanticQueryAssessment.js} +1 -1
- package/dist/domain/{javascriptSemanticQueryIdentity.js → javascript/javascriptSemanticQueryIdentity.js} +1 -1
- package/dist/domain/{javascriptSemanticQuerySchemas.js → javascript/javascriptSemanticQuerySchemas.js} +3 -3
- package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +25 -0
- package/dist/domain/{javascriptSemanticResources.js → javascript/javascriptSemanticResources.js} +2 -1
- package/dist/domain/{javascriptSemanticReturns.js → javascript/javascriptSemanticReturns.js} +1 -1
- package/dist/domain/{javascriptSemanticTraceSchemas.js → javascript/javascriptSemanticTraceSchemas.js} +2 -2
- package/dist/domain/javascript/javascriptSemanticTraversal.js +55 -0
- package/dist/domain/javascript/javascriptSemanticValueTypes.js +1 -0
- package/dist/domain/{javascriptSemanticValues.js → javascript/javascriptSemanticValues.js} +72 -48
- package/dist/domain/{javascriptStaticAnalysis.js → javascript/javascriptStaticAnalysis.js} +7 -4
- package/dist/domain/{javascriptStaticAnalysisBundler.js → javascript/javascriptStaticAnalysisBundler.js} +14 -11
- package/dist/domain/{javascriptStaticAnalysisCalls.js → javascript/javascriptStaticAnalysisCalls.js} +2 -2
- package/dist/domain/{javascriptStaticAnalysisHelpers.js → javascript/javascriptStaticAnalysisHelpers.js} +231 -40
- package/dist/domain/{sourceToBundleComparison.js → javascript/sourceToBundleComparison.js} +2 -2
- package/dist/domain/{sourceToBundleComparisonSchemas.js → javascript/sourceToBundleComparisonSchemas.js} +4 -4
- package/dist/domain/{sourceToBundleSignals.js → javascript/sourceToBundleSignals.js} +2 -2
- package/dist/domain/{managedApplicationGraph.js → managed/managedApplicationGraph.js} +4 -4
- package/dist/domain/{managedApplicationGraphNodes.js → managed/managedApplicationGraphNodes.js} +1 -1
- package/dist/domain/{managedArtifact.js → managed/managedArtifact.js} +1 -1
- package/dist/domain/{managedMemberComparison.js → managed/managedMemberComparison.js} +4 -4
- package/dist/domain/{managedMemberComparisonCoverage.js → managed/managedMemberComparisonCoverage.js} +2 -1
- package/dist/domain/{managedMemberComparisonItems.js → managed/managedMemberComparisonItems.js} +97 -40
- package/dist/domain/{managedMemberComparisonMatch.js → managed/managedMemberComparisonMatch.js} +22 -11
- package/dist/domain/{managedNativeVerification.js → managed/managedNativeVerification.js} +1 -1
- package/dist/domain/{managedNativeVerificationMatch.js → managed/managedNativeVerificationMatch.js} +3 -3
- package/dist/domain/{managedNativeVerificationSchemas.js → managed/managedNativeVerificationSchemas.js} +6 -5
- package/dist/domain/{managedReconstruction.js → managed/managedReconstruction.js} +3 -3
- package/dist/domain/{nativeFunctionAnnotations.js → native/nativeFunctionAnnotations.js} +1 -1
- package/dist/domain/{nativeInspection.js → native/nativeInspection.js} +1 -1
- package/dist/domain/{nativeInvestigationGraph.js → native/nativeInvestigationGraph.js} +13 -4
- package/dist/domain/{nativeLoadImage.js → native/nativeLoadImage.js} +1 -1
- package/dist/domain/{nativeUiObservation.js → native/nativeUiObservation.js} +20 -6
- package/dist/domain/{objcSwiftMetadata.js → native/objcSwiftMetadata.js} +17 -0
- package/dist/domain/processCapture.js +4 -2
- package/dist/domain/processScenario.js +17 -17
- package/dist/domain/propertyListKeys.js +69 -0
- package/dist/domain/providerCleanupError.js +5 -2
- package/dist/domain/reconstructionCoverageEvaluation.js +46 -24
- package/dist/domain/reconstructionCoverageInput.js +7 -0
- package/dist/domain/runtimeVersion.js +2 -0
- package/dist/domain/sourceMapEnvelope.js +38 -0
- package/dist/domain/unicodeCodePointOrder.js +11 -6
- package/dist/domain/webBundleAnalyzerAst.js +2 -34
- package/dist/domain/webBundleAnalyzerInspection.js +12 -9
- package/dist/domain/webEventListeners.js +28 -0
- package/dist/domain/webExecution.js +74 -0
- package/dist/domain/webMcpDiscovery.js +1 -7
- package/dist/domain/webModuleImports.js +104 -0
- package/dist/domain/webModuleTrace.js +106 -0
- package/dist/domain/webRuntime.js +69 -0
- package/dist/domain/webScreenshot.js +1 -7
- package/dist/domain/webScriptArtifacts.js +39 -0
- package/dist/domain/webScriptExport.js +86 -0
- package/dist/domain/webScriptExportError.js +13 -0
- package/dist/domain/webScriptExportPlan.js +108 -0
- package/dist/domain/webSourceLocation.js +106 -0
- package/dist/domain/webSourcePosition.js +21 -0
- package/dist/dotnet/ManagedArtifactInspector.js +1 -1
- package/dist/dotnet/ManagedMemberInspector.js +1 -1
- package/dist/dotnet/ManagedMemberInspectorCore.js +34 -0
- package/dist/dotnet/ManagedMemberRows.js +5 -3
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +22 -16
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +56 -50
- package/dist/dotnet/ManagedStaticProvider.js +3 -33
- package/dist/dotnet/ManagedStaticProviderMetadata.js +36 -0
- package/dist/evaluation/CodexAgentEval.js +2 -1
- package/dist/firmware/FirmwareProvider.js +18 -12
- package/dist/firmware/FirmwarePublication.js +1 -1
- package/dist/firmware/FirmwareRelease.js +1 -1
- package/dist/firmware/FirmwareReports.js +12 -0
- package/dist/firmware/FirmwareVersion.js +80 -0
- package/dist/generatedMcpToolCatalog.js +1 -1
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraFunctionValues.js +5 -5
- package/dist/ghidra/GhidraInstallation.js +38 -34
- package/dist/ghidra/GhidraInstallationPolicy.js +140 -0
- package/dist/ghidra/GhidraInventoryValues.js +1 -1
- package/dist/ghidra/GhidraLauncher.js +12 -4
- package/dist/ghidra/GhidraLoadImageAttest.js +36 -0
- package/dist/ghidra/GhidraLoadImageValues.js +1 -1
- package/dist/ghidra/GhidraProvider.js +15 -233
- package/dist/ghidra/GhidraProviderCapabilities.js +7 -14
- package/dist/ghidra/GhidraProviderClient.js +209 -0
- package/dist/ghidra/GhidraResponseBuffer.js +7 -1
- package/dist/ghidra/extensions/nativeaot/NativeAotReport.js +17 -1
- package/dist/hopper/HopperProvider.js +2 -48
- package/dist/hopper/HopperProviderCapabilities.js +73 -0
- package/dist/hopper/HopperResponseStream.js +7 -1
- package/dist/hopper/LinuxPrivateDisplayProbe.js +4 -4
- package/dist/ida/IdaProviderCapabilities.js +3 -11
- package/dist/ida/IdaSessionClient.js +12 -0
- package/dist/{browser → inspector}/JavaScriptRuntimeScope.js +16 -5
- package/dist/{browser → inspector}/V8InspectorCaptureProjection.js +46 -8
- package/dist/{browser → inspector}/V8InspectorEndpoint.js +1 -1
- package/dist/{browser → inspector}/V8InspectorProvider.js +10 -13
- package/dist/inspector/providerIdentity.js +6 -0
- package/dist/javascript/recovery/RecoveryFiles.js +122 -0
- package/dist/javascript/recovery/WakaruCommand.js +116 -0
- package/dist/javascript/recovery/WakaruExecution.js +100 -0
- package/dist/javascript/recovery/WakaruProvider.js +96 -0
- package/dist/javascript/recovery/WakaruPublication.js +102 -0
- package/dist/javascript/recovery/WakaruRelease.js +29 -0
- package/dist/javascript/recovery/WakaruReport.js +134 -0
- package/dist/javascript/sourceMaps/SourceMapCodecProcess.js +37 -0
- package/dist/javascript/sourceMaps/SourceMapCodecProtocol.js +20 -0
- package/dist/javascript/sourceMaps/SourceMapCommand.js +176 -0
- package/dist/javascript/sourceMaps/SourceMapDecoder.js +61 -0
- package/dist/javascript/sourceMaps/SourceMapFormat.js +185 -0
- package/dist/javascript/sourceMaps/TraceSourceMap.js +138 -0
- package/dist/main/shutdown.js +8 -2
- package/dist/main/transport.js +24 -7
- package/dist/main.js +4 -18
- package/dist/native/AppleDispatchCoverage.js +58 -0
- package/dist/native/AppleDispatchMetadata.js +71 -509
- package/dist/native/AppleMachoFixups.js +292 -0
- package/dist/native/AppleMachoSelection.js +188 -0
- package/dist/native/AppleObjcCategories.js +59 -0
- package/dist/native/AppleObjcDispatchFacets.js +257 -0
- package/dist/native/AppleObjcProperties.js +68 -0
- package/dist/native/AppleObjcProtocols.js +2 -1
- package/dist/native/AppleSwiftDispatchFacets.js +150 -0
- package/dist/native/NativeMacOSProvider.js +132 -72
- package/dist/native/NativeMacOSProviderMetadata.js +42 -0
- package/dist/native/NativeMachoInspection.js +45 -14
- package/dist/native/NativeUiHelperRuntime.js +7 -3
- package/dist/native/NativeUiObservation.js +8 -4
- package/dist/native/NativeUiOutputBudget.js +8 -0
- package/dist/native/parsers/codesign.js +40 -5
- package/dist/native/parsers/demangle.js +6 -2
- package/dist/native/parsers/dyldInfo.js +13 -4
- package/dist/native/parsers/echoedPath.js +14 -0
- package/dist/native/parsers/lipo.js +14 -0
- package/dist/native/parsers/otool.js +1 -1
- package/dist/native/parsers/plist.js +174 -19
- package/dist/process/ExecFileOutput.js +2 -0
- package/dist/process/ProviderProcess.js +38 -17
- package/dist/reference/ReferenceSourceReaderEntries.js +6 -1
- package/dist/server/createServer.js +48 -6
- package/dist/server/mcpClientMetadata.js +6 -3
- package/dist/server/registerAndroidTools.js +1 -1
- package/dist/server/registerApplicationTools/compareExportShapes.js +2 -2
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +2 -2
- package/dist/server/registerApplicationTools/compareVersions.js +2 -2
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +43 -0
- package/dist/server/registerApplicationTools/traceFeature.js +1 -1
- package/dist/server/registerApplicationTools/traceSemantics.js +1 -1
- package/dist/server/registerApplicationTools.js +2 -0
- package/dist/server/registerBrowserScenarioTool.js +6 -2
- package/dist/server/registerBrowserTools.js +13 -2
- package/dist/server/registerCloseLifecycleTool.js +1 -1
- package/dist/server/registerElectronTools.js +21 -7
- package/dist/server/registerJavaScriptRecoveryTool.js +17 -0
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -4
- package/dist/server/registerManagedTools.js +3 -3
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +2 -2
- package/dist/server/registerManagedWorkflowTools/contract.js +1 -1
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +1 -1
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +1 -1
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +2 -2
- package/dist/server/registerNativeTools.js +1 -1
- package/dist/server/registerPrompts.js +5 -1
- package/dist/server/registerSessionTools.js +1 -1
- package/dist/server/registerWebModuleTool.js +17 -0
- package/dist/server/registerWebRuntimeTools.js +31 -0
- package/dist/server/registerWebScriptTool.js +18 -0
- package/dist/server/registerWebSourceLocationTool.js +17 -0
- package/dist/server/sessionAvailabilityPolicy.js +24 -12
- package/dist/windows/WindowsOwnedProcess.js +3 -1
- package/install.sh +12 -2
- package/native/windows/README.md +5 -0
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +40 -19
- package/scripts/hopper-demo-x11.py +67 -8
- package/scripts/rea.mjs +9 -1
- package/skills/reverse-engineer-anything/SKILL.md +3 -3
- package/skills/reverse-engineer-anything/references/android-applications.md +2 -2
- package/skills/reverse-engineer-anything/references/javascript-applications.md +1 -1
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +32 -23
- package/dist/application/runtime.js +0 -53
- package/dist/domain/appleApplication.js +0 -181
- package/dist/domain/javascriptAstValues.js +0 -13
- package/dist/domain/javascriptSemanticTraversal.js +0 -30
- package/dist/native/NativeHostCapabilities.js +0 -23
- /package/dist/application/{AndroidAnalysisPort.js → DirectAnalysisDependencies.js} +0 -0
- /package/dist/application/{BinarySessionPort.js → WebModulePorts.js} +0 -0
- /package/dist/application/{ElectronActiveObservationPort.js → WebRuntimePort.js} +0 -0
- /package/dist/application/{ElectronObservationPort.js → WebScriptArtifactPort.js} +0 -0
- /package/dist/application/{FirmwareAnalysisPort.js → WebSourceLocationPorts.js} +0 -0
- /package/dist/application/{JavaScriptArtifactAnalysisTypes.js → android/AndroidAnalysisPort.js} +0 -0
- /package/dist/application/{AbortablePromise.js → binary/AbortablePromise.js} +0 -0
- /package/dist/application/{JavaScriptRuntimeObservationPort.js → binary/BinarySessionPort.js} +0 -0
- /package/dist/application/{BinarySessionStatus.js → binary/BinarySessionStatus.js} +0 -0
- /package/dist/{domain/electronStaticAnalysisTypes.js → application/firmware/FirmwareAnalysisPort.js} +0 -0
- /package/dist/{domain/javascriptSemanticValueTypes.js → application/investigation/InvestigationRecordPort.js} +0 -0
- /package/dist/application/{ElectronBoundaryGraph.js → javascript/ElectronBoundaryGraph.js} +0 -0
- /package/dist/application/{ElectronBoundaryGraphIpc.js → javascript/ElectronBoundaryGraphIpc.js} +0 -0
- /package/dist/application/{ElectronBoundaryGraphNative.js → javascript/ElectronBoundaryGraphNative.js} +0 -0
- /package/dist/application/{ElectronBoundaryGraphWindows.js → javascript/ElectronBoundaryGraphWindows.js} +0 -0
- /package/dist/application/{JavaScriptArtifactGraphBundlers.js → javascript/JavaScriptArtifactGraphBundlers.js} +0 -0
- /package/dist/application/{JavaScriptArtifactGraphEvidence.js → javascript/JavaScriptArtifactGraphEvidence.js} +0 -0
- /package/dist/application/{JavaScriptArtifactReconstructionInput.js → javascript/JavaScriptArtifactReconstructionInput.js} +0 -0
- /package/dist/application/{JavaScriptSemanticGraphEvidence.js → javascript/JavaScriptSemanticGraphEvidence.js} +0 -0
- /package/dist/application/{JavaScriptSemanticGraphValueProjection.js → javascript/JavaScriptSemanticGraphValueProjection.js} +0 -0
- /package/dist/artifacts/{NibArchive.js → apple/NibArchive.js} +0 -0
- /package/dist/domain/{androidAnalysis.js → android/androidAnalysis.js} +0 -0
- /package/dist/domain/{electronActiveObservation.js → javascript/electronActiveObservation.js} +0 -0
- /package/dist/domain/{electronStaticAnalysis.js → javascript/electronStaticAnalysis.js} +0 -0
- /package/dist/domain/{javascriptExportShapeComparisonIdentity.js → javascript/javascriptExportShapeComparisonIdentity.js} +0 -0
- /package/dist/domain/{javascriptRuntimeReconciliation.js → javascript/javascriptRuntimeReconciliation.js} +0 -0
- /package/dist/domain/{javascriptRuntimeReconciliationRuntime.js → javascript/javascriptRuntimeReconciliationRuntime.js} +0 -0
- /package/dist/domain/{javascriptSemanticCoverage.js → javascript/javascriptSemanticCoverage.js} +0 -0
- /package/dist/domain/{javascriptSemanticDerivedAnalysis.js → javascript/javascriptSemanticDerivedAnalysis.js} +0 -0
- /package/dist/domain/{javascriptSemanticGraphSerialization.js → javascript/javascriptSemanticGraphSerialization.js} +0 -0
- /package/dist/domain/{javascriptSemanticIr.js → javascript/javascriptSemanticIr.js} +0 -0
- /package/dist/domain/{javascriptSemanticQueryRelations.js → javascript/javascriptSemanticQueryRelations.js} +0 -0
- /package/dist/domain/{javascriptSemanticState.js → javascript/javascriptSemanticState.js} +0 -0
- /package/dist/domain/{javascriptSourceParser.js → javascript/javascriptSourceParser.js} +0 -0
- /package/dist/domain/{javascriptStaticAnalysisFindings.js → javascript/javascriptStaticAnalysisFindings.js} +0 -0
- /package/dist/domain/{javascriptStaticAnalysisState.js → javascript/javascriptStaticAnalysisState.js} +0 -0
- /package/dist/domain/{javascriptStaticAnalysisTypes.js → javascript/javascriptStaticAnalysisTypes.js} +0 -0
- /package/dist/domain/{managedApplicationGraphCoverage.js → managed/managedApplicationGraphCoverage.js} +0 -0
- /package/dist/domain/{managedApplicationGraphNodeCoverage.js → managed/managedApplicationGraphNodeCoverage.js} +0 -0
- /package/dist/domain/{nativeApiBoundary.js → native/nativeApiBoundary.js} +0 -0
- /package/dist/domain/{nativeDataType.js → native/nativeDataType.js} +0 -0
- /package/dist/domain/{nativeInstruction.js → native/nativeInstruction.js} +0 -0
- /package/dist/domain/{nativeMetadataRecovery.js → native/nativeMetadataRecovery.js} +0 -0
- /package/dist/domain/{nativeValueFlow.js → native/nativeValueFlow.js} +0 -0
- /package/dist/domain/{nativeValueTrace.js → native/nativeValueTrace.js} +0 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rea-agents",
|
|
3
3
|
"mcpName": "io.github.morluto/rea",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "5.0.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": {
|
|
@@ -42,10 +42,12 @@
|
|
|
42
42
|
"dist",
|
|
43
43
|
"install.sh",
|
|
44
44
|
"bridge/hopper_bridge.py",
|
|
45
|
+
"bridge/native/NativeUIChildren.swift",
|
|
45
46
|
"bridge/native/ReaNativeUI.swift",
|
|
46
47
|
"bridge/ghidra/ReaGhidraBridge.java",
|
|
47
48
|
"bridge/ghidra/ReaGhidraExtensions.java",
|
|
48
49
|
"bridge/ghidra/ReaGhidraPrepareCom.java",
|
|
50
|
+
"bridge/android/ReaJadxBridge.java",
|
|
49
51
|
"scripts/rea.mjs",
|
|
50
52
|
"scripts/electron-active-hook.cjs",
|
|
51
53
|
"scripts/electron-active-hook-boundaries.cjs",
|
|
@@ -81,11 +83,11 @@
|
|
|
81
83
|
"check:pr": "turbo run typecheck lint format:check knip metadata:check test:run && npm run docs:check && npm run jscpd && npm run scan:todos",
|
|
82
84
|
"precheck:ci": "npm run deps:check",
|
|
83
85
|
"check:ci": "turbo run typecheck lint format:check knip metadata:check jscpd scan:todos",
|
|
84
|
-
"build:cached": "turbo run build",
|
|
86
|
+
"build:cached": "node scripts/check-dependency-install.mjs && turbo run build",
|
|
85
87
|
"format": "oxfmt .",
|
|
86
88
|
"format:check": "oxfmt --check .",
|
|
87
|
-
"lint": "oxlint",
|
|
88
|
-
"lint:fix": "oxlint --fix",
|
|
89
|
+
"lint": "oxlint && npm run verify:module-boundaries",
|
|
90
|
+
"lint:fix": "oxlint --fix && npm run verify:module-boundaries",
|
|
89
91
|
"knip": "knip",
|
|
90
92
|
"jscpd": "jscpd src/ tests/",
|
|
91
93
|
"scan:todos": "node scripts/scan-todos.mjs",
|
|
@@ -119,29 +121,32 @@
|
|
|
119
121
|
"typecheck": "tsc --noEmit",
|
|
120
122
|
"verify:test-temp-hygiene": "npm run build:cached && node scripts/verify-test-temp-hygiene.mjs",
|
|
121
123
|
"verify:hopper": "npm run verify:fixtures && npm run build:cached && node scripts/verify-real-hopper.mjs",
|
|
122
|
-
"verify:apple-dispatch": "npm run build:cached && node scripts/verify
|
|
124
|
+
"verify:apple-dispatch": "npm run build:cached && node scripts/verify/apple/dispatch.mjs",
|
|
123
125
|
"verify:native-ui": "npm run build:cached && node scripts/verify-native-ui.mjs",
|
|
124
|
-
"verify:keyed-archive": "npm run build:cached && node scripts/verify
|
|
126
|
+
"verify:keyed-archive": "npm run build:cached && node scripts/verify/apple/keyed-archive.mjs",
|
|
127
|
+
"verify:macos-bundle": "npm run build:cached && node scripts/verify/apple/macos-bundle.mjs",
|
|
125
128
|
"verify:ghidra": "npm run build:cached && node scripts/verify-real-ghidra.mjs",
|
|
126
129
|
"verify:ida": "npm run build:cached && node scripts/verify-real-ida.mjs",
|
|
127
130
|
"verify:ghidra:switch": "npm run build:cached && node scripts/verify-real-ghidra-switch.mjs",
|
|
128
131
|
"verify:ghidra:dos": "npm run build:cached && node scripts/verify-real-ghidra-dos.mjs",
|
|
129
132
|
"verify:ghidra:com": "npm run build:cached && node scripts/verify-real-ghidra-com.mjs",
|
|
130
133
|
"verify:ghidra:aarch64-jump-table": "npm run build:cached && node scripts/verify-real-ghidra.mjs --aarch64-jump-table",
|
|
131
|
-
"verify:interface-builder": "npm run build:cached && node scripts/verify
|
|
134
|
+
"verify:interface-builder": "npm run build:cached && node scripts/verify/apple/interface-builder.mjs",
|
|
132
135
|
"verify:ghidra:cross-format": "npm run build:cached && node scripts/verify-real-ghidra.mjs --cross-format",
|
|
133
136
|
"verify:ghidra:windows": "npm run build:cached && npm run build:ghidra-windows-fixture && node scripts/verify-real-ghidra-windows.mjs",
|
|
134
137
|
"verify:browser": "npm run build:cached && node scripts/verify-real-browser.mjs",
|
|
138
|
+
"verify:browser:dom": "node scripts/verify-browser-dom-destinations.mjs",
|
|
139
|
+
"verify:browser:network": "npm run build:cached && node scripts/verify-browser-network.mjs",
|
|
135
140
|
"verify:electron": "npm run build:cached && node scripts/verify-real-electron.mjs",
|
|
136
|
-
"verify:inspector": "npm run build:cached && node scripts/verify
|
|
137
|
-
"verify:javascript-runtime": "npm run build:cached && node scripts/verify
|
|
138
|
-
"verify:javascript:digests": "npm run build:cached && node scripts/verify
|
|
139
|
-
"verify:application-workflows": "npm run build:cached && node scripts/verify
|
|
140
|
-
"verify:managed": "npm run build:cached && node scripts/verify
|
|
141
|
-
"verify:firmware": "npm run build:cached && node scripts/verify
|
|
142
|
-
"fixtures:firmware": "node scripts/generate
|
|
143
|
-
"verify:android": "npm run build:cached && node scripts/verify
|
|
144
|
-
"fixtures:android": "node scripts/fetch
|
|
141
|
+
"verify:inspector": "npm run build:cached && node scripts/verify/inspector/runtime-observation.mjs",
|
|
142
|
+
"verify:javascript-runtime": "npm run build:cached && node scripts/verify/javascript/runtime-observation.mjs",
|
|
143
|
+
"verify:javascript:digests": "npm run build:cached && node scripts/verify/javascript/digests.mjs",
|
|
144
|
+
"verify:application-workflows": "npm run build:cached && node scripts/verify/javascript/application-workflows.mjs",
|
|
145
|
+
"verify:managed": "npm run build:cached && node scripts/verify/managed/conformance.mjs",
|
|
146
|
+
"verify:firmware": "npm run build:cached && node scripts/verify/firmware/analysis.mjs",
|
|
147
|
+
"fixtures:firmware": "node scripts/fixtures/firmware/generate.mjs",
|
|
148
|
+
"verify:android": "npm run build:cached && node scripts/verify/android/analysis.mjs",
|
|
149
|
+
"fixtures:android": "node scripts/fixtures/android/fetch.mjs",
|
|
145
150
|
"verify:agent": "npm run build:cached && node scripts/verify-agent-experience.mjs",
|
|
146
151
|
"verify:hopper:linux": "npm run verify:fixtures && npm run build:cached && node scripts/verify-real-hopper-linux.mjs",
|
|
147
152
|
"verify:setup:linux": "npm run build:cached && node scripts/verify-linux-setup-e2e.mjs",
|
|
@@ -156,6 +161,9 @@
|
|
|
156
161
|
"config:print": "node scripts/print-mcp-config.mjs",
|
|
157
162
|
"evidence:generate": "npm run build:cached && node scripts/generate-completion-ledger.mjs",
|
|
158
163
|
"evidence:check": "npm run build:cached && node scripts/generate-completion-ledger.mjs --check",
|
|
164
|
+
"docs:dev": "vitepress dev docs",
|
|
165
|
+
"docs:build": "vitepress build docs",
|
|
166
|
+
"docs:preview": "vitepress preview docs",
|
|
159
167
|
"docs:generate": "node scripts/run-exclusive.mjs docs npm run docs:generate:unlocked",
|
|
160
168
|
"docs:generate:unlocked": "npm run metadata:generate && npm run build:cached && node scripts/generate-mcp-tool-catalog.mjs && node scripts/generate-skill-metadata.mjs && node scripts/generate-product-catalog.mjs && node scripts/generate-completion-ledger.mjs && node scripts/generate-error-schema.mjs",
|
|
161
169
|
"docs:check": "node scripts/run-exclusive.mjs docs turbo run docs:check:built",
|
|
@@ -163,7 +171,7 @@
|
|
|
163
171
|
"docs:error-schema": "npm run build:cached && node scripts/generate-error-schema.mjs",
|
|
164
172
|
"prepack": "node scripts/prepack.mjs",
|
|
165
173
|
"prepare": "node scripts/prepare.mjs",
|
|
166
|
-
"verify:asset-catalog": "npm run build:cached && node scripts/verify
|
|
174
|
+
"verify:asset-catalog": "npm run build:cached && node scripts/verify/apple/asset-catalog.mjs",
|
|
167
175
|
"verify:native-ui:permissions": "npm run build:cached && node scripts/verify-native-ui.mjs --allow-permission-denial",
|
|
168
176
|
"test:focused": "node scripts/run-development-tests.mjs focused",
|
|
169
177
|
"build:windows-native": "node scripts/build-windows-native.mjs",
|
|
@@ -173,7 +181,14 @@
|
|
|
173
181
|
"verify:ghidra:windows:package": "node scripts/verify-packaged-ghidra-windows.mjs",
|
|
174
182
|
"build:ghidra:nativeaot": "node scripts/build-ghidra-nativeaot.mjs",
|
|
175
183
|
"build:fixtures:nativeaot": "node scripts/generate-nativeaot-fixtures.mjs",
|
|
176
|
-
"verify:ghidra:nativeaot": "npm run build:cached && node scripts/verify-real-ghidra-nativeaot.mjs"
|
|
184
|
+
"verify:ghidra:nativeaot": "npm run build:cached && node scripts/verify-real-ghidra-nativeaot.mjs",
|
|
185
|
+
"verify:browser:scripts": "npm run build:cached && node scripts/verify-browser-scripts.mjs",
|
|
186
|
+
"verify:browser:modules": "npm run build:cached && node scripts/verify-browser-modules.mjs",
|
|
187
|
+
"verify:test-discovery": "node scripts/verify-test-discovery.mjs",
|
|
188
|
+
"verify:javascript:recovery": "node scripts/verify/javascript/recovery.mjs",
|
|
189
|
+
"verify:module-boundaries": "node scripts/verify-module-boundaries.mjs",
|
|
190
|
+
"verify:browser:source-maps": "npm run build:cached && node scripts/verify-browser-source-maps.mjs",
|
|
191
|
+
"verify:browser:runtime": "npm run build:cached && node scripts/verify-browser-runtime.mjs"
|
|
177
192
|
},
|
|
178
193
|
"lint-staged": {
|
|
179
194
|
"*.{cjs,cts,js,jsx,mjs,mts,ts,tsx}": [
|
|
@@ -205,11 +220,16 @@
|
|
|
205
220
|
"playwright-core": "1.58.2",
|
|
206
221
|
"plist": "5.0.0",
|
|
207
222
|
"semver": "7.8.5",
|
|
208
|
-
"smol-toml": "1.
|
|
223
|
+
"smol-toml": "1.9.0",
|
|
209
224
|
"write-file-atomic": "7.0.0",
|
|
210
225
|
"ws": "8.21.0",
|
|
211
226
|
"zod": "4.4.3"
|
|
212
227
|
},
|
|
228
|
+
"overrides": {
|
|
229
|
+
"vitepress": {
|
|
230
|
+
"vite": "6.4.4"
|
|
231
|
+
}
|
|
232
|
+
},
|
|
213
233
|
"devDependencies": {
|
|
214
234
|
"@fast-check/vitest": "0.5.0",
|
|
215
235
|
"@types/cross-spawn": "6.0.6",
|
|
@@ -227,6 +247,7 @@
|
|
|
227
247
|
"oxlint": "1.87.0",
|
|
228
248
|
"turbo": "2.11.7",
|
|
229
249
|
"typescript": "7.0.2",
|
|
250
|
+
"vitepress": "1.6.4",
|
|
230
251
|
"vitest": "5.0.3",
|
|
231
252
|
"yaml": "2.9.0"
|
|
232
253
|
}
|
|
@@ -20,11 +20,14 @@ import time
|
|
|
20
20
|
# Keep this digest aligned with LinuxHopper.ts and rerun real-Hopper verification
|
|
21
21
|
# before accepting another vendor build.
|
|
22
22
|
SUPPORTED_HOPPER_SHA256 = {
|
|
23
|
-
"0294ced141cc373468ee22d8343e7dac41980cb05a937994ca81c9f09afe7ded"
|
|
23
|
+
"0294ced141cc373468ee22d8343e7dac41980cb05a937994ca81c9f09afe7ded",
|
|
24
|
+
"1339f9e58377442b0c6fcb0dfc3cec20d593cc557408521fad9a00dbc6b8da13",
|
|
24
25
|
}
|
|
25
26
|
EXPECTED_SCREEN = (1280, 1024)
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
DIALOG_TITLES = {"Registration", "Registration — Hopper Disassembler"}
|
|
28
|
+
HOPPER_WINDOW_TITLE = "Hopper Disassembler"
|
|
29
|
+
DEMO_CLICK_LEFT = 116
|
|
30
|
+
DEMO_CLICK_BOTTOM = 22
|
|
28
31
|
PRIVATE_DISPLAY_UNAVAILABLE = 70
|
|
29
32
|
X11_AUTHORIZATION_FAILED = 71
|
|
30
33
|
UNSUPPORTED_HOPPER_BUILD = 72
|
|
@@ -196,6 +199,47 @@ def windows(x11: ctypes.CDLL, display: int, root: int) -> list[tuple[int, int, i
|
|
|
196
199
|
return found
|
|
197
200
|
|
|
198
201
|
|
|
202
|
+
def window_title(x11: ctypes.CDLL, display: int, window: int) -> str | None:
|
|
203
|
+
title = ctypes.c_char_p()
|
|
204
|
+
if not x11.XFetchName(display, window, ctypes.byref(title)) or not title.value:
|
|
205
|
+
return None
|
|
206
|
+
try:
|
|
207
|
+
return title.value.decode("utf-8", "replace")
|
|
208
|
+
finally:
|
|
209
|
+
x11.XFree(ctypes.cast(title, ctypes.c_void_p))
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def window_transient_for(
|
|
213
|
+
x11: ctypes.CDLL, display: int, window: int
|
|
214
|
+
) -> int | None:
|
|
215
|
+
parent = ctypes.c_ulong()
|
|
216
|
+
if not x11.XGetTransientForHint(display, window, ctypes.byref(parent)):
|
|
217
|
+
return None
|
|
218
|
+
return int(parent.value)
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
def find_demo_dialog(
|
|
222
|
+
x11: ctypes.CDLL,
|
|
223
|
+
display: int,
|
|
224
|
+
observed: list[tuple[int, int, int, int, int]],
|
|
225
|
+
) -> tuple[int, int, int, int, int] | None:
|
|
226
|
+
for candidate in observed:
|
|
227
|
+
window = candidate[0]
|
|
228
|
+
if window_title(x11, display, window) not in DIALOG_TITLES:
|
|
229
|
+
continue
|
|
230
|
+
parent = window_transient_for(x11, display, window)
|
|
231
|
+
if parent is None:
|
|
232
|
+
continue
|
|
233
|
+
if window_title(x11, display, parent) == HOPPER_WINDOW_TITLE:
|
|
234
|
+
return candidate
|
|
235
|
+
return None
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
def demo_click(dialog: tuple[int, int, int, int, int]) -> tuple[int, int]:
|
|
239
|
+
_window, x, y, _width, height = dialog
|
|
240
|
+
return x + DEMO_CLICK_LEFT, y + height - DEMO_CLICK_BOTTOM
|
|
241
|
+
|
|
242
|
+
|
|
199
243
|
def configure_x11(x11: ctypes.CDLL, xtst: ctypes.CDLL) -> None:
|
|
200
244
|
window_pointer = ctypes.POINTER(ctypes.c_ulong)
|
|
201
245
|
x11.XOpenDisplay.argtypes = [ctypes.c_char_p]
|
|
@@ -212,6 +256,18 @@ def configure_x11(x11: ctypes.CDLL, xtst: ctypes.CDLL) -> None:
|
|
|
212
256
|
ctypes.POINTER(XWindowAttributes),
|
|
213
257
|
]
|
|
214
258
|
x11.XGetWindowAttributes.restype = ctypes.c_int
|
|
259
|
+
x11.XFetchName.argtypes = [
|
|
260
|
+
ctypes.c_void_p,
|
|
261
|
+
ctypes.c_ulong,
|
|
262
|
+
ctypes.POINTER(ctypes.c_char_p),
|
|
263
|
+
]
|
|
264
|
+
x11.XFetchName.restype = ctypes.c_int
|
|
265
|
+
x11.XGetTransientForHint.argtypes = [
|
|
266
|
+
ctypes.c_void_p,
|
|
267
|
+
ctypes.c_ulong,
|
|
268
|
+
ctypes.POINTER(ctypes.c_ulong),
|
|
269
|
+
]
|
|
270
|
+
x11.XGetTransientForHint.restype = ctypes.c_int
|
|
215
271
|
x11.XQueryTree.argtypes = [
|
|
216
272
|
ctypes.c_void_p,
|
|
217
273
|
ctypes.c_ulong,
|
|
@@ -644,6 +700,7 @@ def run_launch(args: argparse.Namespace) -> int:
|
|
|
644
700
|
|
|
645
701
|
deadline = time.monotonic() + 10
|
|
646
702
|
observed: list[tuple[int, int, int, int, int]] = []
|
|
703
|
+
dialog: tuple[int, int, int, int, int] | None = None
|
|
647
704
|
while time.monotonic() < deadline:
|
|
648
705
|
if socket.exists():
|
|
649
706
|
x11.XCloseDisplay(display)
|
|
@@ -659,7 +716,8 @@ def run_launch(args: argparse.Namespace) -> int:
|
|
|
659
716
|
"owned Hopper process exited",
|
|
660
717
|
)
|
|
661
718
|
observed = windows(x11, display, root)
|
|
662
|
-
|
|
719
|
+
dialog = find_demo_dialog(x11, display, observed)
|
|
720
|
+
if dialog is not None:
|
|
663
721
|
break
|
|
664
722
|
time.sleep(0.1)
|
|
665
723
|
else:
|
|
@@ -675,8 +733,10 @@ def run_launch(args: argparse.Namespace) -> int:
|
|
|
675
733
|
"expected Hopper demo dialog not found",
|
|
676
734
|
)
|
|
677
735
|
|
|
736
|
+
assert dialog is not None
|
|
737
|
+
click_x, click_y = demo_click(dialog)
|
|
678
738
|
input_results = (
|
|
679
|
-
xtst.XTestFakeMotionEvent(display, -1,
|
|
739
|
+
xtst.XTestFakeMotionEvent(display, -1, click_x, click_y, 0),
|
|
680
740
|
xtst.XTestFakeButtonEvent(display, 1, True, 0),
|
|
681
741
|
xtst.XTestFakeButtonEvent(display, 1, False, 0),
|
|
682
742
|
)
|
|
@@ -695,9 +755,8 @@ def run_launch(args: argparse.Namespace) -> int:
|
|
|
695
755
|
finally:
|
|
696
756
|
if display is not None:
|
|
697
757
|
x11.XCloseDisplay(display)
|
|
698
|
-
if child is not None
|
|
699
|
-
child
|
|
700
|
-
child.wait()
|
|
758
|
+
if child is not None:
|
|
759
|
+
stop_process(child)
|
|
701
760
|
stop_process(xvfb)
|
|
702
761
|
capture.close()
|
|
703
762
|
|
package/scripts/rea.mjs
CHANGED
|
@@ -41,6 +41,7 @@ if (!(await compiledRuntimeExists(runtimeFiles))) {
|
|
|
41
41
|
const { createCli } = await import("../dist/cli.js");
|
|
42
42
|
const {
|
|
43
43
|
renderCliOutputArgumentError,
|
|
44
|
+
renderEmptyFilteredCliOutput,
|
|
44
45
|
sanitizeCliOutput,
|
|
45
46
|
validateCliOutputArguments,
|
|
46
47
|
} = await import("../dist/cliOutput.js");
|
|
@@ -49,9 +50,16 @@ if (!(await compiledRuntimeExists(runtimeFiles))) {
|
|
|
49
50
|
process.stdout.write(renderCliOutputArgumentError(outputArguments));
|
|
50
51
|
process.exitCode = 1;
|
|
51
52
|
} else {
|
|
53
|
+
let wroteOutput = false;
|
|
52
54
|
await createCli().serve(args, {
|
|
53
|
-
stdout: (output) =>
|
|
55
|
+
stdout: (output) => {
|
|
56
|
+
const sanitized = sanitizeCliOutput(output);
|
|
57
|
+
if (sanitized.length > 0) wroteOutput = true;
|
|
58
|
+
process.stdout.write(sanitized);
|
|
59
|
+
},
|
|
54
60
|
});
|
|
61
|
+
if (!wroteOutput)
|
|
62
|
+
process.stdout.write(renderEmptyFilteredCliOutput(args) ?? "");
|
|
55
63
|
}
|
|
56
64
|
}
|
|
57
65
|
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
name: reverse-engineer-anything
|
|
3
3
|
description: Reverse engineer native, managed, Electron/JavaScript, packaged, firmware, and browser targets with REA. Use shipped-artifact or requested runtime evidence to explain features, compare versions, decompile code, or guide a reconstruction. Skip REA for ordinary source-repository architecture analysis.
|
|
4
4
|
metadata:
|
|
5
|
-
version: "
|
|
6
|
-
tool_count:
|
|
7
|
-
catalog_digest: "
|
|
5
|
+
version: "27"
|
|
6
|
+
tool_count: 133
|
|
7
|
+
catalog_digest: "83b4c3445ed0ec003c0aeefa3188f123d9ae319484f8b1e2b611d2fe278c9c72"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# REA
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Android application artifacts
|
|
2
2
|
|
|
3
|
-
Use the connected server's advertised Android tools. Repository main
|
|
4
|
-
|
|
3
|
+
Use the connected server's advertised Android tools. Repository main and npm
|
|
4
|
+
4.1.0 include this family. A skill installation alone cannot add it to an
|
|
5
5
|
older server.
|
|
6
6
|
|
|
7
7
|
Start with `inspect_android_package` on the caller's APK path for package
|
|
@@ -44,7 +44,7 @@ When advertised by the connected server, application trace and compare tools
|
|
|
44
44
|
accept complete inline Evidence or
|
|
45
45
|
`{"kind":"retained-evidence","evidence_id":"ev_<64 lowercase hex characters>"}`
|
|
46
46
|
for their application input (`application`, or `left`/`right`). This notation is
|
|
47
|
-
a template: replace it with the actual returned ID.
|
|
47
|
+
a template: replace it with the actual returned ID. Versions before 4.1.0 accept only full
|
|
48
48
|
inline Evidence. Use the exact ID
|
|
49
49
|
returned by the producer on the same MCP connection. Resolution does not run
|
|
50
50
|
analysis or select a provider; findings remain inline. Native observation
|
|
@@ -37,29 +37,30 @@ assembly. Keep managed/native boundaries and unavailable reconstruction facts
|
|
|
37
37
|
explicit. A bring-your-own reconstruction oracle is separate from the canonical
|
|
38
38
|
parser and must not become an implicit setup dependency.
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
40
|
+
### .NET NativeAOT
|
|
41
|
+
|
|
42
|
+
NativeAOT binaries contain native machine code, so ordinary CIL decompilers
|
|
43
|
+
cannot recover the original method bodies. When managed metadata/CIL is absent,
|
|
44
|
+
classify that as a native-analysis route rather than claiming source recovery.
|
|
45
|
+
Open the native image with the selected deep provider and inspect functions,
|
|
46
|
+
strings, calls, and references; describe decompiler output as pseudocode and
|
|
47
|
+
inference.
|
|
48
|
+
|
|
49
|
+
NativeAOT images can be PE/COFF, ELF, or Mach-O executables and shared
|
|
50
|
+
libraries. Use file bytes and loader metadata rather than suffixes to identify
|
|
51
|
+
them. For packaged apps, inventory/extract with REA's artifact tools and retain
|
|
52
|
+
the exact contained image identity. PDB, ELF debug, or dSYM sidecars are
|
|
53
|
+
additional evidence only when the provider accepts and matches them.
|
|
54
|
+
|
|
55
|
+
For deeper type recovery, the optional third-party
|
|
56
|
+
[Ghidra NativeAOT analyzer](https://github.com/Washi1337/ghidra-nativeaot)
|
|
57
|
+
rehydrates ReadyToRun metadata and can recover method tables, type relationships,
|
|
58
|
+
frozen objects, and strings. This is a Ghidra extension with its own install and
|
|
59
|
+
interactive workflow; it is not currently part of REA's managed parser or
|
|
60
|
+
headless Ghidra bridge. Treat its annotations as analysis evidence, retain the
|
|
61
|
+
binary identity, and do not present recovered types as original source. Header
|
|
62
|
+
discovery may require a symbol or analyst identification of the ReadyToRun
|
|
63
|
+
header, depending on the binary and analyzer version.
|
|
63
64
|
|
|
64
65
|
## Packages and extraction
|
|
65
66
|
|
|
@@ -68,6 +69,14 @@ ASAR, or DMG inputs when the artifact graph and findings help answer the
|
|
|
68
69
|
question. It returns the complete artifact graph inline. Cite graph manifest
|
|
69
70
|
IDs when using them.
|
|
70
71
|
|
|
72
|
+
For an IPA or a macOS `.app`, ZIP, or DMG, pass the inventory Evidence to
|
|
73
|
+
`project_apple_application_graph`. It reports application roots and nested
|
|
74
|
+
bundles by path convention: app extensions, XPC services, frameworks, login
|
|
75
|
+
items, system and driver extensions, and plug-ins. It also lists privileged
|
|
76
|
+
helpers, launchd plists, symlinks, and each bundle's `info_plist_path` and
|
|
77
|
+
executable candidates. Roles are path conventions, not parsed plists; read the
|
|
78
|
+
listed plists with `inspect_plist`.
|
|
79
|
+
|
|
71
80
|
Use `extract_artifact` when materialized files are needed. It takes no arguments
|
|
72
81
|
and materializes all regular files into a fresh temporary directory chosen by
|
|
73
82
|
REA. Symlinks and encrypted entries are inventory facts, not extractable files.
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { HopperProvider } from "../hopper/HopperProvider.js";
|
|
2
|
-
import { GhidraProvider } from "../ghidra/GhidraProvider.js";
|
|
3
|
-
import { IdaProvider } from "../ida/IdaProvider.js";
|
|
4
|
-
import { silentLogger } from "../logger.js";
|
|
5
|
-
import { GENERATED_AUXILIARY_PROVIDERS } from "../generatedMcpToolCatalog.js";
|
|
6
|
-
import { AnalysisProviderRegistry } from "./AnalysisProviderRegistry.js";
|
|
7
|
-
import { composeBinarySession } from "./BinarySessionComposition.js";
|
|
8
|
-
import { nativeHostCapabilities } from "../native/NativeHostCapabilities.js";
|
|
9
|
-
import { LazyAnalysisProvider } from "./LazyAnalysisProvider.js";
|
|
10
|
-
import { ManagedStaticProvider } from "../dotnet/ManagedStaticProvider.js";
|
|
11
|
-
import { SessionProviderRouter } from "./SessionProviderRouter.js";
|
|
12
|
-
/**
|
|
13
|
-
* Compose the target-switching runtime shared directly by CLI and MCP adapters.
|
|
14
|
-
* This is the sole production wiring point, so both adapters share identical
|
|
15
|
-
* provider selection, profile, lifecycle, and Evidence semantics.
|
|
16
|
-
*/
|
|
17
|
-
export const createBinarySession = (config, logger = silentLogger) => {
|
|
18
|
-
const hopper = new HopperProvider(config, logger);
|
|
19
|
-
const ghidra = new GhidraProvider(config, logger);
|
|
20
|
-
const ida = new IdaProvider(config);
|
|
21
|
-
const auxiliary = new Map(GENERATED_AUXILIARY_PROVIDERS.map((provider) => [
|
|
22
|
-
provider.identity.id,
|
|
23
|
-
provider,
|
|
24
|
-
]));
|
|
25
|
-
const lazyProvider = (id, load) => {
|
|
26
|
-
const generated = auxiliary.get(id);
|
|
27
|
-
if (generated === undefined)
|
|
28
|
-
throw new TypeError(`Missing generated provider metadata for ${id}`);
|
|
29
|
-
return new LazyAnalysisProvider({
|
|
30
|
-
...generated,
|
|
31
|
-
capabilities: nativeHostCapabilities(generated.capabilities),
|
|
32
|
-
load,
|
|
33
|
-
});
|
|
34
|
-
};
|
|
35
|
-
return composeBinarySession(new AnalysisProviderRegistry([hopper, ghidra, ida], config.analysisProvider), [
|
|
36
|
-
lazyProvider("rea-artifact-graph", async () => {
|
|
37
|
-
const { ArtifactProvider } = await import("../artifacts/ArtifactProvider.js");
|
|
38
|
-
return new ArtifactProvider();
|
|
39
|
-
}),
|
|
40
|
-
lazyProvider("native-macos", async () => {
|
|
41
|
-
const { NativeMacOSProvider } = await import("../native/NativeMacOSProvider.js");
|
|
42
|
-
return new NativeMacOSProvider();
|
|
43
|
-
}),
|
|
44
|
-
lazyProvider("rea-dotnet-static", async () => {
|
|
45
|
-
const { ManagedStaticProvider } = await import("../dotnet/ManagedStaticProvider.js");
|
|
46
|
-
return new ManagedStaticProvider();
|
|
47
|
-
}),
|
|
48
|
-
]);
|
|
49
|
-
};
|
|
50
|
-
/** Compose an execution-free managed session without native provider selection. */
|
|
51
|
-
export const createManagedBinarySession = () => composeBinarySession(SessionProviderRouter.selectable(new AnalysisProviderRegistry([]), [
|
|
52
|
-
new ManagedStaticProvider(),
|
|
53
|
-
]));
|
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
2
|
-
import canonicalize from "canonicalize";
|
|
3
|
-
import { z } from "zod";
|
|
4
|
-
import { parseArtifactInventoryEvidence } from "./artifactInventoryEvidence.js";
|
|
5
|
-
import { evidenceSchema } from "./evidence.js";
|
|
6
|
-
import { digestSchema } from "./../domain/digests.js";
|
|
7
|
-
import { prefixedDigestSchema } from "./../domain/digests.js";
|
|
8
|
-
const evidenceIdSchema = prefixedDigestSchema("ev");
|
|
9
|
-
const pathSchema = z.string().min(1);
|
|
10
|
-
const componentSchema = z.strictObject({
|
|
11
|
-
path: pathSchema,
|
|
12
|
-
artifact_id: prefixedDigestSchema("art"),
|
|
13
|
-
sha256: digestSchema,
|
|
14
|
-
format: z.string().min(1),
|
|
15
|
-
});
|
|
16
|
-
/** Authenticated artifact inventory pages projected as one Apple application. */
|
|
17
|
-
export const appleApplicationProjectionInputSchema = z.strictObject({
|
|
18
|
-
inventory_evidence: z.array(evidenceSchema).min(1),
|
|
19
|
-
});
|
|
20
|
-
/** Deterministic, execution-free Apple application inventory projection. */
|
|
21
|
-
export const appleApplicationProjectionResultSchema = z.strictObject({
|
|
22
|
-
projection_id: prefixedDigestSchema("aap"),
|
|
23
|
-
root_sha256: digestSchema,
|
|
24
|
-
root_format: z.literal("ipa"),
|
|
25
|
-
source_evidence_ids: z.array(evidenceIdSchema).min(1),
|
|
26
|
-
application_roots: z.array(pathSchema),
|
|
27
|
-
components: z.strictObject({
|
|
28
|
-
bundle_metadata: z.array(componentSchema),
|
|
29
|
-
executables: z.array(componentSchema),
|
|
30
|
-
frameworks: z.array(componentSchema),
|
|
31
|
-
native_libraries: z.array(componentSchema),
|
|
32
|
-
javascript: z.array(componentSchema),
|
|
33
|
-
signing: z.array(componentSchema),
|
|
34
|
-
}),
|
|
35
|
-
runtime_families: z.array(z.enum([
|
|
36
|
-
"native",
|
|
37
|
-
"swift-objective-c",
|
|
38
|
-
"javascript",
|
|
39
|
-
"react-native",
|
|
40
|
-
"flutter",
|
|
41
|
-
"unity",
|
|
42
|
-
])),
|
|
43
|
-
bridge_candidates: z.array(z.strictObject({
|
|
44
|
-
source_path: pathSchema,
|
|
45
|
-
native_path: pathSchema,
|
|
46
|
-
basis: z.enum([
|
|
47
|
-
"javascript-and-native-content",
|
|
48
|
-
"react-native-convention",
|
|
49
|
-
"flutter-convention",
|
|
50
|
-
"unity-convention",
|
|
51
|
-
]),
|
|
52
|
-
})),
|
|
53
|
-
coverage: z.strictObject({
|
|
54
|
-
status: z.enum(["complete-within-inventory", "partial"]),
|
|
55
|
-
inventory_complete: z.boolean(),
|
|
56
|
-
}),
|
|
57
|
-
limitations: z.array(z.string().min(1)),
|
|
58
|
-
});
|
|
59
|
-
/** Project exact IPA paths and hashes without parsing or executing target code. */
|
|
60
|
-
export const projectAppleApplication = (input) => {
|
|
61
|
-
const parsed = appleApplicationProjectionInputSchema.parse(input);
|
|
62
|
-
const { evidence, inventory } = parseArtifactInventoryEvidence(parsed.inventory_evidence);
|
|
63
|
-
if (inventory.manifest.root_format !== "ipa")
|
|
64
|
-
throw new TypeError("Apple application projection requires IPA Evidence");
|
|
65
|
-
const nodes = new Map(inventory.nodes.map((node) => [node.artifact_id, node]));
|
|
66
|
-
const all = inventory.occurrences
|
|
67
|
-
.filter((occurrence) => occurrence.artifact_id !== null && occurrence.logical_path !== ".")
|
|
68
|
-
.map((occurrence) => {
|
|
69
|
-
const node = nodes.get(occurrence.artifact_id ?? "");
|
|
70
|
-
if (node === undefined)
|
|
71
|
-
throw new TypeError("Apple application occurrence has no artifact node");
|
|
72
|
-
return {
|
|
73
|
-
path: occurrence.logical_path,
|
|
74
|
-
artifact_id: node.artifact_id,
|
|
75
|
-
sha256: node.sha256,
|
|
76
|
-
format: node.format,
|
|
77
|
-
};
|
|
78
|
-
});
|
|
79
|
-
const roots = [
|
|
80
|
-
...new Set(inventory.occurrences.flatMap(({ logical_path: path }) => {
|
|
81
|
-
const match = /^(Payload\/[^/]+\.app)(?:\/|$)/u.exec(path);
|
|
82
|
-
return match?.[1] === undefined ? [] : [match[1]];
|
|
83
|
-
})),
|
|
84
|
-
].sort(compare);
|
|
85
|
-
const classified = classifyComponents(all, roots);
|
|
86
|
-
const runtimeFamilies = identifyRuntimeFamilies(all);
|
|
87
|
-
const bridgeProjection = identifyBridgeCandidates(classified.javascript, deduplicateComponents([
|
|
88
|
-
...classified.executables,
|
|
89
|
-
...classified.native_libraries,
|
|
90
|
-
]));
|
|
91
|
-
const limitations = projectionLimitations(inventory.complete, roots);
|
|
92
|
-
const withoutId = {
|
|
93
|
-
root_sha256: inventory.manifest.root_sha256,
|
|
94
|
-
root_format: "ipa",
|
|
95
|
-
source_evidence_ids: evidence
|
|
96
|
-
.map(({ evidence_id: id }) => id)
|
|
97
|
-
.sort(compare),
|
|
98
|
-
application_roots: roots,
|
|
99
|
-
components: classified,
|
|
100
|
-
runtime_families: runtimeFamilies,
|
|
101
|
-
bridge_candidates: bridgeProjection.candidates,
|
|
102
|
-
coverage: {
|
|
103
|
-
status: inventory.complete
|
|
104
|
-
? "complete-within-inventory"
|
|
105
|
-
: "partial",
|
|
106
|
-
inventory_complete: inventory.complete,
|
|
107
|
-
},
|
|
108
|
-
limitations,
|
|
109
|
-
};
|
|
110
|
-
return appleApplicationProjectionResultSchema.parse({
|
|
111
|
-
...withoutId,
|
|
112
|
-
projection_id: `aap_${digest(withoutId)}`,
|
|
113
|
-
});
|
|
114
|
-
};
|
|
115
|
-
const classifyComponents = (all, roots) => {
|
|
116
|
-
const withinApp = (path) => roots.some((root) => path.startsWith(`${root}/`));
|
|
117
|
-
return {
|
|
118
|
-
bundle_metadata: all.filter(({ path }) => /(?:^|\/)Info\.plist$/u.test(path)),
|
|
119
|
-
executables: all.filter(({ path, format }) => withinApp(path) && ["mach-o", "mach-o-universal"].includes(format)),
|
|
120
|
-
frameworks: all.filter(({ path }) => /\.framework\//u.test(path)),
|
|
121
|
-
native_libraries: all.filter(({ path }) => /\.(?:dylib|so)$/iu.test(path)),
|
|
122
|
-
javascript: all.filter(({ format }) => format === "javascript-bundle"),
|
|
123
|
-
signing: all.filter(({ path }) => /(?:^|\/)(?:embedded\.mobileprovision|_CodeSignature\/CodeResources)$/u.test(path)),
|
|
124
|
-
};
|
|
125
|
-
};
|
|
126
|
-
const deduplicateComponents = (values) => [...new Map(values.map((value) => [value.path, value])).values()].sort((left, right) => compare(left.path, right.path));
|
|
127
|
-
const identifyRuntimeFamilies = (all) => {
|
|
128
|
-
const paths = all.map(({ path }) => path.toLowerCase());
|
|
129
|
-
const families = new Set();
|
|
130
|
-
if (all.some(({ format }) => ["mach-o", "mach-o-universal"].includes(format)))
|
|
131
|
-
families.add("native");
|
|
132
|
-
if (paths.some((path) => /\.(?:dylib|framework\/[^/]+)$/u.test(path)))
|
|
133
|
-
families.add("swift-objective-c");
|
|
134
|
-
if (all.some(({ format }) => format === "javascript-bundle"))
|
|
135
|
-
families.add("javascript");
|
|
136
|
-
if (paths.some((path) => path.includes("reactnative") ||
|
|
137
|
-
path.includes("react.framework") ||
|
|
138
|
-
path.includes("hermes")))
|
|
139
|
-
families.add("react-native");
|
|
140
|
-
if (paths.some((path) => path.includes("flutter.framework") || path.includes("app.framework")))
|
|
141
|
-
families.add("flutter");
|
|
142
|
-
if (paths.some((path) => path.includes("unityframework.framework")))
|
|
143
|
-
families.add("unity");
|
|
144
|
-
return [...families].sort(compare);
|
|
145
|
-
};
|
|
146
|
-
const identifyBridgeCandidates = (scripts, native) => ({
|
|
147
|
-
candidates: scripts.flatMap((script) => native.map((item) => ({
|
|
148
|
-
source_path: script.path,
|
|
149
|
-
native_path: item.path,
|
|
150
|
-
basis: bridgeBasis(item.path),
|
|
151
|
-
}))),
|
|
152
|
-
});
|
|
153
|
-
const bridgeBasis = (path) => {
|
|
154
|
-
const lower = path.toLowerCase();
|
|
155
|
-
if (lower.includes("react"))
|
|
156
|
-
return "react-native-convention";
|
|
157
|
-
if (lower.includes("flutter") || lower.includes("app.framework"))
|
|
158
|
-
return "flutter-convention";
|
|
159
|
-
if (lower.includes("unity"))
|
|
160
|
-
return "unity-convention";
|
|
161
|
-
return "javascript-and-native-content";
|
|
162
|
-
};
|
|
163
|
-
const projectionLimitations = (complete, roots) => [
|
|
164
|
-
...(!complete
|
|
165
|
-
? ["Source inventory pages are incomplete; absence is unknown."]
|
|
166
|
-
: []),
|
|
167
|
-
...(roots.length === 0
|
|
168
|
-
? [
|
|
169
|
-
"No Payload/*.app directory was present in the supplied inventory pages.",
|
|
170
|
-
]
|
|
171
|
-
: []),
|
|
172
|
-
"Bundle identifiers and signing claims require dedicated plist and CMS parsing; this projection reports only exact paths and hashes.",
|
|
173
|
-
"Bridge candidates are path-based hypotheses, not observed runtime calls.",
|
|
174
|
-
];
|
|
175
|
-
const compare = (left, right) => left < right ? -1 : left > right ? 1 : 0;
|
|
176
|
-
const digest = (value) => {
|
|
177
|
-
const encoded = canonicalize(value);
|
|
178
|
-
if (encoded === undefined)
|
|
179
|
-
throw new TypeError("Apple application projection is not canonical JSON");
|
|
180
|
-
return createHash("sha256").update(encoded).digest("hex");
|
|
181
|
-
};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import * as t from "@babel/types";
|
|
2
|
-
/** Read an identifier or literal property name without evaluating syntax. */
|
|
3
|
-
export const propertyName = (node) => {
|
|
4
|
-
if (t.isIdentifier(node))
|
|
5
|
-
return node.name;
|
|
6
|
-
if (t.isStringLiteral(node) || t.isNumericLiteral(node))
|
|
7
|
-
return String(node.value);
|
|
8
|
-
return "";
|
|
9
|
-
};
|
|
10
|
-
/** Read a property name only when its syntax commits to one exact key. */
|
|
11
|
-
export const semanticStaticPropertyName = (property, computed) => computed && !t.isStringLiteral(property) && !t.isNumericLiteral(property)
|
|
12
|
-
? ""
|
|
13
|
-
: propertyName(property);
|