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
|
@@ -2,104 +2,15 @@ import { isAbsolute } from "node:path";
|
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { javascriptApplicationGraphSchema } from "./javascriptApplicationGraph.js";
|
|
4
4
|
import { javaScriptSemanticGraphSchema } from "./javascriptSemanticGraph.js";
|
|
5
|
-
const
|
|
6
|
-
const MAX_GRAPH_EDGES = 200_000;
|
|
7
|
-
const countSchema = z.number().int().min(0).max(Number.MAX_SAFE_INTEGER);
|
|
5
|
+
const countSchema = z.number().int().min(0);
|
|
8
6
|
const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u);
|
|
9
|
-
/**
|
|
10
|
-
export const JAVASCRIPT_APPLICATION_ANALYSIS_DEFAULT_LIMITS = {
|
|
11
|
-
max_entries: 8_000,
|
|
12
|
-
max_total_artifact_bytes: 512 * 1_024 * 1_024,
|
|
13
|
-
max_artifact_entry_bytes: 128 * 1_024 * 1_024,
|
|
14
|
-
max_compression_ratio: 1_000,
|
|
15
|
-
max_depth: 64,
|
|
16
|
-
max_path_bytes: 4_096,
|
|
17
|
-
max_text_files: 5_000,
|
|
18
|
-
max_total_text_bytes: 128 * 1_024 * 1_024,
|
|
19
|
-
max_text_file_bytes: 8 * 1_024 * 1_024,
|
|
20
|
-
max_ast_nodes: 2_000_000,
|
|
21
|
-
max_findings: 8_000,
|
|
22
|
-
max_modules: 20_000,
|
|
23
|
-
max_source_map_sources: 5_000,
|
|
24
|
-
max_parse_milliseconds: 30_000,
|
|
25
|
-
};
|
|
26
|
-
/** Combined artifact, text, AST, and graph projection bounds. */
|
|
27
|
-
export const javascriptApplicationAnalysisLimitsSchema = z
|
|
28
|
-
.strictObject({
|
|
29
|
-
max_entries: z.number().int().min(1).max(1_000_000).default(8_000),
|
|
30
|
-
max_total_artifact_bytes: z
|
|
31
|
-
.number()
|
|
32
|
-
.int()
|
|
33
|
-
.min(1)
|
|
34
|
-
.max(Number.MAX_SAFE_INTEGER)
|
|
35
|
-
.default(512 * 1_024 * 1_024),
|
|
36
|
-
max_artifact_entry_bytes: z
|
|
37
|
-
.number()
|
|
38
|
-
.int()
|
|
39
|
-
.min(1)
|
|
40
|
-
.max(Number.MAX_SAFE_INTEGER)
|
|
41
|
-
.default(128 * 1_024 * 1_024),
|
|
42
|
-
max_compression_ratio: z.number().min(1).max(100_000).default(1_000),
|
|
43
|
-
max_depth: z.number().int().min(1).max(100).default(64),
|
|
44
|
-
max_path_bytes: z.number().int().min(1).max(65_535).default(4_096),
|
|
45
|
-
max_text_files: z.number().int().min(1).max(100_000).default(5_000),
|
|
46
|
-
max_total_text_bytes: z
|
|
47
|
-
.number()
|
|
48
|
-
.int()
|
|
49
|
-
.min(1)
|
|
50
|
-
.max(512 * 1_024 * 1_024)
|
|
51
|
-
.default(128 * 1_024 * 1_024),
|
|
52
|
-
max_text_file_bytes: z
|
|
53
|
-
.number()
|
|
54
|
-
.int()
|
|
55
|
-
.min(1)
|
|
56
|
-
.max(64 * 1_024 * 1_024)
|
|
57
|
-
.default(8 * 1_024 * 1_024),
|
|
58
|
-
max_ast_nodes: z.number().int().min(1).max(20_000_000).default(2_000_000),
|
|
59
|
-
max_findings: z.number().int().min(1).max(200_000).default(8_000),
|
|
60
|
-
max_modules: z.number().int().min(1).max(100_000).default(20_000),
|
|
61
|
-
max_source_map_sources: z.number().int().min(1).max(100_000).default(5_000),
|
|
62
|
-
max_parse_milliseconds: z
|
|
63
|
-
.number()
|
|
64
|
-
.int()
|
|
65
|
-
.min(1)
|
|
66
|
-
.max(300_000)
|
|
67
|
-
.default(30_000),
|
|
68
|
-
})
|
|
69
|
-
.superRefine((limits, context) => {
|
|
70
|
-
const projectedNodes = 7 * limits.max_entries +
|
|
71
|
-
2 * limits.max_findings +
|
|
72
|
-
limits.max_modules +
|
|
73
|
-
limits.max_source_map_sources +
|
|
74
|
-
1;
|
|
75
|
-
if (projectedNodes > MAX_GRAPH_NODES)
|
|
76
|
-
context.addIssue({
|
|
77
|
-
code: "custom",
|
|
78
|
-
path: ["max_entries"],
|
|
79
|
-
message: "Combined application-analysis limits can exceed the 100000-node graph contract",
|
|
80
|
-
});
|
|
81
|
-
const projectedEdges = 9 * limits.max_entries +
|
|
82
|
-
6 * limits.max_findings +
|
|
83
|
-
limits.max_modules +
|
|
84
|
-
limits.max_source_map_sources;
|
|
85
|
-
if (projectedEdges > MAX_GRAPH_EDGES)
|
|
86
|
-
context.addIssue({
|
|
87
|
-
code: "custom",
|
|
88
|
-
path: ["max_entries"],
|
|
89
|
-
message: "Combined application-analysis limits can exceed the 200000-edge graph contract",
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
/** Public target-free request for bounded static JavaScript application analysis. */
|
|
7
|
+
/** Public target-free request for static JavaScript application analysis. */
|
|
93
8
|
export const analyzeJavaScriptApplicationInputSchema = z.strictObject({
|
|
94
9
|
input_path: z
|
|
95
10
|
.string()
|
|
96
11
|
.min(1)
|
|
97
|
-
.max(16_384)
|
|
98
12
|
.refine(isAbsolute, "JavaScript application input path must be absolute"),
|
|
99
13
|
format: z.enum(["auto", "asar", "directory"]).default("auto"),
|
|
100
|
-
approved: z.literal(true),
|
|
101
|
-
source_map_read_approved: z.boolean().default(false),
|
|
102
|
-
limits: javascriptApplicationAnalysisLimitsSchema.default(JAVASCRIPT_APPLICATION_ANALYSIS_DEFAULT_LIMITS),
|
|
103
14
|
});
|
|
104
15
|
/** Compact counts for the high-level Electron architecture/security surface. */
|
|
105
16
|
const electronBoundarySummarySchema = z.strictObject({
|
|
@@ -128,11 +39,7 @@ const electronBoundarySummarySchema = z.strictObject({
|
|
|
128
39
|
const reconstructionStatisticsSchema = z.strictObject({
|
|
129
40
|
relevant_files: countSchema,
|
|
130
41
|
nested_asar_containers: countSchema,
|
|
131
|
-
text_files_selected: countSchema,
|
|
132
42
|
text_bytes_read: countSchema,
|
|
133
|
-
omitted_text_files: countSchema,
|
|
134
|
-
limit_omitted_text_files: countSchema,
|
|
135
|
-
policy_filtered_text_files: countSchema,
|
|
136
43
|
invalid_utf8_files: countSchema,
|
|
137
44
|
parsed_javascript_files: countSchema,
|
|
138
45
|
visited_ast_nodes: countSchema,
|
|
@@ -141,10 +48,10 @@ const reconstructionStatisticsSchema = z.strictObject({
|
|
|
141
48
|
parse_failures: countSchema,
|
|
142
49
|
truncated_scopes: countSchema,
|
|
143
50
|
});
|
|
144
|
-
/**
|
|
145
|
-
export const
|
|
146
|
-
|
|
147
|
-
input_path: z.string().min(1)
|
|
51
|
+
/** JavaScript application analysis with an authenticated semantic companion. */
|
|
52
|
+
export const javascriptApplicationAnalysisResultSchema = z
|
|
53
|
+
.strictObject({
|
|
54
|
+
input_path: z.string().min(1),
|
|
148
55
|
format: z.enum(["asar", "directory"]),
|
|
149
56
|
root_artifact_sha256: digestSchema,
|
|
150
57
|
inventory_manifest_id: z.string().regex(/^agm_[a-f0-9]{64}$/u),
|
|
@@ -152,12 +59,7 @@ export const javaScriptApplicationAnalysisResultV1Schema = z.strictObject({
|
|
|
152
59
|
graph: javascriptApplicationGraphSchema,
|
|
153
60
|
summary: electronBoundarySummarySchema,
|
|
154
61
|
statistics: reconstructionStatisticsSchema,
|
|
155
|
-
limitations: z.array(z.string().min(1)
|
|
156
|
-
});
|
|
157
|
-
/** JavaScript application analysis with an authenticated semantic companion. */
|
|
158
|
-
export const javaScriptApplicationAnalysisResultV2Schema = javaScriptApplicationAnalysisResultV1Schema
|
|
159
|
-
.extend({
|
|
160
|
-
schema_version: z.literal(2),
|
|
62
|
+
limitations: z.array(z.string().min(1)),
|
|
161
63
|
semantic_graph: javaScriptSemanticGraphSchema,
|
|
162
64
|
})
|
|
163
65
|
.superRefine((result, context) => {
|
|
@@ -167,8 +69,7 @@ export const javaScriptApplicationAnalysisResultV2Schema = javaScriptApplication
|
|
|
167
69
|
path: ["semantic_graph", "application_graph_id"],
|
|
168
70
|
message: "Semantic graph must commit the containing application graph",
|
|
169
71
|
});
|
|
170
|
-
if (result.semantic_graph.root_artifact_sha256 !==
|
|
171
|
-
result.root_artifact_sha256)
|
|
72
|
+
if (result.semantic_graph.root_artifact_sha256 !== result.root_artifact_sha256)
|
|
172
73
|
context.addIssue({
|
|
173
74
|
code: "custom",
|
|
174
75
|
path: ["semantic_graph", "root_artifact_sha256"],
|
|
@@ -190,8 +91,3 @@ export const javaScriptApplicationAnalysisResultV2Schema = javaScriptApplication
|
|
|
190
91
|
message: "Semantic node references an absent application node",
|
|
191
92
|
});
|
|
192
93
|
});
|
|
193
|
-
/** Strict versioned high-level result returned inside Evidence v2. */
|
|
194
|
-
export const javascriptApplicationAnalysisResultSchema = z.discriminatedUnion("schema_version", [
|
|
195
|
-
javaScriptApplicationAnalysisResultV1Schema,
|
|
196
|
-
javaScriptApplicationAnalysisResultV2Schema,
|
|
197
|
-
]);
|
|
@@ -13,50 +13,34 @@ export const buildJavaScriptApplicationChangeGraph = (input) => {
|
|
|
13
13
|
...(left === null ? [] : [left]),
|
|
14
14
|
]),
|
|
15
15
|
]);
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const merged = mergeNodes(retainedIds.flatMap((nodeId) => allNodes.get(nodeId) ?? []));
|
|
16
|
+
const retained = new Set(orderedNodeIds);
|
|
17
|
+
const mergedNodes = mergeNodes(orderedNodeIds.flatMap((nodeId) => allNodes.get(nodeId) ?? []));
|
|
19
18
|
const sourceEdges = uniqueEdges([
|
|
20
19
|
...input.left.edges,
|
|
21
20
|
...input.right.edges,
|
|
22
21
|
]).filter(({ source_node_id: source, target_node_id: target }) => retained.has(source) && retained.has(target));
|
|
23
22
|
const comparisonEdges = input.items.flatMap((item) => changedFromEdge(item, input, retained));
|
|
24
23
|
const candidateEdges = uniqueEdges([...sourceEdges, ...comparisonEdges]);
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
const omittedEdges = Math.max(0, candidateEdges.length - edges.length);
|
|
28
|
-
const graphOmissions = omittedNodes + omittedEdges + merged.omittedObservations;
|
|
29
|
-
const rootNodeIds = preferredRoots
|
|
30
|
-
.filter((nodeId) => retained.has(nodeId))
|
|
31
|
-
.slice(0, 1_000);
|
|
32
|
-
const fallbackRoot = merged.nodes[0]?.node_id;
|
|
24
|
+
const rootNodeIds = preferredRoots.filter((nodeId) => retained.has(nodeId));
|
|
25
|
+
const fallbackRoot = mergedNodes[0]?.node_id;
|
|
33
26
|
const graph = createJavaScriptApplicationGraph({
|
|
34
27
|
schema: "JavaScriptApplicationGraph",
|
|
35
|
-
schema_version: 1,
|
|
36
28
|
root_node_ids: rootNodeIds.length > 0
|
|
37
29
|
? rootNodeIds
|
|
38
30
|
: fallbackRoot === undefined
|
|
39
31
|
? []
|
|
40
32
|
: [fallbackRoot],
|
|
41
|
-
nodes:
|
|
42
|
-
edges,
|
|
43
|
-
coverage: changeGraphCoverage(input
|
|
33
|
+
nodes: mergedNodes,
|
|
34
|
+
edges: candidateEdges,
|
|
35
|
+
coverage: changeGraphCoverage(input),
|
|
44
36
|
limitations: uniqueSorted([
|
|
45
37
|
...input.left.limitations.map((value) => `Left: ${value}`),
|
|
46
38
|
...input.right.limitations.map((value) => `Right: ${value}`),
|
|
47
39
|
"changed_from edges are cross-version inferences and never promote structural or semantic matches to exact identity.",
|
|
48
40
|
"The change graph contains compared entities and their retained relationships; it is not an executable application.",
|
|
49
|
-
...(graphOmissions === 0
|
|
50
|
-
? []
|
|
51
|
-
: ["The change graph omitted content at explicit caller bounds."]),
|
|
52
41
|
]),
|
|
53
42
|
});
|
|
54
|
-
return {
|
|
55
|
-
graph,
|
|
56
|
-
omittedNodes,
|
|
57
|
-
omittedEdges,
|
|
58
|
-
omittedObservations: merged.omittedObservations,
|
|
59
|
-
};
|
|
43
|
+
return { graph };
|
|
60
44
|
};
|
|
61
45
|
const nodeCandidates = (input) => {
|
|
62
46
|
const required = new Set([
|
|
@@ -106,8 +90,7 @@ const comparisonEvidence = (item, input) => {
|
|
|
106
90
|
const left = input.left.nodes.find(({ node_id: id }) => id === item.left_node_id);
|
|
107
91
|
const source = right?.observations[0]?.evidence ?? left?.observations[0]?.evidence;
|
|
108
92
|
const complete = input.left.coverage.status === "complete" &&
|
|
109
|
-
input.right.coverage.status === "complete"
|
|
110
|
-
input.omittedComparisonItems === 0;
|
|
93
|
+
input.right.coverage.status === "complete";
|
|
111
94
|
return {
|
|
112
95
|
authority: "cross-version-comparison",
|
|
113
96
|
state: "inferred",
|
|
@@ -132,19 +115,9 @@ const comparisonEvidence = (item, input) => {
|
|
|
132
115
|
? { status: "complete", truncated: false, omitted_count: 0, limits: [] }
|
|
133
116
|
: {
|
|
134
117
|
status: "partial",
|
|
135
|
-
truncated: input.
|
|
136
|
-
omitted_count: input.
|
|
137
|
-
|
|
138
|
-
: (source?.coverage.omitted_count ?? null),
|
|
139
|
-
limits: input.omittedComparisonItems > 0
|
|
140
|
-
? [
|
|
141
|
-
{
|
|
142
|
-
name: "max-comparison-items",
|
|
143
|
-
value: input.limits.max_comparison_items,
|
|
144
|
-
unit: "items",
|
|
145
|
-
},
|
|
146
|
-
]
|
|
147
|
-
: [],
|
|
118
|
+
truncated: input.left.coverage.truncated || input.right.coverage.truncated,
|
|
119
|
+
omitted_count: combineOmittedCounts(input.left.coverage.omitted_count, input.right.coverage.omitted_count),
|
|
120
|
+
limits: sourceCoverageLimits(input),
|
|
148
121
|
},
|
|
149
122
|
limitations: [
|
|
150
123
|
"Cross-version pairing is inferred from the stated match basis; changed_from does not prove runtime reachability.",
|
|
@@ -153,31 +126,7 @@ const comparisonEvidence = (item, input) => {
|
|
|
153
126
|
evidence_ids: [input.leftEvidenceId, input.rightEvidenceId],
|
|
154
127
|
};
|
|
155
128
|
};
|
|
156
|
-
const changeGraphCoverage = (input
|
|
157
|
-
const outputOmissions = graphOmissions + input.omittedComparisonItems;
|
|
158
|
-
if (outputOmissions > 0)
|
|
159
|
-
return {
|
|
160
|
-
status: "partial",
|
|
161
|
-
truncated: true,
|
|
162
|
-
omitted_count: outputOmissions,
|
|
163
|
-
limits: [
|
|
164
|
-
{
|
|
165
|
-
name: "max-comparison-items",
|
|
166
|
-
value: input.limits.max_comparison_items,
|
|
167
|
-
unit: "items",
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
name: "max-graph-nodes",
|
|
171
|
-
value: input.limits.max_graph_nodes,
|
|
172
|
-
unit: "items",
|
|
173
|
-
},
|
|
174
|
-
{
|
|
175
|
-
name: "max-graph-edges",
|
|
176
|
-
value: input.limits.max_graph_edges,
|
|
177
|
-
unit: "items",
|
|
178
|
-
},
|
|
179
|
-
],
|
|
180
|
-
};
|
|
129
|
+
const changeGraphCoverage = (input) => {
|
|
181
130
|
if (input.left.coverage.status === "complete" &&
|
|
182
131
|
input.right.coverage.status === "complete")
|
|
183
132
|
return {
|
|
@@ -186,24 +135,21 @@ const changeGraphCoverage = (input, graphOmissions) => {
|
|
|
186
135
|
omitted_count: 0,
|
|
187
136
|
limits: [],
|
|
188
137
|
};
|
|
189
|
-
const counts = [
|
|
190
|
-
input.left.coverage.omitted_count,
|
|
191
|
-
input.right.coverage.omitted_count,
|
|
192
|
-
];
|
|
193
138
|
return {
|
|
194
139
|
status: "partial",
|
|
195
|
-
truncated:
|
|
196
|
-
omitted_count:
|
|
197
|
-
|
|
198
|
-
: null,
|
|
199
|
-
limits: [],
|
|
140
|
+
truncated: input.left.coverage.truncated || input.right.coverage.truncated,
|
|
141
|
+
omitted_count: combineOmittedCounts(input.left.coverage.omitted_count, input.right.coverage.omitted_count),
|
|
142
|
+
limits: sourceCoverageLimits(input),
|
|
200
143
|
};
|
|
201
144
|
};
|
|
145
|
+
const sourceCoverageLimits = (input) => [
|
|
146
|
+
...new Map([...input.left.coverage.limits, ...input.right.coverage.limits].map((limit) => [`${limit.name}\0${limit.value}\0${limit.unit}`, limit])).values(),
|
|
147
|
+
].sort((left, right) => compareCodePoints(left.name, right.name));
|
|
148
|
+
const combineOmittedCounts = (left, right) => left === null || right === null ? null : left + right;
|
|
202
149
|
const mergeNodes = (nodes) => {
|
|
203
150
|
const groups = new Map();
|
|
204
151
|
for (const node of nodes)
|
|
205
152
|
groups.set(node.node_id, [...(groups.get(node.node_id) ?? []), node]);
|
|
206
|
-
let omittedObservations = 0;
|
|
207
153
|
const merged = [...groups.values()].map((group) => {
|
|
208
154
|
const first = group[0];
|
|
209
155
|
if (first === undefined)
|
|
@@ -213,19 +159,13 @@ const mergeNodes = (nodes) => {
|
|
|
213
159
|
.flatMap(({ observations: values }) => values)
|
|
214
160
|
.map((observation) => [observation.observation_id, observation])).values(),
|
|
215
161
|
].sort((left, right) => compareCodePoints(left.observation_id, right.observation_id));
|
|
216
|
-
omittedObservations += Math.max(0, observations.length - 64);
|
|
217
162
|
return createJavaScriptApplicationNode({
|
|
218
163
|
kind: first.kind,
|
|
219
164
|
identity: first.identity,
|
|
220
|
-
observations: observations
|
|
221
|
-
.slice(0, 64)
|
|
222
|
-
.map(({ observation_id: _id, identifier_strategy: _strategy, ...value }) => value),
|
|
165
|
+
observations: observations.map(({ observation_id: _id, identifier_strategy: _strategy, ...value }) => value),
|
|
223
166
|
});
|
|
224
167
|
});
|
|
225
|
-
return
|
|
226
|
-
nodes: merged.sort((left, right) => compareCodePoints(left.node_id, right.node_id)),
|
|
227
|
-
omittedObservations,
|
|
228
|
-
};
|
|
168
|
+
return merged.sort((left, right) => compareCodePoints(left.node_id, right.node_id));
|
|
229
169
|
};
|
|
230
170
|
const uniqueEdges = (edges) => [...new Map(edges.map((edge) => [edge.edge_id, edge])).values()].sort((left, right) => compareCodePoints(left.edge_id, right.edge_id));
|
|
231
171
|
const uniqueSorted = (values) => [...new Set(values)].sort(compareCodePoints);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u);
|
|
3
|
-
const boundedTextSchema = z.string().min(1)
|
|
4
|
-
const boundedKeySchema = z.string().min(1)
|
|
3
|
+
const boundedTextSchema = z.string().min(1);
|
|
4
|
+
const boundedKeySchema = z.string().min(1);
|
|
5
5
|
const unsafePathSegments = new Set(["", ".", ".."]);
|
|
6
6
|
const isSafeRelativePath = (path) => {
|
|
7
7
|
if (path.startsWith("/") || path.includes("\\"))
|
|
@@ -11,7 +11,6 @@ const isSafeRelativePath = (path) => {
|
|
|
11
11
|
const relativePathSchema = z
|
|
12
12
|
.string()
|
|
13
13
|
.min(1)
|
|
14
|
-
.max(4_096)
|
|
15
14
|
.refine(isSafeRelativePath, "Expected a normalized relative POSIX path without traversal");
|
|
16
15
|
/** Authority that produced one node observation or relationship. */
|
|
17
16
|
const applicationEvidenceAuthoritySchema = z.enum([
|
|
@@ -47,7 +46,6 @@ const applicationConfidenceSchema = z.enum([
|
|
|
47
46
|
const applicationUnavailableReasonSchema = z.enum([
|
|
48
47
|
"not-applicable",
|
|
49
48
|
"not-observed",
|
|
50
|
-
"not-approved",
|
|
51
49
|
"truncated",
|
|
52
50
|
"provider-unavailable",
|
|
53
51
|
"unresolved",
|
|
@@ -124,7 +122,7 @@ const applicationLocationSchema = z.discriminatedUnion("kind", [
|
|
|
124
122
|
fileOffsetRangeSchema,
|
|
125
123
|
z.strictObject({
|
|
126
124
|
kind: z.literal("url"),
|
|
127
|
-
url: z.string().min(1)
|
|
125
|
+
url: z.string().min(1),
|
|
128
126
|
}),
|
|
129
127
|
z.strictObject({
|
|
130
128
|
kind: z.literal("runtime"),
|
|
@@ -154,13 +152,13 @@ const applicationLocationReferenceSchema = z.discriminatedUnion("available", [
|
|
|
154
152
|
]);
|
|
155
153
|
/** Versioned extractor coordinates attached to every graph fact. */
|
|
156
154
|
const applicationExtractorSchema = z.strictObject({
|
|
157
|
-
name: z.string().min(1)
|
|
158
|
-
version: z.string().min(1)
|
|
159
|
-
operation: z.string().min(1)
|
|
155
|
+
name: z.string().min(1),
|
|
156
|
+
version: z.string().min(1),
|
|
157
|
+
operation: z.string().min(1),
|
|
160
158
|
executable_sha256: digestSchema.nullable(),
|
|
161
159
|
});
|
|
162
160
|
const applicationLimitSchema = z.strictObject({
|
|
163
|
-
name: z.string().min(1)
|
|
161
|
+
name: z.string().min(1),
|
|
164
162
|
value: z.number().int().min(0).max(Number.MAX_SAFE_INTEGER),
|
|
165
163
|
unit: z.enum([
|
|
166
164
|
"items",
|
|
@@ -173,39 +171,54 @@ const applicationLimitSchema = z.strictObject({
|
|
|
173
171
|
]),
|
|
174
172
|
});
|
|
175
173
|
/** Bounded collection coverage without treating omission as absence. */
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
.
|
|
182
|
-
.
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
174
|
+
const coverageLimitsSchema = z.array(applicationLimitSchema);
|
|
175
|
+
const omittedCountSchema = z.number().int().min(0).max(Number.MAX_SAFE_INTEGER);
|
|
176
|
+
export const applicationCoverageSchema = z.union([
|
|
177
|
+
z.strictObject({
|
|
178
|
+
status: z.literal("complete"),
|
|
179
|
+
truncated: z.literal(false),
|
|
180
|
+
omitted_count: z.literal(0),
|
|
181
|
+
limits: coverageLimitsSchema,
|
|
182
|
+
}),
|
|
183
|
+
z.strictObject({
|
|
184
|
+
status: z.literal("partial"),
|
|
185
|
+
truncated: z.literal(false),
|
|
186
|
+
omitted_count: omittedCountSchema.nullable(),
|
|
187
|
+
limits: coverageLimitsSchema,
|
|
188
|
+
}),
|
|
189
|
+
z.strictObject({
|
|
190
|
+
status: z.literal("partial"),
|
|
191
|
+
truncated: z.literal(true),
|
|
192
|
+
omitted_count: z.union([omittedCountSchema.positive(), z.null()]),
|
|
193
|
+
limits: z.array(applicationLimitSchema).min(1),
|
|
194
|
+
}),
|
|
195
|
+
z.strictObject({
|
|
196
|
+
status: z.enum(["unknown", "unavailable"]),
|
|
197
|
+
truncated: z.literal(false),
|
|
198
|
+
omitted_count: z.null(),
|
|
199
|
+
limits: coverageLimitsSchema,
|
|
200
|
+
}),
|
|
201
|
+
]);
|
|
202
|
+
/** Construct complete bounded coverage under the stated configured limits. */
|
|
203
|
+
export const completeApplicationCoverage = (limits = []) => applicationCoverageSchema.parse({
|
|
204
|
+
status: "complete",
|
|
205
|
+
truncated: false,
|
|
206
|
+
omitted_count: 0,
|
|
207
|
+
limits,
|
|
208
|
+
});
|
|
209
|
+
/** Construct partial non-truncated coverage without inventing omissions. */
|
|
210
|
+
export const partialApplicationCoverage = (limits, omittedCount) => applicationCoverageSchema.parse({
|
|
211
|
+
status: "partial",
|
|
212
|
+
truncated: false,
|
|
213
|
+
omitted_count: omittedCount,
|
|
214
|
+
limits,
|
|
215
|
+
});
|
|
216
|
+
/** Construct limit-truncated coverage with a named bound. */
|
|
217
|
+
export const truncatedApplicationCoverage = (limits, omittedCount) => applicationCoverageSchema.parse({
|
|
218
|
+
status: "partial",
|
|
219
|
+
truncated: true,
|
|
220
|
+
omitted_count: omittedCount,
|
|
221
|
+
limits,
|
|
209
222
|
});
|
|
210
223
|
const applicationGraphEvidenceBaseSchema = z.strictObject({
|
|
211
224
|
authority: applicationEvidenceAuthoritySchema,
|
|
@@ -215,8 +228,8 @@ const applicationGraphEvidenceBaseSchema = z.strictObject({
|
|
|
215
228
|
location: applicationLocationReferenceSchema,
|
|
216
229
|
extractor: applicationExtractorSchema,
|
|
217
230
|
coverage: applicationCoverageSchema,
|
|
218
|
-
limitations: z.array(boundedTextSchema)
|
|
219
|
-
evidence_ids: z.array(z.string().regex(/^ev_[a-f0-9]{64}$/u))
|
|
231
|
+
limitations: z.array(boundedTextSchema),
|
|
232
|
+
evidence_ids: z.array(z.string().regex(/^ev_[a-f0-9]{64}$/u)),
|
|
220
233
|
});
|
|
221
234
|
const checkAuthorityState = (evidence, context) => {
|
|
222
235
|
if (evidence.authority === "static-relationship-inference" &&
|
|
@@ -343,7 +356,7 @@ export const applicationNodeIdentitySchema = z.discriminatedUnion("strategy", [
|
|
|
343
356
|
z.strictObject({
|
|
344
357
|
strategy: z.literal("structural-fingerprint"),
|
|
345
358
|
stability: z.literal("cross-version-inference"),
|
|
346
|
-
algorithm: z.string().min(1)
|
|
359
|
+
algorithm: z.string().min(1),
|
|
347
360
|
fingerprint_sha256: digestSchema,
|
|
348
361
|
basis: z
|
|
349
362
|
.array(z.enum([
|
|
@@ -354,8 +367,7 @@ export const applicationNodeIdentitySchema = z.discriminatedUnion("strategy", [
|
|
|
354
367
|
"literals",
|
|
355
368
|
"api-usage",
|
|
356
369
|
]))
|
|
357
|
-
.min(1)
|
|
358
|
-
.max(6),
|
|
370
|
+
.min(1),
|
|
359
371
|
}),
|
|
360
372
|
z.strictObject({
|
|
361
373
|
strategy: z.literal("artifact-local-key"),
|
|
@@ -205,7 +205,7 @@ const checkGraphInvariants = (graph, context) => {
|
|
|
205
205
|
path: ["graph_id"],
|
|
206
206
|
});
|
|
207
207
|
};
|
|
208
|
-
/** Strict
|
|
208
|
+
/** Strict JavaScript Application Graph with verified commitments. */
|
|
209
209
|
export const javascriptApplicationGraphSchema = javascriptApplicationGraphRecordSchema.superRefine(checkGraphInvariants);
|
|
210
210
|
/** Build one normalized application entity and derive all semantic IDs. */
|
|
211
211
|
export const createJavaScriptApplicationNode = (input) => {
|
|
@@ -264,18 +264,8 @@ export const createJavaScriptApplicationGraph = (input) => {
|
|
|
264
264
|
graph_id: `jag_${digestCanonical(semantic)}`,
|
|
265
265
|
});
|
|
266
266
|
};
|
|
267
|
-
/** Parse a stored graph
|
|
268
|
-
export const parseJavaScriptApplicationGraph = (input) =>
|
|
269
|
-
const envelope = z
|
|
270
|
-
.object({ schema: z.string(), schema_version: z.number() })
|
|
271
|
-
.passthrough()
|
|
272
|
-
.safeParse(input);
|
|
273
|
-
if (envelope.success &&
|
|
274
|
-
envelope.data.schema === "JavaScriptApplicationGraph" &&
|
|
275
|
-
envelope.data.schema_version !== 1)
|
|
276
|
-
throw new TypeError(`Unsupported JavaScript Application Graph schema version: ${String(envelope.data.schema_version)}`);
|
|
277
|
-
return javascriptApplicationGraphSchema.parse(input);
|
|
278
|
-
};
|
|
267
|
+
/** Parse a stored graph and reject stale IDs. */
|
|
268
|
+
export const parseJavaScriptApplicationGraph = (input) => javascriptApplicationGraphSchema.parse(input);
|
|
279
269
|
/** Compute the byte-stable SHA-256 commitment of a verified graph. */
|
|
280
270
|
export const computeJavaScriptApplicationGraphSha256 = (input) => digestCanonical(parseJavaScriptApplicationGraph(input));
|
|
281
271
|
/** Serialize a verified graph as RFC 8785 canonical JSON. */
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { applicationCoverageSchema, applicationGraphEvidenceSchema, applicationNodeIdentitySchema, } from "./javascriptApplicationEvidenceSchemas.js";
|
|
3
|
-
import { isJsonWithinLimits } from "./jsonLimits.js";
|
|
4
3
|
import { jsonValueSchema } from "./jsonValue.js";
|
|
5
|
-
const boundedTextSchema = z.string().min(1)
|
|
6
|
-
/** Node kinds admitted by JavaScript Application Graph
|
|
4
|
+
const boundedTextSchema = z.string().min(1);
|
|
5
|
+
/** Node kinds admitted by JavaScript Application Graph. */
|
|
7
6
|
export const JAVASCRIPT_APPLICATION_NODE_KINDS = [
|
|
8
7
|
"package",
|
|
9
8
|
"installer",
|
|
@@ -42,7 +41,7 @@ export const JAVASCRIPT_APPLICATION_NODE_KINDS = [
|
|
|
42
41
|
];
|
|
43
42
|
/** Provider-neutral application entity categories. */
|
|
44
43
|
const applicationNodeKindSchema = z.enum(JAVASCRIPT_APPLICATION_NODE_KINDS);
|
|
45
|
-
/** Directed relations admitted by JavaScript Application Graph
|
|
44
|
+
/** Directed relations admitted by JavaScript Application Graph. */
|
|
46
45
|
export const JAVASCRIPT_APPLICATION_RELATIONS = [
|
|
47
46
|
"contains",
|
|
48
47
|
"loads",
|
|
@@ -59,27 +58,10 @@ export const JAVASCRIPT_APPLICATION_RELATIONS = [
|
|
|
59
58
|
];
|
|
60
59
|
/** Provider-neutral relation categories. */
|
|
61
60
|
const applicationRelationSchema = z.enum(JAVASCRIPT_APPLICATION_RELATIONS);
|
|
62
|
-
const applicationPropertiesSchema = z
|
|
63
|
-
.record(z.string().min(1).max(128), jsonValueSchema)
|
|
64
|
-
.superRefine((properties, context) => {
|
|
65
|
-
if (Object.keys(properties).length > 64)
|
|
66
|
-
context.addIssue({
|
|
67
|
-
code: "custom",
|
|
68
|
-
message: "Application graph properties exceed 64 keys",
|
|
69
|
-
});
|
|
70
|
-
if (!isJsonWithinLimits(properties, {
|
|
71
|
-
maxDepth: 6,
|
|
72
|
-
maxNodes: 512,
|
|
73
|
-
maxStringLength: 4_096,
|
|
74
|
-
}))
|
|
75
|
-
context.addIssue({
|
|
76
|
-
code: "custom",
|
|
77
|
-
message: "Application graph properties exceed structural limits",
|
|
78
|
-
});
|
|
79
|
-
});
|
|
61
|
+
const applicationPropertiesSchema = z.record(z.string().min(1), jsonValueSchema);
|
|
80
62
|
/** One node observation before its semantic identifier is derived. */
|
|
81
63
|
const applicationNodeObservationInputSchema = z.strictObject({
|
|
82
|
-
label: z.string().min(1).
|
|
64
|
+
label: z.string().min(1).nullable(),
|
|
83
65
|
properties: applicationPropertiesSchema,
|
|
84
66
|
evidence: applicationGraphEvidenceSchema,
|
|
85
67
|
});
|
|
@@ -95,14 +77,14 @@ export const applicationNodeObservationSchema = applicationNodeObservationInputS
|
|
|
95
77
|
export const applicationNodeInputSchema = z.strictObject({
|
|
96
78
|
kind: applicationNodeKindSchema,
|
|
97
79
|
identity: applicationNodeIdentitySchema,
|
|
98
|
-
observations: z.array(applicationNodeObservationInputSchema).min(1)
|
|
80
|
+
observations: z.array(applicationNodeObservationInputSchema).min(1),
|
|
99
81
|
});
|
|
100
82
|
/** One stable application entity with one or more bounded observations. */
|
|
101
83
|
export const applicationNodeSchema = z.strictObject({
|
|
102
84
|
node_id: z.string().regex(/^jag_node_[a-f0-9]{64}$/u),
|
|
103
85
|
kind: applicationNodeKindSchema,
|
|
104
86
|
identity: applicationNodeIdentitySchema,
|
|
105
|
-
observations: z.array(applicationNodeObservationSchema).min(1)
|
|
87
|
+
observations: z.array(applicationNodeObservationSchema).min(1),
|
|
106
88
|
});
|
|
107
89
|
/** One directed relationship before its semantic identifier is derived. */
|
|
108
90
|
export const applicationEdgeInputSchema = z.strictObject({
|
|
@@ -123,17 +105,13 @@ export const applicationEdgeSchema = applicationEdgeInputSchema.extend({
|
|
|
123
105
|
/** Graph content before its top-level semantic identifier is derived. */
|
|
124
106
|
export const javascriptApplicationGraphInputSchema = z.strictObject({
|
|
125
107
|
schema: z.literal("JavaScriptApplicationGraph"),
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
.min(1)
|
|
130
|
-
.max(1_000),
|
|
131
|
-
nodes: z.array(applicationNodeSchema).min(1).max(100_000),
|
|
132
|
-
edges: z.array(applicationEdgeSchema).max(200_000),
|
|
108
|
+
root_node_ids: z.array(z.string().regex(/^jag_node_[a-f0-9]{64}$/u)).min(1),
|
|
109
|
+
nodes: z.array(applicationNodeSchema).min(1),
|
|
110
|
+
edges: z.array(applicationEdgeSchema),
|
|
133
111
|
coverage: applicationCoverageSchema,
|
|
134
|
-
limitations: z.array(boundedTextSchema)
|
|
112
|
+
limitations: z.array(boundedTextSchema),
|
|
135
113
|
});
|
|
136
|
-
/** Strict stored shape for JavaScript Application Graph
|
|
114
|
+
/** Strict stored shape for a JavaScript Application Graph. */
|
|
137
115
|
export const javascriptApplicationGraphRecordSchema = javascriptApplicationGraphInputSchema.extend({
|
|
138
116
|
graph_id: z.string().regex(/^jag_[a-f0-9]{64}$/u),
|
|
139
117
|
});
|