rea-agents 6.0.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 +26 -18
- package/bridge/android/ReaJadxBridge.java +14 -5
- package/bridge/ghidra/ReaGhidraBridge.java +205 -51
- package/bridge/hopper_bridge.py +314 -127
- package/bridge/mitmproxy/capture.py +0 -2
- package/bridge/native/rea_lldb_tracer.py +630 -94
- package/bridge/process/ProcessRunTokenReader.swift +39 -5
- package/bridge/pwntools/recorded_crash_impl.py +4 -0
- package/dist/android/JadxConfiguration.js +274 -31
- package/dist/android/JadxMcpTransport.js +18 -2
- package/dist/android/JadxProtocol.js +6 -0
- package/dist/android/JadxProvider.js +76 -37
- package/dist/android/JadxSession.js +23 -4
- package/dist/application/AnalysisContextQueries.js +8 -35
- package/dist/application/AnalysisDocument.js +32 -0
- package/dist/application/AppBundleExecutable.js +67 -21
- package/dist/application/BinaryTargetResolver.js +5 -3
- package/dist/application/BrowserEvidence.js +3 -8
- package/dist/application/BrowserScenarioEvidence.js +2 -18
- package/dist/application/CallPathTracing.js +19 -3
- package/dist/application/CapabilityInventory.js +48 -11
- package/dist/application/ClientConfigurationDocument.js +917 -8
- package/dist/application/ClientRegistrationIdentity.js +26 -5
- package/dist/application/ClientRegistrationStatus.js +29 -14
- package/dist/application/DirectAnalysis.js +56 -51
- package/dist/application/DirectAnalysisCleanup.js +72 -0
- package/dist/application/DirectAnalysisStatus.js +4 -5
- package/dist/application/Doctor.js +19 -21
- package/dist/application/DoctorDiagnostics.js +1 -2
- package/dist/application/DoctorScope.js +25 -13
- package/dist/application/EnhancedLiteralTracing.js +22 -25
- package/dist/application/EnhancedTools.js +64 -17
- package/dist/application/EvidenceBundleFiles.js +30 -13
- package/dist/application/FunctionAnalysisEvidence.js +2 -3
- package/dist/application/InventoryProjectionEvidence.js +4 -3
- package/dist/application/InvestigationProviders.js +11 -2
- package/dist/application/JsonFiles.js +83 -28
- package/dist/application/LinuxHopper.js +9 -6
- package/dist/application/MacHopper.js +15 -18
- package/dist/application/ProcedureAddressResolution.js +11 -0
- package/dist/application/RealHopperAssertions.js +0 -11
- package/dist/application/ReconstructionCoverageService.js +7 -4
- package/dist/application/ReconstructionObligationCandidates.js +1 -1
- package/dist/application/ReconstructionObligationLedgerService.js +4 -3
- package/dist/application/ReferenceSourceImportEntries.js +1 -1
- package/dist/application/Setup.js +21 -17
- package/dist/application/SetupClientConfiguration.js +10 -15
- package/dist/application/SetupHost.js +21 -29
- package/dist/application/SetupPlan.js +11 -9
- package/dist/application/SupportedClients.js +34 -1
- package/dist/application/Uninstall.js +82 -29
- package/dist/application/Update.js +18 -3
- package/dist/application/UpdateMaintenance.js +7 -5
- package/dist/application/UpdateRuntime.js +57 -36
- package/dist/application/WebModuleTraceService.js +4 -2
- package/dist/application/WebNetworkCaptureService.js +4 -2
- package/dist/application/WebRuntimeService.js +5 -3
- package/dist/application/WebScriptExportService.js +32 -6
- package/dist/application/WebSourceLocationService.js +4 -2
- package/dist/application/WorkflowEvidence.js +105 -0
- 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 +22 -7
- package/dist/application/binary/AnalysisProviderRegistry.js +4 -6
- package/dist/application/binary/AnalysisSnapshotCache.js +13 -14
- package/dist/application/binary/BinarySession.js +161 -93
- package/dist/application/binary/BinarySessionComposition.js +1 -3
- package/dist/application/binary/BinarySessionExecution.js +3 -5
- package/dist/application/binary/BinarySessionOpen.js +4 -4
- package/dist/application/binary/BinarySessionRecords.js +26 -4
- package/dist/application/binary/BinarySessionStatus.js +18 -7
- package/dist/application/binary/CompositeProvider.js +16 -17
- package/dist/application/binary/LazyAnalysisProvider.js +8 -5
- package/dist/application/binary/SessionProviderRouter.js +27 -135
- package/dist/application/binaryDiagnostics/BinaryLayoutService.js +4 -2
- package/dist/application/binaryDiagnostics/RecordedCrashService.js +4 -2
- package/dist/application/evm/EvmInterfaceService.js +4 -2
- package/dist/application/homebrew.js +48 -0
- package/dist/application/investigation/EvidenceLedger.js +21 -7
- package/dist/application/investigation/InvestigationRecords.js +8 -0
- package/dist/application/javascript/ElectronActiveEvidence.js +9 -13
- package/dist/application/javascript/JavaScriptAnalysisControl.js +34 -0
- package/dist/application/javascript/JavaScriptApplicationEvidence.js +21 -4
- package/dist/application/javascript/JavaScriptApplicationEvidenceGraph.js +19 -2
- package/dist/application/javascript/JavaScriptApplicationService.js +27 -15
- package/dist/application/javascript/JavaScriptApplicationWorkflowService.js +5 -5
- package/dist/application/javascript/JavaScriptArtifactAnalysis.js +10 -7
- package/dist/application/javascript/JavaScriptArtifactGraphBuilder.js +44 -10
- 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 +49 -19
- package/dist/application/javascript/JavaScriptArtifactReconstruction.js +56 -8
- package/dist/application/javascript/JavaScriptModuleRelationships.js +38 -9
- package/dist/application/javascript/JavaScriptRecoveryService.js +4 -2
- package/dist/application/javascript/JavaScriptRuntimeObservationService.js +6 -4
- package/dist/application/javascript/JavaScriptRuntimeReconciliationService.js +3 -3
- package/dist/application/javascript/JavaScriptSemanticGraphAsyncProjection.js +2 -3
- package/dist/application/javascript/JavaScriptSemanticGraphBuilder.js +63 -61
- 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 +64 -19
- package/dist/application/managed/ManagedApplicationGraphService.js +4 -3
- package/dist/application/managed/ManagedMemberComparisonService.js +9 -5
- package/dist/application/managed/ManagedNativeVerificationService.js +6 -4
- package/dist/application/managed/ManagedReconstructionService.js +4 -3
- package/dist/application/process/ProcessCli.js +25 -17
- package/dist/application/process/ProcessEvidence.js +4 -4
- package/dist/application/workflowInputError.js +18 -0
- package/dist/artifacts/ArtifactProvider.js +48 -13
- package/dist/artifacts/ArtifactReader.js +31 -0
- package/dist/artifacts/DirectoryArtifactReader.js +2 -1
- package/dist/artifacts/MachOSliceArtifactReader.js +106 -15
- package/dist/artifacts/NativeDmgArtifactReader.js +73 -21
- package/dist/artifacts/SafeOutputTree.js +16 -2
- package/dist/artifacts/ZipArtifactReader.js +11 -4
- package/dist/artifacts/apple/AppleAssetCatalogAnalysis.js +26 -5
- package/dist/artifacts/apple/DylibResolutionReader.js +17 -7
- package/dist/artifacts/apple/InterfaceBuilderAnalysis.js +176 -56
- package/dist/artifacts/apple/InterfaceBuilderDecodeBudget.js +195 -0
- package/dist/artifacts/apple/KeyedArchiveReader.js +55 -23
- package/dist/artifacts/apple/MachoLoadCommandReader.js +92 -31
- package/dist/artifacts/apple/NibArchive.js +81 -14
- package/dist/artifacts/apple/NibViewHierarchy.js +10 -3
- package/dist/artifacts/apple/PlistNumberLiterals.js +164 -0
- package/dist/artifacts/extraction/ArtifactExtraction.js +78 -21
- package/dist/artifacts/inventory/ArtifactGraphConstruction.js +79 -68
- package/dist/artifacts/inventory/ArtifactInventory.js +0 -1
- package/dist/artifacts/inventory/reader.js +3 -3
- package/dist/artifacts/inventory/scanCanonical.js +59 -38
- package/dist/artifacts/inventory/scanReader.js +5 -9
- package/dist/artifacts/javascript/JavaScriptArtifactFiles.js +6 -2
- package/dist/browser/BrowserScenarioPartialObservation.js +106 -0
- package/dist/browser/CdpBrowserProvider.js +2 -3
- package/dist/browser/CdpCaptureCompleteness.js +2 -0
- package/dist/browser/CdpCaptureEventHandlers.js +78 -15
- package/dist/browser/CdpCaptureEventTypes.js +5 -1
- package/dist/browser/CdpCaptureEvents.js +25 -1
- package/dist/browser/CdpCaptureValues.js +20 -0
- package/dist/browser/CdpConnection.js +30 -11
- package/dist/browser/CdpElectronProvider.js +0 -2
- package/dist/browser/CdpElectronScriptEvents.js +2 -8
- package/dist/browser/CdpElectronScripts.js +2 -3
- package/dist/browser/CdpOptionalCommand.js +2 -3
- package/dist/browser/CdpPageCapture.js +23 -1
- 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 +34 -79
- package/dist/browser/PlaywrightElectronActiveProjection.js +141 -0
- package/dist/browser/PlaywrightElectronActiveProvider.js +133 -130
- 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/WebSourceMapFetcher.js +426 -72
- package/dist/browser/assets/LocalWebScriptArtifacts.js +2 -2
- package/dist/browser/assets/ScriptCaptureAdapters.js +1 -1
- package/dist/browser/history/CaptureFailures.js +41 -1
- package/dist/browser/history/CaptureRelease.js +5 -0
- package/dist/browser/history/HarCaptureAdapter.js +3 -3
- package/dist/browser/history/HarJson.js +3 -2
- package/dist/browser/history/HistoricalCaptureDecoder.js +4 -2
- package/dist/browser/history/MitmproxyCaptureAdapter.js +4 -2
- package/dist/catalogIdentity.js +0 -1
- package/dist/cli/analysisSelector.js +23 -0
- package/dist/cli/analysisViewCommands.js +36 -0
- package/dist/cli/applicationCommands.js +2 -3
- package/dist/cli/artifactCommands.js +11 -12
- package/dist/cli/coreAnalysisCommands.js +3 -3
- package/dist/cli/coreBinaryCommands.js +100 -37
- package/dist/cli/coreNativeCommands.js +9 -10
- package/dist/cli/electronCommands.js +10 -9
- package/dist/cli/interactiveSetup.js +6 -6
- package/dist/cli/javascriptApplicationAnalysis.js +7 -3
- package/dist/cli/jsonOutput.js +4 -99
- package/dist/cli/managedCommands.js +7 -8
- package/dist/cli/nativeCallCommands.js +3 -5
- 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/webRuntimeCommands.js +8 -8
- package/dist/cli.js +18 -9
- package/dist/cliBrowserScenarioCommands.js +2 -2
- package/dist/cliCommandNames.js +1 -1
- package/dist/cliJsonInput.js +24 -5
- 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 +10 -0
- package/dist/config/ghidraStartupTimeout.js +12 -0
- package/dist/config/homeDirectory.js +12 -0
- package/dist/config/mcpResponseBudget.js +30 -0
- package/dist/config/parseConfig.js +8 -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 +7 -5
- package/dist/contracts/enhancedToolContracts.js +7 -6
- package/dist/contracts/evm/evmToolContracts.js +1 -1
- package/dist/contracts/functionWorkflowToolContracts.js +1 -1
- package/dist/contracts/hopperMemoryContracts.js +2 -5
- package/dist/contracts/inputSchemaPresentation.js +90 -0
- package/dist/contracts/investigationExamples.js +4 -3
- package/dist/contracts/javascript/electronToolContracts.js +2 -2
- 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 +7 -14
- 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 +5 -3
- package/dist/contracts/officialToolContracts.js +16 -16
- package/dist/contracts/promptContracts.js +5 -5
- package/dist/contracts/providerSelection.js +1 -1
- package/dist/contracts/sessionLifecycleInputs.js +3 -7
- package/dist/contracts/sessionStatusContract.js +2 -4
- package/dist/contracts/sessionToolContracts.js +18 -8
- package/dist/contracts/sessionToolSchemas.js +3 -19
- package/dist/contracts/toolContractExamples.js +0 -1
- package/dist/contracts/toolContractHelpers.js +4 -1
- package/dist/contracts/toolContracts.js +2 -0
- package/dist/contracts/toolEffects.js +1 -1
- package/dist/contracts/toolOutputSchemaGroups.js +160 -115
- package/dist/contracts/toolOutputSchemaPrimitives.js +28 -20
- package/dist/contracts/toolSchemaMetadata.js +41 -33
- package/dist/contracts/webNetworkCaptureToolContracts.js +2 -2
- package/dist/contracts/webRuntimeToolContracts.js +1 -1
- package/dist/contracts/webScriptToolContracts.js +1 -1
- package/dist/doctorRuntime.js +7 -5
- package/dist/domain/analysisErrorBase.js +8 -3
- package/dist/domain/analysisErrorCore.js +6 -1
- package/dist/domain/analysisErrorPresentation.js +90 -20
- package/dist/domain/analysisErrorProjection.js +130 -32
- 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/androidAnalysis.js +2 -4
- package/dist/domain/android/androidApplication.js +18 -10
- package/dist/domain/apple/appleApplication.js +42 -15
- package/dist/domain/apple/dyldEnvironment.js +73 -0
- package/dist/domain/apple/dylibResolution.js +130 -12
- package/dist/domain/apple/dylibResolutionFindings.js +9 -7
- package/dist/domain/apple/interfaceBuilderGraph.js +25 -14
- package/dist/domain/apple/interfaceBuilderKeyedArchive.js +13 -3
- package/dist/domain/apple/keyedArchive.js +35 -3
- package/dist/domain/apple/machoContainer.js +54 -0
- package/dist/domain/apple/plistNumbers.js +76 -0
- package/dist/domain/artifactComparison.js +15 -6
- package/dist/domain/artifactGraph.js +16 -3
- package/dist/domain/artifactIdentity.js +29 -0
- package/dist/domain/artifactInventoryEvidence.js +28 -40
- 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/bridgeCandidateProjection.js +71 -0
- package/dist/domain/browserCaptureComparison.js +13 -49
- package/dist/domain/browserCompleteness.js +1 -0
- package/dist/domain/browserNetworkEvidence.js +10 -4
- package/dist/domain/browserObservation.js +0 -1
- package/dist/domain/browserObservationError.js +24 -5
- 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 +5 -10
- package/dist/domain/bundleComparison.js +3 -2
- package/dist/domain/callPath.js +8 -9
- package/dist/domain/callPathSchemas.js +2 -2
- package/dist/domain/canonicalJsonDigestSteps.js +133 -0
- package/dist/domain/canonicalOrdering.js +9 -5
- package/dist/domain/changedBehavior.js +9 -9
- package/dist/domain/comparisonSourceEvidence.js +40 -0
- package/dist/domain/completionLedgerGeneration.js +2 -1
- package/dist/domain/configurationErrors.js +13 -1
- package/dist/domain/conformancePackage.js +4 -3
- package/dist/domain/evidence.js +65 -36
- package/dist/domain/evidenceBundle.js +47 -8
- package/dist/domain/evidenceCompletionLedger.js +2 -1
- package/dist/domain/evidenceErrors.js +12 -1
- package/dist/domain/explicitSensitiveFailure.js +17 -1
- package/dist/domain/firmware/firmwareAnalysis.js +6 -7
- 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/hopperErrors.js +23 -2
- package/dist/domain/hopperValues.js +51 -8
- package/dist/domain/immutableJson.js +114 -0
- package/dist/domain/inputIssueProjection.js +3 -0
- package/dist/domain/javascript/electronActiveObservation.js +47 -64
- 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/electronStaticAnalysisValues.js +6 -12
- package/dist/domain/javascript/javascriptApplicationAnalysis.js +71 -23
- package/dist/domain/javascript/javascriptApplicationEvidenceSchemas.js +2 -0
- package/dist/domain/javascript/javascriptApplicationGraph.js +39 -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/domain/javascript/javascriptAstValues.js +20 -0
- 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/javascriptRecovery.js +3 -8
- 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 +106 -5
- 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/javascriptSemanticCoverage.js +6 -5
- package/dist/domain/javascript/javascriptSemanticDataEffectHelpers.js +9 -17
- package/dist/domain/javascript/javascriptSemanticDataEffects.js +23 -6
- package/dist/domain/javascript/javascriptSemanticGraph.js +98 -43
- package/dist/domain/javascript/javascriptSemanticGraphSchemas.js +1 -0
- 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 +18 -21
- package/dist/domain/javascript/javascriptSemanticProjection.js +2 -3
- package/dist/domain/javascript/javascriptSemanticPromises.js +2 -1
- package/dist/domain/javascript/javascriptSemanticQuerySchemas.js +8 -4
- package/dist/domain/javascript/javascriptSemanticResourceLimits.js +77 -0
- 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 +126 -61
- package/dist/domain/javascript/javascriptSourceMapPaths.js +104 -0
- package/dist/domain/javascript/javascriptSourceParser.js +6 -2
- package/dist/domain/javascript/javascriptStaticAnalysis.js +22 -17
- package/dist/domain/javascript/javascriptStaticAnalysisBundler.js +5 -3
- package/dist/domain/javascript/javascriptStaticAnalysisCalls.js +16 -5
- package/dist/domain/javascript/javascriptStaticAnalysisFindings.js +66 -7
- package/dist/domain/javascript/javascriptStaticAnalysisHelpers.js +28 -17
- package/dist/domain/javascript/javascriptStaticAnalysisState.js +3 -2
- package/dist/domain/javascript/sourceToBundleComparison.js +12 -3
- package/dist/domain/javascript/sourceToBundleSignals.js +47 -19
- package/dist/domain/jsonSerialization.js +109 -0
- package/dist/domain/jsonValue.js +90 -6
- package/dist/domain/localPath.js +6 -0
- package/dist/domain/managed/managedApplicationGraph.js +10 -10
- package/dist/domain/managed/managedArtifact.js +6 -4
- package/dist/domain/managed/managedInspectionEvidence.js +16 -0
- package/dist/domain/managed/managedMemberComparison.js +2 -9
- package/dist/domain/managed/managedMemberComparisonMatch.js +5 -9
- package/dist/domain/managed/managedNativeVerification.js +3 -11
- package/dist/domain/managed/managedNativeVerificationMatch.js +9 -3
- package/dist/domain/native/binaryLayout.js +2 -3
- package/dist/domain/native/fileOffsetPartialObservation.js +1 -0
- package/dist/domain/native/nativeApiBoundary.js +1 -1
- package/dist/domain/native/nativeCallObservation.js +37 -13
- package/dist/domain/native/nativeCallPartialObservation.js +33 -0
- 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 +21 -16
- 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 +79 -26
- package/dist/domain/process/processObservation.js +10 -2
- package/dist/domain/process/processScenario.js +35 -12
- 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/propertyListKeys.js +1 -1
- package/dist/domain/propertyListXmlText.js +19 -0
- package/dist/domain/providerAdapterError.js +3 -1
- package/dist/domain/providerOperationHealth.js +54 -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 +9 -46
- package/dist/domain/reconstructionVerificationSchemas.js +4 -3
- package/dist/domain/referenceSourceGraph.js +20 -21
- package/dist/domain/staticRuntimeCorrelation.js +8 -45
- package/dist/domain/stringPatterns.js +6 -0
- package/dist/domain/swiftSymbolClassification.js +61 -0
- package/dist/domain/symbolAnalysis.js +66 -18
- package/dist/domain/webBundleAnalysis.js +20 -8
- package/dist/domain/webBundleAnalyzerInspection.js +13 -8
- package/dist/domain/webBundleAnalyzerResult.js +41 -2
- 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 +19 -7
- package/dist/domain/webScriptExport.js +1 -1
- package/dist/domain/webSourceLocation.js +1 -0
- 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/FirmwareFiles.js +1 -1
- package/dist/firmware/FirmwareProvider.js +4 -4
- package/dist/generatedPackageMetadata.js +2 -2
- package/dist/ghidra/GhidraAnalysisProfile.js +7 -5
- package/dist/ghidra/GhidraClient.js +126 -34
- package/dist/ghidra/GhidraClientStartup.js +0 -2
- package/dist/ghidra/GhidraDiagnostics.js +7 -7
- package/dist/ghidra/GhidraDoctor.js +6 -5
- package/dist/ghidra/GhidraFunctionValues.js +13 -12
- package/dist/ghidra/GhidraInstallation.js +58 -33
- package/dist/ghidra/GhidraInventoryValues.js +14 -4
- package/dist/ghidra/GhidraJavaLaunch.js +66 -0
- package/dist/ghidra/GhidraLauncher.js +47 -22
- package/dist/ghidra/GhidraProvider.js +6 -2
- package/dist/ghidra/GhidraProviderCapabilities.js +20 -2
- package/dist/ghidra/GhidraProviderClient.js +36 -15
- package/dist/ghidra/GhidraSessionError.js +13 -7
- package/dist/ghidra/GhidraSessionRoot.js +39 -0
- package/dist/ghidra/GhidraTargetSnapshot.js +47 -12
- package/dist/ghidra/GhidraTransport.js +20 -0
- package/dist/ghidra/extensions/GhidraExtensions.js +17 -10
- package/dist/ghidra/extensions/nativeaot/NativeAotAdapter.js +8 -2
- package/dist/hopper/BridgeLauncher.js +65 -56
- package/dist/hopper/HopperAnalysisProfile.js +65 -12
- package/dist/hopper/HopperCleanup.js +63 -22
- package/dist/hopper/HopperClient.js +288 -59
- package/dist/hopper/HopperFileOffset.js +237 -0
- package/dist/hopper/HopperMachOImage.js +197 -0
- package/dist/hopper/HopperOperationStage.js +6 -0
- package/dist/hopper/HopperProvider.js +71 -19
- package/dist/hopper/HopperProviderCapabilities.js +19 -1
- package/dist/hopper/HopperRegexSearch.js +134 -0
- package/dist/hopper/HopperRegexWorker.js +27 -0
- package/dist/hopper/HopperRequestQueue.js +68 -19
- package/dist/hopper/HopperTargetLease.js +133 -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/JavaScriptRuntimeScope.js +9 -1
- package/dist/inspector/V8InspectorCaptureProjection.js +9 -4
- package/dist/inspector/V8InspectorProvider.js +82 -36
- package/dist/javascript/recovery/WakaruCommand.js +7 -2
- package/dist/javascript/recovery/WakaruExecution.js +5 -2
- package/dist/javascript/sourceMaps/DecodedSourceMap.js +47 -0
- package/dist/javascript/sourceMaps/SourceMapCommand.js +16 -0
- package/dist/javascript/sourceMaps/SourceMapFormat.js +79 -31
- package/dist/javascript/sourceMaps/TraceSourceMap.js +14 -28
- 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/mcpDoctor.js +62 -2
- package/dist/native/AppleDispatchCoverage.js +47 -6
- package/dist/native/AppleDispatchDecodeFacts.js +6 -0
- package/dist/native/AppleDispatchMetadata.js +6 -3
- package/dist/native/AppleMachoFixups.js +48 -24
- package/dist/native/AppleMachoSelection.js +48 -22
- package/dist/native/AppleObjcCategories.js +6 -2
- package/dist/native/AppleObjcDispatchFacets.js +5 -2
- package/dist/native/AppleObjcProperties.js +2 -1
- package/dist/native/AppleSwiftDispatchFacets.js +27 -21
- package/dist/native/AppleSwiftVtables.js +21 -15
- package/dist/native/CommandRunner.js +87 -88
- package/dist/native/LldbCallTracer.js +372 -103
- package/dist/native/LldbRetainedObservations.js +178 -0
- package/dist/native/NativeCallObservation.js +62 -3
- package/dist/native/NativeMacOSProvider.js +122 -31
- package/dist/native/NativeUiHelperRuntime.js +11 -2
- package/dist/native/NativeUiObservation.js +2 -2
- package/dist/native/SignatureTargetBinding.js +155 -0
- package/dist/native/parsers/lipo.js +71 -1
- package/dist/native/pwndbg/PwndbgCoreContext.js +25 -5
- package/dist/native/pwntools/PwntoolsDecoder.js +2 -1
- package/dist/native/pwntools/RecordedCrashStructureBindings.js +2 -0
- package/dist/process/DarwinProcessRunTokenReader.js +23 -10
- package/dist/process/ExecFileOutput.js +108 -6
- package/dist/process/OwnedCommand.js +7 -2
- package/dist/process/PrivateRuntimeRoot.js +10 -5
- package/dist/process/ProcessOwnership.js +204 -57
- package/dist/process/ProcessOwnershipObservation.js +60 -9
- package/dist/process/ProviderProcess.js +39 -10
- package/dist/process/capture/FilesystemSnapshot.js +50 -13
- package/dist/process/capture/ProcessCaptureError.js +15 -2
- package/dist/process/capture/ProcessCaptureLifecycle.js +235 -81
- 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 +157 -0
- package/dist/server/createServer.js +61 -41
- 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 -5
- 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 -4
- package/dist/server/registerApplicationTools/obligationLedger.js +4 -5
- package/dist/server/registerApplicationTools/projectMobileApplicationGraph.js +3 -4
- package/dist/server/registerApplicationTools/traceFeature.js +4 -5
- package/dist/server/registerApplicationTools/traceSemantics.js +4 -5
- package/dist/server/registerArtifactComparisonTool.js +13 -10
- package/dist/server/registerBinaryDiagnosticsTools.js +2 -5
- package/dist/server/registerBrowserScenarioTool.js +3 -6
- package/dist/server/registerBrowserTools.js +13 -18
- package/dist/server/registerBundleComparisonTool.js +5 -7
- package/dist/server/registerCloseLifecycleTool.js +9 -20
- package/dist/server/registerElectronTools.js +10 -15
- package/dist/server/registerEnhancedTools.js +36 -77
- package/dist/server/registerEvidenceTools.js +3 -6
- package/dist/server/registerEvmTools.js +2 -5
- package/dist/server/registerFirmwareTools.js +2 -5
- package/dist/server/registerFunctionComparisonTool.js +15 -12
- package/dist/server/registerInvestigationTools.js +16 -17
- package/dist/server/registerJavaScriptRecoveryTool.js +2 -5
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +6 -8
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +5 -8
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -7
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +6 -9
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +6 -9
- package/dist/server/registerOfficialTools.js +4 -21
- package/dist/server/registerProcessComparisonTool.js +74 -48
- package/dist/server/registerRecordedCrashTools.js +2 -5
- package/dist/server/registerSessionRecordTools.js +19 -24
- package/dist/server/registerSessionStatusTool.js +19 -6
- package/dist/server/registerSessionTools.js +20 -18
- package/dist/server/registerWebModuleTool.js +2 -5
- package/dist/server/registerWebNetworkCaptureTool.js +2 -5
- package/dist/server/registerWebRuntimeTools.js +4 -9
- package/dist/server/registerWebScriptTool.js +2 -5
- package/dist/server/registerWebSourceLocationTool.js +2 -5
- package/dist/server/runDerivedOperation.js +15 -3
- package/dist/server/sessionAvailabilityPolicy.js +0 -1
- package/dist/server/toolRegistrationOptions.js +2 -2
- package/dist/server/toolResult.js +75 -51
- package/dist/server/toolResultEncoding.js +34 -0
- package/dist/windows/WindowsNativeLoader.js +1 -0
- package/dist/windows/WindowsOwnedProcess.js +60 -15
- package/dist/windows/WindowsPrivateRuntime.js +7 -8
- package/install.sh +1 -1
- 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 +44 -30
- package/scripts/electron-active-hook-boundaries.cjs +18 -20
- package/scripts/electron-active-hook.cjs +241 -37
- package/scripts/rea.mjs +3 -6
- package/skills/reverse-engineer-anything/SKILL.md +12 -3
- 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 +20 -3
- 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/ghidra/GhidraDefaults.js +0 -2
- package/dist/main/reload.js +0 -12
- package/dist/main/state.js +0 -3
- package/dist/server/sessionToolPolicies.js +0 -2
|
@@ -39,6 +39,34 @@ const segmentSchema = z.object({
|
|
|
39
39
|
const unavailableAnalysisFactSchema = z
|
|
40
40
|
.object({ available: z.literal(false), reason: z.string() })
|
|
41
41
|
.strict();
|
|
42
|
+
/** Typed string evidence shared by inventories and referenced function literals. */
|
|
43
|
+
export const analysisStringSchema = z.object({
|
|
44
|
+
address: z.string(),
|
|
45
|
+
value: z.string(),
|
|
46
|
+
provider_value: z
|
|
47
|
+
.string()
|
|
48
|
+
.exactOptional()
|
|
49
|
+
.describe("Original provider display text, which may shorten the typed object."),
|
|
50
|
+
decoding: unavailableAnalysisFactSchema
|
|
51
|
+
.exactOptional()
|
|
52
|
+
.describe("When present, value retains native display text because typed bytes could not be decoded."),
|
|
53
|
+
string: z
|
|
54
|
+
.object({
|
|
55
|
+
encoding: z.string().min(1),
|
|
56
|
+
encoding_status: z
|
|
57
|
+
.enum(["observed", "inferred"])
|
|
58
|
+
.exactOptional()
|
|
59
|
+
.describe("Whether the provider declares the encoding or REA infers it from the typed bytes and native display. This does not establish the original source's intended encoding."),
|
|
60
|
+
termination: z.enum(["missing", "present_or_not_required"]),
|
|
61
|
+
byte_length: z.number().int().min(0),
|
|
62
|
+
})
|
|
63
|
+
.exactOptional(),
|
|
64
|
+
});
|
|
65
|
+
/** An analyzed bookmark retains a missing provider label as null. */
|
|
66
|
+
export const analysisBookmarkSchema = z.strictObject({
|
|
67
|
+
address: z.string(),
|
|
68
|
+
name: z.string().nullable(),
|
|
69
|
+
});
|
|
42
70
|
/** Complete observed function-body ranges; every range endpoint is inclusive. */
|
|
43
71
|
export const functionBodySchema = z.discriminatedUnion("available", [
|
|
44
72
|
unavailableAnalysisFactSchema,
|
|
@@ -163,6 +191,13 @@ export const localVariableSchema = z
|
|
|
163
191
|
.object({
|
|
164
192
|
description: z.string(),
|
|
165
193
|
provenance: z.string().min(1),
|
|
194
|
+
name: z.string().nullable().exactOptional(),
|
|
195
|
+
stack_displacement: z
|
|
196
|
+
.string()
|
|
197
|
+
.regex(/^-?\d+$/u)
|
|
198
|
+
.nullable()
|
|
199
|
+
.exactOptional()
|
|
200
|
+
.describe("Observed signed stack byte displacement, encoded as decimal to preserve precision."),
|
|
166
201
|
})
|
|
167
202
|
.strict();
|
|
168
203
|
/** Provider-neutral complete raw-instruction list for one analyzed function. */
|
|
@@ -197,13 +232,26 @@ export const referenceKindSchema = z.discriminatedUnion("available", [
|
|
|
197
232
|
unavailableAnalysisFactSchema,
|
|
198
233
|
availableReferenceKindSchema,
|
|
199
234
|
]);
|
|
200
|
-
|
|
235
|
+
/** Reported call sites without resolved targets; unreported dispatch stays unknown. */
|
|
236
|
+
export const unresolvedCallSchema = z.strictObject({
|
|
237
|
+
address: z.string(),
|
|
238
|
+
reason: z.string(),
|
|
239
|
+
});
|
|
240
|
+
/** Observed endpoints with complete or partial reference classification evidence. */
|
|
241
|
+
export const referenceEdgeSchema = z
|
|
201
242
|
.object({
|
|
202
243
|
source_address: z.string(),
|
|
203
244
|
target_address: z.string(),
|
|
204
245
|
source_procedure: procedureIdentitySchema.nullable(),
|
|
205
246
|
target_procedure: procedureIdentitySchema.nullable(),
|
|
206
247
|
kind: referenceKindSchema,
|
|
248
|
+
call: z
|
|
249
|
+
.strictObject({
|
|
250
|
+
classification: z.enum(["none", "unknown", "direct", "objective_c"]),
|
|
251
|
+
provider_type: z.number().int(),
|
|
252
|
+
provenance: z.string().min(1),
|
|
253
|
+
})
|
|
254
|
+
.exactOptional(),
|
|
207
255
|
})
|
|
208
256
|
.strict();
|
|
209
257
|
export const functionDossierSchema = z
|
|
@@ -225,13 +273,8 @@ export const functionDossierSchema = z
|
|
|
225
273
|
callees: z.array(procedureIdentitySchema),
|
|
226
274
|
incoming_references: z.array(referenceEdgeSchema),
|
|
227
275
|
outgoing_references: z.array(referenceEdgeSchema),
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
address: z.string(),
|
|
231
|
-
value: z.string(),
|
|
232
|
-
source_address: z.string(),
|
|
233
|
-
})
|
|
234
|
-
.strict()),
|
|
276
|
+
unresolved_calls: z.array(unresolvedCallSchema).exactOptional(),
|
|
277
|
+
referenced_strings: z.array(analysisStringSchema.extend({ source_address: z.string() })),
|
|
235
278
|
referenced_names: z.array(z
|
|
236
279
|
.object({
|
|
237
280
|
address: z.string(),
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
const immutableSnapshots = new WeakSet();
|
|
2
|
+
/** Recognize an owned JSON snapshot sealed by this module, or an immutable scalar. */
|
|
3
|
+
export const isImmutableJsonSnapshot = (value) => value === null ||
|
|
4
|
+
typeof value === "string" ||
|
|
5
|
+
typeof value === "boolean" ||
|
|
6
|
+
(typeof value === "number" && Number.isFinite(value)) ||
|
|
7
|
+
(typeof value === "object" && immutableSnapshots.has(value));
|
|
8
|
+
/** Seal an already parsed, owned JSON snapshot for immutable zero-copy reuse. */
|
|
9
|
+
export const freezeJsonSnapshot = (value) => {
|
|
10
|
+
const pending = [{ value, exiting: false }];
|
|
11
|
+
// These sets exist only during traversal, while the owned root already
|
|
12
|
+
// retains every child. Strong sets avoid per-node ephemeron GC work.
|
|
13
|
+
const visited = new Set();
|
|
14
|
+
const ancestors = new Set();
|
|
15
|
+
const objects = [];
|
|
16
|
+
while (pending.length > 0) {
|
|
17
|
+
const entry = pending.pop();
|
|
18
|
+
if (entry === undefined)
|
|
19
|
+
break;
|
|
20
|
+
const item = entry.value;
|
|
21
|
+
if (entry.exiting && typeof item === "object" && item !== null) {
|
|
22
|
+
ancestors.delete(item);
|
|
23
|
+
visited.add(item);
|
|
24
|
+
objects.push(item);
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (isImmutableJsonSnapshot(item))
|
|
28
|
+
continue;
|
|
29
|
+
if (typeof item !== "object" || item === null)
|
|
30
|
+
throw new TypeError("Immutable JSON snapshots require JSON values");
|
|
31
|
+
if (ancestors.has(item))
|
|
32
|
+
throw new TypeError("Immutable JSON snapshots cannot contain circular references");
|
|
33
|
+
if (visited.has(item))
|
|
34
|
+
continue;
|
|
35
|
+
ancestors.add(item);
|
|
36
|
+
pending.push({ value: item, exiting: true });
|
|
37
|
+
pushSnapshotChildren(item, pending);
|
|
38
|
+
}
|
|
39
|
+
// Register only after every value is checked and every object is frozen.
|
|
40
|
+
// An arbitrary Object.freeze call cannot forge this snapshot identity.
|
|
41
|
+
for (const item of objects)
|
|
42
|
+
Object.freeze(item);
|
|
43
|
+
// Register the requested root, rather than retaining weak entries for every
|
|
44
|
+
// nested object. Sealing an Evidence or bundle skips previously sealed roots.
|
|
45
|
+
if (typeof value === "object" && value !== null)
|
|
46
|
+
immutableSnapshots.add(value);
|
|
47
|
+
return value;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Seal exclusively owned JSON in bounded steps, authenticating only completion.
|
|
51
|
+
* Abandonment or failure can leave the provisional input partly frozen.
|
|
52
|
+
*/
|
|
53
|
+
export function* freezeOwnedJsonSnapshotSteps(value) {
|
|
54
|
+
const pending = [{ value, exiting: false }];
|
|
55
|
+
const visited = new Set();
|
|
56
|
+
const ancestors = new Set();
|
|
57
|
+
let examined = 0;
|
|
58
|
+
try {
|
|
59
|
+
while (pending.length > 0) {
|
|
60
|
+
if (examined++ === 4096) {
|
|
61
|
+
examined = 0;
|
|
62
|
+
yield;
|
|
63
|
+
}
|
|
64
|
+
const entry = pending.pop();
|
|
65
|
+
if (entry === undefined)
|
|
66
|
+
break;
|
|
67
|
+
const item = entry.value;
|
|
68
|
+
if (entry.exiting && typeof item === "object" && item !== null) {
|
|
69
|
+
ancestors.delete(item);
|
|
70
|
+
visited.add(item);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (isImmutableJsonSnapshot(item))
|
|
74
|
+
continue;
|
|
75
|
+
if (typeof item !== "object" || item === null)
|
|
76
|
+
throw new TypeError("Immutable JSON snapshots require JSON values");
|
|
77
|
+
if (ancestors.has(item))
|
|
78
|
+
throw new TypeError("Immutable JSON snapshots cannot contain circular references");
|
|
79
|
+
if (visited.has(item))
|
|
80
|
+
continue;
|
|
81
|
+
ancestors.add(item);
|
|
82
|
+
pending.push({ value: item, exiting: true });
|
|
83
|
+
pushSnapshotChildren(item, pending);
|
|
84
|
+
// Lock every inspected edge before the scheduler can release control.
|
|
85
|
+
Object.freeze(item);
|
|
86
|
+
}
|
|
87
|
+
if (typeof value === "object" && value !== null)
|
|
88
|
+
immutableSnapshots.add(value);
|
|
89
|
+
return value;
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
pending.length = 0;
|
|
93
|
+
visited.clear();
|
|
94
|
+
ancestors.clear();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const pushSnapshotChildren = (item, pending) => {
|
|
98
|
+
const prototype = Object.getPrototypeOf(item);
|
|
99
|
+
if (!Array.isArray(item) &&
|
|
100
|
+
prototype !== Object.prototype &&
|
|
101
|
+
prototype !== null)
|
|
102
|
+
throw new TypeError("Immutable JSON snapshots require ordinary objects");
|
|
103
|
+
if (Array.isArray(item))
|
|
104
|
+
for (let index = 0; index < item.length; index += 1)
|
|
105
|
+
if (!Object.hasOwn(item, index))
|
|
106
|
+
throw new TypeError("Immutable JSON snapshots cannot contain sparse arrays");
|
|
107
|
+
for (const key of Object.getOwnPropertyNames(item)) {
|
|
108
|
+
const descriptor = Object.getOwnPropertyDescriptor(item, key);
|
|
109
|
+
if (descriptor === undefined || !Object.hasOwn(descriptor, "value"))
|
|
110
|
+
throw new TypeError("Immutable JSON snapshots cannot contain accessors");
|
|
111
|
+
const child = descriptor.value;
|
|
112
|
+
pending.push({ value: child, exiting: false });
|
|
113
|
+
}
|
|
114
|
+
};
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { AnalysisInputError, } from "./analysisErrorCore.js";
|
|
2
|
+
/** Build the standard application input error while retaining schema causes and extra semantic issues. */
|
|
3
|
+
export const analysisInputErrorFromIssues = (operation, issues, input, options = {}) => new AnalysisInputError(operation, options.cause === undefined ? undefined : { cause: options.cause }, [...projectInputIssues(issues, input), ...(options.additionalIssues ?? [])]);
|
|
1
4
|
/** Project Zod failures to secret-safe caller correction metadata. */
|
|
2
5
|
export const projectInputIssues = (issues, input) => issues.flatMap((issue) => projectIssue(issue, input));
|
|
3
6
|
const projectIssue = (issue, input) => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { isAbsoluteLocalPath } from "../localPath.js";
|
|
3
|
-
const pathInputSchema =
|
|
2
|
+
import { isAbsoluteLocalPath, localPathStringSchema } from "../localPath.js";
|
|
3
|
+
const pathInputSchema = localPathStringSchema.refine(isAbsoluteLocalPath, {
|
|
4
4
|
message: "Electron executable, application, and root paths must be absolute local filesystem paths (for example /Applications/Electron.app/Contents/MacOS/Electron)",
|
|
5
5
|
});
|
|
6
6
|
const absolutePathSchema = z
|
|
@@ -60,60 +60,17 @@ export const electronActiveObservationInputSchema = z.strictObject({
|
|
|
60
60
|
application_root: pathInputSchema
|
|
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
|
-
args: z
|
|
64
|
-
|
|
65
|
-
});
|
|
66
|
-
const ipcEventSchema = z.strictObject({
|
|
67
|
-
sequence: z.number().int().min(1),
|
|
68
|
-
correlation_id: z.string().nullable().default(null),
|
|
69
|
-
kind: z.enum([
|
|
70
|
-
"main-handler-invocation",
|
|
71
|
-
"main-event-invocation",
|
|
72
|
-
"utility-process-fork",
|
|
73
|
-
"utility-process-message",
|
|
74
|
-
"ipc-main-to-renderer",
|
|
75
|
-
"ipc-utility-to-main",
|
|
76
|
-
"ipc-renderer-send",
|
|
77
|
-
"ipc-renderer-invoke",
|
|
78
|
-
"ipc-renderer-post-message",
|
|
79
|
-
]),
|
|
80
|
-
event: z.string().nullable().optional(),
|
|
81
|
-
phase: z
|
|
82
|
-
.enum(["attempted", "completed", "blocked", "failed", "observed"])
|
|
83
|
-
.nullable()
|
|
84
|
-
.optional(),
|
|
85
|
-
channel: z.string().nullable(),
|
|
86
|
-
direction: z
|
|
87
|
-
.enum([
|
|
88
|
-
"renderer-to-main",
|
|
89
|
-
"main-to-renderer",
|
|
90
|
-
"main-to-utility",
|
|
91
|
-
"utility-to-main",
|
|
92
|
-
])
|
|
93
|
-
.nullable()
|
|
94
|
-
.optional(),
|
|
95
|
-
sender: z.string().nullable().optional(),
|
|
96
|
-
receiver: z.string().nullable().optional(),
|
|
97
|
-
frame: z.string().nullable().default(null),
|
|
98
|
-
target: z.string().nullable().optional(),
|
|
99
|
-
argument_shapes: z.array(z.string()),
|
|
100
|
-
result_shape: z.string().nullable(),
|
|
101
|
-
process_type: z.string().nullable(),
|
|
102
|
-
source: z.string().default("electron-active-hook"),
|
|
103
|
-
capture_method: z
|
|
104
|
-
.enum(["api-wrapper", "event-emitter", "process-hook"])
|
|
105
|
-
.default("api-wrapper"),
|
|
106
|
-
artifact_path: z.string().nullable().default(null),
|
|
107
|
-
artifact_sha256: z
|
|
63
|
+
args: z
|
|
64
|
+
.array(z
|
|
108
65
|
.string()
|
|
109
|
-
.regex(/^[
|
|
110
|
-
.
|
|
111
|
-
|
|
112
|
-
error: z.boolean(),
|
|
66
|
+
.regex(/^[^\u0000]*$/u, "Electron arguments must not contain NUL"))
|
|
67
|
+
.default([]),
|
|
68
|
+
actions: z.array(actionSchema).default([]),
|
|
113
69
|
});
|
|
114
|
-
|
|
70
|
+
/** Canonical active Electron event shared by the hook boundary and public timeline. */
|
|
71
|
+
export const electronActiveTimelineEventSchema = z.strictObject({
|
|
115
72
|
sequence: z.number().int().min(1),
|
|
116
|
-
correlation_id: z.string().nullable()
|
|
73
|
+
correlation_id: z.string().nullable(),
|
|
117
74
|
kind: z.enum([
|
|
118
75
|
"main-handler-invocation",
|
|
119
76
|
"main-event-invocation",
|
|
@@ -166,6 +123,19 @@ const timelineEventSchema = z.strictObject({
|
|
|
166
123
|
.nullable(),
|
|
167
124
|
error: z.boolean(),
|
|
168
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
|
+
});
|
|
169
139
|
const processMetricSchema = z.strictObject({
|
|
170
140
|
pid: z.number().int().min(1),
|
|
171
141
|
type: z.string().min(1),
|
|
@@ -235,19 +205,32 @@ export const electronActiveObservationResultSchema = z.strictObject({
|
|
|
235
205
|
ipc: z.strictObject({
|
|
236
206
|
events: z.array(ipcEventSchema),
|
|
237
207
|
observed: z.number().int().min(0),
|
|
208
|
+
dropped: z.number().int().min(0),
|
|
238
209
|
}),
|
|
239
|
-
timeline: z
|
|
240
|
-
.
|
|
241
|
-
events: z.array(timelineEventSchema),
|
|
210
|
+
timeline: z.strictObject({
|
|
211
|
+
events: z.array(electronActiveTimelineEventSchema),
|
|
242
212
|
observed: z.number().int().min(0),
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
213
|
+
dropped: z.number().int().min(0),
|
|
214
|
+
}),
|
|
215
|
+
retention: z.strictObject({
|
|
216
|
+
budget_bytes: z.number().int().min(0),
|
|
217
|
+
estimated_retained_bytes: z.number().int().min(0),
|
|
218
|
+
event_serialized_byte_upper_bound: z.number().int().min(0),
|
|
219
|
+
retained: z.number().int().min(0),
|
|
220
|
+
dropped: z.number().int().min(0),
|
|
221
|
+
dropped_event_families: z.array(z.strictObject({
|
|
222
|
+
family: z.string().min(1),
|
|
223
|
+
count: z.number().int().min(1),
|
|
224
|
+
})),
|
|
225
|
+
dropped_event_roles: z.array(z.strictObject({
|
|
226
|
+
role: z.string().min(1),
|
|
227
|
+
count: z.number().int().min(1),
|
|
228
|
+
})),
|
|
229
|
+
observed_ipc: z.number().int().min(0),
|
|
230
|
+
dropped_ipc: z.number().int().min(0),
|
|
231
|
+
observed_runtime: z.number().int().min(0),
|
|
232
|
+
dropped_runtime: z.number().int().min(0),
|
|
251
233
|
}),
|
|
234
|
+
coverage: coverageSchema,
|
|
252
235
|
limitations: z.array(z.string()),
|
|
253
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))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
2
|
import { compareCodePoints } from "../canonicalOrdering.js";
|
|
3
|
-
import { semanticStaticPropertyName } from "./javascriptAstValues.js";
|
|
3
|
+
import { readExactJavaScriptLiteral, semanticStaticPropertyName, } from "./javascriptAstValues.js";
|
|
4
4
|
import { sourceSlice } from "./javascriptStaticAnalysisHelpers.js";
|
|
5
5
|
/** Preserve one literal value or the exact inert expression. */
|
|
6
6
|
export const electronStaticValue = (source, node) => {
|
|
@@ -101,17 +101,11 @@ const collectMembersAt = (object, prefix, depth, state) => {
|
|
|
101
101
|
}
|
|
102
102
|
};
|
|
103
103
|
const literalValue = (node) => {
|
|
104
|
-
if (
|
|
105
|
-
return { found:
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
return { found: true, value: null };
|
|
110
|
-
if (t.isTemplateLiteral(node) && node.expressions.length === 0)
|
|
111
|
-
return {
|
|
112
|
-
found: true,
|
|
113
|
-
value: node.quasis[0]?.value.cooked ?? node.quasis[0]?.value.raw ?? "",
|
|
114
|
-
};
|
|
104
|
+
if (node === null || node === undefined)
|
|
105
|
+
return { found: false };
|
|
106
|
+
const literal = readExactJavaScriptLiteral(node);
|
|
107
|
+
if (literal.found)
|
|
108
|
+
return literal;
|
|
115
109
|
if (t.isUnaryExpression(node, { operator: "-" }) &&
|
|
116
110
|
t.isNumericLiteral(node.argument))
|
|
117
111
|
return { found: true, value: -node.argument.value };
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { javascriptApplicationGraphSchema } from "./javascriptApplicationGraph.js";
|
|
3
|
-
import { javaScriptSemanticGraphSchema } from "./javascriptSemanticGraph.js";
|
|
2
|
+
import { javascriptApplicationGraphSchema, isValidatedImmutableJavaScriptApplicationGraph, } from "./javascriptApplicationGraph.js";
|
|
3
|
+
import { javaScriptSemanticGraphSchema, isValidatedImmutableJavaScriptSemanticGraph, } from "./javascriptSemanticGraph.js";
|
|
4
4
|
import { digestSchema } from "../digests.js";
|
|
5
5
|
import { prefixedDigestSchema } from "../digests.js";
|
|
6
|
+
import { localPathStringSchema } from "../localPath.js";
|
|
6
7
|
const countSchema = z.number().int().min(0);
|
|
7
8
|
/** Public target-free request for static JavaScript application analysis. */
|
|
8
9
|
export const analyzeJavaScriptApplicationInputSchema = z.strictObject({
|
|
9
|
-
input_path:
|
|
10
|
+
input_path: localPathStringSchema,
|
|
10
11
|
format: z.enum(["auto", "asar", "directory"]).default("auto"),
|
|
11
12
|
});
|
|
12
13
|
/** Compact counts for the high-level Electron architecture/security surface. */
|
|
@@ -45,9 +46,7 @@ const reconstructionStatisticsSchema = z.strictObject({
|
|
|
45
46
|
parse_failures: countSchema,
|
|
46
47
|
truncated_scopes: countSchema,
|
|
47
48
|
});
|
|
48
|
-
|
|
49
|
-
export const javascriptApplicationAnalysisResultSchema = z
|
|
50
|
-
.strictObject({
|
|
49
|
+
const applicationAnalysisResultShape = z.strictObject({
|
|
51
50
|
input_path: z.string().min(1),
|
|
52
51
|
format: z.enum(["asar", "directory"]),
|
|
53
52
|
root_artifact_sha256: digestSchema,
|
|
@@ -58,8 +57,8 @@ export const javascriptApplicationAnalysisResultSchema = z
|
|
|
58
57
|
statistics: reconstructionStatisticsSchema,
|
|
59
58
|
limitations: z.array(z.string().min(1)),
|
|
60
59
|
semantic_graph: javaScriptSemanticGraphSchema,
|
|
61
|
-
})
|
|
62
|
-
|
|
60
|
+
});
|
|
61
|
+
function* checkApplicationBindingsSteps(result, context) {
|
|
63
62
|
if (result.semantic_graph.application_graph_id !== result.graph.graph_id)
|
|
64
63
|
context.addIssue({
|
|
65
64
|
code: "custom",
|
|
@@ -72,19 +71,68 @@ export const javascriptApplicationAnalysisResultSchema = z
|
|
|
72
71
|
path: ["semantic_graph", "root_artifact_sha256"],
|
|
73
72
|
message: "Semantic graph must commit the containing root artifact",
|
|
74
73
|
});
|
|
75
|
-
const applicationNodeIds = new Set(
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
74
|
+
const applicationNodeIds = new Set();
|
|
75
|
+
let examined = 0;
|
|
76
|
+
try {
|
|
77
|
+
for (const node of result.graph.nodes) {
|
|
78
|
+
applicationNodeIds.add(node.node_id);
|
|
79
|
+
if (++examined === 4096) {
|
|
80
|
+
examined = 0;
|
|
81
|
+
yield;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
for (const [nodeIndex, node] of result.semantic_graph.nodes.entries()) {
|
|
85
|
+
if (++examined === 4096) {
|
|
86
|
+
examined = 0;
|
|
87
|
+
yield;
|
|
88
|
+
}
|
|
89
|
+
for (const [identifierIndex, identifier,] of node.application_node_ids.entries()) {
|
|
90
|
+
if (!applicationNodeIds.has(identifier))
|
|
91
|
+
context.addIssue({
|
|
92
|
+
code: "custom",
|
|
93
|
+
path: [
|
|
94
|
+
"semantic_graph",
|
|
95
|
+
"nodes",
|
|
96
|
+
nodeIndex,
|
|
97
|
+
"application_node_ids",
|
|
98
|
+
identifierIndex,
|
|
99
|
+
],
|
|
100
|
+
message: "Semantic node references an absent application node",
|
|
101
|
+
});
|
|
102
|
+
if (++examined === 4096) {
|
|
103
|
+
examined = 0;
|
|
104
|
+
yield;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
applicationNodeIds.clear();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/** JavaScript application analysis with an authenticated semantic companion. */
|
|
114
|
+
export const javascriptApplicationAnalysisResultSchema = applicationAnalysisResultShape.superRefine((result, context) => {
|
|
115
|
+
const steps = checkApplicationBindingsSteps(result, context);
|
|
116
|
+
while (!steps.next().done) {
|
|
117
|
+
// Public/imported results still receive complete synchronous validation.
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
const ownedAnalysisResultShape = applicationAnalysisResultShape.extend({
|
|
121
|
+
graph: z.custom(isValidatedImmutableJavaScriptApplicationGraph),
|
|
122
|
+
semantic_graph: z.custom(isValidatedImmutableJavaScriptSemanticGraph),
|
|
90
123
|
});
|
|
124
|
+
/** Reuse exact owned graphs while validating metadata and cross-graph bindings. */
|
|
125
|
+
export function* parseOwnedJavaScriptApplicationAnalysisSteps(input) {
|
|
126
|
+
const prepared = ownedAnalysisResultShape.safeParse(input);
|
|
127
|
+
if (!prepared.success)
|
|
128
|
+
return javascriptApplicationAnalysisResultSchema.parse(input);
|
|
129
|
+
const issues = [];
|
|
130
|
+
yield* checkApplicationBindingsSteps(prepared.data, {
|
|
131
|
+
addIssue: (issue) => {
|
|
132
|
+
issues.push(issue);
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
if (issues.length > 0)
|
|
136
|
+
throw new z.ZodError(issues);
|
|
137
|
+
return prepared.data;
|
|
138
|
+
}
|
|
@@ -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({
|