rea-agents 6.1.0 → 6.3.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 +24 -24
- package/bridge/ghidra/ReaGhidraBridge.java +32 -4
- package/bridge/hopper_bridge.py +8 -1
- package/dist/android/JadxConfiguration.js +87 -7
- package/dist/android/JadxMcpTransport.js +14 -2
- package/dist/android/JadxProvider.js +64 -36
- package/dist/android/JadxSession.js +51 -9
- package/dist/application/BinaryTargetResolver.js +68 -20
- package/dist/application/BrowserEvidence.js +3 -8
- package/dist/application/BrowserScenarioEvidence.js +4 -20
- package/dist/application/CapabilityInventory.js +43 -9
- package/dist/application/ClientConfigurationDocument.js +97 -25
- package/dist/application/ClientRegistrationStatus.js +19 -6
- package/dist/application/DirectAnalysis.js +41 -20
- package/dist/application/DirectAnalysisCleanup.js +71 -0
- package/dist/application/DirectAnalysisStatus.js +3 -7
- package/dist/application/Doctor.js +40 -53
- package/dist/application/DoctorDiagnostics.js +2 -3
- package/dist/application/EnhancedTools.js +51 -6
- package/dist/application/EvidenceBundleFiles.js +8 -3
- package/dist/application/InvestigationProviders.js +13 -5
- package/dist/application/JsonFiles.js +56 -23
- package/dist/application/LinuxHopper.js +11 -7
- package/dist/application/MacHopper.js +15 -18
- package/dist/application/RealHopperAssertions.js +0 -11
- package/dist/application/ReconstructionObligationCandidates.js +10 -3
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
- package/dist/application/ReferenceSourceImportEntries.js +1 -1
- package/dist/application/RegularFileRead.js +17 -0
- package/dist/application/Setup.js +26 -23
- package/dist/application/SetupClientConfiguration.js +18 -7
- package/dist/application/SetupHost.js +20 -29
- package/dist/application/SetupPlan.js +24 -20
- package/dist/application/SetupSkill.js +57 -8
- package/dist/application/SupportedClients.js +43 -0
- package/dist/application/Uninstall.js +98 -30
- package/dist/application/UpdateMaintenance.js +13 -7
- package/dist/application/UpdateRuntime.js +12 -12
- package/dist/application/Utf8JsonInput.js +64 -0
- package/dist/application/WebScriptExportService.js +38 -5
- 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/android/AndroidAnalysisService.js +1 -1
- 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 +13 -10
- package/dist/application/binary/BinarySession.js +86 -29
- package/dist/application/binary/BinarySessionComposition.js +1 -3
- package/dist/application/binary/BinarySessionExecution.js +3 -5
- package/dist/application/binary/BinarySessionOpen.js +10 -2
- 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 +10 -14
- package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
- package/dist/application/javascript/ElectronBoundaryGraphNative.js +5 -1
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +3 -6
- package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
- package/dist/application/javascript/JavaScriptApplicationService.js +7 -1
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -9
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +19 -27
- 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 +46 -29
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +86 -27
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +52 -9
- package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +1 -0
- package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
- package/dist/application/javascript/JavaScriptModuleRelationships.js +6 -18
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +8 -6
- package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +7 -5
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +3 -4
- package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +3 -7
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +76 -47
- package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
- package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +3 -4
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +51 -25
- package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
- package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
- package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
- package/dist/application/native/NativeCallRoutes.js +2 -4
- package/dist/application/process/ProcessCli.js +11 -11
- package/dist/application/process/ProcessEvidence.js +0 -1
- package/dist/artifacts/ArtifactProvider.js +53 -30
- package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
- package/dist/artifacts/ArtifactReader.js +31 -0
- package/dist/artifacts/AsarArtifactReader.js +81 -17
- package/dist/artifacts/DirectoryArtifactReader.js +2 -1
- package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
- package/dist/artifacts/NativeDmgArtifactReader.js +207 -77
- package/dist/artifacts/NativeDmgOwnership.js +109 -0
- 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 +68 -42
- package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
- package/dist/artifacts/extraction/ArtifactExtraction.js +104 -29
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +71 -66
- package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
- package/dist/artifacts/inventory/classify.js +33 -14
- package/dist/artifacts/inventory/hashStableRootArtifact.js +37 -0
- package/dist/artifacts/inventory/reader.js +3 -3
- package/dist/artifacts/inventory/scanCanonical.js +64 -34
- package/dist/artifacts/inventory/scanReader.js +12 -20
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +65 -27
- package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
- package/dist/browser/CdpBrowserProvider.js +6 -6
- package/dist/browser/CdpCaptureEventHandlers.js +2 -4
- package/dist/browser/CdpCaptureEvents.js +0 -1
- package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
- package/dist/browser/CdpCaptureValues.js +20 -0
- package/dist/browser/CdpElectronInspection.js +2 -2
- package/dist/browser/CdpElectronProvider.js +4 -5
- package/dist/browser/CdpElectronScriptEvents.js +2 -8
- package/dist/browser/CdpElectronScripts.js +4 -5
- package/dist/browser/CdpPageCaptureScripts.js +2 -3
- package/dist/browser/CdpSafeMetadata.js +10 -10
- package/dist/browser/CdpWebMcpDiscovery.js +16 -13
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +64 -49
- 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 +269 -66
- package/dist/browser/PlaywrightScenarioEvents.js +1 -1
- package/dist/browser/PlaywrightScenarioSession.js +41 -32
- package/dist/browser/WebSourceMapFetcher.js +32 -6
- package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
- 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 +37 -28
- package/dist/cli/coreNativeCommands.js +9 -10
- package/dist/cli/electronCommands.js +12 -13
- package/dist/cli/interactiveSetup.js +6 -6
- package/dist/cli/javascriptApplicationAnalysis.js +2 -12
- package/dist/cli/jsonOutput.js +3 -2
- 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/streamedJsonOutput.js +83 -4
- package/dist/cli/utilityCommands.js +10 -12
- package/dist/cli.js +19 -8
- package/dist/cliBrowserScenarioCommands.js +2 -2
- package/dist/cliCommandNames.js +1 -0
- package/dist/cliJsonFile.js +179 -0
- package/dist/cliJsonInput.js +60 -33
- package/dist/cliObservationOptions.js +4 -0
- package/dist/cliOutput.js +0 -38
- package/dist/composition/auxiliaryAnalysisProviders.js +30 -25
- package/dist/composition/binary.js +9 -9
- package/dist/composition/browserScenario.js +2 -1
- package/dist/composition/directAnalysis.js +20 -14
- 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 +7 -7
- 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/errorSchemas.js +3 -1
- package/dist/contracts/evm/evmToolContracts.js +1 -1
- package/dist/contracts/functionComparisonExample.js +8 -0
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/inputSchemaPresentation.js +181 -0
- package/dist/contracts/investigationExamples.js +4 -3
- package/dist/contracts/javascript/electronToolContracts.js +3 -2
- package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -22
- package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +248 -0
- package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
- package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
- package/dist/contracts/managed/managedToolContracts.js +8 -12
- package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
- package/dist/contracts/mobileApplicationGraphExamples.js +8 -8
- 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/sessionLifecycleInputs.js +4 -3
- package/dist/contracts/sessionStatusContract.js +3 -2
- package/dist/contracts/sessionToolContracts.js +17 -4
- package/dist/contracts/sessionToolSchemas.js +4 -16
- package/dist/contracts/toolContracts.js +2 -0
- package/dist/contracts/toolEffects.js +1 -0
- package/dist/contracts/toolOutputSchemaGroups.js +138 -94
- package/dist/contracts/toolOutputSchemaPrimitives.js +13 -26
- 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/analysisErrorBase.js +5 -0
- package/dist/domain/analysisErrorCore.js +3 -0
- package/dist/domain/analysisErrorPresentation.js +22 -5
- package/dist/domain/analysisErrorProjection.js +24 -5
- package/dist/domain/analysisSnapshot.js +31 -31
- package/dist/domain/analysisView/analysisView.js +241 -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/android/androidPartialObservation.js +36 -0
- 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 +17 -4
- package/dist/domain/artifactIdentity.js +8 -8
- package/dist/domain/artifactInspection.js +8 -8
- 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/browserCompleteness.js +3 -2
- 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/browserScenarioCaptureValues.js +2 -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/browserScenarioNormalization.js +3 -3
- package/dist/domain/browserScenarioValues.js +6 -6
- package/dist/domain/callPath.js +15 -18
- package/dist/domain/callPathSchemas.js +2 -2
- package/dist/domain/canonicalDigest.js +7 -1
- package/dist/domain/canonicalOrdering.js +1 -13
- package/dist/domain/changedBehavior.js +5 -6
- package/dist/domain/comparisonSemantics.js +0 -5
- package/dist/domain/completionLedgerGeneration.js +2 -1
- package/dist/domain/configurationErrors.js +12 -0
- package/dist/domain/conformancePackage.js +4 -3
- package/dist/domain/digests.js +0 -3
- package/dist/domain/evidence.js +19 -40
- package/dist/domain/evidenceBundle.js +58 -42
- package/dist/domain/evidenceCompletionLedger.js +2 -1
- package/dist/domain/firmware/firmwareAnalysis.js +4 -3
- package/dist/domain/functionComparison.js +6 -6
- package/dist/domain/functionComparisonDimensions.js +120 -87
- package/dist/domain/functionComparisonNormalization.js +26 -36
- package/dist/domain/functionComparisonResults.js +3 -6
- package/dist/domain/functionComparisonSchemas.js +2 -8
- package/dist/domain/functionDossierEvidence.js +4 -38
- package/dist/domain/hopperValues.js +11 -15
- package/dist/domain/javascript/electronActiveObservation.js +29 -71
- package/dist/domain/javascript/electronObservation.js +14 -3
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +12 -11
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +11 -2
- package/dist/domain/javascript/electronStaticAnalysisNative.js +7 -4
- package/dist/domain/javascript/electronStaticAnalysisValues.js +8 -4
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +3 -1
- package/dist/domain/javascript/javascriptApplicationChangeGraph.js +12 -8
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +6 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +41 -16
- package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
- package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
- package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +50 -36
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +9 -8
- package/dist/domain/javascript/javascriptAstFingerprint.js +2 -2
- package/dist/domain/javascript/javascriptAstValues.js +22 -0
- package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
- package/dist/domain/javascript/javascriptExportShapeComparison.js +10 -3
- package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +58 -22
- package/dist/domain/javascript/javascriptExportShapeSelection.js +7 -7
- package/dist/domain/javascript/javascriptExportShapeVariants.js +70 -16
- package/dist/domain/javascript/javascriptFeatureSeed.js +25 -3
- package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
- package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
- package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -5
- package/dist/domain/javascript/javascriptNativeHandoff.js +7 -7
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
- package/dist/domain/javascript/javascriptRuntimeObservation.js +18 -7
- package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
- package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
- package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
- package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +5 -4
- package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
- package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +6 -6
- package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -222
- package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
- package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
- package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
- package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +7 -7
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +209 -11
- package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
- package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
- package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
- package/dist/domain/javascript/javascriptSemanticChildProcesses.js +4 -3
- package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
- package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
- package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
- package/dist/domain/javascript/javascriptSemanticFingerprints.js +2 -2
- package/dist/domain/javascript/javascriptSemanticGraph.js +220 -71
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +19 -1
- package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
- package/dist/domain/javascript/javascriptSemanticIterationSources.js +106 -0
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +515 -74
- package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +44 -36
- package/dist/domain/javascript/javascriptSemanticObjects.js +79 -42
- package/dist/domain/javascript/javascriptSemanticPrimitives.js +8 -14
- package/dist/domain/javascript/javascriptSemanticProjection.js +21 -16
- package/dist/domain/javascript/javascriptSemanticPromises.js +16 -21
- package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +23 -0
- package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
- package/dist/domain/javascript/javascriptSemanticQuery.js +8 -2
- package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +3 -2
- package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
- package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
- package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
- package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
- package/dist/domain/javascript/javascriptSemanticReturns.js +55 -44
- package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
- package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -1
- package/dist/domain/javascript/javascriptSemanticValues.js +180 -76
- package/dist/domain/javascript/javascriptSourceMapPaths.js +114 -0
- package/dist/domain/javascript/javascriptSourceParser.js +34 -9
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -6
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -16
- package/dist/domain/javascript/sourceToBundleComparison.js +19 -8
- package/dist/domain/javascript/sourceToBundleSignals.js +53 -25
- package/dist/domain/jsonSerialization.js +109 -55
- package/dist/domain/jsonShape.js +46 -19
- package/dist/domain/localPath.js +10 -4
- package/dist/domain/managed/managedApplicationGraph.js +10 -6
- package/dist/domain/managed/managedApplicationGraphNodes.js +82 -57
- package/dist/domain/managed/managedArtifact.js +6 -4
- package/dist/domain/managed/managedMemberComparison.js +2 -9
- package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
- 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 +3 -3
- package/dist/domain/native/nativeInstruction.js +7 -0
- package/dist/domain/native/nativeValueFlow.js +5 -11
- package/dist/domain/native/objcSwiftMetadata.js +15 -17
- package/dist/domain/native/recordedCrash.js +2 -3
- package/dist/domain/offsetDateTime.js +17 -0
- package/dist/domain/process/processCapture.js +22 -20
- package/dist/domain/process/processCaptureCoverage.js +70 -0
- package/dist/domain/process/processCaptureExample.js +45 -1
- package/dist/domain/process/processCaptureParsing.js +1 -34
- package/dist/domain/process/processCaptureValidation.js +82 -13
- package/dist/domain/process/processComparison.js +39 -43
- 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 +19 -15
- package/dist/domain/process/processTraceSpecification.js +4 -7
- package/dist/domain/providerAdapterError.js +2 -0
- package/dist/domain/providerCleanupError.js +6 -2
- package/dist/domain/reconstructionCoverage.js +7 -3
- package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
- package/dist/domain/reconstructionReadinessSchemas.js +2 -1
- package/dist/domain/reconstructionUnknowns.js +4 -3
- package/dist/domain/reconstructionVerification.js +6 -5
- package/dist/domain/reconstructionVerificationSchemas.js +2 -1
- package/dist/domain/referenceSourceGraph.js +27 -28
- package/dist/domain/referenceSourceImportParsing.js +34 -45
- package/dist/domain/residualUnknown.js +3 -2
- package/dist/domain/staticRuntimeCorrelation.js +4 -3
- package/dist/domain/stringPatterns.js +6 -0
- package/dist/domain/swiftSymbolClassification.js +66 -0
- package/dist/domain/symbolAnalysis.js +83 -20
- package/dist/domain/unicodeCodePointOrder.js +6 -0
- package/dist/domain/webBundleAnalyzerInspection.js +9 -1
- package/dist/domain/webCaptureDiff.js +71 -30
- package/dist/domain/webCaptureDiffSchemas.js +8 -11
- package/dist/domain/webEventListeners.js +3 -2
- package/dist/domain/webExecution.js +3 -2
- package/dist/domain/webInventory.js +3 -2
- package/dist/domain/webMcpDiscovery.js +4 -3
- package/dist/domain/webRuntime.js +0 -2
- package/dist/domain/webScriptExport.js +2 -2
- package/dist/dotnet/ManagedArtifactInspector.js +2 -19
- package/dist/dotnet/ManagedMemberInspector.js +12 -18
- package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +1 -2
- 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 +13 -12
- package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
- 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/filesystem/RegularFile.js +41 -0
- 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 +105 -36
- 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 +151 -22
- package/dist/ghidra/GhidraJavaLaunch.js +6 -2
- package/dist/ghidra/GhidraLauncher.js +58 -26
- 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 +5 -3
- package/dist/ida/IdaProvider.js +8 -12
- package/dist/ida/IdaSessionClient.js +24 -20
- package/dist/ida/IdaWorkspace.js +12 -13
- package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
- package/dist/inspector/V8InspectorCaptureProjection.js +47 -14
- package/dist/inspector/V8InspectorProvider.js +97 -35
- package/dist/javascript/recovery/WakaruCommand.js +7 -2
- package/dist/javascript/recovery/WakaruExecution.js +5 -2
- package/dist/main/shutdown.js +81 -29
- package/dist/main/startup.js +9 -2
- package/dist/main/transport.js +23 -3
- package/dist/main.js +11 -18
- package/dist/native/AppleMachoSelection.js +16 -6
- package/dist/native/AppleObjcDispatchFacets.js +3 -3
- package/dist/native/AppleObjcProperties.js +17 -7
- package/dist/native/CommandRunner.js +9 -7
- package/dist/native/LldbCallTracer.js +249 -77
- package/dist/native/NativeMacOSProvider.js +32 -17
- package/dist/native/NativeMacOSProviderMetadata.js +1 -2
- 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 +18 -16
- package/dist/process/ProviderProcess.js +1 -3
- package/dist/process/capture/FilesystemSnapshot.js +131 -24
- package/dist/process/capture/ProcessCaptureError.js +13 -0
- package/dist/process/capture/ProcessCaptureLifecycle.js +148 -74
- package/dist/process/capture/ProcessFilesystemEffects.js +51 -6
- package/dist/process/capture/ProcessHarness.js +16 -33
- 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/analysisAdmission.js +8 -0
- package/dist/server/createServer.js +71 -59
- 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 +6 -6
- 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 +4 -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 +4 -5
- package/dist/server/registerArtifactTools.js +2 -2
- 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 +8 -7
- package/dist/server/registerElectronTools.js +10 -13
- package/dist/server/registerEnhancedTools.js +82 -77
- package/dist/server/registerEvidenceTools.js +54 -47
- 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/registerManagedTools.js +7 -4
- 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 +32 -41
- 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 +19 -19
- 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 +42 -30
- package/scripts/rea.mjs +3 -6
- package/skills/reverse-engineer-anything/SKILL.md +14 -13
- 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 +18 -0
- package/dist/artifacts/inventory/policy.js +0 -2
- 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/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
- package/dist/main/reload.js +0 -12
- package/dist/main/state.js +0 -3
- package/dist/server/registerNativeTools.js +0 -6
- package/dist/server/sessionToolPolicies.js +0 -2
|
@@ -19,6 +19,8 @@ export class TerminalRenderer {
|
|
|
19
19
|
#frames = [];
|
|
20
20
|
#pending = Promise.resolve();
|
|
21
21
|
#capturedBytes = 0;
|
|
22
|
+
#observedBytes = 0;
|
|
23
|
+
#observedFrames = 0;
|
|
22
24
|
#truncated = false;
|
|
23
25
|
constructor(options) {
|
|
24
26
|
this.options = options;
|
|
@@ -55,6 +57,16 @@ export class TerminalRenderer {
|
|
|
55
57
|
truncated() {
|
|
56
58
|
return this.#truncated;
|
|
57
59
|
}
|
|
60
|
+
/** Budget accounting after awaiting queued writes with frames(). */
|
|
61
|
+
retention() {
|
|
62
|
+
return {
|
|
63
|
+
budget_bytes: this.options.maxBytes,
|
|
64
|
+
observed_bytes: this.#observedBytes,
|
|
65
|
+
retained_bytes: this.#capturedBytes,
|
|
66
|
+
observed_frames: this.#observedFrames,
|
|
67
|
+
retained_frames: this.#frames.length,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
58
70
|
/** Release addon and terminal resources after all writes settle. */
|
|
59
71
|
async dispose() {
|
|
60
72
|
await this.#pending;
|
|
@@ -71,6 +83,8 @@ export class TerminalRenderer {
|
|
|
71
83
|
const serializedState = this.options.normalize(this.#serializeAddon.serialize());
|
|
72
84
|
const bytes = Buffer.byteLength(serializedState) +
|
|
73
85
|
lines.reduce((total, line) => total + Buffer.byteLength(line), 0);
|
|
86
|
+
this.#observedBytes += bytes;
|
|
87
|
+
this.#observedFrames += 1;
|
|
74
88
|
if (this.#capturedBytes + bytes > this.options.maxBytes) {
|
|
75
89
|
this.#truncated = true;
|
|
76
90
|
return;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Snapshot caller-selected variables using Node child-process key semantics. */
|
|
2
|
+
export const snapshotEnvironment = (environment, platform = process.platform) => {
|
|
3
|
+
if (platform !== "win32")
|
|
4
|
+
return Object.freeze({ ...environment });
|
|
5
|
+
const snapshot = {};
|
|
6
|
+
// Node sorts keys lexicographically and forwards the first case-insensitive
|
|
7
|
+
// match on Windows. Canonical keys also make subsequent lookups deterministic.
|
|
8
|
+
for (const key of Object.keys(environment).sort()) {
|
|
9
|
+
const canonicalKey = key.toUpperCase();
|
|
10
|
+
if (!Object.hasOwn(snapshot, canonicalKey))
|
|
11
|
+
snapshot[canonicalKey] = environment[key];
|
|
12
|
+
}
|
|
13
|
+
return Object.freeze(snapshot);
|
|
14
|
+
};
|
|
@@ -1,35 +1,37 @@
|
|
|
1
1
|
import { McpServer, isCallToolResult, isJSONRPCRequest, isJSONRPCNotification, isJSONRPCResultResponse, } from "@modelcontextprotocol/server";
|
|
2
2
|
import { analysisErrorProjectionSchema } from "../contracts/errorSchemas.js";
|
|
3
|
-
import { parseMcpResponseBudget } from "../config/mcpResponseBudget.js";
|
|
4
3
|
import { AnalysisResourceConstraintError } from "../domain/analysisErrorCore.js";
|
|
5
4
|
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
6
5
|
import { createEvidence } from "../domain/evidence.js";
|
|
7
6
|
import { jsonObjectSchema } from "../domain/jsonValue.js";
|
|
8
|
-
import {
|
|
9
|
-
import { encodeToolResult, MCP_RESULT_BUDGET_BYTES, } from "./toolResultEncoding.js";
|
|
7
|
+
import { encodeToolResult } from "./toolResultEncoding.js";
|
|
10
8
|
/** Bind oversized MCP error recovery to this server's Evidence ledger. */
|
|
11
9
|
export class EvidenceMcpServer extends McpServer {
|
|
12
10
|
recordEvidence;
|
|
13
|
-
|
|
11
|
+
delivery;
|
|
12
|
+
constructor(info, options, recordEvidence, delivery) {
|
|
14
13
|
super(info, options);
|
|
15
14
|
this.recordEvidence = recordEvidence;
|
|
15
|
+
this.delivery = delivery;
|
|
16
16
|
}
|
|
17
17
|
/** Preserve the SDK transport lifecycle while retaining oversized errors. */
|
|
18
18
|
connect(transport) {
|
|
19
|
-
return super.connect(new ErrorEvidenceTransport(transport, this.recordEvidence));
|
|
19
|
+
return super.connect(new ErrorEvidenceTransport(transport, this.recordEvidence, this.delivery));
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
class ErrorEvidenceTransport {
|
|
23
23
|
transport;
|
|
24
24
|
recordEvidence;
|
|
25
|
+
delivery;
|
|
25
26
|
onclose;
|
|
26
27
|
onerror;
|
|
27
28
|
onmessage;
|
|
28
29
|
hasPerRequestStream;
|
|
29
30
|
pendingTools = new Map();
|
|
30
|
-
constructor(transport, recordEvidence) {
|
|
31
|
+
constructor(transport, recordEvidence, delivery) {
|
|
31
32
|
this.transport = transport;
|
|
32
33
|
this.recordEvidence = recordEvidence;
|
|
34
|
+
this.delivery = delivery;
|
|
33
35
|
if (transport.hasPerRequestStream !== undefined)
|
|
34
36
|
this.hasPerRequestStream = transport.hasPerRequestStream;
|
|
35
37
|
transport.onmessage = (message, extra) => {
|
|
@@ -83,7 +85,18 @@ class ErrorEvidenceTransport {
|
|
|
83
85
|
: undefined;
|
|
84
86
|
const tool = id === undefined ? undefined : this.pendingTools.get(id);
|
|
85
87
|
try {
|
|
86
|
-
|
|
88
|
+
const recovered = this.recoverError(message, tool);
|
|
89
|
+
if (isJSONRPCResultResponse(recovered) &&
|
|
90
|
+
isCallToolResult(recovered.result) &&
|
|
91
|
+
recovered.result.isError === true) {
|
|
92
|
+
// Keep the complete typed JSON in content. Error projections are not
|
|
93
|
+
// success outputSchema data; oversized recovery must consume their
|
|
94
|
+
// private structured carrier before it is removed from the wire.
|
|
95
|
+
const { structuredContent: _diagnostic, ...result } = recovered.result;
|
|
96
|
+
await this.transport.send({ ...recovered, result }, options);
|
|
97
|
+
}
|
|
98
|
+
else
|
|
99
|
+
await this.transport.send(recovered, options);
|
|
87
100
|
}
|
|
88
101
|
finally {
|
|
89
102
|
if (!isJSONRPCRequest(message) && id !== undefined)
|
|
@@ -97,11 +110,9 @@ class ErrorEvidenceTransport {
|
|
|
97
110
|
message.result.structuredContent === undefined)
|
|
98
111
|
return message;
|
|
99
112
|
const structured = jsonObjectSchema.parse(message.result.structuredContent);
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
: MCP_RESULT_BUDGET_BYTES;
|
|
104
|
-
const encoded = encodeToolResult(structured, budget);
|
|
113
|
+
const budget = this.delivery.resultBudgetBytes;
|
|
114
|
+
// The delivered error omits structuredContent, so only its text counts.
|
|
115
|
+
const encoded = encodeToolResult(structured, budget, "text");
|
|
105
116
|
if (encoded.ok)
|
|
106
117
|
return message;
|
|
107
118
|
const operation = tool ?? "mcp_tool_error";
|
|
@@ -139,8 +150,8 @@ class ErrorEvidenceTransport {
|
|
|
139
150
|
}, {
|
|
140
151
|
remediationAction: retained
|
|
141
152
|
? "Export the retained original error through export_evidence_bundle to a caller-selected path. The connection remains usable."
|
|
142
|
-
: "
|
|
153
|
+
: "Restart REA with a larger REA_MCP_MAX_RESPONSE_BYTES and matching client receive buffer, then retry. The original error could not be retained by this server.",
|
|
143
154
|
});
|
|
144
|
-
return { ...message, result: toErrorToolResult(failure) };
|
|
155
|
+
return { ...message, result: this.delivery.toErrorToolResult(failure) };
|
|
145
156
|
}
|
|
146
157
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AnalysisCancelledError } from "../domain/analysisErrorCore.js";
|
|
2
|
+
import { err, ok } from "../domain/result.js";
|
|
3
|
+
/** Run against the source's explicit owner, admitting session-scoped work. */
|
|
4
|
+
export const withAdmittedAnalysis = (source) => source.kind === "session"
|
|
5
|
+
? (operationName, signal, operation) => source.session.withAdmittedAnalysis(operationName, signal, operation)
|
|
6
|
+
: async (operationName, signal, operation) => signal?.aborted === true
|
|
7
|
+
? err(new AnalysisCancelledError(operationName))
|
|
8
|
+
: ok(await operation(source.analysis));
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
import { snapshotEnvironment } from "../process/snapshotEnvironment.js";
|
|
1
2
|
import { createEvmInterfaceService } from "../composition/evm.js";
|
|
2
3
|
import { registerEvmTools } from "./registerEvmTools.js";
|
|
3
4
|
import { registerRecordedCrashTools } from "./registerRecordedCrashTools.js";
|
|
4
5
|
import { createRecordedCrashService } from "../composition/binaryDiagnostics.js";
|
|
6
|
+
import { registerAnalysisViewTool } from "./registerAnalysisViewTool.js";
|
|
5
7
|
import { registerBinaryDiagnosticsTools } from "./registerBinaryDiagnosticsTools.js";
|
|
6
8
|
import { createBinaryLayoutService } from "../composition/binaryDiagnostics.js";
|
|
7
9
|
import { EvidenceMcpServer } from "./EvidenceMcpServer.js";
|
|
10
|
+
import { createToolResultDelivery, } from "./toolResult.js";
|
|
11
|
+
import { parseMcpResponseBudget } from "../config/mcpResponseBudget.js";
|
|
8
12
|
import { isAbsolute } from "node:path";
|
|
9
13
|
import { PRODUCT_IDENTITY } from "../identity.js";
|
|
10
14
|
import { silentLogger } from "../logger.js";
|
|
@@ -35,42 +39,36 @@ import { registerAndroidTools } from "./registerAndroidTools.js";
|
|
|
35
39
|
import { AndroidAnalysisService } from "../application/android/AndroidAnalysisService.js";
|
|
36
40
|
import { createAndroidAnalysisProvider } from "../composition/android.js";
|
|
37
41
|
import { registerManagedWorkflowTools } from "./registerManagedWorkflowTools.js";
|
|
38
|
-
import {
|
|
42
|
+
import { NATIVE_TOOL_CONTRACTS } from "../contracts/native/nativeToolContracts.js";
|
|
43
|
+
import { registerEvidenceTools } from "./registerEvidenceTools.js";
|
|
39
44
|
import { registerOfficialTools } from "./registerOfficialTools.js";
|
|
40
45
|
import { registerGuidedPrompts } from "./registerPrompts.js";
|
|
41
46
|
import { registerSessionTools } from "./registerSessionTools.js";
|
|
42
47
|
import { sessionAvailabilityPolicy } from "./sessionAvailabilityPolicy.js";
|
|
48
|
+
import { withAdmittedAnalysis, } from "./analysisAdmission.js";
|
|
43
49
|
const TARGET_FREE_INSTRUCTIONS = "REA provides reverse-engineering tools for local artifacts, native binaries, managed code, browser pages, and runtimes. Use the tool that directly answers the question; discover targets or inspect inventory only when needed. Tool results include inline Evidence and report their coverage and limitations.";
|
|
44
50
|
const ACTIVE_TARGET_INSTRUCTIONS = "REA analyzes the active reverse-engineering target. Use the analysis tool that answers the question directly. Search or list symbols when discovery is needed; analyze_function provides a function dossier, and focused procedure tools return individual facets.";
|
|
45
|
-
const installSessionToolAvailability = (
|
|
51
|
+
const installSessionToolAvailability = (session, options, environment) => {
|
|
46
52
|
if (session === undefined)
|
|
47
53
|
return undefined;
|
|
54
|
+
const linux = process.platform === "linux";
|
|
55
|
+
const linuxX64 = linux && process.arch === "x64";
|
|
56
|
+
const pwntools = linuxX64 && isAbsolute(environment.REA_PWNTOOLS_PYTHON ?? "");
|
|
48
57
|
const policy = sessionAvailabilityPolicy(options.availabilityPolicy, {
|
|
49
58
|
optionalProviderLoadFailures: options.optionalProviderLoadFailures,
|
|
50
59
|
optionalFeatures: {
|
|
51
|
-
evmInterfaceEnabled: options.evmInterface !== undefined ||
|
|
52
|
-
(process.platform === "linux" && process.arch === "x64"),
|
|
60
|
+
evmInterfaceEnabled: options.evmInterface !== undefined || linuxX64,
|
|
53
61
|
webModuleResolutionEnabled: options.webModuleTrace !== undefined ||
|
|
54
|
-
isAbsolute(
|
|
55
|
-
recordedCrashEnabled: options.recordedCrash !== undefined ||
|
|
56
|
-
|
|
57
|
-
process.arch === "x64" &&
|
|
58
|
-
isAbsolute(process.env.REA_PWNTOOLS_PYTHON ?? "")),
|
|
59
|
-
binaryLayoutEnabled: options.binaryLayout !== undefined ||
|
|
60
|
-
(process.platform === "linux" &&
|
|
61
|
-
process.arch === "x64" &&
|
|
62
|
-
isAbsolute(process.env.REA_PWNTOOLS_PYTHON ?? "")),
|
|
62
|
+
isAbsolute(environment.REA_BROWSER_EXECUTABLE ?? ""),
|
|
63
|
+
recordedCrashEnabled: options.recordedCrash !== undefined || pwntools,
|
|
64
|
+
binaryLayoutEnabled: options.binaryLayout !== undefined || pwntools,
|
|
63
65
|
firmwareInspectionEnabled: options.firmwareAnalysis !== undefined ||
|
|
64
|
-
(
|
|
65
|
-
isAbsolute(process.env.REA_BINWALK_COMMAND ?? "")),
|
|
66
|
+
(linux && isAbsolute(environment.REA_BINWALK_COMMAND ?? "")),
|
|
66
67
|
firmwareExtractionEnabled: options.firmwareAnalysis !== undefined ||
|
|
67
|
-
(
|
|
68
|
-
isAbsolute(process.env.REA_UNBLOB_COMMAND ?? "")),
|
|
68
|
+
(linux && isAbsolute(environment.REA_UNBLOB_COMMAND ?? "")),
|
|
69
69
|
browserObservationEnabled: options.browserObservation !== undefined,
|
|
70
70
|
javascriptRecoveryEnabled: options.javascriptRecovery !== undefined ||
|
|
71
|
-
(
|
|
72
|
-
process.arch === "x64" &&
|
|
73
|
-
isAbsolute(process.env.REA_WAKARU_COMMAND ?? "")),
|
|
71
|
+
(linuxX64 && isAbsolute(environment.REA_WAKARU_COMMAND ?? "")),
|
|
74
72
|
browserScenarioEnabled: options.browserScenarioCapture !== undefined,
|
|
75
73
|
electronObservationEnabled: options.electronObservation !== undefined,
|
|
76
74
|
electronAutomationEnabled: options.electronActiveObservation !== undefined,
|
|
@@ -81,7 +79,7 @@ const installSessionToolAvailability = (server, session, options) => {
|
|
|
81
79
|
policy,
|
|
82
80
|
};
|
|
83
81
|
};
|
|
84
|
-
const createMcpServer = (session) => new EvidenceMcpServer({
|
|
82
|
+
const createMcpServer = (session, delivery) => new EvidenceMcpServer({
|
|
85
83
|
name: PRODUCT_IDENTITY.mcpServerKey,
|
|
86
84
|
version: PRODUCT_IDENTITY.packageVersion,
|
|
87
85
|
}, {
|
|
@@ -91,30 +89,36 @@ const createMcpServer = (session) => new EvidenceMcpServer({
|
|
|
91
89
|
: TARGET_FREE_INSTRUCTIONS,
|
|
92
90
|
}, session === undefined
|
|
93
91
|
? undefined
|
|
94
|
-
: (evidence) => session.recordEvidence(evidence));
|
|
92
|
+
: (evidence) => session.recordEvidence(evidence), delivery);
|
|
95
93
|
/**
|
|
96
94
|
* Construct one MCP server without acquiring subprocess resources.
|
|
97
95
|
* Supplying a session adds target lifecycle tools; omitting it retains the
|
|
98
96
|
* fixed-target seam used by focused tests and embedders.
|
|
99
97
|
*/
|
|
100
|
-
export const createServer = (
|
|
98
|
+
export const createServer = (source, options = {}) => {
|
|
99
|
+
const session = source.kind === "session" ? source.session : undefined;
|
|
100
|
+
const analysis = source.kind === "session" ? source.session : source.analysis;
|
|
101
|
+
const environment = snapshotEnvironment(options.environment ?? process.env);
|
|
102
|
+
const delivery = selectToolResultDelivery(environment, options.delivery);
|
|
103
|
+
const selectedOptions = { ...options, environment, delivery };
|
|
101
104
|
const startedAt = new Date().toISOString();
|
|
102
105
|
const logger = options.logger ?? silentLogger;
|
|
103
|
-
const server = createMcpServer(session);
|
|
104
|
-
const android = options.androidAnalysis ?? createAndroidAnalysisProvider();
|
|
105
|
-
const availability = installSessionToolAvailability(
|
|
106
|
+
const server = createMcpServer(session, delivery);
|
|
107
|
+
const android = options.androidAnalysis ?? createAndroidAnalysisProvider(environment);
|
|
108
|
+
const availability = installSessionToolAvailability(session, selectedOptions, environment);
|
|
106
109
|
const toolLogger = logger.child({ layer: "server" });
|
|
107
110
|
const { evidenceById, activeTarget, recordEvidence, recordEvidenceWithUnknown, } = createSessionRecorders(server, session);
|
|
108
111
|
const toolContext = {
|
|
109
112
|
server,
|
|
110
|
-
analysis,
|
|
111
113
|
session,
|
|
112
|
-
options,
|
|
114
|
+
options: selectedOptions,
|
|
115
|
+
environment,
|
|
113
116
|
logger: toolLogger,
|
|
114
117
|
evidenceById,
|
|
115
118
|
activeTarget,
|
|
116
119
|
recordEvidence,
|
|
117
120
|
recordEvidenceWithUnknown,
|
|
121
|
+
withAdmittedAnalysis: withAdmittedAnalysis(source),
|
|
118
122
|
};
|
|
119
123
|
registerBinaryAnalysisTools(toolContext);
|
|
120
124
|
const previousOnclose = server.server.onclose;
|
|
@@ -131,21 +135,12 @@ export const createServer = (analysis, session, options = {}) => {
|
|
|
131
135
|
if (result.status === "rejected")
|
|
132
136
|
throw result.reason;
|
|
133
137
|
};
|
|
134
|
-
|
|
135
|
-
registerBinaryDiagnosticsTools(server, options.binaryLayout ?? createBinaryLayoutService(), toolLogger, recordEvidence);
|
|
136
|
-
registerEvmTools(server, options.evmInterface ?? createEvmInterfaceService(), toolLogger, recordEvidence);
|
|
137
|
-
registerRecordedCrashTools(server, options.recordedCrash ?? createRecordedCrashService(), toolLogger, recordEvidence);
|
|
138
|
-
registerFirmwareTools(server, new FirmwareAnalysisService(options.firmwareAnalysis ?? createFirmwareAnalysisProvider()), toolLogger, recordEvidence);
|
|
138
|
+
registerConfiguredAnalysisTools(toolContext, android);
|
|
139
139
|
registerObservationTools(toolContext);
|
|
140
|
-
registerWebModuleTool(server, options.webModuleTrace ?? createWebModuleTraceService(), toolLogger, recordEvidence);
|
|
141
|
-
registerWebSourceLocationTool(server, options.webSourceLocation ?? createWebSourceLocationService(), toolLogger, recordEvidence);
|
|
142
|
-
registerWebRuntimeTools(server, options.webRuntime ?? createWebRuntimeService(), toolLogger, recordEvidence);
|
|
143
|
-
registerWebNetworkCaptureTool(server, options.webNetworkCapture ?? createWebNetworkCaptureService(), toolLogger, recordEvidence);
|
|
144
|
-
registerJavaScriptRecoveryTool(server, new JavaScriptRecoveryService(options.javascriptRecovery ?? createJavaScriptRecoveryProvider()), toolLogger, recordEvidence);
|
|
145
140
|
registerGuidedPrompts(server, analysis, session);
|
|
146
141
|
if (session !== undefined) {
|
|
147
142
|
registerSessionTools(server, session, toolLogger, {
|
|
148
|
-
...
|
|
143
|
+
...selectedOptions,
|
|
149
144
|
...(availability === undefined
|
|
150
145
|
? {}
|
|
151
146
|
: { availabilityPolicy: availability.policy }),
|
|
@@ -155,6 +150,28 @@ export const createServer = (analysis, session, options = {}) => {
|
|
|
155
150
|
}
|
|
156
151
|
return server;
|
|
157
152
|
};
|
|
153
|
+
const selectToolResultDelivery = (environment, selected) => {
|
|
154
|
+
if (selected !== undefined)
|
|
155
|
+
return selected;
|
|
156
|
+
const configured = parseMcpResponseBudget(environment.REA_MCP_MAX_RESPONSE_BYTES);
|
|
157
|
+
if (!configured.ok)
|
|
158
|
+
throw configured.error;
|
|
159
|
+
return createToolResultDelivery(configured.value);
|
|
160
|
+
};
|
|
161
|
+
const registerConfiguredAnalysisTools = ({ server, options, environment, logger: toolLogger, evidenceById, recordEvidence, }, android) => {
|
|
162
|
+
registerAndroidTools(server, new AndroidAnalysisService(android), toolLogger, recordEvidence);
|
|
163
|
+
registerBinaryDiagnosticsTools(server, options.binaryLayout ?? createBinaryLayoutService(environment), toolLogger, recordEvidence);
|
|
164
|
+
registerAnalysisViewTool(server, toolLogger, evidenceById, recordEvidence);
|
|
165
|
+
registerEvmTools(server, options.evmInterface ?? createEvmInterfaceService(environment), toolLogger, recordEvidence);
|
|
166
|
+
registerRecordedCrashTools(server, options.recordedCrash ?? createRecordedCrashService(environment), toolLogger, recordEvidence);
|
|
167
|
+
registerFirmwareTools(server, new FirmwareAnalysisService(options.firmwareAnalysis ?? createFirmwareAnalysisProvider(environment)), toolLogger, recordEvidence);
|
|
168
|
+
registerWebModuleTool(server, options.webModuleTrace ?? createWebModuleTraceService(environment), toolLogger, recordEvidence);
|
|
169
|
+
registerWebSourceLocationTool(server, options.webSourceLocation ?? createWebSourceLocationService(environment), toolLogger, recordEvidence);
|
|
170
|
+
registerWebRuntimeTools(server, options.webRuntime ?? createWebRuntimeService(), toolLogger, recordEvidence);
|
|
171
|
+
registerWebNetworkCaptureTool(server, options.webNetworkCapture ?? createWebNetworkCaptureService(environment), toolLogger, recordEvidence);
|
|
172
|
+
registerJavaScriptRecoveryTool(server, new JavaScriptRecoveryService(options.javascriptRecovery ??
|
|
173
|
+
createJavaScriptRecoveryProvider(environment)), toolLogger, recordEvidence);
|
|
174
|
+
};
|
|
158
175
|
const createSessionRecorders = (server, session) => ({
|
|
159
176
|
evidenceById: session === undefined
|
|
160
177
|
? undefined
|
|
@@ -163,18 +180,12 @@ const createSessionRecorders = (server, session) => ({
|
|
|
163
180
|
activeTarget: session === undefined ? undefined : () => session.activeTarget(),
|
|
164
181
|
recordEvidence: session === undefined
|
|
165
182
|
? undefined
|
|
166
|
-
: (evidence) =>
|
|
167
|
-
const recorded = session.recordEvidence(evidence);
|
|
168
|
-
return recorded;
|
|
169
|
-
},
|
|
183
|
+
: (evidence) => session.recordEvidence(evidence),
|
|
170
184
|
recordEvidenceWithUnknown: session === undefined
|
|
171
185
|
? undefined
|
|
172
|
-
: (evidence, input) =>
|
|
173
|
-
const recorded = session.recordEvidenceWithUnknown(evidence, input);
|
|
174
|
-
return recorded;
|
|
175
|
-
},
|
|
186
|
+
: (evidence, input) => session.recordEvidenceWithUnknown(evidence, input),
|
|
176
187
|
});
|
|
177
|
-
const registerBinaryAnalysisTools = ({ server,
|
|
188
|
+
const registerBinaryAnalysisTools = ({ server, session, logger, activeTarget, recordEvidence, recordEvidenceWithUnknown, withAdmittedAnalysis, }) => {
|
|
178
189
|
const recordUnknown = session === undefined
|
|
179
190
|
? undefined
|
|
180
191
|
: (input) => session.recordUnknown(input);
|
|
@@ -183,9 +194,10 @@ const registerBinaryAnalysisTools = ({ server, analysis, session, logger, active
|
|
|
183
194
|
activeTarget,
|
|
184
195
|
recordEvidence,
|
|
185
196
|
recordUnknown,
|
|
197
|
+
withAdmittedAnalysis,
|
|
186
198
|
};
|
|
187
|
-
registerOfficialTools(server,
|
|
188
|
-
registerEnhancedTools(server,
|
|
199
|
+
registerOfficialTools(server, analysisOptions);
|
|
200
|
+
registerEnhancedTools(server, {
|
|
189
201
|
...analysisOptions,
|
|
190
202
|
analysisProfile: session === undefined ? undefined : () => session.analysisProfile(),
|
|
191
203
|
allowsSnapshotReplay: session === undefined
|
|
@@ -195,15 +207,15 @@ const registerBinaryAnalysisTools = ({ server, analysis, session, logger, active
|
|
|
195
207
|
? undefined
|
|
196
208
|
: (input) => session.recordWorkflowSnapshot(input),
|
|
197
209
|
});
|
|
198
|
-
const evidenceOptions = {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
210
|
+
const evidenceOptions = {
|
|
211
|
+
logger,
|
|
212
|
+
activeTarget,
|
|
213
|
+
recordEvidence,
|
|
214
|
+
withAdmittedAnalysis,
|
|
215
|
+
};
|
|
216
|
+
registerEvidenceTools(server, NATIVE_TOOL_CONTRACTS, evidenceOptions);
|
|
217
|
+
registerArtifactTools(server, evidenceOptions);
|
|
218
|
+
registerManagedTools(server, evidenceOptions);
|
|
207
219
|
if (session !== undefined)
|
|
208
220
|
registerManagedWorkflowTools(server, {
|
|
209
221
|
logger,
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import { CLIENT_CAPABILITIES_META_KEY, CLIENT_INFO_META_KEY, PROTOCOL_VERSION_META_KEY, } from "@modelcontextprotocol/server";
|
|
2
|
-
/**
|
|
3
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Client metadata for the current request. A 2026-era request carries it in
|
|
4
|
+
* its per-request envelope; a 2025-era connection sends no envelope, so its
|
|
5
|
+
* `initialize` handshake supplies the values.
|
|
6
|
+
*/
|
|
7
|
+
export const mcpClientMetadata = (context, connection) => {
|
|
4
8
|
const envelope = context.mcpReq.envelope;
|
|
5
|
-
|
|
6
|
-
|
|
9
|
+
// The SDK deprecates these accessors only in favor of the envelope, which
|
|
10
|
+
// 2025-era requests do not carry; they still return initialize values.
|
|
11
|
+
const value = (key, initialized) => envelope === undefined ? initialized() : mcpEnvelopeValue(envelope, key);
|
|
12
|
+
const client = implementation(value(CLIENT_INFO_META_KEY, () => connection.getClientVersion()));
|
|
13
|
+
const protocolVersion = value(PROTOCOL_VERSION_META_KEY, () => connection.getNegotiatedProtocolVersion());
|
|
7
14
|
return {
|
|
8
15
|
...(client === undefined ? {} : { client }),
|
|
9
|
-
clientFeatures: capabilityFeatures(
|
|
16
|
+
clientFeatures: capabilityFeatures(value(CLIENT_CAPABILITIES_META_KEY, () => connection.getClientCapabilities())),
|
|
10
17
|
...(typeof protocolVersion === "string" ? { protocolVersion } : {}),
|
|
11
18
|
};
|
|
12
19
|
};
|
|
@@ -2,13 +2,10 @@ import { z } from "zod";
|
|
|
2
2
|
import { uniqueSorted } from "../domain/canonicalOrdering.js";
|
|
3
3
|
import { artifactInventoryResultSchema } from "../domain/artifactGraph.js";
|
|
4
4
|
import { artifactInspectionResultSchema } from "../domain/artifactInspection.js";
|
|
5
|
-
import { parseProcessCapture } from "../domain/process/
|
|
5
|
+
import { parseProcessCapture } from "../domain/process/processCaptureParsing.js";
|
|
6
6
|
const documentListSchema = z.array(z.string().min(1));
|
|
7
7
|
const providerStatusSchema = z.object({
|
|
8
|
-
|
|
9
|
-
analysis_provider_candidates: z
|
|
10
|
-
.array(z.object({ provider: z.object({ id: z.string().min(1) }) }))
|
|
11
|
-
.optional(),
|
|
8
|
+
analysis_provider_candidates: z.array(z.object({ provider: z.object({ id: z.string().min(1) }) })),
|
|
12
9
|
});
|
|
13
10
|
/** Build live completion over the active provider and session ledger. */
|
|
14
11
|
export const createPromptCompletionSource = (analysis, session) => ({
|
|
@@ -74,9 +71,7 @@ const providerCandidates = (session) => {
|
|
|
74
71
|
const parsed = providerStatusSchema.safeParse(session.status());
|
|
75
72
|
if (!parsed.success)
|
|
76
73
|
return [];
|
|
77
|
-
const candidates =
|
|
78
|
-
? (parsed.data.analysis_provider_candidates?.map(({ provider }) => provider.id) ?? [])
|
|
79
|
-
: parsed.data.providers.map(({ id }) => id);
|
|
74
|
+
const candidates = parsed.data.analysis_provider_candidates.map(({ provider }) => provider.id);
|
|
80
75
|
return ["auto", ...candidates];
|
|
81
76
|
};
|
|
82
77
|
const evidenceCandidates = (kind, session) => {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { inspectAnalysisView } from "../application/analysisView/AnalysisViewService.js";
|
|
2
|
+
import { toolContract } from "../contracts/toolContracts.js";
|
|
3
|
+
import { logToolExecution } from "./toolLogging.js";
|
|
4
|
+
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
5
|
+
/** Bind selected-view projection to its named contract and session Evidence owner. */
|
|
6
|
+
export const registerAnalysisViewTool = (server, logger, evidenceById, recordEvidence) => {
|
|
7
|
+
const contract = toolContract("inspect_analysis_view");
|
|
8
|
+
server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
|
|
9
|
+
const result = await logToolExecution(logger, contract.name, () => Promise.resolve(inspectAnalysisView(input, evidenceById)));
|
|
10
|
+
if (!result.ok)
|
|
11
|
+
return server.delivery.toCallToolResult(result, contract);
|
|
12
|
+
const recorded = recordEvidence?.(result.value);
|
|
13
|
+
return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
|
|
14
|
+
});
|
|
15
|
+
};
|
|
@@ -2,7 +2,6 @@ import { AndroidAnalysisService } from "../application/android/AndroidAnalysisSe
|
|
|
2
2
|
import { toolContract } from "../contracts/toolContracts.js";
|
|
3
3
|
import { logToolExecution } from "./toolLogging.js";
|
|
4
4
|
import { toolRegistrationOptions } from "./toolRegistrationOptions.js";
|
|
5
|
-
import { toCallToolResult, toEvidenceToolResult } from "./toolResult.js";
|
|
6
5
|
/** Bind Android handlers to their exact named contracts through shared workflows. */
|
|
7
6
|
export const registerAndroidTools = (server, service, logger, recordEvidence) => {
|
|
8
7
|
const handler = (contract) => {
|
|
@@ -10,9 +9,9 @@ export const registerAndroidTools = (server, service, logger, recordEvidence) =>
|
|
|
10
9
|
return async (input, context) => {
|
|
11
10
|
const result = await logToolExecution(logger, name, () => service.execute(name, input, { signal: context.mcpReq.signal }));
|
|
12
11
|
if (!result.ok)
|
|
13
|
-
return toCallToolResult(result, contract);
|
|
12
|
+
return server.delivery.toCallToolResult(result, contract);
|
|
14
13
|
const recorded = recordEvidence?.(result.value);
|
|
15
|
-
return toEvidenceToolResult(result.value, contract, recorded);
|
|
14
|
+
return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
|
|
16
15
|
};
|
|
17
16
|
};
|
|
18
17
|
const packageContract = toolContract("inspect_android_package");
|
|
@@ -5,7 +5,6 @@ import { applicationToolContract } from "../../contracts/applicationToolContract
|
|
|
5
5
|
import { javaScriptExportShapeComparisonResultSchema } from "../../domain/javascript/javascriptExportShapeComparisonSchemas.js";
|
|
6
6
|
import { logToolExecution } from "../toolLogging.js";
|
|
7
7
|
import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
|
|
8
|
-
import { toCallToolResult } from "../toolResult.js";
|
|
9
8
|
import { recordResult } from "./helpers.js";
|
|
10
9
|
const contract = applicationToolContract("compare_javascript_export_shapes");
|
|
11
10
|
/** Register the execution-free exact JavaScript export-shape comparison. */
|
|
@@ -13,19 +12,20 @@ export const registerCompareJavaScriptExportShapesTool = (server, options) => {
|
|
|
13
12
|
server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
|
|
14
13
|
const resolved = resolvePairedEvidenceRequest(input, options.evidenceById);
|
|
15
14
|
if (!resolved.ok)
|
|
16
|
-
return toCallToolResult(resolved, contract);
|
|
15
|
+
return server.delivery.toCallToolResult(resolved, contract);
|
|
17
16
|
const parsed = resolved.value;
|
|
18
17
|
const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(compareJavaScriptExportShapesEvidenceValidated(parsed)));
|
|
19
18
|
if (!result.ok)
|
|
20
|
-
return toCallToolResult(result, contract);
|
|
19
|
+
return server.delivery.toCallToolResult(result, contract);
|
|
21
20
|
const recorded = recordSessionEvidenceSources(options.recordEvidence, [
|
|
22
21
|
parsed.left,
|
|
23
22
|
parsed.right,
|
|
24
23
|
]);
|
|
25
24
|
if (!recorded.ok)
|
|
26
|
-
return toCallToolResult(recorded, contract);
|
|
25
|
+
return server.delivery.toCallToolResult(recorded, contract);
|
|
27
26
|
const comparison = javaScriptExportShapeComparisonResultSchema.parse(result.value.normalized_result);
|
|
28
|
-
const unknown = comparison.summary.unknown > 0
|
|
29
|
-
|
|
27
|
+
const unknown = comparison.summary.unknown > 0 ||
|
|
28
|
+
comparison.coverage.status !== "complete-within-inputs";
|
|
29
|
+
return recordResult({ ...options, delivery: server.delivery }, contract, result.value, unknown ? "javascript-export-shape" : undefined);
|
|
30
30
|
});
|
|
31
31
|
};
|
|
@@ -5,7 +5,6 @@ import { applicationToolContract } from "../../contracts/applicationToolContract
|
|
|
5
5
|
import { sourceToBundleComparisonResultSchema } from "../../domain/javascript/sourceToBundleComparisonSchemas.js";
|
|
6
6
|
import { logToolExecution } from "../toolLogging.js";
|
|
7
7
|
import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
|
|
8
|
-
import { toCallToolResult } from "../toolResult.js";
|
|
9
8
|
import { recordResult } from "./helpers.js";
|
|
10
9
|
const contract = applicationToolContract("compare_source_to_bundle");
|
|
11
10
|
/** Register conservative historical-source to bundle comparison. */
|
|
@@ -13,18 +12,18 @@ export const registerCompareSourceToBundleTool = (server, options) => {
|
|
|
13
12
|
server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
|
|
14
13
|
const resolved = resolveApplicationEvidenceRequest(input, options.evidenceById);
|
|
15
14
|
if (!resolved.ok)
|
|
16
|
-
return toCallToolResult(resolved, contract);
|
|
15
|
+
return server.delivery.toCallToolResult(resolved, contract);
|
|
17
16
|
const parsed = resolved.value;
|
|
18
17
|
const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(compareSourceToBundleEvidenceValidated(parsed)));
|
|
19
18
|
if (!result.ok)
|
|
20
|
-
return toCallToolResult(result, contract);
|
|
19
|
+
return server.delivery.toCallToolResult(result, contract);
|
|
21
20
|
const recorded = recordSessionEvidenceSources(options.recordEvidence, [
|
|
22
21
|
parsed.application,
|
|
23
22
|
]);
|
|
24
23
|
if (!recorded.ok)
|
|
25
|
-
return toCallToolResult(recorded, contract);
|
|
24
|
+
return server.delivery.toCallToolResult(recorded, contract);
|
|
26
25
|
const comparison = sourceToBundleComparisonResultSchema.parse(result.value.normalized_result);
|
|
27
|
-
return recordResult(options, contract, result.value, comparison.summary.unknown > 0
|
|
26
|
+
return recordResult({ ...options, delivery: server.delivery }, contract, result.value, comparison.summary.unknown > 0
|
|
28
27
|
? "source-to-bundle-comparison"
|
|
29
28
|
: undefined);
|
|
30
29
|
});
|
|
@@ -5,7 +5,6 @@ import { applicationToolContract } from "../../contracts/applicationToolContract
|
|
|
5
5
|
import { applicationVersionComparisonResultSchema } from "../../domain/javascript/javascriptApplicationVersionComparisonSchemas.js";
|
|
6
6
|
import { logToolExecution } from "../toolLogging.js";
|
|
7
7
|
import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
|
|
8
|
-
import { toCallToolResult } from "../toolResult.js";
|
|
9
8
|
import { recordResult } from "./helpers.js";
|
|
10
9
|
const compareContract = applicationToolContract("compare_application_versions");
|
|
11
10
|
/** Register the provider-neutral JavaScript version comparison tool. */
|
|
@@ -13,11 +12,11 @@ export const registerCompareApplicationVersionsTool = (server, options) => {
|
|
|
13
12
|
server.registerTool(compareContract.name, toolRegistrationOptions(compareContract), async (input) => {
|
|
14
13
|
const resolved = resolvePairedEvidenceRequest(input, options.evidenceById);
|
|
15
14
|
if (!resolved.ok)
|
|
16
|
-
return toCallToolResult(resolved, compareContract);
|
|
15
|
+
return server.delivery.toCallToolResult(resolved, compareContract);
|
|
17
16
|
const parsed = resolved.value;
|
|
18
17
|
const result = await logToolExecution(options.logger, compareContract.name, () => Promise.resolve(compareApplicationVersionsEvidenceValidated(parsed)));
|
|
19
18
|
if (!result.ok)
|
|
20
|
-
return toCallToolResult(result, compareContract);
|
|
19
|
+
return server.delivery.toCallToolResult(result, compareContract);
|
|
21
20
|
const sources = [
|
|
22
21
|
parsed.left,
|
|
23
22
|
parsed.right,
|
|
@@ -26,9 +25,9 @@ export const registerCompareApplicationVersionsTool = (server, options) => {
|
|
|
26
25
|
];
|
|
27
26
|
const recorded = recordSessionEvidenceSources(options.recordEvidence, sources);
|
|
28
27
|
if (!recorded.ok)
|
|
29
|
-
return toCallToolResult(recorded, compareContract);
|
|
28
|
+
return server.delivery.toCallToolResult(recorded, compareContract);
|
|
30
29
|
const comparison = applicationVersionComparisonResultSchema.parse(result.value.normalized_result);
|
|
31
30
|
const unknown = comparison.summary.unknown > 0;
|
|
32
|
-
return recordResult(options, compareContract, result.value, unknown ? "application-version-comparison" : undefined);
|
|
31
|
+
return recordResult({ ...options, delivery: server.delivery }, compareContract, result.value, unknown ? "application-version-comparison" : undefined);
|
|
33
32
|
});
|
|
34
33
|
};
|
|
@@ -2,12 +2,11 @@ import { evaluateReconstructionCoverage } from "../../application/Reconstruction
|
|
|
2
2
|
import { applicationToolContract } from "../../contracts/applicationToolContracts.js";
|
|
3
3
|
import { logToolExecution } from "../toolLogging.js";
|
|
4
4
|
import { toolRegistrationOptions } from "../toolRegistrationOptions.js";
|
|
5
|
-
import { toCallToolResult } from "../toolResult.js";
|
|
6
5
|
const contract = applicationToolContract("evaluate_reconstruction_coverage");
|
|
7
6
|
/** Register the inline fail-closed reconstruction coverage evaluator. */
|
|
8
7
|
export const registerCoverageTools = (server, options) => {
|
|
9
8
|
server.registerTool(contract.name, toolRegistrationOptions(contract), async (input) => {
|
|
10
9
|
const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve(evaluateReconstructionCoverage(input)));
|
|
11
|
-
return toCallToolResult(result, contract);
|
|
10
|
+
return server.delivery.toCallToolResult(result, contract);
|
|
12
11
|
});
|
|
13
12
|
};
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { APPLICATION_TOOL_CONTRACTS } from "../../contracts/applicationToolContracts.js";
|
|
2
|
-
import { toEvidenceToolResult } from "../toolResult.js";
|
|
3
2
|
export const recordResult = (options, contract, evidence, unknownKind) => {
|
|
4
3
|
const recorded = unknownKind === undefined
|
|
5
4
|
? options.recordEvidence?.(evidence)
|
|
6
5
|
: options.recordEvidenceWithUnknown?.(evidence, unknownRegistration(evidence, unknownKind));
|
|
7
|
-
return toEvidenceToolResult(evidence, contract, recorded);
|
|
6
|
+
return options.delivery.toEvidenceToolResult(evidence, contract, recorded);
|
|
8
7
|
};
|
|
9
8
|
const unknownRegistration = (evidence, kind) => ({
|
|
10
|
-
|
|
9
|
+
// Scope unknown identity to the comparison while keeping exact replays stable.
|
|
10
|
+
question: `${kind === "application-version-comparison"
|
|
11
11
|
? "Which application entities remain unmatched or ambiguous across these versions?"
|
|
12
12
|
: kind === "source-to-bundle-comparison"
|
|
13
13
|
? "Which historical source files remain unmatched or ambiguously mapped to the shipped bundle?"
|
|
14
|
-
: "Which selected JavaScript export return shapes remain dynamic, incomplete, or ambiguously paired?"
|
|
14
|
+
: "Which selected JavaScript export return shapes remain dynamic, incomplete, or ambiguously paired?"} (comparison ${evidence.evidence_id})`,
|
|
15
15
|
severity: "medium",
|
|
16
16
|
domain: kind,
|
|
17
17
|
supporting_evidence_ids: [evidence.evidence_id],
|