rea-agents 3.0.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +83 -108
- package/bridge/ghidra/ReaGhidraBridge.java +609 -841
- package/bridge/hopper_bridge.py +99 -344
- package/dist/application/AbortablePromise.js +6 -3
- package/dist/application/AnalysisContextQueries.js +21 -9
- package/dist/application/AnalysisSnapshotCache.js +0 -1
- package/dist/application/AnalysisSnapshotFiles.js +7 -7
- package/dist/application/AndroidApplicationService.js +1 -1
- package/dist/application/AppleApplicationService.js +1 -1
- package/dist/application/ArtifactExtraction.js +35 -54
- package/dist/application/ArtifactExtractionDestination.js +17 -0
- package/dist/application/ArtifactGraphConstruction.js +2 -17
- package/dist/application/ArtifactInventory/classify.js +2 -6
- package/dist/application/ArtifactInventory/hash.js +2 -20
- package/dist/application/ArtifactInventory/policy.js +17 -0
- package/dist/application/ArtifactInventory/reader.js +1 -4
- package/dist/application/ArtifactInventory/scanCanonical.js +8 -15
- package/dist/application/ArtifactInventory/scanReader.js +76 -58
- package/dist/application/ArtifactInventory/types.js +1 -5
- package/dist/application/ArtifactInventory.js +6 -14
- package/dist/application/AuthorizedArtifactInventory.js +3 -13
- package/dist/application/BinarySession.js +54 -28
- package/dist/application/BinarySessionComposition.js +0 -11
- package/dist/application/BinarySessionOpen.js +2 -1
- package/dist/application/BinarySessionRecords.js +24 -86
- package/dist/application/BinarySessionStatus.js +16 -21
- package/dist/application/BinaryTargetResolver.js +216 -0
- package/dist/application/BrowserEvidence.js +39 -57
- package/dist/application/BrowserObservationService.js +3 -6
- package/dist/application/BrowserScenarioCaptureService.js +3 -6
- package/dist/application/BrowserScenarioEvidence.js +3 -3
- package/dist/application/CallPathTracing.js +2 -36
- package/dist/application/CapabilityClientRequirements.js +26 -0
- package/dist/application/CapabilityInventory.js +143 -77
- package/dist/application/ClientConfigurationDocument.js +27 -0
- package/dist/application/ClientRegistrationStatus.js +16 -13
- package/dist/application/CommandShimReplay.js +14 -1
- package/dist/application/DirectAnalysis.js +22 -46
- package/dist/application/DirectAnalysisStatus.js +5 -61
- package/dist/application/Doctor.js +11 -32
- package/dist/application/DoctorDiagnostics.js +1 -2
- package/dist/application/DoctorScope.js +1 -1
- package/dist/application/ElectronActiveEvidence.js +50 -0
- package/dist/application/ElectronActiveObservationPort.js +1 -0
- package/dist/application/ElectronActiveObservationService.js +78 -0
- package/dist/application/ElectronBoundaryAnalysis.js +7 -8
- package/dist/application/ElectronBoundaryGraphContext.js +1 -1
- package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
- package/dist/application/ElectronBoundaryGraphNative.js +1 -2
- package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
- package/dist/application/ElectronEvidence.js +4 -7
- package/dist/application/ElectronObservationService.js +5 -9
- package/dist/application/EnhancedLiteralTracing.js +42 -65
- package/dist/application/EnhancedTools.js +98 -64
- package/dist/application/EvidenceBundleCommands.js +16 -12
- package/dist/application/EvidenceBundleFiles.js +9 -15
- package/dist/application/EvidenceLedger.js +14 -42
- package/dist/application/FilesystemSnapshot.js +2 -3
- package/dist/application/InterfaceBuilderAnalysis.js +266 -0
- package/dist/application/InventoryProjectionEvidence.js +4 -2
- package/dist/application/InvestigationProviders.js +1 -1
- package/dist/application/JavaScriptApplicationEvidence.js +2 -5
- package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
- package/dist/application/JavaScriptApplicationService.js +6 -29
- package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
- package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
- package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
- package/dist/application/JavaScriptArtifactFiles.js +67 -107
- package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
- package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
- package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
- package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
- package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
- package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
- package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
- package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
- package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
- package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
- package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
- package/dist/application/JavaScriptJsonModules.js +2 -2
- package/dist/application/JavaScriptModuleRelationships.js +22 -27
- package/dist/application/JavaScriptReplayPermission.js +1 -1
- package/dist/application/JavaScriptReplayPlanning.js +9 -3
- package/dist/application/JavaScriptReplayService.js +29 -47
- package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
- package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
- package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
- package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
- package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
- package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
- package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
- package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
- package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
- package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
- package/dist/application/JavaScriptSemanticTraceService.js +1 -10
- package/dist/application/JsonFiles.js +79 -0
- package/dist/application/LinuxHopper.js +11 -9
- package/dist/application/LoopbackReplay.js +26 -23
- package/dist/application/LoopbackReplayRecorder.js +29 -1
- package/dist/application/ManagedApplicationGraphService.js +1 -2
- package/dist/application/ManagedMemberComparisonService.js +11 -41
- package/dist/application/ManagedNativeVerificationService.js +1 -2
- package/dist/application/ManagedReconstructionService.js +1 -1
- package/dist/application/ManagedRuntimeCorrelationService.js +14 -13
- package/dist/application/NativeApiInspection.js +2 -7
- package/dist/application/NativeUiActionTrace.js +394 -0
- package/dist/application/NodeRuntimeCharacterizationService.js +11 -16
- package/dist/application/PermissionAuthority.js +15 -7
- package/dist/application/PermissionFailure.js +5 -0
- package/dist/application/ProcessCaptureAuthority.js +5 -7
- package/dist/application/ProcessCaptureJournal.js +3 -2
- package/dist/application/ProcessCaptureLifecycle.js +10 -12
- package/dist/application/ProcessCheckpoints.js +29 -11
- package/dist/application/ProcessCli.js +8 -17
- package/dist/application/ProcessEvidence.js +5 -7
- package/dist/application/ProcessHarness.js +60 -20
- package/dist/application/ProcessNormalization.js +2 -1
- package/dist/application/ProcessReactiveCoordinator.js +2 -4
- package/dist/application/ProcessReactiveEffects.js +9 -3
- package/dist/application/ProcessReactiveHarness.js +13 -7
- package/dist/application/ProcessSampling.js +2 -4
- package/dist/application/ProcessTimer.js +39 -0
- package/dist/application/ProjectPermissionStore.js +39 -95
- package/dist/application/RealHopperAssertions.js +20 -66
- package/dist/application/ReconstructionCoverageService.js +12 -58
- package/dist/application/ReconstructionObligationAuthority.js +2 -2
- package/dist/application/ReconstructionObligationCandidates.js +4 -4
- package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
- package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
- package/dist/application/ReconstructionObligationLedgerService.js +19 -38
- package/dist/application/ReferenceSourceImport.js +21 -47
- package/dist/application/ReferenceSourceImportEntries.js +2 -4
- package/dist/application/ReferenceSourceImportPolicy.js +5 -32
- package/dist/application/ReferenceSourceImportTypes.js +0 -16
- package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
- package/dist/application/SessionProviderRouter.js +2 -2
- package/dist/application/Setup.js +1 -3
- package/dist/application/SetupClientConfiguration.js +22 -88
- package/dist/application/SetupRegistrationEnvironment.js +0 -7
- package/dist/application/StoreFileLock.js +119 -0
- package/dist/application/TerminalRenderer.js +2 -3
- package/dist/application/Uninstall.js +9 -14
- package/dist/application/UnknownEvidence.js +1 -1
- package/dist/application/WindowsCapabilities.js +5 -4
- package/dist/artifacts/ArtifactPaths.js +2 -5
- package/dist/artifacts/ArtifactProvider.js +43 -67
- package/dist/artifacts/DirectoryArtifactReader.js +13 -8
- package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
- package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
- package/dist/artifacts/NibArchive.js +269 -0
- package/dist/artifacts/SafeOutputTree.js +21 -31
- package/dist/browser/BrowserProcessStartup.js +1 -2
- package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
- package/dist/browser/CdpBrowserProvider.js +3 -13
- package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
- package/dist/browser/CdpCaptureDocuments.js +28 -76
- package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
- package/dist/browser/CdpCaptureEventHandlers.js +22 -87
- package/dist/browser/CdpCaptureEvents.js +2 -8
- package/dist/browser/CdpCaptureStorage.js +9 -20
- package/dist/browser/CdpCaptureStorageFingerprints.js +85 -95
- package/dist/browser/CdpCaptureValues.js +21 -21
- package/dist/browser/CdpConnection.js +10 -25
- package/dist/browser/CdpElectronInspection.js +29 -51
- package/dist/browser/CdpElectronProvider.js +10 -35
- package/dist/browser/CdpElectronScriptEvents.js +8 -16
- package/dist/browser/CdpElectronScripts.js +6 -35
- package/dist/browser/CdpElectronWorkers.js +6 -10
- package/dist/browser/CdpEndpoint.js +25 -41
- package/dist/browser/CdpObservationSession.js +14 -26
- package/dist/browser/CdpPageCapture.js +34 -48
- package/dist/browser/CdpPageCaptureScripts.js +1 -19
- package/dist/browser/CdpPageCaptureWorkers.js +6 -10
- package/dist/browser/CdpSafeMetadata.js +19 -22
- package/dist/browser/CdpScreenshot.js +3 -5
- package/dist/browser/CdpTargetSession.js +1 -2
- package/dist/browser/CdpWebMcpDiscovery.js +13 -22
- package/dist/browser/ElectronFileScope.js +8 -19
- package/dist/browser/JavaScriptRuntimeScope.js +10 -10
- package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
- package/dist/browser/PlaywrightElectronActiveActions.js +309 -0
- package/dist/browser/PlaywrightElectronActiveProvider.js +274 -0
- package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
- package/dist/browser/PlaywrightScenarioActions.js +3 -7
- package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
- package/dist/browser/PlaywrightScenarioBrowser.js +7 -9
- package/dist/browser/PlaywrightScenarioEvents.js +45 -94
- package/dist/browser/PlaywrightScenarioSession.js +18 -34
- package/dist/browser/PngVisualDiff.js +22 -14
- package/dist/browser/SensitiveTextCapture.js +1 -18
- package/dist/browser/V8InspectorCaptureProjection.js +7 -7
- package/dist/browser/V8InspectorEndpoint.js +12 -14
- package/dist/browser/V8InspectorProvider.js +20 -61
- package/dist/browser/WebSourceMapFetcher.js +56 -176
- package/dist/catalogIdentity.js +12 -60
- package/dist/cli/artifactCommands.js +49 -77
- package/dist/cli/coreAnalysisCommands.js +83 -133
- package/dist/cli/javascriptApplicationAnalysis.js +1 -9
- package/dist/cli/managedCommands.js +6 -271
- package/dist/cli/setupCommands.js +3 -12
- package/dist/cli/utilityCommands.js +7 -41
- package/dist/cli.js +0 -2
- package/dist/cliApplicationCommands.js +44 -114
- package/dist/cliBrowserAdvancedCommands.js +12 -102
- package/dist/cliBrowserCommands.js +19 -124
- package/dist/cliBrowserContext.js +30 -0
- package/dist/cliCommandNames.js +5 -5
- package/dist/cliElectronCommands.js +49 -71
- package/dist/cliEvidenceCommands.js +8 -77
- package/dist/cliJavaScriptRuntimeCommands.js +18 -92
- package/dist/cliJsonInput.js +4 -14
- package/dist/cliObservationOptions.js +11 -92
- package/dist/cliPolicyCommands.js +2 -16
- package/dist/cliProcessCommands.js +3 -3
- package/dist/cliSetup.js +0 -13
- package/dist/config/browserScenario.js +77 -0
- package/dist/config/electronAutomation.js +35 -0
- package/dist/config/environment.js +6 -9
- package/dist/config/javascriptReplay.js +41 -0
- package/dist/config/managedRuntime.js +25 -0
- package/dist/config/parseConfig.js +56 -232
- package/dist/config/parsers.js +16 -28
- package/dist/config/passiveObservation.js +87 -0
- package/dist/config/permissions.js +0 -7
- package/dist/config/processCapture.js +47 -0
- package/dist/contracts/analysisSearchContract.js +2 -5
- package/dist/contracts/applicationToolContracts.js +58 -114
- package/dist/contracts/applicationWorkflowInputContracts.js +29 -114
- package/dist/contracts/artifactComparisonExample.js +58 -60
- package/dist/contracts/artifactToolContracts.js +37 -91
- package/dist/contracts/browserScenarioToolContracts.js +6 -51
- package/dist/contracts/browserToolContracts.js +10 -75
- package/dist/contracts/electronToolContracts.js +27 -98
- package/dist/contracts/enhancedInputs.js +31 -78
- package/dist/contracts/errorSchemas.js +0 -1
- package/dist/contracts/functionComparisonExample.js +10 -24
- package/dist/contracts/functionInstructionContract.js +1 -3
- package/dist/contracts/functionWorkflowToolContracts.js +4 -5
- package/dist/contracts/hopperMemoryContracts.js +3 -3
- package/dist/contracts/investigationExamples.js +14 -11
- package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
- package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
- package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
- package/dist/contracts/managedToolContracts.js +10 -104
- package/dist/contracts/managedWorkflowExamples.js +77 -125
- package/dist/contracts/managedWorkflowToolContracts.js +51 -74
- package/dist/contracts/nativeToolContracts.js +9 -14
- package/dist/contracts/processCaptureExample.js +2 -69
- package/dist/contracts/promptContracts.js +49 -67
- package/dist/contracts/providerSelection.js +0 -1
- package/dist/contracts/reconstructionReadinessExample.js +1 -6
- package/dist/contracts/sessionStatusContract.js +1 -17
- package/dist/contracts/sessionToolSchemas.js +52 -0
- package/dist/contracts/toolContractExamples.js +11 -10
- package/dist/contracts/toolContractHelpers.js +19 -0
- package/dist/contracts/toolContracts.js +60 -143
- package/dist/contracts/toolEffects.js +16 -9
- package/dist/contracts/toolOutputSchemaGroups.js +47 -86
- package/dist/contracts/toolOutputSchemaPrimitives.js +72 -62
- package/dist/contracts/toolSchemaMetadata.js +117 -0
- package/dist/contracts/unknownContractExamples.js +0 -2
- package/dist/doctorRuntime.js +1 -1
- package/dist/domain/analysisErrorPresentation.js +46 -54
- package/dist/domain/analysisErrorProjection.js +28 -37
- package/dist/domain/analysisProfile.js +3 -31
- package/dist/domain/analysisSnapshot.js +3 -12
- package/dist/domain/androidApplication.js +15 -52
- package/dist/domain/appleApplication.js +24 -65
- package/dist/domain/artifactComparison.js +11 -29
- package/dist/domain/artifactGraph.js +14 -44
- package/dist/domain/artifactInspection.js +38 -69
- package/dist/domain/artifactInventoryEvidence.js +27 -21
- package/dist/domain/binaryTarget.js +2 -219
- package/dist/domain/binaryTargetTypes.js +1 -0
- package/dist/domain/browserCaptureComparison.js +35 -60
- package/dist/domain/browserObservation.js +45 -197
- package/dist/domain/browserObservationSchemas.js +5 -23
- package/dist/domain/browserScenario.js +11 -14
- package/dist/domain/browserScenarioCapture.js +11 -12
- package/dist/domain/browserScenarioCaptureValues.js +146 -84
- package/dist/domain/browserScenarioDiff.js +2 -59
- package/dist/domain/browserScenarioDiffEvidence.js +51 -0
- package/dist/domain/browserScenarioDiffValues.js +21 -38
- package/dist/domain/browserScenarioValues.js +80 -109
- package/dist/domain/browserSession.js +4 -7
- package/dist/domain/bundleComparison.js +6 -32
- package/dist/domain/bytecodeProvider.js +53 -54
- package/dist/domain/callPath.js +50 -169
- package/dist/domain/callPathSchemas.js +79 -0
- package/dist/domain/changedBehavior.js +34 -60
- package/dist/domain/completionLedgerGeneration.js +8 -14
- package/dist/domain/conformancePackage.js +126 -97
- package/dist/domain/conformanceReplay.js +39 -11
- package/dist/domain/conformanceTrustGate.js +174 -30
- package/dist/domain/customProtocolCapture.js +4 -4
- package/dist/domain/electronActiveObservation.js +244 -0
- package/dist/domain/electronObservation.js +21 -83
- package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
- package/dist/domain/electronStaticAnalysisIpc.js +38 -14
- package/dist/domain/electronStaticAnalysisNative.js +1 -8
- package/dist/domain/electronStaticAnalysisValues.js +14 -18
- package/dist/domain/errors.js +33 -54
- package/dist/domain/eventProcessTree.js +101 -90
- package/dist/domain/evidence.js +2 -10
- package/dist/domain/evidenceBundle.js +3 -5
- package/dist/domain/evidenceCompletionLedger.js +6 -8
- package/dist/domain/functionComparison.js +4 -14
- package/dist/domain/functionComparisonNormalization.js +8 -8
- package/dist/domain/functionComparisonResults.js +25 -15
- package/dist/domain/functionComparisonSchemas.js +49 -33
- package/dist/domain/functionDossierEvidence.js +31 -151
- package/dist/domain/hopperStartupFailure.js +1 -1
- package/dist/domain/hopperValues.js +17 -141
- package/dist/domain/inputIssueProjection.js +4 -1
- package/dist/domain/interfaceBuilderGraph.js +654 -0
- package/dist/domain/javascriptApplicationAnalysis.js +8 -112
- package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
- package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
- package/dist/domain/javascriptApplicationGraph.js +3 -13
- package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
- package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
- package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
- package/dist/domain/javascriptApplicationVersionItems.js +120 -53
- package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
- package/dist/domain/javascriptAstFingerprint.js +25 -58
- package/dist/domain/javascriptAstValues.js +9 -0
- package/dist/domain/javascriptExportInstrumentation.js +2 -4
- package/dist/domain/javascriptExportShapeComparison.js +6 -7
- package/dist/domain/javascriptExportShapeComparisonSchemas.js +70 -77
- package/dist/domain/javascriptExportShapeSelection.js +17 -19
- package/dist/domain/javascriptFeatureSeed.js +20 -12
- package/dist/domain/javascriptFeatureTrace.js +13 -67
- package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
- package/dist/domain/javascriptFeatureTraversal.js +1 -44
- package/dist/domain/javascriptNativeHandoff.js +1 -1
- package/dist/domain/javascriptReplay.js +100 -101
- package/dist/domain/javascriptRuntimeLoadState.js +3 -8
- package/dist/domain/javascriptRuntimeObservation.js +43 -103
- package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
- package/dist/domain/javascriptRuntimeReconciliationActive.js +80 -0
- package/dist/domain/javascriptRuntimeReconciliationGraph.js +21 -33
- package/dist/domain/javascriptRuntimeReconciliationMatching.js +75 -61
- package/dist/domain/javascriptRuntimeReconciliationParsing.js +21 -46
- package/dist/domain/javascriptRuntimeReconciliationResult.js +25 -19
- package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
- package/dist/domain/javascriptRuntimeReconciliationSchemas.js +34 -49
- package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
- package/dist/domain/javascriptSemanticAnalysis.js +12 -45
- package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
- package/dist/domain/javascriptSemanticCallResolution.js +6 -16
- package/dist/domain/javascriptSemanticCalls.js +5 -32
- package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
- package/dist/domain/javascriptSemanticCoverage.js +11 -0
- package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
- package/dist/domain/javascriptSemanticDataEffects.js +1 -11
- package/dist/domain/javascriptSemanticFingerprints.js +3 -5
- package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
- package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
- package/dist/domain/javascriptSemanticIr.js +1 -29
- package/dist/domain/javascriptSemanticObjects.js +1 -5
- package/dist/domain/javascriptSemanticPrimitives.js +2 -9
- package/dist/domain/javascriptSemanticProjection.js +0 -18
- package/dist/domain/javascriptSemanticPromises.js +9 -16
- package/dist/domain/javascriptSemanticProvenance.js +16 -19
- package/dist/domain/javascriptSemanticQuery.js +17 -139
- package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
- package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
- package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
- package/dist/domain/javascriptSemanticResources.js +1 -6
- package/dist/domain/javascriptSemanticReturns.js +10 -27
- package/dist/domain/javascriptSemanticValueTypes.js +1 -0
- package/dist/domain/javascriptSemanticValues.js +44 -62
- package/dist/domain/javascriptStaticAnalysis.js +21 -43
- package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
- package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
- package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
- package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
- package/dist/domain/javascriptStaticAnalysisState.js +1 -5
- package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
- package/dist/domain/jsonShape.js +7 -33
- package/dist/domain/localPath.js +7 -0
- package/dist/domain/managedApplicationGraph.js +9 -41
- package/dist/domain/managedApplicationGraphCoverage.js +24 -156
- package/dist/domain/managedApplicationGraphNodes.js +10 -13
- package/dist/domain/managedArtifact.js +14 -27
- package/dist/domain/managedMemberComparison.js +90 -92
- package/dist/domain/managedMemberComparisonCoverage.js +11 -33
- package/dist/domain/managedMemberComparisonItems.js +221 -0
- package/dist/domain/managedMemberComparisonMatch.js +8 -208
- package/dist/domain/managedNativeVerification.js +3 -6
- package/dist/domain/managedNativeVerificationMatch.js +55 -59
- package/dist/domain/managedNativeVerificationSchemas.js +83 -47
- package/dist/domain/managedReconstruction.js +19 -23
- package/dist/domain/managedRuntimeCorrelation.js +6 -9
- package/dist/domain/nativeApiBoundary.js +17 -14
- package/dist/domain/nativeInspection.js +0 -2
- package/dist/domain/nativeInvestigationGraph.js +351 -0
- package/dist/domain/nativeValueFlow.js +61 -0
- package/dist/domain/nodeRuntimeCharacterization.js +15 -18
- package/dist/domain/objcSwiftMetadata.js +254 -0
- package/dist/domain/peInspection.js +1 -1
- package/dist/domain/permissionPolicy.js +13 -0
- package/dist/domain/processCapture.js +76 -113
- package/dist/domain/processCaptureExample.js +68 -0
- package/dist/domain/processCaptureParsing.js +21 -0
- package/dist/domain/processCaptureReactiveSchema.js +68 -0
- package/dist/domain/processCaptureReactiveValidation.js +8 -3
- package/dist/domain/processCaptureValidation.js +8 -10
- package/dist/domain/processComparison.js +12 -16
- package/dist/domain/processObservation.js +5 -6
- package/dist/domain/processReactiveMatching.js +32 -46
- package/dist/domain/processReactiveRuntime.js +4 -8
- package/dist/domain/processReactiveScenario.js +28 -94
- package/dist/domain/processReactiveScenarioPreflight.js +5 -30
- package/dist/domain/processReactiveTransition.js +42 -21
- package/dist/domain/processScenario.js +62 -93
- package/dist/domain/processTraceComparison.js +0 -7
- package/dist/domain/processTraceEvaluation.js +14 -4
- package/dist/domain/processTraceSpecification.js +11 -17
- package/dist/domain/protocolCapture.js +11 -9
- package/dist/domain/reconstructionCoverage.js +62 -129
- package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
- package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
- package/dist/domain/reconstructionReadiness.js +1 -2
- package/dist/domain/reconstructionReadinessSchemas.js +66 -40
- package/dist/domain/reconstructionUnknowns.js +3 -3
- package/dist/domain/reconstructionVerification.js +13 -47
- package/dist/domain/reconstructionVerificationSchemas.js +50 -38
- package/dist/domain/referenceSourceGraph.js +53 -61
- package/dist/domain/referenceSourceImportParsing.js +3 -7
- package/dist/domain/replayMachine.js +19 -31
- package/dist/domain/replayMachineRun.js +15 -63
- package/dist/domain/replayMachineRuntime.js +46 -44
- package/dist/domain/replayMachineValues.js +84 -0
- package/dist/domain/residualUnknown.js +25 -30
- package/dist/domain/runtimeCharacterization.js +15 -16
- package/dist/domain/runtimeIdentification.js +48 -47
- package/dist/domain/sourceToBundleComparison.js +11 -87
- package/dist/domain/sourceToBundleComparisonSchemas.js +25 -50
- package/dist/domain/sourceToBundleSignals.js +11 -16
- package/dist/domain/staticRuntimeCorrelation.js +44 -54
- package/dist/domain/symbolAnalysis.js +10 -19
- package/dist/domain/unicodeCodePointOrder.js +12 -0
- package/dist/domain/webBundleAnalysis.js +70 -99
- package/dist/domain/webBundleAnalyzer.js +2 -4
- package/dist/domain/webBundleAnalyzerAst.js +0 -13
- package/dist/domain/webBundleAnalyzerInspection.js +26 -52
- package/dist/domain/webBundleAnalyzerResult.js +7 -24
- package/dist/domain/webCaptureDiff.js +48 -85
- package/dist/domain/webCaptureDiffSchemas.js +86 -0
- package/dist/domain/webContentArtifact.js +1 -10
- package/dist/domain/webMcpDiscovery.js +3 -14
- package/dist/domain/webScreenshot.js +58 -34
- package/dist/domain/zipPackageFormat.js +7 -0
- package/dist/dotnet/ManagedArtifactInspector.js +17 -50
- package/dist/dotnet/ManagedMemberInspector.js +27 -58
- package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
- package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
- package/dist/dotnet/ManagedMemberRows.js +16 -16
- package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
- package/dist/dotnet/ManagedMetadataInventory.js +21 -30
- package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
- package/dist/dotnet/ManagedMetadataLayout.js +3 -5
- package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
- package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
- package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -42
- package/dist/dotnet/ManagedPeReader.js +2 -2
- package/dist/dotnet/ManagedStaticProvider.js +13 -71
- package/dist/generatedMcpToolCatalog.js +1 -1
- package/dist/generatedPackageMetadata.js +1 -1
- package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
- package/dist/ghidra/GhidraClient.js +5 -13
- package/dist/ghidra/GhidraClientStartup.js +1 -1
- package/dist/ghidra/GhidraClientWire.js +9 -5
- package/dist/ghidra/GhidraDefaults.js +0 -18
- package/dist/ghidra/GhidraDiagnostics.js +0 -2
- package/dist/ghidra/GhidraDoctor.js +16 -12
- package/dist/ghidra/GhidraFunctionValues.js +67 -108
- package/dist/ghidra/GhidraInstallation.js +98 -42
- package/dist/ghidra/GhidraInventoryValues.js +18 -77
- package/dist/ghidra/GhidraLauncher.js +0 -8
- package/dist/ghidra/GhidraProvider.js +32 -31
- package/dist/ghidra/GhidraProviderCapabilities.js +11 -48
- package/dist/ghidra/GhidraRequestQueue.js +6 -30
- package/dist/ghidra/GhidraResponseBuffer.js +1 -7
- package/dist/ghidra/GhidraSessionValues.js +0 -2
- package/dist/ghidra/GhidraSocketConnection.js +1 -1
- package/dist/ghidra/GhidraTransport.js +4 -7
- package/dist/ghidra/protocol.js +19 -42
- package/dist/hopper/BridgeLauncher.js +115 -37
- package/dist/hopper/HopperAnalysisProfile.js +3 -5
- package/dist/hopper/HopperCleanup.js +11 -9
- package/dist/hopper/HopperClient.js +5 -8
- package/dist/hopper/HopperProcessDiagnostic.js +2 -2
- package/dist/hopper/HopperProvider.js +0 -30
- package/dist/hopper/HopperRequestQueue.js +21 -40
- package/dist/hopper/HopperResponseStream.js +1 -9
- package/dist/hopper/HopperSessionValues.js +3 -2
- package/dist/hopper/HopperTargetLease.js +119 -0
- package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
- package/dist/hopper/LinuxPrivateDisplayProbe.js +21 -26
- package/dist/hopper/protocol.js +6 -4
- package/dist/main/reload.js +1 -9
- package/dist/main/shutdown.js +1 -1
- package/dist/main/state.js +0 -23
- package/dist/main/transport.js +27 -39
- package/dist/main.js +17 -15
- package/dist/mcpDoctor.js +27 -69
- package/dist/native/CommandRunner.js +18 -25
- package/dist/native/NativeMacOSProvider.js +13 -38
- package/dist/native/NativeMachoInspection.js +1 -1
- package/dist/process/BoundedFileBytes.js +17 -0
- package/dist/process/ExecFileOutput.js +11 -0
- package/dist/process/PendingOperations.js +8 -6
- package/dist/process/PrivateRuntimeRoot.js +17 -0
- package/dist/process/ProcessOwnership.js +67 -130
- package/dist/process/ProcessOwnershipIdentity.js +13 -0
- package/dist/process/ProcessOwnershipObservation.js +87 -0
- package/dist/process/ProcessOwnershipProcessTree.js +22 -0
- package/dist/process/ProviderDeadline.js +8 -12
- package/dist/process/ProviderProcess.js +7 -28
- package/dist/process/WindowsAuthority.js +32 -0
- package/dist/reference/ReferenceSourceReader.js +8 -24
- package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
- package/dist/reference/ReferenceSourceReaderFile.js +13 -31
- package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
- package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
- package/dist/replay/JavaScriptReplayWorker.js +95 -13
- package/dist/replay/JavaScriptReplayWorkerTypes.js +1 -0
- package/dist/replay/LinuxJavaScriptReplayRunner.js +42 -43
- package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
- package/dist/replay/LinuxRuntimeClosure.js +1 -3
- package/dist/replay/ReplayOutcome.js +27 -18
- package/dist/replay/ReplayProcessLifecycle.js +32 -7
- package/dist/replay/ReplaySeccompFile.js +29 -0
- package/dist/replay/ReplayWorkerProtocol.js +33 -30
- package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
- package/dist/server/ProcessCaptureElicitation.js +4 -8
- package/dist/server/createServer.js +145 -119
- package/dist/server/mcpClientMetadata.js +32 -0
- package/dist/server/promptCompletion.js +37 -61
- package/dist/server/recordDerivedEvidence.js +1 -1
- package/dist/server/registerApplicationTools/characterization.js +10 -21
- package/dist/server/registerApplicationTools/compareExportShapes.js +6 -16
- package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -15
- package/dist/server/registerApplicationTools/compareVersions.js +6 -16
- package/dist/server/registerApplicationTools/controlledReplay.js +8 -15
- package/dist/server/registerApplicationTools/coverage.js +7 -78
- package/dist/server/registerApplicationTools/helpers.js +1 -13
- package/dist/server/registerApplicationTools/obligationLedger.js +4 -8
- package/dist/server/registerApplicationTools/traceFeature.js +6 -15
- package/dist/server/registerApplicationTools/traceSemantics.js +5 -13
- package/dist/server/registerApplicationTools.js +0 -2
- package/dist/server/registerArtifactComparisonTool.js +27 -35
- package/dist/server/registerBrowserScenarioTool.js +3 -8
- package/dist/server/registerBrowserTools.js +36 -81
- package/dist/server/registerBundleComparisonTool.js +10 -16
- package/dist/server/registerCloseLifecycleTool.js +5 -27
- package/dist/server/registerElectronTools.js +29 -65
- package/dist/server/registerEnhancedTools.js +118 -127
- package/dist/server/registerEvidenceTools.js +19 -30
- package/dist/server/registerFunctionComparisonTool.js +35 -34
- package/dist/server/registerInvestigationTools/helpers.js +3 -32
- package/dist/server/registerInvestigationTools.js +36 -148
- package/dist/server/registerJavaScriptRuntimeObservationTools.js +15 -27
- package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +16 -23
- package/dist/server/registerManagedWorkflowTools/contract.js +2 -3
- package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
- package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -14
- package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +4 -14
- package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +11 -20
- package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +10 -21
- package/dist/server/registerOfficialTools.js +8 -51
- package/dist/server/registerProcessComparisonTool.js +43 -38
- package/dist/server/registerPrompts.js +19 -17
- package/dist/server/registerReplayMachineTool.js +4 -10
- package/dist/server/registerSessionRecordTools.js +36 -153
- package/dist/server/registerSessionStatusTool.js +18 -96
- package/dist/server/registerSessionTools.js +34 -91
- package/dist/server/sessionAvailabilityPolicy.js +2 -3
- package/dist/server/sessionEvidence.js +9 -15
- package/dist/server/sessionToolPolicies.js +1 -13
- package/dist/server/toolRegistrationOptions.js +4 -192
- package/dist/server/toolResult.js +15 -67
- package/dist/serverIdentity.js +0 -20
- package/install.sh +1 -1
- package/package.json +27 -15
- package/scripts/electron-active-hook-boundaries.cjs +394 -0
- package/scripts/electron-active-hook.cjs +469 -0
- package/scripts/hopper-demo-x11.py +13 -32
- package/scripts/rea.mjs +1 -11
- package/skills/reverse-engineer-anything/SKILL.md +46 -11
- package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
- package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
- package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
- package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -180
- package/dist/application/BoundedJsonFiles.js +0 -86
- package/dist/application/CrossVersionInventory.js +0 -128
- package/dist/application/CrossVersionInvestigation.js +0 -301
- package/dist/application/CrossVersionInvestigationCollections.js +0 -23
- package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
- package/dist/application/CrossVersionInvestigationReplay.js +0 -170
- package/dist/application/DeferredFileAuthorization.js +0 -61
- package/dist/application/DoctorProjection.js +0 -43
- package/dist/application/EnhancedToolPagination.js +0 -22
- package/dist/application/EvidenceReferenceResolver.js +0 -26
- package/dist/application/InvestigationWorkspaceStore.js +0 -204
- package/dist/application/ProcessPairedExperiment.js +0 -72
- package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
- package/dist/application/ReconstructionReadinessService.js +0 -48
- package/dist/cliInvestigationCommands.js +0 -173
- package/dist/domain/boundedCartesianProjection.js +0 -15
- package/dist/domain/investigationWorkspace.js +0 -346
- package/dist/domain/jsonLimits.js +0 -26
- package/dist/domain/knownPageCoverage.js +0 -21
- package/dist/domain/processPairedExperiment.js +0 -128
- package/dist/server/DynamicToolAvailability.js +0 -70
- package/dist/server/LazyToolCatalog.js +0 -134
- package/dist/server/hydrateServerTools.js +0 -191
- package/dist/server/javascriptApplicationResult.js +0 -106
- package/dist/server/permissionFailure.js +0 -12
- package/dist/server/registerApplicationTools/readiness.js +0 -55
- package/dist/server/registerEvidenceResources.js +0 -315
- package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
- package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
- package/dist/server/registerReconstructionReadinessResource.js +0 -32
- package/dist/server/toolInputValidation.js +0 -77
- package/scripts/package-runner-bootstrap.mjs +0 -72
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as t from "@babel/types";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { sanitizeEndpointCandidate } from "./browserObservation.js";
|
|
3
|
+
import { addFindingOnce, addLocatedFinding, moduleAtOffset, } from "./javascriptStaticAnalysisFindings.js";
|
|
4
|
+
import { STATIC_ROUTE_CALL_NAMES, argumentValue, calleeName, endpointArgument as endpointArgumentHelper, prefixedArgument, propertyName, range, rangeForOffsets, sourceSlice, staticPath, staticPathResolutionContext, storageKind, stringValue, } from "./javascriptStaticAnalysisHelpers.js";
|
|
4
5
|
/** Inspect one call or new expression for references, endpoints, storage, and roles. */
|
|
5
6
|
export const inspectCall = (source, node, context) => {
|
|
6
7
|
const { accumulator } = context;
|
|
@@ -91,9 +92,7 @@ const vitePreloadDependencyTable = (source) => {
|
|
|
91
92
|
return [];
|
|
92
93
|
return [
|
|
93
94
|
...body.matchAll(/"([^"\\]*(?:\\.[^"\\]*)*)"|'([^'\\]*(?:\\.[^'\\]*)*)'/gu),
|
|
94
|
-
]
|
|
95
|
-
.map((literal) => (literal[1] ?? literal[2] ?? "").slice(0, 4_096))
|
|
96
|
-
.slice(0, 256);
|
|
95
|
+
].map((literal) => literal[1] ?? literal[2] ?? "");
|
|
97
96
|
};
|
|
98
97
|
const inspectEndpointCall = (node, name, first, context) => {
|
|
99
98
|
const route = STATIC_ROUTE_CALL_NAMES.some((candidate) => name === candidate || name.endsWith(`.${candidate}`));
|
|
@@ -161,18 +160,20 @@ const inspectStorageCall = (node, name, first, context) => {
|
|
|
161
160
|
});
|
|
162
161
|
};
|
|
163
162
|
export const addReference = (context, input) => {
|
|
164
|
-
const
|
|
165
|
-
const
|
|
166
|
-
?
|
|
167
|
-
|
|
163
|
+
const specifier = input.specifier ?? null;
|
|
164
|
+
const reference = specifier === null
|
|
165
|
+
? {
|
|
166
|
+
specifier: null,
|
|
167
|
+
expression: sourceSlice(context.source, input.node),
|
|
168
|
+
}
|
|
169
|
+
: { specifier, expression: null };
|
|
168
170
|
addLocatedFinding(context, {
|
|
169
171
|
collection: context.accumulator.references,
|
|
170
|
-
key: `reference\0${input.kind}\0${
|
|
172
|
+
key: `reference\0${input.kind}\0${reference.specifier ?? reference.expression}`,
|
|
171
173
|
node: input.node,
|
|
172
174
|
value: {
|
|
173
175
|
kind: input.kind,
|
|
174
|
-
|
|
175
|
-
expression,
|
|
176
|
+
...reference,
|
|
176
177
|
module_key: null,
|
|
177
178
|
location: range(input.node),
|
|
178
179
|
},
|
|
@@ -184,19 +185,19 @@ const addEndpoint = (context, input) => addLocatedFinding(context, {
|
|
|
184
185
|
node: input.node,
|
|
185
186
|
value: {
|
|
186
187
|
kind: input.kind,
|
|
187
|
-
value:
|
|
188
|
+
value: sanitizeEndpointCandidate(input.value),
|
|
188
189
|
mechanism: input.mechanism,
|
|
189
190
|
module_key: null,
|
|
190
191
|
location: range(input.node),
|
|
191
192
|
},
|
|
192
193
|
});
|
|
193
|
-
export const addSourceMapDirectives = (source, accumulator
|
|
194
|
+
export const addSourceMapDirectives = (source, accumulator) => {
|
|
194
195
|
for (const match of source.matchAll(/\/\/[#@]\s*sourceMappingURL\s*=\s*([^\s]+)/gu)) {
|
|
195
|
-
const declared = match[1]
|
|
196
|
+
const declared = match[1];
|
|
196
197
|
if (declared === undefined)
|
|
197
198
|
continue;
|
|
198
199
|
const start = match.index;
|
|
199
200
|
const location = rangeForOffsets(source, start, start + match[0].length);
|
|
200
|
-
|
|
201
|
+
addFindingOnce(accumulator, `source-map\0${declared}`, () => accumulator.sourceMaps.push({ declared_url: declared, location }));
|
|
201
202
|
}
|
|
202
203
|
};
|
|
@@ -1,16 +1,12 @@
|
|
|
1
|
-
/** Add one module-attributable finding
|
|
2
|
-
export const addLocatedFinding = (context, input) =>
|
|
1
|
+
/** Add one module-attributable finding once per source location. */
|
|
2
|
+
export const addLocatedFinding = (context, input) => addFindingOnce(context.accumulator, `${input.key}\0${String(input.node.start)}`, () => input.collection.push({
|
|
3
3
|
offset: input.node.start ?? -1,
|
|
4
4
|
value: input.value,
|
|
5
5
|
}));
|
|
6
6
|
/** Reserve one deterministic finding key before mutating an accumulator. */
|
|
7
|
-
export const
|
|
7
|
+
export const addFindingOnce = (accumulator, key, add) => {
|
|
8
8
|
if (accumulator.seen.has(key))
|
|
9
9
|
return;
|
|
10
|
-
if (accumulatedFindingCount(accumulator) >= maximum) {
|
|
11
|
-
accumulator.droppedFindings += 1;
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
10
|
accumulator.seen.add(key);
|
|
15
11
|
add();
|
|
16
12
|
};
|
|
@@ -25,15 +21,3 @@ export const moduleAtOffset = (offset, modules) => {
|
|
|
25
21
|
return undefined;
|
|
26
22
|
return modules.find(({ start, end }) => offset >= start && offset <= end);
|
|
27
23
|
};
|
|
28
|
-
const accumulatedFindingCount = (accumulator) => accumulator.references.length +
|
|
29
|
-
accumulator.endpoints.length +
|
|
30
|
-
accumulator.storage.length +
|
|
31
|
-
accumulator.roles.length +
|
|
32
|
-
accumulator.sourceMaps.length +
|
|
33
|
-
accumulator.registrations.length +
|
|
34
|
-
accumulator.browserWindows.length +
|
|
35
|
-
accumulator.contextBridgeApis.length +
|
|
36
|
-
accumulator.ipc.length +
|
|
37
|
-
accumulator.senderValidations.length +
|
|
38
|
-
accumulator.utilityProcesses.length +
|
|
39
|
-
accumulator.nativeAddonBindings.length;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { posix } from "node:path";
|
|
3
3
|
import * as t from "@babel/types";
|
|
4
|
-
import {
|
|
4
|
+
import { propertyName } from "./javascriptAstValues.js";
|
|
5
|
+
export { propertyName } from "./javascriptAstValues.js";
|
|
5
6
|
/** Explicit result for source text that Babel cannot parse. */
|
|
6
7
|
export const failedJavaScriptStaticAnalysis = () => ({
|
|
7
8
|
parse_status: "failed",
|
|
8
9
|
parse_error_count: 1,
|
|
9
10
|
visited_ast_nodes: 0,
|
|
10
|
-
dropped_findings: 0,
|
|
11
11
|
references: [],
|
|
12
12
|
endpoints: [],
|
|
13
13
|
storage: [],
|
|
@@ -30,36 +30,30 @@ export const failedJavaScriptStaticAnalysis = () => ({
|
|
|
30
30
|
});
|
|
31
31
|
/** Normalize one Babel call/new argument into the inert node shared by inspectors. */
|
|
32
32
|
export const argumentNode = (argument) => argument !== null && t.isNode(argument) ? argument : undefined;
|
|
33
|
-
/** Recognize the
|
|
33
|
+
/** Recognize the runtime name for a Webpack/Rspack push call. */
|
|
34
34
|
export const chunkRuntime = (call) => {
|
|
35
35
|
if (!t.isMemberExpression(call.callee) &&
|
|
36
36
|
!t.isOptionalMemberExpression(call.callee))
|
|
37
37
|
return undefined;
|
|
38
38
|
if (propertyName(call.callee.property) !== "push")
|
|
39
39
|
return undefined;
|
|
40
|
-
return findChunkRuntime(call.callee.object
|
|
40
|
+
return findChunkRuntime(call.callee.object);
|
|
41
41
|
};
|
|
42
|
-
const findChunkRuntime = (node
|
|
43
|
-
if (depth >= 128)
|
|
44
|
-
return undefined;
|
|
42
|
+
const findChunkRuntime = (node) => {
|
|
45
43
|
if (t.isIdentifier(node) && /(?:webpack|rspack)Chunk/iu.test(node.name))
|
|
46
|
-
return node.name
|
|
44
|
+
return node.name;
|
|
47
45
|
if (t.isMemberExpression(node) || t.isOptionalMemberExpression(node)) {
|
|
48
46
|
const property = propertyName(node.property);
|
|
49
47
|
if (/(?:webpack|rspack)Chunk/iu.test(property))
|
|
50
|
-
return property
|
|
51
|
-
return t.isNode(node.object)
|
|
52
|
-
? findChunkRuntime(node.object, depth + 1)
|
|
53
|
-
: undefined;
|
|
48
|
+
return property;
|
|
49
|
+
return t.isNode(node.object) ? findChunkRuntime(node.object) : undefined;
|
|
54
50
|
}
|
|
55
51
|
if (t.isAssignmentExpression(node))
|
|
56
|
-
return
|
|
57
|
-
findChunkRuntime(node.right, depth + 1));
|
|
52
|
+
return findChunkRuntime(node.left) ?? findChunkRuntime(node.right);
|
|
58
53
|
if (t.isLogicalExpression(node) || t.isBinaryExpression(node))
|
|
59
|
-
return
|
|
60
|
-
findChunkRuntime(node.right, depth + 1));
|
|
54
|
+
return findChunkRuntime(node.left) ?? findChunkRuntime(node.right);
|
|
61
55
|
if (t.isParenthesizedExpression(node) || t.isTSAsExpression(node))
|
|
62
|
-
return findChunkRuntime(node.expression
|
|
56
|
+
return findChunkRuntime(node.expression);
|
|
63
57
|
return undefined;
|
|
64
58
|
};
|
|
65
59
|
/** Return a literal function factory from one module-table property. */
|
|
@@ -72,60 +66,57 @@ export const moduleFactory = (property) => {
|
|
|
72
66
|
return property.value;
|
|
73
67
|
return undefined;
|
|
74
68
|
};
|
|
75
|
-
/** Derive a
|
|
69
|
+
/** Derive a literal or explicitly computed module key. */
|
|
76
70
|
export const modulePropertyName = (property) => t.isObjectMethod(property) || t.isObjectProperty(property)
|
|
77
71
|
? property.computed &&
|
|
78
72
|
!t.isStringLiteral(property.key) &&
|
|
79
73
|
!t.isNumericLiteral(property.key)
|
|
80
74
|
? `[computed@${String(property.start ?? -1)}]`
|
|
81
|
-
: propertyName(property.key)
|
|
75
|
+
: propertyName(property.key) ||
|
|
82
76
|
`[unknown@${String(property.start ?? -1)}]`
|
|
83
77
|
: `[unknown@${String(property.start ?? -1)}]`;
|
|
84
78
|
/** Read the factory-local bundler require parameter when declared. */
|
|
85
79
|
export const factoryRequireName = (factory) => {
|
|
86
80
|
const parameter = factory.params[2];
|
|
87
|
-
return t.isIdentifier(parameter) ? parameter.name
|
|
81
|
+
return t.isIdentifier(parameter) ? parameter.name : null;
|
|
88
82
|
};
|
|
89
|
-
/** Collect
|
|
90
|
-
export const staticArrayValues = (array
|
|
83
|
+
/** Collect all unique static literal values from an array. */
|
|
84
|
+
export const staticArrayValues = (array) => {
|
|
91
85
|
const staticValues = array.elements.flatMap((element) => {
|
|
92
86
|
const value = argumentValue(element);
|
|
93
|
-
return value === undefined ? [] : [value
|
|
87
|
+
return value === undefined ? [] : [value];
|
|
94
88
|
});
|
|
95
89
|
const values = [...new Set(staticValues)].sort(compareCodePoints);
|
|
96
90
|
return {
|
|
97
|
-
values
|
|
98
|
-
omitted: Math.max(0, values.length - maximum),
|
|
91
|
+
values,
|
|
99
92
|
unknown: array.elements.length - staticValues.length,
|
|
100
93
|
};
|
|
101
94
|
};
|
|
102
|
-
/** Resolve a
|
|
103
|
-
export const staticPath = (node) => staticPathAt(node
|
|
95
|
+
/** Resolve a path composed only from inert literal syntax. */
|
|
96
|
+
export const staticPath = (node) => staticPathAt(node);
|
|
104
97
|
/** Classify whether inert path syntax is a module specifier or file expression. */
|
|
105
|
-
export const staticPathResolutionContext = (node) => isFilesystemPathExpression(node
|
|
98
|
+
export const staticPathResolutionContext = (node) => isFilesystemPathExpression(node)
|
|
106
99
|
? "filesystem-expression"
|
|
107
100
|
: "module-specifier";
|
|
108
|
-
const staticPathAt = (node
|
|
109
|
-
if (depth >= 128)
|
|
110
|
-
return undefined;
|
|
101
|
+
const staticPathAt = (node) => {
|
|
111
102
|
if (t.isStringLiteral(node))
|
|
112
|
-
return node.value
|
|
103
|
+
return node.value;
|
|
113
104
|
if (t.isTemplateLiteral(node) && node.expressions.length === 0) {
|
|
114
105
|
const value = node.quasis[0]?.value.cooked ?? node.quasis[0]?.value.raw;
|
|
115
|
-
return value
|
|
106
|
+
return value;
|
|
116
107
|
}
|
|
117
108
|
if (t.isBinaryExpression(node, { operator: "+" })) {
|
|
118
|
-
const left = staticPathAt(node.left
|
|
119
|
-
const right = staticPathAt(node.right
|
|
109
|
+
const left = staticPathAt(node.left);
|
|
110
|
+
const right = staticPathAt(node.right);
|
|
120
111
|
return left === undefined || right === undefined
|
|
121
112
|
? undefined
|
|
122
|
-
: `${left}${right}
|
|
113
|
+
: `${left}${right}`;
|
|
123
114
|
}
|
|
124
115
|
if (t.isCallExpression(node) || t.isNewExpression(node))
|
|
125
|
-
return staticCallPath(node
|
|
116
|
+
return staticCallPath(node);
|
|
126
117
|
return undefined;
|
|
127
118
|
};
|
|
128
|
-
const staticCallPath = (node
|
|
119
|
+
const staticCallPath = (node) => {
|
|
129
120
|
const name = calleeName(node.callee);
|
|
130
121
|
if (name === "URL" || name.endsWith(".URL"))
|
|
131
122
|
return isFileIdentity(argumentNode(node.arguments[1]))
|
|
@@ -133,9 +124,7 @@ const staticCallPath = (node, depth) => {
|
|
|
133
124
|
: undefined;
|
|
134
125
|
if (name === "fileURLToPath" || name.endsWith(".fileURLToPath")) {
|
|
135
126
|
const argument = argumentNode(node.arguments[0]);
|
|
136
|
-
return argument === undefined
|
|
137
|
-
? undefined
|
|
138
|
-
: staticPathAt(argument, depth + 1);
|
|
127
|
+
return argument === undefined ? undefined : staticPathAt(argument);
|
|
139
128
|
}
|
|
140
129
|
if ((name === "dirname" || name.endsWith(".dirname")) &&
|
|
141
130
|
isFileIdentity(argumentNode(node.arguments[0])))
|
|
@@ -146,25 +135,21 @@ const staticCallPath = (node, depth) => {
|
|
|
146
135
|
for (const argument of node.arguments) {
|
|
147
136
|
if (isDirectoryIdentity(argumentNode(argument)))
|
|
148
137
|
continue;
|
|
149
|
-
const value = t.isNode(argument)
|
|
150
|
-
? staticPathAt(argument, depth + 1)
|
|
151
|
-
: undefined;
|
|
138
|
+
const value = t.isNode(argument) ? staticPathAt(argument) : undefined;
|
|
152
139
|
if (value === undefined)
|
|
153
140
|
return undefined;
|
|
154
141
|
parts.push(value);
|
|
155
142
|
}
|
|
156
|
-
return parts.length === 0 ? undefined : posix.join(...parts)
|
|
143
|
+
return parts.length === 0 ? undefined : posix.join(...parts);
|
|
157
144
|
};
|
|
158
|
-
const isFilesystemPathExpression = (node
|
|
159
|
-
if (depth >= 128)
|
|
160
|
-
return false;
|
|
145
|
+
const isFilesystemPathExpression = (node) => {
|
|
161
146
|
if (t.isStringLiteral(node))
|
|
162
147
|
return node.value.startsWith("/");
|
|
163
148
|
if (isFileIdentity(node) || isDirectoryIdentity(node))
|
|
164
149
|
return true;
|
|
165
150
|
if (t.isBinaryExpression(node, { operator: "+" }))
|
|
166
|
-
return (isFilesystemPathExpression(node.left
|
|
167
|
-
isFilesystemPathExpression(node.right
|
|
151
|
+
return (isFilesystemPathExpression(node.left) ||
|
|
152
|
+
isFilesystemPathExpression(node.right));
|
|
168
153
|
if (t.isCallExpression(node) || t.isNewExpression(node)) {
|
|
169
154
|
const name = calleeName(node.callee);
|
|
170
155
|
if (name === "URL" || name.endsWith(".URL"))
|
|
@@ -172,11 +157,11 @@ const isFilesystemPathExpression = (node, depth) => {
|
|
|
172
157
|
if (name === "fileURLToPath" || name.endsWith(".fileURLToPath"))
|
|
173
158
|
return node.arguments.some((argument) => {
|
|
174
159
|
const value = argumentNode(argument);
|
|
175
|
-
return
|
|
160
|
+
return value !== undefined && isFilesystemPathExpression(value);
|
|
176
161
|
});
|
|
177
162
|
return node.arguments.some((argument) => {
|
|
178
163
|
const value = argumentNode(argument);
|
|
179
|
-
return
|
|
164
|
+
return value !== undefined && isFilesystemPathExpression(value);
|
|
180
165
|
});
|
|
181
166
|
}
|
|
182
167
|
return false;
|
|
@@ -235,38 +220,26 @@ export const storageKind = (name) => {
|
|
|
235
220
|
return "sqlite";
|
|
236
221
|
return undefined;
|
|
237
222
|
};
|
|
238
|
-
/** Produce a dotted
|
|
239
|
-
export const calleeName = (node) => calleeNameAt(node
|
|
240
|
-
const calleeNameAt = (node
|
|
241
|
-
if (depth >= 128)
|
|
242
|
-
return "[deep]";
|
|
223
|
+
/** Produce a dotted callee name from member syntax. */
|
|
224
|
+
export const calleeName = (node) => calleeNameAt(node);
|
|
225
|
+
const calleeNameAt = (node) => {
|
|
243
226
|
if (t.isIdentifier(node))
|
|
244
|
-
return node.name
|
|
227
|
+
return node.name;
|
|
245
228
|
if (t.isImport(node))
|
|
246
229
|
return "import";
|
|
247
230
|
if (t.isMemberExpression(node) || t.isOptionalMemberExpression(node)) {
|
|
248
|
-
const object = t.isNode(node.object)
|
|
249
|
-
? calleeNameAt(node.object, depth + 1)
|
|
250
|
-
: "";
|
|
231
|
+
const object = t.isNode(node.object) ? calleeNameAt(node.object) : "";
|
|
251
232
|
const property = propertyName(node.property);
|
|
252
|
-
return
|
|
233
|
+
return object === "" ? property : `${object}.${property}`;
|
|
253
234
|
}
|
|
254
235
|
return "";
|
|
255
236
|
};
|
|
256
|
-
/** Read a literal property name without evaluating computed syntax. */
|
|
257
|
-
export const propertyName = (node) => {
|
|
258
|
-
if (t.isIdentifier(node))
|
|
259
|
-
return node.name.slice(0, 4_096);
|
|
260
|
-
if (t.isStringLiteral(node) || t.isNumericLiteral(node))
|
|
261
|
-
return String(node.value).slice(0, 4_096);
|
|
262
|
-
return "";
|
|
263
|
-
};
|
|
264
237
|
/** Return a string literal value without evaluating an expression. */
|
|
265
|
-
export const stringValue = (node) => t.isStringLiteral(node) ? node.value
|
|
238
|
+
export const stringValue = (node) => (t.isStringLiteral(node) ? node.value : undefined);
|
|
266
239
|
/** Return a string or numeric argument literal. */
|
|
267
240
|
export const argumentValue = (node) => {
|
|
268
241
|
if (t.isStringLiteral(node) || t.isNumericLiteral(node))
|
|
269
|
-
return String(node.value)
|
|
242
|
+
return String(node.value);
|
|
270
243
|
return undefined;
|
|
271
244
|
};
|
|
272
245
|
/** Prefix a static argument value when one is available. */
|
|
@@ -274,7 +247,7 @@ export const prefixedArgument = (prefix, node) => {
|
|
|
274
247
|
const value = argumentValue(node);
|
|
275
248
|
return value === undefined ? undefined : `${prefix}${value}`;
|
|
276
249
|
};
|
|
277
|
-
/** Retain the exact
|
|
250
|
+
/** Retain the exact source span represented by an AST node. */
|
|
278
251
|
export const sourceSlice = (source, node) => typeof node.start !== "number" || typeof node.end !== "number"
|
|
279
252
|
? ""
|
|
280
253
|
: source.slice(node.start, node.end);
|
|
@@ -307,22 +280,8 @@ const pointForOffset = (source, offset) => {
|
|
|
307
280
|
};
|
|
308
281
|
/** Observe known bundler/framework marker strings without claiming dependency use. */
|
|
309
282
|
export const detectVendors = (source) => vendorPatterns.flatMap(({ name, patterns }) => patterns.some((pattern) => source.includes(pattern)) ? [name] : []);
|
|
310
|
-
/** Remove credentials, fragments, and query values from endpoint candidates. */
|
|
311
|
-
export const sanitizeCandidate = (value) => {
|
|
312
|
-
const bounded = value.slice(0, 4_096);
|
|
313
|
-
try {
|
|
314
|
-
const parsed = new URL(bounded, "https://rea.invalid");
|
|
315
|
-
const sanitized = sanitizeBrowserUrl(parsed.href).url;
|
|
316
|
-
return parsed.origin === "https://rea.invalid"
|
|
317
|
-
? sanitized.replace("https://rea.invalid", "")
|
|
318
|
-
: sanitized;
|
|
319
|
-
}
|
|
320
|
-
catch {
|
|
321
|
-
return bounded.split("#", 1)[0]?.split("?", 1)[0] ?? "";
|
|
322
|
-
}
|
|
323
|
-
};
|
|
324
283
|
/** Commit the static semantic content used to deduplicate registrations. */
|
|
325
|
-
export const registrationKey = (registration) => `${registration.runtime}\0${registration.chunk_keys.join("\0")}\0${String(registration.
|
|
284
|
+
export const registrationKey = (registration) => `${registration.runtime}\0${registration.chunk_keys.join("\0")}\0${String(registration.unknown_chunk_keys)}\0${registration.modules.map(({ module_key: key, source_sha256: digest }) => `${key}:${digest}`).join("\0")}`;
|
|
326
285
|
/** Sort values by a deterministic unique semantic key. */
|
|
327
286
|
export const sortedUnique = (values, key) => [...new Map(values.map((value) => [key(value), value])).values()].sort((left, right) => compareCodePoints(key(left), key(right)));
|
|
328
287
|
/** Hash exact UTF-8 source text. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Create isolated mutable state for one
|
|
1
|
+
/** Create isolated mutable state for one source analysis. */
|
|
2
2
|
export const createJavaScriptAnalysisAccumulator = () => ({
|
|
3
3
|
references: [],
|
|
4
4
|
endpoints: [],
|
|
@@ -15,9 +15,5 @@ export const createJavaScriptAnalysisAccumulator = () => ({
|
|
|
15
15
|
modules: [],
|
|
16
16
|
seen: new Set(),
|
|
17
17
|
visitedNodes: 0,
|
|
18
|
-
droppedFindings: 0,
|
|
19
|
-
moduleCount: 0,
|
|
20
18
|
unknownFindings: 0,
|
|
21
|
-
structuralTruncation: false,
|
|
22
|
-
truncated: false,
|
|
23
19
|
});
|
package/dist/domain/jsonShape.js
CHANGED
|
@@ -17,12 +17,9 @@ export const jsonShapeSchema = z.object({
|
|
|
17
17
|
types: z.array(jsonValueTypeSchema).min(1),
|
|
18
18
|
observations: z.number().int().min(1),
|
|
19
19
|
})),
|
|
20
|
-
truncated: z.boolean(),
|
|
21
20
|
});
|
|
22
21
|
/** Parse approved JSON and immediately discard values after iterative shape inference. */
|
|
23
|
-
export const inferJsonShape = (text
|
|
24
|
-
if (Buffer.byteLength(text) > limits.maximumBytes)
|
|
25
|
-
return null;
|
|
22
|
+
export const inferJsonShape = (text) => {
|
|
26
23
|
let root;
|
|
27
24
|
try {
|
|
28
25
|
root = JSON.parse(text);
|
|
@@ -34,28 +31,14 @@ export const inferJsonShape = (text, limits) => {
|
|
|
34
31
|
const pending = [{ value: root, path: "", depth: 0 }];
|
|
35
32
|
let nodeCount = 0;
|
|
36
33
|
let maxDepthObserved = 0;
|
|
37
|
-
let truncated = false;
|
|
38
34
|
while (pending.length > 0) {
|
|
39
35
|
const current = pending.pop();
|
|
40
36
|
if (current === undefined)
|
|
41
37
|
break;
|
|
42
|
-
if (nodeCount >= limits.maximumNodes) {
|
|
43
|
-
truncated = true;
|
|
44
|
-
break;
|
|
45
|
-
}
|
|
46
38
|
nodeCount += 1;
|
|
47
39
|
maxDepthObserved = Math.max(maxDepthObserved, current.depth);
|
|
48
|
-
if (current.depth >= limits.maximumDepth) {
|
|
49
|
-
if (hasChildren(current.value))
|
|
50
|
-
truncated = true;
|
|
51
|
-
continue;
|
|
52
|
-
}
|
|
53
40
|
if (Array.isArray(current.value)) {
|
|
54
|
-
|
|
55
|
-
const retained = Math.min(current.value.length, capacity);
|
|
56
|
-
if (retained < current.value.length)
|
|
57
|
-
truncated = true;
|
|
58
|
-
for (let index = retained - 1; index >= 0; index -= 1)
|
|
41
|
+
for (let index = current.value.length - 1; index >= 0; index -= 1)
|
|
59
42
|
pending.push({
|
|
60
43
|
value: current.value[index],
|
|
61
44
|
path: `${current.path}/*`,
|
|
@@ -66,16 +49,12 @@ export const inferJsonShape = (text, limits) => {
|
|
|
66
49
|
if (!isRecord(current.value))
|
|
67
50
|
continue;
|
|
68
51
|
const allEntries = Object.entries(current.value);
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (entries.length < allEntries.length)
|
|
72
|
-
truncated = true;
|
|
73
|
-
for (let index = entries.length - 1; index >= 0; index -= 1) {
|
|
74
|
-
const entry = entries[index];
|
|
52
|
+
for (let index = allEntries.length - 1; index >= 0; index -= 1) {
|
|
53
|
+
const entry = allEntries[index];
|
|
75
54
|
if (entry === undefined)
|
|
76
55
|
continue;
|
|
77
56
|
const [name, value] = entry;
|
|
78
|
-
const path = `${current.path}/${pointerName(name)}
|
|
57
|
+
const path = `${current.path}/${pointerName(name)}`;
|
|
79
58
|
const type = jsonValueType(value);
|
|
80
59
|
const existing = properties.get(path);
|
|
81
60
|
if (existing === undefined)
|
|
@@ -97,9 +76,7 @@ export const inferJsonShape = (text, limits) => {
|
|
|
97
76
|
types: [...value.types].sort(),
|
|
98
77
|
observations: value.observations,
|
|
99
78
|
}))
|
|
100
|
-
.sort((left, right) => left.path.localeCompare(right.path))
|
|
101
|
-
.slice(0, limits.maximumNodes),
|
|
102
|
-
truncated,
|
|
79
|
+
.sort((left, right) => left.path.localeCompare(right.path)),
|
|
103
80
|
});
|
|
104
81
|
};
|
|
105
82
|
const jsonValueType = (value) => {
|
|
@@ -118,8 +95,5 @@ const jsonValueType = (value) => {
|
|
|
118
95
|
return "object";
|
|
119
96
|
}
|
|
120
97
|
};
|
|
121
|
-
const hasChildren = (value) => Array.isArray(value)
|
|
122
|
-
? value.length > 0
|
|
123
|
-
: isRecord(value) && Object.keys(value).length > 0;
|
|
124
98
|
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
125
|
-
const pointerName = (value) => value.
|
|
99
|
+
const pointerName = (value) => value.replaceAll("~", "~0").replaceAll("/", "~1");
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { isAbsolute, relative, sep } from "node:path";
|
|
2
|
+
/** Test lexical containment on the host platform; callers must resolve symlinks first. */
|
|
3
|
+
export const isPathWithinRoot = (root, path) => {
|
|
4
|
+
const value = relative(root, path);
|
|
5
|
+
return (value === "" ||
|
|
6
|
+
(value !== ".." && !value.startsWith(`..${sep}`) && !isAbsolute(value)));
|
|
7
|
+
};
|
|
@@ -4,36 +4,17 @@ import { z } from "zod";
|
|
|
4
4
|
import { evidenceSchema, parseEvidence } from "./evidence.js";
|
|
5
5
|
import { createJavaScriptApplicationGraph, javascriptApplicationGraphSchema, } from "./javascriptApplicationGraph.js";
|
|
6
6
|
import { managedArtifactInspectionSchema, managedMemberInspectionSchema, managedNativeBoundaryInspectionSchema, } from "./managedArtifact.js";
|
|
7
|
-
import { assessManagedGraphOmissions, managedGraphEvidenceCoverage, managedGraphResultCoverage,
|
|
7
|
+
import { assessManagedGraphOmissions, managedGraphEvidenceCoverage, managedGraphResultCoverage, } from "./managedApplicationGraphCoverage.js";
|
|
8
8
|
import { addArtifactNode, addArtifactIdentityNodes, addBoundaryNodes, addMemberNodes, } from "./managedApplicationGraphNodes.js";
|
|
9
9
|
const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u);
|
|
10
10
|
const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u);
|
|
11
|
-
const
|
|
12
|
-
const managedApplicationGraphLimitsSchema = z.strictObject({
|
|
13
|
-
max_types: z.number().int().min(0).max(100_000).default(5_000),
|
|
14
|
-
max_methods: z.number().int().min(0).max(100_000).default(10_000),
|
|
15
|
-
max_fields: z.number().int().min(0).max(100_000).default(5_000),
|
|
16
|
-
max_pinvoke_imports: z.number().int().min(0).max(100_000).default(5_000),
|
|
17
|
-
max_native_implementations: z
|
|
18
|
-
.number()
|
|
19
|
-
.int()
|
|
20
|
-
.min(0)
|
|
21
|
-
.max(100_000)
|
|
22
|
-
.default(5_000),
|
|
23
|
-
});
|
|
11
|
+
const textSchema = z.string().min(1);
|
|
24
12
|
/** Authenticated managed Evidence records projected into the application graph. */
|
|
25
13
|
export const projectManagedApplicationGraphInputSchema = z
|
|
26
14
|
.strictObject({
|
|
27
15
|
managed_artifact: evidenceSchema.optional(),
|
|
28
16
|
managed_members: evidenceSchema.optional(),
|
|
29
17
|
managed_native_boundaries: evidenceSchema.optional(),
|
|
30
|
-
limits: managedApplicationGraphLimitsSchema.default({
|
|
31
|
-
max_types: 5_000,
|
|
32
|
-
max_methods: 10_000,
|
|
33
|
-
max_fields: 5_000,
|
|
34
|
-
max_pinvoke_imports: 5_000,
|
|
35
|
-
max_native_implementations: 5_000,
|
|
36
|
-
}),
|
|
37
18
|
})
|
|
38
19
|
.superRefine((input, context) => {
|
|
39
20
|
if (input.managed_artifact === undefined &&
|
|
@@ -46,7 +27,6 @@ export const projectManagedApplicationGraphInputSchema = z
|
|
|
46
27
|
});
|
|
47
28
|
/** Managed-code projection result containing a validated application graph. */
|
|
48
29
|
export const managedApplicationGraphResultSchema = z.strictObject({
|
|
49
|
-
schema_version: z.literal(1),
|
|
50
30
|
projection_id: z.string().regex(/^magp_[a-f0-9]{64}$/u),
|
|
51
31
|
root_artifact_sha256: digestSchema,
|
|
52
32
|
source_evidence: z.strictObject({
|
|
@@ -67,15 +47,10 @@ export const managedApplicationGraphResultSchema = z.strictObject({
|
|
|
67
47
|
}),
|
|
68
48
|
graph: javascriptApplicationGraphSchema,
|
|
69
49
|
coverage: z.strictObject({
|
|
70
|
-
status: z.enum(["complete-within-inputs", "partial"
|
|
71
|
-
omitted_types: z.number().int().min(0),
|
|
72
|
-
omitted_methods: z.number().int().min(0),
|
|
73
|
-
omitted_fields: z.number().int().min(0),
|
|
74
|
-
omitted_pinvoke_imports: z.number().int().min(0),
|
|
75
|
-
omitted_native_implementations: z.number().int().min(0),
|
|
50
|
+
status: z.enum(["complete-within-inputs", "partial"]),
|
|
76
51
|
}),
|
|
77
52
|
evidence_links: z.array(evidenceIdSchema).min(1).max(3),
|
|
78
|
-
limitations: z.array(
|
|
53
|
+
limitations: z.array(textSchema),
|
|
79
54
|
});
|
|
80
55
|
const sha256 = (value) => {
|
|
81
56
|
const serialized = canonicalize(value);
|
|
@@ -105,13 +80,12 @@ export const projectManagedApplicationGraph = (input) => {
|
|
|
105
80
|
};
|
|
106
81
|
const artifactNode = addArtifactNode(state);
|
|
107
82
|
addArtifactIdentityNodes(state, artifactNode, parsed);
|
|
108
|
-
const memberCounts = addMemberNodes(state, artifactNode, parsed
|
|
109
|
-
const boundaryCounts = addBoundaryNodes(state, artifactNode, parsed
|
|
110
|
-
const omissions = omittedCounts(parsed
|
|
83
|
+
const memberCounts = addMemberNodes(state, artifactNode, parsed);
|
|
84
|
+
const boundaryCounts = addBoundaryNodes(state, artifactNode, parsed);
|
|
85
|
+
const omissions = omittedCounts(parsed);
|
|
111
86
|
const limitations = projectionLimitations(parsed, omissions);
|
|
112
87
|
const graph = createJavaScriptApplicationGraph({
|
|
113
88
|
schema: "JavaScriptApplicationGraph",
|
|
114
|
-
schema_version: 1,
|
|
115
89
|
root_node_ids: [artifactNode.node_id],
|
|
116
90
|
nodes: state.nodes,
|
|
117
91
|
edges: state.edges,
|
|
@@ -119,7 +93,6 @@ export const projectManagedApplicationGraph = (input) => {
|
|
|
119
93
|
limitations,
|
|
120
94
|
});
|
|
121
95
|
const withoutId = {
|
|
122
|
-
schema_version: 1,
|
|
123
96
|
root_artifact_sha256: state.artifactSha256,
|
|
124
97
|
source_evidence: {
|
|
125
98
|
managed_artifact_evidence_id: parsed.artifact?.evidence.evidence_id ?? null,
|
|
@@ -178,11 +151,11 @@ const assertSameArtifact = (parsed, sha256Value) => {
|
|
|
178
151
|
if (result !== undefined && result.artifact.sha256 !== sha256Value)
|
|
179
152
|
throw new TypeError("Managed graph projection inputs must describe the same artifact SHA-256");
|
|
180
153
|
};
|
|
181
|
-
const omittedCounts = (parsed
|
|
154
|
+
const omittedCounts = (parsed) => assessManagedGraphOmissions({
|
|
182
155
|
artifact: parsed.artifact?.result ?? null,
|
|
183
156
|
members: parsed.members?.result ?? null,
|
|
184
157
|
boundaries: parsed.boundaries?.result ?? null,
|
|
185
|
-
}
|
|
158
|
+
});
|
|
186
159
|
const projectionLimitations = (parsed, omissions) => [
|
|
187
160
|
"Managed graph projection preserves static metadata observations only; it does not execute managed code, load assemblies, or map managed tokens to native addresses.",
|
|
188
161
|
...(parsed.members === null
|
|
@@ -198,9 +171,4 @@ const projectionLimitations = (parsed, omissions) => [
|
|
|
198
171
|
...(omissions.partialInput
|
|
199
172
|
? ["At least one supplied managed Evidence record has partial coverage."]
|
|
200
173
|
: []),
|
|
201
|
-
...(totalManagedGraphOmitted(omissions) > 0
|
|
202
|
-
? [
|
|
203
|
-
"Projection output omits managed entities because of source pagination or managed application graph limits.",
|
|
204
|
-
]
|
|
205
|
-
: []),
|
|
206
174
|
];
|