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,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { digestCanonicalValue } from "../domain/canonicalDigest.js";
|
|
2
2
|
import { BrowserObservationError } from "../domain/browserObservationError.js";
|
|
3
3
|
import { CdpCaptureCompleteness } from "./CdpCaptureCompleteness.js";
|
|
4
4
|
import { delayWithCancellation, numberValue, recordValue, recordsValue, requiredRecord, cdpStringValue, } from "./CdpCaptureValues.js";
|
|
@@ -176,7 +176,7 @@ const captureResources = async (context, completeness) => {
|
|
|
176
176
|
? null
|
|
177
177
|
: Math.max(0, numberValue(resource.contentSize) ?? 0),
|
|
178
178
|
};
|
|
179
|
-
const resourceKey = `electron_resource_${
|
|
179
|
+
const resourceKey = `electron_resource_${digestCanonicalValue(item, "CDP capture")}`;
|
|
180
180
|
if (seen.has(resourceKey))
|
|
181
181
|
continue;
|
|
182
182
|
seen.add(resourceKey);
|
|
@@ -8,14 +8,11 @@ import { discoverCdpEndpoint, hasCdpTargetWebSocket, } from "./CdpEndpoint.js";
|
|
|
8
8
|
import { closeCdpTargetSession, openCdpTargetSession, } from "./CdpTargetSession.js";
|
|
9
9
|
import { inspectCdpElectronPage } from "./CdpElectronInspection.js";
|
|
10
10
|
import { authorizedElectronFile } from "./ElectronFileScope.js";
|
|
11
|
-
/** Public identity committed by passive Electron observations. */
|
|
12
|
-
export { CDP_ELECTRON_PROVIDER_IDENTITY } from "./providerIdentities.js";
|
|
13
11
|
import { CDP_ELECTRON_PROVIDER_IDENTITY } from "./providerIdentities.js";
|
|
14
|
-
const IDENTITY = CDP_ELECTRON_PROVIDER_IDENTITY;
|
|
15
12
|
/** Passive Electron provider for local file pages exposed by loopback CDP. */
|
|
16
13
|
export class CdpElectronProvider {
|
|
17
14
|
identity() {
|
|
18
|
-
return
|
|
15
|
+
return CDP_ELECTRON_PROVIDER_IDENTITY;
|
|
19
16
|
}
|
|
20
17
|
async listTargets(input, options = {}) {
|
|
21
18
|
try {
|
|
@@ -108,4 +105,6 @@ const providerError = (cause, operation) => cause instanceof BrowserObservationE
|
|
|
108
105
|
? new BrowserObservationError(operation, cause.reason, { cause })
|
|
109
106
|
: cause instanceof AnalysisError
|
|
110
107
|
? cause
|
|
111
|
-
: new ProviderAdapterError(
|
|
108
|
+
: new ProviderAdapterError(CDP_ELECTRON_PROVIDER_IDENTITY.id, operation, {
|
|
109
|
+
cause,
|
|
110
|
+
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CdpCaptureCompleteness } from "./CdpCaptureCompleteness.js";
|
|
2
|
-
import { numberValue, recordValue, cdpStringValue, } from "./CdpCaptureValues.js";
|
|
2
|
+
import { numberValue, recordValue, scriptMetadataValues, cdpStringValue, } from "./CdpCaptureValues.js";
|
|
3
3
|
/** Retain script/frame metadata from passive Electron events. */
|
|
4
4
|
export const ingestElectronScriptEvent = (input) => {
|
|
5
5
|
if (input.event.method === "Runtime.executionContextsCleared") {
|
|
@@ -33,9 +33,7 @@ export const ingestElectronScriptEvent = (input) => {
|
|
|
33
33
|
input.scripts.push({
|
|
34
34
|
scriptId,
|
|
35
35
|
rawUrl,
|
|
36
|
-
|
|
37
|
-
length: nonnegativeInteger(value?.length),
|
|
38
|
-
isModule: value?.isModule === true,
|
|
36
|
+
...scriptMetadataValues(value),
|
|
39
37
|
language: cdpStringValue(value?.scriptLanguage) ?? null,
|
|
40
38
|
executionContextKey: executionContextKey(value?.executionContextId),
|
|
41
39
|
});
|
|
@@ -49,10 +47,6 @@ const retainExecutionContext = (event, frames) => {
|
|
|
49
47
|
return;
|
|
50
48
|
frames.set(contextKey, frameId);
|
|
51
49
|
};
|
|
52
|
-
const nonnegativeInteger = (value) => {
|
|
53
|
-
const number = numberValue(value);
|
|
54
|
-
return number === undefined ? 0 : Math.max(0, Math.trunc(number));
|
|
55
|
-
};
|
|
56
50
|
const executionContextKey = (value) => {
|
|
57
51
|
const identifier = numberValue(value);
|
|
58
52
|
return identifier !== undefined && Number.isSafeInteger(identifier)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { digestCanonicalValue } from "../domain/canonicalDigest.js";
|
|
2
2
|
import { createWebTextArtifact } from "../domain/webContentArtifact.js";
|
|
3
3
|
import { CdpCaptureCompleteness } from "./CdpCaptureCompleteness.js";
|
|
4
|
-
import {
|
|
4
|
+
import { requiredScriptSource } from "./CdpCaptureValues.js";
|
|
5
5
|
import { authorizedElectronFile } from "./ElectronFileScope.js";
|
|
6
6
|
/** Normalize local script metadata and optionally approved source. */
|
|
7
7
|
export const captureElectronScripts = async (input) => {
|
|
@@ -27,7 +27,7 @@ export const captureElectronScripts = async (input) => {
|
|
|
27
27
|
is_module: script.isModule,
|
|
28
28
|
language: script.language,
|
|
29
29
|
};
|
|
30
|
-
const scriptKey = `electron_script_${
|
|
30
|
+
const scriptKey = `electron_script_${digestCanonicalValue(identity, "CDP capture")}`;
|
|
31
31
|
if (seen.has(scriptKey))
|
|
32
32
|
continue;
|
|
33
33
|
seen.add(scriptKey);
|
|
@@ -54,8 +54,7 @@ const captureScriptSource = async (input, script) => {
|
|
|
54
54
|
reason: "source capture was not selected",
|
|
55
55
|
},
|
|
56
56
|
};
|
|
57
|
-
const
|
|
58
|
-
const text = cdpStringValue(result.scriptSource) ?? "";
|
|
57
|
+
const text = requiredScriptSource(await input.connection.send("Debugger.getScriptSource", { scriptId: script.scriptId }, input.sessionId, input.signal), "inspect_electron_page");
|
|
59
58
|
return {
|
|
60
59
|
source: {
|
|
61
60
|
included: true,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { reconcileCapturedWebScript, stableWebScriptKey, } from "../domain/webInventory.js";
|
|
2
|
-
import {
|
|
2
|
+
import { requiredScriptSource, sourceExcluded, sourceResult, } from "./CdpCaptureValues.js";
|
|
3
3
|
export const captureScripts = async (options) => {
|
|
4
4
|
const { context, events, rawResources, resources, frameIds } = options;
|
|
5
5
|
const state = {
|
|
@@ -42,8 +42,7 @@ const buildScriptDraft = async (script, state) => {
|
|
|
42
42
|
};
|
|
43
43
|
const captureScriptSource = async (script, state) => {
|
|
44
44
|
const { context } = state;
|
|
45
|
-
const
|
|
46
|
-
const content = cdpStringValue(result.scriptSource) ?? "";
|
|
45
|
+
const content = requiredScriptSource(await context.connection.send("Debugger.getScriptSource", { scriptId: script.scriptId }, context.sessionId, context.signal), context.operation);
|
|
47
46
|
return sourceResult(content);
|
|
48
47
|
};
|
|
49
48
|
const keyAndBuildInventory = (drafts, scriptCount) => {
|
|
@@ -56,7 +56,7 @@ const parseCsp = (value, baseUrl, allowedOrigins) => {
|
|
|
56
56
|
for (const rawDirective of (value ?? "").split(";")) {
|
|
57
57
|
const [rawName, ...tokens] = rawDirective.trim().split(/\s+/u);
|
|
58
58
|
const name = (rawName ?? "").toLowerCase();
|
|
59
|
-
if (!/^[a-z][a-z0-9
|
|
59
|
+
if (!/^[a-z][a-z0-9\x2d]*$/u.test(name))
|
|
60
60
|
continue;
|
|
61
61
|
const sources = [];
|
|
62
62
|
for (const token of tokens) {
|
|
@@ -79,9 +79,9 @@ const parseCsp = (value, baseUrl, allowedOrigins) => {
|
|
|
79
79
|
};
|
|
80
80
|
const cspSource = (token, baseUrl, allowedOrigins) => {
|
|
81
81
|
const lower = token.toLowerCase();
|
|
82
|
-
if (/^'[a-z0-9
|
|
82
|
+
if (/^'[a-z0-9\x2d]+'$/u.test(lower))
|
|
83
83
|
return { kind: "keyword", value: lower };
|
|
84
|
-
if (/^[a-z][a-z0-9
|
|
84
|
+
if (/^[a-z][a-z0-9+.\x2d]*:$/u.test(lower))
|
|
85
85
|
return { kind: "scheme", value: lower };
|
|
86
86
|
const hostOrigin = cspHostSourceOrigin(token, baseUrl);
|
|
87
87
|
if (hostOrigin === undefined)
|
|
@@ -98,14 +98,14 @@ const cspSource = (token, baseUrl, allowedOrigins) => {
|
|
|
98
98
|
* `undefined` when the token is not a host-source at all.
|
|
99
99
|
*/
|
|
100
100
|
const cspHostSourceOrigin = (token, baseUrl) => {
|
|
101
|
-
const match = /^(?:([a-z][a-z0-9
|
|
101
|
+
const match = /^(?:([a-z][a-z0-9+.\x2d]*):\/\/)?([^\x2f?#]+)(?:\/[^?#]*)?$/iu.exec(token);
|
|
102
102
|
const authority = match?.[2];
|
|
103
103
|
if (authority === undefined || authority.length === 0)
|
|
104
104
|
return undefined;
|
|
105
105
|
const scheme = (match?.[1] ?? schemeOf(baseUrl))?.toLowerCase();
|
|
106
|
-
if (scheme === undefined || !/^[a-z][a-z0-9
|
|
106
|
+
if (scheme === undefined || !/^[a-z][a-z0-9+.\x2d]*$/u.test(scheme))
|
|
107
107
|
return undefined;
|
|
108
|
-
if (!/^(?:\*|(?:\*\.)?[a-z0-9
|
|
108
|
+
if (!/^(?:\*|(?:\*\.)?[a-z0-9\x2d]+(?:\.[a-z0-9\x2d]+)*\.?)(?::(?:\*|\d+))?$/iu.test(authority))
|
|
109
109
|
return undefined;
|
|
110
110
|
if (authority.includes("*"))
|
|
111
111
|
return null;
|
|
@@ -194,7 +194,7 @@ const linkParameters = (value) => {
|
|
|
194
194
|
const name = (separator < 0 ? raw : raw.slice(0, separator))
|
|
195
195
|
.trim()
|
|
196
196
|
.toLowerCase();
|
|
197
|
-
if (!/^[a-z][a-z0-9
|
|
197
|
+
if (!/^[a-z][a-z0-9\x2d]*$/u.test(name))
|
|
198
198
|
continue;
|
|
199
199
|
const parameter = separator < 0 ? "" : raw.slice(separator + 1).trim();
|
|
200
200
|
parameters.set(name, unquote(parameter));
|
|
@@ -221,7 +221,7 @@ const permissionFeatures = (value) => [
|
|
|
221
221
|
...new Set((value ?? "")
|
|
222
222
|
.split(",")
|
|
223
223
|
.map((entry) => entry.split("=", 1)[0]?.trim().toLowerCase() ?? "")
|
|
224
|
-
.filter((feature) => /^[a-z][a-z0-9
|
|
224
|
+
.filter((feature) => /^[a-z][a-z0-9\x2d]*$/u.test(feature))),
|
|
225
225
|
].sort();
|
|
226
226
|
const wellKnownHint = (url) => {
|
|
227
227
|
try {
|
|
@@ -259,7 +259,7 @@ const referrerPolicy = (value) => {
|
|
|
259
259
|
const token = raw.trim().toLowerCase();
|
|
260
260
|
if (token === "")
|
|
261
261
|
continue;
|
|
262
|
-
if (!/^[a-z
|
|
262
|
+
if (!/^[a-z\x2d]+$/u.test(token))
|
|
263
263
|
return null;
|
|
264
264
|
if (referrerPolicies.has(token))
|
|
265
265
|
policy = token;
|
|
@@ -268,7 +268,7 @@ const referrerPolicy = (value) => {
|
|
|
268
268
|
};
|
|
269
269
|
const policyToken = (value) => {
|
|
270
270
|
const token = (value ?? "").trim().toLowerCase();
|
|
271
|
-
return /^[a-z][a-z0-9_
|
|
271
|
+
return /^[a-z][a-z0-9_.\x2d]*$/u.test(token) ? token : null;
|
|
272
272
|
};
|
|
273
273
|
const nonnegativeInteger = (value) => {
|
|
274
274
|
const number = numberValue(value === undefined ? undefined : Number(value));
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
import {
|
|
2
|
+
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
3
|
+
import { digestCanonicalValue } from "../domain/canonicalDigest.js";
|
|
4
|
+
import { compositeKey } from "../domain/unicodeCodePointOrder.js";
|
|
3
5
|
import { CdpCaptureCompleteness } from "./CdpCaptureCompleteness.js";
|
|
4
6
|
import { BrowserObservationError } from "../domain/browserObservationError.js";
|
|
5
7
|
import { allowedSanitizedUrl, delayWithCancellation, numberValue, recordValue, recordsValue, cdpStringValue, } from "./CdpCaptureValues.js";
|
|
@@ -265,6 +267,10 @@ const normalizeTool = (value, input, frames, completeness) => {
|
|
|
265
267
|
}
|
|
266
268
|
const description = cdpStringValue(value.description) ?? "";
|
|
267
269
|
const annotations = recordValue(value.annotations);
|
|
270
|
+
const declaration = jsonValueSchema.safeParse(value.inputSchema);
|
|
271
|
+
if (!declaration.success)
|
|
272
|
+
completeness.exclude("webmcp_tools", "invalid_protocol_value");
|
|
273
|
+
const schema = declaration.success ? declaration.data : null;
|
|
268
274
|
return {
|
|
269
275
|
tool_key: toolKey(frame.url, frameId, name),
|
|
270
276
|
name,
|
|
@@ -275,7 +281,10 @@ const normalizeTool = (value, input, frames, completeness) => {
|
|
|
275
281
|
declaration_kind: numberValue(value.backendNodeId) === undefined
|
|
276
282
|
? "imperative"
|
|
277
283
|
: "declarative",
|
|
278
|
-
|
|
284
|
+
input_schema: schema,
|
|
285
|
+
input_schema_sha256: declaration.success
|
|
286
|
+
? digestCanonicalValue(schema)
|
|
287
|
+
: null,
|
|
279
288
|
annotations: {
|
|
280
289
|
read_only: booleanOrNull(annotations?.readOnly),
|
|
281
290
|
untrusted_content: booleanOrNull(annotations?.untrustedContent),
|
|
@@ -285,15 +294,6 @@ const normalizeTool = (value, input, frames, completeness) => {
|
|
|
285
294
|
trust: "page-declared-untrusted",
|
|
286
295
|
};
|
|
287
296
|
};
|
|
288
|
-
const schemaShape = (value) => {
|
|
289
|
-
if (recordValue(value) === undefined)
|
|
290
|
-
return null;
|
|
291
|
-
const encoded = JSON.stringify(value);
|
|
292
|
-
const shape = inferJsonShape(encoded);
|
|
293
|
-
if (shape === null)
|
|
294
|
-
throw new BrowserObservationError("inspect_web_page", "protocol_error");
|
|
295
|
-
return shape;
|
|
296
|
-
};
|
|
297
297
|
const registrationSource = (stack, allowedOrigins) => {
|
|
298
298
|
const frame = recordsValue(stack?.callFrames)[0];
|
|
299
299
|
const url = allowedSanitizedUrl(frame?.url, allowedOrigins);
|
|
@@ -327,8 +327,11 @@ const buildWebMcpResult = (options) => {
|
|
|
327
327
|
};
|
|
328
328
|
const toolKey = (frameUrl, frameId, name) =>
|
|
329
329
|
// Registrations without a known admitted frame are excluded above, so the
|
|
330
|
-
// frame ID here always distinguishes owners
|
|
331
|
-
|
|
330
|
+
// frame ID here always distinguishes owners. Composite tuple keeps a NUL
|
|
331
|
+
// inside one field from collapsing two registrations before hashing.
|
|
332
|
+
`webmcp_${createHash("sha256")
|
|
333
|
+
.update(compositeKey([frameUrl, frameId, name]))
|
|
334
|
+
.digest("hex")}`;
|
|
332
335
|
const booleanOrNull = (value) => typeof value === "boolean" ? value : null;
|
|
333
336
|
const integerOrNull = (value) => {
|
|
334
337
|
const number = numberValue(value);
|
|
@@ -1,17 +1,11 @@
|
|
|
1
|
-
import { browserScenarioCaptureSchema,
|
|
1
|
+
import { browserScenarioCaptureSchema, } from "../domain/browserScenarioCapture.js";
|
|
2
|
+
import { classifyBrowserScenarioCompleteness, browserScenarioStepSchema, browserStepArtifactsSchema, } from "../domain/browserScenarioCaptureValues.js";
|
|
2
3
|
import { AnalysisError } from "../domain/analysisErrorBase.js";
|
|
3
4
|
import { BrowserObservationError } from "../domain/browserObservationError.js";
|
|
4
5
|
import { ProviderAdapterError } from "../domain/providerAdapterError.js";
|
|
5
6
|
import { err, ok } from "../domain/result.js";
|
|
7
|
+
import { browserScenarioCleanupObservation, browserScenarioOperationFailure, browserScenarioCaptureData, } from "./BrowserScenarioPartialObservation.js";
|
|
6
8
|
const OPERATION = "capture_browser_scenario";
|
|
7
|
-
let defaultFactory;
|
|
8
|
-
const lazyPlaywrightFactory = {
|
|
9
|
-
async open(scenario, options) {
|
|
10
|
-
defaultFactory ??= import("./PlaywrightScenarioSession.js").then(({ PlaywrightScenarioSessionFactory }) => new PlaywrightScenarioSessionFactory());
|
|
11
|
-
return (await defaultFactory).open(scenario, options);
|
|
12
|
-
},
|
|
13
|
-
};
|
|
14
|
-
export { PLAYWRIGHT_BROWSER_SCENARIO_PROVIDER_IDENTITY } from "./providerIdentities.js";
|
|
15
9
|
import { PLAYWRIGHT_BROWSER_SCENARIO_PROVIDER_IDENTITY } from "./providerIdentities.js";
|
|
16
10
|
const SNAPSHOT_KINDS = [
|
|
17
11
|
"screenshot",
|
|
@@ -141,13 +135,13 @@ const globalCompleteness = (scenario, session, steps) => {
|
|
|
141
135
|
missing.push("events");
|
|
142
136
|
return classifyBrowserScenarioCompleteness(missing, truncated);
|
|
143
137
|
};
|
|
144
|
-
const runScenario = async (
|
|
138
|
+
const runScenario = async (openSession, scenario, options) => {
|
|
145
139
|
if (options.signal?.aborted === true)
|
|
146
140
|
throw new BrowserObservationError(OPERATION, "cancelled");
|
|
147
141
|
const startedAt = Date.now();
|
|
148
|
-
const session = await
|
|
142
|
+
const session = await openSession(scenario, options.signal === undefined ? {} : { signal: options.signal });
|
|
149
143
|
const steps = [];
|
|
150
|
-
let
|
|
144
|
+
let operationOutcome = { ok: true };
|
|
151
145
|
try {
|
|
152
146
|
steps.push(await initialStep({
|
|
153
147
|
session,
|
|
@@ -169,57 +163,78 @@ const runScenario = async (factory, scenario, options) => {
|
|
|
169
163
|
failed ||= step.status !== "completed";
|
|
170
164
|
}
|
|
171
165
|
}
|
|
172
|
-
|
|
173
|
-
|
|
166
|
+
catch (cause) {
|
|
167
|
+
operationOutcome = { ok: false, cause };
|
|
168
|
+
}
|
|
169
|
+
let cleanupOutcome;
|
|
170
|
+
try {
|
|
171
|
+
cleanupOutcome = { ok: true, cleanup: await session.close() };
|
|
172
|
+
}
|
|
173
|
+
catch (cause) {
|
|
174
|
+
cleanupOutcome = { ok: false, cause };
|
|
174
175
|
}
|
|
175
|
-
|
|
176
|
+
if (!cleanupOutcome.ok) {
|
|
177
|
+
const cleanup = browserScenarioCleanupObservation(cleanupOutcome.cause);
|
|
178
|
+
const partialObservation = {
|
|
179
|
+
kind: "browser-scenario-observation",
|
|
180
|
+
capture: browserScenarioCaptureData({
|
|
181
|
+
session,
|
|
182
|
+
scenario,
|
|
183
|
+
startedAt,
|
|
184
|
+
steps,
|
|
185
|
+
cleanup: "incomplete",
|
|
186
|
+
limitations: [
|
|
187
|
+
"Scenario observations are partial because browser cleanup could not be confirmed.",
|
|
188
|
+
],
|
|
189
|
+
}),
|
|
190
|
+
};
|
|
191
|
+
if (!operationOutcome.ok)
|
|
192
|
+
throw browserScenarioOperationFailure(operationOutcome.cause, partialObservation, { cause: cleanupOutcome.cause });
|
|
193
|
+
throw new BrowserObservationError(OPERATION, "cleanup_failed", {
|
|
194
|
+
cause: cleanupOutcome.cause,
|
|
195
|
+
cleanup,
|
|
196
|
+
partialObservation,
|
|
197
|
+
detail: `Browser scenario cleanup could not be confirmed: ${cleanup.reason}. Collected steps and events are retained in partial_observation. Review the reported resources before retrying.`,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
if (!operationOutcome.ok)
|
|
201
|
+
throw browserScenarioOperationFailure(operationOutcome.cause, {
|
|
202
|
+
kind: "browser-scenario-observation",
|
|
203
|
+
capture: browserScenarioCaptureData({
|
|
204
|
+
session,
|
|
205
|
+
scenario,
|
|
206
|
+
startedAt,
|
|
207
|
+
steps,
|
|
208
|
+
cleanup: cleanupOutcome.cleanup,
|
|
209
|
+
limitations: [
|
|
210
|
+
"Scenario capture ended after an operation failed; uncollected steps are not represented.",
|
|
211
|
+
],
|
|
212
|
+
}),
|
|
213
|
+
});
|
|
176
214
|
const completeness = globalCompleteness(scenario, session, steps);
|
|
177
215
|
return browserScenarioCaptureSchema.parse({
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
},
|
|
185
|
-
scenario: {
|
|
186
|
-
start_origin: new URL(scenario.start_url.url).origin,
|
|
187
|
-
action_count: scenario.actions.length,
|
|
188
|
-
secret_references: scenario.secrets.map(({ secret_id: id }) => id).sort(),
|
|
189
|
-
network_content: scenario.capture.network,
|
|
190
|
-
},
|
|
191
|
-
duration_ms: Date.now() - startedAt,
|
|
192
|
-
steps,
|
|
193
|
-
events,
|
|
216
|
+
...browserScenarioCaptureData({
|
|
217
|
+
session,
|
|
218
|
+
scenario,
|
|
219
|
+
startedAt,
|
|
220
|
+
steps,
|
|
221
|
+
cleanup: cleanupOutcome.cleanup,
|
|
222
|
+
}),
|
|
194
223
|
completeness,
|
|
195
|
-
limitations: [
|
|
196
|
-
"Event sequence records provider receipt order; simultaneous browser causality is not inferred.",
|
|
197
|
-
"Network content is retained only when selected; response bytes are browser-decoded, not compressed wire bytes.",
|
|
198
|
-
"Request bytes are limited to what Playwright exposes; not_exposed does not establish body absence or multipart file coverage.",
|
|
199
|
-
"Network content reads settle within 5 seconds each and never wait for unfinished responses or refetch them.",
|
|
200
|
-
"Playwright scenario events do not expose request initiator stacks; receipt order does not prove causality.",
|
|
201
|
-
"Storage values are hashed only after declared-secret redaction.",
|
|
202
|
-
...(session.eventLimitations?.() ?? []),
|
|
203
|
-
...(session.mode === "connect"
|
|
204
|
-
? [
|
|
205
|
-
"CDP attachment cannot recover pre-attach events or guarantee launch-time context options.",
|
|
206
|
-
]
|
|
207
|
-
: []),
|
|
208
|
-
],
|
|
209
224
|
});
|
|
210
225
|
};
|
|
211
226
|
/** Controlled Playwright/CDP scenario driver with exact process ownership. */
|
|
212
227
|
export class PlaywrightBrowserScenarioProvider {
|
|
213
|
-
|
|
214
|
-
constructor(
|
|
215
|
-
this.
|
|
228
|
+
openSession;
|
|
229
|
+
constructor(openSession) {
|
|
230
|
+
this.openSession = openSession;
|
|
216
231
|
}
|
|
217
232
|
identity() {
|
|
218
233
|
return PLAYWRIGHT_BROWSER_SCENARIO_PROVIDER_IDENTITY;
|
|
219
234
|
}
|
|
220
235
|
async captureScenario(scenario, options = {}) {
|
|
221
236
|
try {
|
|
222
|
-
return ok(await runScenario(this.
|
|
237
|
+
return ok(await runScenario(this.openSession, scenario, options));
|
|
223
238
|
}
|
|
224
239
|
catch (cause) {
|
|
225
240
|
if (cause instanceof AnalysisError)
|
|
@@ -1,63 +1,9 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { BrowserObservationError } from "../domain/browserObservationError.js";
|
|
3
|
+
import { electronActiveTimelineEventSchema, } from "../domain/javascript/electronActiveObservation.js";
|
|
3
4
|
const OPERATION = "capture_electron_scenario";
|
|
4
|
-
const hookEventSchema = z.strictObject({
|
|
5
|
-
sequence: z.number().int().min(1),
|
|
6
|
-
correlation_id: z.string().nullable(),
|
|
7
|
-
kind: z.enum([
|
|
8
|
-
"main-handler-invocation",
|
|
9
|
-
"main-event-invocation",
|
|
10
|
-
"utility-process-fork",
|
|
11
|
-
"utility-process-message",
|
|
12
|
-
"ipc-main-to-renderer",
|
|
13
|
-
"ipc-utility-to-main",
|
|
14
|
-
"ipc-renderer-send",
|
|
15
|
-
"ipc-renderer-invoke",
|
|
16
|
-
"ipc-renderer-post-message",
|
|
17
|
-
"app-lifecycle",
|
|
18
|
-
"window-lifecycle",
|
|
19
|
-
"web-contents-lifecycle",
|
|
20
|
-
"navigation",
|
|
21
|
-
"shell-attempt",
|
|
22
|
-
"process-lifecycle",
|
|
23
|
-
"permission",
|
|
24
|
-
"popup-attempt",
|
|
25
|
-
"download",
|
|
26
|
-
"protocol",
|
|
27
|
-
"preload",
|
|
28
|
-
"native-addon",
|
|
29
|
-
"updater",
|
|
30
|
-
"error",
|
|
31
|
-
]),
|
|
32
|
-
event: z.string().nullable(),
|
|
33
|
-
phase: z.enum(["attempted", "completed", "blocked", "failed", "observed"]),
|
|
34
|
-
channel: z.string().nullable(),
|
|
35
|
-
direction: z
|
|
36
|
-
.enum([
|
|
37
|
-
"renderer-to-main",
|
|
38
|
-
"main-to-renderer",
|
|
39
|
-
"main-to-utility",
|
|
40
|
-
"utility-to-main",
|
|
41
|
-
])
|
|
42
|
-
.nullable(),
|
|
43
|
-
sender: z.string().nullable(),
|
|
44
|
-
receiver: z.string().nullable(),
|
|
45
|
-
frame: z.string().nullable(),
|
|
46
|
-
target: z.string().nullable(),
|
|
47
|
-
argument_shapes: z.array(z.string()),
|
|
48
|
-
result_shape: z.string().nullable(),
|
|
49
|
-
process_type: z.string().nullable(),
|
|
50
|
-
source: z.string(),
|
|
51
|
-
capture_method: z.enum(["api-wrapper", "event-emitter", "process-hook"]),
|
|
52
|
-
artifact_path: z.string().nullable(),
|
|
53
|
-
artifact_sha256: z
|
|
54
|
-
.string()
|
|
55
|
-
.regex(/^[a-f0-9]{64}$/u)
|
|
56
|
-
.nullable(),
|
|
57
|
-
error: z.boolean(),
|
|
58
|
-
});
|
|
59
5
|
const hookSnapshotSchema = z.strictObject({
|
|
60
|
-
events: z.array(
|
|
6
|
+
events: z.array(electronActiveTimelineEventSchema),
|
|
61
7
|
retention_budget_bytes: z.number().int().min(0),
|
|
62
8
|
estimated_retained_bytes: z.number().int().min(0),
|
|
63
9
|
event_serialized_byte_upper_bound: z.number().int().min(0),
|
|
@@ -14,12 +14,16 @@ import { runElectronActions, readApplicationState, runWithExecutionLimits, } fro
|
|
|
14
14
|
import { projectElectronActiveCapture } from "./PlaywrightElectronActiveProjection.js";
|
|
15
15
|
const OPERATION = "capture_electron_scenario";
|
|
16
16
|
const STARTUP_TIMEOUT_MS = 60_000;
|
|
17
|
-
/** Public identity for provider-owned Electron runtime experiments. */
|
|
18
|
-
export { PLAYWRIGHT_ELECTRON_ACTIVE_PROVIDER_IDENTITY } from "./providerIdentities.js";
|
|
19
17
|
import { PLAYWRIGHT_ELECTRON_ACTIVE_PROVIDER_IDENTITY } from "./providerIdentities.js";
|
|
20
18
|
const hookPath = fileURLToPath(new URL("../../scripts/electron-active-hook.cjs", import.meta.url));
|
|
21
19
|
/** Launch an owned Electron application through the official Playwright API. */
|
|
22
20
|
export class PlaywrightElectronActiveProvider {
|
|
21
|
+
environment;
|
|
22
|
+
launch;
|
|
23
|
+
constructor(environment, launch = (options) => electron.launch(options)) {
|
|
24
|
+
this.environment = environment;
|
|
25
|
+
this.launch = launch;
|
|
26
|
+
}
|
|
23
27
|
identity() {
|
|
24
28
|
return PLAYWRIGHT_ELECTRON_ACTIVE_PROVIDER_IDENTITY;
|
|
25
29
|
}
|
|
@@ -42,10 +46,10 @@ export class PlaywrightElectronActiveProvider {
|
|
|
42
46
|
const captureBaseline = await systemProcessOwnershipHost.captureBaseline?.(options.signal);
|
|
43
47
|
if (options.signal?.aborted)
|
|
44
48
|
throw new BrowserObservationError(OPERATION, "cancelled");
|
|
45
|
-
application = await
|
|
49
|
+
application = await this.launch({
|
|
46
50
|
executablePath: paths.executable,
|
|
47
51
|
cwd: paths.root,
|
|
48
|
-
env: safeElectronEnvironment(runId),
|
|
52
|
+
env: safeElectronEnvironment(this.environment, runId),
|
|
49
53
|
args: ["-r", hookPath, paths.application, ...input.args],
|
|
50
54
|
timeout: Math.max(1, startupDeadline - Date.now()),
|
|
51
55
|
});
|
|
@@ -258,7 +262,7 @@ const canonicalPaths = async (input) => {
|
|
|
258
262
|
: await realpath(input.application_root);
|
|
259
263
|
return { executable, application, root };
|
|
260
264
|
};
|
|
261
|
-
const safeElectronEnvironment = (runId) => Object.fromEntries([
|
|
265
|
+
const safeElectronEnvironment = (environment, runId) => Object.fromEntries([
|
|
262
266
|
...[
|
|
263
267
|
"HOME",
|
|
264
268
|
"LANG",
|
|
@@ -269,7 +273,7 @@ const safeElectronEnvironment = (runId) => Object.fromEntries([
|
|
|
269
273
|
"DISPLAY",
|
|
270
274
|
"WAYLAND_DISPLAY",
|
|
271
275
|
]
|
|
272
|
-
.map((name) => [name,
|
|
276
|
+
.map((name) => [name, environment[name]])
|
|
273
277
|
.filter((entry) => entry[1] !== undefined),
|
|
274
278
|
["REA_PROCESS_RUN_ID", runId],
|
|
275
279
|
]);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import { browserStepArtifactsSchema, } from "../domain/
|
|
3
|
+
import { browserStepArtifactsSchema, } from "../domain/browserScenarioCaptureValues.js";
|
|
4
4
|
const historyValueSchema = z.strictObject({
|
|
5
5
|
length: z.number().int().min(0),
|
|
6
6
|
navigation_entries: z.array(z.strictObject({
|