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
|
@@ -1,16 +1,17 @@
|
|
|
1
|
+
import { projectPermissionFailure } from "./PermissionFailure.js";
|
|
2
|
+
import { artifactExtractionPermissionRequest } from "./ArtifactExtractionDestination.js";
|
|
1
3
|
import { parseConfig } from "../config.js";
|
|
2
4
|
import { EnhancedTools } from "./EnhancedTools.js";
|
|
3
5
|
import { createBinarySession } from "./runtime.js";
|
|
4
6
|
import { silentLogger } from "../logger.js";
|
|
5
7
|
import { createEvidence } from "../domain/evidence.js";
|
|
6
|
-
import { EvidenceIntegrityError,
|
|
8
|
+
import { EvidenceIntegrityError, projectAnalysisError, } from "../domain/errors.js";
|
|
7
9
|
import { access } from "node:fs/promises";
|
|
8
10
|
import { readAnalysisSnapshot, writeAnalysisSnapshot, } from "./AnalysisSnapshotFiles.js";
|
|
9
|
-
import { parseBinaryTarget } from "
|
|
11
|
+
import { parseBinaryTarget } from "./BinaryTargetResolver.js";
|
|
10
12
|
import { snapshotEvidenceForQuery, snapshotMatchesTarget, } from "../domain/analysisSnapshot.js";
|
|
11
13
|
import { err, ok } from "../domain/result.js";
|
|
12
14
|
import { loadConfiguredPermissionAuthority } from "./PermissionConfiguration.js";
|
|
13
|
-
import { authorizeFileReadWithDeferredWrite, } from "./DeferredFileAuthorization.js";
|
|
14
15
|
import { REA_WORKFLOW_PROVIDER, workflowAnalysisProfile, } from "./InvestigationProviders.js";
|
|
15
16
|
import { artifactInspectionResultSchema } from "../domain/artifactInspection.js";
|
|
16
17
|
export { runCapabilityStatus, runProviderStatus, } from "./DirectAnalysisStatus.js";
|
|
@@ -40,26 +41,13 @@ const authorizeAnalysis = async (authority, tool, arguments_) => {
|
|
|
40
41
|
const requests = [];
|
|
41
42
|
if (tool === "extract_artifact" && typeof arguments_.output_root === "string")
|
|
42
43
|
requests.push({
|
|
43
|
-
|
|
44
|
-
path: arguments_.output_root,
|
|
44
|
+
request: artifactExtractionPermissionRequest(),
|
|
45
45
|
access: "write",
|
|
46
46
|
});
|
|
47
47
|
for (const request of requests) {
|
|
48
|
-
const result = await authority.authorize(
|
|
49
|
-
capability: request.capability,
|
|
50
|
-
roots: [request.path],
|
|
51
|
-
executables: [],
|
|
52
|
-
environment_names: [],
|
|
53
|
-
network: "none",
|
|
54
|
-
mount: false,
|
|
55
|
-
operation_identity: `${tool}:${request.capability}:${request.path}`,
|
|
56
|
-
}, request.access);
|
|
48
|
+
const result = await authority.authorize(request.request, request.access);
|
|
57
49
|
if (!result.ok)
|
|
58
|
-
return err(result.error
|
|
59
|
-
? result.error
|
|
60
|
-
: new AnalysisProtocolError(result.error.message, {
|
|
61
|
-
cause: result.error,
|
|
62
|
-
}));
|
|
50
|
+
return err(projectPermissionFailure(result.error));
|
|
63
51
|
}
|
|
64
52
|
if (["inventory_artifact", "inspect_artifact"].includes(tool) &&
|
|
65
53
|
arguments_.native_mount_approved === true) {
|
|
@@ -73,26 +61,13 @@ const authorizeAnalysis = async (authority, tool, arguments_) => {
|
|
|
73
61
|
operation_identity: `${tool}:native_mount`,
|
|
74
62
|
}, "read");
|
|
75
63
|
if (!result.ok)
|
|
76
|
-
return err(result.error
|
|
77
|
-
? result.error
|
|
78
|
-
: new AnalysisProtocolError(result.error.message, {
|
|
79
|
-
cause: result.error,
|
|
80
|
-
}));
|
|
64
|
+
return err(projectPermissionFailure(result.error));
|
|
81
65
|
}
|
|
82
66
|
return ok(null);
|
|
83
67
|
};
|
|
84
68
|
const permissionAuthorityFor = (config, supplied) => supplied === undefined
|
|
85
69
|
? loadConfiguredPermissionAuthority(config)
|
|
86
70
|
: Promise.resolve(ok(supplied));
|
|
87
|
-
const authorizeSnapshotAccess = async (authority, tool, snapshotPath) => snapshotPath === undefined
|
|
88
|
-
? ok(undefined)
|
|
89
|
-
: authorizeFileReadWithDeferredWrite(authority, {
|
|
90
|
-
path: snapshotPath,
|
|
91
|
-
readCapability: "snapshot_read",
|
|
92
|
-
writeCapability: "snapshot_write",
|
|
93
|
-
operation: tool,
|
|
94
|
-
});
|
|
95
|
-
const authorizeDeferredWrite = (authorization) => authorization?.authorizeWrite() ?? Promise.resolve(ok(null));
|
|
96
71
|
const authorizeAnalysisRun = async (input) => {
|
|
97
72
|
const authority = await permissionAuthorityFor(input.config, input.suppliedAuthority);
|
|
98
73
|
if (!authority.ok)
|
|
@@ -100,7 +75,7 @@ const authorizeAnalysisRun = async (input) => {
|
|
|
100
75
|
const operation = await authorizeAnalysis(authority.value, input.tool, input.arguments);
|
|
101
76
|
if (!operation.ok)
|
|
102
77
|
return operation;
|
|
103
|
-
return
|
|
78
|
+
return ok(null);
|
|
104
79
|
};
|
|
105
80
|
const runAnalysis = async (path, tool, arguments_, options) => {
|
|
106
81
|
const { logger, signal, snapshotPath } = options;
|
|
@@ -112,7 +87,6 @@ const runAnalysis = async (path, tool, arguments_, options) => {
|
|
|
112
87
|
suppliedAuthority: options.permissionAuthority,
|
|
113
88
|
tool,
|
|
114
89
|
arguments: arguments_,
|
|
115
|
-
snapshotPath,
|
|
116
90
|
});
|
|
117
91
|
if (!authorization.ok)
|
|
118
92
|
return cliError(authorization.error);
|
|
@@ -121,7 +95,6 @@ const runAnalysis = async (path, tool, arguments_, options) => {
|
|
|
121
95
|
const prepared = await prepareSnapshot({
|
|
122
96
|
path,
|
|
123
97
|
snapshotPath,
|
|
124
|
-
policy: config.value.analysisSnapshotFilePolicy,
|
|
125
98
|
});
|
|
126
99
|
if (!prepared.ok)
|
|
127
100
|
return cliError(prepared.error);
|
|
@@ -137,7 +110,8 @@ const runAnalysis = async (path, tool, arguments_, options) => {
|
|
|
137
110
|
return cliError(opened.error);
|
|
138
111
|
const evidenceProfile = analysisProfileForEvidence(session, tool);
|
|
139
112
|
const bindingProfile = session.analysisProfile();
|
|
140
|
-
if (
|
|
113
|
+
if (tool !== "trace_native_ui_action" &&
|
|
114
|
+
snapshot !== undefined &&
|
|
141
115
|
evidenceProfile !== undefined &&
|
|
142
116
|
bindingProfile !== undefined) {
|
|
143
117
|
const cached = snapshotEvidenceForQuery(snapshot, {
|
|
@@ -151,9 +125,6 @@ const runAnalysis = async (path, tool, arguments_, options) => {
|
|
|
151
125
|
if (cached !== undefined)
|
|
152
126
|
return cached;
|
|
153
127
|
}
|
|
154
|
-
const writable = await authorizeDeferredWrite(authorization.value);
|
|
155
|
-
if (!writable.ok)
|
|
156
|
-
return cliError(writable.error);
|
|
157
128
|
const { output, evidence } = await executeAnalysisTool({
|
|
158
129
|
session,
|
|
159
130
|
openedTarget: opened.value,
|
|
@@ -164,11 +135,13 @@ const runAnalysis = async (path, tool, arguments_, options) => {
|
|
|
164
135
|
});
|
|
165
136
|
if (evidence !== undefined)
|
|
166
137
|
session.recordEvidence(evidence);
|
|
167
|
-
if (
|
|
138
|
+
if (tool !== "trace_native_ui_action" &&
|
|
139
|
+
snapshotPath !== undefined &&
|
|
140
|
+
evidence !== undefined) {
|
|
168
141
|
const snapshot = session.exportAnalysisSnapshot();
|
|
169
142
|
if (!snapshot.ok)
|
|
170
143
|
return cliError(snapshot.error);
|
|
171
|
-
const written = await writeAnalysisSnapshot(snapshot.value, snapshotPath, true
|
|
144
|
+
const written = await writeAnalysisSnapshot(snapshot.value, snapshotPath, true);
|
|
172
145
|
if (!written.ok)
|
|
173
146
|
return cliError(written.error);
|
|
174
147
|
}
|
|
@@ -183,7 +156,9 @@ const executeAnalysisTool = async (input) => {
|
|
|
183
156
|
if (tool === "binary_overview" ||
|
|
184
157
|
tool === "analyze_function" ||
|
|
185
158
|
tool === "inspect_native_api" ||
|
|
186
|
-
tool === "
|
|
159
|
+
tool === "inspect_native_dispatch_metadata" ||
|
|
160
|
+
tool === "trace_feature" ||
|
|
161
|
+
tool === "trace_native_ui_action") {
|
|
187
162
|
const result = await new EnhancedTools(session).execute(tool, input.arguments, signal);
|
|
188
163
|
if (!result.ok)
|
|
189
164
|
return { output: cliError(result.error) };
|
|
@@ -235,10 +210,10 @@ const withProcessCancellation = async (suppliedSignal, operation) => {
|
|
|
235
210
|
}
|
|
236
211
|
};
|
|
237
212
|
const prepareSnapshot = async (options) => {
|
|
238
|
-
const { path, snapshotPath
|
|
213
|
+
const { path, snapshotPath } = options;
|
|
239
214
|
if (snapshotPath === undefined || !(await fileExists(snapshotPath)))
|
|
240
215
|
return ok({});
|
|
241
|
-
const loaded = await readAnalysisSnapshot(snapshotPath
|
|
216
|
+
const loaded = await readAnalysisSnapshot(snapshotPath);
|
|
242
217
|
if (!loaded.ok)
|
|
243
218
|
return loaded;
|
|
244
219
|
const target = await parseBinaryTarget(path);
|
|
@@ -259,7 +234,8 @@ const analysisProfileForEvidence = (session, tool) => {
|
|
|
259
234
|
};
|
|
260
235
|
const isWorkflowEvidenceTool = (tool) => tool === "binary_overview" ||
|
|
261
236
|
tool === "inspect_native_api" ||
|
|
262
|
-
tool === "trace_feature"
|
|
237
|
+
tool === "trace_feature" ||
|
|
238
|
+
tool === "trace_native_ui_action";
|
|
263
239
|
const fileExists = async (path) => {
|
|
264
240
|
try {
|
|
265
241
|
await access(path);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { parseConfig } from "../config.js";
|
|
2
2
|
import { projectAnalysisError } from "../domain/errors.js";
|
|
3
3
|
import { jsonObjectSchema } from "../domain/jsonValue.js";
|
|
4
|
-
import { createServerIdentity
|
|
4
|
+
import { createServerIdentity } from "../serverIdentity.js";
|
|
5
5
|
import { silentLogger } from "../logger.js";
|
|
6
6
|
import { createBinarySession } from "./runtime.js";
|
|
7
7
|
const runSessionStatus = async (logger = silentLogger) => {
|
|
@@ -21,63 +21,7 @@ const runSessionStatus = async (logger = silentLogger) => {
|
|
|
21
21
|
await session.close();
|
|
22
22
|
}
|
|
23
23
|
};
|
|
24
|
-
/** List provider identities,
|
|
25
|
-
export const runProviderStatus =
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return fullStatus;
|
|
29
|
-
const parsedStatus = jsonObjectSchema.safeParse(fullStatus);
|
|
30
|
-
if (!parsedStatus.success || parsedStatus.data.error !== undefined)
|
|
31
|
-
return fullStatus;
|
|
32
|
-
const status = parsedStatus.data;
|
|
33
|
-
return {
|
|
34
|
-
open: status.open ?? false,
|
|
35
|
-
provider: status.provider ?? null,
|
|
36
|
-
providers: status.providers ?? [],
|
|
37
|
-
analysis_provider_binding: status.analysis_provider_binding ?? null,
|
|
38
|
-
analysis_provider_candidates: projectJsonObjectArray(status.analysis_provider_candidates, ["provider", "availability", "target_support", "selected"]),
|
|
39
|
-
server_identity: createServerIdentitySummary({
|
|
40
|
-
startedAt: new Date().toISOString(),
|
|
41
|
-
}),
|
|
42
|
-
};
|
|
43
|
-
};
|
|
44
|
-
/** List concise operation availability, with explicit full descriptor opt-in. */
|
|
45
|
-
export const runCapabilityStatus = async (logger = silentLogger, detail = "summary") => {
|
|
46
|
-
const fullStatus = await runSessionStatus(logger);
|
|
47
|
-
if (detail === "full")
|
|
48
|
-
return fullStatus;
|
|
49
|
-
const parsedStatus = jsonObjectSchema.safeParse(fullStatus);
|
|
50
|
-
if (!parsedStatus.success || parsedStatus.data.error !== undefined)
|
|
51
|
-
return fullStatus;
|
|
52
|
-
const status = parsedStatus.data;
|
|
53
|
-
const capabilities = projectJsonObjectArray(status.capabilities, [
|
|
54
|
-
"operation",
|
|
55
|
-
"available",
|
|
56
|
-
"reason",
|
|
57
|
-
]);
|
|
58
|
-
const available = capabilities.filter((candidate) => typeof candidate === "object" &&
|
|
59
|
-
candidate !== null &&
|
|
60
|
-
"available" in candidate &&
|
|
61
|
-
candidate.available === true).length;
|
|
62
|
-
return {
|
|
63
|
-
open: status.open ?? false,
|
|
64
|
-
summary: {
|
|
65
|
-
total: capabilities.length,
|
|
66
|
-
available,
|
|
67
|
-
unavailable: capabilities.length - available,
|
|
68
|
-
},
|
|
69
|
-
capabilities,
|
|
70
|
-
analysis_provider_binding: status.analysis_provider_binding ?? null,
|
|
71
|
-
server_identity: createServerIdentitySummary({
|
|
72
|
-
startedAt: new Date().toISOString(),
|
|
73
|
-
}),
|
|
74
|
-
};
|
|
75
|
-
};
|
|
76
|
-
const projectJsonObjectArray = (value, keys) => Array.isArray(value)
|
|
77
|
-
? value.map((candidate) => {
|
|
78
|
-
const parsed = jsonObjectSchema.safeParse(candidate);
|
|
79
|
-
if (!parsed.success)
|
|
80
|
-
return candidate;
|
|
81
|
-
return Object.fromEntries(keys.flatMap((key) => parsed.data[key] === undefined ? [] : [[key, parsed.data[key]]]));
|
|
82
|
-
})
|
|
83
|
-
: [];
|
|
24
|
+
/** List complete provider identities, capabilities, and availability. */
|
|
25
|
+
export const runProviderStatus = (logger = silentLogger) => runSessionStatus(logger);
|
|
26
|
+
/** List complete operation descriptors and availability. */
|
|
27
|
+
export const runCapabilityStatus = (logger = silentLogger) => runSessionStatus(logger);
|
|
@@ -2,9 +2,8 @@ import { constants } from "node:fs";
|
|
|
2
2
|
import { access, readFile, readdir } from "node:fs/promises";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
import { delimiter, join } from "node:path";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { parseBinaryTarget } from "../domain/binaryTarget.js";
|
|
5
|
+
import { parseBinaryTarget } from "./BinaryTargetResolver.js";
|
|
6
|
+
import { execFileOutput } from "../process/ExecFileOutput.js";
|
|
8
7
|
import { probeHomebrew } from "./homebrew.js";
|
|
9
8
|
import { linuxHopperBinarySupported, linuxSharedLibrariesAvailable, readLinuxDistribution, } from "./LinuxHopper.js";
|
|
10
9
|
import { CATALOG_IDENTITY } from "../catalogIdentity.js";
|
|
@@ -13,7 +12,6 @@ import { readClientRegistrationStatuses, } from "./ClientRegistrationStatus.js";
|
|
|
13
12
|
import { inspectRuntimeExecutables, } from "./RuntimeExecutableDiagnostics.js";
|
|
14
13
|
import { collectDoctorDiagnostics, doctorHealthy, } from "./DoctorDiagnostics.js";
|
|
15
14
|
import { normalizeDoctorScope, scopeDoctorChecks, } from "./DoctorScope.js";
|
|
16
|
-
const execFileAsync = promisify(execFile);
|
|
17
15
|
/** Deep provider IDs whose readiness can be selected explicitly by doctor. */
|
|
18
16
|
export const DOCTOR_PROVIDER_IDS = ["hopper", "ghidra"];
|
|
19
17
|
/**
|
|
@@ -56,14 +54,14 @@ export const runDoctor = async (target, host = systemDoctorHost(), requestedScop
|
|
|
56
54
|
};
|
|
57
55
|
const collectDoctorIdentity = async (host, runtimeExecutables) => {
|
|
58
56
|
const installationPaths = (await host.installationPaths?.()) ?? [];
|
|
59
|
-
const installedSkillIdentity = await
|
|
57
|
+
const installedSkillIdentity = await host.installedSkillIdentity?.();
|
|
60
58
|
const skillAligned = skillIdentityAligned(installedSkillIdentity);
|
|
61
59
|
const registrations = (await host.clientRegistrations?.()) ?? [];
|
|
62
60
|
return {
|
|
63
61
|
checks: [
|
|
64
62
|
...(skillAligned ? [] : [skillIdentityCheck(installedSkillIdentity)]),
|
|
65
63
|
...registrations
|
|
66
|
-
.filter((
|
|
64
|
+
.filter((registration) => registration.state !== "aligned")
|
|
67
65
|
.map(registrationCheck),
|
|
68
66
|
],
|
|
69
67
|
value: {
|
|
@@ -73,7 +71,7 @@ const collectDoctorIdentity = async (host, runtimeExecutables) => {
|
|
|
73
71
|
catalog: CATALOG_IDENTITY,
|
|
74
72
|
live_server: {
|
|
75
73
|
state: "unknown",
|
|
76
|
-
remediation: "
|
|
74
|
+
remediation: "Call binary_session in the active client to inspect the running server identity.",
|
|
77
75
|
},
|
|
78
76
|
installations: {
|
|
79
77
|
paths: installationPaths,
|
|
@@ -97,15 +95,6 @@ const collectDoctorIdentity = async (host, runtimeExecutables) => {
|
|
|
97
95
|
},
|
|
98
96
|
};
|
|
99
97
|
};
|
|
100
|
-
const readInstalledSkillIdentity = async (host) => {
|
|
101
|
-
const observed = await host.installedSkillIdentity?.();
|
|
102
|
-
if (observed !== undefined)
|
|
103
|
-
return observed;
|
|
104
|
-
const legacyVersion = await host.installedSkillVersion?.();
|
|
105
|
-
return legacyVersion === undefined
|
|
106
|
-
? undefined
|
|
107
|
-
: { version: legacyVersion, toolCount: null, catalogDigest: null };
|
|
108
|
-
};
|
|
109
98
|
const skillIdentityAligned = (identity) => identity?.version === PRODUCT_IDENTITY.skillVersion &&
|
|
110
99
|
identity.toolCount === CATALOG_IDENTITY.counts.mcp_tools &&
|
|
111
100
|
identity.catalogDigest === CATALOG_IDENTITY.digests.combined_sha256;
|
|
@@ -123,8 +112,7 @@ const registrationCheck = (registration) => ({
|
|
|
123
112
|
ok: false,
|
|
124
113
|
classification: "config_drift",
|
|
125
114
|
detail: registration.config_path,
|
|
126
|
-
remediation: registration.remediation
|
|
127
|
-
"Run rea setup, then restart the affected client.",
|
|
115
|
+
remediation: registration.remediation,
|
|
128
116
|
});
|
|
129
117
|
const installationState = (paths) => paths.length === 0 ? "unknown" : paths.length === 1 ? "single" : "multiple";
|
|
130
118
|
/** Create diagnostics backed by the current process and host commands. */
|
|
@@ -149,7 +137,7 @@ export const systemDoctorHost = (options = {}) => ({
|
|
|
149
137
|
async brewHopperPath() {
|
|
150
138
|
return probeHomebrew(async (command) => {
|
|
151
139
|
try {
|
|
152
|
-
const prefix = (await
|
|
140
|
+
const prefix = (await execFileOutput(command, [
|
|
153
141
|
"--prefix",
|
|
154
142
|
"--cask",
|
|
155
143
|
"hopper-disassembler",
|
|
@@ -171,7 +159,7 @@ export const systemDoctorHost = (options = {}) => ({
|
|
|
171
159
|
async ilspyCmdVersion(path) {
|
|
172
160
|
try {
|
|
173
161
|
await access(path, constants.X_OK);
|
|
174
|
-
return firstIlspyVersionLine((await
|
|
162
|
+
return firstIlspyVersionLine((await execFileOutput(path, ["--version"], { timeout: 10_000 })).stdout);
|
|
175
163
|
}
|
|
176
164
|
catch {
|
|
177
165
|
return undefined;
|
|
@@ -189,19 +177,18 @@ export const systemDoctorHost = (options = {}) => ({
|
|
|
189
177
|
try {
|
|
190
178
|
const command = process.platform === "win32" ? "where" : "which";
|
|
191
179
|
const arguments_ = process.platform === "win32" ? ["rea"] : ["-a", "rea"];
|
|
192
|
-
return uniqueLines((await
|
|
180
|
+
return uniqueLines((await execFileOutput(command, arguments_)).stdout);
|
|
193
181
|
}
|
|
194
182
|
catch {
|
|
195
183
|
return [];
|
|
196
184
|
}
|
|
197
185
|
},
|
|
198
|
-
installedSkillVersion,
|
|
199
186
|
installedSkillIdentity,
|
|
200
187
|
clientRegistrations: () => readClientRegistrationStatuses(homedir()),
|
|
201
188
|
});
|
|
202
189
|
const readMacosVersion = async () => {
|
|
203
190
|
try {
|
|
204
|
-
return (await
|
|
191
|
+
return (await execFileOutput("sw_vers", ["-productVersion"])).stdout.trim();
|
|
205
192
|
}
|
|
206
193
|
catch {
|
|
207
194
|
return undefined;
|
|
@@ -212,7 +199,7 @@ const executableAvailable = async (path) => {
|
|
|
212
199
|
await access(path, constants.X_OK);
|
|
213
200
|
if (process.platform !== "linux")
|
|
214
201
|
return true;
|
|
215
|
-
const linked = await
|
|
202
|
+
const linked = await execFileOutput("ldd", [path]);
|
|
216
203
|
return linuxSharedLibrariesAvailable(`${linked.stdout}\n${linked.stderr}`);
|
|
217
204
|
}
|
|
218
205
|
catch {
|
|
@@ -242,14 +229,6 @@ const manualHopperPaths = async () => {
|
|
|
242
229
|
return paths;
|
|
243
230
|
};
|
|
244
231
|
const readInstalledSkill = () => readFile(join(homedir(), ".agents/skills", PRODUCT_IDENTITY.skillName, "SKILL.md"), "utf8");
|
|
245
|
-
const installedSkillVersion = async () => {
|
|
246
|
-
try {
|
|
247
|
-
return /^\s{2}version:\s*"([^"]+)"\s*$/mu.exec(await readInstalledSkill())?.[1];
|
|
248
|
-
}
|
|
249
|
-
catch {
|
|
250
|
-
return undefined;
|
|
251
|
-
}
|
|
252
|
-
};
|
|
253
232
|
const installedSkillIdentity = async () => {
|
|
254
233
|
try {
|
|
255
234
|
const content = await readInstalledSkill();
|
|
@@ -70,9 +70,8 @@ const runtimeChecks = (inventory) => {
|
|
|
70
70
|
const detail = broken.length === 0
|
|
71
71
|
? `${String(inventory.candidates.length)} runtime executable candidates passed bounded version probes.`
|
|
72
72
|
: `${String(broken.length)} of ${String(inventory.candidates.length)} runtime executable candidates failed bounded version probes: ${broken
|
|
73
|
-
.slice(0, 5)
|
|
74
73
|
.map(({ lexical_path: path }) => path)
|
|
75
|
-
.join(", ")}
|
|
74
|
+
.join(", ")}`;
|
|
76
75
|
return [
|
|
77
76
|
check("node-toolchains", broken.length === 0, detail, {
|
|
78
77
|
remediation: "Select a verified healthy Node toolchain or repair the failing installation, then rerun rea doctor. Do not create compatibility-library symlinks.",
|
|
@@ -88,7 +88,7 @@ const registrationCheck = (status) => ({
|
|
|
88
88
|
ok: false,
|
|
89
89
|
classification: "config_drift",
|
|
90
90
|
detail: status.config_path,
|
|
91
|
-
remediation: status.remediation
|
|
91
|
+
remediation: status.remediation,
|
|
92
92
|
});
|
|
93
93
|
const selectedSkillCheck = (state, checks) => checks.find(({ name }) => name === "skill:identity") ?? {
|
|
94
94
|
name: "skill:identity",
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createEvidence } from "../domain/evidence.js";
|
|
2
2
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
3
3
|
import { digestJson } from "./JavaScriptReplayPlanning.js";
|
|
4
|
-
/** Create Evidence
|
|
4
|
+
/** Create Evidence without retaining arbitrary runtime argument values. */
|
|
5
5
|
export const createElectronActiveEvidence = (input, result, provider) => createEvidence(undefined, provider, {
|
|
6
|
-
predicateType: "rea.electron-active-scenario
|
|
6
|
+
predicateType: "rea.electron-active-scenario",
|
|
7
7
|
operation: "capture_electron_scenario",
|
|
8
8
|
parameters: parameters(input),
|
|
9
9
|
result: jsonValueSchema.parse(result),
|
|
@@ -18,14 +18,11 @@ export const createElectronActiveEvidence = (input, result, provider) => createE
|
|
|
18
18
|
limitations: result.limitations,
|
|
19
19
|
});
|
|
20
20
|
const scenarioProjection = (input) => ({
|
|
21
|
-
approved: input.approved,
|
|
22
|
-
schema_version: input.schema_version,
|
|
23
21
|
executable_path: input.executable_path,
|
|
24
22
|
application_path: input.application_path,
|
|
25
23
|
application_root: input.application_root,
|
|
26
24
|
args: redactArguments(input.args),
|
|
27
25
|
actions: input.actions.map(({ step_id, kind }) => ({ step_id, kind })),
|
|
28
|
-
limits: input.limits,
|
|
29
26
|
});
|
|
30
27
|
const parameters = (input) => ({
|
|
31
28
|
...scenarioProjection(input),
|
|
@@ -49,7 +46,5 @@ const sensitiveFlag = /^--?(?:password|token|secret|api[-_]?key|authorization|co
|
|
|
49
46
|
const redactArgument = (argument) => {
|
|
50
47
|
if (/^--?(?:password|token|secret|api[-_]?key|authorization|cookie)=/iu.test(argument))
|
|
51
48
|
return `${argument.slice(0, argument.indexOf("=") + 1)}<redacted>`;
|
|
52
|
-
return argument
|
|
53
|
-
? `${argument.slice(0, 256)}<redacted>`
|
|
54
|
-
: argument;
|
|
49
|
+
return argument;
|
|
55
50
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { projectPermissionFailure } from "./PermissionFailure.js";
|
|
1
2
|
import { realpath } from "node:fs/promises";
|
|
2
3
|
import { digestJson } from "./JavaScriptReplayPlanning.js";
|
|
3
|
-
import { AnalysisCapabilityUnavailableError, AnalysisInputError,
|
|
4
|
+
import { AnalysisCapabilityUnavailableError, AnalysisInputError, } from "../domain/errors.js";
|
|
4
5
|
import { isPathContained } from "../domain/permissionPolicy.js";
|
|
5
6
|
import { err } from "../domain/result.js";
|
|
6
7
|
import { createElectronActiveEvidence } from "./ElectronActiveEvidence.js";
|
|
@@ -57,11 +58,7 @@ const authorize = async (authority, input) => {
|
|
|
57
58
|
operation_identity: `${OPERATION}:${digestJson(canonical.value)}`,
|
|
58
59
|
}, "write");
|
|
59
60
|
if (!authorized.ok)
|
|
60
|
-
return err(authorized.error
|
|
61
|
-
? authorized.error
|
|
62
|
-
: new AnalysisProtocolError(authorized.error.message, {
|
|
63
|
-
cause: authorized.error,
|
|
64
|
-
}));
|
|
61
|
+
return err(projectPermissionFailure(authorized.error));
|
|
65
62
|
return canonical;
|
|
66
63
|
};
|
|
67
64
|
/** Authorize and execute one bounded, provider-owned Electron experiment. */
|
|
@@ -70,12 +70,13 @@ export const summarizeElectronBoundaries = (analysis) => {
|
|
|
70
70
|
},
|
|
71
71
|
sender_validation_observations: validations.length,
|
|
72
72
|
utility_processes: utilities.length,
|
|
73
|
-
resolved_utility_entrypoints: utilities.filter(({ file, finding }) =>
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
73
|
+
resolved_utility_entrypoints: utilities.filter(({ file, finding }) => finding.module_path !== null &&
|
|
74
|
+
resolvesToFile({
|
|
75
|
+
file,
|
|
76
|
+
specifier: finding.module_path,
|
|
77
|
+
context: finding.module_resolution_context,
|
|
78
|
+
files,
|
|
79
|
+
})).length,
|
|
79
80
|
native_addon_bindings: nativeBindings.length,
|
|
80
81
|
resolved_native_addon_bindings: nativeBindings.filter(({ file, finding }) => resolvesToFile({
|
|
81
82
|
file,
|
|
@@ -97,8 +98,6 @@ const isPairableRendererTransmission = (record) => isRendererTransmission(record
|
|
|
97
98
|
const isMainHandler = ({ finding }) => finding.side === "main" &&
|
|
98
99
|
(finding.mode === "listen" || finding.mode === "handle");
|
|
99
100
|
const resolvesToFile = (input) => {
|
|
100
|
-
if (input.specifier === null)
|
|
101
|
-
return false;
|
|
102
101
|
const resolved = resolveArtifactPathByContext({
|
|
103
102
|
declaredPath: input.specifier,
|
|
104
103
|
sourcePath: input.file.path,
|
|
@@ -9,7 +9,7 @@ export const electronObservationIdentity = (context, scope, key) => ({
|
|
|
9
9
|
strategy: "observation-fingerprint",
|
|
10
10
|
stability: "observation-only",
|
|
11
11
|
observation_sha256: sha256Text(`${context.snapshot.manifest.root_sha256}\0${scope}\0${key}`),
|
|
12
|
-
scope
|
|
12
|
+
scope,
|
|
13
13
|
});
|
|
14
14
|
/** Add a direct AST syntax relationship. */
|
|
15
15
|
export const addElectronAstEdge = (context, input) => {
|
|
@@ -96,7 +96,7 @@ const addHandlerNode = (input) => {
|
|
|
96
96
|
const handlerRange = finding.handler_location ?? finding.location;
|
|
97
97
|
const handler = context.accumulator.addNode({
|
|
98
98
|
kind: "ipc-handler",
|
|
99
|
-
identity: artifactLocalIdentity(file.sha256, "electron-ipc-handler", `${finding.side}:${finding.operation}:${finding.channel ?? finding.channel_expression
|
|
99
|
+
identity: artifactLocalIdentity(file.sha256, "electron-ipc-handler", `${finding.side}:${finding.operation}:${finding.channel ?? finding.channel_expression}:${electronRangeKey(handlerRange)}`),
|
|
100
100
|
observations: [
|
|
101
101
|
{
|
|
102
102
|
label: finding.channel,
|
|
@@ -177,7 +177,7 @@ const addValidationObservations = (state) => {
|
|
|
177
177
|
const { file, javascript } = analyzed;
|
|
178
178
|
if (javascript === null)
|
|
179
179
|
continue;
|
|
180
|
-
const coverage = javascriptAnalysisCoverage(javascript
|
|
180
|
+
const coverage = javascriptAnalysisCoverage(javascript);
|
|
181
181
|
for (const validation of javascript.electron.sender_validations) {
|
|
182
182
|
const handlerRecord = containingHandler(state.records, file, validation);
|
|
183
183
|
const target = handlerRecord === undefined
|
|
@@ -238,5 +238,5 @@ const coverageFor = (context, file) => {
|
|
|
238
238
|
const javascript = context.analysis.files.find(({ file: candidate }) => candidate.path === file.path)?.javascript;
|
|
239
239
|
return javascript === null || javascript === undefined
|
|
240
240
|
? undefined
|
|
241
|
-
: javascriptAnalysisCoverage(javascript
|
|
241
|
+
: javascriptAnalysisCoverage(javascript);
|
|
242
242
|
};
|
|
@@ -7,7 +7,7 @@ export const addElectronNativeBoundaries = (context) => {
|
|
|
7
7
|
const { file, javascript } = analyzed;
|
|
8
8
|
if (javascript === null)
|
|
9
9
|
continue;
|
|
10
|
-
const coverage = javascriptAnalysisCoverage(javascript
|
|
10
|
+
const coverage = javascriptAnalysisCoverage(javascript);
|
|
11
11
|
for (const value of javascript.electron.native_addon_bindings)
|
|
12
12
|
addNativeBinding({ context, file, value, coverage });
|
|
13
13
|
}
|
|
@@ -29,7 +29,6 @@ const addNativeBinding = (input) => {
|
|
|
29
29
|
specifier: value.specifier,
|
|
30
30
|
binding_kind: value.binding_kind,
|
|
31
31
|
requested_members: value.members,
|
|
32
|
-
members_truncated: value.members_truncated,
|
|
33
32
|
resolved_path: resolved,
|
|
34
33
|
native_export_verification: "not-performed",
|
|
35
34
|
},
|
|
@@ -8,7 +8,7 @@ export const addElectronWindowBoundaries = (context) => {
|
|
|
8
8
|
const { file, javascript } = analyzed;
|
|
9
9
|
if (javascript === null)
|
|
10
10
|
continue;
|
|
11
|
-
const coverage = javascriptAnalysisCoverage(javascript
|
|
11
|
+
const coverage = javascriptAnalysisCoverage(javascript);
|
|
12
12
|
for (const value of javascript.electron.browser_windows) {
|
|
13
13
|
const source = electronFindingSourceNode(context, file, value.module_key);
|
|
14
14
|
if (source !== undefined)
|
|
@@ -39,7 +39,6 @@ const addBrowserWindow = (input) => {
|
|
|
39
39
|
options_status: value.options_status,
|
|
40
40
|
web_preferences_status: value.web_preferences_status,
|
|
41
41
|
web_preferences: value.web_preferences,
|
|
42
|
-
omitted_web_preferences: value.omitted_web_preferences,
|
|
43
42
|
preload_path: value.preload_path,
|
|
44
43
|
preload_resolution_context: value.preload_resolution_context,
|
|
45
44
|
absence_means_default: false,
|
|
@@ -70,13 +69,13 @@ const addBrowserWindow = (input) => {
|
|
|
70
69
|
addWindowPreload(input, window);
|
|
71
70
|
};
|
|
72
71
|
const addWindowPreload = (input, window) => {
|
|
73
|
-
|
|
74
|
-
if (declared === null)
|
|
72
|
+
if (input.value.preload_path === null)
|
|
75
73
|
return;
|
|
74
|
+
const { preload_path: declared, preload_resolution_context: resolutionContext, } = input.value;
|
|
76
75
|
const resolution = resolveArtifactPathByContext({
|
|
77
76
|
declaredPath: declared,
|
|
78
77
|
sourcePath: input.file.path,
|
|
79
|
-
context:
|
|
78
|
+
context: resolutionContext,
|
|
80
79
|
files: input.context.filesByPath,
|
|
81
80
|
});
|
|
82
81
|
const role = createElectronRoleNode(input.context, {
|
|
@@ -127,7 +126,6 @@ const addContextBridge = (input) => {
|
|
|
127
126
|
api_status: value.api_status,
|
|
128
127
|
members: value.members,
|
|
129
128
|
unknown_members: value.unknown_members,
|
|
130
|
-
omitted_members: value.omitted_members,
|
|
131
129
|
},
|
|
132
130
|
evidence: astObservationEvidence({
|
|
133
131
|
sha256: file.sha256,
|
|
@@ -158,7 +156,7 @@ const addUtilityProcess = (input) => {
|
|
|
158
156
|
const { context, file, value, coverage } = input;
|
|
159
157
|
const utility = context.accumulator.addNode({
|
|
160
158
|
kind: "electron-utility",
|
|
161
|
-
identity: artifactLocalIdentity(file.sha256, "electron-utility-process", `${value.module_path ?? value.module_expression
|
|
159
|
+
identity: artifactLocalIdentity(file.sha256, "electron-utility-process", `${value.module_path ?? value.module_expression}:${electronRangeKey(value.location)}`),
|
|
162
160
|
observations: [
|
|
163
161
|
{
|
|
164
162
|
label: value.service_name ?? value.module_path,
|
|
@@ -196,7 +194,7 @@ const addUtilityProcess = (input) => {
|
|
|
196
194
|
const resolution = resolveArtifactPathByContext({
|
|
197
195
|
declaredPath: value.module_path,
|
|
198
196
|
sourcePath: file.path,
|
|
199
|
-
context: value.module_resolution_context
|
|
197
|
+
context: value.module_resolution_context,
|
|
200
198
|
files: context.filesByPath,
|
|
201
199
|
});
|
|
202
200
|
const resolved = resolution.resolved_path;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { createEvidence, } from "../domain/evidence.js";
|
|
2
2
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
3
|
-
/** Create Evidence
|
|
3
|
+
/** Create Evidence for one Electron observation. */
|
|
4
4
|
export const createElectronEvidence = (operation, input, result, provider) => createEvidence(undefined, provider, {
|
|
5
5
|
predicateType: operation === "list_electron_targets"
|
|
6
|
-
? "rea.electron-target-list
|
|
7
|
-
: "rea.electron-page-inspection
|
|
6
|
+
? "rea.electron-target-list"
|
|
7
|
+
: "rea.electron-page-inspection",
|
|
8
8
|
operation,
|
|
9
9
|
parameters: parameters(input),
|
|
10
10
|
result: jsonValueSchema.parse(result),
|
|
@@ -22,14 +22,11 @@ export const createElectronEvidence = (operation, input, result, provider) => cr
|
|
|
22
22
|
});
|
|
23
23
|
const parameters = (input) => ({
|
|
24
24
|
cdp_endpoint: input.cdp_endpoint,
|
|
25
|
-
allowed_file_roots: input.allowed_file_roots,
|
|
26
25
|
...("target_id" in input
|
|
27
26
|
? {
|
|
28
27
|
target_id: input.target_id,
|
|
29
28
|
observation_ms: input.observation_ms,
|
|
30
29
|
include_script_sources: input.include_script_sources,
|
|
31
|
-
source_capture_approved: input.source_capture_approved,
|
|
32
|
-
limits: input.limits,
|
|
33
30
|
}
|
|
34
|
-
: {
|
|
31
|
+
: {}),
|
|
35
32
|
});
|