rea-agents 6.1.0 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -24
- package/bridge/ghidra/ReaGhidraBridge.java +32 -4
- package/bridge/hopper_bridge.py +8 -1
- package/dist/android/JadxConfiguration.js +87 -7
- package/dist/android/JadxMcpTransport.js +14 -2
- package/dist/android/JadxProvider.js +64 -36
- package/dist/android/JadxSession.js +51 -9
- package/dist/application/BinaryTargetResolver.js +68 -20
- package/dist/application/BrowserEvidence.js +3 -8
- package/dist/application/BrowserScenarioEvidence.js +4 -20
- package/dist/application/CapabilityInventory.js +43 -9
- package/dist/application/ClientConfigurationDocument.js +97 -25
- package/dist/application/ClientRegistrationStatus.js +19 -6
- package/dist/application/DirectAnalysis.js +41 -20
- package/dist/application/DirectAnalysisCleanup.js +71 -0
- package/dist/application/DirectAnalysisStatus.js +3 -7
- package/dist/application/Doctor.js +40 -53
- package/dist/application/DoctorDiagnostics.js +2 -3
- package/dist/application/EnhancedTools.js +51 -6
- package/dist/application/EvidenceBundleFiles.js +8 -3
- package/dist/application/InvestigationProviders.js +13 -5
- package/dist/application/JsonFiles.js +56 -23
- package/dist/application/LinuxHopper.js +11 -7
- package/dist/application/MacHopper.js +15 -18
- package/dist/application/RealHopperAssertions.js +0 -11
- package/dist/application/ReconstructionObligationCandidates.js +10 -3
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
- package/dist/application/ReferenceSourceImportEntries.js +1 -1
- package/dist/application/RegularFileRead.js +17 -0
- package/dist/application/Setup.js +26 -23
- package/dist/application/SetupClientConfiguration.js +18 -7
- package/dist/application/SetupHost.js +20 -29
- package/dist/application/SetupPlan.js +24 -20
- package/dist/application/SetupSkill.js +57 -8
- package/dist/application/SupportedClients.js +43 -0
- package/dist/application/Uninstall.js +98 -30
- package/dist/application/UpdateMaintenance.js +13 -7
- package/dist/application/UpdateRuntime.js +12 -12
- package/dist/application/Utf8JsonInput.js +64 -0
- package/dist/application/WebScriptExportService.js +38 -5
- package/dist/application/WorkflowEvidence.js +25 -2
- package/dist/application/XrefsAddressResolution.js +45 -0
- package/dist/application/analysisView/AnalysisViewService.js +76 -0
- package/dist/application/android/AndroidAnalysisService.js +1 -1
- package/dist/application/binary/AnalysisClientCleanup.js +30 -5
- package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
- package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
- package/dist/application/binary/AnalysisSnapshotCache.js +13 -10
- package/dist/application/binary/BinarySession.js +86 -29
- package/dist/application/binary/BinarySessionComposition.js +1 -3
- package/dist/application/binary/BinarySessionExecution.js +3 -5
- package/dist/application/binary/BinarySessionOpen.js +10 -2
- package/dist/application/binary/BinarySessionRecords.js +1 -1
- package/dist/application/binary/BinarySessionStatus.js +1 -6
- package/dist/application/binary/CompositeProvider.js +4 -18
- package/dist/application/binary/LazyAnalysisProvider.js +5 -5
- package/dist/application/binary/SessionProviderRouter.js +27 -135
- package/dist/application/homebrew.js +48 -0
- package/dist/application/javascript/ElectronActiveEvidence.js +10 -14
- package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
- package/dist/application/javascript/ElectronBoundaryGraphNative.js +5 -1
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +3 -6
- package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
- package/dist/application/javascript/JavaScriptApplicationService.js +7 -1
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -9
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +19 -27
- package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
- package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
- package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
- package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +46 -29
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +86 -27
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +52 -9
- package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +1 -0
- package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
- package/dist/application/javascript/JavaScriptModuleRelationships.js +6 -18
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +8 -6
- package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +7 -5
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +3 -4
- package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +3 -7
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +76 -47
- package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
- package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +3 -4
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +51 -25
- package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
- package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
- package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
- package/dist/application/native/NativeCallRoutes.js +2 -4
- package/dist/application/process/ProcessCli.js +11 -11
- package/dist/application/process/ProcessEvidence.js +0 -1
- package/dist/artifacts/ArtifactProvider.js +53 -30
- package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
- package/dist/artifacts/ArtifactReader.js +31 -0
- package/dist/artifacts/AsarArtifactReader.js +81 -17
- package/dist/artifacts/DirectoryArtifactReader.js +2 -1
- package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
- package/dist/artifacts/NativeDmgArtifactReader.js +207 -77
- package/dist/artifacts/NativeDmgOwnership.js +109 -0
- package/dist/artifacts/SafeOutputTree.js +16 -2
- package/dist/artifacts/ZipArtifactReader.js +11 -4
- package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
- package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
- package/dist/artifacts/apple/KeyedArchiveReader.js +68 -42
- package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
- package/dist/artifacts/extraction/ArtifactExtraction.js +104 -29
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +71 -66
- package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
- package/dist/artifacts/inventory/classify.js +33 -14
- package/dist/artifacts/inventory/hashStableRootArtifact.js +37 -0
- package/dist/artifacts/inventory/reader.js +3 -3
- package/dist/artifacts/inventory/scanCanonical.js +64 -34
- package/dist/artifacts/inventory/scanReader.js +12 -20
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +65 -27
- package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
- package/dist/browser/CdpBrowserProvider.js +6 -6
- package/dist/browser/CdpCaptureEventHandlers.js +2 -4
- package/dist/browser/CdpCaptureEvents.js +0 -1
- package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
- package/dist/browser/CdpCaptureValues.js +20 -0
- package/dist/browser/CdpElectronInspection.js +2 -2
- package/dist/browser/CdpElectronProvider.js +4 -5
- package/dist/browser/CdpElectronScriptEvents.js +2 -8
- package/dist/browser/CdpElectronScripts.js +4 -5
- package/dist/browser/CdpPageCaptureScripts.js +2 -3
- package/dist/browser/CdpSafeMetadata.js +10 -10
- package/dist/browser/CdpWebMcpDiscovery.js +16 -13
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +64 -49
- package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
- package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
- package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
- package/dist/browser/PlaywrightScenarioBrowser.js +269 -66
- package/dist/browser/PlaywrightScenarioEvents.js +1 -1
- package/dist/browser/PlaywrightScenarioSession.js +41 -32
- package/dist/browser/WebSourceMapFetcher.js +32 -6
- package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
- package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
- package/dist/browser/history/CaptureFailures.js +6 -2
- package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
- package/dist/catalogIdentity.js +0 -1
- package/dist/cli/analysisViewCommands.js +36 -0
- package/dist/cli/artifactCommands.js +11 -12
- package/dist/cli/coreAnalysisCommands.js +3 -3
- package/dist/cli/coreBinaryCommands.js +37 -28
- package/dist/cli/coreNativeCommands.js +9 -10
- package/dist/cli/electronCommands.js +12 -13
- package/dist/cli/interactiveSetup.js +6 -6
- package/dist/cli/javascriptApplicationAnalysis.js +2 -12
- package/dist/cli/jsonOutput.js +3 -2
- package/dist/cli/managedCommands.js +7 -8
- package/dist/cli/nativeCallCommands.js +1 -2
- package/dist/cli/omittableDefaults.js +50 -0
- package/dist/cli/processCommands.js +3 -2
- package/dist/cli/setupCommands.js +16 -15
- package/dist/cli/streamedJsonOutput.js +83 -4
- package/dist/cli/utilityCommands.js +10 -12
- package/dist/cli.js +19 -8
- package/dist/cliBrowserScenarioCommands.js +2 -2
- package/dist/cliCommandNames.js +1 -0
- package/dist/cliJsonFile.js +179 -0
- package/dist/cliJsonInput.js +60 -33
- package/dist/cliObservationOptions.js +4 -0
- package/dist/cliOutput.js +0 -38
- package/dist/composition/auxiliaryAnalysisProviders.js +30 -25
- package/dist/composition/binary.js +9 -9
- package/dist/composition/browserScenario.js +2 -1
- package/dist/composition/directAnalysis.js +20 -14
- package/dist/composition/electronScenario.js +1 -1
- package/dist/composition/optionalObservationProviders.js +12 -7
- package/dist/config/environment.js +6 -0
- package/dist/config/ghidraStartupTimeout.js +4 -9
- package/dist/config/homeDirectory.js +12 -0
- package/dist/config/mcpResponseBudget.js +9 -1
- package/dist/config/parseConfig.js +7 -3
- package/dist/config/parsers.js +19 -22
- package/dist/contracts/analysisViewToolContracts.js +56 -0
- package/dist/contracts/applicationToolContracts.js +5 -4
- package/dist/contracts/artifactComparisonExample.js +7 -7
- package/dist/contracts/artifactToolContracts.js +1 -1
- package/dist/contracts/browserScenarioToolContracts.js +1 -1
- package/dist/contracts/browserToolContracts.js +19 -15
- package/dist/contracts/enhancedInputs.js +2 -2
- package/dist/contracts/enhancedToolContracts.js +4 -3
- package/dist/contracts/errorSchemas.js +3 -1
- package/dist/contracts/evm/evmToolContracts.js +1 -1
- package/dist/contracts/functionComparisonExample.js +8 -0
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/inputSchemaPresentation.js +181 -0
- package/dist/contracts/investigationExamples.js +4 -3
- package/dist/contracts/javascript/electronToolContracts.js +3 -2
- package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -22
- package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +248 -0
- package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
- package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
- package/dist/contracts/managed/managedToolContracts.js +8 -12
- package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
- package/dist/contracts/mobileApplicationGraphExamples.js +8 -8
- package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
- package/dist/contracts/native/nativeToolContracts.js +2 -2
- package/dist/contracts/officialToolContracts.js +2 -1
- package/dist/contracts/promptContracts.js +2 -2
- package/dist/contracts/providerSelection.js +1 -1
- package/dist/contracts/sessionLifecycleInputs.js +4 -3
- package/dist/contracts/sessionStatusContract.js +3 -2
- package/dist/contracts/sessionToolContracts.js +17 -4
- package/dist/contracts/sessionToolSchemas.js +4 -16
- package/dist/contracts/toolContracts.js +2 -0
- package/dist/contracts/toolEffects.js +1 -0
- package/dist/contracts/toolOutputSchemaGroups.js +138 -94
- package/dist/contracts/toolOutputSchemaPrimitives.js +13 -26
- package/dist/contracts/toolSchemaMetadata.js +18 -69
- package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
- package/dist/contracts/webRuntimeToolContracts.js +1 -1
- package/dist/contracts/webScriptToolContracts.js +1 -1
- package/dist/doctorRuntime.js +7 -5
- package/dist/domain/analysisErrorBase.js +5 -0
- package/dist/domain/analysisErrorCore.js +3 -0
- package/dist/domain/analysisErrorPresentation.js +22 -5
- package/dist/domain/analysisErrorProjection.js +24 -5
- package/dist/domain/analysisSnapshot.js +31 -31
- package/dist/domain/analysisView/analysisView.js +241 -0
- package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
- package/dist/domain/analysisView/binaryLayoutView.js +159 -0
- package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
- package/dist/domain/android/androidApplication.js +1 -1
- package/dist/domain/android/androidPartialObservation.js +36 -0
- package/dist/domain/apple/appleApplication.js +1 -1
- package/dist/domain/apple/dylibResolution.js +10 -3
- package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
- package/dist/domain/apple/keyedArchive.js +26 -2
- package/dist/domain/artifactComparison.js +15 -6
- package/dist/domain/artifactGraph.js +17 -4
- package/dist/domain/artifactIdentity.js +8 -8
- package/dist/domain/artifactInspection.js +8 -8
- package/dist/domain/artifactInventoryEvidence.js +9 -16
- package/dist/domain/artifactOperationError.js +3 -3
- package/dist/domain/artifactPartialObservation.js +1 -0
- package/dist/domain/artifactPathSyntax.js +49 -0
- package/dist/domain/binaryTarget.js +39 -13
- package/dist/domain/browserCaptureComparison.js +13 -49
- package/dist/domain/browserCompleteness.js +3 -2
- package/dist/domain/browserNetworkEvidence.js +10 -4
- package/dist/domain/browserObservation.js +0 -1
- package/dist/domain/browserObservationSchemas.js +14 -3
- package/dist/domain/browserScenario.js +0 -1
- package/dist/domain/browserScenarioCapture.js +1 -2
- package/dist/domain/browserScenarioCaptureValues.js +2 -2
- package/dist/domain/browserScenarioDiff.js +0 -2
- package/dist/domain/browserScenarioDiffEvidence.js +0 -12
- package/dist/domain/browserScenarioDiffValues.js +2 -2
- package/dist/domain/browserScenarioNormalization.js +3 -3
- package/dist/domain/browserScenarioValues.js +6 -6
- package/dist/domain/callPath.js +15 -18
- package/dist/domain/callPathSchemas.js +2 -2
- package/dist/domain/canonicalDigest.js +7 -1
- package/dist/domain/canonicalOrdering.js +1 -13
- package/dist/domain/changedBehavior.js +5 -6
- package/dist/domain/comparisonSemantics.js +0 -5
- package/dist/domain/completionLedgerGeneration.js +2 -1
- package/dist/domain/configurationErrors.js +12 -0
- package/dist/domain/conformancePackage.js +4 -3
- package/dist/domain/digests.js +0 -3
- package/dist/domain/evidence.js +19 -40
- package/dist/domain/evidenceBundle.js +58 -42
- package/dist/domain/evidenceCompletionLedger.js +2 -1
- package/dist/domain/firmware/firmwareAnalysis.js +4 -3
- package/dist/domain/functionComparison.js +6 -6
- package/dist/domain/functionComparisonDimensions.js +120 -87
- package/dist/domain/functionComparisonNormalization.js +26 -36
- package/dist/domain/functionComparisonResults.js +3 -6
- package/dist/domain/functionComparisonSchemas.js +2 -8
- package/dist/domain/functionDossierEvidence.js +4 -38
- package/dist/domain/hopperValues.js +11 -15
- package/dist/domain/javascript/electronActiveObservation.js +29 -71
- package/dist/domain/javascript/electronObservation.js +14 -3
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +12 -11
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +11 -2
- package/dist/domain/javascript/electronStaticAnalysisNative.js +7 -4
- package/dist/domain/javascript/electronStaticAnalysisValues.js +8 -4
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +3 -1
- package/dist/domain/javascript/javascriptApplicationChangeGraph.js +12 -8
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +6 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +41 -16
- package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
- package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
- package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +50 -36
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +9 -8
- package/dist/domain/javascript/javascriptAstFingerprint.js +2 -2
- package/dist/domain/javascript/javascriptAstValues.js +22 -0
- package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
- package/dist/domain/javascript/javascriptExportShapeComparison.js +10 -3
- package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +58 -22
- package/dist/domain/javascript/javascriptExportShapeSelection.js +7 -7
- package/dist/domain/javascript/javascriptExportShapeVariants.js +70 -16
- package/dist/domain/javascript/javascriptFeatureSeed.js +25 -3
- package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
- package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
- package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -5
- package/dist/domain/javascript/javascriptNativeHandoff.js +7 -7
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
- package/dist/domain/javascript/javascriptRuntimeObservation.js +18 -7
- package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
- package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
- package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
- package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +5 -4
- package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
- package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +6 -6
- package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -222
- package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
- package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
- package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
- package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +7 -7
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +209 -11
- package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
- package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
- package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
- package/dist/domain/javascript/javascriptSemanticChildProcesses.js +4 -3
- package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
- package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
- package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
- package/dist/domain/javascript/javascriptSemanticFingerprints.js +2 -2
- package/dist/domain/javascript/javascriptSemanticGraph.js +220 -71
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +19 -1
- package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
- package/dist/domain/javascript/javascriptSemanticIterationSources.js +106 -0
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +515 -74
- package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +44 -36
- package/dist/domain/javascript/javascriptSemanticObjects.js +79 -42
- package/dist/domain/javascript/javascriptSemanticPrimitives.js +8 -14
- package/dist/domain/javascript/javascriptSemanticProjection.js +21 -16
- package/dist/domain/javascript/javascriptSemanticPromises.js +16 -21
- package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +23 -0
- package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
- package/dist/domain/javascript/javascriptSemanticQuery.js +8 -2
- package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +3 -2
- package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
- package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
- package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
- package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
- package/dist/domain/javascript/javascriptSemanticReturns.js +55 -44
- package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
- package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -1
- package/dist/domain/javascript/javascriptSemanticValues.js +180 -76
- package/dist/domain/javascript/javascriptSourceMapPaths.js +114 -0
- package/dist/domain/javascript/javascriptSourceParser.js +34 -9
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -6
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -16
- package/dist/domain/javascript/sourceToBundleComparison.js +19 -8
- package/dist/domain/javascript/sourceToBundleSignals.js +53 -25
- package/dist/domain/jsonSerialization.js +109 -55
- package/dist/domain/jsonShape.js +46 -19
- package/dist/domain/localPath.js +10 -4
- package/dist/domain/managed/managedApplicationGraph.js +10 -6
- package/dist/domain/managed/managedApplicationGraphNodes.js +82 -57
- package/dist/domain/managed/managedArtifact.js +6 -4
- package/dist/domain/managed/managedMemberComparison.js +2 -9
- package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
- package/dist/domain/managed/managedNativeVerification.js +0 -2
- package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
- package/dist/domain/native/binaryLayout.js +2 -3
- package/dist/domain/native/nativeApiBoundary.js +1 -1
- package/dist/domain/native/nativeCallObservation.js +3 -3
- package/dist/domain/native/nativeInstruction.js +7 -0
- package/dist/domain/native/nativeValueFlow.js +5 -11
- package/dist/domain/native/objcSwiftMetadata.js +15 -17
- package/dist/domain/native/recordedCrash.js +2 -3
- package/dist/domain/offsetDateTime.js +17 -0
- package/dist/domain/process/processCapture.js +22 -20
- package/dist/domain/process/processCaptureCoverage.js +70 -0
- package/dist/domain/process/processCaptureExample.js +45 -1
- package/dist/domain/process/processCaptureParsing.js +1 -34
- package/dist/domain/process/processCaptureValidation.js +82 -13
- package/dist/domain/process/processComparison.js +39 -43
- package/dist/domain/process/processObservation.js +10 -2
- package/dist/domain/process/processScenario.js +24 -2
- package/dist/domain/process/processTraceComparison.js +0 -2
- package/dist/domain/process/processTraceDimensionProjection.js +1 -1
- package/dist/domain/process/processTraceEvaluation.js +19 -15
- package/dist/domain/process/processTraceSpecification.js +4 -7
- package/dist/domain/providerAdapterError.js +2 -0
- package/dist/domain/providerCleanupError.js +6 -2
- package/dist/domain/reconstructionCoverage.js +7 -3
- package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
- package/dist/domain/reconstructionReadinessSchemas.js +2 -1
- package/dist/domain/reconstructionUnknowns.js +4 -3
- package/dist/domain/reconstructionVerification.js +6 -5
- package/dist/domain/reconstructionVerificationSchemas.js +2 -1
- package/dist/domain/referenceSourceGraph.js +27 -28
- package/dist/domain/referenceSourceImportParsing.js +34 -45
- package/dist/domain/residualUnknown.js +3 -2
- package/dist/domain/staticRuntimeCorrelation.js +4 -3
- package/dist/domain/stringPatterns.js +6 -0
- package/dist/domain/swiftSymbolClassification.js +66 -0
- package/dist/domain/symbolAnalysis.js +83 -20
- package/dist/domain/unicodeCodePointOrder.js +6 -0
- package/dist/domain/webBundleAnalyzerInspection.js +9 -1
- package/dist/domain/webCaptureDiff.js +71 -30
- package/dist/domain/webCaptureDiffSchemas.js +8 -11
- package/dist/domain/webEventListeners.js +3 -2
- package/dist/domain/webExecution.js +3 -2
- package/dist/domain/webInventory.js +3 -2
- package/dist/domain/webMcpDiscovery.js +4 -3
- package/dist/domain/webRuntime.js +0 -2
- package/dist/domain/webScriptExport.js +2 -2
- package/dist/dotnet/ManagedArtifactInspector.js +2 -19
- package/dist/dotnet/ManagedMemberInspector.js +12 -18
- package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +1 -2
- package/dist/dotnet/ManagedMemberRows.js +75 -62
- package/dist/dotnet/ManagedMetadataInventory.js +16 -22
- package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
- package/dist/dotnet/ManagedReaderFailure.js +16 -0
- package/dist/dotnet/ManagedStaticProvider.js +13 -12
- package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
- package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
- package/dist/evaluation/AgentEvaluationReport.js +28 -0
- package/dist/evaluation/CodexAgentEval.js +12 -8
- package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
- package/dist/evm/EvmoleInterfaceProvider.js +2 -1
- package/dist/filesystem/RegularFile.js +41 -0
- package/dist/firmware/FirmwareCommand.js +9 -5
- package/dist/firmware/FirmwareProvider.js +4 -4
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
- package/dist/ghidra/GhidraClient.js +105 -36
- package/dist/ghidra/GhidraClientStartup.js +0 -2
- package/dist/ghidra/GhidraDoctor.js +6 -5
- package/dist/ghidra/GhidraFunctionValues.js +3 -5
- package/dist/ghidra/GhidraInstallation.js +151 -22
- package/dist/ghidra/GhidraJavaLaunch.js +6 -2
- package/dist/ghidra/GhidraLauncher.js +58 -26
- package/dist/ghidra/GhidraProvider.js +6 -2
- package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
- package/dist/ghidra/GhidraProviderClient.js +13 -3
- package/dist/ghidra/GhidraSessionError.js +2 -0
- package/dist/ghidra/GhidraSessionRoot.js +39 -0
- package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
- package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
- package/dist/hopper/BridgeLauncher.js +34 -45
- package/dist/hopper/HopperAnalysisProfile.js +3 -8
- package/dist/hopper/HopperCleanup.js +56 -27
- package/dist/hopper/HopperClient.js +86 -65
- package/dist/hopper/HopperMachOImage.js +3 -2
- package/dist/hopper/HopperProvider.js +16 -18
- package/dist/hopper/HopperRegexSearch.js +3 -6
- package/dist/hopper/HopperTargetLease.js +132 -49
- package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
- package/dist/ida/IdaConfiguration.js +8 -3
- package/dist/ida/IdaInput.js +1 -7
- package/dist/ida/IdaMcpConnection.js +8 -4
- package/dist/ida/IdaOperationRunner.js +5 -3
- package/dist/ida/IdaProvider.js +8 -12
- package/dist/ida/IdaSessionClient.js +24 -20
- package/dist/ida/IdaWorkspace.js +12 -13
- package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
- package/dist/inspector/V8InspectorCaptureProjection.js +47 -14
- package/dist/inspector/V8InspectorProvider.js +97 -35
- package/dist/javascript/recovery/WakaruCommand.js +7 -2
- package/dist/javascript/recovery/WakaruExecution.js +5 -2
- package/dist/main/shutdown.js +81 -29
- package/dist/main/startup.js +9 -2
- package/dist/main/transport.js +23 -3
- package/dist/main.js +11 -18
- package/dist/native/AppleMachoSelection.js +16 -6
- package/dist/native/AppleObjcDispatchFacets.js +3 -3
- package/dist/native/AppleObjcProperties.js +17 -7
- package/dist/native/CommandRunner.js +9 -7
- package/dist/native/LldbCallTracer.js +249 -77
- package/dist/native/NativeMacOSProvider.js +32 -17
- package/dist/native/NativeMacOSProviderMetadata.js +1 -2
- package/dist/native/NativeUiHelperRuntime.js +11 -2
- package/dist/native/NativeUiObservation.js +2 -2
- package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
- package/dist/process/DarwinProcessRunTokenReader.js +16 -2
- package/dist/process/ExecFileOutput.js +88 -6
- package/dist/process/PrivateRuntimeRoot.js +10 -5
- package/dist/process/ProcessOwnership.js +1 -4
- package/dist/process/ProcessOwnershipObservation.js +18 -16
- package/dist/process/ProviderProcess.js +1 -3
- package/dist/process/capture/FilesystemSnapshot.js +131 -24
- package/dist/process/capture/ProcessCaptureError.js +13 -0
- package/dist/process/capture/ProcessCaptureLifecycle.js +148 -74
- package/dist/process/capture/ProcessFilesystemEffects.js +51 -6
- package/dist/process/capture/ProcessHarness.js +16 -33
- package/dist/process/capture/ProcessNormalization.js +20 -2
- package/dist/process/capture/ProcessSampling.js +25 -2
- package/dist/process/capture/TerminalRenderer.js +14 -0
- package/dist/process/snapshotEnvironment.js +14 -0
- package/dist/server/EvidenceMcpServer.js +25 -14
- package/dist/server/analysisAdmission.js +8 -0
- package/dist/server/createServer.js +71 -59
- package/dist/server/mcpClientMetadata.js +12 -5
- package/dist/server/promptCompletion.js +3 -8
- package/dist/server/registerAnalysisViewTool.js +15 -0
- package/dist/server/registerAndroidTools.js +2 -3
- package/dist/server/registerApplicationTools/compareExportShapes.js +6 -6
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
- package/dist/server/registerApplicationTools/compareVersions.js +4 -5
- package/dist/server/registerApplicationTools/coverage.js +1 -2
- package/dist/server/registerApplicationTools/helpers.js +4 -4
- package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
- package/dist/server/registerApplicationTools/traceFeature.js +4 -5
- package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
- package/dist/server/registerArtifactComparisonTool.js +4 -5
- package/dist/server/registerArtifactTools.js +2 -2
- package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
- package/dist/server/registerBrowserScenarioTool.js +3 -4
- package/dist/server/registerBrowserTools.js +13 -16
- package/dist/server/registerBundleComparisonTool.js +5 -6
- package/dist/server/registerCloseLifecycleTool.js +8 -7
- package/dist/server/registerElectronTools.js +10 -13
- package/dist/server/registerEnhancedTools.js +82 -77
- package/dist/server/registerEvidenceTools.js +54 -47
- package/dist/server/registerEvmTools.js +2 -3
- package/dist/server/registerFirmwareTools.js +2 -3
- package/dist/server/registerFunctionComparisonTool.js +7 -8
- package/dist/server/registerInvestigationTools.js +14 -15
- package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
- package/dist/server/registerManagedTools.js +7 -4
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
- package/dist/server/registerOfficialTools.js +32 -41
- package/dist/server/registerProcessComparisonTool.js +8 -8
- package/dist/server/registerRecordedCrashTools.js +2 -3
- package/dist/server/registerSessionRecordTools.js +15 -19
- package/dist/server/registerSessionStatusTool.js +3 -4
- package/dist/server/registerSessionTools.js +19 -19
- package/dist/server/registerWebModuleTool.js +2 -3
- package/dist/server/registerWebNetworkCaptureTool.js +2 -3
- package/dist/server/registerWebRuntimeTools.js +4 -5
- package/dist/server/registerWebScriptTool.js +2 -3
- package/dist/server/registerWebSourceLocationTool.js +2 -3
- package/dist/server/toolResult.js +66 -94
- package/dist/server/toolResultEncoding.js +11 -10
- package/dist/windows/WindowsNativeLoader.js +1 -0
- package/dist/windows/WindowsOwnedProcess.js +60 -15
- package/dist/windows/WindowsPrivateRuntime.js +7 -8
- package/native/windows/README.md +3 -1
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +42 -30
- package/scripts/rea.mjs +3 -6
- package/skills/reverse-engineer-anything/SKILL.md +14 -13
- package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +18 -0
- package/dist/artifacts/inventory/policy.js +0 -2
- package/dist/config.js +0 -1
- package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
- package/dist/contracts/process/processCaptureExample.js +0 -2
- package/dist/contracts/toolOutputSchemas.js +0 -2
- package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
- package/dist/main/reload.js +0 -12
- package/dist/main/state.js +0 -3
- package/dist/server/registerNativeTools.js +0 -6
- package/dist/server/sessionToolPolicies.js +0 -2
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
import { JAVASCRIPT_APPLICATION_PROVIDER, JAVASCRIPT_RUNTIME_RECONCILIATION_PROVIDER, MANAGED_WORKFLOW_PROVIDER, } from "../InvestigationProviders.js";
|
|
2
2
|
import { isImmutableEvidence, parseEvidence, } from "../../domain/evidence.js";
|
|
3
|
+
import { AnalysisInputError, } from "../../domain/analysisErrorCore.js";
|
|
4
|
+
import { projectInputIssues } from "../../domain/inputIssueProjection.js";
|
|
5
|
+
import { err, ok } from "../../domain/result.js";
|
|
6
|
+
import { z } from "zod";
|
|
3
7
|
import { analyzeJavaScriptApplicationInputSchema, javascriptApplicationAnalysisResultSchema, } from "../../domain/javascript/javascriptApplicationAnalysis.js";
|
|
4
8
|
import { javascriptRuntimeReconciliationResultSchema } from "../../domain/javascript/javascriptRuntimeReconciliationSchemas.js";
|
|
5
9
|
import { managedApplicationGraphResultSchema } from "../../domain/managed/managedApplicationGraph.js";
|
|
10
|
+
/** Convert typed parser issues into this workflow's caller-facing input error. */
|
|
11
|
+
export const applicationGraphEvidenceInputError = (operation, failure) => new AnalysisInputError(operation, undefined, failure.issues);
|
|
12
|
+
class InvalidApplicationGraphEvidence extends Error {
|
|
13
|
+
issues;
|
|
14
|
+
constructor(issues) {
|
|
15
|
+
super("Application graph Evidence failed input validation");
|
|
16
|
+
this.issues = issues;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
6
19
|
const ownedApplicationSources = new WeakMap();
|
|
7
20
|
/** Retain the producer-validated meaning of its exact immutable result snapshot. */
|
|
8
21
|
export const rememberOwnedApplicationGraphEvidence = (evidence, result) => {
|
|
@@ -11,44 +24,44 @@ export const rememberOwnedApplicationGraphEvidence = (evidence, result) => {
|
|
|
11
24
|
evidence.operation !== "analyze_javascript_application" ||
|
|
12
25
|
!providerMatches(evidence, JAVASCRIPT_APPLICATION_PROVIDER))
|
|
13
26
|
throw new TypeError("Owned application Evidence must bind its exact validated immutable result");
|
|
14
|
-
ownedApplicationSources.set(evidence, Object.freeze(staticApplicationSourceForResult(evidence, result)));
|
|
27
|
+
ownedApplicationSources.set(evidence, Object.freeze(staticApplicationSourceForResult(evidence, result, [])));
|
|
15
28
|
return evidence;
|
|
16
29
|
};
|
|
17
30
|
/** Parse and authenticate one REA-produced JavaScript Application Graph Evidence. */
|
|
18
|
-
export const parseApplicationGraphEvidence = (input) => {
|
|
19
|
-
const evidence =
|
|
31
|
+
export const parseApplicationGraphEvidence = (input, path = []) => captureInputValidation(() => {
|
|
32
|
+
const evidence = parseEvidenceInput(input, path);
|
|
20
33
|
const owned = ownedApplicationSources.get(evidence);
|
|
21
34
|
if (owned !== undefined)
|
|
22
35
|
return owned;
|
|
23
|
-
if (evidence.operation === "analyze_javascript_application"
|
|
24
|
-
evidence
|
|
25
|
-
|
|
26
|
-
return staticApplicationSource(evidence);
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
+
if (evidence.operation === "analyze_javascript_application") {
|
|
37
|
+
requirePredicate(evidence, "rea.javascript-application-analysis", path);
|
|
38
|
+
requireProvider(evidence, JAVASCRIPT_APPLICATION_PROVIDER, path);
|
|
39
|
+
return staticApplicationSource(evidence, path);
|
|
40
|
+
}
|
|
41
|
+
if (evidence.operation === "reconcile_javascript_runtime") {
|
|
42
|
+
requirePredicate(evidence, "rea.javascript-runtime-reconciliation", path);
|
|
43
|
+
requireProvider(evidence, JAVASCRIPT_RUNTIME_RECONCILIATION_PROVIDER, path);
|
|
44
|
+
return staticRuntimeSource(evidence, path);
|
|
45
|
+
}
|
|
46
|
+
if (evidence.operation === "project_managed_application_graph") {
|
|
47
|
+
requirePredicate(evidence, "rea.managed-application-graph", path);
|
|
48
|
+
requireProvider(evidence, MANAGED_WORKFLOW_PROVIDER, path);
|
|
49
|
+
return managedApplicationSource(evidence, path);
|
|
50
|
+
}
|
|
51
|
+
throw invalidEvidence(path, "operation", "Expected authenticated JavaScript analysis, runtime reconciliation, or managed application graph Evidence.");
|
|
52
|
+
});
|
|
53
|
+
const staticApplicationSource = (evidence, path) => {
|
|
54
|
+
const result = parseCallerValue((input) => javascriptApplicationAnalysisResultSchema.parse(input), evidence.normalized_result, [...path, "normalized_result"]);
|
|
55
|
+
return staticApplicationSourceForResult(evidence, result, path);
|
|
36
56
|
};
|
|
37
|
-
const
|
|
38
|
-
const result = javascriptApplicationAnalysisResultSchema.parse(evidence.normalized_result);
|
|
39
|
-
return staticApplicationSourceForResult(evidence, result);
|
|
40
|
-
};
|
|
41
|
-
const staticApplicationSourceForResult = (evidence, result) => {
|
|
57
|
+
const staticApplicationSourceForResult = (evidence, result, path) => {
|
|
42
58
|
if (evidence.authority !== "shipped-artifact" ||
|
|
43
59
|
evidence.confidence !== "derived")
|
|
44
|
-
throw
|
|
60
|
+
throw invalidEvidence(path, "authority", "JavaScript application Evidence must use shipped-artifact authority and derived confidence.");
|
|
45
61
|
if (evidence.predicate_type !== "rea.javascript-application-analysis")
|
|
46
|
-
throw
|
|
47
|
-
analyzeJavaScriptApplicationInputSchema.parse({
|
|
48
|
-
|
|
49
|
-
...evidence.parameters,
|
|
50
|
-
});
|
|
51
|
-
assertApplicationSubject(evidence, result);
|
|
62
|
+
throw invalidEvidence(path, "predicate_type", "JavaScript application Evidence predicate does not match its result shape.");
|
|
63
|
+
parseCallerValue((input) => analyzeJavaScriptApplicationInputSchema.parse(input), { input_path: result.input_path, ...evidence.parameters }, [...path, "parameters"]);
|
|
64
|
+
assertApplicationSubject(evidence, result, path);
|
|
52
65
|
return {
|
|
53
66
|
evidence,
|
|
54
67
|
graph: result.graph,
|
|
@@ -57,16 +70,17 @@ const staticApplicationSourceForResult = (evidence, result) => {
|
|
|
57
70
|
semanticGraph: result.semantic_graph,
|
|
58
71
|
};
|
|
59
72
|
};
|
|
60
|
-
const staticRuntimeSource = (evidence) => {
|
|
73
|
+
const staticRuntimeSource = (evidence, path) => {
|
|
61
74
|
if (evidence.authority !== "analyst-inference" ||
|
|
62
75
|
evidence.confidence !== "inferred")
|
|
63
|
-
throw
|
|
64
|
-
const result = javascriptRuntimeReconciliationResultSchema.parse(evidence.normalized_result);
|
|
65
|
-
|
|
66
|
-
|
|
76
|
+
throw invalidEvidence(path, "authority", "Runtime reconciliation Evidence must use analyst-inference authority and inferred confidence.");
|
|
77
|
+
const result = parseCallerValue((input) => javascriptRuntimeReconciliationResultSchema.parse(input), evidence.normalized_result, [...path, "normalized_result"]);
|
|
78
|
+
const unmatchedLink = result.evidence_links.find((evidenceId) => !evidence.evidence_links.includes(evidenceId));
|
|
79
|
+
if (unmatchedLink !== undefined)
|
|
80
|
+
throw invalidEvidence([...path, "normalized_result"], "evidence_links", `Runtime reconciliation result references Evidence ${unmatchedLink} outside its envelope.`);
|
|
67
81
|
const applicationLayer = result.static_layers.find(({ role }) => role === "application");
|
|
68
82
|
if (applicationLayer === undefined)
|
|
69
|
-
throw
|
|
83
|
+
throw invalidEvidence([...path, "normalized_result"], "static_layers", "Runtime reconciliation Evidence must include its application layer.");
|
|
70
84
|
return {
|
|
71
85
|
evidence,
|
|
72
86
|
graph: result.graph,
|
|
@@ -75,13 +89,14 @@ const staticRuntimeSource = (evidence) => {
|
|
|
75
89
|
semanticGraph: null,
|
|
76
90
|
};
|
|
77
91
|
};
|
|
78
|
-
const managedApplicationSource = (evidence) => {
|
|
92
|
+
const managedApplicationSource = (evidence, path) => {
|
|
79
93
|
if (evidence.authority !== "analyst-inference" ||
|
|
80
94
|
evidence.confidence !== "inferred")
|
|
81
|
-
throw
|
|
82
|
-
const result = managedApplicationGraphResultSchema.parse(evidence.normalized_result);
|
|
83
|
-
|
|
84
|
-
|
|
95
|
+
throw invalidEvidence(path, "authority", "Managed application graph Evidence must use analyst-inference authority and inferred confidence.");
|
|
96
|
+
const result = parseCallerValue((input) => managedApplicationGraphResultSchema.parse(input), evidence.normalized_result, [...path, "normalized_result"]);
|
|
97
|
+
const unmatchedLink = result.evidence_links.find((evidenceId) => !evidence.evidence_links.includes(evidenceId));
|
|
98
|
+
if (unmatchedLink !== undefined)
|
|
99
|
+
throw invalidEvidence([...path, "normalized_result"], "evidence_links", `Managed application graph result references Evidence ${unmatchedLink} outside its envelope.`);
|
|
85
100
|
return {
|
|
86
101
|
evidence,
|
|
87
102
|
graph: result.graph,
|
|
@@ -90,23 +105,69 @@ const managedApplicationSource = (evidence) => {
|
|
|
90
105
|
semanticGraph: null,
|
|
91
106
|
};
|
|
92
107
|
};
|
|
93
|
-
const assertApplicationSubject = (evidence, result) => {
|
|
108
|
+
const assertApplicationSubject = (evidence, result, path) => {
|
|
94
109
|
if (evidence.subject === null ||
|
|
95
110
|
evidence.subject.digest.sha256 !== result.root_artifact_sha256 ||
|
|
96
111
|
evidence.subject.format !== result.format ||
|
|
97
112
|
evidence.subject.local_path !== result.input_path)
|
|
98
|
-
throw
|
|
113
|
+
throw invalidEvidence(path, "subject", "JavaScript application Evidence subject must match the analyzed artifact identity and input path.");
|
|
99
114
|
};
|
|
100
115
|
const providerMatches = (evidence, provider) => evidence.provider.id === provider.id &&
|
|
101
116
|
evidence.provider.name === provider.name &&
|
|
102
117
|
evidence.provider.version === provider.version;
|
|
118
|
+
const requirePredicate = (evidence, expected, path) => {
|
|
119
|
+
if (evidence.predicate_type !== expected)
|
|
120
|
+
throw invalidEvidence(path, "predicate_type", `Expected predicate ${expected} for operation ${evidence.operation}.`);
|
|
121
|
+
};
|
|
122
|
+
const requireProvider = (evidence, expected, path) => {
|
|
123
|
+
if (!providerMatches(evidence, expected))
|
|
124
|
+
throw invalidEvidence(path, "provider", `Expected provider ${expected.id} v${expected.version} for operation ${evidence.operation}.`);
|
|
125
|
+
};
|
|
103
126
|
/** Parse unique, artifact-bound Evidence that may extend a native handoff. */
|
|
104
|
-
export const parseNativeApplicationEvidence = (inputs) => {
|
|
105
|
-
const parsed = inputs.map((input) =>
|
|
106
|
-
|
|
107
|
-
|
|
127
|
+
export const parseNativeApplicationEvidence = (inputs, path = []) => captureInputValidation(() => {
|
|
128
|
+
const parsed = inputs.map((input, index) => parseEvidenceInput(input, [...path, index]));
|
|
129
|
+
const withoutSubject = parsed.findIndex(({ subject }) => subject === null);
|
|
130
|
+
if (withoutSubject !== -1)
|
|
131
|
+
throw invalidEvidence([...path, withoutSubject], "subject", "Native handoff Evidence requires an artifact subject.");
|
|
108
132
|
const ids = parsed.map(({ evidence_id: id }) => id);
|
|
109
133
|
if (new Set(ids).size !== ids.length)
|
|
110
|
-
throw
|
|
134
|
+
throw invalidEvidence(path, "evidence_id", "Native handoff Evidence must be unique.");
|
|
111
135
|
return parsed;
|
|
136
|
+
});
|
|
137
|
+
const captureInputValidation = (operation) => {
|
|
138
|
+
try {
|
|
139
|
+
return ok(operation());
|
|
140
|
+
}
|
|
141
|
+
catch (cause) {
|
|
142
|
+
if (cause instanceof InvalidApplicationGraphEvidence)
|
|
143
|
+
return err({ issues: cause.issues });
|
|
144
|
+
throw cause;
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
const parseEvidenceInput = (input, path) => {
|
|
148
|
+
try {
|
|
149
|
+
return parseEvidence(input);
|
|
150
|
+
}
|
|
151
|
+
catch (cause) {
|
|
152
|
+
if (cause instanceof z.ZodError)
|
|
153
|
+
throw zodInputFailure(cause, input, path);
|
|
154
|
+
throw cause;
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
const parseCallerValue = (parse, input, path) => {
|
|
158
|
+
try {
|
|
159
|
+
return parse(input);
|
|
160
|
+
}
|
|
161
|
+
catch (cause) {
|
|
162
|
+
if (cause instanceof z.ZodError)
|
|
163
|
+
throw zodInputFailure(cause, input, path);
|
|
164
|
+
throw cause;
|
|
165
|
+
}
|
|
112
166
|
};
|
|
167
|
+
const zodInputFailure = (cause, input, path) => new InvalidApplicationGraphEvidence(projectInputIssues(cause.issues, input).map((issue) => ({
|
|
168
|
+
...issue,
|
|
169
|
+
path: [...path, ...issue.path],
|
|
170
|
+
})));
|
|
171
|
+
const invalidEvidence = (path, field, message) => new InvalidApplicationGraphEvidence([
|
|
172
|
+
{ path: [...path, field], reason: "invalid_value", message },
|
|
173
|
+
]);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { ArtifactReaderFailure } from "../../artifacts/ArtifactReader.js";
|
|
3
3
|
import { analyzeJavaScriptApplicationInputSchema, parseOwnedJavaScriptApplicationAnalysisSteps, } from "../../domain/javascript/javascriptApplicationAnalysis.js";
|
|
4
|
-
import { AnalysisOutputError } from "../../domain/analysisErrorCore.js";
|
|
4
|
+
import { AnalysisAccessDeniedError, AnalysisInputError, AnalysisOutputError, AnalysisUnsupportedTargetError, } from "../../domain/analysisErrorCore.js";
|
|
5
5
|
import { ArtifactOperationError } from "../../domain/artifactOperationError.js";
|
|
6
6
|
import {} from "../../domain/analysisErrorBase.js";
|
|
7
7
|
import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js";
|
|
@@ -33,6 +33,7 @@ export const analyzeJavaScriptApplicationValidated = async (input, options = {})
|
|
|
33
33
|
const reconstructed = await reconstructJavaScriptArtifact({
|
|
34
34
|
input_path: input.input_path,
|
|
35
35
|
format: input.format,
|
|
36
|
+
integrity_policy: input.integrity_policy,
|
|
36
37
|
}, options.signal, options.progress);
|
|
37
38
|
const { electron_summary: summary, ...application } = reconstructed;
|
|
38
39
|
await options.progress?.report({
|
|
@@ -67,6 +68,11 @@ export const analyzeJavaScriptApplicationValidated = async (input, options = {})
|
|
|
67
68
|
return ok(evidence);
|
|
68
69
|
}
|
|
69
70
|
catch (cause) {
|
|
71
|
+
// Input selection failures are already typed by their cause.
|
|
72
|
+
if (cause instanceof AnalysisInputError ||
|
|
73
|
+
cause instanceof AnalysisUnsupportedTargetError ||
|
|
74
|
+
cause instanceof AnalysisAccessDeniedError)
|
|
75
|
+
return err(cause);
|
|
70
76
|
if (cause instanceof ArtifactReaderFailure)
|
|
71
77
|
return err(new ArtifactOperationError(OPERATION, cause.reason, cause.details, cause.message));
|
|
72
78
|
if (cause instanceof z.ZodError)
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import {
|
|
2
|
+
import { AnalysisProtocolError } from "../../domain/analysisErrorCore.js";
|
|
3
3
|
import {} from "../../domain/analysisErrorBase.js";
|
|
4
4
|
import { analysisInputErrorFromIssues } from "../../domain/inputIssueProjection.js";
|
|
5
5
|
import { compareJavaScriptApplicationVersions } from "../../domain/javascript/javascriptApplicationVersionComparison.js";
|
|
6
|
-
import { compareApplicationVersionsInputSchema } from "../../domain/javascript/javascriptApplicationVersionComparisonSchemas.js";
|
|
6
|
+
import { compareApplicationVersionsInputSchema, applicationVersionIdentitiesSchema, } from "../../domain/javascript/javascriptApplicationVersionComparisonSchemas.js";
|
|
7
7
|
import { compareJavaScriptExportShapes } from "../../domain/javascript/javascriptExportShapeComparison.js";
|
|
8
|
-
import { compareJavaScriptExportShapesInputSchema } from "../../domain/javascript/javascriptExportShapeComparisonSchemas.js";
|
|
8
|
+
import { compareJavaScriptExportShapesInputSchema, javaScriptExportShapeIdentitiesSchema, } from "../../domain/javascript/javascriptExportShapeComparisonSchemas.js";
|
|
9
9
|
import { traceApplicationFeature } from "../../domain/javascript/javascriptFeatureTrace.js";
|
|
10
|
-
import { traceApplicationFeatureInputSchema } from "../../domain/javascript/javascriptFeatureTraceSchemas.js";
|
|
10
|
+
import { traceApplicationFeatureInputSchema, applicationTraceIdentitiesSchema, } from "../../domain/javascript/javascriptFeatureTraceSchemas.js";
|
|
11
11
|
import { err, ok } from "../../domain/result.js";
|
|
12
12
|
import { compareSourceToBundle } from "../../domain/javascript/sourceToBundleComparison.js";
|
|
13
13
|
import { compareSourceToBundleInputSchema } from "../../domain/javascript/sourceToBundleComparisonSchemas.js";
|
|
14
|
-
import { parseApplicationGraphEvidence, parseNativeApplicationEvidence, } from "./JavaScriptApplicationEvidenceGraph.js";
|
|
14
|
+
import { applicationGraphEvidenceInputError, parseApplicationGraphEvidence, parseNativeApplicationEvidence, } from "./JavaScriptApplicationEvidenceGraph.js";
|
|
15
15
|
import { createApplicationFeatureTraceEvidence, createApplicationVersionComparisonEvidence, createJavaScriptExportShapeComparisonEvidence, createSourceToBundleComparisonEvidence, } from "./JavaScriptApplicationWorkflowEvidence.js";
|
|
16
16
|
/** Authenticate Evidence and derive one bounded cross-layer feature trace. */
|
|
17
17
|
export const traceApplicationFeatureEvidence = (rawInput) => {
|
|
@@ -24,9 +24,20 @@ export const traceApplicationFeatureEvidence = (rawInput) => {
|
|
|
24
24
|
/** Derive one feature trace from input parsed by a trusted adapter. */
|
|
25
25
|
export const traceApplicationFeatureEvidenceValidated = (input) => {
|
|
26
26
|
const operation = "trace_application_feature";
|
|
27
|
+
const identities = applicationTraceIdentitiesSchema.safeParse(input);
|
|
28
|
+
if (!identities.success)
|
|
29
|
+
return err(analysisInputErrorFromIssues(operation, identities.error.issues, input));
|
|
30
|
+
const sourceResult = parseApplicationGraphEvidence(input.application, [
|
|
31
|
+
"application",
|
|
32
|
+
]);
|
|
33
|
+
if (!sourceResult.ok)
|
|
34
|
+
return err(applicationGraphEvidenceInputError(operation, sourceResult.error));
|
|
35
|
+
const nativeResult = parseNativeApplicationEvidence(input.native_observations, ["native_observations"]);
|
|
36
|
+
if (!nativeResult.ok)
|
|
37
|
+
return err(applicationGraphEvidenceInputError(operation, nativeResult.error));
|
|
27
38
|
try {
|
|
28
|
-
const source =
|
|
29
|
-
const nativeEvidence =
|
|
39
|
+
const source = sourceResult.value;
|
|
40
|
+
const nativeEvidence = nativeResult.value;
|
|
30
41
|
const result = traceApplicationFeature({
|
|
31
42
|
sourceEvidenceId: source.evidence.evidence_id,
|
|
32
43
|
graph: source.graph,
|
|
@@ -42,7 +53,7 @@ export const traceApplicationFeatureEvidenceValidated = (input) => {
|
|
|
42
53
|
}, result));
|
|
43
54
|
}
|
|
44
55
|
catch (cause) {
|
|
45
|
-
return workflowFailure(operation, cause
|
|
56
|
+
return workflowFailure(operation, cause);
|
|
46
57
|
}
|
|
47
58
|
};
|
|
48
59
|
/** Authenticate both graphs and derive a tiered cross-version change graph. */
|
|
@@ -56,11 +67,26 @@ export const compareApplicationVersionsEvidence = (rawInput) => {
|
|
|
56
67
|
/** Compare versions from input parsed by a trusted adapter. */
|
|
57
68
|
export const compareApplicationVersionsEvidenceValidated = (input) => {
|
|
58
69
|
const operation = "compare_application_versions";
|
|
70
|
+
const identities = applicationVersionIdentitiesSchema.safeParse(input);
|
|
71
|
+
if (!identities.success)
|
|
72
|
+
return err(analysisInputErrorFromIssues(operation, identities.error.issues, input));
|
|
73
|
+
const leftResult = parseApplicationGraphEvidence(input.left, ["left"]);
|
|
74
|
+
if (!leftResult.ok)
|
|
75
|
+
return err(applicationGraphEvidenceInputError(operation, leftResult.error));
|
|
76
|
+
const rightResult = parseApplicationGraphEvidence(input.right, ["right"]);
|
|
77
|
+
if (!rightResult.ok)
|
|
78
|
+
return err(applicationGraphEvidenceInputError(operation, rightResult.error));
|
|
79
|
+
const leftNativeResult = parseNativeApplicationEvidence(input.left_native_observations, ["left_native_observations"]);
|
|
80
|
+
if (!leftNativeResult.ok)
|
|
81
|
+
return err(applicationGraphEvidenceInputError(operation, leftNativeResult.error));
|
|
82
|
+
const rightNativeResult = parseNativeApplicationEvidence(input.right_native_observations, ["right_native_observations"]);
|
|
83
|
+
if (!rightNativeResult.ok)
|
|
84
|
+
return err(applicationGraphEvidenceInputError(operation, rightNativeResult.error));
|
|
59
85
|
try {
|
|
60
|
-
const left =
|
|
61
|
-
const right =
|
|
62
|
-
const leftNative =
|
|
63
|
-
const rightNative =
|
|
86
|
+
const left = leftResult.value;
|
|
87
|
+
const right = rightResult.value;
|
|
88
|
+
const leftNative = leftNativeResult.value;
|
|
89
|
+
const rightNative = rightNativeResult.value;
|
|
64
90
|
const result = compareJavaScriptApplicationVersions({
|
|
65
91
|
left: {
|
|
66
92
|
evidenceId: left.evidence.evidence_id,
|
|
@@ -83,14 +109,19 @@ export const compareApplicationVersionsEvidenceValidated = (input) => {
|
|
|
83
109
|
}, result));
|
|
84
110
|
}
|
|
85
111
|
catch (cause) {
|
|
86
|
-
return workflowFailure(operation, cause
|
|
112
|
+
return workflowFailure(operation, cause);
|
|
87
113
|
}
|
|
88
114
|
};
|
|
89
115
|
/** Compare source and bundle inputs already parsed by a trusted adapter. */
|
|
90
116
|
export const compareSourceToBundleEvidenceValidated = (input) => {
|
|
91
117
|
const operation = "compare_source_to_bundle";
|
|
118
|
+
const applicationResult = parseApplicationGraphEvidence(input.application, [
|
|
119
|
+
"application",
|
|
120
|
+
]);
|
|
121
|
+
if (!applicationResult.ok)
|
|
122
|
+
return err(applicationGraphEvidenceInputError(operation, applicationResult.error));
|
|
92
123
|
try {
|
|
93
|
-
const application =
|
|
124
|
+
const application = applicationResult.value;
|
|
94
125
|
const result = compareSourceToBundle({
|
|
95
126
|
reference: input.reference,
|
|
96
127
|
application: {
|
|
@@ -105,7 +136,7 @@ export const compareSourceToBundleEvidenceValidated = (input) => {
|
|
|
105
136
|
}, result));
|
|
106
137
|
}
|
|
107
138
|
catch (cause) {
|
|
108
|
-
return workflowFailure(operation, cause
|
|
139
|
+
return workflowFailure(operation, cause);
|
|
109
140
|
}
|
|
110
141
|
};
|
|
111
142
|
/**
|
|
@@ -122,9 +153,18 @@ export const compareJavaScriptExportShapesEvidence = (rawInput) => {
|
|
|
122
153
|
/** Compare exact export shapes from input parsed by a trusted adapter. */
|
|
123
154
|
export const compareJavaScriptExportShapesEvidenceValidated = (input) => {
|
|
124
155
|
const operation = "compare_javascript_export_shapes";
|
|
156
|
+
const identities = javaScriptExportShapeIdentitiesSchema.safeParse(input);
|
|
157
|
+
if (!identities.success)
|
|
158
|
+
return err(analysisInputErrorFromIssues(operation, identities.error.issues, input));
|
|
159
|
+
const leftResult = parseApplicationGraphEvidence(input.left, ["left"]);
|
|
160
|
+
if (!leftResult.ok)
|
|
161
|
+
return err(applicationGraphEvidenceInputError(operation, leftResult.error));
|
|
162
|
+
const rightResult = parseApplicationGraphEvidence(input.right, ["right"]);
|
|
163
|
+
if (!rightResult.ok)
|
|
164
|
+
return err(applicationGraphEvidenceInputError(operation, rightResult.error));
|
|
125
165
|
try {
|
|
126
|
-
const left =
|
|
127
|
-
const right =
|
|
166
|
+
const left = leftResult.value;
|
|
167
|
+
const right = rightResult.value;
|
|
128
168
|
const result = compareJavaScriptExportShapes({
|
|
129
169
|
left: {
|
|
130
170
|
evidenceId: left.evidence.evidence_id,
|
|
@@ -149,33 +189,7 @@ export const compareJavaScriptExportShapesEvidenceValidated = (input) => {
|
|
|
149
189
|
}, result));
|
|
150
190
|
}
|
|
151
191
|
catch (cause) {
|
|
152
|
-
return workflowFailure(operation, cause
|
|
192
|
+
return workflowFailure(operation, cause);
|
|
153
193
|
}
|
|
154
194
|
};
|
|
155
|
-
const workflowFailure = (operation, cause
|
|
156
|
-
? err(analysisInputErrorFromIssues(operation, cause.issues, input))
|
|
157
|
-
: cause instanceof TypeError &&
|
|
158
|
-
SAFE_APPLICATION_INPUT_CONSTRAINTS.has(cause.message)
|
|
159
|
-
? err(new AnalysisInputError(operation, undefined, [
|
|
160
|
-
{ path: [], reason: "invalid_value", message: cause.message },
|
|
161
|
-
]))
|
|
162
|
-
: err(new AnalysisProtocolError("JavaScript application workflow produced an invalid result", { cause }));
|
|
163
|
-
const SAFE_APPLICATION_INPUT_CONSTRAINTS = new Set([
|
|
164
|
-
"Evidence semantic identifier does not match its record",
|
|
165
|
-
"Application workflow requires authenticated analyze_javascript_application, reconcile_javascript_runtime, or project_managed_application_graph Evidence",
|
|
166
|
-
"JavaScript application Evidence authority or confidence is invalid",
|
|
167
|
-
"JavaScript application Evidence predicate does not match its result shape",
|
|
168
|
-
"JavaScript application Evidence subject does not match its result",
|
|
169
|
-
"Runtime reconciliation Evidence authority or confidence is invalid",
|
|
170
|
-
"Runtime reconciliation result references Evidence outside its envelope",
|
|
171
|
-
"Runtime reconciliation application layer is missing",
|
|
172
|
-
"Managed application graph Evidence authority or confidence is invalid",
|
|
173
|
-
"Managed application graph result references Evidence outside its envelope",
|
|
174
|
-
"Native handoff Evidence requires an artifact subject",
|
|
175
|
-
"Native handoff Evidence must be unique",
|
|
176
|
-
...[
|
|
177
|
-
"analyze_javascript_application",
|
|
178
|
-
"reconcile_javascript_runtime",
|
|
179
|
-
"project_managed_application_graph",
|
|
180
|
-
].map((operation) => `Evidence does not match the supported ${operation} contract`),
|
|
181
|
-
]);
|
|
195
|
+
const workflowFailure = (operation, cause) => err(new AnalysisProtocolError(`JavaScript application workflow failed while producing ${operation}`, { cause }));
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { setImmediate } from "node:timers/promises";
|
|
3
|
+
import { resolveJavaScriptSourceMapReference } from "../../domain/javascript/javascriptSourceMapPaths.js";
|
|
3
4
|
import { analyzeParsedJavaScriptStaticSource } from "../../domain/javascript/javascriptStaticAnalysis.js";
|
|
4
5
|
import { analyzeParsedJavaScriptSemantics, classifyParsedJavaScriptOpenReceivers, } from "../../domain/javascript/javascriptSemanticAnalysis.js";
|
|
5
6
|
import { parseJavaScriptSource } from "../../domain/javascript/javascriptSourceParser.js";
|
|
@@ -45,7 +46,6 @@ const analyzeArtifactFiles = (fileSet, projectSemantics) => {
|
|
|
45
46
|
return finalizeArtifactAnalysis(state);
|
|
46
47
|
};
|
|
47
48
|
const finalizeArtifactAnalysis = (state) => {
|
|
48
|
-
const truncatedScopes = state.truncatedScopes;
|
|
49
49
|
return {
|
|
50
50
|
files: state.files,
|
|
51
51
|
packages: state.packages,
|
|
@@ -56,13 +56,9 @@ const finalizeArtifactAnalysis = (state) => {
|
|
|
56
56
|
findings: state.findings + state.htmlScripts.length,
|
|
57
57
|
modules: state.modules,
|
|
58
58
|
parse_failures: state.parseFailures,
|
|
59
|
-
truncated_scopes: truncatedScopes,
|
|
60
59
|
limitations: [
|
|
61
60
|
"JavaScript and HTML were parsed as inert text; bundle bootstrap code was never executed.",
|
|
62
61
|
"Static paths and relationships may remain unresolved when expressions are dynamic or obfuscated.",
|
|
63
|
-
...(truncatedScopes === 0
|
|
64
|
-
? []
|
|
65
|
-
: ["Some static-analysis scopes were truncated."]),
|
|
66
62
|
],
|
|
67
63
|
};
|
|
68
64
|
};
|
|
@@ -117,7 +113,6 @@ const emptyArtifactAnalysis = () => ({
|
|
|
117
113
|
findings: 0,
|
|
118
114
|
modules: 0,
|
|
119
115
|
parseFailures: 0,
|
|
120
|
-
truncatedScopes: 0,
|
|
121
116
|
});
|
|
122
117
|
const addStructuredObservations = (file, state) => {
|
|
123
118
|
if (file.kind === "package-json")
|
|
@@ -203,14 +198,16 @@ const collectSourceMapOriginals = (file, maps) => {
|
|
|
203
198
|
const contents = map.sourcesContent;
|
|
204
199
|
if (!hasValidSourceMapContents(names.length, contents))
|
|
205
200
|
return invalidSourceMap(file, "Source map sourcesContent must contain one string or null entry per source.");
|
|
206
|
-
|
|
201
|
+
if (map.sourceRoot != null && typeof map.sourceRoot !== "string")
|
|
202
|
+
return invalidSourceMap(file, "Source map sourceRoot must be a string or null.");
|
|
203
|
+
const root = typeof map.sourceRoot === "string" ? map.sourceRoot : null;
|
|
207
204
|
for (const [index, raw] of names.entries()) {
|
|
208
205
|
if (typeof raw !== "string")
|
|
209
206
|
return invalidSourceMap(file, "Source map contains a non-string source name.");
|
|
210
207
|
const rawContent = Array.isArray(contents) ? contents[index] : undefined;
|
|
211
208
|
const content = typeof rawContent === "string" ? rawContent : null;
|
|
212
209
|
sources.push({
|
|
213
|
-
|
|
210
|
+
reference: resolveJavaScriptSourceMapReference(raw, root, file.path),
|
|
214
211
|
content,
|
|
215
212
|
content_sha256: content === null ? null : sha256(content),
|
|
216
213
|
});
|
|
@@ -266,7 +263,6 @@ const pointForOffset = (text, offset) => {
|
|
|
266
263
|
const lines = text.slice(0, offset).split(/\r\n|\r|\n/u);
|
|
267
264
|
return { line: lines.length, column: lines.at(-1)?.length ?? 0 };
|
|
268
265
|
};
|
|
269
|
-
const resolveSourceName = (root, source) => `${root}${root !== "" && !root.endsWith("/") ? "/" : ""}${source}`;
|
|
270
266
|
const optionalString = (value) => typeof value === "string" && value.length > 0 ? value : null;
|
|
271
267
|
const sha256 = (value) => createHash("sha256").update(value).digest("hex");
|
|
272
268
|
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { createJavaScriptApplicationGraph, createImmutableJavaScriptApplicationGraphSteps, } from "../../domain/javascript/javascriptApplicationGraph.js";
|
|
2
2
|
import { JavaScriptArtifactGraphAccumulator } from "./JavaScriptArtifactGraphAccumulator.js";
|
|
3
|
+
import { selfReferenceOmissions, } from "./JavaScriptArtifactGraphContext.js";
|
|
3
4
|
import { addJavaScriptHtmlRoles, addJavaScriptSourceMapOriginals, } from "./JavaScriptArtifactGraphDocuments.js";
|
|
4
5
|
import { addJavaScriptStaticFindings } from "./JavaScriptArtifactGraphFindings.js";
|
|
5
6
|
import { addJavaScriptModuleRelationships, addJavaScriptSourceModules, } from "./JavaScriptModuleRelationships.js";
|
|
6
7
|
import { completeApplicationCoverage, partialApplicationCoverage, } from "../../domain/javascript/javascriptApplicationEvidenceSchemas.js";
|
|
7
|
-
import { semanticCoverageResourceLimits } from "../../domain/javascript/javascriptSemanticCoverage.js";
|
|
8
|
-
import {
|
|
9
|
-
import { addJavaScriptArtifactContainers, addJavaScriptArtifactFiles,
|
|
8
|
+
import { semanticCoverageResourceLimits, semanticResourceLimitCoverage, } from "../../domain/javascript/javascriptSemanticCoverage.js";
|
|
9
|
+
import { semanticResourceLimitReason } from "../../domain/javascript/javascriptSemanticResourceLimits.js";
|
|
10
|
+
import { addJavaScriptArtifactContainers, addJavaScriptArtifactFiles, addJavaScriptPackageNodes, createJavaScriptArtifactRootNode, } from "./JavaScriptArtifactGraphStructure.js";
|
|
11
|
+
import { addJavaScriptBundlerNodes } from "./JavaScriptArtifactGraphBundlers.js";
|
|
10
12
|
import { addElectronBoundaries } from "./ElectronBoundaryGraph.js";
|
|
11
13
|
import { classifyElectronIpcPairings, collectElectronIpcRecords, } from "./ElectronBoundaryAnalysis.js";
|
|
12
14
|
/** Project artifact and AST facts into JavaScript Application Graph. */
|
|
@@ -34,9 +36,9 @@ const buildJavaScriptArtifactGraphInput = (snapshot, fileSet, analysis) => {
|
|
|
34
36
|
addJavaScriptArtifactFiles(context);
|
|
35
37
|
const packageRoots = addJavaScriptPackageNodes(context);
|
|
36
38
|
addJavaScriptSourceModules(context);
|
|
37
|
-
addJavaScriptBundlerNodes(context);
|
|
39
|
+
const bundlerLimitations = addJavaScriptBundlerNodes(context);
|
|
38
40
|
const relationshipOmissions = addJavaScriptModuleRelationships(context);
|
|
39
|
-
addJavaScriptStaticFindings(context);
|
|
41
|
+
const findingLimitations = addJavaScriptStaticFindings(context);
|
|
40
42
|
addElectronBoundaries(context);
|
|
41
43
|
addJavaScriptHtmlRoles(context);
|
|
42
44
|
addJavaScriptSourceMapOriginals(context);
|
|
@@ -49,7 +51,11 @@ const buildJavaScriptArtifactGraphInput = (snapshot, fileSet, analysis) => {
|
|
|
49
51
|
nodes: accumulator.nodes(),
|
|
50
52
|
edges: accumulator.edges(),
|
|
51
53
|
coverage,
|
|
52
|
-
limitations:
|
|
54
|
+
limitations: [
|
|
55
|
+
...bundlerLimitations,
|
|
56
|
+
...findingLimitations,
|
|
57
|
+
...graphLimitations(context, coverage.status, relationshipOmissions),
|
|
58
|
+
],
|
|
53
59
|
};
|
|
54
60
|
};
|
|
55
61
|
const graphCoverage = (context) => {
|
|
@@ -64,12 +70,14 @@ const graphCoverage = (context) => {
|
|
|
64
70
|
sourceMapPolicyGap ||
|
|
65
71
|
malformedStructuredData ||
|
|
66
72
|
partialJavaScript;
|
|
67
|
-
if (context.analysis.truncated_scopes > 0)
|
|
68
|
-
return partialApplicationCoverage([], null);
|
|
69
73
|
if (resourceLimits.length > 0)
|
|
70
|
-
return partialApplicationCoverage(resourceLimits
|
|
74
|
+
return partialApplicationCoverage(semanticResourceLimitCoverage(resourceLimits), null);
|
|
71
75
|
if (unknownGap)
|
|
72
76
|
return partialApplicationCoverage([], null);
|
|
77
|
+
if (context.snapshot.integrity_contradictions.length > 0) {
|
|
78
|
+
const nestedArchiveWasOpaque = context.snapshot.integrity_contradictions.some(({ logical_path }) => logical_path.toLowerCase().endsWith(".asar"));
|
|
79
|
+
return partialApplicationCoverage([], nestedArchiveWasOpaque ? null : 0);
|
|
80
|
+
}
|
|
73
81
|
return completeApplicationCoverage();
|
|
74
82
|
};
|
|
75
83
|
const semanticResourceLimits = (context) => [
|
|
@@ -77,19 +85,6 @@ const semanticResourceLimits = (context) => [
|
|
|
77
85
|
? []
|
|
78
86
|
: semanticCoverageResourceLimits(semantic.ir.coverage))),
|
|
79
87
|
].sort();
|
|
80
|
-
const applicationGraphResourceLimit = (resourceLimit) => ({
|
|
81
|
-
name: `javascript_semantic_${resourceLimit.replaceAll("-", "_")}`,
|
|
82
|
-
value: resourceLimit === "primitive-candidates"
|
|
83
|
-
? SEMANTIC_PRIMITIVE_CANDIDATE_LIMIT
|
|
84
|
-
: resourceLimit === "primitive-bytes"
|
|
85
|
-
? SEMANTIC_PRIMITIVE_JSON_BYTES_LIMIT
|
|
86
|
-
: SEMANTIC_EXPRESSION_DEPTH_LIMIT,
|
|
87
|
-
unit: resourceLimit === "expression-depth"
|
|
88
|
-
? "depth"
|
|
89
|
-
: resourceLimit === "primitive-bytes"
|
|
90
|
-
? "bytes"
|
|
91
|
-
: "items",
|
|
92
|
-
});
|
|
93
88
|
const graphLimitations = (context, coverage, relationshipOmissions) => {
|
|
94
89
|
const ipc = collectElectronIpcRecords(context.analysis);
|
|
95
90
|
const pairings = classifyElectronIpcPairings(ipc);
|
|
@@ -104,11 +99,8 @@ const graphLimitations = (context, coverage, relationshipOmissions) => {
|
|
|
104
99
|
javascript.electron.native_addon_bindings.length), 0);
|
|
105
100
|
return [
|
|
106
101
|
...context.analysis.limitations,
|
|
107
|
-
...(
|
|
108
|
-
|
|
109
|
-
`${String(relationshipOmissions.selfImports)} import ${relationshipOmissions.selfImports === 1 ? "specifier" : "specifiers"} resolved back to the importing module itself and ${relationshipOmissions.selfImports === 1 ? "was" : "were"} omitted; application graph edges cannot be self-referential.`,
|
|
110
|
-
]
|
|
111
|
-
: []),
|
|
102
|
+
...context.snapshot.integrity_contradictions.map(({ logical_path: path }) => `Artifact integrity metadata contradicts observed bytes at ${path}; the observed bytes are untrusted.`),
|
|
103
|
+
...selfReferenceOmissions(relationshipOmissions.selfImports, ["import specifier", "import specifiers"], "the importing module"),
|
|
112
104
|
"CommonJS and ESM binding relationships were recovered from inert syntax and resolved only within the inventoried artifact container.",
|
|
113
105
|
"Webpack/Rspack factories were recovered from AST literals; REA did not invoke push handlers or bundle bootstrap code.",
|
|
114
106
|
"Static imports, entrypoints, workers, endpoints, and storage relationships do not prove runtime execution.",
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { addAstContainsEdge, artifactLocalIdentity, chunkLookupKey, javascriptAnalysisCoverage, moduleLookupKey, } from "./JavaScriptArtifactGraphContext.js";
|
|
1
|
+
import { addAstContainsEdge, artifactLocalIdentity, chunkLookupKey, javascriptAnalysisCoverage, moduleLookupKey, selfReferenceOmissions, } from "./JavaScriptArtifactGraphContext.js";
|
|
2
2
|
import { astObservationEvidence, staticInferenceEvidence, } from "./JavaScriptArtifactGraphEvidence.js";
|
|
3
|
-
/** Project Webpack/Rspack
|
|
3
|
+
/** Project Webpack/Rspack AST literals and disclose unrepresentable relationships. */
|
|
4
4
|
export const addJavaScriptBundlerNodes = (context) => {
|
|
5
|
+
let selfAsyncChunks = 0;
|
|
5
6
|
for (const analyzed of context.analysis.files) {
|
|
6
7
|
const { file, javascript } = analyzed;
|
|
7
8
|
const asset = context.assetNodes.get(file.path);
|
|
@@ -31,8 +32,9 @@ export const addJavaScriptBundlerNodes = (context) => {
|
|
|
31
32
|
addBundlerModuleNodes(context, { ...input, chunk });
|
|
32
33
|
}
|
|
33
34
|
for (const record of records)
|
|
34
|
-
addBundlerRuntimeEdges(context, record);
|
|
35
|
+
selfAsyncChunks += addBundlerRuntimeEdges(context, record);
|
|
35
36
|
}
|
|
37
|
+
return selfReferenceOmissions(selfAsyncChunks, ["bundler async-chunk reference", "bundler async-chunk references"], "the requesting chunk");
|
|
36
38
|
};
|
|
37
39
|
const createBundlerChunkNode = (context, input) => {
|
|
38
40
|
const { file, registration, coverage, limitations } = input;
|
|
@@ -119,6 +121,7 @@ const addBundlerModuleNodes = (context, input) => {
|
|
|
119
121
|
}
|
|
120
122
|
};
|
|
121
123
|
const addBundlerRuntimeEdges = (context, record) => {
|
|
124
|
+
let selfAsyncChunks = 0;
|
|
122
125
|
const { file, registration, chunk, coverage } = record;
|
|
123
126
|
for (const moduleKey of registration.entry_module_keys) {
|
|
124
127
|
const resolved = context.moduleNodes.get(moduleLookupKey(file.path, moduleKey));
|
|
@@ -147,6 +150,10 @@ const addBundlerRuntimeEdges = (context, record) => {
|
|
|
147
150
|
for (const chunkKey of registration.async_chunk_keys) {
|
|
148
151
|
const lookup = chunkLookupKey(file.path, registration.runtime, chunkKey);
|
|
149
152
|
const resolved = context.chunkNodes.get(lookup);
|
|
153
|
+
if (resolved?.node_id === chunk.node_id) {
|
|
154
|
+
selfAsyncChunks++;
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
150
157
|
const target = resolved ?? unresolvedBundlerChunkNode(context, record, chunkKey);
|
|
151
158
|
context.accumulator.addEdge({
|
|
152
159
|
source_node_id: chunk.node_id,
|
|
@@ -169,6 +176,7 @@ const addBundlerRuntimeEdges = (context, record) => {
|
|
|
169
176
|
}),
|
|
170
177
|
});
|
|
171
178
|
}
|
|
179
|
+
return selfAsyncChunks;
|
|
172
180
|
};
|
|
173
181
|
const unresolvedBundlerModuleNode = (context, record, moduleKey) => context.accumulator.addNode({
|
|
174
182
|
kind: "javascript-module",
|