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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { providerCapability, } from "../contracts/toolOutputSchemaPrimitives.js";
|
|
3
|
-
import {
|
|
3
|
+
import { TOOL_CONTRACTS } from "../contracts/toolContracts.js";
|
|
4
4
|
import { clientRequirementsFor, NO_CLIENT_FEATURES, } from "./CapabilityClientRequirements.js";
|
|
5
5
|
const statusSchema = z.object({
|
|
6
6
|
open: z.boolean(),
|
|
@@ -55,7 +55,7 @@ const NAVIGATION_CONTEXT_MODES = [
|
|
|
55
55
|
export const buildCapabilityInventory = (sessionStatus, policy, clientFeatures = NO_CLIENT_FEATURES) => {
|
|
56
56
|
const status = statusSchema.parse(sessionStatus);
|
|
57
57
|
const descriptors = new Map(status.capabilities.map((descriptor) => [descriptor.operation, descriptor]));
|
|
58
|
-
return
|
|
58
|
+
return TOOL_CONTRACTS.map((contract) => {
|
|
59
59
|
const availability = availabilityFor({
|
|
60
60
|
name: contract.name,
|
|
61
61
|
kind: contract.kind,
|
|
@@ -107,11 +107,21 @@ export const buildCapabilityInventory = (sessionStatus, policy, clientFeatures =
|
|
|
107
107
|
}).sort((left, right) => left.name.localeCompare(right.name));
|
|
108
108
|
};
|
|
109
109
|
const availabilityFor = (context) => {
|
|
110
|
+
// These built-in workflows accept a caller-selected endpoint; they do not load the optional passive provider.
|
|
111
|
+
if (context.name === "observe_web_execution" ||
|
|
112
|
+
context.name === "inspect_web_event_listeners")
|
|
113
|
+
return { reason: "available", remediation: null };
|
|
110
114
|
if (context.name === "get_navigation_context")
|
|
111
115
|
return navigationContextAvailability(context.descriptors);
|
|
112
116
|
const javascriptApplication = javascriptApplicationAvailability(context);
|
|
113
117
|
if (javascriptApplication !== null)
|
|
114
118
|
return javascriptApplication;
|
|
119
|
+
const failure = optionalProviderFailureFor(context);
|
|
120
|
+
if (failure !== undefined)
|
|
121
|
+
return {
|
|
122
|
+
reason: "provider_unavailable",
|
|
123
|
+
remediation: `Adapter ${failure.providerId} could not load: ${failure.reason}. Repair the adapter installation and restart REA; other capabilities remain available.`,
|
|
124
|
+
};
|
|
115
125
|
const workflowAvailability = workflowAvailabilityFor(context);
|
|
116
126
|
if (workflowAvailability !== null)
|
|
117
127
|
return workflowAvailability;
|
|
@@ -120,6 +130,20 @@ const availabilityFor = (context) => {
|
|
|
120
130
|
return targetDecision;
|
|
121
131
|
return providerAvailability(context);
|
|
122
132
|
};
|
|
133
|
+
const optionalProviderFailureFor = ({ name, kind, policy, }) => {
|
|
134
|
+
const failures = policy.optionalProviderLoadFailures;
|
|
135
|
+
if (name === "capture_browser_scenario")
|
|
136
|
+
return failures?.browserScenarioCapture;
|
|
137
|
+
if (kind === "browser-provider")
|
|
138
|
+
return failures?.browserObservation;
|
|
139
|
+
if (name === "capture_electron_scenario")
|
|
140
|
+
return failures?.electronActiveObservation;
|
|
141
|
+
if (kind === "electron-provider")
|
|
142
|
+
return failures?.electronObservation;
|
|
143
|
+
if (kind === "runtime-provider")
|
|
144
|
+
return failures?.javascriptRuntimeObservation;
|
|
145
|
+
return undefined;
|
|
146
|
+
};
|
|
123
147
|
const javascriptApplicationAvailability = ({ name, }) => {
|
|
124
148
|
if (name === "analyze_javascript_application")
|
|
125
149
|
return { reason: "available", remediation: null };
|
|
@@ -128,6 +152,40 @@ const javascriptApplicationAvailability = ({ name, }) => {
|
|
|
128
152
|
: null;
|
|
129
153
|
};
|
|
130
154
|
const workflowAvailabilityFor = ({ name, kind, policy, }) => {
|
|
155
|
+
if (name === "trace_web_module_imports")
|
|
156
|
+
return {
|
|
157
|
+
reason: "available",
|
|
158
|
+
remediation: null,
|
|
159
|
+
defaultModeAvailable: policy.webModuleResolutionEnabled === true,
|
|
160
|
+
modes: [
|
|
161
|
+
{
|
|
162
|
+
name: "sources-without-literal-imports",
|
|
163
|
+
available: true,
|
|
164
|
+
missing_operations: [],
|
|
165
|
+
remediation: null,
|
|
166
|
+
},
|
|
167
|
+
policy.webModuleResolutionEnabled === true
|
|
168
|
+
? {
|
|
169
|
+
name: "native-literal-resolution",
|
|
170
|
+
available: true,
|
|
171
|
+
missing_operations: [],
|
|
172
|
+
remediation: null,
|
|
173
|
+
}
|
|
174
|
+
: {
|
|
175
|
+
name: "native-literal-resolution",
|
|
176
|
+
available: false,
|
|
177
|
+
missing_operations: ["native-module-resolver"],
|
|
178
|
+
remediation: "Provide an absolute REA_BROWSER_EXECUTABLE supporting import.meta.resolve; no binary target is required.",
|
|
179
|
+
},
|
|
180
|
+
],
|
|
181
|
+
};
|
|
182
|
+
if (name === "recover_javascript_sources")
|
|
183
|
+
return policy.javascriptRecoveryEnabled === true
|
|
184
|
+
? { reason: "available", remediation: null }
|
|
185
|
+
: {
|
|
186
|
+
reason: "provider_missing",
|
|
187
|
+
remediation: "On Linux x64, provide an absolute REA_WAKARU_COMMAND for Wakaru 1.13.0 and util-linux prlimit. No binary target is required.",
|
|
188
|
+
};
|
|
131
189
|
if (kind === "firmware-provider") {
|
|
132
190
|
const enabled = name === "inspect_firmware_regions"
|
|
133
191
|
? policy.firmwareInspectionEnabled
|
|
@@ -136,7 +194,7 @@ const workflowAvailabilityFor = ({ name, kind, policy, }) => {
|
|
|
136
194
|
? { reason: "available", remediation: null }
|
|
137
195
|
: {
|
|
138
196
|
reason: "provider_missing",
|
|
139
|
-
remediation: "On Linux, provide an absolute REA_BINWALK_COMMAND (Binwalk 3.1.0) or REA_UNBLOB_COMMAND (Unblob 26.6.4) path and util-linux prlimit. Extraction also requires the selected format’s external extractor.",
|
|
197
|
+
remediation: "On Linux, provide an absolute REA_BINWALK_COMMAND (Binwalk 3.1.x, verified with 3.1.0) or REA_UNBLOB_COMMAND (Unblob 26.6.x, verified with 26.6.4) path and util-linux prlimit. Extraction also requires the selected format’s external extractor.",
|
|
140
198
|
};
|
|
141
199
|
}
|
|
142
200
|
if (kind === "android-provider")
|
|
@@ -39,6 +39,8 @@ const parseDocument = (text, format) => {
|
|
|
39
39
|
throw new SyntaxError(`Invalid JSON/JSONC at offset ${firstError.offset}: ${printParseErrorCode(firstError.error)}`);
|
|
40
40
|
return objectSchema.parse(document);
|
|
41
41
|
};
|
|
42
|
+
/** Members of OpenCode V2's `mcp` object that are not server names. */
|
|
43
|
+
const OPENCODE_V2_MCP_SETTINGS = new Set(["servers", "timeout"]);
|
|
42
44
|
/** Parse a client document and reject malformed roots or MCP server tables. */
|
|
43
45
|
export const parseClientConfiguration = (text, format) => {
|
|
44
46
|
if (format === undefined || format === "unsupported")
|
|
@@ -47,27 +49,76 @@ export const parseClientConfiguration = (text, format) => {
|
|
|
47
49
|
const serversKey = clientConfigurationServersKey(format);
|
|
48
50
|
const value = document[serversKey];
|
|
49
51
|
const servers = value === undefined ? {} : objectSchema.parse(value);
|
|
50
|
-
|
|
52
|
+
const native = servers.servers;
|
|
53
|
+
// A V1 server named `servers` has a string `type` discriminator; the V2
|
|
54
|
+
// table may instead hold a server object named `type`.
|
|
55
|
+
if (format !== "opencode" ||
|
|
56
|
+
native === undefined ||
|
|
57
|
+
(typeof native === "object" &&
|
|
58
|
+
native !== null &&
|
|
59
|
+
"type" in native &&
|
|
60
|
+
typeof native.type === "string"))
|
|
61
|
+
return {
|
|
62
|
+
document,
|
|
63
|
+
servers,
|
|
64
|
+
serversPath: [serversKey],
|
|
65
|
+
dialect: format,
|
|
66
|
+
legacyServers: {},
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
document,
|
|
70
|
+
servers: objectSchema.parse(native),
|
|
71
|
+
serversPath: [serversKey, "servers"],
|
|
72
|
+
dialect: "opencode_v2",
|
|
73
|
+
legacyServers: Object.fromEntries(Object.entries(servers).filter(([name]) => !OPENCODE_V2_MCP_SETTINGS.has(name))),
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
/** The registration a client loads for `name`, including OpenCode V1 entries. */
|
|
77
|
+
export const effectiveClientServer = (parsed, name) => Object.hasOwn(parsed.servers, name)
|
|
78
|
+
? parsed.servers[name]
|
|
79
|
+
: parsed.legacyServers[name];
|
|
80
|
+
/**
|
|
81
|
+
* Return `parsed.document` with `servers` at its server table. A legacy OpenCode
|
|
82
|
+
* V1 member named in `removeLegacy` is removed beside a native V2 table.
|
|
83
|
+
*/
|
|
84
|
+
export const withClientServers = (parsed, servers, removeLegacy) => {
|
|
85
|
+
const [key = "", nested] = parsed.serversPath;
|
|
86
|
+
if (nested === undefined)
|
|
87
|
+
return { ...parsed.document, [key]: servers };
|
|
88
|
+
const outer = { ...objectSchema.parse(parsed.document[key]) };
|
|
89
|
+
if (removeLegacy !== undefined && !OPENCODE_V2_MCP_SETTINGS.has(removeLegacy))
|
|
90
|
+
delete outer[removeLegacy];
|
|
91
|
+
return { ...parsed.document, [key]: { ...outer, [nested]: servers } };
|
|
92
|
+
};
|
|
93
|
+
/** Read the value at a key path, or `undefined` when any member is absent. */
|
|
94
|
+
const valueAt = (document, path) => {
|
|
95
|
+
let current = document;
|
|
96
|
+
for (const key of path) {
|
|
97
|
+
const object = objectSchema.safeParse(current);
|
|
98
|
+
if (!object.success || !Object.hasOwn(object.data, key))
|
|
99
|
+
return undefined;
|
|
100
|
+
current = object.data[key];
|
|
101
|
+
}
|
|
102
|
+
return current;
|
|
51
103
|
};
|
|
52
104
|
/** Serialize a validated client document, retaining JSONC comments. */
|
|
53
|
-
export const serializeClientConfiguration = (document, format, originalText,
|
|
105
|
+
export const serializeClientConfiguration = (document, format, originalText, editedPaths) => {
|
|
54
106
|
if (format === undefined || format === "unsupported")
|
|
55
107
|
throw new TypeError("client does not have a supported MCP config format");
|
|
56
108
|
if (format === "toml")
|
|
57
109
|
return stringifyToml(document);
|
|
58
|
-
if (originalText !== undefined &&
|
|
59
|
-
|
|
60
|
-
const servers = objectSchema.parse(document[serversKey] ?? {});
|
|
61
|
-
const editedValue = Object.hasOwn(servers, editedServerName)
|
|
62
|
-
? servers[editedServerName]
|
|
63
|
-
: undefined;
|
|
64
|
-
const edits = modify(originalText, [serversKey, editedServerName], editedValue, {
|
|
110
|
+
if (originalText !== undefined && editedPaths !== undefined)
|
|
111
|
+
return editedPaths.reduce((text, path) => applyEdits(text, modify(text, [...path], valueAt(document, path), {
|
|
65
112
|
formattingOptions: { insertSpaces: true, tabSize: 2, eol: "\n" },
|
|
66
|
-
});
|
|
67
|
-
return applyEdits(originalText, edits);
|
|
68
|
-
}
|
|
113
|
+
})), originalText);
|
|
69
114
|
return `${JSON.stringify(document, null, 2)}\n`;
|
|
70
115
|
};
|
|
116
|
+
/** Key path of a named registration in the server table. */
|
|
117
|
+
export const clientServerPath = (parsed, name) => [...parsed.serversPath, name];
|
|
118
|
+
/** Key path of a present OpenCode V1 entry beside a native V2 table. */
|
|
119
|
+
export const legacyClientServerPath = (parsed, name) => Object.hasOwn(parsed.legacyServers, name)
|
|
120
|
+
? [parsed.serversPath[0] ?? "mcp", name]
|
|
121
|
+
: undefined;
|
|
71
122
|
/** Build the stdio entry shape expected by one client's configuration dialect. */
|
|
72
123
|
export const clientRegistrationEntry = (format, command, environment) => {
|
|
73
124
|
const [executable = "rea", ...args] = command;
|
|
@@ -81,6 +132,15 @@ export const clientRegistrationEntry = (format, command, environment) => {
|
|
|
81
132
|
? {}
|
|
82
133
|
: { environment: { ...environment } }),
|
|
83
134
|
};
|
|
135
|
+
case "opencode_v2":
|
|
136
|
+
// V2 connects servers unless `disabled` is true.
|
|
137
|
+
return {
|
|
138
|
+
type: "local",
|
|
139
|
+
command: [...command],
|
|
140
|
+
...(Object.keys(environment).length === 0
|
|
141
|
+
? {}
|
|
142
|
+
: { environment: { ...environment } }),
|
|
143
|
+
};
|
|
84
144
|
case "vscode":
|
|
85
145
|
return {
|
|
86
146
|
type: "stdio",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parseClientConfiguration } from "./ClientConfigurationDocument.js";
|
|
1
|
+
import { effectiveClientServer, parseClientConfiguration, } from "./ClientConfigurationDocument.js";
|
|
2
2
|
import { access, readFile } from "node:fs/promises";
|
|
3
3
|
import { resolve } from "node:path";
|
|
4
4
|
import { z } from "zod";
|
|
@@ -36,8 +36,7 @@ export const readClientRegistrationStatuses = async (home, currentCommandPath =
|
|
|
36
36
|
continue;
|
|
37
37
|
try {
|
|
38
38
|
const content = await readFile(client.configPath, "utf8");
|
|
39
|
-
const
|
|
40
|
-
const raw = servers[PRODUCT_IDENTITY.mcpServerKey];
|
|
39
|
+
const raw = effectiveClientServer(parseClientConfiguration(content, client.format), PRODUCT_IDENTITY.mcpServerKey);
|
|
41
40
|
if (raw === undefined) {
|
|
42
41
|
statuses.push(unavailableStatus(client.name, client.configPath, "missing"));
|
|
43
42
|
continue;
|
|
@@ -63,11 +62,6 @@ const registrationAligned = (registration, client, currentCommandPath) => {
|
|
|
63
62
|
return false;
|
|
64
63
|
if (!isOwnedClientRegistrationCommand(command, currentCommandPath))
|
|
65
64
|
return false;
|
|
66
|
-
if (command.length === 3 &&
|
|
67
|
-
command[2] === "mcp" &&
|
|
68
|
-
resolve(command[0] ?? "") === resolve(process.execPath) &&
|
|
69
|
-
resolve(command[1] ?? "") === currentCommandPath)
|
|
70
|
-
return true;
|
|
71
65
|
if (client.name === "codex" &&
|
|
72
66
|
registration.startup_timeout_sec !==
|
|
73
67
|
MCP_STARTUP_POLICY.codexStartupTimeoutSeconds)
|
|
@@ -80,6 +74,11 @@ const registrationAligned = (registration, client, currentCommandPath) => {
|
|
|
80
74
|
return false;
|
|
81
75
|
if (client.format === "commandcode" && registration.transport !== "stdio")
|
|
82
76
|
return false;
|
|
77
|
+
if (command.length === 3 &&
|
|
78
|
+
command[2] === "mcp" &&
|
|
79
|
+
resolve(command[0] ?? "") === resolve(process.execPath) &&
|
|
80
|
+
resolve(command[1] ?? "") === currentCommandPath)
|
|
81
|
+
return true;
|
|
83
82
|
if (command.length === 4 &&
|
|
84
83
|
command[0] === "npx" &&
|
|
85
84
|
command[1] === "-y" &&
|
|
@@ -1,27 +1,25 @@
|
|
|
1
1
|
import { parseConfig } from "../config.js";
|
|
2
2
|
import { EnhancedTools } from "./EnhancedTools.js";
|
|
3
3
|
import { executeFunctionAnalysisEvidence } from "./FunctionAnalysisEvidence.js";
|
|
4
|
-
import { createBinarySession, createManagedBinarySession } from "./runtime.js";
|
|
5
4
|
import { silentLogger } from "../logger.js";
|
|
6
5
|
import { createEvidence } from "../domain/evidence.js";
|
|
7
|
-
import { isManagedToolName, } from "../contracts/managedToolContracts.js";
|
|
6
|
+
import { isManagedToolName, } from "../contracts/managed/managedToolContracts.js";
|
|
8
7
|
import { EvidenceIntegrityError } from "../domain/evidenceErrors.js";
|
|
9
8
|
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
10
9
|
import {} from "../domain/analysisErrorBase.js";
|
|
11
10
|
import { access } from "node:fs/promises";
|
|
12
|
-
import { readAnalysisSnapshot, writeAnalysisSnapshot, } from "./AnalysisSnapshotFiles.js";
|
|
11
|
+
import { readAnalysisSnapshot, writeAnalysisSnapshot, } from "./binary/AnalysisSnapshotFiles.js";
|
|
13
12
|
import { parseBinaryTarget } from "./BinaryTargetResolver.js";
|
|
14
13
|
import { snapshotEvidenceForQuery, snapshotMatchesTarget, } from "../domain/analysisSnapshot.js";
|
|
15
14
|
import { err, ok } from "../domain/result.js";
|
|
16
15
|
import { REA_WORKFLOW_PROVIDER, workflowAnalysisProfile, } from "./InvestigationProviders.js";
|
|
17
16
|
import { artifactInspectionResultSchema } from "../domain/artifactInspection.js";
|
|
18
|
-
export { runCapabilityStatus, runProviderStatus, } from "./DirectAnalysisStatus.js";
|
|
19
17
|
/**
|
|
20
18
|
* Open one binary, execute one tool, and always release provider resources.
|
|
21
19
|
* Unlike MCP mode, every CLI invocation is intentionally isolated and does not
|
|
22
20
|
* retain a target or provider client for a subsequent command.
|
|
23
21
|
*/
|
|
24
|
-
export const runDirectAnalysis = async (path, tool, arguments_, options = {}) => withProcessCancellation(options.signal, (signal) => runAnalysis(path, tool, arguments_, {
|
|
22
|
+
export const runDirectAnalysis = async (dependencies, path, tool, arguments_, options = {}) => withProcessCancellation(options.signal, (signal) => runAnalysis(dependencies, path, tool, arguments_, {
|
|
25
23
|
logger: options.logger ?? silentLogger,
|
|
26
24
|
snapshotPath: options.snapshotPath,
|
|
27
25
|
signal,
|
|
@@ -33,16 +31,16 @@ export const runDirectAnalysis = async (path, tool, arguments_, options = {}) =>
|
|
|
33
31
|
: { providerId: options.providerId }),
|
|
34
32
|
}));
|
|
35
33
|
/** Execute one provider-native semantic operation with atomic provenance. */
|
|
36
|
-
export const runProviderAnalysis = async (...[path, tool, arguments_, logger = silentLogger, signal]) => isManagedToolName(tool)
|
|
37
|
-
? runManagedProviderAnalysis(path, tool, signal)
|
|
38
|
-
: withProcessCancellation(signal, (operationSignal) => runAnalysis(path, tool, arguments_, {
|
|
34
|
+
export const runProviderAnalysis = async (dependencies, ...[path, tool, arguments_, logger = silentLogger, signal]) => isManagedToolName(tool)
|
|
35
|
+
? runManagedProviderAnalysis(dependencies, path, tool, signal)
|
|
36
|
+
: withProcessCancellation(signal, (operationSignal) => runAnalysis(dependencies, path, tool, arguments_, {
|
|
39
37
|
logger,
|
|
40
38
|
snapshotPath: undefined,
|
|
41
39
|
signal: operationSignal,
|
|
42
40
|
}));
|
|
43
41
|
/** Execute managed metadata inspection in an isolated managed-only session. */
|
|
44
|
-
export const runManagedProviderExecution = async (path, tool, signal) => withProcessCancellation(signal, async (operationSignal) => {
|
|
45
|
-
const session = createManagedBinarySession();
|
|
42
|
+
export const runManagedProviderExecution = async (dependencies, path, tool, signal) => withProcessCancellation(signal, async (operationSignal) => {
|
|
43
|
+
const session = dependencies.createManagedBinarySession();
|
|
46
44
|
try {
|
|
47
45
|
const opened = await session.open(path, { signal: operationSignal });
|
|
48
46
|
if (!opened.ok)
|
|
@@ -53,8 +51,8 @@ export const runManagedProviderExecution = async (path, tool, signal) => withPro
|
|
|
53
51
|
await session.close();
|
|
54
52
|
}
|
|
55
53
|
});
|
|
56
|
-
const runManagedProviderAnalysis = async (path, tool, signal) => {
|
|
57
|
-
const execution = await runManagedProviderExecution(path, tool, signal);
|
|
54
|
+
const runManagedProviderAnalysis = async (dependencies, path, tool, signal) => {
|
|
55
|
+
const execution = await runManagedProviderExecution(dependencies, path, tool, signal);
|
|
58
56
|
if (!execution.ok)
|
|
59
57
|
return cliError(execution.error);
|
|
60
58
|
const value = execution.value;
|
|
@@ -67,12 +65,12 @@ const runManagedProviderAnalysis = async (path, tool, signal) => {
|
|
|
67
65
|
locations: value.locations,
|
|
68
66
|
});
|
|
69
67
|
};
|
|
70
|
-
const runAnalysis = async (path, tool, arguments_, options) => {
|
|
68
|
+
const runAnalysis = async (dependencies, path, tool, arguments_, options) => {
|
|
71
69
|
const { logger, signal, snapshotPath } = options;
|
|
72
70
|
const config = parseConfig(options.environment ?? process.env);
|
|
73
71
|
if (!config.ok)
|
|
74
72
|
return cliError(config.error);
|
|
75
|
-
const session = createBinarySession(config.value, logger);
|
|
73
|
+
const session = dependencies.createBinarySession(config.value, logger);
|
|
76
74
|
try {
|
|
77
75
|
const prepared = await prepareSnapshot({
|
|
78
76
|
path,
|
|
@@ -3,12 +3,11 @@ import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
|
3
3
|
import { jsonObjectSchema } from "../domain/jsonValue.js";
|
|
4
4
|
import { createServerIdentity } from "../serverIdentity.js";
|
|
5
5
|
import { silentLogger } from "../logger.js";
|
|
6
|
-
|
|
7
|
-
const runSessionStatus = async (logger = silentLogger, environment = process.env) => {
|
|
6
|
+
const runSessionStatus = async (dependencies, logger = silentLogger, environment = process.env) => {
|
|
8
7
|
const config = parseConfig(environment);
|
|
9
8
|
if (!config.ok)
|
|
10
9
|
return { error: projectAnalysisError(config.error) };
|
|
11
|
-
const session = createBinarySession(config.value, logger);
|
|
10
|
+
const session = dependencies.createBinarySession(config.value, logger);
|
|
12
11
|
try {
|
|
13
12
|
return {
|
|
14
13
|
...jsonObjectSchema.parse(session.status()),
|
|
@@ -22,6 +21,6 @@ const runSessionStatus = async (logger = silentLogger, environment = process.env
|
|
|
22
21
|
}
|
|
23
22
|
};
|
|
24
23
|
/** List binary-session provider candidates and auxiliary operation availability. */
|
|
25
|
-
export const runProviderStatus = (logger = silentLogger, environment = process.env) => runSessionStatus(logger, environment);
|
|
24
|
+
export const runProviderStatus = (dependencies, logger = silentLogger, environment = process.env) => runSessionStatus(dependencies, logger, environment);
|
|
26
25
|
/** List binary-session operation descriptors; this is not the full MCP catalog. */
|
|
27
|
-
export const runCapabilityStatus = (logger = silentLogger, environment = process.env) => runSessionStatus(logger, environment);
|
|
26
|
+
export const runCapabilityStatus = (dependencies, logger = silentLogger, environment = process.env) => runSessionStatus(dependencies, logger, environment);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { homedir } from "node:os";
|
|
2
|
-
import { supportsNodeVersion } from "../domain/runtimeVersion.js";
|
|
2
|
+
import { SUPPORTED_NODE_VERSION_PROSE, supportsNodeVersion, } from "../domain/runtimeVersion.js";
|
|
3
3
|
import { linuxHopperLauncherPath } from "./LinuxHopper.js";
|
|
4
4
|
const DEFAULT_HOPPER = "/Applications/Hopper Disassembler.app/Contents/MacOS/hopper";
|
|
5
5
|
const SYSTEM_LINUX_HOPPER = "/opt/hopper/bin/Hopper";
|
|
@@ -52,7 +52,7 @@ export const doctorHealthy = (checks, providers) => {
|
|
|
52
52
|
providers.providerInspections.some(({ available }) => available)));
|
|
53
53
|
};
|
|
54
54
|
const nodeCheck = (host) => check("node", supportsNodeVersion(host.nodeVersion), host.nodeVersion, {
|
|
55
|
-
remediation:
|
|
55
|
+
remediation: `Install ${SUPPORTED_NODE_VERSION_PROSE}.`,
|
|
56
56
|
classification: "missing_dependency",
|
|
57
57
|
});
|
|
58
58
|
const hostCheck = async (host) => {
|
|
@@ -66,7 +66,7 @@ const hostCheck = async (host) => {
|
|
|
66
66
|
? `${host.platform} ${host.architecture}`
|
|
67
67
|
: `${linuxDistribution.id} ${linuxDistribution.versionId ?? "unknown"}`);
|
|
68
68
|
return check("host", supported, detail, {
|
|
69
|
-
remediation: "REA supports macOS 12+, Ubuntu 24.04+, Fedora 41+, 64-bit Arch Linux, and the experimental Windows x64 Ghidra P0 boundary.",
|
|
69
|
+
remediation: "REA supports macOS 12+, Ubuntu 24.04+, Fedora 41+, 64-bit Arch Linux, CachyOS, and the experimental Windows x64 Ghidra P0 boundary.",
|
|
70
70
|
classification: "unsupported_host",
|
|
71
71
|
});
|
|
72
72
|
};
|
|
@@ -6,14 +6,14 @@ import {} from "../domain/analysisErrorBase.js";
|
|
|
6
6
|
import { addressDistance, functionDossierSchema, parseDocuments, parseFunctionDossier, parseListCount, parseRelatedAddresses, parseSegments, } from "../domain/hopperValues.js";
|
|
7
7
|
import { err, ok } from "../domain/result.js";
|
|
8
8
|
import { categorizeSwiftTypes, discoverObjcClasses, discoverObjcProtocols, } from "../domain/symbolAnalysis.js";
|
|
9
|
-
import { inspectNativeDispatch } from "./NativeDispatchMetadataInspection.js";
|
|
10
|
-
import { traceNativeValues } from "./NativeValueTrace.js";
|
|
11
|
-
import { traceNativeUiAction } from "./NativeUiActionTrace.js";
|
|
9
|
+
import { inspectNativeDispatch } from "./native/NativeDispatchMetadataInspection.js";
|
|
10
|
+
import { traceNativeValues } from "./native/NativeValueTrace.js";
|
|
11
|
+
import { traceNativeUiAction } from "./native/NativeUiActionTrace.js";
|
|
12
12
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
13
13
|
import { invalidEnhancedInput, } from "./EnhancedToolTypes.js";
|
|
14
14
|
import { traceCallPath } from "./CallPathTracing.js";
|
|
15
15
|
import { traceLiteralFeature } from "./EnhancedLiteralTracing.js";
|
|
16
|
-
import { projectNativeApiInspection } from "./NativeApiInspection.js";
|
|
16
|
+
import { projectNativeApiInspection } from "./native/NativeApiInspection.js";
|
|
17
17
|
/**
|
|
18
18
|
* Composes direct provider operations into bounded reverse-engineering tools.
|
|
19
19
|
* Direct callers use `execute`; adapters that own validation use
|
|
@@ -3,7 +3,7 @@ import {} from "../domain/analysisErrorBase.js";
|
|
|
3
3
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
4
4
|
import { err, ok } from "../domain/result.js";
|
|
5
5
|
import { compareBundles } from "../domain/bundleComparison.js";
|
|
6
|
-
import { EvidenceLedger } from "./EvidenceLedger.js";
|
|
6
|
+
import { EvidenceLedger } from "./investigation/EvidenceLedger.js";
|
|
7
7
|
import { readEvidenceBundle, writeEvidenceBundle, } from "./EvidenceBundleFiles.js";
|
|
8
8
|
/** Validate and merge one bundle using the session Evidence ledger. */
|
|
9
9
|
export const importEvidenceBundleCommand = async (path) => {
|
|
@@ -5,6 +5,14 @@ import { dirname, join, relative, resolve } from "node:path";
|
|
|
5
5
|
const hasSameIdentity = (before, after, expected) => before.dev === after.dev &&
|
|
6
6
|
before.ino === after.ino &&
|
|
7
7
|
(expected === "directory" ? after.isDirectory() : after.isSymbolicLink());
|
|
8
|
+
const hasSameFileState = (before, after) => before.dev === after.dev &&
|
|
9
|
+
before.ino === after.ino &&
|
|
10
|
+
before.isFile() &&
|
|
11
|
+
after.isFile() &&
|
|
12
|
+
before.mode === after.mode &&
|
|
13
|
+
before.size === after.size &&
|
|
14
|
+
before.mtimeMs === after.mtimeMs &&
|
|
15
|
+
before.ctimeMs === after.ctimeMs;
|
|
8
16
|
const lstatIfPresent = async (path) => {
|
|
9
17
|
try {
|
|
10
18
|
return await lstat(path);
|
|
@@ -15,11 +23,17 @@ const lstatIfPresent = async (path) => {
|
|
|
15
23
|
throw cause;
|
|
16
24
|
}
|
|
17
25
|
};
|
|
18
|
-
|
|
19
|
-
|
|
26
|
+
/** Hash a file only when its opened descriptor still matches the captured path state. */
|
|
27
|
+
export const hashFile = async (path, expected, maxBytes, signal) => {
|
|
28
|
+
signal?.throwIfAborted();
|
|
29
|
+
const handle = await open(path, fsConstants.O_RDONLY |
|
|
30
|
+
(fsConstants.O_NOFOLLOW ?? 0) |
|
|
31
|
+
(fsConstants.O_NONBLOCK ?? 0));
|
|
20
32
|
try {
|
|
33
|
+
signal?.throwIfAborted();
|
|
21
34
|
const stats = await handle.stat();
|
|
22
|
-
|
|
35
|
+
signal?.throwIfAborted();
|
|
36
|
+
if (!hasSameFileState(expected, stats) || stats.size > maxBytes)
|
|
23
37
|
return null;
|
|
24
38
|
const hash = createHash("sha256");
|
|
25
39
|
const buffer = Buffer.allocUnsafe(Math.min(64 * 1024, maxBytes));
|
|
@@ -33,7 +47,8 @@ const hashFile = async (path, maxBytes, signal) => {
|
|
|
33
47
|
position += bytesRead;
|
|
34
48
|
}
|
|
35
49
|
const after = await handle.stat();
|
|
36
|
-
|
|
50
|
+
signal?.throwIfAborted();
|
|
51
|
+
if (!hasSameFileState(stats, after))
|
|
37
52
|
return null;
|
|
38
53
|
return hash.digest("hex");
|
|
39
54
|
}
|
|
@@ -76,7 +91,7 @@ export const snapshotRoots = async (scenario, signal) => {
|
|
|
76
91
|
}
|
|
77
92
|
if (stats.isFile()) {
|
|
78
93
|
const sha256 = remainingBytes >= stats.size
|
|
79
|
-
? await hashFile(path, remainingBytes, signal)
|
|
94
|
+
? await hashFile(path, stats, remainingBytes, signal)
|
|
80
95
|
: null;
|
|
81
96
|
remainingBytes -= sha256 === null ? 0 : stats.size;
|
|
82
97
|
if (sha256 === null)
|
|
@@ -39,6 +39,12 @@ export const ANDROID_APPLICATION_PROVIDER = {
|
|
|
39
39
|
name: "REA Android application workflows",
|
|
40
40
|
version: "1",
|
|
41
41
|
};
|
|
42
|
+
/** Provider identity for verified publication of retained website scripts. */
|
|
43
|
+
export const WEB_SCRIPT_EXPORT_PROVIDER = {
|
|
44
|
+
id: "rea-web-script-export",
|
|
45
|
+
name: "REA captured script export",
|
|
46
|
+
version: "1",
|
|
47
|
+
};
|
|
42
48
|
/** Provider identity for deterministic static JavaScript application analysis. */
|
|
43
49
|
export const JAVASCRIPT_APPLICATION_PROVIDER = {
|
|
44
50
|
id: "rea-javascript-application",
|
|
@@ -9,7 +9,10 @@ import { execFileOutput } from "../process/ExecFileOutput.js";
|
|
|
9
9
|
const execFileAsync = promisify(execFile);
|
|
10
10
|
const DOWNLOAD_PREFIX = "https://www.hopperapp.com:443/downloader/public/";
|
|
11
11
|
const MAX_PACKAGE_BYTES = 100_000_000;
|
|
12
|
-
const SUPPORTED_HOPPER_SHA256 =
|
|
12
|
+
const SUPPORTED_HOPPER_SHA256 = new Set([
|
|
13
|
+
"0294ced141cc373468ee22d8343e7dac41980cb05a937994ca81c9f09afe7ded",
|
|
14
|
+
"1339f9e58377442b0c6fcb0dfc3cec20d593cc557408521fad9a00dbc6b8da13",
|
|
15
|
+
]);
|
|
13
16
|
const SUPPORTED_RELEASES = {
|
|
14
17
|
deb: {
|
|
15
18
|
filename: `${DOWNLOAD_PREFIX}Hopper-6.4.2-Linux-demo.deb`,
|
|
@@ -58,6 +61,7 @@ export const parseLinuxDistribution = (text) => {
|
|
|
58
61
|
const packageFamily = packageFamilyFor(id, fields.get("ID_LIKE"));
|
|
59
62
|
const supported = packageFamily !== undefined &&
|
|
60
63
|
(id === "arch" ||
|
|
64
|
+
id === "cachyos" ||
|
|
61
65
|
(id === "ubuntu" && versionAtLeast(versionId, 24)) ||
|
|
62
66
|
(id === "fedora" && versionAtLeast(versionId, 41)));
|
|
63
67
|
const identity = {
|
|
@@ -159,7 +163,7 @@ export const linuxHopperBinarySupported = async (path) => {
|
|
|
159
163
|
const hash = createHash("sha256");
|
|
160
164
|
for await (const chunk of createReadStream(path))
|
|
161
165
|
hash.update(chunk);
|
|
162
|
-
return hash.digest("hex")
|
|
166
|
+
return linuxHopperLauncherDigestSupported(hash.digest("hex"));
|
|
163
167
|
}
|
|
164
168
|
catch (cause) {
|
|
165
169
|
// best-effort cleanup: optional build probing; unreadable means unsupported.
|
|
@@ -167,6 +171,8 @@ export const linuxHopperBinarySupported = async (path) => {
|
|
|
167
171
|
return false;
|
|
168
172
|
}
|
|
169
173
|
};
|
|
174
|
+
/** Match a launcher extracted from one of the pinned official Linux packages. */
|
|
175
|
+
export const linuxHopperLauncherDigestSupported = (digest) => SUPPORTED_HOPPER_SHA256.has(digest);
|
|
170
176
|
/** Interpret ldd output conservatively so a present but broken launcher is unhealthy. */
|
|
171
177
|
export const linuxSharedLibrariesAvailable = (output) => !/(?:=>\s+not found|error while loading shared libraries)/iu.test(output);
|
|
172
178
|
const installSystemPackage = async (family, archive) => {
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { AnalysisCapabilityUnavailableError } from "../domain/analysisErrorCore.js";
|
|
2
|
+
/** Preserve the module's failure reason through the existing tool error algebra. */
|
|
3
|
+
export const optionalProviderUnavailable = (failure, operation) => new AnalysisCapabilityUnavailableError(failure.providerId, operation, `Adapter could not load: ${failure.reason}`);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { tmpdir } from "node:os";
|
|
2
2
|
/** Explain why process capture cannot claim owned-process cleanup on a host. */
|
|
3
3
|
export const processCaptureOwnershipUnavailableReason = (platform) => platform === "win32"
|
|
4
|
-
? "Windows process
|
|
4
|
+
? "Windows PTY process capture is unavailable because this adapter does not yet verify descendant cleanup. Use Linux (including WSL for Linux commands) or macOS. Reinstalling the PTY backend does not enable native Windows capture."
|
|
5
5
|
: undefined;
|
|
6
6
|
/** Probe the native PTY seam and explain loader failures at their source. */
|
|
7
7
|
export const processCaptureProbeFailureReason = (cause) => {
|
|
@@ -280,9 +280,9 @@ export const resolveProcessResult = (capture, executionFailure, cleanupFailure)
|
|
|
280
280
|
throw new ProcessCaptureError("process capture produced no result");
|
|
281
281
|
return capture;
|
|
282
282
|
};
|
|
283
|
-
export const prepareProcessCapture = async (scenario, signal, host = systemProcessPreparationHost) => {
|
|
283
|
+
export const prepareProcessCapture = async (scenario, signal, captureSnapshot = snapshotRoots, host = systemProcessPreparationHost) => {
|
|
284
284
|
assertNotCancelled(signal);
|
|
285
|
-
const before = await
|
|
285
|
+
const before = await captureSnapshot(scenario, signal);
|
|
286
286
|
const temporaryRoot = await host.createTemporaryRoot();
|
|
287
287
|
try {
|
|
288
288
|
const runId = randomUUID();
|
|
@@ -114,7 +114,11 @@ const readJson = async (path) => {
|
|
|
114
114
|
throw new ProcessCliFailure("invalid_input", "Process input file could not be read. Check that the path exists and is readable.");
|
|
115
115
|
}
|
|
116
116
|
try {
|
|
117
|
-
const
|
|
117
|
+
const text = new TextDecoder("utf-8", {
|
|
118
|
+
fatal: true,
|
|
119
|
+
ignoreBOM: true,
|
|
120
|
+
}).decode(bytes);
|
|
121
|
+
const parsed = JSON.parse(text);
|
|
118
122
|
return parsed;
|
|
119
123
|
}
|
|
120
124
|
catch (cause) {
|
|
@@ -131,6 +131,15 @@ const finishProcessRun = async (options) => {
|
|
|
131
131
|
}
|
|
132
132
|
return resolveProcessResult(verifiedCapture, executionFailure, cleanupFailure);
|
|
133
133
|
};
|
|
134
|
+
const normalizeCaptureFailure = (cause, signal) => {
|
|
135
|
+
if (cause instanceof ProcessCaptureError)
|
|
136
|
+
return cause;
|
|
137
|
+
if (signal?.aborted === true &&
|
|
138
|
+
(cause === signal.reason ||
|
|
139
|
+
(cause instanceof Error && cause.name === "AbortError")))
|
|
140
|
+
return processCaptureCancelled();
|
|
141
|
+
return cause;
|
|
142
|
+
};
|
|
134
143
|
const completeCapture = async (options) => {
|
|
135
144
|
const { runtime, scenario } = options;
|
|
136
145
|
const { reason } = options.exit;
|
|
@@ -140,7 +149,7 @@ const completeCapture = async (options) => {
|
|
|
140
149
|
const samplingPartial = (await runtime.stopSampler()).partial;
|
|
141
150
|
await settleProcessCaptureJournal(options.eventJournal);
|
|
142
151
|
assertNotCancelled(options.signal);
|
|
143
|
-
const after = await
|
|
152
|
+
const after = await options.captureSnapshot(scenario, options.signal);
|
|
144
153
|
options.recordEvent("filesystem_checkpoints", 1);
|
|
145
154
|
const renderedFrames = await runtime.renderer.frames();
|
|
146
155
|
const checkpoints = [
|
|
@@ -185,8 +194,8 @@ const completeCapture = async (options) => {
|
|
|
185
194
|
});
|
|
186
195
|
};
|
|
187
196
|
/** Execute one caller-selected scenario and return bounded observations. */
|
|
188
|
-
const runProcessScenario = async (scenario, signal, hostEnvironment = process.env, hostPlatform = process.platform) => {
|
|
189
|
-
const { temporaryRoot, runId, before } = await prepareProcessCapture(scenario, signal);
|
|
197
|
+
const runProcessScenario = async (scenario, signal, hostEnvironment = process.env, hostPlatform = process.platform, captureSnapshot = snapshotRoots) => {
|
|
198
|
+
const { temporaryRoot, runId, before } = await prepareProcessCapture(scenario, signal, captureSnapshot);
|
|
190
199
|
const frames = [];
|
|
191
200
|
const samples = [];
|
|
192
201
|
const journal = createProcessCaptureJournal();
|
|
@@ -239,12 +248,13 @@ const runProcessScenario = async (scenario, signal, hostEnvironment = process.en
|
|
|
239
248
|
initiallyTruncated: before.truncated,
|
|
240
249
|
eventJournal,
|
|
241
250
|
recordEvent,
|
|
251
|
+
captureSnapshot,
|
|
242
252
|
...(signal === undefined ? {} : { signal }),
|
|
243
253
|
});
|
|
244
254
|
}
|
|
245
255
|
catch (cause) {
|
|
246
256
|
runtime?.terminal.kill("SIGKILL");
|
|
247
|
-
executionFailure = cause;
|
|
257
|
+
executionFailure = normalizeCaptureFailure(cause, signal);
|
|
248
258
|
}
|
|
249
259
|
return finishProcessRun({
|
|
250
260
|
runtime,
|
|
@@ -258,18 +268,19 @@ const runProcessScenario = async (scenario, signal, hostEnvironment = process.en
|
|
|
258
268
|
});
|
|
259
269
|
};
|
|
260
270
|
/** Execute one scenario through a typed expected-failure channel. */
|
|
261
|
-
export const captureProcessScenario = async (scenario, signal, platform = process.platform, environment = process.env) => {
|
|
271
|
+
export const captureProcessScenario = async (scenario, signal, platform = process.platform, environment = process.env, captureSnapshot = snapshotRoots) => {
|
|
262
272
|
const ownershipReason = processCaptureOwnershipUnavailableReason(platform);
|
|
263
273
|
if (ownershipReason !== undefined)
|
|
264
|
-
return err(new AnalysisCapabilityUnavailableError("rea-process", "capture_process_scenario", ownershipReason));
|
|
274
|
+
return err(new AnalysisCapabilityUnavailableError("rea-process", "capture_process_scenario", ownershipReason, { userMessage: ownershipReason }));
|
|
265
275
|
try {
|
|
266
276
|
assertNotCancelled(signal);
|
|
267
277
|
const resolvedScenario = await resolveProcessScenarioRuntimePaths(scenario, environment);
|
|
268
|
-
return ok(await runProcessScenario(resolvedScenario, signal, environment, platform));
|
|
278
|
+
return ok(await runProcessScenario(resolvedScenario, signal, environment, platform, captureSnapshot));
|
|
269
279
|
}
|
|
270
280
|
catch (cause) {
|
|
271
|
-
|
|
272
|
-
|
|
281
|
+
const failure = normalizeCaptureFailure(cause, signal);
|
|
282
|
+
return err(failure instanceof ProcessCaptureError
|
|
283
|
+
? failure
|
|
273
284
|
: new ProcessCaptureError("process capture failed", { cause }));
|
|
274
285
|
}
|
|
275
286
|
};
|