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
|
@@ -133,6 +133,22 @@ export const objcDispatchImplementationSchema = z.strictObject({
|
|
|
133
133
|
selector: z.string().min(1),
|
|
134
134
|
method_type: z.enum(["instance", "class"]),
|
|
135
135
|
implementation_address: z.string().nullable(),
|
|
136
|
+
/** Category that adds this method, when it is not defined by the class itself. */
|
|
137
|
+
category: z.string().nullable().optional(),
|
|
138
|
+
location: nativeMetadataLocationSchema,
|
|
139
|
+
decode: nativeMetadataDecodeSchema,
|
|
140
|
+
evidence: z.array(nativeMetadataEvidenceSchema).min(1),
|
|
141
|
+
});
|
|
142
|
+
/** Objective-C category: methods, protocols and properties added to a class. */
|
|
143
|
+
export const objcCategorySchema = z.strictObject({
|
|
144
|
+
name: z.string().min(1),
|
|
145
|
+
/** Extended class; external classes come from the category's bind symbol. */
|
|
146
|
+
class_name: z.string().min(1).nullable(),
|
|
147
|
+
class_source: z.enum(["local", "external", "unresolved"]),
|
|
148
|
+
instance_methods: z.array(z.string()),
|
|
149
|
+
class_methods: z.array(z.string()),
|
|
150
|
+
protocols: z.array(z.string()),
|
|
151
|
+
properties: z.array(objcPropertySchema),
|
|
136
152
|
location: nativeMetadataLocationSchema,
|
|
137
153
|
decode: nativeMetadataDecodeSchema,
|
|
138
154
|
evidence: z.array(nativeMetadataEvidenceSchema).min(1),
|
|
@@ -240,6 +256,7 @@ export const dbSaveResultSchema = z.strictObject({
|
|
|
240
256
|
export const objcSwiftMetadataSchema = z.strictObject({
|
|
241
257
|
objc_classes: z.array(objcClassSchema).default([]),
|
|
242
258
|
objc_protocols: z.array(objcProtocolSchema).default([]),
|
|
259
|
+
objc_categories: z.array(objcCategorySchema).default([]),
|
|
243
260
|
swift_decls: z.array(swiftDeclSchema).default([]),
|
|
244
261
|
objc_ivars: z.array(objcIvarSchema).default([]),
|
|
245
262
|
objc_protocol_records: z.array(objcProtocolRecordSchema).default([]),
|
|
@@ -165,14 +165,15 @@ const processCaptureShapeSchema = z.strictObject({
|
|
|
165
165
|
}),
|
|
166
166
|
});
|
|
167
167
|
/** Exact serialized shape plus all process-capture semantic invariants. */
|
|
168
|
-
export const processCaptureSchema = processCaptureShapeSchema
|
|
168
|
+
export const processCaptureSchema = processCaptureShapeSchema
|
|
169
|
+
.superRefine((capture, context) => {
|
|
169
170
|
for (const issue of collectProcessCaptureIssues(capture))
|
|
170
171
|
context.addIssue({
|
|
171
172
|
code: "custom",
|
|
172
173
|
path: issue.path.split("."),
|
|
173
174
|
message: issue.message,
|
|
174
175
|
});
|
|
175
|
-
})
|
|
176
|
+
})
|
|
177
|
+
.describe("The capture must preserve its canonical scenario, comparison, and normalization SHA-256 commitments; ordered capture timestamps and contiguous sequence numbers; before and final filesystem snapshots with truncation propagated; and exit-code consistency with deadline termination. When parsing older input without an event journal, REA supplies an empty journal; empty journals are valid. A non-empty journal must reference every captured observation exactly once with unique in-range references. These cross-field invariants are checked by REA after capture.");
|
|
176
178
|
export { parseProcessCapture } from "./processCaptureParsing.js";
|
|
177
179
|
export { compareProcessCaptures, comparisonStatusSchema, deriveProcessComparisonStatus, PROCESS_COMPARISON_DIMENSIONS, processCaptureComparisonSchema, } from "./processComparison.js";
|
|
178
|
-
export { compareProcessTraces, processTraceComparisonResultSchema, processTraceSourceSchema, processTraceSpecificationSchema, } from "./processTraceComparison.js";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Canonical provider identity for controlled process capture Evidence. */
|
|
2
|
+
export const PROCESS_PROVIDER = {
|
|
3
|
+
id: "rea-process",
|
|
4
|
+
name: "REA process capture",
|
|
5
|
+
version: "3",
|
|
6
|
+
};
|
|
7
|
+
/** Admit current and previously emitted names for the same v3 process provider. */
|
|
8
|
+
export const isProcessEvidenceProvider = (provider) => provider.id === PROCESS_PROVIDER.id &&
|
|
9
|
+
provider.version === PROCESS_PROVIDER.version &&
|
|
10
|
+
(provider.name === PROCESS_PROVIDER.name ||
|
|
11
|
+
provider.name === "REA deterministic process harness");
|
|
@@ -3,10 +3,18 @@ import canonicalize from "canonicalize";
|
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
const positiveBudget = z.number().int().safe().positive();
|
|
5
5
|
const timedEventBase = { at_ms: z.number().int().safe().nonnegative() };
|
|
6
|
+
const reservedRunIdEnvironmentName = "REA_PROCESS_RUN_ID";
|
|
6
7
|
const environmentName = z
|
|
7
8
|
.string()
|
|
8
|
-
.
|
|
9
|
-
|
|
9
|
+
.min(1, "Environment names must not be empty")
|
|
10
|
+
.regex(/^(?!REA_PROCESS_RUN_ID(?![\s\S]))[^=\0]+$/u, {
|
|
11
|
+
error: (issue) => issue.input === reservedRunIdEnvironmentName
|
|
12
|
+
? `${reservedRunIdEnvironmentName} is reserved by the process adapter`
|
|
13
|
+
: "Environment names cannot contain '=' or NUL",
|
|
14
|
+
});
|
|
15
|
+
const childProcessString = z
|
|
16
|
+
.string()
|
|
17
|
+
.regex(/^[^\0]*$/u, "Values passed to operating-system APIs cannot contain NUL");
|
|
10
18
|
export const normalizationSchema = z.object({
|
|
11
19
|
paths: z.boolean(),
|
|
12
20
|
pids: z.boolean(),
|
|
@@ -61,11 +69,13 @@ export const processComparisonContract = (scenario) => ({
|
|
|
61
69
|
*/
|
|
62
70
|
export const processScenarioSchema = z
|
|
63
71
|
.object({
|
|
64
|
-
executable:
|
|
65
|
-
arguments: z.array(
|
|
66
|
-
working_directory:
|
|
67
|
-
environment: z.record(environmentName,
|
|
68
|
-
filesystem_observation_paths: z
|
|
72
|
+
executable: childProcessString.min(1),
|
|
73
|
+
arguments: z.array(childProcessString).default([]),
|
|
74
|
+
working_directory: childProcessString.default("."),
|
|
75
|
+
environment: z.record(environmentName, childProcessString).default({}),
|
|
76
|
+
filesystem_observation_paths: z
|
|
77
|
+
.array(childProcessString.min(1))
|
|
78
|
+
.default([]),
|
|
69
79
|
terminal: z
|
|
70
80
|
.object({
|
|
71
81
|
columns: z.number().int().min(1).max(65_535).default(80),
|
|
@@ -147,16 +157,6 @@ export const processScenarioSchema = z
|
|
|
147
157
|
});
|
|
148
158
|
}
|
|
149
159
|
}
|
|
150
|
-
const explicit = new Set(Object.keys(scenario.environment));
|
|
151
|
-
for (const name of explicit) {
|
|
152
|
-
if (reservedEnvironment.has(name)) {
|
|
153
|
-
context.addIssue({
|
|
154
|
-
code: "custom",
|
|
155
|
-
message: `${name} is reserved by the process adapter`,
|
|
156
|
-
path: ["environment", name],
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
160
|
for (const event of scenario.events) {
|
|
161
161
|
if (event.at_ms > scenario.timeout_ms) {
|
|
162
162
|
context.addIssue({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { evaluateProcessTraceSide, processTraceComparisonResultSchema, } from "./processTraceEvaluation.js";
|
|
2
2
|
import { processTraceSpecificationSchema, } from "./processTraceSpecification.js";
|
|
3
3
|
export { processTraceComparisonResultSchema, } from "./processTraceEvaluation.js";
|
|
4
|
-
export {
|
|
4
|
+
export { processTraceSpecificationSchema, } from "./processTraceSpecification.js";
|
|
5
5
|
/** Compare two captures against an explicit finite trace language. */
|
|
6
6
|
export const compareProcessTraces = (left, right, specificationInput) => {
|
|
7
7
|
const specification = processTraceSpecificationSchema.parse(specificationInput);
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { parse } from "plist";
|
|
2
|
+
/** The dictionary key REA results cannot carry: validation strips it. */
|
|
3
|
+
const PROTOTYPE_KEY = "__proto__";
|
|
4
|
+
/** Limitation for results whose source plist held `__proto__` entries. */
|
|
5
|
+
export const omittedPrototypeKeysLimitation = (count) => `${String(count)} dictionary ${count === 1 ? "entry" : "entries"} keyed __proto__ ${count === 1 ? "was" : "were"} omitted because REA results cannot represent that key.`;
|
|
6
|
+
const withoutKey = (value, key) => {
|
|
7
|
+
let omitted = 0;
|
|
8
|
+
const strip = (item) => {
|
|
9
|
+
if (Array.isArray(item))
|
|
10
|
+
return item.map(strip);
|
|
11
|
+
if (item === null ||
|
|
12
|
+
typeof item !== "object" ||
|
|
13
|
+
item instanceof Date ||
|
|
14
|
+
item instanceof Uint8Array)
|
|
15
|
+
return item;
|
|
16
|
+
return Object.fromEntries(Object.entries(item).flatMap(([name, entry]) => {
|
|
17
|
+
if (name !== key)
|
|
18
|
+
return [[name, strip(entry)]];
|
|
19
|
+
omitted += 1;
|
|
20
|
+
return [];
|
|
21
|
+
}));
|
|
22
|
+
};
|
|
23
|
+
const stripped = strip(value);
|
|
24
|
+
return { value: stripped, omittedPrototypeKeys: omitted };
|
|
25
|
+
};
|
|
26
|
+
/** Remove own `__proto__` entries, such as JSON.parse creates, and count them. */
|
|
27
|
+
export const omitPrototypeKeys = (value) => withoutKey(value, PROTOTYPE_KEY);
|
|
28
|
+
// Comments and CDATA text are consumed whole so only element keys match.
|
|
29
|
+
const KEY_TOKEN = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<key>([^<]*)<\/key>|<key><!\[CDATA\[([\s\S]*?)\]\]><\/key>/gu;
|
|
30
|
+
const XML_ENTITIES = {
|
|
31
|
+
amp: "&",
|
|
32
|
+
apos: "'",
|
|
33
|
+
gt: ">",
|
|
34
|
+
lt: "<",
|
|
35
|
+
quot: '"',
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Expand XML character and predefined entity references. A reference beyond
|
|
39
|
+
* Unicode stays as written: comments and CDATA may hold such text literally,
|
|
40
|
+
* and the XML decoder rejects it anywhere else.
|
|
41
|
+
*/
|
|
42
|
+
const decodeXmlText = (text) => text.replace(/&(?:#x([\da-f]+)|#(\d+)|([a-z]+));/giu, (entity, hex, decimal, name) => {
|
|
43
|
+
const codePoint = hex !== undefined
|
|
44
|
+
? parseInt(hex, 16)
|
|
45
|
+
: decimal !== undefined
|
|
46
|
+
? parseInt(decimal, 10)
|
|
47
|
+
: undefined;
|
|
48
|
+
if (codePoint !== undefined)
|
|
49
|
+
return codePoint <= 0x10ffff ? String.fromCodePoint(codePoint) : entity;
|
|
50
|
+
return (name === undefined ? undefined : XML_ENTITIES[name]) ?? entity;
|
|
51
|
+
});
|
|
52
|
+
/**
|
|
53
|
+
* Decode an XML plist whose dictionaries may use the legal key `__proto__`,
|
|
54
|
+
* which the `plist` decoder rejects outright. Those entries are omitted and
|
|
55
|
+
* counted so callers can report them instead of failing the whole document.
|
|
56
|
+
*/
|
|
57
|
+
export const parseXmlPropertyList = (text) => {
|
|
58
|
+
// The decoded text holds every key the decoder can produce, including
|
|
59
|
+
// entity-encoded spellings of the placeholder, so no source key aliases it.
|
|
60
|
+
// Decoding comment or CDATA text too can only lengthen the placeholder.
|
|
61
|
+
const decoded = decodeXmlText(text);
|
|
62
|
+
let placeholder = "__rea_prototype_key__";
|
|
63
|
+
while (decoded.includes(placeholder))
|
|
64
|
+
placeholder = `_${placeholder}`;
|
|
65
|
+
const substituted = text.replace(KEY_TOKEN, (token, plain, cdata) => (plain === undefined ? cdata : decodeXmlText(plain)) === PROTOTYPE_KEY
|
|
66
|
+
? `<key>${placeholder}</key>`
|
|
67
|
+
: token);
|
|
68
|
+
return withoutKey(parse(substituted), placeholder);
|
|
69
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { AnalysisError } from "./analysisErrorBase.js";
|
|
2
|
+
/** A provider adapter failed outside its more precise typed variants. */
|
|
3
|
+
export class ProviderAdapterError extends AnalysisError {
|
|
4
|
+
providerId;
|
|
5
|
+
operation;
|
|
6
|
+
_tag = "ProviderAdapterError";
|
|
7
|
+
diagnostics;
|
|
8
|
+
constructor(providerId, operation, options = {}) {
|
|
9
|
+
super(`Provider ${providerId} adapter failed during ${operation}`, options);
|
|
10
|
+
this.providerId = providerId;
|
|
11
|
+
this.operation = operation;
|
|
12
|
+
this.diagnostics =
|
|
13
|
+
options.diagnostics === undefined
|
|
14
|
+
? undefined
|
|
15
|
+
: structuredClone(options.diagnostics);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { ProviderAdapterError } from "./
|
|
1
|
+
import { ProviderAdapterError } from "./providerAdapterError.js";
|
|
2
2
|
/** Provider resources could not be proven closed after bounded cleanup. */
|
|
3
3
|
export class ProviderCleanupError extends ProviderAdapterError {
|
|
4
4
|
cleanupIncomplete = true;
|
|
5
5
|
cleanupResources;
|
|
6
6
|
userMessage = "Provider cleanup could not be fully confirmed. Review the reported local resources before opening another target.";
|
|
7
|
-
constructor(providerId, resources, diagnostics,
|
|
8
|
-
|
|
7
|
+
constructor(providerId, resources, diagnostics,
|
|
8
|
+
/** Identify the operation owning these resources; binary callers retain their default. */
|
|
9
|
+
options) {
|
|
10
|
+
const { operation = "close_binary", ...errorOptions } = options ?? {};
|
|
11
|
+
super(providerId, operation, { ...errorOptions, diagnostics });
|
|
9
12
|
this.cleanupResources = [...resources];
|
|
10
13
|
}
|
|
11
14
|
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { AnalysisError } from "./analysisErrorBase.js";
|
|
2
|
+
/** No configured provider can satisfy a requested operation or target binding. */
|
|
3
|
+
export class ProviderSelectionError extends AnalysisError {
|
|
4
|
+
_tag = "ProviderSelectionError";
|
|
5
|
+
operation;
|
|
6
|
+
reason;
|
|
7
|
+
requestedProviderId;
|
|
8
|
+
candidateIds;
|
|
9
|
+
rejections;
|
|
10
|
+
userMessage;
|
|
11
|
+
constructor(options) {
|
|
12
|
+
const operation = options.operation ?? "open_binary";
|
|
13
|
+
super(providerSelectionDiagnostic(options));
|
|
14
|
+
this.operation = operation;
|
|
15
|
+
this.reason = options.reason;
|
|
16
|
+
this.requestedProviderId = options.requestedProviderId;
|
|
17
|
+
this.candidateIds = [...options.candidateIds];
|
|
18
|
+
this.rejections = [...(options.rejections ?? [])].map((rejection) => ({
|
|
19
|
+
...rejection,
|
|
20
|
+
diagnostics: structuredClone(rejection.diagnostics),
|
|
21
|
+
}));
|
|
22
|
+
this.userMessage = providerSelectionUserMessage(options);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const providerSelectionDiagnostic = (options) => {
|
|
26
|
+
const candidates = options.candidateIds.length === 0
|
|
27
|
+
? "none"
|
|
28
|
+
: options.candidateIds.join(", ");
|
|
29
|
+
return `Analysis provider selection failed (${options.reason}) for ${options.requestedProviderId}; candidates: ${candidates}`;
|
|
30
|
+
};
|
|
31
|
+
const providerSelectionUserMessage = (options) => {
|
|
32
|
+
switch (options.reason) {
|
|
33
|
+
case "ambiguous":
|
|
34
|
+
return "Multiple analysis providers support this target. Choose one with provider_id, --provider, or REA_ANALYSIS_PROVIDER.";
|
|
35
|
+
case "unknown_provider":
|
|
36
|
+
return `The requested analysis provider is unknown. Choose one of: ${options.candidateIds.join(", ") || "no configured providers"}.`;
|
|
37
|
+
case "provider_unavailable":
|
|
38
|
+
return "The selected analysis provider is unavailable. Review the reported local diagnostics or run `rea doctor`, then retry.";
|
|
39
|
+
case "target_unsupported":
|
|
40
|
+
return "The selected analysis provider does not support this target. Choose another provider or open a supported extracted binary.";
|
|
41
|
+
case "invalid_options":
|
|
42
|
+
return "The analysis provider selection or open options are invalid. Correct them and try again.";
|
|
43
|
+
}
|
|
44
|
+
};
|
|
@@ -87,13 +87,14 @@ const evaluateOwner = (context, surfaceId) => {
|
|
|
87
87
|
};
|
|
88
88
|
export const evaluateReconstructionClaims = (context) => {
|
|
89
89
|
const claims = indexUnique(context.coverage.claims, "claim_id");
|
|
90
|
+
const indexes = createVerifierIndexes(context.coverage);
|
|
90
91
|
for (const claimId of context.boundary.required_claim_ids) {
|
|
91
92
|
const claim = claims.get(claimId);
|
|
92
93
|
if (claim === undefined) {
|
|
93
94
|
addReason(context, "claim-missing", claimId, "Required finite claim is absent.");
|
|
94
95
|
continue;
|
|
95
96
|
}
|
|
96
|
-
const contracts =
|
|
97
|
+
const contracts = indexes.contractsByClaim.get(claimId) ?? [];
|
|
97
98
|
if (contracts.length === 0) {
|
|
98
99
|
addReason(context, "verifier-missing", claimId, "No verifier contract covers this claim.");
|
|
99
100
|
continue;
|
|
@@ -104,20 +105,49 @@ export const evaluateReconstructionClaims = (context) => {
|
|
|
104
105
|
}
|
|
105
106
|
const contract = contracts[0];
|
|
106
107
|
if (contract !== undefined)
|
|
107
|
-
evaluateVerifierResult(context, claim, contract);
|
|
108
|
+
evaluateVerifierResult(context, claim, contract, indexes);
|
|
108
109
|
}
|
|
109
110
|
};
|
|
110
|
-
const
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
111
|
+
const createVerifierIndexes = (coverage) => {
|
|
112
|
+
const contractsByClaim = new Map();
|
|
113
|
+
for (const contract of coverage.verifier_contracts)
|
|
114
|
+
for (const claimId of new Set(contract.claim_ids)) {
|
|
115
|
+
const contracts = contractsByClaim.get(claimId) ?? [];
|
|
116
|
+
contracts.push(contract);
|
|
117
|
+
contractsByClaim.set(claimId, contracts);
|
|
118
|
+
}
|
|
119
|
+
const latestResultsByVerifier = new Map();
|
|
120
|
+
for (const result of coverage.verifier_results) {
|
|
121
|
+
const latest = latestResultsByVerifier.get(result.verifier_id);
|
|
122
|
+
// Stable descending sort used to choose the first input record on ties.
|
|
123
|
+
if (latest === undefined ||
|
|
124
|
+
Date.parse(result.observed_at) > Date.parse(latest.observed_at))
|
|
125
|
+
latestResultsByVerifier.set(result.verifier_id, result);
|
|
126
|
+
}
|
|
127
|
+
const ownersBySurface = new Map();
|
|
128
|
+
for (const owner of coverage.owners) {
|
|
129
|
+
const owners = ownersBySurface.get(owner.surface_id) ?? [];
|
|
130
|
+
owners.push(owner);
|
|
131
|
+
ownersBySurface.set(owner.surface_id, owners);
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
contractsByClaim,
|
|
135
|
+
latestResultsByVerifier,
|
|
136
|
+
artifactDigests: new Set(coverage.artifacts.map(({ artifact_sha256: value }) => value)),
|
|
137
|
+
ownerDigests: new Set(coverage.owners.flatMap(({ ownership }) => ownership.disposition === "implemented" ? [ownership.owner_sha256] : [])),
|
|
138
|
+
surfaces: indexUnique(coverage.surfaces, "surface_id"),
|
|
139
|
+
artifacts: indexUnique(coverage.artifacts, "artifact_id"),
|
|
140
|
+
ownersBySurface,
|
|
141
|
+
};
|
|
142
|
+
};
|
|
143
|
+
const evaluateVerifierResult = (context, claim, contract, indexes) => {
|
|
144
|
+
const result = indexes.latestResultsByVerifier.get(contract.verifier_id);
|
|
115
145
|
if (result === undefined) {
|
|
116
146
|
addReason(context, "verifier-result-missing", claim.claim_id, "Verifier has no recorded result.");
|
|
117
147
|
return;
|
|
118
148
|
}
|
|
119
149
|
addEvidence(context, result.evidence_ids);
|
|
120
|
-
if (!verifierResultIsCompatible(
|
|
150
|
+
if (!verifierResultIsCompatible(claim, contract, result, indexes)) {
|
|
121
151
|
addReason(context, "verifier-result-incompatible", claim.claim_id, "Latest verifier result does not match current artifacts, owners, dimensions, authority, normalization, repeats, or contract.");
|
|
122
152
|
return;
|
|
123
153
|
}
|
|
@@ -132,23 +162,15 @@ const evaluateVerifierResult = (context, claim, contract) => {
|
|
|
132
162
|
else if (result.status !== "pass")
|
|
133
163
|
addReason(context, "verifier-unknown", claim.claim_id, `Latest compatible verifier result is ${result.status}.`);
|
|
134
164
|
};
|
|
135
|
-
const verifierResultIsCompatible = (
|
|
136
|
-
const artifactDigests = new Set(context.coverage.artifacts.map(({ artifact_sha256: value }) => value));
|
|
137
|
-
const ownerDigests = new Set(context.coverage.owners.flatMap(({ ownership }) => ownership.disposition === "implemented" ? [ownership.owner_sha256] : []));
|
|
138
|
-
const surfaces = new Map(context.coverage.surfaces.map((surface) => [surface.surface_id, surface]));
|
|
139
|
-
const artifacts = new Map(context.coverage.artifacts.map((artifact) => [
|
|
140
|
-
artifact.artifact_id,
|
|
141
|
-
artifact,
|
|
142
|
-
]));
|
|
165
|
+
const verifierResultIsCompatible = (claim, contract, result, indexes) => {
|
|
143
166
|
const expectedArtifactDigests = claim.surface_ids.flatMap((surfaceId) => {
|
|
144
|
-
const surface = surfaces.get(surfaceId);
|
|
145
|
-
const artifact = surface === undefined
|
|
167
|
+
const surface = indexes.surfaces.get(surfaceId);
|
|
168
|
+
const artifact = surface === undefined
|
|
169
|
+
? undefined
|
|
170
|
+
: indexes.artifacts.get(surface.artifact_id);
|
|
146
171
|
return artifact === undefined ? [] : [artifact.artifact_sha256];
|
|
147
172
|
});
|
|
148
|
-
const expectedOwnerDigests =
|
|
149
|
-
ownership.disposition === "implemented"
|
|
150
|
-
? [ownership.owner_sha256]
|
|
151
|
-
: []);
|
|
173
|
+
const expectedOwnerDigests = claim.surface_ids.flatMap((surfaceId) => (indexes.ownersBySurface.get(surfaceId) ?? []).flatMap(({ ownership }) => ownership.disposition === "implemented" ? [ownership.owner_sha256] : []));
|
|
152
174
|
return (result.contract_sha256 === contract.contract_sha256 &&
|
|
153
175
|
result.normalization_sha256 === contract.normalization_sha256 &&
|
|
154
176
|
result.covered_claim_ids.includes(claim.claim_id) &&
|
|
@@ -156,9 +178,9 @@ const verifierResultIsCompatible = (context, claim, contract, result) => {
|
|
|
156
178
|
claim.required_dimensions.every((item) => contract.dimensions.includes(item)) &&
|
|
157
179
|
claim.required_dimensions.every((item) => result.covered_dimensions.includes(item)) &&
|
|
158
180
|
result.covered_dimensions.every((item) => contract.dimensions.includes(item)) &&
|
|
159
|
-
result.artifact_sha256s.every((item) => artifactDigests.has(item)) &&
|
|
181
|
+
result.artifact_sha256s.every((item) => indexes.artifactDigests.has(item)) &&
|
|
160
182
|
expectedArtifactDigests.every((item) => result.artifact_sha256s.includes(item)) &&
|
|
161
|
-
result.owner_sha256s.every((item) => ownerDigests.has(item)) &&
|
|
183
|
+
result.owner_sha256s.every((item) => indexes.ownerDigests.has(item)) &&
|
|
162
184
|
expectedOwnerDigests.every((item) => result.owner_sha256s.includes(item)) &&
|
|
163
185
|
result.repeats >= contract.minimum_repeats &&
|
|
164
186
|
claim.required_authority === contract.authority);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { reconstructionCoverageDataSchema } from "./reconstructionCoverage.js";
|
|
3
|
+
/** Named-boundary input for inline reconstruction coverage evaluation. */
|
|
4
|
+
export const reconstructionCoverageEvaluationInputSchema = z.strictObject({
|
|
5
|
+
coverage: reconstructionCoverageDataSchema,
|
|
6
|
+
boundary_id: z.string().min(1),
|
|
7
|
+
});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { uniqueSorted } from "./canonicalOrdering.js";
|
|
1
2
|
/** Select the latest revision of each residual unknown. */
|
|
2
3
|
export const reconstructionUnknownHeads = (revisions) => {
|
|
3
4
|
const heads = new Map();
|
|
@@ -87,4 +88,3 @@ const defaultProbe = (kind) => kind === "behavioral"
|
|
|
87
88
|
operation: "inspect_artifact",
|
|
88
89
|
rationale: "Capture complete artifact inventories under equal limits.",
|
|
89
90
|
};
|
|
90
|
-
const uniqueSorted = (values) => [...new Set(values)].sort((left, right) => left.localeCompare(right, "en"));
|
|
@@ -3,9 +3,11 @@ import canonicalize from "canonicalize";
|
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { artifactComparisonResultSchema } from "./artifactComparison.js";
|
|
5
5
|
import { artifactInventoryResultSchema } from "./artifactGraph.js";
|
|
6
|
+
import { uniqueSorted } from "./canonicalOrdering.js";
|
|
6
7
|
import { parseEvidence } from "./evidence.js";
|
|
7
8
|
import { parseEvidenceBundle } from "./evidenceBundle.js";
|
|
8
9
|
import { functionComparisonResultSchema } from "./functionComparison.js";
|
|
10
|
+
import { PROCESS_PROVIDER, isProcessEvidenceProvider, } from "./processEvidenceProvider.js";
|
|
9
11
|
import { functionDossierSchema } from "./hopperValues.js";
|
|
10
12
|
import { deriveProcessComparisonStatus, PROCESS_COMPARISON_DIMENSIONS, processCaptureComparisonSchema, processCaptureSchema, } from "./processCapture.js";
|
|
11
13
|
import { reconstructionClaimResultSchema, reconstructionSpecificationSchema, reconstructionVerificationResultSchema, } from "./reconstructionVerificationSchemas.js";
|
|
@@ -17,8 +19,7 @@ const providers = {
|
|
|
17
19
|
behavioral: {
|
|
18
20
|
operation: "compare_process_captures",
|
|
19
21
|
predicates: ["rea.process-comparison"],
|
|
20
|
-
|
|
21
|
-
name: "REA deterministic process harness",
|
|
22
|
+
...PROCESS_PROVIDER,
|
|
22
23
|
},
|
|
23
24
|
"structural-function": {
|
|
24
25
|
operation: "compare_functions",
|
|
@@ -136,9 +137,11 @@ const validateComparisonIdentity = (claim, evidence) => {
|
|
|
136
137
|
const expected = providers[claim.kind];
|
|
137
138
|
if (evidence.operation !== expected.operation ||
|
|
138
139
|
!acceptsPredicate(expected.predicates, evidence.predicate_type) ||
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
140
|
+
(claim.kind === "behavioral"
|
|
141
|
+
? !isProcessEvidenceProvider(evidence.provider)
|
|
142
|
+
: evidence.provider.id !== expected.id ||
|
|
143
|
+
evidence.provider.name !== expected.name ||
|
|
144
|
+
evidence.provider.version !== "1") ||
|
|
142
145
|
evidence.confidence !== "derived" ||
|
|
143
146
|
evidence.authority !== "analyst-inference" ||
|
|
144
147
|
evidence.subject !== null)
|
|
@@ -146,7 +149,10 @@ const validateComparisonIdentity = (claim, evidence) => {
|
|
|
146
149
|
};
|
|
147
150
|
const sourceSides = (claim, evidence) => {
|
|
148
151
|
const parameters = evidence.parameters;
|
|
149
|
-
|
|
152
|
+
let singularSides;
|
|
153
|
+
if (claim.kind === "behavioral" ||
|
|
154
|
+
(claim.kind === "structural-function" &&
|
|
155
|
+
("left_evidence_id" in parameters || "right_evidence_id" in parameters))) {
|
|
150
156
|
const parsed = z
|
|
151
157
|
.object({
|
|
152
158
|
left_evidence_id: evidenceIdSchema,
|
|
@@ -154,10 +160,13 @@ const sourceSides = (claim, evidence) => {
|
|
|
154
160
|
})
|
|
155
161
|
.passthrough()
|
|
156
162
|
.parse(parameters);
|
|
157
|
-
|
|
163
|
+
singularSides = {
|
|
158
164
|
left: [parsed.left_evidence_id],
|
|
159
165
|
right: [parsed.right_evidence_id],
|
|
160
166
|
};
|
|
167
|
+
if (claim.kind === "behavioral" ||
|
|
168
|
+
!("left_evidence_ids" in parameters || "right_evidence_ids" in parameters))
|
|
169
|
+
return singularSides;
|
|
161
170
|
}
|
|
162
171
|
const parsed = z
|
|
163
172
|
.object({
|
|
@@ -166,6 +175,12 @@ const sourceSides = (claim, evidence) => {
|
|
|
166
175
|
})
|
|
167
176
|
.passthrough()
|
|
168
177
|
.parse(parameters);
|
|
178
|
+
if (singularSides !== undefined &&
|
|
179
|
+
(parsed.left_evidence_ids.length !== 1 ||
|
|
180
|
+
parsed.right_evidence_ids.length !== 1 ||
|
|
181
|
+
parsed.left_evidence_ids[0] !== singularSides.left[0] ||
|
|
182
|
+
parsed.right_evidence_ids[0] !== singularSides.right[0]))
|
|
183
|
+
throw new TypeError("Function comparison source Evidence aliases disagree");
|
|
169
184
|
return { left: parsed.left_evidence_ids, right: parsed.right_evidence_ids };
|
|
170
185
|
};
|
|
171
186
|
const observedStatus = (claim, evidence) => {
|
|
@@ -237,4 +252,3 @@ const digest = (value) => {
|
|
|
237
252
|
const count = (items, status) => items.filter((item) => item.status === status).length;
|
|
238
253
|
const sameSet = (left, right) => left.length === right.length &&
|
|
239
254
|
uniqueSorted(left).every((id, index) => id === uniqueSorted(right)[index]);
|
|
240
|
-
const uniqueSorted = (values) => [...new Set(values)].sort((left, right) => left.localeCompare(right, "en"));
|
|
@@ -101,7 +101,7 @@ const MANIFEST_FILENAMES = new Set([
|
|
|
101
101
|
"pipfile.lock",
|
|
102
102
|
"setup.cfg",
|
|
103
103
|
"manifest.in",
|
|
104
|
-
"
|
|
104
|
+
"cmakelists.txt",
|
|
105
105
|
"meson.build",
|
|
106
106
|
"configure",
|
|
107
107
|
"configure.ac",
|
|
@@ -272,7 +272,8 @@ const filenameIsTest = (filename) => {
|
|
|
272
272
|
return true;
|
|
273
273
|
if (lower.endsWith("_test") || lower.endsWith("_spec"))
|
|
274
274
|
return true;
|
|
275
|
-
|
|
275
|
+
const stem = basenameParts(lower).base;
|
|
276
|
+
return stem.endsWith("_test") || stem.endsWith("_spec");
|
|
276
277
|
};
|
|
277
278
|
const filenameIsGenerated = (filename) => {
|
|
278
279
|
const lower = filename.toLowerCase();
|
|
@@ -312,11 +313,9 @@ const isPathUnderAny = (path, names) => {
|
|
|
312
313
|
/** Detect a source language from a POSIX path. */
|
|
313
314
|
export const detectReferenceSourceLanguage = (path) => {
|
|
314
315
|
const filename = posix.basename(path);
|
|
315
|
-
if (filename === "Dockerfile" || filename.startsWith("Dockerfile."))
|
|
316
|
-
return "Dockerfile";
|
|
317
|
-
if (filename.toLowerCase().startsWith("dockerfile"))
|
|
318
|
-
return "Dockerfile";
|
|
319
316
|
const lower = filename.toLowerCase();
|
|
317
|
+
if (lower === "dockerfile" || lower.startsWith("dockerfile."))
|
|
318
|
+
return "Dockerfile";
|
|
320
319
|
if (lower.endsWith(".d.ts"))
|
|
321
320
|
return "TypeScript";
|
|
322
321
|
if (lower.endsWith(".d.mts"))
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
2
1
|
import { posix } from "node:path";
|
|
3
|
-
import canonicalize from "canonicalize";
|
|
4
2
|
import { z } from "zod";
|
|
3
|
+
import { canonicalDigest, canonicalJson } from "./comparisonSemantics.js";
|
|
5
4
|
import { compareUnicodeCodePoints } from "./unicodeCodePointOrder.js";
|
|
6
5
|
import { digestSchema } from "./../domain/digests.js";
|
|
7
6
|
import { prefixedDigestSchema } from "./../domain/digests.js";
|
|
@@ -184,13 +183,6 @@ const historicalSourceManifestBaseSchema = z.strictObject({
|
|
|
184
183
|
});
|
|
185
184
|
/** Stable identity used to sort and deduplicate source parse failures. */
|
|
186
185
|
export const historicalSourceParseFailureKey = (failure) => `${failure.path}\u0000${failure.parser}\u0000${failure.reason}`;
|
|
187
|
-
const canonicalJson = (value) => {
|
|
188
|
-
const serialized = canonicalize(value);
|
|
189
|
-
if (serialized === undefined)
|
|
190
|
-
throw new TypeError("RFC 8785 canonicalization rejected a graph value");
|
|
191
|
-
return serialized;
|
|
192
|
-
};
|
|
193
|
-
const digestCanonical = (value) => createHash("sha256").update(canonicalJson(value)).digest("hex");
|
|
194
186
|
const relationshipKey = (relationship) => `${relationship.from_path}\u0000${relationship.to}\u0000${relationship.kind}\u0000${relationship.resolution}\u0000${relationship.parse_state}`;
|
|
195
187
|
const checkSortedUnique = (values, field, context) => {
|
|
196
188
|
for (let index = 1; index < values.length; index += 1)
|
|
@@ -293,15 +285,15 @@ function checkGraphInvariants(graph, context) {
|
|
|
293
285
|
checkSortedUnique(graph.relationships.map(relationshipKey), "relationships", context);
|
|
294
286
|
checkSortedUnique(graph.parse_failures.map(historicalSourceParseFailureKey), "parse_failures", context);
|
|
295
287
|
checkSortedUnique(graph.exclusions.map(({ path, reason }) => `${path}\u0000${reason}`), "exclusions", context);
|
|
296
|
-
if (canonicalJson(graph.languages) !==
|
|
297
|
-
canonicalJson(historicalSourceLanguages(graph.entries)))
|
|
288
|
+
if (canonicalJson(graph.languages, "Reference source graph") !==
|
|
289
|
+
canonicalJson(historicalSourceLanguages(graph.entries), "Reference source graph"))
|
|
298
290
|
context.addIssue({
|
|
299
291
|
code: "custom",
|
|
300
292
|
message: "languages must be derived from file entries",
|
|
301
293
|
path: ["languages"],
|
|
302
294
|
});
|
|
303
|
-
if (canonicalJson(graph.manifests) !==
|
|
304
|
-
canonicalJson(historicalSourceManifests(graph.entries)))
|
|
295
|
+
if (canonicalJson(graph.manifests, "Reference source graph") !==
|
|
296
|
+
canonicalJson(historicalSourceManifests(graph.entries), "Reference source graph"))
|
|
305
297
|
context.addIssue({
|
|
306
298
|
code: "custom",
|
|
307
299
|
message: "manifests must be derived from classified file entries",
|
|
@@ -340,7 +332,7 @@ const rootCommitment = (entries, exclusions) => ({
|
|
|
340
332
|
}),
|
|
341
333
|
exclusions,
|
|
342
334
|
});
|
|
343
|
-
const computeRootSha256 = (entries, exclusions) =>
|
|
335
|
+
const computeRootSha256 = (entries, exclusions) => canonicalDigest(rootCommitment(entries, exclusions), "Reference source graph");
|
|
344
336
|
/** Build and internally commit a normalized historical source graph. */
|
|
345
337
|
export const createHistoricalSourceGraph = (input) => {
|
|
346
338
|
const parsed = historicalSourceGraphInputSchema.parse(input);
|
|
@@ -352,7 +344,7 @@ export const createHistoricalSourceGraph = (input) => {
|
|
|
352
344
|
/** Parse a graph and reject stale or caller-invented root commitments. */
|
|
353
345
|
export const parseHistoricalSourceGraph = (input) => historicalSourceGraphSchema.parse(input);
|
|
354
346
|
/** Compute a deterministic graph commitment containing no absolute root path. */
|
|
355
|
-
export const computeHistoricalSourceGraphSha256 = (input) =>
|
|
347
|
+
export const computeHistoricalSourceGraphSha256 = (input) => canonicalDigest(parseHistoricalSourceGraph(input), "Reference source graph");
|
|
356
348
|
/** Build a deterministic, relocation-independent manifest for a source graph. */
|
|
357
349
|
export const createHistoricalSourceManifest = (input) => {
|
|
358
350
|
const graph = parseHistoricalSourceGraph(input);
|
|
@@ -367,14 +359,14 @@ export const createHistoricalSourceManifest = (input) => {
|
|
|
367
359
|
};
|
|
368
360
|
return historicalSourceManifestBaseSchema.parse({
|
|
369
361
|
...semantic,
|
|
370
|
-
manifest_id: `hsm_${
|
|
362
|
+
manifest_id: `hsm_${canonicalDigest(semantic, "Reference source graph")}`,
|
|
371
363
|
});
|
|
372
364
|
};
|
|
373
365
|
/** Parse and verify a historical source manifest's semantic identifier. */
|
|
374
366
|
export const parseHistoricalSourceManifest = (input) => {
|
|
375
367
|
const manifest = historicalSourceManifestBaseSchema.parse(input);
|
|
376
368
|
const { manifest_id: manifestId, ...semantic } = manifest;
|
|
377
|
-
if (`hsm_${
|
|
369
|
+
if (`hsm_${canonicalDigest(semantic, "Reference source graph")}` !== manifestId)
|
|
378
370
|
throw new TypeError("Historical source manifest identifier does not match");
|
|
379
371
|
return manifest;
|
|
380
372
|
};
|