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,21 +1,14 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { emptyArraySchema } from "../emptyArraySchema.js";
|
|
3
3
|
import { evidenceSchema } from "../evidence.js";
|
|
4
|
-
import { javascriptApplicationGraphSchema } from "./javascriptApplicationGraph.js";
|
|
4
|
+
import { isValidatedImmutableJavaScriptApplicationGraph, javascriptApplicationGraphSchema, } from "./javascriptApplicationGraph.js";
|
|
5
5
|
import { JAVASCRIPT_APPLICATION_NODE_KINDS } from "./javascriptApplicationGraphSchemas.js";
|
|
6
6
|
import { prefixedDigestSchema } from "../digests.js";
|
|
7
7
|
const evidenceIdSchema = prefixedDigestSchema("ev");
|
|
8
8
|
const nodeIdSchema = prefixedDigestSchema("jag_node");
|
|
9
9
|
const textSchema = z.string().min(1);
|
|
10
|
-
/**
|
|
11
|
-
|
|
12
|
-
.strictObject({
|
|
13
|
-
left: evidenceSchema,
|
|
14
|
-
right: evidenceSchema,
|
|
15
|
-
left_native_observations: z.array(evidenceSchema).default([]),
|
|
16
|
-
right_native_observations: z.array(evidenceSchema).default([]),
|
|
17
|
-
})
|
|
18
|
-
.superRefine((input, context) => {
|
|
10
|
+
/** Check paired version identities and per-side native identity uniqueness. */
|
|
11
|
+
const validateApplicationVersionIdentities = (input, context) => {
|
|
19
12
|
if (input.left.evidence_id === input.right.evidence_id)
|
|
20
13
|
context.addIssue({
|
|
21
14
|
code: "custom",
|
|
@@ -34,8 +27,26 @@ export const compareApplicationVersionsInputSchema = z
|
|
|
34
27
|
message: "Native observations must be unique on each side",
|
|
35
28
|
});
|
|
36
29
|
}
|
|
37
|
-
}
|
|
38
|
-
const
|
|
30
|
+
};
|
|
31
|
+
const evidenceIdentitySchema = z.object({ evidence_id: evidenceIdSchema });
|
|
32
|
+
/** Validate paired version identities without capturing whole analysis graphs. */
|
|
33
|
+
export const applicationVersionIdentitiesSchema = z
|
|
34
|
+
.object({
|
|
35
|
+
left: evidenceIdentitySchema,
|
|
36
|
+
right: evidenceIdentitySchema,
|
|
37
|
+
left_native_observations: z.array(evidenceIdentitySchema),
|
|
38
|
+
right_native_observations: z.array(evidenceIdentitySchema),
|
|
39
|
+
})
|
|
40
|
+
.superRefine(validateApplicationVersionIdentities);
|
|
41
|
+
/** Two authenticated application versions and their native observations. */
|
|
42
|
+
export const compareApplicationVersionsInputSchema = z
|
|
43
|
+
.strictObject({
|
|
44
|
+
left: evidenceSchema,
|
|
45
|
+
right: evidenceSchema,
|
|
46
|
+
left_native_observations: z.array(evidenceSchema).default([]),
|
|
47
|
+
right_native_observations: z.array(evidenceSchema).default([]),
|
|
48
|
+
})
|
|
49
|
+
.superRefine(validateApplicationVersionIdentities);
|
|
39
50
|
const candidateNodesSchema = z.tuple([nodeIdSchema]).rest(nodeIdSchema);
|
|
40
51
|
const exactMatchSchema = z.strictObject({
|
|
41
52
|
status: z.literal("matched"),
|
|
@@ -45,22 +56,22 @@ const exactMatchSchema = z.strictObject({
|
|
|
45
56
|
"exact-module-source-digest",
|
|
46
57
|
]),
|
|
47
58
|
confidence: z.literal("exact"),
|
|
48
|
-
candidate_left_node_ids:
|
|
49
|
-
candidate_right_node_ids:
|
|
59
|
+
candidate_left_node_ids: emptyArraySchema,
|
|
60
|
+
candidate_right_node_ids: emptyArraySchema,
|
|
50
61
|
});
|
|
51
62
|
const sourceMapMatchSchema = z.strictObject({
|
|
52
63
|
status: z.literal("matched"),
|
|
53
64
|
basis: z.literal("source-map-identity"),
|
|
54
65
|
confidence: z.literal("high"),
|
|
55
|
-
candidate_left_node_ids:
|
|
56
|
-
candidate_right_node_ids:
|
|
66
|
+
candidate_left_node_ids: emptyArraySchema,
|
|
67
|
+
candidate_right_node_ids: emptyArraySchema,
|
|
57
68
|
});
|
|
58
69
|
const inferredMatchSchema = z.strictObject({
|
|
59
70
|
status: z.literal("matched"),
|
|
60
71
|
basis: z.enum(["structural-fingerprint", "semantic-key"]),
|
|
61
72
|
confidence: z.literal("medium"),
|
|
62
|
-
candidate_left_node_ids:
|
|
63
|
-
candidate_right_node_ids:
|
|
73
|
+
candidate_left_node_ids: emptyArraySchema,
|
|
74
|
+
candidate_right_node_ids: emptyArraySchema,
|
|
64
75
|
});
|
|
65
76
|
const matchedItemMatchSchema = z.union([
|
|
66
77
|
exactMatchSchema,
|
|
@@ -71,14 +82,14 @@ const unmatchedItemMatchSchema = z.strictObject({
|
|
|
71
82
|
status: z.literal("unmatched"),
|
|
72
83
|
basis: z.literal("none"),
|
|
73
84
|
confidence: z.literal("unknown"),
|
|
74
|
-
candidate_left_node_ids:
|
|
75
|
-
candidate_right_node_ids:
|
|
85
|
+
candidate_left_node_ids: emptyArraySchema,
|
|
86
|
+
candidate_right_node_ids: emptyArraySchema,
|
|
76
87
|
});
|
|
77
88
|
const leftAmbiguousMatchSchema = z.strictObject({
|
|
78
89
|
status: z.literal("ambiguous"),
|
|
79
90
|
basis: z.literal("none"),
|
|
80
91
|
confidence: z.literal("unknown"),
|
|
81
|
-
candidate_left_node_ids:
|
|
92
|
+
candidate_left_node_ids: emptyArraySchema,
|
|
82
93
|
candidate_right_node_ids: candidateNodesSchema,
|
|
83
94
|
});
|
|
84
95
|
const rightAmbiguousMatchSchema = z.strictObject({
|
|
@@ -86,7 +97,7 @@ const rightAmbiguousMatchSchema = z.strictObject({
|
|
|
86
97
|
basis: z.literal("none"),
|
|
87
98
|
confidence: z.literal("unknown"),
|
|
88
99
|
candidate_left_node_ids: candidateNodesSchema,
|
|
89
|
-
candidate_right_node_ids:
|
|
100
|
+
candidate_right_node_ids: emptyArraySchema,
|
|
90
101
|
});
|
|
91
102
|
const comparisonItemContextShape = {
|
|
92
103
|
item_id: prefixedDigestSchema("javc_item"),
|
|
@@ -194,3 +205,7 @@ export const applicationVersionComparisonResultSchema = z
|
|
|
194
205
|
message: "Comparison coverage must match source graph completeness",
|
|
195
206
|
});
|
|
196
207
|
});
|
|
208
|
+
/** Reuse the exact owned change graph while validating the rest of the result. */
|
|
209
|
+
export const ownedApplicationVersionComparisonResultSchema = applicationVersionComparisonResultSchema.safeExtend({
|
|
210
|
+
graph: z.custom(isValidatedImmutableJavaScriptApplicationGraph),
|
|
211
|
+
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { absenceClaimable,
|
|
2
|
-
import {
|
|
3
|
-
import {} from "
|
|
1
|
+
import { absenceClaimable, canonicalJson } from "../comparisonSemantics.js";
|
|
2
|
+
import { digestCanonicalValue } from "../canonicalDigest.js";
|
|
3
|
+
import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
|
|
4
4
|
/** Classify matched, unmatched, and ambiguous nodes without inventing absence. */
|
|
5
5
|
export const classifyJavaScriptApplicationVersions = (matching, context) => {
|
|
6
6
|
const pairByLeft = new Map(matching.pairs.map(({ left, right }) => [
|
|
@@ -11,7 +11,13 @@ export const classifyJavaScriptApplicationVersions = (matching, context) => {
|
|
|
11
11
|
right.node_id,
|
|
12
12
|
`pair:${left.node_id}:${right.node_id}`,
|
|
13
13
|
]));
|
|
14
|
-
const fullContext = {
|
|
14
|
+
const fullContext = {
|
|
15
|
+
...context,
|
|
16
|
+
pairByLeft,
|
|
17
|
+
pairByRight,
|
|
18
|
+
leftRelationships: indexRelationships(context.leftGraph),
|
|
19
|
+
rightRelationships: indexRelationships(context.rightGraph),
|
|
20
|
+
};
|
|
15
21
|
const leftItems = matching.unmatchedLeft.map((node) => {
|
|
16
22
|
const candidates = matching.candidatesForLeft.get(node.node_id) ?? [];
|
|
17
23
|
return unmatchedItem({
|
|
@@ -31,7 +37,7 @@ export const classifyJavaScriptApplicationVersions = (matching, context) => {
|
|
|
31
37
|
...matching.pairs.map((pair) => matchedItem(pair, fullContext)),
|
|
32
38
|
...leftItems,
|
|
33
39
|
...rightItems,
|
|
34
|
-
].sort((left, right) =>
|
|
40
|
+
].sort((left, right) => compareUnicodeCodePoints(left.item_id, right.item_id)),
|
|
35
41
|
};
|
|
36
42
|
};
|
|
37
43
|
const matchedItem = (pair, context) => {
|
|
@@ -202,38 +208,46 @@ const contentIdentity = (node) => {
|
|
|
202
208
|
};
|
|
203
209
|
const locations = (node) => node.observations
|
|
204
210
|
.map(({ evidence }) => evidence.location.available ? evidence.location.value : evidence.location)
|
|
205
|
-
.sort((left, right) =>
|
|
211
|
+
.sort((left, right) => compareUnicodeCodePoints(canonicalJson(left), canonicalJson(right)));
|
|
206
212
|
const properties = (node) => node.observations
|
|
207
|
-
.map(({ label, properties: values }) => ({
|
|
208
|
-
|
|
213
|
+
.map(({ label, properties: values, source_map_reference }) => ({
|
|
214
|
+
label,
|
|
215
|
+
properties: values,
|
|
216
|
+
source_map_reference,
|
|
217
|
+
}))
|
|
218
|
+
.sort((left, right) => compareUnicodeCodePoints(canonicalJson(left), canonicalJson(right)));
|
|
219
|
+
const indexRelationships = (graph) => {
|
|
220
|
+
const adjacency = new Map();
|
|
221
|
+
const add = (nodeId, relationship) => {
|
|
222
|
+
const existing = adjacency.get(nodeId);
|
|
223
|
+
if (existing === undefined)
|
|
224
|
+
adjacency.set(nodeId, [relationship]);
|
|
225
|
+
else
|
|
226
|
+
existing.push(relationship);
|
|
227
|
+
};
|
|
228
|
+
for (const edge of graph.edges) {
|
|
229
|
+
add(edge.source_node_id, {
|
|
230
|
+
direction: "out",
|
|
231
|
+
relation: edge.relation,
|
|
232
|
+
neighborId: edge.target_node_id,
|
|
233
|
+
});
|
|
234
|
+
if (edge.target_node_id !== edge.source_node_id)
|
|
235
|
+
add(edge.target_node_id, {
|
|
236
|
+
direction: "in",
|
|
237
|
+
relation: edge.relation,
|
|
238
|
+
neighborId: edge.source_node_id,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
return {
|
|
242
|
+
nodeById: new Map(graph.nodes.map((value) => [value.node_id, value])),
|
|
243
|
+
adjacency,
|
|
244
|
+
};
|
|
245
|
+
};
|
|
209
246
|
const relationshipSignature = (node, side, context) => {
|
|
210
|
-
const
|
|
247
|
+
const { nodeById, adjacency } = side === "left" ? context.leftRelationships : context.rightRelationships;
|
|
211
248
|
const paired = side === "left" ? context.pairByLeft : context.pairByRight;
|
|
212
|
-
const
|
|
213
|
-
|
|
214
|
-
if (edge.source_node_id === node.node_id)
|
|
215
|
-
return [
|
|
216
|
-
edgeSignature({
|
|
217
|
-
direction: "out",
|
|
218
|
-
relation: edge.relation,
|
|
219
|
-
neighborId: edge.target_node_id,
|
|
220
|
-
paired,
|
|
221
|
-
nodeById,
|
|
222
|
-
}),
|
|
223
|
-
];
|
|
224
|
-
if (edge.target_node_id === node.node_id)
|
|
225
|
-
return [
|
|
226
|
-
edgeSignature({
|
|
227
|
-
direction: "in",
|
|
228
|
-
relation: edge.relation,
|
|
229
|
-
neighborId: edge.source_node_id,
|
|
230
|
-
paired,
|
|
231
|
-
nodeById,
|
|
232
|
-
}),
|
|
233
|
-
];
|
|
234
|
-
return [];
|
|
235
|
-
});
|
|
236
|
-
return canonicalJson(signatures.sort(compareCodePoints));
|
|
249
|
+
const signatures = (adjacency.get(node.node_id) ?? []).map((relationship) => edgeSignature({ ...relationship, paired, nodeById }));
|
|
250
|
+
return canonicalJson(signatures.sort(compareUnicodeCodePoints));
|
|
237
251
|
};
|
|
238
252
|
const edgeSignature = (context) => {
|
|
239
253
|
const mapped = context.paired.get(context.neighborId);
|
|
@@ -247,7 +261,7 @@ const itemEvidenceLinks = (left, right, context) => [
|
|
|
247
261
|
...nativeLinks(left, context.leftNativeEvidence),
|
|
248
262
|
...nativeLinks(right, context.rightNativeEvidence),
|
|
249
263
|
]),
|
|
250
|
-
].sort(
|
|
264
|
+
].sort(compareUnicodeCodePoints);
|
|
251
265
|
const nativeLinks = (node, evidence) => {
|
|
252
266
|
const digest = node === undefined
|
|
253
267
|
? null
|
|
@@ -280,7 +294,7 @@ const pairLimitations = (pair, status) => [
|
|
|
280
294
|
];
|
|
281
295
|
const itemWithId = (semantic) => ({
|
|
282
296
|
...semantic,
|
|
283
|
-
item_id: `javc_item_${
|
|
297
|
+
item_id: `javc_item_${digestCanonicalValue(semantic, "Application version item")}`,
|
|
284
298
|
});
|
|
285
299
|
const stringProperty = (node, key) => {
|
|
286
300
|
const values = [
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { canonicalJson } from "../comparisonSemantics.js";
|
|
2
|
+
import { compareUnicodeCodePoints, compositeKey, } from "../unicodeCodePointOrder.js";
|
|
2
3
|
const matchTiers = () => [
|
|
3
4
|
{
|
|
4
5
|
match: { basis: "exact-content-digest", confidence: "exact" },
|
|
@@ -39,7 +40,7 @@ export const matchJavaScriptApplicationVersions = (leftNodes, rightNodes) => {
|
|
|
39
40
|
const leftIds = new Set(remainingLeft.map(({ node_id: id }) => id));
|
|
40
41
|
const rightIds = new Set(remainingRight.map(({ node_id: id }) => id));
|
|
41
42
|
return {
|
|
42
|
-
pairs: pairs.sort((a, b) =>
|
|
43
|
+
pairs: pairs.sort((a, b) => compareUnicodeCodePoints(`${a.left.node_id}\0${a.right.node_id}`, `${b.left.node_id}\0${b.right.node_id}`)),
|
|
43
44
|
unmatchedLeft: remainingLeft,
|
|
44
45
|
unmatchedRight: remainingRight,
|
|
45
46
|
candidatesForLeft: filteredCandidates(leftCandidates, rightIds),
|
|
@@ -49,7 +50,7 @@ export const matchJavaScriptApplicationVersions = (leftNodes, rightNodes) => {
|
|
|
49
50
|
const applyTier = (context) => {
|
|
50
51
|
const leftByKey = nodesByKey(context.left.values(), context.tier.key);
|
|
51
52
|
const rightByKey = nodesByKey(context.right.values(), context.tier.key);
|
|
52
|
-
for (const key of [...leftByKey.keys()].sort(
|
|
53
|
+
for (const key of [...leftByKey.keys()].sort(compareUnicodeCodePoints)) {
|
|
53
54
|
const leftGroup = leftByKey.get(key) ?? [];
|
|
54
55
|
const rightGroup = rightByKey.get(key) ?? [];
|
|
55
56
|
if (rightGroup.length === 0)
|
|
@@ -97,7 +98,7 @@ const recordCandidates = (left, right, leftCandidates, rightCandidates) => {
|
|
|
97
98
|
const filteredCandidates = (candidates, retained) => new Map([...candidates.entries()].flatMap(([nodeId, values]) => {
|
|
98
99
|
const filtered = [...values]
|
|
99
100
|
.filter((value) => retained.has(value))
|
|
100
|
-
.sort(
|
|
101
|
+
.sort(compareUnicodeCodePoints);
|
|
101
102
|
return filtered.length === 0 ? [] : [[nodeId, filtered]];
|
|
102
103
|
}));
|
|
103
104
|
const nodeIdentityKey = (node) => `node\0${node.kind}\0${node.node_id}`;
|
|
@@ -112,7 +113,7 @@ const moduleSourceDigestKey = (node) => {
|
|
|
112
113
|
};
|
|
113
114
|
const sourceMapKey = (node) => node.kind === "source-module" &&
|
|
114
115
|
node.identity.strategy === "source-map-original"
|
|
115
|
-
? `source-map\0${node.identity.original_source}`
|
|
116
|
+
? `source-map\0${canonicalJson([node.identity.source_root, node.identity.original_source])}`
|
|
116
117
|
: null;
|
|
117
118
|
const structuralFingerprintKey = (node) => {
|
|
118
119
|
if (node.kind !== "javascript-module")
|
|
@@ -177,7 +178,7 @@ const uniqueStringProperty = (node, name) => {
|
|
|
177
178
|
};
|
|
178
179
|
const joined = (...values) => {
|
|
179
180
|
const strings = values.map(nonEmptyString);
|
|
180
|
-
return strings.some((value) => value === null) ? null : strings
|
|
181
|
+
return strings.some((value) => value === null) ? null : compositeKey(strings);
|
|
181
182
|
};
|
|
182
183
|
const nonEmptyString = (value) => typeof value === "string" && value !== "" ? value : null;
|
|
183
184
|
/** A literal value such as `ipcMain.handle("")` keeps its exact empty text. */
|
|
@@ -185,6 +186,6 @@ const exactString = (value) => typeof value === "string" ? value : null;
|
|
|
185
186
|
const stringList = (value) => Array.isArray(value)
|
|
186
187
|
? value
|
|
187
188
|
.filter((item) => typeof item === "string")
|
|
188
|
-
.sort(
|
|
189
|
+
.sort(compareUnicodeCodePoints)
|
|
189
190
|
: [];
|
|
190
|
-
const sortedNodes = (nodes) => [...nodes].sort((left, right) =>
|
|
191
|
+
const sortedNodes = (nodes) => [...nodes].sort((left, right) => compareUnicodeCodePoints(left.node_id, right.node_id));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import * as t from "@babel/types";
|
|
3
3
|
import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
|
|
4
|
-
import {
|
|
4
|
+
import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
|
|
5
5
|
import { propertyName } from "./javascriptAstValues.js";
|
|
6
6
|
import { stringValue } from "./javascriptStaticAnalysisHelpers.js";
|
|
7
7
|
/** Derive a rename-resistant syntax fingerprint without code execution. */
|
|
@@ -28,7 +28,7 @@ export const collectJavaScriptExports = (node) => {
|
|
|
28
28
|
},
|
|
29
29
|
});
|
|
30
30
|
return {
|
|
31
|
-
values: [...exports].sort(
|
|
31
|
+
values: [...exports].sort(compareUnicodeCodePoints),
|
|
32
32
|
};
|
|
33
33
|
};
|
|
34
34
|
const semanticTokens = (node) => {
|
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
|
+
/**
|
|
3
|
+
* Remove wrappers that affect TypeScript or Flow checking but not runtime
|
|
4
|
+
* expression identity. The returned depth lets bounded evaluators account for
|
|
5
|
+
* syntax that normalization would otherwise skip.
|
|
6
|
+
*/
|
|
7
|
+
export const unwrapJavaScriptExpression = (node) => {
|
|
8
|
+
let current = node;
|
|
9
|
+
let depth = 0;
|
|
10
|
+
while (t.isParenthesizedExpression(current) ||
|
|
11
|
+
t.isTSAsExpression(current) ||
|
|
12
|
+
t.isTSTypeAssertion(current) ||
|
|
13
|
+
t.isTSNonNullExpression(current) ||
|
|
14
|
+
t.isTSSatisfiesExpression(current) ||
|
|
15
|
+
t.isTSInstantiationExpression(current) ||
|
|
16
|
+
t.isTypeCastExpression(current)) {
|
|
17
|
+
current = current.expression;
|
|
18
|
+
depth += 1;
|
|
19
|
+
}
|
|
20
|
+
return { node: current, depth };
|
|
21
|
+
};
|
|
2
22
|
/** Read one syntax-level primitive only when its value is exact. */
|
|
3
23
|
export const readExactJavaScriptLiteral = (node) => {
|
|
24
|
+
node = unwrapJavaScriptExpression(node).node;
|
|
4
25
|
if (t.isStringLiteral(node))
|
|
5
26
|
return { found: true, value: node.value };
|
|
6
27
|
if (t.isNumericLiteral(node) && Number.isFinite(node.value))
|
|
@@ -31,6 +52,7 @@ export const propertyName = (node) => {
|
|
|
31
52
|
export const semanticStaticPropertyName = (property, computed) => semanticStaticPropertyKey(property, computed) ?? "";
|
|
32
53
|
/** Read an exact property key, preserving the legal empty-string key. */
|
|
33
54
|
export const semanticStaticPropertyKey = (property, computed) => {
|
|
55
|
+
property = unwrapJavaScriptExpression(property).node;
|
|
34
56
|
if (t.isStringLiteral(property) || t.isNumericLiteral(property))
|
|
35
57
|
return String(property.value);
|
|
36
58
|
return !computed && t.isIdentifier(property) ? property.name : null;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { jsonObjectSchema, jsonValueSchema } from "
|
|
2
|
-
import { partialApplicationCoverage, truncatedApplicationCoverage, } from "
|
|
3
|
-
import { flattenSemanticReturnValue } from "
|
|
4
|
-
/** Project one exact export/callable link into
|
|
1
|
+
import { jsonObjectSchema, jsonValueSchema } from "../jsonValue.js";
|
|
2
|
+
import { partialApplicationCoverage, truncatedApplicationCoverage, } from "./javascriptApplicationEvidenceSchemas.js";
|
|
3
|
+
import { flattenSemanticReturnValue } from "./javascriptSemanticReturns.js";
|
|
4
|
+
/** Project one exact export/callable link into inert return-shape observations. */
|
|
5
5
|
export const projectJavaScriptExportReturnShapes = (input) => {
|
|
6
6
|
if (input.link.callableId === null || input.link.exportedName === null)
|
|
7
7
|
return null;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { uniqueSorted } from "../canonicalOrdering.js";
|
|
2
|
+
import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
|
|
2
3
|
import { canonicalExportShapeValue, digestExportShapeValue, } from "./javascriptExportShapeComparisonIdentity.js";
|
|
3
4
|
import { javaScriptExportShapeComparisonResultSchema, } from "./javascriptExportShapeComparisonSchemas.js";
|
|
4
5
|
import { retainJavaScriptExportShapes, selectJavaScriptExport, } from "./javascriptExportShapeSelection.js";
|
|
5
|
-
import { buildJavaScriptExportShapeChanges, hasPartialJavaScriptExportPropertyCoverage, pairJavaScriptExportShapeVariants, } from "./javascriptExportShapeVariants.js";
|
|
6
|
+
import { buildJavaScriptExportShapeChanges, buildJavaScriptExportShapeInventories, hasPartialJavaScriptExportPropertyCoverage, pairJavaScriptExportShapeVariants, } from "./javascriptExportShapeVariants.js";
|
|
6
7
|
/** Compare exact selected export return shapes without executing JavaScript. */
|
|
7
8
|
export const compareJavaScriptExportShapes = (input) => {
|
|
8
9
|
const left = selectJavaScriptExport(input.left);
|
|
@@ -21,6 +22,11 @@ export const compareJavaScriptExportShapes = (input) => {
|
|
|
21
22
|
}));
|
|
22
23
|
const changes = allChanges;
|
|
23
24
|
const omittedChanges = 0;
|
|
25
|
+
const propertyInventories = buildJavaScriptExportShapeInventories({
|
|
26
|
+
pairing,
|
|
27
|
+
leftShapes: leftRetained.shapes,
|
|
28
|
+
rightShapes: rightRetained.shapes,
|
|
29
|
+
});
|
|
24
30
|
const coverage = comparisonCoverage({
|
|
25
31
|
input,
|
|
26
32
|
left,
|
|
@@ -35,6 +41,7 @@ export const compareJavaScriptExportShapes = (input) => {
|
|
|
35
41
|
const semantic = {
|
|
36
42
|
left: left.selection,
|
|
37
43
|
right: right.selection,
|
|
44
|
+
property_inventories: propertyInventories,
|
|
38
45
|
summary: summarize(allChanges),
|
|
39
46
|
changes,
|
|
40
47
|
coverage,
|
|
@@ -59,7 +66,7 @@ const sortChanges = (changes) => changes
|
|
|
59
66
|
change_id: change.change_id,
|
|
60
67
|
}),
|
|
61
68
|
}))
|
|
62
|
-
.sort((left, right) =>
|
|
69
|
+
.sort((left, right) => compareUnicodeCodePoints(left.sortKey, right.sortKey) ||
|
|
63
70
|
left.index - right.index)
|
|
64
71
|
.map(({ change }) => change);
|
|
65
72
|
const comparisonCoverage = (context) => {
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import canonicalize from "canonicalize";
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Canonically encode one export-shape comparison value.
|
|
5
|
+
*
|
|
6
|
+
* Comparison identifiers hash the full result semantics, including each
|
|
7
|
+
* change's presence object and the per-variant property inventories.
|
|
8
|
+
*/
|
|
4
9
|
export const canonicalExportShapeValue = (value) => {
|
|
5
10
|
const encoded = canonicalize(value);
|
|
6
11
|
if (encoded === undefined)
|
|
@@ -5,7 +5,6 @@ const evidenceIdSchema = prefixedDigestSchema("ev");
|
|
|
5
5
|
const graphIdSchema = prefixedDigestSchema("jag");
|
|
6
6
|
const nodeIdSchema = prefixedDigestSchema("jag_node");
|
|
7
7
|
const textSchema = z.string().min(1);
|
|
8
|
-
const selectorTextSchema = textSchema;
|
|
9
8
|
const semanticPrimitiveSchema = z.union([
|
|
10
9
|
z.string(),
|
|
11
10
|
z.number().finite(),
|
|
@@ -49,25 +48,38 @@ const sourceRangeSchema = z
|
|
|
49
48
|
message: "Source range end must not precede its start",
|
|
50
49
|
});
|
|
51
50
|
});
|
|
52
|
-
/**
|
|
53
|
-
|
|
54
|
-
.strictObject({
|
|
55
|
-
left: evidenceSchema,
|
|
56
|
-
right: evidenceSchema,
|
|
57
|
-
left_module_path: selectorTextSchema,
|
|
58
|
-
left_export_name: selectorTextSchema,
|
|
59
|
-
right_module_path: selectorTextSchema,
|
|
60
|
-
right_export_name: selectorTextSchema,
|
|
61
|
-
})
|
|
62
|
-
.superRefine((input, context) => {
|
|
51
|
+
/** Check that export-shape comparisons bind distinct source Evidence. */
|
|
52
|
+
const validateJavaScriptExportShapeIdentities = (input, context) => {
|
|
63
53
|
if (input.left.evidence_id === input.right.evidence_id)
|
|
64
54
|
context.addIssue({
|
|
65
55
|
code: "custom",
|
|
66
56
|
path: ["right"],
|
|
67
57
|
message: "JavaScript export shape Evidence must be distinct",
|
|
68
58
|
});
|
|
69
|
-
}
|
|
70
|
-
const
|
|
59
|
+
};
|
|
60
|
+
const evidenceIdentitySchema = z.object({ evidence_id: evidenceIdSchema });
|
|
61
|
+
/** Validate export-shape identities without capturing complete source graphs. */
|
|
62
|
+
export const javaScriptExportShapeIdentitiesSchema = z
|
|
63
|
+
.object({
|
|
64
|
+
left: evidenceIdentitySchema,
|
|
65
|
+
right: evidenceIdentitySchema,
|
|
66
|
+
})
|
|
67
|
+
.superRefine(validateJavaScriptExportShapeIdentities);
|
|
68
|
+
/** Two authenticated application graphs and exact export selectors. */
|
|
69
|
+
export const compareJavaScriptExportShapesInputSchema = z
|
|
70
|
+
.strictObject({
|
|
71
|
+
left: evidenceSchema,
|
|
72
|
+
right: evidenceSchema,
|
|
73
|
+
left_module_path: textSchema,
|
|
74
|
+
left_export_name: textSchema,
|
|
75
|
+
right_module_path: textSchema,
|
|
76
|
+
right_export_name: textSchema,
|
|
77
|
+
})
|
|
78
|
+
.superRefine(validateJavaScriptExportShapeIdentities);
|
|
79
|
+
const projectedReturnFieldShape = {
|
|
80
|
+
path: jsonPointerSchema,
|
|
81
|
+
presence: z.enum(["present", "absent", "unknown-coverage"]),
|
|
82
|
+
};
|
|
71
83
|
const projectedReturnFieldSchema = z.discriminatedUnion("state", [
|
|
72
84
|
z.strictObject({
|
|
73
85
|
...projectedReturnFieldShape,
|
|
@@ -135,8 +147,8 @@ const projectedReturnShapeSchema = z
|
|
|
135
147
|
export const projectedExportReturnShapesSchema = z
|
|
136
148
|
.strictObject({
|
|
137
149
|
semantic_role: z.literal("export-return-shapes"),
|
|
138
|
-
module_path:
|
|
139
|
-
exported_name:
|
|
150
|
+
module_path: textSchema,
|
|
151
|
+
exported_name: textSchema,
|
|
140
152
|
callable_id: textSchema,
|
|
141
153
|
callable_kind: z.enum(["function", "class", "method"]),
|
|
142
154
|
static_return_shapes: z.array(projectedReturnShapeSchema),
|
|
@@ -160,16 +172,16 @@ export const projectedExportReturnShapesSchema = z
|
|
|
160
172
|
});
|
|
161
173
|
const exportCandidateSchema = z.strictObject({
|
|
162
174
|
node_id: nodeIdSchema,
|
|
163
|
-
module_path:
|
|
164
|
-
export_name:
|
|
175
|
+
module_path: textSchema,
|
|
176
|
+
export_name: textSchema,
|
|
165
177
|
matches_requested_module: z.boolean(),
|
|
166
178
|
matches_requested_export: z.boolean(),
|
|
167
179
|
});
|
|
168
180
|
const selectorResultShape = {
|
|
169
181
|
evidence_id: evidenceIdSchema,
|
|
170
182
|
graph_id: graphIdSchema,
|
|
171
|
-
requested_module_path:
|
|
172
|
-
requested_export_name:
|
|
183
|
+
requested_module_path: textSchema,
|
|
184
|
+
requested_export_name: textSchema,
|
|
173
185
|
candidates: z.array(exportCandidateSchema),
|
|
174
186
|
omitted_candidates: z.number().int().min(0),
|
|
175
187
|
};
|
|
@@ -209,11 +221,21 @@ const discriminantSchema = z.strictObject({
|
|
|
209
221
|
path: jsonPointerSchema,
|
|
210
222
|
value: semanticPrimitiveSchema,
|
|
211
223
|
});
|
|
212
|
-
const
|
|
224
|
+
const propertyPresenceSchema = z.enum([
|
|
225
|
+
"present",
|
|
226
|
+
"absent",
|
|
227
|
+
"unknown-coverage",
|
|
228
|
+
]);
|
|
229
|
+
/** One change row; presence is required even when values stay unknown. */
|
|
230
|
+
export const javaScriptExportShapeComparisonChangeSchema = z.strictObject({
|
|
213
231
|
change_id: prefixedDigestSchema("jesc_change"),
|
|
214
232
|
status: z.enum(["added", "removed", "changed", "unknown"]),
|
|
215
233
|
path: jsonPointerSchema,
|
|
216
234
|
discriminant: discriminantSchema.nullable(),
|
|
235
|
+
presence: z.strictObject({
|
|
236
|
+
left: propertyPresenceSchema,
|
|
237
|
+
right: propertyPresenceSchema,
|
|
238
|
+
}),
|
|
217
239
|
left: valueAvailabilitySchema,
|
|
218
240
|
right: valueAvailabilitySchema,
|
|
219
241
|
left_source_range: sourceRangeSchema.nullable(),
|
|
@@ -221,18 +243,32 @@ const comparisonChangeSchema = z.strictObject({
|
|
|
221
243
|
evidence_links: z.array(evidenceIdSchema).length(2),
|
|
222
244
|
limitations: z.array(textSchema),
|
|
223
245
|
});
|
|
246
|
+
const inventoryPropertyCoverageSchema = z.strictObject({
|
|
247
|
+
path: jsonPointerSchema,
|
|
248
|
+
status: z.enum(["complete", "partial"]),
|
|
249
|
+
});
|
|
250
|
+
const propertyInventorySchema = z.strictObject({
|
|
251
|
+
side: z.enum(["left", "right"]),
|
|
252
|
+
variant_index: z.number().int().nonnegative(),
|
|
253
|
+
discriminant: discriminantSchema.nullable(),
|
|
254
|
+
paired: z.boolean(),
|
|
255
|
+
source_range: sourceRangeSchema,
|
|
256
|
+
properties: z.array(jsonPointerSchema),
|
|
257
|
+
property_coverage: z.array(inventoryPropertyCoverageSchema),
|
|
258
|
+
});
|
|
224
259
|
/** Static export-return comparison with explicit unknown semantics. */
|
|
225
260
|
export const javaScriptExportShapeComparisonResultSchema = z.strictObject({
|
|
226
261
|
comparison_id: prefixedDigestSchema("jesc"),
|
|
227
262
|
left: selectorResultSchema,
|
|
228
263
|
right: selectorResultSchema,
|
|
264
|
+
property_inventories: z.array(propertyInventorySchema),
|
|
229
265
|
summary: z.strictObject({
|
|
230
266
|
added: z.number().int().min(0),
|
|
231
267
|
removed: z.number().int().min(0),
|
|
232
268
|
changed: z.number().int().min(0),
|
|
233
269
|
unknown: z.number().int().min(0),
|
|
234
270
|
}),
|
|
235
|
-
changes: z.array(
|
|
271
|
+
changes: z.array(javaScriptExportShapeComparisonChangeSchema),
|
|
236
272
|
coverage: z.strictObject({
|
|
237
273
|
status: z.enum(["complete-within-inputs", "partial", "truncated"]),
|
|
238
274
|
left_graph_status: z.enum([
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { projectedExportReturnShapesSchema, } from "./javascriptExportShapeComparisonSchemas.js";
|
|
2
|
-
import {
|
|
2
|
+
import { compareUnicodeCodePoints } from "../unicodeCodePointOrder.js";
|
|
3
3
|
/** Select one exact trusted export and its exact static return-shape observation. */
|
|
4
4
|
export const selectJavaScriptExport = (side) => {
|
|
5
5
|
const candidates = exportCandidates(side.graph);
|
|
@@ -41,11 +41,11 @@ export const selectJavaScriptExport = (side) => {
|
|
|
41
41
|
limitations: [],
|
|
42
42
|
};
|
|
43
43
|
};
|
|
44
|
-
/** Retain every
|
|
45
|
-
export const retainJavaScriptExportShapes = (selection) => {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
};
|
|
44
|
+
/** Retain every authenticated variant with its explicit slot presence. */
|
|
45
|
+
export const retainJavaScriptExportShapes = (selection) => ({
|
|
46
|
+
shapes: selection.projection?.static_return_shapes ?? [],
|
|
47
|
+
omitted: 0,
|
|
48
|
+
});
|
|
49
49
|
const selectorBase = (side, candidates) => ({
|
|
50
50
|
evidence_id: side.evidenceId,
|
|
51
51
|
graph_id: side.graph.graph_id,
|
|
@@ -90,7 +90,7 @@ const exportCandidates = (graph) => {
|
|
|
90
90
|
});
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
|
-
return [...candidates.values()].sort((left, right) =>
|
|
93
|
+
return [...candidates.values()].sort((left, right) => compareUnicodeCodePoints(candidateKey(left), candidateKey(right)));
|
|
94
94
|
};
|
|
95
95
|
const candidateKey = (candidate) => `${candidate.modulePath}\0${candidate.exportName}\0${candidate.node.node_id}`;
|
|
96
96
|
const returnShapeFor = (node, side) => {
|