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,6 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { isAbsolute } from "node:path";
|
|
3
|
+
import { localPathStringSchema } from "../localPath.js";
|
|
4
|
+
const pathInputSchema = localPathStringSchema.refine(isAbsolute, {
|
|
4
5
|
message: "Electron executable, application, and root paths must be absolute local filesystem paths (for example /Applications/Electron.app/Contents/MacOS/Electron)",
|
|
5
6
|
});
|
|
6
7
|
const absolutePathSchema = z
|
|
@@ -61,61 +62,16 @@ export const electronActiveObservationInputSchema = z.strictObject({
|
|
|
61
62
|
.optional()
|
|
62
63
|
.describe("Absolute local filesystem root for application-relative paths; omit to derive it from the application path. Relative paths are rejected."),
|
|
63
64
|
args: z
|
|
64
|
-
.array(z
|
|
65
|
+
.array(z
|
|
66
|
+
.string()
|
|
67
|
+
.regex(/^[^\x00]*$/u, "Electron arguments must not contain NUL"))
|
|
65
68
|
.default([]),
|
|
66
69
|
actions: z.array(actionSchema).default([]),
|
|
67
70
|
});
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
correlation_id: z.string().nullable().default(null),
|
|
71
|
-
kind: z.enum([
|
|
72
|
-
"main-handler-invocation",
|
|
73
|
-
"main-event-invocation",
|
|
74
|
-
"utility-process-fork",
|
|
75
|
-
"utility-process-message",
|
|
76
|
-
"ipc-main-to-renderer",
|
|
77
|
-
"ipc-utility-to-main",
|
|
78
|
-
"ipc-renderer-send",
|
|
79
|
-
"ipc-renderer-invoke",
|
|
80
|
-
"ipc-renderer-post-message",
|
|
81
|
-
]),
|
|
82
|
-
event: z.string().nullable().optional(),
|
|
83
|
-
phase: z
|
|
84
|
-
.enum(["attempted", "completed", "blocked", "failed", "observed"])
|
|
85
|
-
.nullable()
|
|
86
|
-
.optional(),
|
|
87
|
-
channel: z.string().nullable(),
|
|
88
|
-
direction: z
|
|
89
|
-
.enum([
|
|
90
|
-
"renderer-to-main",
|
|
91
|
-
"main-to-renderer",
|
|
92
|
-
"main-to-utility",
|
|
93
|
-
"utility-to-main",
|
|
94
|
-
])
|
|
95
|
-
.nullable()
|
|
96
|
-
.optional(),
|
|
97
|
-
sender: z.string().nullable().optional(),
|
|
98
|
-
receiver: z.string().nullable().optional(),
|
|
99
|
-
frame: z.string().nullable().default(null),
|
|
100
|
-
target: z.string().nullable().optional(),
|
|
101
|
-
argument_shapes: z.array(z.string()),
|
|
102
|
-
result_shape: z.string().nullable(),
|
|
103
|
-
process_type: z.string().nullable(),
|
|
104
|
-
source: z.string().default("electron-active-hook"),
|
|
105
|
-
capture_method: z
|
|
106
|
-
.enum(["api-wrapper", "event-emitter", "process-hook"])
|
|
107
|
-
.default("api-wrapper"),
|
|
108
|
-
artifact_path: z.string().nullable().default(null),
|
|
109
|
-
artifact_sha256: z
|
|
110
|
-
.string()
|
|
111
|
-
.regex(/^[a-f0-9]{64}$/u)
|
|
112
|
-
.nullable()
|
|
113
|
-
.default(null),
|
|
114
|
-
error: z.boolean(),
|
|
115
|
-
});
|
|
116
|
-
const timelineEventSchema = z.strictObject({
|
|
71
|
+
/** Canonical active Electron event shared by the hook boundary and public timeline. */
|
|
72
|
+
export const electronActiveTimelineEventSchema = z.strictObject({
|
|
117
73
|
sequence: z.number().int().min(1),
|
|
118
|
-
correlation_id: z.string().nullable()
|
|
74
|
+
correlation_id: z.string().nullable(),
|
|
119
75
|
kind: z.enum([
|
|
120
76
|
"main-handler-invocation",
|
|
121
77
|
"main-event-invocation",
|
|
@@ -168,6 +124,19 @@ const timelineEventSchema = z.strictObject({
|
|
|
168
124
|
.nullable(),
|
|
169
125
|
error: z.boolean(),
|
|
170
126
|
});
|
|
127
|
+
const ipcEventSchema = electronActiveTimelineEventSchema.extend({
|
|
128
|
+
kind: z.enum([
|
|
129
|
+
"main-handler-invocation",
|
|
130
|
+
"main-event-invocation",
|
|
131
|
+
"utility-process-fork",
|
|
132
|
+
"utility-process-message",
|
|
133
|
+
"ipc-main-to-renderer",
|
|
134
|
+
"ipc-utility-to-main",
|
|
135
|
+
"ipc-renderer-send",
|
|
136
|
+
"ipc-renderer-invoke",
|
|
137
|
+
"ipc-renderer-post-message",
|
|
138
|
+
]),
|
|
139
|
+
});
|
|
171
140
|
const processMetricSchema = z.strictObject({
|
|
172
141
|
pid: z.number().int().min(1),
|
|
173
142
|
type: z.string().min(1),
|
|
@@ -237,17 +206,14 @@ export const electronActiveObservationResultSchema = z.strictObject({
|
|
|
237
206
|
ipc: z.strictObject({
|
|
238
207
|
events: z.array(ipcEventSchema),
|
|
239
208
|
observed: z.number().int().min(0),
|
|
240
|
-
dropped: z.number().int().min(0)
|
|
209
|
+
dropped: z.number().int().min(0),
|
|
241
210
|
}),
|
|
242
|
-
timeline: z
|
|
243
|
-
.
|
|
244
|
-
events: z.array(timelineEventSchema),
|
|
211
|
+
timeline: z.strictObject({
|
|
212
|
+
events: z.array(electronActiveTimelineEventSchema),
|
|
245
213
|
observed: z.number().int().min(0),
|
|
246
|
-
dropped: z.number().int().min(0)
|
|
247
|
-
})
|
|
248
|
-
|
|
249
|
-
retention: z
|
|
250
|
-
.strictObject({
|
|
214
|
+
dropped: z.number().int().min(0),
|
|
215
|
+
}),
|
|
216
|
+
retention: z.strictObject({
|
|
251
217
|
budget_bytes: z.number().int().min(0),
|
|
252
218
|
estimated_retained_bytes: z.number().int().min(0),
|
|
253
219
|
event_serialized_byte_upper_bound: z.number().int().min(0),
|
|
@@ -265,15 +231,7 @@ export const electronActiveObservationResultSchema = z.strictObject({
|
|
|
265
231
|
dropped_ipc: z.number().int().min(0),
|
|
266
232
|
observed_runtime: z.number().int().min(0),
|
|
267
233
|
dropped_runtime: z.number().int().min(0),
|
|
268
|
-
})
|
|
269
|
-
.nullable()
|
|
270
|
-
.default(null),
|
|
271
|
-
coverage: coverageSchema.default({
|
|
272
|
-
status: "partial_attach",
|
|
273
|
-
observed_event_families: [],
|
|
274
|
-
unavailable_event_families: [],
|
|
275
|
-
observed_roles: [],
|
|
276
|
-
pre_capture_activity: "unavailable",
|
|
277
234
|
}),
|
|
235
|
+
coverage: coverageSchema,
|
|
278
236
|
limitations: z.array(z.string()),
|
|
279
237
|
});
|
|
@@ -80,9 +80,20 @@ export const electronPageInspectionSchema = z.object({
|
|
|
80
80
|
script_key: prefixedDigestSchema("electron_script"),
|
|
81
81
|
frame_id: z.string().nullable().default(null),
|
|
82
82
|
file_path: z.string(),
|
|
83
|
-
cdp_hash: z
|
|
84
|
-
|
|
85
|
-
|
|
83
|
+
cdp_hash: z
|
|
84
|
+
.string()
|
|
85
|
+
.nullable()
|
|
86
|
+
.describe("Producer-reported script hash; null when unavailable."),
|
|
87
|
+
length: z
|
|
88
|
+
.number()
|
|
89
|
+
.int()
|
|
90
|
+
.min(0)
|
|
91
|
+
.nullable()
|
|
92
|
+
.describe("Producer-reported script length; null when unavailable."),
|
|
93
|
+
is_module: z
|
|
94
|
+
.boolean()
|
|
95
|
+
.nullable()
|
|
96
|
+
.describe("Producer-reported module classification; null when unavailable."),
|
|
86
97
|
language: z.string().nullable(),
|
|
87
98
|
source: electronSourceSchema,
|
|
88
99
|
})),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
2
|
import { boundedExpression, collectContextBridgeMembers, electronStaticValue, objectProperty, } from "./electronStaticAnalysisValues.js";
|
|
3
|
-
import {
|
|
3
|
+
import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
|
|
4
4
|
import { addLocatedFinding } from "./javascriptStaticAnalysisFindings.js";
|
|
5
5
|
import { argumentNode, calleeName, range, staticPath, staticPathResolutionContext, } from "./javascriptStaticAnalysisHelpers.js";
|
|
6
6
|
import { semanticStaticPropertyName } from "./javascriptAstValues.js";
|
|
@@ -54,10 +54,16 @@ const collectWindowOptions = (source, options) => {
|
|
|
54
54
|
const collectWebPreferences = (source, object) => {
|
|
55
55
|
const preferences = [];
|
|
56
56
|
let unknown = 0;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
const effectivePreload = objectProperty(object, "preload");
|
|
58
|
+
const preloadPath = effectivePreload.status === "explicit"
|
|
59
|
+
? staticPath(effectivePreload.property.value)
|
|
60
|
+
: undefined;
|
|
61
|
+
const preload = effectivePreload.status === "explicit" && preloadPath !== undefined
|
|
62
|
+
? {
|
|
63
|
+
preload_path: preloadPath,
|
|
64
|
+
preload_resolution_context: staticPathResolutionContext(effectivePreload.property.value),
|
|
65
|
+
}
|
|
66
|
+
: { preload_path: null, preload_resolution_context: null };
|
|
61
67
|
for (const property of object.properties) {
|
|
62
68
|
if (t.isSpreadElement(property)) {
|
|
63
69
|
unknown += 1;
|
|
@@ -85,11 +91,6 @@ const collectWebPreferences = (source, object) => {
|
|
|
85
91
|
continue;
|
|
86
92
|
}
|
|
87
93
|
const path = name === "preload" ? staticPath(property.value) : undefined;
|
|
88
|
-
if (path !== undefined)
|
|
89
|
-
preload = {
|
|
90
|
-
preload_path: path,
|
|
91
|
-
preload_resolution_context: staticPathResolutionContext(property.value),
|
|
92
|
-
};
|
|
93
94
|
const value = path === undefined
|
|
94
95
|
? electronStaticValue(source, property.value)
|
|
95
96
|
: { status: "literal", value: path, expression: null };
|
|
@@ -97,7 +98,7 @@ const collectWebPreferences = (source, object) => {
|
|
|
97
98
|
unknown += 1;
|
|
98
99
|
preferences.push({ name, value });
|
|
99
100
|
}
|
|
100
|
-
preferences.sort((left, right) =>
|
|
101
|
+
preferences.sort((left, right) => compareUnicodeCodePoints(left.name, right.name));
|
|
101
102
|
return {
|
|
102
103
|
status: "object-literal",
|
|
103
104
|
preferences,
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
2
|
import { boundedExpression, electronStaticValue, handlerKind, } from "./electronStaticAnalysisValues.js";
|
|
3
3
|
import { addLocatedFinding } from "./javascriptStaticAnalysisFindings.js";
|
|
4
|
-
import { argumentNode, calleeName, range,
|
|
4
|
+
import { argumentNode, calleeName, range, } from "./javascriptStaticAnalysisHelpers.js";
|
|
5
|
+
import { semanticStaticPropertyName } from "./javascriptAstValues.js";
|
|
6
|
+
import { compositeKey } from "../unicodeCodePointOrder.js";
|
|
5
7
|
/** Inspect Electron IPC operations and validation candidates. */
|
|
6
8
|
export const inspectElectronIpcNode = (node, context) => {
|
|
7
9
|
if (t.isCallExpression(node)) {
|
|
@@ -115,7 +117,14 @@ const addValidation = (context, node, input) => {
|
|
|
115
117
|
};
|
|
116
118
|
addLocatedFinding(context, {
|
|
117
119
|
collection: context.accumulator.senderValidations,
|
|
118
|
-
key:
|
|
120
|
+
key: compositeKey([
|
|
121
|
+
"electron-validation",
|
|
122
|
+
input.subject,
|
|
123
|
+
input.mechanism,
|
|
124
|
+
input.expected.status === "literal"
|
|
125
|
+
? String(input.expected.value)
|
|
126
|
+
: input.expected.expression,
|
|
127
|
+
]),
|
|
119
128
|
node,
|
|
120
129
|
value: finding,
|
|
121
130
|
});
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
|
-
import {
|
|
2
|
+
import { compareUnicodeCodePoints, compositeKey, } from "../unicodeCodePointOrder.js";
|
|
3
3
|
import { stripQueryAndFragment } from "../artifactPathSyntax.js";
|
|
4
4
|
import { addLocatedFinding } from "./javascriptStaticAnalysisFindings.js";
|
|
5
|
-
import { argumentNode, calleeName,
|
|
5
|
+
import { argumentNode, calleeName, range, stringValue, } from "./javascriptStaticAnalysisHelpers.js";
|
|
6
|
+
import { propertyName, semanticStaticPropertyName, } from "./javascriptAstValues.js";
|
|
6
7
|
/** Inspect JavaScript-side imports and re-exports of native .node addons. */
|
|
7
8
|
export const inspectElectronNativeNode = (node, context) => {
|
|
8
9
|
if (t.isImportDeclaration(node))
|
|
@@ -97,11 +98,13 @@ const addBinding = (input) => {
|
|
|
97
98
|
const { context, node, specifier, kind } = input;
|
|
98
99
|
const unique = [
|
|
99
100
|
...new Set(input.members.filter((member) => member !== "")),
|
|
100
|
-
].sort(
|
|
101
|
+
].sort(compareUnicodeCodePoints);
|
|
101
102
|
const members = unique.length === 0 ? ["*"] : unique;
|
|
102
103
|
addLocatedFinding(context, {
|
|
103
104
|
collection: context.accumulator.nativeAddonBindings,
|
|
104
|
-
|
|
105
|
+
// Members are a variable-length source-derived list: compositeKey keeps
|
|
106
|
+
// ["a\0b"] distinct from ["a", "b"] instead of collapsing one binding.
|
|
107
|
+
key: compositeKey(["native-addon-binding", kind, specifier, members]),
|
|
105
108
|
node,
|
|
106
109
|
value: {
|
|
107
110
|
specifier,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
|
-
import {
|
|
2
|
+
import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
|
|
3
3
|
import { readExactJavaScriptLiteral, semanticStaticPropertyName, } from "./javascriptAstValues.js";
|
|
4
4
|
import { sourceSlice } from "./javascriptStaticAnalysisHelpers.js";
|
|
5
5
|
/** Preserve one literal value or the exact inert expression. */
|
|
@@ -72,7 +72,7 @@ export const collectContextBridgeMembers = (node) => {
|
|
|
72
72
|
unknown: 0,
|
|
73
73
|
};
|
|
74
74
|
collectMembersAt(node, "", 0, state);
|
|
75
|
-
const members = [...new Set(state.members)].sort(
|
|
75
|
+
const members = [...new Set(state.members)].sort(compareUnicodeCodePoints);
|
|
76
76
|
return {
|
|
77
77
|
status: "object-literal",
|
|
78
78
|
members,
|
|
@@ -107,7 +107,11 @@ const literalValue = (node) => {
|
|
|
107
107
|
if (literal.found)
|
|
108
108
|
return literal;
|
|
109
109
|
if (t.isUnaryExpression(node, { operator: "-" }) &&
|
|
110
|
-
t.isNumericLiteral(node.argument))
|
|
111
|
-
|
|
110
|
+
t.isNumericLiteral(node.argument)) {
|
|
111
|
+
const value = -node.argument.value;
|
|
112
|
+
return Number.isFinite(value) && !Object.is(value, -0)
|
|
113
|
+
? { found: true, value }
|
|
114
|
+
: { found: false };
|
|
115
|
+
}
|
|
112
116
|
return { found: false };
|
|
113
117
|
};
|
|
@@ -3,12 +3,14 @@ import { javascriptApplicationGraphSchema, isValidatedImmutableJavaScriptApplica
|
|
|
3
3
|
import { javaScriptSemanticGraphSchema, isValidatedImmutableJavaScriptSemanticGraph, } from "./javascriptSemanticGraph.js";
|
|
4
4
|
import { digestSchema } from "../digests.js";
|
|
5
5
|
import { prefixedDigestSchema } from "../digests.js";
|
|
6
|
+
import { integrityContradictionSchema } from "../artifactGraph.js";
|
|
6
7
|
import { localPathStringSchema } from "../localPath.js";
|
|
7
8
|
const countSchema = z.number().int().min(0);
|
|
8
9
|
/** Public target-free request for static JavaScript application analysis. */
|
|
9
10
|
export const analyzeJavaScriptApplicationInputSchema = z.strictObject({
|
|
10
11
|
input_path: localPathStringSchema,
|
|
11
12
|
format: z.enum(["auto", "asar", "directory"]).default("auto"),
|
|
13
|
+
integrity_policy: z.enum(["fail", "record-and-continue"]).default("fail"),
|
|
12
14
|
});
|
|
13
15
|
/** Compact counts for the high-level Electron architecture/security surface. */
|
|
14
16
|
const electronBoundarySummarySchema = z.strictObject({
|
|
@@ -44,7 +46,6 @@ const reconstructionStatisticsSchema = z.strictObject({
|
|
|
44
46
|
findings: countSchema,
|
|
45
47
|
modules: countSchema,
|
|
46
48
|
parse_failures: countSchema,
|
|
47
|
-
truncated_scopes: countSchema,
|
|
48
49
|
});
|
|
49
50
|
const applicationAnalysisResultShape = z.strictObject({
|
|
50
51
|
input_path: z.string().min(1),
|
|
@@ -52,6 +53,7 @@ const applicationAnalysisResultShape = z.strictObject({
|
|
|
52
53
|
root_artifact_sha256: digestSchema,
|
|
53
54
|
inventory_manifest_id: prefixedDigestSchema("agm"),
|
|
54
55
|
inventory_graph_sha256: digestSchema,
|
|
56
|
+
integrity_contradictions: z.array(integrityContradictionSchema),
|
|
55
57
|
graph: javascriptApplicationGraphSchema,
|
|
56
58
|
summary: electronBoundarySummarySchema,
|
|
57
59
|
statistics: reconstructionStatisticsSchema,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { createJavaScriptApplicationEdge,
|
|
2
|
-
import {
|
|
1
|
+
import { createJavaScriptApplicationEdge, createImmutableJavaScriptApplicationGraphSteps, createJavaScriptApplicationNode, } from "./javascriptApplicationGraph.js";
|
|
2
|
+
import { uniqueSorted } from "../canonicalOrdering.js";
|
|
3
|
+
import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
|
|
3
4
|
/** Merge compared nodes and add inferred right-to-left changed_from edges. */
|
|
4
5
|
export const buildJavaScriptApplicationChangeGraph = (input) => {
|
|
5
6
|
const allNodes = nodeCandidates(input);
|
|
@@ -24,7 +25,7 @@ export const buildJavaScriptApplicationChangeGraph = (input) => {
|
|
|
24
25
|
const candidateEdges = uniqueEdges([...sourceEdges, ...comparisonEdges]);
|
|
25
26
|
const rootNodeIds = preferredRoots.filter((nodeId) => retained.has(nodeId));
|
|
26
27
|
const fallbackRoot = mergedNodes[0]?.node_id;
|
|
27
|
-
const
|
|
28
|
+
const steps = createImmutableJavaScriptApplicationGraphSteps({
|
|
28
29
|
schema: "JavaScriptApplicationGraph",
|
|
29
30
|
root_node_ids: rootNodeIds.length > 0
|
|
30
31
|
? rootNodeIds
|
|
@@ -41,7 +42,10 @@ export const buildJavaScriptApplicationChangeGraph = (input) => {
|
|
|
41
42
|
"The change graph contains compared entities and their retained relationships; it is not an executable application.",
|
|
42
43
|
]),
|
|
43
44
|
});
|
|
44
|
-
|
|
45
|
+
let next = steps.next();
|
|
46
|
+
while (!next.done)
|
|
47
|
+
next = steps.next();
|
|
48
|
+
return { graph: next.value };
|
|
45
49
|
};
|
|
46
50
|
const nodeCandidates = (input) => {
|
|
47
51
|
const required = new Set([
|
|
@@ -145,7 +149,7 @@ const changeGraphCoverage = (input) => {
|
|
|
145
149
|
};
|
|
146
150
|
const sourceCoverageLimits = (input) => [
|
|
147
151
|
...new Map([...input.left.coverage.limits, ...input.right.coverage.limits].map((limit) => [`${limit.name}\0${limit.value}\0${limit.unit}`, limit])).values(),
|
|
148
|
-
].sort((left, right) =>
|
|
152
|
+
].sort((left, right) => compareUnicodeCodePoints(left.name, right.name));
|
|
149
153
|
const combineOmittedCounts = (left, right) => left === null || right === null ? null : left + right;
|
|
150
154
|
const mergeNodes = (nodes) => {
|
|
151
155
|
const groups = new Map();
|
|
@@ -159,13 +163,13 @@ const mergeNodes = (nodes) => {
|
|
|
159
163
|
...new Map(group
|
|
160
164
|
.flatMap(({ observations: values }) => values)
|
|
161
165
|
.map((observation) => [observation.observation_id, observation])).values(),
|
|
162
|
-
].sort((left, right) =>
|
|
166
|
+
].sort((left, right) => compareUnicodeCodePoints(left.observation_id, right.observation_id));
|
|
163
167
|
return createJavaScriptApplicationNode({
|
|
164
168
|
kind: first.kind,
|
|
165
169
|
identity: first.identity,
|
|
166
170
|
observations: observations.map(({ observation_id: _id, identifier_strategy: _strategy, ...value }) => value),
|
|
167
171
|
});
|
|
168
172
|
});
|
|
169
|
-
return merged.sort((left, right) =>
|
|
173
|
+
return merged.sort((left, right) => compareUnicodeCodePoints(left.node_id, right.node_id));
|
|
170
174
|
};
|
|
171
|
-
const uniqueEdges = (edges) => [...new Map(edges.map((edge) => [edge.edge_id, edge])).values()].sort((left, right) =>
|
|
175
|
+
const uniqueEdges = (edges) => [...new Map(edges.map((edge) => [edge.edge_id, edge])).values()].sort((left, right) => compareUnicodeCodePoints(left.edge_id, right.edge_id));
|
|
@@ -232,6 +232,10 @@ const applicationGraphEvidenceBaseSchema = z.strictObject({
|
|
|
232
232
|
limitations: z.array(boundedTextSchema),
|
|
233
233
|
evidence_ids: z.array(prefixedDigestSchema("ev")),
|
|
234
234
|
});
|
|
235
|
+
/** Shared provenance fields apart from the fact-specific evidence location. */
|
|
236
|
+
export const applicationGraphEvidenceContextSchema = applicationGraphEvidenceBaseSchema.omit({ location: true });
|
|
237
|
+
/** Exact coordinates retained on each graph fact. */
|
|
238
|
+
export const applicationGraphEvidenceLocationSchema = applicationLocationReferenceSchema;
|
|
235
239
|
const checkAuthorityState = (evidence, context) => {
|
|
236
240
|
if (evidence.authority === "static-relationship-inference" &&
|
|
237
241
|
evidence.state !== "inferred")
|
|
@@ -347,6 +351,8 @@ export const applicationNodeIdentitySchema = z.discriminatedUnion("strategy", [
|
|
|
347
351
|
source_map_sha256: digestSchema,
|
|
348
352
|
// The exact `sources` entry; `""` is a legal relative reference.
|
|
349
353
|
original_source: z.string(),
|
|
354
|
+
// Exact leaf-local root; null means omitted or explicitly null.
|
|
355
|
+
source_root: z.string().nullable(),
|
|
350
356
|
source_sha256: digestSchema.nullable(),
|
|
351
357
|
}),
|
|
352
358
|
z.strictObject({
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { canonicalJson } from "../comparisonSemantics.js";
|
|
3
|
+
import { digestCanonicalValue } from "../canonicalDigest.js";
|
|
4
|
+
import { uniqueSorted } from "../canonicalOrdering.js";
|
|
5
|
+
import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
|
|
4
6
|
import { freezeOwnedJsonSnapshotSteps } from "../immutableJson.js";
|
|
5
7
|
import { applicationEdgeInputSchema, applicationEdgeSchema, applicationNodeInputSchema, applicationNodeObservationSchema, applicationNodeSchema, javascriptApplicationGraphInputSchema, javascriptApplicationGraphRecordSchema, } from "./javascriptApplicationGraphSchemas.js";
|
|
6
8
|
const OBSERVATION_IDENTIFIER_STRATEGY = {
|
|
@@ -12,7 +14,7 @@ const EDGE_IDENTIFIER_STRATEGY = {
|
|
|
12
14
|
stability: "relationship-exact",
|
|
13
15
|
};
|
|
14
16
|
const limitKey = (limit) => canonicalJson(limit, "JavaScript Application Graph");
|
|
15
|
-
const normalizeLimits = (limits) => [...new Map(limits.map((limit) => [limitKey(limit), limit])).values()].sort((left, right) =>
|
|
17
|
+
const normalizeLimits = (limits) => [...new Map(limits.map((limit) => [limitKey(limit), limit])).values()].sort((left, right) => compareUnicodeCodePoints(limitKey(left), limitKey(right)));
|
|
16
18
|
const normalizeEvidence = (evidence) => ({
|
|
17
19
|
...evidence,
|
|
18
20
|
coverage: {
|
|
@@ -29,13 +31,13 @@ const nodeSemantic = (node) => ({
|
|
|
29
31
|
kind: node.kind,
|
|
30
32
|
identity: node.identity,
|
|
31
33
|
});
|
|
32
|
-
const nodeId = (node) => `jag_node_${
|
|
34
|
+
const nodeId = (node) => `jag_node_${digestCanonicalValue(nodeSemantic(node), "JavaScript Application Graph")}`;
|
|
33
35
|
const observationSemantic = (nodeIdentifier, observation) => ({ node_id: nodeIdentifier, ...observation });
|
|
34
|
-
const observationId = (nodeIdentifier, observation) => `jag_observation_${
|
|
35
|
-
const edgeId = (edge) => `jag_edge_${
|
|
36
|
+
const observationId = (nodeIdentifier, observation) => `jag_observation_${digestCanonicalValue(observationSemantic(nodeIdentifier, observation))}`;
|
|
37
|
+
const edgeId = (edge) => `jag_edge_${digestCanonicalValue(edge, "JavaScript Application Graph")}`;
|
|
36
38
|
const sortedUniqueIssue = (values, path, label, context) => {
|
|
37
39
|
for (let index = 1; index < values.length; index += 1) {
|
|
38
|
-
if (
|
|
40
|
+
if (compareUnicodeCodePoints(values[index - 1] ?? "", values[index] ?? "") < 0)
|
|
39
41
|
continue;
|
|
40
42
|
context.addIssue({
|
|
41
43
|
code: "custom",
|
|
@@ -63,6 +65,18 @@ const checkEvidenceNormalization = (evidence, path, context) => {
|
|
|
63
65
|
path: [...path, "location"],
|
|
64
66
|
});
|
|
65
67
|
};
|
|
68
|
+
const sourceMapObservationMatchesIdentity = (identity, observation) => {
|
|
69
|
+
const { evidence, source_map_reference: reference } = observation;
|
|
70
|
+
return (reference !== null &&
|
|
71
|
+
evidence.state === "observed" &&
|
|
72
|
+
evidence.artifact.available &&
|
|
73
|
+
evidence.artifact.sha256 === identity.source_map_sha256 &&
|
|
74
|
+
reference.source_name === identity.original_source &&
|
|
75
|
+
reference.source_root === identity.source_root &&
|
|
76
|
+
evidence.location.available &&
|
|
77
|
+
evidence.location.value.kind === "artifact-path" &&
|
|
78
|
+
reference.map_path === evidence.location.value.path);
|
|
79
|
+
};
|
|
66
80
|
const observationMatchesIdentity = (node, observation) => {
|
|
67
81
|
const { identity } = node;
|
|
68
82
|
const { evidence } = observation;
|
|
@@ -71,9 +85,7 @@ const observationMatchesIdentity = (node, observation) => {
|
|
|
71
85
|
evidence.artifact.available &&
|
|
72
86
|
evidence.artifact.sha256 === identity.sha256);
|
|
73
87
|
if (identity.strategy === "source-map-original")
|
|
74
|
-
return (
|
|
75
|
-
evidence.artifact.available &&
|
|
76
|
-
evidence.artifact.sha256 === identity.source_map_sha256);
|
|
88
|
+
return sourceMapObservationMatchesIdentity(identity, observation);
|
|
77
89
|
if (identity.strategy === "canonical-path")
|
|
78
90
|
return (evidence.artifact.available &&
|
|
79
91
|
evidence.artifact.sha256 === identity.artifact_sha256 &&
|
|
@@ -126,6 +138,19 @@ const checkNode = (node, index, context) => {
|
|
|
126
138
|
"observation_id",
|
|
127
139
|
],
|
|
128
140
|
});
|
|
141
|
+
if (node.identity.strategy === "source-map-original" &&
|
|
142
|
+
!observationMatchesIdentity(node, observation))
|
|
143
|
+
context.addIssue({
|
|
144
|
+
code: "custom",
|
|
145
|
+
message: "Source-map observation must retain its exact declaration and map location",
|
|
146
|
+
path: [
|
|
147
|
+
"nodes",
|
|
148
|
+
index,
|
|
149
|
+
"observations",
|
|
150
|
+
observationIndex,
|
|
151
|
+
"source_map_reference",
|
|
152
|
+
],
|
|
153
|
+
});
|
|
129
154
|
checkEvidenceNormalization(observation.evidence, ["nodes", index, "observations", observationIndex, "evidence"], context);
|
|
130
155
|
}
|
|
131
156
|
if (!node.observations.some((observation) => observationMatchesIdentity(node, observation)))
|
|
@@ -190,7 +215,7 @@ const checkGraphInvariants = (graph, context) => {
|
|
|
190
215
|
}
|
|
191
216
|
const { graph_id: identifier, ...semantic } = graph;
|
|
192
217
|
if (identifier !==
|
|
193
|
-
`jag_${
|
|
218
|
+
`jag_${digestCanonicalValue(semantic, "JavaScript Application Graph")}`)
|
|
194
219
|
context.addIssue({
|
|
195
220
|
code: "custom",
|
|
196
221
|
message: "Graph identifier does not match its semantic content",
|
|
@@ -216,7 +241,7 @@ export const createJavaScriptApplicationNode = (input) => {
|
|
|
216
241
|
observation_id: observationId(identifier, semantic),
|
|
217
242
|
});
|
|
218
243
|
})
|
|
219
|
-
.sort((left, right) =>
|
|
244
|
+
.sort((left, right) => compareUnicodeCodePoints(left.observation_id, right.observation_id));
|
|
220
245
|
return applicationNodeSchema.parse({
|
|
221
246
|
node_id: identifier,
|
|
222
247
|
kind: parsed.kind,
|
|
@@ -243,8 +268,8 @@ export const createJavaScriptApplicationGraph = (input) => {
|
|
|
243
268
|
const semantic = {
|
|
244
269
|
...parsed,
|
|
245
270
|
root_node_ids: uniqueSorted(parsed.root_node_ids),
|
|
246
|
-
nodes: [...parsed.nodes].sort((left, right) =>
|
|
247
|
-
edges: [...parsed.edges].sort((left, right) =>
|
|
271
|
+
nodes: [...parsed.nodes].sort((left, right) => compareUnicodeCodePoints(left.node_id, right.node_id)),
|
|
272
|
+
edges: [...parsed.edges].sort((left, right) => compareUnicodeCodePoints(left.edge_id, right.edge_id)),
|
|
248
273
|
coverage: {
|
|
249
274
|
...parsed.coverage,
|
|
250
275
|
limits: normalizeLimits(parsed.coverage.limits),
|
|
@@ -253,7 +278,7 @@ export const createJavaScriptApplicationGraph = (input) => {
|
|
|
253
278
|
};
|
|
254
279
|
return javascriptApplicationGraphSchema.parse({
|
|
255
280
|
...semantic,
|
|
256
|
-
graph_id: `jag_${
|
|
281
|
+
graph_id: `jag_${digestCanonicalValue(semantic, "JavaScript Application Graph")}`,
|
|
257
282
|
});
|
|
258
283
|
};
|
|
259
284
|
const validatedImmutableApplicationGraphs = new WeakSet();
|
|
@@ -271,6 +296,6 @@ export const isValidatedImmutableJavaScriptApplicationGraph = (value) => typeof
|
|
|
271
296
|
/** Parse a stored graph and reject stale IDs. */
|
|
272
297
|
export const parseJavaScriptApplicationGraph = (input) => javascriptApplicationGraphSchema.parse(input);
|
|
273
298
|
/** Compute the byte-stable SHA-256 commitment of a verified graph. */
|
|
274
|
-
export const computeJavaScriptApplicationGraphSha256 = (input) =>
|
|
299
|
+
export const computeJavaScriptApplicationGraphSha256 = (input) => digestCanonicalValue(parseJavaScriptApplicationGraph(input), "JavaScript Application Graph");
|
|
275
300
|
/** Serialize a verified graph as RFC 8785 canonical JSON. */
|
|
276
301
|
export const serializeJavaScriptApplicationGraph = (input) => canonicalJson(parseJavaScriptApplicationGraph(input), "JavaScript Application Graph");
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { javascriptSourceMapReferenceSchema } from "./javascriptSourceMapPaths.js";
|
|
2
3
|
import { applicationCoverageSchema, applicationGraphEvidenceSchema, applicationNodeIdentitySchema, } from "./javascriptApplicationEvidenceSchemas.js";
|
|
3
4
|
import { jsonValueSchema } from "../jsonValue.js";
|
|
4
5
|
import { prefixedDigestSchema } from "../digests.js";
|
|
@@ -61,13 +62,19 @@ export const JAVASCRIPT_APPLICATION_RELATIONS = [
|
|
|
61
62
|
const applicationRelationSchema = z.enum(JAVASCRIPT_APPLICATION_RELATIONS);
|
|
62
63
|
const applicationPropertiesSchema = z.record(z.string().min(1), jsonValueSchema);
|
|
63
64
|
/** One node observation before its semantic identifier is derived. */
|
|
64
|
-
const
|
|
65
|
+
const applicationNodeObservationBaseSchema = z.strictObject({
|
|
65
66
|
label: z.string().min(1).nullable(),
|
|
67
|
+
source_map_reference: javascriptSourceMapReferenceSchema.nullable(),
|
|
66
68
|
properties: applicationPropertiesSchema,
|
|
67
69
|
evidence: applicationGraphEvidenceSchema,
|
|
68
70
|
});
|
|
71
|
+
const applicationNodeObservationInputSchema = applicationNodeObservationBaseSchema.extend({
|
|
72
|
+
source_map_reference: javascriptSourceMapReferenceSchema
|
|
73
|
+
.nullable()
|
|
74
|
+
.default(null),
|
|
75
|
+
});
|
|
69
76
|
/** One immutable, evidence-bearing observation attached to an entity. */
|
|
70
|
-
export const applicationNodeObservationSchema =
|
|
77
|
+
export const applicationNodeObservationSchema = applicationNodeObservationBaseSchema.extend({
|
|
71
78
|
observation_id: prefixedDigestSchema("jag_observation"),
|
|
72
79
|
identifier_strategy: z.strictObject({
|
|
73
80
|
strategy: z.literal("semantic-content-sha256"),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { digestCanonicalValue } from "../canonicalDigest.js";
|
|
2
2
|
import { uniqueSorted } from "../canonicalOrdering.js";
|
|
3
3
|
import { buildJavaScriptApplicationChangeGraph } from "./javascriptApplicationChangeGraph.js";
|
|
4
|
-
import {
|
|
4
|
+
import { ownedApplicationVersionComparisonResultSchema, } from "./javascriptApplicationVersionComparisonSchemas.js";
|
|
5
5
|
import { classifyJavaScriptApplicationVersions } from "./javascriptApplicationVersionItems.js";
|
|
6
6
|
import { matchJavaScriptApplicationVersions } from "./javascriptApplicationVersionKeys.js";
|
|
7
7
|
/** Compare application entities with ordered unique-only identity tiers. */
|
|
@@ -47,9 +47,9 @@ export const compareJavaScriptApplicationVersions = (input) => {
|
|
|
47
47
|
evidence_links: evidenceLinks,
|
|
48
48
|
limitations: comparisonLimitations(input),
|
|
49
49
|
};
|
|
50
|
-
return
|
|
50
|
+
return ownedApplicationVersionComparisonResultSchema.parse({
|
|
51
51
|
...semantic,
|
|
52
|
-
comparison_id: `javc_${
|
|
52
|
+
comparison_id: `javc_${digestCanonicalValue(semantic, "Application version comparison")}`,
|
|
53
53
|
});
|
|
54
54
|
};
|
|
55
55
|
const summary = (items) => ({
|