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
|
@@ -28,32 +28,29 @@ export const traceLiteralFeature = async (call, input, signal) => {
|
|
|
28
28
|
};
|
|
29
29
|
const literalMatches = async (call, input, sources, signal) => {
|
|
30
30
|
const matches = [];
|
|
31
|
-
const needles = [...new Set(input.query.trim().split(/\s+/u))];
|
|
32
31
|
const matched = new Set();
|
|
33
|
-
for (const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
});
|
|
56
|
-
}
|
|
32
|
+
for (const [tool, type] of sources) {
|
|
33
|
+
const result = await call(tool, {
|
|
34
|
+
pattern: input.query,
|
|
35
|
+
mode: "literal",
|
|
36
|
+
case_sensitive: input.case_sensitive,
|
|
37
|
+
}, signal);
|
|
38
|
+
if (!result.ok)
|
|
39
|
+
return result;
|
|
40
|
+
const items = z
|
|
41
|
+
.array(z.object({ address: z.string(), value: z.string() }))
|
|
42
|
+
.safeParse(result.value);
|
|
43
|
+
if (!items.success)
|
|
44
|
+
return err(new AnalysisOutputError(tool, "provider returned an invalid search result"));
|
|
45
|
+
addPageMatches({
|
|
46
|
+
items: items.data.map(({ address, value: name }) => ({
|
|
47
|
+
address,
|
|
48
|
+
name,
|
|
49
|
+
})),
|
|
50
|
+
type,
|
|
51
|
+
matches,
|
|
52
|
+
matched,
|
|
53
|
+
});
|
|
57
54
|
}
|
|
58
55
|
return ok({ matches });
|
|
59
56
|
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { enhancedInputSchemas } from "../contracts/enhancedInputs.js";
|
|
3
|
-
import { AnalysisCancelledError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
|
|
3
|
+
import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, AnalysisOutputError, } from "../domain/analysisErrorCore.js";
|
|
4
4
|
import { projectAnalysisError } from "../domain/analysisErrorProjection.js";
|
|
5
5
|
import {} from "../domain/analysisErrorBase.js";
|
|
6
|
-
import { addressDistance, functionDossierSchema,
|
|
6
|
+
import { addressDistance, functionDossierSchema, parseFunctionDossier, parseListCount, parseRelatedAddresses, parseSegments, } from "../domain/hopperValues.js";
|
|
7
7
|
import { err, ok } from "../domain/result.js";
|
|
8
8
|
import { categorizeSwiftTypes, discoverObjcClasses, discoverObjcProtocols, } from "../domain/symbolAnalysis.js";
|
|
9
9
|
import { inspectNativeDispatch } from "./native/NativeDispatchMetadataInspection.js";
|
|
@@ -11,7 +11,9 @@ import { traceNativeValues } from "./native/NativeValueTrace.js";
|
|
|
11
11
|
import { traceNativeUiAction } from "./native/NativeUiActionTrace.js";
|
|
12
12
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
13
13
|
import { invalidEnhancedInput, } from "./EnhancedToolTypes.js";
|
|
14
|
+
import { resolveAnalysisDocument } from "./AnalysisDocument.js";
|
|
14
15
|
import { traceCallPath } from "./CallPathTracing.js";
|
|
16
|
+
import { resolveProcedureAddress } from "./ProcedureAddressResolution.js";
|
|
15
17
|
import { traceLiteralFeature } from "./EnhancedLiteralTracing.js";
|
|
16
18
|
import { projectNativeApiInspection } from "./native/NativeApiInspection.js";
|
|
17
19
|
/**
|
|
@@ -177,20 +179,34 @@ export class EnhancedTools {
|
|
|
177
179
|
}
|
|
178
180
|
async #batchDecompile(addresses, signal) {
|
|
179
181
|
const items = await Promise.all(addresses.map(async (address) => {
|
|
180
|
-
const
|
|
182
|
+
const resolved = await resolveProcedureAddress(this.#call.bind(this), address, signal);
|
|
183
|
+
const procedure = resolved.ok
|
|
184
|
+
? await this.#batchProcedureIdentity(resolved.value, signal)
|
|
185
|
+
: {
|
|
186
|
+
status: "unknown",
|
|
187
|
+
error: projectAnalysisError(resolved.error),
|
|
188
|
+
};
|
|
189
|
+
const result = await this.#call("procedure_pseudo_code", { procedure: resolved.ok ? resolved.value : address }, signal);
|
|
181
190
|
if (!result.ok)
|
|
182
191
|
return {
|
|
183
192
|
address,
|
|
193
|
+
procedure,
|
|
184
194
|
status: "error",
|
|
185
195
|
error: projectAnalysisError(result.error),
|
|
186
196
|
};
|
|
187
197
|
if (typeof result.value !== "string" || result.value.length === 0)
|
|
188
198
|
return {
|
|
189
199
|
address,
|
|
200
|
+
procedure,
|
|
190
201
|
status: "error",
|
|
191
202
|
error: projectAnalysisError(new AnalysisOutputError("procedure_pseudo_code", "provider returned empty pseudocode")),
|
|
192
203
|
};
|
|
193
|
-
return {
|
|
204
|
+
return {
|
|
205
|
+
address,
|
|
206
|
+
procedure,
|
|
207
|
+
status: "ok",
|
|
208
|
+
pseudocode: result.value,
|
|
209
|
+
};
|
|
194
210
|
}));
|
|
195
211
|
const succeeded = items.filter(({ status }) => status === "ok").length;
|
|
196
212
|
return ok({
|
|
@@ -200,12 +216,32 @@ export class EnhancedTools {
|
|
|
200
216
|
failed: items.length - succeeded,
|
|
201
217
|
});
|
|
202
218
|
}
|
|
219
|
+
async #batchProcedureIdentity(address, signal) {
|
|
220
|
+
const observed = await this.#call("address_name", { address }, signal);
|
|
221
|
+
const named = observed.ok &&
|
|
222
|
+
(typeof observed.value === "string" || observed.value === null);
|
|
223
|
+
return {
|
|
224
|
+
status: "resolved",
|
|
225
|
+
address,
|
|
226
|
+
name: named ? observed.value : null,
|
|
227
|
+
...(named
|
|
228
|
+
? {}
|
|
229
|
+
: {
|
|
230
|
+
name_error: projectAnalysisError(observed.ok
|
|
231
|
+
? new AnalysisOutputError("address_name", "provider returned an invalid entry label")
|
|
232
|
+
: observed.error),
|
|
233
|
+
}),
|
|
234
|
+
};
|
|
235
|
+
}
|
|
203
236
|
async #callGraph(input, signal) {
|
|
204
237
|
const relation = input.direction === "forward" ? "callees" : "callers";
|
|
205
238
|
const tool = input.direction === "forward" ? "procedure_callees" : "procedure_callers";
|
|
206
|
-
const
|
|
239
|
+
const resolved = await resolveProcedureAddress(this.#call.bind(this), input.address, signal);
|
|
240
|
+
if (!resolved.ok)
|
|
241
|
+
return resolved;
|
|
242
|
+
const discovered = new Set([resolved.value]);
|
|
207
243
|
const queue = [
|
|
208
|
-
{ address:
|
|
244
|
+
{ address: resolved.value, depth: 0 },
|
|
209
245
|
];
|
|
210
246
|
let queueIndex = 0;
|
|
211
247
|
const graph = {};
|
|
@@ -249,9 +285,23 @@ export class EnhancedTools {
|
|
|
249
285
|
}
|
|
250
286
|
async #analyzeSwiftTypes(input, signal) {
|
|
251
287
|
const procedures = await this.#allAddressed("list_procedures", signal);
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
288
|
+
if (!procedures.ok)
|
|
289
|
+
return procedures;
|
|
290
|
+
const symbols = await this.#allAddressed("list_names", signal);
|
|
291
|
+
if (!symbols.ok &&
|
|
292
|
+
!(symbols.error instanceof AnalysisCapabilityUnavailableError))
|
|
293
|
+
return symbols;
|
|
294
|
+
const result = categorizeSwiftTypes(procedures.value, input, symbols.ok ? symbols.value : []);
|
|
295
|
+
return ok(symbols.ok
|
|
296
|
+
? result
|
|
297
|
+
: {
|
|
298
|
+
...result,
|
|
299
|
+
symbol_inventory_error: projectAnalysisError(symbols.error),
|
|
300
|
+
limitations: [
|
|
301
|
+
...result.limitations,
|
|
302
|
+
"The provider's symbol inventory is unavailable; demangled procedures could not be joined to their Swift aliases.",
|
|
303
|
+
],
|
|
304
|
+
});
|
|
255
305
|
}
|
|
256
306
|
async #findXrefs(name, signal) {
|
|
257
307
|
const names = await this.#allAddressed("list_names", signal);
|
|
@@ -274,16 +324,16 @@ export class EnhancedTools {
|
|
|
274
324
|
});
|
|
275
325
|
}
|
|
276
326
|
async #binaryOverview(signal) {
|
|
277
|
-
const
|
|
327
|
+
const document = await resolveAnalysisDocument(this.analysis, undefined, signal);
|
|
328
|
+
if (!document.ok)
|
|
329
|
+
return document;
|
|
330
|
+
const [segmentsResult, proceduresResult, stringsResult] = await Promise.all([
|
|
278
331
|
this.#call("list_segments", {}, signal),
|
|
279
|
-
this.#call("list_documents", {}, signal),
|
|
280
332
|
this.#call("list_procedures", {}, signal),
|
|
281
333
|
this.#call("list_strings", {}, signal),
|
|
282
334
|
]);
|
|
283
335
|
if (!segmentsResult.ok)
|
|
284
336
|
return segmentsResult;
|
|
285
|
-
if (!documentsResult.ok)
|
|
286
|
-
return documentsResult;
|
|
287
337
|
if (!proceduresResult.ok)
|
|
288
338
|
return proceduresResult;
|
|
289
339
|
if (!stringsResult.ok)
|
|
@@ -291,9 +341,6 @@ export class EnhancedTools {
|
|
|
291
341
|
const segments = parseSegments(segmentsResult.value);
|
|
292
342
|
if (!segments.ok)
|
|
293
343
|
return segments;
|
|
294
|
-
const documents = parseDocuments(documentsResult.value);
|
|
295
|
-
if (!documents.ok)
|
|
296
|
-
return documents;
|
|
297
344
|
const procedureCount = parseListCount(proceduresResult.value, "procedures");
|
|
298
345
|
if (!procedureCount.ok)
|
|
299
346
|
return procedureCount;
|
|
@@ -301,7 +348,7 @@ export class EnhancedTools {
|
|
|
301
348
|
if (!stringCount.ok)
|
|
302
349
|
return stringCount;
|
|
303
350
|
return ok({
|
|
304
|
-
document:
|
|
351
|
+
document: document.value,
|
|
305
352
|
segments: segments.value.map(({ name, start, end }) => ({
|
|
306
353
|
name,
|
|
307
354
|
start,
|
|
@@ -1,37 +1,54 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { describeEvidenceBundleFailure, describeValidationFailure, parseEvidenceBundle, } from "../domain/evidenceBundle.js";
|
|
2
2
|
import { EvidenceFileError, EvidenceIntegrityError, } from "../domain/evidenceErrors.js";
|
|
3
3
|
import { err, ok } from "../domain/result.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { AnalysisCancelledError } from "../domain/analysisErrorCore.js";
|
|
5
|
+
import { parseProcessCapture } from "../domain/process/processCaptureParsing.js";
|
|
6
|
+
import { bufferedJsonParts, canonicalJsonParts, } from "../domain/jsonSerialization.js";
|
|
7
|
+
import { readJsonFile, writeTextParts } from "./JsonFiles.js";
|
|
6
8
|
/** Read and validate an evidence bundle at the caller-supplied path. */
|
|
7
9
|
export const readEvidenceBundle = async (path) => {
|
|
8
10
|
const loaded = await readJsonFile(path);
|
|
9
11
|
if (!loaded.ok)
|
|
10
12
|
return loaded;
|
|
13
|
+
let bundle;
|
|
11
14
|
try {
|
|
12
|
-
|
|
13
|
-
for (const record of bundle.records) {
|
|
14
|
-
if (record.predicate_type === "rea.process-capture")
|
|
15
|
-
parseProcessCapture(record.normalized_result);
|
|
16
|
-
}
|
|
17
|
-
return ok(bundle);
|
|
15
|
+
bundle = parseEvidenceBundle(loaded.value);
|
|
18
16
|
}
|
|
19
17
|
catch (cause) {
|
|
20
18
|
return err(new EvidenceIntegrityError("Evidence bundle validation failed", {
|
|
21
19
|
cause,
|
|
20
|
+
userMessage: describeEvidenceBundleFailure(loaded.value, cause),
|
|
22
21
|
}));
|
|
23
22
|
}
|
|
23
|
+
for (const record of bundle.records) {
|
|
24
|
+
if (record.predicate_type !== "rea.process-capture")
|
|
25
|
+
continue;
|
|
26
|
+
try {
|
|
27
|
+
parseProcessCapture(record.normalized_result);
|
|
28
|
+
}
|
|
29
|
+
catch (cause) {
|
|
30
|
+
return err(new EvidenceIntegrityError("Evidence bundle validation failed", {
|
|
31
|
+
cause,
|
|
32
|
+
userMessage: `Process capture record ${record.evidence_id} has an invalid normalized_result (${describeValidationFailure(cause)}). Recreate or re-export the bundle, then try again.`,
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return ok(bundle);
|
|
24
37
|
};
|
|
25
38
|
/** Atomically write deterministic evidence JSON at the caller-supplied path. */
|
|
26
|
-
export const writeEvidenceBundle = async (bundle, path, overwrite) => {
|
|
27
|
-
|
|
39
|
+
export const writeEvidenceBundle = async (bundle, path, overwrite, signal) => {
|
|
40
|
+
if (signal?.aborted === true)
|
|
41
|
+
return err(new AnalysisCancelledError("export_evidence_bundle"));
|
|
42
|
+
let checked;
|
|
28
43
|
try {
|
|
29
|
-
|
|
44
|
+
checked = parseEvidenceBundle(bundle);
|
|
30
45
|
}
|
|
31
46
|
catch (cause) {
|
|
32
47
|
return err(new EvidenceIntegrityError("Evidence bundle validation failed", {
|
|
33
48
|
cause,
|
|
34
49
|
}));
|
|
35
50
|
}
|
|
36
|
-
return
|
|
51
|
+
return writeTextParts(bufferedJsonParts(canonicalJsonParts(checked)), path, overwrite, signal === undefined
|
|
52
|
+
? undefined
|
|
53
|
+
: { signal, operation: "export_evidence_bundle" });
|
|
37
54
|
};
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { toolContract } from "../contracts/toolContracts.js";
|
|
2
|
-
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
|
3
2
|
import { createEvidence } from "../domain/evidence.js";
|
|
4
3
|
import { parseFunctionDossier } from "../domain/hopperValues.js";
|
|
5
4
|
import { jsonObjectSchema } from "../domain/jsonValue.js";
|
|
6
5
|
import { err, ok } from "../domain/result.js";
|
|
7
|
-
import {
|
|
6
|
+
import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
|
|
8
7
|
/** Preserve the provider's observations when presenting a validated function dossier. */
|
|
9
8
|
export const executeFunctionAnalysisEvidence = async (analysis, parameters, target, options) => {
|
|
10
9
|
const input = toolContract("analyze_function").inputSchema.safeParse(parameters);
|
|
11
10
|
if (!input.success)
|
|
12
|
-
return err(
|
|
11
|
+
return err(analysisInputErrorFromIssues("analyze_function", input.error.issues, parameters, { cause: input.error }));
|
|
13
12
|
const arguments_ = jsonObjectSchema.parse(input.data);
|
|
14
13
|
const execution = await analysis.execute("analyze_function", arguments_, options);
|
|
15
14
|
if (!execution.ok)
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import {
|
|
2
|
+
import { AnalysisProtocolError } from "../domain/analysisErrorCore.js";
|
|
3
3
|
import {} from "../domain/analysisErrorBase.js";
|
|
4
4
|
import { createEvidence, } from "../domain/evidence.js";
|
|
5
5
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
6
6
|
import { err, ok } from "../domain/result.js";
|
|
7
|
+
import { requestInputError, workflowInputError } from "./workflowInputError.js";
|
|
7
8
|
/** Parse one inventory projection and wrap its deterministic result in Evidence. */
|
|
8
9
|
export const projectInventoryEvidence = (options) => {
|
|
9
10
|
const parsed = options.schema.safeParse(options.rawInput);
|
|
10
11
|
if (!parsed.success)
|
|
11
|
-
return err(
|
|
12
|
+
return err(requestInputError(options.operation, parsed.error, options.rawInput));
|
|
12
13
|
try {
|
|
13
14
|
const result = options.project(parsed.data);
|
|
14
15
|
const first = parsed.data.inventory_evidence[0];
|
|
@@ -38,7 +39,7 @@ export const projectInventoryEvidence = (options) => {
|
|
|
38
39
|
}
|
|
39
40
|
catch (cause) {
|
|
40
41
|
return err(cause instanceof TypeError || cause instanceof z.ZodError
|
|
41
|
-
?
|
|
42
|
+
? workflowInputError(options.operation, cause)
|
|
42
43
|
: new AnalysisProtocolError(options.protocolError, { cause }));
|
|
43
44
|
}
|
|
44
45
|
};
|
|
@@ -5,9 +5,12 @@ export const REA_WORKFLOW_PROVIDER = {
|
|
|
5
5
|
name: "REA composed investigation workflow",
|
|
6
6
|
version: "1",
|
|
7
7
|
};
|
|
8
|
-
/** Commit a workflow result to
|
|
9
|
-
export const workflowAnalysisProfile = (upstream) => createAnalysisProfile(REA_WORKFLOW_PROVIDER, {
|
|
8
|
+
/** Commit a workflow result to its upstream profile and applicable semantic revision. */
|
|
9
|
+
export const workflowAnalysisProfile = (upstream, operation) => createAnalysisProfile(REA_WORKFLOW_PROVIDER, {
|
|
10
10
|
upstream_analysis_profile: upstream,
|
|
11
|
+
...(operation === "binary_overview" || operation === "batch_decompile"
|
|
12
|
+
? { workflow_revision: 2 }
|
|
13
|
+
: {}),
|
|
11
14
|
});
|
|
12
15
|
/** Provider identity for deterministic artifact inventories. */
|
|
13
16
|
export const ARTIFACT_GRAPH_PROVIDER = {
|
|
@@ -57,6 +60,12 @@ export const JAVASCRIPT_RUNTIME_RECONCILIATION_PROVIDER = {
|
|
|
57
60
|
name: "REA JavaScript runtime reconciliation",
|
|
58
61
|
version: "1",
|
|
59
62
|
};
|
|
63
|
+
/** Provider identity for selected views of retained analysis Evidence. */
|
|
64
|
+
export const ANALYSIS_VIEW_PROVIDER = {
|
|
65
|
+
id: "rea-analysis-view",
|
|
66
|
+
name: "REA analysis view projection",
|
|
67
|
+
version: "1",
|
|
68
|
+
};
|
|
60
69
|
/** Provider identity for graph-native feature tracing and version comparison. */
|
|
61
70
|
export const JAVASCRIPT_APPLICATION_WORKFLOW_PROVIDER = {
|
|
62
71
|
id: "rea-javascript-application-workflows",
|
|
@@ -1,34 +1,42 @@
|
|
|
1
|
-
import { link, lstat, mkdtemp, readFile, realpath, rm } from "node:fs/promises";
|
|
1
|
+
import { link, lstat, mkdtemp, open, readFile, realpath, rename, rm, } from "node:fs/promises";
|
|
2
2
|
import { basename, dirname, resolve } from "node:path";
|
|
3
|
-
import writeFileAtomic from "write-file-atomic";
|
|
4
3
|
import { EvidenceFileError } from "../domain/evidenceErrors.js";
|
|
4
|
+
import { AnalysisCancelledError } from "../domain/analysisErrorCore.js";
|
|
5
5
|
import { err, ok } from "../domain/result.js";
|
|
6
6
|
/** Read JSON data from a regular file at the caller-supplied path. */
|
|
7
7
|
export const readJsonFile = async (path) => {
|
|
8
|
+
const requestedPath = resolve(path);
|
|
8
9
|
try {
|
|
9
|
-
const canonicalPath = await realpath(
|
|
10
|
+
const canonicalPath = await realpath(requestedPath);
|
|
10
11
|
const stats = await lstat(canonicalPath);
|
|
11
12
|
if (!stats.isFile())
|
|
12
|
-
return err(new EvidenceFileError("read", "not-file"));
|
|
13
|
+
return err(new EvidenceFileError("read", "not-file", { path: requestedPath }));
|
|
13
14
|
const encoded = await readFile(canonicalPath);
|
|
14
15
|
let decoded;
|
|
15
16
|
try {
|
|
16
17
|
decoded = JSON.parse(new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }).decode(encoded));
|
|
17
18
|
}
|
|
18
19
|
catch (cause) {
|
|
19
|
-
return err(new EvidenceFileError("read", "invalid-json", {
|
|
20
|
+
return err(new EvidenceFileError("read", "invalid-json", {
|
|
21
|
+
cause,
|
|
22
|
+
path: requestedPath,
|
|
23
|
+
}));
|
|
20
24
|
}
|
|
21
25
|
return ok(decoded);
|
|
22
26
|
}
|
|
23
27
|
catch (cause) {
|
|
24
|
-
return err(new EvidenceFileError("read",
|
|
28
|
+
return err(new EvidenceFileError("read", missingOrIo(cause), {
|
|
29
|
+
cause,
|
|
30
|
+
path: requestedPath,
|
|
31
|
+
}));
|
|
25
32
|
}
|
|
26
33
|
};
|
|
27
34
|
/** Atomically write text to the caller-supplied path. */
|
|
28
|
-
export const writeTextFile = async (encoded, path, overwrite) =>
|
|
29
|
-
|
|
35
|
+
export const writeTextFile = async (encoded, path, overwrite) => writeTextParts([encoded], path, overwrite);
|
|
36
|
+
export async function writeTextParts(parts, path, overwrite, cancellation) {
|
|
37
|
+
const requestedPath = resolve(path);
|
|
30
38
|
try {
|
|
31
|
-
|
|
39
|
+
assertWriteActive(cancellation);
|
|
32
40
|
const canonicalParent = await realpath(dirname(requestedPath));
|
|
33
41
|
const destination = resolve(canonicalParent, basename(requestedPath));
|
|
34
42
|
const existing = await lstat(destination).catch((cause) => {
|
|
@@ -38,42 +46,89 @@ export const writeTextFile = async (encoded, path, overwrite) => {
|
|
|
38
46
|
});
|
|
39
47
|
if (existing !== undefined) {
|
|
40
48
|
if (!overwrite)
|
|
41
|
-
return err(new EvidenceFileError("write", "exists"));
|
|
49
|
+
return err(new EvidenceFileError("write", "exists", { path: requestedPath }));
|
|
42
50
|
if (!existing.isFile() || existing.isSymbolicLink())
|
|
43
|
-
return err(new EvidenceFileError("write", "not-file"));
|
|
51
|
+
return err(new EvidenceFileError("write", "not-file", { path: requestedPath }));
|
|
44
52
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
encoding: "utf8",
|
|
48
|
-
mode: 0o600,
|
|
49
|
-
fsync: true,
|
|
50
|
-
});
|
|
51
|
-
else
|
|
52
|
-
await publishNewFile(destination, encoded);
|
|
53
|
+
assertWriteActive(cancellation);
|
|
54
|
+
const bytes = await publishFile(destination, parts, overwrite, cancellation);
|
|
53
55
|
return ok({ path: requestedPath, bytes });
|
|
54
56
|
}
|
|
55
57
|
catch (cause) {
|
|
58
|
+
if (cancellation?.signal.aborted === true &&
|
|
59
|
+
cause instanceof AnalysisCancelledError &&
|
|
60
|
+
cause.operation === cancellation.operation)
|
|
61
|
+
return err(cause);
|
|
56
62
|
if (!overwrite && fileErrorCode(cause) === "EEXIST")
|
|
57
|
-
return err(new EvidenceFileError("write", "exists", {
|
|
58
|
-
|
|
63
|
+
return err(new EvidenceFileError("write", "exists", {
|
|
64
|
+
cause,
|
|
65
|
+
path: requestedPath,
|
|
66
|
+
}));
|
|
67
|
+
return err(new EvidenceFileError("write", missingOrIo(cause), {
|
|
68
|
+
cause,
|
|
69
|
+
path: requestedPath,
|
|
70
|
+
}));
|
|
59
71
|
}
|
|
72
|
+
}
|
|
73
|
+
/** A missing path or parent is a selection error, not a permission failure. */
|
|
74
|
+
const missingOrIo = (cause) => {
|
|
75
|
+
const code = fileErrorCode(cause);
|
|
76
|
+
return code === "ENOENT" || code === "ENOTDIR" ? "missing" : "io";
|
|
60
77
|
};
|
|
61
|
-
const
|
|
78
|
+
const publishFile = async (destination, parts, overwrite, cancellation) => {
|
|
62
79
|
const stagingDirectory = await mkdtemp(resolve(dirname(destination), ".rea-write-"));
|
|
63
80
|
try {
|
|
64
81
|
const staged = resolve(stagingDirectory, "content");
|
|
65
|
-
await
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
82
|
+
const file = await open(staged, "wx", 0o600);
|
|
83
|
+
let bytes = 0;
|
|
84
|
+
try {
|
|
85
|
+
bytes = await writeStagedParts(file, parts, cancellation);
|
|
86
|
+
assertWriteActive(cancellation);
|
|
87
|
+
await file.sync();
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
await file.close();
|
|
91
|
+
}
|
|
92
|
+
// Once submitted, the atomic publication can win a later cancellation race.
|
|
93
|
+
assertWriteActive(cancellation);
|
|
94
|
+
if (overwrite)
|
|
95
|
+
await rename(staged, destination);
|
|
70
96
|
// A hard link publishes complete bytes atomically and cannot replace an existing name.
|
|
71
|
-
|
|
97
|
+
else
|
|
98
|
+
await link(staged, destination);
|
|
99
|
+
return bytes;
|
|
72
100
|
}
|
|
73
101
|
finally {
|
|
74
102
|
await rm(stagingDirectory, { recursive: true, force: true });
|
|
75
103
|
}
|
|
76
104
|
};
|
|
105
|
+
const writeStagedParts = async (file, parts, cancellation) => {
|
|
106
|
+
assertWriteActive(cancellation);
|
|
107
|
+
const iterator = parts[Symbol.iterator]();
|
|
108
|
+
let exhausted = false;
|
|
109
|
+
let bytes = 0;
|
|
110
|
+
try {
|
|
111
|
+
for (;;) {
|
|
112
|
+
assertWriteActive(cancellation);
|
|
113
|
+
const part = iterator.next();
|
|
114
|
+
if (part.done)
|
|
115
|
+
exhausted = true;
|
|
116
|
+
assertWriteActive(cancellation);
|
|
117
|
+
if (part.done)
|
|
118
|
+
return bytes;
|
|
119
|
+
await file.writeFile(part.value, { encoding: "utf8" });
|
|
120
|
+
bytes += Buffer.byteLength(part.value, "utf8");
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
if (!exhausted)
|
|
125
|
+
iterator.return?.();
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
const assertWriteActive = (cancellation) => {
|
|
129
|
+
if (cancellation?.signal.aborted === true)
|
|
130
|
+
throw new AnalysisCancelledError(cancellation.operation);
|
|
131
|
+
};
|
|
77
132
|
const fileErrorCode = (cause) => typeof cause === "object" && cause !== null && "code" in cause
|
|
78
133
|
? cause.code
|
|
79
134
|
: undefined;
|
|
@@ -84,7 +84,7 @@ export const readLinuxDistribution = async () => {
|
|
|
84
84
|
}
|
|
85
85
|
};
|
|
86
86
|
/** Download, verify, install, and read back the official Hopper Linux package. */
|
|
87
|
-
export const installLinuxHopper = async (host = systemLinuxHopperInstallHost(), options = {}) => {
|
|
87
|
+
export const installLinuxHopper = async (host = systemLinuxHopperInstallHost(process.env), options = {}) => {
|
|
88
88
|
if (options.signal?.aborted === true)
|
|
89
89
|
return { status: "failed", reason: "cancelled" };
|
|
90
90
|
const distribution = await host.distribution();
|
|
@@ -124,7 +124,8 @@ export const installLinuxHopper = async (host = systemLinuxHopperInstallHost(),
|
|
|
124
124
|
};
|
|
125
125
|
/** Canonical launcher path for a legacy user-local Linux Hopper installation. */
|
|
126
126
|
export const linuxHopperLauncherPath = (home) => join(home, ".local/share/rea/hopper/bin/Hopper");
|
|
127
|
-
|
|
127
|
+
/** Compose package-manager and linker checks from the selected caller environment. */
|
|
128
|
+
export const systemLinuxHopperInstallHost = (environment) => ({
|
|
128
129
|
distribution: readLinuxDistribution,
|
|
129
130
|
async download(url, options) {
|
|
130
131
|
const response = await fetch(url, {
|
|
@@ -138,11 +139,11 @@ const systemLinuxHopperInstallHost = () => ({
|
|
|
138
139
|
},
|
|
139
140
|
createTemporaryDirectory: () => mkdtemp(join(tmpdir(), "rea-hopper-")),
|
|
140
141
|
writeArchive: (path, bytes) => writeFile(path, bytes, { mode: 0o600 }),
|
|
141
|
-
installPackage: installSystemPackage,
|
|
142
|
+
installPackage: (family, archive) => installSystemPackage(family, archive, environment),
|
|
142
143
|
async launcherStatus(path) {
|
|
143
144
|
try {
|
|
144
145
|
await access(path);
|
|
145
|
-
const linked = await execFileOutput("ldd", [path]);
|
|
146
|
+
const linked = await execFileOutput("ldd", [path], { env: environment });
|
|
146
147
|
if (!linuxSharedLibrariesAvailable(`${linked.stdout}\n${linked.stderr}`))
|
|
147
148
|
return "runtime_dependencies";
|
|
148
149
|
return (await linuxHopperBinarySupported(path))
|
|
@@ -175,10 +176,12 @@ export const linuxHopperBinarySupported = async (path) => {
|
|
|
175
176
|
export const linuxHopperLauncherDigestSupported = (digest) => SUPPORTED_HOPPER_SHA256.has(digest);
|
|
176
177
|
/** Interpret ldd output conservatively so a present but broken launcher is unhealthy. */
|
|
177
178
|
export const linuxSharedLibrariesAvailable = (output) => !/(?:=>\s+not found|error while loading shared libraries)/iu.test(output);
|
|
178
|
-
const installSystemPackage = async (family, archive) => {
|
|
179
|
+
const installSystemPackage = async (family, archive, environment) => {
|
|
179
180
|
try {
|
|
180
181
|
for (const command of linuxPackageManagerCommands(family, archive, process.getuid?.() === 0))
|
|
181
|
-
await execFileAsync(command.executable, command.args
|
|
182
|
+
await execFileAsync(command.executable, command.args, {
|
|
183
|
+
env: environment,
|
|
184
|
+
});
|
|
182
185
|
return true;
|
|
183
186
|
}
|
|
184
187
|
catch (cause) {
|