@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.
Files changed (614) hide show
  1. package/README.md +124 -0
  2. package/dist/ConfigurationLoader.d.ts +76 -0
  3. package/dist/ConfigurationLoader.d.ts.map +1 -0
  4. package/dist/ConfigurationLoader.js +148 -0
  5. package/dist/ConfigurationLoader.js.map +1 -0
  6. package/dist/ConfigurationValidator.d.ts +31 -0
  7. package/dist/ConfigurationValidator.d.ts.map +1 -0
  8. package/dist/ConfigurationValidator.js +239 -0
  9. package/dist/ConfigurationValidator.js.map +1 -0
  10. package/dist/EventProcessor.d.ts +49 -0
  11. package/dist/EventProcessor.d.ts.map +1 -0
  12. package/dist/EventProcessor.js +220 -0
  13. package/dist/EventProcessor.js.map +1 -0
  14. package/dist/EventRecorderService.d.ts +305 -0
  15. package/dist/EventRecorderService.d.ts.map +1 -0
  16. package/dist/EventRecorderService.js +467 -0
  17. package/dist/EventRecorderService.js.map +1 -0
  18. package/dist/LibraryLoader.d.ts +65 -0
  19. package/dist/LibraryLoader.d.ts.map +1 -0
  20. package/dist/LibraryLoader.js +197 -0
  21. package/dist/LibraryLoader.js.map +1 -0
  22. package/dist/PathBasedEventProcessor.d.ts +77 -0
  23. package/dist/PathBasedEventProcessor.d.ts.map +1 -0
  24. package/dist/PathBasedEventProcessor.js +136 -0
  25. package/dist/PathBasedEventProcessor.js.map +1 -0
  26. package/dist/SessionManager.d.ts +194 -0
  27. package/dist/SessionManager.d.ts.map +1 -0
  28. package/dist/SessionManager.js +302 -0
  29. package/dist/SessionManager.js.map +1 -0
  30. package/dist/ValidationEngine.d.ts +31 -0
  31. package/dist/ValidationEngine.d.ts.map +1 -0
  32. package/dist/ValidationEngine.js +162 -0
  33. package/dist/ValidationEngine.js.map +1 -0
  34. package/dist/agent-sessions/fixture.d.ts +80 -0
  35. package/dist/agent-sessions/fixture.d.ts.map +1 -0
  36. package/dist/agent-sessions/fixture.js +130 -0
  37. package/dist/agent-sessions/fixture.js.map +1 -0
  38. package/dist/agent-sessions/index.d.ts +3 -0
  39. package/dist/agent-sessions/index.d.ts.map +1 -0
  40. package/dist/agent-sessions/index.js +6 -0
  41. package/dist/agent-sessions/index.js.map +1 -0
  42. package/dist/auxiliary/AuxiliaryManifestValidator.d.ts +41 -0
  43. package/dist/auxiliary/AuxiliaryManifestValidator.d.ts.map +1 -0
  44. package/dist/auxiliary/AuxiliaryManifestValidator.js +100 -0
  45. package/dist/auxiliary/AuxiliaryManifestValidator.js.map +1 -0
  46. package/dist/auxiliary/index.d.ts +9 -0
  47. package/dist/auxiliary/index.d.ts.map +1 -0
  48. package/dist/auxiliary/index.js +14 -0
  49. package/dist/auxiliary/index.js.map +1 -0
  50. package/dist/auxiliary/validateAreaScopeDisjoint.d.ts +24 -0
  51. package/dist/auxiliary/validateAreaScopeDisjoint.d.ts.map +1 -0
  52. package/dist/auxiliary/validateAreaScopeDisjoint.js +61 -0
  53. package/dist/auxiliary/validateAreaScopeDisjoint.js.map +1 -0
  54. package/dist/cli/codegen.d.ts +41 -0
  55. package/dist/cli/codegen.d.ts.map +1 -0
  56. package/dist/cli/codegen.js +257 -0
  57. package/dist/cli/codegen.js.map +1 -0
  58. package/dist/codegen/type-generator.d.ts +123 -0
  59. package/dist/codegen/type-generator.d.ts.map +1 -0
  60. package/dist/codegen/type-generator.js +433 -0
  61. package/dist/codegen/type-generator.js.map +1 -0
  62. package/dist/codegen/usage-example.d.ts +103 -0
  63. package/dist/codegen/usage-example.d.ts.map +1 -0
  64. package/dist/codegen/usage-example.js +258 -0
  65. package/dist/codegen/usage-example.js.map +1 -0
  66. package/dist/dashboard/DashboardValidator.d.ts +85 -0
  67. package/dist/dashboard/DashboardValidator.d.ts.map +1 -0
  68. package/dist/dashboard/DashboardValidator.js +775 -0
  69. package/dist/dashboard/DashboardValidator.js.map +1 -0
  70. package/dist/dashboard/index.d.ts +6 -0
  71. package/dist/dashboard/index.d.ts.map +1 -0
  72. package/dist/dashboard/index.js +10 -0
  73. package/dist/dashboard/index.js.map +1 -0
  74. package/dist/discovery/CanvasDiscovery.d.ts +160 -0
  75. package/dist/discovery/CanvasDiscovery.d.ts.map +1 -0
  76. package/dist/discovery/CanvasDiscovery.js +865 -0
  77. package/dist/discovery/CanvasDiscovery.js.map +1 -0
  78. package/dist/discovery/CanvasFileManifest.d.ts +86 -0
  79. package/dist/discovery/CanvasFileManifest.d.ts.map +1 -0
  80. package/dist/discovery/CanvasFileManifest.js +338 -0
  81. package/dist/discovery/CanvasFileManifest.js.map +1 -0
  82. package/dist/discovery/LibraryDiscovery.d.ts +108 -0
  83. package/dist/discovery/LibraryDiscovery.d.ts.map +1 -0
  84. package/dist/discovery/LibraryDiscovery.js +263 -0
  85. package/dist/discovery/LibraryDiscovery.js.map +1 -0
  86. package/dist/discovery/types.d.ts +403 -0
  87. package/dist/discovery/types.d.ts.map +1 -0
  88. package/dist/discovery/types.js +6 -0
  89. package/dist/discovery/types.js.map +1 -0
  90. package/dist/events/EventsCanvasValidator.d.ts +139 -0
  91. package/dist/events/EventsCanvasValidator.d.ts.map +1 -0
  92. package/dist/events/EventsCanvasValidator.js +281 -0
  93. package/dist/events/EventsCanvasValidator.js.map +1 -0
  94. package/dist/events/NamespacePathIndex.d.ts +61 -0
  95. package/dist/events/NamespacePathIndex.d.ts.map +1 -0
  96. package/dist/events/NamespacePathIndex.js +74 -0
  97. package/dist/events/NamespacePathIndex.js.map +1 -0
  98. package/dist/events/OtelEventPathsValidator.d.ts +75 -0
  99. package/dist/events/OtelEventPathsValidator.d.ts.map +1 -0
  100. package/dist/events/OtelEventPathsValidator.js +126 -0
  101. package/dist/events/OtelEventPathsValidator.js.map +1 -0
  102. package/dist/events/ScopeEventsValidator.d.ts +68 -0
  103. package/dist/events/ScopeEventsValidator.d.ts.map +1 -0
  104. package/dist/events/ScopeEventsValidator.js +91 -0
  105. package/dist/events/ScopeEventsValidator.js.map +1 -0
  106. package/dist/events/index.d.ts +9 -0
  107. package/dist/events/index.d.ts.map +1 -0
  108. package/dist/events/index.js +12 -0
  109. package/dist/events/index.js.map +1 -0
  110. package/dist/events/path-helpers.d.ts +33 -0
  111. package/dist/events/path-helpers.d.ts.map +1 -0
  112. package/dist/events/path-helpers.js +59 -0
  113. package/dist/events/path-helpers.js.map +1 -0
  114. package/dist/execution/ExecutionLoader.d.ts +135 -0
  115. package/dist/execution/ExecutionLoader.d.ts.map +1 -0
  116. package/dist/execution/ExecutionLoader.js +266 -0
  117. package/dist/execution/ExecutionLoader.js.map +1 -0
  118. package/dist/execution/ExecutionValidator.d.ts +94 -0
  119. package/dist/execution/ExecutionValidator.d.ts.map +1 -0
  120. package/dist/execution/ExecutionValidator.js +503 -0
  121. package/dist/execution/ExecutionValidator.js.map +1 -0
  122. package/dist/generated/graph-converter-execution.types.d.ts +177 -0
  123. package/dist/generated/graph-converter-execution.types.d.ts.map +1 -0
  124. package/dist/generated/graph-converter-execution.types.js +12 -0
  125. package/dist/generated/graph-converter-execution.types.js.map +1 -0
  126. package/dist/helpers/GraphInstrumentationHelper.d.ts +93 -0
  127. package/dist/helpers/GraphInstrumentationHelper.d.ts.map +1 -0
  128. package/dist/helpers/GraphInstrumentationHelper.js +252 -0
  129. package/dist/helpers/GraphInstrumentationHelper.js.map +1 -0
  130. package/dist/index.d.ts +82 -0
  131. package/dist/index.d.ts.map +1 -0
  132. package/dist/index.js +214 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/matchers/SpanMatcher.d.ts +107 -0
  135. package/dist/matchers/SpanMatcher.d.ts.map +1 -0
  136. package/dist/matchers/SpanMatcher.js +274 -0
  137. package/dist/matchers/SpanMatcher.js.map +1 -0
  138. package/dist/node.d.ts +78 -0
  139. package/dist/node.d.ts.map +1 -0
  140. package/dist/node.js +177 -0
  141. package/dist/node.js.map +1 -0
  142. package/dist/opencode/OpenCodeEventStore.d.ts +25 -0
  143. package/dist/opencode/OpenCodeEventStore.d.ts.map +1 -0
  144. package/dist/opencode/OpenCodeEventStore.js +182 -0
  145. package/dist/opencode/OpenCodeEventStore.js.map +1 -0
  146. package/dist/opencode/agent-sessions.d.ts +46 -0
  147. package/dist/opencode/agent-sessions.d.ts.map +1 -0
  148. package/dist/opencode/agent-sessions.js +302 -0
  149. package/dist/opencode/agent-sessions.js.map +1 -0
  150. package/dist/opencode/index.d.ts +6 -0
  151. package/dist/opencode/index.d.ts.map +1 -0
  152. package/dist/opencode/index.js +15 -0
  153. package/dist/opencode/index.js.map +1 -0
  154. package/dist/opencode/node-path-adapter.d.ts +25 -0
  155. package/dist/opencode/node-path-adapter.d.ts.map +1 -0
  156. package/dist/opencode/node-path-adapter.js +188 -0
  157. package/dist/opencode/node-path-adapter.js.map +1 -0
  158. package/dist/opencode/pipeline.d.ts +42 -0
  159. package/dist/opencode/pipeline.d.ts.map +1 -0
  160. package/dist/opencode/pipeline.js +90 -0
  161. package/dist/opencode/pipeline.js.map +1 -0
  162. package/dist/opencode/types.d.ts +39 -0
  163. package/dist/opencode/types.d.ts.map +1 -0
  164. package/dist/opencode/types.js +3 -0
  165. package/dist/opencode/types.js.map +1 -0
  166. package/dist/orchestration/TraceOrchestrator.d.ts +71 -0
  167. package/dist/orchestration/TraceOrchestrator.d.ts.map +1 -0
  168. package/dist/orchestration/TraceOrchestrator.js +416 -0
  169. package/dist/orchestration/TraceOrchestrator.js.map +1 -0
  170. package/dist/parsers/OtlpTraceParser.d.ts +131 -0
  171. package/dist/parsers/OtlpTraceParser.d.ts.map +1 -0
  172. package/dist/parsers/OtlpTraceParser.js +310 -0
  173. package/dist/parsers/OtlpTraceParser.js.map +1 -0
  174. package/dist/registry/CompositeRegistry.d.ts +71 -0
  175. package/dist/registry/CompositeRegistry.d.ts.map +1 -0
  176. package/dist/registry/CompositeRegistry.js +113 -0
  177. package/dist/registry/CompositeRegistry.js.map +1 -0
  178. package/dist/registry/EventRegistry.d.ts +79 -0
  179. package/dist/registry/EventRegistry.d.ts.map +1 -0
  180. package/dist/registry/EventRegistry.js +165 -0
  181. package/dist/registry/EventRegistry.js.map +1 -0
  182. package/dist/registry/LocalRegistry.d.ts +111 -0
  183. package/dist/registry/LocalRegistry.d.ts.map +1 -0
  184. package/dist/registry/LocalRegistry.js +335 -0
  185. package/dist/registry/LocalRegistry.js.map +1 -0
  186. package/dist/registry/RemoteRegistry.d.ts +122 -0
  187. package/dist/registry/RemoteRegistry.d.ts.map +1 -0
  188. package/dist/registry/RemoteRegistry.js +399 -0
  189. package/dist/registry/RemoteRegistry.js.map +1 -0
  190. package/dist/registry/VersionRegistry.d.ts +51 -0
  191. package/dist/registry/VersionRegistry.d.ts.map +1 -0
  192. package/dist/registry/VersionRegistry.js +105 -0
  193. package/dist/registry/VersionRegistry.js.map +1 -0
  194. package/dist/rules/config.d.ts +57 -0
  195. package/dist/rules/config.d.ts.map +1 -0
  196. package/dist/rules/config.js +382 -0
  197. package/dist/rules/config.js.map +1 -0
  198. package/dist/rules/engine.d.ts +70 -0
  199. package/dist/rules/engine.d.ts.map +1 -0
  200. package/dist/rules/engine.js +373 -0
  201. package/dist/rules/engine.js.map +1 -0
  202. package/dist/rules/implementations/connection-type-references.d.ts +7 -0
  203. package/dist/rules/implementations/connection-type-references.d.ts.map +1 -0
  204. package/dist/rules/implementations/connection-type-references.js +107 -0
  205. package/dist/rules/implementations/connection-type-references.js.map +1 -0
  206. package/dist/rules/implementations/dead-end-states.d.ts +17 -0
  207. package/dist/rules/implementations/dead-end-states.d.ts.map +1 -0
  208. package/dist/rules/implementations/dead-end-states.js +75 -0
  209. package/dist/rules/implementations/dead-end-states.js.map +1 -0
  210. package/dist/rules/implementations/index.d.ts +23 -0
  211. package/dist/rules/implementations/index.d.ts.map +1 -0
  212. package/dist/rules/implementations/index.js +73 -0
  213. package/dist/rules/implementations/index.js.map +1 -0
  214. package/dist/rules/implementations/minimum-node-sources.d.ts +24 -0
  215. package/dist/rules/implementations/minimum-node-sources.d.ts.map +1 -0
  216. package/dist/rules/implementations/minimum-node-sources.js +59 -0
  217. package/dist/rules/implementations/minimum-node-sources.js.map +1 -0
  218. package/dist/rules/implementations/no-unknown-fields.d.ts +7 -0
  219. package/dist/rules/implementations/no-unknown-fields.d.ts.map +1 -0
  220. package/dist/rules/implementations/no-unknown-fields.js +216 -0
  221. package/dist/rules/implementations/no-unknown-fields.js.map +1 -0
  222. package/dist/rules/implementations/orphaned-edge-types.d.ts +7 -0
  223. package/dist/rules/implementations/orphaned-edge-types.d.ts.map +1 -0
  224. package/dist/rules/implementations/orphaned-edge-types.js +50 -0
  225. package/dist/rules/implementations/orphaned-edge-types.js.map +1 -0
  226. package/dist/rules/implementations/orphaned-node-types.d.ts +7 -0
  227. package/dist/rules/implementations/orphaned-node-types.d.ts.map +1 -0
  228. package/dist/rules/implementations/orphaned-node-types.js +53 -0
  229. package/dist/rules/implementations/orphaned-node-types.js.map +1 -0
  230. package/dist/rules/implementations/required-metadata.d.ts +7 -0
  231. package/dist/rules/implementations/required-metadata.d.ts.map +1 -0
  232. package/dist/rules/implementations/required-metadata.js +48 -0
  233. package/dist/rules/implementations/required-metadata.js.map +1 -0
  234. package/dist/rules/implementations/state-transition-references.d.ts +7 -0
  235. package/dist/rules/implementations/state-transition-references.d.ts.map +1 -0
  236. package/dist/rules/implementations/state-transition-references.js +138 -0
  237. package/dist/rules/implementations/state-transition-references.js.map +1 -0
  238. package/dist/rules/implementations/unreachable-states.d.ts +7 -0
  239. package/dist/rules/implementations/unreachable-states.d.ts.map +1 -0
  240. package/dist/rules/implementations/unreachable-states.js +83 -0
  241. package/dist/rules/implementations/unreachable-states.js.map +1 -0
  242. package/dist/rules/implementations/valid-action-patterns.d.ts +17 -0
  243. package/dist/rules/implementations/valid-action-patterns.d.ts.map +1 -0
  244. package/dist/rules/implementations/valid-action-patterns.js +112 -0
  245. package/dist/rules/implementations/valid-action-patterns.js.map +1 -0
  246. package/dist/rules/implementations/valid-color-format.d.ts +7 -0
  247. package/dist/rules/implementations/valid-color-format.d.ts.map +1 -0
  248. package/dist/rules/implementations/valid-color-format.js +94 -0
  249. package/dist/rules/implementations/valid-color-format.js.map +1 -0
  250. package/dist/rules/implementations/valid-edge-types.d.ts +7 -0
  251. package/dist/rules/implementations/valid-edge-types.d.ts.map +1 -0
  252. package/dist/rules/implementations/valid-edge-types.js +248 -0
  253. package/dist/rules/implementations/valid-edge-types.js.map +1 -0
  254. package/dist/rules/implementations/valid-node-types.d.ts +7 -0
  255. package/dist/rules/implementations/valid-node-types.d.ts.map +1 -0
  256. package/dist/rules/implementations/valid-node-types.js +187 -0
  257. package/dist/rules/implementations/valid-node-types.js.map +1 -0
  258. package/dist/rules/index.d.ts +28 -0
  259. package/dist/rules/index.d.ts.map +1 -0
  260. package/dist/rules/index.js +70 -0
  261. package/dist/rules/index.js.map +1 -0
  262. package/dist/rules/types.d.ts +309 -0
  263. package/dist/rules/types.d.ts.map +1 -0
  264. package/dist/rules/types.js +40 -0
  265. package/dist/rules/types.js.map +1 -0
  266. package/dist/scopes/ScopePathIndex.d.ts +56 -0
  267. package/dist/scopes/ScopePathIndex.d.ts.map +1 -0
  268. package/dist/scopes/ScopePathIndex.js +67 -0
  269. package/dist/scopes/ScopePathIndex.js.map +1 -0
  270. package/dist/scopes/ScopesCanvasValidator.d.ts +76 -0
  271. package/dist/scopes/ScopesCanvasValidator.d.ts.map +1 -0
  272. package/dist/scopes/ScopesCanvasValidator.js +221 -0
  273. package/dist/scopes/ScopesCanvasValidator.js.map +1 -0
  274. package/dist/scopes/index.d.ts +12 -0
  275. package/dist/scopes/index.d.ts.map +1 -0
  276. package/dist/scopes/index.js +30 -0
  277. package/dist/scopes/index.js.map +1 -0
  278. package/dist/scopes/utils.d.ts +85 -0
  279. package/dist/scopes/utils.d.ts.map +1 -0
  280. package/dist/scopes/utils.js +143 -0
  281. package/dist/scopes/utils.js.map +1 -0
  282. package/dist/scopes/validateScopeNamespaceNesting.d.ts +38 -0
  283. package/dist/scopes/validateScopeNamespaceNesting.d.ts.map +1 -0
  284. package/dist/scopes/validateScopeNamespaceNesting.js +69 -0
  285. package/dist/scopes/validateScopeNamespaceNesting.js.map +1 -0
  286. package/dist/spans/index.d.ts +12 -0
  287. package/dist/spans/index.d.ts.map +1 -0
  288. package/dist/spans/index.js +25 -0
  289. package/dist/spans/index.js.map +1 -0
  290. package/dist/spans/utils.d.ts +70 -0
  291. package/dist/spans/utils.d.ts.map +1 -0
  292. package/dist/spans/utils.js +205 -0
  293. package/dist/spans/utils.js.map +1 -0
  294. package/dist/storage/topic-types.d.ts +203 -0
  295. package/dist/storage/topic-types.d.ts.map +1 -0
  296. package/dist/storage/topic-types.js +60 -0
  297. package/dist/storage/topic-types.js.map +1 -0
  298. package/dist/storage/topicStore.d.ts +135 -0
  299. package/dist/storage/topicStore.d.ts.map +1 -0
  300. package/dist/storage/topicStore.js +389 -0
  301. package/dist/storage/topicStore.js.map +1 -0
  302. package/dist/storyboard/builder.d.ts +135 -0
  303. package/dist/storyboard/builder.d.ts.map +1 -0
  304. package/dist/storyboard/builder.js +235 -0
  305. package/dist/storyboard/builder.js.map +1 -0
  306. package/dist/storyboard/index.d.ts +9 -0
  307. package/dist/storyboard/index.d.ts.map +1 -0
  308. package/dist/storyboard/index.js +18 -0
  309. package/dist/storyboard/index.js.map +1 -0
  310. package/dist/storyboard/types.d.ts +101 -0
  311. package/dist/storyboard/types.d.ts.map +1 -0
  312. package/dist/storyboard/types.js +10 -0
  313. package/dist/storyboard/types.js.map +1 -0
  314. package/dist/telemetry/coverage.d.ts +92 -0
  315. package/dist/telemetry/coverage.d.ts.map +1 -0
  316. package/dist/telemetry/coverage.js +335 -0
  317. package/dist/telemetry/coverage.js.map +1 -0
  318. package/dist/telemetry/event-validator.d.ts +86 -0
  319. package/dist/telemetry/event-validator.d.ts.map +1 -0
  320. package/dist/telemetry/event-validator.js +257 -0
  321. package/dist/telemetry/event-validator.js.map +1 -0
  322. package/dist/types/audit.d.ts +236 -0
  323. package/dist/types/audit.d.ts.map +1 -0
  324. package/dist/types/audit.js +53 -0
  325. package/dist/types/audit.js.map +1 -0
  326. package/dist/types/auxiliary.d.ts +54 -0
  327. package/dist/types/auxiliary.d.ts.map +1 -0
  328. package/dist/types/auxiliary.js +27 -0
  329. package/dist/types/auxiliary.js.map +1 -0
  330. package/dist/types/canvas-scope.d.ts +156 -0
  331. package/dist/types/canvas-scope.d.ts.map +1 -0
  332. package/dist/types/canvas-scope.js +62 -0
  333. package/dist/types/canvas-scope.js.map +1 -0
  334. package/dist/types/canvas.d.ts +1138 -0
  335. package/dist/types/canvas.d.ts.map +1 -0
  336. package/dist/types/canvas.js +178 -0
  337. package/dist/types/canvas.js.map +1 -0
  338. package/dist/types/dashboard.d.ts +170 -0
  339. package/dist/types/dashboard.d.ts.map +1 -0
  340. package/dist/types/dashboard.js +14 -0
  341. package/dist/types/dashboard.js.map +1 -0
  342. package/dist/types/index.d.ts +352 -0
  343. package/dist/types/index.d.ts.map +1 -0
  344. package/dist/types/index.js +39 -0
  345. package/dist/types/index.js.map +1 -0
  346. package/dist/types/library.d.ts +227 -0
  347. package/dist/types/library.d.ts.map +1 -0
  348. package/dist/types/library.js +16 -0
  349. package/dist/types/library.js.map +1 -0
  350. package/dist/types/otel.d.ts +465 -0
  351. package/dist/types/otel.d.ts.map +1 -0
  352. package/dist/types/otel.js +163 -0
  353. package/dist/types/otel.js.map +1 -0
  354. package/dist/types/path-based-config.d.ts +235 -0
  355. package/dist/types/path-based-config.d.ts.map +1 -0
  356. package/dist/types/path-based-config.js +11 -0
  357. package/dist/types/path-based-config.js.map +1 -0
  358. package/dist/types/registered-trace.d.ts +337 -0
  359. package/dist/types/registered-trace.d.ts.map +1 -0
  360. package/dist/types/registered-trace.js +16 -0
  361. package/dist/types/registered-trace.js.map +1 -0
  362. package/dist/types/resource-match.d.ts +207 -0
  363. package/dist/types/resource-match.d.ts.map +1 -0
  364. package/dist/types/resource-match.js +74 -0
  365. package/dist/types/resource-match.js.map +1 -0
  366. package/dist/types/subsystem-model.d.ts +265 -0
  367. package/dist/types/subsystem-model.d.ts.map +1 -0
  368. package/dist/types/subsystem-model.js +35 -0
  369. package/dist/types/subsystem-model.js.map +1 -0
  370. package/dist/types/version-registry.d.ts +137 -0
  371. package/dist/types/version-registry.d.ts.map +1 -0
  372. package/dist/types/version-registry.js +10 -0
  373. package/dist/types/version-registry.js.map +1 -0
  374. package/dist/utils/CanvasConverter.d.ts +148 -0
  375. package/dist/utils/CanvasConverter.d.ts.map +1 -0
  376. package/dist/utils/CanvasConverter.js +530 -0
  377. package/dist/utils/CanvasConverter.js.map +1 -0
  378. package/dist/utils/GraphConverter.d.ts +18 -0
  379. package/dist/utils/GraphConverter.d.ts.map +1 -0
  380. package/dist/utils/GraphConverter.js +80 -0
  381. package/dist/utils/GraphConverter.js.map +1 -0
  382. package/dist/utils/PathMatcher.d.ts +55 -0
  383. package/dist/utils/PathMatcher.d.ts.map +1 -0
  384. package/dist/utils/PathMatcher.js +178 -0
  385. package/dist/utils/PathMatcher.js.map +1 -0
  386. package/dist/utils/TraceToCanvas.d.ts +83 -0
  387. package/dist/utils/TraceToCanvas.d.ts.map +1 -0
  388. package/dist/utils/TraceToCanvas.js +336 -0
  389. package/dist/utils/TraceToCanvas.js.map +1 -0
  390. package/dist/utils/YamlParser.d.ts +36 -0
  391. package/dist/utils/YamlParser.d.ts.map +1 -0
  392. package/dist/utils/YamlParser.js +92 -0
  393. package/dist/utils/YamlParser.js.map +1 -0
  394. package/dist/utils/registeredTraceHelpers.d.ts +76 -0
  395. package/dist/utils/registeredTraceHelpers.d.ts.map +1 -0
  396. package/dist/utils/registeredTraceHelpers.js +203 -0
  397. package/dist/utils/registeredTraceHelpers.js.map +1 -0
  398. package/dist/utils/traceAggregation.d.ts +25 -0
  399. package/dist/utils/traceAggregation.d.ts.map +1 -0
  400. package/dist/utils/traceAggregation.js +140 -0
  401. package/dist/utils/traceAggregation.js.map +1 -0
  402. package/dist/validation/OtelCanvasValidator.d.ts +40 -0
  403. package/dist/validation/OtelCanvasValidator.d.ts.map +1 -0
  404. package/dist/validation/OtelCanvasValidator.js +59 -0
  405. package/dist/validation/OtelCanvasValidator.js.map +1 -0
  406. package/dist/validation/index.d.ts +8 -0
  407. package/dist/validation/index.d.ts.map +1 -0
  408. package/dist/validation/index.js +13 -0
  409. package/dist/validation/index.js.map +1 -0
  410. package/dist/validation/libraryValidation.d.ts +53 -0
  411. package/dist/validation/libraryValidation.d.ts.map +1 -0
  412. package/dist/validation/libraryValidation.js +115 -0
  413. package/dist/validation/libraryValidation.js.map +1 -0
  414. package/dist/workflow/edge-derivation.d.ts +111 -0
  415. package/dist/workflow/edge-derivation.d.ts.map +1 -0
  416. package/dist/workflow/edge-derivation.js +174 -0
  417. package/dist/workflow/edge-derivation.js.map +1 -0
  418. package/dist/workflow/edge-validation.d.ts +170 -0
  419. package/dist/workflow/edge-validation.d.ts.map +1 -0
  420. package/dist/workflow/edge-validation.js +332 -0
  421. package/dist/workflow/edge-validation.js.map +1 -0
  422. package/dist/workflow/example.d.ts +11 -0
  423. package/dist/workflow/example.d.ts.map +1 -0
  424. package/dist/workflow/example.js +310 -0
  425. package/dist/workflow/example.js.map +1 -0
  426. package/dist/workflow/index.d.ts +20 -0
  427. package/dist/workflow/index.d.ts.map +1 -0
  428. package/dist/workflow/index.js +49 -0
  429. package/dist/workflow/index.js.map +1 -0
  430. package/dist/workflow/scenario-matcher.d.ts +63 -0
  431. package/dist/workflow/scenario-matcher.d.ts.map +1 -0
  432. package/dist/workflow/scenario-matcher.js +215 -0
  433. package/dist/workflow/scenario-matcher.js.map +1 -0
  434. package/dist/workflow/template-parser.d.ts +73 -0
  435. package/dist/workflow/template-parser.d.ts.map +1 -0
  436. package/dist/workflow/template-parser.js +280 -0
  437. package/dist/workflow/template-parser.js.map +1 -0
  438. package/dist/workflow/template-renderer.d.ts +45 -0
  439. package/dist/workflow/template-renderer.d.ts.map +1 -0
  440. package/dist/workflow/template-renderer.js +401 -0
  441. package/dist/workflow/template-renderer.js.map +1 -0
  442. package/dist/workflow/types.d.ts +393 -0
  443. package/dist/workflow/types.d.ts.map +1 -0
  444. package/dist/workflow/types.js +40 -0
  445. package/dist/workflow/types.js.map +1 -0
  446. package/dist/workflow/validator.d.ts +363 -0
  447. package/dist/workflow/validator.d.ts.map +1 -0
  448. package/dist/workflow/validator.js +2283 -0
  449. package/dist/workflow/validator.js.map +1 -0
  450. package/package.json +84 -0
  451. package/schemas/auxiliary.manifest.schema.json +56 -0
  452. package/schemas/subsystem-model.schema.json +767 -0
  453. package/src/ConfigurationLoader.test.ts +466 -0
  454. package/src/ConfigurationLoader.ts +184 -0
  455. package/src/ConfigurationValidator.test.ts +200 -0
  456. package/src/ConfigurationValidator.ts +273 -0
  457. package/src/EventProcessor.test.ts +405 -0
  458. package/src/EventProcessor.ts +256 -0
  459. package/src/EventRecorderService.test.ts +543 -0
  460. package/src/EventRecorderService.ts +741 -0
  461. package/src/LibraryLoader.ts +194 -0
  462. package/src/PathBasedEventProcessor.test.ts +336 -0
  463. package/src/PathBasedEventProcessor.ts +196 -0
  464. package/src/SessionManager.test.ts +424 -0
  465. package/src/SessionManager.ts +471 -0
  466. package/src/ValidationEngine.test.ts +520 -0
  467. package/src/ValidationEngine.ts +200 -0
  468. package/src/agent-sessions/fixture.ts +225 -0
  469. package/src/agent-sessions/index.ts +10 -0
  470. package/src/auxiliary/AuxiliaryManifestValidator.test.ts +93 -0
  471. package/src/auxiliary/AuxiliaryManifestValidator.ts +132 -0
  472. package/src/auxiliary/index.ts +18 -0
  473. package/src/auxiliary/validateAreaScopeDisjoint.test.ts +85 -0
  474. package/src/auxiliary/validateAreaScopeDisjoint.ts +72 -0
  475. package/src/browser-safety.test.ts +170 -0
  476. package/src/cli/codegen.ts +286 -0
  477. package/src/codegen/type-generator.test.ts +219 -0
  478. package/src/codegen/type-generator.ts +560 -0
  479. package/src/codegen/usage-example.ts +357 -0
  480. package/src/dashboard/DashboardValidator.ts +904 -0
  481. package/src/dashboard/index.ts +14 -0
  482. package/src/discovery/CanvasDiscovery.test.ts +691 -0
  483. package/src/discovery/CanvasDiscovery.ts +1114 -0
  484. package/src/discovery/CanvasFileManifest.test.ts +521 -0
  485. package/src/discovery/CanvasFileManifest.ts +419 -0
  486. package/src/discovery/LibraryDiscovery.test.ts +329 -0
  487. package/src/discovery/LibraryDiscovery.ts +386 -0
  488. package/src/discovery/types.ts +453 -0
  489. package/src/events/EventsCanvasValidator.test.ts +191 -0
  490. package/src/events/EventsCanvasValidator.ts +428 -0
  491. package/src/events/NamespacePathIndex.test.ts +97 -0
  492. package/src/events/NamespacePathIndex.ts +100 -0
  493. package/src/events/OtelEventPathsValidator.test.ts +243 -0
  494. package/src/events/OtelEventPathsValidator.ts +191 -0
  495. package/src/events/ScopeEventsValidator.test.ts +173 -0
  496. package/src/events/ScopeEventsValidator.ts +158 -0
  497. package/src/events/index.ts +27 -0
  498. package/src/events/path-helpers.ts +53 -0
  499. package/src/execution/ExecutionLoader.test.ts +378 -0
  500. package/src/execution/ExecutionLoader.ts +331 -0
  501. package/src/execution/ExecutionValidator.test.ts +503 -0
  502. package/src/execution/ExecutionValidator.ts +617 -0
  503. package/src/generated/graph-converter-execution.types.ts +193 -0
  504. package/src/helpers/GraphInstrumentationHelper.test.ts +364 -0
  505. package/src/helpers/GraphInstrumentationHelper.ts +323 -0
  506. package/src/index.ts +587 -0
  507. package/src/matchers/SpanMatcher.test.ts +1105 -0
  508. package/src/matchers/SpanMatcher.ts +381 -0
  509. package/src/node.ts +316 -0
  510. package/src/opencode/EVENT_MAPPING.md +82 -0
  511. package/src/opencode/OpenCodeEventStore.ts +214 -0
  512. package/src/opencode/__fixtures__/event-shapes.json +443 -0
  513. package/src/opencode/__fixtures__/session-events.json +13491 -0
  514. package/src/opencode/agent-sessions.ts +376 -0
  515. package/src/opencode/index.ts +23 -0
  516. package/src/opencode/node-path-adapter.ts +205 -0
  517. package/src/opencode/pipeline.ts +141 -0
  518. package/src/opencode/types.ts +43 -0
  519. package/src/orchestration/TraceOrchestrator.ts +560 -0
  520. package/src/orchestration/__tests__/TraceOrchestrator.test.ts +1098 -0
  521. package/src/parsers/OtlpTraceParser.ts +401 -0
  522. package/src/parsers/__tests__/OtlpTraceParser.test.ts +197 -0
  523. package/src/registry/CompositeRegistry.ts +140 -0
  524. package/src/registry/EventRegistry.test.ts +387 -0
  525. package/src/registry/EventRegistry.ts +191 -0
  526. package/src/registry/LocalRegistry.ts +416 -0
  527. package/src/registry/RemoteRegistry.ts +499 -0
  528. package/src/registry/VersionRegistry.test.ts +223 -0
  529. package/src/registry/VersionRegistry.ts +121 -0
  530. package/src/rules/config.test.ts +277 -0
  531. package/src/rules/config.ts +450 -0
  532. package/src/rules/engine.test.ts +331 -0
  533. package/src/rules/engine.ts +448 -0
  534. package/src/rules/implementations/connection-type-references.ts +117 -0
  535. package/src/rules/implementations/dead-end-states.ts +101 -0
  536. package/src/rules/implementations/index.ts +66 -0
  537. package/src/rules/implementations/minimum-node-sources.ts +84 -0
  538. package/src/rules/implementations/no-unknown-fields.ts +372 -0
  539. package/src/rules/implementations/orphaned-edge-types.ts +55 -0
  540. package/src/rules/implementations/orphaned-node-types.ts +58 -0
  541. package/src/rules/implementations/required-metadata.ts +52 -0
  542. package/src/rules/implementations/state-transition-references.ts +155 -0
  543. package/src/rules/implementations/unreachable-states.ts +94 -0
  544. package/src/rules/implementations/valid-action-patterns.ts +140 -0
  545. package/src/rules/implementations/valid-color-format.ts +152 -0
  546. package/src/rules/implementations/valid-edge-types.ts +273 -0
  547. package/src/rules/implementations/valid-node-types.ts +200 -0
  548. package/src/rules/index.ts +92 -0
  549. package/src/rules/types.ts +426 -0
  550. package/src/scopes/ScopePathIndex.test.ts +94 -0
  551. package/src/scopes/ScopePathIndex.ts +89 -0
  552. package/src/scopes/ScopesCanvasValidator.test.ts +127 -0
  553. package/src/scopes/ScopesCanvasValidator.ts +305 -0
  554. package/src/scopes/__tests__/utils.test.ts +383 -0
  555. package/src/scopes/index.ts +42 -0
  556. package/src/scopes/utils.ts +182 -0
  557. package/src/scopes/validateScopeNamespaceNesting.test.ts +127 -0
  558. package/src/scopes/validateScopeNamespaceNesting.ts +88 -0
  559. package/src/spans/index.ts +24 -0
  560. package/src/spans/utils.ts +249 -0
  561. package/src/storage/topic-types.ts +235 -0
  562. package/src/storage/topicStore.test.ts +193 -0
  563. package/src/storage/topicStore.ts +489 -0
  564. package/src/storyboard/builder.ts +308 -0
  565. package/src/storyboard/index.ts +26 -0
  566. package/src/storyboard/types.ts +117 -0
  567. package/src/telemetry/coverage.ts +480 -0
  568. package/src/telemetry/event-validator.ts +312 -0
  569. package/src/types/audit.ts +314 -0
  570. package/src/types/auxiliary.ts +63 -0
  571. package/src/types/canvas-scope.ts +190 -0
  572. package/src/types/canvas.test.ts +199 -0
  573. package/src/types/canvas.ts +1395 -0
  574. package/src/types/dashboard.ts +257 -0
  575. package/src/types/index.ts +460 -0
  576. package/src/types/library.ts +283 -0
  577. package/src/types/otel.test.ts +219 -0
  578. package/src/types/otel.ts +620 -0
  579. package/src/types/path-based-config.ts +285 -0
  580. package/src/types/registered-trace.ts +432 -0
  581. package/src/types/resource-match.ts +263 -0
  582. package/src/types/subsystem-model.ts +352 -0
  583. package/src/types/version-registry.ts +150 -0
  584. package/src/utils/CanvasConverter.ts +670 -0
  585. package/src/utils/GraphConverter.test.ts +322 -0
  586. package/src/utils/GraphConverter.ts +84 -0
  587. package/src/utils/PathMatcher.test.ts +139 -0
  588. package/src/utils/PathMatcher.ts +185 -0
  589. package/src/utils/TraceToCanvas.test.ts +310 -0
  590. package/src/utils/TraceToCanvas.ts +510 -0
  591. package/src/utils/YamlParser.ts +77 -0
  592. package/src/utils/registeredTraceHelpers.ts +251 -0
  593. package/src/utils/traceAggregation.test.ts +385 -0
  594. package/src/utils/traceAggregation.ts +173 -0
  595. package/src/validation/OtelCanvasValidator.ts +86 -0
  596. package/src/validation/index.ts +17 -0
  597. package/src/validation/libraryValidation.ts +206 -0
  598. package/src/workflow/README.md +408 -0
  599. package/src/workflow/__tests__/edge-derivation.test.ts +449 -0
  600. package/src/workflow/__tests__/edge-validation.test.ts +417 -0
  601. package/src/workflow/__tests__/scenario-matcher.test.ts +225 -0
  602. package/src/workflow/__tests__/template-parser.test.ts +276 -0
  603. package/src/workflow/__tests__/template-renderer.test.ts +509 -0
  604. package/src/workflow/__tests__/types.test.ts +187 -0
  605. package/src/workflow/__tests__/validator.test.ts +3225 -0
  606. package/src/workflow/edge-derivation.ts +265 -0
  607. package/src/workflow/edge-validation.ts +503 -0
  608. package/src/workflow/example.ts +330 -0
  609. package/src/workflow/index.ts +86 -0
  610. package/src/workflow/scenario-matcher.ts +253 -0
  611. package/src/workflow/template-parser.ts +350 -0
  612. package/src/workflow/template-renderer.ts +453 -0
  613. package/src/workflow/types.ts +511 -0
  614. package/src/workflow/validator.ts +2737 -0
