@principal-ai/subsystems-core 0.29.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 +124 -0
- package/dist/ConfigurationLoader.d.ts +76 -0
- package/dist/ConfigurationLoader.d.ts.map +1 -0
- package/dist/ConfigurationLoader.js +148 -0
- package/dist/ConfigurationLoader.js.map +1 -0
- package/dist/ConfigurationValidator.d.ts +31 -0
- package/dist/ConfigurationValidator.d.ts.map +1 -0
- package/dist/ConfigurationValidator.js +239 -0
- package/dist/ConfigurationValidator.js.map +1 -0
- package/dist/EventProcessor.d.ts +49 -0
- package/dist/EventProcessor.d.ts.map +1 -0
- package/dist/EventProcessor.js +220 -0
- package/dist/EventProcessor.js.map +1 -0
- package/dist/EventRecorderService.d.ts +305 -0
- package/dist/EventRecorderService.d.ts.map +1 -0
- package/dist/EventRecorderService.js +467 -0
- package/dist/EventRecorderService.js.map +1 -0
- package/dist/LibraryLoader.d.ts +65 -0
- package/dist/LibraryLoader.d.ts.map +1 -0
- package/dist/LibraryLoader.js +197 -0
- package/dist/LibraryLoader.js.map +1 -0
- package/dist/PathBasedEventProcessor.d.ts +77 -0
- package/dist/PathBasedEventProcessor.d.ts.map +1 -0
- package/dist/PathBasedEventProcessor.js +136 -0
- package/dist/PathBasedEventProcessor.js.map +1 -0
- package/dist/SessionManager.d.ts +194 -0
- package/dist/SessionManager.d.ts.map +1 -0
- package/dist/SessionManager.js +302 -0
- package/dist/SessionManager.js.map +1 -0
- package/dist/ValidationEngine.d.ts +31 -0
- package/dist/ValidationEngine.d.ts.map +1 -0
- package/dist/ValidationEngine.js +162 -0
- package/dist/ValidationEngine.js.map +1 -0
- package/dist/agent-sessions/fixture.d.ts +80 -0
- package/dist/agent-sessions/fixture.d.ts.map +1 -0
- package/dist/agent-sessions/fixture.js +130 -0
- package/dist/agent-sessions/fixture.js.map +1 -0
- package/dist/agent-sessions/index.d.ts +3 -0
- package/dist/agent-sessions/index.d.ts.map +1 -0
- package/dist/agent-sessions/index.js +6 -0
- package/dist/agent-sessions/index.js.map +1 -0
- package/dist/auxiliary/AuxiliaryManifestValidator.d.ts +41 -0
- package/dist/auxiliary/AuxiliaryManifestValidator.d.ts.map +1 -0
- package/dist/auxiliary/AuxiliaryManifestValidator.js +100 -0
- package/dist/auxiliary/AuxiliaryManifestValidator.js.map +1 -0
- package/dist/auxiliary/index.d.ts +9 -0
- package/dist/auxiliary/index.d.ts.map +1 -0
- package/dist/auxiliary/index.js +14 -0
- package/dist/auxiliary/index.js.map +1 -0
- package/dist/auxiliary/validateAreaScopeDisjoint.d.ts +24 -0
- package/dist/auxiliary/validateAreaScopeDisjoint.d.ts.map +1 -0
- package/dist/auxiliary/validateAreaScopeDisjoint.js +61 -0
- package/dist/auxiliary/validateAreaScopeDisjoint.js.map +1 -0
- package/dist/cli/codegen.d.ts +41 -0
- package/dist/cli/codegen.d.ts.map +1 -0
- package/dist/cli/codegen.js +257 -0
- package/dist/cli/codegen.js.map +1 -0
- package/dist/codegen/type-generator.d.ts +123 -0
- package/dist/codegen/type-generator.d.ts.map +1 -0
- package/dist/codegen/type-generator.js +433 -0
- package/dist/codegen/type-generator.js.map +1 -0
- package/dist/codegen/usage-example.d.ts +103 -0
- package/dist/codegen/usage-example.d.ts.map +1 -0
- package/dist/codegen/usage-example.js +258 -0
- package/dist/codegen/usage-example.js.map +1 -0
- package/dist/dashboard/DashboardValidator.d.ts +85 -0
- package/dist/dashboard/DashboardValidator.d.ts.map +1 -0
- package/dist/dashboard/DashboardValidator.js +775 -0
- package/dist/dashboard/DashboardValidator.js.map +1 -0
- package/dist/dashboard/index.d.ts +6 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +10 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/discovery/CanvasDiscovery.d.ts +160 -0
- package/dist/discovery/CanvasDiscovery.d.ts.map +1 -0
- package/dist/discovery/CanvasDiscovery.js +865 -0
- package/dist/discovery/CanvasDiscovery.js.map +1 -0
- package/dist/discovery/CanvasFileManifest.d.ts +86 -0
- package/dist/discovery/CanvasFileManifest.d.ts.map +1 -0
- package/dist/discovery/CanvasFileManifest.js +338 -0
- package/dist/discovery/CanvasFileManifest.js.map +1 -0
- package/dist/discovery/LibraryDiscovery.d.ts +108 -0
- package/dist/discovery/LibraryDiscovery.d.ts.map +1 -0
- package/dist/discovery/LibraryDiscovery.js +263 -0
- package/dist/discovery/LibraryDiscovery.js.map +1 -0
- package/dist/discovery/types.d.ts +403 -0
- package/dist/discovery/types.d.ts.map +1 -0
- package/dist/discovery/types.js +6 -0
- package/dist/discovery/types.js.map +1 -0
- package/dist/events/EventsCanvasValidator.d.ts +139 -0
- package/dist/events/EventsCanvasValidator.d.ts.map +1 -0
- package/dist/events/EventsCanvasValidator.js +281 -0
- package/dist/events/EventsCanvasValidator.js.map +1 -0
- package/dist/events/NamespacePathIndex.d.ts +61 -0
- package/dist/events/NamespacePathIndex.d.ts.map +1 -0
- package/dist/events/NamespacePathIndex.js +74 -0
- package/dist/events/NamespacePathIndex.js.map +1 -0
- package/dist/events/OtelEventPathsValidator.d.ts +75 -0
- package/dist/events/OtelEventPathsValidator.d.ts.map +1 -0
- package/dist/events/OtelEventPathsValidator.js +126 -0
- package/dist/events/OtelEventPathsValidator.js.map +1 -0
- package/dist/events/ScopeEventsValidator.d.ts +68 -0
- package/dist/events/ScopeEventsValidator.d.ts.map +1 -0
- package/dist/events/ScopeEventsValidator.js +91 -0
- package/dist/events/ScopeEventsValidator.js.map +1 -0
- package/dist/events/index.d.ts +9 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +12 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/path-helpers.d.ts +33 -0
- package/dist/events/path-helpers.d.ts.map +1 -0
- package/dist/events/path-helpers.js +59 -0
- package/dist/events/path-helpers.js.map +1 -0
- package/dist/execution/ExecutionLoader.d.ts +135 -0
- package/dist/execution/ExecutionLoader.d.ts.map +1 -0
- package/dist/execution/ExecutionLoader.js +266 -0
- package/dist/execution/ExecutionLoader.js.map +1 -0
- package/dist/execution/ExecutionValidator.d.ts +94 -0
- package/dist/execution/ExecutionValidator.d.ts.map +1 -0
- package/dist/execution/ExecutionValidator.js +503 -0
- package/dist/execution/ExecutionValidator.js.map +1 -0
- package/dist/generated/graph-converter-execution.types.d.ts +177 -0
- package/dist/generated/graph-converter-execution.types.d.ts.map +1 -0
- package/dist/generated/graph-converter-execution.types.js +12 -0
- package/dist/generated/graph-converter-execution.types.js.map +1 -0
- package/dist/helpers/GraphInstrumentationHelper.d.ts +93 -0
- package/dist/helpers/GraphInstrumentationHelper.d.ts.map +1 -0
- package/dist/helpers/GraphInstrumentationHelper.js +252 -0
- package/dist/helpers/GraphInstrumentationHelper.js.map +1 -0
- package/dist/index.d.ts +82 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +214 -0
- package/dist/index.js.map +1 -0
- package/dist/matchers/SpanMatcher.d.ts +107 -0
- package/dist/matchers/SpanMatcher.d.ts.map +1 -0
- package/dist/matchers/SpanMatcher.js +274 -0
- package/dist/matchers/SpanMatcher.js.map +1 -0
- package/dist/node.d.ts +78 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +177 -0
- package/dist/node.js.map +1 -0
- package/dist/opencode/OpenCodeEventStore.d.ts +25 -0
- package/dist/opencode/OpenCodeEventStore.d.ts.map +1 -0
- package/dist/opencode/OpenCodeEventStore.js +182 -0
- package/dist/opencode/OpenCodeEventStore.js.map +1 -0
- package/dist/opencode/agent-sessions.d.ts +46 -0
- package/dist/opencode/agent-sessions.d.ts.map +1 -0
- package/dist/opencode/agent-sessions.js +302 -0
- package/dist/opencode/agent-sessions.js.map +1 -0
- package/dist/opencode/index.d.ts +6 -0
- package/dist/opencode/index.d.ts.map +1 -0
- package/dist/opencode/index.js +15 -0
- package/dist/opencode/index.js.map +1 -0
- package/dist/opencode/node-path-adapter.d.ts +25 -0
- package/dist/opencode/node-path-adapter.d.ts.map +1 -0
- package/dist/opencode/node-path-adapter.js +188 -0
- package/dist/opencode/node-path-adapter.js.map +1 -0
- package/dist/opencode/pipeline.d.ts +42 -0
- package/dist/opencode/pipeline.d.ts.map +1 -0
- package/dist/opencode/pipeline.js +90 -0
- package/dist/opencode/pipeline.js.map +1 -0
- package/dist/opencode/types.d.ts +39 -0
- package/dist/opencode/types.d.ts.map +1 -0
- package/dist/opencode/types.js +3 -0
- package/dist/opencode/types.js.map +1 -0
- package/dist/orchestration/TraceOrchestrator.d.ts +71 -0
- package/dist/orchestration/TraceOrchestrator.d.ts.map +1 -0
- package/dist/orchestration/TraceOrchestrator.js +416 -0
- package/dist/orchestration/TraceOrchestrator.js.map +1 -0
- package/dist/parsers/OtlpTraceParser.d.ts +131 -0
- package/dist/parsers/OtlpTraceParser.d.ts.map +1 -0
- package/dist/parsers/OtlpTraceParser.js +310 -0
- package/dist/parsers/OtlpTraceParser.js.map +1 -0
- package/dist/registry/CompositeRegistry.d.ts +71 -0
- package/dist/registry/CompositeRegistry.d.ts.map +1 -0
- package/dist/registry/CompositeRegistry.js +113 -0
- package/dist/registry/CompositeRegistry.js.map +1 -0
- package/dist/registry/EventRegistry.d.ts +79 -0
- package/dist/registry/EventRegistry.d.ts.map +1 -0
- package/dist/registry/EventRegistry.js +165 -0
- package/dist/registry/EventRegistry.js.map +1 -0
- package/dist/registry/LocalRegistry.d.ts +111 -0
- package/dist/registry/LocalRegistry.d.ts.map +1 -0
- package/dist/registry/LocalRegistry.js +335 -0
- package/dist/registry/LocalRegistry.js.map +1 -0
- package/dist/registry/RemoteRegistry.d.ts +122 -0
- package/dist/registry/RemoteRegistry.d.ts.map +1 -0
- package/dist/registry/RemoteRegistry.js +399 -0
- package/dist/registry/RemoteRegistry.js.map +1 -0
- package/dist/registry/VersionRegistry.d.ts +51 -0
- package/dist/registry/VersionRegistry.d.ts.map +1 -0
- package/dist/registry/VersionRegistry.js +105 -0
- package/dist/registry/VersionRegistry.js.map +1 -0
- package/dist/rules/config.d.ts +57 -0
- package/dist/rules/config.d.ts.map +1 -0
- package/dist/rules/config.js +382 -0
- package/dist/rules/config.js.map +1 -0
- package/dist/rules/engine.d.ts +70 -0
- package/dist/rules/engine.d.ts.map +1 -0
- package/dist/rules/engine.js +373 -0
- package/dist/rules/engine.js.map +1 -0
- package/dist/rules/implementations/connection-type-references.d.ts +7 -0
- package/dist/rules/implementations/connection-type-references.d.ts.map +1 -0
- package/dist/rules/implementations/connection-type-references.js +107 -0
- package/dist/rules/implementations/connection-type-references.js.map +1 -0
- package/dist/rules/implementations/dead-end-states.d.ts +17 -0
- package/dist/rules/implementations/dead-end-states.d.ts.map +1 -0
- package/dist/rules/implementations/dead-end-states.js +75 -0
- package/dist/rules/implementations/dead-end-states.js.map +1 -0
- package/dist/rules/implementations/index.d.ts +23 -0
- package/dist/rules/implementations/index.d.ts.map +1 -0
- package/dist/rules/implementations/index.js +73 -0
- package/dist/rules/implementations/index.js.map +1 -0
- package/dist/rules/implementations/minimum-node-sources.d.ts +24 -0
- package/dist/rules/implementations/minimum-node-sources.d.ts.map +1 -0
- package/dist/rules/implementations/minimum-node-sources.js +59 -0
- package/dist/rules/implementations/minimum-node-sources.js.map +1 -0
- package/dist/rules/implementations/no-unknown-fields.d.ts +7 -0
- package/dist/rules/implementations/no-unknown-fields.d.ts.map +1 -0
- package/dist/rules/implementations/no-unknown-fields.js +216 -0
- package/dist/rules/implementations/no-unknown-fields.js.map +1 -0
- package/dist/rules/implementations/orphaned-edge-types.d.ts +7 -0
- package/dist/rules/implementations/orphaned-edge-types.d.ts.map +1 -0
- package/dist/rules/implementations/orphaned-edge-types.js +50 -0
- package/dist/rules/implementations/orphaned-edge-types.js.map +1 -0
- package/dist/rules/implementations/orphaned-node-types.d.ts +7 -0
- package/dist/rules/implementations/orphaned-node-types.d.ts.map +1 -0
- package/dist/rules/implementations/orphaned-node-types.js +53 -0
- package/dist/rules/implementations/orphaned-node-types.js.map +1 -0
- package/dist/rules/implementations/required-metadata.d.ts +7 -0
- package/dist/rules/implementations/required-metadata.d.ts.map +1 -0
- package/dist/rules/implementations/required-metadata.js +48 -0
- package/dist/rules/implementations/required-metadata.js.map +1 -0
- package/dist/rules/implementations/state-transition-references.d.ts +7 -0
- package/dist/rules/implementations/state-transition-references.d.ts.map +1 -0
- package/dist/rules/implementations/state-transition-references.js +138 -0
- package/dist/rules/implementations/state-transition-references.js.map +1 -0
- package/dist/rules/implementations/unreachable-states.d.ts +7 -0
- package/dist/rules/implementations/unreachable-states.d.ts.map +1 -0
- package/dist/rules/implementations/unreachable-states.js +83 -0
- package/dist/rules/implementations/unreachable-states.js.map +1 -0
- package/dist/rules/implementations/valid-action-patterns.d.ts +17 -0
- package/dist/rules/implementations/valid-action-patterns.d.ts.map +1 -0
- package/dist/rules/implementations/valid-action-patterns.js +112 -0
- package/dist/rules/implementations/valid-action-patterns.js.map +1 -0
- package/dist/rules/implementations/valid-color-format.d.ts +7 -0
- package/dist/rules/implementations/valid-color-format.d.ts.map +1 -0
- package/dist/rules/implementations/valid-color-format.js +94 -0
- package/dist/rules/implementations/valid-color-format.js.map +1 -0
- package/dist/rules/implementations/valid-edge-types.d.ts +7 -0
- package/dist/rules/implementations/valid-edge-types.d.ts.map +1 -0
- package/dist/rules/implementations/valid-edge-types.js +248 -0
- package/dist/rules/implementations/valid-edge-types.js.map +1 -0
- package/dist/rules/implementations/valid-node-types.d.ts +7 -0
- package/dist/rules/implementations/valid-node-types.d.ts.map +1 -0
- package/dist/rules/implementations/valid-node-types.js +187 -0
- package/dist/rules/implementations/valid-node-types.js.map +1 -0
- package/dist/rules/index.d.ts +28 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +70 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/types.d.ts +309 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +40 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/scopes/ScopePathIndex.d.ts +56 -0
- package/dist/scopes/ScopePathIndex.d.ts.map +1 -0
- package/dist/scopes/ScopePathIndex.js +67 -0
- package/dist/scopes/ScopePathIndex.js.map +1 -0
- package/dist/scopes/ScopesCanvasValidator.d.ts +76 -0
- package/dist/scopes/ScopesCanvasValidator.d.ts.map +1 -0
- package/dist/scopes/ScopesCanvasValidator.js +221 -0
- package/dist/scopes/ScopesCanvasValidator.js.map +1 -0
- package/dist/scopes/index.d.ts +12 -0
- package/dist/scopes/index.d.ts.map +1 -0
- package/dist/scopes/index.js +30 -0
- package/dist/scopes/index.js.map +1 -0
- package/dist/scopes/utils.d.ts +85 -0
- package/dist/scopes/utils.d.ts.map +1 -0
- package/dist/scopes/utils.js +143 -0
- package/dist/scopes/utils.js.map +1 -0
- package/dist/scopes/validateScopeNamespaceNesting.d.ts +38 -0
- package/dist/scopes/validateScopeNamespaceNesting.d.ts.map +1 -0
- package/dist/scopes/validateScopeNamespaceNesting.js +69 -0
- package/dist/scopes/validateScopeNamespaceNesting.js.map +1 -0
- package/dist/spans/index.d.ts +12 -0
- package/dist/spans/index.d.ts.map +1 -0
- package/dist/spans/index.js +25 -0
- package/dist/spans/index.js.map +1 -0
- package/dist/spans/utils.d.ts +70 -0
- package/dist/spans/utils.d.ts.map +1 -0
- package/dist/spans/utils.js +205 -0
- package/dist/spans/utils.js.map +1 -0
- package/dist/storage/topic-types.d.ts +203 -0
- package/dist/storage/topic-types.d.ts.map +1 -0
- package/dist/storage/topic-types.js +60 -0
- package/dist/storage/topic-types.js.map +1 -0
- package/dist/storage/topicStore.d.ts +135 -0
- package/dist/storage/topicStore.d.ts.map +1 -0
- package/dist/storage/topicStore.js +389 -0
- package/dist/storage/topicStore.js.map +1 -0
- package/dist/storyboard/builder.d.ts +135 -0
- package/dist/storyboard/builder.d.ts.map +1 -0
- package/dist/storyboard/builder.js +235 -0
- package/dist/storyboard/builder.js.map +1 -0
- package/dist/storyboard/index.d.ts +9 -0
- package/dist/storyboard/index.d.ts.map +1 -0
- package/dist/storyboard/index.js +18 -0
- package/dist/storyboard/index.js.map +1 -0
- package/dist/storyboard/types.d.ts +101 -0
- package/dist/storyboard/types.d.ts.map +1 -0
- package/dist/storyboard/types.js +10 -0
- package/dist/storyboard/types.js.map +1 -0
- package/dist/telemetry/coverage.d.ts +92 -0
- package/dist/telemetry/coverage.d.ts.map +1 -0
- package/dist/telemetry/coverage.js +335 -0
- package/dist/telemetry/coverage.js.map +1 -0
- package/dist/telemetry/event-validator.d.ts +86 -0
- package/dist/telemetry/event-validator.d.ts.map +1 -0
- package/dist/telemetry/event-validator.js +257 -0
- package/dist/telemetry/event-validator.js.map +1 -0
- package/dist/types/audit.d.ts +236 -0
- package/dist/types/audit.d.ts.map +1 -0
- package/dist/types/audit.js +53 -0
- package/dist/types/audit.js.map +1 -0
- package/dist/types/auxiliary.d.ts +54 -0
- package/dist/types/auxiliary.d.ts.map +1 -0
- package/dist/types/auxiliary.js +27 -0
- package/dist/types/auxiliary.js.map +1 -0
- package/dist/types/canvas-scope.d.ts +156 -0
- package/dist/types/canvas-scope.d.ts.map +1 -0
- package/dist/types/canvas-scope.js +62 -0
- package/dist/types/canvas-scope.js.map +1 -0
- package/dist/types/canvas.d.ts +1138 -0
- package/dist/types/canvas.d.ts.map +1 -0
- package/dist/types/canvas.js +178 -0
- package/dist/types/canvas.js.map +1 -0
- package/dist/types/dashboard.d.ts +170 -0
- package/dist/types/dashboard.d.ts.map +1 -0
- package/dist/types/dashboard.js +14 -0
- package/dist/types/dashboard.js.map +1 -0
- package/dist/types/index.d.ts +352 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +39 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/library.d.ts +227 -0
- package/dist/types/library.d.ts.map +1 -0
- package/dist/types/library.js +16 -0
- package/dist/types/library.js.map +1 -0
- package/dist/types/otel.d.ts +465 -0
- package/dist/types/otel.d.ts.map +1 -0
- package/dist/types/otel.js +163 -0
- package/dist/types/otel.js.map +1 -0
- package/dist/types/path-based-config.d.ts +235 -0
- package/dist/types/path-based-config.d.ts.map +1 -0
- package/dist/types/path-based-config.js +11 -0
- package/dist/types/path-based-config.js.map +1 -0
- package/dist/types/registered-trace.d.ts +337 -0
- package/dist/types/registered-trace.d.ts.map +1 -0
- package/dist/types/registered-trace.js +16 -0
- package/dist/types/registered-trace.js.map +1 -0
- package/dist/types/resource-match.d.ts +207 -0
- package/dist/types/resource-match.d.ts.map +1 -0
- package/dist/types/resource-match.js +74 -0
- package/dist/types/resource-match.js.map +1 -0
- package/dist/types/subsystem-model.d.ts +265 -0
- package/dist/types/subsystem-model.d.ts.map +1 -0
- package/dist/types/subsystem-model.js +35 -0
- package/dist/types/subsystem-model.js.map +1 -0
- package/dist/types/version-registry.d.ts +137 -0
- package/dist/types/version-registry.d.ts.map +1 -0
- package/dist/types/version-registry.js +10 -0
- package/dist/types/version-registry.js.map +1 -0
- package/dist/utils/CanvasConverter.d.ts +148 -0
- package/dist/utils/CanvasConverter.d.ts.map +1 -0
- package/dist/utils/CanvasConverter.js +530 -0
- package/dist/utils/CanvasConverter.js.map +1 -0
- package/dist/utils/GraphConverter.d.ts +18 -0
- package/dist/utils/GraphConverter.d.ts.map +1 -0
- package/dist/utils/GraphConverter.js +80 -0
- package/dist/utils/GraphConverter.js.map +1 -0
- package/dist/utils/PathMatcher.d.ts +55 -0
- package/dist/utils/PathMatcher.d.ts.map +1 -0
- package/dist/utils/PathMatcher.js +178 -0
- package/dist/utils/PathMatcher.js.map +1 -0
- package/dist/utils/TraceToCanvas.d.ts +83 -0
- package/dist/utils/TraceToCanvas.d.ts.map +1 -0
- package/dist/utils/TraceToCanvas.js +336 -0
- package/dist/utils/TraceToCanvas.js.map +1 -0
- package/dist/utils/YamlParser.d.ts +36 -0
- package/dist/utils/YamlParser.d.ts.map +1 -0
- package/dist/utils/YamlParser.js +92 -0
- package/dist/utils/YamlParser.js.map +1 -0
- package/dist/utils/registeredTraceHelpers.d.ts +76 -0
- package/dist/utils/registeredTraceHelpers.d.ts.map +1 -0
- package/dist/utils/registeredTraceHelpers.js +203 -0
- package/dist/utils/registeredTraceHelpers.js.map +1 -0
- package/dist/utils/traceAggregation.d.ts +25 -0
- package/dist/utils/traceAggregation.d.ts.map +1 -0
- package/dist/utils/traceAggregation.js +140 -0
- package/dist/utils/traceAggregation.js.map +1 -0
- package/dist/validation/OtelCanvasValidator.d.ts +40 -0
- package/dist/validation/OtelCanvasValidator.d.ts.map +1 -0
- package/dist/validation/OtelCanvasValidator.js +59 -0
- package/dist/validation/OtelCanvasValidator.js.map +1 -0
- package/dist/validation/index.d.ts +8 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +13 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/libraryValidation.d.ts +53 -0
- package/dist/validation/libraryValidation.d.ts.map +1 -0
- package/dist/validation/libraryValidation.js +115 -0
- package/dist/validation/libraryValidation.js.map +1 -0
- package/dist/workflow/edge-derivation.d.ts +111 -0
- package/dist/workflow/edge-derivation.d.ts.map +1 -0
- package/dist/workflow/edge-derivation.js +174 -0
- package/dist/workflow/edge-derivation.js.map +1 -0
- package/dist/workflow/edge-validation.d.ts +170 -0
- package/dist/workflow/edge-validation.d.ts.map +1 -0
- package/dist/workflow/edge-validation.js +332 -0
- package/dist/workflow/edge-validation.js.map +1 -0
- package/dist/workflow/example.d.ts +11 -0
- package/dist/workflow/example.d.ts.map +1 -0
- package/dist/workflow/example.js +310 -0
- package/dist/workflow/example.js.map +1 -0
- package/dist/workflow/index.d.ts +20 -0
- package/dist/workflow/index.d.ts.map +1 -0
- package/dist/workflow/index.js +49 -0
- package/dist/workflow/index.js.map +1 -0
- package/dist/workflow/scenario-matcher.d.ts +63 -0
- package/dist/workflow/scenario-matcher.d.ts.map +1 -0
- package/dist/workflow/scenario-matcher.js +215 -0
- package/dist/workflow/scenario-matcher.js.map +1 -0
- package/dist/workflow/template-parser.d.ts +73 -0
- package/dist/workflow/template-parser.d.ts.map +1 -0
- package/dist/workflow/template-parser.js +280 -0
- package/dist/workflow/template-parser.js.map +1 -0
- package/dist/workflow/template-renderer.d.ts +45 -0
- package/dist/workflow/template-renderer.d.ts.map +1 -0
- package/dist/workflow/template-renderer.js +401 -0
- package/dist/workflow/template-renderer.js.map +1 -0
- package/dist/workflow/types.d.ts +393 -0
- package/dist/workflow/types.d.ts.map +1 -0
- package/dist/workflow/types.js +40 -0
- package/dist/workflow/types.js.map +1 -0
- package/dist/workflow/validator.d.ts +363 -0
- package/dist/workflow/validator.d.ts.map +1 -0
- package/dist/workflow/validator.js +2283 -0
- package/dist/workflow/validator.js.map +1 -0
- package/package.json +84 -0
- package/schemas/auxiliary.manifest.schema.json +56 -0
- package/schemas/subsystem-model.schema.json +767 -0
- package/src/ConfigurationLoader.test.ts +466 -0
- package/src/ConfigurationLoader.ts +184 -0
- package/src/ConfigurationValidator.test.ts +200 -0
- package/src/ConfigurationValidator.ts +273 -0
- package/src/EventProcessor.test.ts +405 -0
- package/src/EventProcessor.ts +256 -0
- package/src/EventRecorderService.test.ts +543 -0
- package/src/EventRecorderService.ts +741 -0
- package/src/LibraryLoader.ts +194 -0
- package/src/PathBasedEventProcessor.test.ts +336 -0
- package/src/PathBasedEventProcessor.ts +196 -0
- package/src/SessionManager.test.ts +424 -0
- package/src/SessionManager.ts +471 -0
- package/src/ValidationEngine.test.ts +520 -0
- package/src/ValidationEngine.ts +200 -0
- package/src/agent-sessions/fixture.ts +225 -0
- package/src/agent-sessions/index.ts +10 -0
- package/src/auxiliary/AuxiliaryManifestValidator.test.ts +93 -0
- package/src/auxiliary/AuxiliaryManifestValidator.ts +132 -0
- package/src/auxiliary/index.ts +18 -0
- package/src/auxiliary/validateAreaScopeDisjoint.test.ts +85 -0
- package/src/auxiliary/validateAreaScopeDisjoint.ts +72 -0
- package/src/browser-safety.test.ts +170 -0
- package/src/cli/codegen.ts +286 -0
- package/src/codegen/type-generator.test.ts +219 -0
- package/src/codegen/type-generator.ts +560 -0
- package/src/codegen/usage-example.ts +357 -0
- package/src/dashboard/DashboardValidator.ts +904 -0
- package/src/dashboard/index.ts +14 -0
- package/src/discovery/CanvasDiscovery.test.ts +691 -0
- package/src/discovery/CanvasDiscovery.ts +1114 -0
- package/src/discovery/CanvasFileManifest.test.ts +521 -0
- package/src/discovery/CanvasFileManifest.ts +419 -0
- package/src/discovery/LibraryDiscovery.test.ts +329 -0
- package/src/discovery/LibraryDiscovery.ts +386 -0
- package/src/discovery/types.ts +453 -0
- package/src/events/EventsCanvasValidator.test.ts +191 -0
- package/src/events/EventsCanvasValidator.ts +428 -0
- package/src/events/NamespacePathIndex.test.ts +97 -0
- package/src/events/NamespacePathIndex.ts +100 -0
- package/src/events/OtelEventPathsValidator.test.ts +243 -0
- package/src/events/OtelEventPathsValidator.ts +191 -0
- package/src/events/ScopeEventsValidator.test.ts +173 -0
- package/src/events/ScopeEventsValidator.ts +158 -0
- package/src/events/index.ts +27 -0
- package/src/events/path-helpers.ts +53 -0
- package/src/execution/ExecutionLoader.test.ts +378 -0
- package/src/execution/ExecutionLoader.ts +331 -0
- package/src/execution/ExecutionValidator.test.ts +503 -0
- package/src/execution/ExecutionValidator.ts +617 -0
- package/src/generated/graph-converter-execution.types.ts +193 -0
- package/src/helpers/GraphInstrumentationHelper.test.ts +364 -0
- package/src/helpers/GraphInstrumentationHelper.ts +323 -0
- package/src/index.ts +587 -0
- package/src/matchers/SpanMatcher.test.ts +1105 -0
- package/src/matchers/SpanMatcher.ts +381 -0
- package/src/node.ts +316 -0
- package/src/opencode/EVENT_MAPPING.md +82 -0
- package/src/opencode/OpenCodeEventStore.ts +214 -0
- package/src/opencode/__fixtures__/event-shapes.json +443 -0
- package/src/opencode/__fixtures__/session-events.json +13491 -0
- package/src/opencode/agent-sessions.ts +376 -0
- package/src/opencode/index.ts +23 -0
- package/src/opencode/node-path-adapter.ts +205 -0
- package/src/opencode/pipeline.ts +141 -0
- package/src/opencode/types.ts +43 -0
- package/src/orchestration/TraceOrchestrator.ts +560 -0
- package/src/orchestration/__tests__/TraceOrchestrator.test.ts +1098 -0
- package/src/parsers/OtlpTraceParser.ts +401 -0
- package/src/parsers/__tests__/OtlpTraceParser.test.ts +197 -0
- package/src/registry/CompositeRegistry.ts +140 -0
- package/src/registry/EventRegistry.test.ts +387 -0
- package/src/registry/EventRegistry.ts +191 -0
- package/src/registry/LocalRegistry.ts +416 -0
- package/src/registry/RemoteRegistry.ts +499 -0
- package/src/registry/VersionRegistry.test.ts +223 -0
- package/src/registry/VersionRegistry.ts +121 -0
- package/src/rules/config.test.ts +277 -0
- package/src/rules/config.ts +450 -0
- package/src/rules/engine.test.ts +331 -0
- package/src/rules/engine.ts +448 -0
- package/src/rules/implementations/connection-type-references.ts +117 -0
- package/src/rules/implementations/dead-end-states.ts +101 -0
- package/src/rules/implementations/index.ts +66 -0
- package/src/rules/implementations/minimum-node-sources.ts +84 -0
- package/src/rules/implementations/no-unknown-fields.ts +372 -0
- package/src/rules/implementations/orphaned-edge-types.ts +55 -0
- package/src/rules/implementations/orphaned-node-types.ts +58 -0
- package/src/rules/implementations/required-metadata.ts +52 -0
- package/src/rules/implementations/state-transition-references.ts +155 -0
- package/src/rules/implementations/unreachable-states.ts +94 -0
- package/src/rules/implementations/valid-action-patterns.ts +140 -0
- package/src/rules/implementations/valid-color-format.ts +152 -0
- package/src/rules/implementations/valid-edge-types.ts +273 -0
- package/src/rules/implementations/valid-node-types.ts +200 -0
- package/src/rules/index.ts +92 -0
- package/src/rules/types.ts +426 -0
- package/src/scopes/ScopePathIndex.test.ts +94 -0
- package/src/scopes/ScopePathIndex.ts +89 -0
- package/src/scopes/ScopesCanvasValidator.test.ts +127 -0
- package/src/scopes/ScopesCanvasValidator.ts +305 -0
- package/src/scopes/__tests__/utils.test.ts +383 -0
- package/src/scopes/index.ts +42 -0
- package/src/scopes/utils.ts +182 -0
- package/src/scopes/validateScopeNamespaceNesting.test.ts +127 -0
- package/src/scopes/validateScopeNamespaceNesting.ts +88 -0
- package/src/spans/index.ts +24 -0
- package/src/spans/utils.ts +249 -0
- package/src/storage/topic-types.ts +235 -0
- package/src/storage/topicStore.test.ts +193 -0
- package/src/storage/topicStore.ts +489 -0
- package/src/storyboard/builder.ts +308 -0
- package/src/storyboard/index.ts +26 -0
- package/src/storyboard/types.ts +117 -0
- package/src/telemetry/coverage.ts +480 -0
- package/src/telemetry/event-validator.ts +312 -0
- package/src/types/audit.ts +314 -0
- package/src/types/auxiliary.ts +63 -0
- package/src/types/canvas-scope.ts +190 -0
- package/src/types/canvas.test.ts +199 -0
- package/src/types/canvas.ts +1395 -0
- package/src/types/dashboard.ts +257 -0
- package/src/types/index.ts +460 -0
- package/src/types/library.ts +283 -0
- package/src/types/otel.test.ts +219 -0
- package/src/types/otel.ts +620 -0
- package/src/types/path-based-config.ts +285 -0
- package/src/types/registered-trace.ts +432 -0
- package/src/types/resource-match.ts +263 -0
- package/src/types/subsystem-model.ts +352 -0
- package/src/types/version-registry.ts +150 -0
- package/src/utils/CanvasConverter.ts +670 -0
- package/src/utils/GraphConverter.test.ts +322 -0
- package/src/utils/GraphConverter.ts +84 -0
- package/src/utils/PathMatcher.test.ts +139 -0
- package/src/utils/PathMatcher.ts +185 -0
- package/src/utils/TraceToCanvas.test.ts +310 -0
- package/src/utils/TraceToCanvas.ts +510 -0
- package/src/utils/YamlParser.ts +77 -0
- package/src/utils/registeredTraceHelpers.ts +251 -0
- package/src/utils/traceAggregation.test.ts +385 -0
- package/src/utils/traceAggregation.ts +173 -0
- package/src/validation/OtelCanvasValidator.ts +86 -0
- package/src/validation/index.ts +17 -0
- package/src/validation/libraryValidation.ts +206 -0
- package/src/workflow/README.md +408 -0
- package/src/workflow/__tests__/edge-derivation.test.ts +449 -0
- package/src/workflow/__tests__/edge-validation.test.ts +417 -0
- package/src/workflow/__tests__/scenario-matcher.test.ts +225 -0
- package/src/workflow/__tests__/template-parser.test.ts +276 -0
- package/src/workflow/__tests__/template-renderer.test.ts +509 -0
- package/src/workflow/__tests__/types.test.ts +187 -0
- package/src/workflow/__tests__/validator.test.ts +3225 -0
- package/src/workflow/edge-derivation.ts +265 -0
- package/src/workflow/edge-validation.ts +503 -0
- package/src/workflow/example.ts +330 -0
- package/src/workflow/index.ts +86 -0
- package/src/workflow/scenario-matcher.ts +253 -0
- package/src/workflow/template-parser.ts +350 -0
- package/src/workflow/template-renderer.ts +453 -0
- package/src/workflow/types.ts +511 -0
- package/src/workflow/validator.ts +2737 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trace Aggregation Utilities
|
|
3
|
+
*
|
|
4
|
+
* Functions for converting OTLP ResourceSpans to aggregated TraceInfo objects.
|
|
5
|
+
* This provides a higher-level view of traces suitable for UI display and filtering.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type {
|
|
9
|
+
OtelResourceSpansData,
|
|
10
|
+
OtelSpanData,
|
|
11
|
+
OtelResourceData,
|
|
12
|
+
TraceInfo,
|
|
13
|
+
WorkflowMatchInfo,
|
|
14
|
+
} from '../types/otel';
|
|
15
|
+
import {
|
|
16
|
+
getAttributeValue,
|
|
17
|
+
parseNanoTime,
|
|
18
|
+
} from '../types/otel';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Group spans by trace ID and aggregate metadata
|
|
22
|
+
*
|
|
23
|
+
* Converts OTLP ResourceSpans format into TraceInfo objects for easier
|
|
24
|
+
* consumption by UI components. Each trace gets aggregated metadata including
|
|
25
|
+
* duration, error status, and workflow matching information.
|
|
26
|
+
*
|
|
27
|
+
* @param resourceSpans - OTLP resource spans array
|
|
28
|
+
* @returns Array of aggregated trace info objects
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* const traces = groupSpansByTrace(data.resourceSpans);
|
|
33
|
+
* console.log(`Found ${traces.length} traces`);
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export function groupSpansByTrace(resourceSpans: OtelResourceSpansData[]): TraceInfo[] {
|
|
37
|
+
// Group spans by trace ID
|
|
38
|
+
const traceMap = new Map<string, {
|
|
39
|
+
spans: OtelSpanData[];
|
|
40
|
+
resources: OtelResourceData[];
|
|
41
|
+
}>();
|
|
42
|
+
|
|
43
|
+
for (const resourceSpan of resourceSpans) {
|
|
44
|
+
const resource = resourceSpan.resource;
|
|
45
|
+
|
|
46
|
+
for (const scopeSpan of resourceSpan.scopeSpans) {
|
|
47
|
+
for (const span of scopeSpan.spans) {
|
|
48
|
+
const traceId = span.traceId;
|
|
49
|
+
|
|
50
|
+
if (!traceMap.has(traceId)) {
|
|
51
|
+
traceMap.set(traceId, {
|
|
52
|
+
spans: [],
|
|
53
|
+
resources: [],
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const trace = traceMap.get(traceId)!;
|
|
58
|
+
trace.spans.push(span);
|
|
59
|
+
|
|
60
|
+
// Collect unique resources
|
|
61
|
+
if (!trace.resources.includes(resource)) {
|
|
62
|
+
trace.resources.push(resource);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Convert to TraceInfo objects
|
|
69
|
+
const traces: TraceInfo[] = [];
|
|
70
|
+
|
|
71
|
+
for (const [traceId, { spans, resources }] of traceMap.entries()) {
|
|
72
|
+
const traceInfo = aggregateTraceInfo(traceId, spans, resources);
|
|
73
|
+
traces.push(traceInfo);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Sort by start time (newest first)
|
|
77
|
+
traces.sort((a, b) => b.startTime - a.startTime);
|
|
78
|
+
|
|
79
|
+
return traces;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Aggregate trace metadata from spans and resources
|
|
84
|
+
*
|
|
85
|
+
* @param traceId - Trace ID
|
|
86
|
+
* @param spans - All spans in the trace
|
|
87
|
+
* @param resources - All resources associated with the trace
|
|
88
|
+
* @returns Aggregated trace info
|
|
89
|
+
*/
|
|
90
|
+
function aggregateTraceInfo(
|
|
91
|
+
traceId: string,
|
|
92
|
+
spans: OtelSpanData[],
|
|
93
|
+
resources: OtelResourceData[]
|
|
94
|
+
): TraceInfo {
|
|
95
|
+
// Find root span (no parent)
|
|
96
|
+
const rootSpan = spans.find((s) => !s.parentSpanId);
|
|
97
|
+
|
|
98
|
+
// Calculate trace start time (earliest span)
|
|
99
|
+
const startTimes = spans.map((s) => parseNanoTime(s.startTimeUnixNano));
|
|
100
|
+
const startTime = Math.min(...startTimes);
|
|
101
|
+
|
|
102
|
+
// Calculate trace end time (latest span)
|
|
103
|
+
const endTimes = spans.map((s) => parseNanoTime(s.endTimeUnixNano));
|
|
104
|
+
const endTime = Math.max(...endTimes);
|
|
105
|
+
|
|
106
|
+
// Calculate duration
|
|
107
|
+
const duration = endTime - startTime;
|
|
108
|
+
|
|
109
|
+
// Extract service names from resources
|
|
110
|
+
const serviceNames = new Set<string>();
|
|
111
|
+
for (const resource of resources) {
|
|
112
|
+
const serviceName = getAttributeValue(resource.attributes, 'service.name');
|
|
113
|
+
if (serviceName && typeof serviceName === 'string') {
|
|
114
|
+
serviceNames.add(serviceName);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Check for errors
|
|
119
|
+
const hasErrors = spans.some((span) => {
|
|
120
|
+
return span.status.code === 2; // ERROR = 2 in status codes
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
// Extract workflow matching info from first resource
|
|
124
|
+
const matchedWorkflow = extractWorkflowMatchInfo(resources[0]);
|
|
125
|
+
|
|
126
|
+
return {
|
|
127
|
+
traceId,
|
|
128
|
+
name: rootSpan?.name ?? spans[0]?.name ?? 'Unknown',
|
|
129
|
+
startTime,
|
|
130
|
+
duration,
|
|
131
|
+
spanCount: spans.length,
|
|
132
|
+
serviceNames: Array.from(serviceNames),
|
|
133
|
+
hasErrors,
|
|
134
|
+
rootSpanId: rootSpan?.spanId,
|
|
135
|
+
matchedWorkflow,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Extract workflow matching metadata from resource attributes
|
|
141
|
+
*
|
|
142
|
+
* Looks for Principal View specific attributes like:
|
|
143
|
+
* - pv.storyboard.id
|
|
144
|
+
* - pv.storyboard.name
|
|
145
|
+
* - pv.workflow.id
|
|
146
|
+
* - pv.scenario.id
|
|
147
|
+
*
|
|
148
|
+
* @param resource - OTEL resource
|
|
149
|
+
* @returns Workflow match info if found, undefined otherwise
|
|
150
|
+
*/
|
|
151
|
+
function extractWorkflowMatchInfo(resource: OtelResourceData): WorkflowMatchInfo | undefined {
|
|
152
|
+
if (!resource?.attributes) return undefined;
|
|
153
|
+
|
|
154
|
+
const storyboardId = getAttributeValue(resource.attributes, 'pv.storyboard.id');
|
|
155
|
+
const storyboardName = getAttributeValue(resource.attributes, 'pv.storyboard.name');
|
|
156
|
+
|
|
157
|
+
if (!storyboardId || typeof storyboardId !== 'string') return undefined;
|
|
158
|
+
if (!storyboardName || typeof storyboardName !== 'string') return undefined;
|
|
159
|
+
|
|
160
|
+
const workflowId = getAttributeValue(resource.attributes, 'pv.workflow.id');
|
|
161
|
+
const workflowName = getAttributeValue(resource.attributes, 'pv.workflow.name');
|
|
162
|
+
const scenarioId = getAttributeValue(resource.attributes, 'pv.scenario.id');
|
|
163
|
+
const scenarioName = getAttributeValue(resource.attributes, 'pv.scenario.name');
|
|
164
|
+
|
|
165
|
+
return {
|
|
166
|
+
storyboardId,
|
|
167
|
+
storyboardName,
|
|
168
|
+
workflowId: typeof workflowId === 'string' ? workflowId : undefined,
|
|
169
|
+
workflowName: typeof workflowName === 'string' ? workflowName : undefined,
|
|
170
|
+
scenarioId: typeof scenarioId === 'string' ? scenarioId : undefined,
|
|
171
|
+
scenarioName: typeof scenarioName === 'string' ? scenarioName : undefined,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OTEL Canvas Validator
|
|
3
|
+
*
|
|
4
|
+
* Validates that OTEL canvas files do not use explicit fill/color fields on event nodes.
|
|
5
|
+
* OTEL event nodes must use scope-based coloring exclusively for consistency.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { ExtendedCanvas } from '../types/canvas';
|
|
9
|
+
import { isOtelEventNode } from '../types/canvas';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* OTEL canvas validation violation
|
|
13
|
+
*/
|
|
14
|
+
export interface OtelCanvasViolation {
|
|
15
|
+
/** Rule ID that detected this violation */
|
|
16
|
+
ruleId: string;
|
|
17
|
+
|
|
18
|
+
/** Severity level */
|
|
19
|
+
severity: 'error' | 'warn';
|
|
20
|
+
|
|
21
|
+
/** File path where violation occurred */
|
|
22
|
+
file: string;
|
|
23
|
+
|
|
24
|
+
/** JSON path within file (optional) */
|
|
25
|
+
path?: string;
|
|
26
|
+
|
|
27
|
+
/** Human-readable description of what's wrong */
|
|
28
|
+
message: string;
|
|
29
|
+
|
|
30
|
+
/** Why this matters */
|
|
31
|
+
impact: string;
|
|
32
|
+
|
|
33
|
+
/** How to fix it */
|
|
34
|
+
suggestion: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Validates OTEL canvas files
|
|
39
|
+
*/
|
|
40
|
+
export class OtelCanvasValidator {
|
|
41
|
+
/**
|
|
42
|
+
* Validate an OTEL canvas for explicit color usage on event nodes
|
|
43
|
+
*
|
|
44
|
+
* @param canvas - The canvas to validate
|
|
45
|
+
* @param canvasPath - Path to the canvas file (for error reporting)
|
|
46
|
+
* @returns Array of violations found
|
|
47
|
+
*/
|
|
48
|
+
validate(canvas: ExtendedCanvas, canvasPath: string): OtelCanvasViolation[] {
|
|
49
|
+
const violations: OtelCanvasViolation[] = [];
|
|
50
|
+
|
|
51
|
+
// Check all nodes in the canvas - only validate otel-event nodes
|
|
52
|
+
for (const node of canvas.nodes || []) {
|
|
53
|
+
if (isOtelEventNode(node)) {
|
|
54
|
+
// Check for deprecated fill field
|
|
55
|
+
if (node.fill !== undefined) {
|
|
56
|
+
const scopeHint = node.otel?.scope || 'your-scope';
|
|
57
|
+
violations.push({
|
|
58
|
+
ruleId: 'otel-event-explicit-fill-color',
|
|
59
|
+
severity: 'error',
|
|
60
|
+
file: canvasPath,
|
|
61
|
+
path: `nodes[id="${node.id}"].fill`,
|
|
62
|
+
message: `OTEL event node "${node.id}" has explicit fill color which is not allowed`,
|
|
63
|
+
impact: 'OTEL event nodes must use scope-based coloring for consistency. Explicit colors defeat this purpose.',
|
|
64
|
+
suggestion: `Remove the "fill" field and set the color on the otel-scope node for "${scopeHint}" in your .scopes.canvas file`,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Check for deprecated color field
|
|
69
|
+
if (node.color !== undefined) {
|
|
70
|
+
const scopeHint = node.otel?.scope || 'your-scope';
|
|
71
|
+
violations.push({
|
|
72
|
+
ruleId: 'otel-event-explicit-color',
|
|
73
|
+
severity: 'error',
|
|
74
|
+
file: canvasPath,
|
|
75
|
+
path: `nodes[id="${node.id}"].color`,
|
|
76
|
+
message: `OTEL event node "${node.id}" has explicit color which is not allowed`,
|
|
77
|
+
impact: 'OTEL event nodes must use scope-based coloring for consistency. Explicit colors defeat this purpose.',
|
|
78
|
+
suggestion: `Remove the "color" field and set the color on the otel-scope node for "${scopeHint}" in your .scopes.canvas file`,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return violations;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation Module
|
|
3
|
+
*
|
|
4
|
+
* Exports validation functions for various Principal View data structures.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export {
|
|
8
|
+
validateLibraryStructure,
|
|
9
|
+
type LibraryValidationError,
|
|
10
|
+
type LibraryValidationErrorType,
|
|
11
|
+
type LibraryValidationResult,
|
|
12
|
+
} from './libraryValidation';
|
|
13
|
+
|
|
14
|
+
export {
|
|
15
|
+
OtelCanvasValidator,
|
|
16
|
+
type OtelCanvasViolation,
|
|
17
|
+
} from './OtelCanvasValidator';
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Library Validation
|
|
3
|
+
*
|
|
4
|
+
* Standalone validation functions for ComponentLibrary schema.
|
|
5
|
+
* Used by both LibraryLoader (core), LibraryDiscovery, and CLI validation.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { ComponentLibrary } from '../types/library';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Types of library validation errors
|
|
12
|
+
*/
|
|
13
|
+
export type LibraryValidationErrorType =
|
|
14
|
+
| 'parse-error'
|
|
15
|
+
| 'validation-error'
|
|
16
|
+
| 'schema-error'
|
|
17
|
+
| 'scopes-canvas-required';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* A library validation error
|
|
21
|
+
*
|
|
22
|
+
* Unified type used across LibraryLoader, LibraryDiscovery, and CLI validation.
|
|
23
|
+
*/
|
|
24
|
+
export interface LibraryValidationError {
|
|
25
|
+
/** Error message */
|
|
26
|
+
message: string;
|
|
27
|
+
/** Path to the invalid field or file */
|
|
28
|
+
path: string;
|
|
29
|
+
/** Error category */
|
|
30
|
+
type?: LibraryValidationErrorType;
|
|
31
|
+
/** Optional suggestion for fixing the error */
|
|
32
|
+
suggestion?: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Result of library structure validation
|
|
37
|
+
*/
|
|
38
|
+
export interface LibraryValidationResult {
|
|
39
|
+
/** Whether validation passed */
|
|
40
|
+
valid: boolean;
|
|
41
|
+
/** List of validation errors (empty if valid) */
|
|
42
|
+
errors: LibraryValidationError[];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** Helper to create a schema error */
|
|
46
|
+
function schemaError(message: string, path: string, suggestion?: string): LibraryValidationError {
|
|
47
|
+
return { message, path, type: 'schema-error', suggestion };
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Validate a ComponentLibrary structure
|
|
52
|
+
*
|
|
53
|
+
* This validates the core schema requirements:
|
|
54
|
+
* - Required fields (version, name, nodeComponents, edgeComponents)
|
|
55
|
+
* - Event schemas structure
|
|
56
|
+
* - Top-level scopes (color required unless external)
|
|
57
|
+
* - Resources structure and owned-scopes references
|
|
58
|
+
* - Connection rules references
|
|
59
|
+
*
|
|
60
|
+
* Note: This does NOT validate unknown fields or icon names.
|
|
61
|
+
* The CLI adds those supplementary validations.
|
|
62
|
+
*
|
|
63
|
+
* @param library - The library object to validate
|
|
64
|
+
* @returns Validation result with any errors
|
|
65
|
+
*/
|
|
66
|
+
export function validateLibraryStructure(library: ComponentLibrary): LibraryValidationResult {
|
|
67
|
+
const errors: LibraryValidationError[] = [];
|
|
68
|
+
|
|
69
|
+
// Required fields
|
|
70
|
+
if (!library.version) {
|
|
71
|
+
errors.push(schemaError(
|
|
72
|
+
'Missing required field "version"',
|
|
73
|
+
'version',
|
|
74
|
+
'Add: version: "1.0.0"'
|
|
75
|
+
));
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (!library.name) {
|
|
79
|
+
errors.push(schemaError(
|
|
80
|
+
'Missing required field "name"',
|
|
81
|
+
'name',
|
|
82
|
+
'Add: name: "my-library"'
|
|
83
|
+
));
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Validate event schemas if present
|
|
87
|
+
if (library.eventSchemas !== undefined) {
|
|
88
|
+
if (typeof library.eventSchemas !== 'object' || library.eventSchemas === null) {
|
|
89
|
+
errors.push(schemaError(
|
|
90
|
+
'Field "eventSchemas" must be an object',
|
|
91
|
+
'eventSchemas',
|
|
92
|
+
'Use: eventSchemas: { "my-event": { description: "...", attributes: {} } }'
|
|
93
|
+
));
|
|
94
|
+
} else {
|
|
95
|
+
for (const [eventName, schema] of Object.entries(library.eventSchemas)) {
|
|
96
|
+
if (!schema.description) {
|
|
97
|
+
errors.push(schemaError(
|
|
98
|
+
`Event schema "${eventName}" is missing required field "description"`,
|
|
99
|
+
`eventSchemas.${eventName}.description`,
|
|
100
|
+
'Add a description for this event schema'
|
|
101
|
+
));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (!schema.attributes || typeof schema.attributes !== 'object') {
|
|
105
|
+
errors.push(schemaError(
|
|
106
|
+
`Event schema "${eventName}" is missing or has invalid "attributes" field`,
|
|
107
|
+
`eventSchemas.${eventName}.attributes`,
|
|
108
|
+
'Add: attributes: {} (can be empty but must be present)'
|
|
109
|
+
));
|
|
110
|
+
} else {
|
|
111
|
+
// Validate each attribute
|
|
112
|
+
const validTypes = ['string', 'number', 'boolean', 'object', 'array'];
|
|
113
|
+
for (const [attrName, attrSchema] of Object.entries(schema.attributes)) {
|
|
114
|
+
if (!attrSchema.type) {
|
|
115
|
+
errors.push(schemaError(
|
|
116
|
+
`Event schema "${eventName}" attribute "${attrName}" is missing required field "type"`,
|
|
117
|
+
`eventSchemas.${eventName}.attributes.${attrName}.type`,
|
|
118
|
+
`Add type: one of ${validTypes.join(', ')}`
|
|
119
|
+
));
|
|
120
|
+
} else if (!validTypes.includes(attrSchema.type)) {
|
|
121
|
+
errors.push(schemaError(
|
|
122
|
+
`Event schema "${eventName}" attribute "${attrName}" has invalid type "${attrSchema.type}"`,
|
|
123
|
+
`eventSchemas.${eventName}.attributes.${attrName}.type`,
|
|
124
|
+
`Valid types: ${validTypes.join(', ')}`
|
|
125
|
+
));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Note: scopes validation removed - scopes field is deprecated
|
|
134
|
+
// The CLI validate.ts will show an error if library.scopes is present
|
|
135
|
+
|
|
136
|
+
// Validate resources if present
|
|
137
|
+
if (library.resources !== undefined) {
|
|
138
|
+
if (typeof library.resources !== 'object' || library.resources === null || Array.isArray(library.resources)) {
|
|
139
|
+
errors.push(schemaError(
|
|
140
|
+
'Field "resources" must be an object',
|
|
141
|
+
'resources',
|
|
142
|
+
'Use: resources: { my-service: { "service.name": "my-service", ... } }'
|
|
143
|
+
));
|
|
144
|
+
} else {
|
|
145
|
+
for (const [serviceId, resourceAttrs] of Object.entries(library.resources)) {
|
|
146
|
+
if (typeof resourceAttrs !== 'object' || Array.isArray(resourceAttrs) || resourceAttrs === null) {
|
|
147
|
+
errors.push(schemaError(
|
|
148
|
+
`Resource "${serviceId}" must be an object`,
|
|
149
|
+
`resources.${serviceId}`,
|
|
150
|
+
'Use: { "service.name": "...", "owned-scopes": [...] }'
|
|
151
|
+
));
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// Check that service.name is present (required)
|
|
156
|
+
if (!resourceAttrs['service.name']) {
|
|
157
|
+
errors.push(schemaError(
|
|
158
|
+
`Resource "${serviceId}" is missing required attribute "service.name"`,
|
|
159
|
+
`resources.${serviceId}`,
|
|
160
|
+
'Add: "service.name": "my-service-name"'
|
|
161
|
+
));
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Validate owned-scopes
|
|
165
|
+
const ownedScopes = resourceAttrs['owned-scopes'];
|
|
166
|
+
if (ownedScopes !== undefined) {
|
|
167
|
+
if (!Array.isArray(ownedScopes)) {
|
|
168
|
+
errors.push(schemaError(
|
|
169
|
+
`Resource "${serviceId}" owned-scopes must be an array`,
|
|
170
|
+
`resources.${serviceId}.owned-scopes`,
|
|
171
|
+
'Use: owned-scopes: ["scope-name-1", "scope-name-2"]'
|
|
172
|
+
));
|
|
173
|
+
} else {
|
|
174
|
+
for (const scope of ownedScopes) {
|
|
175
|
+
if (typeof scope !== 'string') {
|
|
176
|
+
errors.push(schemaError(
|
|
177
|
+
`Resource "${serviceId}" owned-scopes contains non-string value`,
|
|
178
|
+
`resources.${serviceId}.owned-scopes`,
|
|
179
|
+
'All owned-scopes entries must be strings'
|
|
180
|
+
));
|
|
181
|
+
}
|
|
182
|
+
// Note: Scope existence validation removed - scopes are now defined in .scopes.canvas
|
|
183
|
+
// The CLI will validate that owned-scopes exist in .scopes.canvas
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Validate other attributes are strings (except owned-scopes)
|
|
189
|
+
for (const [attrName, attrValue] of Object.entries(resourceAttrs)) {
|
|
190
|
+
if (attrName !== 'owned-scopes' && typeof attrValue !== 'string') {
|
|
191
|
+
errors.push(schemaError(
|
|
192
|
+
`Resource "${serviceId}" attribute "${attrName}" must have a string value`,
|
|
193
|
+
`resources.${serviceId}.${attrName}`,
|
|
194
|
+
'Resource attributes (except owned-scopes) must be strings'
|
|
195
|
+
));
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
return {
|
|
203
|
+
valid: errors.length === 0,
|
|
204
|
+
errors,
|
|
205
|
+
};
|
|
206
|
+
}
|