@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,480 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telemetry Coverage Analysis
|
|
3
|
+
*
|
|
4
|
+
* Measures observability coverage by analyzing which implementation files
|
|
5
|
+
* contain the OpenTelemetry events documented in canvas nodes.
|
|
6
|
+
*
|
|
7
|
+
* Uses codebase-composition's ImplementationFileLayerModule for accurate,
|
|
8
|
+
* framework-aware detection of implementation files.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { FileTree } from '@principal-ai/repository-abstraction';
|
|
12
|
+
import { CanvasDiscovery } from '../discovery/CanvasDiscovery';
|
|
13
|
+
import type { DiscoveredCanvasWithContent } from '../discovery/types';
|
|
14
|
+
import type { ExtendedCanvasNode } from '../types/canvas';
|
|
15
|
+
import { isOtelNode, isStandardCanvasNode } from '../types/canvas';
|
|
16
|
+
import { getNodeEventName } from '../storyboard/builder';
|
|
17
|
+
import {
|
|
18
|
+
ImplementationFileLayerModule,
|
|
19
|
+
PackageLayerModule,
|
|
20
|
+
type ImplementationFileLayer,
|
|
21
|
+
} from '@principal-ai/codebase-composition';
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Per-file instrumentation details
|
|
25
|
+
*/
|
|
26
|
+
export interface FileInstrumentation {
|
|
27
|
+
filePath: string;
|
|
28
|
+
expectedEvents: string[]; // Events that should be in this file (from canvas)
|
|
29
|
+
foundEvents: string[]; // Events actually found in the file
|
|
30
|
+
instrumentationCount: number; // foundEvents.length (for heat map)
|
|
31
|
+
hasInstrumentation: boolean; // instrumentationCount > 0
|
|
32
|
+
missingEvents: string[]; // expectedEvents - foundEvents
|
|
33
|
+
isImplementationFile: boolean; // Whether this file matches implementation patterns
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Node status breakdown
|
|
38
|
+
*/
|
|
39
|
+
export interface NodeStatusBreakdown {
|
|
40
|
+
missingStatusCount: number;
|
|
41
|
+
draftCount: number;
|
|
42
|
+
approvedCount: number;
|
|
43
|
+
approvedWithFilesCount: number;
|
|
44
|
+
implementedCount: number;
|
|
45
|
+
implementedWithFilesCount: number;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Validation error for a canvas node
|
|
50
|
+
*/
|
|
51
|
+
export interface ValidationError {
|
|
52
|
+
nodeId: string;
|
|
53
|
+
canvasPath: string;
|
|
54
|
+
error: string;
|
|
55
|
+
status?: string;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Overall coverage metrics (file-based)
|
|
60
|
+
*/
|
|
61
|
+
export interface CoverageMetrics {
|
|
62
|
+
// File-based coverage
|
|
63
|
+
totalImplementationFiles: number;
|
|
64
|
+
filesWithInstrumentation: number;
|
|
65
|
+
coveragePercentage: number;
|
|
66
|
+
|
|
67
|
+
// Per-file details (for heat map and debugging)
|
|
68
|
+
fileCoverage: FileInstrumentation[];
|
|
69
|
+
|
|
70
|
+
// Canvas metadata
|
|
71
|
+
canvasFiles: string[];
|
|
72
|
+
|
|
73
|
+
// Summary stats
|
|
74
|
+
totalExpectedEvents: number;
|
|
75
|
+
totalFoundEvents: number;
|
|
76
|
+
|
|
77
|
+
// Per-package breakdown
|
|
78
|
+
packageCoverage: PackageCoverageMetrics[];
|
|
79
|
+
|
|
80
|
+
// Node status breakdown
|
|
81
|
+
nodeStatus: NodeStatusBreakdown;
|
|
82
|
+
|
|
83
|
+
// Validation errors
|
|
84
|
+
validationErrors: ValidationError[];
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Per-package coverage metrics
|
|
89
|
+
*/
|
|
90
|
+
export interface PackageCoverageMetrics {
|
|
91
|
+
packageName: string;
|
|
92
|
+
packagePath: string;
|
|
93
|
+
totalFiles: number;
|
|
94
|
+
filesWithInstrumentation: number;
|
|
95
|
+
coveragePercentage: number;
|
|
96
|
+
filesByExtension: Record<string, number>;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Extract event name from a canvas node
|
|
101
|
+
* Uses the canonical getNodeEventName() which supports all event reference formats
|
|
102
|
+
*/
|
|
103
|
+
function getEventName(node: ExtendedCanvasNode): string | null {
|
|
104
|
+
return getNodeEventName(node) ?? null;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Extract instrumentation file paths from a canvas node
|
|
109
|
+
* Supports both new format (node.otel.files) and legacy format (pv.otel.files)
|
|
110
|
+
*/
|
|
111
|
+
function getInstrumentationFiles(node: ExtendedCanvasNode): string[] {
|
|
112
|
+
// Check OTEL nodes (top-level otel field)
|
|
113
|
+
if (isOtelNode(node) && node.otel?.files) {
|
|
114
|
+
return node.otel.files;
|
|
115
|
+
}
|
|
116
|
+
// Check standard nodes (pv.otel.files)
|
|
117
|
+
if (isStandardCanvasNode(node) && node.pv?.otel?.files) {
|
|
118
|
+
return node.pv.otel.files;
|
|
119
|
+
}
|
|
120
|
+
return [];
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Check if a file contains a specific event name (simple string match)
|
|
125
|
+
*/
|
|
126
|
+
async function fileContainsEvent(
|
|
127
|
+
filePath: string,
|
|
128
|
+
eventName: string,
|
|
129
|
+
fileReader: (path: string) => Promise<string>
|
|
130
|
+
): Promise<boolean> {
|
|
131
|
+
try {
|
|
132
|
+
const content = await fileReader(filePath);
|
|
133
|
+
return content.includes(eventName);
|
|
134
|
+
} catch {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Get the status of a node (returns undefined if not specified)
|
|
141
|
+
* Supports both new format (node.otel.status) and legacy format (pv.status)
|
|
142
|
+
*/
|
|
143
|
+
function getNodeStatus(node: ExtendedCanvasNode): 'draft' | 'approved' | 'implemented' | undefined {
|
|
144
|
+
// Check OTEL nodes (otel.status)
|
|
145
|
+
if (isOtelNode(node) && node.otel?.status) {
|
|
146
|
+
return node.otel.status;
|
|
147
|
+
}
|
|
148
|
+
// Check standard nodes (pv.status)
|
|
149
|
+
if (isStandardCanvasNode(node) && node.pv?.status) {
|
|
150
|
+
return node.pv.status;
|
|
151
|
+
}
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Get the scope from a node
|
|
157
|
+
* Only supports new format (node.otel.scope). Legacy format (pv.otel.scope) is rejected.
|
|
158
|
+
*/
|
|
159
|
+
function getNodeScope(node: ExtendedCanvasNode): string | undefined {
|
|
160
|
+
const otelNode = node as { otel?: { scope?: string } };
|
|
161
|
+
return otelNode.otel?.scope;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Build a map of file -> expected events from canvas nodes
|
|
166
|
+
* Only includes nodes with status='implemented'
|
|
167
|
+
*/
|
|
168
|
+
async function buildFileEventMap(
|
|
169
|
+
otelCanvases: DiscoveredCanvasWithContent[]
|
|
170
|
+
): Promise<Map<string, Set<string>>> {
|
|
171
|
+
const fileEventMap = new Map<string, Set<string>>();
|
|
172
|
+
|
|
173
|
+
for (const canvas of otelCanvases) {
|
|
174
|
+
if (!canvas.content?.nodes || canvas.content.nodes.length === 0) {
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
for (const node of canvas.content.nodes) {
|
|
179
|
+
const eventName = getEventName(node);
|
|
180
|
+
if (!eventName) continue;
|
|
181
|
+
|
|
182
|
+
// Only check implemented nodes for coverage
|
|
183
|
+
const status = getNodeStatus(node);
|
|
184
|
+
if (status !== 'implemented') continue;
|
|
185
|
+
|
|
186
|
+
const files = getInstrumentationFiles(node);
|
|
187
|
+
for (const file of files) {
|
|
188
|
+
if (!fileEventMap.has(file)) {
|
|
189
|
+
fileEventMap.set(file, new Set());
|
|
190
|
+
}
|
|
191
|
+
fileEventMap.get(file)!.add(eventName);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
return fileEventMap;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Validate nodes and collect validation errors
|
|
201
|
+
*/
|
|
202
|
+
function validateNodes(
|
|
203
|
+
otelCanvases: DiscoveredCanvasWithContent[]
|
|
204
|
+
): { statusBreakdown: NodeStatusBreakdown; errors: ValidationError[] } {
|
|
205
|
+
const errors: ValidationError[] = [];
|
|
206
|
+
const statusBreakdown: NodeStatusBreakdown = {
|
|
207
|
+
missingStatusCount: 0,
|
|
208
|
+
draftCount: 0,
|
|
209
|
+
approvedCount: 0,
|
|
210
|
+
approvedWithFilesCount: 0,
|
|
211
|
+
implementedCount: 0,
|
|
212
|
+
implementedWithFilesCount: 0,
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
for (const canvas of otelCanvases) {
|
|
216
|
+
if (!canvas.content?.nodes || canvas.content.nodes.length === 0) {
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
for (const node of canvas.content.nodes) {
|
|
221
|
+
const status = getNodeStatus(node);
|
|
222
|
+
const eventName = getEventName(node);
|
|
223
|
+
|
|
224
|
+
// Only validate nodes with events
|
|
225
|
+
if (!eventName) continue;
|
|
226
|
+
|
|
227
|
+
const files = getInstrumentationFiles(node);
|
|
228
|
+
const hasFiles = files.length > 0;
|
|
229
|
+
|
|
230
|
+
// Validate: nodes with events MUST have a status
|
|
231
|
+
if (!status) {
|
|
232
|
+
statusBreakdown.missingStatusCount++;
|
|
233
|
+
errors.push({
|
|
234
|
+
nodeId: node.id,
|
|
235
|
+
canvasPath: canvas.path,
|
|
236
|
+
error: `Node with event "${eventName}" must have pv.status field. Set to "draft" (design phase), "approved" (ready to implement), or "implemented" (code exists)`,
|
|
237
|
+
});
|
|
238
|
+
continue; // Skip further validation for this node
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// Get references for grounding validation
|
|
242
|
+
let references: string[] = [];
|
|
243
|
+
if (isOtelNode(node) && node.otel?.references) {
|
|
244
|
+
references = node.otel.references;
|
|
245
|
+
} else if (isStandardCanvasNode(node) && node.pv?.references) {
|
|
246
|
+
references = node.pv.references;
|
|
247
|
+
}
|
|
248
|
+
const hasReferences = references.length > 0;
|
|
249
|
+
|
|
250
|
+
// Count by status
|
|
251
|
+
if (status === 'draft') {
|
|
252
|
+
statusBreakdown.draftCount++;
|
|
253
|
+
// Drafts must be grounded: require either files (if implementation location is known) or references
|
|
254
|
+
if (!hasFiles && !hasReferences) {
|
|
255
|
+
errors.push({
|
|
256
|
+
nodeId: node.id,
|
|
257
|
+
canvasPath: canvas.path,
|
|
258
|
+
status,
|
|
259
|
+
error: `Node with status="draft" must have either pv.otel.files (if implementation location is known) or pv.references (to ground the event in something)`,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
} else if (status === 'approved') {
|
|
263
|
+
statusBreakdown.approvedCount++;
|
|
264
|
+
if (hasFiles) {
|
|
265
|
+
statusBreakdown.approvedWithFilesCount++;
|
|
266
|
+
}
|
|
267
|
+
} else if (status === 'implemented') {
|
|
268
|
+
statusBreakdown.implementedCount++;
|
|
269
|
+
if (hasFiles) {
|
|
270
|
+
statusBreakdown.implementedWithFilesCount++;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// Validate approved and implemented nodes have pv.otel.files
|
|
275
|
+
if ((status === 'approved' || status === 'implemented') && !hasFiles) {
|
|
276
|
+
errors.push({
|
|
277
|
+
nodeId: node.id,
|
|
278
|
+
canvasPath: canvas.path,
|
|
279
|
+
status,
|
|
280
|
+
error: `Node with status="${status}" must have pv.otel.files specified`,
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// Error if using deprecated pv.otel.scope (only for standard nodes)
|
|
285
|
+
let legacyScope: string | undefined;
|
|
286
|
+
if (isStandardCanvasNode(node)) {
|
|
287
|
+
legacyScope = node.pv?.otel?.scope;
|
|
288
|
+
}
|
|
289
|
+
if (legacyScope) {
|
|
290
|
+
errors.push({
|
|
291
|
+
nodeId: node.id,
|
|
292
|
+
canvasPath: canvas.path,
|
|
293
|
+
status,
|
|
294
|
+
error: `Node uses deprecated "pv.otel.scope" field. Use new format: convert to type: "otel-event" with top-level "otel.scope" field instead. Run: npx @principal-ai/principal-studio-cli migrate-nodes`,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// Require scope for ALL event nodes (using new format)
|
|
299
|
+
const scope = getNodeScope(node);
|
|
300
|
+
if (!scope) {
|
|
301
|
+
errors.push({
|
|
302
|
+
nodeId: node.id,
|
|
303
|
+
canvasPath: canvas.path,
|
|
304
|
+
status,
|
|
305
|
+
error: `Event node must have otel.scope specified. Scope defines which instrumentation library emits this event (e.g., "terminal-activity", "auth"). Document scopes in your .scopes.canvas file with otel-scope nodes.`,
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
return { statusBreakdown, errors };
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Analyze instrumentation for a single file
|
|
316
|
+
*/
|
|
317
|
+
async function analyzeFileInstrumentation(
|
|
318
|
+
filePath: string,
|
|
319
|
+
expectedEvents: string[],
|
|
320
|
+
fileReader: (path: string) => Promise<string>,
|
|
321
|
+
isImplFile: boolean
|
|
322
|
+
): Promise<FileInstrumentation> {
|
|
323
|
+
const foundEvents: string[] = [];
|
|
324
|
+
|
|
325
|
+
for (const eventName of expectedEvents) {
|
|
326
|
+
const found = await fileContainsEvent(filePath, eventName, fileReader);
|
|
327
|
+
if (found) {
|
|
328
|
+
foundEvents.push(eventName);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
const missingEvents = expectedEvents.filter(e => !foundEvents.includes(e));
|
|
333
|
+
|
|
334
|
+
return {
|
|
335
|
+
filePath,
|
|
336
|
+
expectedEvents,
|
|
337
|
+
foundEvents,
|
|
338
|
+
instrumentationCount: foundEvents.length,
|
|
339
|
+
hasInstrumentation: foundEvents.length > 0,
|
|
340
|
+
missingEvents,
|
|
341
|
+
isImplementationFile: isImplFile,
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* Get implementation files using codebase-composition's ImplementationFileLayerModule
|
|
347
|
+
* This provides accurate detection with framework-awareness and package boundaries
|
|
348
|
+
*/
|
|
349
|
+
async function getImplementationFilesFromLayer(
|
|
350
|
+
fileTree: FileTree
|
|
351
|
+
): Promise<{ files: Set<string>; layers: ImplementationFileLayer[] }> {
|
|
352
|
+
// Detect packages
|
|
353
|
+
const packageModule = new PackageLayerModule();
|
|
354
|
+
const packageLayers = await packageModule.discoverPackages(fileTree);
|
|
355
|
+
|
|
356
|
+
// Get implementation files per package
|
|
357
|
+
const implModule = new ImplementationFileLayerModule();
|
|
358
|
+
const implLayers = implModule.createImplementationFileLayers(packageLayers, fileTree);
|
|
359
|
+
|
|
360
|
+
// Flatten to set of file paths
|
|
361
|
+
const files = new Set<string>();
|
|
362
|
+
for (const layer of implLayers) {
|
|
363
|
+
for (const file of layer.implementationData.implementationFiles) {
|
|
364
|
+
files.add(file);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
return { files, layers: implLayers };
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* Generate telemetry coverage report from canvas files
|
|
373
|
+
*
|
|
374
|
+
* Uses codebase-composition's ImplementationFileLayerModule for accurate,
|
|
375
|
+
* framework-aware detection of implementation files.
|
|
376
|
+
*
|
|
377
|
+
* @param fileTree - FileTree representation of the codebase
|
|
378
|
+
* @param fileReader - Function to read file contents
|
|
379
|
+
* @returns Coverage metrics based on file instrumentation
|
|
380
|
+
*
|
|
381
|
+
* @example
|
|
382
|
+
* ```typescript
|
|
383
|
+
* import { FilesystemService, NodeFileSystemAdapter } from '@principal-ai/codebase-composition/node';
|
|
384
|
+
* import { readFile } from 'fs/promises';
|
|
385
|
+
* import { resolve } from 'path';
|
|
386
|
+
*
|
|
387
|
+
* const service = new FilesystemService(new NodeFileSystemAdapter());
|
|
388
|
+
* const fileTree = await service.buildFileSystemTreeFromPath('/path/to/project');
|
|
389
|
+
* const fileReader = async (path: string) => readFile(resolve('/path/to/project', path), 'utf-8');
|
|
390
|
+
* const metrics = await analyzeCoverage(fileTree, fileReader);
|
|
391
|
+
* ```
|
|
392
|
+
*/
|
|
393
|
+
export async function analyzeCoverage(
|
|
394
|
+
fileTree: FileTree,
|
|
395
|
+
fileReader: (path: string) => Promise<string>
|
|
396
|
+
): Promise<CoverageMetrics> {
|
|
397
|
+
// Use CanvasDiscovery to find all canvas files
|
|
398
|
+
const discovery = new CanvasDiscovery();
|
|
399
|
+
const result = await discovery.discover(fileTree, {
|
|
400
|
+
fileReader,
|
|
401
|
+
includeContent: true, // Need content to parse nodes
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
// Filter for .otel.canvas files only
|
|
405
|
+
const otelCanvases = result.canvases.filter(c => c.type === 'otel') as DiscoveredCanvasWithContent[];
|
|
406
|
+
|
|
407
|
+
// Validate nodes and collect status breakdown
|
|
408
|
+
const { statusBreakdown, errors } = validateNodes(otelCanvases);
|
|
409
|
+
|
|
410
|
+
// Build map of file -> expected events from canvas (only implemented nodes)
|
|
411
|
+
const fileEventMap = await buildFileEventMap(otelCanvases);
|
|
412
|
+
|
|
413
|
+
// Get all implementation files from the codebase using implementation layer
|
|
414
|
+
const { files: implementationFiles, layers: implLayers } = await getImplementationFilesFromLayer(fileTree);
|
|
415
|
+
|
|
416
|
+
// Get all files referenced in canvas (for coverage denominator)
|
|
417
|
+
const referencedFiles = new Set(fileEventMap.keys());
|
|
418
|
+
|
|
419
|
+
// Combine: we want to check all files referenced in canvas that are also implementation files
|
|
420
|
+
const filesToCheck = new Set(
|
|
421
|
+
[...referencedFiles].filter(f => implementationFiles.has(f))
|
|
422
|
+
);
|
|
423
|
+
|
|
424
|
+
// Analyze each file
|
|
425
|
+
const fileCoverage: FileInstrumentation[] = [];
|
|
426
|
+
|
|
427
|
+
for (const filePath of filesToCheck) {
|
|
428
|
+
const expectedEvents = Array.from(fileEventMap.get(filePath) || []);
|
|
429
|
+
const coverage = await analyzeFileInstrumentation(
|
|
430
|
+
filePath,
|
|
431
|
+
expectedEvents,
|
|
432
|
+
fileReader,
|
|
433
|
+
implementationFiles.has(filePath)
|
|
434
|
+
);
|
|
435
|
+
fileCoverage.push(coverage);
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
// Calculate metrics
|
|
439
|
+
const filesWithInstrumentation = fileCoverage.filter(f => f.hasInstrumentation).length;
|
|
440
|
+
const totalImplementationFiles = filesToCheck.size;
|
|
441
|
+
const coveragePercentage = totalImplementationFiles > 0
|
|
442
|
+
? (filesWithInstrumentation / totalImplementationFiles) * 100
|
|
443
|
+
: 0;
|
|
444
|
+
|
|
445
|
+
const totalExpectedEvents = fileCoverage.reduce((sum, f) => sum + f.expectedEvents.length, 0);
|
|
446
|
+
const totalFoundEvents = fileCoverage.reduce((sum, f) => sum + f.foundEvents.length, 0);
|
|
447
|
+
|
|
448
|
+
// Calculate per-package metrics
|
|
449
|
+
const packageCoverage: PackageCoverageMetrics[] = implLayers.map(layer => {
|
|
450
|
+
const packageFiles = new Set(layer.implementationData.implementationFiles);
|
|
451
|
+
const packageInstrumented = fileCoverage.filter(f =>
|
|
452
|
+
packageFiles.has(f.filePath) && f.hasInstrumentation
|
|
453
|
+
);
|
|
454
|
+
|
|
455
|
+
return {
|
|
456
|
+
packageName: layer.implementationData.packageName,
|
|
457
|
+
packagePath: layer.implementationData.packagePath,
|
|
458
|
+
totalFiles: layer.implementationData.fileCount,
|
|
459
|
+
filesWithInstrumentation: packageInstrumented.length,
|
|
460
|
+
coveragePercentage:
|
|
461
|
+
layer.implementationData.fileCount > 0
|
|
462
|
+
? (packageInstrumented.length / layer.implementationData.fileCount) * 100
|
|
463
|
+
: 0,
|
|
464
|
+
filesByExtension: layer.implementationData.filesByExtension || {},
|
|
465
|
+
};
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
return {
|
|
469
|
+
totalImplementationFiles,
|
|
470
|
+
filesWithInstrumentation,
|
|
471
|
+
coveragePercentage,
|
|
472
|
+
fileCoverage,
|
|
473
|
+
canvasFiles: otelCanvases.map(c => c.path),
|
|
474
|
+
totalExpectedEvents,
|
|
475
|
+
totalFoundEvents,
|
|
476
|
+
packageCoverage,
|
|
477
|
+
nodeStatus: statusBreakdown,
|
|
478
|
+
validationErrors: errors,
|
|
479
|
+
};
|
|
480
|
+
}
|