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
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
2
|
-
import canonicalize from "canonicalize";
|
|
3
1
|
import { artifactInventoryResultSchema, } from "./artifactGraph.js";
|
|
2
|
+
import { canonicalDigest, canonicalJson } from "./comparisonSemantics.js";
|
|
4
3
|
import { parseEvidence } from "./evidence.js";
|
|
5
4
|
import { artifactInspectionResultSchema } from "./artifactInspection.js";
|
|
5
|
+
import { err, ok } from "./result.js";
|
|
6
6
|
/** Parse, merge, and verify inventory Evidence pages. */
|
|
7
7
|
export const parseArtifactInventoryEvidence = (input) => assembleInventorySet((Array.isArray(input) ? input : [input]).map((value) => {
|
|
8
8
|
const evidence = parseEvidence(value);
|
|
@@ -29,25 +29,36 @@ const validateInventoryPage = (inventory) => {
|
|
|
29
29
|
assertUnique(inventory.occurrences.map(({ logical_path: path }) => path), "logical path");
|
|
30
30
|
assertUnique(inventory.edges.map(({ edge_id: id }) => id), "edge ID");
|
|
31
31
|
for (const node of inventory.nodes)
|
|
32
|
-
if (node.artifact_id !==
|
|
32
|
+
if (node.artifact_id !==
|
|
33
|
+
`art_${canonicalDigest({ sha256: node.sha256 }, "Artifact inventory")}`)
|
|
33
34
|
throw new TypeError("Artifact node ID is not content-addressed");
|
|
34
35
|
};
|
|
36
|
+
/**
|
|
37
|
+
* Result-returning seam for the empty-pages leaf. Other assembly failures
|
|
38
|
+
* still throw TypeError (migration in progress); parseArtifactInventoryEvidence
|
|
39
|
+
* keeps its throwing contract until callers switch.
|
|
40
|
+
*/
|
|
41
|
+
export const tryAssembleInventorySet = (pages) => pages.length === 0
|
|
42
|
+
? err({
|
|
43
|
+
code: "empty",
|
|
44
|
+
message: "Artifact inventory requires Evidence pages",
|
|
45
|
+
})
|
|
46
|
+
: ok(assembleInventorySet(pages));
|
|
35
47
|
const assembleInventorySet = (pages) => {
|
|
36
|
-
if (pages.length === 0)
|
|
37
|
-
throw new TypeError("Artifact inventory requires Evidence pages");
|
|
38
48
|
const first = pages[0];
|
|
39
49
|
if (first === undefined)
|
|
40
50
|
throw new TypeError("Artifact inventory requires Evidence pages");
|
|
41
|
-
const manifestJson = canonicalJson(first.inventory.manifest);
|
|
51
|
+
const manifestJson = canonicalJson(first.inventory.manifest, "Artifact inventory");
|
|
42
52
|
const nodes = new Map();
|
|
43
53
|
const occurrences = new Map();
|
|
44
54
|
const paths = new Map();
|
|
45
55
|
const edges = new Map();
|
|
46
56
|
for (const page of pages) {
|
|
47
|
-
if (canonicalJson(page.inventory.manifest) !==
|
|
57
|
+
if (canonicalJson(page.inventory.manifest, "Artifact inventory") !==
|
|
58
|
+
manifestJson)
|
|
48
59
|
throw new TypeError("Artifact inventory pages do not share one manifest");
|
|
49
|
-
if (canonicalJson(page.inventory.integrity_contradictions) !==
|
|
50
|
-
canonicalJson(first.inventory.integrity_contradictions))
|
|
60
|
+
if (canonicalJson(page.inventory.integrity_contradictions, "Artifact inventory") !==
|
|
61
|
+
canonicalJson(first.inventory.integrity_contradictions, "Artifact inventory"))
|
|
51
62
|
throw new TypeError("Artifact inventory pages do not share integrity contradictions");
|
|
52
63
|
for (const node of page.inventory.nodes)
|
|
53
64
|
mergeExact(nodes, node.artifact_id, node, "node");
|
|
@@ -99,27 +110,27 @@ const validateCompleteInventory = (inventory) => {
|
|
|
99
110
|
if (!nodeIds.has(contradiction.parent_artifact_id) ||
|
|
100
111
|
!occurrenceIds.has(contradiction.occurrence_id))
|
|
101
112
|
throw new TypeError("Integrity contradiction references a missing graph member");
|
|
102
|
-
const expectedId = `ic_${
|
|
113
|
+
const expectedId = `ic_${canonicalDigest({
|
|
103
114
|
root_artifact_id: inventory.manifest.root_artifact_id,
|
|
104
115
|
logical_path: contradiction.logical_path,
|
|
105
116
|
declared_sha256: contradiction.declared_sha256,
|
|
106
117
|
observed_sha256: contradiction.observed_sha256,
|
|
107
|
-
})}`;
|
|
118
|
+
}, "Artifact inventory")}`;
|
|
108
119
|
if (contradiction.contradiction_id !== expectedId)
|
|
109
120
|
throw new TypeError("Integrity contradiction ID does not match its identity");
|
|
110
121
|
}
|
|
111
|
-
const graphSha256 =
|
|
122
|
+
const graphSha256 = canonicalDigest({
|
|
112
123
|
nodes: inventory.nodes,
|
|
113
124
|
occurrences: inventory.occurrences,
|
|
114
125
|
edges: inventory.edges,
|
|
115
126
|
integrity_contradictions: inventory.integrityContradictions,
|
|
116
|
-
});
|
|
127
|
+
}, "Artifact inventory");
|
|
117
128
|
if (graphSha256 !== inventory.manifest.graph_sha256)
|
|
118
129
|
throw new TypeError("Artifact graph commitment does not match its members");
|
|
119
|
-
const manifestId = `agm_${
|
|
130
|
+
const manifestId = `agm_${canonicalDigest({
|
|
120
131
|
root_artifact_id: inventory.manifest.root_artifact_id,
|
|
121
132
|
graph_sha256: graphSha256,
|
|
122
|
-
})}`;
|
|
133
|
+
}, "Artifact inventory")}`;
|
|
123
134
|
if (manifestId !== inventory.manifest.manifest_id)
|
|
124
135
|
throw new TypeError("Artifact manifest ID does not match its commitment");
|
|
125
136
|
};
|
|
@@ -130,12 +141,12 @@ const validateOccurrence = (occurrence, inventory, nodeIds, occurrenceIds) => {
|
|
|
130
141
|
!occurrenceIds.has(occurrence.parent_occurrence_id))
|
|
131
142
|
throw new TypeError("Artifact occurrence references a missing parent");
|
|
132
143
|
const expectedId = occurrence.logical_path === "."
|
|
133
|
-
? `occ_${
|
|
134
|
-
: `occ_${
|
|
144
|
+
? `occ_${canonicalDigest({ root: inventory.manifest.root_artifact_id }, "Artifact inventory")}`
|
|
145
|
+
: `occ_${canonicalDigest({
|
|
135
146
|
root_artifact_id: inventory.manifest.root_artifact_id,
|
|
136
147
|
logical_path: occurrence.logical_path,
|
|
137
148
|
entry_kind: occurrence.entry_kind,
|
|
138
|
-
})}`;
|
|
149
|
+
}, "Artifact inventory")}`;
|
|
139
150
|
if (occurrence.occurrence_id !== expectedId)
|
|
140
151
|
throw new TypeError("Artifact occurrence ID does not match its identity");
|
|
141
152
|
};
|
|
@@ -151,13 +162,14 @@ const validateEdge = (edge, nodeIds, occurrenceIds) => {
|
|
|
151
162
|
occurrence_id: edge.occurrence_id,
|
|
152
163
|
logical_path: edge.logical_path,
|
|
153
164
|
};
|
|
154
|
-
if (edge.edge_id !== `edge_${
|
|
165
|
+
if (edge.edge_id !== `edge_${canonicalDigest(semantic, "Artifact inventory")}`)
|
|
155
166
|
throw new TypeError("Artifact edge ID does not match its identity");
|
|
156
167
|
};
|
|
157
168
|
const mergeExact = (output, key, value, label) => {
|
|
158
169
|
const previous = output.get(key);
|
|
159
170
|
if (previous !== undefined &&
|
|
160
|
-
canonicalJson(previous) !==
|
|
171
|
+
canonicalJson(previous, "Artifact inventory") !==
|
|
172
|
+
canonicalJson(value, "Artifact inventory"))
|
|
161
173
|
throw new TypeError(`Artifact inventory has conflicting ${label} pages`);
|
|
162
174
|
output.set(key, value);
|
|
163
175
|
};
|
|
@@ -165,10 +177,3 @@ const assertUnique = (values, label) => {
|
|
|
165
177
|
if (new Set(values).size !== values.length)
|
|
166
178
|
throw new TypeError(`Artifact inventory contains a duplicate ${label}`);
|
|
167
179
|
};
|
|
168
|
-
const digestCanonical = (value) => createHash("sha256").update(canonicalJson(value)).digest("hex");
|
|
169
|
-
const canonicalJson = (value) => {
|
|
170
|
-
const encoded = canonicalize(value);
|
|
171
|
-
if (encoded === undefined)
|
|
172
|
-
throw new TypeError("Artifact inventory could not canonicalize graph data");
|
|
173
|
-
return encoded;
|
|
174
|
-
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AnalysisError } from "./analysisErrorBase.js";
|
|
2
|
+
/** Artifact inventory or extraction failed a typed safety boundary. */
|
|
3
|
+
export class ArtifactOperationError extends AnalysisError {
|
|
4
|
+
operation;
|
|
5
|
+
reason;
|
|
6
|
+
artifactDetails;
|
|
7
|
+
detail;
|
|
8
|
+
_tag = "ArtifactOperationError";
|
|
9
|
+
constructor(operation, reason, artifactDetails,
|
|
10
|
+
/** The specific constraint that failed, such as the colliding path. */
|
|
11
|
+
detail) {
|
|
12
|
+
super(artifactDetails === undefined
|
|
13
|
+
? `Artifact ${operation} failed: ${reason}`
|
|
14
|
+
: `Artifact ${operation} failed: ${reason} at ${artifactDetails.logicalPath} (declared_sha256=${artifactDetails.declaredSha256 ?? "unavailable"}, calculated_sha256=${artifactDetails.calculatedSha256 ?? "unavailable"}, unpacked=${String(artifactDetails.unpacked)})`);
|
|
15
|
+
this.operation = operation;
|
|
16
|
+
this.reason = reason;
|
|
17
|
+
this.artifactDetails = artifactDetails;
|
|
18
|
+
this.detail = detail;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure string predicates for artifact path syntax. The local artifact
|
|
3
|
+
* resolver, the Electron native specifier check, and (by reference) the
|
|
4
|
+
* live-DOM and source-map URL handling share these character-level rules.
|
|
5
|
+
*
|
|
6
|
+
* Policy divergence (deliberate, not yet unified):
|
|
7
|
+
* - Local artifact paths resolve against an inventoried container root and
|
|
8
|
+
* report rejected | external | not-found. Confinement is lexical
|
|
9
|
+
* (posix.normalize must stay inside the root).
|
|
10
|
+
* - Live DOM destinations resolve against the document base URL and report
|
|
11
|
+
* approved | outside_policy | unsupported against allowedOrigins
|
|
12
|
+
* (see CdpCaptureDocuments.domDestination).
|
|
13
|
+
* - Source-map fetches require exact-origin http(s) without credentials
|
|
14
|
+
* (see WebSourceMapFetcher.approvedUrl).
|
|
15
|
+
* Unifying those outcome vocabularies is a separate, observable change.
|
|
16
|
+
*/
|
|
17
|
+
/** Whether a reference carries a URI scheme (`https:`, `file:`, …). */
|
|
18
|
+
export const hasScheme = (value) => /^[A-Za-z][A-Za-z+.-]*:/u.test(value);
|
|
19
|
+
/** Whether a reference is scheme-qualified or protocol-relative. */
|
|
20
|
+
export const looksExternal = (value) => hasScheme(value) || value.startsWith("//");
|
|
21
|
+
/** Drop any query string and fragment from a declared reference. */
|
|
22
|
+
export const stripQueryAndFragment = (value) => value.split("#", 1)[0]?.split("?", 1)[0] ?? "";
|
|
23
|
+
/** Path syntax admitted for a canonical artifact path. */
|
|
24
|
+
export const admitsCanonicalPathSyntax = (value) => !value.includes("\0") &&
|
|
25
|
+
!value.includes("\\") &&
|
|
26
|
+
!/%(?:2e|2f|5c)/iu.test(value);
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
/** Caller-selected network content; omission retains metadata alone. */
|
|
4
|
+
export const browserNetworkContentSelectionValuesSchema = z.strictObject({
|
|
5
|
+
request_body: z.boolean().default(false),
|
|
6
|
+
response_body: z.boolean().default(false),
|
|
7
|
+
header_values: z.boolean().default(false),
|
|
8
|
+
});
|
|
9
|
+
/** Input omission selects metadata without defaulting legacy capture coverage. */
|
|
10
|
+
export const browserNetworkContentSelectionSchema = browserNetworkContentSelectionValuesSchema.default({
|
|
11
|
+
request_body: false,
|
|
12
|
+
response_body: false,
|
|
13
|
+
header_values: false,
|
|
14
|
+
});
|
|
15
|
+
/** Self-verifying retained bytes, after any declared-secret redaction. */
|
|
16
|
+
export const browserNetworkBodySchema = z.union([
|
|
17
|
+
z.strictObject({ state: z.literal("not_requested") }),
|
|
18
|
+
z.strictObject({ state: z.literal("not_exposed") }),
|
|
19
|
+
z.strictObject({
|
|
20
|
+
state: z.literal("unavailable"),
|
|
21
|
+
reason: z.enum([
|
|
22
|
+
"request-failed",
|
|
23
|
+
"response-unfinished",
|
|
24
|
+
"body-read-failed",
|
|
25
|
+
"body-read-timeout",
|
|
26
|
+
"cancelled",
|
|
27
|
+
"capture-ended",
|
|
28
|
+
]),
|
|
29
|
+
message: z.string().min(1),
|
|
30
|
+
}),
|
|
31
|
+
z
|
|
32
|
+
.strictObject({
|
|
33
|
+
state: z.literal("captured"),
|
|
34
|
+
representation: z.enum([
|
|
35
|
+
"browser-exposed-request-bytes",
|
|
36
|
+
"browser-decoded-response-bytes",
|
|
37
|
+
]),
|
|
38
|
+
encoding: z.literal("base64"),
|
|
39
|
+
content: z.string(),
|
|
40
|
+
bytes: z.number().int().min(0),
|
|
41
|
+
sha256: z.string().regex(/^[a-f0-9]{64}$/u),
|
|
42
|
+
media_type: z.string().nullable(),
|
|
43
|
+
redacted: z.boolean(),
|
|
44
|
+
})
|
|
45
|
+
.superRefine((artifact, context) => {
|
|
46
|
+
const bytes = Buffer.from(artifact.content, "base64");
|
|
47
|
+
if (bytes.toString("base64") !== artifact.content)
|
|
48
|
+
context.addIssue({
|
|
49
|
+
code: "custom",
|
|
50
|
+
path: ["content"],
|
|
51
|
+
message: "Network body must use canonical base64",
|
|
52
|
+
});
|
|
53
|
+
if (bytes.length !== artifact.bytes)
|
|
54
|
+
context.addIssue({
|
|
55
|
+
code: "custom",
|
|
56
|
+
path: ["bytes"],
|
|
57
|
+
message: "Network body byte count disagrees with retained bytes",
|
|
58
|
+
});
|
|
59
|
+
if (createHash("sha256").update(bytes).digest("hex") !== artifact.sha256)
|
|
60
|
+
context.addIssue({
|
|
61
|
+
code: "custom",
|
|
62
|
+
path: ["sha256"],
|
|
63
|
+
message: "Network body digest disagrees with retained bytes",
|
|
64
|
+
});
|
|
65
|
+
}),
|
|
66
|
+
]);
|
|
67
|
+
/** Headers retain producer order and duplicates, with credential values removed. */
|
|
68
|
+
export const browserNetworkHeadersSchema = z.union([
|
|
69
|
+
z.strictObject({ state: z.literal("not_requested") }),
|
|
70
|
+
z.strictObject({
|
|
71
|
+
state: z.literal("unavailable"),
|
|
72
|
+
message: z.string().min(1),
|
|
73
|
+
}),
|
|
74
|
+
z.strictObject({
|
|
75
|
+
state: z.literal("captured"),
|
|
76
|
+
items: z.array(z.strictObject({
|
|
77
|
+
name: z.string().min(1),
|
|
78
|
+
value: z.string().nullable(),
|
|
79
|
+
redacted: z.boolean(),
|
|
80
|
+
})),
|
|
81
|
+
}),
|
|
82
|
+
]);
|
|
@@ -5,7 +5,9 @@ const parseExactOrigin = (value) => {
|
|
|
5
5
|
try {
|
|
6
6
|
url = new URL(value);
|
|
7
7
|
}
|
|
8
|
-
catch {
|
|
8
|
+
catch (cause) {
|
|
9
|
+
// Invalid input is represented by the undefined return.
|
|
10
|
+
void cause;
|
|
9
11
|
return undefined;
|
|
10
12
|
}
|
|
11
13
|
if ((url.protocol !== "http:" && url.protocol !== "https:") ||
|
|
@@ -44,7 +46,9 @@ export const browserEndpointSchema = z
|
|
|
44
46
|
try {
|
|
45
47
|
url = new URL(value);
|
|
46
48
|
}
|
|
47
|
-
catch {
|
|
49
|
+
catch (cause) {
|
|
50
|
+
// Invalid input is reported through the zod issue.
|
|
51
|
+
void cause;
|
|
48
52
|
context.addIssue({ code: "custom", message: "Invalid CDP endpoint URL" });
|
|
49
53
|
return z.NEVER;
|
|
50
54
|
}
|
|
@@ -122,7 +126,9 @@ export const sanitizeBrowserUrl = (value) => {
|
|
|
122
126
|
try {
|
|
123
127
|
parsed = new URL(value);
|
|
124
128
|
}
|
|
125
|
-
catch {
|
|
129
|
+
catch (cause) {
|
|
130
|
+
// Unparseable input is preserved verbatim in the sanitized result.
|
|
131
|
+
void cause;
|
|
126
132
|
return {
|
|
127
133
|
url: value,
|
|
128
134
|
origin: null,
|
|
@@ -165,7 +171,9 @@ const removeUrlUserInfo = (value, parsed) => {
|
|
|
165
171
|
? candidate
|
|
166
172
|
: credentialFreeHref(parsed);
|
|
167
173
|
}
|
|
168
|
-
catch {
|
|
174
|
+
catch (cause) {
|
|
175
|
+
// Fallback to the already-sanitized href when the candidate is invalid.
|
|
176
|
+
void cause;
|
|
169
177
|
return credentialFreeHref(parsed);
|
|
170
178
|
}
|
|
171
179
|
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { AnalysisError } from "./analysisErrorBase.js";
|
|
2
|
+
import { AnalysisCancelledError } from "./analysisErrorCore.js";
|
|
3
|
+
/** A bounded passive browser observation failed at its CDP boundary. */
|
|
4
|
+
export class BrowserObservationError extends AnalysisError {
|
|
5
|
+
operation;
|
|
6
|
+
reason;
|
|
7
|
+
_tag = "BrowserObservationError";
|
|
8
|
+
cleanupIncomplete;
|
|
9
|
+
cleanupResources;
|
|
10
|
+
userCategory;
|
|
11
|
+
userMessage;
|
|
12
|
+
constructor(operation, reason, options) {
|
|
13
|
+
super(`Browser observation ${operation} failed: ${reason}`, options);
|
|
14
|
+
this.operation = operation;
|
|
15
|
+
this.reason = reason;
|
|
16
|
+
this.userMessage = options?.detail;
|
|
17
|
+
this.cleanupIncomplete = reason === "cleanup_failed";
|
|
18
|
+
this.cleanupResources =
|
|
19
|
+
reason === "cleanup_failed" ? ["browser_transport"] : [];
|
|
20
|
+
this.userCategory =
|
|
21
|
+
reason === "cancelled" || options?.cause instanceof AnalysisCancelledError
|
|
22
|
+
? "cancelled"
|
|
23
|
+
: undefined;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -3,7 +3,8 @@ import { browserCompletenessSchema } from "./browserCompleteness.js";
|
|
|
3
3
|
import { webTextArtifactSchema } from "./webContentArtifact.js";
|
|
4
4
|
import { jsonShapeSchema } from "./jsonShape.js";
|
|
5
5
|
import { prefixedDigestSchema } from "./../domain/digests.js";
|
|
6
|
-
|
|
6
|
+
/** Shared CDP/browser version identity carried on observation Evidence. */
|
|
7
|
+
export const browserVersionSchema = z.object({
|
|
7
8
|
product: z.string(),
|
|
8
9
|
protocol_version: z.string(),
|
|
9
10
|
revision: z.string(),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { browserScenarioActionSchema, browserScenarioBrowserSchema, browserScenarioCaptureSchema, browserScenarioEnvironmentSchema, browserScenarioSecretSchema, browserScenarioStorageSchema, browserScenarioUrlSchema, } from "./browserScenarioValues.js";
|
|
3
|
-
export {
|
|
3
|
+
export {} from "./browserScenarioValues.js";
|
|
4
4
|
export const browserScenarioInputSchema = z.strictObject({
|
|
5
5
|
browser: browserScenarioBrowserSchema.describe("Required launch/connect selection. Launch uses the selected executable and an owned temporary profile; connect uses one loopback CDP endpoint and target."),
|
|
6
6
|
start_url: browserScenarioUrlSchema.describe("Required initial HTTP(S) URL. Query values must be declared separately as public literals or secret references."),
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { browserNetworkContentSelectionValuesSchema } from "./browserNetworkEvidence.js";
|
|
2
3
|
import { browserScenarioCompletenessSchema, browserScenarioEventSchema, browserScenarioStepSchema, } from "./browserScenarioCaptureValues.js";
|
|
3
|
-
export { classifyBrowserScenarioCompleteness,
|
|
4
|
+
export { classifyBrowserScenarioCompleteness, browserScenarioEventSchema, browserScenarioStepSchema, browserStepArtifactsSchema, } from "./browserScenarioCaptureValues.js";
|
|
4
5
|
/** Step-indexed browser scenario observation. */
|
|
5
6
|
export const browserScenarioCaptureSchema = z
|
|
6
7
|
.strictObject({
|
|
@@ -15,6 +16,7 @@ export const browserScenarioCaptureSchema = z
|
|
|
15
16
|
start_origin: z.string().min(1),
|
|
16
17
|
action_count: z.number().int().min(1),
|
|
17
18
|
secret_references: z.array(z.string().min(1)),
|
|
19
|
+
network_content: browserNetworkContentSelectionValuesSchema.optional(),
|
|
18
20
|
}),
|
|
19
21
|
duration_ms: z.number().int().min(0),
|
|
20
22
|
steps: z.array(browserScenarioStepSchema).min(1),
|
|
@@ -27,6 +29,26 @@ export const browserScenarioCaptureSchema = z
|
|
|
27
29
|
limitations: z.array(z.string().min(1)),
|
|
28
30
|
})
|
|
29
31
|
.superRefine((capture, context) => {
|
|
32
|
+
const bySequence = new Map(capture.events.items.map((event) => [event.sequence, event]));
|
|
33
|
+
if (bySequence.size !== capture.events.items.length)
|
|
34
|
+
context.addIssue({
|
|
35
|
+
code: "custom",
|
|
36
|
+
path: ["events", "items"],
|
|
37
|
+
message: "Event sequence numbers must be unique",
|
|
38
|
+
});
|
|
39
|
+
for (const [index, event] of capture.events.items.entries()) {
|
|
40
|
+
if (event.kind !== "network-content")
|
|
41
|
+
continue;
|
|
42
|
+
const source = bySequence.get(event.source_event_sequence);
|
|
43
|
+
if (source?.kind !== event.phase ||
|
|
44
|
+
source.transaction_id !== event.transaction_id ||
|
|
45
|
+
source.sequence >= event.sequence)
|
|
46
|
+
context.addIssue({
|
|
47
|
+
code: "custom",
|
|
48
|
+
path: ["events", "items", index, "source_event_sequence"],
|
|
49
|
+
message: "Network content must reference an earlier matching transaction phase",
|
|
50
|
+
});
|
|
51
|
+
}
|
|
30
52
|
if (capture.events.retained !== capture.events.items.length)
|
|
31
53
|
context.addIssue({
|
|
32
54
|
code: "custom",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { emptyArraySchema } from "./emptyArraySchema.js";
|
|
4
|
+
import { browserNetworkBodySchema, browserNetworkHeadersSchema, } from "./browserNetworkEvidence.js";
|
|
4
5
|
import { sanitizedBrowserUrlSchema } from "./browserObservation.js";
|
|
5
6
|
import { webScreenshotArtifactSchema } from "./webScreenshot.js";
|
|
6
7
|
import { digestSchema } from "./../domain/digests.js";
|
|
@@ -102,6 +103,8 @@ const eventBase = {
|
|
|
102
103
|
const eventUrl = sanitizedBrowserUrlSchema.nullable();
|
|
103
104
|
const networkEventShape = {
|
|
104
105
|
...eventBase,
|
|
106
|
+
transaction_id: z.string().min(1).optional(),
|
|
107
|
+
redirected_from_transaction_id: z.string().min(1).nullable().optional(),
|
|
105
108
|
method: z.string().min(1),
|
|
106
109
|
url: sanitizedBrowserUrlSchema,
|
|
107
110
|
resource_type: z.string().min(1),
|
|
@@ -146,6 +149,28 @@ export const browserScenarioEventSchema = z.union([
|
|
|
146
149
|
status: z.null(),
|
|
147
150
|
failure: z.string().min(1),
|
|
148
151
|
}),
|
|
152
|
+
z.strictObject({
|
|
153
|
+
...networkEventShape,
|
|
154
|
+
kind: z.literal("request-finished"),
|
|
155
|
+
status: z.null(),
|
|
156
|
+
failure: z.null(),
|
|
157
|
+
}),
|
|
158
|
+
z.strictObject({
|
|
159
|
+
...networkEventShape,
|
|
160
|
+
kind: z.literal("request-unfinished"),
|
|
161
|
+
status: z.null(),
|
|
162
|
+
failure: z.null(),
|
|
163
|
+
reason: z.enum(["capture-ended", "cancelled"]),
|
|
164
|
+
}),
|
|
165
|
+
z.strictObject({
|
|
166
|
+
...eventBase,
|
|
167
|
+
kind: z.literal("network-content"),
|
|
168
|
+
transaction_id: z.string().min(1),
|
|
169
|
+
source_event_sequence: z.number().int().min(1),
|
|
170
|
+
phase: z.enum(["request", "response"]),
|
|
171
|
+
headers: browserNetworkHeadersSchema,
|
|
172
|
+
body: browserNetworkBodySchema,
|
|
173
|
+
}),
|
|
149
174
|
z.strictObject({
|
|
150
175
|
...eventBase,
|
|
151
176
|
kind: z.enum(["websocket-opened", "websocket-closed"]),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {} from "./browserScenarioCapture.js";
|
|
2
|
-
import { actionState, artifactEvidenceState, captured, eventEvidenceState, eventsFor, screenshotProjection, } from "./browserScenarioDiffEvidence.js";
|
|
2
|
+
import { actionState, artifactEvidenceState, captured, eventEvidenceState, eventsFor, networkContentCoverageReason, screenshotProjection, } from "./browserScenarioDiffEvidence.js";
|
|
3
3
|
import { browserScenarioDiffSchema, } from "./browserScenarioDiffValues.js";
|
|
4
|
-
import { commitBrowserScenarioNormalization,
|
|
4
|
+
import { commitBrowserScenarioNormalization, digestNormalizedScenarioValue, } from "./browserScenarioNormalization.js";
|
|
5
5
|
export { browserScenarioDiffSchema, compareBrowserScenariosInputSchema, } from "./browserScenarioDiffValues.js";
|
|
6
6
|
/** Compare scenario steps by stable step ID and apply only committed literal rules. */
|
|
7
7
|
export const compareBrowserScenarios = (input) => {
|
|
@@ -213,6 +213,7 @@ const compareStepArtifacts = (input) => {
|
|
|
213
213
|
after: captured(eventsFor(input.afterCapture, input.afterStep.step_index)),
|
|
214
214
|
beforeState: eventEvidenceState(input.beforeCapture, input.beforeStep),
|
|
215
215
|
afterState: eventEvidenceState(input.afterCapture, input.afterStep),
|
|
216
|
+
incomparableReason: networkContentCoverageReason(input.beforeCapture, input.afterCapture),
|
|
216
217
|
}),
|
|
217
218
|
];
|
|
218
219
|
};
|
|
@@ -231,7 +232,8 @@ const compareCapturedValues = (input) => {
|
|
|
231
232
|
if (beforeState !== "captured" ||
|
|
232
233
|
afterState !== "captured" ||
|
|
233
234
|
before.state !== "captured" ||
|
|
234
|
-
after.state !== "captured"
|
|
235
|
+
after.state !== "captured" ||
|
|
236
|
+
input.incomparableReason !== undefined)
|
|
235
237
|
return {
|
|
236
238
|
artifact,
|
|
237
239
|
status: "unknown",
|
|
@@ -242,7 +244,8 @@ const compareCapturedValues = (input) => {
|
|
|
242
244
|
after_state: afterState,
|
|
243
245
|
before_sha256: beforeSha256,
|
|
244
246
|
after_sha256: afterSha256,
|
|
245
|
-
reason:
|
|
247
|
+
reason: input.incomparableReason ??
|
|
248
|
+
`Artifact coverage is not comparable (${beforeState} before, ${afterState} after).`,
|
|
246
249
|
},
|
|
247
250
|
};
|
|
248
251
|
if (beforeSha256 === null || afterSha256 === null)
|
|
@@ -37,7 +37,41 @@ export const actionState = (step) => ({
|
|
|
37
37
|
error: step.error,
|
|
38
38
|
});
|
|
39
39
|
/** Select events attributed to one scenario step without sequence metadata. */
|
|
40
|
-
export const eventsFor = (capture, stepIndex) =>
|
|
40
|
+
export const eventsFor = (capture, stepIndex) => {
|
|
41
|
+
const sourceSteps = new Map(capture.events.items.map(({ sequence, step_index }) => [
|
|
42
|
+
sequence,
|
|
43
|
+
step_index,
|
|
44
|
+
]));
|
|
45
|
+
return capture.events.items.flatMap(({ sequence: _sequence, step_index: eventStepIndex, ...event }) => {
|
|
46
|
+
if (event.kind === "network-content") {
|
|
47
|
+
const { source_event_sequence: sourceSequence, ...content } = event;
|
|
48
|
+
return sourceSteps.get(sourceSequence) === stepIndex ? [content] : [];
|
|
49
|
+
}
|
|
50
|
+
return eventStepIndex === stepIndex ? [event] : [];
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
/** Different content selection is missing comparability, not an observed website change. */
|
|
54
|
+
export const networkContentCoverageReason = (before, after) => {
|
|
55
|
+
const left = before.scenario.network_content;
|
|
56
|
+
const right = after.scenario.network_content;
|
|
57
|
+
if (left === undefined || right === undefined) {
|
|
58
|
+
const events = [...before.events.items, ...after.events.items];
|
|
59
|
+
if (events.some((event) => event.kind === "network-content") ||
|
|
60
|
+
((left === undefined) !== (right === undefined) &&
|
|
61
|
+
events.some((event) => event.kind === "request" ||
|
|
62
|
+
event.kind === "response" ||
|
|
63
|
+
event.kind === "request-failed" ||
|
|
64
|
+
event.kind === "request-finished" ||
|
|
65
|
+
event.kind === "request-unfinished")))
|
|
66
|
+
return "Network content selection is unknown in a legacy capture; capture both sides with matching content selection.";
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
return left.request_body !== right.request_body ||
|
|
70
|
+
left.response_body !== right.response_body ||
|
|
71
|
+
left.header_values !== right.header_values
|
|
72
|
+
? "Network content selections differ; capture both sides with matching content selection before comparing network evidence."
|
|
73
|
+
: undefined;
|
|
74
|
+
};
|
|
41
75
|
/** Wrap one value as captured comparison evidence. */
|
|
42
76
|
export const captured = (value) => ({
|
|
43
77
|
state: "captured",
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import canonicalize from "canonicalize";
|
|
1
|
+
import { canonicalDigest } from "./comparisonSemantics.js";
|
|
3
2
|
const BUILT_IN_RULES = [
|
|
4
3
|
"ignore_step_elapsed_ms",
|
|
5
4
|
"ignore_event_sequence",
|
|
@@ -16,17 +15,13 @@ export const commitBrowserScenarioNormalization = (input) => {
|
|
|
16
15
|
}))
|
|
17
16
|
.sort((left, right) => left.rule_id < right.rule_id ? -1 : left.rule_id > right.rule_id ? 1 : 0);
|
|
18
17
|
const commitment = { built_in_rules: [...BUILT_IN_RULES], rules };
|
|
19
|
-
return {
|
|
18
|
+
return {
|
|
19
|
+
...commitment,
|
|
20
|
+
sha256: canonicalDigest(commitment, "Browser scenario"),
|
|
21
|
+
};
|
|
20
22
|
};
|
|
21
23
|
/** Digest one artifact after applying committed exact-literal rules. */
|
|
22
|
-
export const digestNormalizedScenarioValue = (value, artifact, rules) =>
|
|
23
|
-
/** Compute a canonical SHA-256 commitment for JSON-compatible domain data. */
|
|
24
|
-
export const digestCanonicalJson = (value) => {
|
|
25
|
-
const encoded = canonicalize(value);
|
|
26
|
-
if (encoded === undefined)
|
|
27
|
-
throw new TypeError("Expected canonical JSON");
|
|
28
|
-
return createHash("sha256").update(encoded).digest("hex");
|
|
29
|
-
};
|
|
24
|
+
export const digestNormalizedScenarioValue = (value, artifact, rules) => canonicalDigest(normalize(value, artifact, rules), "Browser scenario");
|
|
30
25
|
const normalize = (value, artifact, rules) => {
|
|
31
26
|
if (artifact === "screenshot")
|
|
32
27
|
return value;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { browserNetworkContentSelectionSchema } from "./browserNetworkEvidence.js";
|
|
2
3
|
import { browserEndpointSchema, browserOriginSchema, } from "./browserObservation.js";
|
|
3
4
|
export const scenarioIdentifierSchema = z
|
|
4
5
|
.string()
|
|
@@ -12,7 +13,9 @@ const browserScenarioBaseUrlSchema = z
|
|
|
12
13
|
try {
|
|
13
14
|
url = new URL(value);
|
|
14
15
|
}
|
|
15
|
-
catch {
|
|
16
|
+
catch (cause) {
|
|
17
|
+
// Invalid input is reported through the zod issue.
|
|
18
|
+
void cause;
|
|
16
19
|
context.addIssue({ code: "custom", message: "Invalid browser URL" });
|
|
17
20
|
return z.NEVER;
|
|
18
21
|
}
|
|
@@ -247,6 +250,16 @@ export const browserScenarioCaptureSchema = z
|
|
|
247
250
|
"downloads",
|
|
248
251
|
]))
|
|
249
252
|
.default([]),
|
|
253
|
+
network: browserNetworkContentSelectionSchema,
|
|
254
|
+
})
|
|
255
|
+
.default({
|
|
256
|
+
after_each_step: [],
|
|
257
|
+
at_end: ["url"],
|
|
258
|
+
events: [],
|
|
259
|
+
network: {
|
|
260
|
+
request_body: false,
|
|
261
|
+
response_body: false,
|
|
262
|
+
header_values: false,
|
|
263
|
+
},
|
|
250
264
|
})
|
|
251
|
-
.default({ after_each_step: [], at_end: ["url"], events: [] })
|
|
252
265
|
.describe("Optional retained artifacts and event families. Defaults to only a final sanitized URL; request screenshots, DOM, accessibility, history, storage, and event capture explicitly.");
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { browserAllowedOriginsSchema, browserEndpointSchema, } from "./browserObservation.js";
|
|
3
3
|
import { browserCompletenessSchema } from "./browserCompleteness.js";
|
|
4
|
+
import { browserVersionSchema } from "./browserObservationSchemas.js";
|
|
4
5
|
/** Input for a navigation-aware browser observation window. */
|
|
5
6
|
export const observeWebSessionInputSchema = z.strictObject({
|
|
6
7
|
cdp_endpoint: browserEndpointSchema,
|
|
@@ -32,13 +33,7 @@ const timelineEventSchema = z.object({
|
|
|
32
33
|
});
|
|
33
34
|
/** Navigation-aware session result for external user actions. */
|
|
34
35
|
export const webObservationSessionSchema = z.object({
|
|
35
|
-
browser:
|
|
36
|
-
product: z.string(),
|
|
37
|
-
protocol_version: z.string(),
|
|
38
|
-
revision: z.string(),
|
|
39
|
-
user_agent: z.string(),
|
|
40
|
-
js_version: z.string(),
|
|
41
|
-
}),
|
|
36
|
+
browser: browserVersionSchema,
|
|
42
37
|
target: z.object({
|
|
43
38
|
target_id: z.string(),
|
|
44
39
|
initial_url: z.string(),
|
|
@@ -3,6 +3,7 @@ import { z } from "zod";
|
|
|
3
3
|
import { parseEvidenceBundle, serializeEvidenceBundle, } from "./evidenceBundle.js";
|
|
4
4
|
import { digestSchema } from "./../domain/digests.js";
|
|
5
5
|
import { prefixedDigestSchema } from "./../domain/digests.js";
|
|
6
|
+
import { comparisonStatusSchema } from "./comparisonStatus.js";
|
|
6
7
|
const evidenceIdSchema = prefixedDigestSchema("ev");
|
|
7
8
|
const classificationSchema = z.enum([
|
|
8
9
|
"added",
|
|
@@ -40,7 +41,7 @@ const bundleChangeSchema = z.object({
|
|
|
40
41
|
});
|
|
41
42
|
/** Deterministic classified delta between two canonical Evidence bundles. */
|
|
42
43
|
export const bundleComparisonResultSchema = z.object({
|
|
43
|
-
status:
|
|
44
|
+
status: comparisonStatusSchema,
|
|
44
45
|
left_bundle_sha256: digestSchema,
|
|
45
46
|
right_bundle_sha256: digestSchema,
|
|
46
47
|
summary: z.object({
|