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
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);
|
|
@@ -82,8 +82,8 @@ export const projectManagedApplicationGraph = (input) => {
|
|
|
82
82
|
};
|
|
83
83
|
const artifactNode = addArtifactNode(state);
|
|
84
84
|
addArtifactIdentityNodes(state, artifactNode, parsed);
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
addMemberNodes(state, artifactNode, parsed);
|
|
86
|
+
addBoundaryNodes(state, artifactNode, parsed);
|
|
87
87
|
const omissions = omittedCounts(parsed);
|
|
88
88
|
const limitations = projectionLimitations(parsed, omissions);
|
|
89
89
|
const graph = createJavaScriptApplicationGraph({
|
|
@@ -104,10 +104,13 @@ export const projectManagedApplicationGraph = (input) => {
|
|
|
104
104
|
summary: {
|
|
105
105
|
graph_nodes: graph.nodes.length,
|
|
106
106
|
graph_edges: graph.edges.length,
|
|
107
|
-
assemblies:
|
|
108
|
-
modules:
|
|
109
|
-
|
|
110
|
-
|
|
107
|
+
assemblies: countNodes(graph.nodes, "managed-assembly"),
|
|
108
|
+
modules: countNodes(graph.nodes, "managed-module"),
|
|
109
|
+
types: countNodes(graph.nodes, "managed-type"),
|
|
110
|
+
methods: countNodes(graph.nodes, "managed-method"),
|
|
111
|
+
fields: countNodes(graph.nodes, "managed-field"),
|
|
112
|
+
pinvoke_imports: countNodes(graph.nodes, "managed-pinvoke-import"),
|
|
113
|
+
native_implementations: countNodes(graph.nodes, "managed-native-implementation"),
|
|
111
114
|
},
|
|
112
115
|
graph,
|
|
113
116
|
coverage: managedGraphResultCoverage(omissions),
|
|
@@ -119,6 +122,7 @@ export const projectManagedApplicationGraph = (input) => {
|
|
|
119
122
|
projection_id: `magp_${sha256(withoutId)}`,
|
|
120
123
|
});
|
|
121
124
|
};
|
|
125
|
+
const countNodes = (nodes, kind) => nodes.filter((node) => node.kind === kind).length;
|
|
122
126
|
const parseManagedInputs = (input) => ({
|
|
123
127
|
artifact: input.managed_artifact === undefined
|
|
124
128
|
? null
|
|
@@ -2,7 +2,6 @@ import { basename } from "node:path";
|
|
|
2
2
|
import { createJavaScriptApplicationEdge, createJavaScriptApplicationNode, } from "../javascript/javascriptApplicationGraph.js";
|
|
3
3
|
import { managedSourceCoverage } from "./managedApplicationGraphCoverage.js";
|
|
4
4
|
import {} from "./managedArtifact.js";
|
|
5
|
-
import { moduleCoverageState } from "./managedApplicationGraphNodeCoverage.js";
|
|
6
5
|
/** Add the root managed artifact node to the graph state. */
|
|
7
6
|
export const addArtifactNode = (state) => {
|
|
8
7
|
const node = createJavaScriptApplicationNode({
|
|
@@ -19,7 +18,7 @@ export const addArtifactNode = (state) => {
|
|
|
19
18
|
format: "pe",
|
|
20
19
|
source: "managed-application-graph",
|
|
21
20
|
},
|
|
22
|
-
evidence:
|
|
21
|
+
evidence: projectedManagedEvidence(state, "project-managed-artifact"),
|
|
23
22
|
},
|
|
24
23
|
],
|
|
25
24
|
});
|
|
@@ -28,36 +27,36 @@ export const addArtifactNode = (state) => {
|
|
|
28
27
|
};
|
|
29
28
|
/** Add managed assembly and module identity nodes for the artifact. */
|
|
30
29
|
export const addArtifactIdentityNodes = (state, artifactNode, parsed) => {
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
const artifactInput = parsed.artifact;
|
|
31
|
+
if (artifactInput !== null && artifactInput.result.assembly !== null) {
|
|
32
|
+
const assemblyFacts = artifactInput.result.assembly;
|
|
33
|
+
const artifactEvidence = sourceManagedEvidence(state, artifactInput.evidence, artifactInput.result.coverage.state);
|
|
34
34
|
const assembly = createJavaScriptApplicationNode({
|
|
35
35
|
kind: "managed-assembly",
|
|
36
|
-
identity: artifactLocalIdentity(state.artifactSha256, "managed-assembly",
|
|
36
|
+
identity: artifactLocalIdentity(state.artifactSha256, "managed-assembly", assemblyFacts.token),
|
|
37
37
|
observations: [
|
|
38
38
|
{
|
|
39
|
-
label:
|
|
39
|
+
label: assemblyFacts.name,
|
|
40
40
|
properties: {
|
|
41
|
-
name:
|
|
42
|
-
version:
|
|
43
|
-
culture:
|
|
44
|
-
public_key_kind:
|
|
41
|
+
name: assemblyFacts.name,
|
|
42
|
+
version: assemblyFacts.version,
|
|
43
|
+
culture: assemblyFacts.culture,
|
|
44
|
+
public_key_kind: assemblyFacts.public_key.kind,
|
|
45
45
|
},
|
|
46
|
-
evidence:
|
|
46
|
+
evidence: artifactEvidence,
|
|
47
47
|
},
|
|
48
48
|
],
|
|
49
49
|
});
|
|
50
50
|
state.nodes.push(assembly);
|
|
51
51
|
addContainsEdge(state, artifactNode, assembly, {
|
|
52
52
|
kind: "declares-managed-assembly",
|
|
53
|
-
coverage:
|
|
53
|
+
coverage: artifactEvidence.coverage,
|
|
54
54
|
});
|
|
55
55
|
}
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const moduleCoverage = managedSourceCoverage(moduleCoverageState(parsed));
|
|
56
|
+
const moduleSource = selectModuleSource(parsed);
|
|
57
|
+
if (moduleSource !== null) {
|
|
58
|
+
const { module } = moduleSource;
|
|
59
|
+
const moduleEvidence = sourceManagedEvidence(state, moduleSource.evidence, moduleSource.coverageState);
|
|
61
60
|
const moduleNode = createJavaScriptApplicationNode({
|
|
62
61
|
kind: "managed-module",
|
|
63
62
|
identity: artifactLocalIdentity(state.artifactSha256, "managed-module", module.mvid ?? module.token),
|
|
@@ -70,28 +69,51 @@ export const addArtifactIdentityNodes = (state, artifactNode, parsed) => {
|
|
|
70
69
|
generation: module.generation,
|
|
71
70
|
token: module.token,
|
|
72
71
|
},
|
|
73
|
-
evidence:
|
|
72
|
+
evidence: moduleEvidence,
|
|
74
73
|
},
|
|
75
74
|
],
|
|
76
75
|
});
|
|
77
76
|
state.nodes.push(moduleNode);
|
|
78
77
|
addContainsEdge(state, artifactNode, moduleNode, {
|
|
79
78
|
kind: "declares-managed-module",
|
|
80
|
-
coverage:
|
|
79
|
+
coverage: moduleEvidence.coverage,
|
|
81
80
|
});
|
|
82
81
|
}
|
|
83
82
|
};
|
|
83
|
+
const selectModuleSource = (parsed) => {
|
|
84
|
+
if (parsed.artifact?.result.module != null)
|
|
85
|
+
return {
|
|
86
|
+
module: parsed.artifact.result.module,
|
|
87
|
+
evidence: parsed.artifact.evidence,
|
|
88
|
+
coverageState: parsed.artifact.result.coverage.state,
|
|
89
|
+
};
|
|
90
|
+
if (parsed.members?.result.module != null)
|
|
91
|
+
return {
|
|
92
|
+
module: parsed.members.result.module,
|
|
93
|
+
evidence: parsed.members.evidence,
|
|
94
|
+
coverageState: parsed.members.result.coverage.state,
|
|
95
|
+
};
|
|
96
|
+
if (parsed.boundaries?.result.module != null)
|
|
97
|
+
return {
|
|
98
|
+
module: parsed.boundaries.result.module,
|
|
99
|
+
evidence: parsed.boundaries.evidence,
|
|
100
|
+
coverageState: parsed.boundaries.result.coverage.state,
|
|
101
|
+
};
|
|
102
|
+
return null;
|
|
103
|
+
};
|
|
84
104
|
/** Add managed type, method, and field nodes from member evidence. */
|
|
85
105
|
export const addMemberNodes = (state, artifactNode, parsed) => {
|
|
86
|
-
const
|
|
87
|
-
if (
|
|
88
|
-
return
|
|
106
|
+
const memberInput = parsed.members;
|
|
107
|
+
if (memberInput === null)
|
|
108
|
+
return;
|
|
109
|
+
const members = memberInput.result;
|
|
89
110
|
const { types, methods, fields } = members;
|
|
90
111
|
const typeCoverage = managedSourceCoverage(members.coverage.state);
|
|
91
112
|
const methodCoverage = managedSourceCoverage(members.coverage.state);
|
|
92
113
|
const fieldCoverage = managedSourceCoverage(members.coverage.state);
|
|
114
|
+
const sourceEvidence = sourceManagedEvidence(state, memberInput.evidence, members.coverage.state);
|
|
93
115
|
for (const type of types) {
|
|
94
|
-
const node = typeNode(state, type,
|
|
116
|
+
const node = typeNode(state, type, sourceEvidence);
|
|
95
117
|
state.nodes.push(node);
|
|
96
118
|
state.typeNodes.set(type.token, node);
|
|
97
119
|
addContainsEdge(state, artifactNode, node, {
|
|
@@ -100,7 +122,7 @@ export const addMemberNodes = (state, artifactNode, parsed) => {
|
|
|
100
122
|
});
|
|
101
123
|
}
|
|
102
124
|
for (const method of methods) {
|
|
103
|
-
const node = methodNode(state, method,
|
|
125
|
+
const node = methodNode(state, method, sourceEvidence);
|
|
104
126
|
state.nodes.push(node);
|
|
105
127
|
state.methodNodes.set(method.token, node);
|
|
106
128
|
const owner = method.declaring_type_token === null
|
|
@@ -112,7 +134,7 @@ export const addMemberNodes = (state, artifactNode, parsed) => {
|
|
|
112
134
|
});
|
|
113
135
|
}
|
|
114
136
|
for (const field of fields) {
|
|
115
|
-
const node = fieldNode(state, field,
|
|
137
|
+
const node = fieldNode(state, field, sourceEvidence);
|
|
116
138
|
state.nodes.push(node);
|
|
117
139
|
state.fieldNodes.set(field.token, node);
|
|
118
140
|
const owner = field.declaring_type_token === null
|
|
@@ -123,14 +145,9 @@ export const addMemberNodes = (state, artifactNode, parsed) => {
|
|
|
123
145
|
coverage: fieldCoverage,
|
|
124
146
|
});
|
|
125
147
|
}
|
|
126
|
-
return {
|
|
127
|
-
types: types.length,
|
|
128
|
-
methods: methods.length,
|
|
129
|
-
fields: fields.length,
|
|
130
|
-
};
|
|
131
148
|
};
|
|
132
149
|
/** Build a managed type application node. */
|
|
133
|
-
const typeNode = (state, type,
|
|
150
|
+
const typeNode = (state, type, evidence) => createJavaScriptApplicationNode({
|
|
134
151
|
kind: "managed-type",
|
|
135
152
|
identity: artifactLocalIdentity(state.artifactSha256, "managed-type-token", type.token),
|
|
136
153
|
observations: [
|
|
@@ -144,12 +161,12 @@ const typeNode = (state, type, coverage) => createJavaScriptApplicationNode({
|
|
|
144
161
|
flags: type.flags,
|
|
145
162
|
extends_token: type.extends_token,
|
|
146
163
|
},
|
|
147
|
-
evidence
|
|
164
|
+
evidence,
|
|
148
165
|
},
|
|
149
166
|
],
|
|
150
167
|
});
|
|
151
168
|
/** Build a managed method application node. */
|
|
152
|
-
const methodNode = (state, method,
|
|
169
|
+
const methodNode = (state, method, evidence) => createJavaScriptApplicationNode({
|
|
153
170
|
kind: "managed-method",
|
|
154
171
|
identity: artifactLocalIdentity(state.artifactSha256, "managed-method-token", method.token),
|
|
155
172
|
observations: [
|
|
@@ -169,12 +186,12 @@ const methodNode = (state, method, coverage) => createJavaScriptApplicationNode(
|
|
|
169
186
|
normalized_il_sha256: method.body.normalized_il_sha256,
|
|
170
187
|
il_size: method.body.il_size,
|
|
171
188
|
},
|
|
172
|
-
evidence
|
|
189
|
+
evidence,
|
|
173
190
|
},
|
|
174
191
|
],
|
|
175
192
|
});
|
|
176
193
|
/** Build a managed field application node. */
|
|
177
|
-
const fieldNode = (state, field,
|
|
194
|
+
const fieldNode = (state, field, evidence) => createJavaScriptApplicationNode({
|
|
178
195
|
kind: "managed-field",
|
|
179
196
|
identity: artifactLocalIdentity(state.artifactSha256, "managed-field-token", field.token),
|
|
180
197
|
observations: [
|
|
@@ -191,24 +208,30 @@ const fieldNode = (state, field, coverage) => createJavaScriptApplicationNode({
|
|
|
191
208
|
signature_sha256: field.signature.raw_sha256,
|
|
192
209
|
signature_status: field.signature.parse_status,
|
|
193
210
|
},
|
|
194
|
-
evidence
|
|
211
|
+
evidence,
|
|
195
212
|
},
|
|
196
213
|
],
|
|
197
214
|
});
|
|
198
215
|
/** Add P/Invoke import and native implementation boundary nodes. */
|
|
199
216
|
export const addBoundaryNodes = (state, artifactNode, parsed) => {
|
|
200
|
-
const
|
|
201
|
-
if (
|
|
202
|
-
return
|
|
217
|
+
const boundaryInput = parsed.boundaries;
|
|
218
|
+
if (boundaryInput === null)
|
|
219
|
+
return;
|
|
220
|
+
const boundaries = boundaryInput.result;
|
|
203
221
|
const { pinvoke_imports: pinvokes, native_implementations: implementations } = boundaries;
|
|
204
222
|
const pinvokeCoverage = managedSourceCoverage(boundaries.coverage.state);
|
|
205
223
|
const implementationCoverage = managedSourceCoverage(boundaries.coverage.state);
|
|
224
|
+
const sourceEvidence = sourceManagedEvidence(state, boundaryInput.evidence, boundaries.coverage.state);
|
|
206
225
|
for (const pinvoke of pinvokes) {
|
|
207
|
-
const node = pinvokeNode(state, pinvoke,
|
|
226
|
+
const node = pinvokeNode(state, pinvoke, sourceEvidence);
|
|
208
227
|
state.nodes.push(node);
|
|
209
|
-
const
|
|
210
|
-
?
|
|
211
|
-
:
|
|
228
|
+
const method = pinvoke.member_token === null
|
|
229
|
+
? undefined
|
|
230
|
+
: state.methodNodes.get(pinvoke.member_token);
|
|
231
|
+
const memberEvidence = method === undefined || parsed.members === null
|
|
232
|
+
? undefined
|
|
233
|
+
: parsed.members.evidence;
|
|
234
|
+
const owner = method ?? artifactNode;
|
|
212
235
|
state.edges.push(createJavaScriptApplicationEdge({
|
|
213
236
|
source_node_id: owner.node_id,
|
|
214
237
|
target_node_id: node.node_id,
|
|
@@ -218,11 +241,11 @@ export const addBoundaryNodes = (state, artifactNode, parsed) => {
|
|
|
218
241
|
import_name: pinvoke.import_name,
|
|
219
242
|
import_scope_name: pinvoke.import_scope_name,
|
|
220
243
|
},
|
|
221
|
-
evidence:
|
|
244
|
+
evidence: pinvokeAssociationEvidence(state, boundaryInput.evidence, pinvokeCoverage, memberEvidence),
|
|
222
245
|
}));
|
|
223
246
|
}
|
|
224
247
|
for (const implementation of implementations) {
|
|
225
|
-
const node = nativeImplementationNode(state, implementation,
|
|
248
|
+
const node = nativeImplementationNode(state, implementation, sourceEvidence);
|
|
226
249
|
state.nodes.push(node);
|
|
227
250
|
const owner = state.methodNodes.get(implementation.token) ?? artifactNode;
|
|
228
251
|
addContainsEdge(state, owner, node, {
|
|
@@ -230,13 +253,9 @@ export const addBoundaryNodes = (state, artifactNode, parsed) => {
|
|
|
230
253
|
coverage: implementationCoverage,
|
|
231
254
|
});
|
|
232
255
|
}
|
|
233
|
-
return {
|
|
234
|
-
pinvoke_imports: pinvokes.length,
|
|
235
|
-
native_implementations: implementations.length,
|
|
236
|
-
};
|
|
237
256
|
};
|
|
238
257
|
/** Build a managed P/Invoke import application node. */
|
|
239
|
-
const pinvokeNode = (state, pinvoke,
|
|
258
|
+
const pinvokeNode = (state, pinvoke, evidence) => createJavaScriptApplicationNode({
|
|
240
259
|
kind: "managed-pinvoke-import",
|
|
241
260
|
identity: artifactLocalIdentity(state.artifactSha256, "managed-pinvoke-token", pinvoke.token),
|
|
242
261
|
observations: [
|
|
@@ -252,12 +271,12 @@ const pinvokeNode = (state, pinvoke, coverage) => createJavaScriptApplicationNod
|
|
|
252
271
|
call_convention: pinvoke.call_convention,
|
|
253
272
|
verification: pinvoke.verification,
|
|
254
273
|
},
|
|
255
|
-
evidence
|
|
274
|
+
evidence,
|
|
256
275
|
},
|
|
257
276
|
],
|
|
258
277
|
});
|
|
259
278
|
/** Build a managed native implementation application node. */
|
|
260
|
-
const nativeImplementationNode = (state, implementation,
|
|
279
|
+
const nativeImplementationNode = (state, implementation, evidence) => createJavaScriptApplicationNode({
|
|
261
280
|
kind: "managed-native-implementation",
|
|
262
281
|
identity: artifactLocalIdentity(state.artifactSha256, "managed-native-implementation-token", implementation.token),
|
|
263
282
|
observations: [
|
|
@@ -273,7 +292,7 @@ const nativeImplementationNode = (state, implementation, coverage) => createJava
|
|
|
273
292
|
boundary_kind: implementation.boundary_kind,
|
|
274
293
|
body_interpretation: implementation.body_interpretation,
|
|
275
294
|
},
|
|
276
|
-
evidence
|
|
295
|
+
evidence,
|
|
277
296
|
},
|
|
278
297
|
],
|
|
279
298
|
});
|
|
@@ -284,7 +303,7 @@ const addContainsEdge = (state, source, target, options) => {
|
|
|
284
303
|
target_node_id: target.node_id,
|
|
285
304
|
relation: "contains",
|
|
286
305
|
properties: { kind: options.kind },
|
|
287
|
-
evidence:
|
|
306
|
+
evidence: projectedManagedEvidence(state, "project-managed-contains", options.coverage),
|
|
288
307
|
}));
|
|
289
308
|
};
|
|
290
309
|
/** Build an artifact-local key identity for a managed graph entity. */
|
|
@@ -296,7 +315,13 @@ const artifactLocalIdentity = (artifactSha256, namespace, key) => ({
|
|
|
296
315
|
key,
|
|
297
316
|
});
|
|
298
317
|
/** Build managed static-analysis evidence for a graph observation. */
|
|
299
|
-
const
|
|
318
|
+
const sourceManagedEvidence = (state, source, coverageState) => createManagedEvidence(state, source.operation, managedSourceCoverage(coverageState), [source.evidence_id]);
|
|
319
|
+
const projectedManagedEvidence = (state, operation, coverage = managedSourceCoverage("complete")) => createManagedEvidence(state, operation, coverage, state.evidenceLinks);
|
|
320
|
+
const pinvokeAssociationEvidence = (state, boundaryEvidence, coverage, memberEvidence) => createManagedEvidence(state, boundaryEvidence.operation, coverage, [
|
|
321
|
+
boundaryEvidence.evidence_id,
|
|
322
|
+
...(memberEvidence === undefined ? [] : [memberEvidence.evidence_id]),
|
|
323
|
+
]);
|
|
324
|
+
const createManagedEvidence = (state, operation, coverage, evidenceIds) => ({
|
|
300
325
|
authority: "managed-static-analysis",
|
|
301
326
|
state: "observed",
|
|
302
327
|
confidence: "exact",
|
|
@@ -324,7 +349,7 @@ const managedEvidence = (state, operation, coverage = managedSourceCoverage("com
|
|
|
324
349
|
: [
|
|
325
350
|
"The source managed Evidence slice is incomplete; unreturned or unavailable items remain unobserved.",
|
|
326
351
|
],
|
|
327
|
-
evidence_ids:
|
|
352
|
+
evidence_ids: [...evidenceIds],
|
|
328
353
|
});
|
|
329
354
|
/** Sanitize an artifact path into a managed graph location. */
|
|
330
355
|
const graphArtifactPath = (path) => {
|
|
@@ -413,7 +413,8 @@ export const managedNativeBoundaryInspectionSchema = z.object({
|
|
|
413
413
|
requires_artifact_sha256: digestSchema,
|
|
414
414
|
requires_mvid: cliMetadataGuidSchema.nullable(),
|
|
415
415
|
}),
|
|
416
|
-
cli_native: z
|
|
416
|
+
cli_native: z
|
|
417
|
+
.object({
|
|
417
418
|
il_only: z.boolean(),
|
|
418
419
|
requires_32bit: z.boolean(),
|
|
419
420
|
strong_name_signed: z.boolean(),
|
|
@@ -421,7 +422,8 @@ export const managedNativeBoundaryInspectionSchema = z.object({
|
|
|
421
422
|
ready_to_run_signature: z.boolean(),
|
|
422
423
|
managed_native_header_rva: z.number().int().min(0).max(0xffff_ffff),
|
|
423
424
|
managed_native_header_size: z.number().int().min(0).max(0xffff_ffff),
|
|
424
|
-
})
|
|
425
|
+
})
|
|
426
|
+
.nullable(),
|
|
425
427
|
module_refs: z.array(managedModuleReferenceSchema),
|
|
426
428
|
pinvoke_imports: z.array(managedNativeImportSchema),
|
|
427
429
|
native_implementations: z.array(managedNativeImplementationSchema),
|
|
@@ -429,8 +431,8 @@ export const managedNativeBoundaryInspectionSchema = z.object({
|
|
|
429
431
|
module_ref_count: z.number().int().min(0),
|
|
430
432
|
pinvoke_import_count: z.number().int().min(0),
|
|
431
433
|
native_implementation_count: z.number().int().min(0),
|
|
432
|
-
ready_to_run: z.boolean(),
|
|
433
|
-
mixed_mode_or_native_header: z.boolean(),
|
|
434
|
+
ready_to_run: z.boolean().nullable(),
|
|
435
|
+
mixed_mode_or_native_header: z.boolean().nullable(),
|
|
434
436
|
}),
|
|
435
437
|
coverage: z.object({
|
|
436
438
|
state: z.enum(["complete", "partial", "unavailable"]),
|
|
@@ -165,18 +165,12 @@ export const managedMemberComparisonResultSchema = z.strictObject({
|
|
|
165
165
|
});
|
|
166
166
|
/** Compare managed members with constrained exact and structural identities. */
|
|
167
167
|
export const compareManagedMembers = (left, right) => {
|
|
168
|
-
const leftCoverage = {
|
|
169
|
-
sourceComplete: left.result.coverage.state === "complete",
|
|
170
|
-
};
|
|
171
|
-
const rightCoverage = {
|
|
172
|
-
sourceComplete: right.result.coverage.state === "complete",
|
|
173
|
-
};
|
|
174
168
|
const { methodMatches, fieldMatches } = keyMembers(left, right);
|
|
175
169
|
const itemContext = {
|
|
176
170
|
leftEvidenceId: left.evidenceId,
|
|
177
171
|
rightEvidenceId: right.evidenceId,
|
|
178
|
-
leftComplete:
|
|
179
|
-
rightComplete:
|
|
172
|
+
leftComplete: left.result.metadata.status === "complete",
|
|
173
|
+
rightComplete: right.result.metadata.status === "complete",
|
|
180
174
|
};
|
|
181
175
|
const methodItems = buildMethodItems(methodMatches, itemContext);
|
|
182
176
|
const fieldItems = buildFieldItems(fieldMatches, itemContext);
|
|
@@ -212,4 +206,3 @@ export const compareManagedMembers = (left, right) => {
|
|
|
212
206
|
};
|
|
213
207
|
return managedMemberComparisonResultSchema.parse(result);
|
|
214
208
|
};
|
|
215
|
-
export { parseManagedMemberEvidence } from "./managedMemberComparisonMatch.js";
|
|
@@ -11,21 +11,21 @@ export const sha256 = (value) => {
|
|
|
11
11
|
const keyMethod = (item) => ({
|
|
12
12
|
item,
|
|
13
13
|
exactKey: item.body.status === "present" && item.body.normalized_il_sha256 !== null
|
|
14
|
-
?
|
|
14
|
+
? sha256([
|
|
15
15
|
"method-exact",
|
|
16
16
|
item.signature.raw_sha256,
|
|
17
17
|
item.body.normalized_il_sha256,
|
|
18
18
|
])
|
|
19
19
|
: null,
|
|
20
20
|
// The raw blob is the exact signature; decoding only feeds shape keys.
|
|
21
|
-
signatureKey:
|
|
21
|
+
signatureKey: sha256([
|
|
22
22
|
"method-signature",
|
|
23
23
|
item.declaring_type,
|
|
24
24
|
item.name,
|
|
25
25
|
item.signature.raw_sha256,
|
|
26
26
|
]),
|
|
27
27
|
structuralKey: item.signature.parse_status === "decoded" && item.body.status === "present"
|
|
28
|
-
?
|
|
28
|
+
? sha256([
|
|
29
29
|
"method-structural",
|
|
30
30
|
item.signature.kind,
|
|
31
31
|
item.signature.calling_convention,
|
|
@@ -56,24 +56,23 @@ const keyMethod = (item) => ({
|
|
|
56
56
|
const keyField = (item) => ({
|
|
57
57
|
item,
|
|
58
58
|
exactKey: item.signature.parse_status === "decoded"
|
|
59
|
-
?
|
|
59
|
+
? sha256(["field-exact", item.signature.raw_sha256])
|
|
60
60
|
: null,
|
|
61
61
|
// Only an undecoded field reaches this round: a decoded field with the
|
|
62
62
|
// same raw signature already met its counterpart in the exact round.
|
|
63
|
-
signatureKey:
|
|
63
|
+
signatureKey: sha256([
|
|
64
64
|
"field-signature",
|
|
65
65
|
item.declaring_type,
|
|
66
66
|
item.name,
|
|
67
67
|
item.signature.raw_sha256,
|
|
68
68
|
]),
|
|
69
|
-
structuralKey:
|
|
69
|
+
structuralKey: sha256([
|
|
70
70
|
"field-structural",
|
|
71
71
|
item.signature.kind,
|
|
72
72
|
item.signature.field_type,
|
|
73
73
|
item.flags,
|
|
74
74
|
]),
|
|
75
75
|
});
|
|
76
|
-
const stableKey = (value) => sha256(value);
|
|
77
76
|
const matchMethods = (left, right) => matchByKeys({
|
|
78
77
|
left,
|
|
79
78
|
right,
|
|
@@ -4,8 +4,6 @@ import { managedNativeBoundaryInspectionSchema, } from "./managedArtifact.js";
|
|
|
4
4
|
import { parseManagedInspectionEvidence } from "./managedInspectionEvidence.js";
|
|
5
5
|
import { managedNativeVerificationResultSchema, } from "./managedNativeVerificationSchemas.js";
|
|
6
6
|
import { buildVerificationResult, collectNativeSymbols, verifyPinvoke, } from "./managedNativeVerificationMatch.js";
|
|
7
|
-
export { managedNativeVerificationInputSchema, } from "./managedNativeVerificationSchemas.js";
|
|
8
|
-
export { managedNativeVerificationResultSchema };
|
|
9
7
|
const sha256 = (value) => {
|
|
10
8
|
const serialized = canonicalize(value);
|
|
11
9
|
if (serialized === undefined)
|
|
@@ -71,16 +71,22 @@ const sameSymbolName = (expected, native) => expected ===
|
|
|
71
71
|
: native.name);
|
|
72
72
|
const normalizeModule = (value) => basename(value)
|
|
73
73
|
.toLowerCase()
|
|
74
|
-
.replace(/^lib/u, "")
|
|
75
74
|
.replace(/\.(dll|dylib|so|node|exe)$/u, "");
|
|
75
|
+
const nativeModuleIdentities = (value) => {
|
|
76
|
+
const filename = basename(value).toLowerCase();
|
|
77
|
+
const stem = normalizeModule(filename);
|
|
78
|
+
const identities = new Set([stem]);
|
|
79
|
+
if (/\.(dylib|so)$/u.test(filename) && stem.startsWith("lib"))
|
|
80
|
+
identities.add(stem.slice("lib".length));
|
|
81
|
+
return identities;
|
|
82
|
+
};
|
|
76
83
|
const moduleCompatible = (scope, symbol) => {
|
|
77
84
|
if (scope === null)
|
|
78
85
|
return true;
|
|
79
86
|
const expected = normalizeModule(scope);
|
|
80
87
|
return [symbol.module_name, symbol.module_path]
|
|
81
88
|
.filter((value) => value !== null)
|
|
82
|
-
.
|
|
83
|
-
.some((value) => value === expected);
|
|
89
|
+
.some((value) => nativeModuleIdentities(value).has(expected));
|
|
84
90
|
};
|
|
85
91
|
const candidateNames = (managed) => {
|
|
86
92
|
const names = new Set([managed.import_name]);
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { CANONICAL_BASE64_PATTERN } from "../stringPatterns.js";
|
|
2
3
|
const unsignedHex = z.string().regex(/^0x(?:0|[1-9a-f][0-9a-f]{0,15})$/);
|
|
3
4
|
const index = z.number().int().nonnegative();
|
|
4
5
|
const scalar = z.union([z.string(), z.number().int()]);
|
|
5
6
|
const range = z.strictObject({ offset: unsignedHex, bytes: unsignedHex });
|
|
6
|
-
const canonicalBase64 = z
|
|
7
|
-
.string()
|
|
8
|
-
.regex(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/][AQgw]==|[A-Za-z0-9+/]{2}[AEIMQUYcgkosw048]=)?$/);
|
|
7
|
+
const canonicalBase64 = z.string().regex(CANONICAL_BASE64_PATTERN);
|
|
9
8
|
const name = z.strictObject({
|
|
10
9
|
display: z.string(),
|
|
11
10
|
bytes_base64: canonicalBase64.nullable(),
|
|
@@ -71,7 +71,7 @@ const inferredJumpTableSchema = z
|
|
|
71
71
|
dispatch_address: z.string().min(1),
|
|
72
72
|
data_sources: z.array(jumpTableDataSourceSchema),
|
|
73
73
|
mappings: z.array(jumpTableMappingSchema),
|
|
74
|
-
default_targets: z.array(jumpTableDefaultTargetSchema)
|
|
74
|
+
default_targets: z.array(jumpTableDefaultTargetSchema),
|
|
75
75
|
limitations: z.array(z.string()),
|
|
76
76
|
})
|
|
77
77
|
.strict();
|
|
@@ -3,11 +3,11 @@ import { localPathStringSchema } from "../localPath.js";
|
|
|
3
3
|
const hexSchema = z.string().regex(/^0x[0-9a-f]+$/u);
|
|
4
4
|
const nativeString = z
|
|
5
5
|
.string()
|
|
6
|
-
.regex(/^[^\
|
|
6
|
+
.regex(/^[^\x00]*$/u, "Native launch and breakpoint strings cannot contain NUL");
|
|
7
7
|
/** Objective-C class names and selectors never contain spaces or brackets. */
|
|
8
8
|
const objcName = nativeString
|
|
9
9
|
.min(1)
|
|
10
|
-
.regex(/^[^\s
|
|
10
|
+
.regex(/^[^\s\x5b\x5d]+$/u, "Use the bare name without spaces or brackets");
|
|
11
11
|
const functionBreakpoint = {
|
|
12
12
|
kind: z.literal("function"),
|
|
13
13
|
name: nativeString
|
|
@@ -46,7 +46,7 @@ export const nativeCallObservationInputSchema = z.strictObject({
|
|
|
46
46
|
.record(z
|
|
47
47
|
.string()
|
|
48
48
|
.min(1)
|
|
49
|
-
.regex(/^[^=\
|
|
49
|
+
.regex(/^[^=\x00]+$/u, "Environment names cannot contain '=' or NUL"), z.string().regex(/^[^\x00]*$/u, "Environment values cannot contain NUL"))
|
|
50
50
|
.default({})
|
|
51
51
|
.describe("Overrides on top of the environment REA runs with."),
|
|
52
52
|
working_directory: localPathStringSchema.optional(),
|
|
@@ -54,6 +54,13 @@ export const nativeInstructionSchema = z.strictObject({
|
|
|
54
54
|
conditional: z.boolean(),
|
|
55
55
|
computed: z.boolean(),
|
|
56
56
|
direct_destinations: z.array(z.string()),
|
|
57
|
+
classification_evidence: z
|
|
58
|
+
.array(z.strictObject({
|
|
59
|
+
source: z.string().min(1),
|
|
60
|
+
value: z.string().min(1),
|
|
61
|
+
}))
|
|
62
|
+
.optional()
|
|
63
|
+
.describe("Observed provider facts used to classify flow; older captures or other providers may omit them."),
|
|
57
64
|
}),
|
|
58
65
|
references: z.array(reference),
|
|
59
66
|
limitations: z.array(z.string()),
|
|
@@ -16,9 +16,7 @@ export const nativePcodeOperationSchema = z.strictObject({
|
|
|
16
16
|
sequence: z.number().int().nonnegative(),
|
|
17
17
|
opcode: z.string().min(1),
|
|
18
18
|
is_dead: z.boolean(),
|
|
19
|
-
block_membership: z
|
|
20
|
-
.enum(["member", "detached", "unavailable"])
|
|
21
|
-
.default("unavailable"),
|
|
19
|
+
block_membership: z.enum(["member", "detached", "unavailable"]),
|
|
22
20
|
inputs: z.array(nativeVarnodeSchema),
|
|
23
21
|
output: nativeVarnodeSchema.nullable(),
|
|
24
22
|
});
|
|
@@ -50,20 +48,16 @@ export const nativeValueFlowSchema = z.discriminatedUnion("available", [
|
|
|
50
48
|
operations: z.array(nativePcodeOperationSchema),
|
|
51
49
|
def_use: z.array(nativePcodeDefUseSchema),
|
|
52
50
|
effects: z.array(nativePcodeEffectSchema),
|
|
53
|
-
parameters: z
|
|
54
|
-
.array(z.strictObject({
|
|
51
|
+
parameters: z.array(z.strictObject({
|
|
55
52
|
ordinal: z.number().int().nonnegative(),
|
|
56
53
|
name: z.string(),
|
|
57
54
|
data_type: z.string(),
|
|
58
|
-
}))
|
|
59
|
-
|
|
60
|
-
parameter_uses: z
|
|
61
|
-
.array(z.strictObject({
|
|
55
|
+
})),
|
|
56
|
+
parameter_uses: z.array(z.strictObject({
|
|
62
57
|
ordinal: z.number().int().nonnegative(),
|
|
63
58
|
use: z.string(),
|
|
64
59
|
input_index: z.number().int().nonnegative(),
|
|
65
|
-
}))
|
|
66
|
-
.default([]),
|
|
60
|
+
})),
|
|
67
61
|
truncated: z.boolean(),
|
|
68
62
|
omitted_operations_lower_bound: z.number().int().nonnegative(),
|
|
69
63
|
known_omitted_inputs: z.number().int().nonnegative(),
|