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,16 +1,5 @@
|
|
|
1
1
|
import { parseEvidence } from "./evidence.js";
|
|
2
2
|
import { functionDossierSchema } from "./hopperValues.js";
|
|
3
|
-
const DOSSIER_COLLECTION_FIELDS = [
|
|
4
|
-
"assembly",
|
|
5
|
-
"comments",
|
|
6
|
-
"callers",
|
|
7
|
-
"callees",
|
|
8
|
-
"incoming_references",
|
|
9
|
-
"outgoing_references",
|
|
10
|
-
"referenced_strings",
|
|
11
|
-
"referenced_names",
|
|
12
|
-
"basic_blocks",
|
|
13
|
-
];
|
|
14
3
|
/** Parse one complete analyze_function Evidence record for comparison workflows. */
|
|
15
4
|
export const parseFunctionEvidence = (input) => {
|
|
16
5
|
const evidence = parseEvidence(input);
|
|
@@ -20,35 +9,11 @@ export const parseFunctionEvidence = (input) => {
|
|
|
20
9
|
throw new TypeError("Function comparison requires artifact-bound Evidence");
|
|
21
10
|
const dossier = functionDossierSchema.parse(evidence.normalized_result);
|
|
22
11
|
return {
|
|
23
|
-
evidence
|
|
24
|
-
procedure: dossier.procedure,
|
|
25
|
-
provider: evidence.provider,
|
|
12
|
+
evidence,
|
|
26
13
|
subject: evidence.subject,
|
|
27
|
-
|
|
28
|
-
text: dossier.pseudocode,
|
|
29
|
-
total: [...dossier.pseudocode].length,
|
|
30
|
-
complete: true,
|
|
31
|
-
truncated: false,
|
|
32
|
-
},
|
|
33
|
-
collections: {
|
|
34
|
-
assembly: completeCollection(dossier.assembly),
|
|
35
|
-
comments: completeCollection(dossier.comments),
|
|
36
|
-
callers: completeCollection(dossier.callers),
|
|
37
|
-
callees: completeCollection(dossier.callees),
|
|
38
|
-
incoming_references: completeCollection(dossier.incoming_references),
|
|
39
|
-
outgoing_references: completeCollection(dossier.outgoing_references),
|
|
40
|
-
referenced_strings: completeCollection(dossier.referenced_strings),
|
|
41
|
-
referenced_names: completeCollection(dossier.referenced_names),
|
|
42
|
-
basic_blocks: completeCollection(dossier.basic_blocks),
|
|
43
|
-
},
|
|
14
|
+
dossier,
|
|
44
15
|
limitations: [
|
|
45
16
|
...new Set([...evidence.limitations, ...dossier.limitations]),
|
|
46
17
|
].sort((left, right) => left.localeCompare(right)),
|
|
47
18
|
};
|
|
48
19
|
};
|
|
49
|
-
const completeCollection = (items) => ({
|
|
50
|
-
items,
|
|
51
|
-
total: items.length,
|
|
52
|
-
complete: true,
|
|
53
|
-
truncated: false,
|
|
54
|
-
});
|
|
@@ -61,61 +61,16 @@ export const electronActiveObservationInputSchema = z.strictObject({
|
|
|
61
61
|
.optional()
|
|
62
62
|
.describe("Absolute local filesystem root for application-relative paths; omit to derive it from the application path. Relative paths are rejected."),
|
|
63
63
|
args: z
|
|
64
|
-
.array(z
|
|
64
|
+
.array(z
|
|
65
|
+
.string()
|
|
66
|
+
.regex(/^[^\u0000]*$/u, "Electron arguments must not contain NUL"))
|
|
65
67
|
.default([]),
|
|
66
68
|
actions: z.array(actionSchema).default([]),
|
|
67
69
|
});
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
correlation_id: z.string().nullable().default(null),
|
|
71
|
-
kind: z.enum([
|
|
72
|
-
"main-handler-invocation",
|
|
73
|
-
"main-event-invocation",
|
|
74
|
-
"utility-process-fork",
|
|
75
|
-
"utility-process-message",
|
|
76
|
-
"ipc-main-to-renderer",
|
|
77
|
-
"ipc-utility-to-main",
|
|
78
|
-
"ipc-renderer-send",
|
|
79
|
-
"ipc-renderer-invoke",
|
|
80
|
-
"ipc-renderer-post-message",
|
|
81
|
-
]),
|
|
82
|
-
event: z.string().nullable().optional(),
|
|
83
|
-
phase: z
|
|
84
|
-
.enum(["attempted", "completed", "blocked", "failed", "observed"])
|
|
85
|
-
.nullable()
|
|
86
|
-
.optional(),
|
|
87
|
-
channel: z.string().nullable(),
|
|
88
|
-
direction: z
|
|
89
|
-
.enum([
|
|
90
|
-
"renderer-to-main",
|
|
91
|
-
"main-to-renderer",
|
|
92
|
-
"main-to-utility",
|
|
93
|
-
"utility-to-main",
|
|
94
|
-
])
|
|
95
|
-
.nullable()
|
|
96
|
-
.optional(),
|
|
97
|
-
sender: z.string().nullable().optional(),
|
|
98
|
-
receiver: z.string().nullable().optional(),
|
|
99
|
-
frame: z.string().nullable().default(null),
|
|
100
|
-
target: z.string().nullable().optional(),
|
|
101
|
-
argument_shapes: z.array(z.string()),
|
|
102
|
-
result_shape: z.string().nullable(),
|
|
103
|
-
process_type: z.string().nullable(),
|
|
104
|
-
source: z.string().default("electron-active-hook"),
|
|
105
|
-
capture_method: z
|
|
106
|
-
.enum(["api-wrapper", "event-emitter", "process-hook"])
|
|
107
|
-
.default("api-wrapper"),
|
|
108
|
-
artifact_path: z.string().nullable().default(null),
|
|
109
|
-
artifact_sha256: z
|
|
110
|
-
.string()
|
|
111
|
-
.regex(/^[a-f0-9]{64}$/u)
|
|
112
|
-
.nullable()
|
|
113
|
-
.default(null),
|
|
114
|
-
error: z.boolean(),
|
|
115
|
-
});
|
|
116
|
-
const timelineEventSchema = z.strictObject({
|
|
70
|
+
/** Canonical active Electron event shared by the hook boundary and public timeline. */
|
|
71
|
+
export const electronActiveTimelineEventSchema = z.strictObject({
|
|
117
72
|
sequence: z.number().int().min(1),
|
|
118
|
-
correlation_id: z.string().nullable()
|
|
73
|
+
correlation_id: z.string().nullable(),
|
|
119
74
|
kind: z.enum([
|
|
120
75
|
"main-handler-invocation",
|
|
121
76
|
"main-event-invocation",
|
|
@@ -168,6 +123,19 @@ const timelineEventSchema = z.strictObject({
|
|
|
168
123
|
.nullable(),
|
|
169
124
|
error: z.boolean(),
|
|
170
125
|
});
|
|
126
|
+
const ipcEventSchema = electronActiveTimelineEventSchema.extend({
|
|
127
|
+
kind: z.enum([
|
|
128
|
+
"main-handler-invocation",
|
|
129
|
+
"main-event-invocation",
|
|
130
|
+
"utility-process-fork",
|
|
131
|
+
"utility-process-message",
|
|
132
|
+
"ipc-main-to-renderer",
|
|
133
|
+
"ipc-utility-to-main",
|
|
134
|
+
"ipc-renderer-send",
|
|
135
|
+
"ipc-renderer-invoke",
|
|
136
|
+
"ipc-renderer-post-message",
|
|
137
|
+
]),
|
|
138
|
+
});
|
|
171
139
|
const processMetricSchema = z.strictObject({
|
|
172
140
|
pid: z.number().int().min(1),
|
|
173
141
|
type: z.string().min(1),
|
|
@@ -237,17 +205,14 @@ export const electronActiveObservationResultSchema = z.strictObject({
|
|
|
237
205
|
ipc: z.strictObject({
|
|
238
206
|
events: z.array(ipcEventSchema),
|
|
239
207
|
observed: z.number().int().min(0),
|
|
240
|
-
dropped: z.number().int().min(0)
|
|
208
|
+
dropped: z.number().int().min(0),
|
|
241
209
|
}),
|
|
242
|
-
timeline: z
|
|
243
|
-
.
|
|
244
|
-
events: z.array(timelineEventSchema),
|
|
210
|
+
timeline: z.strictObject({
|
|
211
|
+
events: z.array(electronActiveTimelineEventSchema),
|
|
245
212
|
observed: z.number().int().min(0),
|
|
246
|
-
dropped: z.number().int().min(0)
|
|
247
|
-
})
|
|
248
|
-
|
|
249
|
-
retention: z
|
|
250
|
-
.strictObject({
|
|
213
|
+
dropped: z.number().int().min(0),
|
|
214
|
+
}),
|
|
215
|
+
retention: z.strictObject({
|
|
251
216
|
budget_bytes: z.number().int().min(0),
|
|
252
217
|
estimated_retained_bytes: z.number().int().min(0),
|
|
253
218
|
event_serialized_byte_upper_bound: z.number().int().min(0),
|
|
@@ -265,15 +230,7 @@ export const electronActiveObservationResultSchema = z.strictObject({
|
|
|
265
230
|
dropped_ipc: z.number().int().min(0),
|
|
266
231
|
observed_runtime: z.number().int().min(0),
|
|
267
232
|
dropped_runtime: z.number().int().min(0),
|
|
268
|
-
})
|
|
269
|
-
.nullable()
|
|
270
|
-
.default(null),
|
|
271
|
-
coverage: coverageSchema.default({
|
|
272
|
-
status: "partial_attach",
|
|
273
|
-
observed_event_families: [],
|
|
274
|
-
unavailable_event_families: [],
|
|
275
|
-
observed_roles: [],
|
|
276
|
-
pre_capture_activity: "unavailable",
|
|
277
233
|
}),
|
|
234
|
+
coverage: coverageSchema,
|
|
278
235
|
limitations: z.array(z.string()),
|
|
279
236
|
});
|
|
@@ -80,9 +80,20 @@ export const electronPageInspectionSchema = z.object({
|
|
|
80
80
|
script_key: prefixedDigestSchema("electron_script"),
|
|
81
81
|
frame_id: z.string().nullable().default(null),
|
|
82
82
|
file_path: z.string(),
|
|
83
|
-
cdp_hash: z
|
|
84
|
-
|
|
85
|
-
|
|
83
|
+
cdp_hash: z
|
|
84
|
+
.string()
|
|
85
|
+
.nullable()
|
|
86
|
+
.describe("Producer-reported script hash; null when unavailable."),
|
|
87
|
+
length: z
|
|
88
|
+
.number()
|
|
89
|
+
.int()
|
|
90
|
+
.min(0)
|
|
91
|
+
.nullable()
|
|
92
|
+
.describe("Producer-reported script length; null when unavailable."),
|
|
93
|
+
is_module: z
|
|
94
|
+
.boolean()
|
|
95
|
+
.nullable()
|
|
96
|
+
.describe("Producer-reported module classification; null when unavailable."),
|
|
86
97
|
language: z.string().nullable(),
|
|
87
98
|
source: electronSourceSchema,
|
|
88
99
|
})),
|
|
@@ -54,10 +54,16 @@ const collectWindowOptions = (source, options) => {
|
|
|
54
54
|
const collectWebPreferences = (source, object) => {
|
|
55
55
|
const preferences = [];
|
|
56
56
|
let unknown = 0;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
const effectivePreload = objectProperty(object, "preload");
|
|
58
|
+
const preloadPath = effectivePreload.status === "explicit"
|
|
59
|
+
? staticPath(effectivePreload.property.value)
|
|
60
|
+
: undefined;
|
|
61
|
+
const preload = effectivePreload.status === "explicit" && preloadPath !== undefined
|
|
62
|
+
? {
|
|
63
|
+
preload_path: preloadPath,
|
|
64
|
+
preload_resolution_context: staticPathResolutionContext(effectivePreload.property.value),
|
|
65
|
+
}
|
|
66
|
+
: { preload_path: null, preload_resolution_context: null };
|
|
61
67
|
for (const property of object.properties) {
|
|
62
68
|
if (t.isSpreadElement(property)) {
|
|
63
69
|
unknown += 1;
|
|
@@ -85,11 +91,6 @@ const collectWebPreferences = (source, object) => {
|
|
|
85
91
|
continue;
|
|
86
92
|
}
|
|
87
93
|
const path = name === "preload" ? staticPath(property.value) : undefined;
|
|
88
|
-
if (path !== undefined)
|
|
89
|
-
preload = {
|
|
90
|
-
preload_path: path,
|
|
91
|
-
preload_resolution_context: staticPathResolutionContext(property.value),
|
|
92
|
-
};
|
|
93
94
|
const value = path === undefined
|
|
94
95
|
? electronStaticValue(source, property.value)
|
|
95
96
|
: { status: "literal", value: path, expression: null };
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
2
|
import { boundedExpression, electronStaticValue, handlerKind, } from "./electronStaticAnalysisValues.js";
|
|
3
3
|
import { addLocatedFinding } from "./javascriptStaticAnalysisFindings.js";
|
|
4
|
-
import { argumentNode, calleeName, range,
|
|
4
|
+
import { argumentNode, calleeName, range, } from "./javascriptStaticAnalysisHelpers.js";
|
|
5
|
+
import { semanticStaticPropertyName } from "./javascriptAstValues.js";
|
|
5
6
|
/** Inspect Electron IPC operations and validation candidates. */
|
|
6
7
|
export const inspectElectronIpcNode = (node, context) => {
|
|
7
8
|
if (t.isCallExpression(node)) {
|
|
@@ -2,7 +2,8 @@ import * as t from "@babel/types";
|
|
|
2
2
|
import { compareCodePoints } from "../canonicalOrdering.js";
|
|
3
3
|
import { stripQueryAndFragment } from "../artifactPathSyntax.js";
|
|
4
4
|
import { addLocatedFinding } from "./javascriptStaticAnalysisFindings.js";
|
|
5
|
-
import { argumentNode, calleeName,
|
|
5
|
+
import { argumentNode, calleeName, range, stringValue, } from "./javascriptStaticAnalysisHelpers.js";
|
|
6
|
+
import { propertyName, semanticStaticPropertyName, } from "./javascriptAstValues.js";
|
|
6
7
|
/** Inspect JavaScript-side imports and re-exports of native .node addons. */
|
|
7
8
|
export const inspectElectronNativeNode = (node, context) => {
|
|
8
9
|
if (t.isImportDeclaration(node))
|
|
@@ -347,6 +347,8 @@ export const applicationNodeIdentitySchema = z.discriminatedUnion("strategy", [
|
|
|
347
347
|
source_map_sha256: digestSchema,
|
|
348
348
|
// The exact `sources` entry; `""` is a legal relative reference.
|
|
349
349
|
original_source: z.string(),
|
|
350
|
+
// Exact leaf-local root; null means omitted or explicitly null.
|
|
351
|
+
source_root: z.string().nullable(),
|
|
350
352
|
source_sha256: digestSchema.nullable(),
|
|
351
353
|
}),
|
|
352
354
|
z.strictObject({
|
|
@@ -63,6 +63,18 @@ const checkEvidenceNormalization = (evidence, path, context) => {
|
|
|
63
63
|
path: [...path, "location"],
|
|
64
64
|
});
|
|
65
65
|
};
|
|
66
|
+
const sourceMapObservationMatchesIdentity = (identity, observation) => {
|
|
67
|
+
const { evidence, source_map_reference: reference } = observation;
|
|
68
|
+
return (reference !== null &&
|
|
69
|
+
evidence.state === "observed" &&
|
|
70
|
+
evidence.artifact.available &&
|
|
71
|
+
evidence.artifact.sha256 === identity.source_map_sha256 &&
|
|
72
|
+
reference.source_name === identity.original_source &&
|
|
73
|
+
reference.source_root === identity.source_root &&
|
|
74
|
+
evidence.location.available &&
|
|
75
|
+
evidence.location.value.kind === "artifact-path" &&
|
|
76
|
+
reference.map_path === evidence.location.value.path);
|
|
77
|
+
};
|
|
66
78
|
const observationMatchesIdentity = (node, observation) => {
|
|
67
79
|
const { identity } = node;
|
|
68
80
|
const { evidence } = observation;
|
|
@@ -71,9 +83,7 @@ const observationMatchesIdentity = (node, observation) => {
|
|
|
71
83
|
evidence.artifact.available &&
|
|
72
84
|
evidence.artifact.sha256 === identity.sha256);
|
|
73
85
|
if (identity.strategy === "source-map-original")
|
|
74
|
-
return (
|
|
75
|
-
evidence.artifact.available &&
|
|
76
|
-
evidence.artifact.sha256 === identity.source_map_sha256);
|
|
86
|
+
return sourceMapObservationMatchesIdentity(identity, observation);
|
|
77
87
|
if (identity.strategy === "canonical-path")
|
|
78
88
|
return (evidence.artifact.available &&
|
|
79
89
|
evidence.artifact.sha256 === identity.artifact_sha256 &&
|
|
@@ -126,6 +136,19 @@ const checkNode = (node, index, context) => {
|
|
|
126
136
|
"observation_id",
|
|
127
137
|
],
|
|
128
138
|
});
|
|
139
|
+
if (node.identity.strategy === "source-map-original" &&
|
|
140
|
+
!observationMatchesIdentity(node, observation))
|
|
141
|
+
context.addIssue({
|
|
142
|
+
code: "custom",
|
|
143
|
+
message: "Source-map observation must retain its exact declaration and map location",
|
|
144
|
+
path: [
|
|
145
|
+
"nodes",
|
|
146
|
+
index,
|
|
147
|
+
"observations",
|
|
148
|
+
observationIndex,
|
|
149
|
+
"source_map_reference",
|
|
150
|
+
],
|
|
151
|
+
});
|
|
129
152
|
checkEvidenceNormalization(observation.evidence, ["nodes", index, "observations", observationIndex, "evidence"], context);
|
|
130
153
|
}
|
|
131
154
|
if (!node.observations.some((observation) => observationMatchesIdentity(node, observation)))
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { javascriptSourceMapReferenceSchema } from "./javascriptSourceMapPaths.js";
|
|
2
3
|
import { applicationCoverageSchema, applicationGraphEvidenceSchema, applicationNodeIdentitySchema, } from "./javascriptApplicationEvidenceSchemas.js";
|
|
3
4
|
import { jsonValueSchema } from "../jsonValue.js";
|
|
4
5
|
import { prefixedDigestSchema } from "../digests.js";
|
|
@@ -61,13 +62,19 @@ export const JAVASCRIPT_APPLICATION_RELATIONS = [
|
|
|
61
62
|
const applicationRelationSchema = z.enum(JAVASCRIPT_APPLICATION_RELATIONS);
|
|
62
63
|
const applicationPropertiesSchema = z.record(z.string().min(1), jsonValueSchema);
|
|
63
64
|
/** One node observation before its semantic identifier is derived. */
|
|
64
|
-
const
|
|
65
|
+
const applicationNodeObservationBaseSchema = z.strictObject({
|
|
65
66
|
label: z.string().min(1).nullable(),
|
|
67
|
+
source_map_reference: javascriptSourceMapReferenceSchema.nullable(),
|
|
66
68
|
properties: applicationPropertiesSchema,
|
|
67
69
|
evidence: applicationGraphEvidenceSchema,
|
|
68
70
|
});
|
|
71
|
+
const applicationNodeObservationInputSchema = applicationNodeObservationBaseSchema.extend({
|
|
72
|
+
source_map_reference: javascriptSourceMapReferenceSchema
|
|
73
|
+
.nullable()
|
|
74
|
+
.default(null),
|
|
75
|
+
});
|
|
69
76
|
/** One immutable, evidence-bearing observation attached to an entity. */
|
|
70
|
-
export const applicationNodeObservationSchema =
|
|
77
|
+
export const applicationNodeObservationSchema = applicationNodeObservationBaseSchema.extend({
|
|
71
78
|
observation_id: prefixedDigestSchema("jag_observation"),
|
|
72
79
|
identifier_strategy: z.strictObject({
|
|
73
80
|
strategy: z.literal("semantic-content-sha256"),
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { absenceClaimable, canonicalDigest, canonicalJson, } from "../comparisonSemantics.js";
|
|
2
2
|
import { compareCodePoints } from "../canonicalOrdering.js";
|
|
3
|
-
import {} from "./javascriptApplicationGraph.js";
|
|
4
3
|
/** Classify matched, unmatched, and ambiguous nodes without inventing absence. */
|
|
5
4
|
export const classifyJavaScriptApplicationVersions = (matching, context) => {
|
|
6
5
|
const pairByLeft = new Map(matching.pairs.map(({ left, right }) => [
|
|
@@ -204,7 +203,11 @@ const locations = (node) => node.observations
|
|
|
204
203
|
.map(({ evidence }) => evidence.location.available ? evidence.location.value : evidence.location)
|
|
205
204
|
.sort((left, right) => compareCodePoints(canonicalJson(left), canonicalJson(right)));
|
|
206
205
|
const properties = (node) => node.observations
|
|
207
|
-
.map(({ label, properties: values }) => ({
|
|
206
|
+
.map(({ label, properties: values, source_map_reference }) => ({
|
|
207
|
+
label,
|
|
208
|
+
properties: values,
|
|
209
|
+
source_map_reference,
|
|
210
|
+
}))
|
|
208
211
|
.sort((left, right) => compareCodePoints(canonicalJson(left), canonicalJson(right)));
|
|
209
212
|
const relationshipSignature = (node, side, context) => {
|
|
210
213
|
const graph = side === "left" ? context.leftGraph : context.rightGraph;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { canonicalJson } from "../comparisonSemantics.js";
|
|
1
2
|
import { compareCodePoints } from "../canonicalOrdering.js";
|
|
2
3
|
const matchTiers = () => [
|
|
3
4
|
{
|
|
@@ -112,7 +113,7 @@ const moduleSourceDigestKey = (node) => {
|
|
|
112
113
|
};
|
|
113
114
|
const sourceMapKey = (node) => node.kind === "source-module" &&
|
|
114
115
|
node.identity.strategy === "source-map-original"
|
|
115
|
-
? `source-map\0${node.identity.original_source}`
|
|
116
|
+
? `source-map\0${canonicalJson([node.identity.source_root, node.identity.original_source])}`
|
|
116
117
|
: null;
|
|
117
118
|
const structuralFingerprintKey = (node) => {
|
|
118
119
|
if (node.kind !== "javascript-module")
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { jsonObjectSchema, jsonValueSchema } from "
|
|
2
|
-
import { partialApplicationCoverage, truncatedApplicationCoverage, } from "
|
|
3
|
-
import { flattenSemanticReturnValue } from "
|
|
4
|
-
/** Project one exact export/callable link into
|
|
1
|
+
import { jsonObjectSchema, jsonValueSchema } from "../jsonValue.js";
|
|
2
|
+
import { partialApplicationCoverage, truncatedApplicationCoverage, } from "./javascriptApplicationEvidenceSchemas.js";
|
|
3
|
+
import { flattenSemanticReturnValue } from "./javascriptSemanticReturns.js";
|
|
4
|
+
/** Project one exact export/callable link into inert return-shape observations. */
|
|
5
5
|
export const projectJavaScriptExportReturnShapes = (input) => {
|
|
6
6
|
if (input.link.callableId === null || input.link.exportedName === null)
|
|
7
7
|
return null;
|
|
@@ -2,7 +2,7 @@ import { compareCodePoints, uniqueSorted } from "../canonicalOrdering.js";
|
|
|
2
2
|
import { canonicalExportShapeValue, digestExportShapeValue, } from "./javascriptExportShapeComparisonIdentity.js";
|
|
3
3
|
import { javaScriptExportShapeComparisonResultSchema, } from "./javascriptExportShapeComparisonSchemas.js";
|
|
4
4
|
import { retainJavaScriptExportShapes, selectJavaScriptExport, } from "./javascriptExportShapeSelection.js";
|
|
5
|
-
import { buildJavaScriptExportShapeChanges, hasPartialJavaScriptExportPropertyCoverage, pairJavaScriptExportShapeVariants, } from "./javascriptExportShapeVariants.js";
|
|
5
|
+
import { buildJavaScriptExportShapeChanges, buildJavaScriptExportShapeInventories, hasPartialJavaScriptExportPropertyCoverage, pairJavaScriptExportShapeVariants, } from "./javascriptExportShapeVariants.js";
|
|
6
6
|
/** Compare exact selected export return shapes without executing JavaScript. */
|
|
7
7
|
export const compareJavaScriptExportShapes = (input) => {
|
|
8
8
|
const left = selectJavaScriptExport(input.left);
|
|
@@ -21,6 +21,11 @@ export const compareJavaScriptExportShapes = (input) => {
|
|
|
21
21
|
}));
|
|
22
22
|
const changes = allChanges;
|
|
23
23
|
const omittedChanges = 0;
|
|
24
|
+
const propertyInventories = buildJavaScriptExportShapeInventories({
|
|
25
|
+
pairing,
|
|
26
|
+
leftShapes: leftRetained.shapes,
|
|
27
|
+
rightShapes: rightRetained.shapes,
|
|
28
|
+
});
|
|
24
29
|
const coverage = comparisonCoverage({
|
|
25
30
|
input,
|
|
26
31
|
left,
|
|
@@ -35,6 +40,7 @@ export const compareJavaScriptExportShapes = (input) => {
|
|
|
35
40
|
const semantic = {
|
|
36
41
|
left: left.selection,
|
|
37
42
|
right: right.selection,
|
|
43
|
+
property_inventories: propertyInventories,
|
|
38
44
|
summary: summarize(allChanges),
|
|
39
45
|
changes,
|
|
40
46
|
coverage,
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import canonicalize from "canonicalize";
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Canonically encode one export-shape comparison value.
|
|
5
|
+
*
|
|
6
|
+
* Comparison identifiers hash the full result semantics, including each
|
|
7
|
+
* change's presence object and the per-variant property inventories.
|
|
8
|
+
*/
|
|
4
9
|
export const canonicalExportShapeValue = (value) => {
|
|
5
10
|
const encoded = canonicalize(value);
|
|
6
11
|
if (encoded === undefined)
|
|
@@ -67,7 +67,10 @@ export const compareJavaScriptExportShapesInputSchema = z
|
|
|
67
67
|
message: "JavaScript export shape Evidence must be distinct",
|
|
68
68
|
});
|
|
69
69
|
});
|
|
70
|
-
const projectedReturnFieldShape = {
|
|
70
|
+
const projectedReturnFieldShape = {
|
|
71
|
+
path: jsonPointerSchema,
|
|
72
|
+
presence: z.enum(["present", "absent", "unknown-coverage"]),
|
|
73
|
+
};
|
|
71
74
|
const projectedReturnFieldSchema = z.discriminatedUnion("state", [
|
|
72
75
|
z.strictObject({
|
|
73
76
|
...projectedReturnFieldShape,
|
|
@@ -209,11 +212,20 @@ const discriminantSchema = z.strictObject({
|
|
|
209
212
|
path: jsonPointerSchema,
|
|
210
213
|
value: semanticPrimitiveSchema,
|
|
211
214
|
});
|
|
215
|
+
const propertyPresenceSchema = z.enum([
|
|
216
|
+
"present",
|
|
217
|
+
"absent",
|
|
218
|
+
"unknown-coverage",
|
|
219
|
+
]);
|
|
212
220
|
const comparisonChangeSchema = z.strictObject({
|
|
213
221
|
change_id: prefixedDigestSchema("jesc_change"),
|
|
214
222
|
status: z.enum(["added", "removed", "changed", "unknown"]),
|
|
215
223
|
path: jsonPointerSchema,
|
|
216
224
|
discriminant: discriminantSchema.nullable(),
|
|
225
|
+
presence: z.strictObject({
|
|
226
|
+
left: propertyPresenceSchema,
|
|
227
|
+
right: propertyPresenceSchema,
|
|
228
|
+
}),
|
|
217
229
|
left: valueAvailabilitySchema,
|
|
218
230
|
right: valueAvailabilitySchema,
|
|
219
231
|
left_source_range: sourceRangeSchema.nullable(),
|
|
@@ -221,11 +233,27 @@ const comparisonChangeSchema = z.strictObject({
|
|
|
221
233
|
evidence_links: z.array(evidenceIdSchema).length(2),
|
|
222
234
|
limitations: z.array(textSchema),
|
|
223
235
|
});
|
|
236
|
+
/** One change row; presence is required even when values stay unknown. */
|
|
237
|
+
export const javaScriptExportShapeComparisonChangeSchema = comparisonChangeSchema;
|
|
238
|
+
const inventoryPropertyCoverageSchema = z.strictObject({
|
|
239
|
+
path: jsonPointerSchema,
|
|
240
|
+
status: z.enum(["complete", "partial"]),
|
|
241
|
+
});
|
|
242
|
+
const propertyInventorySchema = z.strictObject({
|
|
243
|
+
side: z.enum(["left", "right"]),
|
|
244
|
+
variant_index: z.number().int().nonnegative(),
|
|
245
|
+
discriminant: discriminantSchema.nullable(),
|
|
246
|
+
paired: z.boolean(),
|
|
247
|
+
source_range: sourceRangeSchema,
|
|
248
|
+
properties: z.array(jsonPointerSchema),
|
|
249
|
+
property_coverage: z.array(inventoryPropertyCoverageSchema),
|
|
250
|
+
});
|
|
224
251
|
/** Static export-return comparison with explicit unknown semantics. */
|
|
225
252
|
export const javaScriptExportShapeComparisonResultSchema = z.strictObject({
|
|
226
253
|
comparison_id: prefixedDigestSchema("jesc"),
|
|
227
254
|
left: selectorResultSchema,
|
|
228
255
|
right: selectorResultSchema,
|
|
256
|
+
property_inventories: z.array(propertyInventorySchema),
|
|
229
257
|
summary: z.strictObject({
|
|
230
258
|
added: z.number().int().min(0),
|
|
231
259
|
removed: z.number().int().min(0),
|
|
@@ -41,11 +41,11 @@ export const selectJavaScriptExport = (side) => {
|
|
|
41
41
|
limitations: [],
|
|
42
42
|
};
|
|
43
43
|
};
|
|
44
|
-
/** Retain every
|
|
45
|
-
export const retainJavaScriptExportShapes = (selection) => {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
};
|
|
44
|
+
/** Retain every authenticated variant with its explicit slot presence. */
|
|
45
|
+
export const retainJavaScriptExportShapes = (selection) => ({
|
|
46
|
+
shapes: selection.projection?.static_return_shapes ?? [],
|
|
47
|
+
omitted: 0,
|
|
48
|
+
});
|
|
49
49
|
const selectorBase = (side, candidates) => ({
|
|
50
50
|
evidence_id: side.evidenceId,
|
|
51
51
|
graph_id: side.graph.graph_id,
|