rea-agents 6.1.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 +7 -5
- package/bridge/ghidra/ReaGhidraBridge.java +32 -4
- package/bridge/hopper_bridge.py +6 -1
- package/dist/android/JadxConfiguration.js +87 -7
- package/dist/android/JadxMcpTransport.js +14 -2
- package/dist/android/JadxProvider.js +57 -35
- package/dist/application/BinaryTargetResolver.js +5 -3
- package/dist/application/BrowserEvidence.js +3 -8
- package/dist/application/BrowserScenarioEvidence.js +2 -18
- package/dist/application/CapabilityInventory.js +43 -9
- package/dist/application/ClientConfigurationDocument.js +69 -25
- package/dist/application/DirectAnalysis.js +29 -14
- package/dist/application/DirectAnalysisCleanup.js +72 -0
- package/dist/application/DirectAnalysisStatus.js +4 -5
- package/dist/application/Doctor.js +15 -19
- package/dist/application/DoctorDiagnostics.js +1 -2
- package/dist/application/EnhancedTools.js +51 -6
- package/dist/application/EvidenceBundleFiles.js +8 -3
- package/dist/application/InvestigationProviders.js +9 -1
- package/dist/application/JsonFiles.js +42 -9
- package/dist/application/LinuxHopper.js +9 -6
- package/dist/application/MacHopper.js +15 -18
- package/dist/application/RealHopperAssertions.js +0 -11
- package/dist/application/ReconstructionObligationCandidates.js +1 -1
- package/dist/application/ReferenceSourceImportEntries.js +1 -1
- package/dist/application/Setup.js +8 -16
- package/dist/application/SetupHost.js +16 -27
- package/dist/application/SetupPlan.js +6 -6
- package/dist/application/Uninstall.js +81 -29
- package/dist/application/UpdateMaintenance.js +7 -5
- package/dist/application/UpdateRuntime.js +12 -12
- package/dist/application/WebScriptExportService.js +30 -4
- package/dist/application/WorkflowEvidence.js +25 -2
- 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 +1 -2
- package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
- package/dist/application/binary/AnalysisSnapshotCache.js +10 -8
- package/dist/application/binary/BinarySession.js +70 -29
- package/dist/application/binary/BinarySessionComposition.js +1 -3
- package/dist/application/binary/BinarySessionExecution.js +3 -5
- package/dist/application/binary/BinarySessionOpen.js +1 -1
- package/dist/application/binary/BinarySessionRecords.js +1 -1
- package/dist/application/binary/BinarySessionStatus.js +1 -6
- package/dist/application/binary/CompositeProvider.js +4 -18
- package/dist/application/binary/LazyAnalysisProvider.js +5 -5
- package/dist/application/binary/SessionProviderRouter.js +27 -135
- package/dist/application/homebrew.js +48 -0
- package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +2 -6
- package/dist/application/javascript/JavaScriptApplicationService.js +6 -1
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -3
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +11 -9
- 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 +43 -16
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +46 -6
- package/dist/application/javascript/JavaScriptModuleRelationships.js +1 -1
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
- 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 +42 -19
- package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
- package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
- package/dist/application/process/ProcessCli.js +11 -11
- package/dist/application/process/ProcessEvidence.js +0 -1
- package/dist/artifacts/ArtifactProvider.js +39 -14
- package/dist/artifacts/ArtifactReader.js +31 -0
- package/dist/artifacts/DirectoryArtifactReader.js +2 -1
- package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
- package/dist/artifacts/NativeDmgArtifactReader.js +65 -20
- package/dist/artifacts/SafeOutputTree.js +16 -2
- package/dist/artifacts/ZipArtifactReader.js +11 -4
- package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
- package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
- package/dist/artifacts/apple/KeyedArchiveReader.js +21 -3
- package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +67 -61
- package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
- package/dist/artifacts/inventory/reader.js +3 -3
- package/dist/artifacts/inventory/scanCanonical.js +48 -24
- package/dist/artifacts/inventory/scanReader.js +5 -9
- package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
- package/dist/browser/CdpBrowserProvider.js +2 -3
- package/dist/browser/CdpCaptureEventHandlers.js +2 -4
- package/dist/browser/CdpCaptureEvents.js +0 -1
- package/dist/browser/CdpCaptureValues.js +20 -0
- package/dist/browser/CdpElectronProvider.js +0 -2
- package/dist/browser/CdpElectronScriptEvents.js +2 -8
- package/dist/browser/CdpElectronScripts.js +2 -3
- 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 +2 -56
- package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
- 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/assets/ScriptCaptureAdapters.js +1 -1
- package/dist/browser/history/CaptureFailures.js +6 -2
- package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
- package/dist/catalogIdentity.js +0 -1
- package/dist/cli/analysisViewCommands.js +36 -0
- package/dist/cli/artifactCommands.js +11 -12
- package/dist/cli/coreAnalysisCommands.js +3 -3
- package/dist/cli/coreBinaryCommands.js +32 -27
- package/dist/cli/coreNativeCommands.js +9 -10
- package/dist/cli/electronCommands.js +4 -4
- package/dist/cli/interactiveSetup.js +6 -6
- package/dist/cli/managedCommands.js +7 -8
- package/dist/cli/nativeCallCommands.js +1 -2
- 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.js +16 -8
- package/dist/cliBrowserScenarioCommands.js +2 -2
- package/dist/cliCommandNames.js +1 -0
- package/dist/cliJsonInput.js +15 -1
- 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 +6 -0
- package/dist/config/ghidraStartupTimeout.js +4 -9
- package/dist/config/homeDirectory.js +12 -0
- package/dist/config/mcpResponseBudget.js +9 -1
- package/dist/config/parseConfig.js +7 -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 +2 -2
- package/dist/contracts/enhancedToolContracts.js +4 -3
- package/dist/contracts/evm/evmToolContracts.js +1 -1
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/inputSchemaPresentation.js +90 -0
- package/dist/contracts/investigationExamples.js +4 -3
- package/dist/contracts/javascript/electronToolContracts.js +1 -1
- 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 +5 -10
- 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 +2 -2
- package/dist/contracts/officialToolContracts.js +2 -1
- package/dist/contracts/promptContracts.js +2 -2
- package/dist/contracts/providerSelection.js +1 -1
- package/dist/contracts/sessionToolContracts.js +14 -2
- package/dist/contracts/sessionToolSchemas.js +1 -14
- package/dist/contracts/toolContracts.js +2 -0
- package/dist/contracts/toolEffects.js +1 -0
- package/dist/contracts/toolOutputSchemaGroups.js +136 -92
- package/dist/contracts/toolOutputSchemaPrimitives.js +11 -21
- package/dist/contracts/toolSchemaMetadata.js +18 -69
- package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
- package/dist/contracts/webRuntimeToolContracts.js +1 -1
- package/dist/contracts/webScriptToolContracts.js +1 -1
- package/dist/doctorRuntime.js +7 -5
- package/dist/domain/analysisErrorCore.js +3 -0
- package/dist/domain/analysisErrorPresentation.js +18 -3
- package/dist/domain/analysisErrorProjection.js +24 -5
- 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/androidApplication.js +1 -1
- package/dist/domain/apple/appleApplication.js +1 -1
- package/dist/domain/apple/dylibResolution.js +10 -3
- package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
- package/dist/domain/apple/keyedArchive.js +26 -2
- package/dist/domain/artifactComparison.js +15 -6
- package/dist/domain/artifactGraph.js +16 -3
- package/dist/domain/artifactInventoryEvidence.js +9 -16
- 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/browserCaptureComparison.js +13 -49
- package/dist/domain/browserNetworkEvidence.js +10 -4
- package/dist/domain/browserObservation.js +0 -1
- 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 +3 -4
- package/dist/domain/callPath.js +8 -9
- package/dist/domain/callPathSchemas.js +2 -2
- package/dist/domain/changedBehavior.js +3 -3
- package/dist/domain/completionLedgerGeneration.js +2 -1
- package/dist/domain/configurationErrors.js +12 -0
- package/dist/domain/conformancePackage.js +4 -3
- package/dist/domain/evidence.js +10 -36
- package/dist/domain/evidenceBundle.js +7 -9
- package/dist/domain/evidenceCompletionLedger.js +2 -1
- 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/javascript/electronActiveObservation.js +26 -69
- 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/javascriptApplicationEvidenceSchemas.js +2 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +26 -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/{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/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 +9 -3
- 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/javascriptSemanticDataEffects.js +1 -1
- package/dist/domain/javascript/javascriptSemanticGraph.js +88 -46
- 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 +1 -12
- package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
- package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
- package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
- 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 +47 -54
- package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +0 -1
- package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
- package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
- package/dist/domain/localPath.js +1 -1
- package/dist/domain/managed/managedArtifact.js +6 -4
- package/dist/domain/managed/managedMemberComparison.js +2 -9
- package/dist/domain/managed/managedNativeVerification.js +0 -2
- package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
- package/dist/domain/native/binaryLayout.js +2 -3
- package/dist/domain/native/nativeApiBoundary.js +1 -1
- package/dist/domain/native/nativeCallObservation.js +5 -3
- 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 +13 -12
- 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 +41 -22
- package/dist/domain/process/processObservation.js +10 -2
- package/dist/domain/process/processScenario.js +24 -2
- 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/providerAdapterError.js +2 -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 +3 -3
- package/dist/domain/reconstructionVerificationSchemas.js +2 -1
- package/dist/domain/referenceSourceGraph.js +20 -21
- package/dist/domain/staticRuntimeCorrelation.js +2 -2
- package/dist/domain/stringPatterns.js +6 -0
- package/dist/domain/swiftSymbolClassification.js +61 -0
- package/dist/domain/symbolAnalysis.js +66 -18
- 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 +0 -2
- package/dist/domain/webScriptExport.js +1 -1
- 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/FirmwareProvider.js +4 -4
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
- package/dist/ghidra/GhidraClient.js +91 -32
- package/dist/ghidra/GhidraClientStartup.js +0 -2
- package/dist/ghidra/GhidraDoctor.js +6 -5
- package/dist/ghidra/GhidraFunctionValues.js +3 -5
- package/dist/ghidra/GhidraInstallation.js +40 -12
- package/dist/ghidra/GhidraJavaLaunch.js +6 -2
- package/dist/ghidra/GhidraLauncher.js +15 -7
- package/dist/ghidra/GhidraProvider.js +6 -2
- package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
- package/dist/ghidra/GhidraProviderClient.js +13 -3
- package/dist/ghidra/GhidraSessionError.js +2 -0
- package/dist/ghidra/GhidraSessionRoot.js +39 -0
- package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
- package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
- package/dist/hopper/BridgeLauncher.js +34 -45
- package/dist/hopper/HopperAnalysisProfile.js +3 -8
- package/dist/hopper/HopperCleanup.js +56 -27
- package/dist/hopper/HopperClient.js +86 -65
- package/dist/hopper/HopperMachOImage.js +3 -2
- package/dist/hopper/HopperProvider.js +16 -18
- package/dist/hopper/HopperRegexSearch.js +3 -6
- package/dist/hopper/HopperTargetLease.js +132 -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/V8InspectorCaptureProjection.js +1 -1
- package/dist/inspector/V8InspectorProvider.js +38 -28
- package/dist/javascript/recovery/WakaruCommand.js +7 -2
- package/dist/javascript/recovery/WakaruExecution.js +5 -2
- 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/native/AppleMachoSelection.js +16 -6
- package/dist/native/CommandRunner.js +9 -7
- package/dist/native/LldbCallTracer.js +8 -2
- package/dist/native/NativeMacOSProvider.js +25 -15
- package/dist/native/NativeUiHelperRuntime.js +11 -2
- package/dist/native/NativeUiObservation.js +2 -2
- package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
- package/dist/process/DarwinProcessRunTokenReader.js +16 -2
- package/dist/process/ExecFileOutput.js +88 -6
- package/dist/process/PrivateRuntimeRoot.js +10 -5
- package/dist/process/ProcessOwnership.js +1 -4
- package/dist/process/ProcessOwnershipObservation.js +11 -5
- package/dist/process/ProviderProcess.js +1 -3
- package/dist/process/capture/FilesystemSnapshot.js +50 -13
- package/dist/process/capture/ProcessCaptureError.js +13 -0
- package/dist/process/capture/ProcessCaptureLifecycle.js +158 -70
- 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 +25 -14
- package/dist/server/createServer.js +49 -36
- 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 -3
- 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 -2
- 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 +4 -5
- package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
- package/dist/server/registerBrowserScenarioTool.js +3 -4
- package/dist/server/registerBrowserTools.js +13 -16
- package/dist/server/registerBundleComparisonTool.js +5 -6
- package/dist/server/registerCloseLifecycleTool.js +2 -3
- package/dist/server/registerElectronTools.js +10 -13
- package/dist/server/registerEnhancedTools.js +23 -23
- package/dist/server/registerEvidenceTools.js +3 -4
- package/dist/server/registerEvmTools.js +2 -3
- package/dist/server/registerFirmwareTools.js +2 -3
- package/dist/server/registerFunctionComparisonTool.js +7 -8
- package/dist/server/registerInvestigationTools.js +14 -15
- package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
- package/dist/server/registerOfficialTools.js +4 -19
- package/dist/server/registerProcessComparisonTool.js +8 -8
- package/dist/server/registerRecordedCrashTools.js +2 -3
- package/dist/server/registerSessionRecordTools.js +15 -19
- package/dist/server/registerSessionStatusTool.js +3 -4
- package/dist/server/registerSessionTools.js +12 -18
- package/dist/server/registerWebModuleTool.js +2 -3
- package/dist/server/registerWebNetworkCaptureTool.js +2 -3
- package/dist/server/registerWebRuntimeTools.js +4 -5
- package/dist/server/registerWebScriptTool.js +2 -3
- package/dist/server/registerWebSourceLocationTool.js +2 -3
- package/dist/server/toolResult.js +66 -94
- package/dist/server/toolResultEncoding.js +11 -10
- package/dist/windows/WindowsNativeLoader.js +1 -0
- package/dist/windows/WindowsOwnedProcess.js +60 -15
- package/dist/windows/WindowsPrivateRuntime.js +7 -8
- 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 +39 -30
- package/scripts/rea.mjs +3 -6
- package/skills/reverse-engineer-anything/SKILL.md +9 -8
- 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 +16 -6
- 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/main/reload.js +0 -12
- package/dist/main/state.js +0 -3
- package/dist/server/sessionToolPolicies.js +0 -2
|
@@ -1,15 +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, toEvidenceToolResult } from "./toolResult.js";
|
|
5
4
|
/** Bind offline layout inspection to its named contract and session Evidence owner. */
|
|
6
5
|
export const registerBinaryDiagnosticsTools = (server, service, logger, recordEvidence) => {
|
|
7
6
|
const contract = toolContract("inspect_binary_layout");
|
|
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 toEvidenceToolResult(result.value, contract, recorded);
|
|
12
|
+
return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
|
|
14
13
|
});
|
|
15
14
|
};
|
|
@@ -5,20 +5,19 @@ import { toolContract } from "../contracts/toolContracts.js";
|
|
|
5
5
|
import { browserScenarioSchema } from "../domain/browserScenario.js";
|
|
6
6
|
import { logToolExecution } from "./toolLogging.js";
|
|
7
7
|
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
8
|
-
import { toCallToolResult, toEvidenceToolResult } from "./toolResult.js";
|
|
9
8
|
/** Register the browser scenario tool with execution-time provider diagnostics. */
|
|
10
9
|
export const registerBrowserScenarioTool = (server, options) => {
|
|
11
10
|
const contract = toolContract("capture_browser_scenario");
|
|
12
11
|
server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
|
|
13
12
|
const scenario = browserScenarioSchema.parse(input);
|
|
14
13
|
if (options.loadFailure !== undefined)
|
|
15
|
-
return toCallToolResult(err(optionalProviderUnavailable(options.loadFailure, contract.name)), contract);
|
|
14
|
+
return server.delivery.toCallToolResult(err(optionalProviderUnavailable(options.loadFailure, contract.name)), contract);
|
|
16
15
|
const result = await logToolExecution(options.logger, contract.name, () => captureBrowserScenario(options.provider, scenario, {
|
|
17
16
|
signal: context.mcpReq.signal,
|
|
18
17
|
}));
|
|
19
18
|
if (!result.ok)
|
|
20
|
-
return toCallToolResult(result, contract);
|
|
19
|
+
return server.delivery.toCallToolResult(result, contract);
|
|
21
20
|
const recorded = options.recordEvidence?.(result.value);
|
|
22
|
-
return toEvidenceToolResult(result.value, contract, recorded);
|
|
21
|
+
return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
|
|
23
22
|
});
|
|
24
23
|
};
|
|
@@ -7,10 +7,10 @@ import { inspectWebPageInputSchema } from "../domain/browserObservation.js";
|
|
|
7
7
|
import { mcpProgressReporter } from "./mcpProgress.js";
|
|
8
8
|
import { logToolExecution } from "./toolLogging.js";
|
|
9
9
|
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
10
|
-
import { toCallToolResult, toEvidenceToolResult } from "./toolResult.js";
|
|
11
10
|
/** Register browser tools with execution-time provider diagnostics. */
|
|
12
11
|
// oxlint-disable-next-line max-lines-per-function -- direct SDK calls retain each schema-handler type correlation.
|
|
13
12
|
export const registerBrowserTools = (server, options) => {
|
|
13
|
+
const registration = { ...options, delivery: server.delivery };
|
|
14
14
|
const listContract = toolContract("list_browser_targets");
|
|
15
15
|
const inspectContract = toolContract("inspect_web_page");
|
|
16
16
|
const analyzeContract = toolContract("analyze_web_bundle");
|
|
@@ -19,42 +19,39 @@ export const registerBrowserTools = (server, options) => {
|
|
|
19
19
|
const captureDiffContract = toolContract("compare_web_captures");
|
|
20
20
|
const screenshotContract = toolContract("capture_web_screenshot");
|
|
21
21
|
const screenshotDiffContract = toolContract("compare_web_screenshots");
|
|
22
|
-
server.registerTool(listContract.name, toolRegistrationOptions(listContract), (input, context) => runBrowserTool(
|
|
22
|
+
server.registerTool(listContract.name, toolRegistrationOptions(listContract), (input, context) => runBrowserTool(registration, listContract, { input, context }, (parsed, { signal }) => listBrowserTargets(options.browser, parsed, {
|
|
23
23
|
signal,
|
|
24
24
|
})));
|
|
25
|
-
server.registerTool(inspectContract.name, toolRegistrationOptions(inspectContract), (input, context) => runBrowserTool(
|
|
26
|
-
server.registerTool(analyzeContract.name, toolRegistrationOptions(analyzeContract), (input, context) => runBrowserTool(
|
|
25
|
+
server.registerTool(inspectContract.name, toolRegistrationOptions(inspectContract), (input, context) => runBrowserTool(registration, inspectContract, { input, context }, (parsed, { signal, progress }) => inspectWebPage(options.browser, inspectWebPageInputSchema.parse(parsed), { signal, progress })));
|
|
26
|
+
server.registerTool(analyzeContract.name, toolRegistrationOptions(analyzeContract), (input, context) => runBrowserTool(registration, analyzeContract, { input, context }, (parsed, { signal, progress }) => analyzeWebBundle(options.browser, analyzeWebBundleInputSchema.parse(parsed), {
|
|
27
27
|
signal,
|
|
28
28
|
progress,
|
|
29
29
|
})));
|
|
30
|
-
server.registerTool(sessionContract.name, toolRegistrationOptions(sessionContract), (input, context) => runBrowserTool(
|
|
30
|
+
server.registerTool(sessionContract.name, toolRegistrationOptions(sessionContract), (input, context) => runBrowserTool(registration, sessionContract, { input, context }, (parsed, { signal, progress }) => observeWebSession(options.browser, parsed, {
|
|
31
31
|
signal,
|
|
32
32
|
progress,
|
|
33
33
|
})));
|
|
34
|
-
server.registerTool(webMcpContract.name, toolRegistrationOptions(webMcpContract), (input, context) => runBrowserTool(
|
|
34
|
+
server.registerTool(webMcpContract.name, toolRegistrationOptions(webMcpContract), (input, context) => runBrowserTool(registration, webMcpContract, { input, context }, (parsed, { signal, progress }) => discoverWebMcpTools(options.browser, parsed, {
|
|
35
35
|
signal,
|
|
36
36
|
progress,
|
|
37
37
|
})));
|
|
38
|
-
server.registerTool(captureDiffContract.name, toolRegistrationOptions(captureDiffContract), (input, context) => runBrowserTool(
|
|
39
|
-
server.registerTool(screenshotContract.name, toolRegistrationOptions(screenshotContract), (input, context) => runBrowserTool(
|
|
38
|
+
server.registerTool(captureDiffContract.name, toolRegistrationOptions(captureDiffContract), (input, context) => runBrowserTool(registration, captureDiffContract, { input, context }, (parsed) => compareWebCaptureEvidence(options.browser, parsed)));
|
|
39
|
+
server.registerTool(screenshotContract.name, toolRegistrationOptions(screenshotContract), (input, context) => runBrowserTool(registration, screenshotContract, { input, context }, (parsed, { signal, progress }) => captureWebScreenshot(options.browser, parsed, {
|
|
40
40
|
signal,
|
|
41
41
|
progress,
|
|
42
42
|
})));
|
|
43
|
-
server.registerTool(screenshotDiffContract.name, toolRegistrationOptions(screenshotDiffContract), (input, context) => runBrowserTool(
|
|
43
|
+
server.registerTool(screenshotDiffContract.name, toolRegistrationOptions(screenshotDiffContract), (input, context) => runBrowserTool(registration, screenshotDiffContract, { input, context }, (parsed) => compareWebScreenshotEvidence(options.browser, parsed)));
|
|
44
44
|
};
|
|
45
45
|
const runBrowserTool = async (options, contract, request, execute) => {
|
|
46
46
|
const { input, context } = request;
|
|
47
47
|
if (options.loadFailure !== undefined)
|
|
48
|
-
return toCallToolResult(err(optionalProviderUnavailable(options.loadFailure, contract.name)), contract);
|
|
48
|
+
return options.delivery.toCallToolResult(err(optionalProviderUnavailable(options.loadFailure, contract.name)), contract);
|
|
49
49
|
const result = await logToolExecution(options.logger, contract.name, () => execute(input, {
|
|
50
50
|
signal: context.mcpReq.signal,
|
|
51
51
|
progress: mcpProgressReporter(context),
|
|
52
52
|
}));
|
|
53
53
|
if (!result.ok)
|
|
54
|
-
return toCallToolResult(result, contract);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const evidenceResult = (options, contract, evidence) => {
|
|
58
|
-
const recorded = options.recordEvidence?.(evidence);
|
|
59
|
-
return toEvidenceToolResult(evidence, contract, recorded);
|
|
54
|
+
return options.delivery.toCallToolResult(result, contract);
|
|
55
|
+
const recorded = options.recordEvidence?.(result.value);
|
|
56
|
+
return options.delivery.toEvidenceToolResult(result.value, contract, recorded);
|
|
60
57
|
};
|
|
@@ -4,9 +4,8 @@ import { compareBundles } from "../domain/bundleComparison.js";
|
|
|
4
4
|
import { createEvidence } from "../domain/evidence.js";
|
|
5
5
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
6
6
|
import { runDerivedOperation } from "./runDerivedOperation.js";
|
|
7
|
-
import { BUNDLE_COMPARISON_PROVIDER } from "
|
|
7
|
+
import { BUNDLE_COMPARISON_PROVIDER } from "../application/InvestigationProviders.js";
|
|
8
8
|
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
9
|
-
import { toCallToolResult, toEvidenceToolResult } from "./toolResult.js";
|
|
10
9
|
/** Register canonical Evidence bundle comparison. */
|
|
11
10
|
export const registerBundleComparisonTool = (server, session, contract) => {
|
|
12
11
|
server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
|
|
@@ -15,12 +14,12 @@ export const registerBundleComparisonTool = (server, session, contract) => {
|
|
|
15
14
|
readEvidenceBundle(input.right_bundle_path),
|
|
16
15
|
]);
|
|
17
16
|
if (!left.ok)
|
|
18
|
-
return toCallToolResult(left, contract);
|
|
17
|
+
return server.delivery.toCallToolResult(left, contract);
|
|
19
18
|
if (!right.ok)
|
|
20
|
-
return toCallToolResult(right, contract);
|
|
19
|
+
return server.delivery.toCallToolResult(right, contract);
|
|
21
20
|
const computed = await runDerivedOperation(context, contract.name, () => compareBundles(left.value, right.value, input.record_pairs));
|
|
22
21
|
if (!computed.ok)
|
|
23
|
-
return toCallToolResult(computed, contract);
|
|
22
|
+
return server.delivery.toCallToolResult(computed, contract);
|
|
24
23
|
const comparison = computed.value;
|
|
25
24
|
const evidence = createEvidence(undefined, BUNDLE_COMPARISON_PROVIDER, {
|
|
26
25
|
predicateType: "rea.bundle-comparison",
|
|
@@ -36,6 +35,6 @@ export const registerBundleComparisonTool = (server, session, contract) => {
|
|
|
36
35
|
limitations: comparison.limitations,
|
|
37
36
|
});
|
|
38
37
|
const recorded = session.recordEvidence(evidence);
|
|
39
|
-
return toEvidenceToolResult(evidence, contract, recorded);
|
|
38
|
+
return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
|
|
40
39
|
});
|
|
41
40
|
};
|
|
@@ -3,7 +3,6 @@ import { ok } from "../domain/result.js";
|
|
|
3
3
|
import { mcpProgressReporter } from "./mcpProgress.js";
|
|
4
4
|
import { logToolExecution } from "./toolLogging.js";
|
|
5
5
|
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
6
|
-
import { toCallToolResult } from "./toolResult.js";
|
|
7
6
|
/** Register provider cleanup and optional pre-close snapshot persistence. */
|
|
8
7
|
export const registerCloseLifecycleTool = ({ server, session, logger, closeContract, }) => {
|
|
9
8
|
server.registerTool(closeContract.name, toolRegistrationOptions(closeContract), async (input, context) => {
|
|
@@ -13,13 +12,13 @@ export const registerCloseLifecycleTool = ({ server, session, logger, closeContr
|
|
|
13
12
|
await reportLifecycleStart(progress, closeContract.name);
|
|
14
13
|
const closed = await logToolExecution(logger, closeContract.name, () => session.close({ progress }));
|
|
15
14
|
await reportLifecycleEnd(progress, closeContract.name, closed.ok);
|
|
16
|
-
return toCallToolResult(closed, closeContract);
|
|
15
|
+
return server.delivery.toCallToolResult(closed, closeContract);
|
|
17
16
|
}
|
|
18
17
|
await reportLifecycleStart(progress, closeContract.name, "saving snapshot; closing provider");
|
|
19
18
|
const closed = await logToolExecution(logger, closeContract.name, () => session.closeWithSnapshot(snapshotPath, input.overwrite, {
|
|
20
19
|
progress,
|
|
21
20
|
}));
|
|
22
21
|
await reportLifecycleEnd(progress, closeContract.name, closed.ok);
|
|
23
|
-
return toCallToolResult(closed.ok ? ok({ ...closed.value }) : closed, closeContract);
|
|
22
|
+
return server.delivery.toCallToolResult(closed.ok ? ok({ ...closed.value }) : closed, closeContract);
|
|
24
23
|
});
|
|
25
24
|
};
|
|
@@ -9,28 +9,28 @@ import { inspectElectronPageInputSchema } from "../domain/javascript/electronObs
|
|
|
9
9
|
import { mcpProgressReporter } from "./mcpProgress.js";
|
|
10
10
|
import { logToolExecution } from "./toolLogging.js";
|
|
11
11
|
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
12
|
-
import { toCallToolResult, toEvidenceToolResult } from "./toolResult.js";
|
|
13
12
|
/** Register Electron tools even when a provider is absent. */
|
|
14
13
|
// oxlint-disable-next-line max-lines-per-function -- direct SDK calls retain each schema-handler type correlation.
|
|
15
14
|
export const registerElectronTools = (server, options) => {
|
|
15
|
+
const registration = { ...options, delivery: server.delivery };
|
|
16
16
|
const listContract = toolContract("list_electron_targets");
|
|
17
17
|
const inspectContract = toolContract("inspect_electron_page");
|
|
18
18
|
const analyzeContract = toolContract("analyze_javascript_application");
|
|
19
19
|
const reconcileContract = toolContract("reconcile_javascript_runtime");
|
|
20
20
|
const activeContract = toolContract("capture_electron_scenario");
|
|
21
|
-
server.registerTool(listContract.name, toolRegistrationOptions(listContract), (input, context) => runElectronTool(
|
|
21
|
+
server.registerTool(listContract.name, toolRegistrationOptions(listContract), (input, context) => runElectronTool(registration, listContract, { input, context }, (parsed, { signal }) => listElectronTargets(options.electron, parsed, {
|
|
22
22
|
signal,
|
|
23
23
|
})));
|
|
24
|
-
server.registerTool(inspectContract.name, toolRegistrationOptions(inspectContract), (input, context) => runElectronTool(
|
|
24
|
+
server.registerTool(inspectContract.name, toolRegistrationOptions(inspectContract), (input, context) => runElectronTool(registration, inspectContract, { input, context }, async (parsed, { signal, progress }) => {
|
|
25
25
|
const request = inspectElectronPageInputSchema.parse(parsed);
|
|
26
26
|
return inspectElectronPage(options.electron, request, {
|
|
27
27
|
signal,
|
|
28
28
|
progress,
|
|
29
29
|
});
|
|
30
30
|
}));
|
|
31
|
-
server.registerTool(analyzeContract.name, toolRegistrationOptions(analyzeContract), (input, context) => runElectronTool(
|
|
32
|
-
server.registerTool(reconcileContract.name, toolRegistrationOptions(reconcileContract), (input, context) => runElectronTool(
|
|
33
|
-
server.registerTool(activeContract.name, toolRegistrationOptions(activeContract), (input, context) => runElectronTool(
|
|
31
|
+
server.registerTool(analyzeContract.name, toolRegistrationOptions(analyzeContract), (input, context) => runElectronTool(registration, analyzeContract, { input, context }, (parsed, { signal, progress }) => analyzeJavaScriptApplicationValidated(parsed, { signal, progress })));
|
|
32
|
+
server.registerTool(reconcileContract.name, toolRegistrationOptions(reconcileContract), (input, context) => runElectronTool(registration, reconcileContract, { input, context }, (parsed) => Promise.resolve(reconcileJavaScriptRuntimeEvidenceValidated(parsed))));
|
|
33
|
+
server.registerTool(activeContract.name, toolRegistrationOptions(activeContract), (input, context) => runElectronTool(registration, activeContract, { input, context }, (parsed, { signal, progress }) => captureElectronScenario(options.electronActive, parsed, {
|
|
34
34
|
signal,
|
|
35
35
|
progress,
|
|
36
36
|
})));
|
|
@@ -44,16 +44,13 @@ const runElectronTool = async (options, contract, request, execute) => {
|
|
|
44
44
|
? options.observationLoadFailure
|
|
45
45
|
: undefined;
|
|
46
46
|
if (failure !== undefined)
|
|
47
|
-
return toCallToolResult(err(optionalProviderUnavailable(failure, contract.name)), contract);
|
|
47
|
+
return options.delivery.toCallToolResult(err(optionalProviderUnavailable(failure, contract.name)), contract);
|
|
48
48
|
const result = await logToolExecution(options.logger, contract.name, () => execute(input, {
|
|
49
49
|
signal: context.mcpReq.signal,
|
|
50
50
|
progress: mcpProgressReporter(context),
|
|
51
51
|
}));
|
|
52
52
|
if (!result.ok)
|
|
53
|
-
return toCallToolResult(result, contract);
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
const evidenceResult = (options, contract, evidence) => {
|
|
57
|
-
const recorded = options.recordEvidence?.(evidence);
|
|
58
|
-
return toEvidenceToolResult(evidence, contract, recorded);
|
|
53
|
+
return options.delivery.toCallToolResult(result, contract);
|
|
54
|
+
const recorded = options.recordEvidence?.(result.value);
|
|
55
|
+
return options.delivery.toEvidenceToolResult(result.value, contract, recorded);
|
|
59
56
|
};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { EnhancedTools
|
|
1
|
+
import { EnhancedTools } from "../application/EnhancedTools.js";
|
|
2
2
|
import { createWorkflowEvidence, workflowSnapshotRecord, recordWorkflowUnknowns, } from "../application/WorkflowEvidence.js";
|
|
3
3
|
import { toolContract } from "../contracts/toolContracts.js";
|
|
4
4
|
import { mcpProgressReporter } from "./mcpProgress.js";
|
|
5
5
|
import { logToolExecution } from "./toolLogging.js";
|
|
6
6
|
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
7
|
-
import { toCallToolResult, toEvidenceToolResult } from "./toolResult.js";
|
|
8
7
|
import { executeFunctionAnalysisEvidence } from "../application/FunctionAnalysisEvidence.js";
|
|
9
8
|
/** Register composed workflows against the same port as direct bridge tools. */
|
|
10
9
|
// oxlint-disable-next-line max-lines-per-function -- direct SDK calls retain each schema-handler type correlation.
|
|
11
10
|
export const registerEnhancedTools = (server, analysis, options) => {
|
|
11
|
+
const registration = { ...options, delivery: server.delivery };
|
|
12
12
|
const nativeDispatchMetadata = toolContract("inspect_native_dispatch_metadata");
|
|
13
13
|
const objcClasses = toolContract("get_objc_classes");
|
|
14
14
|
const objcProtocols = toolContract("get_objc_protocols");
|
|
@@ -23,59 +23,59 @@ export const registerEnhancedTools = (server, analysis, options) => {
|
|
|
23
23
|
const traceCallPath = toolContract("trace_call_path");
|
|
24
24
|
const traceNativeUiAction = toolContract("trace_native_ui_action");
|
|
25
25
|
const traceNativeValues = toolContract("trace_native_values");
|
|
26
|
-
server.registerTool(traceNativeValues.name, toolRegistrationOptions(traceNativeValues), (input, context) => executeEnhancedTool(analysis,
|
|
26
|
+
server.registerTool(traceNativeValues.name, toolRegistrationOptions(traceNativeValues), (input, context) => executeEnhancedTool(analysis, registration, traceNativeValues, {
|
|
27
27
|
validatedCall: { name: "trace_native_values", input },
|
|
28
28
|
context,
|
|
29
29
|
}));
|
|
30
|
-
server.registerTool(nativeDispatchMetadata.name, toolRegistrationOptions(nativeDispatchMetadata), (input, context) => executeEnhancedTool(analysis,
|
|
30
|
+
server.registerTool(nativeDispatchMetadata.name, toolRegistrationOptions(nativeDispatchMetadata), (input, context) => executeEnhancedTool(analysis, registration, nativeDispatchMetadata, {
|
|
31
31
|
validatedCall: { name: "inspect_native_dispatch_metadata", input },
|
|
32
32
|
context,
|
|
33
33
|
}));
|
|
34
|
-
server.registerTool(objcClasses.name, toolRegistrationOptions(objcClasses), (input, context) => executeEnhancedTool(analysis,
|
|
34
|
+
server.registerTool(objcClasses.name, toolRegistrationOptions(objcClasses), (input, context) => executeEnhancedTool(analysis, registration, objcClasses, {
|
|
35
35
|
validatedCall: { name: "get_objc_classes", input },
|
|
36
36
|
context,
|
|
37
37
|
}));
|
|
38
|
-
server.registerTool(objcProtocols.name, toolRegistrationOptions(objcProtocols), (input, context) => executeEnhancedTool(analysis,
|
|
38
|
+
server.registerTool(objcProtocols.name, toolRegistrationOptions(objcProtocols), (input, context) => executeEnhancedTool(analysis, registration, objcProtocols, {
|
|
39
39
|
validatedCall: { name: "get_objc_protocols", input },
|
|
40
40
|
context,
|
|
41
41
|
}));
|
|
42
|
-
server.registerTool(batchDecompile.name, toolRegistrationOptions(batchDecompile), (input, context) => executeEnhancedTool(analysis,
|
|
42
|
+
server.registerTool(batchDecompile.name, toolRegistrationOptions(batchDecompile), (input, context) => executeEnhancedTool(analysis, registration, batchDecompile, {
|
|
43
43
|
validatedCall: { name: "batch_decompile", input },
|
|
44
44
|
context,
|
|
45
45
|
}));
|
|
46
|
-
server.registerTool(callGraph.name, toolRegistrationOptions(callGraph), (input, context) => executeEnhancedTool(analysis,
|
|
46
|
+
server.registerTool(callGraph.name, toolRegistrationOptions(callGraph), (input, context) => executeEnhancedTool(analysis, registration, callGraph, {
|
|
47
47
|
validatedCall: { name: "get_call_graph", input },
|
|
48
48
|
context,
|
|
49
49
|
}));
|
|
50
|
-
server.registerTool(swiftTypes.name, toolRegistrationOptions(swiftTypes), (input, context) => executeEnhancedTool(analysis,
|
|
50
|
+
server.registerTool(swiftTypes.name, toolRegistrationOptions(swiftTypes), (input, context) => executeEnhancedTool(analysis, registration, swiftTypes, {
|
|
51
51
|
validatedCall: { name: "analyze_swift_types", input },
|
|
52
52
|
context,
|
|
53
53
|
}));
|
|
54
|
-
server.registerTool(xrefsToName.name, toolRegistrationOptions(xrefsToName), (input, context) => executeEnhancedTool(analysis,
|
|
54
|
+
server.registerTool(xrefsToName.name, toolRegistrationOptions(xrefsToName), (input, context) => executeEnhancedTool(analysis, registration, xrefsToName, {
|
|
55
55
|
validatedCall: { name: "find_xrefs_to_name", input },
|
|
56
56
|
context,
|
|
57
57
|
}));
|
|
58
|
-
server.registerTool(binaryOverview.name, toolRegistrationOptions(binaryOverview), (input, context) => executeEnhancedTool(analysis,
|
|
58
|
+
server.registerTool(binaryOverview.name, toolRegistrationOptions(binaryOverview), (input, context) => executeEnhancedTool(analysis, registration, binaryOverview, {
|
|
59
59
|
validatedCall: { name: "binary_overview", input },
|
|
60
60
|
context,
|
|
61
61
|
}));
|
|
62
|
-
server.registerTool(analyzeFunction.name, toolRegistrationOptions(analyzeFunction), (input, context) => executeEnhancedTool(analysis,
|
|
62
|
+
server.registerTool(analyzeFunction.name, toolRegistrationOptions(analyzeFunction), (input, context) => executeEnhancedTool(analysis, registration, analyzeFunction, {
|
|
63
63
|
validatedCall: { name: "analyze_function", input },
|
|
64
64
|
context,
|
|
65
65
|
}));
|
|
66
|
-
server.registerTool(inspectNativeApi.name, toolRegistrationOptions(inspectNativeApi), (input, context) => executeEnhancedTool(analysis,
|
|
66
|
+
server.registerTool(inspectNativeApi.name, toolRegistrationOptions(inspectNativeApi), (input, context) => executeEnhancedTool(analysis, registration, inspectNativeApi, {
|
|
67
67
|
validatedCall: { name: "inspect_native_api", input },
|
|
68
68
|
context,
|
|
69
69
|
}));
|
|
70
|
-
server.registerTool(traceFeature.name, toolRegistrationOptions(traceFeature), (input, context) => executeEnhancedTool(analysis,
|
|
70
|
+
server.registerTool(traceFeature.name, toolRegistrationOptions(traceFeature), (input, context) => executeEnhancedTool(analysis, registration, traceFeature, {
|
|
71
71
|
validatedCall: { name: "trace_feature", input },
|
|
72
72
|
context,
|
|
73
73
|
}));
|
|
74
|
-
server.registerTool(traceCallPath.name, toolRegistrationOptions(traceCallPath), (input, context) => executeEnhancedTool(analysis,
|
|
74
|
+
server.registerTool(traceCallPath.name, toolRegistrationOptions(traceCallPath), (input, context) => executeEnhancedTool(analysis, registration, traceCallPath, {
|
|
75
75
|
validatedCall: { name: "trace_call_path", input },
|
|
76
76
|
context,
|
|
77
77
|
}));
|
|
78
|
-
server.registerTool(traceNativeUiAction.name, toolRegistrationOptions(traceNativeUiAction), (input, context) => executeEnhancedTool(analysis,
|
|
78
|
+
server.registerTool(traceNativeUiAction.name, toolRegistrationOptions(traceNativeUiAction), (input, context) => executeEnhancedTool(analysis, registration, traceNativeUiAction, {
|
|
79
79
|
validatedCall: { name: "trace_native_ui_action", input },
|
|
80
80
|
context,
|
|
81
81
|
}));
|
|
@@ -121,14 +121,14 @@ const executeEnhancedTool = async (analysis, registration, contract, request) =>
|
|
|
121
121
|
});
|
|
122
122
|
const recorded = registration.recordEvidence?.(evidence);
|
|
123
123
|
if (recorded !== undefined && !recorded.ok)
|
|
124
|
-
return toCallToolResult(recorded, contract);
|
|
124
|
+
return registration.delivery.toCallToolResult(recorded, contract);
|
|
125
125
|
if (name !== "trace_native_ui_action" &&
|
|
126
126
|
registration.allowsSnapshotReplay?.(name) === true) {
|
|
127
127
|
const workflowRecord = workflowSnapshotRecord(evidence, name);
|
|
128
128
|
if (workflowRecord !== undefined) {
|
|
129
129
|
const snapshot = registration.recordWorkflowSnapshot?.(workflowRecord);
|
|
130
130
|
if (snapshot !== undefined && !snapshot.ok)
|
|
131
|
-
return toCallToolResult(snapshot, contract);
|
|
131
|
+
return registration.delivery.toCallToolResult(snapshot, contract);
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
134
|
const unknowns = recordWorkflowUnknowns({
|
|
@@ -138,10 +138,10 @@ const executeEnhancedTool = async (analysis, registration, contract, request) =>
|
|
|
138
138
|
recordUnknown: registration.recordUnknown,
|
|
139
139
|
});
|
|
140
140
|
if (!unknowns.ok)
|
|
141
|
-
return toCallToolResult(unknowns, contract);
|
|
142
|
-
return toEvidenceToolResult(evidence, contract, recorded);
|
|
141
|
+
return registration.delivery.toCallToolResult(unknowns, contract);
|
|
142
|
+
return registration.delivery.toEvidenceToolResult(evidence, contract, recorded);
|
|
143
143
|
}
|
|
144
|
-
return toCallToolResult(result, contract);
|
|
144
|
+
return registration.delivery.toCallToolResult(result, contract);
|
|
145
145
|
};
|
|
146
146
|
const executeFunctionTool = async (analysis, registration, contract, request) => {
|
|
147
147
|
const { context, parameters } = request;
|
|
@@ -158,7 +158,7 @@ const executeFunctionTool = async (analysis, registration, contract, request) =>
|
|
|
158
158
|
terminal: true,
|
|
159
159
|
});
|
|
160
160
|
if (!result.ok)
|
|
161
|
-
return toCallToolResult(result, contract);
|
|
162
|
-
return toEvidenceToolResult(result.value, contract, registration.recordEvidence?.(result.value));
|
|
161
|
+
return registration.delivery.toCallToolResult(result, contract);
|
|
162
|
+
return registration.delivery.toEvidenceToolResult(result.value, contract, registration.recordEvidence?.(result.value));
|
|
163
163
|
};
|
|
164
164
|
const jsonParameters = (input) => Object.fromEntries(Object.entries(input).filter((entry) => entry[1] !== undefined));
|
|
@@ -3,7 +3,6 @@ import { jsonObjectSchema } from "../domain/jsonValue.js";
|
|
|
3
3
|
import { mcpProgressReporter } from "./mcpProgress.js";
|
|
4
4
|
import { logToolExecution } from "./toolLogging.js";
|
|
5
5
|
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
6
|
-
import { toCallToolResult, toEvidenceToolResult } from "./toolResult.js";
|
|
7
6
|
import { createArtifactExtractionDestination } from "../application/artifacts/ArtifactExtractionDestination.js";
|
|
8
7
|
/** Register provider-backed contracts that return atomic Evidence observations. */
|
|
9
8
|
export const registerEvidenceTools = (server, analysis, contracts, options) => {
|
|
@@ -35,7 +34,7 @@ export const registerEvidenceTools = (server, analysis, contracts, options) => {
|
|
|
35
34
|
terminal: true,
|
|
36
35
|
});
|
|
37
36
|
if (!execution.ok)
|
|
38
|
-
return toCallToolResult(execution, contract);
|
|
37
|
+
return server.delivery.toCallToolResult(execution, contract);
|
|
39
38
|
const sourceEvidence = options.sourceEvidence?.(contract.name, execution.value.result) ?? [];
|
|
40
39
|
const evidence = createEvidence(execution.value.subject ?? options.activeTarget?.(), execution.value.provider, {
|
|
41
40
|
operation: contract.name,
|
|
@@ -52,10 +51,10 @@ export const registerEvidenceTools = (server, analysis, contracts, options) => {
|
|
|
52
51
|
for (const source of sourceEvidence) {
|
|
53
52
|
const sourceRecorded = options.recordEvidence?.(source);
|
|
54
53
|
if (sourceRecorded !== undefined && !sourceRecorded.ok)
|
|
55
|
-
return toCallToolResult(sourceRecorded, contract);
|
|
54
|
+
return server.delivery.toCallToolResult(sourceRecorded, contract);
|
|
56
55
|
}
|
|
57
56
|
const recorded = options.recordEvidence?.(evidence);
|
|
58
|
-
return toEvidenceToolResult(evidence, contract, recorded);
|
|
57
|
+
return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
|
|
59
58
|
});
|
|
60
59
|
}
|
|
61
60
|
};
|
|
@@ -1,15 +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, toEvidenceToolResult } from "./toolResult.js";
|
|
5
4
|
/** Bind the named EVM contract to shared validation and session Evidence recording. */
|
|
6
5
|
export const registerEvmTools = (server, service, logger, recordEvidence) => {
|
|
7
6
|
const contract = toolContract("inspect_evm_interface");
|
|
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 toEvidenceToolResult(result.value, contract, recorded);
|
|
12
|
+
return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
|
|
14
13
|
});
|
|
15
14
|
};
|
|
@@ -1,7 +1,6 @@
|
|
|
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, toEvidenceToolResult } from "./toolResult.js";
|
|
5
4
|
/** Bind firmware handlers to their exact named schemas. */
|
|
6
5
|
export const registerFirmwareTools = (server, service, logger, recordEvidence) => {
|
|
7
6
|
const handler = (contract) => async (input, context) => {
|
|
@@ -9,9 +8,9 @@ export const registerFirmwareTools = (server, service, logger, recordEvidence) =
|
|
|
9
8
|
signal: context.mcpReq.signal,
|
|
10
9
|
}));
|
|
11
10
|
if (!result.ok)
|
|
12
|
-
return toCallToolResult(result, contract);
|
|
11
|
+
return server.delivery.toCallToolResult(result, contract);
|
|
13
12
|
const recorded = recordEvidence?.(result.value);
|
|
14
|
-
return toEvidenceToolResult(result.value, contract, recorded);
|
|
13
|
+
return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
|
|
15
14
|
};
|
|
16
15
|
const inspect = toolContract("inspect_firmware_regions");
|
|
17
16
|
server.registerTool(inspect.name, toolRegistrationOptions(inspect), handler(inspect));
|
|
@@ -2,14 +2,13 @@ import { toolContract } from "../contracts/toolContracts.js";
|
|
|
2
2
|
import { createEvidence, parseEvidence, } from "../domain/evidence.js";
|
|
3
3
|
import { EvidenceIntegrityError } from "../domain/evidenceErrors.js";
|
|
4
4
|
import { err } from "../domain/result.js";
|
|
5
|
-
import { compareFunctions } from "../domain/functionComparison.js";
|
|
6
5
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
7
6
|
import { recordDerivedEvidence } from "./recordDerivedEvidence.js";
|
|
8
7
|
import { recordSessionEvidenceSources } from "./sessionEvidence.js";
|
|
9
8
|
import { runDerivedOperation } from "./runDerivedOperation.js";
|
|
10
|
-
import { FUNCTION_COMPARISON_PROVIDER } from "
|
|
9
|
+
import { FUNCTION_COMPARISON_PROVIDER } from "../application/InvestigationProviders.js";
|
|
11
10
|
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
12
|
-
import {
|
|
11
|
+
import { compareFunctions } from "../domain/functionComparison.js";
|
|
13
12
|
/** Register explicit Evidence-backed function comparison. */
|
|
14
13
|
export const registerFunctionComparisonTool = (server, session, contract) => {
|
|
15
14
|
server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
|
|
@@ -20,22 +19,22 @@ export const registerFunctionComparisonTool = (server, session, contract) => {
|
|
|
20
19
|
rightEvidence = parseEvidence(input.right);
|
|
21
20
|
}
|
|
22
21
|
catch (cause) {
|
|
23
|
-
return toCallToolResult(err(new EvidenceIntegrityError(cause instanceof Error ? cause.message : "Invalid Evidence")), contract);
|
|
22
|
+
return server.delivery.toCallToolResult(err(new EvidenceIntegrityError(cause instanceof Error ? cause.message : "Invalid Evidence")), contract);
|
|
24
23
|
}
|
|
25
24
|
if (leftEvidence.operation !== "analyze_function" ||
|
|
26
25
|
rightEvidence.operation !== "analyze_function" ||
|
|
27
26
|
leftEvidence.predicate_type !== "rea.analysis" ||
|
|
28
27
|
rightEvidence.predicate_type !== "rea.analysis")
|
|
29
|
-
return toCallToolResult(err(new EvidenceIntegrityError("Expected analyze_function Evidence")), contract);
|
|
28
|
+
return server.delivery.toCallToolResult(err(new EvidenceIntegrityError("Expected analyze_function Evidence")), contract);
|
|
30
29
|
const leftIds = [leftEvidence.evidence_id];
|
|
31
30
|
const rightIds = [rightEvidence.evidence_id];
|
|
32
31
|
const computed = await runDerivedOperation(context, contract.name, () => compareFunctions(leftEvidence, rightEvidence));
|
|
33
32
|
if (!computed.ok)
|
|
34
|
-
return toCallToolResult(computed, contract);
|
|
33
|
+
return server.delivery.toCallToolResult(computed, contract);
|
|
35
34
|
const comparison = computed.value;
|
|
36
35
|
const recordedSources = recordSessionEvidenceSources((evidence) => session.recordEvidence(evidence), [leftEvidence, rightEvidence]);
|
|
37
36
|
if (!recordedSources.ok)
|
|
38
|
-
return toCallToolResult(recordedSources, contract);
|
|
37
|
+
return server.delivery.toCallToolResult(recordedSources, contract);
|
|
39
38
|
const evidence = createEvidence(undefined, FUNCTION_COMPARISON_PROVIDER, {
|
|
40
39
|
predicateType: "rea.function-comparison",
|
|
41
40
|
operation: contract.name,
|
|
@@ -55,7 +54,7 @@ export const registerFunctionComparisonTool = (server, session, contract) => {
|
|
|
55
54
|
rightIds,
|
|
56
55
|
comparisonEvidenceId: evidence.evidence_id,
|
|
57
56
|
}));
|
|
58
|
-
return toEvidenceToolResult(evidence, contract, recorded);
|
|
57
|
+
return server.delivery.toEvidenceToolResult(evidence, contract, recorded);
|
|
59
58
|
});
|
|
60
59
|
};
|
|
61
60
|
const functionUnknownInput = ({ status, leftIds, rightIds, comparisonEvidenceId, }) => {
|
|
@@ -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 toEvidenceToolResult(evidence, contract, recorded);
|
|
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 toEvidenceToolResult(evidence, contract, recorded);
|
|
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 toEvidenceToolResult(evidence, contract, recordWorkflowEvidence(session, evidence, result.status === "unknown" || result.status === "truncated", {
|
|
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,
|
|
@@ -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 toEvidenceToolResult(evidence, contract, recordWorkflowEvidence(session, evidence, result.status === "unknown", {
|
|
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,
|
|
@@ -1,15 +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, toEvidenceToolResult } 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 toEvidenceToolResult(result.value, contract, recorded);
|
|
12
|
+
return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
|
|
14
13
|
});
|
|
15
14
|
};
|