rea-agents 3.1.0 → 3.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 +72 -95
- package/bridge/ghidra/ReaGhidraBridge.java +609 -841
- package/bridge/hopper_bridge.py +99 -344
- package/dist/application/AbortablePromise.js +6 -3
- package/dist/application/AnalysisSnapshotCache.js +0 -1
- package/dist/application/AnalysisSnapshotFiles.js +7 -7
- package/dist/application/AndroidApplicationService.js +1 -1
- package/dist/application/AppleApplicationService.js +1 -1
- package/dist/application/ArtifactExtraction.js +35 -54
- package/dist/application/ArtifactExtractionDestination.js +17 -0
- package/dist/application/ArtifactGraphConstruction.js +2 -17
- package/dist/application/ArtifactInventory/classify.js +2 -6
- package/dist/application/ArtifactInventory/hash.js +2 -20
- package/dist/application/ArtifactInventory/scanCanonical.js +8 -12
- package/dist/application/ArtifactInventory/scanReader.js +69 -51
- package/dist/application/ArtifactInventory.js +6 -14
- package/dist/application/AuthorizedArtifactInventory.js +3 -13
- package/dist/application/BinarySession.js +41 -13
- package/dist/application/BinarySessionComposition.js +0 -11
- package/dist/application/BinarySessionOpen.js +2 -1
- package/dist/application/BinarySessionRecords.js +5 -93
- package/dist/application/BinarySessionStatus.js +5 -16
- package/dist/application/BinaryTargetResolver.js +216 -0
- package/dist/application/BrowserEvidence.js +42 -58
- package/dist/application/BrowserObservationService.js +3 -6
- package/dist/application/BrowserScenarioCaptureService.js +3 -6
- package/dist/application/BrowserScenarioEvidence.js +3 -3
- package/dist/application/CallPathTracing.js +2 -36
- package/dist/application/CapabilityInventory.js +10 -15
- package/dist/application/ClientConfigurationDocument.js +27 -0
- package/dist/application/ClientRegistrationStatus.js +16 -13
- package/dist/application/CommandShimReplay.js +14 -1
- package/dist/application/DirectAnalysis.js +22 -46
- package/dist/application/DirectAnalysisStatus.js +5 -61
- package/dist/application/Doctor.js +11 -32
- package/dist/application/DoctorDiagnostics.js +1 -2
- package/dist/application/DoctorScope.js +1 -1
- package/dist/application/ElectronActiveEvidence.js +3 -8
- package/dist/application/ElectronActiveObservationService.js +3 -6
- package/dist/application/ElectronBoundaryAnalysis.js +7 -8
- package/dist/application/ElectronBoundaryGraphContext.js +1 -1
- package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
- package/dist/application/ElectronBoundaryGraphNative.js +1 -2
- package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
- package/dist/application/ElectronEvidence.js +4 -7
- package/dist/application/ElectronObservationService.js +5 -9
- package/dist/application/EnhancedLiteralTracing.js +42 -65
- package/dist/application/EnhancedTools.js +76 -44
- package/dist/application/EvidenceBundleCommands.js +11 -11
- package/dist/application/EvidenceBundleFiles.js +9 -15
- package/dist/application/EvidenceLedger.js +6 -41
- package/dist/application/FilesystemSnapshot.js +2 -3
- package/dist/application/InterfaceBuilderAnalysis.js +266 -0
- package/dist/application/InventoryProjectionEvidence.js +4 -2
- package/dist/application/InvestigationProviders.js +1 -1
- package/dist/application/JavaScriptApplicationEvidence.js +2 -5
- package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
- package/dist/application/JavaScriptApplicationService.js +6 -29
- package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
- package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
- package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
- package/dist/application/JavaScriptArtifactFiles.js +67 -107
- package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
- package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
- package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
- package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
- package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
- package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
- package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
- package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
- package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
- package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
- package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
- package/dist/application/JavaScriptJsonModules.js +2 -2
- package/dist/application/JavaScriptModuleRelationships.js +22 -27
- package/dist/application/JavaScriptReplayPlanning.js +9 -3
- package/dist/application/JavaScriptReplayService.js +6 -32
- package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
- package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
- package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
- package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
- package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
- package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
- package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
- package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
- package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
- package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
- package/dist/application/JavaScriptSemanticTraceService.js +1 -10
- package/dist/application/JsonFiles.js +79 -0
- package/dist/application/LinuxHopper.js +11 -9
- package/dist/application/LoopbackReplay.js +26 -23
- package/dist/application/LoopbackReplayRecorder.js +29 -1
- package/dist/application/ManagedApplicationGraphService.js +1 -2
- package/dist/application/ManagedMemberComparisonService.js +11 -41
- package/dist/application/ManagedNativeVerificationService.js +1 -2
- package/dist/application/ManagedReconstructionService.js +1 -1
- package/dist/application/ManagedRuntimeCorrelationService.js +5 -8
- package/dist/application/NativeApiInspection.js +2 -7
- package/dist/application/NativeUiActionTrace.js +394 -0
- package/dist/application/NodeRuntimeCharacterizationService.js +3 -7
- package/dist/application/PermissionAuthority.js +15 -7
- package/dist/application/PermissionFailure.js +5 -0
- package/dist/application/ProcessCaptureAuthority.js +5 -7
- package/dist/application/ProcessCaptureJournal.js +3 -2
- package/dist/application/ProcessCaptureLifecycle.js +5 -12
- package/dist/application/ProcessCheckpoints.js +29 -11
- package/dist/application/ProcessCli.js +6 -16
- package/dist/application/ProcessEvidence.js +5 -7
- package/dist/application/ProcessHarness.js +52 -17
- package/dist/application/ProcessReactiveCoordinator.js +2 -4
- package/dist/application/ProcessReactiveEffects.js +9 -3
- package/dist/application/ProcessReactiveHarness.js +13 -7
- package/dist/application/ProcessSampling.js +2 -4
- package/dist/application/ProcessTimer.js +39 -0
- package/dist/application/ProjectPermissionStore.js +39 -96
- package/dist/application/RealHopperAssertions.js +20 -66
- package/dist/application/ReconstructionCoverageService.js +12 -58
- package/dist/application/ReconstructionObligationAuthority.js +2 -2
- package/dist/application/ReconstructionObligationCandidates.js +4 -4
- package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
- package/dist/application/ReconstructionObligationLedgerService.js +19 -38
- package/dist/application/ReferenceSourceImport.js +19 -45
- package/dist/application/ReferenceSourceImportEntries.js +2 -4
- package/dist/application/ReferenceSourceImportPolicy.js +5 -32
- package/dist/application/ReferenceSourceImportTypes.js +0 -16
- package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
- package/dist/application/SessionProviderRouter.js +2 -2
- package/dist/application/Setup.js +1 -3
- package/dist/application/SetupClientConfiguration.js +22 -93
- package/dist/application/SetupRegistrationEnvironment.js +0 -7
- package/dist/application/StoreFileLock.js +119 -0
- package/dist/application/TerminalRenderer.js +2 -3
- package/dist/application/Uninstall.js +9 -14
- package/dist/application/UnknownEvidence.js +1 -1
- package/dist/artifacts/ArtifactPaths.js +2 -5
- package/dist/artifacts/ArtifactProvider.js +36 -58
- package/dist/artifacts/DirectoryArtifactReader.js +13 -8
- package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
- package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
- package/dist/artifacts/NibArchive.js +269 -0
- package/dist/artifacts/SafeOutputTree.js +15 -24
- package/dist/browser/BrowserProcessStartup.js +1 -2
- package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
- package/dist/browser/CdpBrowserProvider.js +3 -13
- package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
- package/dist/browser/CdpCaptureDocuments.js +28 -76
- package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
- package/dist/browser/CdpCaptureEventHandlers.js +22 -87
- package/dist/browser/CdpCaptureEvents.js +2 -8
- package/dist/browser/CdpCaptureStorage.js +9 -20
- package/dist/browser/CdpCaptureStorageFingerprints.js +85 -98
- package/dist/browser/CdpCaptureValues.js +21 -21
- package/dist/browser/CdpConnection.js +10 -25
- package/dist/browser/CdpElectronInspection.js +26 -50
- package/dist/browser/CdpElectronProvider.js +10 -35
- package/dist/browser/CdpElectronScriptEvents.js +8 -16
- package/dist/browser/CdpElectronScripts.js +6 -35
- package/dist/browser/CdpElectronWorkers.js +6 -10
- package/dist/browser/CdpEndpoint.js +25 -41
- package/dist/browser/CdpObservationSession.js +14 -26
- package/dist/browser/CdpPageCapture.js +34 -48
- package/dist/browser/CdpPageCaptureScripts.js +1 -19
- package/dist/browser/CdpPageCaptureWorkers.js +6 -10
- package/dist/browser/CdpSafeMetadata.js +19 -22
- package/dist/browser/CdpScreenshot.js +3 -5
- package/dist/browser/CdpTargetSession.js +1 -2
- package/dist/browser/CdpWebMcpDiscovery.js +13 -22
- package/dist/browser/ElectronFileScope.js +8 -19
- package/dist/browser/JavaScriptRuntimeScope.js +9 -14
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
- package/dist/browser/PlaywrightElectronActiveActions.js +54 -69
- package/dist/browser/PlaywrightElectronActiveProvider.js +14 -34
- package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
- package/dist/browser/PlaywrightScenarioActions.js +3 -7
- package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
- package/dist/browser/PlaywrightScenarioBrowser.js +3 -5
- package/dist/browser/PlaywrightScenarioEvents.js +45 -94
- package/dist/browser/PlaywrightScenarioSession.js +14 -30
- package/dist/browser/PngVisualDiff.js +22 -14
- package/dist/browser/SensitiveTextCapture.js +0 -17
- package/dist/browser/V8InspectorCaptureProjection.js +7 -8
- package/dist/browser/V8InspectorEndpoint.js +12 -14
- package/dist/browser/V8InspectorProvider.js +20 -61
- package/dist/browser/WebSourceMapFetcher.js +56 -176
- package/dist/catalogIdentity.js +0 -54
- package/dist/cli/artifactCommands.js +49 -77
- package/dist/cli/coreAnalysisCommands.js +83 -133
- package/dist/cli/javascriptApplicationAnalysis.js +1 -9
- package/dist/cli/managedCommands.js +5 -270
- package/dist/cli/setupCommands.js +3 -12
- package/dist/cli/utilityCommands.js +7 -41
- package/dist/cli.js +0 -2
- package/dist/cliApplicationCommands.js +42 -112
- package/dist/cliBrowserAdvancedCommands.js +10 -106
- package/dist/cliBrowserCommands.js +15 -127
- package/dist/cliBrowserContext.js +30 -0
- package/dist/cliCommandNames.js +4 -5
- package/dist/cliElectronCommands.js +8 -72
- package/dist/cliEvidenceCommands.js +8 -77
- package/dist/cliJavaScriptRuntimeCommands.js +9 -91
- package/dist/cliJsonInput.js +4 -14
- package/dist/cliObservationOptions.js +11 -96
- package/dist/cliPolicyCommands.js +2 -17
- package/dist/cliProcessCommands.js +3 -3
- package/dist/cliSetup.js +0 -13
- package/dist/config/browserScenario.js +2 -2
- package/dist/config/environment.js +0 -9
- package/dist/config/parseConfig.js +1 -33
- package/dist/config/parsers.js +6 -27
- package/dist/config/passiveObservation.js +7 -77
- package/dist/config/permissions.js +0 -7
- package/dist/contracts/analysisSearchContract.js +2 -5
- package/dist/contracts/applicationToolContracts.js +56 -109
- package/dist/contracts/applicationWorkflowInputContracts.js +27 -102
- package/dist/contracts/artifactComparisonExample.js +58 -60
- package/dist/contracts/artifactToolContracts.js +20 -67
- package/dist/contracts/browserScenarioToolContracts.js +6 -51
- package/dist/contracts/browserToolContracts.js +8 -73
- package/dist/contracts/electronToolContracts.js +8 -108
- package/dist/contracts/enhancedInputs.js +23 -54
- package/dist/contracts/errorSchemas.js +0 -1
- package/dist/contracts/functionComparisonExample.js +10 -24
- package/dist/contracts/functionInstructionContract.js +1 -3
- package/dist/contracts/functionWorkflowToolContracts.js +2 -2
- package/dist/contracts/hopperMemoryContracts.js +3 -3
- package/dist/contracts/investigationExamples.js +14 -11
- package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
- package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
- package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
- package/dist/contracts/managedToolContracts.js +6 -95
- package/dist/contracts/managedWorkflowExamples.js +77 -128
- package/dist/contracts/managedWorkflowToolContracts.js +51 -77
- package/dist/contracts/nativeToolContracts.js +7 -11
- package/dist/contracts/processCaptureExample.js +2 -69
- package/dist/contracts/promptContracts.js +49 -67
- package/dist/contracts/providerSelection.js +0 -1
- package/dist/contracts/reconstructionReadinessExample.js +1 -6
- package/dist/contracts/sessionStatusContract.js +1 -17
- package/dist/contracts/sessionToolSchemas.js +6 -15
- package/dist/contracts/toolContractExamples.js +11 -11
- package/dist/contracts/toolContractHelpers.js +0 -4
- package/dist/contracts/toolContracts.js +60 -71
- package/dist/contracts/toolEffects.js +5 -13
- package/dist/contracts/toolOutputSchemaGroups.js +37 -91
- package/dist/contracts/toolOutputSchemaPrimitives.js +16 -56
- package/dist/contracts/toolSchemaMetadata.js +8 -19
- package/dist/contracts/unknownContractExamples.js +0 -2
- package/dist/domain/analysisErrorPresentation.js +46 -54
- package/dist/domain/analysisErrorProjection.js +28 -37
- package/dist/domain/analysisProfile.js +3 -31
- package/dist/domain/analysisSnapshot.js +3 -12
- package/dist/domain/androidApplication.js +15 -54
- package/dist/domain/appleApplication.js +24 -67
- package/dist/domain/artifactComparison.js +11 -29
- package/dist/domain/artifactGraph.js +14 -44
- package/dist/domain/artifactInspection.js +38 -69
- package/dist/domain/artifactInventoryEvidence.js +27 -21
- package/dist/domain/binaryTarget.js +2 -221
- package/dist/domain/browserCaptureComparison.js +47 -24
- package/dist/domain/browserObservation.js +28 -193
- package/dist/domain/browserObservationSchemas.js +5 -23
- package/dist/domain/browserScenario.js +11 -14
- package/dist/domain/browserScenarioCapture.js +11 -12
- package/dist/domain/browserScenarioCaptureValues.js +146 -84
- package/dist/domain/browserScenarioDiff.js +2 -59
- package/dist/domain/browserScenarioDiffEvidence.js +51 -0
- package/dist/domain/browserScenarioDiffValues.js +21 -38
- package/dist/domain/browserScenarioValues.js +80 -109
- package/dist/domain/browserSession.js +4 -7
- package/dist/domain/bundleComparison.js +6 -32
- package/dist/domain/bytecodeProvider.js +20 -19
- package/dist/domain/callPath.js +47 -167
- package/dist/domain/callPathSchemas.js +79 -0
- package/dist/domain/changedBehavior.js +34 -60
- package/dist/domain/completionLedgerGeneration.js +8 -14
- package/dist/domain/conformancePackage.js +126 -97
- package/dist/domain/conformanceReplay.js +36 -8
- package/dist/domain/conformanceTrustGate.js +23 -14
- package/dist/domain/customProtocolCapture.js +1 -1
- package/dist/domain/electronActiveObservation.js +70 -103
- package/dist/domain/electronObservation.js +14 -80
- package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
- package/dist/domain/electronStaticAnalysisIpc.js +38 -14
- package/dist/domain/electronStaticAnalysisNative.js +1 -8
- package/dist/domain/electronStaticAnalysisValues.js +10 -17
- package/dist/domain/errors.js +33 -54
- package/dist/domain/eventProcessTree.js +20 -12
- package/dist/domain/evidence.js +2 -10
- package/dist/domain/evidenceBundle.js +3 -5
- package/dist/domain/evidenceCompletionLedger.js +6 -8
- package/dist/domain/functionComparison.js +4 -14
- package/dist/domain/functionComparisonNormalization.js +4 -11
- package/dist/domain/functionComparisonResults.js +25 -15
- package/dist/domain/functionComparisonSchemas.js +49 -33
- package/dist/domain/functionDossierEvidence.js +31 -156
- package/dist/domain/hopperStartupFailure.js +1 -1
- package/dist/domain/hopperValues.js +15 -136
- package/dist/domain/interfaceBuilderGraph.js +654 -0
- package/dist/domain/javascriptApplicationAnalysis.js +8 -112
- package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
- package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
- package/dist/domain/javascriptApplicationGraph.js +3 -13
- package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
- package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
- package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
- package/dist/domain/javascriptApplicationVersionItems.js +120 -53
- package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
- package/dist/domain/javascriptAstFingerprint.js +25 -58
- package/dist/domain/javascriptAstValues.js +9 -0
- package/dist/domain/javascriptExportInstrumentation.js +2 -4
- package/dist/domain/javascriptExportShapeComparison.js +6 -7
- package/dist/domain/javascriptExportShapeComparisonSchemas.js +68 -75
- package/dist/domain/javascriptExportShapeSelection.js +17 -19
- package/dist/domain/javascriptFeatureSeed.js +20 -12
- package/dist/domain/javascriptFeatureTrace.js +13 -67
- package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
- package/dist/domain/javascriptFeatureTraversal.js +1 -44
- package/dist/domain/javascriptNativeHandoff.js +1 -1
- package/dist/domain/javascriptReplay.js +24 -41
- package/dist/domain/javascriptRuntimeLoadState.js +3 -8
- package/dist/domain/javascriptRuntimeObservation.js +42 -103
- package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
- package/dist/domain/javascriptRuntimeReconciliationActive.js +8 -17
- package/dist/domain/javascriptRuntimeReconciliationGraph.js +10 -23
- package/dist/domain/javascriptRuntimeReconciliationMatching.js +18 -12
- package/dist/domain/javascriptRuntimeReconciliationParsing.js +16 -45
- package/dist/domain/javascriptRuntimeReconciliationResult.js +4 -5
- package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
- package/dist/domain/javascriptRuntimeReconciliationSchemas.js +33 -48
- package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
- package/dist/domain/javascriptSemanticAnalysis.js +12 -45
- package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
- package/dist/domain/javascriptSemanticCallResolution.js +6 -16
- package/dist/domain/javascriptSemanticCalls.js +5 -32
- package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
- package/dist/domain/javascriptSemanticCoverage.js +11 -0
- package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
- package/dist/domain/javascriptSemanticDataEffects.js +1 -11
- package/dist/domain/javascriptSemanticFingerprints.js +3 -5
- package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
- package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
- package/dist/domain/javascriptSemanticIr.js +1 -29
- package/dist/domain/javascriptSemanticObjects.js +1 -5
- package/dist/domain/javascriptSemanticPrimitives.js +2 -9
- package/dist/domain/javascriptSemanticProjection.js +0 -18
- package/dist/domain/javascriptSemanticPromises.js +9 -16
- package/dist/domain/javascriptSemanticProvenance.js +16 -19
- package/dist/domain/javascriptSemanticQuery.js +17 -139
- package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
- package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
- package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
- package/dist/domain/javascriptSemanticResources.js +1 -6
- package/dist/domain/javascriptSemanticReturns.js +10 -27
- package/dist/domain/javascriptSemanticValueTypes.js +1 -0
- package/dist/domain/javascriptSemanticValues.js +44 -62
- package/dist/domain/javascriptStaticAnalysis.js +21 -43
- package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
- package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
- package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
- package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
- package/dist/domain/javascriptStaticAnalysisState.js +1 -5
- package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
- package/dist/domain/jsonShape.js +7 -33
- package/dist/domain/localPath.js +7 -0
- package/dist/domain/managedApplicationGraph.js +9 -41
- package/dist/domain/managedApplicationGraphCoverage.js +24 -156
- package/dist/domain/managedApplicationGraphNodes.js +10 -13
- package/dist/domain/managedArtifact.js +14 -27
- package/dist/domain/managedMemberComparison.js +90 -92
- package/dist/domain/managedMemberComparisonCoverage.js +11 -33
- package/dist/domain/managedMemberComparisonItems.js +221 -0
- package/dist/domain/managedMemberComparisonMatch.js +8 -208
- package/dist/domain/managedNativeVerification.js +3 -6
- package/dist/domain/managedNativeVerificationMatch.js +55 -59
- package/dist/domain/managedNativeVerificationSchemas.js +83 -47
- package/dist/domain/managedReconstruction.js +19 -23
- package/dist/domain/managedRuntimeCorrelation.js +6 -9
- package/dist/domain/nativeApiBoundary.js +2 -7
- package/dist/domain/nativeInspection.js +0 -2
- package/dist/domain/nativeInvestigationGraph.js +351 -0
- package/dist/domain/nativeValueFlow.js +61 -0
- package/dist/domain/nodeRuntimeCharacterization.js +1 -5
- package/dist/domain/objcSwiftMetadata.js +254 -0
- package/dist/domain/peInspection.js +1 -1
- package/dist/domain/permissionPolicy.js +13 -0
- package/dist/domain/processCapture.js +76 -113
- package/dist/domain/processCaptureExample.js +68 -0
- package/dist/domain/processCaptureParsing.js +21 -0
- package/dist/domain/processCaptureReactiveSchema.js +68 -0
- package/dist/domain/processCaptureValidation.js +1 -7
- package/dist/domain/processComparison.js +3 -12
- package/dist/domain/processReactiveMatching.js +29 -50
- package/dist/domain/processReactiveRuntime.js +4 -8
- package/dist/domain/processReactiveScenario.js +28 -94
- package/dist/domain/processReactiveScenarioPreflight.js +5 -30
- package/dist/domain/processReactiveTransition.js +33 -18
- package/dist/domain/processScenario.js +56 -90
- package/dist/domain/processTraceComparison.js +0 -8
- package/dist/domain/processTraceEvaluation.js +14 -4
- package/dist/domain/processTraceSpecification.js +11 -17
- package/dist/domain/protocolCapture.js +3 -3
- package/dist/domain/reconstructionCoverage.js +62 -129
- package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
- package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
- package/dist/domain/reconstructionReadiness.js +1 -2
- package/dist/domain/reconstructionReadinessSchemas.js +36 -38
- package/dist/domain/reconstructionUnknowns.js +3 -3
- package/dist/domain/reconstructionVerification.js +13 -47
- package/dist/domain/reconstructionVerificationSchemas.js +50 -38
- package/dist/domain/referenceSourceGraph.js +53 -61
- package/dist/domain/referenceSourceImportParsing.js +1 -5
- package/dist/domain/replayMachine.js +19 -31
- package/dist/domain/replayMachineRun.js +15 -63
- package/dist/domain/replayMachineRuntime.js +41 -41
- package/dist/domain/replayMachineValues.js +84 -0
- package/dist/domain/residualUnknown.js +25 -30
- package/dist/domain/runtimeCharacterization.js +15 -16
- package/dist/domain/runtimeIdentification.js +48 -47
- package/dist/domain/sourceToBundleComparison.js +9 -85
- package/dist/domain/sourceToBundleComparisonSchemas.js +17 -42
- package/dist/domain/sourceToBundleSignals.js +4 -15
- package/dist/domain/staticRuntimeCorrelation.js +37 -49
- package/dist/domain/symbolAnalysis.js +10 -19
- package/dist/domain/unicodeCodePointOrder.js +12 -0
- package/dist/domain/webBundleAnalysis.js +70 -99
- package/dist/domain/webBundleAnalyzer.js +2 -4
- package/dist/domain/webBundleAnalyzerAst.js +0 -13
- package/dist/domain/webBundleAnalyzerInspection.js +26 -52
- package/dist/domain/webBundleAnalyzerResult.js +7 -24
- package/dist/domain/webCaptureDiff.js +33 -73
- package/dist/domain/webCaptureDiffSchemas.js +86 -0
- package/dist/domain/webContentArtifact.js +1 -10
- package/dist/domain/webMcpDiscovery.js +3 -14
- package/dist/domain/webScreenshot.js +58 -34
- package/dist/domain/zipPackageFormat.js +7 -0
- package/dist/dotnet/ManagedArtifactInspector.js +17 -50
- package/dist/dotnet/ManagedMemberInspector.js +27 -58
- package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
- package/dist/dotnet/ManagedMemberRows.js +16 -16
- package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
- package/dist/dotnet/ManagedMetadataInventory.js +21 -30
- package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
- package/dist/dotnet/ManagedMetadataLayout.js +3 -5
- package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -41
- package/dist/dotnet/ManagedPeReader.js +2 -2
- package/dist/dotnet/ManagedStaticProvider.js +13 -71
- package/dist/generatedMcpToolCatalog.js +1 -1
- package/dist/generatedPackageMetadata.js +1 -1
- package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
- package/dist/ghidra/GhidraClient.js +4 -12
- package/dist/ghidra/GhidraClientWire.js +9 -5
- package/dist/ghidra/GhidraDefaults.js +0 -18
- package/dist/ghidra/GhidraDiagnostics.js +0 -2
- package/dist/ghidra/GhidraDoctor.js +16 -12
- package/dist/ghidra/GhidraFunctionValues.js +65 -108
- package/dist/ghidra/GhidraInstallation.js +98 -42
- package/dist/ghidra/GhidraInventoryValues.js +16 -85
- package/dist/ghidra/GhidraLauncher.js +0 -8
- package/dist/ghidra/GhidraProvider.js +15 -22
- package/dist/ghidra/GhidraProviderCapabilities.js +6 -47
- package/dist/ghidra/GhidraRequestQueue.js +6 -30
- package/dist/ghidra/GhidraResponseBuffer.js +1 -7
- package/dist/ghidra/GhidraSessionValues.js +0 -2
- package/dist/ghidra/GhidraTransport.js +4 -7
- package/dist/ghidra/protocol.js +2 -2
- package/dist/hopper/BridgeLauncher.js +112 -36
- package/dist/hopper/HopperAnalysisProfile.js +1 -1
- package/dist/hopper/HopperCleanup.js +6 -3
- package/dist/hopper/HopperClient.js +4 -7
- package/dist/hopper/HopperProcessDiagnostic.js +2 -2
- package/dist/hopper/HopperProvider.js +0 -16
- package/dist/hopper/HopperRequestQueue.js +21 -40
- package/dist/hopper/HopperResponseStream.js +1 -9
- package/dist/hopper/HopperSessionValues.js +3 -2
- package/dist/hopper/HopperTargetLease.js +119 -0
- package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
- package/dist/hopper/LinuxPrivateDisplayProbe.js +5 -16
- package/dist/hopper/protocol.js +6 -4
- package/dist/main/reload.js +0 -3
- package/dist/main/shutdown.js +1 -1
- package/dist/main/state.js +0 -9
- package/dist/main/transport.js +0 -5
- package/dist/mcpDoctor.js +25 -45
- package/dist/native/CommandRunner.js +18 -25
- package/dist/native/NativeMacOSProvider.js +13 -38
- package/dist/native/NativeMachoInspection.js +1 -1
- package/dist/process/BoundedFileBytes.js +17 -0
- package/dist/process/ExecFileOutput.js +11 -0
- package/dist/process/PendingOperations.js +8 -6
- package/dist/process/ProcessOwnership.js +3 -2
- package/dist/process/ProcessOwnershipObservation.js +0 -1
- package/dist/process/ProviderProcess.js +7 -28
- package/dist/reference/ReferenceSourceReader.js +8 -24
- package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
- package/dist/reference/ReferenceSourceReaderFile.js +13 -31
- package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
- package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
- package/dist/replay/JavaScriptReplayWorker.js +3 -5
- package/dist/replay/LinuxJavaScriptReplayRunner.js +33 -29
- package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
- package/dist/replay/LinuxRuntimeClosure.js +1 -3
- package/dist/replay/ReplayOutcome.js +1 -3
- package/dist/replay/ReplayProcessLifecycle.js +32 -7
- package/dist/replay/ReplaySeccompFile.js +29 -0
- package/dist/replay/ReplayWorkerProtocol.js +0 -2
- package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
- package/dist/server/ProcessCaptureElicitation.js +4 -8
- package/dist/server/createServer.js +6 -44
- package/dist/server/promptCompletion.js +37 -61
- package/dist/server/recordDerivedEvidence.js +1 -1
- package/dist/server/registerApplicationTools/characterization.js +4 -8
- package/dist/server/registerApplicationTools/compareExportShapes.js +5 -10
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -10
- package/dist/server/registerApplicationTools/compareVersions.js +5 -10
- package/dist/server/registerApplicationTools/controlledReplay.js +3 -5
- package/dist/server/registerApplicationTools/coverage.js +6 -71
- package/dist/server/registerApplicationTools/helpers.js +1 -13
- package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
- package/dist/server/registerApplicationTools/traceFeature.js +5 -9
- package/dist/server/registerApplicationTools/traceSemantics.js +5 -8
- package/dist/server/registerApplicationTools.js +0 -2
- package/dist/server/registerArtifactComparisonTool.js +23 -27
- package/dist/server/registerBrowserScenarioTool.js +4 -4
- package/dist/server/registerBrowserTools.js +5 -8
- package/dist/server/registerBundleComparisonTool.js +5 -7
- package/dist/server/registerCloseLifecycleTool.js +2 -16
- package/dist/server/registerElectronTools.js +10 -29
- package/dist/server/registerEnhancedTools.js +10 -11
- package/dist/server/registerEvidenceTools.js +15 -22
- package/dist/server/registerFunctionComparisonTool.js +30 -25
- package/dist/server/registerInvestigationTools/helpers.js +3 -32
- package/dist/server/registerInvestigationTools.js +20 -116
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -4
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +15 -17
- package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -8
- package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +3 -8
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +10 -14
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +9 -15
- package/dist/server/registerOfficialTools.js +1 -43
- package/dist/server/registerProcessComparisonTool.js +33 -23
- package/dist/server/registerPrompts.js +19 -17
- package/dist/server/registerSessionRecordTools.js +10 -156
- package/dist/server/registerSessionStatusTool.js +6 -69
- package/dist/server/registerSessionTools.js +10 -51
- package/dist/server/sessionAvailabilityPolicy.js +0 -2
- package/dist/server/sessionEvidence.js +9 -15
- package/dist/server/sessionToolPolicies.js +0 -8
- package/dist/server/toolResult.js +14 -50
- package/dist/serverIdentity.js +0 -20
- package/install.sh +1 -1
- package/package.json +11 -7
- package/scripts/electron-active-hook.cjs +23 -55
- package/scripts/hopper-demo-x11.py +13 -32
- package/skills/reverse-engineer-anything/SKILL.md +47 -12
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
- package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -188
- package/dist/application/BoundedJsonFiles.js +0 -86
- package/dist/application/CrossVersionInventory.js +0 -129
- package/dist/application/CrossVersionInvestigation.js +0 -301
- package/dist/application/CrossVersionInvestigationCollections.js +0 -23
- package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
- package/dist/application/CrossVersionInvestigationReplay.js +0 -170
- package/dist/application/DeferredFileAuthorization.js +0 -61
- package/dist/application/DoctorProjection.js +0 -43
- package/dist/application/EnhancedToolPagination.js +0 -22
- package/dist/application/EvidenceReferenceResolver.js +0 -26
- package/dist/application/InvestigationWorkspaceStore.js +0 -204
- package/dist/application/ProcessPairedExperiment.js +0 -72
- package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
- package/dist/application/ReconstructionReadinessService.js +0 -48
- package/dist/cliInvestigationCommands.js +0 -173
- package/dist/domain/boundedCartesianProjection.js +0 -15
- package/dist/domain/investigationWorkspace.js +0 -347
- package/dist/domain/jsonLimits.js +0 -26
- package/dist/domain/knownPageCoverage.js +0 -29
- package/dist/domain/processPairedExperiment.js +0 -128
- package/dist/server/javascriptApplicationResult.js +0 -106
- package/dist/server/permissionFailure.js +0 -12
- package/dist/server/registerApplicationTools/readiness.js +0 -50
- package/dist/server/registerEvidenceResources.js +0 -315
- package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
- package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
- package/dist/server/registerReconstructionReadinessResource.js +0 -32
|
@@ -5,101 +5,32 @@ import { V8InspectorProvider } from "./browser/V8InspectorProvider.js";
|
|
|
5
5
|
import { CLI_COMMANDS } from "./cliCommandNames.js";
|
|
6
6
|
import { logCliCommand } from "./cliLogging.js";
|
|
7
7
|
import { parseConfig } from "./config.js";
|
|
8
|
-
import { v8InspectorLocationScopes } from "./config/passiveObservation.js";
|
|
9
8
|
import { javascriptRuntimeKindSchema, listJavaScriptRuntimeTargetsInputSchema, observeJavaScriptRuntimeInputSchema, } from "./domain/javascriptRuntimeObservation.js";
|
|
10
9
|
import { AnalysisCapabilityUnavailableError, AnalysisInputError, projectAnalysisError, } from "./domain/errors.js";
|
|
11
|
-
const scopeOptions = {
|
|
12
|
-
allowedFileRoots: z
|
|
13
|
-
.array(z.string().min(1))
|
|
14
|
-
.optional()
|
|
15
|
-
.describe("Exact roots; defaults to REA_V8_INSPECTOR_FILE_ROOTS_JSON"),
|
|
16
|
-
allowedOrigins: z
|
|
17
|
-
.array(z.string().min(1))
|
|
18
|
-
.optional()
|
|
19
|
-
.describe("Exact origins; defaults to REA_V8_INSPECTOR_ALLOWED_ORIGINS_JSON"),
|
|
20
|
-
approved: z.boolean().default(false).describe("Approve passive attachment"),
|
|
21
|
-
};
|
|
22
|
-
const listOptionsSchema = z.object({
|
|
23
|
-
...scopeOptions,
|
|
24
|
-
offset: z
|
|
25
|
-
.number()
|
|
26
|
-
.int()
|
|
27
|
-
.min(0)
|
|
28
|
-
.default(0)
|
|
29
|
-
.describe("Zero-based target offset"),
|
|
30
|
-
limit: z
|
|
31
|
-
.number()
|
|
32
|
-
.int()
|
|
33
|
-
.min(1)
|
|
34
|
-
.max(200)
|
|
35
|
-
.default(100)
|
|
36
|
-
.describe("Maximum targets to return"),
|
|
37
|
-
});
|
|
38
10
|
const observeOptionsSchema = z.object({
|
|
39
|
-
|
|
40
|
-
|
|
11
|
+
runtimeKind: javascriptRuntimeKindSchema
|
|
12
|
+
.optional()
|
|
13
|
+
.describe("Declared target role; Inspector cannot authenticate the Electron role"),
|
|
41
14
|
observationMs: z
|
|
42
15
|
.number()
|
|
43
16
|
.int()
|
|
44
17
|
.min(0)
|
|
45
|
-
.max(10_000)
|
|
46
18
|
.default(100)
|
|
47
|
-
.describe("
|
|
48
|
-
maxEvents: z
|
|
49
|
-
.number()
|
|
50
|
-
.int()
|
|
51
|
-
.min(1)
|
|
52
|
-
.max(50_000)
|
|
53
|
-
.default(10_000)
|
|
54
|
-
.describe("Maximum retained protocol events"),
|
|
55
|
-
maxScripts: z
|
|
56
|
-
.number()
|
|
57
|
-
.int()
|
|
58
|
-
.min(1)
|
|
59
|
-
.max(10_000)
|
|
60
|
-
.default(2_000)
|
|
61
|
-
.describe("Maximum retained scripts"),
|
|
62
|
-
maxExecutionContexts: z
|
|
63
|
-
.number()
|
|
64
|
-
.int()
|
|
65
|
-
.min(1)
|
|
66
|
-
.max(5_000)
|
|
67
|
-
.default(1_000)
|
|
68
|
-
.describe("Maximum retained execution contexts"),
|
|
69
|
-
maxLocationBytes: z
|
|
70
|
-
.number()
|
|
71
|
-
.int()
|
|
72
|
-
.min(64)
|
|
73
|
-
.max(65_536)
|
|
74
|
-
.default(16_384)
|
|
75
|
-
.describe("Maximum bytes in one protocol location"),
|
|
76
|
-
maxTotalMetadataBytes: z
|
|
77
|
-
.number()
|
|
78
|
-
.int()
|
|
79
|
-
.min(1_024)
|
|
80
|
-
.max(32 * 1_024 * 1_024)
|
|
81
|
-
.default(4 * 1_024 * 1_024)
|
|
82
|
-
.describe("Maximum retained metadata bytes"),
|
|
19
|
+
.describe("Observation window in milliseconds"),
|
|
83
20
|
});
|
|
84
21
|
/** Register CLI equivalents of passive V8 Inspector tools. */
|
|
85
22
|
export const registerJavaScriptRuntimeObservationCommands = (cli, logger) => {
|
|
86
23
|
cli.command(CLI_COMMANDS.listJavaScriptRuntimeTargets, {
|
|
87
|
-
description: "List
|
|
24
|
+
description: "List Node/Electron V8 Inspector targets",
|
|
88
25
|
args: z.object({
|
|
89
|
-
endpoint: z.string().describe("
|
|
26
|
+
endpoint: z.string().describe("Literal-loopback Inspector endpoint"),
|
|
90
27
|
}),
|
|
91
|
-
|
|
92
|
-
run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.listJavaScriptRuntimeTargets, async () => {
|
|
28
|
+
run: ({ args }) => logCliCommand(logger, CLI_COMMANDS.listJavaScriptRuntimeTargets, async () => {
|
|
93
29
|
const context = await runtimeContext("list_javascript_runtime_targets");
|
|
94
30
|
if (!context.ok)
|
|
95
31
|
return context.error;
|
|
96
32
|
const parsed = listJavaScriptRuntimeTargetsInputSchema.safeParse({
|
|
97
33
|
inspector_endpoint: args.endpoint,
|
|
98
|
-
allowed_file_roots: options.allowedFileRoots ?? context.allowedFileRoots,
|
|
99
|
-
allowed_origins: options.allowedOrigins ?? context.allowedOrigins,
|
|
100
|
-
approved: options.approved,
|
|
101
|
-
offset: options.offset,
|
|
102
|
-
limit: options.limit,
|
|
103
34
|
});
|
|
104
35
|
if (!parsed.success)
|
|
105
36
|
return inputError("list_javascript_runtime_targets");
|
|
@@ -110,7 +41,7 @@ export const registerJavaScriptRuntimeObservationCommands = (cli, logger) => {
|
|
|
110
41
|
cli.command(CLI_COMMANDS.observeJavaScriptRuntime, {
|
|
111
42
|
description: "Passively observe one exact Node/Electron Inspector target",
|
|
112
43
|
args: z.object({
|
|
113
|
-
endpoint: z.string().describe("
|
|
44
|
+
endpoint: z.string().describe("Literal-loopback Inspector endpoint"),
|
|
114
45
|
targetId: z
|
|
115
46
|
.string()
|
|
116
47
|
.describe("Target from list-javascript-runtime-targets"),
|
|
@@ -122,19 +53,9 @@ export const registerJavaScriptRuntimeObservationCommands = (cli, logger) => {
|
|
|
122
53
|
return context.error;
|
|
123
54
|
const parsed = observeJavaScriptRuntimeInputSchema.safeParse({
|
|
124
55
|
inspector_endpoint: args.endpoint,
|
|
125
|
-
allowed_file_roots: options.allowedFileRoots ?? context.allowedFileRoots,
|
|
126
|
-
allowed_origins: options.allowedOrigins ?? context.allowedOrigins,
|
|
127
56
|
target_id: args.targetId,
|
|
128
57
|
runtime_kind: options.runtimeKind,
|
|
129
|
-
approved: options.approved,
|
|
130
58
|
observation_ms: options.observationMs,
|
|
131
|
-
limits: {
|
|
132
|
-
max_events: options.maxEvents,
|
|
133
|
-
max_scripts: options.maxScripts,
|
|
134
|
-
max_execution_contexts: options.maxExecutionContexts,
|
|
135
|
-
max_location_bytes: options.maxLocationBytes,
|
|
136
|
-
max_total_metadata_bytes: options.maxTotalMetadataBytes,
|
|
137
|
-
},
|
|
138
59
|
});
|
|
139
60
|
if (!parsed.success)
|
|
140
61
|
return inputError("observe_javascript_runtime");
|
|
@@ -151,18 +72,15 @@ const runtimeContext = async (operation) => {
|
|
|
151
72
|
if (policy.status === "disabled")
|
|
152
73
|
return {
|
|
153
74
|
ok: false,
|
|
154
|
-
error: cliError(new AnalysisCapabilityUnavailableError("rea-v8-inspector", operation, "V8 Inspector observation is disabled;
|
|
75
|
+
error: cliError(new AnalysisCapabilityUnavailableError("rea-v8-inspector", operation, "V8 Inspector observation is disabled; enable REA_V8_INSPECTOR_OBSERVE_ENABLED to authorize loopback endpoints")),
|
|
155
76
|
};
|
|
156
77
|
const authority = await loadConfiguredPermissionAuthority(config.value);
|
|
157
78
|
if (!authority.ok)
|
|
158
79
|
return { ok: false, error: cliError(authority.error) };
|
|
159
|
-
const scopes = v8InspectorLocationScopes(policy.locations);
|
|
160
80
|
return {
|
|
161
81
|
ok: true,
|
|
162
82
|
authority: authority.value,
|
|
163
83
|
provider: new V8InspectorProvider(),
|
|
164
|
-
allowedFileRoots: scopes.fileRoots,
|
|
165
|
-
allowedOrigins: scopes.allowedOrigins,
|
|
166
84
|
};
|
|
167
85
|
};
|
|
168
86
|
const inputError = (operation) => cliError(new AnalysisInputError(operation));
|
package/dist/cliJsonInput.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { readFile
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
2
|
import { AnalysisInputError, projectAnalysisError } from "./domain/errors.js";
|
|
3
|
-
|
|
4
|
-
/** Parse bounded inline JSON or one bounded local JSON file for a CLI workflow. */
|
|
3
|
+
/** Parse inline JSON or one local JSON file for a CLI workflow. */
|
|
5
4
|
export const parseCliJsonInput = async (value, operation) => {
|
|
6
5
|
const inline = parseJson(value);
|
|
7
6
|
if (inline !== undefined)
|
|
@@ -9,15 +8,7 @@ export const parseCliJsonInput = async (value, operation) => {
|
|
|
9
8
|
if (["{", "["].includes(value.trimStart()[0] ?? ""))
|
|
10
9
|
return { ok: false, error: inputError(operation) };
|
|
11
10
|
try {
|
|
12
|
-
const
|
|
13
|
-
if (!metadata.isFile())
|
|
14
|
-
return jsonFileError(value, operation, "not-file");
|
|
15
|
-
if (metadata.size > MAX_JSON_INPUT_BYTES)
|
|
16
|
-
return jsonFileError(value, operation, "too-large");
|
|
17
|
-
const bytes = await readFile(value);
|
|
18
|
-
if (bytes.byteLength > MAX_JSON_INPUT_BYTES)
|
|
19
|
-
return jsonFileError(value, operation, "too-large");
|
|
20
|
-
const parsed = parseJson(bytes.toString("utf8"));
|
|
11
|
+
const parsed = parseJson(await readFile(value, "utf8"));
|
|
21
12
|
return parsed === undefined
|
|
22
13
|
? jsonFileError(value, operation, "invalid-json")
|
|
23
14
|
: { ok: true, value: parsed };
|
|
@@ -47,8 +38,7 @@ const jsonFileError = (path, operation, reason) => ({
|
|
|
47
38
|
...projectAnalysisError(new AnalysisInputError(operation, undefined, reason === "invalid-json"
|
|
48
39
|
? [{ path: [], reason: "invalid_format", expected: "JSON" }]
|
|
49
40
|
: [])),
|
|
50
|
-
input_path: path,
|
|
41
|
+
...(path === undefined ? {} : { input_path: path }),
|
|
51
42
|
input_reason: reason,
|
|
52
|
-
maximum_input_bytes: MAX_JSON_INPUT_BYTES,
|
|
53
43
|
},
|
|
54
44
|
});
|
|
@@ -1,59 +1,41 @@
|
|
|
1
1
|
import { z } from "incur";
|
|
2
|
-
|
|
2
|
+
/** Accept an agent-selected browser observation duration without an artificial ceiling. */
|
|
3
|
+
export const observationDuration = (fallback, minimum = 0) => z
|
|
3
4
|
.number()
|
|
4
5
|
.int()
|
|
5
6
|
.min(minimum)
|
|
6
|
-
.max(maximum)
|
|
7
7
|
.default(fallback)
|
|
8
|
-
.describe(
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
const browserScopeOptions = {
|
|
8
|
+
.describe("Observation duration in milliseconds");
|
|
9
|
+
/** Shared passive browser origin options. */
|
|
10
|
+
export const browserScopeOptions = {
|
|
12
11
|
allowedOrigins: z
|
|
13
12
|
.array(z.string().min(1))
|
|
14
13
|
.optional()
|
|
15
14
|
.describe("Exact origins to observe; defaults to REA_BROWSER_ALLOWED_ORIGINS_JSON"),
|
|
16
|
-
approved: z.boolean().default(false).describe("Approve passive observation"),
|
|
17
15
|
};
|
|
18
16
|
export const browserPageInspectionOptions = z.object({
|
|
19
17
|
...browserScopeOptions,
|
|
20
|
-
observationMs:
|
|
18
|
+
observationMs: observationDuration(500),
|
|
21
19
|
includeAccessibilityText: z
|
|
22
20
|
.boolean()
|
|
23
21
|
.default(false)
|
|
24
|
-
.describe("Include
|
|
22
|
+
.describe("Include accessibility text"),
|
|
25
23
|
includeConsoleText: z
|
|
26
24
|
.boolean()
|
|
27
25
|
.default(false)
|
|
28
|
-
.describe("Include
|
|
29
|
-
consoleTextApproved: z
|
|
30
|
-
.boolean()
|
|
31
|
-
.default(false)
|
|
32
|
-
.describe("Approve capturing console message text"),
|
|
26
|
+
.describe("Include console message text"),
|
|
33
27
|
includeJsonBodyShapes: z
|
|
34
28
|
.boolean()
|
|
35
29
|
.default(false)
|
|
36
30
|
.describe("Include structural shapes of JSON response bodies"),
|
|
37
|
-
jsonBodySchemaApproved: z
|
|
38
|
-
.boolean()
|
|
39
|
-
.default(false)
|
|
40
|
-
.describe("Approve inspecting JSON response bodies for structural shapes"),
|
|
41
31
|
includeWebsocketShapes: z
|
|
42
32
|
.boolean()
|
|
43
33
|
.default(false)
|
|
44
34
|
.describe("Include structural shapes of WebSocket payloads"),
|
|
45
|
-
websocketShapeApproved: z
|
|
46
|
-
.boolean()
|
|
47
|
-
.default(false)
|
|
48
|
-
.describe("Approve inspecting WebSocket payloads for structural shapes"),
|
|
49
35
|
includeScriptSources: z
|
|
50
36
|
.boolean()
|
|
51
37
|
.default(false)
|
|
52
|
-
.describe("Include
|
|
53
|
-
sourceCaptureApproved: z
|
|
54
|
-
.boolean()
|
|
55
|
-
.default(false)
|
|
56
|
-
.describe("Approve capturing bounded script source text"),
|
|
38
|
+
.describe("Include JavaScript source text"),
|
|
57
39
|
includeStorageKeys: z
|
|
58
40
|
.boolean()
|
|
59
41
|
.default(false)
|
|
@@ -62,84 +44,17 @@ export const browserPageInspectionOptions = z.object({
|
|
|
62
44
|
.boolean()
|
|
63
45
|
.default(false)
|
|
64
46
|
.describe("Include content-derived storage fingerprints"),
|
|
65
|
-
maxFrames: boundedCount("page frames", 1_000, 200),
|
|
66
|
-
maxDomNodes: boundedCount("DOM nodes", 10_000, 2_000),
|
|
67
|
-
maxAxNodes: boundedCount("accessibility nodes", 10_000, 2_000),
|
|
68
|
-
maxAxTextFieldBytes: boundedBytes("one accessibility text field", 16 * 1_024, 1_024),
|
|
69
|
-
maxTotalAxTextBytes: boundedBytes("total accessibility text", 1_024 * 1_024, 64 * 1_024),
|
|
70
|
-
maxScripts: boundedCount("scripts", 1_000, 200),
|
|
71
|
-
maxResources: boundedCount("resources", 10_000, 2_000),
|
|
72
|
-
maxWorkers: boundedCount("workers", 5_000, 500),
|
|
73
|
-
maxStorageKeys: boundedCount("storage keys", 10_000, 1_000),
|
|
74
|
-
maxScriptSourceBytes: boundedBytes("one script source", 4 * 1_024 * 1_024, 1_024 * 1_024),
|
|
75
|
-
maxTotalScriptSourceBytes: boundedBytes("total script source", 16 * 1_024 * 1_024, 4 * 1_024 * 1_024),
|
|
76
|
-
maxNetworkEvents: boundedCount("network events", 10_000, 1_000),
|
|
77
|
-
maxConsoleEvents: boundedCount("console events", 2_000, 200),
|
|
78
|
-
maxConsoleTextFieldBytes: boundedBytes("one console text field", 16 * 1_024, 1_024),
|
|
79
|
-
maxTotalConsoleTextBytes: boundedBytes("total console text", 1_024 * 1_024, 64 * 1_024),
|
|
80
|
-
maxJsonBodyBytes: boundedBytes("one JSON response body", 4 * 1_024 * 1_024, 1_024 * 1_024),
|
|
81
|
-
maxTotalJsonBodyBytes: boundedBytes("total JSON response bodies", 16 * 1_024 * 1_024, 4 * 1_024 * 1_024),
|
|
82
|
-
maxJsonShapeNodes: boundedCount("JSON shape nodes", 100_000, 5_000),
|
|
83
|
-
maxJsonShapeDepth: boundedCount("JSON shape depth", 100, 20),
|
|
84
|
-
maxWebsocketEvents: boundedCount("WebSocket events", 5_000, 500),
|
|
85
|
-
maxWebsocketShapeBytes: boundedBytes("one WebSocket shape", 1_024 * 1_024, 64 * 1_024),
|
|
86
|
-
maxTotalWebsocketShapeBytes: boundedBytes("total WebSocket shapes", 16 * 1_024 * 1_024, 1_024 * 1_024),
|
|
87
47
|
});
|
|
88
|
-
const electronScopeOptions = {
|
|
89
|
-
allowedFileRoots: z
|
|
90
|
-
.array(z.string().min(1))
|
|
91
|
-
.optional()
|
|
92
|
-
.describe("Filesystem roots; defaults to REA_ELECTRON_FILE_ROOTS_JSON"),
|
|
93
|
-
approved: z.boolean().default(false).describe("Approve passive observation"),
|
|
94
|
-
};
|
|
95
48
|
export const electronPageInspectionOptions = z.object({
|
|
96
|
-
|
|
97
|
-
observationMs: boundedCount("observation duration in milliseconds", 10_000, 100, 0),
|
|
49
|
+
observationMs: observationDuration(100),
|
|
98
50
|
includeScriptSources: z
|
|
99
51
|
.boolean()
|
|
100
52
|
.default(false)
|
|
101
|
-
.describe("Include
|
|
102
|
-
sourceCaptureApproved: z
|
|
103
|
-
.boolean()
|
|
104
|
-
.default(false)
|
|
105
|
-
.describe("Approve capturing bounded script source text"),
|
|
106
|
-
maxFrames: boundedCount("page frames", 1_000, 200),
|
|
107
|
-
maxDomNodes: boundedCount("DOM nodes", 10_000, 2_000),
|
|
108
|
-
maxScripts: boundedCount("scripts", 2_000, 500),
|
|
109
|
-
maxResources: boundedCount("resources", 10_000, 2_000),
|
|
110
|
-
maxWorkers: boundedCount("workers", 5_000, 500),
|
|
111
|
-
maxScriptSourceBytes: boundedBytes("one captured script source", 4 * 1_024 * 1_024, 1_024 * 1_024),
|
|
112
|
-
maxTotalScriptSourceBytes: boundedBytes("total captured script source", 16 * 1_024 * 1_024, 4 * 1_024 * 1_024),
|
|
53
|
+
.describe("Include JavaScript source text"),
|
|
113
54
|
});
|
|
114
55
|
export const javascriptApplicationOptions = z.object({
|
|
115
|
-
approved: z
|
|
116
|
-
.boolean()
|
|
117
|
-
.default(false)
|
|
118
|
-
.describe("Approve reading the application artifact"),
|
|
119
56
|
artifactFormat: z
|
|
120
57
|
.enum(["auto", "asar", "directory"])
|
|
121
58
|
.default("auto")
|
|
122
59
|
.describe("Application artifact format"),
|
|
123
|
-
sourceMapReadApproved: z
|
|
124
|
-
.boolean()
|
|
125
|
-
.default(false)
|
|
126
|
-
.describe("Approve reading local source maps referenced by the application"),
|
|
127
|
-
maxEntries: positiveCount("artifact entries to inspect", 8_000),
|
|
128
|
-
maxTotalArtifactBytes: positiveCount("total uncompressed artifact content to inspect", 512 * 1_024 * 1_024),
|
|
129
|
-
maxArtifactEntryBytes: positiveCount("uncompressed content for one artifact entry", 128 * 1_024 * 1_024),
|
|
130
|
-
maxCompressionRatio: z
|
|
131
|
-
.number()
|
|
132
|
-
.min(1)
|
|
133
|
-
.default(1_000)
|
|
134
|
-
.describe("Maximum accepted compressed-to-uncompressed expansion ratio"),
|
|
135
|
-
maxDepth: positiveCount("artifact directory depth", 64),
|
|
136
|
-
maxPathBytes: positiveCount("encoded artifact path length", 4_096),
|
|
137
|
-
maxTextFiles: positiveCount("text files to parse", 5_000),
|
|
138
|
-
maxTotalTextBytes: positiveCount("total text content to parse", 128 * 1_024 * 1_024),
|
|
139
|
-
maxTextFileBytes: positiveCount("size of one parsed text file", 8 * 1_024 * 1_024),
|
|
140
|
-
maxAstNodes: positiveCount("JavaScript AST nodes to parse", 2_000_000),
|
|
141
|
-
maxFindings: positiveCount("static-analysis findings to return", 8_000),
|
|
142
|
-
maxModules: positiveCount("application modules to project", 20_000),
|
|
143
|
-
maxSourceMapSources: positiveCount("original sources from source maps", 5_000),
|
|
144
|
-
maxParseMilliseconds: positiveCount("JavaScript parsing time in milliseconds", 30_000),
|
|
145
60
|
});
|
|
@@ -5,24 +5,9 @@ import { readProjectPermissionStore, revokeProjectPermissionGrant, } from "./app
|
|
|
5
5
|
import { logCliCommand } from "./cliLogging.js";
|
|
6
6
|
import { parseConfig } from "./config.js";
|
|
7
7
|
import { PermissionRequiredError, projectAnalysisError, } from "./domain/errors.js";
|
|
8
|
+
import { PERMISSION_CAPABILITIES, } from "./domain/permissionPolicy.js";
|
|
8
9
|
import { CLI_COMMANDS } from "./cliCommandNames.js";
|
|
9
|
-
const capabilitySchema = z.enum(
|
|
10
|
-
"process_capture",
|
|
11
|
-
"browser_observe",
|
|
12
|
-
"browser_automate",
|
|
13
|
-
"electron_observe",
|
|
14
|
-
"electron_automate",
|
|
15
|
-
"evidence_read",
|
|
16
|
-
"evidence_write",
|
|
17
|
-
"investigation_input",
|
|
18
|
-
"investigation_workspace_read",
|
|
19
|
-
"investigation_workspace_write",
|
|
20
|
-
"snapshot_read",
|
|
21
|
-
"snapshot_write",
|
|
22
|
-
"artifact_extract",
|
|
23
|
-
"native_mount",
|
|
24
|
-
"reference_read",
|
|
25
|
-
]);
|
|
10
|
+
const capabilitySchema = z.enum(PERMISSION_CAPABILITIES);
|
|
26
11
|
/** Require an explicit decision before a project permission grant is removed. */
|
|
27
12
|
export const approvePolicyRevocation = async (options) => {
|
|
28
13
|
if (options.approved)
|
|
@@ -6,16 +6,16 @@ import { parseCliJsonInput } from "./cliJsonInput.js";
|
|
|
6
6
|
import { replayMachineRunInputSchema, runReplayMachine, } from "./domain/replayMachineRun.js";
|
|
7
7
|
import { AnalysisInputError, projectAnalysisError } from "./domain/errors.js";
|
|
8
8
|
import { projectInputIssues } from "./domain/inputIssueProjection.js";
|
|
9
|
-
/** Register
|
|
9
|
+
/** Register process capture one-shot commands through shared application services. */
|
|
10
10
|
export const registerProcessCommands = (cli, logger) => {
|
|
11
11
|
registerReplayMachineCommand(cli, logger);
|
|
12
12
|
cli.command(CLI_COMMANDS.captureProcess, {
|
|
13
|
-
description: "Capture one approved
|
|
13
|
+
description: "Capture one approved process capture JSON scenario",
|
|
14
14
|
args: z.object({ scenario: z.string().describe("Scenario JSON path") }),
|
|
15
15
|
run: ({ args }) => logCliCommand(logger, "capture-process", () => captureProcessScenarioFile(args.scenario)),
|
|
16
16
|
});
|
|
17
17
|
cli.command(CLI_COMMANDS.compareProcessCaptures, {
|
|
18
|
-
description: "Compare two
|
|
18
|
+
description: "Compare two process capture Evidence JSON files",
|
|
19
19
|
args: z.object({
|
|
20
20
|
left: z.string().describe("Left capture Evidence JSON path"),
|
|
21
21
|
right: z.string().describe("Right capture Evidence JSON path"),
|
package/dist/cliSetup.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { cancel, confirm, intro, isCancel, multiselect, outro, } from "@clack/prompts";
|
|
2
|
-
import { projectDoctorReport } from "./application/DoctorProjection.js";
|
|
3
2
|
import { SUPPORTED_CLIENT_DEFINITIONS } from "./application/SupportedClients.js";
|
|
4
3
|
const clientDisplayNames = new Map(SUPPORTED_CLIENT_DEFINITIONS.map(({ name, displayName }) => [
|
|
5
4
|
name,
|
|
@@ -72,18 +71,6 @@ export const renderInteractiveSetupResult = (result) => {
|
|
|
72
71
|
writeLine(`! ${result.remediation ?? "Setup needs attention."}`);
|
|
73
72
|
outro("Run `rea doctor` for the remaining checks.", promptStreams);
|
|
74
73
|
};
|
|
75
|
-
/** Keep default non-TTY output actionable without emitting the full catalog. */
|
|
76
|
-
export const conciseSetupResult = (result) => ({
|
|
77
|
-
status: result.status,
|
|
78
|
-
plannedActions: result.plannedActions,
|
|
79
|
-
appliedActions: result.appliedActions,
|
|
80
|
-
clients: result.clients,
|
|
81
|
-
doctor: projectDoctorReport(result.doctor, "summary"),
|
|
82
|
-
...(result.code === undefined ? {} : { code: result.code }),
|
|
83
|
-
...(result.remediation === undefined
|
|
84
|
-
? {}
|
|
85
|
-
: { remediation: result.remediation }),
|
|
86
|
-
});
|
|
87
74
|
const selectSetupActions = async (actions, accessible) => {
|
|
88
75
|
const clientActions = actions.filter(({ kind }) => kind === "configure_client");
|
|
89
76
|
const componentActions = actions.filter(({ kind }) => kind !== "configure_client");
|
|
@@ -8,10 +8,10 @@ export const parseBrowserScenarioPolicy = (env) => {
|
|
|
8
8
|
const executableRoots = parseAbsoluteRoots(env.REA_BROWSER_SCENARIO_EXECUTABLE_ROOTS_JSON, "REA_BROWSER_SCENARIO_EXECUTABLE_ROOTS_JSON");
|
|
9
9
|
if (!executableRoots.ok)
|
|
10
10
|
return executableRoots;
|
|
11
|
-
const cdpEndpoints = parseBrowserArray(env.REA_BROWSER_SCENARIO_CDP_ENDPOINTS_JSON, "REA_BROWSER_SCENARIO_CDP_ENDPOINTS_JSON", browserEndpointSchema
|
|
11
|
+
const cdpEndpoints = parseBrowserArray(env.REA_BROWSER_SCENARIO_CDP_ENDPOINTS_JSON, "REA_BROWSER_SCENARIO_CDP_ENDPOINTS_JSON", browserEndpointSchema);
|
|
12
12
|
if (!cdpEndpoints.ok)
|
|
13
13
|
return cdpEndpoints;
|
|
14
|
-
const allowedOrigins = parseBrowserArray(env.REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON, "REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON", browserOriginSchema
|
|
14
|
+
const allowedOrigins = parseBrowserArray(env.REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON, "REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON", browserOriginSchema);
|
|
15
15
|
if (!allowedOrigins.ok)
|
|
16
16
|
return allowedOrigins;
|
|
17
17
|
const allowedEnvironment = parseStringArray(env.REA_BROWSER_SCENARIO_ALLOWED_ENV_JSON, "REA_BROWSER_SCENARIO_ALLOWED_ENV_JSON");
|
|
@@ -44,10 +44,6 @@ const environmentSchema = z
|
|
|
44
44
|
REA_PROCESS_EXECUTABLE_ROOTS_JSON: z.string().default("[]"),
|
|
45
45
|
REA_PROCESS_WORKING_ROOTS_JSON: z.string().default("[]"),
|
|
46
46
|
REA_PROCESS_ALLOWED_ENV_JSON: z.string().default("[]"),
|
|
47
|
-
REA_EVIDENCE_ROOTS_JSON: z.string().default("[]"),
|
|
48
|
-
REA_INVESTIGATION_INPUT_ROOTS_JSON: z.string().default("[]"),
|
|
49
|
-
REA_ANALYSIS_SNAPSHOT_ROOTS_JSON: z.string().default("[]"),
|
|
50
|
-
REA_REFERENCE_ROOTS_JSON: z.string().default("[]"),
|
|
51
47
|
REA_REFERENCE_SECRET_PATTERNS_JSON: z.string().default("[]"),
|
|
52
48
|
REA_BROWSER_OBSERVE_ENABLED: z.enum(["true", "false"]).default("false"),
|
|
53
49
|
REA_BROWSER_CDP_ENDPOINTS_JSON: z.string().default("[]"),
|
|
@@ -59,8 +55,6 @@ const environmentSchema = z
|
|
|
59
55
|
REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON: z.string().default("[]"),
|
|
60
56
|
REA_BROWSER_SCENARIO_ALLOWED_ENV_JSON: z.string().default("[]"),
|
|
61
57
|
REA_ELECTRON_OBSERVE_ENABLED: z.enum(["true", "false"]).default("false"),
|
|
62
|
-
REA_ELECTRON_CDP_ENDPOINTS_JSON: z.string().default("[]"),
|
|
63
|
-
REA_ELECTRON_FILE_ROOTS_JSON: z.string().default("[]"),
|
|
64
58
|
REA_ELECTRON_AUTOMATE_ENABLED: z.enum(["true", "false"]).default("false"),
|
|
65
59
|
REA_ELECTRON_AUTOMATE_AUTO_GRANT: z
|
|
66
60
|
.enum(["true", "false"])
|
|
@@ -70,9 +64,6 @@ const environmentSchema = z
|
|
|
70
64
|
REA_V8_INSPECTOR_OBSERVE_ENABLED: z
|
|
71
65
|
.enum(["true", "false"])
|
|
72
66
|
.default("false"),
|
|
73
|
-
REA_V8_INSPECTOR_ENDPOINTS_JSON: z.string().default("[]"),
|
|
74
|
-
REA_V8_INSPECTOR_FILE_ROOTS_JSON: z.string().default("[]"),
|
|
75
|
-
REA_V8_INSPECTOR_ALLOWED_ORIGINS_JSON: z.string().default("[]"),
|
|
76
67
|
REA_JAVASCRIPT_REPLAY_ENABLED: z.enum(["true", "false"]).default("false"),
|
|
77
68
|
REA_JAVASCRIPT_REPLAY_ROOTS_JSON: z.string().default("[]"),
|
|
78
69
|
REA_JAVASCRIPT_REPLAY_NODE_PATH: z
|
|
@@ -2,7 +2,7 @@ import { ConfigurationError } from "../domain/errors.js";
|
|
|
2
2
|
import { ok } from "../domain/result.js";
|
|
3
3
|
import { parseEnvironment } from "./environment.js";
|
|
4
4
|
import { parseStringArray, parseAbsoluteRoots, parseLoaderArgs, } from "./parsers.js";
|
|
5
|
-
import {
|
|
5
|
+
import { permissionScope, administratorGrants } from "./permissions.js";
|
|
6
6
|
import { appendElectronAutomationCeiling, parseElectronAutomationPolicy, } from "./electronAutomation.js";
|
|
7
7
|
import { appendBrowserScenarioCeiling, parseBrowserScenarioPolicy, } from "./browserScenario.js";
|
|
8
8
|
import { appendManagedRuntimeCeiling, parseManagedRuntimePolicy, } from "./managedRuntime.js";
|
|
@@ -17,18 +17,6 @@ const parseAllArrays = (env) => {
|
|
|
17
17
|
const loaderArgs = parseLoaderArgs(env.HOPPER_LOADER_ARGS_JSON);
|
|
18
18
|
if (!loaderArgs.ok)
|
|
19
19
|
return loaderArgs;
|
|
20
|
-
const evidenceRoots = parseStringArray(env.REA_EVIDENCE_ROOTS_JSON, "REA_EVIDENCE_ROOTS_JSON");
|
|
21
|
-
if (!evidenceRoots.ok)
|
|
22
|
-
return evidenceRoots;
|
|
23
|
-
const investigationInputRoots = parseStringArray(env.REA_INVESTIGATION_INPUT_ROOTS_JSON, "REA_INVESTIGATION_INPUT_ROOTS_JSON");
|
|
24
|
-
if (!investigationInputRoots.ok)
|
|
25
|
-
return investigationInputRoots;
|
|
26
|
-
const analysisSnapshotRoots = parseStringArray(env.REA_ANALYSIS_SNAPSHOT_ROOTS_JSON, "REA_ANALYSIS_SNAPSHOT_ROOTS_JSON");
|
|
27
|
-
if (!analysisSnapshotRoots.ok)
|
|
28
|
-
return analysisSnapshotRoots;
|
|
29
|
-
const referenceRoots = parseStringArray(env.REA_REFERENCE_ROOTS_JSON, "REA_REFERENCE_ROOTS_JSON");
|
|
30
|
-
if (!referenceRoots.ok)
|
|
31
|
-
return referenceRoots;
|
|
32
20
|
const secretPatterns = parseStringArray(env.REA_REFERENCE_SECRET_PATTERNS_JSON, "REA_REFERENCE_SECRET_PATTERNS_JSON");
|
|
33
21
|
if (!secretPatterns.ok)
|
|
34
22
|
return secretPatterns;
|
|
@@ -37,10 +25,6 @@ const parseAllArrays = (env) => {
|
|
|
37
25
|
return managedRuntimeRoots;
|
|
38
26
|
return ok({
|
|
39
27
|
loaderArgs: loaderArgs.value,
|
|
40
|
-
evidenceRoots: evidenceRoots.value,
|
|
41
|
-
investigationInputRoots: investigationInputRoots.value,
|
|
42
|
-
analysisSnapshotRoots: analysisSnapshotRoots.value,
|
|
43
|
-
referenceRoots: referenceRoots.value,
|
|
44
28
|
secretPatterns: secretPatterns.value,
|
|
45
29
|
managedRuntimeRoots: managedRuntimeRoots.value,
|
|
46
30
|
});
|
|
@@ -51,15 +35,7 @@ const appendNativeMountCeiling = (ceilings, env) => {
|
|
|
51
35
|
};
|
|
52
36
|
const buildPermissionCeilings = (env, arrays, policies) => {
|
|
53
37
|
const ceilings = [
|
|
54
|
-
permissionScope("evidence_read", arrays.evidenceRoots),
|
|
55
|
-
permissionScope("evidence_write", arrays.evidenceRoots),
|
|
56
|
-
permissionScope("investigation_input", arrays.investigationInputRoots),
|
|
57
|
-
permissionScope("investigation_workspace_read", arrays.evidenceRoots),
|
|
58
|
-
permissionScope("investigation_workspace_write", arrays.evidenceRoots),
|
|
59
|
-
permissionScope("snapshot_read", arrays.analysisSnapshotRoots),
|
|
60
|
-
permissionScope("snapshot_write", arrays.analysisSnapshotRoots),
|
|
61
38
|
permissionScope("artifact_extract", ["/"]),
|
|
62
|
-
permissionScope("reference_read", arrays.referenceRoots),
|
|
63
39
|
];
|
|
64
40
|
appendProcessCaptureCeiling(ceilings, policies.processCapture);
|
|
65
41
|
appendPassiveObservationCeilings(ceilings, policies.passiveObservation);
|
|
@@ -83,16 +59,8 @@ const buildAppConfig = (env, arrays, permissionCeilings, policies) => ({
|
|
|
83
59
|
processExecutionPolicy: policies.processCapture,
|
|
84
60
|
artifactNativeMountEnabled: env.REA_ARTIFACT_NATIVE_MOUNT_ENABLED === "true",
|
|
85
61
|
artifactIntegrityContinueEnabled: env.REA_ARTIFACT_INTEGRITY_CONTINUE_ENABLED === "true",
|
|
86
|
-
evidenceFilePolicy: filePolicy(arrays.evidenceRoots),
|
|
87
|
-
investigationInputRoots: arrays.investigationInputRoots,
|
|
88
|
-
analysisSnapshotFilePolicy: filePolicy(arrays.analysisSnapshotRoots),
|
|
89
62
|
referenceSourcePolicy: {
|
|
90
|
-
roots: arrays.referenceRoots,
|
|
91
63
|
secretPatterns: arrays.secretPatterns,
|
|
92
|
-
maxBytes: 16 * 1024 * 1024,
|
|
93
|
-
maxEntries: 10_000,
|
|
94
|
-
maxDepth: 32,
|
|
95
|
-
maxPathBytes: 4_096,
|
|
96
64
|
},
|
|
97
65
|
browserObservationPolicy: policies.passiveObservation.browser,
|
|
98
66
|
browserScenarioPolicy: policies.browserScenario,
|
package/dist/config/parsers.js
CHANGED
|
@@ -2,18 +2,14 @@ import { z } from "zod";
|
|
|
2
2
|
import { isAbsolute } from "node:path";
|
|
3
3
|
import { ConfigurationError } from "../domain/errors.js";
|
|
4
4
|
import { err, ok } from "../domain/result.js";
|
|
5
|
-
import { electronFileRootsSchema } from "../domain/electronObservation.js";
|
|
6
5
|
export const parseStringArray = (encoded, name) => {
|
|
7
6
|
try {
|
|
8
|
-
const parsed = z
|
|
9
|
-
.array(z.string().min(1))
|
|
10
|
-
.max(128)
|
|
11
|
-
.safeParse(JSON.parse(encoded));
|
|
7
|
+
const parsed = z.array(z.string().min(1)).safeParse(JSON.parse(encoded));
|
|
12
8
|
return parsed.success
|
|
13
9
|
? ok(parsed.data)
|
|
14
|
-
: err(new ConfigurationError(
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
: err(new ConfigurationError(`${name} must encode an array of strings`, {
|
|
11
|
+
cause: parsed.error,
|
|
12
|
+
}));
|
|
17
13
|
}
|
|
18
14
|
catch (cause) {
|
|
19
15
|
return err(new ConfigurationError(`${name} must be valid JSON`, { cause }));
|
|
@@ -28,12 +24,9 @@ export const parseAbsoluteRoots = (encoded, name) => {
|
|
|
28
24
|
? err(new ConfigurationError(`${name} must encode absolute roots`))
|
|
29
25
|
: parsed;
|
|
30
26
|
};
|
|
31
|
-
export const parseBrowserArray = (encoded, name, itemSchema
|
|
27
|
+
export const parseBrowserArray = (encoded, name, itemSchema) => {
|
|
32
28
|
try {
|
|
33
|
-
const parsed = z
|
|
34
|
-
.array(itemSchema)
|
|
35
|
-
.max(maximum)
|
|
36
|
-
.safeParse(JSON.parse(encoded));
|
|
29
|
+
const parsed = z.array(itemSchema).safeParse(JSON.parse(encoded));
|
|
37
30
|
return parsed.success
|
|
38
31
|
? ok([...new Set(parsed.data)].sort())
|
|
39
32
|
: err(new ConfigurationError(`${name} must encode valid browser scopes`, {
|
|
@@ -44,20 +37,6 @@ export const parseBrowserArray = (encoded, name, itemSchema, maximum) => {
|
|
|
44
37
|
return err(new ConfigurationError(`${name} must be valid JSON`, { cause }));
|
|
45
38
|
}
|
|
46
39
|
};
|
|
47
|
-
export const parseElectronFileRoots = (encoded) => {
|
|
48
|
-
try {
|
|
49
|
-
const decoded = JSON.parse(encoded);
|
|
50
|
-
if (Array.isArray(decoded) && decoded.length === 0)
|
|
51
|
-
return ok([]);
|
|
52
|
-
const parsed = electronFileRootsSchema.safeParse(decoded);
|
|
53
|
-
return parsed.success
|
|
54
|
-
? ok(parsed.data)
|
|
55
|
-
: err(new ConfigurationError("REA_ELECTRON_FILE_ROOTS_JSON must encode absolute roots", { cause: parsed.error }));
|
|
56
|
-
}
|
|
57
|
-
catch (cause) {
|
|
58
|
-
return err(new ConfigurationError("REA_ELECTRON_FILE_ROOTS_JSON must be valid JSON", { cause }));
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
40
|
export const parseLoaderArgs = (encoded) => {
|
|
62
41
|
if (encoded === undefined)
|
|
63
42
|
return ok([]);
|