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
|
@@ -3,13 +3,12 @@ import { buildCallPath } from "../domain/callPath.js";
|
|
|
3
3
|
import { findChangedBehavior } from "../domain/changedBehavior.js";
|
|
4
4
|
import { createEvidence } from "../domain/evidence.js";
|
|
5
5
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
6
|
-
import { verifyReconstruction } from "../domain/reconstructionVerification.js";
|
|
7
6
|
import { correlateStaticAndRuntime } from "../domain/staticRuntimeCorrelation.js";
|
|
8
7
|
import { comparisonClosure, evidenceClosure, functionEvidenceIds, isIncomplete, recordWorkflowEvidence, } from "./registerInvestigationTools/helpers.js";
|
|
9
8
|
import { runDerivedOperation } from "./runDerivedOperation.js";
|
|
10
|
-
import { CALL_PATH_PROVIDER, CHANGED_BEHAVIOR_PROVIDER, RECONSTRUCTION_PROVIDER, STATIC_RUNTIME_PROVIDER, } from "
|
|
9
|
+
import { CALL_PATH_PROVIDER, CHANGED_BEHAVIOR_PROVIDER, RECONSTRUCTION_PROVIDER, STATIC_RUNTIME_PROVIDER, } from "../application/InvestigationProviders.js";
|
|
11
10
|
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
12
|
-
import {
|
|
11
|
+
import { verifyReconstruction } from "../domain/reconstructionVerification.js";
|
|
13
12
|
/** Register Evidence-composed differential investigation workflows. */
|
|
14
13
|
export const registerInvestigationTools = (server, session) => {
|
|
15
14
|
registerChangedBehavior(server, session, toolContract("find_changed_behavior"));
|
|
@@ -21,11 +20,11 @@ const registerChangedBehavior = (server, session, contract) => {
|
|
|
21
20
|
server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
|
|
22
21
|
const closure = evidenceClosure(session, comparisonClosure(input.comparisons));
|
|
23
22
|
if (!closure.ok)
|
|
24
|
-
return toCallToolResult(closure, contract);
|
|
23
|
+
return server.delivery.toCallToolResult(closure, contract);
|
|
25
24
|
const links = closure.value;
|
|
26
25
|
const computed = await runDerivedOperation(context, contract.name, () => findChangedBehavior(input.comparisons));
|
|
27
26
|
if (!computed.ok)
|
|
28
|
-
return toCallToolResult(computed, contract);
|
|
27
|
+
return server.delivery.toCallToolResult(computed, contract);
|
|
29
28
|
const result = computed.value;
|
|
30
29
|
const evidence = createEvidence(undefined, CHANGED_BEHAVIOR_PROVIDER, {
|
|
31
30
|
predicateType: "rea.changed-behavior",
|
|
@@ -51,18 +50,18 @@ const registerChangedBehavior = (server, session, contract) => {
|
|
|
51
50
|
},
|
|
52
51
|
],
|
|
53
52
|
});
|
|
54
|
-
return
|
|
53
|
+
return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
|
|
55
54
|
});
|
|
56
55
|
};
|
|
57
56
|
const registerCallPath = (server, session, contract) => {
|
|
58
57
|
server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
|
|
59
58
|
const closure = evidenceClosure(session, functionEvidenceIds(input.functions));
|
|
60
59
|
if (!closure.ok)
|
|
61
|
-
return toCallToolResult(closure, contract);
|
|
60
|
+
return server.delivery.toCallToolResult(closure, contract);
|
|
62
61
|
const links = closure.value;
|
|
63
62
|
const computed = await runDerivedOperation(context, contract.name, () => buildCallPath(input));
|
|
64
63
|
if (!computed.ok)
|
|
65
|
-
return toCallToolResult(computed, contract);
|
|
64
|
+
return server.delivery.toCallToolResult(computed, contract);
|
|
66
65
|
const result = computed.value;
|
|
67
66
|
const evidence = createEvidence(undefined, CALL_PATH_PROVIDER, {
|
|
68
67
|
predicateType: "rea.call-path",
|
|
@@ -89,7 +88,7 @@ const registerCallPath = (server, session, contract) => {
|
|
|
89
88
|
},
|
|
90
89
|
],
|
|
91
90
|
});
|
|
92
|
-
return
|
|
91
|
+
return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
|
|
93
92
|
});
|
|
94
93
|
};
|
|
95
94
|
const registerStaticRuntime = (server, session, contract) => {
|
|
@@ -99,11 +98,11 @@ const registerStaticRuntime = (server, session, contract) => {
|
|
|
99
98
|
...input.runtime_comparisons,
|
|
100
99
|
]));
|
|
101
100
|
if (!closure.ok)
|
|
102
|
-
return toCallToolResult(closure, contract);
|
|
101
|
+
return server.delivery.toCallToolResult(closure, contract);
|
|
103
102
|
const links = closure.value;
|
|
104
103
|
const computed = await runDerivedOperation(context, contract.name, () => correlateStaticAndRuntime(input));
|
|
105
104
|
if (!computed.ok)
|
|
106
|
-
return toCallToolResult(computed, contract);
|
|
105
|
+
return server.delivery.toCallToolResult(computed, contract);
|
|
107
106
|
const result = computed.value;
|
|
108
107
|
const evidence = createEvidence(undefined, STATIC_RUNTIME_PROVIDER, {
|
|
109
108
|
predicateType: "rea.static-runtime-correlation",
|
|
@@ -117,7 +116,7 @@ const registerStaticRuntime = (server, session, contract) => {
|
|
|
117
116
|
limitations: result.limitations,
|
|
118
117
|
evidenceLinks: links,
|
|
119
118
|
});
|
|
120
|
-
return
|
|
119
|
+
return server.delivery.toEvidenceToolResult(evidence, contract, recordWorkflowEvidence(session, evidence, result.status === "unknown" || result.status === "truncated", {
|
|
121
120
|
question: "Does runtime behavior match the available static analysis?",
|
|
122
121
|
domain: "static-runtime-correlation",
|
|
123
122
|
requiredAuthority: null,
|
|
@@ -128,7 +127,7 @@ const registerStaticRuntime = (server, session, contract) => {
|
|
|
128
127
|
rationale: "Repeat runtime observations and complete the mapped static comparison Evidence.",
|
|
129
128
|
},
|
|
130
129
|
],
|
|
131
|
-
})
|
|
130
|
+
}));
|
|
132
131
|
});
|
|
133
132
|
};
|
|
134
133
|
const registerReconstruction = (server, session, contract) => {
|
|
@@ -136,11 +135,11 @@ const registerReconstruction = (server, session, contract) => {
|
|
|
136
135
|
const owned = session.exportEvidenceBundle();
|
|
137
136
|
const computed = await runDerivedOperation(context, contract.name, () => verifyReconstruction(input.specification, owned));
|
|
138
137
|
if (!computed.ok)
|
|
139
|
-
return toCallToolResult(computed, contract);
|
|
138
|
+
return server.delivery.toCallToolResult(computed, contract);
|
|
140
139
|
const result = computed.value;
|
|
141
140
|
const closure = evidenceClosure(session, result.evidence_links);
|
|
142
141
|
if (!closure.ok)
|
|
143
|
-
return toCallToolResult(closure, contract);
|
|
142
|
+
return server.delivery.toCallToolResult(closure, contract);
|
|
144
143
|
const links = closure.value;
|
|
145
144
|
const evidence = createEvidence(undefined, RECONSTRUCTION_PROVIDER, {
|
|
146
145
|
predicateType: "rea.reconstruction-verification",
|
|
@@ -155,7 +154,7 @@ const registerReconstruction = (server, session, contract) => {
|
|
|
155
154
|
limitations: result.limitations,
|
|
156
155
|
evidenceLinks: links,
|
|
157
156
|
});
|
|
158
|
-
return
|
|
157
|
+
return server.delivery.toEvidenceToolResult(evidence, contract, recordWorkflowEvidence(session, evidence, result.status === "unknown", {
|
|
159
158
|
question: "Does the reconstruction satisfy every declared claim?",
|
|
160
159
|
domain: "reconstruction-verification",
|
|
161
160
|
requiredAuthority: null,
|
|
@@ -164,6 +163,6 @@ const registerReconstruction = (server, session, contract) => {
|
|
|
164
163
|
operation,
|
|
165
164
|
rationale,
|
|
166
165
|
})),
|
|
167
|
-
})
|
|
166
|
+
}));
|
|
168
167
|
});
|
|
169
168
|
};
|
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
import { toolContract } from "../contracts/toolContracts.js";
|
|
2
2
|
import { logToolExecution } from "./toolLogging.js";
|
|
3
3
|
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
4
|
-
import { toCallToolResult } from "./toolResult.js";
|
|
5
4
|
/** Bind optional recovery to its exact named contract without acquiring an engine. */
|
|
6
5
|
export const registerJavaScriptRecoveryTool = (server, service, logger, recordEvidence) => {
|
|
7
6
|
const contract = toolContract("recover_javascript_sources");
|
|
8
7
|
server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
|
|
9
8
|
const result = await logToolExecution(logger, contract.name, () => service.recover(input, { signal: context.mcpReq.signal }));
|
|
10
9
|
if (!result.ok)
|
|
11
|
-
return toCallToolResult(result, contract);
|
|
10
|
+
return server.delivery.toCallToolResult(result, contract);
|
|
12
11
|
const recorded = recordEvidence?.(result.value);
|
|
13
|
-
return
|
|
14
|
-
? toCallToolResult(recorded, contract)
|
|
15
|
-
: toCallToolResult(result, contract);
|
|
12
|
+
return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
|
|
16
13
|
});
|
|
17
14
|
};
|
|
@@ -5,13 +5,13 @@ import { toolContract } from "../contracts/toolContracts.js";
|
|
|
5
5
|
import { observeJavaScriptRuntimeInputSchema } from "../domain/javascript/javascriptRuntimeObservation.js";
|
|
6
6
|
import { logToolExecution } from "./toolLogging.js";
|
|
7
7
|
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
8
|
-
import { toCallToolResult } from "./toolResult.js";
|
|
9
8
|
/** Register passive Inspector tools even when policy keeps them unavailable. */
|
|
10
9
|
export const registerJavaScriptRuntimeObservationTools = (server, options) => {
|
|
10
|
+
const registration = { ...options, delivery: server.delivery };
|
|
11
11
|
const listContract = toolContract("list_javascript_runtime_targets");
|
|
12
12
|
const observeContract = toolContract("observe_javascript_runtime");
|
|
13
|
-
server.registerTool(listContract.name, toolRegistrationOptions(listContract), (input, context) => runRuntimeTool(
|
|
14
|
-
server.registerTool(observeContract.name, toolRegistrationOptions(observeContract), (input, context) => runRuntimeTool(
|
|
13
|
+
server.registerTool(listContract.name, toolRegistrationOptions(listContract), (input, context) => runRuntimeTool(registration, listContract, { input, context }, (parsed, signal) => listJavaScriptRuntimeTargets(options.runtime, parsed, { signal })));
|
|
14
|
+
server.registerTool(observeContract.name, toolRegistrationOptions(observeContract), (input, context) => runRuntimeTool(registration, observeContract, { input, context }, async (parsed, signal) => {
|
|
15
15
|
const request = observeJavaScriptRuntimeInputSchema.parse(parsed);
|
|
16
16
|
return observeJavaScriptRuntime(options.runtime, request, { signal });
|
|
17
17
|
}));
|
|
@@ -19,12 +19,10 @@ export const registerJavaScriptRuntimeObservationTools = (server, options) => {
|
|
|
19
19
|
const runRuntimeTool = async (options, contract, request, execute) => {
|
|
20
20
|
const { input, context } = request;
|
|
21
21
|
if (options.loadFailure !== undefined)
|
|
22
|
-
return toCallToolResult(err(optionalProviderUnavailable(options.loadFailure, contract.name)), contract);
|
|
22
|
+
return options.delivery.toCallToolResult(err(optionalProviderUnavailable(options.loadFailure, contract.name)), contract);
|
|
23
23
|
const result = await logToolExecution(options.logger, contract.name, () => execute(input, context.mcpReq.signal));
|
|
24
24
|
if (!result.ok)
|
|
25
|
-
return toCallToolResult(result, contract);
|
|
25
|
+
return options.delivery.toCallToolResult(result, contract);
|
|
26
26
|
const recorded = options.recordEvidence?.(result.value);
|
|
27
|
-
return
|
|
28
|
-
? toCallToolResult(recorded, contract)
|
|
29
|
-
: toCallToolResult({ ok: true, value: result.value }, contract);
|
|
27
|
+
return options.delivery.toEvidenceToolResult(result.value, contract, recorded);
|
|
30
28
|
};
|
|
@@ -3,7 +3,6 @@ import { compareManagedMembersEvidenceValidated } from "../../application/manage
|
|
|
3
3
|
import { managedMemberComparisonResultSchema } from "../../domain/managed/managedMemberComparison.js";
|
|
4
4
|
import { logToolExecution } from "../toolLogging.js";
|
|
5
5
|
import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
|
|
6
|
-
import { toCallToolResult } from "../toolResult.js";
|
|
7
6
|
import { managedWorkflowContract } from "./contract.js";
|
|
8
7
|
import { resolveManagedEvidence } from "./evidence.js";
|
|
9
8
|
const compareContract = managedWorkflowContract("compare_managed_members");
|
|
@@ -13,9 +12,9 @@ export const registerCompareManagedMembers = (server, options) => {
|
|
|
13
12
|
const leftResolved = resolveManagedEvidence(input.left);
|
|
14
13
|
const rightResolved = resolveManagedEvidence(input.right);
|
|
15
14
|
if (!leftResolved.ok)
|
|
16
|
-
return toCallToolResult(leftResolved, compareContract);
|
|
15
|
+
return server.delivery.toCallToolResult(leftResolved, compareContract);
|
|
17
16
|
if (!rightResolved.ok)
|
|
18
|
-
return toCallToolResult(rightResolved, compareContract);
|
|
17
|
+
return server.delivery.toCallToolResult(rightResolved, compareContract);
|
|
19
18
|
const [left] = leftResolved.value;
|
|
20
19
|
const [right] = rightResolved.value;
|
|
21
20
|
if (left === undefined || right === undefined)
|
|
@@ -23,13 +22,13 @@ export const registerCompareManagedMembers = (server, options) => {
|
|
|
23
22
|
const parsed = { left, right };
|
|
24
23
|
const result = await logToolExecution(options.logger, compareContract.name, () => Promise.resolve(compareManagedMembersEvidenceValidated(parsed)));
|
|
25
24
|
if (!result.ok)
|
|
26
|
-
return toCallToolResult(result, compareContract);
|
|
25
|
+
return server.delivery.toCallToolResult(result, compareContract);
|
|
27
26
|
const recorded = recordSessionEvidenceSources(options.recordEvidence, [
|
|
28
27
|
parsed.left,
|
|
29
28
|
parsed.right,
|
|
30
29
|
]);
|
|
31
30
|
if (!recorded.ok)
|
|
32
|
-
return toCallToolResult(recorded, compareContract);
|
|
31
|
+
return server.delivery.toCallToolResult(recorded, compareContract);
|
|
33
32
|
const comparison = managedMemberComparisonResultSchema.parse(result.value.normalized_result);
|
|
34
33
|
const unknown = comparison.summary.unknown > 0;
|
|
35
34
|
const output = unknown
|
|
@@ -51,8 +50,6 @@ export const registerCompareManagedMembers = (server, options) => {
|
|
|
51
50
|
relationships: [],
|
|
52
51
|
})
|
|
53
52
|
: options.recordEvidence?.(result.value);
|
|
54
|
-
|
|
55
|
-
return toCallToolResult(output, compareContract);
|
|
56
|
-
return toCallToolResult({ ok: true, value: result.value }, compareContract);
|
|
53
|
+
return server.delivery.toEvidenceToolResult(result.value, compareContract, output);
|
|
57
54
|
});
|
|
58
55
|
};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { importManagedReconstructionEvidenceValidated } from "../../application/managed/ManagedReconstructionService.js";
|
|
2
2
|
import { logToolExecution } from "../toolLogging.js";
|
|
3
3
|
import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
|
|
4
|
-
import { toCallToolResult } from "../toolResult.js";
|
|
5
4
|
import { managedWorkflowContract } from "./contract.js";
|
|
6
5
|
import { resolveManagedEvidence } from "./evidence.js";
|
|
7
6
|
const reconstructionContract = managedWorkflowContract("import_managed_reconstruction");
|
|
@@ -10,20 +9,18 @@ export const registerImportManagedReconstruction = (server, options) => {
|
|
|
10
9
|
server.registerTool(reconstructionContract.name, toolRegistrationOptions(reconstructionContract), async (input) => {
|
|
11
10
|
const resolved = resolveManagedEvidence(input.static_members);
|
|
12
11
|
if (!resolved.ok)
|
|
13
|
-
return toCallToolResult(resolved, reconstructionContract);
|
|
12
|
+
return server.delivery.toCallToolResult(resolved, reconstructionContract);
|
|
14
13
|
const staticMembers = resolved.value[0];
|
|
15
14
|
if (staticMembers === undefined)
|
|
16
15
|
throw new TypeError("Managed reconstruction Evidence resolution failed");
|
|
17
16
|
const parsed = { ...input, static_members: staticMembers };
|
|
18
17
|
const result = await logToolExecution(options.logger, reconstructionContract.name, () => Promise.resolve(importManagedReconstructionEvidenceValidated(parsed)));
|
|
19
18
|
if (!result.ok)
|
|
20
|
-
return toCallToolResult(result, reconstructionContract);
|
|
19
|
+
return server.delivery.toCallToolResult(result, reconstructionContract);
|
|
21
20
|
const recordedSource = options.recordEvidence?.(parsed.static_members);
|
|
22
21
|
if (recordedSource !== undefined && !recordedSource.ok)
|
|
23
|
-
return toCallToolResult(recordedSource, reconstructionContract);
|
|
22
|
+
return server.delivery.toCallToolResult(recordedSource, reconstructionContract);
|
|
24
23
|
const recorded = options.recordEvidence?.(result.value);
|
|
25
|
-
|
|
26
|
-
return toCallToolResult(recorded, reconstructionContract);
|
|
27
|
-
return toCallToolResult(result, reconstructionContract);
|
|
24
|
+
return server.delivery.toEvidenceToolResult(result.value, reconstructionContract, recorded);
|
|
28
25
|
});
|
|
29
26
|
};
|
|
@@ -2,7 +2,6 @@ import { recordSessionEvidenceSources } from "../sessionEvidence.js";
|
|
|
2
2
|
import { projectManagedApplicationGraphEvidence } from "../../application/managed/ManagedApplicationGraphService.js";
|
|
3
3
|
import { logToolExecution } from "../toolLogging.js";
|
|
4
4
|
import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
|
|
5
|
-
import { toCallToolResult } from "../toolResult.js";
|
|
6
5
|
import { managedWorkflowContract } from "./contract.js";
|
|
7
6
|
import { resolveManagedArtifactEvidence, resolveManagedBoundaryEvidence, resolveManagedEvidence, sourceEvidence, } from "./evidence.js";
|
|
8
7
|
const graphContract = managedWorkflowContract("project_managed_application_graph");
|
|
@@ -13,17 +12,17 @@ export const registerProjectManagedApplicationGraph = (server, options) => {
|
|
|
13
12
|
? undefined
|
|
14
13
|
: resolveManagedArtifactEvidence(input.managed_artifact);
|
|
15
14
|
if (managedArtifact !== undefined && !managedArtifact.ok)
|
|
16
|
-
return toCallToolResult(managedArtifact, graphContract);
|
|
15
|
+
return server.delivery.toCallToolResult(managedArtifact, graphContract);
|
|
17
16
|
const managedMembers = input.managed_members === undefined
|
|
18
17
|
? undefined
|
|
19
18
|
: resolveManagedEvidence(input.managed_members);
|
|
20
19
|
if (managedMembers !== undefined && !managedMembers.ok)
|
|
21
|
-
return toCallToolResult(managedMembers, graphContract);
|
|
20
|
+
return server.delivery.toCallToolResult(managedMembers, graphContract);
|
|
22
21
|
const managedBoundaries = input.managed_native_boundaries === undefined
|
|
23
22
|
? undefined
|
|
24
23
|
: resolveManagedBoundaryEvidence(input.managed_native_boundaries);
|
|
25
24
|
if (managedBoundaries !== undefined && !managedBoundaries.ok)
|
|
26
|
-
return toCallToolResult(managedBoundaries, graphContract);
|
|
25
|
+
return server.delivery.toCallToolResult(managedBoundaries, graphContract);
|
|
27
26
|
const parsed = {
|
|
28
27
|
managed_artifact: managedArtifact?.value[0],
|
|
29
28
|
managed_members: managedMembers?.value[0],
|
|
@@ -31,13 +30,11 @@ export const registerProjectManagedApplicationGraph = (server, options) => {
|
|
|
31
30
|
};
|
|
32
31
|
const result = await logToolExecution(options.logger, graphContract.name, () => Promise.resolve(projectManagedApplicationGraphEvidence(parsed)));
|
|
33
32
|
if (!result.ok)
|
|
34
|
-
return toCallToolResult(result, graphContract);
|
|
33
|
+
return server.delivery.toCallToolResult(result, graphContract);
|
|
35
34
|
const recordedSources = recordSessionEvidenceSources(options.recordEvidence, sourceEvidence(parsed));
|
|
36
35
|
if (!recordedSources.ok)
|
|
37
|
-
return toCallToolResult(recordedSources, graphContract);
|
|
36
|
+
return server.delivery.toCallToolResult(recordedSources, graphContract);
|
|
38
37
|
const recorded = options.recordEvidence?.(result.value);
|
|
39
|
-
|
|
40
|
-
return toCallToolResult(recorded, graphContract);
|
|
41
|
-
return toCallToolResult(result, graphContract);
|
|
38
|
+
return server.delivery.toEvidenceToolResult(result.value, graphContract, recorded);
|
|
42
39
|
});
|
|
43
40
|
};
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { recordSessionEvidenceSources } from "../sessionEvidence.js";
|
|
2
2
|
import { verifyManagedNativeBoundariesEvidence } from "../../application/managed/ManagedNativeVerificationService.js";
|
|
3
|
-
import { managedNativeVerificationResultSchema } from "../../domain/managed/
|
|
3
|
+
import { managedNativeVerificationResultSchema } from "../../domain/managed/managedNativeVerificationSchemas.js";
|
|
4
4
|
import { logToolExecution } from "../toolLogging.js";
|
|
5
5
|
import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
|
|
6
|
-
import { toCallToolResult } from "../toolResult.js";
|
|
7
6
|
import { managedWorkflowContract } from "./contract.js";
|
|
8
7
|
import { resolveManagedBoundaryEvidence, resolveNativeEvidence, } from "./evidence.js";
|
|
9
8
|
const nativeVerificationContract = managedWorkflowContract("verify_managed_native_boundaries");
|
|
@@ -12,10 +11,10 @@ export const registerVerifyManagedNativeBoundaries = (server, options) => {
|
|
|
12
11
|
server.registerTool(nativeVerificationContract.name, toolRegistrationOptions(nativeVerificationContract), async (input) => {
|
|
13
12
|
const managedBoundaries = resolveManagedBoundaryEvidence(input.managed_boundaries);
|
|
14
13
|
if (!managedBoundaries.ok)
|
|
15
|
-
return toCallToolResult(managedBoundaries, nativeVerificationContract);
|
|
14
|
+
return server.delivery.toCallToolResult(managedBoundaries, nativeVerificationContract);
|
|
16
15
|
const nativeObservations = resolveNativeEvidence(input.native_observations);
|
|
17
16
|
if (!nativeObservations.ok)
|
|
18
|
-
return toCallToolResult(nativeObservations, nativeVerificationContract);
|
|
17
|
+
return server.delivery.toCallToolResult(nativeObservations, nativeVerificationContract);
|
|
19
18
|
const managedBoundary = managedBoundaries.value[0];
|
|
20
19
|
if (managedBoundary === undefined)
|
|
21
20
|
throw new TypeError("Managed boundary Evidence resolution failed");
|
|
@@ -26,10 +25,10 @@ export const registerVerifyManagedNativeBoundaries = (server, options) => {
|
|
|
26
25
|
};
|
|
27
26
|
const result = await logToolExecution(options.logger, nativeVerificationContract.name, () => Promise.resolve(verifyManagedNativeBoundariesEvidence(parsed)));
|
|
28
27
|
if (!result.ok)
|
|
29
|
-
return toCallToolResult(result, nativeVerificationContract);
|
|
28
|
+
return server.delivery.toCallToolResult(result, nativeVerificationContract);
|
|
30
29
|
const recordedSources = recordSessionEvidenceSources(options.recordEvidence, [parsed.managed_boundaries, ...parsed.native_observations]);
|
|
31
30
|
if (!recordedSources.ok)
|
|
32
|
-
return toCallToolResult(recordedSources, nativeVerificationContract);
|
|
31
|
+
return server.delivery.toCallToolResult(recordedSources, nativeVerificationContract);
|
|
33
32
|
const verification = managedNativeVerificationResultSchema.parse(result.value.normalized_result);
|
|
34
33
|
const unknown = verification.summary.unresolved > 0 ||
|
|
35
34
|
verification.summary.contradicted > 0 ||
|
|
@@ -57,8 +56,6 @@ export const registerVerifyManagedNativeBoundaries = (server, options) => {
|
|
|
57
56
|
relationships: [],
|
|
58
57
|
})
|
|
59
58
|
: options.recordEvidence?.(result.value);
|
|
60
|
-
|
|
61
|
-
return toCallToolResult(output, nativeVerificationContract);
|
|
62
|
-
return toCallToolResult(result, nativeVerificationContract);
|
|
59
|
+
return server.delivery.toEvidenceToolResult(result.value, nativeVerificationContract, output);
|
|
63
60
|
});
|
|
64
61
|
};
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
1
|
import { OFFICIAL_TOOL_CONTRACTS } from "../contracts/officialToolContracts.js";
|
|
3
2
|
import { createEvidence } from "../domain/evidence.js";
|
|
4
|
-
import { jsonObjectSchema
|
|
3
|
+
import { jsonObjectSchema } from "../domain/jsonValue.js";
|
|
5
4
|
import { mcpProgressReporter } from "./mcpProgress.js";
|
|
6
5
|
import { logToolExecution } from "./toolLogging.js";
|
|
7
6
|
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
8
|
-
import { toCallToolResult } from "./toolResult.js";
|
|
9
7
|
/** Register direct bridge proxies, preserving MCP cancellation and typed errors. */
|
|
10
8
|
export const registerOfficialTools = (server, analysis, options) => {
|
|
11
9
|
for (const contract of OFFICIAL_TOOL_CONTRACTS) {
|
|
@@ -18,7 +16,7 @@ export const registerOfficialTools = (server, analysis, options) => {
|
|
|
18
16
|
};
|
|
19
17
|
const registerOfficialTool = (server, analysis, contract, registration) => {
|
|
20
18
|
server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
|
|
21
|
-
const arguments_ =
|
|
19
|
+
const arguments_ = jsonObjectSchema.parse(contract.inputSchema.parse(input));
|
|
22
20
|
const progress = mcpProgressReporter(context);
|
|
23
21
|
const result = await runOfficialOperation(analysis, contract, arguments_, {
|
|
24
22
|
logger: registration.logger,
|
|
@@ -26,7 +24,7 @@ const registerOfficialTool = (server, analysis, contract, registration) => {
|
|
|
26
24
|
progress,
|
|
27
25
|
});
|
|
28
26
|
if (!result.ok) {
|
|
29
|
-
return toCallToolResult(result, contract);
|
|
27
|
+
return server.delivery.toCallToolResult(result, contract);
|
|
30
28
|
}
|
|
31
29
|
const evidence = createEvidence(result.value.subject ?? registration.activeTarget?.(), result.value.provider, {
|
|
32
30
|
operation: contract.name,
|
|
@@ -40,9 +38,7 @@ const registerOfficialTool = (server, analysis, contract, registration) => {
|
|
|
40
38
|
locations: result.value.locations,
|
|
41
39
|
});
|
|
42
40
|
const recorded = registration.recordEvidence?.(evidence);
|
|
43
|
-
|
|
44
|
-
return toCallToolResult(recorded, contract);
|
|
45
|
-
return toCallToolResult({ ok: true, value: evidence }, contract);
|
|
41
|
+
return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
|
|
46
42
|
});
|
|
47
43
|
};
|
|
48
44
|
const runOfficialOperation = async (analysis, contract, arguments_, execution) => {
|
|
@@ -65,16 +61,3 @@ const runOfficialOperation = async (analysis, contract, arguments_, execution) =
|
|
|
65
61
|
});
|
|
66
62
|
return result;
|
|
67
63
|
};
|
|
68
|
-
const projectOfficialArguments = (contract, input) => {
|
|
69
|
-
// Annotation omissions preserve existing values; they are not Python defaults.
|
|
70
|
-
if (contract.name === "annotate_native_function")
|
|
71
|
-
return jsonObjectSchema.parse(contract.inputSchema.parse(input));
|
|
72
|
-
const parsed = jsonObjectSchema.parse(input);
|
|
73
|
-
if (!(contract.inputSchema instanceof z.ZodObject))
|
|
74
|
-
throw new TypeError("Official tool input contract must be an object schema");
|
|
75
|
-
const projected = {};
|
|
76
|
-
for (const key of Object.keys(contract.inputSchema.shape)) {
|
|
77
|
-
projected[key] = jsonValueSchema.parse(parsed[key] ?? null);
|
|
78
|
-
}
|
|
79
|
-
return projected;
|
|
80
|
-
};
|
|
@@ -1,61 +1,83 @@
|
|
|
1
1
|
import { toolContract } from "../contracts/toolContracts.js";
|
|
2
|
+
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
|
3
|
+
import {} from "../domain/analysisErrorBase.js";
|
|
4
|
+
import { describeValidationFailure } from "../domain/evidenceBundle.js";
|
|
2
5
|
import { EvidenceIntegrityError } from "../domain/evidenceErrors.js";
|
|
3
6
|
import { createEvidence, parseEvidence, } from "../domain/evidence.js";
|
|
4
7
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
5
|
-
import { compareProcessCaptures
|
|
6
|
-
import {
|
|
8
|
+
import { compareProcessCaptures } from "../domain/process/processComparison.js";
|
|
9
|
+
import { parseProcessCapture, } from "../domain/process/processCaptureParsing.js";
|
|
10
|
+
import { err, ok } from "../domain/result.js";
|
|
7
11
|
import { recordDerivedEvidence } from "./recordDerivedEvidence.js";
|
|
8
12
|
import { recordSessionEvidenceSources } from "./sessionEvidence.js";
|
|
9
13
|
import { runDerivedOperation } from "./runDerivedOperation.js";
|
|
10
|
-
import { PROCESS_PROVIDER } from "
|
|
14
|
+
import { PROCESS_PROVIDER } from "../domain/process/processEvidenceProvider.js";
|
|
11
15
|
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
12
|
-
import { toCallToolResult } from "./toolResult.js";
|
|
13
16
|
const PROCESS_CAPTURE_EVIDENCE = {
|
|
14
17
|
operation: "capture_process_scenario",
|
|
15
18
|
predicate: "rea.process-capture",
|
|
16
19
|
};
|
|
17
20
|
const sourceLocations = (left, right) => [...(left ?? []), ...(right ?? [])];
|
|
21
|
+
/**
|
|
22
|
+
* Parse one side and name the failed constraint: tampered Evidence, Evidence
|
|
23
|
+
* from another workflow, or an invalid capture result.
|
|
24
|
+
*/
|
|
25
|
+
const parseCaptureSide = (operation, side, value) => {
|
|
26
|
+
let record;
|
|
27
|
+
try {
|
|
28
|
+
record = parseEvidence(value);
|
|
29
|
+
}
|
|
30
|
+
catch (cause) {
|
|
31
|
+
return err(new EvidenceIntegrityError(`${side} Evidence failed validation`, {
|
|
32
|
+
cause,
|
|
33
|
+
userMessage: `The ${side} Evidence failed validation (${describeValidationFailure(cause)}). Supply unmodified capture Evidence from capture_process_scenario.`,
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
if (record.operation !== PROCESS_CAPTURE_EVIDENCE.operation ||
|
|
37
|
+
record.predicate_type !== PROCESS_CAPTURE_EVIDENCE.predicate)
|
|
38
|
+
return err(new AnalysisInputError(operation, undefined, [
|
|
39
|
+
{
|
|
40
|
+
path: [side],
|
|
41
|
+
reason: "invalid_value",
|
|
42
|
+
message: `Expected process capture Evidence (operation ${PROCESS_CAPTURE_EVIDENCE.operation}, predicate ${PROCESS_CAPTURE_EVIDENCE.predicate}); the ${side} Evidence has operation ${record.operation} and predicate ${record.predicate_type}.`,
|
|
43
|
+
},
|
|
44
|
+
]));
|
|
45
|
+
try {
|
|
46
|
+
return ok({
|
|
47
|
+
record,
|
|
48
|
+
capture: parseProcessCapture(record.normalized_result),
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
catch (cause) {
|
|
52
|
+
return err(new EvidenceIntegrityError(`${side} process capture failed validation`, {
|
|
53
|
+
cause,
|
|
54
|
+
userMessage: `The ${side} Evidence has an invalid process capture result (${describeValidationFailure(cause)}). Recreate the capture with capture_process_scenario.`,
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
};
|
|
18
58
|
/** Register deterministic process-capture comparison and contradiction tracking. */
|
|
19
59
|
export const registerProcessComparisonTool = (server, session, contract, now = Date.now) => {
|
|
20
60
|
server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const computed = await runDerivedOperation(context, contract.name, () => compareProcessCaptures(leftCapture, rightCapture, {
|
|
42
|
-
...(input.max_capture_age_ms === undefined
|
|
43
|
-
? {}
|
|
44
|
-
: { maxCaptureAgeMs: input.max_capture_age_ms }),
|
|
45
|
-
...(input.trace_spec === undefined
|
|
46
|
-
? {}
|
|
47
|
-
: { traceSpecification: input.trace_spec }),
|
|
48
|
-
now,
|
|
49
|
-
}));
|
|
50
|
-
if (!computed.ok)
|
|
51
|
-
return toCallToolResult(computed, contract);
|
|
52
|
-
comparison = computed.value;
|
|
53
|
-
}
|
|
54
|
-
catch (cause) {
|
|
55
|
-
return toCallToolResult(err(new EvidenceIntegrityError(cause instanceof Error
|
|
56
|
-
? cause.message
|
|
57
|
-
: "Invalid process capture")), contract);
|
|
58
|
-
}
|
|
61
|
+
const left = parseCaptureSide(contract.name, "left", input.left);
|
|
62
|
+
if (!left.ok)
|
|
63
|
+
return server.delivery.toCallToolResult(left, contract);
|
|
64
|
+
const right = parseCaptureSide(contract.name, "right", input.right);
|
|
65
|
+
if (!right.ok)
|
|
66
|
+
return server.delivery.toCallToolResult(right, contract);
|
|
67
|
+
const { record: leftRecord, capture: leftCapture } = left.value;
|
|
68
|
+
const { record: rightRecord, capture: rightCapture } = right.value;
|
|
69
|
+
const computed = await runDerivedOperation(context, contract.name, () => compareProcessCaptures(leftCapture, rightCapture, {
|
|
70
|
+
...(input.max_capture_age_ms === undefined
|
|
71
|
+
? {}
|
|
72
|
+
: { maxCaptureAgeMs: input.max_capture_age_ms }),
|
|
73
|
+
...(input.trace_spec === undefined
|
|
74
|
+
? {}
|
|
75
|
+
: { traceSpecification: input.trace_spec }),
|
|
76
|
+
now,
|
|
77
|
+
}));
|
|
78
|
+
if (!computed.ok)
|
|
79
|
+
return server.delivery.toCallToolResult(computed, contract);
|
|
80
|
+
const comparison = computed.value;
|
|
59
81
|
const evidence = createEvidence(undefined, PROCESS_PROVIDER, {
|
|
60
82
|
predicateType: "rea.process-comparison",
|
|
61
83
|
operation: contract.name,
|
|
@@ -77,12 +99,12 @@ export const registerProcessComparisonTool = (server, session, contract, now = D
|
|
|
77
99
|
});
|
|
78
100
|
const recordedSources = recordSessionEvidenceSources((evidence) => session.recordEvidence(evidence), [leftRecord, rightRecord]);
|
|
79
101
|
if (!recordedSources.ok)
|
|
80
|
-
return toCallToolResult(recordedSources, contract);
|
|
81
|
-
return
|
|
102
|
+
return server.delivery.toCallToolResult(recordedSources, contract);
|
|
103
|
+
return server.delivery.toEvidenceToolResult(evidence, contract, recordDerivedEvidence(session, evidence, comparisonUnknownInput({
|
|
82
104
|
left_evidence_id: leftRecord.evidence_id,
|
|
83
105
|
right_evidence_id: rightRecord.evidence_id,
|
|
84
106
|
comparison_evidence_id: evidence.evidence_id,
|
|
85
|
-
}, comparison))
|
|
107
|
+
}, comparison)));
|
|
86
108
|
});
|
|
87
109
|
};
|
|
88
110
|
const comparisonUnknownInput = (parsed, comparison) => {
|
|
@@ -98,14 +120,18 @@ const comparisonUnknownInput = (parsed, comparison) => {
|
|
|
98
120
|
.filter(([, status]) => status !== "unchanged")
|
|
99
121
|
.map(([scope]) => scope)
|
|
100
122
|
.join(", ");
|
|
123
|
+
const contradictory = comparison.status === "changed" &&
|
|
124
|
+
parsed.left_evidence_id !== parsed.right_evidence_id;
|
|
101
125
|
// Unknown identity uses the question, not its supporting records. Bind the
|
|
102
126
|
// question to this comparison so distinct capture pairs and policies coexist.
|
|
103
127
|
return {
|
|
104
|
-
question:
|
|
128
|
+
question: `${contradictory ? "Process captures disagree" : `Process comparison is ${comparison.status}`} across: ${differingScopes} (comparison ${parsed.comparison_evidence_id})`,
|
|
105
129
|
severity: "high",
|
|
106
130
|
domain: "process-comparison",
|
|
107
|
-
supporting_evidence_ids:
|
|
108
|
-
|
|
131
|
+
supporting_evidence_ids: contradictory
|
|
132
|
+
? [parsed.left_evidence_id]
|
|
133
|
+
: [...new Set([parsed.left_evidence_id, parsed.right_evidence_id])],
|
|
134
|
+
contradicting_evidence_ids: contradictory ? [parsed.right_evidence_id] : [],
|
|
109
135
|
required_authority: "controlled-replay",
|
|
110
136
|
required_confidence: "observed",
|
|
111
137
|
required_environment: null,
|
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
import { toolContract } from "../contracts/toolContracts.js";
|
|
2
2
|
import { logToolExecution } from "./toolLogging.js";
|
|
3
3
|
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
4
|
-
import { toCallToolResult } from "./toolResult.js";
|
|
5
4
|
/** Bind recorded crash inspection to its named contract and session Evidence owner. */
|
|
6
5
|
export const registerRecordedCrashTools = (server, service, logger, recordEvidence) => {
|
|
7
6
|
const contract = toolContract("inspect_recorded_crash");
|
|
8
7
|
server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
|
|
9
8
|
const result = await logToolExecution(logger, contract.name, () => service.inspect(input, { signal: context.mcpReq.signal }));
|
|
10
9
|
if (!result.ok)
|
|
11
|
-
return toCallToolResult(result, contract);
|
|
10
|
+
return server.delivery.toCallToolResult(result, contract);
|
|
12
11
|
const recorded = recordEvidence?.(result.value);
|
|
13
|
-
return
|
|
14
|
-
? toCallToolResult(recorded, contract)
|
|
15
|
-
: toCallToolResult(result, contract);
|
|
12
|
+
return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
|
|
16
13
|
});
|
|
17
14
|
};
|