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
|
@@ -2,7 +2,6 @@ import { toolContract } from "../contracts/toolContracts.js";
|
|
|
2
2
|
import { mcpProgressReporter } from "./mcpProgress.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 distinct runtime operations to named contracts and the session's Evidence owner. */
|
|
7
6
|
export const registerWebRuntimeTools = (server, service, logger, recordEvidence) => {
|
|
8
7
|
const execution = toolContract("observe_web_execution");
|
|
@@ -13,15 +12,15 @@ export const registerWebRuntimeTools = (server, service, logger, recordEvidence)
|
|
|
13
12
|
progress: mcpProgressReporter(context),
|
|
14
13
|
}));
|
|
15
14
|
if (!result.ok)
|
|
16
|
-
return toCallToolResult(result, execution);
|
|
15
|
+
return server.delivery.toCallToolResult(result, execution);
|
|
17
16
|
const recorded = recordEvidence?.(result.value);
|
|
18
|
-
return toEvidenceToolResult(result.value, execution, recorded);
|
|
17
|
+
return server.delivery.toEvidenceToolResult(result.value, execution, recorded);
|
|
19
18
|
});
|
|
20
19
|
server.registerTool(listeners.name, toolRegistrationOptions(listeners), async (input, context) => {
|
|
21
20
|
const result = await logToolExecution(logger, listeners.name, () => service.inspect(input, { signal: context.mcpReq.signal }));
|
|
22
21
|
if (!result.ok)
|
|
23
|
-
return toCallToolResult(result, listeners);
|
|
22
|
+
return server.delivery.toCallToolResult(result, listeners);
|
|
24
23
|
const recorded = recordEvidence?.(result.value);
|
|
25
|
-
return toEvidenceToolResult(result.value, listeners, recorded);
|
|
24
|
+
return server.delivery.toEvidenceToolResult(result.value, listeners, recorded);
|
|
26
25
|
});
|
|
27
26
|
};
|
|
@@ -2,15 +2,14 @@ import { exportWebScriptsValidated } from "../application/WebScriptExportService
|
|
|
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
|
/** Register local script export without requiring a live browser provider. */
|
|
7
6
|
export const registerWebScriptTool = (server, options) => {
|
|
8
7
|
const contract = toolContract("export_web_scripts");
|
|
9
8
|
server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
|
|
10
9
|
const result = await logToolExecution(options.logger, contract.name, () => exportWebScriptsValidated(input, { signal: context.mcpReq.signal }));
|
|
11
10
|
if (!result.ok)
|
|
12
|
-
return toCallToolResult(result, contract);
|
|
11
|
+
return server.delivery.toCallToolResult(result, contract);
|
|
13
12
|
const recorded = options.recordEvidence?.(result.value);
|
|
14
|
-
return toEvidenceToolResult(result.value, contract, recorded);
|
|
13
|
+
return server.delivery.toEvidenceToolResult(result.value, contract, recorded);
|
|
15
14
|
});
|
|
16
15
|
};
|
|
@@ -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 source point tracing to its exact named contract and session Evidence owner. */
|
|
6
5
|
export const registerWebSourceLocationTool = (server, service, logger, recordEvidence) => {
|
|
7
6
|
const contract = toolContract("trace_web_source_location");
|
|
8
7
|
server.registerTool(contract.name, toolRegistrationOptions(contract), async (input, context) => {
|
|
9
8
|
const result = await logToolExecution(logger, contract.name, () => service.trace(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
|
};
|
|
@@ -2,104 +2,76 @@ import { STDIO_DEFAULT_MAX_BUFFER_SIZE } from "@modelcontextprotocol/server";
|
|
|
2
2
|
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
3
3
|
import {} from "../domain/analysisErrorBase.js";
|
|
4
4
|
import { AnalysisResourceConstraintError } from "../domain/analysisErrorCore.js";
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
5
|
+
import { encodeToolResult, MCP_RESULT_STRING_LIMIT, } from "./toolResultEncoding.js";
|
|
6
|
+
/** Create one delivery policy from the already selected, parsed response budget. */
|
|
7
|
+
export const createToolResultDelivery = (maximumResponseBytes) => new ToolResultDelivery(maximumResponseBytes ?? STDIO_DEFAULT_MAX_BUFFER_SIZE);
|
|
8
|
+
/** Immutable encoding and recovery policy shared by one MCP server. */
|
|
9
|
+
export class ToolResultDelivery {
|
|
10
|
+
resultBudgetBytes;
|
|
11
|
+
constructor(maximumResponseBytes) {
|
|
12
|
+
this.resultBudgetBytes = maximumResponseBytes - 1024;
|
|
13
|
+
Object.freeze(this);
|
|
14
|
+
}
|
|
15
|
+
/** Serialize a plain application result or its actionable error. */
|
|
16
|
+
toCallToolResult(result, contract) {
|
|
17
|
+
return result.ok
|
|
18
|
+
? this.successResult(contract.kind === "session" ? { result: result.value } : result.value, contract)
|
|
19
|
+
: this.toErrorToolResult(result.error);
|
|
20
|
+
}
|
|
21
|
+
/** Deliver Evidence using the producer's explicit recording acknowledgment. */
|
|
22
|
+
toEvidenceToolResult(evidence, contract, recorded) {
|
|
23
|
+
return recorded !== undefined && !recorded.ok
|
|
24
|
+
? this.toErrorToolResult(recorded.error)
|
|
25
|
+
: this.successResult(evidence, contract, {
|
|
26
|
+
evidence_id: evidence.evidence_id,
|
|
27
|
+
...(recorded === undefined
|
|
28
|
+
? {}
|
|
29
|
+
: {
|
|
30
|
+
evidence_reference: {
|
|
31
|
+
kind: "retained-evidence",
|
|
32
|
+
evidence_id: evidence.evidence_id,
|
|
33
|
+
},
|
|
34
|
+
}),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/** Project an error without allocating oversized repeated MCP text. */
|
|
38
|
+
toErrorToolResult(error) {
|
|
39
|
+
const structuredContent = { error: projectAnalysisError(error) };
|
|
40
|
+
// Errors reach the wire as text only; the structured copy is a private
|
|
41
|
+
// carrier the transport removes after its own budget check.
|
|
42
|
+
const encoded = encodeToolResult(structuredContent, this.resultBudgetBytes, "text");
|
|
43
|
+
// The transport retains an oversized projected error before replacing it
|
|
44
|
+
// with a recoverable delivery constraint, using this same budget.
|
|
45
|
+
return {
|
|
46
|
+
content: encoded.ok ? [{ type: "text", text: encoded.text }] : [],
|
|
47
|
+
structuredContent,
|
|
48
|
+
isError: true,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
successResult(value, contract, recovery = {}) {
|
|
52
|
+
const encoded = encodeToolResult(value, this.resultBudgetBytes);
|
|
53
|
+
if (encoded.ok)
|
|
54
|
+
return {
|
|
55
|
+
content: [{ type: "text", text: encoded.text }],
|
|
56
|
+
structuredContent: value,
|
|
57
|
+
};
|
|
58
|
+
const retainedEvidence = recovery.evidence_reference !== undefined;
|
|
59
|
+
const recoveryAdvice = retainedEvidence
|
|
60
|
+
? "Export retained evidence to consume the complete analysis, or use complete CLI JSON output."
|
|
61
|
+
: encoded.constraint === "string-length"
|
|
62
|
+
? "Use complete CLI JSON output to consume the analysis."
|
|
63
|
+
: "Use a larger MCP response budget with a matching client receive buffer, or use complete CLI JSON output to consume the analysis.";
|
|
64
|
+
return this.toErrorToolResult(new AnalysisResourceConstraintError(contract.name, "transport", encoded.constraint === "string-length"
|
|
65
|
+
? `The operation completed, but its complete MCP response exceeds Node's single-string representation limit. ${recoveryAdvice}`
|
|
66
|
+
: `The operation completed, but its complete MCP response exceeds the stdio response budget. The analysis result was not truncated. ${recoveryAdvice}`, {
|
|
53
67
|
boundary: "mcp-response",
|
|
54
68
|
default_receive_buffer_bytes: STDIO_DEFAULT_MAX_BUFFER_SIZE,
|
|
55
|
-
result_budget_bytes:
|
|
69
|
+
result_budget_bytes: this.resultBudgetBytes,
|
|
56
70
|
max_string_code_units: MCP_RESULT_STRING_LIMIT,
|
|
57
71
|
response_bytes_at_least: encoded.bytesAtLeast,
|
|
58
72
|
response_code_units_at_least: encoded.codeUnitsAtLeast,
|
|
59
73
|
constraint: encoded.constraint,
|
|
60
|
-
...
|
|
74
|
+
...recovery,
|
|
61
75
|
}));
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
{
|
|
65
|
-
type: "text",
|
|
66
|
-
text: encoded.text,
|
|
67
|
-
},
|
|
68
|
-
],
|
|
69
|
-
structuredContent: candidate,
|
|
70
|
-
};
|
|
71
|
-
};
|
|
72
|
-
const evidenceRecovery = (value, retainedEvidenceId) => {
|
|
73
|
-
const projected = projectEvidence(value);
|
|
74
|
-
if (projected === undefined ||
|
|
75
|
-
typeof projected !== "object" ||
|
|
76
|
-
projected === null ||
|
|
77
|
-
Array.isArray(projected))
|
|
78
|
-
return {};
|
|
79
|
-
if (projected.evidence_id !== retainedEvidenceId)
|
|
80
|
-
return { evidence_id: projected.evidence_id ?? null };
|
|
81
|
-
return {
|
|
82
|
-
evidence_reference: {
|
|
83
|
-
kind: "retained-evidence",
|
|
84
|
-
evidence_id: projected.evidence_id ?? null,
|
|
85
|
-
},
|
|
86
|
-
};
|
|
87
|
-
};
|
|
88
|
-
const projectEvidence = (value) => {
|
|
89
|
-
if (typeof value !== "object" ||
|
|
90
|
-
value === null ||
|
|
91
|
-
Array.isArray(value) ||
|
|
92
|
-
typeof value.evidence_id !== "string" ||
|
|
93
|
-
!/^ev_[a-f0-9]{64}$/u.test(value.evidence_id) ||
|
|
94
|
-
!("normalized_result" in value))
|
|
95
|
-
return undefined;
|
|
96
|
-
const normalizedResult = value.normalized_result;
|
|
97
|
-
const evidenceId = value.evidence_id;
|
|
98
|
-
if (normalizedResult === undefined || typeof evidenceId !== "string")
|
|
99
|
-
return undefined;
|
|
100
|
-
return {
|
|
101
|
-
result: normalizedResult,
|
|
102
|
-
evidence_id: evidenceId,
|
|
103
|
-
evidence: value,
|
|
104
|
-
};
|
|
105
|
-
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -1,23 +1,24 @@
|
|
|
1
|
-
import { STDIO_DEFAULT_MAX_BUFFER_SIZE } from "@modelcontextprotocol/server";
|
|
2
1
|
import { constants as bufferConstants } from "node:buffer";
|
|
3
2
|
import { bufferedJsonParts, jsonParts } from "../domain/jsonSerialization.js";
|
|
4
|
-
// Leave room for the SDK's JSON-RPC envelope and protocol metadata. This budget
|
|
5
|
-
// follows the pinned client's actual default framing limit, not a result-row cap.
|
|
6
|
-
export const MCP_RESULT_BUDGET_BYTES = STDIO_DEFAULT_MAX_BUFFER_SIZE - 1024;
|
|
7
3
|
export const MCP_RESULT_STRING_LIMIT = bufferConstants.MAX_STRING_LENGTH - 1024;
|
|
8
4
|
const RESULT_ENVELOPE_BYTES = Buffer.byteLength(JSON.stringify({
|
|
9
5
|
content: [{ type: "text", text: "" }],
|
|
10
6
|
structuredContent: null,
|
|
11
7
|
})) - 4;
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
const TEXT_RESULT_ENVELOPE_BYTES = Buffer.byteLength(JSON.stringify({ content: [{ type: "text", text: "" }] }));
|
|
9
|
+
/** Account for the delivered JSON representations before allocating the complete text. */
|
|
10
|
+
export const encodeToolResult = (value, budgetBytes, representations = "structured-and-text") => {
|
|
11
|
+
const structured = representations === "structured-and-text";
|
|
14
12
|
const parts = [];
|
|
15
|
-
let bytes = RESULT_ENVELOPE_BYTES;
|
|
16
|
-
let codeUnits =
|
|
13
|
+
let bytes = structured ? RESULT_ENVELOPE_BYTES : TEXT_RESULT_ENVELOPE_BYTES;
|
|
14
|
+
let codeUnits = bytes;
|
|
17
15
|
for (const part of bufferedJsonParts(jsonParts(value))) {
|
|
18
16
|
const escapedPart = JSON.stringify(part);
|
|
19
|
-
bytes +=
|
|
20
|
-
|
|
17
|
+
bytes +=
|
|
18
|
+
(structured ? Buffer.byteLength(part) : 0) +
|
|
19
|
+
Buffer.byteLength(escapedPart) -
|
|
20
|
+
2;
|
|
21
|
+
codeUnits += (structured ? part.length : 0) + escapedPart.length - 2;
|
|
21
22
|
if (bytes > budgetBytes || codeUnits > MCP_RESULT_STRING_LIMIT)
|
|
22
23
|
return {
|
|
23
24
|
ok: false,
|
|
@@ -34,6 +34,7 @@ const inspectionSchema = z.strictObject({
|
|
|
34
34
|
privateDacl: z.literal(true),
|
|
35
35
|
atomicJobAssignment: z.literal(true),
|
|
36
36
|
killOnOwnerClose: z.literal(true),
|
|
37
|
+
protocolStdin: z.boolean().optional(),
|
|
37
38
|
});
|
|
38
39
|
const bindingSchema = z.strictObject({
|
|
39
40
|
call: z.custom((value) => typeof value === "function"),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EventEmitter } from "node:events";
|
|
2
|
-
import { PassThrough } from "node:stream";
|
|
2
|
+
import { PassThrough, Writable } from "node:stream";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { requireWindowsNativeAuthority, windowsHandleSchema, } from "./WindowsNativeLoader.js";
|
|
5
5
|
const launchSchema = z.strictObject({
|
|
@@ -26,6 +26,7 @@ export const quoteWindowsProcessArgument = (value) => {
|
|
|
26
26
|
export class WindowsOwnedProcess extends EventEmitter {
|
|
27
27
|
stdout = new PassThrough();
|
|
28
28
|
stderr = new PassThrough();
|
|
29
|
+
stdin;
|
|
29
30
|
signalCode = null;
|
|
30
31
|
exitCode = null;
|
|
31
32
|
pid;
|
|
@@ -34,13 +35,14 @@ export class WindowsOwnedProcess extends EventEmitter {
|
|
|
34
35
|
#settled;
|
|
35
36
|
#settle;
|
|
36
37
|
#closed = false;
|
|
37
|
-
#verifiedSettlement = false;
|
|
38
38
|
#failure;
|
|
39
39
|
#timer;
|
|
40
40
|
#cleanup;
|
|
41
|
-
constructor(command, arguments_, cwd, environment, verbatim) {
|
|
41
|
+
constructor(command, arguments_, cwd, environment, verbatim, protocolStdin = false) {
|
|
42
42
|
super();
|
|
43
43
|
this.#authority = requireWindowsNativeAuthority();
|
|
44
|
+
if (protocolStdin && this.#authority.inspection.protocolStdin !== true)
|
|
45
|
+
throw new Error("The bundled Windows native artifact does not support owned protocol stdin; use a matching current Windows x64 REA package.");
|
|
44
46
|
const entries = Object.entries(environment)
|
|
45
47
|
.filter((entry) => entry[1] !== undefined)
|
|
46
48
|
.map(([key, value]) => `${key}=${value}`);
|
|
@@ -55,14 +57,55 @@ export class WindowsOwnedProcess extends EventEmitter {
|
|
|
55
57
|
line,
|
|
56
58
|
cwd ?? "",
|
|
57
59
|
entries,
|
|
60
|
+
...(protocolStdin ? [true] : []),
|
|
58
61
|
]));
|
|
59
62
|
this.pid = launched.pid;
|
|
60
63
|
this.#handle = launched.handle;
|
|
64
|
+
this.stdin = protocolStdin
|
|
65
|
+
? new Writable({
|
|
66
|
+
write: (chunk, _encoding, callback) => {
|
|
67
|
+
void this.#writeInput(chunk).then(() => callback(), (cause) => callback(cause instanceof Error ? cause : new Error(String(cause))));
|
|
68
|
+
},
|
|
69
|
+
final: (callback) => {
|
|
70
|
+
try {
|
|
71
|
+
this.#authority.call("process_stdin_close", [this.#handle]);
|
|
72
|
+
callback();
|
|
73
|
+
}
|
|
74
|
+
catch (cause) {
|
|
75
|
+
callback(cause instanceof Error ? cause : new Error(String(cause)));
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
destroy: (cause, callback) => {
|
|
79
|
+
try {
|
|
80
|
+
if (!this.#closed)
|
|
81
|
+
this.#authority.call("process_stdin_close", [this.#handle]);
|
|
82
|
+
callback(cause);
|
|
83
|
+
}
|
|
84
|
+
catch (failure) {
|
|
85
|
+
callback(failure instanceof Error ? failure : new Error(String(failure)));
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
})
|
|
89
|
+
: null;
|
|
61
90
|
this.#settled = new Promise((resolve) => {
|
|
62
91
|
this.#settle = resolve;
|
|
63
92
|
});
|
|
64
93
|
this.#schedule();
|
|
65
94
|
}
|
|
95
|
+
async #writeInput(chunk) {
|
|
96
|
+
const bytes = z.instanceof(Buffer).parse(chunk);
|
|
97
|
+
const written = z
|
|
98
|
+
.number()
|
|
99
|
+
.int()
|
|
100
|
+
.nonnegative()
|
|
101
|
+
.max(Number.MAX_SAFE_INTEGER)
|
|
102
|
+
.parse(await this.#authority.call("process_stdin_write", [
|
|
103
|
+
this.#handle,
|
|
104
|
+
bytes,
|
|
105
|
+
]));
|
|
106
|
+
if (written !== bytes.length)
|
|
107
|
+
throw new Error("Owned Windows input write did not preserve all requested bytes");
|
|
108
|
+
}
|
|
66
109
|
/** Terminate the retained job, never a PID supplied by another caller. */
|
|
67
110
|
kill(signal) {
|
|
68
111
|
if (signal === 0)
|
|
@@ -78,27 +121,27 @@ export class WindowsOwnedProcess extends EventEmitter {
|
|
|
78
121
|
}
|
|
79
122
|
/** Terminate and verify that the entire job has settled before releasing it. */
|
|
80
123
|
cleanup() {
|
|
81
|
-
this.#cleanup ??= this.#stop()
|
|
124
|
+
this.#cleanup ??= this.#stop().then((result) => {
|
|
125
|
+
if (!result.cleaned)
|
|
126
|
+
this.#cleanup = undefined;
|
|
127
|
+
return result;
|
|
128
|
+
});
|
|
82
129
|
return this.#cleanup;
|
|
83
130
|
}
|
|
84
131
|
async #stop() {
|
|
85
132
|
if (this.#closed)
|
|
86
|
-
return
|
|
87
|
-
? { cleaned: true, signaled: false }
|
|
88
|
-
: {
|
|
89
|
-
cleaned: false,
|
|
90
|
-
reason: this.#failure ?? "Windows Job Object settlement was not verified",
|
|
91
|
-
};
|
|
133
|
+
return { cleaned: true, signaled: false };
|
|
92
134
|
let timer;
|
|
93
135
|
try {
|
|
94
136
|
const signaled = this.kill();
|
|
137
|
+
this.#schedule();
|
|
95
138
|
const settled = await Promise.race([
|
|
96
139
|
this.#settled.then(() => true),
|
|
97
140
|
new Promise((resolve) => {
|
|
98
141
|
timer = setTimeout(() => resolve(false), 5_000);
|
|
99
142
|
}),
|
|
100
143
|
]);
|
|
101
|
-
return settled
|
|
144
|
+
return settled
|
|
102
145
|
? { cleaned: true, signaled }
|
|
103
146
|
: {
|
|
104
147
|
cleaned: false,
|
|
@@ -115,18 +158,20 @@ export class WindowsOwnedProcess extends EventEmitter {
|
|
|
115
158
|
finally {
|
|
116
159
|
if (timer !== undefined)
|
|
117
160
|
clearTimeout(timer);
|
|
118
|
-
if (!this.#closed)
|
|
119
|
-
this.#release();
|
|
120
161
|
}
|
|
121
162
|
}
|
|
122
163
|
#schedule() {
|
|
164
|
+
if (this.#closed || this.#timer !== undefined)
|
|
165
|
+
return;
|
|
123
166
|
this.#timer = setTimeout(() => this.#poll(), 25);
|
|
124
167
|
}
|
|
125
168
|
#poll() {
|
|
169
|
+
this.#timer = undefined;
|
|
126
170
|
if (this.#closed)
|
|
127
171
|
return;
|
|
128
172
|
try {
|
|
129
173
|
const state = pollSchema.parse(this.#authority.call("process_poll", [this.#handle]));
|
|
174
|
+
this.#failure = undefined;
|
|
130
175
|
if (state.stdout.length > 0)
|
|
131
176
|
this.stdout.write(state.stdout);
|
|
132
177
|
if (state.stderr.length > 0)
|
|
@@ -139,7 +184,6 @@ export class WindowsOwnedProcess extends EventEmitter {
|
|
|
139
184
|
state.stdoutEnded &&
|
|
140
185
|
state.stderrEnded &&
|
|
141
186
|
state.activeProcesses === 0) {
|
|
142
|
-
this.#verifiedSettlement = true;
|
|
143
187
|
this.#release();
|
|
144
188
|
}
|
|
145
189
|
else
|
|
@@ -152,7 +196,7 @@ export class WindowsOwnedProcess extends EventEmitter {
|
|
|
152
196
|
// the captured stderr observation produced by the child itself.
|
|
153
197
|
if (this.listenerCount("error") > 0)
|
|
154
198
|
this.emit("error", failure);
|
|
155
|
-
|
|
199
|
+
// Retain the original job so explicit cleanup can retry its observation.
|
|
156
200
|
}
|
|
157
201
|
}
|
|
158
202
|
#release() {
|
|
@@ -162,6 +206,7 @@ export class WindowsOwnedProcess extends EventEmitter {
|
|
|
162
206
|
clearTimeout(this.#timer);
|
|
163
207
|
this.#authority.call("process_close", [this.#handle]);
|
|
164
208
|
this.#closed = true;
|
|
209
|
+
this.stdin?.destroy();
|
|
165
210
|
this.stdout.end();
|
|
166
211
|
this.stderr.end();
|
|
167
212
|
this.#settle?.();
|
|
@@ -105,7 +105,10 @@ export class WindowsPrivateRuntime {
|
|
|
105
105
|
}
|
|
106
106
|
/** Remove owned objects by handle, unlinking reparse entries without traversal. */
|
|
107
107
|
close() {
|
|
108
|
-
this.#closePromise ??= this.#remove()
|
|
108
|
+
this.#closePromise ??= this.#remove().catch((cause) => {
|
|
109
|
+
this.#closePromise = undefined;
|
|
110
|
+
throw cause;
|
|
111
|
+
});
|
|
109
112
|
return this.#closePromise;
|
|
110
113
|
}
|
|
111
114
|
async #remove() {
|
|
@@ -114,13 +117,9 @@ export class WindowsPrivateRuntime {
|
|
|
114
117
|
if (this.#pending !== undefined)
|
|
115
118
|
this.authority.call("runtime_snapshot_cancel", [this.observation.handle]);
|
|
116
119
|
await this.#pending?.catch(() => undefined);
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
finally {
|
|
121
|
-
this.#closed = true;
|
|
122
|
-
runtimes.delete(this.observation.path.toLowerCase());
|
|
123
|
-
}
|
|
120
|
+
this.authority.call("runtime_close", [this.observation.handle]);
|
|
121
|
+
this.#closed = true;
|
|
122
|
+
runtimes.delete(this.observation.path.toLowerCase());
|
|
124
123
|
}
|
|
125
124
|
}
|
|
126
125
|
/** Select an already-owned runtime; an arbitrary pathname cannot grant authority. */
|
package/native/windows/README.md
CHANGED
|
@@ -57,7 +57,9 @@ without this lane reports Windows native controls as unavailable.
|
|
|
57
57
|
deduplicated using Windows ordinal comparison, preserving their native Unicode
|
|
58
58
|
semantics and caller-selected values.
|
|
59
59
|
- Cleanup walks locked directory objects, removes files by handle, and unlinks
|
|
60
|
-
reparse entries without traversing their targets.
|
|
60
|
+
reparse entries without traversing their targets. Failed removal retains the
|
|
61
|
+
root and ancestor leases for retry; a partially removed runtime accepts only
|
|
62
|
+
cleanup, and its registry entry remains until removal succeeds. Normal close, cancellation,
|
|
61
63
|
startup failure, and timeout release provider resources. Abrupt owner death
|
|
62
64
|
kills the owned job; it can leave private runtime files for later operator
|
|
63
65
|
cleanup and does not claim transactional deletion after a crash.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"packageVersion": "6.
|
|
2
|
+
"packageVersion": "6.3.0",
|
|
3
3
|
"platform": "win32",
|
|
4
4
|
"architecture": "x64",
|
|
5
5
|
"abiVersion": 1,
|
|
6
6
|
"nodeApiVersion": 8,
|
|
7
7
|
"artifact": "rea-windows-x64.node",
|
|
8
|
-
"artifactSha256": "
|
|
8
|
+
"artifactSha256": "fedfd4ce8b3e15784d1a6ef7e9ba7eb9052e8335a1c75b6d69cd7e94f29ab1f8"
|
|
9
9
|
}
|
|
Binary file
|