rea-agents 6.0.0 → 6.2.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 +26 -18
- package/bridge/android/ReaJadxBridge.java +14 -5
- package/bridge/ghidra/ReaGhidraBridge.java +205 -51
- package/bridge/hopper_bridge.py +314 -127
- package/bridge/mitmproxy/capture.py +0 -2
- package/bridge/native/rea_lldb_tracer.py +630 -94
- package/bridge/process/ProcessRunTokenReader.swift +39 -5
- package/bridge/pwntools/recorded_crash_impl.py +4 -0
- package/dist/android/JadxConfiguration.js +274 -31
- package/dist/android/JadxMcpTransport.js +18 -2
- package/dist/android/JadxProtocol.js +6 -0
- package/dist/android/JadxProvider.js +76 -37
- package/dist/android/JadxSession.js +23 -4
- package/dist/application/AnalysisContextQueries.js +8 -35
- package/dist/application/AnalysisDocument.js +32 -0
- package/dist/application/AppBundleExecutable.js +67 -21
- package/dist/application/BinaryTargetResolver.js +5 -3
- package/dist/application/BrowserEvidence.js +3 -8
- package/dist/application/BrowserScenarioEvidence.js +2 -18
- package/dist/application/CallPathTracing.js +19 -3
- package/dist/application/CapabilityInventory.js +48 -11
- package/dist/application/ClientConfigurationDocument.js +917 -8
- package/dist/application/ClientRegistrationIdentity.js +26 -5
- package/dist/application/ClientRegistrationStatus.js +29 -14
- package/dist/application/DirectAnalysis.js +56 -51
- package/dist/application/DirectAnalysisCleanup.js +72 -0
- package/dist/application/DirectAnalysisStatus.js +4 -5
- package/dist/application/Doctor.js +19 -21
- package/dist/application/DoctorDiagnostics.js +1 -2
- package/dist/application/DoctorScope.js +25 -13
- package/dist/application/EnhancedLiteralTracing.js +22 -25
- package/dist/application/EnhancedTools.js +64 -17
- package/dist/application/EvidenceBundleFiles.js +30 -13
- package/dist/application/FunctionAnalysisEvidence.js +2 -3
- package/dist/application/InventoryProjectionEvidence.js +4 -3
- package/dist/application/InvestigationProviders.js +11 -2
- package/dist/application/JsonFiles.js +83 -28
- package/dist/application/LinuxHopper.js +9 -6
- package/dist/application/MacHopper.js +15 -18
- package/dist/application/ProcedureAddressResolution.js +11 -0
- package/dist/application/RealHopperAssertions.js +0 -11
- package/dist/application/ReconstructionCoverageService.js +7 -4
- package/dist/application/ReconstructionObligationCandidates.js +1 -1
- package/dist/application/ReconstructionObligationLedgerService.js +4 -3
- package/dist/application/ReferenceSourceImportEntries.js +1 -1
- package/dist/application/Setup.js +21 -17
- package/dist/application/SetupClientConfiguration.js +10 -15
- package/dist/application/SetupHost.js +21 -29
- package/dist/application/SetupPlan.js +11 -9
- package/dist/application/SupportedClients.js +34 -1
- package/dist/application/Uninstall.js +82 -29
- package/dist/application/Update.js +18 -3
- package/dist/application/UpdateMaintenance.js +7 -5
- package/dist/application/UpdateRuntime.js +57 -36
- package/dist/application/WebModuleTraceService.js +4 -2
- package/dist/application/WebNetworkCaptureService.js +4 -2
- package/dist/application/WebRuntimeService.js +5 -3
- package/dist/application/WebScriptExportService.js +32 -6
- package/dist/application/WebSourceLocationService.js +4 -2
- package/dist/application/WorkflowEvidence.js +105 -0
- package/dist/application/XrefsAddressResolution.js +45 -0
- package/dist/application/analysisView/AnalysisViewService.js +76 -0
- package/dist/application/binary/AnalysisClientCleanup.js +30 -5
- package/dist/application/binary/AnalysisProviderEvaluation.js +22 -7
- package/dist/application/binary/AnalysisProviderRegistry.js +4 -6
- package/dist/application/binary/AnalysisSnapshotCache.js +13 -14
- package/dist/application/binary/BinarySession.js +161 -93
- package/dist/application/binary/BinarySessionComposition.js +1 -3
- package/dist/application/binary/BinarySessionExecution.js +3 -5
- package/dist/application/binary/BinarySessionOpen.js +4 -4
- package/dist/application/binary/BinarySessionRecords.js +26 -4
- package/dist/application/binary/BinarySessionStatus.js +18 -7
- package/dist/application/binary/CompositeProvider.js +16 -17
- package/dist/application/binary/LazyAnalysisProvider.js +8 -5
- package/dist/application/binary/SessionProviderRouter.js +27 -135
- package/dist/application/binaryDiagnostics/BinaryLayoutService.js +4 -2
- package/dist/application/binaryDiagnostics/RecordedCrashService.js +4 -2
- package/dist/application/evm/EvmInterfaceService.js +4 -2
- package/dist/application/homebrew.js +48 -0
- package/dist/application/investigation/EvidenceLedger.js +21 -7
- package/dist/application/investigation/InvestigationRecords.js +8 -0
- package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
- package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -4
- package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
- package/dist/application/javascript/JavaScriptApplicationService.js +27 -15
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +10 -7
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +44 -10
- package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
- package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
- package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
- package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +49 -19
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +56 -8
- package/dist/application/javascript/JavaScriptModuleRelationships.js +38 -9
- package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +6 -4
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +63 -61
- package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
- package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +64 -19
- package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
- package/dist/application/managed/ManagedMemberComparisonService.js +9 -5
- package/dist/application/managed/ManagedNativeVerificationService.js +6 -4
- package/dist/application/managed/ManagedReconstructionService.js +4 -3
- package/dist/application/process/ProcessCli.js +25 -17
- package/dist/application/process/ProcessEvidence.js +4 -4
- package/dist/application/workflowInputError.js +18 -0
- package/dist/artifacts/ArtifactProvider.js +48 -13
- package/dist/artifacts/ArtifactReader.js +31 -0
- package/dist/artifacts/DirectoryArtifactReader.js +2 -1
- package/dist/artifacts/MachOSliceArtifactReader.js +106 -15
- package/dist/artifacts/NativeDmgArtifactReader.js +73 -21
- package/dist/artifacts/SafeOutputTree.js +16 -2
- package/dist/artifacts/ZipArtifactReader.js +11 -4
- package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +26 -5
- package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
- package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
- package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
- package/dist/artifacts/apple/KeyedArchiveReader.js +55 -23
- package/dist/artifacts/apple/MachoLoadCommandReader.js +92 -31
- package/dist/artifacts/apple/NibArchive.js +81 -14
- package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
- package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
- package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +79 -68
- package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
- package/dist/artifacts/inventory/reader.js +3 -3
- package/dist/artifacts/inventory/scanCanonical.js +59 -38
- package/dist/artifacts/inventory/scanReader.js +5 -9
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
- package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
- package/dist/browser/CdpBrowserProvider.js +2 -3
- package/dist/browser/CdpCaptureCompleteness.js +2 -0
- package/dist/browser/CdpCaptureEventHandlers.js +78 -15
- package/dist/browser/CdpCaptureEventTypes.js +5 -1
- package/dist/browser/CdpCaptureEvents.js +25 -1
- package/dist/browser/CdpCaptureValues.js +20 -0
- package/dist/browser/CdpConnection.js +30 -11
- package/dist/browser/CdpElectronProvider.js +0 -2
- package/dist/browser/CdpElectronScriptEvents.js +2 -8
- package/dist/browser/CdpElectronScripts.js +2 -3
- package/dist/browser/CdpOptionalCommand.js +2 -3
- package/dist/browser/CdpPageCapture.js +23 -1
- package/dist/browser/CdpPageCaptureScripts.js +2 -3
- package/dist/browser/CdpSafeMetadata.js +10 -10
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
- package/dist/browser/PlaywrightElectronActiveActions.js +34 -79
- package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
- package/dist/browser/PlaywrightElectronActiveProvider.js +133 -130
- package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
- package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
- package/dist/browser/PlaywrightScenarioEvents.js +1 -1
- package/dist/browser/PlaywrightScenarioSession.js +39 -22
- package/dist/browser/WebSourceMapFetcher.js +426 -72
- package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
- package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
- package/dist/browser/history/CaptureFailures.js +41 -1
- package/dist/browser/history/CaptureRelease.js +5 -0
- package/dist/browser/history/HarCaptureAdapter.js +3 -3
- package/dist/browser/history/HarJson.js +3 -2
- package/dist/browser/history/HistoricalCaptureDecoder.js +4 -2
- package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
- package/dist/catalogIdentity.js +0 -1
- package/dist/cli/analysisSelector.js +23 -0
- package/dist/cli/analysisViewCommands.js +36 -0
- package/dist/cli/applicationCommands.js +2 -3
- package/dist/cli/artifactCommands.js +11 -12
- package/dist/cli/coreAnalysisCommands.js +3 -3
- package/dist/cli/coreBinaryCommands.js +100 -37
- package/dist/cli/coreNativeCommands.js +9 -10
- package/dist/cli/electronCommands.js +10 -9
- package/dist/cli/interactiveSetup.js +6 -6
- package/dist/cli/javascriptApplicationAnalysis.js +7 -3
- package/dist/cli/jsonOutput.js +4 -99
- package/dist/cli/managedCommands.js +7 -8
- package/dist/cli/nativeCallCommands.js +3 -5
- package/dist/cli/omittableDefaults.js +50 -0
- package/dist/cli/processCommands.js +3 -2
- package/dist/cli/setupCommands.js +16 -15
- package/dist/cli/utilityCommands.js +9 -9
- package/dist/cli/webRuntimeCommands.js +8 -8
- package/dist/cli.js +18 -9
- package/dist/cliBrowserScenarioCommands.js +2 -2
- package/dist/cliCommandNames.js +1 -1
- package/dist/cliJsonInput.js +24 -5
- package/dist/cliOutput.js +0 -38
- package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
- package/dist/composition/binary.js +9 -9
- package/dist/composition/browserScenario.js +2 -1
- package/dist/composition/directAnalysis.js +20 -13
- package/dist/composition/electronScenario.js +1 -1
- package/dist/composition/optionalObservationProviders.js +12 -7
- package/dist/config/environment.js +10 -0
- package/dist/config/ghidraStartupTimeout.js +12 -0
- package/dist/config/homeDirectory.js +12 -0
- package/dist/config/mcpResponseBudget.js +30 -0
- package/dist/config/parseConfig.js +8 -3
- package/dist/config/parsers.js +19 -22
- package/dist/contracts/analysisViewToolContracts.js +56 -0
- package/dist/contracts/applicationToolContracts.js +5 -4
- package/dist/contracts/artifactComparisonExample.js +2 -2
- package/dist/contracts/artifactToolContracts.js +1 -1
- package/dist/contracts/browserScenarioToolContracts.js +1 -1
- package/dist/contracts/browserToolContracts.js +19 -15
- package/dist/contracts/enhancedInputs.js +7 -5
- package/dist/contracts/enhancedToolContracts.js +7 -6
- package/dist/contracts/evm/evmToolContracts.js +1 -1
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/hopperMemoryContracts.js +2 -5
- package/dist/contracts/inputSchemaPresentation.js +90 -0
- package/dist/contracts/investigationExamples.js +4 -3
- package/dist/contracts/javascript/electronToolContracts.js +2 -2
- package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
- package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
- package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
- package/dist/contracts/managed/managedToolContracts.js +7 -14
- package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
- package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
- package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
- package/dist/contracts/native/nativeToolContracts.js +5 -3
- package/dist/contracts/officialToolContracts.js +16 -16
- package/dist/contracts/promptContracts.js +5 -5
- package/dist/contracts/providerSelection.js +1 -1
- package/dist/contracts/sessionLifecycleInputs.js +3 -7
- package/dist/contracts/sessionStatusContract.js +2 -4
- package/dist/contracts/sessionToolContracts.js +18 -8
- package/dist/contracts/sessionToolSchemas.js +3 -19
- package/dist/contracts/toolContractExamples.js +0 -1
- package/dist/contracts/toolContractHelpers.js +4 -1
- package/dist/contracts/toolContracts.js +2 -0
- package/dist/contracts/toolEffects.js +1 -1
- package/dist/contracts/toolOutputSchemaGroups.js +160 -115
- package/dist/contracts/toolOutputSchemaPrimitives.js +28 -20
- package/dist/contracts/toolSchemaMetadata.js +41 -33
- package/dist/contracts/webNetworkCaptureToolContracts.js +2 -2
- package/dist/contracts/webRuntimeToolContracts.js +1 -1
- package/dist/contracts/webScriptToolContracts.js +1 -1
- package/dist/doctorRuntime.js +7 -5
- package/dist/domain/analysisErrorBase.js +8 -3
- package/dist/domain/analysisErrorCore.js +6 -1
- package/dist/domain/analysisErrorPresentation.js +90 -20
- package/dist/domain/analysisErrorProjection.js +130 -32
- package/dist/domain/analysisSnapshot.js +29 -31
- package/dist/domain/analysisView/analysisView.js +243 -0
- package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
- package/dist/domain/analysisView/binaryLayoutView.js +159 -0
- package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
- package/dist/domain/android/androidAnalysis.js +2 -4
- package/dist/domain/android/androidApplication.js +18 -10
- package/dist/domain/apple/appleApplication.js +42 -15
- package/dist/domain/apple/dyldEnvironment.js +73 -0
- package/dist/domain/apple/dylibResolution.js +130 -12
- package/dist/domain/apple/dylibResolutionFindings.js +9 -7
- package/dist/domain/apple/interfaceBuilderGraph.js +25 -14
- package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
- package/dist/domain/apple/keyedArchive.js +35 -3
- package/dist/domain/apple/machoContainer.js +54 -0
- package/dist/domain/apple/plistNumbers.js +76 -0
- package/dist/domain/artifactComparison.js +15 -6
- package/dist/domain/artifactGraph.js +16 -3
- package/dist/domain/artifactIdentity.js +29 -0
- package/dist/domain/artifactInventoryEvidence.js +28 -40
- package/dist/domain/artifactOperationError.js +3 -3
- package/dist/domain/artifactPartialObservation.js +1 -0
- package/dist/domain/artifactPathSyntax.js +49 -0
- package/dist/domain/binaryTarget.js +39 -13
- package/dist/domain/bridgeCandidateProjection.js +71 -0
- package/dist/domain/browserCaptureComparison.js +13 -49
- package/dist/domain/browserCompleteness.js +1 -0
- package/dist/domain/browserNetworkEvidence.js +10 -4
- package/dist/domain/browserObservation.js +0 -1
- package/dist/domain/browserObservationError.js +24 -5
- package/dist/domain/browserObservationSchemas.js +14 -3
- package/dist/domain/browserScenario.js +0 -1
- package/dist/domain/browserScenarioCapture.js +1 -2
- package/dist/domain/browserScenarioDiff.js +0 -2
- package/dist/domain/browserScenarioDiffEvidence.js +0 -12
- package/dist/domain/browserScenarioDiffValues.js +2 -2
- package/dist/domain/browserScenarioValues.js +5 -10
- package/dist/domain/bundleComparison.js +3 -2
- package/dist/domain/callPath.js +8 -9
- package/dist/domain/callPathSchemas.js +2 -2
- package/dist/domain/canonicalJsonDigestSteps.js +133 -0
- package/dist/domain/canonicalOrdering.js +9 -5
- package/dist/domain/changedBehavior.js +9 -9
- package/dist/domain/comparisonSourceEvidence.js +40 -0
- package/dist/domain/completionLedgerGeneration.js +2 -1
- package/dist/domain/configurationErrors.js +13 -1
- package/dist/domain/conformancePackage.js +4 -3
- package/dist/domain/evidence.js +65 -36
- package/dist/domain/evidenceBundle.js +47 -8
- package/dist/domain/evidenceCompletionLedger.js +2 -1
- package/dist/domain/evidenceErrors.js +12 -1
- package/dist/domain/explicitSensitiveFailure.js +17 -1
- package/dist/domain/firmware/firmwareAnalysis.js +6 -7
- package/dist/domain/functionComparison.js +4 -5
- package/dist/domain/functionComparisonDimensions.js +120 -87
- package/dist/domain/functionComparisonNormalization.js +23 -34
- package/dist/domain/functionComparisonResults.js +1 -4
- package/dist/domain/functionComparisonSchemas.js +2 -8
- package/dist/domain/functionDossierEvidence.js +2 -37
- package/dist/domain/hopperErrors.js +23 -2
- package/dist/domain/hopperValues.js +51 -8
- package/dist/domain/immutableJson.js +114 -0
- package/dist/domain/inputIssueProjection.js +3 -0
- package/dist/domain/javascript/electronActiveObservation.js +47 -64
- package/dist/domain/javascript/electronObservation.js +14 -3
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
- package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
- package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +39 -3
- package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
- package/dist/domain/javascript/javascriptAstValues.js +20 -0
- package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
- package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
- package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
- package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
- package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
- package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
- package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
- package/dist/domain/javascript/javascriptRecovery.js +3 -8
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
- package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
- package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
- package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
- package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +106 -5
- package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
- package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
- package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
- package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
- package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
- package/dist/domain/javascript/javascriptSemanticDataEffects.js +23 -6
- package/dist/domain/javascript/javascriptSemanticGraph.js +98 -43
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
- package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
- package/dist/domain/javascript/javascriptSemanticPrimitives.js +18 -21
- package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
- package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
- package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
- package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
- package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
- package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
- package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
- package/dist/domain/javascript/javascriptSemanticValues.js +126 -61
- package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
- package/dist/domain/javascript/javascriptSourceParser.js +6 -2
- package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +16 -5
- package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -17
- package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
- package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
- package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
- package/dist/domain/jsonSerialization.js +109 -0
- package/dist/domain/jsonValue.js +90 -6
- package/dist/domain/localPath.js +6 -0
- package/dist/domain/managed/managedApplicationGraph.js +10 -10
- package/dist/domain/managed/managedArtifact.js +6 -4
- package/dist/domain/managed/managedInspectionEvidence.js +16 -0
- package/dist/domain/managed/managedMemberComparison.js +2 -9
- package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
- package/dist/domain/managed/managedNativeVerification.js +3 -11
- package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
- package/dist/domain/native/binaryLayout.js +2 -3
- package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
- package/dist/domain/native/nativeApiBoundary.js +1 -1
- package/dist/domain/native/nativeCallObservation.js +37 -13
- package/dist/domain/native/nativeCallPartialObservation.js +33 -0
- package/dist/domain/native/nativeInstruction.js +7 -0
- package/dist/domain/native/recordedCrash.js +2 -3
- package/dist/domain/offsetDateTime.js +17 -0
- package/dist/domain/process/processCapture.js +21 -16
- package/dist/domain/process/processCaptureCoverage.js +67 -0
- package/dist/domain/process/processCaptureExample.js +2 -1
- package/dist/domain/process/processCaptureParsing.js +1 -34
- package/dist/domain/process/processCaptureValidation.js +81 -13
- package/dist/domain/process/processComparison.js +79 -26
- package/dist/domain/process/processObservation.js +10 -2
- package/dist/domain/process/processScenario.js +35 -12
- package/dist/domain/process/processTraceComparison.js +0 -2
- package/dist/domain/process/processTraceDimensionProjection.js +1 -1
- package/dist/domain/process/processTraceEvaluation.js +15 -11
- package/dist/domain/process/processTraceSpecification.js +3 -4
- package/dist/domain/propertyListKeys.js +1 -1
- package/dist/domain/propertyListXmlText.js +19 -0
- package/dist/domain/providerAdapterError.js +3 -1
- package/dist/domain/providerOperationHealth.js +54 -0
- package/dist/domain/reconstructionCoverage.js +5 -2
- package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
- package/dist/domain/reconstructionReadinessSchemas.js +2 -1
- package/dist/domain/reconstructionVerification.js +9 -46
- package/dist/domain/reconstructionVerificationSchemas.js +4 -3
- package/dist/domain/referenceSourceGraph.js +20 -21
- package/dist/domain/staticRuntimeCorrelation.js +8 -45
- package/dist/domain/stringPatterns.js +6 -0
- package/dist/domain/swiftSymbolClassification.js +61 -0
- package/dist/domain/symbolAnalysis.js +66 -18
- package/dist/domain/webBundleAnalysis.js +20 -8
- package/dist/domain/webBundleAnalyzerInspection.js +13 -8
- package/dist/domain/webBundleAnalyzerResult.js +41 -2
- package/dist/domain/webCaptureDiff.js +0 -1
- package/dist/domain/webCaptureDiffSchemas.js +6 -3
- package/dist/domain/webEventListeners.js +3 -2
- package/dist/domain/webExecution.js +3 -2
- package/dist/domain/webRuntime.js +19 -7
- package/dist/domain/webScriptExport.js +1 -1
- package/dist/domain/webSourceLocation.js +1 -0
- package/dist/dotnet/ManagedArtifactInspector.js +2 -19
- package/dist/dotnet/ManagedMemberInspector.js +12 -18
- package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
- package/dist/dotnet/ManagedMemberRows.js +75 -62
- package/dist/dotnet/ManagedMetadataInventory.js +16 -22
- package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
- package/dist/dotnet/ManagedReaderFailure.js +16 -0
- package/dist/dotnet/ManagedStaticProvider.js +3 -5
- package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
- package/dist/evaluation/AgentEvaluationReport.js +28 -0
- package/dist/evaluation/CodexAgentEval.js +12 -8
- package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
- package/dist/evm/EvmoleInterfaceProvider.js +2 -1
- package/dist/firmware/FirmwareCommand.js +9 -5
- package/dist/firmware/FirmwareFiles.js +1 -1
- package/dist/firmware/FirmwareProvider.js +4 -4
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +7 -5
- package/dist/ghidra/GhidraClient.js +126 -34
- package/dist/ghidra/GhidraClientStartup.js +0 -2
- package/dist/ghidra/GhidraDiagnostics.js +7 -7
- package/dist/ghidra/GhidraDoctor.js +6 -5
- package/dist/ghidra/GhidraFunctionValues.js +13 -12
- package/dist/ghidra/GhidraInstallation.js +58 -33
- package/dist/ghidra/GhidraInventoryValues.js +14 -4
- package/dist/ghidra/GhidraJavaLaunch.js +66 -0
- package/dist/ghidra/GhidraLauncher.js +47 -22
- package/dist/ghidra/GhidraProvider.js +6 -2
- package/dist/ghidra/GhidraProviderCapabilities.js +20 -2
- package/dist/ghidra/GhidraProviderClient.js +36 -15
- package/dist/ghidra/GhidraSessionError.js +13 -7
- package/dist/ghidra/GhidraSessionRoot.js +39 -0
- package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
- package/dist/ghidra/GhidraTransport.js +20 -0
- package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
- package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
- package/dist/hopper/BridgeLauncher.js +65 -56
- package/dist/hopper/HopperAnalysisProfile.js +65 -12
- package/dist/hopper/HopperCleanup.js +63 -22
- package/dist/hopper/HopperClient.js +288 -59
- package/dist/hopper/HopperFileOffset.js +237 -0
- package/dist/hopper/HopperMachOImage.js +197 -0
- package/dist/hopper/HopperOperationStage.js +6 -0
- package/dist/hopper/HopperProvider.js +71 -19
- package/dist/hopper/HopperProviderCapabilities.js +19 -1
- package/dist/hopper/HopperRegexSearch.js +134 -0
- package/dist/hopper/HopperRegexWorker.js +27 -0
- package/dist/hopper/HopperRequestQueue.js +68 -19
- package/dist/hopper/HopperTargetLease.js +133 -49
- package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
- package/dist/ida/IdaConfiguration.js +8 -3
- package/dist/ida/IdaInput.js +1 -7
- package/dist/ida/IdaMcpConnection.js +8 -4
- package/dist/ida/IdaOperationRunner.js +3 -3
- package/dist/ida/IdaProvider.js +8 -12
- package/dist/ida/IdaSessionClient.js +20 -18
- package/dist/ida/IdaWorkspace.js +12 -13
- package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
- package/dist/inspector/V8InspectorCaptureProjection.js +9 -4
- package/dist/inspector/V8InspectorProvider.js +82 -36
- package/dist/javascript/recovery/WakaruCommand.js +7 -2
- package/dist/javascript/recovery/WakaruExecution.js +5 -2
- package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
- package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -0
- package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
- package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
- package/dist/main/shutdown.js +11 -3
- package/dist/main/startup.js +9 -2
- package/dist/main/transport.js +22 -2
- package/dist/main.js +11 -18
- package/dist/mcpDoctor.js +62 -2
- package/dist/native/AppleDispatchCoverage.js +47 -6
- package/dist/native/AppleDispatchDecodeFacts.js +6 -0
- package/dist/native/AppleDispatchMetadata.js +6 -3
- package/dist/native/AppleMachoFixups.js +48 -24
- package/dist/native/AppleMachoSelection.js +48 -22
- package/dist/native/AppleObjcCategories.js +6 -2
- package/dist/native/AppleObjcDispatchFacets.js +5 -2
- package/dist/native/AppleObjcProperties.js +2 -1
- package/dist/native/AppleSwiftDispatchFacets.js +27 -21
- package/dist/native/AppleSwiftVtables.js +21 -15
- package/dist/native/CommandRunner.js +87 -88
- package/dist/native/LldbCallTracer.js +372 -103
- package/dist/native/LldbRetainedObservations.js +178 -0
- package/dist/native/NativeCallObservation.js +62 -3
- package/dist/native/NativeMacOSProvider.js +122 -31
- package/dist/native/NativeUiHelperRuntime.js +11 -2
- package/dist/native/NativeUiObservation.js +2 -2
- package/dist/native/SignatureTargetBinding.js +155 -0
- package/dist/native/parsers/lipo.js +71 -1
- package/dist/native/pwndbg/PwndbgCoreContext.js +25 -5
- package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
- package/dist/native/pwntools/RecordedCrashStructureBindings.js +2 -0
- package/dist/process/DarwinProcessRunTokenReader.js +23 -10
- package/dist/process/ExecFileOutput.js +108 -6
- package/dist/process/OwnedCommand.js +7 -2
- package/dist/process/PrivateRuntimeRoot.js +10 -5
- package/dist/process/ProcessOwnership.js +204 -57
- package/dist/process/ProcessOwnershipObservation.js +60 -9
- package/dist/process/ProviderProcess.js +39 -10
- package/dist/process/capture/FilesystemSnapshot.js +50 -13
- package/dist/process/capture/ProcessCaptureError.js +15 -2
- package/dist/process/capture/ProcessCaptureLifecycle.js +235 -81
- package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
- package/dist/process/capture/ProcessHarness.js +21 -25
- package/dist/process/capture/ProcessNormalization.js +20 -2
- package/dist/process/capture/ProcessSampling.js +25 -2
- package/dist/process/capture/TerminalRenderer.js +14 -0
- package/dist/process/snapshotEnvironment.js +14 -0
- package/dist/server/EvidenceMcpServer.js +157 -0
- package/dist/server/createServer.js +61 -41
- package/dist/server/mcpClientMetadata.js +12 -5
- package/dist/server/promptCompletion.js +3 -8
- package/dist/server/registerAnalysisViewTool.js +15 -0
- package/dist/server/registerAndroidTools.js +2 -5
- package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
- package/dist/server/registerApplicationTools/compareVersions.js +4 -5
- package/dist/server/registerApplicationTools/coverage.js +1 -2
- package/dist/server/registerApplicationTools/helpers.js +1 -4
- package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
- package/dist/server/registerApplicationTools/traceFeature.js +4 -5
- package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
- package/dist/server/registerArtifactComparisonTool.js +13 -10
- package/dist/server/registerBinaryDiagnosticsTools.js +2 -5
- package/dist/server/registerBrowserScenarioTool.js +3 -6
- package/dist/server/registerBrowserTools.js +13 -18
- package/dist/server/registerBundleComparisonTool.js +5 -7
- package/dist/server/registerCloseLifecycleTool.js +9 -20
- package/dist/server/registerElectronTools.js +10 -15
- package/dist/server/registerEnhancedTools.js +36 -77
- package/dist/server/registerEvidenceTools.js +3 -6
- package/dist/server/registerEvmTools.js +2 -5
- package/dist/server/registerFirmwareTools.js +2 -5
- package/dist/server/registerFunctionComparisonTool.js +15 -12
- package/dist/server/registerInvestigationTools.js +16 -17
- package/dist/server/registerJavaScriptRecoveryTool.js +2 -5
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -8
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -8
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -7
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -9
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -9
- package/dist/server/registerOfficialTools.js +4 -21
- package/dist/server/registerProcessComparisonTool.js +74 -48
- package/dist/server/registerRecordedCrashTools.js +2 -5
- package/dist/server/registerSessionRecordTools.js +19 -24
- package/dist/server/registerSessionStatusTool.js +19 -6
- package/dist/server/registerSessionTools.js +20 -18
- package/dist/server/registerWebModuleTool.js +2 -5
- package/dist/server/registerWebNetworkCaptureTool.js +2 -5
- package/dist/server/registerWebRuntimeTools.js +4 -9
- package/dist/server/registerWebScriptTool.js +2 -5
- package/dist/server/registerWebSourceLocationTool.js +2 -5
- package/dist/server/runDerivedOperation.js +15 -3
- package/dist/server/sessionAvailabilityPolicy.js +0 -1
- package/dist/server/toolRegistrationOptions.js +2 -2
- package/dist/server/toolResult.js +75 -51
- package/dist/server/toolResultEncoding.js +34 -0
- package/dist/windows/WindowsNativeLoader.js +1 -0
- package/dist/windows/WindowsOwnedProcess.js +60 -15
- package/dist/windows/WindowsPrivateRuntime.js +7 -8
- package/install.sh +1 -1
- package/native/windows/README.md +3 -1
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +44 -30
- package/scripts/electron-active-hook-boundaries.cjs +18 -20
- package/scripts/electron-active-hook.cjs +241 -37
- package/scripts/rea.mjs +3 -6
- package/skills/reverse-engineer-anything/SKILL.md +12 -3
- package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +20 -3
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
- package/dist/config.js +0 -1
- package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
- package/dist/contracts/process/processCaptureExample.js +0 -2
- package/dist/contracts/toolOutputSchemas.js +0 -2
- package/dist/ghidra/GhidraDefaults.js +0 -2
- package/dist/main/reload.js +0 -12
- package/dist/main/state.js +0 -3
- package/dist/server/sessionToolPolicies.js +0 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js";
|
|
2
2
|
import { err, ok } from "../../domain/result.js";
|
|
3
3
|
import { closeAnalysisClient } from "./AnalysisClientCleanup.js";
|
|
4
|
-
/** Synthetic
|
|
5
|
-
|
|
4
|
+
/** Synthetic identity for a deterministic provider set. */
|
|
5
|
+
const compositeProviderIdentity = (identities) => ({
|
|
6
6
|
id: `composite:${identities
|
|
7
7
|
.map(({ id }) => id)
|
|
8
8
|
.sort()
|
|
@@ -16,15 +16,10 @@ export class CompositeProvider {
|
|
|
16
16
|
#identity;
|
|
17
17
|
#capabilities;
|
|
18
18
|
#providerByOperation;
|
|
19
|
-
#profileProvider;
|
|
20
19
|
constructor(providers) {
|
|
21
20
|
this.providers = providers;
|
|
22
21
|
if (providers.length === 0)
|
|
23
22
|
throw new RangeError("CompositeProvider requires at least one provider");
|
|
24
|
-
const profileProviders = providers.filter(({ resolveAnalysisProfile }) => resolveAnalysisProfile !== undefined);
|
|
25
|
-
if (profileProviders.length > 1)
|
|
26
|
-
throw new TypeError("CompositeProvider supports at most one target-bound analysis profile");
|
|
27
|
-
this.#profileProvider = profileProviders[0];
|
|
28
23
|
this.#identity = Object.freeze(compositeProviderIdentity(providers.map((provider) => provider.identity())));
|
|
29
24
|
const routes = new Map();
|
|
30
25
|
const capabilities = [];
|
|
@@ -46,12 +41,6 @@ export class CompositeProvider {
|
|
|
46
41
|
capabilities() {
|
|
47
42
|
return this.#capabilities;
|
|
48
43
|
}
|
|
49
|
-
resolveAnalysisProfile(target, options) {
|
|
50
|
-
const resolve = this.#profileProvider?.resolveAnalysisProfile;
|
|
51
|
-
return resolve === undefined
|
|
52
|
-
? Promise.resolve(ok({ profile: null, compatibility: {} }))
|
|
53
|
-
: resolve.call(this.#profileProvider, target, options);
|
|
54
|
-
}
|
|
55
44
|
createClient(target, profile, context) {
|
|
56
45
|
const clients = new Map();
|
|
57
46
|
const clientFor = (provider) => {
|
|
@@ -62,7 +51,7 @@ export class CompositeProvider {
|
|
|
62
51
|
clients.set(provider, created);
|
|
63
52
|
return created;
|
|
64
53
|
};
|
|
65
|
-
const
|
|
54
|
+
const close = async (options) => {
|
|
66
55
|
const outcomes = await Promise.all([...clients.entries()].map(([provider, client]) => closeAnalysisClient(client, provider.identity().id, options)));
|
|
67
56
|
return outcomes.find((outcome) => !outcome.ok) ?? ok(null);
|
|
68
57
|
};
|
|
@@ -88,10 +77,20 @@ export class CompositeProvider {
|
|
|
88
77
|
requestActivitySnapshots: () => [...clients.values()]
|
|
89
78
|
.flatMap((client) => client.requestActivitySnapshots?.() ?? [])
|
|
90
79
|
.sort((left, right) => left.provider.id.localeCompare(right.provider.id)),
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
80
|
+
operationHealthSnapshot: () => {
|
|
81
|
+
for (const client of clients.values()) {
|
|
82
|
+
const snapshot = client.operationHealthSnapshot?.();
|
|
83
|
+
if (snapshot !== undefined && snapshot.state !== "idle")
|
|
84
|
+
return snapshot;
|
|
85
|
+
}
|
|
86
|
+
for (const client of clients.values()) {
|
|
87
|
+
const snapshot = client.operationHealthSnapshot?.();
|
|
88
|
+
if (snapshot !== undefined)
|
|
89
|
+
return snapshot;
|
|
90
|
+
}
|
|
91
|
+
return undefined;
|
|
94
92
|
},
|
|
93
|
+
close,
|
|
95
94
|
};
|
|
96
95
|
}
|
|
97
96
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AnalysisCancelledError } from "../../domain/analysisErrorCore.js";
|
|
2
2
|
import { AnalysisError } from "../../domain/analysisErrorBase.js";
|
|
3
3
|
import { ProviderAdapterError } from "../../domain/providerAdapterError.js";
|
|
4
|
-
import { err } from "../../domain/result.js";
|
|
4
|
+
import { err, ok } from "../../domain/result.js";
|
|
5
5
|
import { ABORTED, waitForAbortable } from "./AbortablePromise.js";
|
|
6
6
|
const isAborted = (signal) => signal?.aborted === true;
|
|
7
7
|
/**
|
|
@@ -74,13 +74,16 @@ class LazyAnalysisClient {
|
|
|
74
74
|
requestActivitySnapshots() {
|
|
75
75
|
return this.#client?.requestActivitySnapshots?.() ?? [];
|
|
76
76
|
}
|
|
77
|
-
|
|
77
|
+
operationHealthSnapshot() {
|
|
78
|
+
return this.#client?.operationHealthSnapshot?.();
|
|
79
|
+
}
|
|
80
|
+
close = async (options) => {
|
|
78
81
|
this.#closed = true;
|
|
79
82
|
if (this.#loading === undefined)
|
|
80
|
-
return;
|
|
83
|
+
return ok(null);
|
|
81
84
|
const client = await this.#loading;
|
|
82
|
-
|
|
83
|
-
}
|
|
85
|
+
return client.close(options);
|
|
86
|
+
};
|
|
84
87
|
async #load(operation) {
|
|
85
88
|
if (this.#closed)
|
|
86
89
|
throw new ProviderAdapterError(this.#providerId, operation, {
|
|
@@ -1,40 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, } from "../../domain/analysisErrorCore.js";
|
|
3
|
-
import { ProviderAdapterError } from "../../domain/providerAdapterError.js";
|
|
1
|
+
import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js";
|
|
4
2
|
import { ProviderSelectionError } from "../../domain/providerSelectionError.js";
|
|
5
3
|
import {} from "../../domain/analysisErrorBase.js";
|
|
6
|
-
import { jsonObjectSchema } from "../../domain/jsonValue.js";
|
|
7
4
|
import { err, ok } from "../../domain/result.js";
|
|
8
5
|
import { AnalysisProviderRegistry, } from "./AnalysisProviderRegistry.js";
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
/** Resolve either the compatibility single-provider seam or a selectable set. */
|
|
6
|
+
import { CompositeProvider } from "./CompositeProvider.js";
|
|
7
|
+
/** Resolve one registry-selected deep provider and disjoint auxiliary families. */
|
|
12
8
|
export class SessionProviderRouter {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
? { id: "unidentified", name: "Unidentified provider", version: null }
|
|
21
|
-
: provider.identity();
|
|
22
|
-
const capabilities = typeof provider === "function"
|
|
23
|
-
? undefined
|
|
24
|
-
: capabilityMap(provider.capabilities());
|
|
25
|
-
const resolveProfile = options.resolveAnalysisProfile ??
|
|
26
|
-
(typeof provider === "function" ||
|
|
27
|
-
provider.resolveAnalysisProfile === undefined
|
|
28
|
-
? () => Promise.resolve(ok({ profile: null, compatibility: {} }))
|
|
29
|
-
: (target, resolutionOptions) => provider.resolveAnalysisProfile?.(target, resolutionOptions) ??
|
|
30
|
-
Promise.resolve(ok({ profile: null, compatibility: {} })));
|
|
31
|
-
return new SessionProviderRouter({
|
|
32
|
-
kind: "single",
|
|
33
|
-
provider,
|
|
34
|
-
identity,
|
|
35
|
-
capabilities,
|
|
36
|
-
resolveProfile,
|
|
37
|
-
});
|
|
9
|
+
registry;
|
|
10
|
+
auxiliaryProviders;
|
|
11
|
+
route;
|
|
12
|
+
constructor(registry, auxiliaryProviders, route) {
|
|
13
|
+
this.registry = registry;
|
|
14
|
+
this.auxiliaryProviders = auxiliaryProviders;
|
|
15
|
+
this.route = route;
|
|
38
16
|
}
|
|
39
17
|
/** Create selection-aware routing while keeping auxiliary families disjoint. */
|
|
40
18
|
static selectable(registry, auxiliaryProviders) {
|
|
@@ -48,99 +26,31 @@ export class SessionProviderRouter {
|
|
|
48
26
|
if (auxiliaryOperations.has(operation))
|
|
49
27
|
throw new TypeError(`Deep and auxiliary providers both declare operation ${operation}`);
|
|
50
28
|
const initialRoute = selectableRoute(auxiliaryProviders, undefined);
|
|
51
|
-
return new SessionProviderRouter(
|
|
52
|
-
kind: "selectable",
|
|
53
|
-
registry,
|
|
54
|
-
auxiliaryProviders: [...auxiliaryProviders],
|
|
55
|
-
identity: identities.length === 0
|
|
56
|
-
? emptyProviderIdentity()
|
|
57
|
-
: compositeProviderIdentity(identities),
|
|
58
|
-
initialRoute,
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
/** Compatibility identity covering every configured provider. */
|
|
62
|
-
configuredIdentity() {
|
|
63
|
-
return structuredClone(this.runtime.identity);
|
|
64
|
-
}
|
|
65
|
-
/** Provider identities exposed through the flat 1.x compatibility field. */
|
|
66
|
-
providerIdentities(route) {
|
|
67
|
-
if (this.runtime.kind === "single") {
|
|
68
|
-
if (route.capabilities === undefined)
|
|
69
|
-
return [route.identity];
|
|
70
|
-
return uniqueProviderIdentities([...route.capabilities.values()].map(({ provider }) => provider));
|
|
71
|
-
}
|
|
72
|
-
const selected = route.binding?.identity;
|
|
73
|
-
return uniqueProviderIdentities([
|
|
74
|
-
...this.runtime.auxiliaryProviders.map((provider) => provider.identity()),
|
|
75
|
-
...this.runtime.registry
|
|
76
|
-
.identities()
|
|
77
|
-
.map((identity) => identity.id === selected?.id ? selected : identity),
|
|
78
|
-
]);
|
|
29
|
+
return new SessionProviderRouter(registry, [...auxiliaryProviders], initialRoute);
|
|
79
30
|
}
|
|
80
31
|
/** Target-free routes and discovery metadata. */
|
|
81
32
|
initialRoute() {
|
|
82
|
-
|
|
83
|
-
return this.runtime.initialRoute;
|
|
84
|
-
const runtime = this.runtime;
|
|
85
|
-
return {
|
|
86
|
-
identity: structuredClone(runtime.identity),
|
|
87
|
-
capabilities: runtime.capabilities,
|
|
88
|
-
profile: null,
|
|
89
|
-
compatibility: {},
|
|
90
|
-
binding: null,
|
|
91
|
-
selection: undefined,
|
|
92
|
-
createClient: (target, context) => createSingleProviderClient(runtime, target, undefined, context),
|
|
93
|
-
};
|
|
33
|
+
return this.route;
|
|
94
34
|
}
|
|
95
35
|
/** Resolve target routes before any provider client is created. */
|
|
96
36
|
async resolve(target, providerId, signal) {
|
|
97
37
|
const resolutionOptions = signal === undefined ? undefined : { signal };
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
: selected;
|
|
103
|
-
}
|
|
104
|
-
const runtime = this.runtime;
|
|
105
|
-
if (providerId !== undefined &&
|
|
106
|
-
providerId !== "auto" &&
|
|
107
|
-
providerId !== runtime.identity.id)
|
|
108
|
-
return err(new ProviderSelectionError({
|
|
109
|
-
reason: "unknown_provider",
|
|
110
|
-
requestedProviderId: providerId,
|
|
111
|
-
candidateIds: [runtime.identity.id],
|
|
112
|
-
}));
|
|
113
|
-
const resolved = await waitForAbortable(runtime.resolveProfile(target, resolutionOptions), signal);
|
|
114
|
-
if (resolved === ABORTED)
|
|
115
|
-
return err(new AnalysisCancelledError("open_binary"));
|
|
116
|
-
if (!resolved.ok)
|
|
117
|
-
return resolved;
|
|
118
|
-
const normalized = normalizeProfileResolution(resolved.value, runtime.identity.id);
|
|
119
|
-
if (!normalized.ok)
|
|
120
|
-
return normalized;
|
|
121
|
-
return ok({
|
|
122
|
-
identity: structuredClone(runtime.identity),
|
|
123
|
-
capabilities: runtime.capabilities,
|
|
124
|
-
profile: normalized.value.profile,
|
|
125
|
-
compatibility: normalized.value.compatibility,
|
|
126
|
-
binding: null,
|
|
127
|
-
selection: undefined,
|
|
128
|
-
createClient: (openedTarget, context) => createSingleProviderClient(runtime, openedTarget, normalized.value.profile ?? undefined, context),
|
|
129
|
-
});
|
|
38
|
+
const selected = await this.registry.select(target, providerId, resolutionOptions);
|
|
39
|
+
return selected.ok
|
|
40
|
+
? ok(selectableRoute(this.auxiliaryProviders, selected.value))
|
|
41
|
+
: selected;
|
|
130
42
|
}
|
|
131
43
|
/** Candidate status authoritative for the active or target-free route. */
|
|
132
44
|
candidateStatuses(route) {
|
|
133
|
-
|
|
134
|
-
return [];
|
|
135
|
-
return route.selection?.candidates ?? this.runtime.registry.candidates();
|
|
45
|
+
return route.selection?.candidates ?? this.registry.candidates();
|
|
136
46
|
}
|
|
137
47
|
/** Produce exact candidate rejections for an intentionally unbound route. */
|
|
138
48
|
unboundOperationError(operation, route) {
|
|
139
|
-
if (
|
|
140
|
-
route.
|
|
141
|
-
|
|
49
|
+
if (route.binding !== null ||
|
|
50
|
+
route.selection === undefined ||
|
|
51
|
+
!this.registry.declaredOperations().includes(operation))
|
|
142
52
|
return undefined;
|
|
143
|
-
return this.
|
|
53
|
+
return this.registry.unboundOperationError(operation, route.selection);
|
|
144
54
|
}
|
|
145
55
|
}
|
|
146
56
|
const selectableRoute = (auxiliaryProviders, selection) => {
|
|
@@ -149,23 +59,23 @@ const selectableRoute = (auxiliaryProviders, selection) => {
|
|
|
149
59
|
...auxiliaryProviders,
|
|
150
60
|
...(binding === null ? [] : [binding.provider]),
|
|
151
61
|
];
|
|
152
|
-
const provider =
|
|
62
|
+
const provider = binding === null && providers.length === 1
|
|
63
|
+
? providers[0]
|
|
64
|
+
: providers.length === 0
|
|
65
|
+
? undefined
|
|
66
|
+
: new CompositeProvider(providers);
|
|
153
67
|
const identity = provider?.identity() ?? emptyProviderIdentity();
|
|
154
68
|
const capabilities = capabilityMap(provider?.capabilities() ?? []);
|
|
155
69
|
return {
|
|
156
70
|
identity,
|
|
157
71
|
capabilities,
|
|
158
72
|
profile: binding?.profile ?? null,
|
|
159
|
-
compatibility: structuredClone(binding?.compatibility ?? {}),
|
|
160
73
|
binding,
|
|
161
74
|
selection,
|
|
162
75
|
createClient: (target, context) => provider?.createClient(target, binding?.profile, context) ??
|
|
163
76
|
emptyClient(identity),
|
|
164
77
|
};
|
|
165
78
|
};
|
|
166
|
-
const createSingleProviderClient = (runtime, target, profile, context) => typeof runtime.provider === "function"
|
|
167
|
-
? runtime.provider(target, profile, context)
|
|
168
|
-
: runtime.provider.createClient(target, profile, context);
|
|
169
79
|
const emptyClient = (identity) => ({
|
|
170
80
|
execute: (operation) => operation === "health"
|
|
171
81
|
? Promise.resolve(ok({
|
|
@@ -177,7 +87,7 @@ const emptyClient = (identity) => ({
|
|
|
177
87
|
subject: null,
|
|
178
88
|
}))
|
|
179
89
|
: Promise.resolve(err(new AnalysisCapabilityUnavailableError(identity.id, operation, "operation is not declared by this provider set"))),
|
|
180
|
-
close: () => Promise.resolve(),
|
|
90
|
+
close: () => Promise.resolve(ok(null)),
|
|
181
91
|
});
|
|
182
92
|
const emptyProviderIdentity = () => ({
|
|
183
93
|
id: "composite:none",
|
|
@@ -185,9 +95,6 @@ const emptyProviderIdentity = () => ({
|
|
|
185
95
|
version: null,
|
|
186
96
|
});
|
|
187
97
|
const capabilityMap = (capabilities) => new Map(capabilities.map((descriptor) => [descriptor.operation, descriptor]));
|
|
188
|
-
const uniqueProviderIdentities = (identities) => [...new Map(identities.map((identity) => [identity.id, identity])).values()]
|
|
189
|
-
.sort((left, right) => left.id.localeCompare(right.id))
|
|
190
|
-
.map((identity) => structuredClone(identity));
|
|
191
98
|
const assertDisjoint = (providers) => {
|
|
192
99
|
const routes = new Set();
|
|
193
100
|
for (const provider of providers)
|
|
@@ -206,18 +113,3 @@ const assertUniqueProviderIds = (identities) => {
|
|
|
206
113
|
ids.add(identity.id);
|
|
207
114
|
}
|
|
208
115
|
};
|
|
209
|
-
const normalizeProfileResolution = (resolution, providerId) => {
|
|
210
|
-
try {
|
|
211
|
-
return ok({
|
|
212
|
-
profile: resolution.profile === null
|
|
213
|
-
? null
|
|
214
|
-
: analysisProfileSchema.parse(resolution.profile),
|
|
215
|
-
compatibility: jsonObjectSchema.parse(resolution.compatibility),
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
catch (cause) {
|
|
219
|
-
return err(new ProviderAdapterError(providerId, "resolve_analysis_profile", {
|
|
220
|
-
cause,
|
|
221
|
-
}));
|
|
222
|
-
}
|
|
223
|
-
};
|
|
@@ -2,7 +2,7 @@ import { isAbsolute } from "node:path";
|
|
|
2
2
|
import { AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, } from "../../domain/analysisErrorCore.js";
|
|
3
3
|
import { createEvidence } from "../../domain/evidence.js";
|
|
4
4
|
import { inspectBinaryLayoutInputSchema, binaryLayoutSchema, } from "../../domain/native/binaryLayout.js";
|
|
5
|
-
import {
|
|
5
|
+
import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js";
|
|
6
6
|
import { err, ok } from "../../domain/result.js";
|
|
7
7
|
const OPERATION = "inspect_binary_layout";
|
|
8
8
|
/** Shared CLI/MCP validation and Evidence composition for offline layout inspection. */
|
|
@@ -17,7 +17,9 @@ export class BinaryLayoutService {
|
|
|
17
17
|
return err(new AnalysisCancelledError(OPERATION));
|
|
18
18
|
const input = inspectBinaryLayoutInputSchema.safeParse(rawInput);
|
|
19
19
|
if (!input.success)
|
|
20
|
-
return err(
|
|
20
|
+
return err(analysisInputErrorFromIssues(OPERATION, input.error.issues, rawInput, {
|
|
21
|
+
cause: input.error,
|
|
22
|
+
}));
|
|
21
23
|
if (!isAbsolute(input.data.path))
|
|
22
24
|
return err(new AnalysisInputError(OPERATION, undefined, [
|
|
23
25
|
{
|
|
@@ -2,7 +2,7 @@ import { isAbsolute } from "node:path";
|
|
|
2
2
|
import { AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, } from "../../domain/analysisErrorCore.js";
|
|
3
3
|
import { createEvidence } from "../../domain/evidence.js";
|
|
4
4
|
import { inspectRecordedCrashInputSchema, recordedCrashSchema, } from "../../domain/native/recordedCrash.js";
|
|
5
|
-
import {
|
|
5
|
+
import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js";
|
|
6
6
|
import { err, ok } from "../../domain/result.js";
|
|
7
7
|
const OPERATION = "inspect_recorded_crash";
|
|
8
8
|
/** Shared CLI/MCP validation and Evidence composition for recorded crash inspection. */
|
|
@@ -17,7 +17,9 @@ export class RecordedCrashService {
|
|
|
17
17
|
return err(new AnalysisCancelledError(OPERATION));
|
|
18
18
|
const input = inspectRecordedCrashInputSchema.safeParse(rawInput);
|
|
19
19
|
if (!input.success)
|
|
20
|
-
return err(
|
|
20
|
+
return err(analysisInputErrorFromIssues(OPERATION, input.error.issues, rawInput, {
|
|
21
|
+
cause: input.error,
|
|
22
|
+
}));
|
|
21
23
|
if (!isAbsolute(input.data.path))
|
|
22
24
|
return err(new AnalysisInputError(OPERATION, undefined, [
|
|
23
25
|
{
|
|
@@ -3,7 +3,7 @@ import { z } from "zod";
|
|
|
3
3
|
import { AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, } from "../../domain/analysisErrorCore.js";
|
|
4
4
|
import { createEvidence } from "../../domain/evidence.js";
|
|
5
5
|
import { inspectEvmInterfaceInputSchema, evmInterfaceSchema, } from "../../domain/evm/evmInterface.js";
|
|
6
|
-
import {
|
|
6
|
+
import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js";
|
|
7
7
|
import { err, ok } from "../../domain/result.js";
|
|
8
8
|
const OPERATION = "inspect_evm_interface";
|
|
9
9
|
const diagnosticsSchema = z.object({
|
|
@@ -21,7 +21,9 @@ export class EvmInterfaceService {
|
|
|
21
21
|
return err(new AnalysisCancelledError(OPERATION));
|
|
22
22
|
const input = inspectEvmInterfaceInputSchema.safeParse(rawInput);
|
|
23
23
|
if (!input.success)
|
|
24
|
-
return err(
|
|
24
|
+
return err(analysisInputErrorFromIssues(OPERATION, input.error.issues, rawInput, {
|
|
25
|
+
cause: input.error,
|
|
26
|
+
}));
|
|
25
27
|
if (!isAbsolute(input.data.path))
|
|
26
28
|
return err(new AnalysisInputError(OPERATION, undefined, [
|
|
27
29
|
{
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { z } from "zod";
|
|
1
4
|
/** Standard executable names and locations used to discover Homebrew. */
|
|
2
5
|
const HOMEBREW_COMMANDS = [
|
|
3
6
|
"brew",
|
|
@@ -17,3 +20,48 @@ export const probeHomebrew = async (probe) => {
|
|
|
17
20
|
}
|
|
18
21
|
return undefined;
|
|
19
22
|
};
|
|
23
|
+
const caskDirectoriesSchema = z
|
|
24
|
+
.object({ appdir: z.string().min(1).optional() })
|
|
25
|
+
.loose();
|
|
26
|
+
const caskConfigSchema = z
|
|
27
|
+
.object({
|
|
28
|
+
default: caskDirectoriesSchema.optional(),
|
|
29
|
+
env: caskDirectoriesSchema.optional(),
|
|
30
|
+
explicit: caskDirectoriesSchema.optional(),
|
|
31
|
+
})
|
|
32
|
+
.loose();
|
|
33
|
+
/**
|
|
34
|
+
* Read the application directory Homebrew recorded when it installed a cask,
|
|
35
|
+
* in Homebrew's precedence: explicit option, then environment, then default.
|
|
36
|
+
* Reading the Caskroom avoids `brew` cask commands, which refresh Homebrew's
|
|
37
|
+
* API and bootsnap caches.
|
|
38
|
+
*/
|
|
39
|
+
export const installedCaskAppdir = async (caskroom, token, home) => {
|
|
40
|
+
let text;
|
|
41
|
+
try {
|
|
42
|
+
text = await readFile(join(caskroom, token, ".metadata", "config.json"), "utf8");
|
|
43
|
+
}
|
|
44
|
+
catch (cause) {
|
|
45
|
+
// An absent or unreadable receipt means the cask is not installed here.
|
|
46
|
+
void cause;
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
let parsed;
|
|
50
|
+
try {
|
|
51
|
+
parsed = JSON.parse(text);
|
|
52
|
+
}
|
|
53
|
+
catch (cause) {
|
|
54
|
+
// A malformed receipt does not identify an application directory.
|
|
55
|
+
void cause;
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
const config = caskConfigSchema.safeParse(parsed);
|
|
59
|
+
if (!config.success)
|
|
60
|
+
return undefined;
|
|
61
|
+
const appdir = config.data.explicit?.appdir ??
|
|
62
|
+
config.data.env?.appdir ??
|
|
63
|
+
config.data.default?.appdir;
|
|
64
|
+
if (appdir === undefined)
|
|
65
|
+
return undefined;
|
|
66
|
+
return appdir.startsWith("~/") ? join(home, appdir.slice(2)) : appdir;
|
|
67
|
+
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import canonicalize from "canonicalize";
|
|
2
|
-
import { createEvidenceBundle, parseEvidenceBundle, validateResidualUnknownAddition, } from "../../domain/evidenceBundle.js";
|
|
2
|
+
import { createEvidenceBundle, createImmutableEvidenceBundle, describeEvidenceBundleFailure, parseEvidenceBundle, validateResidualUnknownAddition, } from "../../domain/evidenceBundle.js";
|
|
3
3
|
import { EvidenceIntegrityError } from "../../domain/evidenceErrors.js";
|
|
4
4
|
import { UnknownRegistryError } from "../../domain/unknownRegistryError.js";
|
|
5
|
-
import { parseEvidence } from "../../domain/evidence.js";
|
|
5
|
+
import { immutableEvidence, parseEvidence, } from "../../domain/evidence.js";
|
|
6
6
|
import { createResidualUnknown, updateResidualUnknown, } from "../../domain/residualUnknown.js";
|
|
7
7
|
import { err, ok } from "../../domain/result.js";
|
|
8
8
|
/** Session-owned set of immutable evidence records. */
|
|
@@ -14,7 +14,7 @@ export class EvidenceLedger {
|
|
|
14
14
|
record(input) {
|
|
15
15
|
let evidence;
|
|
16
16
|
try {
|
|
17
|
-
evidence =
|
|
17
|
+
evidence = immutableEvidence(input);
|
|
18
18
|
}
|
|
19
19
|
catch (cause) {
|
|
20
20
|
return err(new EvidenceIntegrityError("Evidence record validation failed", {
|
|
@@ -23,6 +23,11 @@ export class EvidenceLedger {
|
|
|
23
23
|
}
|
|
24
24
|
const existing = this.#records.get(evidence.evidence_id);
|
|
25
25
|
if (existing !== undefined) {
|
|
26
|
+
// A borrowed record is already authenticated and deeply immutable. Its
|
|
27
|
+
// identity cannot change between reads, so comparing document-sized
|
|
28
|
+
// canonical strings again would add no integrity check.
|
|
29
|
+
if (existing === evidence)
|
|
30
|
+
return ok("duplicate");
|
|
26
31
|
return recordsAgree(existing, evidence)
|
|
27
32
|
? ok("duplicate")
|
|
28
33
|
: err(new EvidenceIntegrityError("Conflicting evidence record"));
|
|
@@ -39,6 +44,7 @@ export class EvidenceLedger {
|
|
|
39
44
|
catch (cause) {
|
|
40
45
|
return err(new EvidenceIntegrityError("Evidence bundle validation failed", {
|
|
41
46
|
cause,
|
|
47
|
+
userMessage: describeEvidenceBundleFailure(input, cause),
|
|
42
48
|
}));
|
|
43
49
|
}
|
|
44
50
|
// A record-only bundle cannot change the already-valid unknown graph. The
|
|
@@ -63,9 +69,9 @@ export class EvidenceLedger {
|
|
|
63
69
|
additions.set(evidence.evidence_id, evidence);
|
|
64
70
|
}
|
|
65
71
|
for (const [id, evidence] of replacements)
|
|
66
|
-
this.#records.set(id, evidence);
|
|
72
|
+
this.#records.set(id, immutableEvidence(evidence));
|
|
67
73
|
for (const [id, evidence] of additions)
|
|
68
|
-
this.#records.set(id, evidence);
|
|
74
|
+
this.#records.set(id, immutableEvidence(evidence));
|
|
69
75
|
return ok({
|
|
70
76
|
recordsAdded: additions.size,
|
|
71
77
|
unknownsAdded: 0,
|
|
@@ -117,6 +123,10 @@ export class EvidenceLedger {
|
|
|
117
123
|
export() {
|
|
118
124
|
return structuredClone(createEvidenceBundle([...this.#records.values()], [...this.#unknownRevisions.values()]));
|
|
119
125
|
}
|
|
126
|
+
/** Borrow a sealed canonical bundle for serialization without copying its records. */
|
|
127
|
+
forSerialization() {
|
|
128
|
+
return createImmutableEvidenceBundle([...this.#records.values()], [...this.#unknownRevisions.values()]);
|
|
129
|
+
}
|
|
120
130
|
/** Check whether one immutable Evidence ID is present in this ledger. */
|
|
121
131
|
has(evidenceId) {
|
|
122
132
|
return this.#records.has(evidenceId);
|
|
@@ -126,6 +136,10 @@ export class EvidenceLedger {
|
|
|
126
136
|
const evidence = this.#records.get(evidenceId);
|
|
127
137
|
return evidence === undefined ? undefined : structuredClone(evidence);
|
|
128
138
|
}
|
|
139
|
+
/** Borrow authenticated immutable Evidence for read-only analysis without a full clone. */
|
|
140
|
+
forAnalysis(evidenceId) {
|
|
141
|
+
return this.#records.get(evidenceId);
|
|
142
|
+
}
|
|
129
143
|
/** Create one approved unknown and atomically append its mutation evidence. */
|
|
130
144
|
recordUnknown(input, mutationEvidence) {
|
|
131
145
|
let parsedMutation;
|
|
@@ -271,7 +285,7 @@ export class EvidenceLedger {
|
|
|
271
285
|
return err(new UnknownRegistryError("integrity", { cause }));
|
|
272
286
|
}
|
|
273
287
|
for (const [id, evidence] of additions)
|
|
274
|
-
this.#records.set(id, evidence);
|
|
288
|
+
this.#records.set(id, immutableEvidence(evidence));
|
|
275
289
|
if (unknown !== undefined && unknownKey !== undefined) {
|
|
276
290
|
this.#unknownRevisions.set(unknownKey, unknown);
|
|
277
291
|
this.#unknownHeads.set(unknown.unknown_id, unknown);
|
|
@@ -290,7 +304,7 @@ export class EvidenceLedger {
|
|
|
290
304
|
#commit(records, unknowns) {
|
|
291
305
|
this.#records.clear();
|
|
292
306
|
for (const [id, evidence] of records)
|
|
293
|
-
this.#records.set(id, evidence);
|
|
307
|
+
this.#records.set(id, immutableEvidence(evidence));
|
|
294
308
|
this.#unknownRevisions.clear();
|
|
295
309
|
this.#unknownHeads.clear();
|
|
296
310
|
for (const [key, unknown] of unknowns) {
|
|
@@ -16,10 +16,18 @@ export class InvestigationRecords {
|
|
|
16
16
|
evidenceById(evidenceId) {
|
|
17
17
|
return this.#evidence.get(evidenceId);
|
|
18
18
|
}
|
|
19
|
+
/** Borrow an immutable authenticated record for a read-only application workflow. */
|
|
20
|
+
evidenceForAnalysis(evidenceId) {
|
|
21
|
+
return this.#evidence.forAnalysis(evidenceId);
|
|
22
|
+
}
|
|
19
23
|
/** Export a detached deterministic bundle of Evidence and Unknown revisions. */
|
|
20
24
|
exportEvidenceBundle() {
|
|
21
25
|
return this.#evidence.export();
|
|
22
26
|
}
|
|
27
|
+
/** Borrow a sealed bundle snapshot for complete JSON serialization. */
|
|
28
|
+
evidenceBundleForSerialization() {
|
|
29
|
+
return this.#evidence.forSerialization();
|
|
30
|
+
}
|
|
23
31
|
/** Atomically merge a bundle and report changes for the owner's post-commit observers. */
|
|
24
32
|
mergeEvidenceBundle(bundle) {
|
|
25
33
|
return this.#evidence.import(bundle);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { canonicalDigest } from "../../domain/comparisonSemantics.js";
|
|
2
2
|
import { createEvidence } from "../../domain/evidence.js";
|
|
3
|
-
import { jsonValueSchema } from "../../domain/jsonValue.js";
|
|
4
|
-
/**
|
|
3
|
+
import { jsonObjectSchema, jsonValueSchema } from "../../domain/jsonValue.js";
|
|
4
|
+
/** Commit the selected Electron experiment and its observed result. */
|
|
5
5
|
export const createElectronActiveEvidence = (input, result, provider) => createEvidence(undefined, provider, {
|
|
6
6
|
predicateType: "rea.electron-active-scenario",
|
|
7
7
|
operation: "capture_electron_scenario",
|
|
@@ -20,14 +20,10 @@ export const createElectronActiveEvidence = (input, result, provider) => createE
|
|
|
20
20
|
"Application host platform and architecture were not observed.",
|
|
21
21
|
],
|
|
22
22
|
});
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
const parameters = (input) => ({
|
|
31
|
-
...scenarioProjection(input),
|
|
32
|
-
scenario_sha256: canonicalDigest(scenarioProjection(input), "Browser scenario"),
|
|
33
|
-
});
|
|
23
|
+
const parameters = (input) => {
|
|
24
|
+
const scenario = jsonObjectSchema.parse(input);
|
|
25
|
+
return {
|
|
26
|
+
...scenario,
|
|
27
|
+
scenario_sha256: canonicalDigest(scenario, "Electron scenario"),
|
|
28
|
+
};
|
|
29
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { setImmediate } from "node:timers/promises";
|
|
2
|
+
import { ArtifactReaderFailure } from "../../artifacts/ArtifactReader.js";
|
|
3
|
+
/** Reject cancelled application work before computing or publishing more results. */
|
|
4
|
+
export const assertJavaScriptAnalysisActive = (signal) => {
|
|
5
|
+
if (signal?.aborted === true)
|
|
6
|
+
throw new ArtifactReaderFailure("cancelled", "JavaScript application analysis cancelled");
|
|
7
|
+
};
|
|
8
|
+
/** Let request control messages run, then recheck the current analysis intent. */
|
|
9
|
+
export const checkpointJavaScriptAnalysis = async (signal) => {
|
|
10
|
+
assertJavaScriptAnalysisActive(signal);
|
|
11
|
+
await setImmediate();
|
|
12
|
+
assertJavaScriptAnalysisActive(signal);
|
|
13
|
+
};
|
|
14
|
+
/** Drive bounded owned-domain steps while permitting cancellation and control I/O. */
|
|
15
|
+
export const completeJavaScriptAnalysisSteps = async (steps, signal) => {
|
|
16
|
+
let deadline = performance.now() + 8;
|
|
17
|
+
try {
|
|
18
|
+
for (;;) {
|
|
19
|
+
assertJavaScriptAnalysisActive(signal);
|
|
20
|
+
const step = steps.next();
|
|
21
|
+
if (step.done) {
|
|
22
|
+
assertJavaScriptAnalysisActive(signal);
|
|
23
|
+
return step.value;
|
|
24
|
+
}
|
|
25
|
+
if (performance.now() >= deadline) {
|
|
26
|
+
await checkpointJavaScriptAnalysis(signal);
|
|
27
|
+
deadline = performance.now() + 8;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
steps.return?.();
|
|
33
|
+
}
|
|
34
|
+
};
|