rea-agents 3.0.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 +83 -108
- package/bridge/ghidra/ReaGhidraBridge.java +609 -841
- package/bridge/hopper_bridge.py +99 -344
- package/dist/application/AbortablePromise.js +6 -3
- package/dist/application/AnalysisContextQueries.js +21 -9
- 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/policy.js +17 -0
- package/dist/application/ArtifactInventory/reader.js +1 -4
- package/dist/application/ArtifactInventory/scanCanonical.js +8 -15
- package/dist/application/ArtifactInventory/scanReader.js +76 -58
- package/dist/application/ArtifactInventory/types.js +1 -5
- package/dist/application/ArtifactInventory.js +6 -14
- package/dist/application/AuthorizedArtifactInventory.js +3 -13
- package/dist/application/BinarySession.js +54 -28
- package/dist/application/BinarySessionComposition.js +0 -11
- package/dist/application/BinarySessionOpen.js +2 -1
- package/dist/application/BinarySessionRecords.js +24 -86
- package/dist/application/BinarySessionStatus.js +16 -21
- package/dist/application/BinaryTargetResolver.js +216 -0
- package/dist/application/BrowserEvidence.js +39 -57
- 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/CapabilityClientRequirements.js +26 -0
- package/dist/application/CapabilityInventory.js +143 -77
- 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 +50 -0
- package/dist/application/ElectronActiveObservationPort.js +1 -0
- package/dist/application/ElectronActiveObservationService.js +78 -0
- 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 +98 -64
- package/dist/application/EvidenceBundleCommands.js +16 -12
- package/dist/application/EvidenceBundleFiles.js +9 -15
- package/dist/application/EvidenceLedger.js +14 -42
- 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/JavaScriptReplayPermission.js +1 -1
- package/dist/application/JavaScriptReplayPlanning.js +9 -3
- package/dist/application/JavaScriptReplayService.js +29 -47
- 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 +14 -13
- package/dist/application/NativeApiInspection.js +2 -7
- package/dist/application/NativeUiActionTrace.js +394 -0
- package/dist/application/NodeRuntimeCharacterizationService.js +11 -16
- 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 +10 -12
- package/dist/application/ProcessCheckpoints.js +29 -11
- package/dist/application/ProcessCli.js +8 -17
- package/dist/application/ProcessEvidence.js +5 -7
- package/dist/application/ProcessHarness.js +60 -20
- package/dist/application/ProcessNormalization.js +2 -1
- 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 -95
- 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 +21 -47
- 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 -88
- 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/application/WindowsCapabilities.js +5 -4
- package/dist/artifacts/ArtifactPaths.js +2 -5
- package/dist/artifacts/ArtifactProvider.js +43 -67
- 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 +21 -31
- 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 -95
- package/dist/browser/CdpCaptureValues.js +21 -21
- package/dist/browser/CdpConnection.js +10 -25
- package/dist/browser/CdpElectronInspection.js +29 -51
- 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 +10 -10
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
- package/dist/browser/PlaywrightElectronActiveActions.js +309 -0
- package/dist/browser/PlaywrightElectronActiveProvider.js +274 -0
- 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 +7 -9
- package/dist/browser/PlaywrightScenarioEvents.js +45 -94
- package/dist/browser/PlaywrightScenarioSession.js +18 -34
- package/dist/browser/PngVisualDiff.js +22 -14
- package/dist/browser/SensitiveTextCapture.js +1 -18
- package/dist/browser/V8InspectorCaptureProjection.js +7 -7
- 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 +12 -60
- 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 +6 -271
- package/dist/cli/setupCommands.js +3 -12
- package/dist/cli/utilityCommands.js +7 -41
- package/dist/cli.js +0 -2
- package/dist/cliApplicationCommands.js +44 -114
- package/dist/cliBrowserAdvancedCommands.js +12 -102
- package/dist/cliBrowserCommands.js +19 -124
- package/dist/cliBrowserContext.js +30 -0
- package/dist/cliCommandNames.js +5 -5
- package/dist/cliElectronCommands.js +49 -71
- package/dist/cliEvidenceCommands.js +8 -77
- package/dist/cliJavaScriptRuntimeCommands.js +18 -92
- package/dist/cliJsonInput.js +4 -14
- package/dist/cliObservationOptions.js +11 -92
- package/dist/cliPolicyCommands.js +2 -16
- package/dist/cliProcessCommands.js +3 -3
- package/dist/cliSetup.js +0 -13
- package/dist/config/browserScenario.js +77 -0
- package/dist/config/electronAutomation.js +35 -0
- package/dist/config/environment.js +6 -9
- package/dist/config/javascriptReplay.js +41 -0
- package/dist/config/managedRuntime.js +25 -0
- package/dist/config/parseConfig.js +56 -232
- package/dist/config/parsers.js +16 -28
- package/dist/config/passiveObservation.js +87 -0
- package/dist/config/permissions.js +0 -7
- package/dist/config/processCapture.js +47 -0
- package/dist/contracts/analysisSearchContract.js +2 -5
- package/dist/contracts/applicationToolContracts.js +58 -114
- package/dist/contracts/applicationWorkflowInputContracts.js +29 -114
- package/dist/contracts/artifactComparisonExample.js +58 -60
- package/dist/contracts/artifactToolContracts.js +37 -91
- package/dist/contracts/browserScenarioToolContracts.js +6 -51
- package/dist/contracts/browserToolContracts.js +10 -75
- package/dist/contracts/electronToolContracts.js +27 -98
- package/dist/contracts/enhancedInputs.js +31 -78
- 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 +4 -5
- 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 +10 -104
- package/dist/contracts/managedWorkflowExamples.js +77 -125
- package/dist/contracts/managedWorkflowToolContracts.js +51 -74
- package/dist/contracts/nativeToolContracts.js +9 -14
- 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 +52 -0
- package/dist/contracts/toolContractExamples.js +11 -10
- package/dist/contracts/toolContractHelpers.js +19 -0
- package/dist/contracts/toolContracts.js +60 -143
- package/dist/contracts/toolEffects.js +16 -9
- package/dist/contracts/toolOutputSchemaGroups.js +47 -86
- package/dist/contracts/toolOutputSchemaPrimitives.js +72 -62
- package/dist/contracts/toolSchemaMetadata.js +117 -0
- package/dist/contracts/unknownContractExamples.js +0 -2
- package/dist/doctorRuntime.js +1 -1
- 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 -52
- package/dist/domain/appleApplication.js +24 -65
- 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 -219
- package/dist/domain/binaryTargetTypes.js +1 -0
- package/dist/domain/browserCaptureComparison.js +35 -60
- package/dist/domain/browserObservation.js +45 -197
- 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 +53 -54
- package/dist/domain/callPath.js +50 -169
- 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 +39 -11
- package/dist/domain/conformanceTrustGate.js +174 -30
- package/dist/domain/customProtocolCapture.js +4 -4
- package/dist/domain/electronActiveObservation.js +244 -0
- package/dist/domain/electronObservation.js +21 -83
- 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 +14 -18
- package/dist/domain/errors.js +33 -54
- package/dist/domain/eventProcessTree.js +101 -90
- 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 +8 -8
- package/dist/domain/functionComparisonResults.js +25 -15
- package/dist/domain/functionComparisonSchemas.js +49 -33
- package/dist/domain/functionDossierEvidence.js +31 -151
- package/dist/domain/hopperStartupFailure.js +1 -1
- package/dist/domain/hopperValues.js +17 -141
- package/dist/domain/inputIssueProjection.js +4 -1
- 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 +70 -77
- 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 +100 -101
- package/dist/domain/javascriptRuntimeLoadState.js +3 -8
- package/dist/domain/javascriptRuntimeObservation.js +43 -103
- package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
- package/dist/domain/javascriptRuntimeReconciliationActive.js +80 -0
- package/dist/domain/javascriptRuntimeReconciliationGraph.js +21 -33
- package/dist/domain/javascriptRuntimeReconciliationMatching.js +75 -61
- package/dist/domain/javascriptRuntimeReconciliationParsing.js +21 -46
- package/dist/domain/javascriptRuntimeReconciliationResult.js +25 -19
- package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
- package/dist/domain/javascriptRuntimeReconciliationSchemas.js +34 -49
- 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 +17 -14
- 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 +15 -18
- 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/processCaptureReactiveValidation.js +8 -3
- package/dist/domain/processCaptureValidation.js +8 -10
- package/dist/domain/processComparison.js +12 -16
- package/dist/domain/processObservation.js +5 -6
- package/dist/domain/processReactiveMatching.js +32 -46
- 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 +42 -21
- package/dist/domain/processScenario.js +62 -93
- package/dist/domain/processTraceComparison.js +0 -7
- package/dist/domain/processTraceEvaluation.js +14 -4
- package/dist/domain/processTraceSpecification.js +11 -17
- package/dist/domain/protocolCapture.js +11 -9
- 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 +66 -40
- 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 +3 -7
- package/dist/domain/replayMachine.js +19 -31
- package/dist/domain/replayMachineRun.js +15 -63
- package/dist/domain/replayMachineRuntime.js +46 -44
- 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 +11 -87
- package/dist/domain/sourceToBundleComparisonSchemas.js +25 -50
- package/dist/domain/sourceToBundleSignals.js +11 -16
- package/dist/domain/staticRuntimeCorrelation.js +44 -54
- 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 +48 -85
- 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 -42
- 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 +5 -13
- package/dist/ghidra/GhidraClientStartup.js +1 -1
- 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 +67 -108
- package/dist/ghidra/GhidraInstallation.js +98 -42
- package/dist/ghidra/GhidraInventoryValues.js +18 -77
- package/dist/ghidra/GhidraLauncher.js +0 -8
- package/dist/ghidra/GhidraProvider.js +32 -31
- package/dist/ghidra/GhidraProviderCapabilities.js +11 -48
- package/dist/ghidra/GhidraRequestQueue.js +6 -30
- package/dist/ghidra/GhidraResponseBuffer.js +1 -7
- package/dist/ghidra/GhidraSessionValues.js +0 -2
- package/dist/ghidra/GhidraSocketConnection.js +1 -1
- package/dist/ghidra/GhidraTransport.js +4 -7
- package/dist/ghidra/protocol.js +19 -42
- package/dist/hopper/BridgeLauncher.js +115 -37
- package/dist/hopper/HopperAnalysisProfile.js +3 -5
- package/dist/hopper/HopperCleanup.js +11 -9
- package/dist/hopper/HopperClient.js +5 -8
- package/dist/hopper/HopperProcessDiagnostic.js +2 -2
- package/dist/hopper/HopperProvider.js +0 -30
- 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 +21 -26
- package/dist/hopper/protocol.js +6 -4
- package/dist/main/reload.js +1 -9
- package/dist/main/shutdown.js +1 -1
- package/dist/main/state.js +0 -23
- package/dist/main/transport.js +27 -39
- package/dist/main.js +17 -15
- package/dist/mcpDoctor.js +27 -69
- 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/PrivateRuntimeRoot.js +17 -0
- package/dist/process/ProcessOwnership.js +67 -130
- package/dist/process/ProcessOwnershipIdentity.js +13 -0
- package/dist/process/ProcessOwnershipObservation.js +87 -0
- package/dist/process/ProcessOwnershipProcessTree.js +22 -0
- package/dist/process/ProviderDeadline.js +8 -12
- package/dist/process/ProviderProcess.js +7 -28
- package/dist/process/WindowsAuthority.js +32 -0
- 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 +95 -13
- package/dist/replay/JavaScriptReplayWorkerTypes.js +1 -0
- package/dist/replay/LinuxJavaScriptReplayRunner.js +42 -43
- package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
- package/dist/replay/LinuxRuntimeClosure.js +1 -3
- package/dist/replay/ReplayOutcome.js +27 -18
- package/dist/replay/ReplayProcessLifecycle.js +32 -7
- package/dist/replay/ReplaySeccompFile.js +29 -0
- package/dist/replay/ReplayWorkerProtocol.js +33 -30
- package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
- package/dist/server/ProcessCaptureElicitation.js +4 -8
- package/dist/server/createServer.js +145 -119
- package/dist/server/mcpClientMetadata.js +32 -0
- package/dist/server/promptCompletion.js +37 -61
- package/dist/server/recordDerivedEvidence.js +1 -1
- package/dist/server/registerApplicationTools/characterization.js +10 -21
- package/dist/server/registerApplicationTools/compareExportShapes.js +6 -16
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -15
- package/dist/server/registerApplicationTools/compareVersions.js +6 -16
- package/dist/server/registerApplicationTools/controlledReplay.js +8 -15
- package/dist/server/registerApplicationTools/coverage.js +7 -78
- package/dist/server/registerApplicationTools/helpers.js +1 -13
- package/dist/server/registerApplicationTools/obligationLedger.js +4 -8
- package/dist/server/registerApplicationTools/traceFeature.js +6 -15
- package/dist/server/registerApplicationTools/traceSemantics.js +5 -13
- package/dist/server/registerApplicationTools.js +0 -2
- package/dist/server/registerArtifactComparisonTool.js +27 -35
- package/dist/server/registerBrowserScenarioTool.js +3 -8
- package/dist/server/registerBrowserTools.js +36 -81
- package/dist/server/registerBundleComparisonTool.js +10 -16
- package/dist/server/registerCloseLifecycleTool.js +5 -27
- package/dist/server/registerElectronTools.js +29 -65
- package/dist/server/registerEnhancedTools.js +118 -127
- package/dist/server/registerEvidenceTools.js +19 -30
- package/dist/server/registerFunctionComparisonTool.js +35 -34
- package/dist/server/registerInvestigationTools/helpers.js +3 -32
- package/dist/server/registerInvestigationTools.js +36 -148
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +15 -27
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +16 -23
- package/dist/server/registerManagedWorkflowTools/contract.js +2 -3
- package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -14
- package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +4 -14
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +11 -20
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +10 -21
- package/dist/server/registerOfficialTools.js +8 -51
- package/dist/server/registerProcessComparisonTool.js +43 -38
- package/dist/server/registerPrompts.js +19 -17
- package/dist/server/registerReplayMachineTool.js +4 -10
- package/dist/server/registerSessionRecordTools.js +36 -153
- package/dist/server/registerSessionStatusTool.js +18 -96
- package/dist/server/registerSessionTools.js +34 -91
- package/dist/server/sessionAvailabilityPolicy.js +2 -3
- package/dist/server/sessionEvidence.js +9 -15
- package/dist/server/sessionToolPolicies.js +1 -13
- package/dist/server/toolRegistrationOptions.js +4 -192
- package/dist/server/toolResult.js +15 -67
- package/dist/serverIdentity.js +0 -20
- package/install.sh +1 -1
- package/package.json +27 -15
- package/scripts/electron-active-hook-boundaries.cjs +394 -0
- package/scripts/electron-active-hook.cjs +469 -0
- package/scripts/hopper-demo-x11.py +13 -32
- package/scripts/rea.mjs +1 -11
- package/skills/reverse-engineer-anything/SKILL.md +46 -11
- 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 -180
- package/dist/application/BoundedJsonFiles.js +0 -86
- package/dist/application/CrossVersionInventory.js +0 -128
- 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 -346
- package/dist/domain/jsonLimits.js +0 -26
- package/dist/domain/knownPageCoverage.js +0 -21
- package/dist/domain/processPairedExperiment.js +0 -128
- package/dist/server/DynamicToolAvailability.js +0 -70
- package/dist/server/LazyToolCatalog.js +0 -134
- package/dist/server/hydrateServerTools.js +0 -191
- package/dist/server/javascriptApplicationResult.js +0 -106
- package/dist/server/permissionFailure.js +0 -12
- package/dist/server/registerApplicationTools/readiness.js +0 -55
- 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
- package/dist/server/toolInputValidation.js +0 -77
- package/scripts/package-runner-bootstrap.mjs +0 -72
|
@@ -1,30 +1,13 @@
|
|
|
1
1
|
import { Cli, z } from "incur";
|
|
2
|
+
import { browserContext, browserCliError } from "./cliBrowserContext.js";
|
|
2
3
|
import { analyzeWebBundle, inspectWebPage, listBrowserTargets, observeWebSession, } from "./application/BrowserObservationService.js";
|
|
3
|
-
import { loadConfiguredPermissionAuthority } from "./application/PermissionConfiguration.js";
|
|
4
|
-
import { CdpBrowserProvider } from "./browser/CdpBrowserProvider.js";
|
|
5
4
|
import { logCliCommand } from "./cliLogging.js";
|
|
6
|
-
import { parseConfig } from "./config.js";
|
|
7
5
|
import { inspectWebPageInputSchema, listBrowserTargetsInputSchema, } from "./domain/browserObservation.js";
|
|
8
6
|
import { analyzeWebBundleInputSchema } from "./domain/webBundleAnalysis.js";
|
|
9
7
|
import { observeWebSessionInputSchema } from "./domain/browserSession.js";
|
|
10
|
-
import { AnalysisInputError
|
|
8
|
+
import { AnalysisInputError } from "./domain/errors.js";
|
|
11
9
|
import { CLI_COMMANDS } from "./cliCommandNames.js";
|
|
12
|
-
import { browserPageInspectionOptions } from "./cliObservationOptions.js";
|
|
13
|
-
const browserScopeOptions = {
|
|
14
|
-
allowedOrigins: z
|
|
15
|
-
.array(z.string().min(1))
|
|
16
|
-
.optional()
|
|
17
|
-
.describe("Exact origins to observe; defaults to REA_BROWSER_ALLOWED_ORIGINS_JSON"),
|
|
18
|
-
approved: z.boolean().default(false).describe("Approve passive observation"),
|
|
19
|
-
};
|
|
20
|
-
const boundedCount = (subject, maximum, fallback, minimum = 1) => z
|
|
21
|
-
.number()
|
|
22
|
-
.int()
|
|
23
|
-
.min(minimum)
|
|
24
|
-
.max(maximum)
|
|
25
|
-
.default(fallback)
|
|
26
|
-
.describe(`Maximum ${subject}`);
|
|
27
|
-
const boundedBytes = (subject, maximum, fallback) => boundedCount(`${subject} in bytes`, maximum, fallback);
|
|
10
|
+
import { browserPageInspectionOptions, browserScopeOptions, observationDuration, } from "./cliObservationOptions.js";
|
|
28
11
|
/** Register CLI equivalents of the passive browser MCP tools. */
|
|
29
12
|
export const registerBrowserCommands = (cli, logger) => {
|
|
30
13
|
registerTargetList(cli, logger);
|
|
@@ -38,31 +21,19 @@ const registerTargetList = (cli, logger) => {
|
|
|
38
21
|
args: z.object({
|
|
39
22
|
endpoint: z.string().describe("Configured loopback CDP HTTP endpoint"),
|
|
40
23
|
}),
|
|
41
|
-
options: z.object({
|
|
42
|
-
...browserScopeOptions,
|
|
43
|
-
offset: z
|
|
44
|
-
.number()
|
|
45
|
-
.int()
|
|
46
|
-
.min(0)
|
|
47
|
-
.default(0)
|
|
48
|
-
.describe("Zero-based browser-target offset"),
|
|
49
|
-
limit: boundedCount("browser targets to return", 200, 100),
|
|
50
|
-
}),
|
|
24
|
+
options: z.object({ ...browserScopeOptions }),
|
|
51
25
|
run: ({ args, options }) => logCliCommand(logger, "list-browser-targets", async () => {
|
|
52
|
-
const context = await browserContext();
|
|
26
|
+
const context = await browserContext("list_browser_targets");
|
|
53
27
|
if (!context.ok)
|
|
54
28
|
return context.error;
|
|
55
29
|
const parsed = listBrowserTargetsInputSchema.safeParse({
|
|
56
30
|
cdp_endpoint: args.endpoint,
|
|
57
31
|
allowed_origins: options.allowedOrigins ?? context.allowedBrowserOrigins,
|
|
58
|
-
approved: options.approved,
|
|
59
|
-
offset: options.offset,
|
|
60
|
-
limit: options.limit,
|
|
61
32
|
});
|
|
62
33
|
if (!parsed.success)
|
|
63
|
-
return
|
|
34
|
+
return browserCliError(new AnalysisInputError("list_browser_targets"));
|
|
64
35
|
const result = await listBrowserTargets(context.provider, context.authority, parsed.data);
|
|
65
|
-
return result.ok ? result.value :
|
|
36
|
+
return result.ok ? result.value : browserCliError(result.error);
|
|
66
37
|
}),
|
|
67
38
|
});
|
|
68
39
|
};
|
|
@@ -75,54 +46,26 @@ const registerPageInspection = (cli, logger) => {
|
|
|
75
46
|
}),
|
|
76
47
|
options: browserPageInspectionOptions,
|
|
77
48
|
run: ({ args, options }) => logCliCommand(logger, "inspect-web-page", async () => {
|
|
78
|
-
const context = await browserContext();
|
|
49
|
+
const context = await browserContext("inspect_web_page");
|
|
79
50
|
if (!context.ok)
|
|
80
51
|
return context.error;
|
|
81
52
|
const parsed = inspectWebPageInputSchema.safeParse({
|
|
82
53
|
cdp_endpoint: args.endpoint,
|
|
83
54
|
allowed_origins: options.allowedOrigins ?? context.allowedBrowserOrigins,
|
|
84
|
-
approved: options.approved,
|
|
85
55
|
target_id: args.targetId,
|
|
86
56
|
observation_ms: options.observationMs,
|
|
87
57
|
include_accessibility_text: options.includeAccessibilityText,
|
|
88
58
|
include_console_text: options.includeConsoleText,
|
|
89
|
-
console_text_approved: options.consoleTextApproved,
|
|
90
59
|
include_json_body_shapes: options.includeJsonBodyShapes,
|
|
91
|
-
json_body_schema_approved: options.jsonBodySchemaApproved,
|
|
92
60
|
include_websocket_shapes: options.includeWebsocketShapes,
|
|
93
|
-
websocket_shape_approved: options.websocketShapeApproved,
|
|
94
61
|
include_script_sources: options.includeScriptSources,
|
|
95
62
|
include_storage_keys: options.includeStorageKeys,
|
|
96
63
|
include_storage_fingerprints: options.includeStorageFingerprints,
|
|
97
|
-
limits: {
|
|
98
|
-
max_frames: options.maxFrames,
|
|
99
|
-
max_dom_nodes: options.maxDomNodes,
|
|
100
|
-
max_ax_nodes: options.maxAxNodes,
|
|
101
|
-
max_ax_text_field_bytes: options.maxAxTextFieldBytes,
|
|
102
|
-
max_total_ax_text_bytes: options.maxTotalAxTextBytes,
|
|
103
|
-
max_scripts: options.maxScripts,
|
|
104
|
-
max_resources: options.maxResources,
|
|
105
|
-
max_workers: options.maxWorkers,
|
|
106
|
-
max_storage_keys: options.maxStorageKeys,
|
|
107
|
-
max_script_source_bytes: options.maxScriptSourceBytes,
|
|
108
|
-
max_total_script_source_bytes: options.maxTotalScriptSourceBytes,
|
|
109
|
-
max_network_events: options.maxNetworkEvents,
|
|
110
|
-
max_console_events: options.maxConsoleEvents,
|
|
111
|
-
max_console_text_field_bytes: options.maxConsoleTextFieldBytes,
|
|
112
|
-
max_total_console_text_bytes: options.maxTotalConsoleTextBytes,
|
|
113
|
-
max_json_body_bytes: options.maxJsonBodyBytes,
|
|
114
|
-
max_total_json_body_bytes: options.maxTotalJsonBodyBytes,
|
|
115
|
-
max_json_shape_nodes: options.maxJsonShapeNodes,
|
|
116
|
-
max_json_shape_depth: options.maxJsonShapeDepth,
|
|
117
|
-
max_websocket_events: options.maxWebsocketEvents,
|
|
118
|
-
max_websocket_shape_bytes: options.maxWebsocketShapeBytes,
|
|
119
|
-
max_total_websocket_shape_bytes: options.maxTotalWebsocketShapeBytes,
|
|
120
|
-
},
|
|
121
64
|
});
|
|
122
65
|
if (!parsed.success)
|
|
123
|
-
return
|
|
66
|
+
return browserCliError(new AnalysisInputError("inspect_web_page"));
|
|
124
67
|
const result = await inspectWebPage(context.provider, context.authority, parsed.data);
|
|
125
|
-
return result.ok ? result.value :
|
|
68
|
+
return result.ok ? result.value : browserCliError(result.error);
|
|
126
69
|
}),
|
|
127
70
|
});
|
|
128
71
|
};
|
|
@@ -135,104 +78,56 @@ const registerBundleAnalysis = (cli, logger) => {
|
|
|
135
78
|
}),
|
|
136
79
|
options: z.object({
|
|
137
80
|
...browserScopeOptions,
|
|
138
|
-
|
|
139
|
-
.boolean()
|
|
140
|
-
.default(false)
|
|
141
|
-
.describe("Approve capturing bounded script source text"),
|
|
142
|
-
observationMs: boundedCount("observation duration in milliseconds", 10_000, 500, 0),
|
|
81
|
+
observationMs: observationDuration(500),
|
|
143
82
|
fetchSourceMaps: z
|
|
144
83
|
.boolean()
|
|
145
84
|
.default(false)
|
|
146
85
|
.describe("Fetch source maps referenced by captured scripts"),
|
|
147
|
-
sourceMapFetchApproved: z
|
|
148
|
-
.boolean()
|
|
149
|
-
.default(false)
|
|
150
|
-
.describe("Approve fetching referenced source maps from allowed origins"),
|
|
151
|
-
maxFindings: boundedCount("static-analysis findings", 10_000, 1_000),
|
|
152
|
-
maxAstNodes: boundedCount("JavaScript AST nodes", 2_000_000, 250_000),
|
|
153
|
-
maxSourceMaps: boundedCount("source maps", 1_000, 100),
|
|
154
|
-
maxSourceMapBytes: boundedBytes("one source map", 16 * 1_024 * 1_024, 4 * 1_024 * 1_024),
|
|
155
|
-
maxTotalSourceMapBytes: boundedBytes("total source maps", 64 * 1_024 * 1_024, 16 * 1_024 * 1_024),
|
|
156
|
-
maxSourceMapMappings: boundedCount("decoded source-map mappings", 100_000, 10_000),
|
|
157
|
-
maxOriginalSources: boundedCount("original source files", 20_000, 2_000),
|
|
158
86
|
}),
|
|
159
87
|
run: ({ args, options }) => logCliCommand(logger, "analyze-web-bundle", async () => {
|
|
160
|
-
const context = await browserContext();
|
|
88
|
+
const context = await browserContext("analyze_web_bundle");
|
|
161
89
|
if (!context.ok)
|
|
162
90
|
return context.error;
|
|
163
91
|
const parsed = analyzeWebBundleInputSchema.safeParse({
|
|
164
92
|
cdp_endpoint: args.endpoint,
|
|
165
93
|
allowed_origins: options.allowedOrigins ?? context.allowedBrowserOrigins,
|
|
166
|
-
approved: options.approved,
|
|
167
94
|
target_id: args.targetId,
|
|
168
95
|
observation_ms: options.observationMs,
|
|
169
96
|
include_script_sources: true,
|
|
170
|
-
source_capture_approved: options.sourceCaptureApproved,
|
|
171
97
|
fetch_source_maps: options.fetchSourceMaps,
|
|
172
|
-
source_map_fetch_approved: options.sourceMapFetchApproved,
|
|
173
|
-
analysis_limits: {
|
|
174
|
-
max_findings: options.maxFindings,
|
|
175
|
-
max_ast_nodes: options.maxAstNodes,
|
|
176
|
-
max_source_maps: options.maxSourceMaps,
|
|
177
|
-
max_source_map_bytes: options.maxSourceMapBytes,
|
|
178
|
-
max_total_source_map_bytes: options.maxTotalSourceMapBytes,
|
|
179
|
-
max_source_map_mappings: options.maxSourceMapMappings,
|
|
180
|
-
max_original_sources: options.maxOriginalSources,
|
|
181
|
-
},
|
|
182
98
|
});
|
|
183
99
|
if (!parsed.success)
|
|
184
|
-
return
|
|
100
|
+
return browserCliError(new AnalysisInputError("analyze_web_bundle"));
|
|
185
101
|
const result = await analyzeWebBundle(context.provider, context.authority, parsed.data);
|
|
186
|
-
return result.ok ? result.value :
|
|
102
|
+
return result.ok ? result.value : browserCliError(result.error);
|
|
187
103
|
}),
|
|
188
104
|
});
|
|
189
105
|
};
|
|
190
106
|
const registerObservationSession = (cli, logger) => {
|
|
191
107
|
cli.command(CLI_COMMANDS.observeWebSession, {
|
|
192
|
-
description: "Observe user-driven page navigation during a
|
|
108
|
+
description: "Observe user-driven page navigation during a chosen window",
|
|
193
109
|
args: z.object({
|
|
194
110
|
endpoint: z.string().describe("Configured loopback CDP HTTP endpoint"),
|
|
195
111
|
targetId: z.string().describe("Target ID from list-browser-targets"),
|
|
196
112
|
}),
|
|
197
113
|
options: z.object({
|
|
198
114
|
...browserScopeOptions,
|
|
199
|
-
observationMs:
|
|
200
|
-
maxTimelineEvents: boundedCount("timeline events", 20_000, 2_000),
|
|
115
|
+
observationMs: observationDuration(10_000, 1),
|
|
201
116
|
}),
|
|
202
117
|
run: ({ args, options }) => logCliCommand(logger, "observe-web-session", async () => {
|
|
203
|
-
const context = await browserContext();
|
|
118
|
+
const context = await browserContext("observe_web_session");
|
|
204
119
|
if (!context.ok)
|
|
205
120
|
return context.error;
|
|
206
121
|
const parsed = observeWebSessionInputSchema.safeParse({
|
|
207
122
|
cdp_endpoint: args.endpoint,
|
|
208
123
|
allowed_origins: options.allowedOrigins ?? context.allowedBrowserOrigins,
|
|
209
124
|
target_id: args.targetId,
|
|
210
|
-
approved: options.approved,
|
|
211
125
|
observation_ms: options.observationMs,
|
|
212
|
-
max_timeline_events: options.maxTimelineEvents,
|
|
213
126
|
});
|
|
214
127
|
if (!parsed.success)
|
|
215
|
-
return
|
|
128
|
+
return browserCliError(new AnalysisInputError("observe_web_session"));
|
|
216
129
|
const result = await observeWebSession(context.provider, context.authority, parsed.data);
|
|
217
|
-
return result.ok ? result.value :
|
|
130
|
+
return result.ok ? result.value : browserCliError(result.error);
|
|
218
131
|
}),
|
|
219
132
|
});
|
|
220
133
|
};
|
|
221
|
-
const browserContext = async () => {
|
|
222
|
-
const config = parseConfig(process.env);
|
|
223
|
-
if (!config.ok)
|
|
224
|
-
return { ok: false, error: cliError(config.error) };
|
|
225
|
-
const authority = await loadConfiguredPermissionAuthority(config.value);
|
|
226
|
-
if (!authority.ok)
|
|
227
|
-
return { ok: false, error: cliError(authority.error) };
|
|
228
|
-
return {
|
|
229
|
-
ok: true,
|
|
230
|
-
authority: authority.value,
|
|
231
|
-
provider: new CdpBrowserProvider(),
|
|
232
|
-
allowedBrowserOrigins: config.value.browserAllowedOrigins,
|
|
233
|
-
};
|
|
234
|
-
};
|
|
235
|
-
const cliError = (error) => ({
|
|
236
|
-
error: "Browser observation failed",
|
|
237
|
-
...projectAnalysisError(error),
|
|
238
|
-
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { loadConfiguredPermissionAuthority } from "./application/PermissionConfiguration.js";
|
|
2
|
+
import { CdpBrowserProvider } from "./browser/CdpBrowserProvider.js";
|
|
3
|
+
import { parseConfig } from "./config.js";
|
|
4
|
+
import { AnalysisCapabilityUnavailableError, projectAnalysisError, } from "./domain/errors.js";
|
|
5
|
+
/** Load the configured passive browser authority and provider for one CLI operation. */
|
|
6
|
+
export const browserContext = async (operation) => {
|
|
7
|
+
const config = parseConfig(process.env);
|
|
8
|
+
if (!config.ok)
|
|
9
|
+
return { ok: false, error: browserCliError(config.error) };
|
|
10
|
+
const policy = config.value.browserObservationPolicy;
|
|
11
|
+
if (policy.status === "disabled")
|
|
12
|
+
return {
|
|
13
|
+
ok: false,
|
|
14
|
+
error: browserCliError(new AnalysisCapabilityUnavailableError("rea-cdp-browser", operation, "browser observation is disabled; configure exact endpoints and origins before enabling it")),
|
|
15
|
+
};
|
|
16
|
+
const authority = await loadConfiguredPermissionAuthority(config.value);
|
|
17
|
+
if (!authority.ok)
|
|
18
|
+
return { ok: false, error: browserCliError(authority.error) };
|
|
19
|
+
return {
|
|
20
|
+
ok: true,
|
|
21
|
+
authority: authority.value,
|
|
22
|
+
provider: new CdpBrowserProvider(),
|
|
23
|
+
allowedBrowserOrigins: policy.allowedOrigins,
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
/** Project a browser operation failure consistently across CLI command groups. */
|
|
27
|
+
export const browserCliError = (error) => ({
|
|
28
|
+
error: "Browser observation failed",
|
|
29
|
+
...projectAnalysisError(error),
|
|
30
|
+
});
|
package/dist/cliCommandNames.js
CHANGED
|
@@ -9,6 +9,8 @@ export const CLI_COMMANDS = Object.freeze({
|
|
|
9
9
|
upgrade: "upgrade",
|
|
10
10
|
xrefs: "xrefs",
|
|
11
11
|
trace: "trace",
|
|
12
|
+
traceNativeUiAction: "trace-native-ui-action",
|
|
13
|
+
inspectNativeDispatchMetadata: "inspect-native-dispatch-metadata",
|
|
12
14
|
capabilities: "capabilities",
|
|
13
15
|
providers: "providers",
|
|
14
16
|
function: "function",
|
|
@@ -16,9 +18,9 @@ export const CLI_COMMANDS = Object.freeze({
|
|
|
16
18
|
instructions: "instructions",
|
|
17
19
|
search: "search",
|
|
18
20
|
importReferenceSource: "import-reference-source",
|
|
19
|
-
inventoryArtifact: "inventory-artifact",
|
|
20
21
|
inspectArtifact: "inspect-artifact",
|
|
21
22
|
extractArtifact: "extract-artifact",
|
|
23
|
+
decodeInterfaceBuilder: "decode-interface-builder",
|
|
22
24
|
inspectManagedArtifact: "inspect-managed-artifact",
|
|
23
25
|
inspectManagedMembers: "inspect-managed-members",
|
|
24
26
|
inspectManagedNativeBoundaries: "inspect-managed-native-boundaries",
|
|
@@ -35,7 +37,6 @@ export const CLI_COMMANDS = Object.freeze({
|
|
|
35
37
|
evidenceImport: "evidence-import",
|
|
36
38
|
evidenceExport: "evidence-export",
|
|
37
39
|
compare: "compare",
|
|
38
|
-
investigateVersions: "investigate-versions",
|
|
39
40
|
captureProcess: "capture-process",
|
|
40
41
|
compareProcessCaptures: "compare-process-captures",
|
|
41
42
|
policy: "policy",
|
|
@@ -50,6 +51,7 @@ export const CLI_COMMANDS = Object.freeze({
|
|
|
50
51
|
captureBrowserScenario: "capture-browser-scenario",
|
|
51
52
|
listElectronTargets: "list-electron-targets",
|
|
52
53
|
inspectElectronPage: "inspect-electron-page",
|
|
54
|
+
captureElectronScenario: "capture-electron-scenario",
|
|
53
55
|
listJavaScriptRuntimeTargets: "list-javascript-runtime-targets",
|
|
54
56
|
observeJavaScriptRuntime: "observe-javascript-runtime",
|
|
55
57
|
analyzeJavaScriptApplication: "analyze-javascript-application",
|
|
@@ -64,9 +66,7 @@ export const CLI_COMMANDS = Object.freeze({
|
|
|
64
66
|
prepareNodeCharacterization: "prepare-node-characterization",
|
|
65
67
|
executeNodeCharacterization: "execute-node-characterization",
|
|
66
68
|
buildReconstructionObligationLedger: "build-reconstruction-obligation-ledger",
|
|
67
|
-
|
|
68
|
-
commitReconstructionCoverage: "commit-reconstruction-coverage",
|
|
69
|
-
queryReconstructionCoverage: "query-reconstruction-coverage",
|
|
69
|
+
evaluateReconstructionCoverage: "evaluate-reconstruction-coverage",
|
|
70
70
|
});
|
|
71
71
|
/** Ordered primary CLI inventory; aliases are intentionally excluded. */
|
|
72
72
|
export const CLI_COMMAND_NAMES = Object.freeze(Object.values(CLI_COMMANDS));
|
|
@@ -1,29 +1,49 @@
|
|
|
1
1
|
import { Cli, z } from "incur";
|
|
2
2
|
import { inspectElectronPage, listElectronTargets, } from "./application/ElectronObservationService.js";
|
|
3
|
+
import { captureElectronScenario } from "./application/ElectronActiveObservationService.js";
|
|
3
4
|
import { reconcileJavaScriptRuntimeEvidence } from "./application/JavaScriptRuntimeReconciliationService.js";
|
|
4
5
|
import { loadConfiguredPermissionAuthority } from "./application/PermissionConfiguration.js";
|
|
5
6
|
import { CdpElectronProvider } from "./browser/CdpElectronProvider.js";
|
|
7
|
+
import { PlaywrightElectronActiveProvider } from "./browser/PlaywrightElectronActiveProvider.js";
|
|
6
8
|
import { logCliCommand } from "./cliLogging.js";
|
|
7
9
|
import { parseConfig } from "./config.js";
|
|
8
10
|
import { inspectElectronPageInputSchema, listElectronTargetsInputSchema, } from "./domain/electronObservation.js";
|
|
9
|
-
import {
|
|
11
|
+
import { electronActiveObservationInputSchema } from "./domain/electronActiveObservation.js";
|
|
12
|
+
import { AnalysisCapabilityUnavailableError, AnalysisInputError, projectAnalysisError, } from "./domain/errors.js";
|
|
10
13
|
import { CLI_COMMANDS } from "./cliCommandNames.js";
|
|
11
14
|
import { parseCliJsonInput } from "./cliJsonInput.js";
|
|
12
15
|
import { electronPageInspectionOptions, javascriptApplicationOptions, } from "./cliObservationOptions.js";
|
|
13
16
|
import { runCliJavaScriptApplicationAnalysis } from "./cli/javascriptApplicationAnalysis.js";
|
|
14
|
-
const scopeOptions = {
|
|
15
|
-
allowedFileRoots: z
|
|
16
|
-
.array(z.string().min(1))
|
|
17
|
-
.optional()
|
|
18
|
-
.describe("Filesystem roots; defaults to REA_ELECTRON_FILE_ROOTS_JSON"),
|
|
19
|
-
approved: z.boolean().default(false).describe("Approve passive observation"),
|
|
20
|
-
};
|
|
21
17
|
/** Register CLI equivalents of the Electron MCP tools. */
|
|
22
18
|
export const registerElectronCommands = (cli, logger) => {
|
|
23
19
|
registerElectronObservationCommands(cli, logger);
|
|
20
|
+
registerElectronActiveCommand(cli, logger);
|
|
24
21
|
registerJavaScriptApplicationCommand(cli, logger);
|
|
25
22
|
registerJavaScriptRuntimeReconciliationCommand(cli, logger);
|
|
26
23
|
};
|
|
24
|
+
const registerElectronActiveCommand = (cli, logger) => {
|
|
25
|
+
cli.command(CLI_COMMANDS.captureElectronScenario, {
|
|
26
|
+
description: "Run one approved, bounded owned Electron scenario",
|
|
27
|
+
args: z.object({
|
|
28
|
+
inputJson: z
|
|
29
|
+
.string()
|
|
30
|
+
.describe("Inline JSON or a JSON file matching capture_electron_scenario"),
|
|
31
|
+
}),
|
|
32
|
+
run: ({ args }) => logCliCommand(logger, CLI_COMMANDS.captureElectronScenario, async () => {
|
|
33
|
+
const input = await parseCliJsonInput(args.inputJson, "capture_electron_scenario");
|
|
34
|
+
if (!input.ok)
|
|
35
|
+
return input.error;
|
|
36
|
+
const parsed = electronActiveObservationInputSchema.safeParse(input.value);
|
|
37
|
+
if (!parsed.success)
|
|
38
|
+
return inputError("capture_electron_scenario");
|
|
39
|
+
const context = await electronContext();
|
|
40
|
+
if (!context.ok)
|
|
41
|
+
return context.error;
|
|
42
|
+
const result = await captureElectronScenario(context.activeProvider, context.authority, parsed.data);
|
|
43
|
+
return result.ok ? result.value : cliError(result.error);
|
|
44
|
+
}),
|
|
45
|
+
});
|
|
46
|
+
};
|
|
27
47
|
const registerJavaScriptRuntimeReconciliationCommand = (cli, logger) => {
|
|
28
48
|
cli.command(CLI_COMMANDS.reconcileJavaScriptRuntime, {
|
|
29
49
|
description: "Reconcile static application and passive runtime Evidence JSON",
|
|
@@ -47,38 +67,16 @@ const registerElectronObservationCommands = (cli, logger) => {
|
|
|
47
67
|
};
|
|
48
68
|
const registerElectronTargetList = (cli, logger) => {
|
|
49
69
|
cli.command(CLI_COMMANDS.listElectronTargets, {
|
|
50
|
-
description: "List
|
|
70
|
+
description: "List local file pages exposed by Electron CDP",
|
|
51
71
|
args: z.object({
|
|
52
|
-
endpoint: z
|
|
53
|
-
.string()
|
|
54
|
-
.describe("Configured loopback Electron CDP endpoint"),
|
|
72
|
+
endpoint: z.string().describe("Literal-loopback Electron CDP endpoint"),
|
|
55
73
|
}),
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
offset: z
|
|
59
|
-
.number()
|
|
60
|
-
.int()
|
|
61
|
-
.min(0)
|
|
62
|
-
.default(0)
|
|
63
|
-
.describe("Zero-based Electron-target offset"),
|
|
64
|
-
limit: z
|
|
65
|
-
.number()
|
|
66
|
-
.int()
|
|
67
|
-
.min(1)
|
|
68
|
-
.max(200)
|
|
69
|
-
.default(100)
|
|
70
|
-
.describe("Maximum Electron targets to return"),
|
|
71
|
-
}),
|
|
72
|
-
run: ({ args, options }) => logCliCommand(logger, "list-electron-targets", async () => {
|
|
73
|
-
const context = await electronContext();
|
|
74
|
+
run: ({ args }) => logCliCommand(logger, "list-electron-targets", async () => {
|
|
75
|
+
const context = await electronObservationContext("list_electron_targets");
|
|
74
76
|
if (!context.ok)
|
|
75
77
|
return context.error;
|
|
76
78
|
const parsed = listElectronTargetsInputSchema.safeParse({
|
|
77
79
|
cdp_endpoint: args.endpoint,
|
|
78
|
-
allowed_file_roots: options.allowedFileRoots ?? context.allowedFileRoots,
|
|
79
|
-
approved: options.approved,
|
|
80
|
-
offset: options.offset,
|
|
81
|
-
limit: options.limit,
|
|
82
80
|
});
|
|
83
81
|
if (!parsed.success)
|
|
84
82
|
return inputError("list_electron_targets");
|
|
@@ -89,35 +87,21 @@ const registerElectronTargetList = (cli, logger) => {
|
|
|
89
87
|
};
|
|
90
88
|
const registerElectronPageInspection = (cli, logger) => {
|
|
91
89
|
cli.command(CLI_COMMANDS.inspectElectronPage, {
|
|
92
|
-
description: "Passively inspect one
|
|
90
|
+
description: "Passively inspect one Electron file page",
|
|
93
91
|
args: z.object({
|
|
94
|
-
endpoint: z
|
|
95
|
-
.string()
|
|
96
|
-
.describe("Configured loopback Electron CDP endpoint"),
|
|
92
|
+
endpoint: z.string().describe("Literal-loopback Electron CDP endpoint"),
|
|
97
93
|
targetId: z.string().describe("Target ID from list-electron-targets"),
|
|
98
94
|
}),
|
|
99
95
|
options: electronPageInspectionOptions,
|
|
100
96
|
run: ({ args, options }) => logCliCommand(logger, "inspect-electron-page", async () => {
|
|
101
|
-
const context = await
|
|
97
|
+
const context = await electronObservationContext("inspect_electron_page");
|
|
102
98
|
if (!context.ok)
|
|
103
99
|
return context.error;
|
|
104
100
|
const parsed = inspectElectronPageInputSchema.safeParse({
|
|
105
101
|
cdp_endpoint: args.endpoint,
|
|
106
|
-
allowed_file_roots: options.allowedFileRoots ?? context.allowedFileRoots,
|
|
107
102
|
target_id: args.targetId,
|
|
108
|
-
approved: options.approved,
|
|
109
103
|
observation_ms: options.observationMs,
|
|
110
104
|
include_script_sources: options.includeScriptSources,
|
|
111
|
-
source_capture_approved: options.sourceCaptureApproved,
|
|
112
|
-
limits: {
|
|
113
|
-
max_frames: options.maxFrames,
|
|
114
|
-
max_dom_nodes: options.maxDomNodes,
|
|
115
|
-
max_scripts: options.maxScripts,
|
|
116
|
-
max_resources: options.maxResources,
|
|
117
|
-
max_workers: options.maxWorkers,
|
|
118
|
-
max_script_source_bytes: options.maxScriptSourceBytes,
|
|
119
|
-
max_total_script_source_bytes: options.maxTotalScriptSourceBytes,
|
|
120
|
-
},
|
|
121
105
|
});
|
|
122
106
|
if (!parsed.success)
|
|
123
107
|
return inputError("inspect_electron_page");
|
|
@@ -128,32 +112,14 @@ const registerElectronPageInspection = (cli, logger) => {
|
|
|
128
112
|
};
|
|
129
113
|
const registerJavaScriptApplicationCommand = (cli, logger) => {
|
|
130
114
|
cli.command(CLI_COMMANDS.analyzeJavaScriptApplication, {
|
|
131
|
-
description: "Statically reconstruct
|
|
115
|
+
description: "Statically reconstruct a local JavaScript/Electron application",
|
|
132
116
|
args: z.object({
|
|
133
117
|
path: z.string().describe("Absolute ASAR or extracted application path"),
|
|
134
118
|
}),
|
|
135
119
|
options: javascriptApplicationOptions,
|
|
136
120
|
run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.analyzeJavaScriptApplication, () => runCliJavaScriptApplicationAnalysis({
|
|
137
121
|
input_path: args.path,
|
|
138
|
-
approved: options.approved,
|
|
139
122
|
format: options.artifactFormat,
|
|
140
|
-
source_map_read_approved: options.sourceMapReadApproved,
|
|
141
|
-
limits: {
|
|
142
|
-
max_entries: options.maxEntries,
|
|
143
|
-
max_total_artifact_bytes: options.maxTotalArtifactBytes,
|
|
144
|
-
max_artifact_entry_bytes: options.maxArtifactEntryBytes,
|
|
145
|
-
max_compression_ratio: options.maxCompressionRatio,
|
|
146
|
-
max_depth: options.maxDepth,
|
|
147
|
-
max_path_bytes: options.maxPathBytes,
|
|
148
|
-
max_text_files: options.maxTextFiles,
|
|
149
|
-
max_total_text_bytes: options.maxTotalTextBytes,
|
|
150
|
-
max_text_file_bytes: options.maxTextFileBytes,
|
|
151
|
-
max_ast_nodes: options.maxAstNodes,
|
|
152
|
-
max_findings: options.maxFindings,
|
|
153
|
-
max_modules: options.maxModules,
|
|
154
|
-
max_source_map_sources: options.maxSourceMapSources,
|
|
155
|
-
max_parse_milliseconds: options.maxParseMilliseconds,
|
|
156
|
-
},
|
|
157
123
|
})),
|
|
158
124
|
});
|
|
159
125
|
};
|
|
@@ -168,9 +134,21 @@ const electronContext = async () => {
|
|
|
168
134
|
ok: true,
|
|
169
135
|
authority: authority.value,
|
|
170
136
|
provider: new CdpElectronProvider(),
|
|
171
|
-
|
|
137
|
+
activeProvider: new PlaywrightElectronActiveProvider(),
|
|
138
|
+
observationPolicy: config.value.electronObservationPolicy,
|
|
172
139
|
};
|
|
173
140
|
};
|
|
141
|
+
const electronObservationContext = async (operation) => {
|
|
142
|
+
const context = await electronContext();
|
|
143
|
+
if (!context.ok)
|
|
144
|
+
return context;
|
|
145
|
+
if (context.observationPolicy.status === "disabled")
|
|
146
|
+
return {
|
|
147
|
+
ok: false,
|
|
148
|
+
error: cliError(new AnalysisCapabilityUnavailableError("rea-cdp-electron", operation, "Electron observation is disabled; enable REA_ELECTRON_OBSERVE_ENABLED to authorize loopback endpoints")),
|
|
149
|
+
};
|
|
150
|
+
return context;
|
|
151
|
+
};
|
|
174
152
|
const inputError = (operation) => cliError(new AnalysisInputError(operation));
|
|
175
153
|
const cliError = (error) => ({
|
|
176
154
|
error: "Electron analysis failed",
|
|
@@ -1,32 +1,22 @@
|
|
|
1
1
|
import { Cli, z } from "incur";
|
|
2
2
|
import { compareEvidenceBundlesCommand, exportEvidenceBundleCommand, importEvidenceBundleCommand, } from "./application/EvidenceBundleCommands.js";
|
|
3
|
-
import { parseConfig } from "./config.js";
|
|
4
3
|
import { logCliCommand } from "./cliLogging.js";
|
|
5
4
|
import { CLI_COMMANDS } from "./cliCommandNames.js";
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
/** Register filesystem-gated Evidence v2 commands. */
|
|
5
|
+
import { projectAnalysisError } from "./domain/errors.js";
|
|
6
|
+
/** Register caller-path Evidence commands. */
|
|
9
7
|
export const registerEvidenceCommands = (cli, logger) => {
|
|
10
8
|
cli.command(CLI_COMMANDS.evidenceImport, {
|
|
11
|
-
description: "Validate and import a bounded local Evidence
|
|
9
|
+
description: "Validate and import a bounded local Evidence bundle",
|
|
12
10
|
args: z.object({
|
|
13
11
|
path: z.string().describe("Evidence bundle JSON path"),
|
|
14
12
|
}),
|
|
15
13
|
run: ({ args }) => logCliCommand(logger, "evidence-import", async () => {
|
|
16
|
-
const
|
|
17
|
-
if (!config.ok)
|
|
18
|
-
return cliError(config.error);
|
|
19
|
-
const denied = await authorizeEvidence(config.value, [
|
|
20
|
-
{ capability: "evidence_read", path: args.path, access: "read" },
|
|
21
|
-
]);
|
|
22
|
-
if (denied !== undefined)
|
|
23
|
-
return cliError(denied);
|
|
24
|
-
const imported = await importEvidenceBundleCommand(args.path, config.value.evidenceFilePolicy);
|
|
14
|
+
const imported = await importEvidenceBundleCommand(args.path);
|
|
25
15
|
return imported.ok ? imported.value : cliError(imported.error);
|
|
26
16
|
}),
|
|
27
17
|
});
|
|
28
18
|
cli.command(CLI_COMMANDS.evidenceExport, {
|
|
29
|
-
description: "Validate and atomically export canonical Evidence
|
|
19
|
+
description: "Validate and atomically export canonical Evidence JSON",
|
|
30
20
|
args: z.object({
|
|
31
21
|
source: z.string().describe("Existing evidence bundle JSON path"),
|
|
32
22
|
output: z.string().describe("Canonical output JSON path"),
|
|
@@ -35,85 +25,26 @@ export const registerEvidenceCommands = (cli, logger) => {
|
|
|
35
25
|
overwrite: z.boolean().default(false).describe("Replace output file"),
|
|
36
26
|
}),
|
|
37
27
|
run: ({ args, options }) => logCliCommand(logger, "evidence-export", async () => {
|
|
38
|
-
const
|
|
39
|
-
if (!config.ok)
|
|
40
|
-
return cliError(config.error);
|
|
41
|
-
const denied = await authorizeEvidence(config.value, [
|
|
42
|
-
{ capability: "evidence_read", path: args.source, access: "read" },
|
|
43
|
-
{ capability: "evidence_write", path: args.output, access: "write" },
|
|
44
|
-
]);
|
|
45
|
-
if (denied !== undefined)
|
|
46
|
-
return cliError(denied);
|
|
47
|
-
const exported = await exportEvidenceBundleCommand(args.source, args.output, options.overwrite, config.value.evidenceFilePolicy);
|
|
28
|
+
const exported = await exportEvidenceBundleCommand(args.source, args.output, options.overwrite);
|
|
48
29
|
return exported.ok ? exported.value : cliError(exported.error);
|
|
49
30
|
}),
|
|
50
31
|
});
|
|
51
32
|
cli.command(CLI_COMMANDS.compare, {
|
|
52
33
|
aliases: ["compare-bundles"],
|
|
53
|
-
description: "Compare two canonical Evidence
|
|
34
|
+
description: "Compare two canonical Evidence bundles",
|
|
54
35
|
args: z.object({
|
|
55
36
|
left: z.string().describe("Left Evidence bundle JSON path"),
|
|
56
37
|
right: z.string().describe("Right Evidence bundle JSON path"),
|
|
57
38
|
}),
|
|
58
|
-
|
|
59
|
-
offset: z
|
|
60
|
-
.number()
|
|
61
|
-
.int()
|
|
62
|
-
.min(0)
|
|
63
|
-
.default(0)
|
|
64
|
-
.describe("Zero-based changed-record offset"),
|
|
65
|
-
limit: z
|
|
66
|
-
.number()
|
|
67
|
-
.int()
|
|
68
|
-
.min(1)
|
|
69
|
-
.max(500)
|
|
70
|
-
.default(100)
|
|
71
|
-
.describe("Maximum changed records to return"),
|
|
72
|
-
}),
|
|
73
|
-
run: ({ args, options }) => logCliCommand(logger, "compare", async () => {
|
|
74
|
-
const config = parseConfig(process.env);
|
|
75
|
-
if (!config.ok)
|
|
76
|
-
return cliError(config.error);
|
|
77
|
-
const denied = await authorizeEvidence(config.value, [
|
|
78
|
-
{ capability: "evidence_read", path: args.left, access: "read" },
|
|
79
|
-
{ capability: "evidence_read", path: args.right, access: "read" },
|
|
80
|
-
]);
|
|
81
|
-
if (denied !== undefined)
|
|
82
|
-
return cliError(denied);
|
|
39
|
+
run: ({ args }) => logCliCommand(logger, "compare", async () => {
|
|
83
40
|
const compared = await compareEvidenceBundlesCommand({
|
|
84
41
|
leftPath: args.left,
|
|
85
42
|
rightPath: args.right,
|
|
86
|
-
offset: options.offset,
|
|
87
|
-
limit: options.limit,
|
|
88
|
-
policy: config.value.evidenceFilePolicy,
|
|
89
43
|
});
|
|
90
44
|
return compared.ok ? compared.value : cliError(compared.error);
|
|
91
45
|
}),
|
|
92
46
|
});
|
|
93
47
|
};
|
|
94
|
-
const authorizeEvidence = async (config, requests) => {
|
|
95
|
-
const authority = await loadConfiguredPermissionAuthority(config);
|
|
96
|
-
if (!authority.ok)
|
|
97
|
-
return authority.error;
|
|
98
|
-
for (const request of requests) {
|
|
99
|
-
const result = await authority.value.authorize({
|
|
100
|
-
capability: request.capability,
|
|
101
|
-
roots: [request.path],
|
|
102
|
-
executables: [],
|
|
103
|
-
environment_names: [],
|
|
104
|
-
network: "none",
|
|
105
|
-
mount: false,
|
|
106
|
-
operation_identity: `cli:${request.capability}:${request.path}`,
|
|
107
|
-
}, request.access);
|
|
108
|
-
if (!result.ok)
|
|
109
|
-
return result.error instanceof PermissionRequiredError
|
|
110
|
-
? result.error
|
|
111
|
-
: new AnalysisProtocolError(result.error.message, {
|
|
112
|
-
cause: result.error,
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
return undefined;
|
|
116
|
-
};
|
|
117
48
|
const cliError = (error) => ({
|
|
118
49
|
error: "Analysis failed",
|
|
119
50
|
...projectAnalysisError(error),
|