@@ -0,0 +1,330 @@
1
+ /**
2
+ * Example: Using the Workflow Template System
3
+ *
4
+ * This example demonstrates how to use the workflow renderer
5
+ * to transform OTEL events into human-readable workflows.
6
+ */
7
+
8
+ import { renderWorkflow } from './template-renderer';
9
+ import type { WorkflowTemplate, OtelEvent } from './types';
10
+
11
+ // Example 1: Simple Success Scenario
12
+ function exampleSuccess() {
13
+ const template: WorkflowTemplate = {
14
+ version: '1.0.0',
15
+ canvas: 'example.otel.canvas',
16
+ name: 'Example Execution',
17
+ description: 'Simple execution workflow',
18
+ spanPattern: 'example.execution',
19
+ scenarioSelection: 'first-match',
20
+ showLogsPerSpan: true,
21
+ scenarios: [
22
+ {
23
+ id: 'success',
24
+ priority: 1,
25
+ description: 'Successful execution',
26
+ template: {
27
+ introduction: '✅ Execution Successful\n{"━".repeat(50)}',
28
+ span: '→ {span.name}',
29
+ children: 'recurse',
30
+ events: {
31
+ 'execution.started': ' 🔄 Starting execution',
32
+ 'execution.complete': ' ✅ Completed in {duration.ms}ms with {result.count} items',
33
+ },
34
+ logs: {
35
+ info: ' ℹ️ {log.body}',
36
+ debug: ' 🔍 {log.body}',
37
+ },
38
+ summary: '{"━".repeat(50)}\n\n✅ SUCCESS\n\nProcessed {result.count} items in {duration.ms}ms',
39
+ },
40
+ },
41
+ ],
42
+ };
43
+
44
+ const events: OtelEvent[] = [
45
+ {
46
+ name: 'execution.started',
47
+ timestamp: 1000,
48
+ type: 'span',
49
+ spanId: 'span1',
50
+ traceId: 'trace1',
51
+ },
52
+ {
53
+ name: 'log.info',
54
+ timestamp: 1100,
55
+ type: 'log',
56
+ spanId: 'span1',
57
+ traceId: 'trace1',
58
+ severityText: 'INFO',
59
+ severityNumber: 9,
60
+ body: 'Processing items...',
61
+ },
62
+ {
63
+ name: 'execution.complete',
64
+ timestamp: 2000,
65
+ type: 'span',
66
+ spanId: 'span1',
67
+ traceId: 'trace1',
68
+ attributes: {
69
+ 'result.status': 'success',
70
+ 'result.count': 42,
71
+ 'duration.ms': 1000,
72
+ },
73
+ },
74
+ ];
75
+
76
+ const result = renderWorkflow(template, events);
77
+ console.log('=== Example 1: Success Scenario ===\n');
78
+ console.log(result.text);
79
+ console.log('\nMetadata:', result.metadata);
80
+ console.log('\n');
81
+ }
82
+
83
+ // Example 2: Multi-scenario with Violations
84
+ function exampleWithViolations() {
85
+ const template: WorkflowTemplate = {
86
+ version: '1.0.0',
87
+ canvas: 'validation.otel.canvas',
88
+ name: 'Validation Execution',
89
+ description: 'Validation with multiple scenarios',
90
+ spanPattern: 'validation.run',
91
+ scenarioSelection: 'first-match',
92
+ scenarios: [
93
+ {
94
+ id: 'errors',
95
+ priority: 1,
96
+ description: 'Has error-level violations',
97
+ template: {
98
+ introduction: '❌ Validation Failed\n{"━".repeat(50)}',
99
+ span: '→ {span.name}',
100
+ children: 'recurse',
101
+ events: {
102
+ 'validation.started': ' 🔍 Validating configuration',
103
+ 'validation.complete':
104
+ ' ❌ Found {result.errors} errors and {result.warnings} warnings',
105
+ },
106
+ summary:
107
+ '{"━".repeat(50)}\n\n❌ FAILED\n\nErrors: {result.errors}\nWarnings: {result.warnings}',
108
+ },
109
+ },
110
+ {
111
+ id: 'warnings',
112
+ priority: 2,
113
+ description: 'Has warnings only',
114
+ template: {
115
+ introduction: '⚠️ Validation Passed with Warnings\n{"━".repeat(50)}',
116
+ span: '→ {span.name}',
117
+ children: 'recurse',
118
+ events: {
119
+ 'validation.started': ' 🔍 Validating configuration',
120
+ 'validation.complete': ' ⚠️ Found {result.warnings} warnings',
121
+ },
122
+ summary: '{"━".repeat(50)}\n\n⚠️ PASSED WITH WARNINGS\n\nWarnings: {result.warnings}',
123
+ },
124
+ },
125
+ {
126
+ id: 'success',
127
+ priority: 3,
128
+ description: 'All checks passed',
129
+ template: {
130
+ introduction: '✅ Validation Passed\n{"━".repeat(50)}',
131
+ span: '→ {span.name}',
132
+ children: 'recurse',
133
+ events: {
134
+ 'validation.started': ' 🔍 Validating configuration',
135
+ 'validation.complete': ' ✅ All checks passed',
136
+ },
137
+ summary: '{"━".repeat(50)}\n\n✅ SUCCESS\n\nNo violations found.',
138
+ },
139
+ },
140
+ ],
141
+ };
142
+
143
+ // Scenario 1: Errors
144
+ const eventsWithErrors: OtelEvent[] = [
145
+ {
146
+ name: 'validation.started',
147
+ timestamp: 1000,
148
+ type: 'span',
149
+ spanId: 'span1',
150
+ traceId: 'trace1',
151
+ },
152
+ {
153
+ name: 'validation.complete',
154
+ timestamp: 2000,
155
+ type: 'span',
156
+ spanId: 'span1',
157
+ traceId: 'trace1',
158
+ attributes: {
159
+ 'result.errors': 3,
160
+ 'result.warnings': 2,
161
+ },
162
+ },
163
+ ];
164
+
165
+ console.log('=== Example 2a: Validation with Errors ===\n');
166
+ const result1 = renderWorkflow(template, eventsWithErrors);
167
+ console.log(result1.text);
168
+ console.log('\nSelected scenario:', result1.scenarioId);
169
+ console.log('\n');
170
+
171
+ // Scenario 2: Warnings only
172
+ const eventsWithWarnings: OtelEvent[] = [
173
+ {
174
+ name: 'validation.started',
175
+ timestamp: 1000,
176
+ type: 'span',
177
+ spanId: 'span1',
178
+ traceId: 'trace1',
179
+ },
180
+ {
181
+ name: 'validation.complete',
182
+ timestamp: 2000,
183
+ type: 'span',
184
+ spanId: 'span1',
185
+ traceId: 'trace1',
186
+ attributes: {
187
+ 'result.errors': 0,
188
+ 'result.warnings': 5,
189
+ },
190
+ },
191
+ ];
192
+
193
+ console.log('=== Example 2b: Validation with Warnings ===\n');
194
+ const result2 = renderWorkflow(template, eventsWithWarnings);
195
+ console.log(result2.text);
196
+ console.log('\nSelected scenario:', result2.scenarioId);
197
+ console.log('\n');
198
+
199
+ // Scenario 3: Success
200
+ const eventsSuccess: OtelEvent[] = [
201
+ {
202
+ name: 'validation.started',
203
+ timestamp: 1000,
204
+ type: 'span',
205
+ spanId: 'span1',
206
+ traceId: 'trace1',
207
+ },
208
+ {
209
+ name: 'validation.complete',
210
+ timestamp: 2000,
211
+ type: 'span',
212
+ spanId: 'span1',
213
+ traceId: 'trace1',
214
+ attributes: {
215
+ 'result.errors': 0,
216
+ 'result.warnings': 0,
217
+ },
218
+ },
219
+ ];
220
+
221
+ console.log('=== Example 2c: Validation Success ===\n');
222
+ const result3 = renderWorkflow(template, eventsSuccess);
223
+ console.log(result3.text);
224
+ console.log('\nSelected scenario:', result3.scenarioId);
225
+ console.log('\n');
226
+ }
227
+
228
+ // Example 3: Span Tree with Hierarchy
229
+ function exampleSpanTree() {
230
+ const template: WorkflowTemplate = {
231
+ version: '1.0.0',
232
+ canvas: 'hierarchy.otel.canvas',
233
+ name: 'Hierarchical Execution',
234
+ description: 'Demonstrates span tree rendering',
235
+ spanPattern: 'root.operation',
236
+ scenarioSelection: 'first-match',
237
+ showLogsPerSpan: true,
238
+ scenarios: [
239
+ {
240
+ id: 'default',
241
+ priority: 1,
242
+ description: 'Default',
243
+ template: {
244
+ introduction: '📋 Execution Trace\n{"━".repeat(50)}',
245
+ span: '→ {span.name}',
246
+ children: 'recurse',
247
+ events: {
248
+ 'root.operation': ' 🔄 Operation started',
249
+ },
250
+ logs: {
251
+ info: ' ℹ️ {log.body}',
252
+ error: ' ❌ {log.body}',
253
+ },
254
+ summary: '{"━".repeat(50)}\nComplete',
255
+ },
256
+ },
257
+ ],
258
+ };
259
+
260
+ const events: OtelEvent[] = [
261
+ {
262
+ name: 'root.operation',
263
+ timestamp: 1000,
264
+ type: 'span',
265
+ spanId: 'span1',
266
+ traceId: 'trace1',
267
+ },
268
+ {
269
+ name: 'log.info',
270
+ timestamp: 1100,
271
+ type: 'log',
272
+ spanId: 'span1',
273
+ traceId: 'trace1',
274
+ severityText: 'INFO',
275
+ severityNumber: 9,
276
+ body: 'Root operation started',
277
+ },
278
+ {
279
+ name: 'child.operation',
280
+ timestamp: 1200,
281
+ type: 'span',
282
+ spanId: 'span2',
283
+ parentSpanId: 'span1',
284
+ traceId: 'trace1',
285
+ },
286
+ {
287
+ name: 'log.info',
288
+ timestamp: 1300,
289
+ type: 'log',
290
+ spanId: 'span2',
291
+ traceId: 'trace1',
292
+ severityText: 'INFO',
293
+ severityNumber: 9,
294
+ body: 'Processing child task',
295
+ },
296
+ {
297
+ name: 'grandchild.operation',
298
+ timestamp: 1400,
299
+ type: 'span',
300
+ spanId: 'span3',
301
+ parentSpanId: 'span2',
302
+ traceId: 'trace1',
303
+ },
304
+ {
305
+ name: 'log.info',
306
+ timestamp: 1500,
307
+ type: 'log',
308
+ spanId: 'span3',
309
+ traceId: 'trace1',
310
+ severityText: 'INFO',
311
+ severityNumber: 9,
312
+ body: 'Executing grandchild task',
313
+ },
314
+ ];
315
+
316
+ console.log('=== Example 3: Span Tree Hierarchy ===\n');
317
+ const result = renderWorkflow(template, events);
318
+ console.log(result.text);
319
+ console.log('\n');
320
+ }
321
+
322
+ // Run all examples
323
+ // Commented out for CommonJS compatibility - uncomment if using ESM
324
+ // if (import.meta.main) {
325
+ // exampleSuccess();
326
+ // exampleWithViolations();
327
+ // exampleSpanTree();
328
+ // }
329
+
330
+ export { exampleSuccess, exampleWithViolations, exampleSpanTree };
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Workflow Template System
3
+ *
4
+ * Transform OpenTelemetry event streams into human-readable execution workflows.
5
+ *
6
+ * @module workflow
7
+ */
8
+
9
+ // Types
10
+ export type {
11
+ WorkflowTemplate,
12
+ WorkflowScenario,
13
+ ScenarioOutcomeType,
14
+ ScenarioTemplate,
15
+ EventTemplate,
16
+ LogTemplates,
17
+ FormattingOptions,
18
+ OtelEvent,
19
+ OtelSignal,
20
+ WorkflowContext,
21
+ WorkflowResult,
22
+ ScenarioMatchResult,
23
+ ScenarioMatchDetail,
24
+ EnhancedScenarioMatchResult,
25
+ WorkflowMatch,
26
+ SpanTreeNode,
27
+ } from './types';
28
+
29
+ // Type helpers
30
+ export {
31
+ isEventTemplate,
32
+ getEventTemplateString,
33
+ getEventSpan,
34
+ getWorkflowRootSpan,
35
+ } from './types';
36
+
37
+ // Scenario Matching
38
+ export { selectScenario, getRequiredEvents, hasEventMatching, computeAggregates, getNestedValue, setNestedValue } from './scenario-matcher';
39
+
40
+ // Template Parsing
41
+ export { parseTemplate, ParsedTemplate } from './template-parser';
42
+ export type { TemplateSegment, TemplateContext, TemplateValue, TemplateData } from './template-parser';
43
+
44
+ // Template Rendering
45
+ export { renderWorkflow, renderEventTemplate } from './template-renderer';
46
+
47
+ // Validation
48
+ export type {
49
+ WorkflowValidationContext,
50
+ WorkflowViolation,
51
+ WorkflowValidationResult,
52
+ } from './validator';
53
+ export { WorkflowValidator, createWorkflowValidator } from './validator';
54
+
55
+ // Edge Derivation
56
+ export type {
57
+ DerivedEdge,
58
+ WorkflowEdgeDerivationResult,
59
+ EdgeDerivationResult,
60
+ } from './edge-derivation';
61
+ export {
62
+ extractEventSpans,
63
+ deriveEdgesFromSequence,
64
+ deriveWorkflowEdges,
65
+ deriveEdgesFromWorkflows,
66
+ groupEdgesBySources,
67
+ } from './edge-derivation';
68
+
69
+ // Edge Validation
70
+ export type {
71
+ SpanNodeInfo,
72
+ CanvasEdgeInfo,
73
+ EdgeValidationResult,
74
+ ValidatedEdge,
75
+ MissingEdge,
76
+ UnusedEdge,
77
+ UnmatchedSpan,
78
+ } from './edge-validation';
79
+ export {
80
+ extractSpanNodes,
81
+ extractCanvasEdges,
82
+ matchSpanToPattern,
83
+ findMatchingNode,
84
+ validateEdges,
85
+ formatValidationResult,
86
+ } from './edge-validation';
@@ -0,0 +1,253 @@
1
+ /**
2
+ * Scenario Matching Logic
3
+ *
4
+ * Selects the appropriate workflow scenario based on which events occurred
5
+ * during execution. Uses priority-based, first-match-wins algorithm.
6
+ */
7
+
8
+ import type {
9
+ WorkflowScenario,
10
+ WorkflowTemplate,
11
+ OtelEvent,
12
+ ScenarioMatchDetail,
13
+ EnhancedScenarioMatchResult,
14
+ } from './types';
15
+
16
+ /**
17
+ * Get required events for a scenario (derived from template.events)
18
+ *
19
+ * @param scenario - Scenario to extract events from
20
+ * @returns Array of event names required for this scenario to match
21
+ */
22
+ export function getRequiredEvents(scenario: WorkflowScenario): string[] {
23
+ return Object.keys(scenario.template?.events || {});
24
+ }
25
+
26
+ /**
27
+ * Calculate detailed match information for a scenario
28
+ *
29
+ * @param scenario - Scenario to evaluate
30
+ * @param events - Events from the trace
31
+ * @returns Detailed match information
32
+ */
33
+ function calculateMatchDetails(
34
+ scenario: WorkflowScenario,
35
+ events: OtelEvent[]
36
+ ): ScenarioMatchDetail {
37
+ const requiredEventNames = getRequiredEvents(scenario);
38
+ const totalRequiredEvents = requiredEventNames.length;
39
+
40
+ // Edge case: catch-all scenario (no required events)
41
+ if (totalRequiredEvents === 0) {
42
+ return {
43
+ scenario,
44
+ matchPercentage: 0,
45
+ matchedEventCount: 0,
46
+ totalRequiredEvents: 0,
47
+ matchedEventNames: [],
48
+ missingEventNames: [],
49
+ isFullMatch: false,
50
+ isCatchAll: true,
51
+ };
52
+ }
53
+
54
+ const matchedEventNames: string[] = [];
55
+ const missingEventNames: string[] = [];
56
+
57
+ for (const eventName of requiredEventNames) {
58
+ const hasEvent = events.some((e) => e.name === eventName);
59
+
60
+ if (hasEvent) {
61
+ matchedEventNames.push(eventName);
62
+ } else {
63
+ missingEventNames.push(eventName);
64
+ }
65
+ }
66
+
67
+ const matchedEventCount = matchedEventNames.length;
68
+ const matchPercentage = (matchedEventCount / totalRequiredEvents) * 100;
69
+
70
+ return {
71
+ scenario,
72
+ matchPercentage,
73
+ matchedEventCount,
74
+ totalRequiredEvents,
75
+ matchedEventNames,
76
+ missingEventNames,
77
+ isFullMatch: matchPercentage === 100,
78
+ isCatchAll: false,
79
+ };
80
+ }
81
+
82
+ /**
83
+ * Select matching scenarios from a workflow template
84
+ *
85
+ * Returns ALL scenarios with 100% match (sorted by priority),
86
+ * or partial matches (sorted by % then priority) if no full matches.
87
+ *
88
+ * @param template - Workflow template with scenarios
89
+ * @param events - Collected OTEL events
90
+ * @returns Enhanced match result (never throws)
91
+ */
92
+ export function selectScenario(
93
+ template: WorkflowTemplate,
94
+ events: OtelEvent[]
95
+ ): EnhancedScenarioMatchResult {
96
+ const fullMatches: ScenarioMatchDetail[] = [];
97
+ const partialMatches: ScenarioMatchDetail[] = [];
98
+
99
+ // Evaluate all scenarios
100
+ for (const scenario of template.scenarios) {
101
+ const matchDetail = calculateMatchDetails(scenario, events);
102
+
103
+ if (matchDetail.isCatchAll) {
104
+ // Catch-all scenarios go to partial matches
105
+ partialMatches.push(matchDetail);
106
+ } else if (matchDetail.isFullMatch) {
107
+ fullMatches.push(matchDetail);
108
+ } else {
109
+ partialMatches.push(matchDetail);
110
+ }
111
+ }
112
+
113
+ // Sort full matches by priority (ascending)
114
+ fullMatches.sort((a, b) => a.scenario.priority - b.scenario.priority);
115
+
116
+ // Sort partial matches by percentage (descending), then priority (ascending)
117
+ partialMatches.sort((a, b) => {
118
+ const percentDiff = b.matchPercentage - a.matchPercentage;
119
+ if (percentDiff !== 0) return percentDiff;
120
+ return a.scenario.priority - b.scenario.priority;
121
+ });
122
+
123
+ // Determine recommended scenario
124
+ const recommendedScenario =
125
+ fullMatches.length > 0 ? fullMatches[0] : partialMatches.length > 0 ? partialMatches[0] : null;
126
+
127
+ return {
128
+ fullMatches,
129
+ partialMatches,
130
+ recommendedScenario,
131
+ totalTraceEvents: events.length,
132
+ totalScenariosEvaluated: template.scenarios.length,
133
+ };
134
+ }
135
+
136
+
137
+ /**
138
+ * Check if any event matches the given event name (exact match)
139
+ *
140
+ * @param events - Events to search
141
+ * @param eventName - Event name to match (exact string match)
142
+ * @returns True if any event matches the name
143
+ */
144
+ export function hasEventMatching(events: OtelEvent[], eventName: string): boolean {
145
+ return events.some((event) => event.name === eventName);
146
+ }
147
+
148
+
149
+ /**
150
+ * Get nested value from object using dot notation
151
+ *
152
+ * Supports both nested objects and flat keys with dots in them.
153
+ * First tries the path as a flat key, then tries nested lookup.
154
+ *
155
+ * @param obj - Object to search
156
+ * @param path - Dot-separated path (e.g., "result.violations.total")
157
+ * @returns Value at path, or undefined if not found
158
+ */
159
+ export function getNestedValue(obj: Record<string, unknown>, path: string): unknown {
160
+ // First try as a flat key (handles attributes like 'result.violations.total')
161
+ if (path in obj) {
162
+ return obj[path];
163
+ }
164
+
165
+ // Then try as nested path
166
+ const keys = path.split('.');
167
+ let current: unknown = obj;
168
+
169
+ for (const key of keys) {
170
+ if (current === null || current === undefined) {
171
+ return undefined;
172
+ }
173
+ if (typeof current !== 'object') {
174
+ return undefined;
175
+ }
176
+ current = (current as Record<string, unknown>)[key];
177
+ }
178
+
179
+ return current;
180
+ }
181
+
182
+ /**
183
+ * Set nested value in object using dot notation
184
+ *
185
+ * @param obj - Object to modify
186
+ * @param path - Dot-separated path (e.g., "result.violations.total")
187
+ * @param value - Value to set
188
+ */
189
+ export function setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): void {
190
+ const keys = path.split('.');
191
+ let current: Record<string, unknown> = obj;
192
+
193
+ for (let i = 0; i < keys.length - 1; i++) {
194
+ const key = keys[i];
195
+ if (current[key] === undefined || typeof current[key] !== 'object') {
196
+ current[key] = {};
197
+ }
198
+ current = current[key] as Record<string, unknown>;
199
+ }
200
+
201
+ const lastKey = keys[keys.length - 1];
202
+ current[lastKey] = value;
203
+ }
204
+
205
+ /**
206
+ * Compute aggregate values from events
207
+ *
208
+ * Provides common aggregations like counts, totals, averages, etc.
209
+ * that can be used in scenario conditions and templates.
210
+ *
211
+ * @param events - Collected OTEL events
212
+ * @returns Aggregate values
213
+ */
214
+ export function computeAggregates(events: OtelEvent[]): Record<string, unknown> {
215
+ const aggregates: Record<string, unknown> = {
216
+ // Event counts
217
+ 'events.length': events.length,
218
+ 'events.count': events.length,
219
+
220
+ // Spans
221
+ 'spans.count': events.filter((e) => e.type === 'span').length,
222
+
223
+ // Logs
224
+ 'logs.count': events.filter((e) => e.type === 'log').length,
225
+ 'errorLogs.count': events.filter((e) => e.type === 'log' && (e.severityNumber ?? 0) >= 17).length,
226
+ 'warnLogs.count': events.filter(
227
+ (e) => e.type === 'log' && (e.severityNumber ?? 0) >= 13 && (e.severityNumber ?? 0) <= 16
228
+ ).length,
229
+ 'debugLogs.count': events.filter(
230
+ (e) => e.type === 'log' && (e.severityNumber ?? 0) >= 5 && (e.severityNumber ?? 0) <= 8
231
+ ).length,
232
+ };
233
+
234
+ // Extract attributes from summary/completion events for scenario matching
235
+ // These events contain execution-level data (not per-event varying data)
236
+ // Store ONLY as flat keys to avoid conflicts with event-specific attributes
237
+ const summaryEventPatterns = ['.complete', '.summary', '.error', '.started'];
238
+ const summaryEvents = events.filter((e) =>
239
+ summaryEventPatterns.some((pattern) => e.name.endsWith(pattern))
240
+ );
241
+
242
+ for (const event of summaryEvents) {
243
+ if (event.attributes) {
244
+ for (const [key, value] of Object.entries(event.attributes)) {
245
+ // Store only in flat structure to match event attribute keys
246
+ // This prevents nested structures from shadowing event-specific attributes
247
+ aggregates[key] = value;
248
+ }
249
+ }
250
+ }
251
+
252
+ return aggregates;
253
+ }