rea-agents 6.1.0 → 6.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 +7 -5
- package/bridge/ghidra/ReaGhidraBridge.java +32 -4
- package/bridge/hopper_bridge.py +6 -1
- package/dist/android/JadxConfiguration.js +87 -7
- package/dist/android/JadxMcpTransport.js +14 -2
- package/dist/android/JadxProvider.js +57 -35
- package/dist/application/BinaryTargetResolver.js +5 -3
- package/dist/application/BrowserEvidence.js +3 -8
- package/dist/application/BrowserScenarioEvidence.js +2 -18
- package/dist/application/CapabilityInventory.js +43 -9
- package/dist/application/ClientConfigurationDocument.js +69 -25
- package/dist/application/DirectAnalysis.js +29 -14
- package/dist/application/DirectAnalysisCleanup.js +72 -0
- package/dist/application/DirectAnalysisStatus.js +4 -5
- package/dist/application/Doctor.js +15 -19
- package/dist/application/DoctorDiagnostics.js +1 -2
- package/dist/application/EnhancedTools.js +51 -6
- package/dist/application/EvidenceBundleFiles.js +8 -3
- package/dist/application/InvestigationProviders.js +9 -1
- package/dist/application/JsonFiles.js +42 -9
- package/dist/application/LinuxHopper.js +9 -6
- package/dist/application/MacHopper.js +15 -18
- package/dist/application/RealHopperAssertions.js +0 -11
- package/dist/application/ReconstructionObligationCandidates.js +1 -1
- package/dist/application/ReferenceSourceImportEntries.js +1 -1
- package/dist/application/Setup.js +8 -16
- package/dist/application/SetupHost.js +16 -27
- package/dist/application/SetupPlan.js +6 -6
- package/dist/application/Uninstall.js +81 -29
- package/dist/application/UpdateMaintenance.js +7 -5
- package/dist/application/UpdateRuntime.js +12 -12
- package/dist/application/WebScriptExportService.js +30 -4
- 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/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 +10 -8
- package/dist/application/binary/BinarySession.js +70 -29
- package/dist/application/binary/BinarySessionComposition.js +1 -3
- package/dist/application/binary/BinarySessionExecution.js +3 -5
- package/dist/application/binary/BinarySessionOpen.js +1 -1
- 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 +9 -13
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +2 -6
- package/dist/application/javascript/JavaScriptApplicationService.js +6 -1
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +5 -3
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +11 -9
- 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 +12 -3
- package/dist/application/javascript/JavaScriptArtifactGraphStructure.js +0 -1
- package/dist/application/javascript/JavaScriptArtifactPathResolution.js +43 -16
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +46 -6
- package/dist/application/javascript/JavaScriptModuleRelationships.js +1 -1
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +3 -3
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphChildProcessProjection.js +1 -2
- package/dist/application/javascript/JavaScriptSemanticGraphDataProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphFlowProjection.js +1 -5
- package/dist/application/javascript/JavaScriptSemanticGraphObjectProjection.js +75 -46
- package/dist/application/javascript/JavaScriptSemanticGraphResourceProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphValueProjection.js +42 -19
- package/dist/application/managed/ManagedMemberComparisonService.js +2 -1
- package/dist/application/managed/ManagedNativeVerificationService.js +2 -1
- package/dist/application/process/ProcessCli.js +11 -11
- package/dist/application/process/ProcessEvidence.js +0 -1
- package/dist/artifacts/ArtifactProvider.js +39 -14
- package/dist/artifacts/ArtifactReader.js +31 -0
- package/dist/artifacts/DirectoryArtifactReader.js +2 -1
- package/dist/artifacts/MachOSliceArtifactReader.js +9 -2
- package/dist/artifacts/NativeDmgArtifactReader.js +65 -20
- 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 +21 -3
- package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +67 -61
- package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
- package/dist/artifacts/inventory/reader.js +3 -3
- package/dist/artifacts/inventory/scanCanonical.js +48 -24
- package/dist/artifacts/inventory/scanReader.js +5 -9
- package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
- package/dist/browser/CdpBrowserProvider.js +2 -3
- package/dist/browser/CdpCaptureEventHandlers.js +2 -4
- package/dist/browser/CdpCaptureEvents.js +0 -1
- package/dist/browser/CdpCaptureValues.js +20 -0
- package/dist/browser/CdpElectronProvider.js +0 -2
- package/dist/browser/CdpElectronScriptEvents.js +2 -8
- package/dist/browser/CdpElectronScripts.js +2 -3
- package/dist/browser/CdpPageCaptureScripts.js +2 -3
- package/dist/browser/CdpSafeMetadata.js +10 -10
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +59 -44
- 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 +139 -39
- package/dist/browser/PlaywrightScenarioEvents.js +1 -1
- package/dist/browser/PlaywrightScenarioSession.js +39 -22
- 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 +32 -27
- package/dist/cli/coreNativeCommands.js +9 -10
- package/dist/cli/electronCommands.js +4 -4
- package/dist/cli/interactiveSetup.js +6 -6
- 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/utilityCommands.js +9 -9
- package/dist/cli.js +16 -8
- package/dist/cliBrowserScenarioCommands.js +2 -2
- package/dist/cliCommandNames.js +1 -0
- package/dist/cliJsonInput.js +15 -1
- package/dist/cliOutput.js +0 -38
- package/dist/composition/auxiliaryAnalysisProviders.js +27 -23
- package/dist/composition/binary.js +9 -9
- package/dist/composition/browserScenario.js +2 -1
- package/dist/composition/directAnalysis.js +20 -13
- 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 +2 -2
- 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/evm/evmToolContracts.js +1 -1
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/inputSchemaPresentation.js +90 -0
- package/dist/contracts/investigationExamples.js +4 -3
- package/dist/contracts/javascript/electronToolContracts.js +1 -1
- package/dist/contracts/javascript/javascriptApplicationWorkflowExamples.js +0 -20
- package/dist/contracts/javascript/javascriptExportShapeComparisonExample.js +245 -0
- package/dist/contracts/javascript/javascriptRuntimeObservationToolContracts.js +1 -1
- package/dist/contracts/managed/managedToolContracts.js +5 -10
- package/dist/contracts/managed/managedWorkflowToolContracts.js +1 -1
- package/dist/contracts/mobileApplicationGraphExamples.js +3 -3
- 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/sessionToolContracts.js +14 -2
- package/dist/contracts/sessionToolSchemas.js +1 -14
- package/dist/contracts/toolContracts.js +2 -0
- package/dist/contracts/toolEffects.js +1 -0
- package/dist/contracts/toolOutputSchemaGroups.js +136 -92
- package/dist/contracts/toolOutputSchemaPrimitives.js +11 -21
- 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/analysisErrorCore.js +3 -0
- package/dist/domain/analysisErrorPresentation.js +18 -3
- package/dist/domain/analysisErrorProjection.js +24 -5
- package/dist/domain/analysisSnapshot.js +29 -31
- package/dist/domain/analysisView/analysisView.js +243 -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/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 +16 -3
- 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/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/browserScenarioDiff.js +0 -2
- package/dist/domain/browserScenarioDiffEvidence.js +0 -12
- package/dist/domain/browserScenarioDiffValues.js +2 -2
- package/dist/domain/browserScenarioValues.js +3 -4
- package/dist/domain/callPath.js +8 -9
- package/dist/domain/callPathSchemas.js +2 -2
- package/dist/domain/changedBehavior.js +3 -3
- package/dist/domain/completionLedgerGeneration.js +2 -1
- package/dist/domain/configurationErrors.js +12 -0
- package/dist/domain/conformancePackage.js +4 -3
- package/dist/domain/evidence.js +10 -36
- package/dist/domain/evidenceBundle.js +7 -9
- package/dist/domain/evidenceCompletionLedger.js +2 -1
- package/dist/domain/functionComparison.js +4 -5
- package/dist/domain/functionComparisonDimensions.js +120 -87
- package/dist/domain/functionComparisonNormalization.js +23 -34
- package/dist/domain/functionComparisonResults.js +1 -4
- package/dist/domain/functionComparisonSchemas.js +2 -8
- package/dist/domain/functionDossierEvidence.js +2 -37
- package/dist/domain/javascript/electronActiveObservation.js +26 -69
- package/dist/domain/javascript/electronObservation.js +14 -3
- package/dist/domain/javascript/electronStaticAnalysisBrowser.js +10 -9
- package/dist/domain/javascript/electronStaticAnalysisIpc.js +2 -1
- package/dist/domain/javascript/electronStaticAnalysisNative.js +2 -1
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +26 -3
- package/dist/domain/javascript/javascriptApplicationGraphSchemas.js +9 -2
- package/dist/domain/javascript/javascriptApplicationVersionItems.js +5 -2
- package/dist/domain/javascript/javascriptApplicationVersionKeys.js +2 -1
- package/dist/{application/javascript/JavaScriptReturnShapeProjection.js → domain/javascript/javascriptExportReturnShapeProjection.js} +4 -4
- package/dist/domain/javascript/javascriptExportShapeComparison.js +7 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonIdentity.js +6 -1
- package/dist/domain/javascript/javascriptExportShapeComparisonSchemas.js +29 -1
- package/dist/domain/javascript/javascriptExportShapeSelection.js +5 -5
- package/dist/domain/javascript/javascriptExportShapeVariants.js +67 -14
- package/dist/domain/javascript/javascriptFeatureSeed.js +20 -0
- package/dist/domain/javascript/javascriptFeatureTraversal.js +0 -1
- package/dist/domain/javascript/javascriptNativeHandoff.js +1 -1
- package/dist/domain/javascript/javascriptRuntimeLoadState.js +0 -1
- package/dist/domain/javascript/javascriptRuntimeObservation.js +10 -2
- package/dist/domain/javascript/javascriptRuntimeReconciliationMatching.js +1 -1
- package/dist/domain/javascript/javascriptRuntimeReconciliationParsing.js +3 -2
- package/dist/domain/javascript/javascriptRuntimeStaticCandidates.js +0 -1
- package/dist/domain/javascript/javascriptSemanticAnalysis.js +9 -3
- package/dist/domain/javascript/javascriptSemanticAsyncEffects.js +2 -1
- package/dist/domain/javascript/javascriptSemanticCalls.js +2 -1
- package/dist/domain/javascript/javascriptSemanticChildProcesses.js +2 -1
- package/dist/domain/javascript/javascriptSemanticDataEffects.js +1 -1
- package/dist/domain/javascript/javascriptSemanticGraph.js +88 -46
- package/dist/domain/javascript/javascriptSemanticMemberMutations.js +77 -20
- package/dist/domain/javascript/javascriptSemanticMutationValues.js +21 -27
- package/dist/domain/javascript/javascriptSemanticObjects.js +83 -42
- package/dist/domain/javascript/javascriptSemanticPrimitives.js +1 -12
- package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
- package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
- package/dist/domain/javascript/javascriptSemanticResourceLimits.js +1 -1
- package/dist/domain/javascript/javascriptSemanticResources.js +1 -1
- package/dist/domain/javascript/javascriptSemanticReturns.js +32 -17
- package/dist/domain/javascript/javascriptSemanticSlots.js +72 -0
- package/dist/domain/javascript/javascriptSemanticValues.js +47 -54
- package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +2 -1
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +0 -1
- package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
- package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
- package/dist/domain/localPath.js +1 -1
- package/dist/domain/managed/managedArtifact.js +6 -4
- package/dist/domain/managed/managedMemberComparison.js +2 -9
- 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 +5 -3
- package/dist/domain/native/nativeInstruction.js +7 -0
- package/dist/domain/native/recordedCrash.js +2 -3
- package/dist/domain/offsetDateTime.js +17 -0
- package/dist/domain/process/processCapture.js +13 -12
- package/dist/domain/process/processCaptureCoverage.js +67 -0
- package/dist/domain/process/processCaptureExample.js +2 -1
- package/dist/domain/process/processCaptureParsing.js +1 -34
- package/dist/domain/process/processCaptureValidation.js +81 -13
- package/dist/domain/process/processComparison.js +41 -22
- 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 +15 -11
- package/dist/domain/process/processTraceSpecification.js +3 -4
- package/dist/domain/providerAdapterError.js +2 -0
- package/dist/domain/reconstructionCoverage.js +5 -2
- package/dist/domain/reconstructionObligationLedgerSchemas.js +2 -1
- package/dist/domain/reconstructionReadinessSchemas.js +2 -1
- package/dist/domain/reconstructionVerification.js +3 -3
- package/dist/domain/reconstructionVerificationSchemas.js +2 -1
- package/dist/domain/referenceSourceGraph.js +20 -21
- package/dist/domain/staticRuntimeCorrelation.js +2 -2
- package/dist/domain/stringPatterns.js +6 -0
- package/dist/domain/swiftSymbolClassification.js +61 -0
- package/dist/domain/symbolAnalysis.js +66 -18
- package/dist/domain/webCaptureDiff.js +0 -1
- package/dist/domain/webCaptureDiffSchemas.js +6 -3
- package/dist/domain/webEventListeners.js +3 -2
- package/dist/domain/webExecution.js +3 -2
- package/dist/domain/webRuntime.js +0 -2
- package/dist/domain/webScriptExport.js +1 -1
- package/dist/dotnet/ManagedArtifactInspector.js +2 -19
- package/dist/dotnet/ManagedMemberInspector.js +12 -18
- package/dist/dotnet/ManagedMemberInspectorCore.js +47 -44
- 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 +3 -5
- 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/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 +91 -32
- 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 +40 -12
- package/dist/ghidra/GhidraJavaLaunch.js +6 -2
- package/dist/ghidra/GhidraLauncher.js +15 -7
- 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 +3 -3
- package/dist/ida/IdaProvider.js +8 -12
- package/dist/ida/IdaSessionClient.js +20 -18
- package/dist/ida/IdaWorkspace.js +12 -13
- package/dist/inspector/V8InspectorCaptureProjection.js +1 -1
- package/dist/inspector/V8InspectorProvider.js +38 -28
- package/dist/javascript/recovery/WakaruCommand.js +7 -2
- package/dist/javascript/recovery/WakaruExecution.js +5 -2
- package/dist/main/shutdown.js +11 -3
- package/dist/main/startup.js +9 -2
- package/dist/main/transport.js +22 -2
- package/dist/main.js +11 -18
- package/dist/native/AppleMachoSelection.js +16 -6
- package/dist/native/CommandRunner.js +9 -7
- package/dist/native/LldbCallTracer.js +8 -2
- package/dist/native/NativeMacOSProvider.js +25 -15
- 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 +11 -5
- package/dist/process/ProviderProcess.js +1 -3
- package/dist/process/capture/FilesystemSnapshot.js +50 -13
- package/dist/process/capture/ProcessCaptureError.js +13 -0
- package/dist/process/capture/ProcessCaptureLifecycle.js +158 -70
- package/dist/process/capture/ProcessFilesystemEffects.js +33 -3
- package/dist/process/capture/ProcessHarness.js +21 -25
- 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/createServer.js +49 -36
- 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 +4 -5
- 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 +1 -2
- 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/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 +2 -3
- package/dist/server/registerElectronTools.js +10 -13
- package/dist/server/registerEnhancedTools.js +23 -23
- package/dist/server/registerEvidenceTools.js +3 -4
- 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/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 +4 -19
- 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 +12 -18
- 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 +39 -30
- package/scripts/rea.mjs +3 -6
- package/skills/reverse-engineer-anything/SKILL.md +9 -8
- 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 +9 -0
- 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/main/reload.js +0 -12
- package/dist/main/state.js +0 -3
- package/dist/server/sessionToolPolicies.js +0 -2
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { canonicalExportShapeValue, digestExportShapeValue, } from "./javascriptExportShapeComparisonIdentity.js";
|
|
2
2
|
import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js";
|
|
3
|
+
const UNKNOWN_COVERAGE_PRESENCE = {
|
|
4
|
+
left: "unknown-coverage",
|
|
5
|
+
right: "unknown-coverage",
|
|
6
|
+
};
|
|
3
7
|
/** Pair variants only through reciprocal unique exact literal discriminants. */
|
|
4
8
|
export const pairJavaScriptExportShapeVariants = (left, right) => {
|
|
5
9
|
const leftKeys = discriminantOccurrences(left);
|
|
@@ -61,12 +65,41 @@ export const buildJavaScriptExportShapeChanges = (input) => {
|
|
|
61
65
|
});
|
|
62
66
|
return [...paired, ...unpairedLeft, ...unpairedRight];
|
|
63
67
|
};
|
|
68
|
+
/** List observed property names per retained variant, including unknown values. */
|
|
69
|
+
export const buildJavaScriptExportShapeInventories = (input) => {
|
|
70
|
+
const leftPairs = new Map(input.pairing.pairs.map((pair) => [pair.leftIndex, pair]));
|
|
71
|
+
const rightPairs = new Map(input.pairing.pairs.map((pair) => [pair.rightIndex, pair]));
|
|
72
|
+
return [
|
|
73
|
+
...input.leftShapes.map((shape, index) => inventoryFor("left", index, shape, leftPairs.get(index))),
|
|
74
|
+
...input.rightShapes.map((shape, index) => inventoryFor("right", index, shape, rightPairs.get(index))),
|
|
75
|
+
];
|
|
76
|
+
};
|
|
77
|
+
const inventoryFor = (side, variantIndex, shape, pair) => ({
|
|
78
|
+
side,
|
|
79
|
+
variant_index: variantIndex,
|
|
80
|
+
discriminant: pair?.discriminant ?? null,
|
|
81
|
+
paired: pair !== undefined,
|
|
82
|
+
source_range: shape.source_range,
|
|
83
|
+
properties: uniqueSorted([
|
|
84
|
+
...shape.fields
|
|
85
|
+
.filter((field) => fieldPresence(shape, field, field.path) === "present")
|
|
86
|
+
.map(({ path }) => path),
|
|
87
|
+
...shape.property_coverage.map(({ path }) => path),
|
|
88
|
+
]).filter((path) => path !== ""),
|
|
89
|
+
property_coverage: shape.property_coverage.map(({ path, status }) => ({
|
|
90
|
+
path,
|
|
91
|
+
status,
|
|
92
|
+
})),
|
|
93
|
+
});
|
|
64
94
|
/** Report whether any retained shape lacks complete property coverage. */
|
|
65
|
-
export const hasPartialJavaScriptExportPropertyCoverage = (shapes) => shapes.some((shape) => shape.property_coverage.some(({ status }) => status === "partial")
|
|
95
|
+
export const hasPartialJavaScriptExportPropertyCoverage = (shapes) => shapes.some((shape) => shape.property_coverage.some(({ status }) => status === "partial") ||
|
|
96
|
+
shape.fields.some((field) => fieldPresence(shape, field, field.path) === "unknown-coverage"));
|
|
66
97
|
const discriminantOccurrences = (shapes) => {
|
|
67
98
|
const output = new Map();
|
|
68
99
|
shapes.forEach((shape, index) => {
|
|
69
100
|
for (const field of shape.fields) {
|
|
101
|
+
if (fieldPresence(shape, field, field.path) !== "present")
|
|
102
|
+
continue;
|
|
70
103
|
const value = literalValue(field);
|
|
71
104
|
if (!value.found)
|
|
72
105
|
continue;
|
|
@@ -111,6 +144,7 @@ const selectionUnknownChange = (input) => changeWithId({
|
|
|
111
144
|
status: "unknown",
|
|
112
145
|
path: "",
|
|
113
146
|
discriminant: null,
|
|
147
|
+
presence: UNKNOWN_COVERAGE_PRESENCE,
|
|
114
148
|
left: selectionAvailability(input.leftSelection.selection, "left"),
|
|
115
149
|
right: selectionAvailability(input.rightSelection.selection, "right"),
|
|
116
150
|
left_source_range: null,
|
|
@@ -124,6 +158,7 @@ const emptyShapeUnknownChange = (input) => changeWithId({
|
|
|
124
158
|
status: "unknown",
|
|
125
159
|
path: "",
|
|
126
160
|
discriminant: null,
|
|
161
|
+
presence: UNKNOWN_COVERAGE_PRESENCE,
|
|
127
162
|
left: emptyShapeAvailability(input.leftShapes, "left"),
|
|
128
163
|
right: emptyShapeAvailability(input.rightShapes, "right"),
|
|
129
164
|
left_source_range: null,
|
|
@@ -159,6 +194,10 @@ const diffPair = (left, right, discriminant, evidenceLinks) => {
|
|
|
159
194
|
status,
|
|
160
195
|
path,
|
|
161
196
|
discriminant,
|
|
197
|
+
presence: {
|
|
198
|
+
left: fieldPresence(left, leftField, path),
|
|
199
|
+
right: fieldPresence(right, rightField, path),
|
|
200
|
+
},
|
|
162
201
|
left: fieldAvailability(leftField),
|
|
163
202
|
right: fieldAvailability(rightField),
|
|
164
203
|
left_source_range: left.source_range,
|
|
@@ -181,29 +220,42 @@ const fieldAtPath = (shape, fields, path) => {
|
|
|
181
220
|
return undefined;
|
|
182
221
|
return {
|
|
183
222
|
path,
|
|
223
|
+
presence: "present",
|
|
184
224
|
state: "unknown",
|
|
185
225
|
value: null,
|
|
186
226
|
reason: "A static container is retained at this path, but no primitive field value is projected.",
|
|
187
227
|
};
|
|
188
228
|
};
|
|
189
229
|
const fieldChangeStatus = ({ leftShape, rightShape, path, leftField, rightField, }) => {
|
|
190
|
-
|
|
191
|
-
|
|
230
|
+
const leftPresence = fieldPresence(leftShape, leftField, path);
|
|
231
|
+
const rightPresence = fieldPresence(rightShape, rightField, path);
|
|
232
|
+
if (leftField !== undefined &&
|
|
233
|
+
rightField !== undefined &&
|
|
234
|
+
canonicalExportShapeValue(leftField) ===
|
|
192
235
|
canonicalExportShapeValue(rightField))
|
|
193
|
-
|
|
236
|
+
return null;
|
|
237
|
+
if (leftPresence === "absent" && rightPresence === "absent")
|
|
238
|
+
return null;
|
|
239
|
+
if (leftPresence === "unknown-coverage" ||
|
|
240
|
+
rightPresence === "unknown-coverage")
|
|
241
|
+
return "unknown";
|
|
242
|
+
if (leftPresence === "absent")
|
|
243
|
+
return "added";
|
|
244
|
+
if (rightPresence === "absent")
|
|
245
|
+
return "removed";
|
|
246
|
+
if (leftField !== undefined && rightField !== undefined) {
|
|
194
247
|
return leftField.state === "unknown" || rightField.state === "unknown"
|
|
195
248
|
? "unknown"
|
|
196
249
|
: "changed";
|
|
197
250
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
return leftField === undefined ? "added" : "removed";
|
|
251
|
+
return null;
|
|
252
|
+
};
|
|
253
|
+
const fieldPresence = (shape, field, path) => {
|
|
254
|
+
if (field !== undefined)
|
|
255
|
+
return field.presence;
|
|
256
|
+
return propertyCoverageComplete(shape, parentPointer(path))
|
|
257
|
+
? "absent"
|
|
258
|
+
: "unknown-coverage";
|
|
207
259
|
};
|
|
208
260
|
const propertyCoverageComplete = (shape, path) => path !== null &&
|
|
209
261
|
shape.property_coverage.some((coverage) => coverage.path === path && coverage.status === "complete");
|
|
@@ -214,7 +266,7 @@ const parentPointer = (path) => {
|
|
|
214
266
|
return separator < 0 ? null : path.slice(0, separator);
|
|
215
267
|
};
|
|
216
268
|
const fieldAvailability = (field) => {
|
|
217
|
-
if (field === undefined)
|
|
269
|
+
if (field === undefined || field.presence === "absent")
|
|
218
270
|
return { availability: "absent" };
|
|
219
271
|
if (field.state === "unknown")
|
|
220
272
|
return {
|
|
@@ -245,6 +297,7 @@ const unpairedChange = (side, shape, evidenceLinks) => changeWithId({
|
|
|
245
297
|
status: "unknown",
|
|
246
298
|
path: "",
|
|
247
299
|
discriminant: null,
|
|
300
|
+
presence: UNKNOWN_COVERAGE_PRESENCE,
|
|
248
301
|
left: {
|
|
249
302
|
availability: "unknown",
|
|
250
303
|
reason: side === "left"
|
|
@@ -62,6 +62,16 @@ const candidateFields = (node, seedKind) => {
|
|
|
62
62
|
value: observation.label,
|
|
63
63
|
},
|
|
64
64
|
]),
|
|
65
|
+
...(observation.source_map_reference !== null &&
|
|
66
|
+
observation.source_map_reference.resolution.kind !== "unresolved"
|
|
67
|
+
? [
|
|
68
|
+
{
|
|
69
|
+
basis: "property",
|
|
70
|
+
field: `observations[${String(index)}].source_map_reference.resolution.path`,
|
|
71
|
+
value: observation.source_map_reference.resolution.path,
|
|
72
|
+
},
|
|
73
|
+
]
|
|
74
|
+
: []),
|
|
65
75
|
...propertyFields(observation.properties, `observations[${String(index)}].properties`),
|
|
66
76
|
]),
|
|
67
77
|
];
|
|
@@ -89,6 +99,7 @@ const relevantFields = {
|
|
|
89
99
|
".path",
|
|
90
100
|
".source",
|
|
91
101
|
".original_source",
|
|
102
|
+
".source_root",
|
|
92
103
|
".exports",
|
|
93
104
|
],
|
|
94
105
|
"native-export": [".label", ".key", ".requested_members", ".members"],
|
|
@@ -104,6 +115,15 @@ const identityFields = (node) => {
|
|
|
104
115
|
field: "identity.original_source",
|
|
105
116
|
value: identity.original_source,
|
|
106
117
|
},
|
|
118
|
+
...(identity.source_root === null
|
|
119
|
+
? []
|
|
120
|
+
: [
|
|
121
|
+
{
|
|
122
|
+
basis: "identity",
|
|
123
|
+
field: "identity.source_root",
|
|
124
|
+
value: identity.source_root,
|
|
125
|
+
},
|
|
126
|
+
]),
|
|
107
127
|
];
|
|
108
128
|
if (identity.strategy === "canonical-path")
|
|
109
129
|
return [
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import {} from "./javascriptApplicationGraph.js";
|
|
2
1
|
import { compareCodePoints } from "../canonicalOrdering.js";
|
|
3
2
|
/** Traverse a JAG without treating edge inference as observed reachability. */
|
|
4
3
|
export const traverseApplicationFeature = (graph, seedNodeIds, direction) => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { compareCodePoints } from "../canonicalOrdering.js";
|
|
2
|
-
import {} from "./
|
|
2
|
+
import {} from "./javascriptApplicationGraphSchemas.js";
|
|
3
3
|
/** Build provider-neutral addon targets and link exact-subject native Evidence. */
|
|
4
4
|
export const buildJavaScriptNativeHandoffs = (nodes, edges, nativeEvidence) => {
|
|
5
5
|
const nodeById = new Map(nodes.map((node) => [node.node_id, node]));
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import {} from "./javascriptApplicationGraph.js";
|
|
2
1
|
import { uniqueSorted } from "../canonicalOrdering.js";
|
|
3
2
|
import { createStaticRuntimeScope, mappedRuntimePaths, staticNodeWithinRuntimeScope, } from "./javascriptRuntimeStaticCandidates.js";
|
|
4
3
|
/** Classify static code presence without claiming bundled module execution. */
|
|
@@ -77,8 +77,16 @@ const javascriptRuntimeScriptSchema = z.strictObject({
|
|
|
77
77
|
location: javascriptRuntimeLocationSchema,
|
|
78
78
|
execution_context_key: z.string().nullable(),
|
|
79
79
|
cdp_hash: z.string().nullable(),
|
|
80
|
-
length: z
|
|
81
|
-
|
|
80
|
+
length: z
|
|
81
|
+
.number()
|
|
82
|
+
.int()
|
|
83
|
+
.min(0)
|
|
84
|
+
.nullable()
|
|
85
|
+
.describe("Producer-reported script length; null when unavailable."),
|
|
86
|
+
is_module: z
|
|
87
|
+
.boolean()
|
|
88
|
+
.nullable()
|
|
89
|
+
.describe("Producer-reported module classification; null when unavailable."),
|
|
82
90
|
status: z.literal("observed-loaded"),
|
|
83
91
|
});
|
|
84
92
|
const javascriptRuntimeContextSchema = z.strictObject({
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createJavaScriptApplicationEdge
|
|
1
|
+
import { createJavaScriptApplicationEdge } from "./javascriptApplicationGraph.js";
|
|
2
2
|
import { canonicalDigest } from "../comparisonSemantics.js";
|
|
3
3
|
import { compareCodePoints } from "../canonicalOrdering.js";
|
|
4
4
|
import { mappedRuntimePaths, } from "./javascriptRuntimeStaticCandidates.js";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { browserAllowedOriginsSchema, browserEndpointSchema,
|
|
2
|
+
import { browserAllowedOriginsSchema, browserEndpointSchema, } from "../browserObservation.js";
|
|
3
|
+
import { webPageInspectionSchema, } from "../browserObservationSchemas.js";
|
|
3
4
|
import { classifyBrowserCompleteness, } from "../browserCompleteness.js";
|
|
4
5
|
import { electronPageInspectionSchema, } from "./electronObservation.js";
|
|
5
6
|
import { javascriptRuntimeObservationSchema, javascriptRuntimeKindSchema, } from "./javascriptRuntimeObservation.js";
|
|
@@ -160,7 +161,7 @@ const normalizeV8Inspection = (result) => ({
|
|
|
160
161
|
script_key: script.script_key,
|
|
161
162
|
frame_id: script.execution_context_key,
|
|
162
163
|
...runtimeLocation(script.location),
|
|
163
|
-
cdp_hash: script.cdp_hash
|
|
164
|
+
cdp_hash: script.cdp_hash,
|
|
164
165
|
length: script.length,
|
|
165
166
|
is_module: script.is_module,
|
|
166
167
|
language: null,
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { posix, relative, win32 } from "node:path";
|
|
2
|
-
import {} from "./javascriptApplicationGraph.js";
|
|
3
2
|
import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js";
|
|
4
3
|
/** Index statically reconstructed entities that can receive runtime matches. */
|
|
5
4
|
export const collectStaticRuntimeCandidates = (layers) => layers
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
2
|
import { failedJavaScriptSemanticIr, } from "./javascriptSemanticIr.js";
|
|
3
|
-
import { collectSemanticModuleLink, collectSemanticCallable, collectSemanticReferences, immutableSemanticBindings, immutableSemanticScopes,
|
|
3
|
+
import { collectSemanticModuleLink, collectSemanticCallable, collectSemanticReferences, immutableSemanticBindings, immutableSemanticScopes, } from "./javascriptSemanticProjection.js";
|
|
4
|
+
import { semanticStaticPropertyKey } from "./javascriptAstValues.js";
|
|
4
5
|
import { currentSemanticScope, resolveSemanticBindingState, semanticResolutionBlocked, resolveSemanticBindingFromScope, semanticScopeId, semanticVariableScope, } from "./javascriptSemanticState.js";
|
|
5
6
|
import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
|
|
6
7
|
import { collectSemanticMemberMutations } from "./javascriptSemanticMemberMutations.js";
|
|
7
8
|
import { collectSemanticReturns, resolveSemanticModuleCallables, } from "./javascriptSemanticReturns.js";
|
|
8
9
|
import { collectJavaScriptDerivedSemantics } from "./javascriptSemanticDerivedAnalysis.js";
|
|
9
|
-
import {
|
|
10
|
+
import { range } from "./javascriptStaticAnalysisHelpers.js";
|
|
11
|
+
import { propertyName } from "./javascriptAstValues.js";
|
|
10
12
|
import { semanticCoverage } from "./javascriptSemanticCoverage.js";
|
|
11
13
|
import { semanticResourceLimitsIn } from "./javascriptSemanticResourceLimits.js";
|
|
12
14
|
import { parseJavaScriptSource, } from "./javascriptSourceParser.js";
|
|
@@ -279,7 +281,11 @@ const bindInnerDeclaration = (node, parent, scope, state) => {
|
|
|
279
281
|
});
|
|
280
282
|
else if (t.isAssignmentExpression(node)) {
|
|
281
283
|
if (t.isIdentifier(node.left))
|
|
282
|
-
addAssignment(node.left, node.
|
|
284
|
+
addAssignment(node.left, node.operator === "=" ||
|
|
285
|
+
node.operator === "||=" ||
|
|
286
|
+
node.operator === "??="
|
|
287
|
+
? node.right
|
|
288
|
+
: node, scope, state);
|
|
283
289
|
else
|
|
284
290
|
for (const identifier of assignedPatternIdentifiers(node.left))
|
|
285
291
|
addAssignment(identifier, node, scope, state);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
2
|
import { semanticBuiltinNamespacePath } from "./javascriptSemanticProvenance.js";
|
|
3
|
-
import { semanticCallableIdForNode
|
|
3
|
+
import { semanticCallableIdForNode } from "./javascriptSemanticProjection.js";
|
|
4
|
+
import { semanticStaticPropertyName } from "./javascriptAstValues.js";
|
|
4
5
|
import { resolveSemanticBindingState, semanticResolutionBlocked, } from "./javascriptSemanticState.js";
|
|
5
6
|
import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
|
|
6
7
|
import { range } from "./javascriptStaticAnalysisHelpers.js";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
|
-
import { semanticCallableIdForNode, semanticReferenceRole,
|
|
2
|
+
import { semanticCallableIdForNode, semanticReferenceRole, } from "./javascriptSemanticProjection.js";
|
|
3
|
+
import { semanticStaticPropertyKey } from "./javascriptAstValues.js";
|
|
3
4
|
import { resolveSemanticBindingState, isUnshadowedGlobal, } from "./javascriptSemanticState.js";
|
|
4
5
|
import { parameterBindings, resolveLocalCallables, } from "./javascriptSemanticCallResolution.js";
|
|
5
6
|
import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
2
|
import { semanticBuiltinNamespacePath } from "./javascriptSemanticProvenance.js";
|
|
3
|
-
import { semanticCallableIdForNode
|
|
3
|
+
import { semanticCallableIdForNode } from "./javascriptSemanticProjection.js";
|
|
4
|
+
import { semanticStaticPropertyName } from "./javascriptAstValues.js";
|
|
4
5
|
import { resolveSemanticBindingState, } from "./javascriptSemanticState.js";
|
|
5
6
|
import { compareCodePoints } from "../canonicalOrdering.js";
|
|
6
7
|
import { traverseJavaScriptAst } from "./javascriptSemanticTraversal.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
2
|
import { semanticBuiltinNamespacePath } from "./javascriptSemanticProvenance.js";
|
|
3
3
|
import { compareCodePoints } from "../canonicalOrdering.js";
|
|
4
|
-
import { semanticStaticPropertyKey, semanticStaticPropertyName, } from "./
|
|
4
|
+
import { semanticStaticPropertyKey, semanticStaticPropertyName, } from "./javascriptAstValues.js";
|
|
5
5
|
import { resolveSemanticBindingState, semanticResolutionBlocked, } from "./javascriptSemanticState.js";
|
|
6
6
|
import { builtinDataEffectMethod as builtinMethod, dataEffectArgumentBindingId as argumentBindingId, dataEffectLiteralString as literalString, dataEffectMemberCallee as memberCallee, dataEffectMemberObject as memberObject, dataEffectPrimitive as primitiveValue, isSemanticProcessObject as isProcessObject, outerDataEffectBinding as outerAssignedBinding, assignedSemanticResultBindings, semanticProjectedBindingFacts, traverseDataEffects as traverseWithContext, } from "./javascriptSemanticDataEffectHelpers.js";
|
|
7
7
|
import { range } from "./javascriptStaticAnalysisHelpers.js";
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { canonicalDigest, canonicalJson } from "../comparisonSemantics.js";
|
|
3
3
|
import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js";
|
|
4
|
+
import { canonicalJsonDigestSteps } from "../canonicalJsonDigestSteps.js";
|
|
4
5
|
import { freezeOwnedJsonSnapshotSteps } from "../immutableJson.js";
|
|
5
6
|
import { JAVASCRIPT_SEMANTIC_RELATION_FAMILIES, JAVASCRIPT_SEMANTIC_RELATION_FAMILY, javaScriptSemanticFingerprintInputSchema, javaScriptSemanticFingerprintSchema, javaScriptSemanticGraphInputSchema, javaScriptSemanticGraphRecordSchema, javaScriptSemanticNodeInputSchema, javaScriptSemanticNodeSchema, javaScriptSemanticRelationInputSchema, javaScriptSemanticRelationSchema, javaScriptSemanticUnknownInputSchema, javaScriptSemanticUnknownSchema, } from "./javascriptSemanticGraphSchemas.js";
|
|
6
7
|
const normalizeEvidence = (evidence) => ({
|
|
@@ -96,7 +97,7 @@ const sortedUniqueIssue = (values, path, label, context) => {
|
|
|
96
97
|
return;
|
|
97
98
|
}
|
|
98
99
|
};
|
|
99
|
-
|
|
100
|
+
function* checkCoverageSteps(graph, context) {
|
|
100
101
|
const families = graph.coverage.families.map(({ family }) => family);
|
|
101
102
|
if (canonicalJson(families, "JavaScript semantic graph") !==
|
|
102
103
|
canonicalJson(JAVASCRIPT_SEMANTIC_RELATION_FAMILIES, "JavaScript semantic graph"))
|
|
@@ -122,11 +123,18 @@ const checkCoverage = (graph, context) => {
|
|
|
122
123
|
message: "Truncated graph coverage must identify an effective limit",
|
|
123
124
|
});
|
|
124
125
|
const relationsByFamily = new Map(JAVASCRIPT_SEMANTIC_RELATION_FAMILIES.map((family) => [family, 0]));
|
|
125
|
-
for (const relation of graph.relations) {
|
|
126
|
+
for (const [index, relation] of graph.relations.entries()) {
|
|
127
|
+
if (index % 256 === 0)
|
|
128
|
+
yield;
|
|
126
129
|
const family = JAVASCRIPT_SEMANTIC_RELATION_FAMILY[relation.relation];
|
|
127
130
|
relationsByFamily.set(family, (relationsByFamily.get(family) ?? 0) + 1);
|
|
128
131
|
}
|
|
129
|
-
const unknownsById = new Map(
|
|
132
|
+
const unknownsById = new Map();
|
|
133
|
+
for (const [index, unknown] of graph.unknowns.entries()) {
|
|
134
|
+
if (index % 256 === 0)
|
|
135
|
+
yield;
|
|
136
|
+
unknownsById.set(unknown.unknown_id, unknown);
|
|
137
|
+
}
|
|
130
138
|
for (const [index, family] of graph.coverage.families.entries()) {
|
|
131
139
|
if (family.retained_relations !== relationsByFamily.get(family.family))
|
|
132
140
|
context.addIssue({
|
|
@@ -148,7 +156,7 @@ const checkCoverage = (graph, context) => {
|
|
|
148
156
|
message: "Complete family coverage cannot omit or retain unknown facts",
|
|
149
157
|
});
|
|
150
158
|
}
|
|
151
|
-
}
|
|
159
|
+
}
|
|
152
160
|
const checkCanonicalOrder = (graph, context) => {
|
|
153
161
|
sortedUniqueIssue(graph.root_node_ids, ["root_node_ids"], "Root nodes", context);
|
|
154
162
|
sortedUniqueIssue(graph.nodes.map(({ node_id }) => node_id), ["nodes"], "Nodes", context);
|
|
@@ -157,8 +165,10 @@ const checkCanonicalOrder = (graph, context) => {
|
|
|
157
165
|
sortedUniqueIssue(graph.unknowns.map(({ unknown_id }) => unknown_id), ["unknowns"], "Unknown frontiers", context);
|
|
158
166
|
sortedUniqueIssue(graph.limitations, ["limitations"], "Limitations", context);
|
|
159
167
|
};
|
|
160
|
-
|
|
168
|
+
function* checkNodesSteps(graph, nodes, context) {
|
|
161
169
|
for (const [index, node] of graph.nodes.entries()) {
|
|
170
|
+
if (index % 256 === 0)
|
|
171
|
+
yield;
|
|
162
172
|
if (node.node_id !== javaScriptSemanticNodeId(node))
|
|
163
173
|
context.addIssue({
|
|
164
174
|
code: "custom",
|
|
@@ -173,18 +183,23 @@ const checkNodes = (graph, nodes, context) => {
|
|
|
173
183
|
message: "Function owner must name a function node",
|
|
174
184
|
});
|
|
175
185
|
}
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
for (const root of graph.root_node_ids)
|
|
186
|
+
}
|
|
187
|
+
function* checkRootsSteps(graph, nodes, context) {
|
|
188
|
+
for (const [index, root] of graph.root_node_ids.entries()) {
|
|
189
|
+
if (index % 256 === 0)
|
|
190
|
+
yield;
|
|
179
191
|
if (!nodes.has(root))
|
|
180
192
|
context.addIssue({
|
|
181
193
|
code: "custom",
|
|
182
194
|
path: ["root_node_ids"],
|
|
183
195
|
message: "Root identifier must name a semantic node",
|
|
184
196
|
});
|
|
185
|
-
}
|
|
186
|
-
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
function* checkRelationsSteps(graph, nodes, context) {
|
|
187
200
|
for (const [index, relation] of graph.relations.entries()) {
|
|
201
|
+
if (index % 256 === 0)
|
|
202
|
+
yield;
|
|
188
203
|
const { relation_id: identifier, ...semantic } = relation;
|
|
189
204
|
if (identifier !==
|
|
190
205
|
"jsrg_relation_" + canonicalDigest(semantic, "JavaScript semantic graph"))
|
|
@@ -214,9 +229,11 @@ const checkRelations = (graph, nodes, context) => {
|
|
|
214
229
|
message: "Candidate relations cannot claim observed resolution",
|
|
215
230
|
});
|
|
216
231
|
}
|
|
217
|
-
}
|
|
218
|
-
|
|
232
|
+
}
|
|
233
|
+
function* checkUnknownsSteps(graph, nodes, context) {
|
|
219
234
|
for (const [index, unknown] of graph.unknowns.entries()) {
|
|
235
|
+
if (index % 256 === 0)
|
|
236
|
+
yield;
|
|
220
237
|
const { unknown_id: identifier, ...semantic } = unknown;
|
|
221
238
|
if (identifier !==
|
|
222
239
|
"jsrg_unknown_" + canonicalDigest(semantic, "JavaScript semantic graph"))
|
|
@@ -250,7 +267,7 @@ const checkUnknowns = (graph, nodes, context) => {
|
|
|
250
267
|
message: "Unknown frontiers require unknown or unavailable evidence",
|
|
251
268
|
});
|
|
252
269
|
}
|
|
253
|
-
}
|
|
270
|
+
}
|
|
254
271
|
const checkUnknownReferences = (graph, context) => {
|
|
255
272
|
const unknownIds = new Set(graph.unknowns.map(({ unknown_id }) => unknown_id));
|
|
256
273
|
for (const [index, family] of graph.coverage.families.entries())
|
|
@@ -261,8 +278,10 @@ const checkUnknownReferences = (graph, context) => {
|
|
|
261
278
|
message: "Family coverage references an absent unknown frontier",
|
|
262
279
|
});
|
|
263
280
|
};
|
|
264
|
-
|
|
281
|
+
function* checkFingerprintsSteps(graph, nodes, context) {
|
|
265
282
|
for (const [index, fingerprint] of graph.fingerprints.entries()) {
|
|
283
|
+
if (index % 256 === 0)
|
|
284
|
+
yield;
|
|
266
285
|
if (nodes.get(fingerprint.function_node_id)?.kind !== "function")
|
|
267
286
|
context.addIssue({
|
|
268
287
|
code: "custom",
|
|
@@ -296,23 +315,34 @@ const checkFingerprints = (graph, nodes, context) => {
|
|
|
296
315
|
message: "Incomplete fingerprints require a limitation",
|
|
297
316
|
});
|
|
298
317
|
}
|
|
299
|
-
}
|
|
300
|
-
|
|
318
|
+
}
|
|
319
|
+
function* checkGraphContentSteps(graph, context) {
|
|
301
320
|
checkCanonicalOrder(graph, context);
|
|
302
|
-
const nodes = new Map(
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
321
|
+
const nodes = new Map();
|
|
322
|
+
for (const [index, node] of graph.nodes.entries()) {
|
|
323
|
+
if (index % 256 === 0)
|
|
324
|
+
yield;
|
|
325
|
+
nodes.set(node.node_id, node);
|
|
326
|
+
}
|
|
327
|
+
yield* checkNodesSteps(graph, nodes, context);
|
|
328
|
+
yield* checkRootsSteps(graph, nodes, context);
|
|
329
|
+
yield* checkRelationsSteps(graph, nodes, context);
|
|
330
|
+
yield* checkUnknownsSteps(graph, nodes, context);
|
|
307
331
|
checkUnknownReferences(graph, context);
|
|
308
|
-
|
|
309
|
-
|
|
332
|
+
yield* checkFingerprintsSteps(graph, nodes, context);
|
|
333
|
+
yield* checkCoverageSteps(graph, context);
|
|
310
334
|
if (graph.coverage.status !== "complete" && graph.limitations.length === 0)
|
|
311
335
|
context.addIssue({
|
|
312
336
|
code: "custom",
|
|
313
337
|
path: ["limitations"],
|
|
314
338
|
message: "Non-complete graph coverage requires a limitation",
|
|
315
339
|
});
|
|
340
|
+
}
|
|
341
|
+
const checkGraphContent = (graph, context) => {
|
|
342
|
+
const steps = checkGraphContentSteps(graph, context);
|
|
343
|
+
while (!steps.next().done) {
|
|
344
|
+
// Synchronous callers apply the same integrity checks without scheduling.
|
|
345
|
+
}
|
|
316
346
|
};
|
|
317
347
|
const checkGraph = (graph, context) => {
|
|
318
348
|
checkGraphContent(graph, context);
|
|
@@ -327,28 +357,28 @@ const checkGraph = (graph, context) => {
|
|
|
327
357
|
};
|
|
328
358
|
/** Strict semantic graph schema with verified canonical commitments. */
|
|
329
359
|
export const javaScriptSemanticGraphSchema = javaScriptSemanticGraphRecordSchema.superRefine(checkGraph);
|
|
360
|
+
const normalizeGraphInput = (parsed) => ({
|
|
361
|
+
...parsed,
|
|
362
|
+
root_node_ids: uniqueSorted(parsed.root_node_ids),
|
|
363
|
+
nodes: [...parsed.nodes].sort((left, right) => compareCodePoints(left.node_id, right.node_id)),
|
|
364
|
+
relations: [...parsed.relations].sort((left, right) => compareCodePoints(left.relation_id, right.relation_id)),
|
|
365
|
+
fingerprints: [...parsed.fingerprints].sort((left, right) => compareCodePoints(left.fingerprint_id, right.fingerprint_id)),
|
|
366
|
+
unknowns: [...parsed.unknowns].sort((left, right) => compareCodePoints(left.unknown_id, right.unknown_id)),
|
|
367
|
+
coverage: {
|
|
368
|
+
...parsed.coverage,
|
|
369
|
+
limits: [...parsed.coverage.limits].sort((left, right) => compareCodePoints(canonicalJson(left, "JavaScript semantic graph"), canonicalJson(right, "JavaScript semantic graph"))),
|
|
370
|
+
families: [...parsed.coverage.families]
|
|
371
|
+
.map((family) => ({
|
|
372
|
+
...family,
|
|
373
|
+
unknown_ids: uniqueSorted(family.unknown_ids),
|
|
374
|
+
}))
|
|
375
|
+
.sort((left, right) => compareCodePoints(left.family, right.family)),
|
|
376
|
+
},
|
|
377
|
+
limitations: uniqueSorted(parsed.limitations),
|
|
378
|
+
});
|
|
330
379
|
/** Normalize a complete companion graph and derive its graph ID. */
|
|
331
380
|
export const createJavaScriptSemanticGraph = (input) => {
|
|
332
|
-
const
|
|
333
|
-
const semantic = {
|
|
334
|
-
...parsed,
|
|
335
|
-
root_node_ids: uniqueSorted(parsed.root_node_ids),
|
|
336
|
-
nodes: [...parsed.nodes].sort((left, right) => compareCodePoints(left.node_id, right.node_id)),
|
|
337
|
-
relations: [...parsed.relations].sort((left, right) => compareCodePoints(left.relation_id, right.relation_id)),
|
|
338
|
-
fingerprints: [...parsed.fingerprints].sort((left, right) => compareCodePoints(left.fingerprint_id, right.fingerprint_id)),
|
|
339
|
-
unknowns: [...parsed.unknowns].sort((left, right) => compareCodePoints(left.unknown_id, right.unknown_id)),
|
|
340
|
-
coverage: {
|
|
341
|
-
...parsed.coverage,
|
|
342
|
-
limits: [...parsed.coverage.limits].sort((left, right) => compareCodePoints(canonicalJson(left, "JavaScript semantic graph"), canonicalJson(right, "JavaScript semantic graph"))),
|
|
343
|
-
families: [...parsed.coverage.families]
|
|
344
|
-
.map((family) => ({
|
|
345
|
-
...family,
|
|
346
|
-
unknown_ids: uniqueSorted(family.unknown_ids),
|
|
347
|
-
}))
|
|
348
|
-
.sort((left, right) => compareCodePoints(left.family, right.family)),
|
|
349
|
-
},
|
|
350
|
-
limitations: uniqueSorted(parsed.limitations),
|
|
351
|
-
};
|
|
381
|
+
const semantic = normalizeGraphInput(javaScriptSemanticGraphInputSchema.parse(input));
|
|
352
382
|
// The input schema already cloned and validated every field. Validate the
|
|
353
383
|
// normalized relationships in place, then derive the only added field. The
|
|
354
384
|
// public schema still verifies arbitrary records and their commitments.
|
|
@@ -367,9 +397,21 @@ export const createJavaScriptSemanticGraph = (input) => {
|
|
|
367
397
|
return record;
|
|
368
398
|
};
|
|
369
399
|
const validatedImmutableSemanticGraphs = new WeakSet();
|
|
370
|
-
/** Clone
|
|
371
|
-
export const createImmutableJavaScriptSemanticGraphSteps = (input) =>
|
|
372
|
-
function*
|
|
400
|
+
/** Clone input synchronously; commit, check and seal the owned graph in steps. */
|
|
401
|
+
export const createImmutableJavaScriptSemanticGraphSteps = (input) => validateAndSealSemanticGraphSteps(normalizeGraphInput(javaScriptSemanticGraphInputSchema.parse(input)));
|
|
402
|
+
function* validateAndSealSemanticGraphSteps(semantic) {
|
|
403
|
+
const graph = {
|
|
404
|
+
...semantic,
|
|
405
|
+
graph_id: `jsrg_${yield* canonicalJsonDigestSteps(semantic)}`,
|
|
406
|
+
};
|
|
407
|
+
const issues = [];
|
|
408
|
+
yield* checkGraphContentSteps(graph, {
|
|
409
|
+
addIssue: (issue) => {
|
|
410
|
+
issues.push(issue);
|
|
411
|
+
},
|
|
412
|
+
});
|
|
413
|
+
if (issues.length > 0)
|
|
414
|
+
throw new z.ZodError(issues);
|
|
373
415
|
yield* freezeOwnedJsonSnapshotSteps(graph);
|
|
374
416
|
validatedImmutableSemanticGraphs.add(graph);
|
|
375
417
|
return graph;
|