rea-agents 6.1.0 → 6.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -5
- package/bridge/ghidra/ReaGhidraBridge.java +32 -4
- package/bridge/hopper_bridge.py +6 -1
- package/dist/android/JadxConfiguration.js +87 -7
- package/dist/android/JadxMcpTransport.js +14 -2
- package/dist/android/JadxProvider.js +57 -35
- package/dist/application/BinaryTargetResolver.js +5 -3
- package/dist/application/BrowserEvidence.js +3 -8
- package/dist/application/BrowserScenarioEvidence.js +2 -18
- package/dist/application/CapabilityInventory.js +43 -9
- package/dist/application/ClientConfigurationDocument.js +69 -25
- package/dist/application/DirectAnalysis.js +29 -14
- package/dist/application/DirectAnalysisCleanup.js +72 -0
- package/dist/application/DirectAnalysisStatus.js +4 -5
- package/dist/application/Doctor.js +15 -19
- package/dist/application/DoctorDiagnostics.js +1 -2
- package/dist/application/EnhancedTools.js +51 -6
- package/dist/application/EvidenceBundleFiles.js +8 -3
- package/dist/application/InvestigationProviders.js +9 -1
- package/dist/application/JsonFiles.js +42 -9
- package/dist/application/LinuxHopper.js +9 -6
- package/dist/application/MacHopper.js +15 -18
- package/dist/application/RealHopperAssertions.js +0 -11
- package/dist/application/ReconstructionObligationCandidates.js +1 -1
- package/dist/application/ReferenceSourceImportEntries.js +1 -1
- package/dist/application/Setup.js +8 -16
- package/dist/application/SetupHost.js +16 -27
- package/dist/application/SetupPlan.js +6 -6
- package/dist/application/Uninstall.js +81 -29
- package/dist/application/UpdateMaintenance.js +7 -5
- package/dist/application/UpdateRuntime.js +12 -12
- package/dist/application/WebScriptExportService.js +30 -4
- package/dist/application/WorkflowEvidence.js +25 -2
- package/dist/application/XrefsAddressResolution.js +45 -0
- package/dist/application/analysisView/AnalysisViewService.js +76 -0
- package/dist/application/binary/AnalysisClientCleanup.js +30 -5
- package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
- package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
- package/dist/application/binary/AnalysisSnapshotCache.js +10 -8
- package/dist/application/binary/BinarySession.js +70 -29
- package/dist/application/binary/BinarySessionComposition.js +1 -3
- package/dist/application/binary/BinarySessionExecution.js +3 -5
- package/dist/application/binary/BinarySessionOpen.js +1 -1
- package/dist/application/binary/BinarySessionRecords.js +1 -1
- package/dist/application/binary/BinarySessionStatus.js +1 -6
- package/dist/application/binary/CompositeProvider.js +4 -18
- package/dist/application/binary/LazyAnalysisProvider.js +5 -5
- package/dist/application/binary/SessionProviderRouter.js +27 -135
- package/dist/application/homebrew.js +48 -0
- package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +2 -6
- package/dist/application/javascript/JavaScriptApplicationService.js +6 -1
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -3
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +11 -9
- package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
- package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
- package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
- package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +43 -16
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +46 -6
- package/dist/application/javascript/JavaScriptModuleRelationships.js +1 -1
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
- package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +42 -19
- package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
- package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
- package/dist/application/process/ProcessCli.js +11 -11
- package/dist/application/process/ProcessEvidence.js +0 -1
- package/dist/artifacts/ArtifactProvider.js +39 -14
- package/dist/artifacts/ArtifactReader.js +31 -0
- package/dist/artifacts/DirectoryArtifactReader.js +2 -1
- package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
- package/dist/artifacts/NativeDmgArtifactReader.js +65 -20
- package/dist/artifacts/SafeOutputTree.js +16 -2
- package/dist/artifacts/ZipArtifactReader.js +11 -4
- package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
- package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
- package/dist/artifacts/apple/KeyedArchiveReader.js +21 -3
- package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +67 -61
- package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
- package/dist/artifacts/inventory/reader.js +3 -3
- package/dist/artifacts/inventory/scanCanonical.js +48 -24
- package/dist/artifacts/inventory/scanReader.js +5 -9
- package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
- package/dist/browser/CdpBrowserProvider.js +2 -3
- package/dist/browser/CdpCaptureEventHandlers.js +2 -4
- package/dist/browser/CdpCaptureEvents.js +0 -1
- package/dist/browser/CdpCaptureValues.js +20 -0
- package/dist/browser/CdpElectronProvider.js +0 -2
- package/dist/browser/CdpElectronScriptEvents.js +2 -8
- package/dist/browser/CdpElectronScripts.js +2 -3
- package/dist/browser/CdpPageCaptureScripts.js +2 -3
- package/dist/browser/CdpSafeMetadata.js +10 -10
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
- package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
- package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
- package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
- package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
- package/dist/browser/PlaywrightScenarioEvents.js +1 -1
- package/dist/browser/PlaywrightScenarioSession.js +39 -22
- package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
- package/dist/browser/history/CaptureFailures.js +6 -2
- package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
- package/dist/catalogIdentity.js +0 -1
- package/dist/cli/analysisViewCommands.js +36 -0
- package/dist/cli/artifactCommands.js +11 -12
- package/dist/cli/coreAnalysisCommands.js +3 -3
- package/dist/cli/coreBinaryCommands.js +32 -27
- package/dist/cli/coreNativeCommands.js +9 -10
- package/dist/cli/electronCommands.js +4 -4
- package/dist/cli/interactiveSetup.js +6 -6
- package/dist/cli/managedCommands.js +7 -8
- package/dist/cli/nativeCallCommands.js +1 -2
- package/dist/cli/omittableDefaults.js +50 -0
- package/dist/cli/processCommands.js +3 -2
- package/dist/cli/setupCommands.js +16 -15
- package/dist/cli/utilityCommands.js +9 -9
- package/dist/cli.js +16 -8
- package/dist/cliBrowserScenarioCommands.js +2 -2
- package/dist/cliCommandNames.js +1 -0
- package/dist/cliJsonInput.js +15 -1
- package/dist/cliOutput.js +0 -38
- package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
- package/dist/composition/binary.js +9 -9
- package/dist/composition/browserScenario.js +2 -1
- package/dist/composition/directAnalysis.js +20 -13
- package/dist/composition/electronScenario.js +1 -1
- package/dist/composition/optionalObservationProviders.js +12 -7
- package/dist/config/environment.js +6 -0
- package/dist/config/ghidraStartupTimeout.js +4 -9
- package/dist/config/homeDirectory.js +12 -0
- package/dist/config/mcpResponseBudget.js +9 -1
- package/dist/config/parseConfig.js +7 -3
- package/dist/config/parsers.js +19 -22
- package/dist/contracts/analysisViewToolContracts.js +56 -0
- package/dist/contracts/applicationToolContracts.js +5 -4
- package/dist/contracts/artifactComparisonExample.js +2 -2
- package/dist/contracts/artifactToolContracts.js +1 -1
- package/dist/contracts/browserScenarioToolContracts.js +1 -1
- package/dist/contracts/browserToolContracts.js +19 -15
- package/dist/contracts/enhancedInputs.js +2 -2
- package/dist/contracts/enhancedToolContracts.js +4 -3
- package/dist/contracts/evm/evmToolContracts.js +1 -1
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/inputSchemaPresentation.js +90 -0
- package/dist/contracts/investigationExamples.js +4 -3
- package/dist/contracts/javascript/electronToolContracts.js +1 -1
- package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
- package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
- package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
- package/dist/contracts/managed/managedToolContracts.js +5 -10
- package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
- package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
- package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
- package/dist/contracts/native/nativeToolContracts.js +2 -2
- package/dist/contracts/officialToolContracts.js +2 -1
- package/dist/contracts/promptContracts.js +2 -2
- package/dist/contracts/providerSelection.js +1 -1
- package/dist/contracts/sessionToolContracts.js +14 -2
- package/dist/contracts/sessionToolSchemas.js +1 -14
- package/dist/contracts/toolContracts.js +2 -0
- package/dist/contracts/toolEffects.js +1 -0
- package/dist/contracts/toolOutputSchemaGroups.js +136 -92
- package/dist/contracts/toolOutputSchemaPrimitives.js +11 -21
- package/dist/contracts/toolSchemaMetadata.js +18 -69
- package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
- package/dist/contracts/webRuntimeToolContracts.js +1 -1
- package/dist/contracts/webScriptToolContracts.js +1 -1
- package/dist/doctorRuntime.js +7 -5
- package/dist/domain/analysisErrorCore.js +3 -0
- package/dist/domain/analysisErrorPresentation.js +18 -3
- package/dist/domain/analysisErrorProjection.js +24 -5
- package/dist/domain/analysisSnapshot.js +29 -31
- package/dist/domain/analysisView/analysisView.js +243 -0
- package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
- package/dist/domain/analysisView/binaryLayoutView.js +159 -0
- package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
- package/dist/domain/android/androidApplication.js +1 -1
- package/dist/domain/apple/appleApplication.js +1 -1
- package/dist/domain/apple/dylibResolution.js +10 -3
- package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
- package/dist/domain/apple/keyedArchive.js +26 -2
- package/dist/domain/artifactComparison.js +15 -6
- package/dist/domain/artifactGraph.js +16 -3
- package/dist/domain/artifactInventoryEvidence.js +9 -16
- package/dist/domain/artifactOperationError.js +3 -3
- package/dist/domain/artifactPartialObservation.js +1 -0
- package/dist/domain/artifactPathSyntax.js +49 -0
- package/dist/domain/binaryTarget.js +39 -13
- package/dist/domain/browserCaptureComparison.js +13 -49
- package/dist/domain/browserNetworkEvidence.js +10 -4
- package/dist/domain/browserObservation.js +0 -1
- package/dist/domain/browserObservationSchemas.js +14 -3
- package/dist/domain/browserScenario.js +0 -1
- package/dist/domain/browserScenarioCapture.js +1 -2
- package/dist/domain/browserScenarioDiff.js +0 -2
- package/dist/domain/browserScenarioDiffEvidence.js +0 -12
- package/dist/domain/browserScenarioDiffValues.js +2 -2
- package/dist/domain/browserScenarioValues.js +3 -4
- package/dist/domain/callPath.js +8 -9
- package/dist/domain/callPathSchemas.js +2 -2
- package/dist/domain/changedBehavior.js +3 -3
- package/dist/domain/completionLedgerGeneration.js +2 -1
- package/dist/domain/configurationErrors.js +12 -0
- package/dist/domain/conformancePackage.js +4 -3
- package/dist/domain/evidence.js +10 -36
- package/dist/domain/evidenceBundle.js +7 -9
- package/dist/domain/evidenceCompletionLedger.js +2 -1
- package/dist/domain/functionComparison.js +4 -5
- package/dist/domain/functionComparisonDimensions.js +120 -87
- package/dist/domain/functionComparisonNormalization.js +23 -34
- package/dist/domain/functionComparisonResults.js +1 -4
- package/dist/domain/functionComparisonSchemas.js +2 -8
- package/dist/domain/functionDossierEvidence.js +2 -37
- package/dist/domain/javascript/electronActiveObservation.js +26 -69
- package/dist/domain/javascript/electronObservation.js +14 -3
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
- package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +26 -3
- package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
- package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
- package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
- package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
- package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
- package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
- package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
- package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
- package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
- package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
- package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
- package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +9 -3
- package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
- package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
- package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
- package/dist/domain/javascript/javascriptSemanticDataEffects.js +1 -1
- package/dist/domain/javascript/javascriptSemanticGraph.js +88 -46
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
- package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
- package/dist/domain/javascript/javascriptSemanticPrimitives.js +1 -12
- package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
- package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
- package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
- package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
- package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
- package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
- package/dist/domain/javascript/javascriptSemanticValues.js +47 -54
- package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +0 -1
- package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
- package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
- package/dist/domain/localPath.js +1 -1
- package/dist/domain/managed/managedArtifact.js +6 -4
- package/dist/domain/managed/managedMemberComparison.js +2 -9
- package/dist/domain/managed/managedNativeVerification.js +0 -2
- package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
- package/dist/domain/native/binaryLayout.js +2 -3
- package/dist/domain/native/nativeApiBoundary.js +1 -1
- package/dist/domain/native/nativeCallObservation.js +5 -3
- package/dist/domain/native/nativeInstruction.js +7 -0
- package/dist/domain/native/recordedCrash.js +2 -3
- package/dist/domain/offsetDateTime.js +17 -0
- package/dist/domain/process/processCapture.js +13 -12
- package/dist/domain/process/processCaptureCoverage.js +67 -0
- package/dist/domain/process/processCaptureExample.js +2 -1
- package/dist/domain/process/processCaptureParsing.js +1 -34
- package/dist/domain/process/processCaptureValidation.js +81 -13
- package/dist/domain/process/processComparison.js +41 -22
- package/dist/domain/process/processObservation.js +10 -2
- package/dist/domain/process/processScenario.js +24 -2
- package/dist/domain/process/processTraceComparison.js +0 -2
- package/dist/domain/process/processTraceDimensionProjection.js +1 -1
- package/dist/domain/process/processTraceEvaluation.js +15 -11
- package/dist/domain/process/processTraceSpecification.js +3 -4
- package/dist/domain/providerAdapterError.js +2 -0
- package/dist/domain/reconstructionCoverage.js +5 -2
- package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
- package/dist/domain/reconstructionReadinessSchemas.js +2 -1
- package/dist/domain/reconstructionVerification.js +3 -3
- package/dist/domain/reconstructionVerificationSchemas.js +2 -1
- package/dist/domain/referenceSourceGraph.js +20 -21
- package/dist/domain/staticRuntimeCorrelation.js +2 -2
- package/dist/domain/stringPatterns.js +6 -0
- package/dist/domain/swiftSymbolClassification.js +61 -0
- package/dist/domain/symbolAnalysis.js +66 -18
- package/dist/domain/webCaptureDiff.js +0 -1
- package/dist/domain/webCaptureDiffSchemas.js +6 -3
- package/dist/domain/webEventListeners.js +3 -2
- package/dist/domain/webExecution.js +3 -2
- package/dist/domain/webRuntime.js +0 -2
- package/dist/domain/webScriptExport.js +1 -1
- package/dist/dotnet/ManagedArtifactInspector.js +2 -19
- package/dist/dotnet/ManagedMemberInspector.js +12 -18
- package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
- package/dist/dotnet/ManagedMemberRows.js +75 -62
- package/dist/dotnet/ManagedMetadataInventory.js +16 -22
- package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
- package/dist/dotnet/ManagedReaderFailure.js +16 -0
- package/dist/dotnet/ManagedStaticProvider.js +3 -5
- package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
- package/dist/evaluation/AgentEvaluationReport.js +28 -0
- package/dist/evaluation/CodexAgentEval.js +12 -8
- package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
- package/dist/evm/EvmoleInterfaceProvider.js +2 -1
- package/dist/firmware/FirmwareCommand.js +9 -5
- package/dist/firmware/FirmwareProvider.js +4 -4
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
- package/dist/ghidra/GhidraClient.js +91 -32
- package/dist/ghidra/GhidraClientStartup.js +0 -2
- package/dist/ghidra/GhidraDoctor.js +6 -5
- package/dist/ghidra/GhidraFunctionValues.js +3 -5
- package/dist/ghidra/GhidraInstallation.js +40 -12
- package/dist/ghidra/GhidraJavaLaunch.js +6 -2
- package/dist/ghidra/GhidraLauncher.js +15 -7
- package/dist/ghidra/GhidraProvider.js +6 -2
- package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
- package/dist/ghidra/GhidraProviderClient.js +13 -3
- package/dist/ghidra/GhidraSessionError.js +2 -0
- package/dist/ghidra/GhidraSessionRoot.js +39 -0
- package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
- package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
- package/dist/hopper/BridgeLauncher.js +34 -45
- package/dist/hopper/HopperAnalysisProfile.js +3 -8
- package/dist/hopper/HopperCleanup.js +56 -27
- package/dist/hopper/HopperClient.js +86 -65
- package/dist/hopper/HopperMachOImage.js +3 -2
- package/dist/hopper/HopperProvider.js +16 -18
- package/dist/hopper/HopperRegexSearch.js +3 -6
- package/dist/hopper/HopperTargetLease.js +132 -49
- package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
- package/dist/ida/IdaConfiguration.js +8 -3
- package/dist/ida/IdaInput.js +1 -7
- package/dist/ida/IdaMcpConnection.js +8 -4
- package/dist/ida/IdaOperationRunner.js +3 -3
- package/dist/ida/IdaProvider.js +8 -12
- package/dist/ida/IdaSessionClient.js +20 -18
- package/dist/ida/IdaWorkspace.js +12 -13
- package/dist/inspector/V8InspectorCaptureProjection.js +1 -1
- package/dist/inspector/V8InspectorProvider.js +38 -28
- package/dist/javascript/recovery/WakaruCommand.js +7 -2
- package/dist/javascript/recovery/WakaruExecution.js +5 -2
- package/dist/main/shutdown.js +11 -3
- package/dist/main/startup.js +9 -2
- package/dist/main/transport.js +22 -2
- package/dist/main.js +11 -18
- package/dist/native/AppleMachoSelection.js +16 -6
- package/dist/native/CommandRunner.js +9 -7
- package/dist/native/LldbCallTracer.js +8 -2
- package/dist/native/NativeMacOSProvider.js +25 -15
- package/dist/native/NativeUiHelperRuntime.js +11 -2
- package/dist/native/NativeUiObservation.js +2 -2
- package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
- package/dist/process/DarwinProcessRunTokenReader.js +16 -2
- package/dist/process/ExecFileOutput.js +88 -6
- package/dist/process/PrivateRuntimeRoot.js +10 -5
- package/dist/process/ProcessOwnership.js +1 -4
- package/dist/process/ProcessOwnershipObservation.js +11 -5
- package/dist/process/ProviderProcess.js +1 -3
- package/dist/process/capture/FilesystemSnapshot.js +50 -13
- package/dist/process/capture/ProcessCaptureError.js +13 -0
- package/dist/process/capture/ProcessCaptureLifecycle.js +158 -70
- package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
- package/dist/process/capture/ProcessHarness.js +21 -25
- package/dist/process/capture/ProcessNormalization.js +20 -2
- package/dist/process/capture/ProcessSampling.js +25 -2
- package/dist/process/capture/TerminalRenderer.js +14 -0
- package/dist/process/snapshotEnvironment.js +14 -0
- package/dist/server/EvidenceMcpServer.js +25 -14
- package/dist/server/createServer.js +49 -36
- package/dist/server/mcpClientMetadata.js +12 -5
- package/dist/server/promptCompletion.js +3 -8
- package/dist/server/registerAnalysisViewTool.js +15 -0
- package/dist/server/registerAndroidTools.js +2 -3
- package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
- package/dist/server/registerApplicationTools/compareVersions.js +4 -5
- package/dist/server/registerApplicationTools/coverage.js +1 -2
- package/dist/server/registerApplicationTools/helpers.js +1 -2
- package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
- package/dist/server/registerApplicationTools/traceFeature.js +4 -5
- package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
- package/dist/server/registerArtifactComparisonTool.js +4 -5
- package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
- package/dist/server/registerBrowserScenarioTool.js +3 -4
- package/dist/server/registerBrowserTools.js +13 -16
- package/dist/server/registerBundleComparisonTool.js +5 -6
- package/dist/server/registerCloseLifecycleTool.js +2 -3
- package/dist/server/registerElectronTools.js +10 -13
- package/dist/server/registerEnhancedTools.js +23 -23
- package/dist/server/registerEvidenceTools.js +3 -4
- package/dist/server/registerEvmTools.js +2 -3
- package/dist/server/registerFirmwareTools.js +2 -3
- package/dist/server/registerFunctionComparisonTool.js +7 -8
- package/dist/server/registerInvestigationTools.js +14 -15
- package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
- package/dist/server/registerOfficialTools.js +4 -19
- package/dist/server/registerProcessComparisonTool.js +8 -8
- package/dist/server/registerRecordedCrashTools.js +2 -3
- package/dist/server/registerSessionRecordTools.js +15 -19
- package/dist/server/registerSessionStatusTool.js +3 -4
- package/dist/server/registerSessionTools.js +12 -18
- package/dist/server/registerWebModuleTool.js +2 -3
- package/dist/server/registerWebNetworkCaptureTool.js +2 -3
- package/dist/server/registerWebRuntimeTools.js +4 -5
- package/dist/server/registerWebScriptTool.js +2 -3
- package/dist/server/registerWebSourceLocationTool.js +2 -3
- package/dist/server/toolResult.js +66 -94
- package/dist/server/toolResultEncoding.js +11 -10
- package/dist/windows/WindowsNativeLoader.js +1 -0
- package/dist/windows/WindowsOwnedProcess.js +60 -15
- package/dist/windows/WindowsPrivateRuntime.js +7 -8
- package/native/windows/README.md +3 -1
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +39 -30
- package/scripts/rea.mjs +3 -6
- package/skills/reverse-engineer-anything/SKILL.md +9 -8
- package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
- package/dist/config.js +0 -1
- package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
- package/dist/contracts/process/processCaptureExample.js +0 -2
- package/dist/contracts/toolOutputSchemas.js +0 -2
- package/dist/main/reload.js +0 -12
- package/dist/main/state.js +0 -3
- package/dist/server/sessionToolPolicies.js +0 -2
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Cli, z } from "incur";
|
|
2
|
+
const INPUT_GROUPS = ["args", "env", "options"];
|
|
3
|
+
// Incur types its router key without vars, env, or globals; accept any CLI.
|
|
4
|
+
const registeredCommands = Cli.toCommands;
|
|
5
|
+
/**
|
|
6
|
+
* Advertise parser-filled defaults as omittable CLI inputs.
|
|
7
|
+
*
|
|
8
|
+
* Incur derives `--schema`, the `--llms` manifests, and help synopses from
|
|
9
|
+
* Zod's output view, where a defaulted field always has a value and is
|
|
10
|
+
* therefore listed as required. Callers may omit such a field, so each one is
|
|
11
|
+
* wrapped as optional while its default, constraints, metadata, and parsed
|
|
12
|
+
* value stay unchanged.
|
|
13
|
+
*/
|
|
14
|
+
export const presentOmittableDefaults = (cli) => {
|
|
15
|
+
const commands = registeredCommands.get(cli);
|
|
16
|
+
if (commands !== undefined)
|
|
17
|
+
presentCommands(commands);
|
|
18
|
+
};
|
|
19
|
+
const presentCommands = (commands) => {
|
|
20
|
+
for (const entry of commands.values()) {
|
|
21
|
+
if ("_group" in entry) {
|
|
22
|
+
presentCommands(entry.commands);
|
|
23
|
+
if (entry.root !== undefined)
|
|
24
|
+
presentInputs(entry.root);
|
|
25
|
+
}
|
|
26
|
+
else if (!("_alias" in entry) && !("_fetch" in entry))
|
|
27
|
+
presentInputs(entry);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const presentInputs = (command) => {
|
|
31
|
+
for (const group of INPUT_GROUPS) {
|
|
32
|
+
const schema = command[group];
|
|
33
|
+
if (schema instanceof z.ZodObject)
|
|
34
|
+
command[group] = withOmittableDefaults(schema);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const withOmittableDefaults = (schema) => {
|
|
38
|
+
const omittable = Object.entries(schema.shape).filter(([, field]) => fillsOmission(field));
|
|
39
|
+
if (omittable.length === 0)
|
|
40
|
+
return schema;
|
|
41
|
+
return schema.safeExtend(Object.fromEntries(omittable.map(([key, field]) => [key, optionalWithMetadata(field)])));
|
|
42
|
+
};
|
|
43
|
+
/** Zod accepts an omitted value (`optin`) but always produces one (`optout`). */
|
|
44
|
+
const fillsOmission = (field) => field._zod.optin === "optional" && field._zod.optout === undefined;
|
|
45
|
+
const optionalWithMetadata = (field) => {
|
|
46
|
+
const metadata = field.meta();
|
|
47
|
+
return metadata === undefined
|
|
48
|
+
? field.optional()
|
|
49
|
+
: field.optional().meta(metadata);
|
|
50
|
+
};
|
|
@@ -2,12 +2,13 @@ import { Cli, z } from "incur";
|
|
|
2
2
|
import { captureProcessScenarioFile, compareProcessEvidenceFiles, isProcessCliFailure, } from "../application/process/ProcessCli.js";
|
|
3
3
|
import { logCliCommand } from "../cliLogging.js";
|
|
4
4
|
import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
5
|
+
import { withCommandCancellation } from "./commandCancellation.js";
|
|
5
6
|
/** Register direct process capture and comparison commands. */
|
|
6
|
-
export const registerProcessCommands = (cli, logger, environment
|
|
7
|
+
export const registerProcessCommands = (cli, logger, environment) => {
|
|
7
8
|
cli.command(CLI_COMMANDS.captureProcess, {
|
|
8
9
|
description: "Capture one caller-selected process scenario",
|
|
9
10
|
args: z.object({ scenario: z.string().describe("Scenario JSON path") }),
|
|
10
|
-
run: ({ args }) => logCliCommand(logger, "capture-process", () => captureProcessScenarioFile(args.scenario, environment), isProcessCliFailure),
|
|
11
|
+
run: ({ args }) => withCommandCancellation((signal) => logCliCommand(logger, "capture-process", () => captureProcessScenarioFile(args.scenario, environment, signal), isProcessCliFailure)),
|
|
11
12
|
});
|
|
12
13
|
cli.command(CLI_COMMANDS.compareProcessCaptures, {
|
|
13
14
|
description: "Compare two process capture Evidence JSON files",
|
|
@@ -3,7 +3,8 @@ import { DOCTOR_PROVIDER_IDS, runDoctor, } from "../application/Doctor.js";
|
|
|
3
3
|
import { isSetupFailure, } from "../application/SetupTypes.js";
|
|
4
4
|
import { runSetup } from "../application/Setup.js";
|
|
5
5
|
import { systemSetupHost } from "../application/SetupHost.js";
|
|
6
|
-
import { isUninstallFailure, runUninstall } from "../application/Uninstall.js";
|
|
6
|
+
import { isUninstallFailure, runUninstall, systemUninstallHost, } from "../application/Uninstall.js";
|
|
7
|
+
import { homeDirectoryFromEnvironment } from "../config/homeDirectory.js";
|
|
7
8
|
import { isUpdateFailure, runUpdate } from "../application/Update.js";
|
|
8
9
|
import { systemUpdateHost } from "../application/UpdateRuntime.js";
|
|
9
10
|
import { confirmInteractiveSetup, renderInteractiveSetupResult, renderSetupProgress, } from "./interactiveSetup.js";
|
|
@@ -17,12 +18,12 @@ const supportedClientSchema = z
|
|
|
17
18
|
.string()
|
|
18
19
|
.refine((candidate) => supportedClientIds.some((name) => name === candidate), "Unsupported agent integration");
|
|
19
20
|
/** Register setup, doctor, uninstall, and update CLI commands. */
|
|
20
|
-
export const registerSetupCommands = (cli, logger) => {
|
|
21
|
-
registerSetupCommand(cli, logger);
|
|
22
|
-
registerDoctorCommand(cli, logger);
|
|
23
|
-
registerMaintenanceCommands(cli, logger);
|
|
21
|
+
export const registerSetupCommands = (cli, logger, environment) => {
|
|
22
|
+
registerSetupCommand(cli, logger, environment);
|
|
23
|
+
registerDoctorCommand(cli, logger, environment);
|
|
24
|
+
registerMaintenanceCommands(cli, logger, environment);
|
|
24
25
|
};
|
|
25
|
-
const registerSetupCommand = (cli, logger) => {
|
|
26
|
+
const registerSetupCommand = (cli, logger, environment) => {
|
|
26
27
|
cli.command(CLI_COMMANDS.setup, {
|
|
27
28
|
description: "Configure agent integrations and optional analysis providers",
|
|
28
29
|
outputPolicy: "agent-only",
|
|
@@ -57,10 +58,10 @@ const registerSetupCommand = (cli, logger) => {
|
|
|
57
58
|
.describe("Use sequential accessible setup prompts"),
|
|
58
59
|
}),
|
|
59
60
|
alias: { yes: "y" },
|
|
60
|
-
run: ({ options, formatExplicit }) => logCliCommand(logger, CLI_COMMANDS.setup, () => runSetupCommand({ options, formatExplicit }), isSetupFailure),
|
|
61
|
+
run: ({ options, formatExplicit }) => logCliCommand(logger, CLI_COMMANDS.setup, () => runSetupCommand({ options, formatExplicit }, environment), isSetupFailure),
|
|
61
62
|
});
|
|
62
63
|
};
|
|
63
|
-
const registerDoctorCommand = (cli, logger) => {
|
|
64
|
+
const registerDoctorCommand = (cli, logger, environment) => {
|
|
64
65
|
cli.command(CLI_COMMANDS.doctor, {
|
|
65
66
|
description: "Check whether REA is ready",
|
|
66
67
|
options: z.object({
|
|
@@ -78,10 +79,10 @@ const registerDoctorCommand = (cli, logger) => {
|
|
|
78
79
|
.optional()
|
|
79
80
|
.describe("Require the installed REA skill identity to be aligned"),
|
|
80
81
|
}),
|
|
81
|
-
run: ({ options }) => logCliCommand(logger, "doctor", () => runDoctor(options.target, createSystemDoctorHost(), doctorScope(options))),
|
|
82
|
+
run: ({ options }) => logCliCommand(logger, "doctor", () => runDoctor(options.target, createSystemDoctorHost(environment), doctorScope(options))),
|
|
82
83
|
});
|
|
83
84
|
};
|
|
84
|
-
const registerMaintenanceCommands = (cli, logger) => {
|
|
85
|
+
const registerMaintenanceCommands = (cli, logger, environment) => {
|
|
85
86
|
cli.command(CLI_COMMANDS.uninstall, {
|
|
86
87
|
description: "Remove REA-owned agent configuration and skill files",
|
|
87
88
|
options: z.object({
|
|
@@ -91,22 +92,22 @@ const registerMaintenanceCommands = (cli, logger) => {
|
|
|
91
92
|
.describe("Also remove REA caches and state"),
|
|
92
93
|
}),
|
|
93
94
|
alias: { purgeData: "purge-data" },
|
|
94
|
-
run: ({ options }) => logCliCommand(logger, "uninstall", () => runUninstall(options.purgeData), isUninstallFailure),
|
|
95
|
+
run: ({ options }) => logCliCommand(logger, "uninstall", () => runUninstall(options.purgeData, systemUninstallHost(homeDirectoryFromEnvironment(environment, process.platform), undefined, environment)), isUninstallFailure),
|
|
95
96
|
});
|
|
96
97
|
cli.command(CLI_COMMANDS.update, {
|
|
97
98
|
description: "Update this REA installation and verify the installed release",
|
|
98
|
-
run: ({ formatExplicit }) => logCliCommand(logger, CLI_COMMANDS.update, () => runUpdate(PRODUCT_IDENTITY.packageVersion, systemUpdateHost(), formatExplicit ? "structured" : "human"), isUpdateFailure),
|
|
99
|
+
run: ({ formatExplicit }) => logCliCommand(logger, CLI_COMMANDS.update, () => runUpdate(PRODUCT_IDENTITY.packageVersion, systemUpdateHost(undefined, undefined, environment), formatExplicit ? "structured" : "human"), isUpdateFailure),
|
|
99
100
|
});
|
|
100
101
|
};
|
|
101
|
-
const runSetupCommand = async (input) => {
|
|
102
|
+
const runSetupCommand = async (input, environment) => {
|
|
102
103
|
const { options } = input;
|
|
103
104
|
const interactive = setupIsInteractive(options, input.formatExplicit);
|
|
104
105
|
const hasExplicitScope = setupHasExplicitScope(options);
|
|
105
|
-
const result = await runSetup(setupRunOptions(input, interactive, hasExplicitScope), systemSetupHost(createSystemDoctorHost()), interactive
|
|
106
|
+
const result = await runSetup(setupRunOptions(input, interactive, hasExplicitScope), systemSetupHost(createSystemDoctorHost(environment), environment), interactive
|
|
106
107
|
? (actions, context) => confirmInteractiveSetup(actions, options.accessible, context)
|
|
107
108
|
: undefined);
|
|
108
109
|
if (interactive)
|
|
109
|
-
renderInteractiveSetupResult(result);
|
|
110
|
+
renderInteractiveSetupResult(result, environment);
|
|
110
111
|
return result;
|
|
111
112
|
};
|
|
112
113
|
const setupRunOptions = (input, interactive, hasExplicitScope) => {
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { z } from "incur";
|
|
2
|
-
import { runCapabilityStatus, runProviderAnalysis, runProviderStatus, } from "../composition/directAnalysis.js";
|
|
3
2
|
import { importReferenceSource } from "../application/ReferenceSourceImport.js";
|
|
4
3
|
import { projectReferenceSourceImportError } from "../application/ReferenceSourceImportTypes.js";
|
|
5
|
-
import { parseConfig } from "../config.js";
|
|
4
|
+
import { parseConfig } from "../config/parseConfig.js";
|
|
6
5
|
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
7
6
|
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
|
8
7
|
import { projectInputIssues } from "../domain/inputIssueProjection.js";
|
|
@@ -14,10 +13,11 @@ import { CLI_COMMANDS } from "../cliCommandNames.js";
|
|
|
14
13
|
import { swiftSymbolsSchema } from "../contracts/native/nativeToolContracts.js";
|
|
15
14
|
import { isReferenceSourceImportCliFailure } from "./referenceSourceImportStatus.js";
|
|
16
15
|
import { registerNativeCallCommands } from "./nativeCallCommands.js";
|
|
17
|
-
export const registerUtilityCommands = (cli, logger, environment
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
export const registerUtilityCommands = (cli, logger, environment, analysis) => {
|
|
17
|
+
const { runProviderAnalysis } = analysis;
|
|
18
|
+
registerCapabilityCommands(cli, logger, analysis);
|
|
19
|
+
registerNativeCommands(cli, logger, runProviderAnalysis);
|
|
20
|
+
registerNativeCallCommands(cli, logger, runProviderAnalysis);
|
|
21
21
|
for (const [command, operation] of [
|
|
22
22
|
[CLI_COMMANDS.observeNativeUi, "observe_native_ui"],
|
|
23
23
|
[CLI_COMMANDS.captureNativeUiScenario, "capture_native_ui_scenario"],
|
|
@@ -97,7 +97,7 @@ const invalidNativeUiScenarioInput = (operation, issues) => ({
|
|
|
97
97
|
error: "Application workflow failed",
|
|
98
98
|
...projectAnalysisError(new AnalysisInputError(operation, undefined, issues)),
|
|
99
99
|
});
|
|
100
|
-
const registerCapabilityCommands = (cli, logger) => {
|
|
100
|
+
const registerCapabilityCommands = (cli, logger, { runProviderStatus, runCapabilityStatus, }) => {
|
|
101
101
|
for (const command of [
|
|
102
102
|
CLI_COMMANDS.capabilities,
|
|
103
103
|
CLI_COMMANDS.providers,
|
|
@@ -112,7 +112,7 @@ const registerCapabilityCommands = (cli, logger) => {
|
|
|
112
112
|
});
|
|
113
113
|
}
|
|
114
114
|
};
|
|
115
|
-
const registerNativeCommands = (cli, logger) => {
|
|
115
|
+
const registerNativeCommands = (cli, logger, runProviderAnalysis) => {
|
|
116
116
|
for (const [command, tool] of [
|
|
117
117
|
[CLI_COMMANDS.inspectMacho, "inspect_macho"],
|
|
118
118
|
[CLI_COMMANDS.inspectSignature, "inspect_signature"],
|
|
@@ -147,7 +147,7 @@ const registerNativeCommands = (cli, logger) => {
|
|
|
147
147
|
run: ({ args }) => logCliCommand(logger, "demangle-swift", () => runProviderAnalysis(args.path, "demangle_swift", { symbols: args.symbols }, logger)),
|
|
148
148
|
});
|
|
149
149
|
};
|
|
150
|
-
const registerReferenceSourceCommand = (cli, logger, environment
|
|
150
|
+
const registerReferenceSourceCommand = (cli, logger, environment) => {
|
|
151
151
|
cli.command(CLI_COMMANDS.importReferenceSource, {
|
|
152
152
|
description: "Import a source tree as historical reference only",
|
|
153
153
|
args: z.object({
|
package/dist/cli.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { snapshotEnvironment } from "./process/snapshotEnvironment.js";
|
|
2
|
+
import { createDirectAnalysis } from "./composition/directAnalysis.js";
|
|
1
3
|
import { registerEvmCommands } from "./cli/evmCommands.js";
|
|
4
|
+
import { registerAnalysisViewCommands } from "./cli/analysisViewCommands.js";
|
|
2
5
|
import { registerBinaryDiagnosticsCommands } from "./cli/binaryDiagnosticsCommands.js";
|
|
3
6
|
import { Cli } from "incur";
|
|
4
7
|
import { createLogger, parseLogLevel } from "./logger.js";
|
|
@@ -25,12 +28,15 @@ import { registerBrowserScenarioCommands } from "./cliBrowserScenarioCommands.js
|
|
|
25
28
|
import { registerElectronCommands } from "./cli/electronCommands.js";
|
|
26
29
|
import { registerJavaScriptRuntimeObservationCommands } from "./cliJavaScriptRuntimeCommands.js";
|
|
27
30
|
import { registerApplicationCommands } from "./cli/applicationCommands.js";
|
|
31
|
+
import { presentOmittableDefaults } from "./cli/omittableDefaults.js";
|
|
28
32
|
/**
|
|
29
33
|
* Build the one-shot Incur CLI without starting Hopper at import time.
|
|
30
34
|
* Analysis commands acquire and close their own sessions; bare `mcp` and
|
|
31
35
|
* `--mcp` are intercepted by the executable dispatcher before this module loads.
|
|
32
36
|
*/
|
|
33
|
-
export const createCli = (
|
|
37
|
+
export const createCli = (selectedEnvironment = process.env, resultOutput) => {
|
|
38
|
+
const environment = snapshotEnvironment(selectedEnvironment);
|
|
39
|
+
const analysis = createDirectAnalysis(environment);
|
|
34
40
|
const logger = createLogger("cli", environment.REA_LOG_LEVEL === undefined
|
|
35
41
|
? "silent"
|
|
36
42
|
: parseLogLevel(environment.REA_LOG_LEVEL));
|
|
@@ -43,15 +49,16 @@ export const createCli = (environment = process.env, resultOutput) => {
|
|
|
43
49
|
},
|
|
44
50
|
sync: false,
|
|
45
51
|
});
|
|
46
|
-
registerSetupCommands(cli, logger);
|
|
47
|
-
registerCoreAnalysisCommands(cli, logger, resultOutput);
|
|
48
|
-
registerUtilityCommands(cli, logger, environment);
|
|
52
|
+
registerSetupCommands(cli, logger, environment);
|
|
53
|
+
registerCoreAnalysisCommands(cli, logger, analysis.runDirectAnalysis, resultOutput);
|
|
54
|
+
registerUtilityCommands(cli, logger, environment, analysis);
|
|
49
55
|
registerEvmCommands(cli, logger, environment);
|
|
50
|
-
registerArtifactCommands(cli, logger);
|
|
51
|
-
registerManagedCommands(cli, logger);
|
|
56
|
+
registerArtifactCommands(cli, logger, analysis.runProviderAnalysis);
|
|
57
|
+
registerManagedCommands(cli, logger, analysis.runProviderAnalysis);
|
|
52
58
|
registerAndroidCommands(cli, logger, environment);
|
|
53
59
|
registerFirmwareCommands(cli, logger, environment);
|
|
54
60
|
registerBinaryDiagnosticsCommands(cli, logger, environment);
|
|
61
|
+
registerAnalysisViewCommands(cli, logger);
|
|
55
62
|
registerEvidenceCommands(cli, logger);
|
|
56
63
|
registerProcessCommands(cli, logger, environment);
|
|
57
64
|
registerBrowserCommands(cli, logger);
|
|
@@ -62,9 +69,10 @@ export const createCli = (environment = process.env, resultOutput) => {
|
|
|
62
69
|
registerWebNetworkCaptureCommands(cli, logger, environment);
|
|
63
70
|
registerJavaScriptRecoveryCommands(cli, logger, environment);
|
|
64
71
|
registerAdvancedBrowserCommands(cli, logger);
|
|
65
|
-
registerBrowserScenarioCommands(cli, logger);
|
|
66
|
-
registerElectronCommands(cli, logger, resultOutput);
|
|
72
|
+
registerBrowserScenarioCommands(cli, logger, environment);
|
|
73
|
+
registerElectronCommands(cli, logger, environment, resultOutput);
|
|
67
74
|
registerJavaScriptRuntimeObservationCommands(cli, logger);
|
|
68
75
|
registerApplicationCommands(cli, logger);
|
|
76
|
+
presentOmittableDefaults(cli);
|
|
69
77
|
return cli;
|
|
70
78
|
};
|
|
@@ -11,7 +11,7 @@ import { projectInputIssues } from "./domain/inputIssueProjection.js";
|
|
|
11
11
|
import { browserScenarioSchema } from "./domain/browserScenario.js";
|
|
12
12
|
const OPERATION = "capture_browser_scenario";
|
|
13
13
|
/** Register the one-shot controlled browser scenario command. */
|
|
14
|
-
export const registerBrowserScenarioCommands = (cli, logger) => {
|
|
14
|
+
export const registerBrowserScenarioCommands = (cli, logger, environment) => {
|
|
15
15
|
cli.command(CLI_COMMANDS.captureBrowserScenario, {
|
|
16
16
|
description: "Run one bounded Playwright browser scenario and return Evidence",
|
|
17
17
|
args: z.object({
|
|
@@ -26,7 +26,7 @@ export const registerBrowserScenarioCommands = (cli, logger) => {
|
|
|
26
26
|
const scenario = browserScenarioSchema.safeParse(resolveCliJsonPaths(input.value, [["browser", "executable_path"]]));
|
|
27
27
|
if (!scenario.success)
|
|
28
28
|
return cliError(new AnalysisInputError(OPERATION, { cause: scenario.error }, projectInputIssues(scenario.error.issues, input.value)));
|
|
29
|
-
const result = await captureBrowserScenario(createBrowserScenarioProvider(), scenario.data);
|
|
29
|
+
const result = await captureBrowserScenario(createBrowserScenarioProvider(environment), scenario.data);
|
|
30
30
|
return result.ok ? result.value : cliError(result.error);
|
|
31
31
|
}),
|
|
32
32
|
});
|
package/dist/cliCommandNames.js
CHANGED
|
@@ -41,6 +41,7 @@ export const CLI_COMMANDS = Object.freeze({
|
|
|
41
41
|
inspectManagedArtifact: "inspect-managed-artifact",
|
|
42
42
|
inspectRecordedCrash: "inspect-recorded-crash",
|
|
43
43
|
inspectBinaryLayout: "inspect-binary-layout",
|
|
44
|
+
inspectAnalysisView: "inspect-analysis-view",
|
|
44
45
|
inspectFirmwareRegions: "inspect-firmware-regions",
|
|
45
46
|
extractFirmware: "extract-firmware",
|
|
46
47
|
inspectAndroidPackage: "inspect-android-package",
|
package/dist/cliJsonInput.js
CHANGED
|
@@ -95,8 +95,22 @@ const jsonFileError = (path, operation, reason, cause) => ({
|
|
|
95
95
|
error: "Application workflow failed",
|
|
96
96
|
...projectAnalysisError(new AnalysisInputError(operation, cause === undefined ? undefined : { cause }, reason === "invalid-json"
|
|
97
97
|
? [{ path: [], reason: "invalid_format", expected: "JSON" }]
|
|
98
|
-
: [])),
|
|
98
|
+
: [readFailureIssue(path, cause)])),
|
|
99
99
|
...(path === undefined ? {} : { input_path: path }),
|
|
100
100
|
input_reason: reason,
|
|
101
101
|
},
|
|
102
102
|
});
|
|
103
|
+
/** Name the system error so the caller can tell a typo from a permission denial. */
|
|
104
|
+
const readFailureIssue = (path, cause) => {
|
|
105
|
+
const code = typeof cause === "object" &&
|
|
106
|
+
cause !== null &&
|
|
107
|
+
"code" in cause &&
|
|
108
|
+
typeof cause.code === "string"
|
|
109
|
+
? ` (${cause.code})`
|
|
110
|
+
: "";
|
|
111
|
+
return {
|
|
112
|
+
path: [],
|
|
113
|
+
reason: "invalid_value",
|
|
114
|
+
message: `The JSON input file could not be read${code}: ${path ?? ""}`,
|
|
115
|
+
};
|
|
116
|
+
};
|
package/dist/cliOutput.js
CHANGED
|
@@ -1,15 +1,5 @@
|
|
|
1
|
-
import { safeParseJson } from "./domain/safeJson.js";
|
|
2
|
-
const SAFE_VALIDATION_MESSAGE = "REA could not read the command arguments. Run `rea --help`, correct the arguments, then try again.";
|
|
3
1
|
const UNSUPPORTED_OUTPUT_COMBINATION_MESSAGE = "Token windows cannot preserve structured output. Remove --token-limit/--token-offset and use --filter-output or command pagination.";
|
|
4
2
|
const INCUR_OUTPUT_FORMATS = new Set(["toon", "json", "yaml", "md", "jsonl"]);
|
|
5
|
-
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6
|
-
const validationError = (value) => {
|
|
7
|
-
if (value.code === "VALIDATION_ERROR")
|
|
8
|
-
return value;
|
|
9
|
-
if (value.ok === false && isRecord(value.error))
|
|
10
|
-
return value.error.code === "VALIDATION_ERROR" ? value.error : undefined;
|
|
11
|
-
return undefined;
|
|
12
|
-
};
|
|
13
3
|
/** Read effective Incur output controls at the executable boundary. */
|
|
14
4
|
export const parseCliOutputArguments = (arguments_) => {
|
|
15
5
|
let format = "toon";
|
|
@@ -105,31 +95,3 @@ export const renderCliOutputArgumentError = (error) => {
|
|
|
105
95
|
return `ok: false\nerror:\n code: ${error.code}\n message: ${JSON.stringify(error.message)}\n`;
|
|
106
96
|
return `${JSON.stringify(value)}\n`;
|
|
107
97
|
};
|
|
108
|
-
/** Remove validator internals from Incur's caller-visible CLI output. */
|
|
109
|
-
export const sanitizeCliOutput = (output) => {
|
|
110
|
-
const trimmed = output.trimStart();
|
|
111
|
-
if (trimmed.startsWith("{")) {
|
|
112
|
-
const decoded = safeParseJson(trimmed);
|
|
113
|
-
if (!decoded.ok)
|
|
114
|
-
return output;
|
|
115
|
-
const parsed = decoded.value;
|
|
116
|
-
if (!isRecord(parsed))
|
|
117
|
-
return output;
|
|
118
|
-
const error = validationError(parsed);
|
|
119
|
-
if (error !== undefined) {
|
|
120
|
-
const safeError = {
|
|
121
|
-
code: "VALIDATION_ERROR",
|
|
122
|
-
message: SAFE_VALIDATION_MESSAGE,
|
|
123
|
-
};
|
|
124
|
-
if (error === parsed)
|
|
125
|
-
return `${JSON.stringify(safeError)}\n`;
|
|
126
|
-
return `${JSON.stringify({ ...parsed, error: safeError })}\n`;
|
|
127
|
-
}
|
|
128
|
-
return output;
|
|
129
|
-
}
|
|
130
|
-
if (/^ok: false\r?\nerror:\r?\n code: VALIDATION_ERROR(?:\r?\n|$)/u.test(trimmed))
|
|
131
|
-
return `ok: false\nerror:\n code: VALIDATION_ERROR\n message: "${SAFE_VALIDATION_MESSAGE}"\n`;
|
|
132
|
-
if (!/^code: VALIDATION_ERROR(?:\r?\n|$)/u.test(trimmed))
|
|
133
|
-
return output;
|
|
134
|
-
return `code: VALIDATION_ERROR\nmessage: "${SAFE_VALIDATION_MESSAGE}"\n`;
|
|
135
|
-
};
|
|
@@ -1,30 +1,34 @@
|
|
|
1
|
+
import { snapshotEnvironment } from "../process/snapshotEnvironment.js";
|
|
1
2
|
import { ARTIFACT_PROVIDER_IDENTITY, artifactCapabilities, } from "../artifacts/ArtifactProviderMetadata.js";
|
|
2
3
|
import { MANAGED_STATIC_PROVIDER_IDENTITY, managedStaticCapabilities, } from "../dotnet/ManagedStaticProviderMetadata.js";
|
|
3
4
|
import { NATIVE_MACOS_PROVIDER_IDENTITY, nativeMacOSCapabilities, } from "../native/NativeMacOSProviderMetadata.js";
|
|
4
5
|
/** Wire the three existing auxiliary AnalysisProvider implementations lazily. */
|
|
5
|
-
export const auxiliaryAnalysisProviderDeclarations = (platform = process.platform) =>
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
export const auxiliaryAnalysisProviderDeclarations = (selectedEnvironment, platform = process.platform) => {
|
|
7
|
+
const environment = snapshotEnvironment(selectedEnvironment, platform);
|
|
8
|
+
return [
|
|
9
|
+
{
|
|
10
|
+
identity: ARTIFACT_PROVIDER_IDENTITY,
|
|
11
|
+
capabilities: artifactCapabilities(platform),
|
|
12
|
+
load: async () => {
|
|
13
|
+
const { ArtifactProvider } = await import("../artifacts/ArtifactProvider.js");
|
|
14
|
+
return new ArtifactProvider(environment, platform);
|
|
15
|
+
},
|
|
12
16
|
},
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
{
|
|
18
|
+
identity: NATIVE_MACOS_PROVIDER_IDENTITY,
|
|
19
|
+
capabilities: nativeMacOSCapabilities(platform),
|
|
20
|
+
load: async () => {
|
|
21
|
+
const { NativeMacOSProvider } = await import("../native/NativeMacOSProvider.js");
|
|
22
|
+
return new NativeMacOSProvider(environment, undefined, platform);
|
|
23
|
+
},
|
|
20
24
|
},
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
{
|
|
26
|
+
identity: MANAGED_STATIC_PROVIDER_IDENTITY,
|
|
27
|
+
capabilities: managedStaticCapabilities(),
|
|
28
|
+
load: async () => {
|
|
29
|
+
const { ManagedStaticProvider } = await import("../dotnet/ManagedStaticProvider.js");
|
|
30
|
+
return new ManagedStaticProvider();
|
|
31
|
+
},
|
|
28
32
|
},
|
|
29
|
-
|
|
30
|
-
|
|
33
|
+
];
|
|
34
|
+
};
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
+
import { snapshotEnvironment } from "../process/snapshotEnvironment.js";
|
|
1
2
|
import { HopperProvider } from "../hopper/HopperProvider.js";
|
|
2
3
|
import { GhidraProvider } from "../ghidra/GhidraProvider.js";
|
|
3
4
|
import { IdaProvider } from "../ida/IdaProvider.js";
|
|
4
|
-
import { silentLogger } from "../logger.js";
|
|
5
5
|
import { auxiliaryAnalysisProviderDeclarations } from "./auxiliaryAnalysisProviders.js";
|
|
6
6
|
import { AnalysisProviderRegistry } from "../application/binary/AnalysisProviderRegistry.js";
|
|
7
7
|
import { composeBinarySession } from "../application/binary/BinarySessionComposition.js";
|
|
8
8
|
import { LazyAnalysisProvider } from "../application/binary/LazyAnalysisProvider.js";
|
|
9
9
|
import { ManagedStaticProvider } from "../dotnet/ManagedStaticProvider.js";
|
|
10
|
-
import { SessionProviderRouter } from "../application/binary/SessionProviderRouter.js";
|
|
11
10
|
/**
|
|
12
11
|
* Compose the target-switching runtime shared directly by CLI and MCP adapters.
|
|
13
12
|
* This is the sole production wiring point, so both adapters share identical
|
|
14
13
|
* provider selection, profile, lifecycle, and Evidence semantics.
|
|
15
14
|
*/
|
|
16
|
-
export const createBinarySession = (config, logger
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
|
|
15
|
+
export const createBinarySession = (config, logger, selectedEnvironment) => {
|
|
16
|
+
const environment = snapshotEnvironment(selectedEnvironment);
|
|
17
|
+
const hopper = new HopperProvider(config, logger, environment);
|
|
18
|
+
const ghidra = new GhidraProvider(config, logger, environment);
|
|
19
|
+
const ida = new IdaProvider(config, environment);
|
|
20
|
+
return composeBinarySession(new AnalysisProviderRegistry([hopper, ghidra, ida], config.analysisProvider), auxiliaryAnalysisProviderDeclarations(environment).map((declaration) => new LazyAnalysisProvider(declaration)));
|
|
21
21
|
};
|
|
22
22
|
/** Compose an execution-free managed session without native provider selection. */
|
|
23
|
-
export const createManagedBinarySession = () => composeBinarySession(
|
|
23
|
+
export const createManagedBinarySession = () => composeBinarySession(new AnalysisProviderRegistry([]), [
|
|
24
24
|
new ManagedStaticProvider(),
|
|
25
|
-
])
|
|
25
|
+
]);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { PlaywrightBrowserScenarioProvider } from "../browser/PlaywrightBrowserScenarioProvider.js";
|
|
2
|
+
import { PlaywrightScenarioSessionFactory } from "../browser/PlaywrightScenarioSession.js";
|
|
2
3
|
/** Construct a fresh provider without opening a target or acquiring an engine. */
|
|
3
|
-
export const createBrowserScenarioProvider = () => new PlaywrightBrowserScenarioProvider();
|
|
4
|
+
export const createBrowserScenarioProvider = (environment) => new PlaywrightBrowserScenarioProvider(new PlaywrightScenarioSessionFactory(environment));
|
|
@@ -1,17 +1,24 @@
|
|
|
1
|
+
import { snapshotEnvironment } from "../process/snapshotEnvironment.js";
|
|
2
|
+
import { parseConfig } from "../config/parseConfig.js";
|
|
1
3
|
import { runDirectAnalysis as executeDirectAnalysis, runProviderAnalysis as executeProviderAnalysis, runManagedProviderExecution as executeManagedProvider, } from "../application/DirectAnalysis.js";
|
|
2
4
|
import { runCapabilityStatus as executeCapabilityStatus, runProviderStatus as executeProviderStatus, } from "../application/DirectAnalysisStatus.js";
|
|
3
5
|
import { createBinarySession, createManagedBinarySession } from "./binary.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
/** Bind one-shot analysis and status commands to one caller-selected environment. */
|
|
7
|
+
export const createDirectAnalysis = (selectedEnvironment) => {
|
|
8
|
+
const environment = snapshotEnvironment(selectedEnvironment);
|
|
9
|
+
const dependencies = {
|
|
10
|
+
readConfiguration: () => parseConfig(environment),
|
|
11
|
+
createBinarySession: (config, logger) => createBinarySession(config, logger, environment),
|
|
12
|
+
createManagedBinarySession,
|
|
13
|
+
};
|
|
14
|
+
return {
|
|
15
|
+
runDirectAnalysis: executeDirectAnalysis.bind(undefined, dependencies),
|
|
16
|
+
runProviderAnalysis: executeProviderAnalysis.bind(undefined, dependencies),
|
|
17
|
+
runProviderStatus: executeProviderStatus.bind(undefined, dependencies),
|
|
18
|
+
runCapabilityStatus: executeCapabilityStatus.bind(undefined, dependencies),
|
|
19
|
+
};
|
|
7
20
|
};
|
|
8
|
-
/**
|
|
9
|
-
export const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
/** Execute managed metadata without constructing native provider candidates. */
|
|
13
|
-
export const runManagedProviderExecution = executeManagedProvider.bind(undefined, dependencies);
|
|
14
|
-
/** Report production provider candidates without opening a target. */
|
|
15
|
-
export const runProviderStatus = executeProviderStatus.bind(undefined, dependencies);
|
|
16
|
-
/** Report production session operations without opening a target. */
|
|
17
|
-
export const runCapabilityStatus = executeCapabilityStatus.bind(undefined, dependencies);
|
|
21
|
+
/** Execute managed metadata without configuration or native provider candidates. */
|
|
22
|
+
export const runManagedProviderExecution = executeManagedProvider.bind(undefined, {
|
|
23
|
+
createManagedBinarySession,
|
|
24
|
+
});
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { PlaywrightElectronActiveProvider } from "../browser/PlaywrightElectronActiveProvider.js";
|
|
2
2
|
/** Construct a fresh provider without opening a target or acquiring an engine. */
|
|
3
|
-
export const createElectronScenarioProvider = () => new PlaywrightElectronActiveProvider();
|
|
3
|
+
export const createElectronScenarioProvider = (environment) => new PlaywrightElectronActiveProvider(environment);
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
+
import { snapshotEnvironment } from "../process/snapshotEnvironment.js";
|
|
1
2
|
import { CDP_BROWSER_PROVIDER_IDENTITY, PLAYWRIGHT_BROWSER_SCENARIO_PROVIDER_IDENTITY, CDP_ELECTRON_PROVIDER_IDENTITY, PLAYWRIGHT_ELECTRON_ACTIVE_PROVIDER_IDENTITY, } from "../browser/providerIdentities.js";
|
|
2
3
|
import { V8_INSPECTOR_PROVIDER_IDENTITY } from "../inspector/providerIdentity.js";
|
|
3
4
|
import { err, ok } from "../domain/result.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
/** Bind optional provider construction to one caller-selected process environment. */
|
|
6
|
+
export const createOptionalObservationFactories = (selectedEnvironment) => {
|
|
7
|
+
const environment = snapshotEnvironment(selectedEnvironment);
|
|
8
|
+
return {
|
|
9
|
+
browserObservation: async () => (await import("./browserObservation.js")).createBrowserObservationProvider(),
|
|
10
|
+
browserScenarioCapture: async () => (await import("./browserScenario.js")).createBrowserScenarioProvider(environment),
|
|
11
|
+
electronObservation: async () => (await import("./electronObservation.js")).createElectronObservationProvider(),
|
|
12
|
+
electronActiveObservation: async () => (await import("./electronScenario.js")).createElectronScenarioProvider(environment),
|
|
13
|
+
javascriptRuntimeObservation: async () => (await import("./javascriptRuntimeObservation.js")).createJavaScriptRuntimeObservationProvider(),
|
|
14
|
+
};
|
|
10
15
|
};
|
|
11
16
|
const loadPort = async (factory, providerId) => {
|
|
12
17
|
try {
|
|
@@ -20,7 +25,7 @@ const loadPort = async (factory, providerId) => {
|
|
|
20
25
|
}
|
|
21
26
|
};
|
|
22
27
|
/** Load each adapter independently, retaining healthy peers and exact failures. */
|
|
23
|
-
export const loadOptionalObservationProviders = async (factories
|
|
28
|
+
export const loadOptionalObservationProviders = async (factories) => {
|
|
24
29
|
const [browser, scenario, electron, electronActive, runtime] = await Promise.all([
|
|
25
30
|
loadPort(factories.browserObservation, CDP_BROWSER_PROVIDER_IDENTITY.id),
|
|
26
31
|
loadPort(factories.browserScenarioCapture, PLAYWRIGHT_BROWSER_SCENARIO_PROVIDER_IDENTITY.id),
|
|
@@ -46,8 +46,14 @@ const environmentSchema = z.object({
|
|
|
46
46
|
export const parseEnvironment = (environment) => {
|
|
47
47
|
const parsed = environmentSchema.safeParse(environment);
|
|
48
48
|
if (!parsed.success) {
|
|
49
|
+
// Zod messages name the constraint, never the rejected value.
|
|
50
|
+
const settings = parsed.error.issues.map((issue) => ({
|
|
51
|
+
setting: String(issue.path[0] ?? "environment"),
|
|
52
|
+
constraint: issue.message,
|
|
53
|
+
}));
|
|
49
54
|
return err(new ConfigurationError("Invalid REA environment configuration", {
|
|
50
55
|
cause: parsed.error,
|
|
56
|
+
settings,
|
|
51
57
|
}));
|
|
52
58
|
}
|
|
53
59
|
return ok(parsed.data);
|
|
@@ -6,12 +6,7 @@ const MAX_TIMER_DELAY_MS = 2_147_483_647;
|
|
|
6
6
|
/** Parse the optional setting without reading the ambient process environment. */
|
|
7
7
|
export const ghidraStartupTimeoutSchema = z
|
|
8
8
|
.string()
|
|
9
|
-
.
|
|
10
|
-
.transform(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
value > 0 &&
|
|
14
|
-
value <= MAX_TIMER_DELAY_MS
|
|
15
|
-
? value
|
|
16
|
-
: DEFAULT_GHIDRA_STARTUP_TIMEOUT_MS;
|
|
17
|
-
});
|
|
9
|
+
.regex(/^[1-9]\d*$/u, "must be a positive decimal integer")
|
|
10
|
+
.transform(Number)
|
|
11
|
+
.pipe(z.number().int().min(1).max(MAX_TIMER_DELAY_MS))
|
|
12
|
+
.default(DEFAULT_GHIDRA_STARTUP_TIMEOUT_MS);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { userInfo } from "node:os";
|
|
2
|
+
/** Resolve the caller's selected home before consulting the host account. */
|
|
3
|
+
export const homeDirectoryFromEnvironment = (environment, platform) => {
|
|
4
|
+
const selected = platform === "win32"
|
|
5
|
+
? (environment.USERPROFILE ??
|
|
6
|
+
(environment.HOMEDRIVE !== undefined &&
|
|
7
|
+
environment.HOMEPATH !== undefined
|
|
8
|
+
? `${environment.HOMEDRIVE}${environment.HOMEPATH}`
|
|
9
|
+
: environment.HOME))
|
|
10
|
+
: (environment.HOME ?? environment.USERPROFILE);
|
|
11
|
+
return selected ?? userInfo().homedir;
|
|
12
|
+
};
|
|
@@ -11,6 +11,7 @@ export const mcpResponseBudgetSchema = z
|
|
|
11
11
|
.regex(/^[1-9]\d*$/u)
|
|
12
12
|
.transform(Number)
|
|
13
13
|
.pipe(z.number().int().safe().min(MINIMUM_RESPONSE_BYTES));
|
|
14
|
+
const budgetConstraint = `REA_MCP_MAX_RESPONSE_BYTES must be a decimal safe integer at least ${String(MINIMUM_RESPONSE_BYTES)} bytes, the default stdio receive-buffer size.`;
|
|
14
15
|
/** Parse only the MCP-specific budget without loading unrelated provider settings. */
|
|
15
16
|
export const parseMcpResponseBudget = (value) => {
|
|
16
17
|
if (value === undefined)
|
|
@@ -18,5 +19,12 @@ export const parseMcpResponseBudget = (value) => {
|
|
|
18
19
|
const parsed = mcpResponseBudgetSchema.safeParse(value);
|
|
19
20
|
return parsed.success
|
|
20
21
|
? ok(parsed.data)
|
|
21
|
-
: err(new ConfigurationError(
|
|
22
|
+
: err(new ConfigurationError(budgetConstraint, {
|
|
23
|
+
settings: [
|
|
24
|
+
{
|
|
25
|
+
setting: "REA_MCP_MAX_RESPONSE_BYTES",
|
|
26
|
+
constraint: budgetConstraint,
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
}));
|
|
22
30
|
};
|