@principal-ai/subsystems-core 0.29.0 → 0.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -110
- package/dist/index.d.ts +7 -75
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -205
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +5 -61
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +9 -131
- package/dist/node.js.map +1 -1
- package/dist/types/index.d.ts +3 -348
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -19
- package/dist/types/index.js.map +1 -1
- package/dist/types/subsystem-model.d.ts +34 -3
- package/dist/types/subsystem-model.d.ts.map +1 -1
- package/dist/types/subsystem-model.js.map +1 -1
- package/package.json +7 -24
- package/schemas/subsystem-model.schema.json +52 -1
- package/src/index.ts +7 -580
- package/src/node.ts +21 -262
- package/src/types/index.ts +3 -456
- package/src/types/subsystem-model.ts +39 -3
- package/dist/ConfigurationLoader.d.ts +0 -76
- package/dist/ConfigurationLoader.d.ts.map +0 -1
- package/dist/ConfigurationLoader.js +0 -148
- package/dist/ConfigurationLoader.js.map +0 -1
- package/dist/ConfigurationValidator.d.ts +0 -31
- package/dist/ConfigurationValidator.d.ts.map +0 -1
- package/dist/ConfigurationValidator.js +0 -239
- package/dist/ConfigurationValidator.js.map +0 -1
- package/dist/EventProcessor.d.ts +0 -49
- package/dist/EventProcessor.d.ts.map +0 -1
- package/dist/EventProcessor.js +0 -220
- package/dist/EventProcessor.js.map +0 -1
- package/dist/EventRecorderService.d.ts +0 -305
- package/dist/EventRecorderService.d.ts.map +0 -1
- package/dist/EventRecorderService.js +0 -467
- package/dist/EventRecorderService.js.map +0 -1
- package/dist/LibraryLoader.d.ts +0 -65
- package/dist/LibraryLoader.d.ts.map +0 -1
- package/dist/LibraryLoader.js +0 -197
- package/dist/LibraryLoader.js.map +0 -1
- package/dist/PathBasedEventProcessor.d.ts +0 -77
- package/dist/PathBasedEventProcessor.d.ts.map +0 -1
- package/dist/PathBasedEventProcessor.js +0 -136
- package/dist/PathBasedEventProcessor.js.map +0 -1
- package/dist/SessionManager.d.ts +0 -194
- package/dist/SessionManager.d.ts.map +0 -1
- package/dist/SessionManager.js +0 -302
- package/dist/SessionManager.js.map +0 -1
- package/dist/ValidationEngine.d.ts +0 -31
- package/dist/ValidationEngine.d.ts.map +0 -1
- package/dist/ValidationEngine.js +0 -162
- package/dist/ValidationEngine.js.map +0 -1
- package/dist/auxiliary/AuxiliaryManifestValidator.d.ts +0 -41
- package/dist/auxiliary/AuxiliaryManifestValidator.d.ts.map +0 -1
- package/dist/auxiliary/AuxiliaryManifestValidator.js +0 -100
- package/dist/auxiliary/AuxiliaryManifestValidator.js.map +0 -1
- package/dist/auxiliary/index.d.ts +0 -9
- package/dist/auxiliary/index.d.ts.map +0 -1
- package/dist/auxiliary/index.js +0 -14
- package/dist/auxiliary/index.js.map +0 -1
- package/dist/auxiliary/validateAreaScopeDisjoint.d.ts +0 -24
- package/dist/auxiliary/validateAreaScopeDisjoint.d.ts.map +0 -1
- package/dist/auxiliary/validateAreaScopeDisjoint.js +0 -61
- package/dist/auxiliary/validateAreaScopeDisjoint.js.map +0 -1
- package/dist/cli/codegen.d.ts +0 -41
- package/dist/cli/codegen.d.ts.map +0 -1
- package/dist/cli/codegen.js +0 -257
- package/dist/cli/codegen.js.map +0 -1
- package/dist/codegen/type-generator.d.ts +0 -123
- package/dist/codegen/type-generator.d.ts.map +0 -1
- package/dist/codegen/type-generator.js +0 -433
- package/dist/codegen/type-generator.js.map +0 -1
- package/dist/codegen/usage-example.d.ts +0 -103
- package/dist/codegen/usage-example.d.ts.map +0 -1
- package/dist/codegen/usage-example.js +0 -258
- package/dist/codegen/usage-example.js.map +0 -1
- package/dist/dashboard/DashboardValidator.d.ts +0 -85
- package/dist/dashboard/DashboardValidator.d.ts.map +0 -1
- package/dist/dashboard/DashboardValidator.js +0 -775
- package/dist/dashboard/DashboardValidator.js.map +0 -1
- package/dist/dashboard/index.d.ts +0 -6
- package/dist/dashboard/index.d.ts.map +0 -1
- package/dist/dashboard/index.js +0 -10
- package/dist/dashboard/index.js.map +0 -1
- package/dist/discovery/CanvasDiscovery.d.ts +0 -160
- package/dist/discovery/CanvasDiscovery.d.ts.map +0 -1
- package/dist/discovery/CanvasDiscovery.js +0 -865
- package/dist/discovery/CanvasDiscovery.js.map +0 -1
- package/dist/discovery/CanvasFileManifest.d.ts +0 -86
- package/dist/discovery/CanvasFileManifest.d.ts.map +0 -1
- package/dist/discovery/CanvasFileManifest.js +0 -338
- package/dist/discovery/CanvasFileManifest.js.map +0 -1
- package/dist/discovery/LibraryDiscovery.d.ts +0 -108
- package/dist/discovery/LibraryDiscovery.d.ts.map +0 -1
- package/dist/discovery/LibraryDiscovery.js +0 -263
- package/dist/discovery/LibraryDiscovery.js.map +0 -1
- package/dist/discovery/types.d.ts +0 -403
- package/dist/discovery/types.d.ts.map +0 -1
- package/dist/discovery/types.js +0 -6
- package/dist/discovery/types.js.map +0 -1
- package/dist/events/EventsCanvasValidator.d.ts +0 -139
- package/dist/events/EventsCanvasValidator.d.ts.map +0 -1
- package/dist/events/EventsCanvasValidator.js +0 -281
- package/dist/events/EventsCanvasValidator.js.map +0 -1
- package/dist/events/NamespacePathIndex.d.ts +0 -61
- package/dist/events/NamespacePathIndex.d.ts.map +0 -1
- package/dist/events/NamespacePathIndex.js +0 -74
- package/dist/events/NamespacePathIndex.js.map +0 -1
- package/dist/events/OtelEventPathsValidator.d.ts +0 -75
- package/dist/events/OtelEventPathsValidator.d.ts.map +0 -1
- package/dist/events/OtelEventPathsValidator.js +0 -126
- package/dist/events/OtelEventPathsValidator.js.map +0 -1
- package/dist/events/ScopeEventsValidator.d.ts +0 -68
- package/dist/events/ScopeEventsValidator.d.ts.map +0 -1
- package/dist/events/ScopeEventsValidator.js +0 -91
- package/dist/events/ScopeEventsValidator.js.map +0 -1
- package/dist/events/index.d.ts +0 -9
- package/dist/events/index.d.ts.map +0 -1
- package/dist/events/index.js +0 -12
- package/dist/events/index.js.map +0 -1
- package/dist/events/path-helpers.d.ts +0 -33
- package/dist/events/path-helpers.d.ts.map +0 -1
- package/dist/events/path-helpers.js +0 -59
- package/dist/events/path-helpers.js.map +0 -1
- package/dist/execution/ExecutionLoader.d.ts +0 -135
- package/dist/execution/ExecutionLoader.d.ts.map +0 -1
- package/dist/execution/ExecutionLoader.js +0 -266
- package/dist/execution/ExecutionLoader.js.map +0 -1
- package/dist/execution/ExecutionValidator.d.ts +0 -94
- package/dist/execution/ExecutionValidator.d.ts.map +0 -1
- package/dist/execution/ExecutionValidator.js +0 -503
- package/dist/execution/ExecutionValidator.js.map +0 -1
- package/dist/generated/graph-converter-execution.types.d.ts +0 -177
- package/dist/generated/graph-converter-execution.types.d.ts.map +0 -1
- package/dist/generated/graph-converter-execution.types.js +0 -12
- package/dist/generated/graph-converter-execution.types.js.map +0 -1
- package/dist/helpers/GraphInstrumentationHelper.d.ts +0 -93
- package/dist/helpers/GraphInstrumentationHelper.d.ts.map +0 -1
- package/dist/helpers/GraphInstrumentationHelper.js +0 -252
- package/dist/helpers/GraphInstrumentationHelper.js.map +0 -1
- package/dist/matchers/SpanMatcher.d.ts +0 -107
- package/dist/matchers/SpanMatcher.d.ts.map +0 -1
- package/dist/matchers/SpanMatcher.js +0 -274
- package/dist/matchers/SpanMatcher.js.map +0 -1
- package/dist/orchestration/TraceOrchestrator.d.ts +0 -71
- package/dist/orchestration/TraceOrchestrator.d.ts.map +0 -1
- package/dist/orchestration/TraceOrchestrator.js +0 -416
- package/dist/orchestration/TraceOrchestrator.js.map +0 -1
- package/dist/parsers/OtlpTraceParser.d.ts +0 -131
- package/dist/parsers/OtlpTraceParser.d.ts.map +0 -1
- package/dist/parsers/OtlpTraceParser.js +0 -310
- package/dist/parsers/OtlpTraceParser.js.map +0 -1
- package/dist/registry/CompositeRegistry.d.ts +0 -71
- package/dist/registry/CompositeRegistry.d.ts.map +0 -1
- package/dist/registry/CompositeRegistry.js +0 -113
- package/dist/registry/CompositeRegistry.js.map +0 -1
- package/dist/registry/EventRegistry.d.ts +0 -79
- package/dist/registry/EventRegistry.d.ts.map +0 -1
- package/dist/registry/EventRegistry.js +0 -165
- package/dist/registry/EventRegistry.js.map +0 -1
- package/dist/registry/LocalRegistry.d.ts +0 -111
- package/dist/registry/LocalRegistry.d.ts.map +0 -1
- package/dist/registry/LocalRegistry.js +0 -335
- package/dist/registry/LocalRegistry.js.map +0 -1
- package/dist/registry/RemoteRegistry.d.ts +0 -122
- package/dist/registry/RemoteRegistry.d.ts.map +0 -1
- package/dist/registry/RemoteRegistry.js +0 -399
- package/dist/registry/RemoteRegistry.js.map +0 -1
- package/dist/registry/VersionRegistry.d.ts +0 -51
- package/dist/registry/VersionRegistry.d.ts.map +0 -1
- package/dist/registry/VersionRegistry.js +0 -105
- package/dist/registry/VersionRegistry.js.map +0 -1
- package/dist/rules/config.d.ts +0 -57
- package/dist/rules/config.d.ts.map +0 -1
- package/dist/rules/config.js +0 -382
- package/dist/rules/config.js.map +0 -1
- package/dist/rules/engine.d.ts +0 -70
- package/dist/rules/engine.d.ts.map +0 -1
- package/dist/rules/engine.js +0 -373
- package/dist/rules/engine.js.map +0 -1
- package/dist/rules/implementations/connection-type-references.d.ts +0 -7
- package/dist/rules/implementations/connection-type-references.d.ts.map +0 -1
- package/dist/rules/implementations/connection-type-references.js +0 -107
- package/dist/rules/implementations/connection-type-references.js.map +0 -1
- package/dist/rules/implementations/dead-end-states.d.ts +0 -17
- package/dist/rules/implementations/dead-end-states.d.ts.map +0 -1
- package/dist/rules/implementations/dead-end-states.js +0 -75
- package/dist/rules/implementations/dead-end-states.js.map +0 -1
- package/dist/rules/implementations/index.d.ts +0 -23
- package/dist/rules/implementations/index.d.ts.map +0 -1
- package/dist/rules/implementations/index.js +0 -73
- package/dist/rules/implementations/index.js.map +0 -1
- package/dist/rules/implementations/minimum-node-sources.d.ts +0 -24
- package/dist/rules/implementations/minimum-node-sources.d.ts.map +0 -1
- package/dist/rules/implementations/minimum-node-sources.js +0 -59
- package/dist/rules/implementations/minimum-node-sources.js.map +0 -1
- package/dist/rules/implementations/no-unknown-fields.d.ts +0 -7
- package/dist/rules/implementations/no-unknown-fields.d.ts.map +0 -1
- package/dist/rules/implementations/no-unknown-fields.js +0 -216
- package/dist/rules/implementations/no-unknown-fields.js.map +0 -1
- package/dist/rules/implementations/orphaned-edge-types.d.ts +0 -7
- package/dist/rules/implementations/orphaned-edge-types.d.ts.map +0 -1
- package/dist/rules/implementations/orphaned-edge-types.js +0 -50
- package/dist/rules/implementations/orphaned-edge-types.js.map +0 -1
- package/dist/rules/implementations/orphaned-node-types.d.ts +0 -7
- package/dist/rules/implementations/orphaned-node-types.d.ts.map +0 -1
- package/dist/rules/implementations/orphaned-node-types.js +0 -53
- package/dist/rules/implementations/orphaned-node-types.js.map +0 -1
- package/dist/rules/implementations/required-metadata.d.ts +0 -7
- package/dist/rules/implementations/required-metadata.d.ts.map +0 -1
- package/dist/rules/implementations/required-metadata.js +0 -48
- package/dist/rules/implementations/required-metadata.js.map +0 -1
- package/dist/rules/implementations/state-transition-references.d.ts +0 -7
- package/dist/rules/implementations/state-transition-references.d.ts.map +0 -1
- package/dist/rules/implementations/state-transition-references.js +0 -138
- package/dist/rules/implementations/state-transition-references.js.map +0 -1
- package/dist/rules/implementations/unreachable-states.d.ts +0 -7
- package/dist/rules/implementations/unreachable-states.d.ts.map +0 -1
- package/dist/rules/implementations/unreachable-states.js +0 -83
- package/dist/rules/implementations/unreachable-states.js.map +0 -1
- package/dist/rules/implementations/valid-action-patterns.d.ts +0 -17
- package/dist/rules/implementations/valid-action-patterns.d.ts.map +0 -1
- package/dist/rules/implementations/valid-action-patterns.js +0 -112
- package/dist/rules/implementations/valid-action-patterns.js.map +0 -1
- package/dist/rules/implementations/valid-color-format.d.ts +0 -7
- package/dist/rules/implementations/valid-color-format.d.ts.map +0 -1
- package/dist/rules/implementations/valid-color-format.js +0 -94
- package/dist/rules/implementations/valid-color-format.js.map +0 -1
- package/dist/rules/implementations/valid-edge-types.d.ts +0 -7
- package/dist/rules/implementations/valid-edge-types.d.ts.map +0 -1
- package/dist/rules/implementations/valid-edge-types.js +0 -248
- package/dist/rules/implementations/valid-edge-types.js.map +0 -1
- package/dist/rules/implementations/valid-node-types.d.ts +0 -7
- package/dist/rules/implementations/valid-node-types.d.ts.map +0 -1
- package/dist/rules/implementations/valid-node-types.js +0 -187
- package/dist/rules/implementations/valid-node-types.js.map +0 -1
- package/dist/rules/index.d.ts +0 -28
- package/dist/rules/index.d.ts.map +0 -1
- package/dist/rules/index.js +0 -70
- package/dist/rules/index.js.map +0 -1
- package/dist/rules/types.d.ts +0 -309
- package/dist/rules/types.d.ts.map +0 -1
- package/dist/rules/types.js +0 -40
- package/dist/rules/types.js.map +0 -1
- package/dist/scopes/ScopePathIndex.d.ts +0 -56
- package/dist/scopes/ScopePathIndex.d.ts.map +0 -1
- package/dist/scopes/ScopePathIndex.js +0 -67
- package/dist/scopes/ScopePathIndex.js.map +0 -1
- package/dist/scopes/ScopesCanvasValidator.d.ts +0 -76
- package/dist/scopes/ScopesCanvasValidator.d.ts.map +0 -1
- package/dist/scopes/ScopesCanvasValidator.js +0 -221
- package/dist/scopes/ScopesCanvasValidator.js.map +0 -1
- package/dist/scopes/index.d.ts +0 -12
- package/dist/scopes/index.d.ts.map +0 -1
- package/dist/scopes/index.js +0 -30
- package/dist/scopes/index.js.map +0 -1
- package/dist/scopes/utils.d.ts +0 -85
- package/dist/scopes/utils.d.ts.map +0 -1
- package/dist/scopes/utils.js +0 -143
- package/dist/scopes/utils.js.map +0 -1
- package/dist/scopes/validateScopeNamespaceNesting.d.ts +0 -38
- package/dist/scopes/validateScopeNamespaceNesting.d.ts.map +0 -1
- package/dist/scopes/validateScopeNamespaceNesting.js +0 -69
- package/dist/scopes/validateScopeNamespaceNesting.js.map +0 -1
- package/dist/spans/index.d.ts +0 -12
- package/dist/spans/index.d.ts.map +0 -1
- package/dist/spans/index.js +0 -25
- package/dist/spans/index.js.map +0 -1
- package/dist/spans/utils.d.ts +0 -70
- package/dist/spans/utils.d.ts.map +0 -1
- package/dist/spans/utils.js +0 -205
- package/dist/spans/utils.js.map +0 -1
- package/dist/storyboard/builder.d.ts +0 -135
- package/dist/storyboard/builder.d.ts.map +0 -1
- package/dist/storyboard/builder.js +0 -235
- package/dist/storyboard/builder.js.map +0 -1
- package/dist/storyboard/index.d.ts +0 -9
- package/dist/storyboard/index.d.ts.map +0 -1
- package/dist/storyboard/index.js +0 -18
- package/dist/storyboard/index.js.map +0 -1
- package/dist/storyboard/types.d.ts +0 -101
- package/dist/storyboard/types.d.ts.map +0 -1
- package/dist/storyboard/types.js +0 -10
- package/dist/storyboard/types.js.map +0 -1
- package/dist/telemetry/coverage.d.ts +0 -92
- package/dist/telemetry/coverage.d.ts.map +0 -1
- package/dist/telemetry/coverage.js +0 -335
- package/dist/telemetry/coverage.js.map +0 -1
- package/dist/telemetry/event-validator.d.ts +0 -86
- package/dist/telemetry/event-validator.d.ts.map +0 -1
- package/dist/telemetry/event-validator.js +0 -257
- package/dist/telemetry/event-validator.js.map +0 -1
- package/dist/types/audit.d.ts +0 -236
- package/dist/types/audit.d.ts.map +0 -1
- package/dist/types/audit.js +0 -53
- package/dist/types/audit.js.map +0 -1
- package/dist/types/auxiliary.d.ts +0 -54
- package/dist/types/auxiliary.d.ts.map +0 -1
- package/dist/types/auxiliary.js +0 -27
- package/dist/types/auxiliary.js.map +0 -1
- package/dist/types/canvas-scope.d.ts +0 -156
- package/dist/types/canvas-scope.d.ts.map +0 -1
- package/dist/types/canvas-scope.js +0 -62
- package/dist/types/canvas-scope.js.map +0 -1
- package/dist/types/canvas.d.ts +0 -1138
- package/dist/types/canvas.d.ts.map +0 -1
- package/dist/types/canvas.js +0 -178
- package/dist/types/canvas.js.map +0 -1
- package/dist/types/dashboard.d.ts +0 -170
- package/dist/types/dashboard.d.ts.map +0 -1
- package/dist/types/dashboard.js +0 -14
- package/dist/types/dashboard.js.map +0 -1
- package/dist/types/library.d.ts +0 -227
- package/dist/types/library.d.ts.map +0 -1
- package/dist/types/library.js +0 -16
- package/dist/types/library.js.map +0 -1
- package/dist/types/otel.d.ts +0 -465
- package/dist/types/otel.d.ts.map +0 -1
- package/dist/types/otel.js +0 -163
- package/dist/types/otel.js.map +0 -1
- package/dist/types/path-based-config.d.ts +0 -235
- package/dist/types/path-based-config.d.ts.map +0 -1
- package/dist/types/path-based-config.js +0 -11
- package/dist/types/path-based-config.js.map +0 -1
- package/dist/types/registered-trace.d.ts +0 -337
- package/dist/types/registered-trace.d.ts.map +0 -1
- package/dist/types/registered-trace.js +0 -16
- package/dist/types/registered-trace.js.map +0 -1
- package/dist/types/resource-match.d.ts +0 -207
- package/dist/types/resource-match.d.ts.map +0 -1
- package/dist/types/resource-match.js +0 -74
- package/dist/types/resource-match.js.map +0 -1
- package/dist/types/version-registry.d.ts +0 -137
- package/dist/types/version-registry.d.ts.map +0 -1
- package/dist/types/version-registry.js +0 -10
- package/dist/types/version-registry.js.map +0 -1
- package/dist/utils/CanvasConverter.d.ts +0 -148
- package/dist/utils/CanvasConverter.d.ts.map +0 -1
- package/dist/utils/CanvasConverter.js +0 -530
- package/dist/utils/CanvasConverter.js.map +0 -1
- package/dist/utils/GraphConverter.d.ts +0 -18
- package/dist/utils/GraphConverter.d.ts.map +0 -1
- package/dist/utils/GraphConverter.js +0 -80
- package/dist/utils/GraphConverter.js.map +0 -1
- package/dist/utils/PathMatcher.d.ts +0 -55
- package/dist/utils/PathMatcher.d.ts.map +0 -1
- package/dist/utils/PathMatcher.js +0 -178
- package/dist/utils/PathMatcher.js.map +0 -1
- package/dist/utils/TraceToCanvas.d.ts +0 -83
- package/dist/utils/TraceToCanvas.d.ts.map +0 -1
- package/dist/utils/TraceToCanvas.js +0 -336
- package/dist/utils/TraceToCanvas.js.map +0 -1
- package/dist/utils/YamlParser.d.ts +0 -36
- package/dist/utils/YamlParser.d.ts.map +0 -1
- package/dist/utils/YamlParser.js +0 -92
- package/dist/utils/YamlParser.js.map +0 -1
- package/dist/utils/registeredTraceHelpers.d.ts +0 -76
- package/dist/utils/registeredTraceHelpers.d.ts.map +0 -1
- package/dist/utils/registeredTraceHelpers.js +0 -203
- package/dist/utils/registeredTraceHelpers.js.map +0 -1
- package/dist/utils/traceAggregation.d.ts +0 -25
- package/dist/utils/traceAggregation.d.ts.map +0 -1
- package/dist/utils/traceAggregation.js +0 -140
- package/dist/utils/traceAggregation.js.map +0 -1
- package/dist/validation/OtelCanvasValidator.d.ts +0 -40
- package/dist/validation/OtelCanvasValidator.d.ts.map +0 -1
- package/dist/validation/OtelCanvasValidator.js +0 -59
- package/dist/validation/OtelCanvasValidator.js.map +0 -1
- package/dist/validation/index.d.ts +0 -8
- package/dist/validation/index.d.ts.map +0 -1
- package/dist/validation/index.js +0 -13
- package/dist/validation/index.js.map +0 -1
- package/dist/validation/libraryValidation.d.ts +0 -53
- package/dist/validation/libraryValidation.d.ts.map +0 -1
- package/dist/validation/libraryValidation.js +0 -115
- package/dist/validation/libraryValidation.js.map +0 -1
- package/dist/workflow/edge-derivation.d.ts +0 -111
- package/dist/workflow/edge-derivation.d.ts.map +0 -1
- package/dist/workflow/edge-derivation.js +0 -174
- package/dist/workflow/edge-derivation.js.map +0 -1
- package/dist/workflow/edge-validation.d.ts +0 -170
- package/dist/workflow/edge-validation.d.ts.map +0 -1
- package/dist/workflow/edge-validation.js +0 -332
- package/dist/workflow/edge-validation.js.map +0 -1
- package/dist/workflow/example.d.ts +0 -11
- package/dist/workflow/example.d.ts.map +0 -1
- package/dist/workflow/example.js +0 -310
- package/dist/workflow/example.js.map +0 -1
- package/dist/workflow/index.d.ts +0 -20
- package/dist/workflow/index.d.ts.map +0 -1
- package/dist/workflow/index.js +0 -49
- package/dist/workflow/index.js.map +0 -1
- package/dist/workflow/scenario-matcher.d.ts +0 -63
- package/dist/workflow/scenario-matcher.d.ts.map +0 -1
- package/dist/workflow/scenario-matcher.js +0 -215
- package/dist/workflow/scenario-matcher.js.map +0 -1
- package/dist/workflow/template-parser.d.ts +0 -73
- package/dist/workflow/template-parser.d.ts.map +0 -1
- package/dist/workflow/template-parser.js +0 -280
- package/dist/workflow/template-parser.js.map +0 -1
- package/dist/workflow/template-renderer.d.ts +0 -45
- package/dist/workflow/template-renderer.d.ts.map +0 -1
- package/dist/workflow/template-renderer.js +0 -401
- package/dist/workflow/template-renderer.js.map +0 -1
- package/dist/workflow/types.d.ts +0 -393
- package/dist/workflow/types.d.ts.map +0 -1
- package/dist/workflow/types.js +0 -40
- package/dist/workflow/types.js.map +0 -1
- package/dist/workflow/validator.d.ts +0 -363
- package/dist/workflow/validator.d.ts.map +0 -1
- package/dist/workflow/validator.js +0 -2283
- package/dist/workflow/validator.js.map +0 -1
- package/schemas/auxiliary.manifest.schema.json +0 -56
- package/src/ConfigurationLoader.test.ts +0 -466
- package/src/ConfigurationLoader.ts +0 -184
- package/src/ConfigurationValidator.test.ts +0 -200
- package/src/ConfigurationValidator.ts +0 -273
- package/src/EventProcessor.test.ts +0 -405
- package/src/EventProcessor.ts +0 -256
- package/src/EventRecorderService.test.ts +0 -543
- package/src/EventRecorderService.ts +0 -741
- package/src/LibraryLoader.ts +0 -194
- package/src/PathBasedEventProcessor.test.ts +0 -336
- package/src/PathBasedEventProcessor.ts +0 -196
- package/src/SessionManager.test.ts +0 -424
- package/src/SessionManager.ts +0 -471
- package/src/ValidationEngine.test.ts +0 -520
- package/src/ValidationEngine.ts +0 -200
- package/src/auxiliary/AuxiliaryManifestValidator.test.ts +0 -93
- package/src/auxiliary/AuxiliaryManifestValidator.ts +0 -132
- package/src/auxiliary/index.ts +0 -18
- package/src/auxiliary/validateAreaScopeDisjoint.test.ts +0 -85
- package/src/auxiliary/validateAreaScopeDisjoint.ts +0 -72
- package/src/cli/codegen.ts +0 -286
- package/src/codegen/type-generator.test.ts +0 -219
- package/src/codegen/type-generator.ts +0 -560
- package/src/codegen/usage-example.ts +0 -357
- package/src/dashboard/DashboardValidator.ts +0 -904
- package/src/dashboard/index.ts +0 -14
- package/src/discovery/CanvasDiscovery.test.ts +0 -691
- package/src/discovery/CanvasDiscovery.ts +0 -1114
- package/src/discovery/CanvasFileManifest.test.ts +0 -521
- package/src/discovery/CanvasFileManifest.ts +0 -419
- package/src/discovery/LibraryDiscovery.test.ts +0 -329
- package/src/discovery/LibraryDiscovery.ts +0 -386
- package/src/discovery/types.ts +0 -453
- package/src/events/EventsCanvasValidator.test.ts +0 -191
- package/src/events/EventsCanvasValidator.ts +0 -428
- package/src/events/NamespacePathIndex.test.ts +0 -97
- package/src/events/NamespacePathIndex.ts +0 -100
- package/src/events/OtelEventPathsValidator.test.ts +0 -243
- package/src/events/OtelEventPathsValidator.ts +0 -191
- package/src/events/ScopeEventsValidator.test.ts +0 -173
- package/src/events/ScopeEventsValidator.ts +0 -158
- package/src/events/index.ts +0 -27
- package/src/events/path-helpers.ts +0 -53
- package/src/execution/ExecutionLoader.test.ts +0 -378
- package/src/execution/ExecutionLoader.ts +0 -331
- package/src/execution/ExecutionValidator.test.ts +0 -503
- package/src/execution/ExecutionValidator.ts +0 -617
- package/src/generated/graph-converter-execution.types.ts +0 -193
- package/src/helpers/GraphInstrumentationHelper.test.ts +0 -364
- package/src/helpers/GraphInstrumentationHelper.ts +0 -323
- package/src/matchers/SpanMatcher.test.ts +0 -1105
- package/src/matchers/SpanMatcher.ts +0 -381
- package/src/orchestration/TraceOrchestrator.ts +0 -560
- package/src/orchestration/__tests__/TraceOrchestrator.test.ts +0 -1098
- package/src/parsers/OtlpTraceParser.ts +0 -401
- package/src/parsers/__tests__/OtlpTraceParser.test.ts +0 -197
- package/src/registry/CompositeRegistry.ts +0 -140
- package/src/registry/EventRegistry.test.ts +0 -387
- package/src/registry/EventRegistry.ts +0 -191
- package/src/registry/LocalRegistry.ts +0 -416
- package/src/registry/RemoteRegistry.ts +0 -499
- package/src/registry/VersionRegistry.test.ts +0 -223
- package/src/registry/VersionRegistry.ts +0 -121
- package/src/rules/config.test.ts +0 -277
- package/src/rules/config.ts +0 -450
- package/src/rules/engine.test.ts +0 -331
- package/src/rules/engine.ts +0 -448
- package/src/rules/implementations/connection-type-references.ts +0 -117
- package/src/rules/implementations/dead-end-states.ts +0 -101
- package/src/rules/implementations/index.ts +0 -66
- package/src/rules/implementations/minimum-node-sources.ts +0 -84
- package/src/rules/implementations/no-unknown-fields.ts +0 -372
- package/src/rules/implementations/orphaned-edge-types.ts +0 -55
- package/src/rules/implementations/orphaned-node-types.ts +0 -58
- package/src/rules/implementations/required-metadata.ts +0 -52
- package/src/rules/implementations/state-transition-references.ts +0 -155
- package/src/rules/implementations/unreachable-states.ts +0 -94
- package/src/rules/implementations/valid-action-patterns.ts +0 -140
- package/src/rules/implementations/valid-color-format.ts +0 -152
- package/src/rules/implementations/valid-edge-types.ts +0 -273
- package/src/rules/implementations/valid-node-types.ts +0 -200
- package/src/rules/index.ts +0 -92
- package/src/rules/types.ts +0 -426
- package/src/scopes/ScopePathIndex.test.ts +0 -94
- package/src/scopes/ScopePathIndex.ts +0 -89
- package/src/scopes/ScopesCanvasValidator.test.ts +0 -127
- package/src/scopes/ScopesCanvasValidator.ts +0 -305
- package/src/scopes/__tests__/utils.test.ts +0 -383
- package/src/scopes/index.ts +0 -42
- package/src/scopes/utils.ts +0 -182
- package/src/scopes/validateScopeNamespaceNesting.test.ts +0 -127
- package/src/scopes/validateScopeNamespaceNesting.ts +0 -88
- package/src/spans/index.ts +0 -24
- package/src/spans/utils.ts +0 -249
- package/src/storyboard/builder.ts +0 -308
- package/src/storyboard/index.ts +0 -26
- package/src/storyboard/types.ts +0 -117
- package/src/telemetry/coverage.ts +0 -480
- package/src/telemetry/event-validator.ts +0 -312
- package/src/types/audit.ts +0 -314
- package/src/types/auxiliary.ts +0 -63
- package/src/types/canvas-scope.ts +0 -190
- package/src/types/canvas.test.ts +0 -199
- package/src/types/canvas.ts +0 -1395
- package/src/types/dashboard.ts +0 -257
- package/src/types/library.ts +0 -283
- package/src/types/otel.test.ts +0 -219
- package/src/types/otel.ts +0 -620
- package/src/types/path-based-config.ts +0 -285
- package/src/types/registered-trace.ts +0 -432
- package/src/types/resource-match.ts +0 -263
- package/src/types/version-registry.ts +0 -150
- package/src/utils/CanvasConverter.ts +0 -670
- package/src/utils/GraphConverter.test.ts +0 -322
- package/src/utils/GraphConverter.ts +0 -84
- package/src/utils/PathMatcher.test.ts +0 -139
- package/src/utils/PathMatcher.ts +0 -185
- package/src/utils/TraceToCanvas.test.ts +0 -310
- package/src/utils/TraceToCanvas.ts +0 -510
- package/src/utils/YamlParser.ts +0 -77
- package/src/utils/registeredTraceHelpers.ts +0 -251
- package/src/utils/traceAggregation.test.ts +0 -385
- package/src/utils/traceAggregation.ts +0 -173
- package/src/validation/OtelCanvasValidator.ts +0 -86
- package/src/validation/index.ts +0 -17
- package/src/validation/libraryValidation.ts +0 -206
- package/src/workflow/README.md +0 -408
- package/src/workflow/__tests__/edge-derivation.test.ts +0 -449
- package/src/workflow/__tests__/edge-validation.test.ts +0 -417
- package/src/workflow/__tests__/scenario-matcher.test.ts +0 -225
- package/src/workflow/__tests__/template-parser.test.ts +0 -276
- package/src/workflow/__tests__/template-renderer.test.ts +0 -509
- package/src/workflow/__tests__/types.test.ts +0 -187
- package/src/workflow/__tests__/validator.test.ts +0 -3225
- package/src/workflow/edge-derivation.ts +0 -265
- package/src/workflow/edge-validation.ts +0 -503
- package/src/workflow/example.ts +0 -330
- package/src/workflow/index.ts +0 -86
- package/src/workflow/scenario-matcher.ts +0 -253
- package/src/workflow/template-parser.ts +0 -350
- package/src/workflow/template-renderer.ts +0 -453
- package/src/workflow/types.ts +0 -511
- package/src/workflow/validator.ts +0 -2737
|
@@ -1,453 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Template Renderer
|
|
3
|
-
*
|
|
4
|
-
* Renders workflow templates into human-readable text using
|
|
5
|
-
* OTEL events, selected scenarios, and template expressions.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type {
|
|
9
|
-
WorkflowTemplate,
|
|
10
|
-
WorkflowScenario,
|
|
11
|
-
OtelEvent,
|
|
12
|
-
WorkflowResult,
|
|
13
|
-
WorkflowContext,
|
|
14
|
-
SpanTreeNode,
|
|
15
|
-
FormattingOptions,
|
|
16
|
-
} from './types';
|
|
17
|
-
import { getEventTemplateString } from './types';
|
|
18
|
-
import { parseTemplate, ParsedTemplate, type TemplateContext, type TemplateData } from './template-parser';
|
|
19
|
-
import { selectScenario, computeAggregates } from './scenario-matcher';
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Build @span data from span attributes for template access
|
|
23
|
-
*
|
|
24
|
-
* Flattens dot-notation keys to nested objects so templates can use:
|
|
25
|
-
* {{@span.output.status}} to access span attribute "output.status"
|
|
26
|
-
*/
|
|
27
|
-
function buildSpanData(spanAttributes?: Record<string, unknown>): TemplateData | undefined {
|
|
28
|
-
if (!spanAttributes || Object.keys(spanAttributes).length === 0) {
|
|
29
|
-
return undefined;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
const span: Record<string, unknown> = {};
|
|
33
|
-
|
|
34
|
-
for (const [key, value] of Object.entries(spanAttributes)) {
|
|
35
|
-
if (key.includes('.')) {
|
|
36
|
-
// Nested key: convert "output.status" -> { output: { status: value } }
|
|
37
|
-
const parts = key.split('.');
|
|
38
|
-
let current: Record<string, unknown> = span;
|
|
39
|
-
for (let i = 0; i < parts.length - 1; i++) {
|
|
40
|
-
if (!current[parts[i]] || typeof current[parts[i]] !== 'object') {
|
|
41
|
-
current[parts[i]] = {};
|
|
42
|
-
}
|
|
43
|
-
current = current[parts[i]] as Record<string, unknown>;
|
|
44
|
-
}
|
|
45
|
-
current[parts[parts.length - 1]] = value;
|
|
46
|
-
} else {
|
|
47
|
-
span[key] = value;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
return { span };
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Build a nested context object from flat dot-notation attributes.
|
|
56
|
-
* Converts { 'user.name': 'John' } to { user: { name: 'John' } }
|
|
57
|
-
*/
|
|
58
|
-
function buildContextFromAttributes(attributes?: Record<string, unknown>): Record<string, unknown> {
|
|
59
|
-
if (!attributes || Object.keys(attributes).length === 0) {
|
|
60
|
-
return {};
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const context: Record<string, unknown> = {};
|
|
64
|
-
|
|
65
|
-
for (const [key, value] of Object.entries(attributes)) {
|
|
66
|
-
if (key.includes('.')) {
|
|
67
|
-
const parts = key.split('.');
|
|
68
|
-
let current: Record<string, unknown> = context;
|
|
69
|
-
for (let i = 0; i < parts.length - 1; i++) {
|
|
70
|
-
if (!current[parts[i]] || typeof current[parts[i]] !== 'object') {
|
|
71
|
-
current[parts[i]] = {};
|
|
72
|
-
}
|
|
73
|
-
current = current[parts[i]] as Record<string, unknown>;
|
|
74
|
-
}
|
|
75
|
-
current[parts[parts.length - 1]] = value;
|
|
76
|
-
} else {
|
|
77
|
-
context[key] = value;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return context;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Render a template string using an OtelEvent's attributes.
|
|
86
|
-
*
|
|
87
|
-
* This is the recommended way to render event templates in UI components.
|
|
88
|
-
* It handles:
|
|
89
|
-
* - Building nested context from event.attributes for {{variable}} access
|
|
90
|
-
* - Building @span data from event.spanAttributes for {{@span.variable}} access
|
|
91
|
-
* - Returns ParsedTemplate with segments for proper variable highlighting
|
|
92
|
-
*
|
|
93
|
-
* @param template - Template string with {{variables}}
|
|
94
|
-
* @param event - Optional OtelEvent providing attribute data
|
|
95
|
-
* @returns ParsedTemplate with segments indicating resolved/unresolved variables
|
|
96
|
-
*
|
|
97
|
-
* @example
|
|
98
|
-
* // With event data
|
|
99
|
-
* const parsed = renderEventTemplate("User {{user.name}} logged in", event);
|
|
100
|
-
* parsed.segments.forEach(seg => {
|
|
101
|
-
* if (seg.type === 'variable') {
|
|
102
|
-
* // Style based on seg.resolved
|
|
103
|
-
* }
|
|
104
|
-
* });
|
|
105
|
-
*
|
|
106
|
-
* // Without event (preview mode) - variables remain unresolved
|
|
107
|
-
* const preview = renderEventTemplate("User {{user.name}} logged in");
|
|
108
|
-
*/
|
|
109
|
-
export function renderEventTemplate(template: string, event?: OtelEvent): ParsedTemplate {
|
|
110
|
-
const context = buildContextFromAttributes(event?.attributes);
|
|
111
|
-
const spanData = buildSpanData(event?.spanAttributes);
|
|
112
|
-
|
|
113
|
-
return parseTemplate(template, context as TemplateContext, spanData);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Render a workflow from a template and events
|
|
118
|
-
*
|
|
119
|
-
* Main entry point for workflow generation.
|
|
120
|
-
*
|
|
121
|
-
* @param template - Workflow template
|
|
122
|
-
* @param events - Collected OTEL events
|
|
123
|
-
* @returns Rendered workflow
|
|
124
|
-
*/
|
|
125
|
-
export function renderWorkflow(template: WorkflowTemplate, events: OtelEvent[]): WorkflowResult {
|
|
126
|
-
// Compute aggregates for scenario matching and templates
|
|
127
|
-
const aggregates = computeAggregates(events);
|
|
128
|
-
|
|
129
|
-
// Select scenario
|
|
130
|
-
const matchResult = selectScenario(template, events);
|
|
131
|
-
|
|
132
|
-
// Handle no match case
|
|
133
|
-
if (!matchResult.recommendedScenario) {
|
|
134
|
-
return {
|
|
135
|
-
text: 'No workflow scenario could be matched to this trace.',
|
|
136
|
-
scenarioId: 'no-match',
|
|
137
|
-
metadata: {
|
|
138
|
-
eventCount: events.length,
|
|
139
|
-
spanCount: events.filter((e) => e.type === 'span').length,
|
|
140
|
-
logCount: events.filter((e) => e.type === 'log').length,
|
|
141
|
-
},
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
const scenario = matchResult.recommendedScenario.scenario;
|
|
146
|
-
|
|
147
|
-
// Build context
|
|
148
|
-
const context: WorkflowContext = {
|
|
149
|
-
template,
|
|
150
|
-
scenario,
|
|
151
|
-
events,
|
|
152
|
-
aggregates,
|
|
153
|
-
formatting: {
|
|
154
|
-
indentPerLevel: ' ',
|
|
155
|
-
timestampFormat: 'HH:mm:ss.SSS',
|
|
156
|
-
showTimestamps: false,
|
|
157
|
-
showDuration: true,
|
|
158
|
-
showSpanIds: false,
|
|
159
|
-
showAttributes: 'matched',
|
|
160
|
-
...template.formatting,
|
|
161
|
-
},
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
// Build span tree for hierarchical rendering
|
|
165
|
-
context.spanTree = buildSpanTree(events, template.showLogsPerSpan);
|
|
166
|
-
|
|
167
|
-
// Render workflow
|
|
168
|
-
const text = renderScenario(context);
|
|
169
|
-
|
|
170
|
-
// Build metadata
|
|
171
|
-
const spans = events.filter((e) => e.type === 'span');
|
|
172
|
-
const logs = events.filter((e) => e.type === 'log');
|
|
173
|
-
const timestamps = events.map((e) => normalizeTimestamp(e.timestamp)).filter((t) => !isNaN(t));
|
|
174
|
-
|
|
175
|
-
return {
|
|
176
|
-
text,
|
|
177
|
-
scenarioId: scenario.id,
|
|
178
|
-
metadata: {
|
|
179
|
-
eventCount: events.length,
|
|
180
|
-
spanCount: spans.length,
|
|
181
|
-
logCount: logs.length,
|
|
182
|
-
timeRange:
|
|
183
|
-
timestamps.length > 0
|
|
184
|
-
? {
|
|
185
|
-
start: Math.min(...timestamps),
|
|
186
|
-
end: Math.max(...timestamps),
|
|
187
|
-
}
|
|
188
|
-
: undefined,
|
|
189
|
-
},
|
|
190
|
-
};
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* Render a scenario template
|
|
195
|
-
*
|
|
196
|
-
* @param context - Workflow context
|
|
197
|
-
* @returns Rendered text
|
|
198
|
-
*/
|
|
199
|
-
function renderScenario(context: WorkflowContext): string {
|
|
200
|
-
const { scenario, template, events, aggregates, formatting } = context;
|
|
201
|
-
const parts: string[] = [];
|
|
202
|
-
|
|
203
|
-
// Create template evaluation context (merge aggregates and events)
|
|
204
|
-
const evalContext: Record<string, unknown> = {
|
|
205
|
-
...aggregates,
|
|
206
|
-
events,
|
|
207
|
-
totalEvents: events.length,
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
// Introduction
|
|
211
|
-
if (scenario.template.introduction) {
|
|
212
|
-
parts.push(parseTemplate(scenario.template.introduction, evalContext as TemplateContext).toString());
|
|
213
|
-
parts.push(''); // Blank line
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
// Main content - hierarchical span tree rendering
|
|
217
|
-
if (context.spanTree) {
|
|
218
|
-
parts.push(renderSpanTree(context.spanTree, scenario, evalContext, formatting));
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
// Summary
|
|
222
|
-
if (scenario.template.summary) {
|
|
223
|
-
if (parts.length > 0) {
|
|
224
|
-
parts.push(''); // Blank line before summary
|
|
225
|
-
}
|
|
226
|
-
parts.push(parseTemplate(scenario.template.summary, evalContext as TemplateContext).toString());
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
return parts.join('\n');
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
/**
|
|
233
|
-
* Render span tree (hierarchical view)
|
|
234
|
-
*
|
|
235
|
-
* @param tree - Span tree nodes
|
|
236
|
-
* @param scenario - Scenario being rendered
|
|
237
|
-
* @param context - Evaluation context
|
|
238
|
-
* @param formatting - Formatting options
|
|
239
|
-
* @returns Rendered tree text
|
|
240
|
-
*/
|
|
241
|
-
function renderSpanTree(
|
|
242
|
-
tree: SpanTreeNode[],
|
|
243
|
-
scenario: WorkflowScenario,
|
|
244
|
-
context: Record<string, unknown>,
|
|
245
|
-
formatting: FormattingOptions
|
|
246
|
-
): string {
|
|
247
|
-
const parts: string[] = [];
|
|
248
|
-
|
|
249
|
-
for (const node of tree) {
|
|
250
|
-
const indent = (formatting.indentPerLevel || ' ').repeat(node.depth);
|
|
251
|
-
|
|
252
|
-
// Build context with span attributes as nested objects for Handlebars
|
|
253
|
-
const eventContext = { ...context };
|
|
254
|
-
|
|
255
|
-
// Convert flat dot-notation keys to nested objects
|
|
256
|
-
if (node.span.attributes) {
|
|
257
|
-
for (const [key, value] of Object.entries(node.span.attributes)) {
|
|
258
|
-
if (key.includes('.')) {
|
|
259
|
-
// Nested key: convert "skill.name" -> { skill: { name: value } }
|
|
260
|
-
const parts = key.split('.');
|
|
261
|
-
let current: Record<string, unknown> = eventContext;
|
|
262
|
-
for (let i = 0; i < parts.length - 1; i++) {
|
|
263
|
-
if (!current[parts[i]] || typeof current[parts[i]] !== 'object') {
|
|
264
|
-
current[parts[i]] = {};
|
|
265
|
-
}
|
|
266
|
-
current = current[parts[i]] as Record<string, unknown>;
|
|
267
|
-
}
|
|
268
|
-
current[parts[parts.length - 1]] = value;
|
|
269
|
-
} else {
|
|
270
|
-
// Simple key
|
|
271
|
-
eventContext[key] = value;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
eventContext.span = node.span;
|
|
277
|
-
|
|
278
|
-
// Build @span data from span attributes for template access
|
|
279
|
-
const spanData = buildSpanData(node.span.spanAttributes);
|
|
280
|
-
|
|
281
|
-
// Render span
|
|
282
|
-
if (scenario.template.span) {
|
|
283
|
-
const spanText = parseTemplate(scenario.template.span, eventContext as TemplateContext, spanData).toString();
|
|
284
|
-
parts.push(indent + spanText);
|
|
285
|
-
} else if (scenario.template.events?.[node.span.name]) {
|
|
286
|
-
const eventTemplateEntry = scenario.template.events[node.span.name];
|
|
287
|
-
const eventTemplateStr = getEventTemplateString(eventTemplateEntry);
|
|
288
|
-
const eventText = parseTemplate(eventTemplateStr, eventContext as TemplateContext, spanData).toString();
|
|
289
|
-
parts.push(indent + eventText);
|
|
290
|
-
} else {
|
|
291
|
-
// Default span rendering
|
|
292
|
-
parts.push(indent + `→ ${node.span.name}`);
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
// Render associated logs
|
|
296
|
-
if (node.logs && node.logs.length > 0) {
|
|
297
|
-
for (const log of node.logs) {
|
|
298
|
-
const logContext = { ...context, log };
|
|
299
|
-
// Use log's spanAttributes if available, otherwise inherit from parent span
|
|
300
|
-
const logSpanData = buildSpanData(log.spanAttributes) || spanData;
|
|
301
|
-
const logText = renderLog(log, scenario, logContext, formatting, logSpanData);
|
|
302
|
-
if (logText) {
|
|
303
|
-
parts.push(indent + (formatting.indentPerLevel || ' ') + logText);
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
// Render children
|
|
309
|
-
if (node.children.length > 0 && scenario.template.children !== 'ignore') {
|
|
310
|
-
parts.push(renderSpanTree(node.children, scenario, context, formatting));
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
return parts.join('\n');
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
/**
|
|
318
|
-
* Render a log event
|
|
319
|
-
*
|
|
320
|
-
* @param log - Log event
|
|
321
|
-
* @param scenario - Scenario being rendered
|
|
322
|
-
* @param context - Evaluation context
|
|
323
|
-
* @param formatting - Formatting options
|
|
324
|
-
* @param spanData - Optional span data for @span template access
|
|
325
|
-
* @returns Rendered log text
|
|
326
|
-
*/
|
|
327
|
-
function renderLog(
|
|
328
|
-
log: OtelEvent,
|
|
329
|
-
scenario: WorkflowScenario,
|
|
330
|
-
context: Record<string, unknown>,
|
|
331
|
-
_formatting: FormattingOptions,
|
|
332
|
-
spanData?: TemplateData
|
|
333
|
-
): string | undefined {
|
|
334
|
-
// Check for severity-specific template
|
|
335
|
-
if (scenario.template.logs) {
|
|
336
|
-
const severity = getSeverityLevel(log.severityNumber);
|
|
337
|
-
const logTemplate = scenario.template.logs[severity] || scenario.template.logs.default;
|
|
338
|
-
if (logTemplate) {
|
|
339
|
-
return parseTemplate(logTemplate, context as TemplateContext, spanData).toString();
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
// Check for event-specific template
|
|
344
|
-
const logEventKey = `log.${log.severityText?.toLowerCase()}`;
|
|
345
|
-
if (scenario.template.events?.[logEventKey]) {
|
|
346
|
-
const logEventTemplate = getEventTemplateString(scenario.template.events[logEventKey]);
|
|
347
|
-
return parseTemplate(logEventTemplate, context as TemplateContext, spanData).toString();
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
// Default log rendering
|
|
351
|
-
return `[${log.severityText || 'LOG'}] ${log.body}`;
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
/**
|
|
355
|
-
* Get severity level name from severity number
|
|
356
|
-
*
|
|
357
|
-
* @param severityNumber - OTEL severity number (1-24)
|
|
358
|
-
* @returns Severity level name
|
|
359
|
-
*/
|
|
360
|
-
function getSeverityLevel(severityNumber?: number): keyof NonNullable<WorkflowScenario['template']['logs']> {
|
|
361
|
-
if (!severityNumber) return 'info';
|
|
362
|
-
if (severityNumber >= 21) return 'fatal';
|
|
363
|
-
if (severityNumber >= 17) return 'error';
|
|
364
|
-
if (severityNumber >= 13) return 'warn';
|
|
365
|
-
if (severityNumber >= 9) return 'info';
|
|
366
|
-
if (severityNumber >= 5) return 'debug';
|
|
367
|
-
return 'trace';
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
/**
|
|
371
|
-
* Build span tree from events
|
|
372
|
-
*
|
|
373
|
-
* @param events - All events
|
|
374
|
-
* @param includeLogsPerSpan - Whether to attach logs to spans
|
|
375
|
-
* @returns Span tree
|
|
376
|
-
*/
|
|
377
|
-
function buildSpanTree(events: OtelEvent[], includeLogsPerSpan = false): SpanTreeNode[] {
|
|
378
|
-
const spans = events.filter((e) => e.type === 'span');
|
|
379
|
-
const logs = includeLogsPerSpan ? events.filter((e) => e.type === 'log') : [];
|
|
380
|
-
|
|
381
|
-
// Build map of spans by ID
|
|
382
|
-
const spanMap = new Map<string, SpanTreeNode>();
|
|
383
|
-
for (const span of spans) {
|
|
384
|
-
if (span.spanId) {
|
|
385
|
-
spanMap.set(span.spanId, {
|
|
386
|
-
span,
|
|
387
|
-
children: [],
|
|
388
|
-
logs: [],
|
|
389
|
-
depth: 0,
|
|
390
|
-
});
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
// Attach logs to spans
|
|
395
|
-
if (includeLogsPerSpan) {
|
|
396
|
-
for (const log of logs) {
|
|
397
|
-
if (log.spanId && spanMap.has(log.spanId)) {
|
|
398
|
-
spanMap.get(log.spanId)!.logs!.push(log);
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
// Build tree structure
|
|
404
|
-
const roots: SpanTreeNode[] = [];
|
|
405
|
-
for (const node of spanMap.values()) {
|
|
406
|
-
if (node.span.parentSpanId && spanMap.has(node.span.parentSpanId)) {
|
|
407
|
-
const parent = spanMap.get(node.span.parentSpanId)!;
|
|
408
|
-
parent.children.push(node);
|
|
409
|
-
node.depth = parent.depth + 1;
|
|
410
|
-
} else {
|
|
411
|
-
roots.push(node);
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
return roots;
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
/**
|
|
419
|
-
* Normalize timestamp to milliseconds
|
|
420
|
-
*
|
|
421
|
-
* @param timestamp - Timestamp (number or ISO string)
|
|
422
|
-
* @returns Milliseconds since epoch
|
|
423
|
-
*/
|
|
424
|
-
function normalizeTimestamp(timestamp: string | number): number {
|
|
425
|
-
if (typeof timestamp === 'number') {
|
|
426
|
-
// Assume milliseconds if < 10^12, otherwise nanoseconds
|
|
427
|
-
return timestamp < 1e12 ? timestamp : timestamp / 1e6;
|
|
428
|
-
}
|
|
429
|
-
return new Date(timestamp).getTime();
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
/**
|
|
433
|
-
* Format timestamp
|
|
434
|
-
*
|
|
435
|
-
* @param timestamp - Timestamp to format
|
|
436
|
-
* @param format - Format string (simplified, only supports HH:mm:ss.SSS)
|
|
437
|
-
* @returns Formatted timestamp
|
|
438
|
-
*/
|
|
439
|
-
function formatTimestamp(timestamp: string | number, format: string): string {
|
|
440
|
-
const ms = normalizeTimestamp(timestamp);
|
|
441
|
-
const date = new Date(ms);
|
|
442
|
-
|
|
443
|
-
if (format === 'HH:mm:ss.SSS') {
|
|
444
|
-
const hours = String(date.getHours()).padStart(2, '0');
|
|
445
|
-
const minutes = String(date.getMinutes()).padStart(2, '0');
|
|
446
|
-
const seconds = String(date.getSeconds()).padStart(2, '0');
|
|
447
|
-
const milliseconds = String(date.getMilliseconds()).padStart(3, '0');
|
|
448
|
-
return `${hours}:${minutes}:${seconds}.${milliseconds}`;
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
// Fallback to ISO string
|
|
452
|
-
return date.toISOString();
|
|
453
|
-
}
|