rea-agents 6.2.0 → 6.4.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 -23
- package/bridge/ghidra/ReaGhidraApplySeeds.java +151 -0
- package/bridge/ghidra/ReaGhidraBridge.java +597 -209
- package/bridge/ghidra/ReaGhidraNoReturnFix.java +123 -0
- package/bridge/hopper_bridge.py +2 -0
- package/dist/adb/AdbConfiguration.js +88 -0
- package/dist/adb/AdbDeviceOutput.js +186 -0
- package/dist/adb/AdbProvider.js +1190 -0
- package/dist/adb/AdbShellOutput.js +309 -0
- package/dist/android/AndroidTargetSnapshot.js +104 -22
- package/dist/android/JadxConfiguration.js +44 -24
- package/dist/android/JadxProvider.js +59 -21
- package/dist/android/JadxSession.js +51 -9
- package/dist/apktool/ApktoolConfiguration.js +84 -0
- package/dist/apktool/ApktoolDecodeOutput.js +59 -0
- package/dist/apktool/ApktoolProvider.js +506 -0
- package/dist/application/AnalysisProvider.js +8 -2
- package/dist/application/AppBundleExecutable.js +27 -22
- package/dist/application/BinaryTargetResolver.js +85 -19
- package/dist/application/BrowserScenarioEvidence.js +2 -2
- package/dist/application/CapabilityInventory.js +11 -1
- package/dist/application/ClientConfigurationDocument.js +98 -0
- package/dist/application/ClientConfigurationFiles.js +91 -0
- package/dist/application/ClientRegistrationEnvironment.js +35 -0
- package/dist/application/ClientRegistrationStatus.js +75 -27
- package/dist/application/DirectAnalysis.js +14 -8
- package/dist/application/DirectAnalysisCleanup.js +1 -2
- package/dist/application/DirectAnalysisStatus.js +3 -6
- package/dist/application/Doctor.js +27 -34
- package/dist/application/DoctorDiagnostics.js +1 -1
- package/dist/application/EvidenceBundleCommands.js +6 -12
- package/dist/application/EvidenceBundleFiles.js +1 -1
- package/dist/application/GeminiClientSettings.js +139 -0
- package/dist/application/HermesClientHome.js +115 -0
- package/dist/application/HopperDownload.js +39 -0
- package/dist/application/InvestigationProviders.js +10 -4
- package/dist/application/JsonFiles.js +16 -15
- package/dist/application/JsonInputFile.js +252 -0
- package/dist/application/LinuxHopper.js +6 -13
- package/dist/application/MacHopper.js +172 -149
- package/dist/application/MipsElfAbiFlags.js +140 -0
- package/dist/application/ProviderOperationExecution.js +31 -0
- package/dist/application/ReconstructionObligationCandidates.js +16 -3
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
- package/dist/application/ReferenceSourceImport.js +76 -29
- package/dist/application/ReferenceSourceImportEntries.js +18 -9
- package/dist/application/ReferenceSourceImportPolicy.js +99 -23
- package/dist/application/ReferenceSourceImportTypes.js +30 -22
- package/dist/application/ReferenceSourceVcsAdapter.js +145 -30
- package/dist/application/RegularFileRead.js +103 -0
- package/dist/application/Setup.js +69 -10
- package/dist/application/SetupClientConfiguration.js +134 -23
- package/dist/application/SetupHost.js +102 -22
- package/dist/application/SetupPlan.js +18 -17
- package/dist/application/SetupSkill.js +81 -13
- package/dist/application/SupportedClients.js +305 -37
- package/dist/application/Uninstall.js +172 -8
- package/dist/application/UpdateMaintenance.js +23 -23
- package/dist/application/Utf8JsonInput.js +71 -0
- package/dist/application/WebScriptExportService.js +130 -57
- package/dist/application/WebSourceLocationService.js +3 -0
- package/dist/application/adb/AdbDeviceAnalysisPort.js +1 -0
- package/dist/application/adb/AdbDeviceAnalysisService.js +13 -0
- package/dist/application/analysisView/AnalysisViewService.js +40 -2
- package/dist/application/android/AndroidAnalysisService.js +1 -1
- package/dist/application/apktool/ApktoolResourceAnalysisPort.js +1 -0
- package/dist/application/apktool/ApktoolResourceAnalysisService.js +13 -0
- package/dist/application/binary/AnalysisClientCleanup.js +0 -24
- package/dist/application/binary/AnalysisSnapshotCache.js +5 -4
- package/dist/application/binary/BinarySession.js +18 -1
- package/dist/application/binary/BinarySessionOpen.js +9 -1
- package/dist/application/binaryDiagnostics/BinaryLayoutService.js +2 -1
- package/dist/application/binaryDiagnostics/PeResourcesPort.js +1 -0
- package/dist/application/binaryDiagnostics/PeResourcesService.js +111 -0
- package/dist/application/binaryDiagnostics/RecordedCrashService.js +2 -1
- package/dist/application/evm/EvmInterfaceService.js +3 -0
- package/dist/application/firmware/FirmwareAnalysisService.js +3 -0
- package/dist/application/investigation/InspectEvidenceBundle.js +18 -0
- package/dist/application/javascript/ElectronActiveEvidence.js +2 -2
- package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
- package/dist/application/javascript/ElectronBoundaryGraphContext.js +3 -2
- package/dist/application/javascript/ElectronBoundaryGraphIpc.js +2 -2
- package/dist/application/javascript/ElectronBoundaryGraphNative.js +20 -3
- package/dist/application/javascript/ElectronBoundaryGraphWindows.js +3 -3
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +1 -0
- package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
- package/dist/application/javascript/JavaScriptApplicationService.js +23 -11
- package/dist/application/javascript/JavaScriptApplicationWorkflowEvidence.js +5 -6
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +171 -36
- package/dist/application/javascript/JavaScriptArtifactGraphAccumulator.js +14 -16
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +74 -36
- package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +4 -3
- package/dist/application/javascript/JavaScriptArtifactGraphContext.js +11 -5
- package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +53 -42
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +92 -10
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +293 -238
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +120 -28
- package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +4 -0
- package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
- package/dist/application/javascript/JavaScriptModuleRelationships.js +10 -20
- package/dist/application/javascript/JavaScriptRecoveryService.js +3 -0
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +11 -5
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +206 -66
- package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +18 -23
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +5 -2
- package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +7 -5
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +6 -4
- package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
- package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +29 -15
- package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
- package/dist/application/jeb/JebAnalysisPort.js +1 -0
- package/dist/application/jeb/JebAnalysisService.js +13 -0
- package/dist/application/managed/ManagedApplicationGraphService.js +1 -1
- package/dist/application/native/NativeCallRoutes.js +2 -4
- package/dist/application/native/NativeUiActionTrace.js +16 -8
- package/dist/application/native/NativeValueTrace.js +23 -6
- package/dist/application/process/ProcessCli.js +25 -20
- package/dist/artifacts/ArtifactPaths.js +129 -8
- package/dist/artifacts/ArtifactProvider.js +34 -31
- package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
- package/dist/artifacts/ArtifactReader.js +23 -0
- package/dist/artifacts/ArtifactResourceScope.js +100 -0
- package/dist/artifacts/AsarArtifactReader.js +218 -80
- package/dist/artifacts/AsarHeader.js +24 -0
- package/dist/artifacts/DirectoryArtifactReader.js +168 -65
- package/dist/artifacts/MachOSliceArtifactReader.js +116 -39
- package/dist/artifacts/NativeDmgArtifactReader.js +179 -87
- package/dist/artifacts/NativeDmgOwnership.js +109 -0
- package/dist/artifacts/SafeOutputTree.js +245 -70
- package/dist/artifacts/SafeOutputTreeCleanup.js +45 -0
- package/dist/artifacts/SafeOutputTreeCreationFailure.js +20 -0
- package/dist/artifacts/SafeOutputTreeIdentity.js +42 -0
- package/dist/artifacts/SafeOutputTreeReadback.js +33 -0
- package/dist/artifacts/ZipArtifactReader.js +77 -27
- package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +58 -18
- package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +62 -24
- package/dist/artifacts/apple/KeyedArchiveReader.js +76 -49
- package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
- package/dist/artifacts/extraction/ArtifactExtraction.js +134 -92
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +116 -50
- package/dist/artifacts/inventory/ArtifactInventory.js +5 -4
- package/dist/artifacts/inventory/classify.js +87 -25
- package/dist/artifacts/inventory/hashStableRootArtifact.js +70 -0
- package/dist/artifacts/inventory/reader.js +13 -5
- package/dist/artifacts/inventory/scanCanonical.js +73 -30
- package/dist/artifacts/inventory/scanReader.js +43 -20
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +72 -28
- package/dist/artifacts/javascript/JavaScriptSourceAnalysis.js +3 -0
- package/dist/browser/BrowserScenarioPartialObservation.js +8 -2
- package/dist/browser/BrowserScenarioSecrets.js +52 -37
- package/dist/browser/CdpBrowserProvider.js +9 -3
- package/dist/browser/CdpCaptureDocuments.js +40 -6
- package/dist/browser/CdpCaptureDomSvg.js +210 -0
- package/dist/browser/CdpCaptureEventBodyShapes.js +4 -8
- package/dist/browser/CdpCaptureEventHandlers.js +26 -9
- package/dist/browser/CdpCaptureEvents.js +4 -9
- package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
- package/dist/browser/CdpConnection.js +22 -5
- package/dist/browser/CdpElectronInspection.js +2 -2
- package/dist/browser/CdpElectronProvider.js +4 -3
- package/dist/browser/CdpElectronScripts.js +2 -2
- package/dist/browser/CdpPageCapture.js +1 -1
- package/dist/browser/CdpTargetSession.js +30 -34
- package/dist/browser/CdpWebMcpDiscovery.js +48 -23
- package/dist/browser/ElectronFileScope.js +99 -9
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +63 -7
- package/dist/browser/PlaywrightElectronActiveProvider.js +11 -6
- package/dist/browser/PlaywrightScenarioArtifacts.js +5 -5
- package/dist/browser/PlaywrightScenarioBrowser.js +208 -43
- package/dist/browser/PlaywrightScenarioSession.js +130 -65
- package/dist/browser/PlaywrightScenarioStorage.js +507 -0
- package/dist/browser/PngVisualDiff.js +198 -29
- package/dist/browser/WebSourceMapFetcher.js +35 -9
- package/dist/browser/assets/LocalWebScriptArtifacts.js +3 -1
- package/dist/browser/assets/PublishWebScripts.js +75 -20
- package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
- package/dist/browser/assets/WebArtifactReads.js +23 -1
- package/dist/browser/assets/WebSourceLocationArtifacts.js +1 -0
- package/dist/browser/execution/CdpExecutionCapture.js +3 -3
- package/dist/browser/execution/CdpPreciseCoverage.js +5 -8
- package/dist/browser/history/HarCapture.js +14 -0
- package/dist/browser/history/HarCaptureProcess.js +2 -10
- package/dist/browser/history/MitmproxyCaptureAdapter.js +3 -1
- package/dist/browser/modules/WebModuleArtifacts.js +1 -0
- package/dist/cli/adbCommands.js +337 -0
- package/dist/cli/analysisViewCommands.js +39 -1
- package/dist/cli/apktoolCommands.js +53 -0
- package/dist/cli/artifactCommands.js +8 -11
- package/dist/cli/binaryDiagnosticsCommands.js +19 -1
- package/dist/cli/browserAdvancedCommands.js +65 -36
- package/dist/cli/coreAnalysisCommands.js +2 -2
- package/dist/cli/coreBinaryCommands.js +12 -13
- package/dist/cli/coreNativeCommands.js +1 -14
- package/dist/cli/electronCommands.js +14 -10
- package/dist/cli/evmCommands.js +13 -4
- package/dist/cli/firmwareCommands.js +7 -2
- package/dist/cli/javascriptApplicationAnalysis.js +19 -13
- package/dist/cli/javascriptRecoveryCommands.js +22 -15
- package/dist/cli/jebCommands.js +99 -0
- package/dist/cli/jsonOutput.js +12 -4
- package/dist/cli/referenceSourceImportStatus.js +7 -0
- package/dist/cli/setupCommands.js +15 -3
- package/dist/cli/streamedJsonOutput.js +83 -4
- package/dist/cli/utilityCommands.js +68 -22
- package/dist/cli/webScriptCommands.js +20 -1
- package/dist/cli/webSourceLocationCommands.js +21 -9
- package/dist/cli.js +11 -2
- package/dist/cliBrowserScenarioCommands.js +2 -1
- package/dist/cliCommandNames.js +32 -0
- package/dist/cliJsonInput.js +47 -34
- package/dist/cliObservationOptions.js +7 -0
- package/dist/composition/adb.js +3 -0
- package/dist/composition/apktool.js +3 -0
- package/dist/composition/auxiliaryAnalysisProviders.js +5 -4
- package/dist/composition/binaryDiagnostics.js +4 -0
- package/dist/composition/browserScenario.js +2 -2
- package/dist/composition/directAnalysis.js +14 -7
- package/dist/composition/javascriptAnalysisWorkerProcess.js +48 -0
- package/dist/composition/jeb.js +6 -0
- package/dist/config/environment.js +10 -0
- package/dist/config/ghidraLanguageOverride.js +9 -0
- package/dist/config/mcpInputSchemaProfile.js +27 -0
- package/dist/config/parseConfig.js +28 -1
- package/dist/contracts/adb/adbToolContracts.js +353 -0
- package/dist/contracts/advertisedInputExamples.js +48 -0
- package/dist/contracts/analysisDetail.js +10 -0
- package/dist/contracts/analysisViewToolContracts.js +17 -2
- package/dist/contracts/apktool/apktoolToolContracts.js +33 -0
- package/dist/contracts/artifactComparisonExample.js +5 -5
- package/dist/contracts/artifactToolContracts.js +8 -5
- package/dist/contracts/browserToolContracts.js +1 -1
- package/dist/contracts/compactInputSchema.js +256 -0
- package/dist/contracts/errorSchemas.js +3 -1
- package/dist/contracts/functionComparisonExample.js +8 -0
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/inputSchemaPresentation.js +104 -13
- package/dist/contracts/javascript/electronToolContracts.js +16 -3
- package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -2
- package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +6 -3
- package/dist/contracts/javascript/javascriptRecoveryToolContracts.js +1 -1
- package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
- package/dist/contracts/jeb/jebToolContracts.js +64 -0
- package/dist/contracts/managed/managedToolContracts.js +3 -2
- package/dist/contracts/mobileApplicationGraphExamples.js +5 -5
- package/dist/contracts/native/binaryDiagnosticsToolContracts.js +25 -3
- package/dist/contracts/native/nativeToolContracts.js +1 -1
- package/dist/contracts/officialToolContracts.js +5 -5
- package/dist/contracts/sessionLifecycleInputs.js +4 -3
- package/dist/contracts/sessionStatusContract.js +3 -2
- package/dist/contracts/sessionToolContracts.js +5 -4
- package/dist/contracts/sessionToolSchemas.js +9 -4
- package/dist/contracts/toolContractExamples.js +6 -0
- package/dist/contracts/toolContractTypes.js +3 -0
- package/dist/contracts/toolContracts.js +6 -0
- package/dist/contracts/toolEffects.js +167 -0
- package/dist/contracts/toolOutputSchemaGroups.js +7 -5
- package/dist/contracts/toolOutputSchemaPrimitives.js +2 -5
- package/dist/contracts/toolSchemaMetadata.js +82 -7
- package/dist/domain/adb/adbDeviceAnalysis.js +583 -0
- package/dist/domain/analysisErrorBase.js +5 -0
- package/dist/domain/analysisErrorCleanup.js +29 -0
- package/dist/domain/analysisErrorPresentation.js +18 -4
- package/dist/domain/analysisErrorProjection.js +4 -1
- package/dist/domain/analysisSnapshot.js +5 -2
- package/dist/domain/analysisView/analysisView.js +53 -5
- package/dist/domain/analysisView/binaryLayoutView.js +2 -0
- package/dist/domain/analysisView/javascriptApplicationView.js +2 -0
- package/dist/domain/analysisView/nativeFunctionView.js +155 -0
- package/dist/domain/android/androidApplication.js +25 -20
- package/dist/domain/android/androidPartialObservation.js +36 -0
- package/dist/domain/apktool/apktoolResourceAnalysis.js +77 -0
- package/dist/domain/apple/appleApplication.js +40 -23
- package/dist/domain/apple/appleBundleAnatomy.js +95 -28
- package/dist/domain/apple/dyldPaths.js +9 -1
- package/dist/domain/apple/dylibResolution.js +3 -3
- package/dist/domain/apple/interfaceBuilderGraph.js +22 -19
- package/dist/domain/apple/interfaceBuilderKeyedArchive.js +10 -1
- package/dist/domain/artifactComparison.js +39 -11
- package/dist/domain/artifactGraph.js +6 -4
- package/dist/domain/artifactIdentity.js +37 -9
- package/dist/domain/artifactInspection.js +10 -50
- package/dist/domain/artifactIntegrityPolicy.js +10 -0
- package/dist/domain/artifactInventoryEvidence.js +16 -17
- package/dist/domain/artifactPathSyntax.js +1 -1
- package/dist/domain/binaryTarget.js +16 -0
- package/dist/domain/binaryTargetTypes.js +8 -1
- package/dist/domain/browserCompleteness.js +3 -2
- package/dist/domain/browserObservationSchemas.js +8 -4
- package/dist/domain/browserScenarioCaptureValues.js +2 -2
- package/dist/domain/browserScenarioNormalization.js +3 -3
- package/dist/domain/browserScenarioValues.js +3 -2
- package/dist/domain/callPath.js +8 -10
- package/dist/domain/canonicalDigest.js +7 -1
- package/dist/domain/canonicalJsonDigestSteps.js +34 -12
- package/dist/domain/canonicalOrdering.js +1 -13
- package/dist/domain/changedBehavior.js +2 -3
- package/dist/domain/compactStringIdentity.js +9 -0
- package/dist/domain/comparisonSemantics.js +0 -5
- package/dist/domain/digests.js +0 -3
- package/dist/domain/evidence.js +12 -6
- package/dist/domain/evidenceBundle.js +51 -33
- package/dist/domain/evidenceRecordSummary.js +144 -0
- package/dist/domain/firmware/firmwareAnalysis.js +4 -3
- package/dist/domain/functionComparison.js +2 -1
- package/dist/domain/functionComparisonNormalization.js +4 -3
- package/dist/domain/functionComparisonResults.js +2 -2
- package/dist/domain/functionDossierEvidence.js +2 -1
- package/dist/domain/hopperValues.js +11 -15
- package/dist/domain/inputIssueProjection.js +16 -1
- package/dist/domain/javascript/electronActiveObservation.js +4 -3
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +14 -15
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +20 -21
- package/dist/domain/javascript/electronStaticAnalysisNative.js +73 -41
- package/dist/domain/javascript/electronStaticAnalysisValues.js +24 -4
- package/dist/domain/javascript/javascriptAnalysisResourceControls.js +45 -0
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +6 -1
- package/dist/domain/javascript/javascriptApplicationChangeGraph.js +18 -14
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +4 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +91 -28
- package/dist/domain/javascript/javascriptApplicationProjectionResources.js +35 -0
- package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
- package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +72 -45
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +16 -8
- package/dist/domain/javascript/javascriptAstFingerprint.js +60 -33
- package/dist/domain/javascript/javascriptAstValues.js +54 -0
- package/dist/domain/javascript/javascriptElectronMemberWrites.js +50 -0
- package/dist/domain/javascript/javascriptExportShapeComparison.js +3 -2
- package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +31 -23
- package/dist/domain/javascript/javascriptExportShapeSelection.js +2 -2
- package/dist/domain/javascript/javascriptExportShapeVariants.js +3 -2
- package/dist/domain/javascript/javascriptFeatureSeed.js +5 -3
- package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
- package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
- package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -4
- package/dist/domain/javascript/javascriptModuleSemanticIr.js +15 -0
- package/dist/domain/javascript/javascriptNativeHandoff.js +12 -7
- package/dist/domain/javascript/javascriptRpcEndpoints.js +253 -0
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +1 -3
- package/dist/domain/javascript/javascriptRuntimeObservation.js +8 -5
- 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 +12 -6
- package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
- package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +5 -5
- package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -223
- 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 +15 -17
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +379 -30
- package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
- package/dist/domain/javascript/javascriptSemanticCallableResults.js +42 -0
- package/dist/domain/javascript/javascriptSemanticCalls.js +8 -1
- package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -2
- 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/javascriptSemanticDerivedAnalysis.js +15 -4
- package/dist/domain/javascript/javascriptSemanticFileProjection.js +1 -0
- package/dist/domain/javascript/javascriptSemanticFingerprints.js +43 -42
- package/dist/domain/javascript/javascriptSemanticGraph.js +205 -52
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +21 -11
- package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
- package/dist/domain/javascript/javascriptSemanticIterationSources.js +139 -0
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +774 -136
- package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +98 -41
- package/dist/domain/javascript/javascriptSemanticObjectReferences.js +381 -0
- package/dist/domain/javascript/javascriptSemanticObjects.js +9 -7
- package/dist/domain/javascript/javascriptSemanticPrimitives.js +7 -2
- package/dist/domain/javascript/javascriptSemanticProjection.js +72 -28
- package/dist/domain/javascript/javascriptSemanticPromises.js +15 -21
- package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +100 -0
- package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
- package/dist/domain/javascript/javascriptSemanticQuery.js +33 -29
- package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +4 -5
- package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
- package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
- package/dist/domain/javascript/javascriptSemanticReturnedReferences.js +219 -0
- package/dist/domain/javascript/javascriptSemanticReturns.js +34 -48
- package/dist/domain/javascript/javascriptSemanticState.js +22 -2
- package/dist/domain/javascript/javascriptSemanticTraversal.js +25 -2
- package/dist/domain/javascript/javascriptSemanticValues.js +169 -30
- package/dist/domain/javascript/javascriptSourceAnalysis.js +1 -0
- package/dist/domain/javascript/javascriptSourceMapPaths.js +11 -1
- package/dist/domain/javascript/javascriptSourceParser.js +34 -9
- package/dist/domain/javascript/javascriptStaticAnalysis.js +29 -17
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +13 -12
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +49 -5
- package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +8 -4
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -15
- package/dist/domain/javascript/javascriptStaticAnalysisState.js +1 -0
- package/dist/domain/javascript/sourceToBundleComparison.js +7 -5
- package/dist/domain/javascript/sourceToBundleSignals.js +7 -7
- package/dist/domain/jeb/jebAnalysis.js +114 -0
- package/dist/domain/jsonSerialization.js +109 -55
- package/dist/domain/jsonShape.js +69 -31
- package/dist/domain/jsonValue.js +3 -0
- package/dist/domain/localPath.js +10 -4
- package/dist/domain/managed/managedApplicationGraph.js +47 -6
- package/dist/domain/managed/managedApplicationGraphCoverage.js +8 -2
- package/dist/domain/managed/managedApplicationGraphNodes.js +94 -59
- package/dist/domain/managed/managedArtifact.js +1 -0
- package/dist/domain/managed/managedInspectionEvidence.js +13 -0
- package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
- package/dist/domain/native/nativeAotPe.js +1408 -0
- package/dist/domain/native/nativeCallObservation.js +2 -4
- package/dist/domain/native/nativeInstruction.js +21 -0
- package/dist/domain/native/nativeMetadataRecovery.js +79 -6
- package/dist/domain/native/nativeValueFlow.js +5 -11
- package/dist/domain/native/objcSwiftMetadata.js +15 -17
- package/dist/domain/native/peResources.js +94 -0
- package/dist/domain/nativeConvention.js +33 -0
- package/dist/domain/process/processCapture.js +102 -11
- package/dist/domain/process/processCaptureCoverage.js +8 -5
- package/dist/domain/process/processCaptureExample.js +67 -0
- package/dist/domain/process/processCaptureValidation.js +83 -3
- package/dist/domain/process/processComparison.js +0 -23
- package/dist/domain/process/processScenario.js +62 -10
- package/dist/domain/process/processTraceEvaluation.js +4 -4
- package/dist/domain/process/processTraceSpecification.js +1 -3
- package/dist/domain/propertyListKeys.js +3 -1
- package/dist/domain/providerCleanupError.js +6 -2
- package/dist/domain/reconstructionCoverage.js +2 -1
- package/dist/domain/reconstructionUnknowns.js +4 -3
- package/dist/domain/reconstructionVerification.js +3 -2
- package/dist/domain/referenceSourceGraph.js +32 -23
- package/dist/domain/referenceSourceImportParsing.js +40 -48
- package/dist/domain/referenceSourcePathIdentity.js +22 -0
- package/dist/domain/referenceSourceRequireBindings.js +137 -0
- package/dist/domain/residualUnknown.js +3 -2
- package/dist/domain/staticRuntimeCorrelation.js +2 -1
- package/dist/domain/swiftSymbolClassification.js +6 -1
- package/dist/domain/symbolAnalysis.js +17 -2
- package/dist/domain/unicodeCodePointOrder.js +6 -0
- package/dist/domain/webBundleAnalyzerInspection.js +23 -3
- package/dist/domain/webCaptureDiff.js +170 -30
- package/dist/domain/webCaptureDiffSchemas.js +2 -8
- package/dist/domain/webInventory.js +3 -2
- package/dist/domain/webMcpDiscovery.js +4 -3
- package/dist/domain/webScriptExport.js +1 -1
- package/dist/domain/webScriptExportError.js +10 -4
- package/dist/domain/webScriptExportPlan.js +7 -13
- package/dist/domain/zipPackageFormat.js +4 -1
- package/dist/domain/zodCollectionSteps.js +24 -0
- package/dist/dotnet/ManagedArtifactInspector.js +55 -43
- package/dist/dotnet/ManagedDecodeBudget.js +80 -0
- package/dist/dotnet/ManagedMemberInspector.js +13 -6
- package/dist/dotnet/ManagedMemberInspectorCore.js +2 -2
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +5 -4
- package/dist/dotnet/ManagedMemberRows.js +9 -4
- package/dist/dotnet/ManagedMetadataHeaps.js +15 -5
- package/dist/dotnet/ManagedMetadataInventoryRows.js +20 -11
- package/dist/dotnet/ManagedMetadataLayout.js +10 -4
- package/dist/dotnet/ManagedMethodBodyReader.js +8 -3
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +3 -2
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +49 -34
- package/dist/dotnet/ManagedPeReader.js +41 -25
- package/dist/dotnet/ManagedReaderFailure.js +2 -1
- package/dist/dotnet/ManagedStaticProvider.js +65 -31
- package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
- package/dist/evaluation/AgentEvaluationReport.js +9 -5
- package/dist/evaluation/CodexAgentEval.js +43 -13
- package/dist/evm/EvmoleFailures.js +0 -2
- package/dist/evm/EvmoleInterfaceProvider.js +67 -2
- package/dist/filesystem/OwnedDirectoryHandle.js +29 -0
- package/dist/filesystem/OwnedFileHandle.js +36 -0
- package/dist/filesystem/RegularFile.js +73 -0
- package/dist/filesystem/StableFileHash.js +46 -0
- package/dist/filesystem/readFileHandleChunks.js +26 -0
- package/dist/firmware/FirmwareCommand.js +25 -3
- package/dist/firmware/FirmwareFiles.js +23 -8
- package/dist/firmware/FirmwareProvider.js +156 -32
- package/dist/firmware/FirmwarePublication.js +24 -3
- package/dist/firmware/FirmwareRelease.js +1 -0
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +55 -4
- package/dist/ghidra/GhidraAnalysisSeeds.js +211 -0
- package/dist/ghidra/GhidraClient.js +90 -8
- package/dist/ghidra/GhidraDiagnostics.js +11 -8
- package/dist/ghidra/GhidraFunctionValues.js +26 -2
- package/dist/ghidra/GhidraInstallation.js +111 -10
- package/dist/ghidra/GhidraInventoryValues.js +23 -1
- package/dist/ghidra/GhidraLanguageCatalog.js +99 -0
- package/dist/ghidra/GhidraLauncher.js +123 -58
- package/dist/ghidra/GhidraLoadImageAttest.js +49 -2
- package/dist/ghidra/GhidraMipsProfile.js +79 -0
- package/dist/ghidra/GhidraProvider.js +57 -9
- package/dist/ghidra/GhidraProviderCapabilities.js +18 -8
- package/dist/ghidra/GhidraProviderClient.js +282 -21
- package/dist/ghidra/GhidraSessionValues.js +9 -2
- package/dist/hopper/HopperAnalysisProfile.js +2 -0
- package/dist/hopper/HopperCleanup.js +1 -1
- package/dist/hopper/HopperClient.js +15 -6
- package/dist/hopper/HopperMachOImage.js +2 -0
- package/dist/hopper/HopperProvider.js +13 -2
- package/dist/ida/IdaOperationRunner.js +10 -2
- package/dist/ida/IdaProvider.js +7 -0
- package/dist/ida/IdaSessionClient.js +7 -3
- package/dist/ida/IdaWorkspace.js +4 -2
- package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
- package/dist/inspector/V8InspectorCaptureProjection.js +46 -13
- package/dist/inspector/V8InspectorProvider.js +60 -8
- package/dist/javascript/analysis/JavaScriptAnalysisTransfer.js +326 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorker.js +520 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorkerProtocol.js +63 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorkerSchemas.js +521 -0
- package/dist/javascript/analysis/JavaScriptAnalysisWorkerServer.js +116 -0
- package/dist/javascript/recovery/RecoveryFiles.js +18 -7
- package/dist/javascript/recovery/WakaruCommand.js +22 -9
- package/dist/javascript/recovery/WakaruExecution.js +11 -7
- package/dist/javascript/recovery/WakaruProvider.js +139 -16
- package/dist/javascript/recovery/WakaruPublication.js +14 -4
- package/dist/javascript/recovery/WakaruRelease.js +10 -3
- package/dist/javascript/recovery/WakaruReport.js +12 -7
- package/dist/javascript/recovery/WakaruVersion.js +24 -0
- package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -3
- package/dist/javascript/sourceMaps/SourceMapDecoder.js +63 -7
- package/dist/javascript/sourceMaps/SourceMapFormat.js +15 -4
- package/dist/jeb/JebMcpConnection.js +179 -0
- package/dist/jeb/JebMcpEndpoint.js +40 -0
- package/dist/jeb/JebProvider.js +299 -0
- package/dist/main/shutdown.js +76 -32
- package/dist/main/transport.js +1 -1
- package/dist/mcpDoctor.js +15 -6
- package/dist/native/AppleDispatchCoverage.js +25 -12
- package/dist/native/AppleDispatchMetadata.js +14 -7
- package/dist/native/AppleMachoFixups.js +71 -15
- package/dist/native/AppleMachoSelection.js +23 -3
- package/dist/native/AppleObjcDispatchFacets.js +3 -3
- package/dist/native/AppleObjcProperties.js +17 -7
- package/dist/native/LldbCallTracer.js +241 -75
- package/dist/native/NativeMacOSProvider.js +100 -20
- package/dist/native/NativeMacOSProviderMetadata.js +1 -2
- package/dist/native/NativeMachoInspection.js +11 -7
- package/dist/native/NativeUiHelperRuntime.js +6 -1
- package/dist/native/NativeUiObservation.js +4 -3
- package/dist/native/pe/PeResourceLayout.js +120 -0
- package/dist/native/pe/PeResourceParser.js +286 -0
- package/dist/native/pe/PeResourcesProvider.js +63 -0
- package/dist/process/BoundedFileBytes.js +30 -7
- package/dist/process/DarwinProcessRunTokenReader.js +8 -3
- package/dist/process/OwnedCommand.js +4 -3
- package/dist/process/ProcessOwnership.js +104 -112
- package/dist/process/ProcessOwnershipObservation.js +104 -51
- package/dist/process/ProcessOwnershipProcessTree.js +4 -4
- package/dist/process/ProcessRunTokenObservations.js +48 -0
- package/dist/process/ProviderDiagnosticRedaction.js +17 -0
- package/dist/process/ProviderProcess.js +4 -3
- package/dist/process/capture/FilesystemSnapshot.js +116 -22
- package/dist/process/capture/ProcessCaptureLifecycle.js +363 -86
- package/dist/process/capture/ProcessCaptureProgress.js +62 -0
- package/dist/process/capture/ProcessFilesystemEffects.js +19 -4
- package/dist/process/capture/ProcessHarness.js +202 -47
- package/dist/process/capture/ProcessNormalization.js +3 -1
- package/dist/process/capture/ProcessScenarioRuntimeValidation.js +5 -2
- package/dist/process/capture/TerminalRenderer.js +24 -7
- package/dist/reference/ReferenceSourceReader.js +22 -5
- package/dist/reference/ReferenceSourceReaderEntries.js +114 -51
- package/dist/reference/ReferenceSourceReaderErrors.js +12 -0
- package/dist/reference/ReferenceSourceReaderFile.js +50 -10
- package/dist/reference/ReferenceSourceReaderValidate.js +4 -4
- package/dist/server/EvidenceMcpServer.js +36 -1
- package/dist/server/admittedToolOperation.js +9 -0
- package/dist/server/analysisAdmission.js +8 -0
- package/dist/server/contractToolHandler.js +21 -0
- package/dist/server/createServer.js +118 -47
- package/dist/server/registerAdbTools.js +36 -0
- package/dist/server/registerAnalysisViewTool.js +4 -9
- package/dist/server/registerAndroidTools.js +3 -12
- package/dist/server/registerApktoolTools.js +14 -0
- package/dist/server/registerApplicationTools/compareExportShapes.js +6 -7
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
- package/dist/server/registerApplicationTools/compareVersions.js +3 -2
- package/dist/server/registerApplicationTools/coverage.js +3 -2
- package/dist/server/registerApplicationTools/helpers.js +3 -2
- package/dist/server/registerApplicationTools/obligationLedger.js +3 -2
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -2
- package/dist/server/registerApplicationTools/traceFeature.js +3 -2
- package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
- package/dist/server/registerArtifactComparisonTool.js +5 -2
- package/dist/server/registerArtifactTools.js +2 -2
- package/dist/server/registerBinaryDiagnosticsTools.js +16 -4
- package/dist/server/registerBrowserScenarioTool.js +10 -7
- package/dist/server/registerBrowserTools.js +12 -9
- package/dist/server/registerBundleComparisonTool.js +16 -2
- package/dist/server/registerCloseLifecycleTool.js +36 -5
- package/dist/server/registerElectronTools.js +28 -10
- package/dist/server/registerEnhancedTools.js +78 -73
- package/dist/server/registerEvidenceTools.js +54 -46
- package/dist/server/registerEvmTools.js +4 -9
- package/dist/server/registerFirmwareTools.js +3 -11
- package/dist/server/registerFunctionComparisonTool.js +5 -2
- package/dist/server/registerJavaScriptRecoveryTool.js +4 -9
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +9 -6
- package/dist/server/registerJebTools.js +16 -0
- package/dist/server/registerManagedTools.js +7 -4
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +4 -6
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +3 -2
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +3 -2
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +3 -2
- package/dist/server/registerOfficialTools.js +31 -25
- package/dist/server/registerPeResourcesTool.js +9 -0
- package/dist/server/registerProcessComparisonTool.js +5 -2
- package/dist/server/registerRecordedCrashTools.js +4 -9
- package/dist/server/registerSessionRecordTools.js +2 -1
- package/dist/server/registerSessionTools.js +58 -21
- package/dist/server/registerWebModuleTool.js +4 -9
- package/dist/server/registerWebNetworkCaptureTool.js +4 -9
- package/dist/server/registerWebRuntimeTools.js +6 -5
- package/dist/server/registerWebScriptTool.js +6 -3
- package/dist/server/registerWebSourceLocationTool.js +4 -9
- package/dist/server/toolResult.js +21 -2
- package/dist/windows/WindowsPrivateRuntime.js +12 -5
- package/install.sh +7 -4
- package/licenses/nativeaot-parser-MIT.txt +28 -0
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +38 -7
- package/scripts/rea.mjs +16 -1
- package/skills/reverse-engineer-anything/SKILL.md +52 -51
- package/skills/reverse-engineer-anything/references/connection-and-recovery.md +127 -0
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -0
- package/skills/reverse-engineer-anything/references/javascript-applications.md +92 -13
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +31 -1
- package/dist/artifacts/inventory/policy.js +0 -2
- package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
- package/dist/server/registerNativeTools.js +0 -6
package/dist/domain/jsonShape.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import {
|
|
2
|
+
import { compareUnicodeCodePoints } from "./unicodeCodePointOrder.js";
|
|
3
3
|
const jsonValueTypeSchema = z.enum([
|
|
4
4
|
"object",
|
|
5
5
|
"array",
|
|
@@ -8,17 +8,22 @@ const jsonValueTypeSchema = z.enum([
|
|
|
8
8
|
"boolean",
|
|
9
9
|
"null",
|
|
10
10
|
]);
|
|
11
|
+
const jsonShapePathSegmentSchema = z.discriminatedUnion("kind", [
|
|
12
|
+
z.object({ kind: z.literal("property"), name: z.string() }),
|
|
13
|
+
z.object({ kind: z.literal("array-element") }),
|
|
14
|
+
]);
|
|
11
15
|
/** Value-free structural summary of one approved JSON payload. */
|
|
12
16
|
export const jsonShapeSchema = z.object({
|
|
13
17
|
root_type: jsonValueTypeSchema,
|
|
14
18
|
node_count: z.number().int().min(1),
|
|
15
19
|
max_depth_observed: z.number().int().min(0),
|
|
16
20
|
properties: z.array(z.object({
|
|
17
|
-
path: z.
|
|
21
|
+
path: z.array(jsonShapePathSegmentSchema).min(1),
|
|
18
22
|
types: z.array(jsonValueTypeSchema).min(1),
|
|
19
23
|
observations: z.number().int().min(1),
|
|
20
24
|
})),
|
|
21
25
|
});
|
|
26
|
+
const arrayElementKey = Symbol("array-element");
|
|
22
27
|
/** Parse approved JSON and immediately discard values after iterative shape inference. */
|
|
23
28
|
export const inferJsonShape = (text) => {
|
|
24
29
|
let root;
|
|
@@ -30,8 +35,31 @@ export const inferJsonShape = (text) => {
|
|
|
30
35
|
void cause;
|
|
31
36
|
return null;
|
|
32
37
|
}
|
|
33
|
-
const
|
|
34
|
-
|
|
38
|
+
const rootShape = {
|
|
39
|
+
path: [],
|
|
40
|
+
types: new Set(),
|
|
41
|
+
observations: 0,
|
|
42
|
+
};
|
|
43
|
+
// Each structural path owns one accumulator, shared by all matching array rows.
|
|
44
|
+
const childShape = (parent, key) => {
|
|
45
|
+
const children = (parent.children ??= new Map());
|
|
46
|
+
const existing = children.get(key);
|
|
47
|
+
if (existing !== undefined)
|
|
48
|
+
return existing;
|
|
49
|
+
const node = {
|
|
50
|
+
path: [
|
|
51
|
+
...parent.path,
|
|
52
|
+
typeof key === "string"
|
|
53
|
+
? { kind: "property", name: key }
|
|
54
|
+
: { kind: "array-element" },
|
|
55
|
+
],
|
|
56
|
+
types: new Set(),
|
|
57
|
+
observations: 0,
|
|
58
|
+
};
|
|
59
|
+
children.set(key, node);
|
|
60
|
+
return node;
|
|
61
|
+
};
|
|
62
|
+
const pending = [{ value: root, shape: rootShape }];
|
|
35
63
|
let nodeCount = 0;
|
|
36
64
|
let maxDepthObserved = 0;
|
|
37
65
|
while (pending.length > 0) {
|
|
@@ -39,14 +67,15 @@ export const inferJsonShape = (text) => {
|
|
|
39
67
|
if (current === undefined)
|
|
40
68
|
break;
|
|
41
69
|
nodeCount += 1;
|
|
42
|
-
maxDepthObserved = Math.max(maxDepthObserved, current.
|
|
70
|
+
maxDepthObserved = Math.max(maxDepthObserved, current.shape.path.length);
|
|
71
|
+
current.shape.types.add(jsonValueType(current.value));
|
|
72
|
+
current.shape.observations += 1;
|
|
43
73
|
if (Array.isArray(current.value)) {
|
|
74
|
+
if (current.value.length === 0)
|
|
75
|
+
continue;
|
|
76
|
+
const shape = childShape(current.shape, arrayElementKey);
|
|
44
77
|
for (let index = current.value.length - 1; index >= 0; index -= 1)
|
|
45
|
-
pending.push({
|
|
46
|
-
value: current.value[index],
|
|
47
|
-
path: `${current.path}/*`,
|
|
48
|
-
depth: current.depth + 1,
|
|
49
|
-
});
|
|
78
|
+
pending.push({ value: current.value[index], shape });
|
|
50
79
|
continue;
|
|
51
80
|
}
|
|
52
81
|
if (!isRecord(current.value))
|
|
@@ -57,31 +86,31 @@ export const inferJsonShape = (text) => {
|
|
|
57
86
|
if (entry === undefined)
|
|
58
87
|
continue;
|
|
59
88
|
const [name, value] = entry;
|
|
60
|
-
|
|
61
|
-
const type = jsonValueType(value);
|
|
62
|
-
const existing = properties.get(path);
|
|
63
|
-
if (existing === undefined)
|
|
64
|
-
properties.set(path, { types: new Set([type]), observations: 1 });
|
|
65
|
-
else {
|
|
66
|
-
existing.types.add(type);
|
|
67
|
-
existing.observations += 1;
|
|
68
|
-
}
|
|
69
|
-
pending.push({ value, path, depth: current.depth + 1 });
|
|
89
|
+
pending.push({ value, shape: childShape(current.shape, name) });
|
|
70
90
|
}
|
|
71
91
|
}
|
|
72
|
-
|
|
92
|
+
// Preorder over sorted siblings gives canonical paths without repeatedly
|
|
93
|
+
// comparing their shared prefixes. Each returned path owns its segments.
|
|
94
|
+
const properties = [];
|
|
95
|
+
const shapes = orderedChildren(rootShape);
|
|
96
|
+
while (shapes.length > 0) {
|
|
97
|
+
const shape = shapes.pop();
|
|
98
|
+
if (shape === undefined)
|
|
99
|
+
break;
|
|
100
|
+
properties.push({
|
|
101
|
+
path: shape.path.map((segment) => ({ ...segment })),
|
|
102
|
+
types: [...shape.types].sort(),
|
|
103
|
+
observations: shape.observations,
|
|
104
|
+
});
|
|
105
|
+
for (const child of orderedChildren(shape))
|
|
106
|
+
shapes.push(child);
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
73
109
|
root_type: jsonValueType(root),
|
|
74
110
|
node_count: nodeCount,
|
|
75
111
|
max_depth_observed: maxDepthObserved,
|
|
76
|
-
properties
|
|
77
|
-
|
|
78
|
-
path,
|
|
79
|
-
types: [...value.types].sort(),
|
|
80
|
-
observations: value.observations,
|
|
81
|
-
}))
|
|
82
|
-
.sort((left, right) => left.path.localeCompare(right.path) ||
|
|
83
|
-
compareCodePoints(left.path, right.path)),
|
|
84
|
-
});
|
|
112
|
+
properties,
|
|
113
|
+
};
|
|
85
114
|
};
|
|
86
115
|
const jsonValueType = (value) => {
|
|
87
116
|
if (value === null)
|
|
@@ -100,4 +129,13 @@ const jsonValueType = (value) => {
|
|
|
100
129
|
}
|
|
101
130
|
};
|
|
102
131
|
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
103
|
-
|
|
132
|
+
/** Reverse sibling order for the traversal stack; array elements sort first. */
|
|
133
|
+
const orderedChildren = (node) => [...(node.children ?? [])]
|
|
134
|
+
.sort(([left], [right]) => left === right
|
|
135
|
+
? 0
|
|
136
|
+
: left === arrayElementKey
|
|
137
|
+
? 1
|
|
138
|
+
: right === arrayElementKey
|
|
139
|
+
? -1
|
|
140
|
+
: compareUnicodeCodePoints(right, left))
|
|
141
|
+
.map(([, child]) => child);
|
package/dist/domain/jsonValue.js
CHANGED
|
@@ -64,6 +64,9 @@ export function* jsonValueValidationSteps(root) {
|
|
|
64
64
|
return finish(undefined);
|
|
65
65
|
}
|
|
66
66
|
const preserveJsonValue = (value) => {
|
|
67
|
+
const immutableCandidate = value;
|
|
68
|
+
if (isImmutableJsonSnapshot(immutableCandidate))
|
|
69
|
+
return value;
|
|
67
70
|
if (Array.isArray(value))
|
|
68
71
|
return value.map(preserveJsonValue);
|
|
69
72
|
if (value !== null && typeof value === "object")
|
package/dist/domain/localPath.js
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import { isAbsolute, relative, sep } from "node:path";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Preserve selected filesystem names while rejecting OS-invalid NUL bytes.
|
|
5
|
+
*
|
|
6
|
+
* The pattern spells NUL as `\x00` rather than `\u0000`. Both accept exactly the
|
|
7
|
+
* same strings. The hex form also avoids the short `\0` spelling rejected by
|
|
8
|
+
* strict schema consumers. A client can reject its entire tool request when
|
|
9
|
+
* one advertised pattern cannot compile. See `offsetDateTimeSchema` for the
|
|
10
|
+
* same hex-escape convention.
|
|
11
|
+
*/
|
|
4
12
|
export const localPathStringSchema = z
|
|
5
13
|
.string()
|
|
6
14
|
.min(1)
|
|
7
|
-
.regex(/^[^\
|
|
8
|
-
/** True when the value is an absolute filesystem path on the host platform. */
|
|
9
|
-
export const isAbsoluteLocalPath = (value) => isAbsolute(value);
|
|
15
|
+
.regex(/^[^\x00]*$/u, "Local filesystem paths cannot contain NUL");
|
|
10
16
|
/** Test lexical containment on the host platform; callers must resolve symlinks first. */
|
|
11
17
|
export const isPathWithinRoot = (root, path) => {
|
|
12
18
|
const value = relative(root, path);
|
|
@@ -65,6 +65,7 @@ export const projectManagedApplicationGraph = (input) => {
|
|
|
65
65
|
const parsed = parseManagedInputs(input);
|
|
66
66
|
const artifactIdentity = chooseArtifact(parsed);
|
|
67
67
|
assertSameArtifact(parsed, artifactIdentity.sha256);
|
|
68
|
+
assertConsistentModuleIdentity(parsed);
|
|
68
69
|
const evidenceLinks = [
|
|
69
70
|
parsed.artifact?.evidence.evidence_id,
|
|
70
71
|
parsed.members?.evidence.evidence_id,
|
|
@@ -82,8 +83,8 @@ export const projectManagedApplicationGraph = (input) => {
|
|
|
82
83
|
};
|
|
83
84
|
const artifactNode = addArtifactNode(state);
|
|
84
85
|
addArtifactIdentityNodes(state, artifactNode, parsed);
|
|
85
|
-
|
|
86
|
-
|
|
86
|
+
addMemberNodes(state, artifactNode, parsed);
|
|
87
|
+
addBoundaryNodes(state, artifactNode, parsed);
|
|
87
88
|
const omissions = omittedCounts(parsed);
|
|
88
89
|
const limitations = projectionLimitations(parsed, omissions);
|
|
89
90
|
const graph = createJavaScriptApplicationGraph({
|
|
@@ -104,10 +105,13 @@ export const projectManagedApplicationGraph = (input) => {
|
|
|
104
105
|
summary: {
|
|
105
106
|
graph_nodes: graph.nodes.length,
|
|
106
107
|
graph_edges: graph.edges.length,
|
|
107
|
-
assemblies:
|
|
108
|
-
modules:
|
|
109
|
-
|
|
110
|
-
|
|
108
|
+
assemblies: countNodes(graph.nodes, "managed-assembly"),
|
|
109
|
+
modules: countNodes(graph.nodes, "managed-module"),
|
|
110
|
+
types: countNodes(graph.nodes, "managed-type"),
|
|
111
|
+
methods: countNodes(graph.nodes, "managed-method"),
|
|
112
|
+
fields: countNodes(graph.nodes, "managed-field"),
|
|
113
|
+
pinvoke_imports: countNodes(graph.nodes, "managed-pinvoke-import"),
|
|
114
|
+
native_implementations: countNodes(graph.nodes, "managed-native-implementation"),
|
|
111
115
|
},
|
|
112
116
|
graph,
|
|
113
117
|
coverage: managedGraphResultCoverage(omissions),
|
|
@@ -119,6 +123,7 @@ export const projectManagedApplicationGraph = (input) => {
|
|
|
119
123
|
projection_id: `magp_${sha256(withoutId)}`,
|
|
120
124
|
});
|
|
121
125
|
};
|
|
126
|
+
const countNodes = (nodes, kind) => nodes.filter((node) => node.kind === kind).length;
|
|
122
127
|
const parseManagedInputs = (input) => ({
|
|
123
128
|
artifact: input.managed_artifact === undefined
|
|
124
129
|
? null
|
|
@@ -147,6 +152,37 @@ const assertSameArtifact = (parsed, sha256Value) => {
|
|
|
147
152
|
if (result !== undefined && result.artifact.sha256 !== sha256Value)
|
|
148
153
|
throw new TypeError("Managed graph projection inputs must describe the same artifact SHA-256");
|
|
149
154
|
};
|
|
155
|
+
/** Reject contradictory known module identities while leaving null fields unknown. */
|
|
156
|
+
const assertConsistentModuleIdentity = (parsed) => {
|
|
157
|
+
const mvidClaims = [
|
|
158
|
+
parsed.artifact?.result.module?.mvid,
|
|
159
|
+
parsed.members?.result.module?.mvid,
|
|
160
|
+
parsed.members?.result.identity_scope.requires_mvid,
|
|
161
|
+
parsed.boundaries?.result.module?.mvid,
|
|
162
|
+
parsed.boundaries?.result.identity_scope.requires_mvid,
|
|
163
|
+
]
|
|
164
|
+
.filter((mvid) => mvid !== undefined && mvid !== null)
|
|
165
|
+
.map((mvid) => mvid.toLowerCase());
|
|
166
|
+
if (new Set(mvidClaims).size > 1)
|
|
167
|
+
throw new TypeError("Managed graph inputs report conflicting known module MVIDs or token scopes");
|
|
168
|
+
const modules = [
|
|
169
|
+
parsed.artifact?.result.module,
|
|
170
|
+
parsed.members?.result.module,
|
|
171
|
+
parsed.boundaries?.result.module,
|
|
172
|
+
].filter((module) => module !== undefined && module !== null);
|
|
173
|
+
for (const field of ["name", "generation", "token", "row_offset"]) {
|
|
174
|
+
const values = new Set(modules.map((module) => module[field]));
|
|
175
|
+
if (values.size > 1)
|
|
176
|
+
throw new TypeError(`Managed graph inputs report conflicting module ${field} values`);
|
|
177
|
+
}
|
|
178
|
+
for (const field of ["enc_id", "enc_base_id"]) {
|
|
179
|
+
const values = new Set(modules
|
|
180
|
+
.map((module) => module[field]?.toLowerCase())
|
|
181
|
+
.filter((value) => value !== undefined));
|
|
182
|
+
if (values.size > 1)
|
|
183
|
+
throw new TypeError(`Managed graph inputs report conflicting module ${field} values`);
|
|
184
|
+
}
|
|
185
|
+
};
|
|
150
186
|
const omittedCounts = (parsed) => assessManagedGraphOmissions({
|
|
151
187
|
artifact: parsed.artifact?.result ?? null,
|
|
152
188
|
members: parsed.members?.result ?? null,
|
|
@@ -172,4 +208,9 @@ const projectionLimitations = (parsed, omissions) => [
|
|
|
172
208
|
...(omissions.partialInput
|
|
173
209
|
? ["At least one supplied managed Evidence record has partial coverage."]
|
|
174
210
|
: []),
|
|
211
|
+
...(omissions.unscopedTokenRelationships
|
|
212
|
+
? [
|
|
213
|
+
"Managed boundary tokens were not linked to member nodes because matching module MVID scope was not established.",
|
|
214
|
+
]
|
|
215
|
+
: []),
|
|
175
216
|
];
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { managedTokenScopesMatch } from "./managedInspectionEvidence.js";
|
|
1
2
|
const completeCoverage = () => ({
|
|
2
3
|
status: "complete",
|
|
3
4
|
truncated: false,
|
|
@@ -15,6 +16,11 @@ export const managedSourceCoverage = (state) => state === "complete"
|
|
|
15
16
|
};
|
|
16
17
|
/** Determine whether any supplied managed inspection was partial. */
|
|
17
18
|
export const assessManagedGraphOmissions = (sources) => ({
|
|
19
|
+
unscopedTokenRelationships: sources.members !== null &&
|
|
20
|
+
sources.boundaries !== null &&
|
|
21
|
+
(sources.boundaries.pinvoke_imports.some(({ member_token }) => member_token !== null) ||
|
|
22
|
+
sources.boundaries.native_implementations.length > 0) &&
|
|
23
|
+
!managedTokenScopesMatch(sources.members.identity_scope.requires_mvid, sources.boundaries.identity_scope.requires_mvid),
|
|
18
24
|
partialInput: [
|
|
19
25
|
sources.members?.coverage.state,
|
|
20
26
|
sources.boundaries?.coverage.state,
|
|
@@ -22,7 +28,7 @@ export const assessManagedGraphOmissions = (sources) => ({
|
|
|
22
28
|
].some((state) => state !== undefined && state !== "complete"),
|
|
23
29
|
});
|
|
24
30
|
/** Derive graph coverage solely from the coverage of supplied source evidence. */
|
|
25
|
-
export const managedGraphEvidenceCoverage = (omissions) => omissions.partialInput
|
|
31
|
+
export const managedGraphEvidenceCoverage = (omissions) => omissions.partialInput || omissions.unscopedTokenRelationships
|
|
26
32
|
? {
|
|
27
33
|
status: "partial",
|
|
28
34
|
truncated: false,
|
|
@@ -32,7 +38,7 @@ export const managedGraphEvidenceCoverage = (omissions) => omissions.partialInpu
|
|
|
32
38
|
: completeCoverage();
|
|
33
39
|
/** Report whether all supplied source evidence was complete. */
|
|
34
40
|
export const managedGraphResultCoverage = (omissions) => ({
|
|
35
|
-
status: omissions.partialInput
|
|
41
|
+
status: omissions.partialInput || omissions.unscopedTokenRelationships
|
|
36
42
|
? "partial"
|
|
37
43
|
: "complete-within-inputs",
|
|
38
44
|
});
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { basename } from "node:path";
|
|
2
2
|
import { createJavaScriptApplicationEdge, createJavaScriptApplicationNode, } from "../javascript/javascriptApplicationGraph.js";
|
|
3
3
|
import { managedSourceCoverage } from "./managedApplicationGraphCoverage.js";
|
|
4
|
+
import { managedTokenScopesMatch } from "./managedInspectionEvidence.js";
|
|
4
5
|
import {} from "./managedArtifact.js";
|
|
5
|
-
import { moduleCoverageState } from "./managedApplicationGraphNodeCoverage.js";
|
|
6
6
|
/** Add the root managed artifact node to the graph state. */
|
|
7
7
|
export const addArtifactNode = (state) => {
|
|
8
8
|
const node = createJavaScriptApplicationNode({
|
|
@@ -19,7 +19,7 @@ export const addArtifactNode = (state) => {
|
|
|
19
19
|
format: "pe",
|
|
20
20
|
source: "managed-application-graph",
|
|
21
21
|
},
|
|
22
|
-
evidence:
|
|
22
|
+
evidence: projectedManagedEvidence(state, "project-managed-artifact"),
|
|
23
23
|
},
|
|
24
24
|
],
|
|
25
25
|
});
|
|
@@ -28,39 +28,39 @@ export const addArtifactNode = (state) => {
|
|
|
28
28
|
};
|
|
29
29
|
/** Add managed assembly and module identity nodes for the artifact. */
|
|
30
30
|
export const addArtifactIdentityNodes = (state, artifactNode, parsed) => {
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
const artifactInput = parsed.artifact;
|
|
32
|
+
if (artifactInput !== null && artifactInput.result.assembly !== null) {
|
|
33
|
+
const assemblyFacts = artifactInput.result.assembly;
|
|
34
|
+
const artifactEvidence = sourceManagedEvidence(state, artifactInput.evidence, artifactInput.result.coverage.state);
|
|
34
35
|
const assembly = createJavaScriptApplicationNode({
|
|
35
36
|
kind: "managed-assembly",
|
|
36
|
-
identity: artifactLocalIdentity(state.artifactSha256, "managed-assembly",
|
|
37
|
+
identity: artifactLocalIdentity(state.artifactSha256, "managed-assembly", assemblyFacts.token),
|
|
37
38
|
observations: [
|
|
38
39
|
{
|
|
39
|
-
label:
|
|
40
|
+
label: assemblyFacts.name,
|
|
40
41
|
properties: {
|
|
41
|
-
name:
|
|
42
|
-
version:
|
|
43
|
-
culture:
|
|
44
|
-
public_key_kind:
|
|
42
|
+
name: assemblyFacts.name,
|
|
43
|
+
version: assemblyFacts.version,
|
|
44
|
+
culture: assemblyFacts.culture,
|
|
45
|
+
public_key_kind: assemblyFacts.public_key.kind,
|
|
45
46
|
},
|
|
46
|
-
evidence:
|
|
47
|
+
evidence: artifactEvidence,
|
|
47
48
|
},
|
|
48
49
|
],
|
|
49
50
|
});
|
|
50
51
|
state.nodes.push(assembly);
|
|
51
52
|
addContainsEdge(state, artifactNode, assembly, {
|
|
52
53
|
kind: "declares-managed-assembly",
|
|
53
|
-
coverage:
|
|
54
|
+
coverage: artifactEvidence.coverage,
|
|
54
55
|
});
|
|
55
56
|
}
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const moduleCoverage = managedSourceCoverage(moduleCoverageState(parsed));
|
|
57
|
+
const moduleSource = selectModuleSource(parsed);
|
|
58
|
+
if (moduleSource !== null) {
|
|
59
|
+
const { module } = moduleSource;
|
|
60
|
+
const moduleEvidence = sourceManagedEvidence(state, moduleSource.evidence, moduleSource.coverageState);
|
|
61
61
|
const moduleNode = createJavaScriptApplicationNode({
|
|
62
62
|
kind: "managed-module",
|
|
63
|
-
identity: artifactLocalIdentity(state.artifactSha256, "managed-module", module.mvid ?? module.token),
|
|
63
|
+
identity: artifactLocalIdentity(state.artifactSha256, "managed-module", module.mvid?.toLowerCase() ?? module.token),
|
|
64
64
|
observations: [
|
|
65
65
|
{
|
|
66
66
|
label: module.name,
|
|
@@ -70,28 +70,56 @@ export const addArtifactIdentityNodes = (state, artifactNode, parsed) => {
|
|
|
70
70
|
generation: module.generation,
|
|
71
71
|
token: module.token,
|
|
72
72
|
},
|
|
73
|
-
evidence:
|
|
73
|
+
evidence: moduleEvidence,
|
|
74
74
|
},
|
|
75
75
|
],
|
|
76
76
|
});
|
|
77
77
|
state.nodes.push(moduleNode);
|
|
78
78
|
addContainsEdge(state, artifactNode, moduleNode, {
|
|
79
79
|
kind: "declares-managed-module",
|
|
80
|
-
coverage:
|
|
80
|
+
coverage: moduleEvidence.coverage,
|
|
81
81
|
});
|
|
82
82
|
}
|
|
83
83
|
};
|
|
84
|
+
const selectModuleSource = (parsed) => {
|
|
85
|
+
const sources = [
|
|
86
|
+
parsed.artifact?.result.module == null
|
|
87
|
+
? null
|
|
88
|
+
: {
|
|
89
|
+
module: parsed.artifact.result.module,
|
|
90
|
+
evidence: parsed.artifact.evidence,
|
|
91
|
+
coverageState: parsed.artifact.result.coverage.state,
|
|
92
|
+
},
|
|
93
|
+
parsed.members?.result.module == null
|
|
94
|
+
? null
|
|
95
|
+
: {
|
|
96
|
+
module: parsed.members.result.module,
|
|
97
|
+
evidence: parsed.members.evidence,
|
|
98
|
+
coverageState: parsed.members.result.coverage.state,
|
|
99
|
+
},
|
|
100
|
+
parsed.boundaries?.result.module == null
|
|
101
|
+
? null
|
|
102
|
+
: {
|
|
103
|
+
module: parsed.boundaries.result.module,
|
|
104
|
+
evidence: parsed.boundaries.evidence,
|
|
105
|
+
coverageState: parsed.boundaries.result.coverage.state,
|
|
106
|
+
},
|
|
107
|
+
].filter((source) => source !== null);
|
|
108
|
+
return (sources.find(({ module }) => module.mvid !== null) ?? sources[0] ?? null);
|
|
109
|
+
};
|
|
84
110
|
/** Add managed type, method, and field nodes from member evidence. */
|
|
85
111
|
export const addMemberNodes = (state, artifactNode, parsed) => {
|
|
86
|
-
const
|
|
87
|
-
if (
|
|
88
|
-
return
|
|
112
|
+
const memberInput = parsed.members;
|
|
113
|
+
if (memberInput === null)
|
|
114
|
+
return;
|
|
115
|
+
const members = memberInput.result;
|
|
89
116
|
const { types, methods, fields } = members;
|
|
90
117
|
const typeCoverage = managedSourceCoverage(members.coverage.state);
|
|
91
118
|
const methodCoverage = managedSourceCoverage(members.coverage.state);
|
|
92
119
|
const fieldCoverage = managedSourceCoverage(members.coverage.state);
|
|
120
|
+
const sourceEvidence = sourceManagedEvidence(state, memberInput.evidence, members.coverage.state);
|
|
93
121
|
for (const type of types) {
|
|
94
|
-
const node = typeNode(state, type,
|
|
122
|
+
const node = typeNode(state, type, sourceEvidence);
|
|
95
123
|
state.nodes.push(node);
|
|
96
124
|
state.typeNodes.set(type.token, node);
|
|
97
125
|
addContainsEdge(state, artifactNode, node, {
|
|
@@ -100,7 +128,7 @@ export const addMemberNodes = (state, artifactNode, parsed) => {
|
|
|
100
128
|
});
|
|
101
129
|
}
|
|
102
130
|
for (const method of methods) {
|
|
103
|
-
const node = methodNode(state, method,
|
|
131
|
+
const node = methodNode(state, method, sourceEvidence);
|
|
104
132
|
state.nodes.push(node);
|
|
105
133
|
state.methodNodes.set(method.token, node);
|
|
106
134
|
const owner = method.declaring_type_token === null
|
|
@@ -112,7 +140,7 @@ export const addMemberNodes = (state, artifactNode, parsed) => {
|
|
|
112
140
|
});
|
|
113
141
|
}
|
|
114
142
|
for (const field of fields) {
|
|
115
|
-
const node = fieldNode(state, field,
|
|
143
|
+
const node = fieldNode(state, field, sourceEvidence);
|
|
116
144
|
state.nodes.push(node);
|
|
117
145
|
state.fieldNodes.set(field.token, node);
|
|
118
146
|
const owner = field.declaring_type_token === null
|
|
@@ -123,14 +151,9 @@ export const addMemberNodes = (state, artifactNode, parsed) => {
|
|
|
123
151
|
coverage: fieldCoverage,
|
|
124
152
|
});
|
|
125
153
|
}
|
|
126
|
-
return {
|
|
127
|
-
types: types.length,
|
|
128
|
-
methods: methods.length,
|
|
129
|
-
fields: fields.length,
|
|
130
|
-
};
|
|
131
154
|
};
|
|
132
155
|
/** Build a managed type application node. */
|
|
133
|
-
const typeNode = (state, type,
|
|
156
|
+
const typeNode = (state, type, evidence) => createJavaScriptApplicationNode({
|
|
134
157
|
kind: "managed-type",
|
|
135
158
|
identity: artifactLocalIdentity(state.artifactSha256, "managed-type-token", type.token),
|
|
136
159
|
observations: [
|
|
@@ -144,12 +167,12 @@ const typeNode = (state, type, coverage) => createJavaScriptApplicationNode({
|
|
|
144
167
|
flags: type.flags,
|
|
145
168
|
extends_token: type.extends_token,
|
|
146
169
|
},
|
|
147
|
-
evidence
|
|
170
|
+
evidence,
|
|
148
171
|
},
|
|
149
172
|
],
|
|
150
173
|
});
|
|
151
174
|
/** Build a managed method application node. */
|
|
152
|
-
const methodNode = (state, method,
|
|
175
|
+
const methodNode = (state, method, evidence) => createJavaScriptApplicationNode({
|
|
153
176
|
kind: "managed-method",
|
|
154
177
|
identity: artifactLocalIdentity(state.artifactSha256, "managed-method-token", method.token),
|
|
155
178
|
observations: [
|
|
@@ -169,12 +192,12 @@ const methodNode = (state, method, coverage) => createJavaScriptApplicationNode(
|
|
|
169
192
|
normalized_il_sha256: method.body.normalized_il_sha256,
|
|
170
193
|
il_size: method.body.il_size,
|
|
171
194
|
},
|
|
172
|
-
evidence
|
|
195
|
+
evidence,
|
|
173
196
|
},
|
|
174
197
|
],
|
|
175
198
|
});
|
|
176
199
|
/** Build a managed field application node. */
|
|
177
|
-
const fieldNode = (state, field,
|
|
200
|
+
const fieldNode = (state, field, evidence) => createJavaScriptApplicationNode({
|
|
178
201
|
kind: "managed-field",
|
|
179
202
|
identity: artifactLocalIdentity(state.artifactSha256, "managed-field-token", field.token),
|
|
180
203
|
observations: [
|
|
@@ -191,24 +214,32 @@ const fieldNode = (state, field, coverage) => createJavaScriptApplicationNode({
|
|
|
191
214
|
signature_sha256: field.signature.raw_sha256,
|
|
192
215
|
signature_status: field.signature.parse_status,
|
|
193
216
|
},
|
|
194
|
-
evidence
|
|
217
|
+
evidence,
|
|
195
218
|
},
|
|
196
219
|
],
|
|
197
220
|
});
|
|
198
221
|
/** Add P/Invoke import and native implementation boundary nodes. */
|
|
199
222
|
export const addBoundaryNodes = (state, artifactNode, parsed) => {
|
|
200
|
-
const
|
|
201
|
-
if (
|
|
202
|
-
return
|
|
223
|
+
const boundaryInput = parsed.boundaries;
|
|
224
|
+
if (boundaryInput === null)
|
|
225
|
+
return;
|
|
226
|
+
const boundaries = boundaryInput.result;
|
|
203
227
|
const { pinvoke_imports: pinvokes, native_implementations: implementations } = boundaries;
|
|
204
228
|
const pinvokeCoverage = managedSourceCoverage(boundaries.coverage.state);
|
|
205
229
|
const implementationCoverage = managedSourceCoverage(boundaries.coverage.state);
|
|
230
|
+
const sourceEvidence = sourceManagedEvidence(state, boundaryInput.evidence, boundaries.coverage.state);
|
|
231
|
+
const canJoinMemberTokens = parsed.members !== null &&
|
|
232
|
+
managedTokenScopesMatch(parsed.members.result.identity_scope.requires_mvid, boundaries.identity_scope.requires_mvid);
|
|
206
233
|
for (const pinvoke of pinvokes) {
|
|
207
|
-
const node = pinvokeNode(state, pinvoke,
|
|
234
|
+
const node = pinvokeNode(state, pinvoke, sourceEvidence);
|
|
208
235
|
state.nodes.push(node);
|
|
209
|
-
const
|
|
210
|
-
?
|
|
211
|
-
:
|
|
236
|
+
const method = pinvoke.member_token === null || !canJoinMemberTokens
|
|
237
|
+
? undefined
|
|
238
|
+
: state.methodNodes.get(pinvoke.member_token);
|
|
239
|
+
const memberEvidence = method === undefined || parsed.members === null
|
|
240
|
+
? undefined
|
|
241
|
+
: parsed.members.evidence;
|
|
242
|
+
const owner = method ?? artifactNode;
|
|
212
243
|
state.edges.push(createJavaScriptApplicationEdge({
|
|
213
244
|
source_node_id: owner.node_id,
|
|
214
245
|
target_node_id: node.node_id,
|
|
@@ -218,25 +249,23 @@ export const addBoundaryNodes = (state, artifactNode, parsed) => {
|
|
|
218
249
|
import_name: pinvoke.import_name,
|
|
219
250
|
import_scope_name: pinvoke.import_scope_name,
|
|
220
251
|
},
|
|
221
|
-
evidence:
|
|
252
|
+
evidence: pinvokeAssociationEvidence(state, boundaryInput.evidence, pinvokeCoverage, memberEvidence),
|
|
222
253
|
}));
|
|
223
254
|
}
|
|
224
255
|
for (const implementation of implementations) {
|
|
225
|
-
const node = nativeImplementationNode(state, implementation,
|
|
256
|
+
const node = nativeImplementationNode(state, implementation, sourceEvidence);
|
|
226
257
|
state.nodes.push(node);
|
|
227
|
-
const owner =
|
|
258
|
+
const owner = (canJoinMemberTokens
|
|
259
|
+
? state.methodNodes.get(implementation.token)
|
|
260
|
+
: undefined) ?? artifactNode;
|
|
228
261
|
addContainsEdge(state, owner, node, {
|
|
229
262
|
kind: "declares-managed-native-implementation",
|
|
230
263
|
coverage: implementationCoverage,
|
|
231
264
|
});
|
|
232
265
|
}
|
|
233
|
-
return {
|
|
234
|
-
pinvoke_imports: pinvokes.length,
|
|
235
|
-
native_implementations: implementations.length,
|
|
236
|
-
};
|
|
237
266
|
};
|
|
238
267
|
/** Build a managed P/Invoke import application node. */
|
|
239
|
-
const pinvokeNode = (state, pinvoke,
|
|
268
|
+
const pinvokeNode = (state, pinvoke, evidence) => createJavaScriptApplicationNode({
|
|
240
269
|
kind: "managed-pinvoke-import",
|
|
241
270
|
identity: artifactLocalIdentity(state.artifactSha256, "managed-pinvoke-token", pinvoke.token),
|
|
242
271
|
observations: [
|
|
@@ -252,12 +281,12 @@ const pinvokeNode = (state, pinvoke, coverage) => createJavaScriptApplicationNod
|
|
|
252
281
|
call_convention: pinvoke.call_convention,
|
|
253
282
|
verification: pinvoke.verification,
|
|
254
283
|
},
|
|
255
|
-
evidence
|
|
284
|
+
evidence,
|
|
256
285
|
},
|
|
257
286
|
],
|
|
258
287
|
});
|
|
259
288
|
/** Build a managed native implementation application node. */
|
|
260
|
-
const nativeImplementationNode = (state, implementation,
|
|
289
|
+
const nativeImplementationNode = (state, implementation, evidence) => createJavaScriptApplicationNode({
|
|
261
290
|
kind: "managed-native-implementation",
|
|
262
291
|
identity: artifactLocalIdentity(state.artifactSha256, "managed-native-implementation-token", implementation.token),
|
|
263
292
|
observations: [
|
|
@@ -273,7 +302,7 @@ const nativeImplementationNode = (state, implementation, coverage) => createJava
|
|
|
273
302
|
boundary_kind: implementation.boundary_kind,
|
|
274
303
|
body_interpretation: implementation.body_interpretation,
|
|
275
304
|
},
|
|
276
|
-
evidence
|
|
305
|
+
evidence,
|
|
277
306
|
},
|
|
278
307
|
],
|
|
279
308
|
});
|
|
@@ -284,7 +313,7 @@ const addContainsEdge = (state, source, target, options) => {
|
|
|
284
313
|
target_node_id: target.node_id,
|
|
285
314
|
relation: "contains",
|
|
286
315
|
properties: { kind: options.kind },
|
|
287
|
-
evidence:
|
|
316
|
+
evidence: projectedManagedEvidence(state, "project-managed-contains", options.coverage),
|
|
288
317
|
}));
|
|
289
318
|
};
|
|
290
319
|
/** Build an artifact-local key identity for a managed graph entity. */
|
|
@@ -296,7 +325,13 @@ const artifactLocalIdentity = (artifactSha256, namespace, key) => ({
|
|
|
296
325
|
key,
|
|
297
326
|
});
|
|
298
327
|
/** Build managed static-analysis evidence for a graph observation. */
|
|
299
|
-
const
|
|
328
|
+
const sourceManagedEvidence = (state, source, coverageState) => createManagedEvidence(state, source.operation, managedSourceCoverage(coverageState), [source.evidence_id]);
|
|
329
|
+
const projectedManagedEvidence = (state, operation, coverage = managedSourceCoverage("complete")) => createManagedEvidence(state, operation, coverage, state.evidenceLinks);
|
|
330
|
+
const pinvokeAssociationEvidence = (state, boundaryEvidence, coverage, memberEvidence) => createManagedEvidence(state, boundaryEvidence.operation, coverage, [
|
|
331
|
+
boundaryEvidence.evidence_id,
|
|
332
|
+
...(memberEvidence === undefined ? [] : [memberEvidence.evidence_id]),
|
|
333
|
+
]);
|
|
334
|
+
const createManagedEvidence = (state, operation, coverage, evidenceIds) => ({
|
|
300
335
|
authority: "managed-static-analysis",
|
|
301
336
|
state: "observed",
|
|
302
337
|
confidence: "exact",
|
|
@@ -324,7 +359,7 @@ const managedEvidence = (state, operation, coverage = managedSourceCoverage("com
|
|
|
324
359
|
: [
|
|
325
360
|
"The source managed Evidence slice is incomplete; unreturned or unavailable items remain unobserved.",
|
|
326
361
|
],
|
|
327
|
-
evidence_ids:
|
|
362
|
+
evidence_ids: [...evidenceIds],
|
|
328
363
|
});
|
|
329
364
|
/** Sanitize an artifact path into a managed graph location. */
|
|
330
365
|
const graphArtifactPath = (path) => {
|