rea-agents 6.1.0 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -24
- package/bridge/ghidra/ReaGhidraBridge.java +32 -4
- package/bridge/hopper_bridge.py +8 -1
- package/dist/android/JadxConfiguration.js +87 -7
- package/dist/android/JadxMcpTransport.js +14 -2
- package/dist/android/JadxProvider.js +64 -36
- package/dist/android/JadxSession.js +51 -9
- package/dist/application/BinaryTargetResolver.js +68 -20
- package/dist/application/BrowserEvidence.js +3 -8
- package/dist/application/BrowserScenarioEvidence.js +4 -20
- package/dist/application/CapabilityInventory.js +43 -9
- package/dist/application/ClientConfigurationDocument.js +97 -25
- package/dist/application/ClientRegistrationStatus.js +19 -6
- package/dist/application/DirectAnalysis.js +41 -20
- package/dist/application/DirectAnalysisCleanup.js +71 -0
- package/dist/application/DirectAnalysisStatus.js +3 -7
- package/dist/application/Doctor.js +40 -53
- package/dist/application/DoctorDiagnostics.js +2 -3
- package/dist/application/EnhancedTools.js +51 -6
- package/dist/application/EvidenceBundleFiles.js +8 -3
- package/dist/application/InvestigationProviders.js +13 -5
- package/dist/application/JsonFiles.js +56 -23
- package/dist/application/LinuxHopper.js +11 -7
- package/dist/application/MacHopper.js +15 -18
- package/dist/application/RealHopperAssertions.js +0 -11
- package/dist/application/ReconstructionObligationCandidates.js +10 -3
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -1
- package/dist/application/ReferenceSourceImportEntries.js +1 -1
- package/dist/application/RegularFileRead.js +17 -0
- package/dist/application/Setup.js +26 -23
- package/dist/application/SetupClientConfiguration.js +18 -7
- package/dist/application/SetupHost.js +20 -29
- package/dist/application/SetupPlan.js +24 -20
- package/dist/application/SetupSkill.js +57 -8
- package/dist/application/SupportedClients.js +43 -0
- package/dist/application/Uninstall.js +98 -30
- package/dist/application/UpdateMaintenance.js +13 -7
- package/dist/application/UpdateRuntime.js +12 -12
- package/dist/application/Utf8JsonInput.js +64 -0
- package/dist/application/WebScriptExportService.js +38 -5
- package/dist/application/WorkflowEvidence.js +25 -2
- package/dist/application/XrefsAddressResolution.js +45 -0
- package/dist/application/analysisView/AnalysisViewService.js +76 -0
- package/dist/application/android/AndroidAnalysisService.js +1 -1
- package/dist/application/binary/AnalysisClientCleanup.js +30 -5
- package/dist/application/binary/AnalysisProviderEvaluation.js +1 -2
- package/dist/application/binary/AnalysisProviderRegistry.js +2 -6
- package/dist/application/binary/AnalysisSnapshotCache.js +13 -10
- package/dist/application/binary/BinarySession.js +86 -29
- package/dist/application/binary/BinarySessionComposition.js +1 -3
- package/dist/application/binary/BinarySessionExecution.js +3 -5
- package/dist/application/binary/BinarySessionOpen.js +10 -2
- package/dist/application/binary/BinarySessionRecords.js +1 -1
- package/dist/application/binary/BinarySessionStatus.js +1 -6
- package/dist/application/binary/CompositeProvider.js +4 -18
- package/dist/application/binary/LazyAnalysisProvider.js +5 -5
- package/dist/application/binary/SessionProviderRouter.js +27 -135
- package/dist/application/homebrew.js +48 -0
- package/dist/application/javascript/ElectronActiveEvidence.js +10 -14
- package/dist/application/javascript/ElectronBoundaryAnalysis.js +2 -2
- package/dist/application/javascript/ElectronBoundaryGraphNative.js +5 -1
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +3 -6
- package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +107 -46
- package/dist/application/javascript/JavaScriptApplicationService.js +7 -1
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +59 -45
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -9
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +19 -27
- package/dist/application/javascript/JavaScriptArtifactGraphBundlers.js +11 -3
- package/dist/application/javascript/JavaScriptArtifactGraphContext.js +9 -0
- package/dist/application/javascript/JavaScriptArtifactGraphDocuments.js +8 -5
- package/dist/application/javascript/JavaScriptArtifactGraphFindings.js +46 -29
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +86 -27
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +52 -9
- package/dist/application/javascript/JavaScriptArtifactReconstructionInput.js +1 -0
- package/dist/application/javascript/JavaScriptJsonModules.js +2 -2
- package/dist/application/javascript/JavaScriptModuleRelationships.js +6 -18
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +11 -27
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +4 -5
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +8 -6
- package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphConstruction.js +7 -5
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +3 -4
- package/dist/application/javascript/JavaScriptSemanticGraphEvidence.js +1 -1
- package/dist/application/javascript/JavaScriptSemanticGraphFingerprintProjection.js +2 -2
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +3 -7
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +76 -47
- package/dist/application/javascript/JavaScriptSemanticGraphProjection.js +4 -4
- package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +3 -4
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +51 -25
- package/dist/application/javascript/JavaScriptSemanticTraceService.js +15 -10
- package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
- package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
- package/dist/application/native/NativeCallRoutes.js +2 -4
- package/dist/application/process/ProcessCli.js +11 -11
- package/dist/application/process/ProcessEvidence.js +0 -1
- package/dist/artifacts/ArtifactProvider.js +53 -30
- package/dist/artifacts/ArtifactProviderMetadata.js +1 -4
- package/dist/artifacts/ArtifactReader.js +31 -0
- package/dist/artifacts/AsarArtifactReader.js +81 -17
- package/dist/artifacts/DirectoryArtifactReader.js +2 -1
- package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
- package/dist/artifacts/NativeDmgArtifactReader.js +207 -77
- package/dist/artifacts/NativeDmgOwnership.js +109 -0
- package/dist/artifacts/SafeOutputTree.js +16 -2
- package/dist/artifacts/ZipArtifactReader.js +11 -4
- package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +4 -2
- package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
- package/dist/artifacts/apple/KeyedArchiveReader.js +68 -42
- package/dist/artifacts/apple/MachoLoadCommandReader.js +36 -6
- package/dist/artifacts/extraction/ArtifactExtraction.js +104 -29
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +71 -66
- package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
- package/dist/artifacts/inventory/classify.js +33 -14
- package/dist/artifacts/inventory/hashStableRootArtifact.js +37 -0
- package/dist/artifacts/inventory/reader.js +3 -3
- package/dist/artifacts/inventory/scanCanonical.js +64 -34
- package/dist/artifacts/inventory/scanReader.js +12 -20
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +65 -27
- package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
- package/dist/browser/CdpBrowserProvider.js +6 -6
- package/dist/browser/CdpCaptureEventHandlers.js +2 -4
- package/dist/browser/CdpCaptureEvents.js +0 -1
- package/dist/browser/CdpCaptureStorageFingerprints.js +3 -3
- package/dist/browser/CdpCaptureValues.js +20 -0
- package/dist/browser/CdpElectronInspection.js +2 -2
- package/dist/browser/CdpElectronProvider.js +4 -5
- package/dist/browser/CdpElectronScriptEvents.js +2 -8
- package/dist/browser/CdpElectronScripts.js +4 -5
- package/dist/browser/CdpPageCaptureScripts.js +2 -3
- package/dist/browser/CdpSafeMetadata.js +10 -10
- package/dist/browser/CdpWebMcpDiscovery.js +16 -13
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +64 -49
- package/dist/browser/PlaywrightElectronActiveActions.js +2 -56
- package/dist/browser/PlaywrightElectronActiveProvider.js +10 -6
- package/dist/browser/PlaywrightScenarioArtifacts.js +1 -1
- package/dist/browser/PlaywrightScenarioBrowser.js +269 -66
- package/dist/browser/PlaywrightScenarioEvents.js +1 -1
- package/dist/browser/PlaywrightScenarioSession.js +41 -32
- package/dist/browser/WebSourceMapFetcher.js +32 -6
- package/dist/browser/assets/ScenarioScriptCapture.js +8 -12
- package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
- package/dist/browser/history/CaptureFailures.js +6 -2
- package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
- package/dist/catalogIdentity.js +0 -1
- package/dist/cli/analysisViewCommands.js +36 -0
- package/dist/cli/artifactCommands.js +11 -12
- package/dist/cli/coreAnalysisCommands.js +3 -3
- package/dist/cli/coreBinaryCommands.js +37 -28
- package/dist/cli/coreNativeCommands.js +9 -10
- package/dist/cli/electronCommands.js +12 -13
- package/dist/cli/interactiveSetup.js +6 -6
- package/dist/cli/javascriptApplicationAnalysis.js +2 -12
- package/dist/cli/jsonOutput.js +3 -2
- package/dist/cli/managedCommands.js +7 -8
- package/dist/cli/nativeCallCommands.js +1 -2
- package/dist/cli/omittableDefaults.js +50 -0
- package/dist/cli/processCommands.js +3 -2
- package/dist/cli/setupCommands.js +16 -15
- package/dist/cli/streamedJsonOutput.js +83 -4
- package/dist/cli/utilityCommands.js +10 -12
- package/dist/cli.js +19 -8
- package/dist/cliBrowserScenarioCommands.js +2 -2
- package/dist/cliCommandNames.js +1 -0
- package/dist/cliJsonFile.js +179 -0
- package/dist/cliJsonInput.js +60 -33
- package/dist/cliObservationOptions.js +4 -0
- package/dist/cliOutput.js +0 -38
- package/dist/composition/auxiliaryAnalysisProviders.js +30 -25
- package/dist/composition/binary.js +9 -9
- package/dist/composition/browserScenario.js +2 -1
- package/dist/composition/directAnalysis.js +20 -14
- package/dist/composition/electronScenario.js +1 -1
- package/dist/composition/optionalObservationProviders.js +12 -7
- package/dist/config/environment.js +6 -0
- package/dist/config/ghidraStartupTimeout.js +4 -9
- package/dist/config/homeDirectory.js +12 -0
- package/dist/config/mcpResponseBudget.js +9 -1
- package/dist/config/parseConfig.js +7 -3
- package/dist/config/parsers.js +19 -22
- package/dist/contracts/analysisViewToolContracts.js +56 -0
- package/dist/contracts/applicationToolContracts.js +5 -4
- package/dist/contracts/artifactComparisonExample.js +7 -7
- package/dist/contracts/artifactToolContracts.js +1 -1
- package/dist/contracts/browserScenarioToolContracts.js +1 -1
- package/dist/contracts/browserToolContracts.js +19 -15
- package/dist/contracts/enhancedInputs.js +2 -2
- package/dist/contracts/enhancedToolContracts.js +4 -3
- package/dist/contracts/errorSchemas.js +3 -1
- package/dist/contracts/evm/evmToolContracts.js +1 -1
- package/dist/contracts/functionComparisonExample.js +8 -0
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/inputSchemaPresentation.js +181 -0
- package/dist/contracts/investigationExamples.js +4 -3
- package/dist/contracts/javascript/electronToolContracts.js +3 -2
- package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +3 -22
- package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +248 -0
- package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
- package/dist/contracts/javascript/javascriptRuntimeReconciliationExample.js +8 -7
- package/dist/contracts/managed/managedToolContracts.js +8 -12
- package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
- package/dist/contracts/mobileApplicationGraphExamples.js +8 -8
- package/dist/contracts/native/binaryDiagnosticsToolContracts.js +1 -1
- package/dist/contracts/native/nativeToolContracts.js +2 -2
- package/dist/contracts/officialToolContracts.js +2 -1
- package/dist/contracts/promptContracts.js +2 -2
- package/dist/contracts/providerSelection.js +1 -1
- package/dist/contracts/sessionLifecycleInputs.js +4 -3
- package/dist/contracts/sessionStatusContract.js +3 -2
- package/dist/contracts/sessionToolContracts.js +17 -4
- package/dist/contracts/sessionToolSchemas.js +4 -16
- package/dist/contracts/toolContracts.js +2 -0
- package/dist/contracts/toolEffects.js +1 -0
- package/dist/contracts/toolOutputSchemaGroups.js +138 -94
- package/dist/contracts/toolOutputSchemaPrimitives.js +13 -26
- package/dist/contracts/toolSchemaMetadata.js +18 -69
- package/dist/contracts/webNetworkCaptureToolContracts.js +1 -1
- package/dist/contracts/webRuntimeToolContracts.js +1 -1
- package/dist/contracts/webScriptToolContracts.js +1 -1
- package/dist/doctorRuntime.js +7 -5
- package/dist/domain/analysisErrorBase.js +5 -0
- package/dist/domain/analysisErrorCore.js +3 -0
- package/dist/domain/analysisErrorPresentation.js +22 -5
- package/dist/domain/analysisErrorProjection.js +24 -5
- package/dist/domain/analysisSnapshot.js +31 -31
- package/dist/domain/analysisView/analysisView.js +241 -0
- package/dist/domain/analysisView/analysisViewCoverage.js +19 -0
- package/dist/domain/analysisView/binaryLayoutView.js +159 -0
- package/dist/domain/analysisView/javascriptApplicationView.js +238 -0
- package/dist/domain/android/androidApplication.js +1 -1
- package/dist/domain/android/androidPartialObservation.js +36 -0
- package/dist/domain/apple/appleApplication.js +1 -1
- package/dist/domain/apple/dylibResolution.js +10 -3
- package/dist/domain/apple/interfaceBuilderGraph.js +0 -1
- package/dist/domain/apple/keyedArchive.js +26 -2
- package/dist/domain/artifactComparison.js +15 -6
- package/dist/domain/artifactGraph.js +17 -4
- package/dist/domain/artifactIdentity.js +8 -8
- package/dist/domain/artifactInspection.js +8 -8
- package/dist/domain/artifactInventoryEvidence.js +9 -16
- package/dist/domain/artifactOperationError.js +3 -3
- package/dist/domain/artifactPartialObservation.js +1 -0
- package/dist/domain/artifactPathSyntax.js +49 -0
- package/dist/domain/binaryTarget.js +39 -13
- package/dist/domain/browserCaptureComparison.js +13 -49
- package/dist/domain/browserCompleteness.js +3 -2
- package/dist/domain/browserNetworkEvidence.js +10 -4
- package/dist/domain/browserObservation.js +0 -1
- package/dist/domain/browserObservationSchemas.js +14 -3
- package/dist/domain/browserScenario.js +0 -1
- package/dist/domain/browserScenarioCapture.js +1 -2
- package/dist/domain/browserScenarioCaptureValues.js +2 -2
- package/dist/domain/browserScenarioDiff.js +0 -2
- package/dist/domain/browserScenarioDiffEvidence.js +0 -12
- package/dist/domain/browserScenarioDiffValues.js +2 -2
- package/dist/domain/browserScenarioNormalization.js +3 -3
- package/dist/domain/browserScenarioValues.js +6 -6
- package/dist/domain/callPath.js +15 -18
- package/dist/domain/callPathSchemas.js +2 -2
- package/dist/domain/canonicalDigest.js +7 -1
- package/dist/domain/canonicalOrdering.js +1 -13
- package/dist/domain/changedBehavior.js +5 -6
- package/dist/domain/comparisonSemantics.js +0 -5
- package/dist/domain/completionLedgerGeneration.js +2 -1
- package/dist/domain/configurationErrors.js +12 -0
- package/dist/domain/conformancePackage.js +4 -3
- package/dist/domain/digests.js +0 -3
- package/dist/domain/evidence.js +19 -40
- package/dist/domain/evidenceBundle.js +58 -42
- package/dist/domain/evidenceCompletionLedger.js +2 -1
- package/dist/domain/firmware/firmwareAnalysis.js +4 -3
- package/dist/domain/functionComparison.js +6 -6
- package/dist/domain/functionComparisonDimensions.js +120 -87
- package/dist/domain/functionComparisonNormalization.js +26 -36
- package/dist/domain/functionComparisonResults.js +3 -6
- package/dist/domain/functionComparisonSchemas.js +2 -8
- package/dist/domain/functionDossierEvidence.js +4 -38
- package/dist/domain/hopperValues.js +11 -15
- package/dist/domain/javascript/electronActiveObservation.js +29 -71
- package/dist/domain/javascript/electronObservation.js +14 -3
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +12 -11
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +11 -2
- package/dist/domain/javascript/electronStaticAnalysisNative.js +7 -4
- package/dist/domain/javascript/electronStaticAnalysisValues.js +8 -4
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +3 -1
- package/dist/domain/javascript/javascriptApplicationChangeGraph.js +12 -8
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +6 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +41 -16
- package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
- package/dist/domain/javascript/javascriptApplicationVersionComparison.js +4 -4
- package/dist/domain/javascript/javascriptApplicationVersionComparisonSchemas.js +37 -22
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +50 -36
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +9 -8
- package/dist/domain/javascript/javascriptAstFingerprint.js +2 -2
- package/dist/domain/javascript/javascriptAstValues.js +22 -0
- package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
- package/dist/domain/javascript/javascriptExportShapeComparison.js +10 -3
- package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +58 -22
- package/dist/domain/javascript/javascriptExportShapeSelection.js +7 -7
- package/dist/domain/javascript/javascriptExportShapeVariants.js +70 -16
- package/dist/domain/javascript/javascriptFeatureSeed.js +25 -3
- package/dist/domain/javascript/javascriptFeatureTrace.js +7 -6
- package/dist/domain/javascript/javascriptFeatureTraceSchemas.js +17 -9
- package/dist/domain/javascript/javascriptFeatureTraversal.js +4 -5
- package/dist/domain/javascript/javascriptNativeHandoff.js +7 -7
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
- package/dist/domain/javascript/javascriptRuntimeObservation.js +18 -7
- package/dist/domain/javascript/javascriptRuntimeReconciliation.js +12 -6
- package/dist/domain/javascript/javascriptRuntimeReconciliationActive.js +9 -8
- package/dist/domain/javascript/javascriptRuntimeReconciliationCaptureParsing.js +212 -0
- package/dist/domain/javascript/javascriptRuntimeReconciliationGraph.js +5 -4
- package/dist/domain/javascript/javascriptRuntimeReconciliationInputValidation.js +28 -0
- package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +6 -6
- package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +12 -222
- package/dist/domain/javascript/javascriptRuntimeReconciliationResult.js +2 -2
- package/dist/domain/javascript/javascriptRuntimeReconciliationRuntime.js +15 -4
- package/dist/domain/javascript/javascriptRuntimeReconciliationSchemas.js +2 -2
- package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +7 -7
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +209 -11
- package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
- package/dist/domain/javascript/javascriptSemanticCallResolution.js +9 -7
- package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
- package/dist/domain/javascript/javascriptSemanticChildProcesses.js +4 -3
- package/dist/domain/javascript/javascriptSemanticCoverage.js +20 -0
- package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +7 -9
- package/dist/domain/javascript/javascriptSemanticDataEffects.js +4 -11
- package/dist/domain/javascript/javascriptSemanticFingerprints.js +2 -2
- package/dist/domain/javascript/javascriptSemanticGraph.js +220 -71
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +19 -1
- package/dist/domain/javascript/javascriptSemanticIr.js +0 -4
- package/dist/domain/javascript/javascriptSemanticIterationSources.js +106 -0
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +515 -74
- package/dist/domain/javascript/javascriptSemanticMutationInitializers.js +190 -0
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +44 -36
- package/dist/domain/javascript/javascriptSemanticObjects.js +79 -42
- package/dist/domain/javascript/javascriptSemanticPrimitives.js +8 -14
- package/dist/domain/javascript/javascriptSemanticProjection.js +21 -16
- package/dist/domain/javascript/javascriptSemanticPromises.js +16 -21
- package/dist/domain/javascript/javascriptSemanticPropertyPaths.js +23 -0
- package/dist/domain/javascript/javascriptSemanticProvenance.js +3 -3
- package/dist/domain/javascript/javascriptSemanticQuery.js +8 -2
- package/dist/domain/javascript/javascriptSemanticQueryIdentity.js +3 -2
- package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -9
- package/dist/domain/javascript/javascriptSemanticRequireOrigin.js +16 -10
- package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
- package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
- package/dist/domain/javascript/javascriptSemanticReturns.js +55 -44
- package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
- package/dist/domain/javascript/javascriptSemanticTraversal.js +6 -1
- package/dist/domain/javascript/javascriptSemanticValues.js +180 -76
- package/dist/domain/javascript/javascriptSourceMapPaths.js +114 -0
- package/dist/domain/javascript/javascriptSourceParser.js +34 -9
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -6
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +26 -16
- package/dist/domain/javascript/sourceToBundleComparison.js +19 -8
- package/dist/domain/javascript/sourceToBundleSignals.js +53 -25
- package/dist/domain/jsonSerialization.js +109 -55
- package/dist/domain/jsonShape.js +46 -19
- package/dist/domain/localPath.js +10 -4
- package/dist/domain/managed/managedApplicationGraph.js +10 -6
- package/dist/domain/managed/managedApplicationGraphNodes.js +82 -57
- package/dist/domain/managed/managedArtifact.js +6 -4
- package/dist/domain/managed/managedMemberComparison.js +2 -9
- package/dist/domain/managed/managedMemberComparisonMatch.js +6 -7
- package/dist/domain/managed/managedNativeVerification.js +0 -2
- package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
- package/dist/domain/native/binaryLayout.js +2 -3
- package/dist/domain/native/nativeApiBoundary.js +1 -1
- package/dist/domain/native/nativeCallObservation.js +3 -3
- package/dist/domain/native/nativeInstruction.js +7 -0
- package/dist/domain/native/nativeValueFlow.js +5 -11
- package/dist/domain/native/objcSwiftMetadata.js +15 -17
- package/dist/domain/native/recordedCrash.js +2 -3
- package/dist/domain/offsetDateTime.js +17 -0
- package/dist/domain/process/processCapture.js +22 -20
- package/dist/domain/process/processCaptureCoverage.js +70 -0
- package/dist/domain/process/processCaptureExample.js +45 -1
- package/dist/domain/process/processCaptureParsing.js +1 -34
- package/dist/domain/process/processCaptureValidation.js +82 -13
- package/dist/domain/process/processComparison.js +39 -43
- package/dist/domain/process/processObservation.js +10 -2
- package/dist/domain/process/processScenario.js +24 -2
- package/dist/domain/process/processTraceComparison.js +0 -2
- package/dist/domain/process/processTraceDimensionProjection.js +1 -1
- package/dist/domain/process/processTraceEvaluation.js +19 -15
- package/dist/domain/process/processTraceSpecification.js +4 -7
- package/dist/domain/providerAdapterError.js +2 -0
- package/dist/domain/providerCleanupError.js +6 -2
- package/dist/domain/reconstructionCoverage.js +7 -3
- package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
- package/dist/domain/reconstructionReadinessSchemas.js +2 -1
- package/dist/domain/reconstructionUnknowns.js +4 -3
- package/dist/domain/reconstructionVerification.js +6 -5
- package/dist/domain/reconstructionVerificationSchemas.js +2 -1
- package/dist/domain/referenceSourceGraph.js +27 -28
- package/dist/domain/referenceSourceImportParsing.js +34 -45
- package/dist/domain/residualUnknown.js +3 -2
- package/dist/domain/staticRuntimeCorrelation.js +4 -3
- package/dist/domain/stringPatterns.js +6 -0
- package/dist/domain/swiftSymbolClassification.js +66 -0
- package/dist/domain/symbolAnalysis.js +83 -20
- package/dist/domain/unicodeCodePointOrder.js +6 -0
- package/dist/domain/webBundleAnalyzerInspection.js +9 -1
- package/dist/domain/webCaptureDiff.js +71 -30
- package/dist/domain/webCaptureDiffSchemas.js +8 -11
- package/dist/domain/webEventListeners.js +3 -2
- package/dist/domain/webExecution.js +3 -2
- package/dist/domain/webInventory.js +3 -2
- package/dist/domain/webMcpDiscovery.js +4 -3
- package/dist/domain/webRuntime.js +0 -2
- package/dist/domain/webScriptExport.js +2 -2
- package/dist/dotnet/ManagedArtifactInspector.js +2 -19
- package/dist/dotnet/ManagedMemberInspector.js +12 -18
- package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +1 -2
- package/dist/dotnet/ManagedMemberRows.js +75 -62
- package/dist/dotnet/ManagedMetadataInventory.js +16 -22
- package/dist/dotnet/ManagedMethodBodyReader.js +4 -0
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +109 -94
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +12 -21
- package/dist/dotnet/ManagedReaderFailure.js +16 -0
- package/dist/dotnet/ManagedStaticProvider.js +13 -12
- package/dist/dotnet/ManagedStaticProviderMetadata.js +1 -4
- package/dist/evaluation/AgentEvaluationFixtures.js +250 -0
- package/dist/evaluation/AgentEvaluationReport.js +28 -0
- package/dist/evaluation/CodexAgentEval.js +12 -8
- package/dist/evaluation/KnownAnswerEvaluation.js +281 -0
- package/dist/evm/EvmoleInterfaceProvider.js +2 -1
- package/dist/filesystem/RegularFile.js +41 -0
- package/dist/firmware/FirmwareCommand.js +9 -5
- package/dist/firmware/FirmwareProvider.js +4 -4
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +3 -6
- package/dist/ghidra/GhidraClient.js +105 -36
- package/dist/ghidra/GhidraClientStartup.js +0 -2
- package/dist/ghidra/GhidraDoctor.js +6 -5
- package/dist/ghidra/GhidraFunctionValues.js +3 -5
- package/dist/ghidra/GhidraInstallation.js +151 -22
- package/dist/ghidra/GhidraJavaLaunch.js +6 -2
- package/dist/ghidra/GhidraLauncher.js +58 -26
- package/dist/ghidra/GhidraProvider.js +6 -2
- package/dist/ghidra/GhidraProviderCapabilities.js +6 -0
- package/dist/ghidra/GhidraProviderClient.js +13 -3
- package/dist/ghidra/GhidraSessionError.js +2 -0
- package/dist/ghidra/GhidraSessionRoot.js +39 -0
- package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
- package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
- package/dist/hopper/BridgeLauncher.js +34 -45
- package/dist/hopper/HopperAnalysisProfile.js +3 -8
- package/dist/hopper/HopperCleanup.js +56 -27
- package/dist/hopper/HopperClient.js +86 -65
- package/dist/hopper/HopperMachOImage.js +3 -2
- package/dist/hopper/HopperProvider.js +16 -18
- package/dist/hopper/HopperRegexSearch.js +3 -6
- package/dist/hopper/HopperTargetLease.js +132 -49
- package/dist/hopper/LinuxPrivateDisplayProbe.js +6 -0
- package/dist/ida/IdaConfiguration.js +8 -3
- package/dist/ida/IdaInput.js +1 -7
- package/dist/ida/IdaMcpConnection.js +8 -4
- package/dist/ida/IdaOperationRunner.js +5 -3
- package/dist/ida/IdaProvider.js +8 -12
- package/dist/ida/IdaSessionClient.js +24 -20
- package/dist/ida/IdaWorkspace.js +12 -13
- package/dist/inspector/JavaScriptRuntimeScope.js +9 -5
- package/dist/inspector/V8InspectorCaptureProjection.js +47 -14
- package/dist/inspector/V8InspectorProvider.js +97 -35
- package/dist/javascript/recovery/WakaruCommand.js +7 -2
- package/dist/javascript/recovery/WakaruExecution.js +5 -2
- package/dist/main/shutdown.js +81 -29
- package/dist/main/startup.js +9 -2
- package/dist/main/transport.js +23 -3
- package/dist/main.js +11 -18
- package/dist/native/AppleMachoSelection.js +16 -6
- package/dist/native/AppleObjcDispatchFacets.js +3 -3
- package/dist/native/AppleObjcProperties.js +17 -7
- package/dist/native/CommandRunner.js +9 -7
- package/dist/native/LldbCallTracer.js +249 -77
- package/dist/native/NativeMacOSProvider.js +32 -17
- package/dist/native/NativeMacOSProviderMetadata.js +1 -2
- package/dist/native/NativeUiHelperRuntime.js +11 -2
- package/dist/native/NativeUiObservation.js +2 -2
- package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
- package/dist/process/DarwinProcessRunTokenReader.js +16 -2
- package/dist/process/ExecFileOutput.js +88 -6
- package/dist/process/PrivateRuntimeRoot.js +10 -5
- package/dist/process/ProcessOwnership.js +1 -4
- package/dist/process/ProcessOwnershipObservation.js +18 -16
- package/dist/process/ProviderProcess.js +1 -3
- package/dist/process/capture/FilesystemSnapshot.js +131 -24
- package/dist/process/capture/ProcessCaptureError.js +13 -0
- package/dist/process/capture/ProcessCaptureLifecycle.js +148 -74
- package/dist/process/capture/ProcessFilesystemEffects.js +51 -6
- package/dist/process/capture/ProcessHarness.js +16 -33
- package/dist/process/capture/ProcessNormalization.js +20 -2
- package/dist/process/capture/ProcessSampling.js +25 -2
- package/dist/process/capture/TerminalRenderer.js +14 -0
- package/dist/process/snapshotEnvironment.js +14 -0
- package/dist/server/EvidenceMcpServer.js +25 -14
- package/dist/server/analysisAdmission.js +8 -0
- package/dist/server/createServer.js +71 -59
- package/dist/server/mcpClientMetadata.js +12 -5
- package/dist/server/promptCompletion.js +3 -8
- package/dist/server/registerAnalysisViewTool.js +15 -0
- package/dist/server/registerAndroidTools.js +2 -3
- package/dist/server/registerApplicationTools/compareExportShapes.js +6 -6
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +4 -5
- package/dist/server/registerApplicationTools/compareVersions.js +4 -5
- package/dist/server/registerApplicationTools/coverage.js +1 -2
- package/dist/server/registerApplicationTools/helpers.js +4 -4
- package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
- package/dist/server/registerApplicationTools/traceFeature.js +4 -5
- package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
- package/dist/server/registerArtifactComparisonTool.js +4 -5
- package/dist/server/registerArtifactTools.js +2 -2
- package/dist/server/registerBinaryDiagnosticsTools.js +2 -3
- package/dist/server/registerBrowserScenarioTool.js +3 -4
- package/dist/server/registerBrowserTools.js +13 -16
- package/dist/server/registerBundleComparisonTool.js +5 -6
- package/dist/server/registerCloseLifecycleTool.js +8 -7
- package/dist/server/registerElectronTools.js +10 -13
- package/dist/server/registerEnhancedTools.js +82 -77
- package/dist/server/registerEvidenceTools.js +54 -47
- package/dist/server/registerEvmTools.js +2 -3
- package/dist/server/registerFirmwareTools.js +2 -3
- package/dist/server/registerFunctionComparisonTool.js +7 -8
- package/dist/server/registerInvestigationTools.js +14 -15
- package/dist/server/registerJavaScriptRecoveryTool.js +2 -3
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -6
- package/dist/server/registerManagedTools.js +7 -4
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -6
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -5
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -7
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -7
- package/dist/server/registerOfficialTools.js +32 -41
- package/dist/server/registerProcessComparisonTool.js +8 -8
- package/dist/server/registerRecordedCrashTools.js +2 -3
- package/dist/server/registerSessionRecordTools.js +15 -19
- package/dist/server/registerSessionStatusTool.js +3 -4
- package/dist/server/registerSessionTools.js +19 -19
- package/dist/server/registerWebModuleTool.js +2 -3
- package/dist/server/registerWebNetworkCaptureTool.js +2 -3
- package/dist/server/registerWebRuntimeTools.js +4 -5
- package/dist/server/registerWebScriptTool.js +2 -3
- package/dist/server/registerWebSourceLocationTool.js +2 -3
- package/dist/server/toolResult.js +66 -94
- package/dist/server/toolResultEncoding.js +11 -10
- package/dist/windows/WindowsNativeLoader.js +1 -0
- package/dist/windows/WindowsOwnedProcess.js +60 -15
- package/dist/windows/WindowsPrivateRuntime.js +7 -8
- package/native/windows/README.md +3 -1
- package/native/windows/build/manifest.json +2 -2
- package/native/windows/build/rea-windows-x64.node +0 -0
- package/package.json +42 -30
- package/scripts/rea.mjs +3 -6
- package/skills/reverse-engineer-anything/SKILL.md +14 -13
- package/skills/reverse-engineer-anything/references/android-applications.md +6 -3
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +8 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +16 -6
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +18 -0
- package/dist/artifacts/inventory/policy.js +0 -2
- package/dist/config.js +0 -1
- package/dist/contracts/browserCaptureToolInputSchema.js +0 -43
- package/dist/contracts/process/processCaptureExample.js +0 -2
- package/dist/contracts/toolOutputSchemas.js +0 -2
- package/dist/domain/managed/managedApplicationGraphNodeCoverage.js +0 -6
- package/dist/main/reload.js +0 -12
- package/dist/main/state.js +0 -3
- package/dist/server/registerNativeTools.js +0 -6
- package/dist/server/sessionToolPolicies.js +0 -2
|
@@ -1,26 +1,65 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { canonicalJson } from "../comparisonSemantics.js";
|
|
3
|
+
import { digestCanonicalValue } from "../canonicalDigest.js";
|
|
4
|
+
import { uniqueSorted } from "../canonicalOrdering.js";
|
|
5
|
+
import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
|
|
6
|
+
import { canonicalJsonDigestSteps } from "../canonicalJsonDigestSteps.js";
|
|
4
7
|
import { freezeOwnedJsonSnapshotSteps } from "../immutableJson.js";
|
|
8
|
+
import { applicationGraphEvidenceSchema } from "./javascriptApplicationEvidenceSchemas.js";
|
|
5
9
|
import { JAVASCRIPT_SEMANTIC_RELATION_FAMILIES, JAVASCRIPT_SEMANTIC_RELATION_FAMILY, javaScriptSemanticFingerprintInputSchema, javaScriptSemanticFingerprintSchema, javaScriptSemanticGraphInputSchema, javaScriptSemanticGraphRecordSchema, javaScriptSemanticNodeInputSchema, javaScriptSemanticNodeSchema, javaScriptSemanticRelationInputSchema, javaScriptSemanticRelationSchema, javaScriptSemanticUnknownInputSchema, javaScriptSemanticUnknownSchema, } from "./javascriptSemanticGraphSchemas.js";
|
|
6
10
|
const normalizeEvidence = (evidence) => ({
|
|
7
11
|
...evidence,
|
|
8
12
|
coverage: {
|
|
9
13
|
...evidence.coverage,
|
|
10
|
-
limits: [...evidence.coverage.limits].sort((left, right) =>
|
|
14
|
+
limits: [...evidence.coverage.limits].sort((left, right) => compareUnicodeCodePoints(canonicalJson(left, "JavaScript semantic graph"), canonicalJson(right, "JavaScript semantic graph"))),
|
|
11
15
|
},
|
|
12
16
|
limitations: uniqueSorted(evidence.limitations),
|
|
13
17
|
evidence_ids: uniqueSorted(evidence.evidence_ids),
|
|
14
18
|
});
|
|
19
|
+
const evidenceContextId = (context) => `jsrg_evidence_${digestCanonicalValue(context, "JavaScript semantic evidence context")}`;
|
|
20
|
+
/** Graph-scoped owner for canonical provenance shared by semantic facts. */
|
|
21
|
+
export class JavaScriptSemanticEvidenceContextRegistry {
|
|
22
|
+
#contexts = new Map();
|
|
23
|
+
/** Intern normalized non-location provenance at fact construction. */
|
|
24
|
+
intern(evidence) {
|
|
25
|
+
const normalized = normalizeEvidence(evidence);
|
|
26
|
+
const { location, ...context } = normalized;
|
|
27
|
+
const contextId = evidenceContextId(context);
|
|
28
|
+
const row = { ...context, context_id: contextId };
|
|
29
|
+
const existing = this.#contexts.get(contextId);
|
|
30
|
+
if (existing !== undefined &&
|
|
31
|
+
canonicalJson(existing, "JavaScript semantic graph") !==
|
|
32
|
+
canonicalJson(row, "JavaScript semantic graph"))
|
|
33
|
+
throw new TypeError("JavaScript semantic evidence context digest collision");
|
|
34
|
+
this.#contexts.set(contextId, row);
|
|
35
|
+
return { context_id: contextId, location };
|
|
36
|
+
}
|
|
37
|
+
/** Resolve one already interned fact reference for derived evidence. */
|
|
38
|
+
resolve(reference) {
|
|
39
|
+
const context = this.#contexts.get(reference.context_id);
|
|
40
|
+
if (context === undefined)
|
|
41
|
+
throw new TypeError("Semantic evidence reference names an absent context");
|
|
42
|
+
const { context_id: _contextId, ...evidenceContext } = context;
|
|
43
|
+
return { ...evidenceContext, location: reference.location };
|
|
44
|
+
}
|
|
45
|
+
/** Return the deterministic context table owned by this graph projection. */
|
|
46
|
+
get contexts() {
|
|
47
|
+
return [...this.#contexts.values()].sort((left, right) => compareUnicodeCodePoints(left.context_id, right.context_id));
|
|
48
|
+
}
|
|
49
|
+
/** Release interned contexts after the owning graph is finalized. */
|
|
50
|
+
clear() {
|
|
51
|
+
this.#contexts.clear();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
15
54
|
/** Derive a semantic node ID from its kind and exact artifact identity. */
|
|
16
|
-
export const javaScriptSemanticNodeId = (node) => `jsrg_node_${
|
|
55
|
+
export const javaScriptSemanticNodeId = (node) => `jsrg_node_${digestCanonicalValue({ kind: node.kind, identity: node.identity }, "JavaScript semantic graph")}`;
|
|
17
56
|
/** Normalize one semantic entity and derive its artifact-version identifier. */
|
|
18
|
-
export const createJavaScriptSemanticGraphNode = (input) => {
|
|
57
|
+
export const createJavaScriptSemanticGraphNode = (input, evidenceContexts) => {
|
|
19
58
|
const parsed = javaScriptSemanticNodeInputSchema.parse(input);
|
|
20
59
|
const semantic = {
|
|
21
60
|
...parsed,
|
|
22
61
|
application_node_ids: uniqueSorted(parsed.application_node_ids),
|
|
23
|
-
evidence:
|
|
62
|
+
evidence: evidenceContexts.intern(parsed.evidence),
|
|
24
63
|
identifier_strategy: {
|
|
25
64
|
strategy: "semantic-content-sha256",
|
|
26
65
|
stability: "artifact-version",
|
|
@@ -32,11 +71,11 @@ export const createJavaScriptSemanticGraphNode = (input) => {
|
|
|
32
71
|
});
|
|
33
72
|
};
|
|
34
73
|
/** Normalize one semantic relationship and derive its exact identifier. */
|
|
35
|
-
export const createJavaScriptSemanticGraphRelation = (input) => {
|
|
74
|
+
export const createJavaScriptSemanticGraphRelation = (input, evidenceContexts) => {
|
|
36
75
|
const parsed = javaScriptSemanticRelationInputSchema.parse(input);
|
|
37
76
|
const semantic = {
|
|
38
77
|
...parsed,
|
|
39
|
-
evidence:
|
|
78
|
+
evidence: evidenceContexts.intern(parsed.evidence),
|
|
40
79
|
identifier_strategy: {
|
|
41
80
|
strategy: "semantic-content-sha256",
|
|
42
81
|
stability: "relationship-exact",
|
|
@@ -44,25 +83,25 @@ export const createJavaScriptSemanticGraphRelation = (input) => {
|
|
|
44
83
|
};
|
|
45
84
|
return javaScriptSemanticRelationSchema.parse({
|
|
46
85
|
...semantic,
|
|
47
|
-
relation_id: `jsrg_relation_${
|
|
86
|
+
relation_id: `jsrg_relation_${digestCanonicalValue(semantic, "JavaScript semantic graph")}`,
|
|
48
87
|
});
|
|
49
88
|
};
|
|
50
89
|
/** Normalize one unresolved semantic frontier and derive its identifier. */
|
|
51
|
-
export const createJavaScriptSemanticGraphUnknown = (input) => {
|
|
90
|
+
export const createJavaScriptSemanticGraphUnknown = (input, evidenceContexts) => {
|
|
52
91
|
const parsed = javaScriptSemanticUnknownInputSchema.parse(input);
|
|
53
92
|
const semantic = {
|
|
54
93
|
...parsed,
|
|
55
94
|
relation_kinds: uniqueSorted(parsed.relation_kinds),
|
|
56
95
|
candidate_node_ids: uniqueSorted(parsed.candidate_node_ids),
|
|
57
|
-
evidence:
|
|
96
|
+
evidence: evidenceContexts.intern(parsed.evidence),
|
|
58
97
|
};
|
|
59
98
|
return javaScriptSemanticUnknownSchema.parse({
|
|
60
99
|
...semantic,
|
|
61
|
-
unknown_id: `jsrg_unknown_${
|
|
100
|
+
unknown_id: `jsrg_unknown_${digestCanonicalValue(semantic, "JavaScript semantic graph")}`,
|
|
62
101
|
});
|
|
63
102
|
};
|
|
64
103
|
/** Normalize one function fingerprint and derive its component commitment. */
|
|
65
|
-
export const createJavaScriptSemanticFingerprint = (input) => {
|
|
104
|
+
export const createJavaScriptSemanticFingerprint = (input, evidenceContexts) => {
|
|
66
105
|
const parsed = javaScriptSemanticFingerprintInputSchema.parse(input);
|
|
67
106
|
const semantic = {
|
|
68
107
|
...parsed,
|
|
@@ -71,13 +110,13 @@ export const createJavaScriptSemanticFingerprint = (input) => {
|
|
|
71
110
|
effects: uniqueSorted(parsed.components.effects),
|
|
72
111
|
},
|
|
73
112
|
limitations: uniqueSorted(parsed.limitations),
|
|
74
|
-
evidence:
|
|
113
|
+
evidence: evidenceContexts.intern(parsed.evidence),
|
|
75
114
|
};
|
|
76
|
-
const fingerprintSha256 =
|
|
115
|
+
const fingerprintSha256 = digestCanonicalValue(semantic.components, "JavaScript semantic graph");
|
|
77
116
|
return javaScriptSemanticFingerprintSchema.parse({
|
|
78
117
|
...semantic,
|
|
79
118
|
fingerprint_sha256: fingerprintSha256,
|
|
80
|
-
fingerprint_id: `jsrg_fingerprint_${
|
|
119
|
+
fingerprint_id: `jsrg_fingerprint_${digestCanonicalValue({
|
|
81
120
|
function_node_id: semantic.function_node_id,
|
|
82
121
|
algorithm: semantic.algorithm,
|
|
83
122
|
fingerprint_sha256: fingerprintSha256,
|
|
@@ -86,7 +125,7 @@ export const createJavaScriptSemanticFingerprint = (input) => {
|
|
|
86
125
|
};
|
|
87
126
|
const sortedUniqueIssue = (values, path, label, context) => {
|
|
88
127
|
for (let index = 1; index < values.length; index += 1) {
|
|
89
|
-
if (
|
|
128
|
+
if (compareUnicodeCodePoints(values[index - 1] ?? "", values[index] ?? "") < 0)
|
|
90
129
|
continue;
|
|
91
130
|
context.addIssue({
|
|
92
131
|
code: "custom",
|
|
@@ -96,7 +135,7 @@ const sortedUniqueIssue = (values, path, label, context) => {
|
|
|
96
135
|
return;
|
|
97
136
|
}
|
|
98
137
|
};
|
|
99
|
-
|
|
138
|
+
function* checkCoverageSteps(graph, context) {
|
|
100
139
|
const families = graph.coverage.families.map(({ family }) => family);
|
|
101
140
|
if (canonicalJson(families, "JavaScript semantic graph") !==
|
|
102
141
|
canonicalJson(JAVASCRIPT_SEMANTIC_RELATION_FAMILIES, "JavaScript semantic graph"))
|
|
@@ -122,11 +161,18 @@ const checkCoverage = (graph, context) => {
|
|
|
122
161
|
message: "Truncated graph coverage must identify an effective limit",
|
|
123
162
|
});
|
|
124
163
|
const relationsByFamily = new Map(JAVASCRIPT_SEMANTIC_RELATION_FAMILIES.map((family) => [family, 0]));
|
|
125
|
-
for (const relation of graph.relations) {
|
|
164
|
+
for (const [index, relation] of graph.relations.entries()) {
|
|
165
|
+
if (index % 256 === 0)
|
|
166
|
+
yield;
|
|
126
167
|
const family = JAVASCRIPT_SEMANTIC_RELATION_FAMILY[relation.relation];
|
|
127
168
|
relationsByFamily.set(family, (relationsByFamily.get(family) ?? 0) + 1);
|
|
128
169
|
}
|
|
129
|
-
const unknownsById = new Map(
|
|
170
|
+
const unknownsById = new Map();
|
|
171
|
+
for (const [index, unknown] of graph.unknowns.entries()) {
|
|
172
|
+
if (index % 256 === 0)
|
|
173
|
+
yield;
|
|
174
|
+
unknownsById.set(unknown.unknown_id, unknown);
|
|
175
|
+
}
|
|
130
176
|
for (const [index, family] of graph.coverage.families.entries()) {
|
|
131
177
|
if (family.retained_relations !== relationsByFamily.get(family.family))
|
|
132
178
|
context.addIssue({
|
|
@@ -148,17 +194,71 @@ const checkCoverage = (graph, context) => {
|
|
|
148
194
|
message: "Complete family coverage cannot omit or retain unknown facts",
|
|
149
195
|
});
|
|
150
196
|
}
|
|
151
|
-
}
|
|
197
|
+
}
|
|
152
198
|
const checkCanonicalOrder = (graph, context) => {
|
|
153
199
|
sortedUniqueIssue(graph.root_node_ids, ["root_node_ids"], "Root nodes", context);
|
|
200
|
+
sortedUniqueIssue(graph.evidence_contexts.map(({ context_id }) => context_id), ["evidence_contexts"], "Evidence contexts", context);
|
|
154
201
|
sortedUniqueIssue(graph.nodes.map(({ node_id }) => node_id), ["nodes"], "Nodes", context);
|
|
155
202
|
sortedUniqueIssue(graph.relations.map(({ relation_id }) => relation_id), ["relations"], "Relations", context);
|
|
156
203
|
sortedUniqueIssue(graph.fingerprints.map(({ fingerprint_id }) => fingerprint_id), ["fingerprints"], "Fingerprints", context);
|
|
157
204
|
sortedUniqueIssue(graph.unknowns.map(({ unknown_id }) => unknown_id), ["unknowns"], "Unknown frontiers", context);
|
|
158
205
|
sortedUniqueIssue(graph.limitations, ["limitations"], "Limitations", context);
|
|
159
206
|
};
|
|
160
|
-
|
|
207
|
+
function* checkEvidenceContextReferencesSteps(graph, context) {
|
|
208
|
+
const contexts = new Map(graph.evidence_contexts.map((value) => [value.context_id, value]));
|
|
209
|
+
const referenced = new Set();
|
|
210
|
+
const validateReferences = function* (entities, entityKind) {
|
|
211
|
+
for (const [index, { evidence }] of entities.entries()) {
|
|
212
|
+
if (index % 256 === 0)
|
|
213
|
+
yield;
|
|
214
|
+
referenced.add(evidence.context_id);
|
|
215
|
+
const evidenceContext = contexts.get(evidence.context_id);
|
|
216
|
+
if (evidenceContext === undefined) {
|
|
217
|
+
context.addIssue({
|
|
218
|
+
code: "custom",
|
|
219
|
+
path: [entityKind, index, "evidence", "context_id"],
|
|
220
|
+
message: "Evidence reference names an absent context",
|
|
221
|
+
});
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
const { context_id: _contextId, ...evidenceValue } = evidenceContext;
|
|
225
|
+
if (!applicationGraphEvidenceSchema.safeParse({
|
|
226
|
+
...evidenceValue,
|
|
227
|
+
location: evidence.location,
|
|
228
|
+
}).success)
|
|
229
|
+
context.addIssue({
|
|
230
|
+
code: "custom",
|
|
231
|
+
path: [entityKind, index, "evidence"],
|
|
232
|
+
message: "Evidence context is incompatible with its fact location",
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
yield* validateReferences(graph.nodes, "nodes");
|
|
237
|
+
yield* validateReferences(graph.relations, "relations");
|
|
238
|
+
yield* validateReferences(graph.unknowns, "unknowns");
|
|
239
|
+
yield* validateReferences(graph.fingerprints, "fingerprints");
|
|
240
|
+
for (const [index, evidenceContext] of graph.evidence_contexts.entries()) {
|
|
241
|
+
if (index % 256 === 0)
|
|
242
|
+
yield;
|
|
243
|
+
const { context_id: identifier, ...value } = evidenceContext;
|
|
244
|
+
if (identifier !== evidenceContextId(value))
|
|
245
|
+
context.addIssue({
|
|
246
|
+
code: "custom",
|
|
247
|
+
path: ["evidence_contexts", index, "context_id"],
|
|
248
|
+
message: "Evidence context identifier is stale",
|
|
249
|
+
});
|
|
250
|
+
if (!referenced.has(identifier))
|
|
251
|
+
context.addIssue({
|
|
252
|
+
code: "custom",
|
|
253
|
+
path: ["evidence_contexts", index],
|
|
254
|
+
message: "Evidence context is not referenced by a graph fact",
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
function* checkNodesSteps(graph, nodes, context) {
|
|
161
259
|
for (const [index, node] of graph.nodes.entries()) {
|
|
260
|
+
if (index % 256 === 0)
|
|
261
|
+
yield;
|
|
162
262
|
if (node.node_id !== javaScriptSemanticNodeId(node))
|
|
163
263
|
context.addIssue({
|
|
164
264
|
code: "custom",
|
|
@@ -173,21 +273,27 @@ const checkNodes = (graph, nodes, context) => {
|
|
|
173
273
|
message: "Function owner must name a function node",
|
|
174
274
|
});
|
|
175
275
|
}
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
for (const root of graph.root_node_ids)
|
|
276
|
+
}
|
|
277
|
+
function* checkRootsSteps(graph, nodes, context) {
|
|
278
|
+
for (const [index, root] of graph.root_node_ids.entries()) {
|
|
279
|
+
if (index % 256 === 0)
|
|
280
|
+
yield;
|
|
179
281
|
if (!nodes.has(root))
|
|
180
282
|
context.addIssue({
|
|
181
283
|
code: "custom",
|
|
182
284
|
path: ["root_node_ids"],
|
|
183
285
|
message: "Root identifier must name a semantic node",
|
|
184
286
|
});
|
|
185
|
-
}
|
|
186
|
-
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
function* checkRelationsSteps(graph, nodes, evidenceContexts, context) {
|
|
187
290
|
for (const [index, relation] of graph.relations.entries()) {
|
|
291
|
+
if (index % 256 === 0)
|
|
292
|
+
yield;
|
|
188
293
|
const { relation_id: identifier, ...semantic } = relation;
|
|
189
294
|
if (identifier !==
|
|
190
|
-
"jsrg_relation_" +
|
|
295
|
+
"jsrg_relation_" +
|
|
296
|
+
digestCanonicalValue(semantic, "JavaScript semantic graph"))
|
|
191
297
|
context.addIssue({
|
|
192
298
|
code: "custom",
|
|
193
299
|
path: ["relations", index, "relation_id"],
|
|
@@ -207,19 +313,22 @@ const checkRelations = (graph, nodes, context) => {
|
|
|
207
313
|
message: "Semantic relations cannot be self-referential",
|
|
208
314
|
});
|
|
209
315
|
if (relation.resolution === "candidate" &&
|
|
210
|
-
relation.evidence.state === "observed")
|
|
316
|
+
evidenceContexts.get(relation.evidence.context_id)?.state === "observed")
|
|
211
317
|
context.addIssue({
|
|
212
318
|
code: "custom",
|
|
213
319
|
path: ["relations", index, "evidence", "state"],
|
|
214
320
|
message: "Candidate relations cannot claim observed resolution",
|
|
215
321
|
});
|
|
216
322
|
}
|
|
217
|
-
}
|
|
218
|
-
|
|
323
|
+
}
|
|
324
|
+
function* checkUnknownsSteps(graph, nodes, evidenceContexts, context) {
|
|
219
325
|
for (const [index, unknown] of graph.unknowns.entries()) {
|
|
326
|
+
if (index % 256 === 0)
|
|
327
|
+
yield;
|
|
220
328
|
const { unknown_id: identifier, ...semantic } = unknown;
|
|
221
329
|
if (identifier !==
|
|
222
|
-
"jsrg_unknown_" +
|
|
330
|
+
"jsrg_unknown_" +
|
|
331
|
+
digestCanonicalValue(semantic, "JavaScript semantic graph"))
|
|
223
332
|
context.addIssue({
|
|
224
333
|
code: "custom",
|
|
225
334
|
path: ["unknowns", index, "unknown_id"],
|
|
@@ -243,14 +352,15 @@ const checkUnknowns = (graph, nodes, context) => {
|
|
|
243
352
|
path: ["unknowns", index, "relation_kinds"],
|
|
244
353
|
message: "Unknown relation kinds must belong to their declared family",
|
|
245
354
|
});
|
|
246
|
-
|
|
355
|
+
const evidenceState = evidenceContexts.get(unknown.evidence.context_id)?.state;
|
|
356
|
+
if (evidenceState !== "unknown" && evidenceState !== "unavailable")
|
|
247
357
|
context.addIssue({
|
|
248
358
|
code: "custom",
|
|
249
359
|
path: ["unknowns", index, "evidence", "state"],
|
|
250
360
|
message: "Unknown frontiers require unknown or unavailable evidence",
|
|
251
361
|
});
|
|
252
362
|
}
|
|
253
|
-
}
|
|
363
|
+
}
|
|
254
364
|
const checkUnknownReferences = (graph, context) => {
|
|
255
365
|
const unknownIds = new Set(graph.unknowns.map(({ unknown_id }) => unknown_id));
|
|
256
366
|
for (const [index, family] of graph.coverage.families.entries())
|
|
@@ -261,8 +371,10 @@ const checkUnknownReferences = (graph, context) => {
|
|
|
261
371
|
message: "Family coverage references an absent unknown frontier",
|
|
262
372
|
});
|
|
263
373
|
};
|
|
264
|
-
|
|
374
|
+
function* checkFingerprintsSteps(graph, nodes, context) {
|
|
265
375
|
for (const [index, fingerprint] of graph.fingerprints.entries()) {
|
|
376
|
+
if (index % 256 === 0)
|
|
377
|
+
yield;
|
|
266
378
|
if (nodes.get(fingerprint.function_node_id)?.kind !== "function")
|
|
267
379
|
context.addIssue({
|
|
268
380
|
code: "custom",
|
|
@@ -270,14 +382,14 @@ const checkFingerprints = (graph, nodes, context) => {
|
|
|
270
382
|
message: "Fingerprint must name a function node",
|
|
271
383
|
});
|
|
272
384
|
if (fingerprint.fingerprint_sha256 !==
|
|
273
|
-
|
|
385
|
+
digestCanonicalValue(fingerprint.components, "JavaScript semantic graph"))
|
|
274
386
|
context.addIssue({
|
|
275
387
|
code: "custom",
|
|
276
388
|
path: ["fingerprints", index, "fingerprint_sha256"],
|
|
277
389
|
message: "Fingerprint component commitment is stale",
|
|
278
390
|
});
|
|
279
391
|
const expectedIdentifier = "jsrg_fingerprint_" +
|
|
280
|
-
|
|
392
|
+
digestCanonicalValue({
|
|
281
393
|
function_node_id: fingerprint.function_node_id,
|
|
282
394
|
algorithm: fingerprint.algorithm,
|
|
283
395
|
fingerprint_sha256: fingerprint.fingerprint_sha256,
|
|
@@ -296,29 +408,45 @@ const checkFingerprints = (graph, nodes, context) => {
|
|
|
296
408
|
message: "Incomplete fingerprints require a limitation",
|
|
297
409
|
});
|
|
298
410
|
}
|
|
299
|
-
}
|
|
300
|
-
|
|
411
|
+
}
|
|
412
|
+
function* checkGraphContentSteps(graph, context) {
|
|
301
413
|
checkCanonicalOrder(graph, context);
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
414
|
+
yield* checkEvidenceContextReferencesSteps(graph, context);
|
|
415
|
+
const evidenceContexts = new Map(graph.evidence_contexts.map((evidenceContext) => [
|
|
416
|
+
evidenceContext.context_id,
|
|
417
|
+
evidenceContext,
|
|
418
|
+
]));
|
|
419
|
+
const nodes = new Map();
|
|
420
|
+
for (const [index, node] of graph.nodes.entries()) {
|
|
421
|
+
if (index % 256 === 0)
|
|
422
|
+
yield;
|
|
423
|
+
nodes.set(node.node_id, node);
|
|
424
|
+
}
|
|
425
|
+
yield* checkNodesSteps(graph, nodes, context);
|
|
426
|
+
yield* checkRootsSteps(graph, nodes, context);
|
|
427
|
+
yield* checkRelationsSteps(graph, nodes, evidenceContexts, context);
|
|
428
|
+
yield* checkUnknownsSteps(graph, nodes, evidenceContexts, context);
|
|
307
429
|
checkUnknownReferences(graph, context);
|
|
308
|
-
|
|
309
|
-
|
|
430
|
+
yield* checkFingerprintsSteps(graph, nodes, context);
|
|
431
|
+
yield* checkCoverageSteps(graph, context);
|
|
310
432
|
if (graph.coverage.status !== "complete" && graph.limitations.length === 0)
|
|
311
433
|
context.addIssue({
|
|
312
434
|
code: "custom",
|
|
313
435
|
path: ["limitations"],
|
|
314
436
|
message: "Non-complete graph coverage requires a limitation",
|
|
315
437
|
});
|
|
438
|
+
}
|
|
439
|
+
const checkGraphContent = (graph, context) => {
|
|
440
|
+
const steps = checkGraphContentSteps(graph, context);
|
|
441
|
+
while (!steps.next().done) {
|
|
442
|
+
// Synchronous callers apply the same integrity checks without scheduling.
|
|
443
|
+
}
|
|
316
444
|
};
|
|
317
445
|
const checkGraph = (graph, context) => {
|
|
318
446
|
checkGraphContent(graph, context);
|
|
319
447
|
const { graph_id: identifier, ...semantic } = graph;
|
|
320
448
|
if (identifier !==
|
|
321
|
-
"jsrg_" +
|
|
449
|
+
"jsrg_" + digestCanonicalValue(semantic, "JavaScript semantic graph"))
|
|
322
450
|
context.addIssue({
|
|
323
451
|
code: "custom",
|
|
324
452
|
path: ["graph_id"],
|
|
@@ -327,34 +455,43 @@ const checkGraph = (graph, context) => {
|
|
|
327
455
|
};
|
|
328
456
|
/** Strict semantic graph schema with verified canonical commitments. */
|
|
329
457
|
export const javaScriptSemanticGraphSchema = javaScriptSemanticGraphRecordSchema.superRefine(checkGraph);
|
|
458
|
+
/** Resolve one fact's compact provenance without changing its stored shape. */
|
|
459
|
+
export const resolveJavaScriptSemanticEvidence = (graph, reference) => {
|
|
460
|
+
const context = graph.evidence_contexts.find(({ context_id }) => context_id === reference.context_id);
|
|
461
|
+
if (context === undefined)
|
|
462
|
+
throw new TypeError("Semantic evidence reference names an absent context");
|
|
463
|
+
const { context_id: _contextId, ...evidenceContext } = context;
|
|
464
|
+
return { ...evidenceContext, location: reference.location };
|
|
465
|
+
};
|
|
466
|
+
const normalizeGraphInput = (parsed) => ({
|
|
467
|
+
...parsed,
|
|
468
|
+
root_node_ids: uniqueSorted(parsed.root_node_ids),
|
|
469
|
+
evidence_contexts: [...parsed.evidence_contexts].sort((left, right) => compareUnicodeCodePoints(left.context_id, right.context_id)),
|
|
470
|
+
nodes: [...parsed.nodes].sort((left, right) => compareUnicodeCodePoints(left.node_id, right.node_id)),
|
|
471
|
+
relations: [...parsed.relations].sort((left, right) => compareUnicodeCodePoints(left.relation_id, right.relation_id)),
|
|
472
|
+
fingerprints: [...parsed.fingerprints].sort((left, right) => compareUnicodeCodePoints(left.fingerprint_id, right.fingerprint_id)),
|
|
473
|
+
unknowns: [...parsed.unknowns].sort((left, right) => compareUnicodeCodePoints(left.unknown_id, right.unknown_id)),
|
|
474
|
+
coverage: {
|
|
475
|
+
...parsed.coverage,
|
|
476
|
+
limits: [...parsed.coverage.limits].sort((left, right) => compareUnicodeCodePoints(canonicalJson(left, "JavaScript semantic graph"), canonicalJson(right, "JavaScript semantic graph"))),
|
|
477
|
+
families: [...parsed.coverage.families]
|
|
478
|
+
.map((family) => ({
|
|
479
|
+
...family,
|
|
480
|
+
unknown_ids: uniqueSorted(family.unknown_ids),
|
|
481
|
+
}))
|
|
482
|
+
.sort((left, right) => compareUnicodeCodePoints(left.family, right.family)),
|
|
483
|
+
},
|
|
484
|
+
limitations: uniqueSorted(parsed.limitations),
|
|
485
|
+
});
|
|
330
486
|
/** Normalize a complete companion graph and derive its graph ID. */
|
|
331
487
|
export const createJavaScriptSemanticGraph = (input) => {
|
|
332
|
-
const
|
|
333
|
-
const semantic = {
|
|
334
|
-
...parsed,
|
|
335
|
-
root_node_ids: uniqueSorted(parsed.root_node_ids),
|
|
336
|
-
nodes: [...parsed.nodes].sort((left, right) => compareCodePoints(left.node_id, right.node_id)),
|
|
337
|
-
relations: [...parsed.relations].sort((left, right) => compareCodePoints(left.relation_id, right.relation_id)),
|
|
338
|
-
fingerprints: [...parsed.fingerprints].sort((left, right) => compareCodePoints(left.fingerprint_id, right.fingerprint_id)),
|
|
339
|
-
unknowns: [...parsed.unknowns].sort((left, right) => compareCodePoints(left.unknown_id, right.unknown_id)),
|
|
340
|
-
coverage: {
|
|
341
|
-
...parsed.coverage,
|
|
342
|
-
limits: [...parsed.coverage.limits].sort((left, right) => compareCodePoints(canonicalJson(left, "JavaScript semantic graph"), canonicalJson(right, "JavaScript semantic graph"))),
|
|
343
|
-
families: [...parsed.coverage.families]
|
|
344
|
-
.map((family) => ({
|
|
345
|
-
...family,
|
|
346
|
-
unknown_ids: uniqueSorted(family.unknown_ids),
|
|
347
|
-
}))
|
|
348
|
-
.sort((left, right) => compareCodePoints(left.family, right.family)),
|
|
349
|
-
},
|
|
350
|
-
limitations: uniqueSorted(parsed.limitations),
|
|
351
|
-
};
|
|
488
|
+
const semantic = normalizeGraphInput(javaScriptSemanticGraphInputSchema.parse(input));
|
|
352
489
|
// The input schema already cloned and validated every field. Validate the
|
|
353
490
|
// normalized relationships in place, then derive the only added field. The
|
|
354
491
|
// public schema still verifies arbitrary records and their commitments.
|
|
355
492
|
const record = {
|
|
356
493
|
...semantic,
|
|
357
|
-
graph_id: `jsrg_${
|
|
494
|
+
graph_id: `jsrg_${digestCanonicalValue(semantic, "JavaScript semantic graph")}`,
|
|
358
495
|
};
|
|
359
496
|
const issues = [];
|
|
360
497
|
checkGraphContent(record, {
|
|
@@ -367,9 +504,21 @@ export const createJavaScriptSemanticGraph = (input) => {
|
|
|
367
504
|
return record;
|
|
368
505
|
};
|
|
369
506
|
const validatedImmutableSemanticGraphs = new WeakSet();
|
|
370
|
-
/** Clone
|
|
371
|
-
export const createImmutableJavaScriptSemanticGraphSteps = (input) =>
|
|
372
|
-
function*
|
|
507
|
+
/** Clone input synchronously; commit, check and seal the owned graph in steps. */
|
|
508
|
+
export const createImmutableJavaScriptSemanticGraphSteps = (input) => validateAndSealSemanticGraphSteps(normalizeGraphInput(javaScriptSemanticGraphInputSchema.parse(input)));
|
|
509
|
+
function* validateAndSealSemanticGraphSteps(semantic) {
|
|
510
|
+
const graph = {
|
|
511
|
+
...semantic,
|
|
512
|
+
graph_id: `jsrg_${yield* canonicalJsonDigestSteps(semantic)}`,
|
|
513
|
+
};
|
|
514
|
+
const issues = [];
|
|
515
|
+
yield* checkGraphContentSteps(graph, {
|
|
516
|
+
addIssue: (issue) => {
|
|
517
|
+
issues.push(issue);
|
|
518
|
+
},
|
|
519
|
+
});
|
|
520
|
+
if (issues.length > 0)
|
|
521
|
+
throw new z.ZodError(issues);
|
|
373
522
|
yield* freezeOwnedJsonSnapshotSteps(graph);
|
|
374
523
|
validatedImmutableSemanticGraphs.add(graph);
|
|
375
524
|
return graph;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { applicationGraphEvidenceSchema } from "./javascriptApplicationEvidenceSchemas.js";
|
|
2
|
+
import { applicationGraphEvidenceContextSchema, applicationGraphEvidenceLocationSchema, applicationGraphEvidenceSchema, } from "./javascriptApplicationEvidenceSchemas.js";
|
|
3
3
|
import { jsonValueSchema } from "../jsonValue.js";
|
|
4
4
|
import { digestSchema } from "../digests.js";
|
|
5
5
|
import { prefixedDigestSchema } from "../digests.js";
|
|
@@ -11,6 +11,18 @@ const semanticRelationIdSchema = z
|
|
|
11
11
|
const semanticUnknownIdSchema = z
|
|
12
12
|
.string()
|
|
13
13
|
.regex(/^jsrg_unknown_[a-f0-9]{64}$/u);
|
|
14
|
+
const semanticEvidenceContextIdSchema = z
|
|
15
|
+
.string()
|
|
16
|
+
.regex(/^jsrg_evidence_[a-f0-9]{64}$/u);
|
|
17
|
+
/** One canonical owner for provenance shared by semantic graph facts. */
|
|
18
|
+
export const javaScriptSemanticEvidenceContextSchema = applicationGraphEvidenceContextSchema.extend({
|
|
19
|
+
context_id: semanticEvidenceContextIdSchema,
|
|
20
|
+
});
|
|
21
|
+
/** Location-specific reference to one exact graph-level evidence context. */
|
|
22
|
+
export const javaScriptSemanticEvidenceReferenceSchema = z.strictObject({
|
|
23
|
+
context_id: semanticEvidenceContextIdSchema,
|
|
24
|
+
location: applicationGraphEvidenceLocationSchema,
|
|
25
|
+
});
|
|
14
26
|
/** Semantic entity kinds admitted by JavaScript Semantic Relation Graph. */
|
|
15
27
|
export const JAVASCRIPT_SEMANTIC_NODE_KINDS = [
|
|
16
28
|
"module",
|
|
@@ -188,6 +200,7 @@ export const javaScriptSemanticNodeInputSchema = z.strictObject({
|
|
|
188
200
|
});
|
|
189
201
|
/** One exact, artifact-version semantic entity. */
|
|
190
202
|
export const javaScriptSemanticNodeSchema = javaScriptSemanticNodeInputSchema.extend({
|
|
203
|
+
evidence: javaScriptSemanticEvidenceReferenceSchema,
|
|
191
204
|
node_id: semanticNodeIdSchema,
|
|
192
205
|
identifier_strategy: z.strictObject({
|
|
193
206
|
strategy: z.literal("semantic-content-sha256"),
|
|
@@ -205,6 +218,7 @@ export const javaScriptSemanticRelationInputSchema = z.strictObject({
|
|
|
205
218
|
});
|
|
206
219
|
/** One canonical directed semantic relationship. */
|
|
207
220
|
export const javaScriptSemanticRelationSchema = javaScriptSemanticRelationInputSchema.extend({
|
|
221
|
+
evidence: javaScriptSemanticEvidenceReferenceSchema,
|
|
208
222
|
relation_id: semanticRelationIdSchema,
|
|
209
223
|
identifier_strategy: z.strictObject({
|
|
210
224
|
strategy: z.literal("semantic-content-sha256"),
|
|
@@ -222,6 +236,7 @@ export const JAVASCRIPT_SEMANTIC_UNKNOWN_REASONS = [
|
|
|
222
236
|
"incomplete-module",
|
|
223
237
|
"missing-source",
|
|
224
238
|
"resource-limit",
|
|
239
|
+
"unknown-value",
|
|
225
240
|
"unsupported-syntax",
|
|
226
241
|
];
|
|
227
242
|
/** One unresolved semantic frontier before its ID is derived. */
|
|
@@ -236,6 +251,7 @@ export const javaScriptSemanticUnknownInputSchema = z.strictObject({
|
|
|
236
251
|
});
|
|
237
252
|
/** One canonical unresolved semantic frontier. */
|
|
238
253
|
export const javaScriptSemanticUnknownSchema = javaScriptSemanticUnknownInputSchema.extend({
|
|
254
|
+
evidence: javaScriptSemanticEvidenceReferenceSchema,
|
|
239
255
|
unknown_id: semanticUnknownIdSchema,
|
|
240
256
|
});
|
|
241
257
|
const fingerprintComponentsSchema = z.strictObject({
|
|
@@ -265,6 +281,7 @@ export const javaScriptSemanticFingerprintInputSchema = z.strictObject({
|
|
|
265
281
|
});
|
|
266
282
|
/** One canonical function fingerprint record. */
|
|
267
283
|
export const javaScriptSemanticFingerprintSchema = javaScriptSemanticFingerprintInputSchema.extend({
|
|
284
|
+
evidence: javaScriptSemanticEvidenceReferenceSchema,
|
|
268
285
|
fingerprint_id: prefixedDigestSchema("jsrg_fingerprint"),
|
|
269
286
|
fingerprint_sha256: digestSchema,
|
|
270
287
|
});
|
|
@@ -293,6 +310,7 @@ export const javaScriptSemanticGraphInputSchema = z.strictObject({
|
|
|
293
310
|
root_artifact_sha256: digestSchema,
|
|
294
311
|
application_graph_id: prefixedDigestSchema("jag"),
|
|
295
312
|
root_node_ids: z.array(semanticNodeIdSchema).min(1),
|
|
313
|
+
evidence_contexts: z.array(javaScriptSemanticEvidenceContextSchema),
|
|
296
314
|
nodes: z.array(javaScriptSemanticNodeSchema).min(1),
|
|
297
315
|
relations: z.array(javaScriptSemanticRelationSchema),
|
|
298
316
|
fingerprints: z.array(javaScriptSemanticFingerprintSchema),
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/** Find the innermost resolved reference at one source coordinate. */
|
|
2
|
-
export const semanticReferenceAt = (ir, line, column) => ir.references.find(({ location }) => location.start.line === line && location.start.column === column);
|
|
3
|
-
/** Read one binding by its deterministic semantic identifier. */
|
|
4
|
-
export const semanticBinding = (ir, bindingId) => ir.bindings.find(({ bindingId: candidate }) => candidate === bindingId);
|
|
5
1
|
/** Fail-closed result when Babel cannot produce an inert syntax tree. */
|
|
6
2
|
export const failedJavaScriptSemanticIr = () => ({
|
|
7
3
|
schema: "JavaScriptSemanticIR",
|