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
|
@@ -7,24 +7,18 @@ const reject = (context, message) => {
|
|
|
7
7
|
const inspectJsonValue = (value, context, limits) => {
|
|
8
8
|
const pending = [{ value, depth: 1 }];
|
|
9
9
|
const seen = new WeakSet();
|
|
10
|
-
let nodes = 0;
|
|
11
10
|
while (pending.length > 0) {
|
|
12
11
|
const current = pending.pop();
|
|
13
12
|
if (current === undefined)
|
|
14
13
|
break;
|
|
15
|
-
nodes += 1;
|
|
16
|
-
if (nodes > limits.jsonNodes)
|
|
17
|
-
return reject(context, "event exact JSON exceeds the v1 node limit");
|
|
18
14
|
if (current.depth > limits.jsonDepth)
|
|
19
|
-
return reject(context, "event exact JSON exceeds the
|
|
15
|
+
return reject(context, "event exact JSON exceeds the configured depth limit");
|
|
20
16
|
if (typeof current.value !== "object" || current.value === null)
|
|
21
17
|
continue;
|
|
22
18
|
if (seen.has(current.value))
|
|
23
19
|
return reject(context, "event exact JSON must not contain cycles");
|
|
24
20
|
seen.add(current.value);
|
|
25
21
|
if (Array.isArray(current.value)) {
|
|
26
|
-
if (current.value.length + nodes > limits.jsonNodes)
|
|
27
|
-
return reject(context, "event exact JSON exceeds the v1 node limit");
|
|
28
22
|
for (const child of current.value)
|
|
29
23
|
pending.push({ value: child, depth: current.depth + 1 });
|
|
30
24
|
continue;
|
|
@@ -34,8 +28,6 @@ const inspectJsonValue = (value, context, limits) => {
|
|
|
34
28
|
for (const key in current.value) {
|
|
35
29
|
if (!Object.hasOwn(current.value, key))
|
|
36
30
|
continue;
|
|
37
|
-
if (nodes + pending.length >= limits.jsonNodes)
|
|
38
|
-
return reject(context, "event exact JSON exceeds the v1 node limit");
|
|
39
31
|
pending.push({
|
|
40
32
|
value: current.value[key],
|
|
41
33
|
depth: current.depth + 1,
|
|
@@ -44,17 +36,11 @@ const inspectJsonValue = (value, context, limits) => {
|
|
|
44
36
|
}
|
|
45
37
|
return true;
|
|
46
38
|
};
|
|
47
|
-
const collectTriggerRoots = (states
|
|
39
|
+
const collectTriggerRoots = (states) => {
|
|
48
40
|
const pending = [];
|
|
49
|
-
let transitions = 0;
|
|
50
41
|
for (const stateValue of states) {
|
|
51
42
|
if (!isUnknownRecord(stateValue) || !Array.isArray(stateValue["on"]))
|
|
52
43
|
continue;
|
|
53
|
-
transitions += stateValue["on"].length;
|
|
54
|
-
if (transitions > limits.transitions) {
|
|
55
|
-
reject(context, "scenario has too many transitions");
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
44
|
for (const transitionValue of stateValue["on"])
|
|
59
45
|
if (isUnknownRecord(transitionValue))
|
|
60
46
|
pending.push({ value: transitionValue["when"], depth: 1 });
|
|
@@ -73,24 +59,17 @@ const enqueueTriggerChildren = (trigger, depth, traversal) => {
|
|
|
73
59
|
const children = trigger["triggers"];
|
|
74
60
|
if (!Array.isArray(children))
|
|
75
61
|
return true;
|
|
76
|
-
if (children.length > traversal.limits.childrenPerComposite)
|
|
77
|
-
return reject(traversal.context, "trigger group has too many children");
|
|
78
62
|
for (const child of children)
|
|
79
63
|
traversal.pending.push({ value: child, depth: depth + 1 });
|
|
80
64
|
return true;
|
|
81
65
|
};
|
|
82
66
|
const inspectTriggerTree = (pending, context, limits) => {
|
|
83
|
-
let nodes = 0;
|
|
84
|
-
const maximumNodes = limits.predicates * limits.triggerDepth;
|
|
85
67
|
while (pending.length > 0) {
|
|
86
68
|
const current = pending.pop();
|
|
87
69
|
if (current === undefined)
|
|
88
70
|
break;
|
|
89
|
-
nodes += 1;
|
|
90
|
-
if (nodes > maximumNodes)
|
|
91
|
-
return reject(context, "trigger tree exceeds the v1 limit");
|
|
92
71
|
if (current.depth > limits.triggerDepth)
|
|
93
|
-
return reject(context, "trigger nesting exceeds the
|
|
72
|
+
return reject(context, "trigger nesting exceeds the configured limit");
|
|
94
73
|
if (isUnknownRecord(current.value) &&
|
|
95
74
|
current.value["kind"] === "event" &&
|
|
96
75
|
!inspectJsonValue(current.value["exact"], context, limits))
|
|
@@ -109,12 +88,8 @@ const inspectTriggerTree = (pending, context, limits) => {
|
|
|
109
88
|
export const preflightProcessReactiveScenario = (input, context, limits) => {
|
|
110
89
|
if (!isUnknownRecord(input) || !Array.isArray(input["states"]))
|
|
111
90
|
return input;
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
return z.NEVER;
|
|
115
|
-
}
|
|
116
|
-
const pending = collectTriggerRoots(input["states"], context, limits);
|
|
117
|
-
if (pending === null || !inspectTriggerTree(pending, context, limits))
|
|
91
|
+
const pending = collectTriggerRoots(input["states"]);
|
|
92
|
+
if (!inspectTriggerTree(pending, context, limits))
|
|
118
93
|
return z.NEVER;
|
|
119
94
|
return input;
|
|
120
95
|
};
|
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
const createTransitionRecord = (input) => {
|
|
2
|
+
const state = {
|
|
3
|
+
sequence: input.sequence,
|
|
4
|
+
transition_id: input.transition.id,
|
|
5
|
+
state_before: input.stateBefore,
|
|
6
|
+
trigger_event_ids: input.triggerEventIds,
|
|
7
|
+
action_event_ids: input.effectResults.map(({ observation }) => observation.event_id),
|
|
8
|
+
action_types: input.transition.actions.map(({ type }) => type),
|
|
9
|
+
};
|
|
10
|
+
return input.transition.target.kind === "finish"
|
|
11
|
+
? {
|
|
12
|
+
...state,
|
|
13
|
+
state_after: null,
|
|
14
|
+
outcome: input.transition.target.outcome,
|
|
15
|
+
}
|
|
16
|
+
: {
|
|
17
|
+
...state,
|
|
18
|
+
state_after: input.transition.target.state,
|
|
19
|
+
outcome: null,
|
|
20
|
+
};
|
|
21
|
+
};
|
|
1
22
|
const counterValue = (counters, id) => counters.find((counter) => counter.id === id)?.count ?? 0;
|
|
2
23
|
const incrementCounter = (counters, id) => {
|
|
3
24
|
let found = false;
|
|
@@ -11,38 +32,35 @@ const incrementCounter = (counters, id) => {
|
|
|
11
32
|
};
|
|
12
33
|
/** Commit one uniquely selected transition after its declarative effects succeed. */
|
|
13
34
|
const applyProcessReactiveTransition = (input) => {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const stateAfter = input.transition.target.kind === "goto"
|
|
18
|
-
? input.transition.target.state
|
|
19
|
-
: null;
|
|
20
|
-
const record = {
|
|
35
|
+
if (input.effectResults.length !== input.transition.actions.length)
|
|
36
|
+
throw new TypeError("Reactive transition effects do not match the admitted actions");
|
|
37
|
+
const record = createTransitionRecord({
|
|
21
38
|
sequence: input.snapshot.transitions.length,
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
};
|
|
39
|
+
stateBefore: input.snapshot.active_state,
|
|
40
|
+
transition: input.transition,
|
|
41
|
+
triggerEventIds: input.triggerEventIds,
|
|
42
|
+
effectResults: input.effectResults,
|
|
43
|
+
});
|
|
44
|
+
const outcome = record.outcome;
|
|
45
|
+
const stateAfter = record.state_after;
|
|
30
46
|
const consumed = new Set(input.snapshot.consumed_event_ids);
|
|
31
47
|
for (const eventId of input.consumeEventIds)
|
|
32
48
|
consumed.add(eventId);
|
|
33
49
|
const checkpoints = [...input.snapshot.checkpoints];
|
|
34
|
-
for (const [index, action] of input.transition.actions.entries())
|
|
50
|
+
for (const [index, action] of input.transition.actions.entries()) {
|
|
51
|
+
const effect = input.effectResults[index];
|
|
52
|
+
if (effect === undefined)
|
|
53
|
+
throw new TypeError("Reactive transition effect is missing");
|
|
35
54
|
if (action.type === "checkpoint")
|
|
36
55
|
checkpoints.push({
|
|
37
56
|
name: action.name,
|
|
38
|
-
event_id:
|
|
39
|
-
capture_order:
|
|
57
|
+
event_id: effect.observation.event_id,
|
|
58
|
+
capture_order: effect.observation.capture_order,
|
|
40
59
|
});
|
|
60
|
+
}
|
|
41
61
|
const completedCaptureOrder = Math.max(input.observation.capture_order, ...input.effectResults.map(({ observation }) => observation.capture_order));
|
|
42
|
-
|
|
62
|
+
const nextState = {
|
|
43
63
|
...input.snapshot,
|
|
44
|
-
status: outcome === null ? "running" : "finished",
|
|
45
|
-
outcome,
|
|
46
64
|
active_state: stateAfter ?? input.snapshot.active_state,
|
|
47
65
|
state_entry_capture_order: stateAfter === null
|
|
48
66
|
? input.snapshot.state_entry_capture_order
|
|
@@ -55,6 +73,9 @@ const applyProcessReactiveTransition = (input) => {
|
|
|
55
73
|
checkpoints,
|
|
56
74
|
transitions: [...input.snapshot.transitions, record],
|
|
57
75
|
};
|
|
76
|
+
let next = outcome === null
|
|
77
|
+
? { ...nextState, status: "running", outcome: null }
|
|
78
|
+
: { ...nextState, status: "finished", outcome };
|
|
58
79
|
if (stateAfter !== null) {
|
|
59
80
|
const nextState = input.scenario.states.find(({ id }) => id === stateAfter);
|
|
60
81
|
if (nextState === undefined ||
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
import {
|
|
2
|
+
import { isPathWithinRoot } from "./localPath.js";
|
|
3
3
|
import canonicalize from "canonicalize";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { processReactiveScenarioSchema, } from "./processReactiveScenario.js";
|
|
6
6
|
import { replayMachineSchema } from "./replayMachine.js";
|
|
7
|
-
const positiveBudget = z.number().int().positive();
|
|
8
|
-
const timedEventBase = { at_ms: z.number().int().nonnegative() };
|
|
7
|
+
const positiveBudget = z.number().int().safe().positive();
|
|
8
|
+
const timedEventBase = { at_ms: z.number().int().safe().nonnegative() };
|
|
9
9
|
const environmentName = z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/u);
|
|
10
10
|
const reservedEnvironment = new Set([
|
|
11
11
|
"HOME",
|
|
@@ -19,25 +19,19 @@ export const normalizationSchema = z.object({
|
|
|
19
19
|
paths: z.boolean(),
|
|
20
20
|
pids: z.boolean(),
|
|
21
21
|
ports: z.boolean(),
|
|
22
|
-
time_bucket_ms: positiveBudget
|
|
22
|
+
time_bucket_ms: positiveBudget,
|
|
23
23
|
patterns: z.array(z.object({
|
|
24
|
-
pattern: z.string()
|
|
25
|
-
replacement: z.string()
|
|
24
|
+
pattern: z.string(),
|
|
25
|
+
replacement: z.string(),
|
|
26
26
|
})),
|
|
27
27
|
});
|
|
28
|
-
const checkpointNameSchema = z
|
|
29
|
-
|
|
30
|
-
.regex(/^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/u);
|
|
31
|
-
const commandNameSchema = z
|
|
32
|
-
.string()
|
|
33
|
-
.regex(/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u);
|
|
28
|
+
const checkpointNameSchema = z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]*$/u);
|
|
29
|
+
const commandNameSchema = z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/u);
|
|
34
30
|
const outputChunkSchema = z.object({
|
|
35
|
-
at_ms: z.number().int().
|
|
31
|
+
at_ms: z.number().int().safe().nonnegative(),
|
|
36
32
|
stream: z.enum(["stdout", "stderr"]),
|
|
37
|
-
data: z.string()
|
|
33
|
+
data: z.string(),
|
|
38
34
|
});
|
|
39
|
-
/** Actionable refusal shared by CLI, MCP, and Evidence import boundaries. */
|
|
40
|
-
export const LEGACY_PROCESS_CAPTURE_MESSAGE = "Process Capture v3 is unsupported. Re-run the scenario with this REA version using capture_process_scenario to produce Process Capture v4; captures cannot be upgraded because v4 requires new manifest and settlement evidence.";
|
|
41
35
|
/** Compute a canonical SHA-256 commitment independent of object key order. */
|
|
42
36
|
export const digestProcessCommitment = (value) => {
|
|
43
37
|
const serialized = canonicalize(value);
|
|
@@ -62,7 +56,7 @@ const reactiveScenarioCommitment = (scenario) => scenario === null
|
|
|
62
56
|
})),
|
|
63
57
|
})),
|
|
64
58
|
};
|
|
65
|
-
/** Build the secret-safe scenario projection committed by
|
|
59
|
+
/** Build the secret-safe scenario projection committed by process-capture Evidence. */
|
|
66
60
|
export const processScenarioCommitment = (scenario, executableSha256) => ({
|
|
67
61
|
...scenario,
|
|
68
62
|
environment: Object.fromEntries(Object.entries(scenario.environment).map(([name, value]) => [
|
|
@@ -70,7 +64,6 @@ export const processScenarioCommitment = (scenario, executableSha256) => ({
|
|
|
70
64
|
scenario.secret_aliases.includes(name) ? "<redacted-secret>" : value,
|
|
71
65
|
])),
|
|
72
66
|
reactive: reactiveScenarioCommitment(scenario.reactive),
|
|
73
|
-
unknown_registry_approved: scenario.unknown_registry_approved === true,
|
|
74
67
|
executable_sha256: executableSha256 ?? null,
|
|
75
68
|
});
|
|
76
69
|
/** Project observation settings shared by authority and reconstruction. */
|
|
@@ -93,31 +86,24 @@ export const processComparisonContract = (scenario) => ({
|
|
|
93
86
|
reactive: reactiveScenarioCommitment(scenario.reactive),
|
|
94
87
|
});
|
|
95
88
|
/**
|
|
96
|
-
* Boundary schema for one
|
|
89
|
+
* Boundary schema for one bounded process experiment.
|
|
97
90
|
* Defaults are part of the evidence contract and must remain deterministic.
|
|
98
91
|
*/
|
|
99
92
|
export const processScenarioSchema = z
|
|
100
93
|
.object({
|
|
101
|
-
approved: z
|
|
102
|
-
.literal(true)
|
|
103
|
-
.describe("Explicit per-call acknowledgement that this operation launches the target"),
|
|
104
|
-
unknown_registry_approved: z
|
|
105
|
-
.literal(true)
|
|
106
|
-
.optional()
|
|
107
|
-
.describe("Explicit approval to record capture residuals durably"),
|
|
108
94
|
executable: z.string().startsWith("/"),
|
|
109
|
-
arguments: z.array(z.string()).
|
|
95
|
+
arguments: z.array(z.string()).default([]),
|
|
110
96
|
working_directory: z.string().startsWith("/"),
|
|
111
97
|
environment: z.record(environmentName, z.string()).default({}),
|
|
112
|
-
inherit_environment: z.array(environmentName).
|
|
113
|
-
secret_aliases: z.array(environmentName).
|
|
98
|
+
inherit_environment: z.array(environmentName).default([]),
|
|
99
|
+
secret_aliases: z.array(environmentName).default([]),
|
|
114
100
|
network_access: z.literal("host").default("host"),
|
|
115
|
-
filesystem_roots: z.array(z.string().startsWith("/")).
|
|
101
|
+
filesystem_roots: z.array(z.string().startsWith("/")).default([]),
|
|
116
102
|
terminal: z
|
|
117
103
|
.object({
|
|
118
|
-
columns: z.number().int().min(1).max(
|
|
119
|
-
rows: z.number().int().min(1).max(
|
|
120
|
-
scrollback: z.number().int().min(0).
|
|
104
|
+
columns: z.number().int().min(1).max(65_535).default(80),
|
|
105
|
+
rows: z.number().int().min(1).max(65_535).default(24),
|
|
106
|
+
scrollback: z.number().int().min(0).default(1_000),
|
|
121
107
|
})
|
|
122
108
|
.default({ columns: 80, rows: 24, scrollback: 1_000 }),
|
|
123
109
|
checkpoints: z
|
|
@@ -126,26 +112,25 @@ export const processScenarioSchema = z
|
|
|
126
112
|
trigger: z.discriminatedUnion("type", [
|
|
127
113
|
z.object({
|
|
128
114
|
type: z.literal("time"),
|
|
129
|
-
at_ms: z.number().int().
|
|
115
|
+
at_ms: z.number().int().safe().nonnegative(),
|
|
130
116
|
}),
|
|
131
117
|
z.object({
|
|
132
118
|
type: z.literal("terminal_literal"),
|
|
133
|
-
value: z.string().min(1)
|
|
134
|
-
occurrence:
|
|
119
|
+
value: z.string().min(1),
|
|
120
|
+
occurrence: positiveBudget.default(1),
|
|
135
121
|
}),
|
|
136
122
|
z.object({ type: z.literal("root_exit") }),
|
|
137
123
|
z.object({ type: z.literal("settled") }),
|
|
138
124
|
]),
|
|
139
125
|
}))
|
|
140
|
-
.max(64)
|
|
141
126
|
.default([]),
|
|
142
127
|
command_shims: z
|
|
143
128
|
.array(z.object({
|
|
144
129
|
name: commandNameSchema,
|
|
145
130
|
routes: z
|
|
146
131
|
.array(z.object({
|
|
147
|
-
arguments: z.array(z.string())
|
|
148
|
-
outputs: z.array(outputChunkSchema).
|
|
132
|
+
arguments: z.array(z.string()),
|
|
133
|
+
outputs: z.array(outputChunkSchema).default([]),
|
|
149
134
|
termination: z.discriminatedUnion("type", [
|
|
150
135
|
z.object({
|
|
151
136
|
type: z.literal("exit"),
|
|
@@ -156,12 +141,10 @@ export const processScenarioSchema = z
|
|
|
156
141
|
signal: z.enum(["SIGINT", "SIGTERM", "SIGKILL"]),
|
|
157
142
|
}),
|
|
158
143
|
]),
|
|
159
|
-
max_calls:
|
|
144
|
+
max_calls: positiveBudget.default(1),
|
|
160
145
|
}))
|
|
161
|
-
.min(1)
|
|
162
|
-
.max(100),
|
|
146
|
+
.min(1),
|
|
163
147
|
}))
|
|
164
|
-
.max(32)
|
|
165
148
|
.default([]),
|
|
166
149
|
events: z
|
|
167
150
|
.array(z.discriminatedUnion("type", [
|
|
@@ -174,8 +157,8 @@ export const processScenarioSchema = z
|
|
|
174
157
|
z.object({
|
|
175
158
|
...timedEventBase,
|
|
176
159
|
type: z.literal("resize"),
|
|
177
|
-
columns: z.number().int().min(1).max(
|
|
178
|
-
rows: z.number().int().min(1).max(
|
|
160
|
+
columns: z.number().int().min(1).max(65_535),
|
|
161
|
+
rows: z.number().int().min(1).max(65_535),
|
|
179
162
|
}),
|
|
180
163
|
z.object({
|
|
181
164
|
...timedEventBase,
|
|
@@ -183,26 +166,24 @@ export const processScenarioSchema = z
|
|
|
183
166
|
signal: z.enum(["SIGINT", "SIGTERM", "SIGKILL"]),
|
|
184
167
|
}),
|
|
185
168
|
]))
|
|
186
|
-
.max(1_000)
|
|
187
169
|
.default([]),
|
|
188
|
-
timeout_ms: positiveBudget.
|
|
189
|
-
idle_timeout_ms: positiveBudget.
|
|
190
|
-
settle_ms: z.number().int().
|
|
170
|
+
timeout_ms: positiveBudget.default(30_000),
|
|
171
|
+
idle_timeout_ms: positiveBudget.default(30_000),
|
|
172
|
+
settle_ms: z.number().int().safe().nonnegative().default(100),
|
|
191
173
|
limits: z
|
|
192
174
|
.object({
|
|
193
|
-
output_bytes: positiveBudget.
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
filesystem_depth: z.number().int().min(1).max(64).default(16),
|
|
175
|
+
output_bytes: positiveBudget.default(1_000_000),
|
|
176
|
+
files: positiveBudget.default(10_000),
|
|
177
|
+
file_bytes: positiveBudget.default(10_000_000),
|
|
178
|
+
processes: positiveBudget.default(1_000),
|
|
179
|
+
protocol_events: positiveBudget.default(10_000),
|
|
180
|
+
protocol_body_bytes: positiveBudget.default(1_000_000),
|
|
181
|
+
connections: positiveBudget.default(100),
|
|
182
|
+
filesystem_depth: z.number().int().safe().nonnegative().default(16),
|
|
202
183
|
})
|
|
184
|
+
.strict()
|
|
203
185
|
.default({
|
|
204
186
|
output_bytes: 1_000_000,
|
|
205
|
-
frames: 10_000,
|
|
206
187
|
files: 10_000,
|
|
207
188
|
file_bytes: 10_000_000,
|
|
208
189
|
processes: 1_000,
|
|
@@ -216,13 +197,12 @@ export const processScenarioSchema = z
|
|
|
216
197
|
paths: z.boolean().default(true),
|
|
217
198
|
pids: z.boolean().default(true),
|
|
218
199
|
ports: z.boolean().default(true),
|
|
219
|
-
time_bucket_ms: positiveBudget.
|
|
200
|
+
time_bucket_ms: positiveBudget.default(10),
|
|
220
201
|
patterns: z
|
|
221
202
|
.array(z.object({
|
|
222
|
-
pattern: z.string()
|
|
223
|
-
replacement: z.string()
|
|
203
|
+
pattern: z.string(),
|
|
204
|
+
replacement: z.string(),
|
|
224
205
|
}))
|
|
225
|
-
.max(32)
|
|
226
206
|
.default([]),
|
|
227
207
|
})
|
|
228
208
|
.default({
|
|
@@ -237,39 +217,27 @@ export const processScenarioSchema = z
|
|
|
237
217
|
machine: replayMachineSchema.nullable().default(null),
|
|
238
218
|
http: z
|
|
239
219
|
.array(z.object({
|
|
240
|
-
method: z.string()
|
|
220
|
+
method: z.string(),
|
|
241
221
|
path: z.string().startsWith("/"),
|
|
242
222
|
status: z.number().int().min(100).max(599),
|
|
243
|
-
body: z.string()
|
|
223
|
+
body: z.string(),
|
|
244
224
|
request_headers: z.record(z.string(), z.string()).default({}),
|
|
245
|
-
request_body: z.string().
|
|
225
|
+
request_body: z.string().optional(),
|
|
246
226
|
response_headers: z.record(z.string(), z.string()).default({}),
|
|
247
|
-
delay_ms: z.number().int().
|
|
227
|
+
delay_ms: z.number().int().safe().nonnegative().default(0),
|
|
248
228
|
disconnect: z.boolean().default(false),
|
|
249
|
-
max_calls:
|
|
229
|
+
max_calls: positiveBudget.default(1),
|
|
250
230
|
}))
|
|
251
|
-
.max(100)
|
|
252
|
-
.default([]),
|
|
253
|
-
websocket_messages: z
|
|
254
|
-
.array(z.string().max(1_000_000))
|
|
255
|
-
.max(100)
|
|
256
231
|
.default([]),
|
|
232
|
+
websocket_messages: z.array(z.string()).default([]),
|
|
257
233
|
websocket_connections: z
|
|
258
234
|
.array(z.object({
|
|
259
|
-
messages: z
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
.number()
|
|
264
|
-
.int()
|
|
265
|
-
.nonnegative()
|
|
266
|
-
.max(30_000)
|
|
267
|
-
.default(0),
|
|
268
|
-
}))
|
|
269
|
-
.max(100),
|
|
235
|
+
messages: z.array(z.object({
|
|
236
|
+
data: z.string(),
|
|
237
|
+
delay_ms: z.number().int().safe().nonnegative().default(0),
|
|
238
|
+
})),
|
|
270
239
|
disconnect_after: z.boolean().default(false),
|
|
271
240
|
}))
|
|
272
|
-
.max(100)
|
|
273
241
|
.default([]),
|
|
274
242
|
})
|
|
275
243
|
.default({
|
|
@@ -283,7 +251,9 @@ export const processScenarioSchema = z
|
|
|
283
251
|
.strict()
|
|
284
252
|
.superRefine((scenario, context) => {
|
|
285
253
|
for (let index = 1; index < scenario.events.length; index += 1) {
|
|
286
|
-
|
|
254
|
+
const event = scenario.events[index];
|
|
255
|
+
const previous = scenario.events[index - 1];
|
|
256
|
+
if (eventsOutOfOrder(event, previous)) {
|
|
287
257
|
context.addIssue({
|
|
288
258
|
code: "custom",
|
|
289
259
|
message: "events must be ordered by at_ms",
|
|
@@ -361,23 +331,22 @@ export const processScenarioSchema = z
|
|
|
361
331
|
path: ["replay"],
|
|
362
332
|
});
|
|
363
333
|
});
|
|
334
|
+
const eventsOutOfOrder = (event, previous) => event !== undefined && previous !== undefined && event.at_ms < previous.at_ms;
|
|
364
335
|
/** Parse untrusted process scenario input and apply safe default budgets. */
|
|
365
336
|
export const parseProcessScenario = (input) => processScenarioSchema.parse(input);
|
|
366
|
-
const isWithin = (candidate, root) => resolve(candidate) === resolve(root) ||
|
|
367
|
-
resolve(candidate).startsWith(`${resolve(root)}${resolve(root).endsWith("/") ? "" : "/"}`);
|
|
368
337
|
/** Evaluate scenario authority before any process or filesystem side effect occurs. */
|
|
369
338
|
export const authorizeProcessScenario = (scenario, policy) => {
|
|
370
|
-
if (
|
|
339
|
+
if (policy.status === "disabled")
|
|
371
340
|
return { allowed: false, reason: "process capture is disabled" };
|
|
372
|
-
if (scenario.network_access === "host" &&
|
|
341
|
+
if (scenario.network_access === "host" && policy.networkAccess === "none")
|
|
373
342
|
return {
|
|
374
343
|
allowed: false,
|
|
375
344
|
reason: "host network access is not approved by operator policy",
|
|
376
345
|
};
|
|
377
|
-
if (!policy.executableRoots.some((root) =>
|
|
346
|
+
if (!policy.executableRoots.some((root) => isPathWithinRoot(root, scenario.executable))) {
|
|
378
347
|
return { allowed: false, reason: "executable is outside approved roots" };
|
|
379
348
|
}
|
|
380
|
-
if (!policy.workingRoots.some((root) =>
|
|
349
|
+
if (!policy.workingRoots.some((root) => isPathWithinRoot(root, scenario.working_directory))) {
|
|
381
350
|
return {
|
|
382
351
|
allowed: false,
|
|
383
352
|
reason: "working directory is outside approved roots",
|
|
@@ -393,7 +362,7 @@ export const authorizeProcessScenario = (scenario, policy) => {
|
|
|
393
362
|
reason: "scenario requests an environment variable not allowed by policy",
|
|
394
363
|
};
|
|
395
364
|
}
|
|
396
|
-
if (scenario.filesystem_roots.some((path) => !policy.workingRoots.some((root) =>
|
|
365
|
+
if (scenario.filesystem_roots.some((path) => !policy.workingRoots.some((root) => isPathWithinRoot(root, path)))) {
|
|
397
366
|
return {
|
|
398
367
|
allowed: false,
|
|
399
368
|
reason: "filesystem root is outside approved roots",
|
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
import { validateProcessCapture } from "./processCaptureValidation.js";
|
|
2
1
|
import { evaluateProcessTraceSide, processTraceComparisonResultSchema, } from "./processTraceEvaluation.js";
|
|
3
2
|
import { processTraceSpecificationSchema, } from "./processTraceSpecification.js";
|
|
4
3
|
export { processTraceComparisonResultSchema, } from "./processTraceEvaluation.js";
|
|
5
4
|
export { processTraceSourceSchema, processTraceSpecificationSchema, } from "./processTraceSpecification.js";
|
|
6
5
|
/** Compare two captures against an explicit finite trace language. */
|
|
7
6
|
export const compareProcessTraces = (left, right, specificationInput) => {
|
|
8
|
-
const captureIssues = [
|
|
9
|
-
...validateProcessCapture(left),
|
|
10
|
-
...validateProcessCapture(right),
|
|
11
|
-
];
|
|
12
|
-
if (captureIssues.length > 0)
|
|
13
|
-
throw new TypeError(`Invalid Process Capture v4: ${captureIssues[0].path}`);
|
|
14
7
|
const specification = processTraceSpecificationSchema.parse(specificationInput);
|
|
15
8
|
const leftEvaluation = evaluateProcessTraceSide(left, specification);
|
|
16
9
|
const rightEvaluation = evaluateProcessTraceSide(right, specification);
|
|
@@ -7,12 +7,22 @@ const matchedEventSchema = z.strictObject({
|
|
|
7
7
|
event_id: identifierSchema,
|
|
8
8
|
location: locationSchema,
|
|
9
9
|
});
|
|
10
|
-
const
|
|
11
|
-
status: z.enum(["pass", "fail", "unknown"]),
|
|
12
|
-
matched_variant: identifierSchema.nullable(),
|
|
10
|
+
const sideResultShape = {
|
|
13
11
|
satisfied_constraints: z.array(z.string()),
|
|
14
12
|
raw_trace: z.array(matchedEventSchema),
|
|
15
|
-
}
|
|
13
|
+
};
|
|
14
|
+
const sideResultSchema = z.union([
|
|
15
|
+
z.strictObject({
|
|
16
|
+
...sideResultShape,
|
|
17
|
+
status: z.literal("pass"),
|
|
18
|
+
matched_variant: identifierSchema.nullable(),
|
|
19
|
+
}),
|
|
20
|
+
z.strictObject({
|
|
21
|
+
...sideResultShape,
|
|
22
|
+
status: z.enum(["fail", "unknown"]),
|
|
23
|
+
matched_variant: z.null(),
|
|
24
|
+
}),
|
|
25
|
+
]);
|
|
16
26
|
const diagnosticSchema = z.strictObject({
|
|
17
27
|
kind: z.enum([
|
|
18
28
|
"journal",
|
|
@@ -2,7 +2,7 @@ import canonicalize from "canonicalize";
|
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { jsonValueSchema } from "./jsonValue.js";
|
|
4
4
|
import { comparableProcessObservationPayload, processObservationSourceSchema, } from "./processObservation.js";
|
|
5
|
-
const identifierSchema = z.string().regex(/^[A-Za-z][A-Za-z0-9._-]
|
|
5
|
+
const identifierSchema = z.string().regex(/^[A-Za-z][A-Za-z0-9._-]*$/u);
|
|
6
6
|
/** Process observation families admitted by a declared trace specification. */
|
|
7
7
|
export const processTraceSourceSchema = processObservationSourceSchema;
|
|
8
8
|
const cardinalitySchema = z.discriminatedUnion("kind", [
|
|
@@ -10,13 +10,13 @@ const cardinalitySchema = z.discriminatedUnion("kind", [
|
|
|
10
10
|
z.strictObject({ kind: z.literal("optional") }),
|
|
11
11
|
z.strictObject({
|
|
12
12
|
kind: z.literal("exact"),
|
|
13
|
-
count: z.number().int().min(0)
|
|
13
|
+
count: z.number().int().min(0),
|
|
14
14
|
}),
|
|
15
15
|
z
|
|
16
16
|
.strictObject({
|
|
17
17
|
kind: z.literal("range"),
|
|
18
|
-
min: z.number().int().min(0)
|
|
19
|
-
max: z.number().int().min(0)
|
|
18
|
+
min: z.number().int().min(0),
|
|
19
|
+
max: z.number().int().min(0),
|
|
20
20
|
})
|
|
21
21
|
.refine(({ min, max }) => min <= max, {
|
|
22
22
|
message: "cardinality min must not exceed max",
|
|
@@ -35,7 +35,6 @@ const eventDeclarationSchema = z.strictObject({
|
|
|
35
35
|
"dispatched_at_ms",
|
|
36
36
|
"elapsed_ms",
|
|
37
37
|
]))
|
|
38
|
-
.max(5)
|
|
39
38
|
.refine((values) => new Set(values).size === values.length, {
|
|
40
39
|
message: "ignored event fields must be unique",
|
|
41
40
|
})
|
|
@@ -49,39 +48,34 @@ const partialOrderLanguageSchema = z.strictObject({
|
|
|
49
48
|
before: identifierSchema,
|
|
50
49
|
after: identifierSchema,
|
|
51
50
|
}))
|
|
52
|
-
.max(4_096)
|
|
53
51
|
.default([]),
|
|
54
52
|
not_before: z
|
|
55
53
|
.array(z.strictObject({
|
|
56
54
|
event: identifierSchema,
|
|
57
55
|
anchor: identifierSchema,
|
|
58
56
|
}))
|
|
59
|
-
.max(4_096)
|
|
60
57
|
.default([]),
|
|
61
58
|
unordered_groups: z
|
|
62
|
-
.array(z.strictObject({ events: z.array(identifierSchema).min(2)
|
|
63
|
-
.max(256)
|
|
59
|
+
.array(z.strictObject({ events: z.array(identifierSchema).min(2) }))
|
|
64
60
|
.default([]),
|
|
65
|
-
prefix: z.array(identifierSchema).
|
|
66
|
-
suffix: z.array(identifierSchema).
|
|
61
|
+
prefix: z.array(identifierSchema).default([]),
|
|
62
|
+
suffix: z.array(identifierSchema).default([]),
|
|
67
63
|
});
|
|
68
64
|
const finiteTraceTokenSchema = z.union([
|
|
69
65
|
identifierSchema,
|
|
70
|
-
z.strictObject({ unordered: z.array(identifierSchema).min(2)
|
|
66
|
+
z.strictObject({ unordered: z.array(identifierSchema).min(2) }),
|
|
71
67
|
]);
|
|
72
68
|
const finiteTraceLanguageSchema = z.strictObject({
|
|
73
69
|
kind: z.literal("finite_traces"),
|
|
74
70
|
variants: z
|
|
75
71
|
.array(z.strictObject({
|
|
76
72
|
id: identifierSchema,
|
|
77
|
-
trace: z.array(finiteTraceTokenSchema)
|
|
73
|
+
trace: z.array(finiteTraceTokenSchema),
|
|
78
74
|
}))
|
|
79
|
-
.min(1)
|
|
80
|
-
.max(64),
|
|
75
|
+
.min(1),
|
|
81
76
|
});
|
|
82
77
|
const specificationShapeSchema = z.strictObject({
|
|
83
|
-
|
|
84
|
-
events: z.array(eventDeclarationSchema).min(1).max(256),
|
|
78
|
+
events: z.array(eventDeclarationSchema).min(1),
|
|
85
79
|
language: z.discriminatedUnion("kind", [
|
|
86
80
|
partialOrderLanguageSchema,
|
|
87
81
|
finiteTraceLanguageSchema,
|