rea-agents 6.0.0 → 6.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -18
- package/bridge/android/ReaJadxBridge.java +14 -5
- package/bridge/ghidra/ReaGhidraBridge.java +205 -51
- package/bridge/hopper_bridge.py +314 -127
- package/bridge/mitmproxy/capture.py +0 -2
- package/bridge/native/rea_lldb_tracer.py +630 -94
- package/bridge/process/ProcessRunTokenReader.swift +39 -5
- package/bridge/pwntools/recorded_crash_impl.py +4 -0
- package/dist/android/JadxConfiguration.js +274 -31
- package/dist/android/JadxMcpTransport.js +18 -2
- package/dist/android/JadxProtocol.js +6 -0
- package/dist/android/JadxProvider.js +76 -37
- package/dist/android/JadxSession.js +23 -4
- package/dist/application/AnalysisContextQueries.js +8 -35
- package/dist/application/AnalysisDocument.js +32 -0
- package/dist/application/AppBundleExecutable.js +67 -21
- package/dist/application/BinaryTargetResolver.js +5 -3
- package/dist/application/BrowserEvidence.js +3 -8
- package/dist/application/BrowserScenarioEvidence.js +2 -18
- package/dist/application/CallPathTracing.js +19 -3
- package/dist/application/CapabilityInventory.js +48 -11
- package/dist/application/ClientConfigurationDocument.js +917 -8
- package/dist/application/ClientRegistrationIdentity.js +26 -5
- package/dist/application/ClientRegistrationStatus.js +29 -14
- package/dist/application/DirectAnalysis.js +56 -51
- package/dist/application/DirectAnalysisCleanup.js +72 -0
- package/dist/application/DirectAnalysisStatus.js +4 -5
- package/dist/application/Doctor.js +19 -21
- package/dist/application/DoctorDiagnostics.js +1 -2
- package/dist/application/DoctorScope.js +25 -13
- package/dist/application/EnhancedLiteralTracing.js +22 -25
- package/dist/application/EnhancedTools.js +64 -17
- package/dist/application/EvidenceBundleFiles.js +30 -13
- package/dist/application/FunctionAnalysisEvidence.js +2 -3
- package/dist/application/InventoryProjectionEvidence.js +4 -3
- package/dist/application/InvestigationProviders.js +11 -2
- package/dist/application/JsonFiles.js +83 -28
- package/dist/application/LinuxHopper.js +9 -6
- package/dist/application/MacHopper.js +15 -18
- package/dist/application/ProcedureAddressResolution.js +11 -0
- package/dist/application/RealHopperAssertions.js +0 -11
- package/dist/application/ReconstructionCoverageService.js +7 -4
- package/dist/application/ReconstructionObligationCandidates.js +1 -1
- package/dist/application/ReconstructionObligationLedgerService.js +4 -3
- package/dist/application/ReferenceSourceImportEntries.js +1 -1
- package/dist/application/Setup.js +21 -17
- package/dist/application/SetupClientConfiguration.js +10 -15
- package/dist/application/SetupHost.js +21 -29
- package/dist/application/SetupPlan.js +11 -9
- package/dist/application/SupportedClients.js +34 -1
- package/dist/application/Uninstall.js +82 -29
- package/dist/application/Update.js +18 -3
- package/dist/application/UpdateMaintenance.js +7 -5
- package/dist/application/UpdateRuntime.js +57 -36
- package/dist/application/WebModuleTraceService.js +4 -2
- package/dist/application/WebNetworkCaptureService.js +4 -2
- package/dist/application/WebRuntimeService.js +5 -3
- package/dist/application/WebScriptExportService.js +32 -6
- package/dist/application/WebSourceLocationService.js +4 -2
- package/dist/application/WorkflowEvidence.js +105 -0
- package/dist/application/XrefsAddressResolution.js +45 -0
- package/dist/application/analysisView/AnalysisViewService.js +76 -0
- package/dist/application/binary/AnalysisClientCleanup.js +30 -5
- package/dist/application/binary/AnalysisProviderEvaluation.js +22 -7
- package/dist/application/binary/AnalysisProviderRegistry.js +4 -6
- package/dist/application/binary/AnalysisSnapshotCache.js +13 -14
- package/dist/application/binary/BinarySession.js +161 -93
- package/dist/application/binary/BinarySessionComposition.js +1 -3
- package/dist/application/binary/BinarySessionExecution.js +3 -5
- package/dist/application/binary/BinarySessionOpen.js +4 -4
- package/dist/application/binary/BinarySessionRecords.js +26 -4
- package/dist/application/binary/BinarySessionStatus.js +18 -7
- package/dist/application/binary/CompositeProvider.js +16 -17
- package/dist/application/binary/LazyAnalysisProvider.js +8 -5
- package/dist/application/binary/SessionProviderRouter.js +27 -135
- package/dist/application/binaryDiagnostics/BinaryLayoutService.js +4 -2
- package/dist/application/binaryDiagnostics/RecordedCrashService.js +4 -2
- package/dist/application/evm/EvmInterfaceService.js +4 -2
- package/dist/application/homebrew.js +48 -0
- package/dist/application/investigation/EvidenceLedger.js +21 -7
- package/dist/application/investigation/InvestigationRecords.js +8 -0
- package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
- package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -4
- package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
- package/dist/application/javascript/JavaScriptApplicationService.js +27 -15
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +10 -7
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +44 -10
- package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
- package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
- package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
- package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +12 -3
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +49 -19
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +56 -8
- package/dist/application/javascript/JavaScriptModuleRelationships.js +38 -9
- package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +6 -4
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +63 -61
- package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
- package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +64 -19
- package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
- package/dist/application/managed/ManagedMemberComparisonService.js +9 -5
- package/dist/application/managed/ManagedNativeVerificationService.js +6 -4
- package/dist/application/managed/ManagedReconstructionService.js +4 -3
- package/dist/application/process/ProcessCli.js +25 -17
- package/dist/application/process/ProcessEvidence.js +4 -4
- package/dist/application/workflowInputError.js +18 -0
- package/dist/artifacts/ArtifactProvider.js +48 -13
- package/dist/artifacts/ArtifactReader.js +31 -0
- package/dist/artifacts/DirectoryArtifactReader.js +2 -1
- package/dist/artifacts/MachOSliceArtifactReader.js +106 -15
- package/dist/artifacts/NativeDmgArtifactReader.js +73 -21
- package/dist/artifacts/SafeOutputTree.js +16 -2
- package/dist/artifacts/ZipArtifactReader.js +11 -4
- package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +26 -5
- package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
- package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
- package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
- package/dist/artifacts/apple/KeyedArchiveReader.js +55 -23
- package/dist/artifacts/apple/MachoLoadCommandReader.js +92 -31
- package/dist/artifacts/apple/NibArchive.js +81 -14
- package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
- package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
- package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +79 -68
- package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
- package/dist/artifacts/inventory/reader.js +3 -3
- package/dist/artifacts/inventory/scanCanonical.js +59 -38
- package/dist/artifacts/inventory/scanReader.js +5 -9
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
- package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
- package/dist/browser/CdpBrowserProvider.js +2 -3
- package/dist/browser/CdpCaptureCompleteness.js +2 -0
- package/dist/browser/CdpCaptureEventHandlers.js +78 -15
- package/dist/browser/CdpCaptureEventTypes.js +5 -1
- package/dist/browser/CdpCaptureEvents.js +25 -1
- package/dist/browser/CdpCaptureValues.js +20 -0
- package/dist/browser/CdpConnection.js +30 -11
- package/dist/browser/CdpElectronProvider.js +0 -2
- package/dist/browser/CdpElectronScriptEvents.js +2 -8
- package/dist/browser/CdpElectronScripts.js +2 -3
- package/dist/browser/CdpOptionalCommand.js +2 -3
- package/dist/browser/CdpPageCapture.js +23 -1
- package/dist/browser/CdpPageCaptureScripts.js +2 -3
- package/dist/browser/CdpSafeMetadata.js +10 -10
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
- package/dist/browser/PlaywrightElectronActiveActions.js +34 -79
- package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
- package/dist/browser/PlaywrightElectronActiveProvider.js +133 -130
- package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
- package/dist/browser/PlaywrightScenarioBrowser.js +139 -39
- package/dist/browser/PlaywrightScenarioEvents.js +1 -1
- package/dist/browser/PlaywrightScenarioSession.js +39 -22
- package/dist/browser/WebSourceMapFetcher.js +426 -72
- package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
- package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
- package/dist/browser/history/CaptureFailures.js +41 -1
- package/dist/browser/history/CaptureRelease.js +5 -0
- package/dist/browser/history/HarCaptureAdapter.js +3 -3
- package/dist/browser/history/HarJson.js +3 -2
- package/dist/browser/history/HistoricalCaptureDecoder.js +4 -2
- package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
- package/dist/catalogIdentity.js +0 -1
- package/dist/cli/analysisSelector.js +23 -0
- package/dist/cli/analysisViewCommands.js +36 -0
- package/dist/cli/applicationCommands.js +2 -3
- package/dist/cli/artifactCommands.js +11 -12
- package/dist/cli/coreAnalysisCommands.js +3 -3
- package/dist/cli/coreBinaryCommands.js +100 -37
- package/dist/cli/coreNativeCommands.js +9 -10
- package/dist/cli/electronCommands.js +10 -9
- package/dist/cli/interactiveSetup.js +6 -6
- package/dist/cli/javascriptApplicationAnalysis.js +7 -3
- package/dist/cli/jsonOutput.js +4 -99
- package/dist/cli/managedCommands.js +7 -8
- package/dist/cli/nativeCallCommands.js +3 -5
- package/dist/cli/omittableDefaults.js +50 -0
- package/dist/cli/processCommands.js +3 -2
- package/dist/cli/setupCommands.js +16 -15
- package/dist/cli/utilityCommands.js +9 -9
- package/dist/cli/webRuntimeCommands.js +8 -8
- package/dist/cli.js +18 -9
- package/dist/cliBrowserScenarioCommands.js +2 -2
- package/dist/cliCommandNames.js +1 -1
- package/dist/cliJsonInput.js +24 -5
- package/dist/cliOutput.js +0 -38
- package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
- package/dist/composition/binary.js +9 -9
- package/dist/composition/browserScenario.js +2 -1
- package/dist/composition/directAnalysis.js +20 -13
- package/dist/composition/electronScenario.js +1 -1
- package/dist/composition/optionalObservationProviders.js +12 -7
- package/dist/config/environment.js +10 -0
- package/dist/config/ghidraStartupTimeout.js +12 -0
- package/dist/config/homeDirectory.js +12 -0
- package/dist/config/mcpResponseBudget.js +30 -0
- package/dist/config/parseConfig.js +8 -3
- package/dist/config/parsers.js +19 -22
- package/dist/contracts/analysisViewToolContracts.js +56 -0
- package/dist/contracts/applicationToolContracts.js +5 -4
- package/dist/contracts/artifactComparisonExample.js +2 -2
- package/dist/contracts/artifactToolContracts.js +1 -1
- package/dist/contracts/browserScenarioToolContracts.js +1 -1
- package/dist/contracts/browserToolContracts.js +19 -15
- package/dist/contracts/enhancedInputs.js +7 -5
- package/dist/contracts/enhancedToolContracts.js +7 -6
- package/dist/contracts/evm/evmToolContracts.js +1 -1
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/hopperMemoryContracts.js +2 -5
- package/dist/contracts/inputSchemaPresentation.js +90 -0
- package/dist/contracts/investigationExamples.js +4 -3
- package/dist/contracts/javascript/electronToolContracts.js +2 -2
- package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
- package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
- package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
- package/dist/contracts/managed/managedToolContracts.js +7 -14
- package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
- package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
- package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
- package/dist/contracts/native/nativeToolContracts.js +5 -3
- package/dist/contracts/officialToolContracts.js +16 -16
- package/dist/contracts/promptContracts.js +5 -5
- package/dist/contracts/providerSelection.js +1 -1
- package/dist/contracts/sessionLifecycleInputs.js +3 -7
- package/dist/contracts/sessionStatusContract.js +2 -4
- package/dist/contracts/sessionToolContracts.js +18 -8
- package/dist/contracts/sessionToolSchemas.js +3 -19
- package/dist/contracts/toolContractExamples.js +0 -1
- package/dist/contracts/toolContractHelpers.js +4 -1
- package/dist/contracts/toolContracts.js +2 -0
- package/dist/contracts/toolEffects.js +1 -1
- package/dist/contracts/toolOutputSchemaGroups.js +160 -115
- package/dist/contracts/toolOutputSchemaPrimitives.js +28 -20
- package/dist/contracts/toolSchemaMetadata.js +41 -33
- package/dist/contracts/webNetworkCaptureToolContracts.js +2 -2
- package/dist/contracts/webRuntimeToolContracts.js +1 -1
- package/dist/contracts/webScriptToolContracts.js +1 -1
- package/dist/doctorRuntime.js +7 -5
- package/dist/domain/analysisErrorBase.js +8 -3
- package/dist/domain/analysisErrorCore.js +6 -1
- package/dist/domain/analysisErrorPresentation.js +90 -20
- package/dist/domain/analysisErrorProjection.js +130 -32
- package/dist/domain/analysisSnapshot.js +29 -31
- package/dist/domain/analysisView/analysisView.js +243 -0
- package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
- package/dist/domain/analysisView/binaryLayoutView.js +159 -0
- package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
- package/dist/domain/android/androidAnalysis.js +2 -4
- package/dist/domain/android/androidApplication.js +18 -10
- package/dist/domain/apple/appleApplication.js +42 -15
- package/dist/domain/apple/dyldEnvironment.js +73 -0
- package/dist/domain/apple/dylibResolution.js +130 -12
- package/dist/domain/apple/dylibResolutionFindings.js +9 -7
- package/dist/domain/apple/interfaceBuilderGraph.js +25 -14
- package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
- package/dist/domain/apple/keyedArchive.js +35 -3
- package/dist/domain/apple/machoContainer.js +54 -0
- package/dist/domain/apple/plistNumbers.js +76 -0
- package/dist/domain/artifactComparison.js +15 -6
- package/dist/domain/artifactGraph.js +16 -3
- package/dist/domain/artifactIdentity.js +29 -0
- package/dist/domain/artifactInventoryEvidence.js +28 -40
- package/dist/domain/artifactOperationError.js +3 -3
- package/dist/domain/artifactPartialObservation.js +1 -0
- package/dist/domain/artifactPathSyntax.js +49 -0
- package/dist/domain/binaryTarget.js +39 -13
- package/dist/domain/bridgeCandidateProjection.js +71 -0
- package/dist/domain/browserCaptureComparison.js +13 -49
- package/dist/domain/browserCompleteness.js +1 -0
- package/dist/domain/browserNetworkEvidence.js +10 -4
- package/dist/domain/browserObservation.js +0 -1
- package/dist/domain/browserObservationError.js +24 -5
- package/dist/domain/browserObservationSchemas.js +14 -3
- package/dist/domain/browserScenario.js +0 -1
- package/dist/domain/browserScenarioCapture.js +1 -2
- package/dist/domain/browserScenarioDiff.js +0 -2
- package/dist/domain/browserScenarioDiffEvidence.js +0 -12
- package/dist/domain/browserScenarioDiffValues.js +2 -2
- package/dist/domain/browserScenarioValues.js +5 -10
- package/dist/domain/bundleComparison.js +3 -2
- package/dist/domain/callPath.js +8 -9
- package/dist/domain/callPathSchemas.js +2 -2
- package/dist/domain/canonicalJsonDigestSteps.js +133 -0
- package/dist/domain/canonicalOrdering.js +9 -5
- package/dist/domain/changedBehavior.js +9 -9
- package/dist/domain/comparisonSourceEvidence.js +40 -0
- package/dist/domain/completionLedgerGeneration.js +2 -1
- package/dist/domain/configurationErrors.js +13 -1
- package/dist/domain/conformancePackage.js +4 -3
- package/dist/domain/evidence.js +65 -36
- package/dist/domain/evidenceBundle.js +47 -8
- package/dist/domain/evidenceCompletionLedger.js +2 -1
- package/dist/domain/evidenceErrors.js +12 -1
- package/dist/domain/explicitSensitiveFailure.js +17 -1
- package/dist/domain/firmware/firmwareAnalysis.js +6 -7
- package/dist/domain/functionComparison.js +4 -5
- package/dist/domain/functionComparisonDimensions.js +120 -87
- package/dist/domain/functionComparisonNormalization.js +23 -34
- package/dist/domain/functionComparisonResults.js +1 -4
- package/dist/domain/functionComparisonSchemas.js +2 -8
- package/dist/domain/functionDossierEvidence.js +2 -37
- package/dist/domain/hopperErrors.js +23 -2
- package/dist/domain/hopperValues.js +51 -8
- package/dist/domain/immutableJson.js +114 -0
- package/dist/domain/inputIssueProjection.js +3 -0
- package/dist/domain/javascript/electronActiveObservation.js +47 -64
- package/dist/domain/javascript/electronObservation.js +14 -3
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
- package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
- package/dist/domain/javascript/electronStaticAnalysisValues.js +6 -12
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +39 -3
- package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
- package/dist/domain/javascript/javascriptAstValues.js +20 -0
- package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
- package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
- package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
- package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
- package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
- package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
- package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
- package/dist/domain/javascript/javascriptRecovery.js +3 -8
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
- package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
- package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
- package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
- package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +106 -5
- package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
- package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
- package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
- package/dist/domain/javascript/javascriptSemanticCoverage.js +6 -5
- package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
- package/dist/domain/javascript/javascriptSemanticDataEffects.js +23 -6
- package/dist/domain/javascript/javascriptSemanticGraph.js +98 -43
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
- package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
- package/dist/domain/javascript/javascriptSemanticPrimitives.js +18 -21
- package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
- package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
- package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
- package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
- package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
- package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
- package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
- package/dist/domain/javascript/javascriptSemanticValues.js +126 -61
- package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
- package/dist/domain/javascript/javascriptSourceParser.js +6 -2
- package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +16 -5
- package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -17
- package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
- package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
- package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
- package/dist/domain/jsonSerialization.js +109 -0
- package/dist/domain/jsonValue.js +90 -6
- package/dist/domain/localPath.js +6 -0
- package/dist/domain/managed/managedApplicationGraph.js +10 -10
- package/dist/domain/managed/managedArtifact.js +6 -4
- package/dist/domain/managed/managedInspectionEvidence.js +16 -0
- package/dist/domain/managed/managedMemberComparison.js +2 -9
- package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
- package/dist/domain/managed/managedNativeVerification.js +3 -11
- package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
- package/dist/domain/native/binaryLayout.js +2 -3
- package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
- package/dist/domain/native/nativeApiBoundary.js +1 -1
- package/dist/domain/native/nativeCallObservation.js +37 -13
- package/dist/domain/native/nativeCallPartialObservation.js +33 -0
- package/dist/domain/native/nativeInstruction.js +7 -0
- package/dist/domain/native/recordedCrash.js +2 -3
- package/dist/domain/offsetDateTime.js +17 -0
- package/dist/domain/process/processCapture.js +21 -16
- package/dist/domain/process/processCaptureCoverage.js +67 -0
- package/dist/domain/process/processCaptureExample.js +2 -1
- package/dist/domain/process/processCaptureParsing.js +1 -34
- package/dist/domain/process/processCaptureValidation.js +81 -13
- package/dist/domain/process/processComparison.js +79 -26
- package/dist/domain/process/processObservation.js +10 -2
- package/dist/domain/process/processScenario.js +35 -12
- package/dist/domain/process/processTraceComparison.js +0 -2
- package/dist/domain/process/processTraceDimensionProjection.js +1 -1
- package/dist/domain/process/processTraceEvaluation.js +15 -11
- package/dist/domain/process/processTraceSpecification.js +3 -4
- package/dist/domain/propertyListKeys.js +1 -1
- package/dist/domain/propertyListXmlText.js +19 -0
- package/dist/domain/providerAdapterError.js +3 -1
- package/dist/domain/providerOperationHealth.js +54 -0
- package/dist/domain/reconstructionCoverage.js +5 -2
- package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
- package/dist/domain/reconstructionReadinessSchemas.js +2 -1
- package/dist/domain/reconstructionVerification.js +9 -46
- package/dist/domain/reconstructionVerificationSchemas.js +4 -3
- package/dist/domain/referenceSourceGraph.js +20 -21
- package/dist/domain/staticRuntimeCorrelation.js +8 -45
- package/dist/domain/stringPatterns.js +6 -0
- package/dist/domain/swiftSymbolClassification.js +61 -0
- package/dist/domain/symbolAnalysis.js +66 -18
- package/dist/domain/webBundleAnalysis.js +20 -8
- package/dist/domain/webBundleAnalyzerInspection.js +13 -8
- package/dist/domain/webBundleAnalyzerResult.js +41 -2
- package/dist/domain/webCaptureDiff.js +0 -1
- package/dist/domain/webCaptureDiffSchemas.js +6 -3
- package/dist/domain/webEventListeners.js +3 -2
- package/dist/domain/webExecution.js +3 -2
- package/dist/domain/webRuntime.js +19 -7
- package/dist/domain/webScriptExport.js +1 -1
- package/dist/domain/webSourceLocation.js +1 -0
- package/dist/dotnet/ManagedArtifactInspector.js +2 -19
- package/dist/dotnet/ManagedMemberInspector.js +12 -18
- package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
- package/dist/dotnet/ManagedMemberRows.js +75 -62
- package/dist/dotnet/ManagedMetadataInventory.js +16 -22
- package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
- package/dist/dotnet/ManagedReaderFailure.js +16 -0
- package/dist/dotnet/ManagedStaticProvider.js +3 -5
- package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
- package/dist/evaluation/AgentEvaluationReport.js +28 -0
- package/dist/evaluation/CodexAgentEval.js +12 -8
- package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
- package/dist/evm/EvmoleInterfaceProvider.js +2 -1
- package/dist/firmware/FirmwareCommand.js +9 -5
- package/dist/firmware/FirmwareFiles.js +1 -1
- package/dist/firmware/FirmwareProvider.js +4 -4
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +7 -5
- package/dist/ghidra/GhidraClient.js +126 -34
- package/dist/ghidra/GhidraClientStartup.js +0 -2
- package/dist/ghidra/GhidraDiagnostics.js +7 -7
- package/dist/ghidra/GhidraDoctor.js +6 -5
- package/dist/ghidra/GhidraFunctionValues.js +13 -12
- package/dist/ghidra/GhidraInstallation.js +58 -33
- package/dist/ghidra/GhidraInventoryValues.js +14 -4
- package/dist/ghidra/GhidraJavaLaunch.js +66 -0
- package/dist/ghidra/GhidraLauncher.js +47 -22
- package/dist/ghidra/GhidraProvider.js +6 -2
- package/dist/ghidra/GhidraProviderCapabilities.js +20 -2
- package/dist/ghidra/GhidraProviderClient.js +36 -15
- package/dist/ghidra/GhidraSessionError.js +13 -7
- package/dist/ghidra/GhidraSessionRoot.js +39 -0
- package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
- package/dist/ghidra/GhidraTransport.js +20 -0
- package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
- package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
- package/dist/hopper/BridgeLauncher.js +65 -56
- package/dist/hopper/HopperAnalysisProfile.js +65 -12
- package/dist/hopper/HopperCleanup.js +63 -22
- package/dist/hopper/HopperClient.js +288 -59
- package/dist/hopper/HopperFileOffset.js +237 -0
- package/dist/hopper/HopperMachOImage.js +197 -0
- package/dist/hopper/HopperOperationStage.js +6 -0
- package/dist/hopper/HopperProvider.js +71 -19
- package/dist/hopper/HopperProviderCapabilities.js +19 -1
- package/dist/hopper/HopperRegexSearch.js +134 -0
- package/dist/hopper/HopperRegexWorker.js +27 -0
- package/dist/hopper/HopperRequestQueue.js +68 -19
- package/dist/hopper/HopperTargetLease.js +133 -49
- package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
- package/dist/ida/IdaConfiguration.js +8 -3
- package/dist/ida/IdaInput.js +1 -7
- package/dist/ida/IdaMcpConnection.js +8 -4
- package/dist/ida/IdaOperationRunner.js +3 -3
- package/dist/ida/IdaProvider.js +8 -12
- package/dist/ida/IdaSessionClient.js +20 -18
- package/dist/ida/IdaWorkspace.js +12 -13
- package/dist/inspector/JavaScriptRuntimeScope.js +9 -1
- package/dist/inspector/V8InspectorCaptureProjection.js +9 -4
- package/dist/inspector/V8InspectorProvider.js +82 -36
- package/dist/javascript/recovery/WakaruCommand.js +7 -2
- package/dist/javascript/recovery/WakaruExecution.js +5 -2
- package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
- package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -0
- package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
- package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
- package/dist/main/shutdown.js +11 -3
- package/dist/main/startup.js +9 -2
- package/dist/main/transport.js +22 -2
- package/dist/main.js +11 -18
- package/dist/mcpDoctor.js +62 -2
- package/dist/native/AppleDispatchCoverage.js +47 -6
- package/dist/native/AppleDispatchDecodeFacts.js +6 -0
- package/dist/native/AppleDispatchMetadata.js +6 -3
- package/dist/native/AppleMachoFixups.js +48 -24
- package/dist/native/AppleMachoSelection.js +48 -22
- package/dist/native/AppleObjcCategories.js +6 -2
- package/dist/native/AppleObjcDispatchFacets.js +5 -2
- package/dist/native/AppleObjcProperties.js +2 -1
- package/dist/native/AppleSwiftDispatchFacets.js +27 -21
- package/dist/native/AppleSwiftVtables.js +21 -15
- package/dist/native/CommandRunner.js +87 -88
- package/dist/native/LldbCallTracer.js +372 -103
- package/dist/native/LldbRetainedObservations.js +178 -0
- package/dist/native/NativeCallObservation.js +62 -3
- package/dist/native/NativeMacOSProvider.js +122 -31
- package/dist/native/NativeUiHelperRuntime.js +11 -2
- package/dist/native/NativeUiObservation.js +2 -2
- package/dist/native/SignatureTargetBinding.js +155 -0
- package/dist/native/parsers/lipo.js +71 -1
- package/dist/native/pwndbg/PwndbgCoreContext.js +25 -5
- package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
- package/dist/native/pwntools/RecordedCrashStructureBindings.js +2 -0
- package/dist/process/DarwinProcessRunTokenReader.js +23 -10
- package/dist/process/ExecFileOutput.js +108 -6
- package/dist/process/OwnedCommand.js +7 -2
- package/dist/process/PrivateRuntimeRoot.js +10 -5
- package/dist/process/ProcessOwnership.js +204 -57
- package/dist/process/ProcessOwnershipObservation.js +60 -9
- package/dist/process/ProviderProcess.js +39 -10
- package/dist/process/capture/FilesystemSnapshot.js +50 -13
- package/dist/process/capture/ProcessCaptureError.js +15 -2
- package/dist/process/capture/ProcessCaptureLifecycle.js +235 -81
- package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
- package/dist/process/capture/ProcessHarness.js +21 -25
- package/dist/process/capture/ProcessNormalization.js +20 -2
- package/dist/process/capture/ProcessSampling.js +25 -2
- package/dist/process/capture/TerminalRenderer.js +14 -0
- package/dist/process/snapshotEnvironment.js +14 -0
- package/dist/server/EvidenceMcpServer.js +157 -0
- package/dist/server/createServer.js +61 -41
- package/dist/server/mcpClientMetadata.js +12 -5
- package/dist/server/promptCompletion.js +3 -8
- package/dist/server/registerAnalysisViewTool.js +15 -0
- package/dist/server/registerAndroidTools.js +2 -5
- package/dist/server/registerApplicationTools/compareExportShapes.js +4 -5
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
- package/dist/server/registerApplicationTools/compareVersions.js +4 -5
- package/dist/server/registerApplicationTools/coverage.js +1 -2
- package/dist/server/registerApplicationTools/helpers.js +1 -4
- package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
- package/dist/server/registerApplicationTools/traceFeature.js +4 -5
- package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
- package/dist/server/registerArtifactComparisonTool.js +13 -10
- package/dist/server/registerBinaryDiagnosticsTools.js +2 -5
- package/dist/server/registerBrowserScenarioTool.js +3 -6
- package/dist/server/registerBrowserTools.js +13 -18
- package/dist/server/registerBundleComparisonTool.js +5 -7
- package/dist/server/registerCloseLifecycleTool.js +9 -20
- package/dist/server/registerElectronTools.js +10 -15
- package/dist/server/registerEnhancedTools.js +36 -77
- package/dist/server/registerEvidenceTools.js +3 -6
- package/dist/server/registerEvmTools.js +2 -5
- package/dist/server/registerFirmwareTools.js +2 -5
- package/dist/server/registerFunctionComparisonTool.js +15 -12
- package/dist/server/registerInvestigationTools.js +16 -17
- package/dist/server/registerJavaScriptRecoveryTool.js +2 -5
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -8
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -8
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -7
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -9
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -9
- package/dist/server/registerOfficialTools.js +4 -21
- package/dist/server/registerProcessComparisonTool.js +74 -48
- package/dist/server/registerRecordedCrashTools.js +2 -5
- package/dist/server/registerSessionRecordTools.js +19 -24
- package/dist/server/registerSessionStatusTool.js +19 -6
- package/dist/server/registerSessionTools.js +20 -18
- package/dist/server/registerWebModuleTool.js +2 -5
- package/dist/server/registerWebNetworkCaptureTool.js +2 -5
- package/dist/server/registerWebRuntimeTools.js +4 -9
- package/dist/server/registerWebScriptTool.js +2 -5
- package/dist/server/registerWebSourceLocationTool.js +2 -5
- package/dist/server/runDerivedOperation.js +15 -3
- package/dist/server/sessionAvailabilityPolicy.js +0 -1
- package/dist/server/toolRegistrationOptions.js +2 -2
- package/dist/server/toolResult.js +75 -51
- package/dist/server/toolResultEncoding.js +34 -0
- package/dist/windows/WindowsNativeLoader.js +1 -0
- package/dist/windows/WindowsOwnedProcess.js +60 -15
- package/dist/windows/WindowsPrivateRuntime.js +7 -8
- package/install.sh +1 -1
- package/native/windows/README.md +3 -1
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +44 -30
- package/scripts/electron-active-hook-boundaries.cjs +18 -20
- package/scripts/electron-active-hook.cjs +241 -37
- package/scripts/rea.mjs +3 -6
- package/skills/reverse-engineer-anything/SKILL.md +12 -3
- package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +20 -3
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +9 -0
- package/dist/config.js +0 -1
- package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
- package/dist/contracts/process/processCaptureExample.js +0 -2
- package/dist/contracts/toolOutputSchemas.js +0 -2
- package/dist/ghidra/GhidraDefaults.js +0 -2
- package/dist/main/reload.js +0 -12
- package/dist/main/state.js +0 -3
- package/dist/server/sessionToolPolicies.js +0 -2
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { parseClientConfiguration, serializeClientConfiguration, clientServerPath, legacyClientServerPath, withClientServers, } from "./ClientConfigurationDocument.js";
|
|
2
2
|
import { copyFile, lstat, readFile, realpath, rm } from "node:fs/promises";
|
|
3
|
-
import {
|
|
3
|
+
import { constants as fsConstants } from "node:fs";
|
|
4
|
+
import { homeDirectoryFromEnvironment } from "../config/homeDirectory.js";
|
|
4
5
|
import { join } from "node:path";
|
|
5
6
|
import writeFileAtomic from "write-file-atomic";
|
|
6
7
|
import { z } from "zod";
|
|
7
8
|
import { PRODUCT_IDENTITY } from "../identity.js";
|
|
8
9
|
import { isOwnedClientRegistrationCommand } from "./ClientRegistrationIdentity.js";
|
|
9
10
|
import { resolveClientConfigTransactionPath } from "./ClientConfigPath.js";
|
|
10
|
-
import { supportedClients } from "./SupportedClients.js";
|
|
11
|
+
import { manualRegistrationRemediation, supportedClients, } from "./SupportedClients.js";
|
|
11
12
|
const systemFileSystem = {
|
|
12
13
|
readText: (path) => readFile(path, "utf8"),
|
|
13
|
-
copy: (source, destination) => copyFile(source, destination),
|
|
14
|
+
copy: (source, destination) => copyFile(source, destination, fsConstants.COPYFILE_EXCL),
|
|
14
15
|
writeText: (path, contents) => writeFileAtomic(path, contents, { encoding: "utf8" }),
|
|
15
16
|
stat: (path) => lstat(path),
|
|
16
17
|
realpath: (path) => realpath(path),
|
|
@@ -30,14 +31,26 @@ export const isUninstallFailure = (result) => {
|
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
33
|
};
|
|
33
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Remove only REA-owned registrations and managed files, optionally including
|
|
36
|
+
* local state. A client configuration that cannot be read safely stops the
|
|
37
|
+
* operation before anything is removed; one that fails during removal stops
|
|
38
|
+
* the remaining removals.
|
|
39
|
+
*/
|
|
34
40
|
export const runUninstall = async (purgeData, host = systemUninstallHost()) => {
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
const clients = await host.clients();
|
|
42
|
+
const blocked = [];
|
|
43
|
+
for (const client of clients) {
|
|
44
|
+
const blocking = await host.inspectClient(client);
|
|
45
|
+
if (blocking !== undefined)
|
|
46
|
+
blocked.push(blocking);
|
|
47
|
+
}
|
|
48
|
+
const items = blocked.length > 0
|
|
49
|
+
? [
|
|
50
|
+
...blocked,
|
|
51
|
+
item("uninstall", "skipped", "No REA registration, skill, or data was removed. Repair each failed configuration, then rerun uninstall."),
|
|
52
|
+
]
|
|
53
|
+
: await removeAll(clients, purgeData, host);
|
|
41
54
|
items.push({
|
|
42
55
|
name: "analysis_engine",
|
|
43
56
|
status: "retained",
|
|
@@ -50,40 +63,80 @@ export const runUninstall = async (purgeData, host = systemUninstallHost()) => {
|
|
|
50
63
|
items,
|
|
51
64
|
};
|
|
52
65
|
};
|
|
66
|
+
/**
|
|
67
|
+
* Each client is reread when it is edited, so a concurrent change is never
|
|
68
|
+
* overwritten. A client that fails then still stops the remaining removals.
|
|
69
|
+
*/
|
|
70
|
+
const removeAll = async (clients, purgeData, host) => {
|
|
71
|
+
const items = [];
|
|
72
|
+
for (const client of clients) {
|
|
73
|
+
const removed = await host.removeClient(client);
|
|
74
|
+
items.push(removed);
|
|
75
|
+
if (removed.status === "failed")
|
|
76
|
+
return [
|
|
77
|
+
...items,
|
|
78
|
+
item("uninstall", "skipped", "Uninstall stopped at this failure; the items above report what changed. Repair the failed configuration, then rerun uninstall."),
|
|
79
|
+
];
|
|
80
|
+
}
|
|
81
|
+
items.push(await host.removeSkill());
|
|
82
|
+
if (purgeData)
|
|
83
|
+
items.push(...(await host.purgeData()));
|
|
84
|
+
return items;
|
|
85
|
+
};
|
|
53
86
|
/** Create uninstall effects contained to detected client configs and REA-owned paths. */
|
|
54
|
-
export const systemUninstallHost = (
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
87
|
+
export const systemUninstallHost = (selectedHome = undefined, fileSystem = systemFileSystem, environment = process.env, platform = process.platform) => {
|
|
88
|
+
const home = selectedHome ?? homeDirectoryFromEnvironment(environment, platform);
|
|
89
|
+
return {
|
|
90
|
+
clients: () => Promise.resolve(supportedClients(home, platform, environment)),
|
|
91
|
+
inspectClient: async (client) => {
|
|
92
|
+
const read = await readClientConfiguration(client, fileSystem);
|
|
93
|
+
return read.kind === "item" && read.item.status === "failed"
|
|
94
|
+
? read.item
|
|
95
|
+
: undefined;
|
|
96
|
+
},
|
|
97
|
+
removeClient: (client) => removeClient(client, fileSystem),
|
|
98
|
+
removeSkill: () => removeManagedSkills(home, fileSystem),
|
|
99
|
+
purgeData: async () => [
|
|
100
|
+
await removeManagedPath(join(home, ".rea/cache"), "cache", fileSystem),
|
|
101
|
+
await removeManagedPath(join(home, ".rea/state"), "state", fileSystem),
|
|
102
|
+
],
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
const readClientConfiguration = async (client, fileSystem) => {
|
|
64
106
|
if (client.format === "unsupported")
|
|
65
|
-
return item(client.name, "skipped",
|
|
107
|
+
return itemRead(item(client.name, "skipped", manualRegistrationRemediation(client.name) ??
|
|
108
|
+
"This client has no documented local MCP configuration boundary."));
|
|
66
109
|
const resolved = await resolveUninstallConfigPath(client, fileSystem);
|
|
67
110
|
if (typeof resolved !== "string")
|
|
68
|
-
return resolved;
|
|
111
|
+
return itemRead(resolved);
|
|
69
112
|
const transactionPath = resolved;
|
|
70
113
|
let original;
|
|
71
114
|
try {
|
|
72
115
|
original = await fileSystem.readText(transactionPath);
|
|
73
116
|
}
|
|
74
117
|
catch (cause) {
|
|
75
|
-
return isMissing(cause)
|
|
118
|
+
return itemRead(isMissing(cause)
|
|
76
119
|
? item(client.name, "skipped", "Configuration does not exist.")
|
|
77
|
-
: item(client.name, "failed", "Configuration could not be read. Check file permissions, then rerun uninstall.");
|
|
120
|
+
: item(client.name, "failed", "Configuration could not be read. Check file permissions, then rerun uninstall."));
|
|
78
121
|
}
|
|
79
|
-
let parsed;
|
|
80
122
|
try {
|
|
81
|
-
parsed = parseClientConfiguration(original, client.format);
|
|
123
|
+
const parsed = parseClientConfiguration(original, client.format);
|
|
124
|
+
return { kind: "configuration", transactionPath, original, parsed };
|
|
82
125
|
}
|
|
83
126
|
catch (cause) {
|
|
84
127
|
void cause;
|
|
85
|
-
return item(client.name, "failed", `Configuration is not valid ${client.format === "toml" ? "TOML" : client.format === "opencode" ? "JSONC" : "JSON"} and was not changed. Repair it, then rerun uninstall.`);
|
|
128
|
+
return itemRead(item(client.name, "failed", `Configuration is not valid ${client.format === "toml" || client.format === "grok" ? "TOML" : client.format === "opencode" ? "JSONC" : "JSON"} and was not changed. Repair it, then rerun uninstall.`));
|
|
86
129
|
}
|
|
130
|
+
};
|
|
131
|
+
const itemRead = (result) => ({
|
|
132
|
+
kind: "item",
|
|
133
|
+
item: result,
|
|
134
|
+
});
|
|
135
|
+
const removeClient = async (client, fileSystem) => {
|
|
136
|
+
const read = await readClientConfiguration(client, fileSystem);
|
|
137
|
+
if (read.kind === "item")
|
|
138
|
+
return read.item;
|
|
139
|
+
const { transactionPath, original, parsed } = read;
|
|
87
140
|
const name = PRODUCT_IDENTITY.mcpServerKey;
|
|
88
141
|
// Beside a native OpenCode V2 table, OpenCode also loads a V1 `mcp.rea`.
|
|
89
142
|
const legacyPath = legacyClientServerPath(parsed, name);
|
|
@@ -108,8 +161,8 @@ const removeClient = async (client, fileSystem) => {
|
|
|
108
161
|
await fileSystem.copy(transactionPath, backupPath);
|
|
109
162
|
}
|
|
110
163
|
catch (cause) {
|
|
111
|
-
|
|
112
|
-
|
|
164
|
+
if (!(cause instanceof Error && "code" in cause && cause.code === "EEXIST"))
|
|
165
|
+
return item(client.name, "failed", "Configuration could not be backed up, so no change was made. Check file permissions, then rerun uninstall.");
|
|
113
166
|
}
|
|
114
167
|
try {
|
|
115
168
|
await fileSystem.writeText(transactionPath, serializeClientConfiguration(document, client.format, original, editedPaths));
|
|
@@ -25,6 +25,23 @@ export const updateInstallCommand = (installation, version) => [
|
|
|
25
25
|
installation.prefix,
|
|
26
26
|
`${PRODUCT_IDENTITY.packageName}@${version}`,
|
|
27
27
|
];
|
|
28
|
+
const versionCheckRemediation = (release) => {
|
|
29
|
+
if (release.ok) {
|
|
30
|
+
return "REA received invalid version metadata. Check the installed version and npm registry, then rerun rea update.";
|
|
31
|
+
}
|
|
32
|
+
const failure = release.error;
|
|
33
|
+
const kind = failure.kind;
|
|
34
|
+
switch (kind) {
|
|
35
|
+
case "unavailable":
|
|
36
|
+
return `REA could not resolve the latest release: ${failure.detail}. Retry rea update when registry access is available.`;
|
|
37
|
+
case "invalid-metadata":
|
|
38
|
+
return `REA could not resolve the latest release: ${failure.detail}. Check the npm release metadata, then rerun rea update.`;
|
|
39
|
+
default: {
|
|
40
|
+
const exhaustive = kind;
|
|
41
|
+
throw new TypeError(`Unhandled release lookup failure: ${String(exhaustive)}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
};
|
|
28
45
|
/** Identify, resolve, install, and verify REA without applying setup changes. */
|
|
29
46
|
export const runUpdate = async (currentVersion, host, output = "human") => {
|
|
30
47
|
const installation = await host.installation();
|
|
@@ -37,9 +54,7 @@ export const runUpdate = async (currentVersion, host, output = "human") => {
|
|
|
37
54
|
currentVersion,
|
|
38
55
|
latestVersion,
|
|
39
56
|
reason: "version-check",
|
|
40
|
-
remediation: release
|
|
41
|
-
? "REA received invalid version metadata. Check the installed version and npm registry, then rerun rea update."
|
|
42
|
-
: `REA could not resolve the latest release: ${release.error}. Retry rea update when registry access is available.`,
|
|
57
|
+
remediation: versionCheckRemediation(release),
|
|
43
58
|
};
|
|
44
59
|
if (!gt(targetVersion, currentVersion))
|
|
45
60
|
return {
|
|
@@ -21,9 +21,11 @@ const setupPlanSchema = z.object({
|
|
|
21
21
|
})),
|
|
22
22
|
});
|
|
23
23
|
/** Discover owned registrations and an existing REA skill without writes. */
|
|
24
|
-
export const existingMaintenanceScope = async (home, entryPoint) => {
|
|
25
|
-
const registrations = await readClientRegistrationStatuses(home, entryPoint
|
|
26
|
-
|
|
24
|
+
export const existingMaintenanceScope = async (home, entryPoint, environment) => {
|
|
25
|
+
const registrations = await readClientRegistrationStatuses(home, entryPoint, {
|
|
26
|
+
environment,
|
|
27
|
+
});
|
|
28
|
+
const supported = supportedClients(home, process.platform, environment);
|
|
27
29
|
const clients = [];
|
|
28
30
|
for (const registration of registrations) {
|
|
29
31
|
if ((registration.state !== "aligned" && registration.state !== "stale") ||
|
|
@@ -56,9 +58,9 @@ export const existingMaintenanceScope = async (home, entryPoint) => {
|
|
|
56
58
|
return { clients, skill };
|
|
57
59
|
};
|
|
58
60
|
/** Ask the verified new executable to plan only existing REA integrations. */
|
|
59
|
-
export const planIntegrationMaintenance = async (home, entryPoint, execute) => {
|
|
61
|
+
export const planIntegrationMaintenance = async (home, entryPoint, environment, execute) => {
|
|
60
62
|
try {
|
|
61
|
-
const scope = await existingMaintenanceScope(home, entryPoint);
|
|
63
|
+
const scope = await existingMaintenanceScope(home, entryPoint, environment);
|
|
62
64
|
if (scope.clients.length === 0 && !scope.skill)
|
|
63
65
|
return { status: "current", plannedActions: [] };
|
|
64
66
|
const command = [
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { realpath } from "node:fs/promises";
|
|
2
|
-
import {
|
|
2
|
+
import { homeDirectoryFromEnvironment } from "../config/homeDirectory.js";
|
|
3
3
|
import { basename, dirname, join, resolve } from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import spawn from "cross-spawn";
|
|
6
|
-
import { z } from "zod";
|
|
7
6
|
import { PRODUCT_IDENTITY } from "../identity.js";
|
|
8
7
|
import { err, ok } from "../domain/result.js";
|
|
8
|
+
import { safeParseJson } from "../domain/safeJson.js";
|
|
9
9
|
import { updateInstallCommand, } from "./Update.js";
|
|
10
10
|
import { planIntegrationMaintenance } from "./UpdateMaintenance.js";
|
|
11
11
|
/** Run an updater subprocess with complete diagnostics and isolated machine output. */
|
|
12
|
-
export const runUpdateCommand = (command, output = "structured") => new Promise((resolveResult) => {
|
|
12
|
+
export const runUpdateCommand = (command, selectedEnvironment, output = "structured") => new Promise((resolveResult) => {
|
|
13
13
|
const [executable, ...args] = command;
|
|
14
14
|
if (executable === undefined) {
|
|
15
15
|
resolveResult(err("No executable supplied."));
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
|
-
const environment = { ...
|
|
18
|
+
const environment = { ...selectedEnvironment };
|
|
19
19
|
// A fresh installed entry point must not inherit npx's invocation identity.
|
|
20
20
|
delete environment.npm_command;
|
|
21
21
|
const child = spawn(executable, args, {
|
|
@@ -46,8 +46,8 @@ export const runUpdateCommand = (command, output = "structured") => new Promise(
|
|
|
46
46
|
? `Process exited with code ${String(code)}.`
|
|
47
47
|
: `Process terminated by ${signal}.`))));
|
|
48
48
|
});
|
|
49
|
-
const requireCommandOutput = async (command) => {
|
|
50
|
-
const result = await runUpdateCommand(command);
|
|
49
|
+
const requireCommandOutput = async (command, environment) => {
|
|
50
|
+
const result = await runUpdateCommand(command, environment);
|
|
51
51
|
if (!result.ok)
|
|
52
52
|
throw new Error(result.error);
|
|
53
53
|
return result.value;
|
|
@@ -85,45 +85,66 @@ export const detectNpmInstallation = async (packageRoot, host) => {
|
|
|
85
85
|
return undefined;
|
|
86
86
|
return { prefix: dirname(library), packageRoot: canonicalPackageRoot };
|
|
87
87
|
};
|
|
88
|
+
const INVALID_NPM_RELEASE_METADATA = "Invalid npm release metadata: expected a version string or a single-element version array.";
|
|
89
|
+
/** npm view arguments for dist-tags.latest, scoped to the owning prefix when known. */
|
|
90
|
+
export const npmLatestVersionCommand = (installation) => [
|
|
91
|
+
"npm",
|
|
92
|
+
"view",
|
|
93
|
+
"--global",
|
|
94
|
+
...(installation === undefined ? [] : ["--prefix", installation.prefix]),
|
|
95
|
+
PRODUCT_IDENTITY.packageName,
|
|
96
|
+
"dist-tags.latest",
|
|
97
|
+
"--json",
|
|
98
|
+
"--fetch-retries=0",
|
|
99
|
+
"--fetch-timeout=10000",
|
|
100
|
+
];
|
|
101
|
+
/**
|
|
102
|
+
* Read one latest version from `npm view --json`.
|
|
103
|
+
* npm 11 emits a JSON string. npm 12 emits that string as a one-element array.
|
|
104
|
+
*/
|
|
105
|
+
export const parseNpmLatestVersion = (metadata) => {
|
|
106
|
+
const decoded = safeParseJson(metadata);
|
|
107
|
+
if (!decoded.ok)
|
|
108
|
+
return err(decoded.error);
|
|
109
|
+
const version = readNpmLatestVersion(decoded.value);
|
|
110
|
+
return version === undefined
|
|
111
|
+
? err(INVALID_NPM_RELEASE_METADATA)
|
|
112
|
+
: ok(version);
|
|
113
|
+
};
|
|
114
|
+
const readNpmLatestVersion = (value) => {
|
|
115
|
+
if (typeof value === "string")
|
|
116
|
+
return nonemptyVersion(value);
|
|
117
|
+
if (!Array.isArray(value) || value.length !== 1)
|
|
118
|
+
return undefined;
|
|
119
|
+
const only = value[0];
|
|
120
|
+
return typeof only === "string" ? nonemptyVersion(only) : undefined;
|
|
121
|
+
};
|
|
122
|
+
const nonemptyVersion = (value) => value.length === 0 ? undefined : value;
|
|
123
|
+
/** Classify npm view output as a version or a lookup failure. */
|
|
124
|
+
export const npmReleaseLookup = (response) => {
|
|
125
|
+
if (!response.ok)
|
|
126
|
+
return err({ kind: "unavailable", detail: response.error });
|
|
127
|
+
const parsed = parseNpmLatestVersion(response.value);
|
|
128
|
+
return parsed.ok
|
|
129
|
+
? ok(parsed.value)
|
|
130
|
+
: err({ kind: "invalid-metadata", detail: parsed.error });
|
|
131
|
+
};
|
|
88
132
|
/** Create npm, registry, verification, and read-only maintenance effects. */
|
|
89
|
-
export const systemUpdateHost = (packageRoot = fileURLToPath(new URL("../..", import.meta.url)), home =
|
|
133
|
+
export const systemUpdateHost = (packageRoot = fileURLToPath(new URL("../..", import.meta.url)), home = undefined, environment = process.env) => ({
|
|
90
134
|
installation: () => detectNpmInstallation(packageRoot, {
|
|
91
135
|
canonicalPath: realpath,
|
|
92
|
-
globalRoot: () => requireCommandOutput(["npm", "root", "--global"]),
|
|
93
|
-
globalPrefix: () => requireCommandOutput(["npm", "prefix", "--global"]),
|
|
136
|
+
globalRoot: () => requireCommandOutput(["npm", "root", "--global"], environment),
|
|
137
|
+
globalPrefix: () => requireCommandOutput(["npm", "prefix", "--global"], environment),
|
|
94
138
|
}),
|
|
95
|
-
latestVersion: async (installation) =>
|
|
96
|
-
const response = await runUpdateCommand([
|
|
97
|
-
"npm",
|
|
98
|
-
"view",
|
|
99
|
-
"--global",
|
|
100
|
-
...(installation === undefined ? [] : ["--prefix", installation.prefix]),
|
|
101
|
-
PRODUCT_IDENTITY.packageName,
|
|
102
|
-
"dist-tags.latest",
|
|
103
|
-
"--json",
|
|
104
|
-
"--fetch-retries=0",
|
|
105
|
-
"--fetch-timeout=10000",
|
|
106
|
-
]);
|
|
107
|
-
if (!response.ok)
|
|
108
|
-
return response;
|
|
109
|
-
try {
|
|
110
|
-
const parsed = z.string().min(1).safeParse(JSON.parse(response.value));
|
|
111
|
-
return parsed.success
|
|
112
|
-
? ok(parsed.data)
|
|
113
|
-
: err(`Invalid npm release metadata: ${parsed.error.message}`);
|
|
114
|
-
}
|
|
115
|
-
catch (cause) {
|
|
116
|
-
return err(cause instanceof Error ? cause.message : String(cause));
|
|
117
|
-
}
|
|
118
|
-
},
|
|
139
|
+
latestVersion: async (installation) => npmReleaseLookup(await runUpdateCommand(npmLatestVersionCommand(installation), environment)),
|
|
119
140
|
installVersion: async (installation, version, output) => {
|
|
120
|
-
const result = await runUpdateCommand(updateInstallCommand(installation, version), output);
|
|
141
|
+
const result = await runUpdateCommand(updateInstallCommand(installation, version), environment, output);
|
|
121
142
|
return result.ok ? ok(undefined) : result;
|
|
122
143
|
},
|
|
123
144
|
installedVersion: (installation) => runUpdateCommand([
|
|
124
145
|
process.execPath,
|
|
125
146
|
join(installation.packageRoot, "scripts", "rea.mjs"),
|
|
126
147
|
"--version",
|
|
127
|
-
]),
|
|
128
|
-
planMaintenance: (installation) => planIntegrationMaintenance(home, join(installation.packageRoot, "scripts", "rea.mjs"), runUpdateCommand),
|
|
148
|
+
], environment),
|
|
149
|
+
planMaintenance: (installation) => planIntegrationMaintenance(home ?? homeDirectoryFromEnvironment(environment, process.platform), join(installation.packageRoot, "scripts", "rea.mjs"), environment, (command) => runUpdateCommand(command, environment)),
|
|
129
150
|
});
|
|
@@ -3,7 +3,7 @@ import { z } from "zod";
|
|
|
3
3
|
import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisInputError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
|
|
4
4
|
import { createEvidence } from "../domain/evidence.js";
|
|
5
5
|
import { jsonObjectSchema } from "../domain/jsonValue.js";
|
|
6
|
-
import {
|
|
6
|
+
import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
|
|
7
7
|
import { err, ok } from "../domain/result.js";
|
|
8
8
|
import { collectWebModuleImports, matchCapturedModules, } from "../domain/webModuleImports.js";
|
|
9
9
|
import { webModuleTraceInputSchema, webModuleFileSchema, webModuleResolutionSchema, webModuleTraceResultSchema, } from "../domain/webModuleTrace.js";
|
|
@@ -48,7 +48,9 @@ export class WebModuleTraceService {
|
|
|
48
48
|
return err(new AnalysisCancelledError(OPERATION));
|
|
49
49
|
const parsed = webModuleTraceInputSchema.safeParse(rawInput);
|
|
50
50
|
if (!parsed.success)
|
|
51
|
-
return err(
|
|
51
|
+
return err(analysisInputErrorFromIssues(OPERATION, parsed.error.issues, rawInput, {
|
|
52
|
+
cause: parsed.error,
|
|
53
|
+
}));
|
|
52
54
|
const input = parsed.data;
|
|
53
55
|
for (const [path, value] of [
|
|
54
56
|
["manifest_path", input.manifest_path],
|
|
@@ -4,7 +4,7 @@ import { redactExplicitText } from "../domain/explicitSensitiveValues.js";
|
|
|
4
4
|
import { isAbsolute } from "node:path";
|
|
5
5
|
import { AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
|
|
6
6
|
import { createEvidence } from "../domain/evidence.js";
|
|
7
|
-
import {
|
|
7
|
+
import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
|
|
8
8
|
import { jsonObjectSchema } from "../domain/jsonValue.js";
|
|
9
9
|
import { err, ok } from "../domain/result.js";
|
|
10
10
|
import { inspectWebNetworkCaptureInputSchema, webNetworkCaptureSchema, } from "../domain/webNetworkCapture.js";
|
|
@@ -27,7 +27,9 @@ export class WebNetworkCaptureService {
|
|
|
27
27
|
const failure = (error) => err(redactExplicitFailure(error, declarations.success ? declarations.data : []));
|
|
28
28
|
const parsed = inspectWebNetworkCaptureInputSchema.safeParse(rawInput);
|
|
29
29
|
if (!parsed.success)
|
|
30
|
-
return failure(
|
|
30
|
+
return failure(analysisInputErrorFromIssues(OPERATION, parsed.error.issues, rawInput, {
|
|
31
|
+
cause: parsed.error,
|
|
32
|
+
}));
|
|
31
33
|
const input = parsed.data;
|
|
32
34
|
if (!isAbsolute(input.capture_path))
|
|
33
35
|
return failure(new AnalysisInputError(OPERATION, undefined, [
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { AnalysisCancelledError,
|
|
2
|
+
import { AnalysisCancelledError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
|
|
3
3
|
import { createEvidence } from "../domain/evidence.js";
|
|
4
4
|
import { jsonObjectSchema, jsonValueSchema } from "../domain/jsonValue.js";
|
|
5
|
-
import {
|
|
5
|
+
import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
|
|
6
6
|
import { err, ok } from "../domain/result.js";
|
|
7
7
|
import { observeWebExecutionInputSchema, webExecutionSchema, } from "../domain/webExecution.js";
|
|
8
8
|
import { inspectWebEventListenersInputSchema, webEventListenersSchema, } from "../domain/webEventListeners.js";
|
|
@@ -69,5 +69,7 @@ const parseInput = (schema, rawInput, operation, options) => {
|
|
|
69
69
|
const parsed = schema.safeParse(rawInput);
|
|
70
70
|
return parsed.success
|
|
71
71
|
? ok(parsed.data)
|
|
72
|
-
: err(
|
|
72
|
+
: err(analysisInputErrorFromIssues(operation, parsed.error.issues, rawInput, {
|
|
73
|
+
cause: parsed.error,
|
|
74
|
+
}));
|
|
73
75
|
};
|
|
@@ -5,9 +5,9 @@ import { z } from "zod";
|
|
|
5
5
|
import { ArtifactReaderFailure } from "../artifacts/ArtifactReader.js";
|
|
6
6
|
import { publishWebScripts } from "../browser/assets/PublishWebScripts.js";
|
|
7
7
|
import { selectScriptCapture } from "../browser/assets/ScriptCaptureAdapters.js";
|
|
8
|
-
import { AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
|
|
8
|
+
import { AnalysisAccessDeniedError, AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
|
|
9
9
|
import { createEvidence } from "../domain/evidence.js";
|
|
10
|
-
import {
|
|
10
|
+
import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
|
|
11
11
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
12
12
|
import { ProviderAdapterError } from "../domain/providerAdapterError.js";
|
|
13
13
|
import { err, ok } from "../domain/result.js";
|
|
@@ -21,7 +21,7 @@ export const exportWebScripts = async (rawInput, options = {}) => {
|
|
|
21
21
|
const input = exportWebScriptsInputSchema.safeParse(rawInput);
|
|
22
22
|
return input.success
|
|
23
23
|
? exportWebScriptsValidated(input.data, options)
|
|
24
|
-
: err(
|
|
24
|
+
: err(analysisInputErrorFromIssues(OPERATION, input.error.issues, rawInput));
|
|
25
25
|
};
|
|
26
26
|
/** Publish input already parsed by a named adapter contract. */
|
|
27
27
|
export const exportWebScriptsValidated = async (input, options = {}) => {
|
|
@@ -35,9 +35,10 @@ export const exportWebScriptsValidated = async (input, options = {}) => {
|
|
|
35
35
|
]));
|
|
36
36
|
try {
|
|
37
37
|
options.signal?.throwIfAborted();
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
const read = await readCapture(input.capture_path, options.signal);
|
|
39
|
+
if (!read.ok)
|
|
40
|
+
return read;
|
|
41
|
+
const bytes = read.value;
|
|
41
42
|
const loaded = parseCapture(bytes);
|
|
42
43
|
if (!loaded.ok)
|
|
43
44
|
return loaded;
|
|
@@ -90,6 +91,31 @@ export const exportWebScriptsValidated = async (input, options = {}) => {
|
|
|
90
91
|
}));
|
|
91
92
|
}
|
|
92
93
|
};
|
|
94
|
+
/**
|
|
95
|
+
* Read the caller-selected capture. A missing, non-file or unreadable
|
|
96
|
+
* selection is a caller or host-permission failure, not an export failure.
|
|
97
|
+
*/
|
|
98
|
+
const readCapture = async (path, signal) => {
|
|
99
|
+
try {
|
|
100
|
+
return ok(await readFile(path, { signal }));
|
|
101
|
+
}
|
|
102
|
+
catch (cause) {
|
|
103
|
+
const code = cause instanceof Error && "code" in cause ? String(cause.code) : "";
|
|
104
|
+
if (code === "EACCES" || code === "EPERM")
|
|
105
|
+
return err(new AnalysisAccessDeniedError(OPERATION, path, code, { cause }));
|
|
106
|
+
if (code === "ENOENT" || code === "ENOTDIR" || code === "EISDIR")
|
|
107
|
+
return err(new AnalysisInputError(OPERATION, { cause }, [
|
|
108
|
+
{
|
|
109
|
+
path: ["capture_path"],
|
|
110
|
+
reason: "invalid_value",
|
|
111
|
+
message: code === "EISDIR"
|
|
112
|
+
? `Selected capture is a directory, not a file: ${path}`
|
|
113
|
+
: `Selected capture could not be read (${code}): ${path}`,
|
|
114
|
+
},
|
|
115
|
+
]));
|
|
116
|
+
throw cause;
|
|
117
|
+
}
|
|
118
|
+
};
|
|
93
119
|
const parseCapture = (bytes) => {
|
|
94
120
|
try {
|
|
95
121
|
const text = new TextDecoder("utf-8", {
|
|
@@ -3,7 +3,7 @@ import { isAbsolute } from "node:path";
|
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { AnalysisCancelledError, AnalysisInputError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
|
|
5
5
|
import { createEvidence } from "../domain/evidence.js";
|
|
6
|
-
import {
|
|
6
|
+
import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
|
|
7
7
|
import { jsonObjectSchema } from "../domain/jsonValue.js";
|
|
8
8
|
import { err, ok } from "../domain/result.js";
|
|
9
9
|
import { selectedWebScriptArtifactsSchema, webArtifactFileSchema, } from "../domain/webScriptArtifacts.js";
|
|
@@ -41,7 +41,9 @@ export class WebSourceLocationService {
|
|
|
41
41
|
return err(new AnalysisCancelledError(OPERATION));
|
|
42
42
|
const parsed = webSourceLocationInputSchema.safeParse(rawInput);
|
|
43
43
|
if (!parsed.success)
|
|
44
|
-
return err(
|
|
44
|
+
return err(analysisInputErrorFromIssues(OPERATION, parsed.error.issues, rawInput, {
|
|
45
|
+
cause: parsed.error,
|
|
46
|
+
}));
|
|
45
47
|
const input = parsed.data;
|
|
46
48
|
const admitted = admitContext(input);
|
|
47
49
|
if (!admitted.ok)
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { REA_WORKFLOW_PROVIDER, workflowAnalysisProfile, } from "./InvestigationProviders.js";
|
|
2
|
+
import { analysisProfileSchema, committedProviderSchema, } from "../domain/analysisProfile.js";
|
|
3
|
+
import { createEvidence, } from "../domain/evidence.js";
|
|
4
|
+
import { UnknownRegistryError } from "../domain/unknownRegistryError.js";
|
|
5
|
+
/** Build the shared Evidence record for a successful composed binary workflow. */
|
|
6
|
+
export const createWorkflowEvidence = (input) => createEvidence(input.target, REA_WORKFLOW_PROVIDER, {
|
|
7
|
+
operation: input.operation,
|
|
8
|
+
parameters: input.parameters,
|
|
9
|
+
result: input.result,
|
|
10
|
+
...(input.upstreamProfile === undefined
|
|
11
|
+
? {}
|
|
12
|
+
: {
|
|
13
|
+
analysisProfile: workflowAnalysisProfile(input.upstreamProfile, input.operation),
|
|
14
|
+
}),
|
|
15
|
+
confidence: "derived",
|
|
16
|
+
limitations: ["Derived by an REA composed workflow."],
|
|
17
|
+
...(input.operation === "batch_decompile"
|
|
18
|
+
? { locations: batchProcedureLocations(input.result) }
|
|
19
|
+
: {}),
|
|
20
|
+
});
|
|
21
|
+
const batchProcedureLocations = (result) => {
|
|
22
|
+
if (result === null ||
|
|
23
|
+
typeof result !== "object" ||
|
|
24
|
+
Array.isArray(result) ||
|
|
25
|
+
!Array.isArray(result.items))
|
|
26
|
+
return [];
|
|
27
|
+
const addresses = new Set();
|
|
28
|
+
for (const item of result.items) {
|
|
29
|
+
if (item === null || typeof item !== "object" || Array.isArray(item))
|
|
30
|
+
continue;
|
|
31
|
+
const procedure = item.procedure;
|
|
32
|
+
if (procedure !== null &&
|
|
33
|
+
typeof procedure === "object" &&
|
|
34
|
+
!Array.isArray(procedure) &&
|
|
35
|
+
procedure.status === "resolved" &&
|
|
36
|
+
typeof procedure.address === "string")
|
|
37
|
+
addresses.add(procedure.address);
|
|
38
|
+
}
|
|
39
|
+
return [...addresses].map((address) => ({ kind: "address", address }));
|
|
40
|
+
};
|
|
41
|
+
/** Convert workflow Evidence into its exact replay binding, when it has a profile. */
|
|
42
|
+
export const workflowSnapshotRecord = (evidence, operation) => {
|
|
43
|
+
if (evidence.analysis_profile === null)
|
|
44
|
+
return undefined;
|
|
45
|
+
return {
|
|
46
|
+
operation,
|
|
47
|
+
parameters: evidence.parameters,
|
|
48
|
+
execution: {
|
|
49
|
+
result: evidence.normalized_result,
|
|
50
|
+
rawResult: evidence.raw_result,
|
|
51
|
+
provider: committedProviderSchema.parse(evidence.provider),
|
|
52
|
+
analysisProfile: analysisProfileSchema.parse(evidence.analysis_profile),
|
|
53
|
+
limitations: evidence.limitations,
|
|
54
|
+
locations: evidence.locations,
|
|
55
|
+
subject: evidence.subject === null
|
|
56
|
+
? null
|
|
57
|
+
: {
|
|
58
|
+
path: evidence.subject.local_path,
|
|
59
|
+
sha256: evidence.subject.digest.sha256,
|
|
60
|
+
format: evidence.subject.format,
|
|
61
|
+
...(evidence.subject.architecture === null
|
|
62
|
+
? {}
|
|
63
|
+
: { architecture: evidence.subject.architecture }),
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
/** Retain residual workflow questions using the shared investigation policy. */
|
|
69
|
+
export const recordWorkflowUnknowns = ({ name, result, evidenceId, recordUnknown, }) => {
|
|
70
|
+
if (!["trace_feature", "trace_call_path", "inspect_native_api"].includes(name) ||
|
|
71
|
+
recordUnknown === undefined ||
|
|
72
|
+
typeof result !== "object" ||
|
|
73
|
+
result === null ||
|
|
74
|
+
Array.isArray(result) ||
|
|
75
|
+
!Array.isArray(result.residual_unknowns))
|
|
76
|
+
return { ok: true, value: null };
|
|
77
|
+
for (const question of result.residual_unknowns) {
|
|
78
|
+
if (typeof question !== "string")
|
|
79
|
+
continue;
|
|
80
|
+
const recorded = recordUnknown({
|
|
81
|
+
question,
|
|
82
|
+
severity: "medium",
|
|
83
|
+
domain: name === "inspect_native_api" ? "native-api" : "control-flow",
|
|
84
|
+
supporting_evidence_ids: [evidenceId],
|
|
85
|
+
contradicting_evidence_ids: [],
|
|
86
|
+
required_authority: "shipped-artifact",
|
|
87
|
+
required_confidence: "observed",
|
|
88
|
+
required_environment: null,
|
|
89
|
+
recommended_probes: [
|
|
90
|
+
{
|
|
91
|
+
operation: name,
|
|
92
|
+
rationale: name === "inspect_native_api"
|
|
93
|
+
? "Confirm the unsupported boundary with a capable provider or ABI probe."
|
|
94
|
+
: "Continue with a focused query or another available provider.",
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
relationships: [],
|
|
98
|
+
});
|
|
99
|
+
if (!recorded.ok &&
|
|
100
|
+
!(recorded.error instanceof UnknownRegistryError &&
|
|
101
|
+
recorded.error.reason === "already-exists"))
|
|
102
|
+
return recorded;
|
|
103
|
+
}
|
|
104
|
+
return { ok: true, value: null };
|
|
105
|
+
};
|