rea-agents 3.0.0 → 3.2.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 +83 -108
- package/bridge/ghidra/ReaGhidraBridge.java +609 -841
- package/bridge/hopper_bridge.py +99 -344
- package/dist/application/AbortablePromise.js +6 -3
- package/dist/application/AnalysisContextQueries.js +21 -9
- package/dist/application/AnalysisSnapshotCache.js +0 -1
- package/dist/application/AnalysisSnapshotFiles.js +7 -7
- package/dist/application/AndroidApplicationService.js +1 -1
- package/dist/application/AppleApplicationService.js +1 -1
- package/dist/application/ArtifactExtraction.js +35 -54
- package/dist/application/ArtifactExtractionDestination.js +17 -0
- package/dist/application/ArtifactGraphConstruction.js +2 -17
- package/dist/application/ArtifactInventory/classify.js +2 -6
- package/dist/application/ArtifactInventory/hash.js +2 -20
- package/dist/application/ArtifactInventory/policy.js +17 -0
- package/dist/application/ArtifactInventory/reader.js +1 -4
- package/dist/application/ArtifactInventory/scanCanonical.js +8 -15
- package/dist/application/ArtifactInventory/scanReader.js +76 -58
- package/dist/application/ArtifactInventory/types.js +1 -5
- package/dist/application/ArtifactInventory.js +6 -14
- package/dist/application/AuthorizedArtifactInventory.js +3 -13
- package/dist/application/BinarySession.js +54 -28
- package/dist/application/BinarySessionComposition.js +0 -11
- package/dist/application/BinarySessionOpen.js +2 -1
- package/dist/application/BinarySessionRecords.js +24 -86
- package/dist/application/BinarySessionStatus.js +16 -21
- package/dist/application/BinaryTargetResolver.js +216 -0
- package/dist/application/BrowserEvidence.js +39 -57
- package/dist/application/BrowserObservationService.js +3 -6
- package/dist/application/BrowserScenarioCaptureService.js +3 -6
- package/dist/application/BrowserScenarioEvidence.js +3 -3
- package/dist/application/CallPathTracing.js +2 -36
- package/dist/application/CapabilityClientRequirements.js +26 -0
- package/dist/application/CapabilityInventory.js +143 -77
- package/dist/application/ClientConfigurationDocument.js +27 -0
- package/dist/application/ClientRegistrationStatus.js +16 -13
- package/dist/application/CommandShimReplay.js +14 -1
- package/dist/application/DirectAnalysis.js +22 -46
- package/dist/application/DirectAnalysisStatus.js +5 -61
- package/dist/application/Doctor.js +11 -32
- package/dist/application/DoctorDiagnostics.js +1 -2
- package/dist/application/DoctorScope.js +1 -1
- package/dist/application/ElectronActiveEvidence.js +50 -0
- package/dist/application/ElectronActiveObservationPort.js +1 -0
- package/dist/application/ElectronActiveObservationService.js +78 -0
- package/dist/application/ElectronBoundaryAnalysis.js +7 -8
- package/dist/application/ElectronBoundaryGraphContext.js +1 -1
- package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
- package/dist/application/ElectronBoundaryGraphNative.js +1 -2
- package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
- package/dist/application/ElectronEvidence.js +4 -7
- package/dist/application/ElectronObservationService.js +5 -9
- package/dist/application/EnhancedLiteralTracing.js +42 -65
- package/dist/application/EnhancedTools.js +98 -64
- package/dist/application/EvidenceBundleCommands.js +16 -12
- package/dist/application/EvidenceBundleFiles.js +9 -15
- package/dist/application/EvidenceLedger.js +14 -42
- package/dist/application/FilesystemSnapshot.js +2 -3
- package/dist/application/InterfaceBuilderAnalysis.js +266 -0
- package/dist/application/InventoryProjectionEvidence.js +4 -2
- package/dist/application/InvestigationProviders.js +1 -1
- package/dist/application/JavaScriptApplicationEvidence.js +2 -5
- package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
- package/dist/application/JavaScriptApplicationService.js +6 -29
- package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
- package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
- package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
- package/dist/application/JavaScriptArtifactFiles.js +67 -107
- package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
- package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
- package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
- package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
- package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
- package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
- package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
- package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
- package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
- package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
- package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
- package/dist/application/JavaScriptJsonModules.js +2 -2
- package/dist/application/JavaScriptModuleRelationships.js +22 -27
- package/dist/application/JavaScriptReplayPermission.js +1 -1
- package/dist/application/JavaScriptReplayPlanning.js +9 -3
- package/dist/application/JavaScriptReplayService.js +29 -47
- package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
- package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
- package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
- package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
- package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
- package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
- package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
- package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
- package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
- package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
- package/dist/application/JavaScriptSemanticTraceService.js +1 -10
- package/dist/application/JsonFiles.js +79 -0
- package/dist/application/LinuxHopper.js +11 -9
- package/dist/application/LoopbackReplay.js +26 -23
- package/dist/application/LoopbackReplayRecorder.js +29 -1
- package/dist/application/ManagedApplicationGraphService.js +1 -2
- package/dist/application/ManagedMemberComparisonService.js +11 -41
- package/dist/application/ManagedNativeVerificationService.js +1 -2
- package/dist/application/ManagedReconstructionService.js +1 -1
- package/dist/application/ManagedRuntimeCorrelationService.js +14 -13
- package/dist/application/NativeApiInspection.js +2 -7
- package/dist/application/NativeUiActionTrace.js +394 -0
- package/dist/application/NodeRuntimeCharacterizationService.js +11 -16
- package/dist/application/PermissionAuthority.js +15 -7
- package/dist/application/PermissionFailure.js +5 -0
- package/dist/application/ProcessCaptureAuthority.js +5 -7
- package/dist/application/ProcessCaptureJournal.js +3 -2
- package/dist/application/ProcessCaptureLifecycle.js +10 -12
- package/dist/application/ProcessCheckpoints.js +29 -11
- package/dist/application/ProcessCli.js +8 -17
- package/dist/application/ProcessEvidence.js +5 -7
- package/dist/application/ProcessHarness.js +60 -20
- package/dist/application/ProcessNormalization.js +2 -1
- package/dist/application/ProcessReactiveCoordinator.js +2 -4
- package/dist/application/ProcessReactiveEffects.js +9 -3
- package/dist/application/ProcessReactiveHarness.js +13 -7
- package/dist/application/ProcessSampling.js +2 -4
- package/dist/application/ProcessTimer.js +39 -0
- package/dist/application/ProjectPermissionStore.js +39 -95
- package/dist/application/RealHopperAssertions.js +20 -66
- package/dist/application/ReconstructionCoverageService.js +12 -58
- package/dist/application/ReconstructionObligationAuthority.js +2 -2
- package/dist/application/ReconstructionObligationCandidates.js +4 -4
- package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
- package/dist/application/ReconstructionObligationLedgerService.js +19 -38
- package/dist/application/ReferenceSourceImport.js +21 -47
- package/dist/application/ReferenceSourceImportEntries.js +2 -4
- package/dist/application/ReferenceSourceImportPolicy.js +5 -32
- package/dist/application/ReferenceSourceImportTypes.js +0 -16
- package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
- package/dist/application/SessionProviderRouter.js +2 -2
- package/dist/application/Setup.js +1 -3
- package/dist/application/SetupClientConfiguration.js +22 -88
- package/dist/application/SetupRegistrationEnvironment.js +0 -7
- package/dist/application/StoreFileLock.js +119 -0
- package/dist/application/TerminalRenderer.js +2 -3
- package/dist/application/Uninstall.js +9 -14
- package/dist/application/UnknownEvidence.js +1 -1
- package/dist/application/WindowsCapabilities.js +5 -4
- package/dist/artifacts/ArtifactPaths.js +2 -5
- package/dist/artifacts/ArtifactProvider.js +43 -67
- package/dist/artifacts/DirectoryArtifactReader.js +13 -8
- package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
- package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
- package/dist/artifacts/NibArchive.js +269 -0
- package/dist/artifacts/SafeOutputTree.js +21 -31
- package/dist/browser/BrowserProcessStartup.js +1 -2
- package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
- package/dist/browser/CdpBrowserProvider.js +3 -13
- package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
- package/dist/browser/CdpCaptureDocuments.js +28 -76
- package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
- package/dist/browser/CdpCaptureEventHandlers.js +22 -87
- package/dist/browser/CdpCaptureEvents.js +2 -8
- package/dist/browser/CdpCaptureStorage.js +9 -20
- package/dist/browser/CdpCaptureStorageFingerprints.js +85 -95
- package/dist/browser/CdpCaptureValues.js +21 -21
- package/dist/browser/CdpConnection.js +10 -25
- package/dist/browser/CdpElectronInspection.js +29 -51
- package/dist/browser/CdpElectronProvider.js +10 -35
- package/dist/browser/CdpElectronScriptEvents.js +8 -16
- package/dist/browser/CdpElectronScripts.js +6 -35
- package/dist/browser/CdpElectronWorkers.js +6 -10
- package/dist/browser/CdpEndpoint.js +25 -41
- package/dist/browser/CdpObservationSession.js +14 -26
- package/dist/browser/CdpPageCapture.js +34 -48
- package/dist/browser/CdpPageCaptureScripts.js +1 -19
- package/dist/browser/CdpPageCaptureWorkers.js +6 -10
- package/dist/browser/CdpSafeMetadata.js +19 -22
- package/dist/browser/CdpScreenshot.js +3 -5
- package/dist/browser/CdpTargetSession.js +1 -2
- package/dist/browser/CdpWebMcpDiscovery.js +13 -22
- package/dist/browser/ElectronFileScope.js +8 -19
- package/dist/browser/JavaScriptRuntimeScope.js +10 -10
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
- package/dist/browser/PlaywrightElectronActiveActions.js +309 -0
- package/dist/browser/PlaywrightElectronActiveProvider.js +274 -0
- package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
- package/dist/browser/PlaywrightScenarioActions.js +3 -7
- package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
- package/dist/browser/PlaywrightScenarioBrowser.js +7 -9
- package/dist/browser/PlaywrightScenarioEvents.js +45 -94
- package/dist/browser/PlaywrightScenarioSession.js +18 -34
- package/dist/browser/PngVisualDiff.js +22 -14
- package/dist/browser/SensitiveTextCapture.js +1 -18
- package/dist/browser/V8InspectorCaptureProjection.js +7 -7
- package/dist/browser/V8InspectorEndpoint.js +12 -14
- package/dist/browser/V8InspectorProvider.js +20 -61
- package/dist/browser/WebSourceMapFetcher.js +56 -176
- package/dist/catalogIdentity.js +12 -60
- package/dist/cli/artifactCommands.js +49 -77
- package/dist/cli/coreAnalysisCommands.js +83 -133
- package/dist/cli/javascriptApplicationAnalysis.js +1 -9
- package/dist/cli/managedCommands.js +6 -271
- package/dist/cli/setupCommands.js +3 -12
- package/dist/cli/utilityCommands.js +7 -41
- package/dist/cli.js +0 -2
- package/dist/cliApplicationCommands.js +44 -114
- package/dist/cliBrowserAdvancedCommands.js +12 -102
- package/dist/cliBrowserCommands.js +19 -124
- package/dist/cliBrowserContext.js +30 -0
- package/dist/cliCommandNames.js +5 -5
- package/dist/cliElectronCommands.js +49 -71
- package/dist/cliEvidenceCommands.js +8 -77
- package/dist/cliJavaScriptRuntimeCommands.js +18 -92
- package/dist/cliJsonInput.js +4 -14
- package/dist/cliObservationOptions.js +11 -92
- package/dist/cliPolicyCommands.js +2 -16
- package/dist/cliProcessCommands.js +3 -3
- package/dist/cliSetup.js +0 -13
- package/dist/config/browserScenario.js +77 -0
- package/dist/config/electronAutomation.js +35 -0
- package/dist/config/environment.js +6 -9
- package/dist/config/javascriptReplay.js +41 -0
- package/dist/config/managedRuntime.js +25 -0
- package/dist/config/parseConfig.js +56 -232
- package/dist/config/parsers.js +16 -28
- package/dist/config/passiveObservation.js +87 -0
- package/dist/config/permissions.js +0 -7
- package/dist/config/processCapture.js +47 -0
- package/dist/contracts/analysisSearchContract.js +2 -5
- package/dist/contracts/applicationToolContracts.js +58 -114
- package/dist/contracts/applicationWorkflowInputContracts.js +29 -114
- package/dist/contracts/artifactComparisonExample.js +58 -60
- package/dist/contracts/artifactToolContracts.js +37 -91
- package/dist/contracts/browserScenarioToolContracts.js +6 -51
- package/dist/contracts/browserToolContracts.js +10 -75
- package/dist/contracts/electronToolContracts.js +27 -98
- package/dist/contracts/enhancedInputs.js +31 -78
- package/dist/contracts/errorSchemas.js +0 -1
- package/dist/contracts/functionComparisonExample.js +10 -24
- package/dist/contracts/functionInstructionContract.js +1 -3
- package/dist/contracts/functionWorkflowToolContracts.js +4 -5
- package/dist/contracts/hopperMemoryContracts.js +3 -3
- package/dist/contracts/investigationExamples.js +14 -11
- package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
- package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
- package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
- package/dist/contracts/managedToolContracts.js +10 -104
- package/dist/contracts/managedWorkflowExamples.js +77 -125
- package/dist/contracts/managedWorkflowToolContracts.js +51 -74
- package/dist/contracts/nativeToolContracts.js +9 -14
- package/dist/contracts/processCaptureExample.js +2 -69
- package/dist/contracts/promptContracts.js +49 -67
- package/dist/contracts/providerSelection.js +0 -1
- package/dist/contracts/reconstructionReadinessExample.js +1 -6
- package/dist/contracts/sessionStatusContract.js +1 -17
- package/dist/contracts/sessionToolSchemas.js +52 -0
- package/dist/contracts/toolContractExamples.js +11 -10
- package/dist/contracts/toolContractHelpers.js +19 -0
- package/dist/contracts/toolContracts.js +60 -143
- package/dist/contracts/toolEffects.js +16 -9
- package/dist/contracts/toolOutputSchemaGroups.js +47 -86
- package/dist/contracts/toolOutputSchemaPrimitives.js +72 -62
- package/dist/contracts/toolSchemaMetadata.js +117 -0
- package/dist/contracts/unknownContractExamples.js +0 -2
- package/dist/doctorRuntime.js +1 -1
- package/dist/domain/analysisErrorPresentation.js +46 -54
- package/dist/domain/analysisErrorProjection.js +28 -37
- package/dist/domain/analysisProfile.js +3 -31
- package/dist/domain/analysisSnapshot.js +3 -12
- package/dist/domain/androidApplication.js +15 -52
- package/dist/domain/appleApplication.js +24 -65
- package/dist/domain/artifactComparison.js +11 -29
- package/dist/domain/artifactGraph.js +14 -44
- package/dist/domain/artifactInspection.js +38 -69
- package/dist/domain/artifactInventoryEvidence.js +27 -21
- package/dist/domain/binaryTarget.js +2 -219
- package/dist/domain/binaryTargetTypes.js +1 -0
- package/dist/domain/browserCaptureComparison.js +35 -60
- package/dist/domain/browserObservation.js +45 -197
- package/dist/domain/browserObservationSchemas.js +5 -23
- package/dist/domain/browserScenario.js +11 -14
- package/dist/domain/browserScenarioCapture.js +11 -12
- package/dist/domain/browserScenarioCaptureValues.js +146 -84
- package/dist/domain/browserScenarioDiff.js +2 -59
- package/dist/domain/browserScenarioDiffEvidence.js +51 -0
- package/dist/domain/browserScenarioDiffValues.js +21 -38
- package/dist/domain/browserScenarioValues.js +80 -109
- package/dist/domain/browserSession.js +4 -7
- package/dist/domain/bundleComparison.js +6 -32
- package/dist/domain/bytecodeProvider.js +53 -54
- package/dist/domain/callPath.js +50 -169
- package/dist/domain/callPathSchemas.js +79 -0
- package/dist/domain/changedBehavior.js +34 -60
- package/dist/domain/completionLedgerGeneration.js +8 -14
- package/dist/domain/conformancePackage.js +126 -97
- package/dist/domain/conformanceReplay.js +39 -11
- package/dist/domain/conformanceTrustGate.js +174 -30
- package/dist/domain/customProtocolCapture.js +4 -4
- package/dist/domain/electronActiveObservation.js +244 -0
- package/dist/domain/electronObservation.js +21 -83
- package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
- package/dist/domain/electronStaticAnalysisIpc.js +38 -14
- package/dist/domain/electronStaticAnalysisNative.js +1 -8
- package/dist/domain/electronStaticAnalysisValues.js +14 -18
- package/dist/domain/errors.js +33 -54
- package/dist/domain/eventProcessTree.js +101 -90
- package/dist/domain/evidence.js +2 -10
- package/dist/domain/evidenceBundle.js +3 -5
- package/dist/domain/evidenceCompletionLedger.js +6 -8
- package/dist/domain/functionComparison.js +4 -14
- package/dist/domain/functionComparisonNormalization.js +8 -8
- package/dist/domain/functionComparisonResults.js +25 -15
- package/dist/domain/functionComparisonSchemas.js +49 -33
- package/dist/domain/functionDossierEvidence.js +31 -151
- package/dist/domain/hopperStartupFailure.js +1 -1
- package/dist/domain/hopperValues.js +17 -141
- package/dist/domain/inputIssueProjection.js +4 -1
- package/dist/domain/interfaceBuilderGraph.js +654 -0
- package/dist/domain/javascriptApplicationAnalysis.js +8 -112
- package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
- package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
- package/dist/domain/javascriptApplicationGraph.js +3 -13
- package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
- package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
- package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
- package/dist/domain/javascriptApplicationVersionItems.js +120 -53
- package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
- package/dist/domain/javascriptAstFingerprint.js +25 -58
- package/dist/domain/javascriptAstValues.js +9 -0
- package/dist/domain/javascriptExportInstrumentation.js +2 -4
- package/dist/domain/javascriptExportShapeComparison.js +6 -7
- package/dist/domain/javascriptExportShapeComparisonSchemas.js +70 -77
- package/dist/domain/javascriptExportShapeSelection.js +17 -19
- package/dist/domain/javascriptFeatureSeed.js +20 -12
- package/dist/domain/javascriptFeatureTrace.js +13 -67
- package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
- package/dist/domain/javascriptFeatureTraversal.js +1 -44
- package/dist/domain/javascriptNativeHandoff.js +1 -1
- package/dist/domain/javascriptReplay.js +100 -101
- package/dist/domain/javascriptRuntimeLoadState.js +3 -8
- package/dist/domain/javascriptRuntimeObservation.js +43 -103
- package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
- package/dist/domain/javascriptRuntimeReconciliationActive.js +80 -0
- package/dist/domain/javascriptRuntimeReconciliationGraph.js +21 -33
- package/dist/domain/javascriptRuntimeReconciliationMatching.js +75 -61
- package/dist/domain/javascriptRuntimeReconciliationParsing.js +21 -46
- package/dist/domain/javascriptRuntimeReconciliationResult.js +25 -19
- package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
- package/dist/domain/javascriptRuntimeReconciliationSchemas.js +34 -49
- package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
- package/dist/domain/javascriptSemanticAnalysis.js +12 -45
- package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
- package/dist/domain/javascriptSemanticCallResolution.js +6 -16
- package/dist/domain/javascriptSemanticCalls.js +5 -32
- package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
- package/dist/domain/javascriptSemanticCoverage.js +11 -0
- package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
- package/dist/domain/javascriptSemanticDataEffects.js +1 -11
- package/dist/domain/javascriptSemanticFingerprints.js +3 -5
- package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
- package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
- package/dist/domain/javascriptSemanticIr.js +1 -29
- package/dist/domain/javascriptSemanticObjects.js +1 -5
- package/dist/domain/javascriptSemanticPrimitives.js +2 -9
- package/dist/domain/javascriptSemanticProjection.js +0 -18
- package/dist/domain/javascriptSemanticPromises.js +9 -16
- package/dist/domain/javascriptSemanticProvenance.js +16 -19
- package/dist/domain/javascriptSemanticQuery.js +17 -139
- package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
- package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
- package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
- package/dist/domain/javascriptSemanticResources.js +1 -6
- package/dist/domain/javascriptSemanticReturns.js +10 -27
- package/dist/domain/javascriptSemanticValueTypes.js +1 -0
- package/dist/domain/javascriptSemanticValues.js +44 -62
- package/dist/domain/javascriptStaticAnalysis.js +21 -43
- package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
- package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
- package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
- package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
- package/dist/domain/javascriptStaticAnalysisState.js +1 -5
- package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
- package/dist/domain/jsonShape.js +7 -33
- package/dist/domain/localPath.js +7 -0
- package/dist/domain/managedApplicationGraph.js +9 -41
- package/dist/domain/managedApplicationGraphCoverage.js +24 -156
- package/dist/domain/managedApplicationGraphNodes.js +10 -13
- package/dist/domain/managedArtifact.js +14 -27
- package/dist/domain/managedMemberComparison.js +90 -92
- package/dist/domain/managedMemberComparisonCoverage.js +11 -33
- package/dist/domain/managedMemberComparisonItems.js +221 -0
- package/dist/domain/managedMemberComparisonMatch.js +8 -208
- package/dist/domain/managedNativeVerification.js +3 -6
- package/dist/domain/managedNativeVerificationMatch.js +55 -59
- package/dist/domain/managedNativeVerificationSchemas.js +83 -47
- package/dist/domain/managedReconstruction.js +19 -23
- package/dist/domain/managedRuntimeCorrelation.js +6 -9
- package/dist/domain/nativeApiBoundary.js +17 -14
- package/dist/domain/nativeInspection.js +0 -2
- package/dist/domain/nativeInvestigationGraph.js +351 -0
- package/dist/domain/nativeValueFlow.js +61 -0
- package/dist/domain/nodeRuntimeCharacterization.js +15 -18
- package/dist/domain/objcSwiftMetadata.js +254 -0
- package/dist/domain/peInspection.js +1 -1
- package/dist/domain/permissionPolicy.js +13 -0
- package/dist/domain/processCapture.js +76 -113
- package/dist/domain/processCaptureExample.js +68 -0
- package/dist/domain/processCaptureParsing.js +21 -0
- package/dist/domain/processCaptureReactiveSchema.js +68 -0
- package/dist/domain/processCaptureReactiveValidation.js +8 -3
- package/dist/domain/processCaptureValidation.js +8 -10
- package/dist/domain/processComparison.js +12 -16
- package/dist/domain/processObservation.js +5 -6
- package/dist/domain/processReactiveMatching.js +32 -46
- package/dist/domain/processReactiveRuntime.js +4 -8
- package/dist/domain/processReactiveScenario.js +28 -94
- package/dist/domain/processReactiveScenarioPreflight.js +5 -30
- package/dist/domain/processReactiveTransition.js +42 -21
- package/dist/domain/processScenario.js +62 -93
- package/dist/domain/processTraceComparison.js +0 -7
- package/dist/domain/processTraceEvaluation.js +14 -4
- package/dist/domain/processTraceSpecification.js +11 -17
- package/dist/domain/protocolCapture.js +11 -9
- package/dist/domain/reconstructionCoverage.js +62 -129
- package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
- package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
- package/dist/domain/reconstructionReadiness.js +1 -2
- package/dist/domain/reconstructionReadinessSchemas.js +66 -40
- package/dist/domain/reconstructionUnknowns.js +3 -3
- package/dist/domain/reconstructionVerification.js +13 -47
- package/dist/domain/reconstructionVerificationSchemas.js +50 -38
- package/dist/domain/referenceSourceGraph.js +53 -61
- package/dist/domain/referenceSourceImportParsing.js +3 -7
- package/dist/domain/replayMachine.js +19 -31
- package/dist/domain/replayMachineRun.js +15 -63
- package/dist/domain/replayMachineRuntime.js +46 -44
- package/dist/domain/replayMachineValues.js +84 -0
- package/dist/domain/residualUnknown.js +25 -30
- package/dist/domain/runtimeCharacterization.js +15 -16
- package/dist/domain/runtimeIdentification.js +48 -47
- package/dist/domain/sourceToBundleComparison.js +11 -87
- package/dist/domain/sourceToBundleComparisonSchemas.js +25 -50
- package/dist/domain/sourceToBundleSignals.js +11 -16
- package/dist/domain/staticRuntimeCorrelation.js +44 -54
- package/dist/domain/symbolAnalysis.js +10 -19
- package/dist/domain/unicodeCodePointOrder.js +12 -0
- package/dist/domain/webBundleAnalysis.js +70 -99
- package/dist/domain/webBundleAnalyzer.js +2 -4
- package/dist/domain/webBundleAnalyzerAst.js +0 -13
- package/dist/domain/webBundleAnalyzerInspection.js +26 -52
- package/dist/domain/webBundleAnalyzerResult.js +7 -24
- package/dist/domain/webCaptureDiff.js +48 -85
- package/dist/domain/webCaptureDiffSchemas.js +86 -0
- package/dist/domain/webContentArtifact.js +1 -10
- package/dist/domain/webMcpDiscovery.js +3 -14
- package/dist/domain/webScreenshot.js +58 -34
- package/dist/domain/zipPackageFormat.js +7 -0
- package/dist/dotnet/ManagedArtifactInspector.js +17 -50
- package/dist/dotnet/ManagedMemberInspector.js +27 -58
- package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
- package/dist/dotnet/ManagedMemberRows.js +16 -16
- package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
- package/dist/dotnet/ManagedMetadataInventory.js +21 -30
- package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
- package/dist/dotnet/ManagedMetadataLayout.js +3 -5
- package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -42
- package/dist/dotnet/ManagedPeReader.js +2 -2
- package/dist/dotnet/ManagedStaticProvider.js +13 -71
- package/dist/generatedMcpToolCatalog.js +1 -1
- package/dist/generatedPackageMetadata.js +1 -1
- package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
- package/dist/ghidra/GhidraClient.js +5 -13
- package/dist/ghidra/GhidraClientStartup.js +1 -1
- package/dist/ghidra/GhidraClientWire.js +9 -5
- package/dist/ghidra/GhidraDefaults.js +0 -18
- package/dist/ghidra/GhidraDiagnostics.js +0 -2
- package/dist/ghidra/GhidraDoctor.js +16 -12
- package/dist/ghidra/GhidraFunctionValues.js +67 -108
- package/dist/ghidra/GhidraInstallation.js +98 -42
- package/dist/ghidra/GhidraInventoryValues.js +18 -77
- package/dist/ghidra/GhidraLauncher.js +0 -8
- package/dist/ghidra/GhidraProvider.js +32 -31
- package/dist/ghidra/GhidraProviderCapabilities.js +11 -48
- package/dist/ghidra/GhidraRequestQueue.js +6 -30
- package/dist/ghidra/GhidraResponseBuffer.js +1 -7
- package/dist/ghidra/GhidraSessionValues.js +0 -2
- package/dist/ghidra/GhidraSocketConnection.js +1 -1
- package/dist/ghidra/GhidraTransport.js +4 -7
- package/dist/ghidra/protocol.js +19 -42
- package/dist/hopper/BridgeLauncher.js +115 -37
- package/dist/hopper/HopperAnalysisProfile.js +3 -5
- package/dist/hopper/HopperCleanup.js +11 -9
- package/dist/hopper/HopperClient.js +5 -8
- package/dist/hopper/HopperProcessDiagnostic.js +2 -2
- package/dist/hopper/HopperProvider.js +0 -30
- package/dist/hopper/HopperRequestQueue.js +21 -40
- package/dist/hopper/HopperResponseStream.js +1 -9
- package/dist/hopper/HopperSessionValues.js +3 -2
- package/dist/hopper/HopperTargetLease.js +119 -0
- package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
- package/dist/hopper/LinuxPrivateDisplayProbe.js +21 -26
- package/dist/hopper/protocol.js +6 -4
- package/dist/main/reload.js +1 -9
- package/dist/main/shutdown.js +1 -1
- package/dist/main/state.js +0 -23
- package/dist/main/transport.js +27 -39
- package/dist/main.js +17 -15
- package/dist/mcpDoctor.js +27 -69
- package/dist/native/CommandRunner.js +18 -25
- package/dist/native/NativeMacOSProvider.js +13 -38
- package/dist/native/NativeMachoInspection.js +1 -1
- package/dist/process/BoundedFileBytes.js +17 -0
- package/dist/process/ExecFileOutput.js +11 -0
- package/dist/process/PendingOperations.js +8 -6
- package/dist/process/PrivateRuntimeRoot.js +17 -0
- package/dist/process/ProcessOwnership.js +67 -130
- package/dist/process/ProcessOwnershipIdentity.js +13 -0
- package/dist/process/ProcessOwnershipObservation.js +87 -0
- package/dist/process/ProcessOwnershipProcessTree.js +22 -0
- package/dist/process/ProviderDeadline.js +8 -12
- package/dist/process/ProviderProcess.js +7 -28
- package/dist/process/WindowsAuthority.js +32 -0
- package/dist/reference/ReferenceSourceReader.js +8 -24
- package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
- package/dist/reference/ReferenceSourceReaderFile.js +13 -31
- package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
- package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
- package/dist/replay/JavaScriptReplayWorker.js +95 -13
- package/dist/replay/JavaScriptReplayWorkerTypes.js +1 -0
- package/dist/replay/LinuxJavaScriptReplayRunner.js +42 -43
- package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
- package/dist/replay/LinuxRuntimeClosure.js +1 -3
- package/dist/replay/ReplayOutcome.js +27 -18
- package/dist/replay/ReplayProcessLifecycle.js +32 -7
- package/dist/replay/ReplaySeccompFile.js +29 -0
- package/dist/replay/ReplayWorkerProtocol.js +33 -30
- package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
- package/dist/server/ProcessCaptureElicitation.js +4 -8
- package/dist/server/createServer.js +145 -119
- package/dist/server/mcpClientMetadata.js +32 -0
- package/dist/server/promptCompletion.js +37 -61
- package/dist/server/recordDerivedEvidence.js +1 -1
- package/dist/server/registerApplicationTools/characterization.js +10 -21
- package/dist/server/registerApplicationTools/compareExportShapes.js +6 -16
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -15
- package/dist/server/registerApplicationTools/compareVersions.js +6 -16
- package/dist/server/registerApplicationTools/controlledReplay.js +8 -15
- package/dist/server/registerApplicationTools/coverage.js +7 -78
- package/dist/server/registerApplicationTools/helpers.js +1 -13
- package/dist/server/registerApplicationTools/obligationLedger.js +4 -8
- package/dist/server/registerApplicationTools/traceFeature.js +6 -15
- package/dist/server/registerApplicationTools/traceSemantics.js +5 -13
- package/dist/server/registerApplicationTools.js +0 -2
- package/dist/server/registerArtifactComparisonTool.js +27 -35
- package/dist/server/registerBrowserScenarioTool.js +3 -8
- package/dist/server/registerBrowserTools.js +36 -81
- package/dist/server/registerBundleComparisonTool.js +10 -16
- package/dist/server/registerCloseLifecycleTool.js +5 -27
- package/dist/server/registerElectronTools.js +29 -65
- package/dist/server/registerEnhancedTools.js +118 -127
- package/dist/server/registerEvidenceTools.js +19 -30
- package/dist/server/registerFunctionComparisonTool.js +35 -34
- package/dist/server/registerInvestigationTools/helpers.js +3 -32
- package/dist/server/registerInvestigationTools.js +36 -148
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +15 -27
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +16 -23
- package/dist/server/registerManagedWorkflowTools/contract.js +2 -3
- package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -14
- package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +4 -14
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +11 -20
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +10 -21
- package/dist/server/registerOfficialTools.js +8 -51
- package/dist/server/registerProcessComparisonTool.js +43 -38
- package/dist/server/registerPrompts.js +19 -17
- package/dist/server/registerReplayMachineTool.js +4 -10
- package/dist/server/registerSessionRecordTools.js +36 -153
- package/dist/server/registerSessionStatusTool.js +18 -96
- package/dist/server/registerSessionTools.js +34 -91
- package/dist/server/sessionAvailabilityPolicy.js +2 -3
- package/dist/server/sessionEvidence.js +9 -15
- package/dist/server/sessionToolPolicies.js +1 -13
- package/dist/server/toolRegistrationOptions.js +4 -192
- package/dist/server/toolResult.js +15 -67
- package/dist/serverIdentity.js +0 -20
- package/install.sh +1 -1
- package/package.json +27 -15
- package/scripts/electron-active-hook-boundaries.cjs +394 -0
- package/scripts/electron-active-hook.cjs +469 -0
- package/scripts/hopper-demo-x11.py +13 -32
- package/scripts/rea.mjs +1 -11
- package/skills/reverse-engineer-anything/SKILL.md +46 -11
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
- package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -180
- package/dist/application/BoundedJsonFiles.js +0 -86
- package/dist/application/CrossVersionInventory.js +0 -128
- package/dist/application/CrossVersionInvestigation.js +0 -301
- package/dist/application/CrossVersionInvestigationCollections.js +0 -23
- package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
- package/dist/application/CrossVersionInvestigationReplay.js +0 -170
- package/dist/application/DeferredFileAuthorization.js +0 -61
- package/dist/application/DoctorProjection.js +0 -43
- package/dist/application/EnhancedToolPagination.js +0 -22
- package/dist/application/EvidenceReferenceResolver.js +0 -26
- package/dist/application/InvestigationWorkspaceStore.js +0 -204
- package/dist/application/ProcessPairedExperiment.js +0 -72
- package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
- package/dist/application/ReconstructionReadinessService.js +0 -48
- package/dist/cliInvestigationCommands.js +0 -173
- package/dist/domain/boundedCartesianProjection.js +0 -15
- package/dist/domain/investigationWorkspace.js +0 -346
- package/dist/domain/jsonLimits.js +0 -26
- package/dist/domain/knownPageCoverage.js +0 -21
- package/dist/domain/processPairedExperiment.js +0 -128
- package/dist/server/DynamicToolAvailability.js +0 -70
- package/dist/server/LazyToolCatalog.js +0 -134
- package/dist/server/hydrateServerTools.js +0 -191
- package/dist/server/javascriptApplicationResult.js +0 -106
- package/dist/server/permissionFailure.js +0 -12
- package/dist/server/registerApplicationTools/readiness.js +0 -55
- package/dist/server/registerEvidenceResources.js +0 -315
- package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
- package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
- package/dist/server/registerReconstructionReadinessResource.js +0 -32
- package/dist/server/toolInputValidation.js +0 -77
- package/scripts/package-runner-bootstrap.mjs +0 -72
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
|
-
import {
|
|
2
|
+
import { semanticCallableIdForNode, semanticStaticPropertyName, } from "./javascriptSemanticProjection.js";
|
|
3
3
|
import { resolveSemanticBindingState, semanticResolutionBlocked, } from "./javascriptSemanticState.js";
|
|
4
4
|
import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
|
|
5
5
|
/** Resolve a direct or namespace-imported built-in method. */
|
|
@@ -116,10 +116,3 @@ export const containsSemanticNode = (outer, inner) => outer.start !== null &&
|
|
|
116
116
|
inner.end !== undefined &&
|
|
117
117
|
outer.start <= inner.start &&
|
|
118
118
|
outer.end >= inner.end;
|
|
119
|
-
/** Record one bounded data-effect frontier. */
|
|
120
|
-
export const dataEffectLimitReached = (retained, limit, name, state) => {
|
|
121
|
-
if (retained < limit)
|
|
122
|
-
return false;
|
|
123
|
-
reachSemanticLimit(state, name);
|
|
124
|
-
return true;
|
|
125
|
-
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
2
|
import { semanticStaticPropertyName } from "./javascriptSemanticProjection.js";
|
|
3
3
|
import { resolveSemanticBindingState, semanticResolutionBlocked, } from "./javascriptSemanticState.js";
|
|
4
|
-
import { builtinDataEffectMethod as builtinMethod, containsSemanticNode as containsNode, dataEffectArgumentBindingId as argumentBindingId,
|
|
4
|
+
import { builtinDataEffectMethod as builtinMethod, containsSemanticNode as containsNode, dataEffectArgumentBindingId as argumentBindingId, dataEffectLiteralString as literalString, dataEffectMemberCallee as memberCallee, dataEffectMemberObject as memberObject, dataEffectPrimitive as primitiveValue, isSemanticProcessObject as isProcessObject, outerDataEffectBinding as outerAssignedBinding, traverseDataEffects as traverseWithContext, } from "./javascriptSemanticDataEffectHelpers.js";
|
|
5
5
|
import { compareCodePoints, propertyName, range, } from "./javascriptStaticAnalysisHelpers.js";
|
|
6
6
|
/** Recover configuration, request, and boundary candidates from inert syntax. */
|
|
7
7
|
export const collectJavaScriptSemanticDataEffects = (program, state, callables) => {
|
|
@@ -31,8 +31,6 @@ const collectConfigurations = (program, context) => {
|
|
|
31
31
|
const details = configurationDetails(node, parent, context);
|
|
32
32
|
if (details === null)
|
|
33
33
|
return;
|
|
34
|
-
if (limitReached(output.length, context.state.limits.maxConfigurationOperations, "maxConfigurationOperations", context.state))
|
|
35
|
-
return;
|
|
36
34
|
const operation = {
|
|
37
35
|
configId: `config:${details.kind}:${String(node.start ?? -1)}:${String(node.end ?? -1)}`,
|
|
38
36
|
kind: details.kind,
|
|
@@ -94,8 +92,6 @@ const collectDefaults = (program, context, configurations) => {
|
|
|
94
92
|
const sources = configurations.filter(({ node: source }) => containsNode(node.left, source));
|
|
95
93
|
if (sources.length !== 1 || sources[0] === undefined)
|
|
96
94
|
return;
|
|
97
|
-
if (limitReached(configurations.length + output.length, context.state.limits.maxConfigurationOperations, "maxConfigurationOperations", context.state))
|
|
98
|
-
return;
|
|
99
95
|
output.push({
|
|
100
96
|
configId: `config:default:${String(node.start ?? -1)}:${String(node.end ?? -1)}`,
|
|
101
97
|
kind: "default",
|
|
@@ -120,8 +116,6 @@ const collectRequests = (program, context) => {
|
|
|
120
116
|
const method = requestMethod(node, context.state);
|
|
121
117
|
if (method === null)
|
|
122
118
|
return;
|
|
123
|
-
if (limitReached(output.length, context.state.limits.maxRequestOperations, "maxRequestOperations", context.state))
|
|
124
|
-
return;
|
|
125
119
|
const endpoint = requestEndpoint(node);
|
|
126
120
|
output.push({
|
|
127
121
|
node,
|
|
@@ -167,8 +161,6 @@ const collectResponseConsumers = (program, context, requests) => {
|
|
|
167
161
|
: (requestsByBinding.get(binding.bindingId) ?? []);
|
|
168
162
|
if (linked.length === 0)
|
|
169
163
|
return;
|
|
170
|
-
if (limitReached(requests.length + output.length, context.state.limits.maxRequestOperations, "maxRequestOperations", context.state))
|
|
171
|
-
return;
|
|
172
164
|
output.push({
|
|
173
165
|
requestId: `response:${String(node.start ?? -1)}:${String(node.end ?? -1)}`,
|
|
174
166
|
kind: "response-consumer",
|
|
@@ -194,8 +186,6 @@ const collectBoundaries = (program, context) => {
|
|
|
194
186
|
const details = boundaryDetails(node, context.state);
|
|
195
187
|
if (details === null)
|
|
196
188
|
return;
|
|
197
|
-
if (limitReached(output.length, context.state.limits.maxBoundaryOperations, "maxBoundaryOperations", context.state))
|
|
198
|
-
return;
|
|
199
189
|
output.push({
|
|
200
190
|
boundaryId: `boundary:${details.kind}:${String(node.start ?? -1)}:${String(node.end ?? -1)}`,
|
|
201
191
|
kind: details.kind,
|
|
@@ -25,9 +25,7 @@ export const collectJavaScriptSemanticFingerprints = (input) => {
|
|
|
25
25
|
return [
|
|
26
26
|
{
|
|
27
27
|
callableId: callable.callableId,
|
|
28
|
-
status: parserPartial ||
|
|
29
|
-
state.limitsReached.size > 0 ||
|
|
30
|
-
callable.returnCoverage.status !== "complete"
|
|
28
|
+
status: parserPartial || callable.returnCoverage.status !== "complete"
|
|
31
29
|
? "partial"
|
|
32
30
|
: "complete",
|
|
33
31
|
components: {
|
|
@@ -49,8 +47,8 @@ export const collectJavaScriptSemanticFingerprints = (input) => {
|
|
|
49
47
|
],
|
|
50
48
|
},
|
|
51
49
|
limitations: [
|
|
52
|
-
"The fingerprint is a
|
|
53
|
-
...(parserPartial
|
|
50
|
+
"The fingerprint is a static candidate and does not prove behavioral equivalence.",
|
|
51
|
+
...(parserPartial
|
|
54
52
|
? ["Incomplete semantic recovery makes this fingerprint partial."]
|
|
55
53
|
: []),
|
|
56
54
|
],
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { applicationGraphEvidenceSchema } from "./javascriptApplicationEvidenceSchemas.js";
|
|
3
|
-
import { isJsonWithinLimits } from "./jsonLimits.js";
|
|
4
3
|
import { jsonValueSchema } from "./jsonValue.js";
|
|
5
4
|
const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u);
|
|
6
|
-
const boundedTextSchema = z.string().min(1)
|
|
5
|
+
const boundedTextSchema = z.string().min(1);
|
|
7
6
|
const semanticNodeIdSchema = z.string().regex(/^jsrg_node_[a-f0-9]{64}$/u);
|
|
8
7
|
const semanticRelationIdSchema = z
|
|
9
8
|
.string()
|
|
@@ -11,7 +10,7 @@ const semanticRelationIdSchema = z
|
|
|
11
10
|
const semanticUnknownIdSchema = z
|
|
12
11
|
.string()
|
|
13
12
|
.regex(/^jsrg_unknown_[a-f0-9]{64}$/u);
|
|
14
|
-
/** Semantic entity kinds admitted by JavaScript Semantic Relation Graph
|
|
13
|
+
/** Semantic entity kinds admitted by JavaScript Semantic Relation Graph. */
|
|
15
14
|
export const JAVASCRIPT_SEMANTIC_NODE_KINDS = [
|
|
16
15
|
"module",
|
|
17
16
|
"function",
|
|
@@ -53,7 +52,7 @@ export const JAVASCRIPT_SEMANTIC_RELATION_FAMILIES = [
|
|
|
53
52
|
"resource-lifecycle",
|
|
54
53
|
"timer",
|
|
55
54
|
];
|
|
56
|
-
/** Directed semantic relations admitted by graph
|
|
55
|
+
/** Directed semantic relations admitted by the graph. */
|
|
57
56
|
export const JAVASCRIPT_SEMANTIC_RELATIONS = [
|
|
58
57
|
"acquires",
|
|
59
58
|
"aggregates",
|
|
@@ -150,7 +149,6 @@ export const JAVASCRIPT_SEMANTIC_RELATION_FAMILY = {
|
|
|
150
149
|
const relativePathSchema = z
|
|
151
150
|
.string()
|
|
152
151
|
.min(1)
|
|
153
|
-
.max(4_096)
|
|
154
152
|
.refine((path) => !path.startsWith("/") &&
|
|
155
153
|
!path.includes("\\") &&
|
|
156
154
|
path.split("/").every((part) => !["", ".", ".."].includes(part)), "Expected a normalized relative POSIX path without traversal");
|
|
@@ -170,39 +168,20 @@ const sourceRangeSchema = z
|
|
|
170
168
|
message: "Source range end must not precede its start",
|
|
171
169
|
});
|
|
172
170
|
});
|
|
173
|
-
const semanticPropertiesSchema = z
|
|
174
|
-
.record(z.string().min(1).max(128), jsonValueSchema)
|
|
175
|
-
.superRefine((properties, context) => {
|
|
176
|
-
if (Object.keys(properties).length > 64)
|
|
177
|
-
context.addIssue({
|
|
178
|
-
code: "custom",
|
|
179
|
-
message: "Semantic properties exceed 64 keys",
|
|
180
|
-
});
|
|
181
|
-
if (!isJsonWithinLimits(properties, {
|
|
182
|
-
maxDepth: 6,
|
|
183
|
-
maxNodes: 512,
|
|
184
|
-
maxStringLength: 4_096,
|
|
185
|
-
}))
|
|
186
|
-
context.addIssue({
|
|
187
|
-
code: "custom",
|
|
188
|
-
message: "Semantic properties exceed structural limits",
|
|
189
|
-
});
|
|
190
|
-
});
|
|
171
|
+
const semanticPropertiesSchema = z.record(z.string().min(1), jsonValueSchema);
|
|
191
172
|
const semanticNodeIdentitySchema = z.strictObject({
|
|
192
173
|
artifact_sha256: digestSchema,
|
|
193
174
|
module_path: relativePathSchema,
|
|
194
175
|
source_range: sourceRangeSchema.nullable(),
|
|
195
|
-
role_key: z.string().min(1)
|
|
176
|
+
role_key: z.string().min(1),
|
|
196
177
|
});
|
|
197
178
|
/** One semantic entity before its canonical identifier is derived. */
|
|
198
179
|
export const javaScriptSemanticNodeInputSchema = z.strictObject({
|
|
199
180
|
kind: z.enum(JAVASCRIPT_SEMANTIC_NODE_KINDS),
|
|
200
181
|
identity: semanticNodeIdentitySchema,
|
|
201
182
|
function_node_id: semanticNodeIdSchema.nullable(),
|
|
202
|
-
application_node_ids: z
|
|
203
|
-
|
|
204
|
-
.max(64),
|
|
205
|
-
label: z.string().min(1).max(1_024).nullable(),
|
|
183
|
+
application_node_ids: z.array(z.string().regex(/^jag_node_[a-f0-9]{64}$/u)),
|
|
184
|
+
label: z.string().min(1).nullable(),
|
|
206
185
|
properties: semanticPropertiesSchema,
|
|
207
186
|
evidence: applicationGraphEvidenceSchema,
|
|
208
187
|
});
|
|
@@ -246,10 +225,10 @@ export const JAVASCRIPT_SEMANTIC_UNKNOWN_REASONS = [
|
|
|
246
225
|
export const javaScriptSemanticUnknownInputSchema = z.strictObject({
|
|
247
226
|
node_id: semanticNodeIdSchema.nullable(),
|
|
248
227
|
family: z.enum(JAVASCRIPT_SEMANTIC_RELATION_FAMILIES),
|
|
249
|
-
relation_kinds: z.array(z.enum(JAVASCRIPT_SEMANTIC_RELATIONS)).min(1)
|
|
228
|
+
relation_kinds: z.array(z.enum(JAVASCRIPT_SEMANTIC_RELATIONS)).min(1),
|
|
250
229
|
reason: z.enum(JAVASCRIPT_SEMANTIC_UNKNOWN_REASONS),
|
|
251
230
|
detail: boundedTextSchema,
|
|
252
|
-
candidate_node_ids: z.array(semanticNodeIdSchema)
|
|
231
|
+
candidate_node_ids: z.array(semanticNodeIdSchema),
|
|
253
232
|
evidence: applicationGraphEvidenceSchema,
|
|
254
233
|
});
|
|
255
234
|
/** One canonical unresolved semantic frontier. */
|
|
@@ -257,13 +236,12 @@ export const javaScriptSemanticUnknownSchema = javaScriptSemanticUnknownInputSch
|
|
|
257
236
|
unknown_id: semanticUnknownIdSchema,
|
|
258
237
|
});
|
|
259
238
|
const fingerprintComponentsSchema = z.strictObject({
|
|
260
|
-
parameter_arity: z.number().int().min(0)
|
|
239
|
+
parameter_arity: z.number().int().min(0),
|
|
261
240
|
normalized_ast_sha256: digestSchema,
|
|
262
241
|
control_flow_sha256: digestSchema,
|
|
263
242
|
relation_shape_sha256: digestSchema,
|
|
264
243
|
literal_set_sha256: digestSchema,
|
|
265
|
-
effects: z
|
|
266
|
-
.array(z.enum([
|
|
244
|
+
effects: z.array(z.enum([
|
|
267
245
|
"async",
|
|
268
246
|
"child-process",
|
|
269
247
|
"event",
|
|
@@ -271,16 +249,15 @@ const fingerprintComponentsSchema = z.strictObject({
|
|
|
271
249
|
"promise",
|
|
272
250
|
"resource",
|
|
273
251
|
"timer",
|
|
274
|
-
]))
|
|
275
|
-
.max(7),
|
|
252
|
+
])),
|
|
276
253
|
});
|
|
277
254
|
/** One bounded rename-resistant function fingerprint. */
|
|
278
255
|
export const javaScriptSemanticFingerprintInputSchema = z.strictObject({
|
|
279
256
|
function_node_id: semanticNodeIdSchema,
|
|
280
|
-
algorithm: z.literal("rea.javascript-semantic-function
|
|
257
|
+
algorithm: z.literal("rea.javascript-semantic-function"),
|
|
281
258
|
status: z.enum(["complete", "partial", "unavailable"]),
|
|
282
259
|
components: fingerprintComponentsSchema,
|
|
283
|
-
limitations: z.array(boundedTextSchema)
|
|
260
|
+
limitations: z.array(boundedTextSchema),
|
|
284
261
|
evidence: applicationGraphEvidenceSchema,
|
|
285
262
|
});
|
|
286
263
|
/** One canonical function fingerprint record. */
|
|
@@ -293,37 +270,34 @@ const familyCoverageSchema = z.strictObject({
|
|
|
293
270
|
status: z.enum(["complete", "partial", "unknown", "unsupported"]),
|
|
294
271
|
retained_relations: z.number().int().min(0),
|
|
295
272
|
omitted_relations: z.number().int().min(0).nullable(),
|
|
296
|
-
unknown_ids: z.array(semanticUnknownIdSchema)
|
|
273
|
+
unknown_ids: z.array(semanticUnknownIdSchema),
|
|
297
274
|
});
|
|
298
275
|
const graphCoverageSchema = z.strictObject({
|
|
299
276
|
status: z.enum(["complete", "partial", "unknown", "unavailable"]),
|
|
300
277
|
truncated: z.boolean(),
|
|
301
278
|
omitted_nodes: z.number().int().min(0).nullable(),
|
|
302
279
|
omitted_relations: z.number().int().min(0).nullable(),
|
|
303
|
-
limits: z
|
|
304
|
-
.
|
|
305
|
-
name: z.string().min(1).max(128),
|
|
280
|
+
limits: z.array(z.strictObject({
|
|
281
|
+
name: z.string().min(1),
|
|
306
282
|
value: z.number().int().min(0),
|
|
307
283
|
unit: z.enum(["items", "bytes", "milliseconds", "depth", "other"]),
|
|
308
|
-
}))
|
|
309
|
-
.max(32),
|
|
284
|
+
})),
|
|
310
285
|
families: z.array(familyCoverageSchema).length(12),
|
|
311
286
|
});
|
|
312
287
|
/** Graph content before its top-level commitment is derived. */
|
|
313
288
|
export const javaScriptSemanticGraphInputSchema = z.strictObject({
|
|
314
289
|
schema: z.literal("JavaScriptSemanticRelationGraph"),
|
|
315
|
-
schema_version: z.literal(1),
|
|
316
290
|
root_artifact_sha256: digestSchema,
|
|
317
291
|
application_graph_id: z.string().regex(/^jag_[a-f0-9]{64}$/u),
|
|
318
|
-
root_node_ids: z.array(semanticNodeIdSchema).min(1)
|
|
319
|
-
nodes: z.array(javaScriptSemanticNodeSchema).min(1)
|
|
320
|
-
relations: z.array(javaScriptSemanticRelationSchema)
|
|
321
|
-
fingerprints: z.array(javaScriptSemanticFingerprintSchema)
|
|
322
|
-
unknowns: z.array(javaScriptSemanticUnknownSchema)
|
|
292
|
+
root_node_ids: z.array(semanticNodeIdSchema).min(1),
|
|
293
|
+
nodes: z.array(javaScriptSemanticNodeSchema).min(1),
|
|
294
|
+
relations: z.array(javaScriptSemanticRelationSchema),
|
|
295
|
+
fingerprints: z.array(javaScriptSemanticFingerprintSchema),
|
|
296
|
+
unknowns: z.array(javaScriptSemanticUnknownSchema),
|
|
323
297
|
coverage: graphCoverageSchema,
|
|
324
|
-
limitations: z.array(boundedTextSchema)
|
|
298
|
+
limitations: z.array(boundedTextSchema),
|
|
325
299
|
});
|
|
326
|
-
/** Stored JavaScript Semantic Relation Graph
|
|
300
|
+
/** Stored JavaScript Semantic Relation Graph. */
|
|
327
301
|
export const javaScriptSemanticGraphRecordSchema = javaScriptSemanticGraphInputSchema.extend({
|
|
328
302
|
graph_id: z.string().regex(/^jsrg_[a-f0-9]{64}$/u),
|
|
329
303
|
});
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import canonicalize from "canonicalize";
|
|
2
|
-
import { z } from "zod";
|
|
3
2
|
import { javaScriptSemanticGraphSchema, } from "./javascriptSemanticGraph.js";
|
|
4
3
|
const canonicalJson = (value) => {
|
|
5
4
|
const encoded = canonicalize(value);
|
|
@@ -7,17 +6,7 @@ const canonicalJson = (value) => {
|
|
|
7
6
|
throw new TypeError("JavaScript semantic graph could not canonicalize data");
|
|
8
7
|
return encoded;
|
|
9
8
|
};
|
|
10
|
-
/** Parse a stored semantic graph and reject
|
|
11
|
-
export const parseJavaScriptSemanticGraph = (input) =>
|
|
12
|
-
const envelope = z
|
|
13
|
-
.object({ schema: z.string(), schema_version: z.number() })
|
|
14
|
-
.passthrough()
|
|
15
|
-
.safeParse(input);
|
|
16
|
-
if (envelope.success &&
|
|
17
|
-
envelope.data.schema === "JavaScriptSemanticRelationGraph" &&
|
|
18
|
-
envelope.data.schema_version !== 1)
|
|
19
|
-
throw new TypeError(`Unsupported JavaScript Semantic Relation Graph schema version: ${String(envelope.data.schema_version)}`);
|
|
20
|
-
return javaScriptSemanticGraphSchema.parse(input);
|
|
21
|
-
};
|
|
9
|
+
/** Parse a stored semantic graph and reject stale IDs. */
|
|
10
|
+
export const parseJavaScriptSemanticGraph = (input) => javaScriptSemanticGraphSchema.parse(input);
|
|
22
11
|
/** Serialize a verified semantic graph as canonical JSON. */
|
|
23
12
|
export const serializeJavaScriptSemanticGraph = (input) => canonicalJson(parseJavaScriptSemanticGraph(input));
|
|
@@ -1,30 +1,3 @@
|
|
|
1
|
-
/** Conservative defaults for one source file. */
|
|
2
|
-
export const DEFAULT_JAVASCRIPT_SEMANTIC_LIMITS = {
|
|
3
|
-
maxScopes: 4_096,
|
|
4
|
-
maxBindings: 20_000,
|
|
5
|
-
maxCallables: 20_000,
|
|
6
|
-
maxReferences: 100_000,
|
|
7
|
-
maxModuleLinks: 20_000,
|
|
8
|
-
maxReturnSites: 20_000,
|
|
9
|
-
maxCallSites: 20_000,
|
|
10
|
-
maxCallArguments: 100_000,
|
|
11
|
-
maxArgumentFlows: 100_000,
|
|
12
|
-
maxCallReturnFlows: 100_000,
|
|
13
|
-
maxClosureCaptures: 100_000,
|
|
14
|
-
maxPromiseOperations: 100_000,
|
|
15
|
-
maxEventOperations: 100_000,
|
|
16
|
-
maxTimerOperations: 100_000,
|
|
17
|
-
maxChildProcessOperations: 100_000,
|
|
18
|
-
maxConfigurationOperations: 100_000,
|
|
19
|
-
maxRequestOperations: 100_000,
|
|
20
|
-
maxBoundaryOperations: 100_000,
|
|
21
|
-
maxResourceOperations: 100_000,
|
|
22
|
-
maxObjectOperations: 100_000,
|
|
23
|
-
maxFrontiers: 20_000,
|
|
24
|
-
maxValueDepth: 16,
|
|
25
|
-
maxUnionValues: 32,
|
|
26
|
-
maxObjectProperties: 256,
|
|
27
|
-
};
|
|
28
1
|
/** Find the innermost resolved reference at one source coordinate. */
|
|
29
2
|
export const semanticReferenceAt = (ir, line, column) => ir.references.find(({ location }) => location.start.line === line && location.start.column === column);
|
|
30
3
|
/** Read one binding by its deterministic semantic identifier. */
|
|
@@ -32,7 +5,6 @@ export const semanticBinding = (ir, bindingId) => ir.bindings.find(({ bindingId:
|
|
|
32
5
|
/** Fail-closed result when Babel cannot produce an inert syntax tree. */
|
|
33
6
|
export const failedJavaScriptSemanticIr = () => ({
|
|
34
7
|
schema: "JavaScriptSemanticIR",
|
|
35
|
-
schemaVersion: 4,
|
|
36
8
|
scopes: [],
|
|
37
9
|
bindings: [],
|
|
38
10
|
callables: [],
|
|
@@ -55,7 +27,7 @@ export const failedJavaScriptSemanticIr = () => ({
|
|
|
55
27
|
objectOperations: [],
|
|
56
28
|
functionFingerprints: [],
|
|
57
29
|
frontiers: [],
|
|
58
|
-
coverage: { status: "failed", omittedCount: null
|
|
30
|
+
coverage: { status: "failed", omittedCount: null },
|
|
59
31
|
limitations: [
|
|
60
32
|
"JavaScript parsing failed; no semantic absence claim is available.",
|
|
61
33
|
"No JavaScript was executed.",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
|
-
import {
|
|
2
|
+
import { semanticCallableIdForNode, semanticStaticPropertyName, } from "./javascriptSemanticProjection.js";
|
|
3
3
|
import { resolveSemanticBindingState, } from "./javascriptSemanticState.js";
|
|
4
4
|
import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
|
|
5
5
|
import { propertyName, range } from "./javascriptStaticAnalysisHelpers.js";
|
|
@@ -80,10 +80,6 @@ const collectDestructuring = (node, ownerCallableId, state, output) => {
|
|
|
80
80
|
}
|
|
81
81
|
};
|
|
82
82
|
const addObjectOperation = (input, state, output) => {
|
|
83
|
-
if (output.length >= state.limits.maxObjectOperations) {
|
|
84
|
-
reachSemanticLimit(state, "maxObjectOperations");
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
83
|
output.push({
|
|
88
84
|
objectOperationId: `object:${input.kind}:${String(input.node.start ?? -1)}:${String(input.node.end ?? -1)}`,
|
|
89
85
|
kind: input.kind,
|
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
|
-
import {
|
|
2
|
+
import { semanticPrimitiveKey } from "./javascriptSemanticProvenance.js";
|
|
3
3
|
import { compareCodePoints } from "./javascriptStaticAnalysisHelpers.js";
|
|
4
4
|
/** Normalize one bounded collection of possible primitive values. */
|
|
5
|
-
export const semanticPrimitiveSet = (values
|
|
5
|
+
export const semanticPrimitiveSet = (values) => {
|
|
6
6
|
const unique = [
|
|
7
7
|
...new Map(values.map((value) => [semanticPrimitiveKey(value), value])).values(),
|
|
8
8
|
].sort((left, right) => compareCodePoints(semanticPrimitiveKey(left), semanticPrimitiveKey(right)));
|
|
9
|
-
if (unique.length > state.limits.maxUnionValues) {
|
|
10
|
-
reachSemanticValueLimit(state, "maxUnionValues");
|
|
11
|
-
return {
|
|
12
|
-
status: "limit-reached",
|
|
13
|
-
reason: "maxUnionValues reached.",
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
9
|
const only = unique[0];
|
|
17
10
|
return unique.length === 1 && only !== undefined
|
|
18
11
|
? { status: "literal", value: only }
|
|
@@ -9,10 +9,6 @@ export const collectSemanticCallable = (input) => {
|
|
|
9
9
|
const kind = callableKind(node);
|
|
10
10
|
if (kind === undefined)
|
|
11
11
|
return;
|
|
12
|
-
if (state.callables.length >= state.limits.maxCallables) {
|
|
13
|
-
reachSemanticLimit(state, "maxCallables");
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
12
|
const callableId = semanticCallableIdForNode(node) ?? "callable:unknown:-1:-1";
|
|
17
13
|
state.callables.push({
|
|
18
14
|
callableId,
|
|
@@ -28,7 +24,6 @@ export const collectSemanticCallable = (input) => {
|
|
|
28
24
|
status: "partial",
|
|
29
25
|
retainedCount: 0,
|
|
30
26
|
omittedCount: null,
|
|
31
|
-
limitsReached: [],
|
|
32
27
|
},
|
|
33
28
|
});
|
|
34
29
|
state.callableNodesById.set(callableId, node);
|
|
@@ -78,10 +73,6 @@ export const collectSemanticReferences = (program, state) => {
|
|
|
78
73
|
if (seen.has(key))
|
|
79
74
|
return;
|
|
80
75
|
seen.add(key);
|
|
81
|
-
if (output.length >= state.limits.maxReferences) {
|
|
82
|
-
reachSemanticLimit(state, "maxReferences");
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
76
|
const binding = resolveSemanticBindingState(state, node, node.name);
|
|
86
77
|
const blocked = binding === undefined &&
|
|
87
78
|
semanticResolutionBlocked(state, node, node.name);
|
|
@@ -146,11 +137,6 @@ export const semanticModuleOrigin = (node, projection) => {
|
|
|
146
137
|
export const semanticStaticPropertyName = (property, computed) => computed && !t.isStringLiteral(property) && !t.isNumericLiteral(property)
|
|
147
138
|
? ""
|
|
148
139
|
: propertyName(property);
|
|
149
|
-
/** Record one exact limit hit without inventing the total omitted population. */
|
|
150
|
-
export const reachSemanticLimit = (state, limit) => {
|
|
151
|
-
state.limitsReached.add(limit);
|
|
152
|
-
state.omittedCount += 1;
|
|
153
|
-
};
|
|
154
140
|
const callableKind = (node) => {
|
|
155
141
|
if (t.isClassMethod(node) ||
|
|
156
142
|
t.isClassPrivateMethod(node) ||
|
|
@@ -281,10 +267,6 @@ const collectCommonJsExport = (node, state) => {
|
|
|
281
267
|
});
|
|
282
268
|
};
|
|
283
269
|
const addModuleLink = (state, link) => {
|
|
284
|
-
if (state.moduleLinks.length >= state.limits.maxModuleLinks) {
|
|
285
|
-
reachSemanticLimit(state, "maxModuleLinks");
|
|
286
|
-
return;
|
|
287
|
-
}
|
|
288
270
|
state.moduleLinks.push({ ...link, callableId: link.callableId ?? null });
|
|
289
271
|
};
|
|
290
272
|
/** Deterministic callable identity shared by collection and return recovery. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
|
-
import {
|
|
2
|
+
import { semanticCallableIdForNode, semanticStaticPropertyName, } from "./javascriptSemanticProjection.js";
|
|
3
3
|
import { resolveSemanticBindingState, semanticResolutionBlocked, } from "./javascriptSemanticState.js";
|
|
4
4
|
import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
|
|
5
5
|
import { compareCodePoints, range, sourceRangesEqual, } from "./javascriptStaticAnalysisHelpers.js";
|
|
@@ -36,16 +36,13 @@ const collectCandidates = (program, state, callables) => {
|
|
|
36
36
|
callableStack.push(callableId);
|
|
37
37
|
const details = promiseCandidateDetails(node, state);
|
|
38
38
|
if (details !== null) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
ownerCallableId: callableStack.at(-1) ?? null,
|
|
47
|
-
ancestors: [...ancestors],
|
|
48
|
-
});
|
|
39
|
+
output.push({
|
|
40
|
+
node,
|
|
41
|
+
...details,
|
|
42
|
+
promiseId: semanticPromiseId(details.kind, node),
|
|
43
|
+
ownerCallableId: callableStack.at(-1) ?? null,
|
|
44
|
+
ancestors: [...ancestors],
|
|
45
|
+
});
|
|
49
46
|
}
|
|
50
47
|
ancestors.push(node);
|
|
51
48
|
},
|
|
@@ -224,9 +221,7 @@ const aggregateSources = (candidate, candidateByNode, state) => {
|
|
|
224
221
|
return combinePromiseResolutions(resolutions);
|
|
225
222
|
};
|
|
226
223
|
const resolvePromiseExpression = (rawNode, context) => {
|
|
227
|
-
const { current, candidateByNode, state, seenBindings
|
|
228
|
-
if (depth >= state.limits.maxValueDepth)
|
|
229
|
-
return unresolvedPromise();
|
|
224
|
+
const { current, candidateByNode, state, seenBindings } = context;
|
|
230
225
|
const node = unwrapExpression(rawNode);
|
|
231
226
|
const direct = candidateByNode.get(node);
|
|
232
227
|
if (direct !== undefined && direct.promiseId !== current.promiseId)
|
|
@@ -247,7 +242,6 @@ const resolvePromiseExpression = (rawNode, context) => {
|
|
|
247
242
|
return resolvePromiseExpression(initializer.node, {
|
|
248
243
|
...context,
|
|
249
244
|
seenBindings: nestedSeen,
|
|
250
|
-
depth: depth + 1,
|
|
251
245
|
});
|
|
252
246
|
};
|
|
253
247
|
const promiseResolutionContext = (current, candidateByNode, state) => ({
|
|
@@ -255,7 +249,6 @@ const promiseResolutionContext = (current, candidateByNode, state) => ({
|
|
|
255
249
|
candidateByNode,
|
|
256
250
|
state,
|
|
257
251
|
seenBindings: new Set(),
|
|
258
|
-
depth: 0,
|
|
259
252
|
});
|
|
260
253
|
const unwrapExpression = (node) => {
|
|
261
254
|
if (t.isParenthesizedExpression(node) ||
|
|
@@ -1,29 +1,26 @@
|
|
|
1
1
|
import { compareCodePoints } from "./javascriptStaticAnalysisHelpers.js";
|
|
2
|
-
/** Construct
|
|
3
|
-
export const
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
/** Construct exact local provenance without inventing module origins. */
|
|
3
|
+
export const semanticLocalProvenance = () => ({
|
|
4
|
+
status: "local",
|
|
5
|
+
origins: [],
|
|
6
|
+
reason: null,
|
|
7
|
+
});
|
|
8
|
+
/** Construct an unresolved provenance outcome with an actionable reason. */
|
|
9
|
+
export const semanticUnresolvedProvenance = (status, reason) => ({ status, origins: [], reason });
|
|
10
|
+
/** Construct ambiguous provenance while retaining every origin. */
|
|
11
|
+
export const semanticAmbiguousProvenance = (origins, reason) => ({ status: "ambiguous", origins, reason });
|
|
12
|
+
/** Normalize exact module origins into one provenance classification. */
|
|
13
|
+
export const semanticOriginsProvenance = (origins) => {
|
|
6
14
|
const unique = uniqueSemanticOrigins(origins);
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
: semanticProvenance("ambiguous", unique, "Multiple module origins.");
|
|
15
|
+
const origin = unique[0];
|
|
16
|
+
return unique.length === 1 && origin !== undefined
|
|
17
|
+
? { status: "module", origins: [origin], reason: null }
|
|
18
|
+
: semanticAmbiguousProvenance(unique, "Multiple module origins.");
|
|
12
19
|
};
|
|
13
20
|
/** Deduplicate and canonically order module origins. */
|
|
14
21
|
export const uniqueSemanticOrigins = (origins) => [
|
|
15
22
|
...new Map(origins.map((origin) => [semanticOriginKey(origin), origin])).values(),
|
|
16
23
|
].sort((left, right) => compareCodePoints(semanticOriginKey(left), semanticOriginKey(right)));
|
|
17
|
-
/** Mark and return an explicit provenance-limit value. */
|
|
18
|
-
export const semanticLimitProvenance = (state, limit) => {
|
|
19
|
-
reachSemanticValueLimit(state, limit);
|
|
20
|
-
return semanticProvenance("limit-reached", [], `${limit} reached.`);
|
|
21
|
-
};
|
|
22
|
-
/** Record one value-lattice limit against the shared semantic analysis state. */
|
|
23
|
-
export const reachSemanticValueLimit = (state, limit) => {
|
|
24
|
-
state.limitsReached.add(limit);
|
|
25
|
-
state.omittedCount += 1;
|
|
26
|
-
};
|
|
27
24
|
const semanticOriginKey = (origin) => `${origin.specifier}\0${origin.importedPath.join("\0")}`;
|
|
28
25
|
/** Canonically distinguish primitive values across type boundaries. */
|
|
29
26
|
export const semanticPrimitiveKey = (value) => `${value === null ? "null" : typeof value}:${JSON.stringify(value)}`;
|