rea-agents 3.2.0 → 4.0.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 +183 -332
- package/bridge/ghidra/ReaGhidraBridge.java +561 -74
- package/bridge/hopper_bridge.py +70 -27
- package/bridge/native/ReaNativeUI.swift +157 -0
- package/dist/application/AnalysisContextQueries.js +19 -5
- package/dist/application/AnalysisSnapshotCache.js +30 -11
- package/dist/application/AppleAssetCatalogAnalysis.js +171 -0
- package/dist/application/ArtifactExtractionDestination.js +0 -12
- package/dist/application/ArtifactGraphConstruction.js +44 -11
- package/dist/application/ArtifactInventory/classify.js +7 -15
- package/dist/application/ArtifactInventory/hash.js +4 -2
- package/dist/application/ArtifactInventory/policy.js +2 -17
- package/dist/application/ArtifactInventory/reader.js +3 -3
- package/dist/application/ArtifactInventory/scanCanonical.js +2 -2
- package/dist/application/ArtifactInventory/scanReader.js +12 -4
- package/dist/application/ArtifactInventory/types.js +0 -3
- package/dist/application/BinarySession.js +28 -43
- package/dist/application/BinarySessionExecution.js +37 -1
- package/dist/application/BinaryTargetResolver.js +50 -4
- package/dist/application/BrowserEvidence.js +36 -7
- package/dist/application/BrowserObservationService.js +17 -44
- package/dist/application/BrowserScenarioCaptureService.js +2 -35
- package/dist/application/BrowserScenarioEvidence.js +13 -9
- package/dist/application/CapabilityClientRequirements.js +2 -11
- package/dist/application/CapabilityInventory.js +21 -35
- package/dist/application/ClientConfigurationDocument.js +84 -7
- package/dist/application/ClientRegistrationIdentity.js +32 -0
- package/dist/application/ClientRegistrationStatus.js +59 -6
- package/dist/application/DirectAnalysis.js +37 -58
- package/dist/application/DirectAnalysisStatus.js +4 -4
- package/dist/application/Doctor.js +89 -80
- package/dist/application/DoctorDiagnostics.js +2 -26
- package/dist/application/DoctorScope.js +8 -14
- package/dist/application/ElectronActiveEvidence.js +10 -27
- package/dist/application/ElectronActiveObservationService.js +9 -36
- package/dist/application/ElectronBoundaryAnalysis.js +2 -0
- package/dist/application/ElectronBoundaryGraphNative.js +1 -1
- package/dist/application/ElectronEvidence.js +8 -3
- package/dist/application/ElectronObservationService.js +9 -25
- package/dist/application/EnhancedLiteralTracing.js +4 -8
- package/dist/application/EnhancedTools.js +15 -35
- package/dist/application/FilesystemSnapshot.js +7 -8
- package/dist/application/JavaScriptApplicationEvidenceGraph.js +2 -1
- package/dist/application/JavaScriptApplicationWorkflowService.js +31 -7
- package/dist/application/JavaScriptArtifactAnalysis.js +6 -4
- package/dist/application/JavaScriptArtifactFiles.js +5 -0
- package/dist/application/JavaScriptArtifactPathResolution.js +179 -47
- package/dist/application/JavaScriptRuntimeObservationEvidence.js +6 -3
- package/dist/application/JavaScriptRuntimeObservationService.js +9 -25
- package/dist/application/JavaScriptRuntimeReconciliationService.js +45 -4
- package/dist/application/JavaScriptSemanticGraphAsyncProjection.js +11 -0
- package/dist/application/JavaScriptSemanticGraphChildProcessProjection.js +11 -0
- package/dist/application/JavaScriptSemanticGraphDataProjection.js +11 -0
- package/dist/application/JavaScriptSemanticGraphFlowProjection.js +14 -5
- package/dist/application/JsonFiles.js +1 -1
- package/dist/application/LazyAnalysisProvider.js +27 -6
- package/dist/application/ManagedMemberComparisonService.js +19 -6
- package/dist/application/NativeApiInspection.js +2 -0
- package/dist/application/NativeCallRoutes.js +72 -0
- package/dist/application/NativeDispatchMetadataInspection.js +33 -0
- package/dist/application/NativeUiActionTrace.js +73 -49
- package/dist/application/NativeValueTrace.js +320 -0
- package/dist/application/ProcessCaptureCapability.js +32 -5
- package/dist/application/ProcessCaptureEnvironment.js +9 -26
- package/dist/application/ProcessCaptureError.js +1 -5
- package/dist/application/ProcessCaptureJournal.js +3 -40
- package/dist/application/ProcessCaptureLifecycle.js +102 -111
- package/dist/application/ProcessCli.js +18 -25
- package/dist/application/ProcessEvidence.js +5 -7
- package/dist/application/ProcessFilesystemEffects.js +36 -0
- package/dist/application/ProcessHarness.js +41 -120
- package/dist/application/ProcessNormalization.js +2 -17
- package/dist/application/ProcessScenarioRuntimeValidation.js +76 -0
- package/dist/application/ReferenceSourceImport.js +3 -4
- package/dist/application/Setup.js +236 -84
- package/dist/application/SetupClientConfiguration.js +14 -9
- package/dist/application/SetupPlan.js +138 -86
- package/dist/application/SetupSkill.js +0 -1
- package/dist/application/SupportedClients.js +102 -21
- package/dist/application/Uninstall.js +31 -20
- package/dist/application/Update.js +93 -0
- package/dist/application/UpdateMaintenance.js +108 -0
- package/dist/application/UpdateRuntime.js +126 -0
- package/dist/application/runtime.js +13 -2
- package/dist/artifacts/ArtifactPaths.js +6 -8
- package/dist/artifacts/ArtifactProvider.js +94 -41
- package/dist/artifacts/AsarArtifactReader.js +19 -4
- package/dist/artifacts/KeyedArchiveReader.js +110 -0
- package/dist/artifacts/MachOSliceArtifactReader.js +53 -5
- package/dist/artifacts/ZipArtifactReader.js +18 -1
- package/dist/browser/BrowserScenarioSecrets.js +28 -1
- package/dist/browser/CdpBrowserProvider.js +36 -15
- package/dist/browser/CdpCaptureDocuments.js +22 -8
- package/dist/browser/CdpCaptureEventHandlers.js +14 -5
- package/dist/browser/CdpCaptureEventHelpers.js +13 -0
- package/dist/browser/CdpCaptureEvents.js +10 -1
- package/dist/browser/CdpElectronInspection.js +5 -10
- package/dist/browser/CdpElectronProvider.js +1 -5
- package/dist/browser/CdpElectronScripts.js +1 -1
- package/dist/browser/CdpEndpoint.js +3 -2
- package/dist/browser/CdpObservationSession.js +14 -10
- package/dist/browser/CdpPageCapture.js +1 -1
- package/dist/browser/CdpPageCaptureScripts.js +1 -1
- package/dist/browser/CdpSafeMetadata.js +5 -4
- package/dist/browser/CdpScreenshot.js +16 -5
- package/dist/browser/CdpTargetSession.js +25 -4
- package/dist/browser/CdpWebMcpDiscovery.js +93 -20
- package/dist/browser/JavaScriptRuntimeScope.js +28 -2
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +9 -8
- package/dist/browser/PlaywrightElectronActiveActions.js +3 -10
- package/dist/browser/PlaywrightElectronActiveProvider.js +5 -5
- package/dist/browser/PlaywrightScenarioActions.js +1 -1
- package/dist/browser/PlaywrightScenarioArtifacts.js +13 -25
- package/dist/browser/PlaywrightScenarioBrowser.js +28 -25
- package/dist/browser/PlaywrightScenarioEvents.js +82 -93
- package/dist/browser/PlaywrightScenarioSession.js +27 -123
- package/dist/browser/PngVisualDiff.js +22 -3
- package/dist/browser/V8InspectorCaptureProjection.js +7 -1
- package/dist/browser/V8InspectorProvider.js +60 -7
- package/dist/browser/WebSourceMapFetcher.js +99 -53
- package/dist/cli/artifactCommands.js +56 -12
- package/dist/cli/coreAnalysisCommands.js +110 -0
- package/dist/cli/managedCommands.js +1 -31
- package/dist/cli/setupCommands.js +16 -14
- package/dist/cli/utilityCommands.js +61 -4
- package/dist/cli.js +5 -7
- package/dist/cliApplicationCommands.js +0 -83
- package/dist/cliBrowserAdvancedCommands.js +7 -11
- package/dist/cliBrowserCommands.js +15 -23
- package/dist/cliBrowserContext.js +3 -24
- package/dist/cliBrowserScenarioCommands.js +2 -10
- package/dist/cliCommandNames.js +82 -7
- package/dist/cliElectronCommands.js +10 -36
- package/dist/cliJavaScriptRuntimeCommands.js +6 -30
- package/dist/cliJsonInput.js +4 -2
- package/dist/cliLogging.js +16 -7
- package/dist/cliObservationOptions.js +1 -1
- package/dist/cliOutput.js +2 -4
- package/dist/cliProcessCommands.js +6 -33
- package/dist/cliSetup.js +90 -160
- package/dist/config/environment.js +2 -78
- package/dist/config/parseConfig.js +18 -109
- package/dist/config/parsers.js +0 -23
- package/dist/contracts/applicationToolContracts.js +1 -118
- package/dist/contracts/artifactToolContracts.js +11 -19
- package/dist/contracts/browserScenarioToolContracts.js +1 -5
- package/dist/contracts/browserToolContracts.js +9 -16
- package/dist/contracts/electronToolContracts.js +5 -6
- package/dist/contracts/enhancedInputs.js +3 -2
- package/dist/contracts/errorSchemas.js +16 -40
- package/dist/contracts/functionWorkflowToolContracts.js +2 -2
- package/dist/contracts/javascriptApplicationWorkflowExamples.js +2 -2
- package/dist/contracts/javascriptRuntimeObservationToolContracts.js +4 -4
- package/dist/contracts/javascriptRuntimeReconciliationExample.js +1 -1
- package/dist/contracts/managedToolContracts.js +7 -4
- package/dist/contracts/managedWorkflowExamples.js +0 -22
- package/dist/contracts/managedWorkflowToolContracts.js +16 -31
- package/dist/contracts/nativeToolContracts.js +9 -0
- package/dist/contracts/promptContracts.js +6 -6
- package/dist/contracts/sessionToolSchemas.js +3 -3
- package/dist/contracts/toolContractExamples.js +4 -3
- package/dist/contracts/toolContracts.js +18 -7
- package/dist/contracts/toolEffects.js +34 -21
- package/dist/contracts/toolOutputSchemaGroups.js +18 -5
- package/dist/contracts/toolOutputSchemaPrimitives.js +9 -6
- package/dist/contracts/toolSchemaMetadata.js +5 -8
- package/dist/doctorRuntime.js +0 -41
- package/dist/domain/analysisErrorPresentation.js +4 -28
- package/dist/domain/analysisErrorProjection.js +33 -50
- package/dist/domain/analysisProfile.js +1 -1
- package/dist/domain/analysisSnapshot.js +77 -3
- package/dist/domain/androidApplication.js +5 -4
- package/dist/domain/appleApplication.js +5 -4
- package/dist/domain/appleAssetCatalog.js +127 -0
- package/dist/domain/artifactComparison.js +7 -11
- package/dist/domain/artifactGraph.js +8 -6
- package/dist/domain/artifactInspection.js +13 -12
- package/dist/domain/binaryTarget.js +23 -9
- package/dist/domain/browserObservation.js +43 -24
- package/dist/domain/browserObservationSchemas.js +2 -1
- package/dist/domain/browserScenario.js +7 -107
- package/dist/domain/browserScenarioCapture.js +0 -1
- package/dist/domain/browserScenarioCaptureValues.js +5 -4
- package/dist/domain/browserScenarioDiff.js +1 -3
- package/dist/domain/browserScenarioValues.js +16 -107
- package/dist/domain/bundleComparison.js +18 -17
- package/dist/domain/callPathSchemas.js +17 -7
- package/dist/domain/changedBehavior.js +2 -3
- package/dist/domain/comparisonSemantics.js +19 -0
- package/dist/domain/completionLedgerGeneration.js +3 -2
- package/dist/domain/conformancePackage.js +2 -1
- package/dist/domain/conformanceTrustGate.js +3 -5
- package/dist/domain/customProtocolCapture.js +2 -2
- package/dist/domain/digests.js +30 -0
- package/dist/domain/dosMz.js +83 -0
- package/dist/domain/electronActiveObservation.js +7 -5
- package/dist/domain/electronObservation.js +3 -2
- package/dist/domain/electronStaticAnalysisNative.js +15 -6
- package/dist/domain/emptyArraySchema.js +3 -0
- package/dist/domain/errors.js +10 -28
- package/dist/domain/evidence.js +5 -3
- package/dist/domain/evidenceCompletionLedger.js +3 -2
- package/dist/domain/functionComparisonNormalization.js +24 -18
- package/dist/domain/functionComparisonResults.js +3 -7
- package/dist/domain/functionComparisonSchemas.js +3 -2
- package/dist/domain/hopperValues.js +108 -8
- package/dist/domain/javascriptApplicationAnalysis.js +4 -7
- package/dist/domain/javascriptApplicationEvidenceSchemas.js +4 -3
- package/dist/domain/javascriptApplicationGraphSchemas.js +8 -7
- package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +9 -7
- package/dist/domain/javascriptApplicationVersionItems.js +12 -18
- package/dist/domain/javascriptAstValues.js +4 -0
- package/dist/domain/javascriptExportShapeComparison.js +1 -6
- package/dist/domain/javascriptExportShapeComparisonSchemas.js +6 -10
- package/dist/domain/javascriptExportShapeVariants.js +15 -2
- package/dist/domain/javascriptFeatureTraceSchemas.js +8 -7
- package/dist/domain/javascriptRuntimeObservation.js +14 -2
- package/dist/domain/javascriptRuntimeReconciliationMatching.js +8 -0
- package/dist/domain/javascriptRuntimeReconciliationParsing.js +4 -2
- package/dist/domain/javascriptRuntimeReconciliationResult.js +6 -4
- package/dist/domain/javascriptRuntimeReconciliationRuntime.js +15 -4
- package/dist/domain/javascriptRuntimeReconciliationSchemas.js +19 -18
- package/dist/domain/javascriptRuntimeStaticCandidates.js +18 -6
- package/dist/domain/javascriptSemanticAnalysis.js +57 -19
- package/dist/domain/javascriptSemanticAsyncEffects.js +39 -40
- package/dist/domain/javascriptSemanticCalls.js +46 -27
- package/dist/domain/javascriptSemanticChildProcesses.js +43 -50
- package/dist/domain/javascriptSemanticDataEffectHelpers.js +91 -18
- package/dist/domain/javascriptSemanticDataEffects.js +22 -10
- package/dist/domain/javascriptSemanticGraphSchemas.js +8 -6
- package/dist/domain/javascriptSemanticObjects.js +13 -3
- package/dist/domain/javascriptSemanticProjection.js +144 -38
- package/dist/domain/javascriptSemanticPromises.js +14 -27
- package/dist/domain/javascriptSemanticQuerySchemas.js +6 -9
- package/dist/domain/javascriptSemanticResources.js +2 -5
- package/dist/domain/javascriptSemanticState.js +4 -0
- package/dist/domain/javascriptSemanticTraceSchemas.js +2 -1
- package/dist/domain/javascriptSemanticTraversal.js +13 -5
- package/dist/domain/javascriptSemanticValues.js +10 -9
- package/dist/domain/javascriptSourceParser.js +5 -1
- package/dist/domain/javascriptStaticAnalysisCalls.js +8 -5
- package/dist/domain/javascriptStaticAnalysisHelpers.js +16 -7
- package/dist/domain/keyedArchive.js +181 -0
- package/dist/domain/managedApplicationGraph.js +4 -3
- package/dist/domain/managedArtifact.js +2 -1
- package/dist/domain/managedMemberComparison.js +18 -13
- package/dist/domain/managedMemberComparisonCoverage.js +2 -1
- package/dist/domain/managedMemberComparisonItems.js +27 -7
- package/dist/domain/managedMemberComparisonMatch.js +22 -6
- package/dist/domain/managedNativeVerificationMatch.js +2 -2
- package/dist/domain/managedNativeVerificationSchemas.js +7 -5
- package/dist/domain/managedReconstruction.js +6 -5
- package/dist/domain/nativeApiBoundary.js +7 -0
- package/dist/domain/nativeDataType.js +51 -0
- package/dist/domain/nativeInspection.js +0 -1
- package/dist/domain/nativeInstruction.js +82 -0
- package/dist/domain/nativeInvestigationGraph.js +9 -5
- package/dist/domain/nativeUiObservation.js +123 -0
- package/dist/domain/nativeValueFlow.js +17 -0
- package/dist/domain/nativeValueTrace.js +64 -0
- package/dist/domain/objcSwiftMetadata.js +39 -0
- package/dist/domain/peInspection.js +1 -0
- package/dist/domain/processCapture.js +5 -55
- package/dist/domain/processCaptureExample.js +0 -9
- package/dist/domain/processCaptureValidation.js +13 -144
- package/dist/domain/processComparison.js +3 -25
- package/dist/domain/processObservation.js +0 -29
- package/dist/domain/processScenario.js +28 -228
- package/dist/domain/processTraceDimensionProjection.js +0 -15
- package/dist/domain/processTraceEvaluation.js +0 -6
- package/dist/domain/protocolCapture.js +8 -36
- package/dist/domain/reconstructionCoverage.js +3 -2
- package/dist/domain/reconstructionObligationLedgerSchemas.js +4 -12
- package/dist/domain/reconstructionReadinessSchemas.js +4 -3
- package/dist/domain/reconstructionVerification.js +2 -1
- package/dist/domain/reconstructionVerificationSchemas.js +6 -13
- package/dist/domain/referenceSourceClassification.js +0 -110
- package/dist/domain/referenceSourceGraph.js +15 -5
- package/dist/domain/residualUnknown.js +3 -2
- package/dist/domain/runtimeIdentification.js +6 -5
- package/dist/domain/sourceMapContents.js +5 -0
- package/dist/domain/sourceToBundleComparison.js +3 -10
- package/dist/domain/sourceToBundleComparisonSchemas.js +7 -6
- package/dist/domain/sourceToBundleSignals.js +9 -3
- package/dist/domain/staticRuntimeCorrelation.js +5 -11
- package/dist/domain/webBundleAnalysis.js +17 -9
- package/dist/domain/webBundleAnalyzer.js +1 -1
- package/dist/domain/webCaptureDiff.js +5 -11
- package/dist/domain/webCaptureDiffSchemas.js +2 -1
- package/dist/domain/webMcpDiscovery.js +2 -1
- package/dist/dotnet/ManagedMemberInspectorCore.js +15 -7
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +57 -40
- package/dist/dotnet/ManagedMemberRows.js +2 -0
- package/dist/dotnet/ManagedMethodBodyReader.js +15 -8
- package/dist/dotnet/ManagedPeReader.js +2 -0
- package/dist/generatedMcpToolCatalog.js +1 -1
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +15 -5
- package/dist/ghidra/GhidraClient.js +38 -8
- package/dist/ghidra/GhidraFunctionValues.js +56 -20
- package/dist/ghidra/GhidraInstallation.js +7 -4
- package/dist/ghidra/GhidraInventoryValues.js +44 -9
- package/dist/ghidra/GhidraLauncher.js +18 -3
- package/dist/ghidra/GhidraProvider.js +23 -2
- package/dist/ghidra/GhidraRequestQueue.js +45 -4
- package/dist/ghidra/GhidraSessionValues.js +5 -0
- package/dist/hopper/HopperAnalysisProfile.js +2 -0
- package/dist/hopper/HopperProvider.js +29 -6
- package/dist/hopper/HopperTargetLease.js +18 -4
- package/dist/logger.js +0 -13
- package/dist/main/messages.js +0 -1
- package/dist/main/reload.js +3 -32
- package/dist/main/shutdown.js +1 -2
- package/dist/main/transport.js +0 -17
- package/dist/main.js +0 -10
- package/dist/native/AppleDispatchMetadata.js +582 -0
- package/dist/native/AppleObjcProtocols.js +88 -0
- package/dist/native/AppleSwiftVtables.js +86 -0
- package/dist/native/CommandRunner.js +1 -1
- package/dist/native/NativeHostCapabilities.js +23 -0
- package/dist/native/NativeMacOSProvider.js +61 -9
- package/dist/native/NativeMachoInspection.js +39 -6
- package/dist/native/NativeUiHelperRuntime.js +42 -0
- package/dist/native/NativeUiObservation.js +174 -0
- package/dist/native/parsers/codesign.js +4 -1
- package/dist/native/parsers/dyldInfo.js +51 -25
- package/dist/native/parsers/lipo.js +13 -4
- package/dist/native/parsers/otool.js +84 -39
- package/dist/native/parsers/plist.js +2 -1
- package/dist/process/ExecFileOutput.js +5 -1
- package/dist/process/ProcessOwnership.js +69 -33
- package/dist/process/ProcessOwnershipObservation.js +31 -12
- package/dist/process/ProviderProcess.js +4 -2
- package/dist/reference/ReferenceSourceReaderEntries.js +48 -31
- package/dist/reference/ReferenceSourceReaderErrors.js +24 -0
- package/dist/reference/ReferenceSourceReaderFile.js +11 -5
- package/dist/reference/ReferenceSourceReaderValidate.js +22 -8
- package/dist/server/createServer.js +7 -62
- package/dist/server/registerApplicationTools/helpers.js +2 -9
- package/dist/server/registerApplicationTools.js +0 -4
- package/dist/server/registerArtifactComparisonTool.js +1 -1
- package/dist/server/registerBrowserScenarioTool.js +4 -2
- package/dist/server/registerBrowserTools.js +7 -7
- package/dist/server/registerBundleComparisonTool.js +1 -1
- package/dist/server/registerCloseLifecycleTool.js +1 -1
- package/dist/server/registerElectronTools.js +10 -4
- package/dist/server/registerEnhancedTools.js +20 -12
- package/dist/server/registerEvidenceTools.js +4 -28
- package/dist/server/registerFunctionComparisonTool.js +1 -1
- package/dist/server/registerInvestigationTools.js +6 -6
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +2 -2
- package/dist/server/registerManagedTools.js +28 -14
- package/dist/server/registerManagedWorkflowTools.js +0 -2
- package/dist/server/registerProcessComparisonTool.js +1 -3
- package/dist/server/registerSessionRecordTools.js +9 -9
- package/dist/server/registerSessionStatusTool.js +1 -1
- package/dist/server/registerSessionTools.js +28 -57
- package/dist/server/sessionAvailabilityPolicy.js +2 -3
- package/dist/server/sessionToolPolicies.js +0 -4
- package/dist/server/toolResult.js +8 -10
- package/package.json +32 -22
- package/skills/reverse-engineer-anything/SKILL.md +15 -11
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +3 -2
- package/skills/reverse-engineer-anything/references/javascript-applications.md +3 -2
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +8 -6
- package/skills/reverse-engineer-anything/references/runtime-observation.md +15 -11
- package/dist/application/CommandShimReplay.js +0 -152
- package/dist/application/ConfiguredRoots.js +0 -19
- package/dist/application/InstrumentedJavaScriptReplayHost.js +0 -36
- package/dist/application/JavaScriptReplayPermission.js +0 -16
- package/dist/application/JavaScriptReplayPlanning.js +0 -207
- package/dist/application/JavaScriptReplayService.js +0 -274
- package/dist/application/LoopbackReplay.js +0 -389
- package/dist/application/LoopbackReplayRecorder.js +0 -129
- package/dist/application/ManagedRuntimeCorrelationService.js +0 -104
- package/dist/application/NodeRuntimeCharacterizationService.js +0 -191
- package/dist/application/PermissionAuthority.js +0 -268
- package/dist/application/PermissionConfiguration.js +0 -26
- package/dist/application/PermissionFailure.js +0 -5
- package/dist/application/ProcessCaptureAuthority.js +0 -24
- package/dist/application/ProcessCapturePermission.js +0 -13
- package/dist/application/ProcessCheckpoints.js +0 -178
- package/dist/application/ProcessReactiveCoordinator.js +0 -223
- package/dist/application/ProcessReactiveEffects.js +0 -153
- package/dist/application/ProcessReactiveHarness.js +0 -106
- package/dist/application/ProcessReactiveObservations.js +0 -105
- package/dist/application/ProjectPermissionStore.js +0 -199
- package/dist/application/RuntimeExecutableDiagnostics.js +0 -198
- package/dist/application/Upgrade.js +0 -134
- package/dist/browser/SensitiveTextCapture.js +0 -8
- package/dist/cliPolicyCommands.js +0 -185
- package/dist/config/browserScenario.js +0 -77
- package/dist/config/electronAutomation.js +0 -35
- package/dist/config/javascriptReplay.js +0 -41
- package/dist/config/managedRuntime.js +0 -25
- package/dist/config/passiveObservation.js +0 -87
- package/dist/config/permissions.js +0 -23
- package/dist/config/processCapture.js +0 -47
- package/dist/contracts/replayMachineExample.js +0 -37
- package/dist/domain/javascriptExportInstrumentation.js +0 -95
- package/dist/domain/javascriptReplay.js +0 -360
- package/dist/domain/managedRuntimeCorrelation.js +0 -181
- package/dist/domain/nodeRuntimeCharacterization.js +0 -63
- package/dist/domain/permissionPolicy.js +0 -176
- package/dist/domain/processCaptureReactiveSchema.js +0 -68
- package/dist/domain/processCaptureReactiveValidation.js +0 -180
- package/dist/domain/processReactiveCheckpointDataflow.js +0 -32
- package/dist/domain/processReactiveMatching.js +0 -196
- package/dist/domain/processReactiveRuntime.js +0 -116
- package/dist/domain/processReactiveScenario.js +0 -296
- package/dist/domain/processReactiveScenarioPreflight.js +0 -95
- package/dist/domain/processReactiveTransition.js +0 -187
- package/dist/domain/replayMachine.js +0 -320
- package/dist/domain/replayMachineRun.js +0 -168
- package/dist/domain/replayMachineRuntime.js +0 -296
- package/dist/domain/replayMachineValues.js +0 -84
- package/dist/domain/runtimeCharacterization.js +0 -84
- package/dist/replay/JavaScriptReplayWorker.js +0 -382
- package/dist/replay/JavaScriptReplayWorkerTypes.js +0 -1
- package/dist/replay/LinuxJavaScriptReplayRunner.js +0 -216
- package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -121
- package/dist/replay/LinuxRuntimeClosure.js +0 -44
- package/dist/replay/LinuxSeccompPolicy.js +0 -40
- package/dist/replay/ReplayOutcome.js +0 -104
- package/dist/replay/ReplayProcessLifecycle.js +0 -96
- package/dist/replay/ReplaySeccompFile.js +0 -29
- package/dist/replay/ReplayWorkerProtocol.js +0 -58
- package/dist/replay/SystemJavaScriptReplayHost.js +0 -153
- package/dist/server/ProcessCaptureElicitation.js +0 -153
- package/dist/server/registerApplicationTools/characterization.js +0 -46
- package/dist/server/registerApplicationTools/controlledReplay.js +0 -31
- package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +0 -29
- package/dist/server/registerReplayMachineTool.js +0 -14
- package/skills/reverse-engineer-anything/references/controlled-replay.md +0 -12
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
import { functionDossierSchema } from "../domain/hopperValues.js";
|
|
2
|
+
import { nativeCallTargetsSchema } from "../domain/nativeInstruction.js";
|
|
3
|
+
import { nativeValueTraceInputSchema, nativeValueTraceSchema, } from "../domain/nativeValueTrace.js";
|
|
4
|
+
import { createEvidence } from "../domain/evidence.js";
|
|
5
|
+
import { AnalysisCancelledError, AnalysisOutputError, } from "../domain/errors.js";
|
|
6
|
+
import { err, ok } from "../domain/result.js";
|
|
7
|
+
/** Compose bounded high-p-code def-use graphs across exactly referenced call destinations. */
|
|
8
|
+
export const traceNativeValues = async (analysis, parameters, signal) => {
|
|
9
|
+
const input = nativeValueTraceInputSchema.parse(parameters);
|
|
10
|
+
const nodes = [];
|
|
11
|
+
const edges = [];
|
|
12
|
+
const procedures = [];
|
|
13
|
+
const unknowns = [];
|
|
14
|
+
const callBindings = [];
|
|
15
|
+
const pending = [{ procedure: input.procedure, depth: 0 }];
|
|
16
|
+
const visited = new Set();
|
|
17
|
+
let targetSha256;
|
|
18
|
+
let truncated = false;
|
|
19
|
+
let decompilations = 0;
|
|
20
|
+
let callSites = 0;
|
|
21
|
+
let bytes = 0;
|
|
22
|
+
while (pending.length > 0) {
|
|
23
|
+
if (signal?.aborted)
|
|
24
|
+
return err(new AnalysisCancelledError("trace_native_values"));
|
|
25
|
+
const next = pending.shift();
|
|
26
|
+
if (next === undefined || visited.has(next.procedure))
|
|
27
|
+
continue;
|
|
28
|
+
if (decompilations >= input.max_functions) {
|
|
29
|
+
truncated = true;
|
|
30
|
+
unknowns.push({
|
|
31
|
+
procedure: next.procedure,
|
|
32
|
+
address: null,
|
|
33
|
+
reason: "decompilation budget reached",
|
|
34
|
+
});
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
const execution = await analysis.execute("analyze_function", { procedure: next.procedure }, signal === undefined ? {} : { signal });
|
|
38
|
+
decompilations++;
|
|
39
|
+
if (!execution.ok) {
|
|
40
|
+
if (execution.error._tag === "AnalysisCancelledError")
|
|
41
|
+
return err(execution.error);
|
|
42
|
+
unknowns.push({
|
|
43
|
+
procedure: next.procedure,
|
|
44
|
+
address: null,
|
|
45
|
+
reason: execution.error.message,
|
|
46
|
+
});
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
const parsed = functionDossierSchema.safeParse(execution.value.result);
|
|
50
|
+
if (!parsed.success || execution.value.subject === null)
|
|
51
|
+
return err(new AnalysisOutputError("trace_native_values", "Function dossier lacks validated facts or artifact identity"));
|
|
52
|
+
const dossier = parsed.data;
|
|
53
|
+
const address = dossier.procedure.address;
|
|
54
|
+
if (visited.has(address))
|
|
55
|
+
continue;
|
|
56
|
+
visited.add(next.procedure);
|
|
57
|
+
visited.add(address);
|
|
58
|
+
targetSha256 ??= execution.value.subject.sha256;
|
|
59
|
+
if (execution.value.subject.sha256 !== targetSha256)
|
|
60
|
+
return err(new AnalysisOutputError("trace_native_values", "Cross-function target digest mismatch"));
|
|
61
|
+
const evidence = createEvidence(execution.value.subject, execution.value.provider, {
|
|
62
|
+
operation: "analyze_function",
|
|
63
|
+
parameters: { procedure: next.procedure },
|
|
64
|
+
result: execution.value.result,
|
|
65
|
+
rawResult: execution.value.rawResult,
|
|
66
|
+
limitations: execution.value.limitations,
|
|
67
|
+
locations: execution.value.locations,
|
|
68
|
+
...(execution.value.analysisProfile === undefined
|
|
69
|
+
? {}
|
|
70
|
+
: { analysisProfile: execution.value.analysisProfile }),
|
|
71
|
+
});
|
|
72
|
+
const evidenceId = evidence.evidence_id;
|
|
73
|
+
procedures.push({
|
|
74
|
+
address,
|
|
75
|
+
depth: next.depth,
|
|
76
|
+
evidence_id: evidenceId,
|
|
77
|
+
provider: execution.value.provider.id,
|
|
78
|
+
analysis_profile_digest: execution.value.analysisProfile?.digest ?? null,
|
|
79
|
+
});
|
|
80
|
+
const flow = dossier.native_value_flow;
|
|
81
|
+
if (flow === null || !flow.available) {
|
|
82
|
+
unknowns.push({
|
|
83
|
+
procedure: address,
|
|
84
|
+
address: null,
|
|
85
|
+
reason: flow?.reason ?? "Provider has no native def-use model",
|
|
86
|
+
});
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (flow.truncated) {
|
|
90
|
+
truncated = true;
|
|
91
|
+
unknowns.push({
|
|
92
|
+
procedure: address,
|
|
93
|
+
address: null,
|
|
94
|
+
reason: "Provider p-code was truncated",
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
const ids = new Set();
|
|
98
|
+
const qualified = (id) => `${address}/${id}`;
|
|
99
|
+
for (const operation of flow.operations) {
|
|
100
|
+
if (operation.block_membership === "detached" ||
|
|
101
|
+
(operation.block_membership === "unavailable" && operation.is_dead))
|
|
102
|
+
continue;
|
|
103
|
+
const node = {
|
|
104
|
+
id: qualified(operation.id),
|
|
105
|
+
procedure: address,
|
|
106
|
+
evidence_id: evidenceId,
|
|
107
|
+
operation,
|
|
108
|
+
kind: "operation",
|
|
109
|
+
parameter: null,
|
|
110
|
+
};
|
|
111
|
+
const size = Buffer.byteLength(JSON.stringify(node));
|
|
112
|
+
if (nodes.length >= input.max_nodes || bytes + size > 8 * 1024 * 1024) {
|
|
113
|
+
truncated = true;
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
bytes += size;
|
|
117
|
+
ids.add(operation.id);
|
|
118
|
+
nodes.push(node);
|
|
119
|
+
}
|
|
120
|
+
for (const parameter of flow.parameters) {
|
|
121
|
+
if (nodes.length >= input.max_nodes) {
|
|
122
|
+
truncated = true;
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
nodes.push({
|
|
126
|
+
id: `${address}/parameter:${parameter.ordinal}`,
|
|
127
|
+
procedure: address,
|
|
128
|
+
evidence_id: evidenceId,
|
|
129
|
+
kind: "parameter",
|
|
130
|
+
operation: null,
|
|
131
|
+
parameter,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
for (const use of flow.parameter_uses) {
|
|
135
|
+
if (!ids.has(use.use) ||
|
|
136
|
+
!nodes.some((node) => node.id === `${address}/parameter:${use.ordinal}`))
|
|
137
|
+
continue;
|
|
138
|
+
if (edges.length >= input.max_edges) {
|
|
139
|
+
truncated = true;
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
edges.push({
|
|
143
|
+
source: `${address}/parameter:${use.ordinal}`,
|
|
144
|
+
target: qualified(use.use),
|
|
145
|
+
input_index: use.input_index,
|
|
146
|
+
kind: "parameter-use",
|
|
147
|
+
status: "derived",
|
|
148
|
+
evidence_id: evidenceId,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
for (const edge of flow.def_use) {
|
|
152
|
+
if (!ids.has(edge.definition) || !ids.has(edge.use))
|
|
153
|
+
continue;
|
|
154
|
+
if (edges.length >= input.max_edges) {
|
|
155
|
+
truncated = true;
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
edges.push({
|
|
159
|
+
source: qualified(edge.definition),
|
|
160
|
+
target: qualified(edge.use),
|
|
161
|
+
input_index: edge.input_index,
|
|
162
|
+
kind: "def-use",
|
|
163
|
+
status: "derived",
|
|
164
|
+
evidence_id: evidenceId,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
for (const operation of flow.operations) {
|
|
168
|
+
if (!ids.has(operation.id) ||
|
|
169
|
+
!["CALL", "CALLIND"].includes(operation.opcode))
|
|
170
|
+
continue;
|
|
171
|
+
if (callSites >= input.max_call_sites) {
|
|
172
|
+
truncated = true;
|
|
173
|
+
unknowns.push({
|
|
174
|
+
procedure: address,
|
|
175
|
+
address: operation.address,
|
|
176
|
+
reason: "Call-site resolution budget reached",
|
|
177
|
+
});
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
callSites++;
|
|
181
|
+
const resolved = await analysis.execute("resolve_native_call_targets", { address: operation.address }, signal === undefined ? {} : { signal });
|
|
182
|
+
if (!resolved.ok) {
|
|
183
|
+
if (resolved.error._tag === "AnalysisCancelledError")
|
|
184
|
+
return err(resolved.error);
|
|
185
|
+
unknowns.push({
|
|
186
|
+
procedure: address,
|
|
187
|
+
address: operation.address,
|
|
188
|
+
reason: resolved.error.message,
|
|
189
|
+
});
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
const targets = nativeCallTargetsSchema.safeParse(resolved.value.result);
|
|
193
|
+
if (!targets.success)
|
|
194
|
+
return err(new AnalysisOutputError("resolve_native_call_targets", "Invalid static call resolution"));
|
|
195
|
+
if (targets.data.targets.length === 0)
|
|
196
|
+
unknowns.push({
|
|
197
|
+
procedure: address,
|
|
198
|
+
address: operation.address,
|
|
199
|
+
reason: `Call target ${targets.data.status}`,
|
|
200
|
+
});
|
|
201
|
+
for (const target of targets.data.targets) {
|
|
202
|
+
if (edges.length >= input.max_edges) {
|
|
203
|
+
truncated = true;
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
const destination = target.procedure ?? target.address;
|
|
207
|
+
edges.push({
|
|
208
|
+
source: qualified(operation.id),
|
|
209
|
+
target: destination,
|
|
210
|
+
input_index: null,
|
|
211
|
+
kind: "call",
|
|
212
|
+
status: target.status,
|
|
213
|
+
evidence_id: evidenceId,
|
|
214
|
+
});
|
|
215
|
+
if (target.status !== "candidate")
|
|
216
|
+
callBindings.push({
|
|
217
|
+
caller: address,
|
|
218
|
+
callee: destination,
|
|
219
|
+
call: qualified(operation.id),
|
|
220
|
+
argument_count: Math.max(0, operation.inputs.length - 1),
|
|
221
|
+
output: operation.output !== null,
|
|
222
|
+
evidence_id: evidenceId,
|
|
223
|
+
});
|
|
224
|
+
if (next.depth < input.max_depth && target.status !== "candidate")
|
|
225
|
+
pending.push({ procedure: destination, depth: next.depth + 1 });
|
|
226
|
+
else if (!visited.has(destination)) {
|
|
227
|
+
truncated = true;
|
|
228
|
+
unknowns.push({
|
|
229
|
+
procedure: address,
|
|
230
|
+
address: operation.address,
|
|
231
|
+
reason: target.status === "candidate"
|
|
232
|
+
? "Ambiguous call candidates were not traversed"
|
|
233
|
+
: "Call depth budget reached",
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
if (truncated &&
|
|
239
|
+
(nodes.length >= input.max_nodes ||
|
|
240
|
+
edges.length >= input.max_edges ||
|
|
241
|
+
bytes >= 8 * 1024 * 1024))
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
if (targetSha256 === undefined)
|
|
245
|
+
return err(new AnalysisOutputError("trace_native_values", "No seed function could be analyzed"));
|
|
246
|
+
for (const binding of callBindings) {
|
|
247
|
+
const parameters = nodes.filter((node) => node.procedure === binding.callee && node.kind === "parameter");
|
|
248
|
+
if (parameters.length === 0)
|
|
249
|
+
unknowns.push({
|
|
250
|
+
procedure: binding.caller,
|
|
251
|
+
address: null,
|
|
252
|
+
reason: `Parameter bindings for ${binding.callee} are unavailable or omitted`,
|
|
253
|
+
});
|
|
254
|
+
for (const node of parameters) {
|
|
255
|
+
const ordinal = node.parameter?.ordinal;
|
|
256
|
+
if (ordinal === undefined || ordinal >= binding.argument_count) {
|
|
257
|
+
unknowns.push({
|
|
258
|
+
procedure: binding.caller,
|
|
259
|
+
address: null,
|
|
260
|
+
reason: `Argument ${ordinal ?? "unknown"} for ${binding.callee} was not recovered`,
|
|
261
|
+
});
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
if (edges.length >= input.max_edges) {
|
|
265
|
+
truncated = true;
|
|
266
|
+
break;
|
|
267
|
+
}
|
|
268
|
+
edges.push({
|
|
269
|
+
source: binding.call,
|
|
270
|
+
target: node.id,
|
|
271
|
+
input_index: ordinal + 1,
|
|
272
|
+
kind: "argument-binding",
|
|
273
|
+
status: "derived",
|
|
274
|
+
evidence_id: binding.evidence_id,
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
if (binding.output)
|
|
278
|
+
for (const node of nodes.filter((node) => node.procedure === binding.callee &&
|
|
279
|
+
node.operation?.opcode === "RETURN" &&
|
|
280
|
+
node.operation.inputs.length > 1)) {
|
|
281
|
+
if (edges.length >= input.max_edges) {
|
|
282
|
+
truncated = true;
|
|
283
|
+
break;
|
|
284
|
+
}
|
|
285
|
+
edges.push({
|
|
286
|
+
source: node.id,
|
|
287
|
+
target: binding.call,
|
|
288
|
+
input_index: 1,
|
|
289
|
+
kind: "return-binding",
|
|
290
|
+
status: "derived",
|
|
291
|
+
evidence_id: node.evidence_id,
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
const page = nodes.slice(input.offset, input.offset + input.limit);
|
|
296
|
+
const pageIds = new Set(page.map(({ id }) => id));
|
|
297
|
+
const result = nativeValueTraceSchema.parse({
|
|
298
|
+
seed: input.procedure,
|
|
299
|
+
target_sha256: targetSha256,
|
|
300
|
+
nodes: page,
|
|
301
|
+
edges: edges.filter(({ source }) => pageIds.has(source)),
|
|
302
|
+
procedures,
|
|
303
|
+
unknowns,
|
|
304
|
+
total_nodes: nodes.length,
|
|
305
|
+
total_edges: edges.length,
|
|
306
|
+
decompilations,
|
|
307
|
+
next_offset: input.offset + page.length < nodes.length
|
|
308
|
+
? input.offset + page.length
|
|
309
|
+
: null,
|
|
310
|
+
truncated: truncated || page.length !== nodes.length,
|
|
311
|
+
limitations: [
|
|
312
|
+
"Static decompiler def-use graphs cover recovered block members; when membership is unavailable they exclude operations marked dead. Logical CALL argument positions bind to recovered HighParam ordinals and RETURN values bind to recovered CALL outputs; these are decompiler-derived dependencies, not original source or runtime observations. Missing parameters, variadic arguments and alias dependencies remain unknown.",
|
|
313
|
+
"LOAD and STORE are memory operations; object fields, persistent state and RNG semantics are not inferred from names or pseudocode.",
|
|
314
|
+
"Traversal caps depth, decompilations, call-site resolutions, nodes, edges and node payloads (8 MiB). Complete serialized output is bounded to 32 MiB. Pagination reruns analysis and returns edges whose source is on the node page; endpoints outside the page retain stable identities.",
|
|
315
|
+
],
|
|
316
|
+
});
|
|
317
|
+
if (Buffer.byteLength(JSON.stringify(result)) > 32 * 1024 * 1024)
|
|
318
|
+
return err(new AnalysisOutputError("trace_native_values", "Graph output exceeds 32 MiB; lower max_nodes, max_edges or page limit"));
|
|
319
|
+
return ok(result);
|
|
320
|
+
};
|
|
@@ -1,9 +1,36 @@
|
|
|
1
1
|
import { tmpdir } from "node:os";
|
|
2
|
+
/** Explain why process capture cannot claim owned-process cleanup on a host. */
|
|
3
|
+
export const processCaptureOwnershipUnavailableReason = (platform) => platform === "win32"
|
|
4
|
+
? "Windows process-tree ownership and cleanup are unavailable; REA cannot verify that descendants have stopped."
|
|
5
|
+
: undefined;
|
|
6
|
+
/** Probe the native PTY seam and explain loader failures at their source. */
|
|
7
|
+
export const processCaptureProbeFailureReason = (cause) => {
|
|
8
|
+
const error = cause instanceof Error ? cause : new Error(String(cause));
|
|
9
|
+
const code = "code" in error ? String(error.code) : "";
|
|
10
|
+
const diagnostic = error.message;
|
|
11
|
+
if (code === "ERR_MODULE_NOT_FOUND" ||
|
|
12
|
+
code === "MODULE_NOT_FOUND" ||
|
|
13
|
+
/cannot find module|cannot find package/iu.test(diagnostic))
|
|
14
|
+
return `the native PTY module is missing (${diagnostic}); reinstall REA for this host with optional dependencies enabled (for a source checkout, run npm ci)`;
|
|
15
|
+
if (/NODE_MODULE_VERSION|compiled against a different Node\.js version|module version mismatch/iu.test(diagnostic))
|
|
16
|
+
return `the native PTY module is incompatible with this Node.js runtime (${diagnostic}); reinstall REA for this host and active Node.js version with optional dependencies enabled (for a source checkout, run npm ci after selecting that Node.js version)`;
|
|
17
|
+
if (code === "ERR_DLOPEN_FAILED")
|
|
18
|
+
return `the native PTY library failed to load (${diagnostic}); check the loader error, then reinstall REA for this host with optional dependencies enabled (for a source checkout, run npm ci)`;
|
|
19
|
+
return `the native PTY probe failed (${diagnostic}); check the reported operating-system or process-startup error and reinstall REA for this host with optional dependencies enabled if the native binary is missing`;
|
|
20
|
+
};
|
|
2
21
|
/** Probe the actual native PTY seam instead of inferring support from the OS name. */
|
|
3
|
-
export const probeProcessCaptureCapability = async () => {
|
|
22
|
+
export const probeProcessCaptureCapability = async (options = {}) => {
|
|
23
|
+
const platform = options.platform ?? process.platform;
|
|
24
|
+
const ownershipReason = processCaptureOwnershipUnavailableReason(platform);
|
|
25
|
+
if (ownershipReason !== undefined)
|
|
26
|
+
return {
|
|
27
|
+
available: false,
|
|
28
|
+
backend: "node-pty",
|
|
29
|
+
reason: ownershipReason,
|
|
30
|
+
};
|
|
4
31
|
try {
|
|
5
|
-
const { spawn } = await import("@lydell/node-pty");
|
|
6
|
-
const terminal = spawn(
|
|
32
|
+
const { spawn } = await (options.loadPty ?? (() => import("@lydell/node-pty")))();
|
|
33
|
+
const terminal = spawn(platform === "win32" ? "cmd.exe" : "/bin/sh", platform === "win32" ? ["/c", "exit", "0"] : ["-c", "exit 0"], {
|
|
7
34
|
cwd: tmpdir(),
|
|
8
35
|
env: { HOME: tmpdir(), TERM: "xterm-256color" },
|
|
9
36
|
cols: 80,
|
|
@@ -13,11 +40,11 @@ export const probeProcessCaptureCapability = async () => {
|
|
|
13
40
|
await new Promise((resolveExit) => terminal.onExit(() => resolveExit()));
|
|
14
41
|
return { available: true, backend: "node-pty" };
|
|
15
42
|
}
|
|
16
|
-
catch {
|
|
43
|
+
catch (cause) {
|
|
17
44
|
return {
|
|
18
45
|
available: false,
|
|
19
46
|
backend: "node-pty",
|
|
20
|
-
reason:
|
|
47
|
+
reason: processCaptureProbeFailureReason(cause),
|
|
21
48
|
};
|
|
22
49
|
}
|
|
23
50
|
};
|
|
@@ -1,26 +1,9 @@
|
|
|
1
|
-
/** Build the
|
|
2
|
-
export const makeProcessCaptureEnvironment = (options) => {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
for (const name of scenario.inherit_environment) {
|
|
11
|
-
const value = process.env[name];
|
|
12
|
-
if (value !== undefined)
|
|
13
|
-
environment[name] = value;
|
|
14
|
-
}
|
|
15
|
-
environment.REA_REPLAY_HTTP_URL = replay.httpUrl;
|
|
16
|
-
environment.REA_REPLAY_WEBSOCKET_URL = replay.websocketUrl;
|
|
17
|
-
environment.REA_SHIM_LEDGER_URL = shimReplay.url;
|
|
18
|
-
// PATH is evidence-producing input. Inheriting the host PATH here would let
|
|
19
|
-
// the authority and reconstruction probe different tools without recording
|
|
20
|
-
// that difference. Scenarios must opt in through environment or
|
|
21
|
-
// inherit_environment; deterministic shims always take precedence.
|
|
22
|
-
environment.PATH = [shimReplay.binPath, environment.PATH ?? ""]
|
|
23
|
-
.filter((part) => part.length > 0)
|
|
24
|
-
.join(":");
|
|
25
|
-
return environment;
|
|
26
|
-
};
|
|
1
|
+
/** Build the child environment from the host plus caller-selected overrides. */
|
|
2
|
+
export const makeProcessCaptureEnvironment = (options) => ({
|
|
3
|
+
...Object.fromEntries(Object.entries(options.hostEnvironment).filter((entry) => entry[1] !== undefined)),
|
|
4
|
+
...options.scenario.environment,
|
|
5
|
+
TERM: options.scenario.environment.TERM ??
|
|
6
|
+
options.hostEnvironment.TERM ??
|
|
7
|
+
"xterm-256color",
|
|
8
|
+
REA_PROCESS_RUN_ID: options.runId,
|
|
9
|
+
});
|
|
@@ -13,11 +13,7 @@ export class ProcessCaptureError extends AnalysisError {
|
|
|
13
13
|
this.userCategory = options?.userCategory;
|
|
14
14
|
this.reason =
|
|
15
15
|
options?.reason ??
|
|
16
|
-
(options?.userCategory === "
|
|
17
|
-
? "permission_required"
|
|
18
|
-
: options?.userCategory === "cancelled"
|
|
19
|
-
? "cancelled"
|
|
20
|
-
: "capture_failed");
|
|
16
|
+
(options?.userCategory === "cancelled" ? "cancelled" : "capture_failed");
|
|
21
17
|
this.cleanupIncomplete = this.reason === "cleanup_incomplete";
|
|
22
18
|
this.cleanupResources = options?.cleanupResources ?? [];
|
|
23
19
|
}
|
|
@@ -3,49 +3,12 @@ import { scheduleProcessDelay } from "./ProcessTimer.js";
|
|
|
3
3
|
/** Create one monotonic event journal for a process capture. */
|
|
4
4
|
export const createProcessCaptureJournal = () => {
|
|
5
5
|
const entries = [];
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
let delivering = false;
|
|
9
|
-
const deliverNotifications = () => {
|
|
10
|
-
if (delivering)
|
|
11
|
-
return;
|
|
12
|
-
delivering = true;
|
|
13
|
-
const failures = [];
|
|
14
|
-
try {
|
|
15
|
-
for (;;) {
|
|
16
|
-
const notification = notifications.shift();
|
|
17
|
-
if (notification === undefined)
|
|
18
|
-
break;
|
|
19
|
-
for (const listener of Array.from(listeners))
|
|
20
|
-
try {
|
|
21
|
-
listener(notification);
|
|
22
|
-
}
|
|
23
|
-
catch (cause) {
|
|
24
|
-
failures.push(cause);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
finally {
|
|
29
|
-
delivering = false;
|
|
30
|
-
}
|
|
31
|
-
if (failures.length > 0)
|
|
32
|
-
throw new AggregateError(failures, "process capture journal subscriber failed");
|
|
33
|
-
};
|
|
34
|
-
const record = (collection, index) => {
|
|
35
|
-
const entry = { capture_order: entries.length, collection, index };
|
|
36
|
-
entries.push(entry);
|
|
37
|
-
notifications.push(entry);
|
|
38
|
-
deliverNotifications();
|
|
39
|
-
return entry;
|
|
6
|
+
const recordEvent = (collection, index) => {
|
|
7
|
+
entries.push({ capture_order: entries.length, collection, index });
|
|
40
8
|
};
|
|
41
9
|
return {
|
|
42
10
|
entries,
|
|
43
|
-
|
|
44
|
-
recordEvent: (collection, index) => void record(collection, index),
|
|
45
|
-
subscribe: (listener) => {
|
|
46
|
-
listeners.add(listener);
|
|
47
|
-
return () => listeners.delete(listener);
|
|
48
|
-
},
|
|
11
|
+
recordEvent,
|
|
49
12
|
};
|
|
50
13
|
};
|
|
51
14
|
/** Schedule scenario interactions and record each observed dispatch atomically. */
|