rea-agents 6.1.0 → 6.3.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 +24 -24
- package/bridge/ghidra/ReaGhidraBridge.java +32 -4
- package/bridge/hopper_bridge.py +8 -1
- package/dist/android/JadxConfiguration.js +87 -7
- package/dist/android/JadxMcpTransport.js +14 -2
- package/dist/android/JadxProvider.js +64 -36
- package/dist/android/JadxSession.js +51 -9
- package/dist/application/BinaryTargetResolver.js +68 -20
- package/dist/application/BrowserEvidence.js +3 -8
- package/dist/application/BrowserScenarioEvidence.js +4 -20
- package/dist/application/CapabilityInventory.js +43 -9
- package/dist/application/ClientConfigurationDocument.js +97 -25
- package/dist/application/ClientRegistrationStatus.js +19 -6
- package/dist/application/DirectAnalysis.js +41 -20
- package/dist/application/DirectAnalysisCleanup.js +71 -0
- package/dist/application/DirectAnalysisStatus.js +3 -7
- package/dist/application/Doctor.js +40 -53
- package/dist/application/DoctorDiagnostics.js +2 -3
- package/dist/application/EnhancedTools.js +51 -6
- package/dist/application/EvidenceBundleFiles.js +8 -3
- package/dist/application/InvestigationProviders.js +13 -5
- package/dist/application/JsonFiles.js +56 -23
- package/dist/application/LinuxHopper.js +11 -7
- package/dist/application/MacHopper.js +15 -18
- package/dist/application/RealHopperAssertions.js +0 -11
- package/dist/application/ReconstructionObligationCandidates.js +10 -3
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
- package/dist/application/ReferenceSourceImportEntries.js +1 -1
- package/dist/application/RegularFileRead.js +17 -0
- package/dist/application/Setup.js +26 -23
- package/dist/application/SetupClientConfiguration.js +18 -7
- package/dist/application/SetupHost.js +20 -29
- package/dist/application/SetupPlan.js +24 -20
- package/dist/application/SetupSkill.js +57 -8
- package/dist/application/SupportedClients.js +43 -0
- package/dist/application/Uninstall.js +98 -30
- package/dist/application/UpdateMaintenance.js +13 -7
- package/dist/application/UpdateRuntime.js +12 -12
- package/dist/application/Utf8JsonInput.js +64 -0
- package/dist/application/WebScriptExportService.js +38 -5
- package/dist/application/WorkflowEvidence.js +25 -2
- package/dist/application/XrefsAddressResolution.js +45 -0
- package/dist/application/analysisView/AnalysisViewService.js +76 -0
- package/dist/application/android/AndroidAnalysisService.js +1 -1
- package/dist/application/binary/AnalysisClientCleanup.js +30 -5
- package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
- package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
- package/dist/application/binary/AnalysisSnapshotCache.js +13 -10
- package/dist/application/binary/BinarySession.js +86 -29
- package/dist/application/binary/BinarySessionComposition.js +1 -3
- package/dist/application/binary/BinarySessionExecution.js +3 -5
- package/dist/application/binary/BinarySessionOpen.js +10 -2
- package/dist/application/binary/BinarySessionRecords.js +1 -1
- package/dist/application/binary/BinarySessionStatus.js +1 -6
- package/dist/application/binary/CompositeProvider.js +4 -18
- package/dist/application/binary/LazyAnalysisProvider.js +5 -5
- package/dist/application/binary/SessionProviderRouter.js +27 -135
- package/dist/application/homebrew.js +48 -0
- package/dist/application/javascript/ElectronActiveEvidence.js +10 -14
- package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
- package/dist/application/javascript/ElectronBoundaryGraphNative.js +5 -1
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +3 -6
- package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
- package/dist/application/javascript/JavaScriptApplicationService.js +7 -1
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -9
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +19 -27
- package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
- package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
- package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
- package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +46 -29
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +86 -27
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +52 -9
- package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +1 -0
- package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
- package/dist/application/javascript/JavaScriptModuleRelationships.js +6 -18
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +8 -6
- package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +7 -5
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +3 -4
- package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +3 -7
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +76 -47
- package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
- package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +3 -4
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +51 -25
- package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
- package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
- package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
- package/dist/application/native/NativeCallRoutes.js +2 -4
- package/dist/application/process/ProcessCli.js +11 -11
- package/dist/application/process/ProcessEvidence.js +0 -1
- package/dist/artifacts/ArtifactProvider.js +53 -30
- package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
- package/dist/artifacts/ArtifactReader.js +31 -0
- package/dist/artifacts/AsarArtifactReader.js +81 -17
- package/dist/artifacts/DirectoryArtifactReader.js +2 -1
- package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
- package/dist/artifacts/NativeDmgArtifactReader.js +207 -77
- package/dist/artifacts/NativeDmgOwnership.js +109 -0
- package/dist/artifacts/SafeOutputTree.js +16 -2
- package/dist/artifacts/ZipArtifactReader.js +11 -4
- package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
- package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
- package/dist/artifacts/apple/KeyedArchiveReader.js +68 -42
- package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
- package/dist/artifacts/extraction/ArtifactExtraction.js +104 -29
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +71 -66
- package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
- package/dist/artifacts/inventory/classify.js +33 -14
- package/dist/artifacts/inventory/hashStableRootArtifact.js +37 -0
- package/dist/artifacts/inventory/reader.js +3 -3
- package/dist/artifacts/inventory/scanCanonical.js +64 -34
- package/dist/artifacts/inventory/scanReader.js +12 -20
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +65 -27
- package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
- package/dist/browser/CdpBrowserProvider.js +6 -6
- package/dist/browser/CdpCaptureEventHandlers.js +2 -4
- package/dist/browser/CdpCaptureEvents.js +0 -1
- package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
- package/dist/browser/CdpCaptureValues.js +20 -0
- package/dist/browser/CdpElectronInspection.js +2 -2
- package/dist/browser/CdpElectronProvider.js +4 -5
- package/dist/browser/CdpElectronScriptEvents.js +2 -8
- package/dist/browser/CdpElectronScripts.js +4 -5
- package/dist/browser/CdpPageCaptureScripts.js +2 -3
- package/dist/browser/CdpSafeMetadata.js +10 -10
- package/dist/browser/CdpWebMcpDiscovery.js +16 -13
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +64 -49
- package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
- package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
- package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
- package/dist/browser/PlaywrightScenarioBrowser.js +269 -66
- package/dist/browser/PlaywrightScenarioEvents.js +1 -1
- package/dist/browser/PlaywrightScenarioSession.js +41 -32
- package/dist/browser/WebSourceMapFetcher.js +32 -6
- package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
- package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
- package/dist/browser/history/CaptureFailures.js +6 -2
- package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
- package/dist/catalogIdentity.js +0 -1
- package/dist/cli/analysisViewCommands.js +36 -0
- package/dist/cli/artifactCommands.js +11 -12
- package/dist/cli/coreAnalysisCommands.js +3 -3
- package/dist/cli/coreBinaryCommands.js +37 -28
- package/dist/cli/coreNativeCommands.js +9 -10
- package/dist/cli/electronCommands.js +12 -13
- package/dist/cli/interactiveSetup.js +6 -6
- package/dist/cli/javascriptApplicationAnalysis.js +2 -12
- package/dist/cli/jsonOutput.js +3 -2
- package/dist/cli/managedCommands.js +7 -8
- package/dist/cli/nativeCallCommands.js +1 -2
- package/dist/cli/omittableDefaults.js +50 -0
- package/dist/cli/processCommands.js +3 -2
- package/dist/cli/setupCommands.js +16 -15
- package/dist/cli/streamedJsonOutput.js +83 -4
- package/dist/cli/utilityCommands.js +10 -12
- package/dist/cli.js +19 -8
- package/dist/cliBrowserScenarioCommands.js +2 -2
- package/dist/cliCommandNames.js +1 -0
- package/dist/cliJsonFile.js +179 -0
- package/dist/cliJsonInput.js +60 -33
- package/dist/cliObservationOptions.js +4 -0
- package/dist/cliOutput.js +0 -38
- package/dist/composition/auxiliaryAnalysisProviders.js +30 -25
- package/dist/composition/binary.js +9 -9
- package/dist/composition/browserScenario.js +2 -1
- package/dist/composition/directAnalysis.js +20 -14
- package/dist/composition/electronScenario.js +1 -1
- package/dist/composition/optionalObservationProviders.js +12 -7
- package/dist/config/environment.js +6 -0
- package/dist/config/ghidraStartupTimeout.js +4 -9
- package/dist/config/homeDirectory.js +12 -0
- package/dist/config/mcpResponseBudget.js +9 -1
- package/dist/config/parseConfig.js +7 -3
- package/dist/config/parsers.js +19 -22
- package/dist/contracts/analysisViewToolContracts.js +56 -0
- package/dist/contracts/applicationToolContracts.js +5 -4
- package/dist/contracts/artifactComparisonExample.js +7 -7
- package/dist/contracts/artifactToolContracts.js +1 -1
- package/dist/contracts/browserScenarioToolContracts.js +1 -1
- package/dist/contracts/browserToolContracts.js +19 -15
- package/dist/contracts/enhancedInputs.js +2 -2
- package/dist/contracts/enhancedToolContracts.js +4 -3
- package/dist/contracts/errorSchemas.js +3 -1
- package/dist/contracts/evm/evmToolContracts.js +1 -1
- package/dist/contracts/functionComparisonExample.js +8 -0
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/inputSchemaPresentation.js +181 -0
- package/dist/contracts/investigationExamples.js +4 -3
- package/dist/contracts/javascript/electronToolContracts.js +3 -2
- package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -22
- package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +248 -0
- package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
- package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
- package/dist/contracts/managed/managedToolContracts.js +8 -12
- package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
- package/dist/contracts/mobileApplicationGraphExamples.js +8 -8
- package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
- package/dist/contracts/native/nativeToolContracts.js +2 -2
- package/dist/contracts/officialToolContracts.js +2 -1
- package/dist/contracts/promptContracts.js +2 -2
- package/dist/contracts/providerSelection.js +1 -1
- package/dist/contracts/sessionLifecycleInputs.js +4 -3
- package/dist/contracts/sessionStatusContract.js +3 -2
- package/dist/contracts/sessionToolContracts.js +17 -4
- package/dist/contracts/sessionToolSchemas.js +4 -16
- package/dist/contracts/toolContracts.js +2 -0
- package/dist/contracts/toolEffects.js +1 -0
- package/dist/contracts/toolOutputSchemaGroups.js +138 -94
- package/dist/contracts/toolOutputSchemaPrimitives.js +13 -26
- package/dist/contracts/toolSchemaMetadata.js +18 -69
- package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
- package/dist/contracts/webRuntimeToolContracts.js +1 -1
- package/dist/contracts/webScriptToolContracts.js +1 -1
- package/dist/doctorRuntime.js +7 -5
- package/dist/domain/analysisErrorBase.js +5 -0
- package/dist/domain/analysisErrorCore.js +3 -0
- package/dist/domain/analysisErrorPresentation.js +22 -5
- package/dist/domain/analysisErrorProjection.js +24 -5
- package/dist/domain/analysisSnapshot.js +31 -31
- package/dist/domain/analysisView/analysisView.js +241 -0
- package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
- package/dist/domain/analysisView/binaryLayoutView.js +159 -0
- package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
- package/dist/domain/android/androidApplication.js +1 -1
- package/dist/domain/android/androidPartialObservation.js +36 -0
- package/dist/domain/apple/appleApplication.js +1 -1
- package/dist/domain/apple/dylibResolution.js +10 -3
- package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
- package/dist/domain/apple/keyedArchive.js +26 -2
- package/dist/domain/artifactComparison.js +15 -6
- package/dist/domain/artifactGraph.js +17 -4
- package/dist/domain/artifactIdentity.js +8 -8
- package/dist/domain/artifactInspection.js +8 -8
- package/dist/domain/artifactInventoryEvidence.js +9 -16
- package/dist/domain/artifactOperationError.js +3 -3
- package/dist/domain/artifactPartialObservation.js +1 -0
- package/dist/domain/artifactPathSyntax.js +49 -0
- package/dist/domain/binaryTarget.js +39 -13
- package/dist/domain/browserCaptureComparison.js +13 -49
- package/dist/domain/browserCompleteness.js +3 -2
- package/dist/domain/browserNetworkEvidence.js +10 -4
- package/dist/domain/browserObservation.js +0 -1
- package/dist/domain/browserObservationSchemas.js +14 -3
- package/dist/domain/browserScenario.js +0 -1
- package/dist/domain/browserScenarioCapture.js +1 -2
- package/dist/domain/browserScenarioCaptureValues.js +2 -2
- package/dist/domain/browserScenarioDiff.js +0 -2
- package/dist/domain/browserScenarioDiffEvidence.js +0 -12
- package/dist/domain/browserScenarioDiffValues.js +2 -2
- package/dist/domain/browserScenarioNormalization.js +3 -3
- package/dist/domain/browserScenarioValues.js +6 -6
- package/dist/domain/callPath.js +15 -18
- package/dist/domain/callPathSchemas.js +2 -2
- package/dist/domain/canonicalDigest.js +7 -1
- package/dist/domain/canonicalOrdering.js +1 -13
- package/dist/domain/changedBehavior.js +5 -6
- package/dist/domain/comparisonSemantics.js +0 -5
- package/dist/domain/completionLedgerGeneration.js +2 -1
- package/dist/domain/configurationErrors.js +12 -0
- package/dist/domain/conformancePackage.js +4 -3
- package/dist/domain/digests.js +0 -3
- package/dist/domain/evidence.js +19 -40
- package/dist/domain/evidenceBundle.js +58 -42
- package/dist/domain/evidenceCompletionLedger.js +2 -1
- package/dist/domain/firmware/firmwareAnalysis.js +4 -3
- package/dist/domain/functionComparison.js +6 -6
- package/dist/domain/functionComparisonDimensions.js +120 -87
- package/dist/domain/functionComparisonNormalization.js +26 -36
- package/dist/domain/functionComparisonResults.js +3 -6
- package/dist/domain/functionComparisonSchemas.js +2 -8
- package/dist/domain/functionDossierEvidence.js +4 -38
- package/dist/domain/hopperValues.js +11 -15
- package/dist/domain/javascript/electronActiveObservation.js +29 -71
- package/dist/domain/javascript/electronObservation.js +14 -3
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +12 -11
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +11 -2
- package/dist/domain/javascript/electronStaticAnalysisNative.js +7 -4
- package/dist/domain/javascript/electronStaticAnalysisValues.js +8 -4
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +3 -1
- package/dist/domain/javascript/javascriptApplicationChangeGraph.js +12 -8
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +6 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +41 -16
- package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
- package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
- package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +50 -36
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +9 -8
- package/dist/domain/javascript/javascriptAstFingerprint.js +2 -2
- package/dist/domain/javascript/javascriptAstValues.js +22 -0
- package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
- package/dist/domain/javascript/javascriptExportShapeComparison.js +10 -3
- package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +58 -22
- package/dist/domain/javascript/javascriptExportShapeSelection.js +7 -7
- package/dist/domain/javascript/javascriptExportShapeVariants.js +70 -16
- package/dist/domain/javascript/javascriptFeatureSeed.js +25 -3
- package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
- package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
- package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -5
- package/dist/domain/javascript/javascriptNativeHandoff.js +7 -7
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
- package/dist/domain/javascript/javascriptRuntimeObservation.js +18 -7
- package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
- package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
- package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
- package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +5 -4
- package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
- package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +6 -6
- package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -222
- package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
- package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
- package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
- package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +7 -7
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +209 -11
- package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
- package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
- package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
- package/dist/domain/javascript/javascriptSemanticChildProcesses.js +4 -3
- package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
- package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
- package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
- package/dist/domain/javascript/javascriptSemanticFingerprints.js +2 -2
- package/dist/domain/javascript/javascriptSemanticGraph.js +220 -71
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +19 -1
- package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
- package/dist/domain/javascript/javascriptSemanticIterationSources.js +106 -0
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +515 -74
- package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +44 -36
- package/dist/domain/javascript/javascriptSemanticObjects.js +79 -42
- package/dist/domain/javascript/javascriptSemanticPrimitives.js +8 -14
- package/dist/domain/javascript/javascriptSemanticProjection.js +21 -16
- package/dist/domain/javascript/javascriptSemanticPromises.js +16 -21
- package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +23 -0
- package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
- package/dist/domain/javascript/javascriptSemanticQuery.js +8 -2
- package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +3 -2
- package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
- package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
- package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
- package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
- package/dist/domain/javascript/javascriptSemanticReturns.js +55 -44
- package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
- package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -1
- package/dist/domain/javascript/javascriptSemanticValues.js +180 -76
- package/dist/domain/javascript/javascriptSourceMapPaths.js +114 -0
- package/dist/domain/javascript/javascriptSourceParser.js +34 -9
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -6
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -16
- package/dist/domain/javascript/sourceToBundleComparison.js +19 -8
- package/dist/domain/javascript/sourceToBundleSignals.js +53 -25
- package/dist/domain/jsonSerialization.js +109 -55
- package/dist/domain/jsonShape.js +46 -19
- package/dist/domain/localPath.js +10 -4
- package/dist/domain/managed/managedApplicationGraph.js +10 -6
- package/dist/domain/managed/managedApplicationGraphNodes.js +82 -57
- package/dist/domain/managed/managedArtifact.js +6 -4
- package/dist/domain/managed/managedMemberComparison.js +2 -9
- package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
- package/dist/domain/managed/managedNativeVerification.js +0 -2
- package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
- package/dist/domain/native/binaryLayout.js +2 -3
- package/dist/domain/native/nativeApiBoundary.js +1 -1
- package/dist/domain/native/nativeCallObservation.js +3 -3
- package/dist/domain/native/nativeInstruction.js +7 -0
- package/dist/domain/native/nativeValueFlow.js +5 -11
- package/dist/domain/native/objcSwiftMetadata.js +15 -17
- package/dist/domain/native/recordedCrash.js +2 -3
- package/dist/domain/offsetDateTime.js +17 -0
- package/dist/domain/process/processCapture.js +22 -20
- package/dist/domain/process/processCaptureCoverage.js +70 -0
- package/dist/domain/process/processCaptureExample.js +45 -1
- package/dist/domain/process/processCaptureParsing.js +1 -34
- package/dist/domain/process/processCaptureValidation.js +82 -13
- package/dist/domain/process/processComparison.js +39 -43
- package/dist/domain/process/processObservation.js +10 -2
- package/dist/domain/process/processScenario.js +24 -2
- package/dist/domain/process/processTraceComparison.js +0 -2
- package/dist/domain/process/processTraceDimensionProjection.js +1 -1
- package/dist/domain/process/processTraceEvaluation.js +19 -15
- package/dist/domain/process/processTraceSpecification.js +4 -7
- package/dist/domain/providerAdapterError.js +2 -0
- package/dist/domain/providerCleanupError.js +6 -2
- package/dist/domain/reconstructionCoverage.js +7 -3
- package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
- package/dist/domain/reconstructionReadinessSchemas.js +2 -1
- package/dist/domain/reconstructionUnknowns.js +4 -3
- package/dist/domain/reconstructionVerification.js +6 -5
- package/dist/domain/reconstructionVerificationSchemas.js +2 -1
- package/dist/domain/referenceSourceGraph.js +27 -28
- package/dist/domain/referenceSourceImportParsing.js +34 -45
- package/dist/domain/residualUnknown.js +3 -2
- package/dist/domain/staticRuntimeCorrelation.js +4 -3
- package/dist/domain/stringPatterns.js +6 -0
- package/dist/domain/swiftSymbolClassification.js +66 -0
- package/dist/domain/symbolAnalysis.js +83 -20
- package/dist/domain/unicodeCodePointOrder.js +6 -0
- package/dist/domain/webBundleAnalyzerInspection.js +9 -1
- package/dist/domain/webCaptureDiff.js +71 -30
- package/dist/domain/webCaptureDiffSchemas.js +8 -11
- package/dist/domain/webEventListeners.js +3 -2
- package/dist/domain/webExecution.js +3 -2
- package/dist/domain/webInventory.js +3 -2
- package/dist/domain/webMcpDiscovery.js +4 -3
- package/dist/domain/webRuntime.js +0 -2
- package/dist/domain/webScriptExport.js +2 -2
- package/dist/dotnet/ManagedArtifactInspector.js +2 -19
- package/dist/dotnet/ManagedMemberInspector.js +12 -18
- package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +1 -2
- package/dist/dotnet/ManagedMemberRows.js +75 -62
- package/dist/dotnet/ManagedMetadataInventory.js +16 -22
- package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
- package/dist/dotnet/ManagedReaderFailure.js +16 -0
- package/dist/dotnet/ManagedStaticProvider.js +13 -12
- package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
- package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
- package/dist/evaluation/AgentEvaluationReport.js +28 -0
- package/dist/evaluation/CodexAgentEval.js +12 -8
- package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
- package/dist/evm/EvmoleInterfaceProvider.js +2 -1
- package/dist/filesystem/RegularFile.js +41 -0
- package/dist/firmware/FirmwareCommand.js +9 -5
- package/dist/firmware/FirmwareProvider.js +4 -4
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
- package/dist/ghidra/GhidraClient.js +105 -36
- package/dist/ghidra/GhidraClientStartup.js +0 -2
- package/dist/ghidra/GhidraDoctor.js +6 -5
- package/dist/ghidra/GhidraFunctionValues.js +3 -5
- package/dist/ghidra/GhidraInstallation.js +151 -22
- package/dist/ghidra/GhidraJavaLaunch.js +6 -2
- package/dist/ghidra/GhidraLauncher.js +58 -26
- package/dist/ghidra/GhidraProvider.js +6 -2
- package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
- package/dist/ghidra/GhidraProviderClient.js +13 -3
- package/dist/ghidra/GhidraSessionError.js +2 -0
- package/dist/ghidra/GhidraSessionRoot.js +39 -0
- package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
- package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
- package/dist/hopper/BridgeLauncher.js +34 -45
- package/dist/hopper/HopperAnalysisProfile.js +3 -8
- package/dist/hopper/HopperCleanup.js +56 -27
- package/dist/hopper/HopperClient.js +86 -65
- package/dist/hopper/HopperMachOImage.js +3 -2
- package/dist/hopper/HopperProvider.js +16 -18
- package/dist/hopper/HopperRegexSearch.js +3 -6
- package/dist/hopper/HopperTargetLease.js +132 -49
- package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
- package/dist/ida/IdaConfiguration.js +8 -3
- package/dist/ida/IdaInput.js +1 -7
- package/dist/ida/IdaMcpConnection.js +8 -4
- package/dist/ida/IdaOperationRunner.js +5 -3
- package/dist/ida/IdaProvider.js +8 -12
- package/dist/ida/IdaSessionClient.js +24 -20
- package/dist/ida/IdaWorkspace.js +12 -13
- package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
- package/dist/inspector/V8InspectorCaptureProjection.js +47 -14
- package/dist/inspector/V8InspectorProvider.js +97 -35
- package/dist/javascript/recovery/WakaruCommand.js +7 -2
- package/dist/javascript/recovery/WakaruExecution.js +5 -2
- package/dist/main/shutdown.js +81 -29
- package/dist/main/startup.js +9 -2
- package/dist/main/transport.js +23 -3
- package/dist/main.js +11 -18
- package/dist/native/AppleMachoSelection.js +16 -6
- package/dist/native/AppleObjcDispatchFacets.js +3 -3
- package/dist/native/AppleObjcProperties.js +17 -7
- package/dist/native/CommandRunner.js +9 -7
- package/dist/native/LldbCallTracer.js +249 -77
- package/dist/native/NativeMacOSProvider.js +32 -17
- package/dist/native/NativeMacOSProviderMetadata.js +1 -2
- package/dist/native/NativeUiHelperRuntime.js +11 -2
- package/dist/native/NativeUiObservation.js +2 -2
- package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
- package/dist/process/DarwinProcessRunTokenReader.js +16 -2
- package/dist/process/ExecFileOutput.js +88 -6
- package/dist/process/PrivateRuntimeRoot.js +10 -5
- package/dist/process/ProcessOwnership.js +1 -4
- package/dist/process/ProcessOwnershipObservation.js +18 -16
- package/dist/process/ProviderProcess.js +1 -3
- package/dist/process/capture/FilesystemSnapshot.js +131 -24
- package/dist/process/capture/ProcessCaptureError.js +13 -0
- package/dist/process/capture/ProcessCaptureLifecycle.js +148 -74
- package/dist/process/capture/ProcessFilesystemEffects.js +51 -6
- package/dist/process/capture/ProcessHarness.js +16 -33
- package/dist/process/capture/ProcessNormalization.js +20 -2
- package/dist/process/capture/ProcessSampling.js +25 -2
- package/dist/process/capture/TerminalRenderer.js +14 -0
- package/dist/process/snapshotEnvironment.js +14 -0
- package/dist/server/EvidenceMcpServer.js +25 -14
- package/dist/server/analysisAdmission.js +8 -0
- package/dist/server/createServer.js +71 -59
- package/dist/server/mcpClientMetadata.js +12 -5
- package/dist/server/promptCompletion.js +3 -8
- package/dist/server/registerAnalysisViewTool.js +15 -0
- package/dist/server/registerAndroidTools.js +2 -3
- package/dist/server/registerApplicationTools/compareExportShapes.js +6 -6
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
- package/dist/server/registerApplicationTools/compareVersions.js +4 -5
- package/dist/server/registerApplicationTools/coverage.js +1 -2
- package/dist/server/registerApplicationTools/helpers.js +4 -4
- package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
- package/dist/server/registerApplicationTools/traceFeature.js +4 -5
- package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
- package/dist/server/registerArtifactComparisonTool.js +4 -5
- package/dist/server/registerArtifactTools.js +2 -2
- package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
- package/dist/server/registerBrowserScenarioTool.js +3 -4
- package/dist/server/registerBrowserTools.js +13 -16
- package/dist/server/registerBundleComparisonTool.js +5 -6
- package/dist/server/registerCloseLifecycleTool.js +8 -7
- package/dist/server/registerElectronTools.js +10 -13
- package/dist/server/registerEnhancedTools.js +82 -77
- package/dist/server/registerEvidenceTools.js +54 -47
- package/dist/server/registerEvmTools.js +2 -3
- package/dist/server/registerFirmwareTools.js +2 -3
- package/dist/server/registerFunctionComparisonTool.js +7 -8
- package/dist/server/registerInvestigationTools.js +14 -15
- package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
- package/dist/server/registerManagedTools.js +7 -4
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
- package/dist/server/registerOfficialTools.js +32 -41
- package/dist/server/registerProcessComparisonTool.js +8 -8
- package/dist/server/registerRecordedCrashTools.js +2 -3
- package/dist/server/registerSessionRecordTools.js +15 -19
- package/dist/server/registerSessionStatusTool.js +3 -4
- package/dist/server/registerSessionTools.js +19 -19
- package/dist/server/registerWebModuleTool.js +2 -3
- package/dist/server/registerWebNetworkCaptureTool.js +2 -3
- package/dist/server/registerWebRuntimeTools.js +4 -5
- package/dist/server/registerWebScriptTool.js +2 -3
- package/dist/server/registerWebSourceLocationTool.js +2 -3
- package/dist/server/toolResult.js +66 -94
- package/dist/server/toolResultEncoding.js +11 -10
- package/dist/windows/WindowsNativeLoader.js +1 -0
- package/dist/windows/WindowsOwnedProcess.js +60 -15
- package/dist/windows/WindowsPrivateRuntime.js +7 -8
- package/native/windows/README.md +3 -1
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +42 -30
- package/scripts/rea.mjs +3 -6
- package/skills/reverse-engineer-anything/SKILL.md +14 -13
- package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +18 -0
- package/dist/artifacts/inventory/policy.js +0 -2
- package/dist/config.js +0 -1
- package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
- package/dist/contracts/process/processCaptureExample.js +0 -2
- package/dist/contracts/toolOutputSchemas.js +0 -2
- package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
- package/dist/main/reload.js +0 -12
- package/dist/main/state.js +0 -3
- package/dist/server/registerNativeTools.js +0 -6
- package/dist/server/sessionToolPolicies.js +0 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js";
|
|
2
2
|
import { err, ok } from "../../domain/result.js";
|
|
3
3
|
import { closeAnalysisClient } from "./AnalysisClientCleanup.js";
|
|
4
|
-
/** Synthetic
|
|
5
|
-
|
|
4
|
+
/** Synthetic identity for a deterministic provider set. */
|
|
5
|
+
const compositeProviderIdentity = (identities) => ({
|
|
6
6
|
id: `composite:${identities
|
|
7
7
|
.map(({ id }) => id)
|
|
8
8
|
.sort()
|
|
@@ -16,15 +16,10 @@ export class CompositeProvider {
|
|
|
16
16
|
#identity;
|
|
17
17
|
#capabilities;
|
|
18
18
|
#providerByOperation;
|
|
19
|
-
#profileProvider;
|
|
20
19
|
constructor(providers) {
|
|
21
20
|
this.providers = providers;
|
|
22
21
|
if (providers.length === 0)
|
|
23
22
|
throw new RangeError("CompositeProvider requires at least one provider");
|
|
24
|
-
const profileProviders = providers.filter(({ resolveAnalysisProfile }) => resolveAnalysisProfile !== undefined);
|
|
25
|
-
if (profileProviders.length > 1)
|
|
26
|
-
throw new TypeError("CompositeProvider supports at most one target-bound analysis profile");
|
|
27
|
-
this.#profileProvider = profileProviders[0];
|
|
28
23
|
this.#identity = Object.freeze(compositeProviderIdentity(providers.map((provider) => provider.identity())));
|
|
29
24
|
const routes = new Map();
|
|
30
25
|
const capabilities = [];
|
|
@@ -46,12 +41,6 @@ export class CompositeProvider {
|
|
|
46
41
|
capabilities() {
|
|
47
42
|
return this.#capabilities;
|
|
48
43
|
}
|
|
49
|
-
resolveAnalysisProfile(target, options) {
|
|
50
|
-
const resolve = this.#profileProvider?.resolveAnalysisProfile;
|
|
51
|
-
return resolve === undefined
|
|
52
|
-
? Promise.resolve(ok({ profile: null, compatibility: {} }))
|
|
53
|
-
: resolve.call(this.#profileProvider, target, options);
|
|
54
|
-
}
|
|
55
44
|
createClient(target, profile, context) {
|
|
56
45
|
const clients = new Map();
|
|
57
46
|
const clientFor = (provider) => {
|
|
@@ -62,7 +51,7 @@ export class CompositeProvider {
|
|
|
62
51
|
clients.set(provider, created);
|
|
63
52
|
return created;
|
|
64
53
|
};
|
|
65
|
-
const
|
|
54
|
+
const close = async (options) => {
|
|
66
55
|
const outcomes = await Promise.all([...clients.entries()].map(([provider, client]) => closeAnalysisClient(client, provider.identity().id, options)));
|
|
67
56
|
return outcomes.find((outcome) => !outcome.ok) ?? ok(null);
|
|
68
57
|
};
|
|
@@ -101,10 +90,7 @@ export class CompositeProvider {
|
|
|
101
90
|
}
|
|
102
91
|
return undefined;
|
|
103
92
|
},
|
|
104
|
-
|
|
105
|
-
close: async () => {
|
|
106
|
-
await closeWithOutcome();
|
|
107
|
-
},
|
|
93
|
+
close,
|
|
108
94
|
};
|
|
109
95
|
}
|
|
110
96
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AnalysisCancelledError } from "../../domain/analysisErrorCore.js";
|
|
2
2
|
import { AnalysisError } from "../../domain/analysisErrorBase.js";
|
|
3
3
|
import { ProviderAdapterError } from "../../domain/providerAdapterError.js";
|
|
4
|
-
import { err } from "../../domain/result.js";
|
|
4
|
+
import { err, ok } from "../../domain/result.js";
|
|
5
5
|
import { ABORTED, waitForAbortable } from "./AbortablePromise.js";
|
|
6
6
|
const isAborted = (signal) => signal?.aborted === true;
|
|
7
7
|
/**
|
|
@@ -77,13 +77,13 @@ class LazyAnalysisClient {
|
|
|
77
77
|
operationHealthSnapshot() {
|
|
78
78
|
return this.#client?.operationHealthSnapshot?.();
|
|
79
79
|
}
|
|
80
|
-
async
|
|
80
|
+
close = async (options) => {
|
|
81
81
|
this.#closed = true;
|
|
82
82
|
if (this.#loading === undefined)
|
|
83
|
-
return;
|
|
83
|
+
return ok(null);
|
|
84
84
|
const client = await this.#loading;
|
|
85
|
-
|
|
86
|
-
}
|
|
85
|
+
return client.close(options);
|
|
86
|
+
};
|
|
87
87
|
async #load(operation) {
|
|
88
88
|
if (this.#closed)
|
|
89
89
|
throw new ProviderAdapterError(this.#providerId, operation, {
|
|
@@ -1,40 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AnalysisCancelledError, AnalysisCapabilityUnavailableError, } from "../../domain/analysisErrorCore.js";
|
|
3
|
-
import { ProviderAdapterError } from "../../domain/providerAdapterError.js";
|
|
1
|
+
import { AnalysisCapabilityUnavailableError } from "../../domain/analysisErrorCore.js";
|
|
4
2
|
import { ProviderSelectionError } from "../../domain/providerSelectionError.js";
|
|
5
3
|
import {} from "../../domain/analysisErrorBase.js";
|
|
6
|
-
import { jsonObjectSchema } from "../../domain/jsonValue.js";
|
|
7
4
|
import { err, ok } from "../../domain/result.js";
|
|
8
5
|
import { AnalysisProviderRegistry, } from "./AnalysisProviderRegistry.js";
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
/** Resolve either the compatibility single-provider seam or a selectable set. */
|
|
6
|
+
import { CompositeProvider } from "./CompositeProvider.js";
|
|
7
|
+
/** Resolve one registry-selected deep provider and disjoint auxiliary families. */
|
|
12
8
|
export class SessionProviderRouter {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
? { id: "unidentified", name: "Unidentified provider", version: null }
|
|
21
|
-
: provider.identity();
|
|
22
|
-
const capabilities = typeof provider === "function"
|
|
23
|
-
? undefined
|
|
24
|
-
: capabilityMap(provider.capabilities());
|
|
25
|
-
const resolveProfile = options.resolveAnalysisProfile ??
|
|
26
|
-
(typeof provider === "function" ||
|
|
27
|
-
provider.resolveAnalysisProfile === undefined
|
|
28
|
-
? () => Promise.resolve(ok({ profile: null, compatibility: {} }))
|
|
29
|
-
: (target, resolutionOptions) => provider.resolveAnalysisProfile?.(target, resolutionOptions) ??
|
|
30
|
-
Promise.resolve(ok({ profile: null, compatibility: {} })));
|
|
31
|
-
return new SessionProviderRouter({
|
|
32
|
-
kind: "single",
|
|
33
|
-
provider,
|
|
34
|
-
identity,
|
|
35
|
-
capabilities,
|
|
36
|
-
resolveProfile,
|
|
37
|
-
});
|
|
9
|
+
registry;
|
|
10
|
+
auxiliaryProviders;
|
|
11
|
+
route;
|
|
12
|
+
constructor(registry, auxiliaryProviders, route) {
|
|
13
|
+
this.registry = registry;
|
|
14
|
+
this.auxiliaryProviders = auxiliaryProviders;
|
|
15
|
+
this.route = route;
|
|
38
16
|
}
|
|
39
17
|
/** Create selection-aware routing while keeping auxiliary families disjoint. */
|
|
40
18
|
static selectable(registry, auxiliaryProviders) {
|
|
@@ -48,99 +26,31 @@ export class SessionProviderRouter {
|
|
|
48
26
|
if (auxiliaryOperations.has(operation))
|
|
49
27
|
throw new TypeError(`Deep and auxiliary providers both declare operation ${operation}`);
|
|
50
28
|
const initialRoute = selectableRoute(auxiliaryProviders, undefined);
|
|
51
|
-
return new SessionProviderRouter(
|
|
52
|
-
kind: "selectable",
|
|
53
|
-
registry,
|
|
54
|
-
auxiliaryProviders: [...auxiliaryProviders],
|
|
55
|
-
identity: identities.length === 0
|
|
56
|
-
? emptyProviderIdentity()
|
|
57
|
-
: compositeProviderIdentity(identities),
|
|
58
|
-
initialRoute,
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
/** Compatibility identity covering every configured provider. */
|
|
62
|
-
configuredIdentity() {
|
|
63
|
-
return structuredClone(this.runtime.identity);
|
|
64
|
-
}
|
|
65
|
-
/** Provider identities exposed through the flat 1.x compatibility field. */
|
|
66
|
-
providerIdentities(route) {
|
|
67
|
-
if (this.runtime.kind === "single") {
|
|
68
|
-
if (route.capabilities === undefined)
|
|
69
|
-
return [route.identity];
|
|
70
|
-
return uniqueProviderIdentities([...route.capabilities.values()].map(({ provider }) => provider));
|
|
71
|
-
}
|
|
72
|
-
const selected = route.binding?.identity;
|
|
73
|
-
return uniqueProviderIdentities([
|
|
74
|
-
...this.runtime.auxiliaryProviders.map((provider) => provider.identity()),
|
|
75
|
-
...this.runtime.registry
|
|
76
|
-
.identities()
|
|
77
|
-
.map((identity) => identity.id === selected?.id ? selected : identity),
|
|
78
|
-
]);
|
|
29
|
+
return new SessionProviderRouter(registry, [...auxiliaryProviders], initialRoute);
|
|
79
30
|
}
|
|
80
31
|
/** Target-free routes and discovery metadata. */
|
|
81
32
|
initialRoute() {
|
|
82
|
-
|
|
83
|
-
return this.runtime.initialRoute;
|
|
84
|
-
const runtime = this.runtime;
|
|
85
|
-
return {
|
|
86
|
-
identity: structuredClone(runtime.identity),
|
|
87
|
-
capabilities: runtime.capabilities,
|
|
88
|
-
profile: null,
|
|
89
|
-
compatibility: {},
|
|
90
|
-
binding: null,
|
|
91
|
-
selection: undefined,
|
|
92
|
-
createClient: (target, context) => createSingleProviderClient(runtime, target, undefined, context),
|
|
93
|
-
};
|
|
33
|
+
return this.route;
|
|
94
34
|
}
|
|
95
35
|
/** Resolve target routes before any provider client is created. */
|
|
96
36
|
async resolve(target, providerId, signal) {
|
|
97
37
|
const resolutionOptions = signal === undefined ? undefined : { signal };
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
: selected;
|
|
103
|
-
}
|
|
104
|
-
const runtime = this.runtime;
|
|
105
|
-
if (providerId !== undefined &&
|
|
106
|
-
providerId !== "auto" &&
|
|
107
|
-
providerId !== runtime.identity.id)
|
|
108
|
-
return err(new ProviderSelectionError({
|
|
109
|
-
reason: "unknown_provider",
|
|
110
|
-
requestedProviderId: providerId,
|
|
111
|
-
candidateIds: [runtime.identity.id],
|
|
112
|
-
}));
|
|
113
|
-
const resolved = await waitForAbortable(runtime.resolveProfile(target, resolutionOptions), signal);
|
|
114
|
-
if (resolved === ABORTED)
|
|
115
|
-
return err(new AnalysisCancelledError("open_binary"));
|
|
116
|
-
if (!resolved.ok)
|
|
117
|
-
return resolved;
|
|
118
|
-
const normalized = normalizeProfileResolution(resolved.value, runtime.identity.id);
|
|
119
|
-
if (!normalized.ok)
|
|
120
|
-
return normalized;
|
|
121
|
-
return ok({
|
|
122
|
-
identity: structuredClone(runtime.identity),
|
|
123
|
-
capabilities: runtime.capabilities,
|
|
124
|
-
profile: normalized.value.profile,
|
|
125
|
-
compatibility: normalized.value.compatibility,
|
|
126
|
-
binding: null,
|
|
127
|
-
selection: undefined,
|
|
128
|
-
createClient: (openedTarget, context) => createSingleProviderClient(runtime, openedTarget, normalized.value.profile ?? undefined, context),
|
|
129
|
-
});
|
|
38
|
+
const selected = await this.registry.select(target, providerId, resolutionOptions);
|
|
39
|
+
return selected.ok
|
|
40
|
+
? ok(selectableRoute(this.auxiliaryProviders, selected.value))
|
|
41
|
+
: selected;
|
|
130
42
|
}
|
|
131
43
|
/** Candidate status authoritative for the active or target-free route. */
|
|
132
44
|
candidateStatuses(route) {
|
|
133
|
-
|
|
134
|
-
return [];
|
|
135
|
-
return route.selection?.candidates ?? this.runtime.registry.candidates();
|
|
45
|
+
return route.selection?.candidates ?? this.registry.candidates();
|
|
136
46
|
}
|
|
137
47
|
/** Produce exact candidate rejections for an intentionally unbound route. */
|
|
138
48
|
unboundOperationError(operation, route) {
|
|
139
|
-
if (
|
|
140
|
-
route.
|
|
141
|
-
|
|
49
|
+
if (route.binding !== null ||
|
|
50
|
+
route.selection === undefined ||
|
|
51
|
+
!this.registry.declaredOperations().includes(operation))
|
|
142
52
|
return undefined;
|
|
143
|
-
return this.
|
|
53
|
+
return this.registry.unboundOperationError(operation, route.selection);
|
|
144
54
|
}
|
|
145
55
|
}
|
|
146
56
|
const selectableRoute = (auxiliaryProviders, selection) => {
|
|
@@ -149,23 +59,23 @@ const selectableRoute = (auxiliaryProviders, selection) => {
|
|
|
149
59
|
...auxiliaryProviders,
|
|
150
60
|
...(binding === null ? [] : [binding.provider]),
|
|
151
61
|
];
|
|
152
|
-
const provider =
|
|
62
|
+
const provider = binding === null && providers.length === 1
|
|
63
|
+
? providers[0]
|
|
64
|
+
: providers.length === 0
|
|
65
|
+
? undefined
|
|
66
|
+
: new CompositeProvider(providers);
|
|
153
67
|
const identity = provider?.identity() ?? emptyProviderIdentity();
|
|
154
68
|
const capabilities = capabilityMap(provider?.capabilities() ?? []);
|
|
155
69
|
return {
|
|
156
70
|
identity,
|
|
157
71
|
capabilities,
|
|
158
72
|
profile: binding?.profile ?? null,
|
|
159
|
-
compatibility: structuredClone(binding?.compatibility ?? {}),
|
|
160
73
|
binding,
|
|
161
74
|
selection,
|
|
162
75
|
createClient: (target, context) => provider?.createClient(target, binding?.profile, context) ??
|
|
163
76
|
emptyClient(identity),
|
|
164
77
|
};
|
|
165
78
|
};
|
|
166
|
-
const createSingleProviderClient = (runtime, target, profile, context) => typeof runtime.provider === "function"
|
|
167
|
-
? runtime.provider(target, profile, context)
|
|
168
|
-
: runtime.provider.createClient(target, profile, context);
|
|
169
79
|
const emptyClient = (identity) => ({
|
|
170
80
|
execute: (operation) => operation === "health"
|
|
171
81
|
? Promise.resolve(ok({
|
|
@@ -177,7 +87,7 @@ const emptyClient = (identity) => ({
|
|
|
177
87
|
subject: null,
|
|
178
88
|
}))
|
|
179
89
|
: Promise.resolve(err(new AnalysisCapabilityUnavailableError(identity.id, operation, "operation is not declared by this provider set"))),
|
|
180
|
-
close: () => Promise.resolve(),
|
|
90
|
+
close: () => Promise.resolve(ok(null)),
|
|
181
91
|
});
|
|
182
92
|
const emptyProviderIdentity = () => ({
|
|
183
93
|
id: "composite:none",
|
|
@@ -185,9 +95,6 @@ const emptyProviderIdentity = () => ({
|
|
|
185
95
|
version: null,
|
|
186
96
|
});
|
|
187
97
|
const capabilityMap = (capabilities) => new Map(capabilities.map((descriptor) => [descriptor.operation, descriptor]));
|
|
188
|
-
const uniqueProviderIdentities = (identities) => [...new Map(identities.map((identity) => [identity.id, identity])).values()]
|
|
189
|
-
.sort((left, right) => left.id.localeCompare(right.id))
|
|
190
|
-
.map((identity) => structuredClone(identity));
|
|
191
98
|
const assertDisjoint = (providers) => {
|
|
192
99
|
const routes = new Set();
|
|
193
100
|
for (const provider of providers)
|
|
@@ -206,18 +113,3 @@ const assertUniqueProviderIds = (identities) => {
|
|
|
206
113
|
ids.add(identity.id);
|
|
207
114
|
}
|
|
208
115
|
};
|
|
209
|
-
const normalizeProfileResolution = (resolution, providerId) => {
|
|
210
|
-
try {
|
|
211
|
-
return ok({
|
|
212
|
-
profile: resolution.profile === null
|
|
213
|
-
? null
|
|
214
|
-
: analysisProfileSchema.parse(resolution.profile),
|
|
215
|
-
compatibility: jsonObjectSchema.parse(resolution.compatibility),
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
catch (cause) {
|
|
219
|
-
return err(new ProviderAdapterError(providerId, "resolve_analysis_profile", {
|
|
220
|
-
cause,
|
|
221
|
-
}));
|
|
222
|
-
}
|
|
223
|
-
};
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { z } from "zod";
|
|
1
4
|
/** Standard executable names and locations used to discover Homebrew. */
|
|
2
5
|
const HOMEBREW_COMMANDS = [
|
|
3
6
|
"brew",
|
|
@@ -17,3 +20,48 @@ export const probeHomebrew = async (probe) => {
|
|
|
17
20
|
}
|
|
18
21
|
return undefined;
|
|
19
22
|
};
|
|
23
|
+
const caskDirectoriesSchema = z
|
|
24
|
+
.object({ appdir: z.string().min(1).optional() })
|
|
25
|
+
.loose();
|
|
26
|
+
const caskConfigSchema = z
|
|
27
|
+
.object({
|
|
28
|
+
default: caskDirectoriesSchema.optional(),
|
|
29
|
+
env: caskDirectoriesSchema.optional(),
|
|
30
|
+
explicit: caskDirectoriesSchema.optional(),
|
|
31
|
+
})
|
|
32
|
+
.loose();
|
|
33
|
+
/**
|
|
34
|
+
* Read the application directory Homebrew recorded when it installed a cask,
|
|
35
|
+
* in Homebrew's precedence: explicit option, then environment, then default.
|
|
36
|
+
* Reading the Caskroom avoids `brew` cask commands, which refresh Homebrew's
|
|
37
|
+
* API and bootsnap caches.
|
|
38
|
+
*/
|
|
39
|
+
export const installedCaskAppdir = async (caskroom, token, home) => {
|
|
40
|
+
let text;
|
|
41
|
+
try {
|
|
42
|
+
text = await readFile(join(caskroom, token, ".metadata", "config.json"), "utf8");
|
|
43
|
+
}
|
|
44
|
+
catch (cause) {
|
|
45
|
+
// An absent or unreadable receipt means the cask is not installed here.
|
|
46
|
+
void cause;
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
let parsed;
|
|
50
|
+
try {
|
|
51
|
+
parsed = JSON.parse(text);
|
|
52
|
+
}
|
|
53
|
+
catch (cause) {
|
|
54
|
+
// A malformed receipt does not identify an application directory.
|
|
55
|
+
void cause;
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
const config = caskConfigSchema.safeParse(parsed);
|
|
59
|
+
if (!config.success)
|
|
60
|
+
return undefined;
|
|
61
|
+
const appdir = config.data.explicit?.appdir ??
|
|
62
|
+
config.data.env?.appdir ??
|
|
63
|
+
config.data.default?.appdir;
|
|
64
|
+
if (appdir === undefined)
|
|
65
|
+
return undefined;
|
|
66
|
+
return appdir.startsWith("~/") ? join(home, appdir.slice(2)) : appdir;
|
|
67
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { digestCanonicalValue } from "../../domain/canonicalDigest.js";
|
|
2
2
|
import { createEvidence } from "../../domain/evidence.js";
|
|
3
|
-
import { jsonValueSchema } from "../../domain/jsonValue.js";
|
|
4
|
-
/**
|
|
3
|
+
import { jsonObjectSchema, jsonValueSchema } from "../../domain/jsonValue.js";
|
|
4
|
+
/** Commit the selected Electron experiment and its observed result. */
|
|
5
5
|
export const createElectronActiveEvidence = (input, result, provider) => createEvidence(undefined, provider, {
|
|
6
6
|
predicateType: "rea.electron-active-scenario",
|
|
7
7
|
operation: "capture_electron_scenario",
|
|
@@ -20,14 +20,10 @@ export const createElectronActiveEvidence = (input, result, provider) => createE
|
|
|
20
20
|
"Application host platform and architecture were not observed.",
|
|
21
21
|
],
|
|
22
22
|
});
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
const parameters = (input) => ({
|
|
31
|
-
...scenarioProjection(input),
|
|
32
|
-
scenario_sha256: canonicalDigest(scenarioProjection(input), "Browser scenario"),
|
|
33
|
-
});
|
|
23
|
+
const parameters = (input) => {
|
|
24
|
+
const scenario = jsonObjectSchema.parse(input);
|
|
25
|
+
return {
|
|
26
|
+
...scenario,
|
|
27
|
+
scenario_sha256: digestCanonicalValue(scenario, "Electron scenario"),
|
|
28
|
+
};
|
|
29
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { compareUnicodeCodePoints } from "../../domain/unicodeCodePointOrder.js";
|
|
2
2
|
import { resolveArtifactPathByContext } from "./JavaScriptArtifactPathResolution.js";
|
|
3
3
|
/** Flatten all per-file IPC facts into deterministic application records. */
|
|
4
4
|
export const collectElectronIpcRecords = (analysis) => analysis.files
|
|
@@ -7,7 +7,7 @@ export const collectElectronIpcRecords = (analysis) => analysis.files
|
|
|
7
7
|
file,
|
|
8
8
|
finding,
|
|
9
9
|
})))
|
|
10
|
-
.sort((left, right) =>
|
|
10
|
+
.sort((left, right) => compareUnicodeCodePoints(left.key, right.key));
|
|
11
11
|
/** Match only exact literal channels and retain ambiguous matches separately. */
|
|
12
12
|
export const classifyElectronIpcPairings = (records) => {
|
|
13
13
|
const handlers = records.filter(isMainHandler);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { javascriptAnalysisCoverage, resolveArtifactPath, } from "./JavaScriptArtifactGraphContext.js";
|
|
2
2
|
import { astObservationEvidence } from "./JavaScriptArtifactGraphEvidence.js";
|
|
3
|
+
import { compositeKey } from "../../domain/unicodeCodePointOrder.js";
|
|
3
4
|
import { addElectronInferenceEdge, electronFindingSourceNode, electronObservationIdentity, electronRangeKey, } from "./ElectronBoundaryGraphContext.js";
|
|
4
5
|
/** Project JavaScript-requested native addon binding and re-export surfaces. */
|
|
5
6
|
export const addElectronNativeBoundaries = (context) => {
|
|
@@ -21,7 +22,10 @@ const addNativeBinding = (input) => {
|
|
|
21
22
|
const addon = resolved === null ? undefined : context.fileNodes.get(resolved);
|
|
22
23
|
const binding = context.accumulator.addNode({
|
|
23
24
|
kind: "native-export",
|
|
24
|
-
identity: electronObservationIdentity(context, "javascript-requested-native-export",
|
|
25
|
+
identity: electronObservationIdentity(context, "javascript-requested-native-export",
|
|
26
|
+
// Members are a variable-length source-derived list: compositeKey keeps
|
|
27
|
+
// ["a\0b"] distinct from ["a", "b"] inside the digested identity.
|
|
28
|
+
`${file.path}:${value.specifier}:${value.binding_kind}:${compositeKey(value.members)}:${electronRangeKey(value.location)}`),
|
|
25
29
|
observations: [
|
|
26
30
|
{
|
|
27
31
|
label: value.members.join(", "),
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createImmutableEvidenceSteps, } from "../../domain/evidence.js";
|
|
2
2
|
import { JAVASCRIPT_APPLICATION_PROVIDER } from "../InvestigationProviders.js";
|
|
3
|
-
import {
|
|
3
|
+
import { freezeOwnedJsonSnapshotSteps } from "../../domain/immutableJson.js";
|
|
4
4
|
import { rememberOwnedApplicationGraphEvidence } from "./JavaScriptApplicationEvidenceGraph.js";
|
|
5
5
|
import { completeJavaScriptAnalysisSteps } from "./JavaScriptAnalysisControl.js";
|
|
6
6
|
import { jsonValueValidationSteps } from "../../domain/jsonValue.js";
|
|
7
|
-
/** Transfer an already validated, application-owned result into immutable analysis Evidence. */
|
|
8
|
-
export const createOwnedJavaScriptApplicationEvidence = (input, result) => rememberOwnedApplicationGraphEvidence(createJavaScriptApplicationEvidence(input, freezeJsonSnapshot(result)), result);
|
|
9
7
|
/** Create owned analysis Evidence while allowing request cancellation during sealing and hashing. */
|
|
10
8
|
export const createOwnedJavaScriptApplicationEvidenceCooperatively = async (input, result, signal, progress) => {
|
|
11
9
|
await reportEvidencePhase(progress, "seal_javascript_application_result", "Sealing the complete application analysis result");
|
|
@@ -19,8 +17,6 @@ export const createOwnedJavaScriptApplicationEvidenceCooperatively = async (inpu
|
|
|
19
17
|
};
|
|
20
18
|
const reportEvidencePhase = (progress, phase, message) => progress?.report({ phase, completed: 0, total: 1, message }) ??
|
|
21
19
|
Promise.resolve();
|
|
22
|
-
/** Create Evidence for one deterministic local JavaScript application graph. */
|
|
23
|
-
export const createJavaScriptApplicationEvidence = (input, result) => createEvidence(applicationSubject(result), JAVASCRIPT_APPLICATION_PROVIDER, applicationObservation(input, result));
|
|
24
20
|
const applicationSubject = (result) => ({
|
|
25
21
|
path: result.input_path,
|
|
26
22
|
sha256: result.root_artifact_sha256,
|
|
@@ -40,4 +36,5 @@ const applicationObservation = (input, result) => ({
|
|
|
40
36
|
});
|
|
41
37
|
const parameters = (input) => ({
|
|
42
38
|
format: input.format,
|
|
39
|
+
integrity_policy: input.integrity_policy,
|
|
43
40
|
});
|