rea-agents 4.0.1 → 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 +257 -96
- package/bridge/android/ReaJadxBridge.java +247 -0
- package/bridge/ghidra/ReaGhidraBridge.java +358 -15
- package/bridge/ghidra/ReaGhidraExtensions.java +113 -0
- package/bridge/ghidra/ReaGhidraPrepareCom.java +32 -0
- package/bridge/native/NativeUIChildren.swift +27 -0
- package/bridge/native/ReaNativeUI.swift +30 -16
- package/dist/android/AndroidTargetSnapshot.js +36 -0
- package/dist/android/JadxAnalysis.js +193 -0
- package/dist/android/JadxConfiguration.js +57 -0
- package/dist/android/JadxMcpTransport.js +172 -0
- package/dist/android/JadxProtocol.js +109 -0
- package/dist/android/JadxProvider.js +259 -0
- package/dist/android/JadxRelease.js +27 -0
- package/dist/android/JadxSession.js +111 -0
- package/dist/application/AnalysisContextQueries.js +2 -1
- package/dist/application/AppBundleExecutable.js +141 -0
- package/dist/application/ArtifactExtraction.js +7 -4
- package/dist/application/ArtifactGraphConstruction.js +10 -17
- package/dist/application/ArtifactInventory/classify.js +1 -1
- package/dist/application/ArtifactInventory/scanCanonical.js +9 -8
- package/dist/application/ArtifactInventory/scanReader.js +1 -1
- package/dist/application/ArtifactInventory.js +1 -1
- package/dist/application/BinaryTargetResolver.js +32 -68
- package/dist/application/BrowserObservationService.js +2 -1
- package/dist/application/BrowserScenarioCaptureService.js +2 -1
- package/dist/application/BrowserScenarioEvidence.js +2 -2
- package/dist/application/CallPathTracing.js +2 -1
- package/dist/application/CapabilityInventory.js +78 -2
- package/dist/application/ClientConfigPath.js +3 -1
- package/dist/application/ClientConfigurationDocument.js +83 -13
- package/dist/application/ClientRegistrationStatus.js +15 -9
- package/dist/application/DirectAnalysis.js +35 -21
- package/dist/application/DirectAnalysisStatus.js +7 -8
- package/dist/application/Doctor.js +48 -8
- package/dist/application/DoctorDiagnostics.js +9 -7
- package/dist/application/DoctorScope.js +1 -1
- package/dist/application/EnhancedLiteralTracing.js +2 -1
- package/dist/application/EnhancedToolTypes.js +2 -1
- package/dist/application/EnhancedTools.js +7 -5
- package/dist/application/EvidenceBundleCommands.js +3 -2
- package/dist/application/EvidenceBundleFiles.js +1 -1
- package/dist/application/EvidenceInputResolver.js +30 -0
- package/dist/application/FilesystemSnapshot.js +20 -5
- package/dist/application/FunctionAnalysisEvidence.js +32 -0
- package/dist/application/InventoryProjectionEvidence.js +2 -1
- package/dist/application/InvestigationProviders.js +6 -0
- package/dist/application/JsonFiles.js +1 -1
- package/dist/application/LinuxHopper.js +20 -6
- package/dist/application/MacHopper.js +20 -7
- package/dist/application/OptionalObservationProviders.js +3 -0
- package/dist/application/ProcessCaptureCapability.js +1 -1
- package/dist/application/ProcessCaptureError.js +1 -1
- package/dist/application/ProcessCaptureJournal.js +3 -1
- package/dist/application/ProcessCaptureLifecycle.js +8 -5
- package/dist/application/ProcessCli.js +14 -6
- package/dist/application/ProcessEvidence.js +2 -6
- package/dist/application/ProcessHarness.js +23 -11
- package/dist/application/ProcessNormalization.js +12 -5
- package/dist/application/ProcessSampling.js +3 -1
- package/dist/application/ReconstructionCoverageService.js +4 -7
- package/dist/application/ReconstructionObligationCandidates.js +5 -2
- package/dist/application/ReconstructionObligationLedgerService.js +2 -1
- package/dist/application/ReferenceSourceImport.js +2 -0
- package/dist/application/ReferenceSourceImportEntries.js +22 -3
- package/dist/application/ReferenceSourceImportPolicy.js +4 -2
- package/dist/application/ReferenceSourceImportTypes.js +5 -0
- package/dist/application/ReferenceSourceVcsAdapter.js +35 -4
- package/dist/application/Setup.js +11 -130
- package/dist/application/SetupClientConfiguration.js +36 -22
- package/dist/application/SetupHost.js +126 -0
- package/dist/application/SetupPlan.js +1 -1
- package/dist/application/SetupRegistrationEnvironment.js +1 -2
- package/dist/application/SetupSkill.js +9 -3
- package/dist/application/SetupTypes.js +17 -0
- package/dist/application/StoreFileLock.js +7 -2
- package/dist/application/SupportedClients.js +8 -0
- package/dist/application/Uninstall.js +32 -21
- package/dist/application/UpdateMaintenance.js +3 -3
- package/dist/application/UpdateRuntime.js +5 -2
- 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/WindowsCapabilities.js +7 -7
- package/dist/application/android/AndroidAnalysisService.js +37 -0
- 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} +8 -6
- package/dist/application/{AnalysisProviderRegistry.js → binary/AnalysisProviderRegistry.js} +5 -4
- package/dist/application/{AnalysisSnapshotCache.js → binary/AnalysisSnapshotCache.js} +8 -7
- package/dist/application/{AnalysisSnapshotFiles.js → binary/AnalysisSnapshotFiles.js} +4 -4
- package/dist/application/{BinarySession.js → binary/BinarySession.js} +26 -11
- package/dist/application/{BinarySessionComposition.js → binary/BinarySessionComposition.js} +2 -1
- package/dist/application/{BinarySessionExecution.js → binary/BinarySessionExecution.js} +9 -4
- package/dist/application/{BinarySessionOpen.js → binary/BinarySessionOpen.js} +7 -6
- package/dist/application/{BinarySessionRecords.js → binary/BinarySessionRecords.js} +34 -40
- package/dist/application/{CompositeProvider.js → binary/CompositeProvider.js} +2 -2
- package/dist/application/{LazyAnalysisProvider.js → binary/LazyAnalysisProvider.js} +6 -4
- package/dist/application/{SessionProviderRouter.js → binary/SessionProviderRouter.js} +7 -4
- package/dist/application/firmware/FirmwareAnalysisPort.js +1 -0
- package/dist/application/firmware/FirmwareAnalysisService.js +35 -0
- package/dist/application/{EvidenceLedger.js → investigation/EvidenceLedger.js} +44 -6
- package/dist/application/investigation/InvestigationRecordPort.js +1 -0
- 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} +4 -4
- package/dist/application/javascript/ElectronActiveObservationPort.js +1 -0
- package/dist/application/{ElectronActiveObservationService.js → javascript/ElectronActiveObservationService.js} +3 -2
- 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 -2
- package/dist/application/{JavaScriptApplicationEvidence.js → javascript/JavaScriptApplicationEvidence.js} +3 -3
- package/dist/application/{JavaScriptApplicationEvidenceGraph.js → javascript/JavaScriptApplicationEvidenceGraph.js} +5 -5
- package/dist/application/javascript/JavaScriptApplicationService.js +99 -0
- package/dist/application/{JavaScriptApplicationWorkflowEvidence.js → javascript/JavaScriptApplicationWorkflowEvidence.js} +3 -3
- package/dist/application/{JavaScriptApplicationWorkflowService.js → javascript/JavaScriptApplicationWorkflowService.js} +12 -11
- package/dist/application/{JavaScriptArtifactAnalysis.js → javascript/JavaScriptArtifactAnalysis.js} +12 -26
- 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} +12 -14
- package/dist/application/{JavaScriptArtifactReconstruction.js → javascript/JavaScriptArtifactReconstruction.js} +4 -8
- package/dist/application/{JavaScriptJsonModules.js → javascript/JavaScriptJsonModules.js} +3 -2
- package/dist/application/{JavaScriptModuleRelationships.js → javascript/JavaScriptModuleRelationships.js} +5 -3
- 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 -2
- package/dist/application/{JavaScriptRuntimeReconciliationEvidence.js → javascript/JavaScriptRuntimeReconciliationEvidence.js} +3 -3
- package/dist/application/{JavaScriptRuntimeReconciliationService.js → javascript/JavaScriptRuntimeReconciliationService.js} +6 -5
- 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 -5
- package/dist/application/{ManagedApplicationGraphService.js → managed/ManagedApplicationGraphService.js} +7 -6
- package/dist/application/{ManagedMemberComparisonService.js → managed/ManagedMemberComparisonService.js} +10 -8
- package/dist/application/{ManagedNativeVerificationService.js → managed/ManagedNativeVerificationService.js} +7 -6
- package/dist/application/{ManagedReconstructionService.js → managed/ManagedReconstructionService.js} +7 -6
- 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 -6
- 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 +10 -38
- 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 +43 -7
- package/dist/artifacts/NativeDmgArtifactReader.js +171 -12
- package/dist/artifacts/SafeOutputTree.js +26 -10
- package/dist/artifacts/ZipArtifactReader.js +1 -0
- 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/{NibArchive.js → apple/NibArchive.js} +4 -2
- package/dist/artifacts/apple/NibViewHierarchy.js +150 -0
- package/dist/{application → artifacts/javascript}/JavaScriptArtifactFiles.js +30 -7
- package/dist/artifacts/javascript/JavaScriptArtifactReader.js +6 -0
- package/dist/artifacts/readStableArtifact.js +52 -0
- package/dist/browser/BrowserProcessStartup.js +3 -1
- package/dist/browser/BrowserScenarioSecrets.js +50 -8
- package/dist/browser/CdpAuthorizedMainFrame.js +5 -5
- package/dist/browser/CdpAuthorizedTarget.js +22 -0
- package/dist/browser/CdpBrowserProvider.js +8 -16
- package/dist/browser/CdpCaptureDocuments.js +36 -22
- package/dist/browser/CdpCaptureEventBodyShapes.js +3 -3
- package/dist/browser/CdpCaptureEventHandlers.js +32 -28
- package/dist/browser/CdpCaptureEventHelpers.js +6 -6
- package/dist/browser/CdpCaptureStorage.js +10 -8
- package/dist/browser/CdpCaptureStorageFingerprints.js +25 -23
- package/dist/browser/CdpCaptureValues.js +8 -4
- package/dist/browser/CdpCommandRejection.js +17 -0
- package/dist/browser/CdpConnection.js +59 -17
- package/dist/browser/CdpElectronInspection.js +13 -13
- package/dist/browser/CdpElectronProvider.js +7 -7
- package/dist/browser/CdpElectronScriptEvents.js +6 -6
- package/dist/browser/CdpElectronScripts.js +4 -4
- package/dist/browser/CdpElectronWorkers.js +4 -4
- package/dist/browser/CdpEndpoint.js +22 -10
- package/dist/browser/CdpObservationSession.js +20 -24
- package/dist/browser/CdpOptionalCommand.js +1 -1
- package/dist/browser/CdpPageCapture.js +6 -5
- package/dist/browser/CdpPageCaptureScripts.js +2 -2
- package/dist/browser/CdpPageCaptureWorkers.js +9 -9
- package/dist/browser/CdpSafeMetadata.js +101 -18
- package/dist/browser/CdpScreenshot.js +6 -6
- package/dist/browser/CdpTargetEvents.js +8 -0
- package/dist/browser/CdpTargetSession.js +10 -7
- package/dist/browser/CdpWebMcpDiscovery.js +23 -17
- package/dist/browser/ElectronFileScope.js +9 -3
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +10 -7
- package/dist/browser/PlaywrightElectronActiveActions.js +1 -1
- package/dist/browser/PlaywrightElectronActiveProvider.js +9 -8
- package/dist/browser/PlaywrightExecutionBoundary.js +1 -1
- package/dist/browser/PlaywrightScenarioArtifacts.js +10 -5
- package/dist/browser/PlaywrightScenarioBrowser.js +3 -1
- package/dist/browser/PlaywrightScenarioEvents.js +65 -53
- package/dist/browser/PlaywrightScenarioSession.js +13 -3
- package/dist/browser/WebSourceMapFetcher.js +55 -58
- 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 +91 -0
- package/dist/{cliApplicationCommands.js → cli/applicationCommands.js} +49 -16
- package/dist/cli/artifactCommands.js +1 -1
- package/dist/{cliBrowserAdvancedCommands.js → cli/browserAdvancedCommands.js} +39 -24
- package/dist/{cliBrowserCommands.js → cli/browserCommands.js} +9 -9
- package/dist/cli/commandCancellation.js +24 -0
- package/dist/cli/coreAnalysisCommands.js +5 -400
- package/dist/cli/coreBinaryCommands.js +211 -0
- package/dist/cli/coreNativeCommands.js +293 -0
- package/dist/{cliElectronCommands.js → cli/electronCommands.js} +20 -24
- package/dist/cli/firmwareCommands.js +75 -0
- package/dist/{cliSetup.js → cli/interactiveSetup.js} +1 -1
- package/dist/cli/javascriptApplicationAnalysis.js +2 -2
- package/dist/cli/javascriptRecoveryCommands.js +45 -0
- package/dist/cli/managedCommands.js +5 -5
- package/dist/cli/managedProjectGraphCommand.js +2 -2
- package/dist/cli/options.js +7 -1
- package/dist/{cliProcessCommands.js → cli/processCommands.js} +3 -3
- package/dist/cli/referenceSourceImportStatus.js +15 -0
- package/dist/cli/setupCommands.js +4 -2
- package/dist/cli/utilityCommands.js +50 -25
- 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 +20 -15
- package/dist/cliBrowserContext.js +5 -3
- package/dist/cliBrowserScenarioCommands.js +6 -4
- package/dist/cliCommandNames.js +19 -2
- package/dist/cliEvidenceCommands.js +2 -1
- package/dist/cliJavaScriptRuntimeCommands.js +8 -5
- package/dist/cliJsonInput.js +35 -13
- package/dist/cliLogging.js +2 -1
- package/dist/cliOutput.js +52 -27
- 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/environment.js +11 -1
- package/dist/config/parseConfig.js +29 -4
- package/dist/config/parsers.js +1 -1
- package/dist/contracts/android/androidToolContracts.js +77 -0
- package/dist/contracts/applicationToolContracts.js +75 -13
- package/dist/contracts/artifactComparisonExample.js +7 -14
- package/dist/contracts/artifactToolContracts.js +2 -2
- package/dist/contracts/browserScenarioToolContracts.js +1 -1
- package/dist/contracts/enhancedInputs.js +1 -1
- package/dist/contracts/enhancedToolContracts.js +31 -0
- package/dist/contracts/errorSchemas.js +4 -2
- package/dist/contracts/evidenceInputContracts.js +13 -0
- package/dist/contracts/firmware/firmwareToolContracts.js +38 -0
- package/dist/contracts/{applicationWorkflowInputContracts.js → javascript/applicationWorkflowInputContracts.js} +18 -18
- 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 +66 -0
- package/dist/contracts/promptContracts.js +1 -1
- package/dist/contracts/sessionLifecycleInputs.js +4 -0
- package/dist/contracts/sessionToolContracts.js +43 -0
- package/dist/contracts/sessionToolSchemas.js +1 -1
- package/dist/contracts/toolContractExamples.js +5 -0
- package/dist/contracts/toolContractTypes.js +2 -0
- package/dist/contracts/toolContracts.js +18 -135
- package/dist/contracts/toolEffects.js +75 -0
- package/dist/contracts/toolOutputSchemaGroups.js +20 -16
- package/dist/contracts/toolOutputSchemaPrimitives.js +1 -0
- package/dist/contracts/webRuntimeToolContracts.js +43 -0
- package/dist/contracts/webScriptToolContracts.js +68 -0
- package/dist/doctorRuntime.js +5 -1
- package/dist/domain/analysisErrorBase.js +33 -0
- package/dist/domain/analysisErrorCore.js +62 -0
- package/dist/domain/analysisErrorPresentation.js +22 -2
- package/dist/domain/analysisErrorProjection.js +25 -3
- package/dist/domain/analysisSnapshot.js +1 -0
- package/dist/domain/android/androidAnalysis.js +141 -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 -312
- 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/artifactGraph.js +1 -0
- package/dist/domain/artifactInspection.js +19 -17
- package/dist/domain/artifactInventoryEvidence.js +32 -27
- package/dist/domain/artifactInventorySnapshot.js +1 -0
- package/dist/domain/artifactOperationError.js +20 -0
- package/dist/domain/artifactPathSyntax.js +26 -0
- package/dist/domain/browserNetworkEvidence.js +82 -0
- package/dist/domain/browserObservation.js +12 -4
- package/dist/domain/browserObservationError.js +25 -0
- package/dist/domain/browserObservationSchemas.js +2 -1
- package/dist/domain/browserScenario.js +1 -1
- package/dist/domain/browserScenarioCapture.js +23 -1
- package/dist/domain/browserScenarioCaptureValues.js +25 -0
- package/dist/domain/browserScenarioDiff.js +7 -4
- package/dist/domain/browserScenarioDiffEvidence.js +35 -1
- package/dist/domain/browserScenarioNormalization.js +6 -11
- package/dist/domain/browserScenarioValues.js +15 -2
- package/dist/domain/browserSession.js +2 -7
- package/dist/domain/bundleComparison.js +2 -1
- package/dist/domain/callPath.js +86 -38
- package/dist/domain/canonicalDigest.js +65 -0
- package/dist/domain/canonicalOrdering.js +11 -0
- package/dist/domain/changedBehavior.js +8 -7
- package/dist/domain/comparisonSemantics.js +2 -4
- package/dist/domain/comparisonStatus.js +39 -0
- package/dist/domain/configurationErrors.js +25 -0
- package/dist/domain/dosCom.js +8 -0
- package/dist/domain/evidence.js +3 -11
- package/dist/domain/evidenceBundle.js +98 -35
- package/dist/domain/evidenceErrors.js +30 -0
- package/dist/domain/firmware/firmwareAnalysis.js +121 -0
- package/dist/domain/functionComparison.js +4 -2
- package/dist/domain/functionComparisonDimensions.js +6 -4
- package/dist/domain/functionComparisonNormalization.js +13 -8
- package/dist/domain/functionComparisonResults.js +1 -4
- package/dist/domain/hopperErrors.js +78 -0
- package/dist/domain/hopperValues.js +4 -3
- package/dist/domain/inputIssueProjection.js +17 -2
- package/dist/domain/{electronActiveObservation.js → javascript/electronActiveObservation.js} +3 -1
- package/dist/domain/{electronObservation.js → javascript/electronObservation.js} +5 -11
- package/dist/domain/{electronStaticAnalysisBrowser.js → javascript/electronStaticAnalysisBrowser.js} +15 -24
- package/dist/domain/{electronStaticAnalysisIpc.js → javascript/electronStaticAnalysisIpc.js} +2 -2
- package/dist/domain/{electronStaticAnalysisNative.js → javascript/electronStaticAnalysisNative.js} +12 -12
- package/dist/domain/javascript/electronStaticAnalysisTypes.js +1 -0
- package/dist/domain/{electronStaticAnalysisValues.js → javascript/electronStaticAnalysisValues.js} +24 -4
- package/dist/domain/{javascriptApplicationAnalysis.js → javascript/javascriptApplicationAnalysis.js} +2 -2
- package/dist/domain/{javascriptApplicationChangeGraph.js → javascript/javascriptApplicationChangeGraph.js} +2 -2
- package/dist/domain/{javascriptApplicationEvidenceSchemas.js → javascript/javascriptApplicationEvidenceSchemas.js} +6 -4
- package/dist/domain/{javascriptApplicationGraph.js → javascript/javascriptApplicationGraph.js} +13 -22
- package/dist/domain/{javascriptApplicationGraphSchemas.js → javascript/javascriptApplicationGraphSchemas.js} +2 -2
- package/dist/domain/{javascriptApplicationVersionComparison.js → javascript/javascriptApplicationVersionComparison.js} +3 -11
- package/dist/domain/{javascriptApplicationVersionComparisonSchemas.js → javascript/javascriptApplicationVersionComparisonSchemas.js} +3 -3
- package/dist/domain/{javascriptApplicationVersionItems.js → javascript/javascriptApplicationVersionItems.js} +4 -4
- 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 -2
- 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} +7 -3
- package/dist/domain/{javascriptFeatureSeed.js → javascript/javascriptFeatureSeed.js} +32 -11
- package/dist/domain/{javascriptFeatureTrace.js → javascript/javascriptFeatureTrace.js} +9 -13
- package/dist/domain/{javascriptFeatureTraceSchemas.js → javascript/javascriptFeatureTraceSchemas.js} +32 -18
- package/dist/domain/{javascriptFeatureTraversal.js → javascript/javascriptFeatureTraversal.js} +7 -2
- package/dist/domain/{javascriptNativeHandoff.js → javascript/javascriptNativeHandoff.js} +2 -1
- package/dist/domain/javascript/javascriptRecovery.js +88 -0
- package/dist/domain/{javascriptRuntimeLoadState.js → javascript/javascriptRuntimeLoadState.js} +2 -2
- package/dist/domain/{javascriptRuntimeObservation.js → javascript/javascriptRuntimeObservation.js} +2 -2
- package/dist/domain/{javascriptRuntimeReconciliationActive.js → javascript/javascriptRuntimeReconciliationActive.js} +5 -12
- package/dist/domain/{javascriptRuntimeReconciliationGraph.js → javascript/javascriptRuntimeReconciliationGraph.js} +2 -2
- package/dist/domain/{javascriptRuntimeReconciliationMatching.js → javascript/javascriptRuntimeReconciliationMatching.js} +4 -3
- package/dist/domain/{javascriptRuntimeReconciliationParsing.js → javascript/javascriptRuntimeReconciliationParsing.js} +11 -17
- package/dist/domain/{javascriptRuntimeReconciliationResult.js → javascript/javascriptRuntimeReconciliationResult.js} +4 -4
- package/dist/domain/{javascriptRuntimeReconciliationSchemas.js → javascript/javascriptRuntimeReconciliationSchemas.js} +8 -5
- package/dist/domain/{javascriptRuntimeStaticCandidates.js → javascript/javascriptRuntimeStaticCandidates.js} +8 -4
- package/dist/domain/{javascriptSemanticAnalysis.js → javascript/javascriptSemanticAnalysis.js} +80 -17
- package/dist/domain/{javascriptSemanticAsyncEffects.js → javascript/javascriptSemanticAsyncEffects.js} +2 -1
- package/dist/domain/{javascriptSemanticCallResolution.js → javascript/javascriptSemanticCallResolution.js} +11 -5
- package/dist/domain/{javascriptSemanticCalls.js → javascript/javascriptSemanticCalls.js} +7 -4
- package/dist/domain/{javascriptSemanticChildProcesses.js → javascript/javascriptSemanticChildProcesses.js} +5 -2
- package/dist/domain/{javascriptSemanticDataEffectHelpers.js → javascript/javascriptSemanticDataEffectHelpers.js} +7 -6
- package/dist/domain/{javascriptSemanticDataEffects.js → javascript/javascriptSemanticDataEffects.js} +9 -6
- package/dist/domain/{javascriptSemanticFingerprints.js → javascript/javascriptSemanticFingerprints.js} +40 -16
- package/dist/domain/{javascriptSemanticGraph.js → javascript/javascriptSemanticGraph.js} +23 -28
- 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} +9 -2
- package/dist/domain/{javascriptSemanticProjection.js → javascript/javascriptSemanticProjection.js} +32 -44
- package/dist/domain/{javascriptSemanticPromises.js → javascript/javascriptSemanticPromises.js} +77 -21
- package/dist/domain/{javascriptSemanticProvenance.js → javascript/javascriptSemanticProvenance.js} +4 -1
- package/dist/domain/{javascriptSemanticQuery.js → javascript/javascriptSemanticQuery.js} +7 -8
- package/dist/domain/{javascriptSemanticQueryAssessment.js → javascript/javascriptSemanticQueryAssessment.js} +1 -2
- package/dist/domain/{javascriptSemanticQueryIdentity.js → javascript/javascriptSemanticQueryIdentity.js} +1 -2
- 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} +2 -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} +118 -60
- package/dist/domain/{javascriptSourceParser.js → javascript/javascriptSourceParser.js} +4 -2
- package/dist/domain/{javascriptStaticAnalysis.js → javascript/javascriptStaticAnalysis.js} +8 -5
- package/dist/domain/{javascriptStaticAnalysisBundler.js → javascript/javascriptStaticAnalysisBundler.js} +15 -11
- package/dist/domain/{javascriptStaticAnalysisCalls.js → javascript/javascriptStaticAnalysisCalls.js} +16 -8
- package/dist/domain/{javascriptStaticAnalysisHelpers.js → javascript/javascriptStaticAnalysisHelpers.js} +261 -43
- package/dist/domain/{sourceToBundleComparison.js → javascript/sourceToBundleComparison.js} +6 -8
- package/dist/domain/{sourceToBundleComparisonSchemas.js → javascript/sourceToBundleComparisonSchemas.js} +4 -4
- package/dist/domain/{sourceToBundleSignals.js → javascript/sourceToBundleSignals.js} +7 -7
- package/dist/domain/jsonShape.js +6 -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} +5 -4
- package/dist/domain/{managedMemberComparisonCoverage.js → managed/managedMemberComparisonCoverage.js} +2 -1
- package/dist/domain/{managedMemberComparisonItems.js → managed/managedMemberComparisonItems.js} +99 -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} +8 -6
- package/dist/domain/{managedNativeVerificationSchemas.js → managed/managedNativeVerificationSchemas.js} +6 -5
- package/dist/domain/{managedReconstruction.js → managed/managedReconstruction.js} +3 -3
- package/dist/domain/{nativeDataType.js → native/nativeDataType.js} +2 -0
- package/dist/domain/native/nativeFunctionAnnotations.js +43 -0
- package/dist/domain/{nativeInspection.js → native/nativeInspection.js} +1 -1
- package/dist/domain/{nativeInvestigationGraph.js → native/nativeInvestigationGraph.js} +13 -4
- package/dist/domain/native/nativeLoadImage.js +95 -0
- package/dist/domain/native/nativeMetadataRecovery.js +55 -0
- 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 -3
- package/dist/domain/processEvidenceProvider.js +11 -0
- package/dist/domain/processScenario.js +17 -17
- package/dist/domain/processTraceComparison.js +1 -1
- package/dist/domain/propertyListKeys.js +69 -0
- package/dist/domain/providerAdapterError.js +17 -0
- package/dist/domain/providerCleanupError.js +6 -3
- package/dist/domain/providerSelectionError.js +44 -0
- package/dist/domain/reconstructionCoverageEvaluation.js +46 -24
- package/dist/domain/reconstructionCoverageInput.js +7 -0
- package/dist/domain/reconstructionUnknowns.js +1 -1
- package/dist/domain/reconstructionVerification.js +22 -8
- package/dist/domain/referenceSourceClassification.js +5 -6
- package/dist/domain/referenceSourceGraph.js +9 -17
- package/dist/domain/referenceSourceImportParsing.js +38 -23
- package/dist/domain/runtimeIdentification.js +1 -1
- package/dist/domain/runtimeVersion.js +6 -7
- package/dist/domain/safeJson.js +13 -0
- package/dist/domain/sourceMapEnvelope.js +38 -0
- package/dist/domain/staticRuntimeCorrelation.js +9 -7
- package/dist/domain/unicodeCodePointOrder.js +11 -6
- package/dist/domain/unknownRegistryError.js +10 -0
- package/dist/domain/webBundleAnalyzerAst.js +23 -38
- package/dist/domain/webBundleAnalyzerInspection.js +29 -20
- 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 +6 -4
- package/dist/dotnet/ManagedMetadataHeaps.js +3 -2
- package/dist/dotnet/ManagedMetadataInventoryRows.js +4 -2
- package/dist/dotnet/ManagedMethodBodyReader.js +8 -1
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +22 -16
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +56 -50
- package/dist/dotnet/ManagedStaticProvider.js +6 -34
- package/dist/dotnet/ManagedStaticProviderMetadata.js +36 -0
- package/dist/evaluation/CodexAgentEval.js +2 -1
- package/dist/firmware/FirmwareCommand.js +163 -0
- package/dist/firmware/FirmwareFiles.js +190 -0
- package/dist/firmware/FirmwareProvider.js +264 -0
- package/dist/firmware/FirmwarePublication.js +84 -0
- package/dist/firmware/FirmwareRelease.js +32 -0
- package/dist/firmware/FirmwareReports.js +235 -0
- package/dist/firmware/FirmwareVersion.js +80 -0
- package/dist/generatedMcpToolCatalog.js +1 -1
- package/dist/generatedPackageMetadata.js +5 -5
- package/dist/ghidra/GhidraAnalysisProfile.js +37 -8
- package/dist/ghidra/GhidraClient.js +52 -6
- package/dist/ghidra/GhidraDiagnostics.js +3 -0
- package/dist/ghidra/GhidraDoctor.js +38 -14
- package/dist/ghidra/GhidraFunctionValues.js +14 -8
- package/dist/ghidra/GhidraInstallation.js +48 -38
- package/dist/ghidra/GhidraInstallationPolicy.js +140 -0
- package/dist/ghidra/GhidraInventoryValues.js +39 -2
- package/dist/ghidra/GhidraLauncher.js +102 -29
- package/dist/ghidra/GhidraLoadImageAttest.js +36 -0
- package/dist/ghidra/GhidraLoadImageValues.js +199 -0
- package/dist/ghidra/GhidraProvider.js +47 -149
- package/dist/ghidra/GhidraProviderCapabilities.js +58 -28
- package/dist/ghidra/GhidraProviderClient.js +209 -0
- package/dist/ghidra/GhidraRequestQueue.js +2 -2
- package/dist/ghidra/GhidraResponseBuffer.js +7 -1
- package/dist/ghidra/GhidraSessionError.js +31 -4
- package/dist/ghidra/GhidraSessionValues.js +10 -7
- package/dist/ghidra/GhidraTargetSnapshot.js +16 -2
- package/dist/ghidra/GhidraTransport.js +12 -0
- package/dist/ghidra/extensions/GhidraExtensionFailures.js +20 -0
- package/dist/ghidra/extensions/GhidraExtensions.js +170 -0
- package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +21 -0
- package/dist/ghidra/extensions/nativeaot/NativeAotReport.js +100 -0
- package/dist/hopper/BridgeLauncher.js +4 -2
- package/dist/hopper/HopperAnalysisProfile.js +7 -2
- package/dist/hopper/HopperCleanup.js +55 -9
- package/dist/hopper/HopperClient.js +14 -4
- package/dist/hopper/HopperProcessDiagnostic.js +1 -1
- package/dist/hopper/HopperProvider.js +8 -50
- package/dist/hopper/HopperProviderCapabilities.js +73 -0
- package/dist/hopper/HopperRequestQueue.js +7 -3
- package/dist/hopper/HopperResponseStream.js +7 -1
- package/dist/hopper/HopperSessionValues.js +1 -1
- package/dist/hopper/HopperSocketConnection.js +1 -1
- package/dist/hopper/HopperTargetLease.js +23 -15
- package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +7 -8
- package/dist/hopper/LinuxPrivateDisplayProbe.js +10 -6
- package/dist/hopper/protocol.js +8 -8
- package/dist/ida/IdaConfiguration.js +56 -0
- package/dist/ida/IdaDoctor.js +53 -0
- package/dist/ida/IdaInput.js +62 -0
- package/dist/ida/IdaMcpConnection.js +111 -0
- package/dist/ida/IdaOperationRunner.js +299 -0
- package/dist/ida/IdaProtocolValues.js +178 -0
- package/dist/ida/IdaProvider.js +126 -0
- package/dist/ida/IdaProviderCapabilities.js +52 -0
- package/dist/ida/IdaSessionClient.js +318 -0
- package/dist/ida/IdaWorkspace.js +54 -0
- package/dist/{browser → inspector}/JavaScriptRuntimeScope.js +19 -6
- package/dist/{browser → inspector}/V8InspectorCaptureProjection.js +46 -8
- package/dist/{browser → inspector}/V8InspectorEndpoint.js +3 -2
- package/dist/{browser → inspector}/V8InspectorProvider.js +16 -14
- 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 +29 -3
- package/dist/main/startup.js +1 -1
- package/dist/main/transport.js +32 -11
- package/dist/main.js +9 -20
- package/dist/native/AppleDispatchCoverage.js +58 -0
- package/dist/native/AppleDispatchMetadata.js +73 -490
- 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 +204 -72
- package/dist/native/NativeMacOSProviderMetadata.js +42 -0
- package/dist/native/NativeMachoInspection.js +87 -26
- package/dist/native/NativeUiHelperRuntime.js +14 -4
- package/dist/native/NativeUiObservation.js +14 -6
- 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 +16 -7
- package/dist/native/parsers/echoedPath.js +14 -0
- package/dist/native/parsers/lipo.js +14 -0
- package/dist/native/parsers/otool.js +5 -2
- package/dist/native/parsers/plist.js +174 -11
- package/dist/process/ExecFileOutput.js +2 -0
- package/dist/process/PrivateRuntimeRoot.js +13 -3
- package/dist/process/ProcessOwnership.js +5 -73
- package/dist/process/ProcessOwnershipObservation.js +62 -2
- package/dist/process/ProcessOwnershipProcessTree.js +13 -0
- package/dist/process/ProviderProcess.js +62 -24
- package/dist/process/ProviderRunLineage.js +1 -1
- package/dist/process/WindowsAuthority.js +20 -1
- package/dist/reference/ReferenceSourceReaderEntries.js +11 -2
- package/dist/reference/ReferenceSourceReaderFile.js +1 -0
- package/dist/server/createServer.js +67 -2
- package/dist/server/mcpClientMetadata.js +6 -3
- package/dist/server/mcpProgress.js +2 -1
- package/dist/server/promptCompletion.js +3 -3
- package/dist/server/registerAndroidTools.js +30 -0
- package/dist/server/registerApplicationTools/compareExportShapes.js +7 -3
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +9 -4
- package/dist/server/registerApplicationTools/compareVersions.js +7 -3
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +43 -0
- package/dist/server/registerApplicationTools/traceFeature.js +8 -3
- package/dist/server/registerApplicationTools/traceSemantics.js +8 -3
- 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/registerEnhancedTools.js +28 -1
- package/dist/server/registerFirmwareTools.js +22 -0
- package/dist/server/registerFunctionComparisonTool.js +1 -1
- package/dist/server/registerInvestigationTools/helpers.js +2 -1
- package/dist/server/registerJavaScriptRecoveryTool.js +17 -0
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -4
- package/dist/server/registerManagedTools.js +4 -4
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +2 -2
- package/dist/server/registerManagedWorkflowTools/contract.js +1 -1
- package/dist/server/registerManagedWorkflowTools/evidence.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/registerOfficialTools.js +4 -1
- package/dist/server/registerProcessComparisonTool.js +5 -2
- package/dist/server/registerPrompts.js +5 -1
- package/dist/server/registerSessionTools.js +4 -2
- 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/runDerivedOperation.js +1 -1
- package/dist/server/sessionAvailabilityPolicy.js +24 -9
- package/dist/server/sessionEvidence.js +1 -1
- package/dist/server/toolResult.js +2 -1
- package/dist/windows/WindowsNativeLoader.js +108 -0
- package/dist/windows/WindowsOwnedProcess.js +170 -0
- package/dist/windows/WindowsPrivateRuntime.js +137 -0
- package/install.sh +16 -8
- package/native/windows/README.md +107 -0
- package/native/windows/build/manifest.json +9 -0
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +70 -35
- package/scripts/hopper-demo-x11.py +67 -8
- package/scripts/rea.mjs +10 -2
- package/scripts/verify-windows-native-artifact.mjs +39 -0
- package/skills/reverse-engineer-anything/SKILL.md +92 -24
- package/skills/reverse-engineer-anything/references/android-applications.md +31 -0
- package/skills/reverse-engineer-anything/references/javascript-applications.md +19 -2
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +61 -4
- package/dist/application/JavaScriptApplicationService.js +0 -52
- package/dist/application/runtime.js +0 -51
- package/dist/browser/CdpCanonicalJsonDigest.js +0 -9
- package/dist/domain/appleApplication.js +0 -181
- package/dist/domain/errors.js +0 -324
- package/dist/domain/javascriptAstValues.js +0 -13
- package/dist/domain/javascriptSemanticTraversal.js +0 -30
- package/dist/native/NativeHostCapabilities.js +0 -23
- /package/dist/application/{BinarySessionPort.js → DirectAnalysisDependencies.js} +0 -0
- /package/dist/application/{ElectronActiveObservationPort.js → WebModulePorts.js} +0 -0
- /package/dist/application/{ElectronObservationPort.js → WebRuntimePort.js} +0 -0
- /package/dist/application/{JavaScriptArtifactAnalysisTypes.js → WebScriptArtifactPort.js} +0 -0
- /package/dist/application/{JavaScriptRuntimeObservationPort.js → WebSourceLocationPorts.js} +0 -0
- /package/dist/{domain/electronStaticAnalysisTypes.js → application/android/AndroidAnalysisPort.js} +0 -0
- /package/dist/application/{AbortablePromise.js → binary/AbortablePromise.js} +0 -0
- /package/dist/{domain/javascriptSemanticValueTypes.js → application/binary/BinarySessionPort.js} +0 -0
- /package/dist/application/{BinarySessionStatus.js → binary/BinarySessionStatus.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/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/{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/{nativeInstruction.js → native/nativeInstruction.js} +0 -0
- /package/dist/domain/{nativeValueFlow.js → native/nativeValueFlow.js} +0 -0
- /package/dist/domain/{nativeValueTrace.js → native/nativeValueTrace.js} +0 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/** Join script response bytes only through explicit transaction and event identity. */
|
|
2
|
+
export const scenarioScripts = (capture) => {
|
|
3
|
+
const index = indexResponses(capture.events.items);
|
|
4
|
+
return capture.events.items.flatMap((request) => {
|
|
5
|
+
if (request.kind !== "request" || request.resource_type !== "script")
|
|
6
|
+
return [];
|
|
7
|
+
return [projectRequest(request, index)];
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
const indexResponses = (events) => {
|
|
11
|
+
const index = {
|
|
12
|
+
responses: new Map(),
|
|
13
|
+
contents: new Map(),
|
|
14
|
+
requests: new Map(),
|
|
15
|
+
};
|
|
16
|
+
for (const event of events) {
|
|
17
|
+
if (event.kind === "request" && event.transaction_id !== undefined)
|
|
18
|
+
index.requests.set(event.transaction_id, (index.requests.get(event.transaction_id) ?? 0) + 1);
|
|
19
|
+
if (event.kind === "response" && event.transaction_id !== undefined)
|
|
20
|
+
append(index.responses, event.transaction_id, event);
|
|
21
|
+
if (event.kind === "network-content" && event.phase === "response")
|
|
22
|
+
append(index.contents, event.source_event_sequence, event);
|
|
23
|
+
}
|
|
24
|
+
return index;
|
|
25
|
+
};
|
|
26
|
+
const projectRequest = (request, index) => {
|
|
27
|
+
const id = request.transaction_id;
|
|
28
|
+
const matches = id === undefined ? [] : (index.responses.get(id) ?? []);
|
|
29
|
+
const response = matches.length === 1 ? matches[0] : undefined;
|
|
30
|
+
const bodies = response === undefined ? [] : (index.contents.get(response.sequence) ?? []);
|
|
31
|
+
const body = bodies.length === 1 ? bodies[0]?.body : undefined;
|
|
32
|
+
const ambiguous = (id !== undefined && index.requests.get(id) !== 1) ||
|
|
33
|
+
matches.length > 1 ||
|
|
34
|
+
bodies.length > 1;
|
|
35
|
+
return {
|
|
36
|
+
source: {
|
|
37
|
+
kind: "scenario-response",
|
|
38
|
+
transaction_id: id ?? null,
|
|
39
|
+
request_sequence: request.sequence,
|
|
40
|
+
response_sequence: ambiguous ? null : (response?.sequence ?? null),
|
|
41
|
+
status: ambiguous ? null : (response?.status ?? null),
|
|
42
|
+
},
|
|
43
|
+
url: request.url.url,
|
|
44
|
+
content: projectBody(body, id, ambiguous),
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
const unavailable = (reason, message) => ({ state: "unavailable", reason, message });
|
|
48
|
+
const projectBody = (body, transactionId, ambiguous) => {
|
|
49
|
+
if (ambiguous)
|
|
50
|
+
return unavailable("ambiguous-transaction", "The capture does not identify one request, response, and content record for this transaction.");
|
|
51
|
+
if (body === undefined)
|
|
52
|
+
return unavailable(transactionId === undefined
|
|
53
|
+
? "transaction-identity-unavailable"
|
|
54
|
+
: "response-content-not-retained", "No selected, completed script response bytes were retained for this request.");
|
|
55
|
+
if (body.state === "unavailable")
|
|
56
|
+
return unavailable(body.reason, body.message);
|
|
57
|
+
if (body.state !== "captured")
|
|
58
|
+
return unavailable(body.state, "No selected, completed script response bytes were retained for this request.");
|
|
59
|
+
if (body.representation !== "browser-decoded-response-bytes")
|
|
60
|
+
return unavailable("unsupported-body-representation", `Captured representation ${body.representation} is not script response bytes.`);
|
|
61
|
+
return {
|
|
62
|
+
state: "captured",
|
|
63
|
+
bytes: Buffer.from(body.content, "base64"),
|
|
64
|
+
sha256: body.sha256,
|
|
65
|
+
media_type: body.media_type,
|
|
66
|
+
redacted: body.redacted,
|
|
67
|
+
representation: body.representation,
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
const append = (map, key, value) => {
|
|
71
|
+
const existing = map.get(key);
|
|
72
|
+
if (existing === undefined)
|
|
73
|
+
map.set(key, [value]);
|
|
74
|
+
else
|
|
75
|
+
existing.push(value);
|
|
76
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { webPageInspectionSchema } from "../../domain/browserObservation.js";
|
|
2
|
+
import { browserScenarioCaptureSchema } from "../../domain/browserScenarioCapture.js";
|
|
3
|
+
import { parseEvidence } from "../../domain/evidence.js";
|
|
4
|
+
import { pageScripts } from "./PageScriptCapture.js";
|
|
5
|
+
import { scenarioScripts } from "./ScenarioScriptCapture.js";
|
|
6
|
+
/** Built-in adapters; add capture formats here without changing the publisher. */
|
|
7
|
+
export const SCRIPT_CAPTURE_ADAPTERS = [
|
|
8
|
+
{
|
|
9
|
+
operation: "inspect_web_page",
|
|
10
|
+
parse: (input) => {
|
|
11
|
+
const parsed = webPageInspectionSchema.safeParse(input);
|
|
12
|
+
return parsed.success
|
|
13
|
+
? {
|
|
14
|
+
kind: "page-inspection",
|
|
15
|
+
completeness: parsed.data.completeness,
|
|
16
|
+
scripts: pageScripts(parsed.data),
|
|
17
|
+
limitations: parsed.data.limitations,
|
|
18
|
+
}
|
|
19
|
+
: undefined;
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
operation: "capture_browser_scenario",
|
|
24
|
+
parse: (input) => {
|
|
25
|
+
const parsed = browserScenarioCaptureSchema.safeParse(input);
|
|
26
|
+
return parsed.success
|
|
27
|
+
? {
|
|
28
|
+
kind: "browser-scenario",
|
|
29
|
+
completeness: parsed.data.completeness,
|
|
30
|
+
scripts: scenarioScripts(parsed.data),
|
|
31
|
+
limitations: parsed.data.limitations,
|
|
32
|
+
}
|
|
33
|
+
: undefined;
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
];
|
|
37
|
+
/** Reject unsupported/malformed captures and tampered Evidence before writing. */
|
|
38
|
+
export const selectScriptCapture = (raw, adapters = SCRIPT_CAPTURE_ADAPTERS) => {
|
|
39
|
+
if (typeof raw === "object" &&
|
|
40
|
+
raw !== null &&
|
|
41
|
+
("normalized_result" in raw || "evidence_id" in raw)) {
|
|
42
|
+
const evidence = parseEvidence(raw);
|
|
43
|
+
const selected = adapters
|
|
44
|
+
.find(({ operation }) => operation === evidence.operation)
|
|
45
|
+
?.parse(evidence.normalized_result);
|
|
46
|
+
if (selected !== undefined)
|
|
47
|
+
return { ...selected, sourceEvidenceId: evidence.evidence_id };
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
for (const adapter of adapters) {
|
|
51
|
+
const selected = adapter.parse(raw);
|
|
52
|
+
if (selected !== undefined)
|
|
53
|
+
return { ...selected, sourceEvidenceId: null };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
throw new TypeError("Expected a valid inspect_web_page or capture_browser_scenario capture, with retained script sources or response bytes. Evidence envelopes must have a matching operation and semantic identifier.");
|
|
57
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ArtifactReaderFailure } from "../../artifacts/ArtifactReader.js";
|
|
3
|
+
import { readStableArtifact } from "../../artifacts/readStableArtifact.js";
|
|
4
|
+
import { AnalysisCancelledError, AnalysisInputError, } from "../../domain/analysisErrorCore.js";
|
|
5
|
+
import { ArtifactOperationError } from "../../domain/artifactOperationError.js";
|
|
6
|
+
import { ProviderAdapterError } from "../../domain/providerAdapterError.js";
|
|
7
|
+
import { safeParseJson } from "../../domain/safeJson.js";
|
|
8
|
+
/** A malformed producer document, distinct from host I/O failures. */
|
|
9
|
+
export class WebArtifactFormatFailure extends Error {
|
|
10
|
+
}
|
|
11
|
+
/** Decode exact UTF-8 content, preserving a BOM for digest verification. */
|
|
12
|
+
export const decodeWebArtifact = (bytes) => {
|
|
13
|
+
try {
|
|
14
|
+
return new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }).decode(bytes);
|
|
15
|
+
}
|
|
16
|
+
catch (cause) {
|
|
17
|
+
throw new WebArtifactFormatFailure("Selected artifact is not valid UTF-8.", { cause });
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
/** Read one stable JSON artifact with a documented byte budget. */
|
|
21
|
+
export const readWebArtifactJson = async (path, maximumBytes, signal) => {
|
|
22
|
+
const data = await readStableArtifact(path, maximumBytes, signal);
|
|
23
|
+
const value = safeParseJson(decodeWebArtifact(data.bytes));
|
|
24
|
+
if (!value.ok)
|
|
25
|
+
throw new WebArtifactFormatFailure(value.error);
|
|
26
|
+
return { ...data, value: value.value };
|
|
27
|
+
};
|
|
28
|
+
/** Preserve artifact format, integrity, OS I/O, and cancellation reasons. */
|
|
29
|
+
export const webArtifactReadError = (cause, context, signal) => {
|
|
30
|
+
if (signal?.aborted === true)
|
|
31
|
+
return new AnalysisCancelledError(context.operation);
|
|
32
|
+
if (cause instanceof ArtifactReaderFailure)
|
|
33
|
+
return new ArtifactOperationError(context.operation, cause.reason, cause.details, cause.message);
|
|
34
|
+
if (cause instanceof Error &&
|
|
35
|
+
"code" in cause &&
|
|
36
|
+
typeof cause.code === "string" &&
|
|
37
|
+
"syscall" in cause &&
|
|
38
|
+
typeof cause.syscall === "string")
|
|
39
|
+
return new ArtifactOperationError(context.operation, "io", undefined, `${context.field.join(".")}: ${cause.code}: ${cause.message}`);
|
|
40
|
+
if (cause instanceof WebArtifactFormatFailure || cause instanceof z.ZodError)
|
|
41
|
+
return new AnalysisInputError(context.operation, { cause }, [
|
|
42
|
+
{
|
|
43
|
+
path: context.field,
|
|
44
|
+
reason: "invalid_format",
|
|
45
|
+
message: `${context.targetPath}: ${cause.message}`,
|
|
46
|
+
},
|
|
47
|
+
]);
|
|
48
|
+
return new ProviderAdapterError("captured-web-artifacts", context.operation, {
|
|
49
|
+
cause,
|
|
50
|
+
diagnostics: {
|
|
51
|
+
target_path: context.targetPath,
|
|
52
|
+
field: context.field.join("."),
|
|
53
|
+
error_message: cause instanceof Error ? cause.message : String(cause),
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { readStableArtifact } from "../../artifacts/readStableArtifact.js";
|
|
2
|
+
import { WEB_SOURCE_MAP_LIMITS, } from "../../domain/webSourceLocation.js";
|
|
3
|
+
import { err, ok } from "../../domain/result.js";
|
|
4
|
+
import { LocalWebScriptArtifacts } from "./LocalWebScriptArtifacts.js";
|
|
5
|
+
import { decodeWebArtifact, webArtifactReadError } from "./WebArtifactReads.js";
|
|
6
|
+
/** Read one verified capture source and the caller-selected map, without fetching. */
|
|
7
|
+
export class LocalWebSourceLocationArtifacts {
|
|
8
|
+
scripts;
|
|
9
|
+
constructor(scripts = new LocalWebScriptArtifacts("trace_web_source_location")) {
|
|
10
|
+
this.scripts = scripts;
|
|
11
|
+
}
|
|
12
|
+
/** Preserve actual map identity separately from the selected deployment URL. */
|
|
13
|
+
async load(input, options) {
|
|
14
|
+
const loaded = await this.scripts.load(input, options);
|
|
15
|
+
if (!loaded.ok)
|
|
16
|
+
return loaded;
|
|
17
|
+
try {
|
|
18
|
+
const data = await readStableArtifact(input.source_map.path, WEB_SOURCE_MAP_LIMITS.mapBytes, options?.signal);
|
|
19
|
+
return ok({
|
|
20
|
+
...loaded.value,
|
|
21
|
+
sourceMap: {
|
|
22
|
+
file: {
|
|
23
|
+
path: input.source_map.path,
|
|
24
|
+
sha256: data.sha256,
|
|
25
|
+
bytes: data.bytes.length,
|
|
26
|
+
},
|
|
27
|
+
url: input.source_map.url,
|
|
28
|
+
text: decodeWebArtifact(data.bytes),
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
catch (cause) {
|
|
33
|
+
return err(webArtifactReadError(cause, {
|
|
34
|
+
operation: "trace_web_source_location",
|
|
35
|
+
field: ["source_map", "path"],
|
|
36
|
+
targetPath: input.source_map.path,
|
|
37
|
+
}, options?.signal));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { runtimeListenersSchema } from "./CdpRuntimeProtocol.js";
|
|
4
|
+
import { queryListenerSelector } from "./CdpListenerSelector.js";
|
|
5
|
+
/** Inspect native DOM listener descriptors without evaluating JavaScript or invoking handlers. */
|
|
6
|
+
export const captureWebEventListeners = async (input, sources, group) => {
|
|
7
|
+
const session = sources.session;
|
|
8
|
+
session.beginCompletion();
|
|
9
|
+
const unsubscribe = session.transport.connection.onEvent((event) => sources.ingest(event));
|
|
10
|
+
try {
|
|
11
|
+
for (const domain of ["Page", "Runtime", "Debugger", "DOM"])
|
|
12
|
+
await session.enable(domain);
|
|
13
|
+
await session.assertDocument();
|
|
14
|
+
const document = z
|
|
15
|
+
.object({ root: z.object({ nodeId: z.number().int().min(1) }) })
|
|
16
|
+
.parse(await session.command("DOM.getDocument", { depth: 0 }));
|
|
17
|
+
const selected = z
|
|
18
|
+
.object({ nodeId: z.number().int().min(0) })
|
|
19
|
+
.parse(await queryListenerSelector(session, document.root.nodeId, input.selector));
|
|
20
|
+
let backendNodeId = null;
|
|
21
|
+
let descriptors = [];
|
|
22
|
+
if (selected.nodeId !== 0) {
|
|
23
|
+
const described = z
|
|
24
|
+
.object({ node: z.object({ backendNodeId: z.number().int().min(1) }) })
|
|
25
|
+
.parse(await session.command("DOM.describeNode", {
|
|
26
|
+
nodeId: selected.nodeId,
|
|
27
|
+
}));
|
|
28
|
+
backendNodeId = described.node.backendNodeId;
|
|
29
|
+
const resolved = z
|
|
30
|
+
.object({ object: z.object({ objectId: z.string().min(1) }) })
|
|
31
|
+
.parse(await session.command("DOM.resolveNode", {
|
|
32
|
+
nodeId: selected.nodeId,
|
|
33
|
+
objectGroup: group,
|
|
34
|
+
}));
|
|
35
|
+
descriptors = runtimeListenersSchema.parse(await session.command("DOMDebugger.getEventListeners", {
|
|
36
|
+
objectId: resolved.object.objectId,
|
|
37
|
+
depth: 0,
|
|
38
|
+
pierce: false,
|
|
39
|
+
})).listeners;
|
|
40
|
+
}
|
|
41
|
+
const retained = await sources.read(descriptors
|
|
42
|
+
.map((listener) => listener.scriptId)
|
|
43
|
+
.filter((id) => id.length > 0));
|
|
44
|
+
await session.assertDocument();
|
|
45
|
+
sources.check();
|
|
46
|
+
return {
|
|
47
|
+
browser: session.discovery.version,
|
|
48
|
+
target: session.target,
|
|
49
|
+
inspected_at: new Date().toISOString(),
|
|
50
|
+
selected_node: {
|
|
51
|
+
selector: input.selector,
|
|
52
|
+
match: selected.nodeId === 0 ? "not_found" : "found",
|
|
53
|
+
backend_node_id: backendNodeId,
|
|
54
|
+
},
|
|
55
|
+
listeners: descriptors.map((listener) => ({
|
|
56
|
+
type: listener.type,
|
|
57
|
+
use_capture: listener.useCapture,
|
|
58
|
+
passive: listener.passive,
|
|
59
|
+
once: listener.once,
|
|
60
|
+
location: sources.location(listener.scriptId, sources.scripts.get(listener.scriptId)?.url ?? null, listener.lineNumber, listener.columnNumber),
|
|
61
|
+
execution: "unknown",
|
|
62
|
+
})),
|
|
63
|
+
sources: retained,
|
|
64
|
+
cleanup: "confirmed",
|
|
65
|
+
limitations: [
|
|
66
|
+
"Inspects listeners registered directly on the first native CSS match in the selected main document. Delegated ancestor listeners, descendants, closed shadow roots and framework registries are not enumerated.",
|
|
67
|
+
"Native CDP listener descriptors report callback locations; registration time, dispatch history and UI causality remain unknown. REA does not dispatch an event, evaluate JavaScript or invoke a handler.",
|
|
68
|
+
"Source identity uses this session's script ID and proven main-frame default-world metadata. Isolated or unknown worlds cannot establish website callback/source joins. A URL or sourceURL declaration never establishes identity or execution.",
|
|
69
|
+
"Source text is retained inline with its independently computed UTF-8 digest; the producer hash is preserved separately. Missing source ownership or collected scripts remain explicit.",
|
|
70
|
+
"REA releases its remote object group, disables enabled domains and detaches its transport; the externally owned page remains open.",
|
|
71
|
+
],
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
unsubscribe();
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
/** Use an owned remote object namespace so cleanup does not release caller objects. */
|
|
79
|
+
export const eventListenerObjectGroup = () => `rea-listeners-${randomUUID()}`;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { BrowserObservationError } from "../../domain/browserObservationError.js";
|
|
3
|
+
import { AnalysisCancelledError, AnalysisOutputError, } from "../../domain/analysisErrorCore.js";
|
|
4
|
+
import { CdpExecutionCollection } from "./CdpExecutionCollection.js";
|
|
5
|
+
import { preciseCoverageSchema } from "./CdpRuntimeProtocol.js";
|
|
6
|
+
import { normalizePreciseCoverage } from "./CdpPreciseCoverage.js";
|
|
7
|
+
/** Capture one explicit resetting coverage sample and its request-source relationships. */
|
|
8
|
+
export const captureWebExecution = async (input, sources) => {
|
|
9
|
+
const session = sources.session;
|
|
10
|
+
const collection = new CdpExecutionCollection(sources);
|
|
11
|
+
const { window, requests } = collection;
|
|
12
|
+
try {
|
|
13
|
+
for (const domain of ["Page", "Runtime", "Debugger", "Network", "Profiler"])
|
|
14
|
+
await session.enable(domain);
|
|
15
|
+
await session.assertDocument();
|
|
16
|
+
sources.check();
|
|
17
|
+
session.preciseCoverageMayBeActive = true;
|
|
18
|
+
const started = z.object({ timestamp: z.number().min(0) }).parse(await session.command("Profiler.startPreciseCoverage", {
|
|
19
|
+
callCount: true,
|
|
20
|
+
detailed: true,
|
|
21
|
+
allowTriggeredUpdates: false,
|
|
22
|
+
}));
|
|
23
|
+
sources.check();
|
|
24
|
+
window.check();
|
|
25
|
+
if (window.reason !== undefined)
|
|
26
|
+
throw new BrowserObservationError(session.operation, "target_changed", {
|
|
27
|
+
detail: `Selected target ${session.target.target_id} ended with ${window.reason} before execution observation could be armed.`,
|
|
28
|
+
});
|
|
29
|
+
const waiting = window.start(input.observation_ms);
|
|
30
|
+
// Cancellation may arrive while asynchronous progress is being delivered.
|
|
31
|
+
void waiting.catch(() => undefined);
|
|
32
|
+
await session.options.progress?.report({
|
|
33
|
+
phase: "browser_execution",
|
|
34
|
+
completed: 1,
|
|
35
|
+
total: 2,
|
|
36
|
+
message: "Browser execution observation armed; perform the requested action now",
|
|
37
|
+
});
|
|
38
|
+
const reason = await waiting;
|
|
39
|
+
session.beginCompletion();
|
|
40
|
+
if (session.options.signal?.aborted)
|
|
41
|
+
throw new AnalysisCancelledError(session.operation);
|
|
42
|
+
sources.check();
|
|
43
|
+
requests.check();
|
|
44
|
+
let raw;
|
|
45
|
+
if (reason === "window_elapsed") {
|
|
46
|
+
await session.assertDocument();
|
|
47
|
+
raw = await session.command("Profiler.takePreciseCoverage");
|
|
48
|
+
}
|
|
49
|
+
collection.freezeMetadata();
|
|
50
|
+
await session.command("Profiler.stopPreciseCoverage");
|
|
51
|
+
session.preciseCoverageMayBeActive = false;
|
|
52
|
+
const requestItems = requests.result();
|
|
53
|
+
const parsed = raw === undefined ? undefined : preciseCoverageSchema.safeParse(raw);
|
|
54
|
+
if (parsed !== undefined && !parsed.success)
|
|
55
|
+
throw new AnalysisOutputError(session.operation, `Malformed precise coverage: ${parsed.error.message}`);
|
|
56
|
+
const mainScripts = [...sources.scripts.keys()].filter((id) => sources.belongsToDocument(id));
|
|
57
|
+
const reportedIds = new Set(parsed?.success === true
|
|
58
|
+
? parsed.data.result.map((script) => script.scriptId)
|
|
59
|
+
: []);
|
|
60
|
+
const ids = [
|
|
61
|
+
...mainScripts,
|
|
62
|
+
...requestItems
|
|
63
|
+
.flatMap((request) => request.callsites.map((site) => site.script_id))
|
|
64
|
+
.filter((id) => id.length > 0),
|
|
65
|
+
];
|
|
66
|
+
const retained = await sources.read(ids);
|
|
67
|
+
if (reason === "window_elapsed")
|
|
68
|
+
await session.assertDocument();
|
|
69
|
+
sources.check();
|
|
70
|
+
const verifiedRequests = requests.result();
|
|
71
|
+
const verifiedMainScripts = mainScripts.filter((id) => sources.belongsToDocument(id));
|
|
72
|
+
const sample = raw === undefined
|
|
73
|
+
? undefined
|
|
74
|
+
: normalizePreciseCoverage(raw, sources, retained);
|
|
75
|
+
await session.options.progress?.report({
|
|
76
|
+
phase: "browser_execution",
|
|
77
|
+
completed: 2,
|
|
78
|
+
total: 2,
|
|
79
|
+
message: "Browser execution observation ended",
|
|
80
|
+
terminal: true,
|
|
81
|
+
});
|
|
82
|
+
return {
|
|
83
|
+
browser: session.discovery.version,
|
|
84
|
+
target: session.target,
|
|
85
|
+
window: {
|
|
86
|
+
armed_at: window.armedAt ?? new Date().toISOString(),
|
|
87
|
+
ended_at: window.endedAt ?? new Date().toISOString(),
|
|
88
|
+
requested_ms: input.observation_ms,
|
|
89
|
+
end_reason: reason,
|
|
90
|
+
producer_started_seconds: started.timestamp,
|
|
91
|
+
producer_sampled_seconds: sample?.timestamp ?? null,
|
|
92
|
+
},
|
|
93
|
+
coverage: sample?.coverage ?? {
|
|
94
|
+
state: "unavailable",
|
|
95
|
+
reason: `The observation ended with ${reason}; no complete final precise-coverage sample was retained.`,
|
|
96
|
+
offset_units: "utf16-code-units",
|
|
97
|
+
end_offset: "exclusive",
|
|
98
|
+
scripts: [],
|
|
99
|
+
excluded_scripts: 0,
|
|
100
|
+
},
|
|
101
|
+
requests: verifiedRequests,
|
|
102
|
+
excluded_requests: requests.excluded,
|
|
103
|
+
script_inventory: {
|
|
104
|
+
main_document_scripts: verifiedMainScripts.length,
|
|
105
|
+
not_reported_script_ids: verifiedMainScripts.filter((id) => !reportedIds.has(id)),
|
|
106
|
+
coverage_absence: "unknown",
|
|
107
|
+
},
|
|
108
|
+
sources: retained,
|
|
109
|
+
instrumentation: {
|
|
110
|
+
resets_execution_counters: true,
|
|
111
|
+
disables_optimized_execution: true,
|
|
112
|
+
takes_one_resetting_sample: sample !== undefined,
|
|
113
|
+
executes_selected_code: false,
|
|
114
|
+
cleanup: "confirmed",
|
|
115
|
+
page_ownership: "external",
|
|
116
|
+
},
|
|
117
|
+
limitations: [
|
|
118
|
+
"Website source ownership requires the selected main frame and a proven default execution world. Isolated, worker and unknown worlds are excluded from coverage/source joins; referenced producer context metadata is retained.",
|
|
119
|
+
"Precise coverage resets counters, retains execution records and prevents optimized execution until stopped. Timing and JIT behavior are affected.",
|
|
120
|
+
"Only the selected main document's proven frame/context scripts are attributed. Child frames, workers, service workers, WebAssembly and scripts without ownership metadata remain outside this operation.",
|
|
121
|
+
"V8 reports nested function/block ranges and counts, not a chronological trace. Counts must not be summed across overlapping ranges; zero counts concern this instrumented window only.",
|
|
122
|
+
"Previously parsed scripts may be absent from a precise sample. Their source inventory is retained, but missing coverage never means zero execution or an unexecuted function.",
|
|
123
|
+
"A detailed-coverage request does not guarantee block granularity for already compiled functions. When is_block_coverage is false, branch execution is unknown; REA preserves the function-only producer ranges.",
|
|
124
|
+
"The local armed/end clock and backend coverage timestamps are distinct clocks. Counters start when the backend accepts instrumentation, before the armed receipt, and end at the resetting sample after the requested window. Counts may include execution during those command intervals; requests are restricted to the locally armed window.",
|
|
125
|
+
"Source metadata is collected through the final resetting sample, then frozen for source joins. Known identities remain checked during asynchronous source completion; newly parsed scripts after that cutoff are outside this evidence.",
|
|
126
|
+
"Request callsites are producer-reported initiators associated by session script ID; they do not establish UI causality. Unresolved asynchronous parent IDs are retained without fetching their stacks.",
|
|
127
|
+
"Producer hashes and UTF-8 digests of retained text are distinct identities. Inline script locations use reported resource offsets; anonymous/eval/sourceURL names are declarations.",
|
|
128
|
+
"Metadata has an 8 MiB script budget and 8 MiB request budget; complete retained sources have a 32 MiB budget. Resource failures return no partial success. The externally owned browser's CPU and memory are not controlled by REA.",
|
|
129
|
+
],
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
collection.close();
|
|
134
|
+
}
|
|
135
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { AnalysisError } from "../../domain/analysisErrorBase.js";
|
|
2
|
+
import { AnalysisOutputError } from "../../domain/analysisErrorCore.js";
|
|
3
|
+
import { cdpTargetEventMatches } from "../CdpTargetEvents.js";
|
|
4
|
+
import { CdpExecutionWindow } from "./CdpExecutionWindow.js";
|
|
5
|
+
import { CdpRuntimeRequests } from "./CdpRuntimeRequests.js";
|
|
6
|
+
/** Own source/request collection and failure subscriptions through a precise-sample cutoff. */
|
|
7
|
+
export class CdpExecutionCollection {
|
|
8
|
+
sources;
|
|
9
|
+
window;
|
|
10
|
+
requests;
|
|
11
|
+
#unsubscribers;
|
|
12
|
+
#metadataOpen = true;
|
|
13
|
+
constructor(sources) {
|
|
14
|
+
this.sources = sources;
|
|
15
|
+
const session = sources.session;
|
|
16
|
+
this.window = new CdpExecutionWindow(session);
|
|
17
|
+
this.requests = new CdpRuntimeRequests(sources);
|
|
18
|
+
this.#unsubscribers = [
|
|
19
|
+
session.transport.connection.onEvent((event) => {
|
|
20
|
+
if (!cdpTargetEventMatches(event, session.transport.sessionId))
|
|
21
|
+
return;
|
|
22
|
+
try {
|
|
23
|
+
if (this.#metadataOpen &&
|
|
24
|
+
(this.window.reason === undefined ||
|
|
25
|
+
this.window.reason === "window_elapsed"))
|
|
26
|
+
sources.ingest(event);
|
|
27
|
+
else if (this.window.reason === "window_elapsed")
|
|
28
|
+
sources.verifyKnownIdentity(event);
|
|
29
|
+
if (this.window.active)
|
|
30
|
+
this.requests.ingest(event);
|
|
31
|
+
sources.check();
|
|
32
|
+
this.requests.check();
|
|
33
|
+
}
|
|
34
|
+
catch (cause) {
|
|
35
|
+
this.window.fail(cause instanceof AnalysisError
|
|
36
|
+
? cause
|
|
37
|
+
: new AnalysisOutputError(session.operation, String(cause)));
|
|
38
|
+
}
|
|
39
|
+
this.window.ingest(event);
|
|
40
|
+
}),
|
|
41
|
+
session.transport.connection.onDisconnect(() => this.window.end("target_terminated")),
|
|
42
|
+
session.transport.connection.onProtocolFailure((error) => this.window.fail(error)),
|
|
43
|
+
];
|
|
44
|
+
}
|
|
45
|
+
/** Freeze metadata after receiving the final sample so source joins use one fixed inventory. */
|
|
46
|
+
freezeMetadata() {
|
|
47
|
+
this.#metadataOpen = false;
|
|
48
|
+
this.sources.check();
|
|
49
|
+
}
|
|
50
|
+
/** Remove every owned subscription and local timer on success, cancellation or failure. */
|
|
51
|
+
close() {
|
|
52
|
+
this.#metadataOpen = false;
|
|
53
|
+
this.window.dispose();
|
|
54
|
+
for (const unsubscribe of this.#unsubscribers)
|
|
55
|
+
unsubscribe();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { AnalysisCancelledError } from "../../domain/analysisErrorCore.js";
|
|
2
|
+
/** One finite document-scoped window, with an actual armed point and event-driven termination. */
|
|
3
|
+
export class CdpExecutionWindow {
|
|
4
|
+
session;
|
|
5
|
+
armedAt;
|
|
6
|
+
endedAt;
|
|
7
|
+
reason;
|
|
8
|
+
#timer;
|
|
9
|
+
#resolve;
|
|
10
|
+
#reject;
|
|
11
|
+
#failure;
|
|
12
|
+
#removeAbort;
|
|
13
|
+
constructor(session) {
|
|
14
|
+
this.session = session;
|
|
15
|
+
}
|
|
16
|
+
/** Collection ends on a main-document replacement, never follows source URLs into another context. */
|
|
17
|
+
ingest(event) {
|
|
18
|
+
if (event.method === "Target.detachedFromTarget" ||
|
|
19
|
+
event.method === "Inspector.targetCrashed") {
|
|
20
|
+
this.end("target_terminated");
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (!this.active)
|
|
24
|
+
return;
|
|
25
|
+
if (event.method === "Runtime.executionContextsCleared")
|
|
26
|
+
this.end("document_changed");
|
|
27
|
+
if (event.method === "Page.frameNavigated" &&
|
|
28
|
+
typeof event.params === "object" &&
|
|
29
|
+
event.params !== null &&
|
|
30
|
+
"frame" in event.params) {
|
|
31
|
+
const frame = event.params.frame;
|
|
32
|
+
if (typeof frame === "object" && frame !== null && !("parentId" in frame))
|
|
33
|
+
this.end("document_changed");
|
|
34
|
+
}
|
|
35
|
+
if (event.method === "Page.frameDetached" &&
|
|
36
|
+
typeof event.params === "object" &&
|
|
37
|
+
event.params !== null &&
|
|
38
|
+
"frameId" in event.params &&
|
|
39
|
+
event.params.frameId === this.session.target.frame_id)
|
|
40
|
+
this.end("document_changed");
|
|
41
|
+
}
|
|
42
|
+
/** Metadata before arming is inventory; request events outside the window are excluded. */
|
|
43
|
+
get active() {
|
|
44
|
+
return (this.armedAt !== undefined &&
|
|
45
|
+
this.reason === undefined &&
|
|
46
|
+
this.endedAt === undefined);
|
|
47
|
+
}
|
|
48
|
+
/** The timer starts at arming, before progress delivery can delay the external action. */
|
|
49
|
+
start(duration) {
|
|
50
|
+
this.armedAt = new Date().toISOString();
|
|
51
|
+
if (this.#failure !== undefined)
|
|
52
|
+
return Promise.reject(this.#failure);
|
|
53
|
+
if (this.reason !== undefined)
|
|
54
|
+
return Promise.resolve(this.reason);
|
|
55
|
+
return new Promise((resolve, reject) => {
|
|
56
|
+
this.#resolve = resolve;
|
|
57
|
+
this.#reject = reject;
|
|
58
|
+
this.#timer = setTimeout(() => this.end("window_elapsed"), duration);
|
|
59
|
+
const signal = this.session.options.signal;
|
|
60
|
+
const abort = () => {
|
|
61
|
+
this.endedAt = new Date().toISOString();
|
|
62
|
+
this.dispose();
|
|
63
|
+
this.#reject?.(new AnalysisCancelledError(this.session.operation));
|
|
64
|
+
};
|
|
65
|
+
this.#removeAbort = () => signal?.removeEventListener("abort", abort);
|
|
66
|
+
signal?.addEventListener("abort", abort, { once: true });
|
|
67
|
+
if (signal?.aborted)
|
|
68
|
+
abort();
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/** Transport loss ends the window; instrumentation cleanup still requires confirmation. */
|
|
72
|
+
end(reason) {
|
|
73
|
+
if (this.reason !== undefined || this.#failure !== undefined)
|
|
74
|
+
return;
|
|
75
|
+
this.reason = reason;
|
|
76
|
+
this.endedAt = new Date().toISOString();
|
|
77
|
+
this.dispose();
|
|
78
|
+
this.#resolve?.(reason);
|
|
79
|
+
}
|
|
80
|
+
/** Invalid producer data ends instrumentation immediately with its original failure. */
|
|
81
|
+
fail(error) {
|
|
82
|
+
if (this.reason !== undefined || this.#failure !== undefined)
|
|
83
|
+
return;
|
|
84
|
+
this.#failure = error;
|
|
85
|
+
this.endedAt = new Date().toISOString();
|
|
86
|
+
this.dispose();
|
|
87
|
+
this.#reject?.(error);
|
|
88
|
+
}
|
|
89
|
+
/** Surface a failure recorded before local arming without emitting misleading progress. */
|
|
90
|
+
check() {
|
|
91
|
+
if (this.#failure !== undefined)
|
|
92
|
+
throw this.#failure;
|
|
93
|
+
}
|
|
94
|
+
/** Release local timer and abort listener on every setup/failure path. */
|
|
95
|
+
dispose() {
|
|
96
|
+
if (this.#timer !== undefined)
|
|
97
|
+
clearTimeout(this.#timer);
|
|
98
|
+
this.#removeAbort?.();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { AnalysisInputError } from "../../domain/analysisErrorCore.js";
|
|
2
|
+
import { CdpCommandRejection } from "../CdpCommandRejection.js";
|
|
3
|
+
/** Classify Chromium's selector syntax rejection without changing other command/transport failures. */
|
|
4
|
+
export const queryListenerSelector = async (session, nodeId, selector) => {
|
|
5
|
+
try {
|
|
6
|
+
return await session.command("DOM.querySelector", { nodeId, selector });
|
|
7
|
+
}
|
|
8
|
+
catch (cause) {
|
|
9
|
+
if (cause instanceof CdpCommandRejection &&
|
|
10
|
+
cause.command === "DOM.querySelector" &&
|
|
11
|
+
cause.code === -32000 &&
|
|
12
|
+
cause.reportedMessage === "DOM Error while querying")
|
|
13
|
+
throw new AnalysisInputError(session.operation, { cause }, [
|
|
14
|
+
{
|
|
15
|
+
path: ["selector"],
|
|
16
|
+
reason: "invalid_format",
|
|
17
|
+
message: `Chromium rejected the CSS selector syntax for target ${session.target.target_id}: ${selector}. ${cause.userMessage ?? cause.message}`,
|
|
18
|
+
},
|
|
19
|
+
]);
|
|
20
|
+
throw cause;
|
|
21
|
+
}
|
|
22
|
+
};
|