@principal-ai/subsystems-core 0.29.0 → 0.31.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 +15 -110
- package/dist/index.d.ts +7 -75
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -205
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +5 -61
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +9 -131
- package/dist/node.js.map +1 -1
- package/dist/types/index.d.ts +3 -348
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -19
- package/dist/types/index.js.map +1 -1
- package/dist/types/subsystem-model.d.ts +34 -3
- package/dist/types/subsystem-model.d.ts.map +1 -1
- package/dist/types/subsystem-model.js.map +1 -1
- package/package.json +7 -24
- package/schemas/subsystem-model.schema.json +52 -1
- package/src/index.ts +7 -580
- package/src/node.ts +21 -262
- package/src/types/index.ts +3 -456
- package/src/types/subsystem-model.ts +39 -3
- package/dist/ConfigurationLoader.d.ts +0 -76
- package/dist/ConfigurationLoader.d.ts.map +0 -1
- package/dist/ConfigurationLoader.js +0 -148
- package/dist/ConfigurationLoader.js.map +0 -1
- package/dist/ConfigurationValidator.d.ts +0 -31
- package/dist/ConfigurationValidator.d.ts.map +0 -1
- package/dist/ConfigurationValidator.js +0 -239
- package/dist/ConfigurationValidator.js.map +0 -1
- package/dist/EventProcessor.d.ts +0 -49
- package/dist/EventProcessor.d.ts.map +0 -1
- package/dist/EventProcessor.js +0 -220
- package/dist/EventProcessor.js.map +0 -1
- package/dist/EventRecorderService.d.ts +0 -305
- package/dist/EventRecorderService.d.ts.map +0 -1
- package/dist/EventRecorderService.js +0 -467
- package/dist/EventRecorderService.js.map +0 -1
- package/dist/LibraryLoader.d.ts +0 -65
- package/dist/LibraryLoader.d.ts.map +0 -1
- package/dist/LibraryLoader.js +0 -197
- package/dist/LibraryLoader.js.map +0 -1
- package/dist/PathBasedEventProcessor.d.ts +0 -77
- package/dist/PathBasedEventProcessor.d.ts.map +0 -1
- package/dist/PathBasedEventProcessor.js +0 -136
- package/dist/PathBasedEventProcessor.js.map +0 -1
- package/dist/SessionManager.d.ts +0 -194
- package/dist/SessionManager.d.ts.map +0 -1
- package/dist/SessionManager.js +0 -302
- package/dist/SessionManager.js.map +0 -1
- package/dist/ValidationEngine.d.ts +0 -31
- package/dist/ValidationEngine.d.ts.map +0 -1
- package/dist/ValidationEngine.js +0 -162
- package/dist/ValidationEngine.js.map +0 -1
- package/dist/auxiliary/AuxiliaryManifestValidator.d.ts +0 -41
- package/dist/auxiliary/AuxiliaryManifestValidator.d.ts.map +0 -1
- package/dist/auxiliary/AuxiliaryManifestValidator.js +0 -100
- package/dist/auxiliary/AuxiliaryManifestValidator.js.map +0 -1
- package/dist/auxiliary/index.d.ts +0 -9
- package/dist/auxiliary/index.d.ts.map +0 -1
- package/dist/auxiliary/index.js +0 -14
- package/dist/auxiliary/index.js.map +0 -1
- package/dist/auxiliary/validateAreaScopeDisjoint.d.ts +0 -24
- package/dist/auxiliary/validateAreaScopeDisjoint.d.ts.map +0 -1
- package/dist/auxiliary/validateAreaScopeDisjoint.js +0 -61
- package/dist/auxiliary/validateAreaScopeDisjoint.js.map +0 -1
- package/dist/cli/codegen.d.ts +0 -41
- package/dist/cli/codegen.d.ts.map +0 -1
- package/dist/cli/codegen.js +0 -257
- package/dist/cli/codegen.js.map +0 -1
- package/dist/codegen/type-generator.d.ts +0 -123
- package/dist/codegen/type-generator.d.ts.map +0 -1
- package/dist/codegen/type-generator.js +0 -433
- package/dist/codegen/type-generator.js.map +0 -1
- package/dist/codegen/usage-example.d.ts +0 -103
- package/dist/codegen/usage-example.d.ts.map +0 -1
- package/dist/codegen/usage-example.js +0 -258
- package/dist/codegen/usage-example.js.map +0 -1
- package/dist/dashboard/DashboardValidator.d.ts +0 -85
- package/dist/dashboard/DashboardValidator.d.ts.map +0 -1
- package/dist/dashboard/DashboardValidator.js +0 -775
- package/dist/dashboard/DashboardValidator.js.map +0 -1
- package/dist/dashboard/index.d.ts +0 -6
- package/dist/dashboard/index.d.ts.map +0 -1
- package/dist/dashboard/index.js +0 -10
- package/dist/dashboard/index.js.map +0 -1
- package/dist/discovery/CanvasDiscovery.d.ts +0 -160
- package/dist/discovery/CanvasDiscovery.d.ts.map +0 -1
- package/dist/discovery/CanvasDiscovery.js +0 -865
- package/dist/discovery/CanvasDiscovery.js.map +0 -1
- package/dist/discovery/CanvasFileManifest.d.ts +0 -86
- package/dist/discovery/CanvasFileManifest.d.ts.map +0 -1
- package/dist/discovery/CanvasFileManifest.js +0 -338
- package/dist/discovery/CanvasFileManifest.js.map +0 -1
- package/dist/discovery/LibraryDiscovery.d.ts +0 -108
- package/dist/discovery/LibraryDiscovery.d.ts.map +0 -1
- package/dist/discovery/LibraryDiscovery.js +0 -263
- package/dist/discovery/LibraryDiscovery.js.map +0 -1
- package/dist/discovery/types.d.ts +0 -403
- package/dist/discovery/types.d.ts.map +0 -1
- package/dist/discovery/types.js +0 -6
- package/dist/discovery/types.js.map +0 -1
- package/dist/events/EventsCanvasValidator.d.ts +0 -139
- package/dist/events/EventsCanvasValidator.d.ts.map +0 -1
- package/dist/events/EventsCanvasValidator.js +0 -281
- package/dist/events/EventsCanvasValidator.js.map +0 -1
- package/dist/events/NamespacePathIndex.d.ts +0 -61
- package/dist/events/NamespacePathIndex.d.ts.map +0 -1
- package/dist/events/NamespacePathIndex.js +0 -74
- package/dist/events/NamespacePathIndex.js.map +0 -1
- package/dist/events/OtelEventPathsValidator.d.ts +0 -75
- package/dist/events/OtelEventPathsValidator.d.ts.map +0 -1
- package/dist/events/OtelEventPathsValidator.js +0 -126
- package/dist/events/OtelEventPathsValidator.js.map +0 -1
- package/dist/events/ScopeEventsValidator.d.ts +0 -68
- package/dist/events/ScopeEventsValidator.d.ts.map +0 -1
- package/dist/events/ScopeEventsValidator.js +0 -91
- package/dist/events/ScopeEventsValidator.js.map +0 -1
- package/dist/events/index.d.ts +0 -9
- package/dist/events/index.d.ts.map +0 -1
- package/dist/events/index.js +0 -12
- package/dist/events/index.js.map +0 -1
- package/dist/events/path-helpers.d.ts +0 -33
- package/dist/events/path-helpers.d.ts.map +0 -1
- package/dist/events/path-helpers.js +0 -59
- package/dist/events/path-helpers.js.map +0 -1
- package/dist/execution/ExecutionLoader.d.ts +0 -135
- package/dist/execution/ExecutionLoader.d.ts.map +0 -1
- package/dist/execution/ExecutionLoader.js +0 -266
- package/dist/execution/ExecutionLoader.js.map +0 -1
- package/dist/execution/ExecutionValidator.d.ts +0 -94
- package/dist/execution/ExecutionValidator.d.ts.map +0 -1
- package/dist/execution/ExecutionValidator.js +0 -503
- package/dist/execution/ExecutionValidator.js.map +0 -1
- package/dist/generated/graph-converter-execution.types.d.ts +0 -177
- package/dist/generated/graph-converter-execution.types.d.ts.map +0 -1
- package/dist/generated/graph-converter-execution.types.js +0 -12
- package/dist/generated/graph-converter-execution.types.js.map +0 -1
- package/dist/helpers/GraphInstrumentationHelper.d.ts +0 -93
- package/dist/helpers/GraphInstrumentationHelper.d.ts.map +0 -1
- package/dist/helpers/GraphInstrumentationHelper.js +0 -252
- package/dist/helpers/GraphInstrumentationHelper.js.map +0 -1
- package/dist/matchers/SpanMatcher.d.ts +0 -107
- package/dist/matchers/SpanMatcher.d.ts.map +0 -1
- package/dist/matchers/SpanMatcher.js +0 -274
- package/dist/matchers/SpanMatcher.js.map +0 -1
- package/dist/orchestration/TraceOrchestrator.d.ts +0 -71
- package/dist/orchestration/TraceOrchestrator.d.ts.map +0 -1
- package/dist/orchestration/TraceOrchestrator.js +0 -416
- package/dist/orchestration/TraceOrchestrator.js.map +0 -1
- package/dist/parsers/OtlpTraceParser.d.ts +0 -131
- package/dist/parsers/OtlpTraceParser.d.ts.map +0 -1
- package/dist/parsers/OtlpTraceParser.js +0 -310
- package/dist/parsers/OtlpTraceParser.js.map +0 -1
- package/dist/registry/CompositeRegistry.d.ts +0 -71
- package/dist/registry/CompositeRegistry.d.ts.map +0 -1
- package/dist/registry/CompositeRegistry.js +0 -113
- package/dist/registry/CompositeRegistry.js.map +0 -1
- package/dist/registry/EventRegistry.d.ts +0 -79
- package/dist/registry/EventRegistry.d.ts.map +0 -1
- package/dist/registry/EventRegistry.js +0 -165
- package/dist/registry/EventRegistry.js.map +0 -1
- package/dist/registry/LocalRegistry.d.ts +0 -111
- package/dist/registry/LocalRegistry.d.ts.map +0 -1
- package/dist/registry/LocalRegistry.js +0 -335
- package/dist/registry/LocalRegistry.js.map +0 -1
- package/dist/registry/RemoteRegistry.d.ts +0 -122
- package/dist/registry/RemoteRegistry.d.ts.map +0 -1
- package/dist/registry/RemoteRegistry.js +0 -399
- package/dist/registry/RemoteRegistry.js.map +0 -1
- package/dist/registry/VersionRegistry.d.ts +0 -51
- package/dist/registry/VersionRegistry.d.ts.map +0 -1
- package/dist/registry/VersionRegistry.js +0 -105
- package/dist/registry/VersionRegistry.js.map +0 -1
- package/dist/rules/config.d.ts +0 -57
- package/dist/rules/config.d.ts.map +0 -1
- package/dist/rules/config.js +0 -382
- package/dist/rules/config.js.map +0 -1
- package/dist/rules/engine.d.ts +0 -70
- package/dist/rules/engine.d.ts.map +0 -1
- package/dist/rules/engine.js +0 -373
- package/dist/rules/engine.js.map +0 -1
- package/dist/rules/implementations/connection-type-references.d.ts +0 -7
- package/dist/rules/implementations/connection-type-references.d.ts.map +0 -1
- package/dist/rules/implementations/connection-type-references.js +0 -107
- package/dist/rules/implementations/connection-type-references.js.map +0 -1
- package/dist/rules/implementations/dead-end-states.d.ts +0 -17
- package/dist/rules/implementations/dead-end-states.d.ts.map +0 -1
- package/dist/rules/implementations/dead-end-states.js +0 -75
- package/dist/rules/implementations/dead-end-states.js.map +0 -1
- package/dist/rules/implementations/index.d.ts +0 -23
- package/dist/rules/implementations/index.d.ts.map +0 -1
- package/dist/rules/implementations/index.js +0 -73
- package/dist/rules/implementations/index.js.map +0 -1
- package/dist/rules/implementations/minimum-node-sources.d.ts +0 -24
- package/dist/rules/implementations/minimum-node-sources.d.ts.map +0 -1
- package/dist/rules/implementations/minimum-node-sources.js +0 -59
- package/dist/rules/implementations/minimum-node-sources.js.map +0 -1
- package/dist/rules/implementations/no-unknown-fields.d.ts +0 -7
- package/dist/rules/implementations/no-unknown-fields.d.ts.map +0 -1
- package/dist/rules/implementations/no-unknown-fields.js +0 -216
- package/dist/rules/implementations/no-unknown-fields.js.map +0 -1
- package/dist/rules/implementations/orphaned-edge-types.d.ts +0 -7
- package/dist/rules/implementations/orphaned-edge-types.d.ts.map +0 -1
- package/dist/rules/implementations/orphaned-edge-types.js +0 -50
- package/dist/rules/implementations/orphaned-edge-types.js.map +0 -1
- package/dist/rules/implementations/orphaned-node-types.d.ts +0 -7
- package/dist/rules/implementations/orphaned-node-types.d.ts.map +0 -1
- package/dist/rules/implementations/orphaned-node-types.js +0 -53
- package/dist/rules/implementations/orphaned-node-types.js.map +0 -1
- package/dist/rules/implementations/required-metadata.d.ts +0 -7
- package/dist/rules/implementations/required-metadata.d.ts.map +0 -1
- package/dist/rules/implementations/required-metadata.js +0 -48
- package/dist/rules/implementations/required-metadata.js.map +0 -1
- package/dist/rules/implementations/state-transition-references.d.ts +0 -7
- package/dist/rules/implementations/state-transition-references.d.ts.map +0 -1
- package/dist/rules/implementations/state-transition-references.js +0 -138
- package/dist/rules/implementations/state-transition-references.js.map +0 -1
- package/dist/rules/implementations/unreachable-states.d.ts +0 -7
- package/dist/rules/implementations/unreachable-states.d.ts.map +0 -1
- package/dist/rules/implementations/unreachable-states.js +0 -83
- package/dist/rules/implementations/unreachable-states.js.map +0 -1
- package/dist/rules/implementations/valid-action-patterns.d.ts +0 -17
- package/dist/rules/implementations/valid-action-patterns.d.ts.map +0 -1
- package/dist/rules/implementations/valid-action-patterns.js +0 -112
- package/dist/rules/implementations/valid-action-patterns.js.map +0 -1
- package/dist/rules/implementations/valid-color-format.d.ts +0 -7
- package/dist/rules/implementations/valid-color-format.d.ts.map +0 -1
- package/dist/rules/implementations/valid-color-format.js +0 -94
- package/dist/rules/implementations/valid-color-format.js.map +0 -1
- package/dist/rules/implementations/valid-edge-types.d.ts +0 -7
- package/dist/rules/implementations/valid-edge-types.d.ts.map +0 -1
- package/dist/rules/implementations/valid-edge-types.js +0 -248
- package/dist/rules/implementations/valid-edge-types.js.map +0 -1
- package/dist/rules/implementations/valid-node-types.d.ts +0 -7
- package/dist/rules/implementations/valid-node-types.d.ts.map +0 -1
- package/dist/rules/implementations/valid-node-types.js +0 -187
- package/dist/rules/implementations/valid-node-types.js.map +0 -1
- package/dist/rules/index.d.ts +0 -28
- package/dist/rules/index.d.ts.map +0 -1
- package/dist/rules/index.js +0 -70
- package/dist/rules/index.js.map +0 -1
- package/dist/rules/types.d.ts +0 -309
- package/dist/rules/types.d.ts.map +0 -1
- package/dist/rules/types.js +0 -40
- package/dist/rules/types.js.map +0 -1
- package/dist/scopes/ScopePathIndex.d.ts +0 -56
- package/dist/scopes/ScopePathIndex.d.ts.map +0 -1
- package/dist/scopes/ScopePathIndex.js +0 -67
- package/dist/scopes/ScopePathIndex.js.map +0 -1
- package/dist/scopes/ScopesCanvasValidator.d.ts +0 -76
- package/dist/scopes/ScopesCanvasValidator.d.ts.map +0 -1
- package/dist/scopes/ScopesCanvasValidator.js +0 -221
- package/dist/scopes/ScopesCanvasValidator.js.map +0 -1
- package/dist/scopes/index.d.ts +0 -12
- package/dist/scopes/index.d.ts.map +0 -1
- package/dist/scopes/index.js +0 -30
- package/dist/scopes/index.js.map +0 -1
- package/dist/scopes/utils.d.ts +0 -85
- package/dist/scopes/utils.d.ts.map +0 -1
- package/dist/scopes/utils.js +0 -143
- package/dist/scopes/utils.js.map +0 -1
- package/dist/scopes/validateScopeNamespaceNesting.d.ts +0 -38
- package/dist/scopes/validateScopeNamespaceNesting.d.ts.map +0 -1
- package/dist/scopes/validateScopeNamespaceNesting.js +0 -69
- package/dist/scopes/validateScopeNamespaceNesting.js.map +0 -1
- package/dist/spans/index.d.ts +0 -12
- package/dist/spans/index.d.ts.map +0 -1
- package/dist/spans/index.js +0 -25
- package/dist/spans/index.js.map +0 -1
- package/dist/spans/utils.d.ts +0 -70
- package/dist/spans/utils.d.ts.map +0 -1
- package/dist/spans/utils.js +0 -205
- package/dist/spans/utils.js.map +0 -1
- package/dist/storyboard/builder.d.ts +0 -135
- package/dist/storyboard/builder.d.ts.map +0 -1
- package/dist/storyboard/builder.js +0 -235
- package/dist/storyboard/builder.js.map +0 -1
- package/dist/storyboard/index.d.ts +0 -9
- package/dist/storyboard/index.d.ts.map +0 -1
- package/dist/storyboard/index.js +0 -18
- package/dist/storyboard/index.js.map +0 -1
- package/dist/storyboard/types.d.ts +0 -101
- package/dist/storyboard/types.d.ts.map +0 -1
- package/dist/storyboard/types.js +0 -10
- package/dist/storyboard/types.js.map +0 -1
- package/dist/telemetry/coverage.d.ts +0 -92
- package/dist/telemetry/coverage.d.ts.map +0 -1
- package/dist/telemetry/coverage.js +0 -335
- package/dist/telemetry/coverage.js.map +0 -1
- package/dist/telemetry/event-validator.d.ts +0 -86
- package/dist/telemetry/event-validator.d.ts.map +0 -1
- package/dist/telemetry/event-validator.js +0 -257
- package/dist/telemetry/event-validator.js.map +0 -1
- package/dist/types/audit.d.ts +0 -236
- package/dist/types/audit.d.ts.map +0 -1
- package/dist/types/audit.js +0 -53
- package/dist/types/audit.js.map +0 -1
- package/dist/types/auxiliary.d.ts +0 -54
- package/dist/types/auxiliary.d.ts.map +0 -1
- package/dist/types/auxiliary.js +0 -27
- package/dist/types/auxiliary.js.map +0 -1
- package/dist/types/canvas-scope.d.ts +0 -156
- package/dist/types/canvas-scope.d.ts.map +0 -1
- package/dist/types/canvas-scope.js +0 -62
- package/dist/types/canvas-scope.js.map +0 -1
- package/dist/types/canvas.d.ts +0 -1138
- package/dist/types/canvas.d.ts.map +0 -1
- package/dist/types/canvas.js +0 -178
- package/dist/types/canvas.js.map +0 -1
- package/dist/types/dashboard.d.ts +0 -170
- package/dist/types/dashboard.d.ts.map +0 -1
- package/dist/types/dashboard.js +0 -14
- package/dist/types/dashboard.js.map +0 -1
- package/dist/types/library.d.ts +0 -227
- package/dist/types/library.d.ts.map +0 -1
- package/dist/types/library.js +0 -16
- package/dist/types/library.js.map +0 -1
- package/dist/types/otel.d.ts +0 -465
- package/dist/types/otel.d.ts.map +0 -1
- package/dist/types/otel.js +0 -163
- package/dist/types/otel.js.map +0 -1
- package/dist/types/path-based-config.d.ts +0 -235
- package/dist/types/path-based-config.d.ts.map +0 -1
- package/dist/types/path-based-config.js +0 -11
- package/dist/types/path-based-config.js.map +0 -1
- package/dist/types/registered-trace.d.ts +0 -337
- package/dist/types/registered-trace.d.ts.map +0 -1
- package/dist/types/registered-trace.js +0 -16
- package/dist/types/registered-trace.js.map +0 -1
- package/dist/types/resource-match.d.ts +0 -207
- package/dist/types/resource-match.d.ts.map +0 -1
- package/dist/types/resource-match.js +0 -74
- package/dist/types/resource-match.js.map +0 -1
- package/dist/types/version-registry.d.ts +0 -137
- package/dist/types/version-registry.d.ts.map +0 -1
- package/dist/types/version-registry.js +0 -10
- package/dist/types/version-registry.js.map +0 -1
- package/dist/utils/CanvasConverter.d.ts +0 -148
- package/dist/utils/CanvasConverter.d.ts.map +0 -1
- package/dist/utils/CanvasConverter.js +0 -530
- package/dist/utils/CanvasConverter.js.map +0 -1
- package/dist/utils/GraphConverter.d.ts +0 -18
- package/dist/utils/GraphConverter.d.ts.map +0 -1
- package/dist/utils/GraphConverter.js +0 -80
- package/dist/utils/GraphConverter.js.map +0 -1
- package/dist/utils/PathMatcher.d.ts +0 -55
- package/dist/utils/PathMatcher.d.ts.map +0 -1
- package/dist/utils/PathMatcher.js +0 -178
- package/dist/utils/PathMatcher.js.map +0 -1
- package/dist/utils/TraceToCanvas.d.ts +0 -83
- package/dist/utils/TraceToCanvas.d.ts.map +0 -1
- package/dist/utils/TraceToCanvas.js +0 -336
- package/dist/utils/TraceToCanvas.js.map +0 -1
- package/dist/utils/YamlParser.d.ts +0 -36
- package/dist/utils/YamlParser.d.ts.map +0 -1
- package/dist/utils/YamlParser.js +0 -92
- package/dist/utils/YamlParser.js.map +0 -1
- package/dist/utils/registeredTraceHelpers.d.ts +0 -76
- package/dist/utils/registeredTraceHelpers.d.ts.map +0 -1
- package/dist/utils/registeredTraceHelpers.js +0 -203
- package/dist/utils/registeredTraceHelpers.js.map +0 -1
- package/dist/utils/traceAggregation.d.ts +0 -25
- package/dist/utils/traceAggregation.d.ts.map +0 -1
- package/dist/utils/traceAggregation.js +0 -140
- package/dist/utils/traceAggregation.js.map +0 -1
- package/dist/validation/OtelCanvasValidator.d.ts +0 -40
- package/dist/validation/OtelCanvasValidator.d.ts.map +0 -1
- package/dist/validation/OtelCanvasValidator.js +0 -59
- package/dist/validation/OtelCanvasValidator.js.map +0 -1
- package/dist/validation/index.d.ts +0 -8
- package/dist/validation/index.d.ts.map +0 -1
- package/dist/validation/index.js +0 -13
- package/dist/validation/index.js.map +0 -1
- package/dist/validation/libraryValidation.d.ts +0 -53
- package/dist/validation/libraryValidation.d.ts.map +0 -1
- package/dist/validation/libraryValidation.js +0 -115
- package/dist/validation/libraryValidation.js.map +0 -1
- package/dist/workflow/edge-derivation.d.ts +0 -111
- package/dist/workflow/edge-derivation.d.ts.map +0 -1
- package/dist/workflow/edge-derivation.js +0 -174
- package/dist/workflow/edge-derivation.js.map +0 -1
- package/dist/workflow/edge-validation.d.ts +0 -170
- package/dist/workflow/edge-validation.d.ts.map +0 -1
- package/dist/workflow/edge-validation.js +0 -332
- package/dist/workflow/edge-validation.js.map +0 -1
- package/dist/workflow/example.d.ts +0 -11
- package/dist/workflow/example.d.ts.map +0 -1
- package/dist/workflow/example.js +0 -310
- package/dist/workflow/example.js.map +0 -1
- package/dist/workflow/index.d.ts +0 -20
- package/dist/workflow/index.d.ts.map +0 -1
- package/dist/workflow/index.js +0 -49
- package/dist/workflow/index.js.map +0 -1
- package/dist/workflow/scenario-matcher.d.ts +0 -63
- package/dist/workflow/scenario-matcher.d.ts.map +0 -1
- package/dist/workflow/scenario-matcher.js +0 -215
- package/dist/workflow/scenario-matcher.js.map +0 -1
- package/dist/workflow/template-parser.d.ts +0 -73
- package/dist/workflow/template-parser.d.ts.map +0 -1
- package/dist/workflow/template-parser.js +0 -280
- package/dist/workflow/template-parser.js.map +0 -1
- package/dist/workflow/template-renderer.d.ts +0 -45
- package/dist/workflow/template-renderer.d.ts.map +0 -1
- package/dist/workflow/template-renderer.js +0 -401
- package/dist/workflow/template-renderer.js.map +0 -1
- package/dist/workflow/types.d.ts +0 -393
- package/dist/workflow/types.d.ts.map +0 -1
- package/dist/workflow/types.js +0 -40
- package/dist/workflow/types.js.map +0 -1
- package/dist/workflow/validator.d.ts +0 -363
- package/dist/workflow/validator.d.ts.map +0 -1
- package/dist/workflow/validator.js +0 -2283
- package/dist/workflow/validator.js.map +0 -1
- package/schemas/auxiliary.manifest.schema.json +0 -56
- package/src/ConfigurationLoader.test.ts +0 -466
- package/src/ConfigurationLoader.ts +0 -184
- package/src/ConfigurationValidator.test.ts +0 -200
- package/src/ConfigurationValidator.ts +0 -273
- package/src/EventProcessor.test.ts +0 -405
- package/src/EventProcessor.ts +0 -256
- package/src/EventRecorderService.test.ts +0 -543
- package/src/EventRecorderService.ts +0 -741
- package/src/LibraryLoader.ts +0 -194
- package/src/PathBasedEventProcessor.test.ts +0 -336
- package/src/PathBasedEventProcessor.ts +0 -196
- package/src/SessionManager.test.ts +0 -424
- package/src/SessionManager.ts +0 -471
- package/src/ValidationEngine.test.ts +0 -520
- package/src/ValidationEngine.ts +0 -200
- package/src/auxiliary/AuxiliaryManifestValidator.test.ts +0 -93
- package/src/auxiliary/AuxiliaryManifestValidator.ts +0 -132
- package/src/auxiliary/index.ts +0 -18
- package/src/auxiliary/validateAreaScopeDisjoint.test.ts +0 -85
- package/src/auxiliary/validateAreaScopeDisjoint.ts +0 -72
- package/src/cli/codegen.ts +0 -286
- package/src/codegen/type-generator.test.ts +0 -219
- package/src/codegen/type-generator.ts +0 -560
- package/src/codegen/usage-example.ts +0 -357
- package/src/dashboard/DashboardValidator.ts +0 -904
- package/src/dashboard/index.ts +0 -14
- package/src/discovery/CanvasDiscovery.test.ts +0 -691
- package/src/discovery/CanvasDiscovery.ts +0 -1114
- package/src/discovery/CanvasFileManifest.test.ts +0 -521
- package/src/discovery/CanvasFileManifest.ts +0 -419
- package/src/discovery/LibraryDiscovery.test.ts +0 -329
- package/src/discovery/LibraryDiscovery.ts +0 -386
- package/src/discovery/types.ts +0 -453
- package/src/events/EventsCanvasValidator.test.ts +0 -191
- package/src/events/EventsCanvasValidator.ts +0 -428
- package/src/events/NamespacePathIndex.test.ts +0 -97
- package/src/events/NamespacePathIndex.ts +0 -100
- package/src/events/OtelEventPathsValidator.test.ts +0 -243
- package/src/events/OtelEventPathsValidator.ts +0 -191
- package/src/events/ScopeEventsValidator.test.ts +0 -173
- package/src/events/ScopeEventsValidator.ts +0 -158
- package/src/events/index.ts +0 -27
- package/src/events/path-helpers.ts +0 -53
- package/src/execution/ExecutionLoader.test.ts +0 -378
- package/src/execution/ExecutionLoader.ts +0 -331
- package/src/execution/ExecutionValidator.test.ts +0 -503
- package/src/execution/ExecutionValidator.ts +0 -617
- package/src/generated/graph-converter-execution.types.ts +0 -193
- package/src/helpers/GraphInstrumentationHelper.test.ts +0 -364
- package/src/helpers/GraphInstrumentationHelper.ts +0 -323
- package/src/matchers/SpanMatcher.test.ts +0 -1105
- package/src/matchers/SpanMatcher.ts +0 -381
- package/src/orchestration/TraceOrchestrator.ts +0 -560
- package/src/orchestration/__tests__/TraceOrchestrator.test.ts +0 -1098
- package/src/parsers/OtlpTraceParser.ts +0 -401
- package/src/parsers/__tests__/OtlpTraceParser.test.ts +0 -197
- package/src/registry/CompositeRegistry.ts +0 -140
- package/src/registry/EventRegistry.test.ts +0 -387
- package/src/registry/EventRegistry.ts +0 -191
- package/src/registry/LocalRegistry.ts +0 -416
- package/src/registry/RemoteRegistry.ts +0 -499
- package/src/registry/VersionRegistry.test.ts +0 -223
- package/src/registry/VersionRegistry.ts +0 -121
- package/src/rules/config.test.ts +0 -277
- package/src/rules/config.ts +0 -450
- package/src/rules/engine.test.ts +0 -331
- package/src/rules/engine.ts +0 -448
- package/src/rules/implementations/connection-type-references.ts +0 -117
- package/src/rules/implementations/dead-end-states.ts +0 -101
- package/src/rules/implementations/index.ts +0 -66
- package/src/rules/implementations/minimum-node-sources.ts +0 -84
- package/src/rules/implementations/no-unknown-fields.ts +0 -372
- package/src/rules/implementations/orphaned-edge-types.ts +0 -55
- package/src/rules/implementations/orphaned-node-types.ts +0 -58
- package/src/rules/implementations/required-metadata.ts +0 -52
- package/src/rules/implementations/state-transition-references.ts +0 -155
- package/src/rules/implementations/unreachable-states.ts +0 -94
- package/src/rules/implementations/valid-action-patterns.ts +0 -140
- package/src/rules/implementations/valid-color-format.ts +0 -152
- package/src/rules/implementations/valid-edge-types.ts +0 -273
- package/src/rules/implementations/valid-node-types.ts +0 -200
- package/src/rules/index.ts +0 -92
- package/src/rules/types.ts +0 -426
- package/src/scopes/ScopePathIndex.test.ts +0 -94
- package/src/scopes/ScopePathIndex.ts +0 -89
- package/src/scopes/ScopesCanvasValidator.test.ts +0 -127
- package/src/scopes/ScopesCanvasValidator.ts +0 -305
- package/src/scopes/__tests__/utils.test.ts +0 -383
- package/src/scopes/index.ts +0 -42
- package/src/scopes/utils.ts +0 -182
- package/src/scopes/validateScopeNamespaceNesting.test.ts +0 -127
- package/src/scopes/validateScopeNamespaceNesting.ts +0 -88
- package/src/spans/index.ts +0 -24
- package/src/spans/utils.ts +0 -249
- package/src/storyboard/builder.ts +0 -308
- package/src/storyboard/index.ts +0 -26
- package/src/storyboard/types.ts +0 -117
- package/src/telemetry/coverage.ts +0 -480
- package/src/telemetry/event-validator.ts +0 -312
- package/src/types/audit.ts +0 -314
- package/src/types/auxiliary.ts +0 -63
- package/src/types/canvas-scope.ts +0 -190
- package/src/types/canvas.test.ts +0 -199
- package/src/types/canvas.ts +0 -1395
- package/src/types/dashboard.ts +0 -257
- package/src/types/library.ts +0 -283
- package/src/types/otel.test.ts +0 -219
- package/src/types/otel.ts +0 -620
- package/src/types/path-based-config.ts +0 -285
- package/src/types/registered-trace.ts +0 -432
- package/src/types/resource-match.ts +0 -263
- package/src/types/version-registry.ts +0 -150
- package/src/utils/CanvasConverter.ts +0 -670
- package/src/utils/GraphConverter.test.ts +0 -322
- package/src/utils/GraphConverter.ts +0 -84
- package/src/utils/PathMatcher.test.ts +0 -139
- package/src/utils/PathMatcher.ts +0 -185
- package/src/utils/TraceToCanvas.test.ts +0 -310
- package/src/utils/TraceToCanvas.ts +0 -510
- package/src/utils/YamlParser.ts +0 -77
- package/src/utils/registeredTraceHelpers.ts +0 -251
- package/src/utils/traceAggregation.test.ts +0 -385
- package/src/utils/traceAggregation.ts +0 -173
- package/src/validation/OtelCanvasValidator.ts +0 -86
- package/src/validation/index.ts +0 -17
- package/src/validation/libraryValidation.ts +0 -206
- package/src/workflow/README.md +0 -408
- package/src/workflow/__tests__/edge-derivation.test.ts +0 -449
- package/src/workflow/__tests__/edge-validation.test.ts +0 -417
- package/src/workflow/__tests__/scenario-matcher.test.ts +0 -225
- package/src/workflow/__tests__/template-parser.test.ts +0 -276
- package/src/workflow/__tests__/template-renderer.test.ts +0 -509
- package/src/workflow/__tests__/types.test.ts +0 -187
- package/src/workflow/__tests__/validator.test.ts +0 -3225
- package/src/workflow/edge-derivation.ts +0 -265
- package/src/workflow/edge-validation.ts +0 -503
- package/src/workflow/example.ts +0 -330
- package/src/workflow/index.ts +0 -86
- package/src/workflow/scenario-matcher.ts +0 -253
- package/src/workflow/template-parser.ts +0 -350
- package/src/workflow/template-renderer.ts +0 -453
- package/src/workflow/types.ts +0 -511
- package/src/workflow/validator.ts +0 -2737
package/src/ValidationEngine.ts
DELETED
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
EdgeEvent,
|
|
3
|
-
GraphEvent,
|
|
4
|
-
GraphState,
|
|
5
|
-
StateEvent,
|
|
6
|
-
ValidationResult,
|
|
7
|
-
ValidationRules,
|
|
8
|
-
Violation,
|
|
9
|
-
Warning,
|
|
10
|
-
} from './types';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* ValidationEngine checks events against defined rules
|
|
14
|
-
*/
|
|
15
|
-
export class ValidationEngine {
|
|
16
|
-
private rules: ValidationRules;
|
|
17
|
-
private violationCount = 0;
|
|
18
|
-
private warningCount = 0;
|
|
19
|
-
|
|
20
|
-
constructor(rules: ValidationRules) {
|
|
21
|
-
this.rules = rules;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Validate an event against all rules
|
|
26
|
-
*/
|
|
27
|
-
validate(event: GraphEvent, state: GraphState): ValidationResult {
|
|
28
|
-
const violations: Violation[] = [];
|
|
29
|
-
const warnings: Warning[] = [];
|
|
30
|
-
|
|
31
|
-
// Check connection rules
|
|
32
|
-
if (event.category === 'edge' && event.operation === 'create') {
|
|
33
|
-
violations.push(...this.validateConnection(event, state));
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// Check state transition rules
|
|
37
|
-
if (event.category === 'state') {
|
|
38
|
-
violations.push(...this.validateStateTransition(event, state));
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// Check if event was expected
|
|
42
|
-
if (event.expected === false) {
|
|
43
|
-
violations.push(this.createUnexpectedEventViolation(event));
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// Update counters
|
|
47
|
-
this.violationCount += violations.filter((v) => v.severity === 'error').length;
|
|
48
|
-
this.warningCount += violations.filter((v) => v.severity === 'warning').length;
|
|
49
|
-
|
|
50
|
-
return {
|
|
51
|
-
valid: violations.filter((v) => v.severity === 'error').length === 0,
|
|
52
|
-
violations,
|
|
53
|
-
warnings,
|
|
54
|
-
metrics: {
|
|
55
|
-
totalEvents: 1,
|
|
56
|
-
validEvents: violations.length === 0 ? 1 : 0,
|
|
57
|
-
violations: violations.filter((v) => v.severity === 'error').length,
|
|
58
|
-
warnings: violations.filter((v) => v.severity === 'warning').length,
|
|
59
|
-
unexpectedEvents: event.expected === false ? 1 : 0,
|
|
60
|
-
expectedEventsMissing: 0,
|
|
61
|
-
},
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Check constraints across the entire graph state
|
|
67
|
-
*/
|
|
68
|
-
checkConstraints(state: GraphState): Violation[] {
|
|
69
|
-
const violations: Violation[] = [];
|
|
70
|
-
|
|
71
|
-
// Check cardinality constraints
|
|
72
|
-
if (this.rules.cardinality) {
|
|
73
|
-
for (const [nodeType, rule] of Object.entries(this.rules.cardinality)) {
|
|
74
|
-
const count = Array.from(state.nodes.values()).filter((n) => n.type === nodeType).length;
|
|
75
|
-
|
|
76
|
-
if (rule.min !== undefined && count < rule.min) {
|
|
77
|
-
violations.push({
|
|
78
|
-
id: `cardinality-${nodeType}-min`,
|
|
79
|
-
severity: 'error',
|
|
80
|
-
type: 'cardinality',
|
|
81
|
-
description: `Node type '${nodeType}' has ${count} instances but requires at least ${rule.min}`,
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
if (rule.max !== undefined && count > rule.max) {
|
|
86
|
-
violations.push({
|
|
87
|
-
id: `cardinality-${nodeType}-max`,
|
|
88
|
-
severity: 'error',
|
|
89
|
-
type: 'cardinality',
|
|
90
|
-
description: `Node type '${nodeType}' has ${count} instances but allows at most ${rule.max}`,
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
return violations;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Validate connection rules
|
|
101
|
-
*/
|
|
102
|
-
private validateConnection(event: GraphEvent, state: GraphState): Violation[] {
|
|
103
|
-
const violations: Violation[] = [];
|
|
104
|
-
const payload = event.payload as EdgeEvent;
|
|
105
|
-
|
|
106
|
-
// Get the nodes being connected
|
|
107
|
-
const fromNode = state.nodes.get(payload.from);
|
|
108
|
-
const toNode = state.nodes.get(payload.to);
|
|
109
|
-
|
|
110
|
-
if (!fromNode || !toNode) {
|
|
111
|
-
violations.push({
|
|
112
|
-
id: `connection-${event.id}`,
|
|
113
|
-
severity: 'error',
|
|
114
|
-
type: 'connection',
|
|
115
|
-
description: 'Cannot create edge: one or both nodes do not exist',
|
|
116
|
-
event,
|
|
117
|
-
context: {
|
|
118
|
-
edgeId: payload.edgeId,
|
|
119
|
-
},
|
|
120
|
-
});
|
|
121
|
-
return violations;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// Check if this connection is allowed
|
|
125
|
-
const allowedConnections = state.configuration.allowedConnections || [];
|
|
126
|
-
const isAllowed = allowedConnections.some(
|
|
127
|
-
(rule) =>
|
|
128
|
-
rule.from === fromNode.type && rule.to === toNode.type && rule.via === payload.edgeType
|
|
129
|
-
);
|
|
130
|
-
|
|
131
|
-
if (!isAllowed) {
|
|
132
|
-
violations.push({
|
|
133
|
-
id: `connection-${event.id}`,
|
|
134
|
-
severity: 'error',
|
|
135
|
-
type: 'connection',
|
|
136
|
-
description: `Connection from '${fromNode.type}' to '${toNode.type}' via '${payload.edgeType}' is not allowed`,
|
|
137
|
-
event,
|
|
138
|
-
context: {
|
|
139
|
-
edgeId: payload.edgeId,
|
|
140
|
-
},
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
return violations;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Validate state transitions
|
|
149
|
-
*/
|
|
150
|
-
private validateStateTransition(event: GraphEvent, state: GraphState): Violation[] {
|
|
151
|
-
const violations: Violation[] = [];
|
|
152
|
-
const payload = event.payload as StateEvent;
|
|
153
|
-
|
|
154
|
-
const node = state.nodes.get(payload.nodeId);
|
|
155
|
-
if (!node) {
|
|
156
|
-
return violations;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
const transitions = this.rules.stateTransitions?.[node.type];
|
|
160
|
-
if (!transitions) {
|
|
161
|
-
return violations;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
const currentState = payload.previousState || node.state;
|
|
165
|
-
const newState = payload.newState;
|
|
166
|
-
|
|
167
|
-
// Find valid transitions from current state
|
|
168
|
-
const validTransition = transitions.find((t) => t.from === currentState);
|
|
169
|
-
|
|
170
|
-
if (validTransition && !validTransition.to.includes(newState)) {
|
|
171
|
-
violations.push({
|
|
172
|
-
id: `state-transition-${event.id}`,
|
|
173
|
-
severity: 'error',
|
|
174
|
-
type: 'state',
|
|
175
|
-
description: `Invalid state transition for '${
|
|
176
|
-
node.type
|
|
177
|
-
}': ${currentState} -> ${newState}. Valid transitions: ${validTransition.to.join(', ')}`,
|
|
178
|
-
event,
|
|
179
|
-
context: {
|
|
180
|
-
nodeId: payload.nodeId,
|
|
181
|
-
},
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
return violations;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Create violation for unexpected event
|
|
190
|
-
*/
|
|
191
|
-
private createUnexpectedEventViolation(event: GraphEvent): Violation {
|
|
192
|
-
return {
|
|
193
|
-
id: `unexpected-${event.id}`,
|
|
194
|
-
severity: 'warning',
|
|
195
|
-
type: 'unexpected_event',
|
|
196
|
-
description: `Unexpected event: ${event.type}`,
|
|
197
|
-
event,
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from 'bun:test';
|
|
2
|
-
import { mkdtempSync, mkdirSync, writeFileSync } from 'fs';
|
|
3
|
-
import { tmpdir } from 'os';
|
|
4
|
-
import { join } from 'path';
|
|
5
|
-
import { NodeFileSystemAdapter } from '@principal-ai/repository-abstraction/node';
|
|
6
|
-
import { AuxiliaryManifestValidator } from './AuxiliaryManifestValidator';
|
|
7
|
-
import type { AuxiliaryManifest } from '../types/auxiliary';
|
|
8
|
-
|
|
9
|
-
function makeRepo(layout: string[]): string {
|
|
10
|
-
const root = mkdtempSync(join(tmpdir(), 'aux-manifest-'));
|
|
11
|
-
for (const rel of layout) {
|
|
12
|
-
const full = join(root, rel);
|
|
13
|
-
mkdirSync(full.substring(0, full.lastIndexOf('/')) || full, { recursive: true });
|
|
14
|
-
if (!rel.endsWith('/')) writeFileSync(full, '');
|
|
15
|
-
}
|
|
16
|
-
return root;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
describe('AuxiliaryManifestValidator', () => {
|
|
20
|
-
const validator = new AuxiliaryManifestValidator(new NodeFileSystemAdapter());
|
|
21
|
-
|
|
22
|
-
test('no manifest is a no-op', async () => {
|
|
23
|
-
const result = await validator.validate({ basePath: '/tmp' });
|
|
24
|
-
expect(result.valid).toBe(true);
|
|
25
|
-
expect(result.violations).toHaveLength(0);
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
test('passes for a clean manifest', async () => {
|
|
29
|
-
const root = makeRepo(['docs/README.md', '.github/workflows/ci.yml']);
|
|
30
|
-
const manifest: AuxiliaryManifest = {
|
|
31
|
-
areas: [
|
|
32
|
-
{ name: 'Documentation', paths: ['docs'], description: 'design docs' },
|
|
33
|
-
{ name: 'GitHub', paths: ['.github'], description: 'CI config' },
|
|
34
|
-
],
|
|
35
|
-
};
|
|
36
|
-
const result = await validator.validate({ manifest, basePath: root });
|
|
37
|
-
expect(result.valid).toBe(true);
|
|
38
|
-
expect(result.violations).toHaveLength(0);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
test('flags duplicate area names', async () => {
|
|
42
|
-
const root = makeRepo(['docs/README.md', 'misc/note.txt']);
|
|
43
|
-
const manifest: AuxiliaryManifest = {
|
|
44
|
-
areas: [
|
|
45
|
-
{ name: 'Docs', paths: ['docs'], description: 'a' },
|
|
46
|
-
{ name: 'Docs', paths: ['misc'], description: 'b' },
|
|
47
|
-
],
|
|
48
|
-
};
|
|
49
|
-
const result = await validator.validate({ manifest, basePath: root });
|
|
50
|
-
const dup = result.violations.find((v) => v.ruleId === 'auxiliary-area-name-duplicate');
|
|
51
|
-
expect(dup).toBeDefined();
|
|
52
|
-
expect(dup!.severity).toBe('error');
|
|
53
|
-
expect(result.valid).toBe(false);
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
test('warns when a declared path does not exist', async () => {
|
|
57
|
-
const root = makeRepo(['docs/README.md']);
|
|
58
|
-
const manifest: AuxiliaryManifest = {
|
|
59
|
-
areas: [{ name: 'Ghost', paths: ['nope'], description: 'missing' }],
|
|
60
|
-
};
|
|
61
|
-
const result = await validator.validate({ manifest, basePath: root });
|
|
62
|
-
const missing = result.violations.find((v) => v.ruleId === 'auxiliary-area-path-missing');
|
|
63
|
-
expect(missing).toBeDefined();
|
|
64
|
-
expect(missing!.severity).toBe('warn');
|
|
65
|
-
// Warnings alone don't invalidate the manifest
|
|
66
|
-
expect(result.valid).toBe(true);
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
test('flags overlap between two areas', async () => {
|
|
70
|
-
const root = makeRepo(['docs/sub/file.md']);
|
|
71
|
-
const manifest: AuxiliaryManifest = {
|
|
72
|
-
areas: [
|
|
73
|
-
{ name: 'A', paths: ['docs'], description: 'a' },
|
|
74
|
-
{ name: 'B', paths: ['docs/sub'], description: 'b' },
|
|
75
|
-
],
|
|
76
|
-
};
|
|
77
|
-
const result = await validator.validate({ manifest, basePath: root });
|
|
78
|
-
const overlap = result.violations.find((v) => v.ruleId === 'auxiliary-area-paths-overlap');
|
|
79
|
-
expect(overlap).toBeDefined();
|
|
80
|
-
expect(overlap!.severity).toBe('error');
|
|
81
|
-
expect(result.valid).toBe(false);
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
test('flags duplicate paths within a single area as self-overlap', async () => {
|
|
85
|
-
const root = makeRepo(['docs/file.md']);
|
|
86
|
-
const manifest: AuxiliaryManifest = {
|
|
87
|
-
areas: [{ name: 'A', paths: ['docs', 'docs'], description: 'a' }],
|
|
88
|
-
};
|
|
89
|
-
const result = await validator.validate({ manifest, basePath: root });
|
|
90
|
-
const self = result.violations.find((v) => v.ruleId === 'auxiliary-area-paths-self-overlap');
|
|
91
|
-
expect(self).toBeDefined();
|
|
92
|
-
});
|
|
93
|
-
});
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auxiliary Manifest Validator
|
|
3
|
-
*
|
|
4
|
-
* Own-file checks for `.principal-views/auxiliary.manifest.json`:
|
|
5
|
-
* - area names are unique
|
|
6
|
-
* - declared paths exist on disk
|
|
7
|
-
* - paths don't overlap each other (within or across areas)
|
|
8
|
-
*
|
|
9
|
-
* Cross-file overlap with scope paths lives in `validateAreaScopeDisjoint`,
|
|
10
|
-
* mirroring the way `validateScopeNamespaceNesting` handles cross-canvas
|
|
11
|
-
* checks for scopes/namespaces.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
import type { FileSystemAdapter } from '@principal-ai/repository-abstraction';
|
|
15
|
-
import type { AuxiliaryManifest } from '../types/auxiliary';
|
|
16
|
-
import { pathsOverlap } from '../events/path-helpers';
|
|
17
|
-
|
|
18
|
-
export interface AuxiliaryManifestValidationContext {
|
|
19
|
-
/** Parsed manifest. When absent, validation is a no-op (manifest is optional). */
|
|
20
|
-
manifest?: AuxiliaryManifest;
|
|
21
|
-
|
|
22
|
-
/** Path to the manifest file — used in violation messages. */
|
|
23
|
-
manifestPath?: string;
|
|
24
|
-
|
|
25
|
-
/** Repo root for resolving area paths against the filesystem. */
|
|
26
|
-
basePath: string;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface AuxiliaryManifestViolation {
|
|
30
|
-
ruleId: string;
|
|
31
|
-
severity: 'error' | 'warn';
|
|
32
|
-
file: string;
|
|
33
|
-
path?: string;
|
|
34
|
-
message: string;
|
|
35
|
-
impact: string;
|
|
36
|
-
suggestion: string;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export interface AuxiliaryManifestValidationResult {
|
|
40
|
-
valid: boolean;
|
|
41
|
-
violations: AuxiliaryManifestViolation[];
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const DEFAULT_MANIFEST_PATH = '.principal-views/auxiliary.manifest.json';
|
|
45
|
-
|
|
46
|
-
export class AuxiliaryManifestValidator {
|
|
47
|
-
constructor(private fsAdapter: FileSystemAdapter) {}
|
|
48
|
-
|
|
49
|
-
async validate(context: AuxiliaryManifestValidationContext): Promise<AuxiliaryManifestValidationResult> {
|
|
50
|
-
const violations: AuxiliaryManifestViolation[] = [];
|
|
51
|
-
const { manifest, basePath } = context;
|
|
52
|
-
const file = context.manifestPath || DEFAULT_MANIFEST_PATH;
|
|
53
|
-
|
|
54
|
-
if (!manifest) {
|
|
55
|
-
return { valid: true, violations };
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const areas = manifest.areas || [];
|
|
59
|
-
|
|
60
|
-
// Unique area names
|
|
61
|
-
const seenNames = new Map<string, number>();
|
|
62
|
-
areas.forEach((area, idx) => {
|
|
63
|
-
const count = seenNames.get(area.name) ?? 0;
|
|
64
|
-
seenNames.set(area.name, count + 1);
|
|
65
|
-
if (count === 1) {
|
|
66
|
-
violations.push({
|
|
67
|
-
ruleId: 'auxiliary-area-name-duplicate',
|
|
68
|
-
severity: 'error',
|
|
69
|
-
file,
|
|
70
|
-
path: `areas[${idx}].name`,
|
|
71
|
-
message: `Area name "${area.name}" is declared more than once`,
|
|
72
|
-
impact: 'Duplicate names make diagnostics ambiguous — a violation cannot be tied back to a single area',
|
|
73
|
-
suggestion: 'Rename one of the areas so names are unique across the manifest.',
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
// Path existence + collect for overlap pass
|
|
79
|
-
const declaredPaths: Array<{ areaName: string; areaIndex: number; pathIndex: number; path: string }> = [];
|
|
80
|
-
for (let areaIdx = 0; areaIdx < areas.length; areaIdx++) {
|
|
81
|
-
const area = areas[areaIdx];
|
|
82
|
-
const paths = area.paths || [];
|
|
83
|
-
for (let pathIdx = 0; pathIdx < paths.length; pathIdx++) {
|
|
84
|
-
const p = paths[pathIdx];
|
|
85
|
-
declaredPaths.push({ areaName: area.name, areaIndex: areaIdx, pathIndex: pathIdx, path: p });
|
|
86
|
-
|
|
87
|
-
const resolved = this.fsAdapter.join(basePath, p);
|
|
88
|
-
if (!(await this.fsAdapter.exists(resolved))) {
|
|
89
|
-
violations.push({
|
|
90
|
-
ruleId: 'auxiliary-area-path-missing',
|
|
91
|
-
severity: 'warn',
|
|
92
|
-
file,
|
|
93
|
-
path: `areas[${areaIdx}].paths[${pathIdx}]`,
|
|
94
|
-
message: `Path "${p}" declared by area "${area.name}" does not exist`,
|
|
95
|
-
impact: 'The manifest documents a folder that is not present in the repository',
|
|
96
|
-
suggestion: 'Verify the path exists relative to the repository root, or remove it from the area declaration.',
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// Path overlap. Unlike scopes, areas have no dotted-name hierarchy, so
|
|
103
|
-
// parent-child nesting between two areas is just as ambiguous as a flat
|
|
104
|
-
// overlap — both are flagged.
|
|
105
|
-
for (let i = 0; i < declaredPaths.length; i++) {
|
|
106
|
-
for (let j = i + 1; j < declaredPaths.length; j++) {
|
|
107
|
-
const a = declaredPaths[i];
|
|
108
|
-
const b = declaredPaths[j];
|
|
109
|
-
const relationship = pathsOverlap(a.path, b.path);
|
|
110
|
-
if (relationship === 'none') continue;
|
|
111
|
-
|
|
112
|
-
const sameArea = a.areaName === b.areaName;
|
|
113
|
-
violations.push({
|
|
114
|
-
ruleId: sameArea ? 'auxiliary-area-paths-self-overlap' : 'auxiliary-area-paths-overlap',
|
|
115
|
-
severity: 'error',
|
|
116
|
-
file,
|
|
117
|
-
path: sameArea
|
|
118
|
-
? `areas[${a.areaIndex}].paths`
|
|
119
|
-
: undefined,
|
|
120
|
-
message: sameArea
|
|
121
|
-
? `Area "${a.areaName}" declares overlapping paths "${a.path}" and "${b.path}"`
|
|
122
|
-
: `Paths overlap between areas "${a.areaName}" ("${a.path}") and "${b.areaName}" ("${b.path}")`,
|
|
123
|
-
impact: 'Two area declarations covering the same file make ownership ambiguous',
|
|
124
|
-
suggestion: 'Make the paths disjoint. If one folder genuinely sits inside another area, drop the redundant entry.',
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
const errors = violations.filter((v) => v.severity === 'error');
|
|
130
|
-
return { valid: errors.length === 0, violations };
|
|
131
|
-
}
|
|
132
|
-
}
|
package/src/auxiliary/index.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auxiliary module
|
|
3
|
-
*
|
|
4
|
-
* Validation for `auxiliary.manifest.json` — the catalog of project regions
|
|
5
|
-
* that sit outside the OTEL telemetry surface (docs, .github, etc.).
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
export {
|
|
9
|
-
AuxiliaryManifestValidator,
|
|
10
|
-
type AuxiliaryManifestValidationContext,
|
|
11
|
-
type AuxiliaryManifestValidationResult,
|
|
12
|
-
type AuxiliaryManifestViolation,
|
|
13
|
-
} from './AuxiliaryManifestValidator';
|
|
14
|
-
|
|
15
|
-
export {
|
|
16
|
-
validateAreaScopeDisjoint,
|
|
17
|
-
type ValidateAreaScopeDisjointInput,
|
|
18
|
-
} from './validateAreaScopeDisjoint';
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from 'bun:test';
|
|
2
|
-
import { validateAreaScopeDisjoint } from './validateAreaScopeDisjoint';
|
|
3
|
-
import type { AuxiliaryManifest } from '../types/auxiliary';
|
|
4
|
-
import type { ExtendedCanvas } from '../types/canvas';
|
|
5
|
-
|
|
6
|
-
function scopesCanvas(nodes: Array<{ scope: string; paths?: string[] }>): ExtendedCanvas {
|
|
7
|
-
return {
|
|
8
|
-
nodes: nodes.map((n, i) => ({
|
|
9
|
-
id: `s${i}`,
|
|
10
|
-
type: 'otel-scope',
|
|
11
|
-
description: `${n.scope} scope`,
|
|
12
|
-
...(n.paths !== undefined ? { paths: n.paths } : {}),
|
|
13
|
-
otel: { scope: n.scope },
|
|
14
|
-
x: 0, y: 0, width: 100, height: 50,
|
|
15
|
-
})),
|
|
16
|
-
edges: [],
|
|
17
|
-
} as ExtendedCanvas;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
describe('validateAreaScopeDisjoint', () => {
|
|
21
|
-
test('returns no violations when areas and scopes are disjoint', () => {
|
|
22
|
-
const manifest: AuxiliaryManifest = {
|
|
23
|
-
areas: [{ name: 'Docs', paths: ['docs'], description: 'd' }],
|
|
24
|
-
};
|
|
25
|
-
const violations = validateAreaScopeDisjoint({
|
|
26
|
-
manifest,
|
|
27
|
-
scopesCanvas: scopesCanvas([{ scope: 'core', paths: ['packages/subsystems-core/src'] }]),
|
|
28
|
-
});
|
|
29
|
-
expect(violations).toHaveLength(0);
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
test('flags exact overlap with a scope path', () => {
|
|
33
|
-
const manifest: AuxiliaryManifest = {
|
|
34
|
-
areas: [{ name: 'Core', paths: ['packages/subsystems-core/src'], description: 'd' }],
|
|
35
|
-
};
|
|
36
|
-
const violations = validateAreaScopeDisjoint({
|
|
37
|
-
manifest,
|
|
38
|
-
scopesCanvas: scopesCanvas([{ scope: 'core', paths: ['packages/subsystems-core/src'] }]),
|
|
39
|
-
});
|
|
40
|
-
expect(violations).toHaveLength(1);
|
|
41
|
-
expect(violations[0].ruleId).toBe('auxiliary-area-scope-overlap');
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
test('flags parent-child overlap (area covering a scope path)', () => {
|
|
45
|
-
const manifest: AuxiliaryManifest = {
|
|
46
|
-
areas: [{ name: 'All', paths: ['packages'], description: 'd' }],
|
|
47
|
-
};
|
|
48
|
-
const violations = validateAreaScopeDisjoint({
|
|
49
|
-
manifest,
|
|
50
|
-
scopesCanvas: scopesCanvas([{ scope: 'core', paths: ['packages/subsystems-core/src'] }]),
|
|
51
|
-
});
|
|
52
|
-
expect(violations).toHaveLength(1);
|
|
53
|
-
expect(violations[0].ruleId).toBe('auxiliary-area-scope-overlap');
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
test('flags parent-child overlap (scope path covering an area)', () => {
|
|
57
|
-
const manifest: AuxiliaryManifest = {
|
|
58
|
-
areas: [{ name: 'Inner', paths: ['packages/subsystems-core/src/docs'], description: 'd' }],
|
|
59
|
-
};
|
|
60
|
-
const violations = validateAreaScopeDisjoint({
|
|
61
|
-
manifest,
|
|
62
|
-
scopesCanvas: scopesCanvas([{ scope: 'core', paths: ['packages/subsystems-core/src'] }]),
|
|
63
|
-
});
|
|
64
|
-
expect(violations).toHaveLength(1);
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
test('no scopes canvas means no cross-check', () => {
|
|
68
|
-
const manifest: AuxiliaryManifest = {
|
|
69
|
-
areas: [{ name: 'Docs', paths: ['docs'], description: 'd' }],
|
|
70
|
-
};
|
|
71
|
-
const violations = validateAreaScopeDisjoint({ manifest });
|
|
72
|
-
expect(violations).toHaveLength(0);
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
test('scopes without paths impose no constraint', () => {
|
|
76
|
-
const manifest: AuxiliaryManifest = {
|
|
77
|
-
areas: [{ name: 'Docs', paths: ['docs'], description: 'd' }],
|
|
78
|
-
};
|
|
79
|
-
const violations = validateAreaScopeDisjoint({
|
|
80
|
-
manifest,
|
|
81
|
-
scopesCanvas: scopesCanvas([{ scope: 'core' }]),
|
|
82
|
-
});
|
|
83
|
-
expect(violations).toHaveLength(0);
|
|
84
|
-
});
|
|
85
|
-
});
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Area / Scope Disjointness Validator
|
|
3
|
-
*
|
|
4
|
-
* Cross-file check: project-area paths declared in
|
|
5
|
-
* `auxiliary.manifest.json` must be disjoint from every scope path declared
|
|
6
|
-
* in `architecture.scopes.canvas`. Areas and scopes carve up the repo into
|
|
7
|
-
* non-overlapping regions — any overlap (parent-child or otherwise) means a
|
|
8
|
-
* file is claimed by both an OTEL scope and an auxiliary area, which makes
|
|
9
|
-
* ownership ambiguous.
|
|
10
|
-
*
|
|
11
|
-
* Mirrors `validateScopeNamespaceNesting`'s cross-canvas pattern: takes both
|
|
12
|
-
* inputs, returns violations.
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import type { AuxiliaryManifest } from '../types/auxiliary';
|
|
16
|
-
import type { ExtendedCanvas } from '../types/canvas';
|
|
17
|
-
import { isOtelScopeNode } from '../types/canvas';
|
|
18
|
-
import { pathsOverlap } from '../events/path-helpers';
|
|
19
|
-
import type { AuxiliaryManifestViolation } from './AuxiliaryManifestValidator';
|
|
20
|
-
|
|
21
|
-
export interface ValidateAreaScopeDisjointInput {
|
|
22
|
-
manifest: AuxiliaryManifest;
|
|
23
|
-
manifestPath?: string;
|
|
24
|
-
scopesCanvas?: ExtendedCanvas;
|
|
25
|
-
scopesCanvasPath?: string;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const DEFAULT_MANIFEST_PATH = '.principal-views/auxiliary.manifest.json';
|
|
29
|
-
|
|
30
|
-
export function validateAreaScopeDisjoint(
|
|
31
|
-
input: ValidateAreaScopeDisjointInput,
|
|
32
|
-
): AuxiliaryManifestViolation[] {
|
|
33
|
-
const { manifest, scopesCanvas } = input;
|
|
34
|
-
const manifestFile = input.manifestPath || DEFAULT_MANIFEST_PATH;
|
|
35
|
-
|
|
36
|
-
if (!scopesCanvas) return [];
|
|
37
|
-
|
|
38
|
-
const scopePaths: Array<{ scope: string; path: string }> = [];
|
|
39
|
-
for (const node of scopesCanvas.nodes || []) {
|
|
40
|
-
if (!isOtelScopeNode(node)) continue;
|
|
41
|
-
const scope = node.otel?.scope;
|
|
42
|
-
const paths = node.paths;
|
|
43
|
-
if (!scope || !paths || paths.length === 0) continue;
|
|
44
|
-
for (const p of paths) scopePaths.push({ scope, path: p });
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if (scopePaths.length === 0) return [];
|
|
48
|
-
|
|
49
|
-
const violations: AuxiliaryManifestViolation[] = [];
|
|
50
|
-
const areas = manifest.areas || [];
|
|
51
|
-
|
|
52
|
-
areas.forEach((area, areaIdx) => {
|
|
53
|
-
(area.paths || []).forEach((areaPath, pathIdx) => {
|
|
54
|
-
for (const sp of scopePaths) {
|
|
55
|
-
const relationship = pathsOverlap(areaPath, sp.path);
|
|
56
|
-
if (relationship === 'none') continue;
|
|
57
|
-
|
|
58
|
-
violations.push({
|
|
59
|
-
ruleId: 'auxiliary-area-scope-overlap',
|
|
60
|
-
severity: 'error',
|
|
61
|
-
file: manifestFile,
|
|
62
|
-
path: `areas[${areaIdx}].paths[${pathIdx}]`,
|
|
63
|
-
message: `Area "${area.name}" path "${areaPath}" overlaps scope "${sp.scope}" path "${sp.path}"`,
|
|
64
|
-
impact: 'A file claimed by both an OTEL scope and an auxiliary area has ambiguous ownership — the manifest is meant to catalog regions outside the telemetry surface',
|
|
65
|
-
suggestion: 'Make the area path disjoint from every scope path. If the folder is genuinely runtime code, drop it from the manifest; if it is auxiliary, narrow the scope path or move the folder.',
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
return violations;
|
|
72
|
-
}
|