@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,155 @@
1
+ /**
2
+ * Rule: state-transition-references
3
+ * Ensures state transitions only reference defined states
4
+ */
5
+
6
+ import type { GraphRule, GraphRuleContext, GraphRuleViolation } from '../types';
7
+
8
+ export const stateTransitionReferences: GraphRule = {
9
+ id: 'state-transition-references',
10
+ name: 'State Transition References',
11
+ description: 'State transitions must reference states defined in nodeTypes',
12
+ impact: 'Invalid state references will cause state validation to fail',
13
+ severity: 'error',
14
+ category: 'reference',
15
+ enabled: true,
16
+ fixable: false,
17
+
18
+ async check(context: GraphRuleContext): Promise<GraphRuleViolation[]> {
19
+ const violations: GraphRuleViolation[] = [];
20
+ const { configuration, configPath } = context;
21
+
22
+ if (!configuration.validation?.stateTransitions) {
23
+ return violations;
24
+ }
25
+
26
+ // Build a map of nodeType -> defined states
27
+ const statesByNodeType = new Map<string, Set<string>>();
28
+
29
+ if (configuration.nodeTypes) {
30
+ for (const [typeId, nodeType] of Object.entries(configuration.nodeTypes)) {
31
+ if (nodeType.states) {
32
+ statesByNodeType.set(typeId, new Set(Object.keys(nodeType.states)));
33
+ }
34
+ }
35
+ }
36
+
37
+ // Check each state transition rule
38
+ for (const [nodeTypeId, transitions] of Object.entries(
39
+ configuration.validation.stateTransitions
40
+ )) {
41
+ const basePath = `validation.stateTransitions.${nodeTypeId}`;
42
+
43
+ // Check if nodeType exists
44
+ if (!configuration.nodeTypes?.[nodeTypeId]) {
45
+ violations.push({
46
+ ruleId: 'state-transition-references',
47
+ severity: 'error',
48
+ file: configPath,
49
+ path: basePath,
50
+ message: `State transitions defined for undefined nodeType "${nodeTypeId}"`,
51
+ impact: 'These state transitions will never apply',
52
+ suggestion: `Available nodeTypes: ${
53
+ Object.keys(configuration.nodeTypes ?? {}).join(', ') || '(none defined)'
54
+ }`,
55
+ fixable: false,
56
+ });
57
+ continue;
58
+ }
59
+
60
+ // Check if nodeType has states defined
61
+ const definedStates = statesByNodeType.get(nodeTypeId);
62
+ if (!definedStates || definedStates.size === 0) {
63
+ violations.push({
64
+ ruleId: 'state-transition-references',
65
+ severity: 'error',
66
+ file: configPath,
67
+ path: basePath,
68
+ message: `State transitions defined for nodeType "${nodeTypeId}" which has no states`,
69
+ impact: 'These state transitions will never apply',
70
+ suggestion: `Add states to nodeTypes.${nodeTypeId}.states`,
71
+ fixable: false,
72
+ });
73
+ continue;
74
+ }
75
+
76
+ // Check each transition
77
+ if (Array.isArray(transitions)) {
78
+ for (let i = 0; i < transitions.length; i++) {
79
+ const transition = transitions[i];
80
+ const transitionPath = `${basePath}[${i}]`;
81
+
82
+ // Check 'from' state
83
+ if (transition.from && !definedStates.has(transition.from)) {
84
+ const suggestion = findSimilar(transition.from, definedStates);
85
+ violations.push({
86
+ ruleId: 'state-transition-references',
87
+ severity: 'error',
88
+ file: configPath,
89
+ path: `${transitionPath}.from`,
90
+ message: `Transition references undefined state "${transition.from}" in nodeType "${nodeTypeId}"`,
91
+ impact: 'This transition will never match',
92
+ suggestion: suggestion
93
+ ? `Did you mean "${suggestion}"?`
94
+ : `Available states: ${[...definedStates].join(', ')}`,
95
+ fixable: false,
96
+ });
97
+ }
98
+
99
+ // Check 'to' states
100
+ if (Array.isArray(transition.to)) {
101
+ for (let j = 0; j < transition.to.length; j++) {
102
+ const toState = transition.to[j];
103
+ if (!definedStates.has(toState)) {
104
+ const suggestion = findSimilar(toState, definedStates);
105
+ violations.push({
106
+ ruleId: 'state-transition-references',
107
+ severity: 'error',
108
+ file: configPath,
109
+ path: `${transitionPath}.to[${j}]`,
110
+ message: `Transition references undefined state "${toState}" in nodeType "${nodeTypeId}"`,
111
+ impact: 'This transition target is invalid',
112
+ suggestion: suggestion
113
+ ? `Did you mean "${suggestion}"?`
114
+ : `Available states: ${[...definedStates].join(', ')}`,
115
+ fixable: false,
116
+ });
117
+ }
118
+ }
119
+ }
120
+ }
121
+ }
122
+ }
123
+
124
+ return violations;
125
+ },
126
+ };
127
+
128
+ /**
129
+ * Find a similar string from a set (for "did you mean" suggestions)
130
+ */
131
+ function findSimilar(input: string, candidates: Set<string>): string | null {
132
+ const inputLower = input.toLowerCase();
133
+
134
+ for (const candidate of candidates) {
135
+ const candidateLower = candidate.toLowerCase();
136
+
137
+ // Exact substring match
138
+ if (inputLower.includes(candidateLower) || candidateLower.includes(inputLower)) {
139
+ return candidate;
140
+ }
141
+
142
+ // Small edit distance
143
+ if (Math.abs(input.length - candidate.length) <= 2) {
144
+ let differences = 0;
145
+ const minLen = Math.min(inputLower.length, candidateLower.length);
146
+ for (let i = 0; i < minLen; i++) {
147
+ if (inputLower[i] !== candidateLower[i]) differences++;
148
+ }
149
+ differences += Math.abs(input.length - candidate.length);
150
+ if (differences <= 2) return candidate;
151
+ }
152
+ }
153
+
154
+ return null;
155
+ }
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Rule: unreachable-states
3
+ * Warns when states have no entry transitions (cannot be reached)
4
+ */
5
+
6
+ import type { GraphRule, GraphRuleContext, GraphRuleViolation } from '../types';
7
+
8
+ export const unreachableStates: GraphRule = {
9
+ id: 'unreachable-states',
10
+ name: 'Unreachable States',
11
+ description: 'States should have at least one entry transition or be an initial state',
12
+ impact: 'Unreachable states can never be entered and may indicate configuration errors',
13
+ severity: 'error',
14
+ category: 'structure',
15
+ enabled: true,
16
+ fixable: false,
17
+
18
+ async check(context: GraphRuleContext): Promise<GraphRuleViolation[]> {
19
+ const violations: GraphRuleViolation[] = [];
20
+ const { configuration, configPath } = context;
21
+
22
+ if (!configuration.nodeTypes) {
23
+ return violations;
24
+ }
25
+
26
+ // For each nodeType with states, check if all states are reachable
27
+ for (const [typeId, nodeType] of Object.entries(configuration.nodeTypes)) {
28
+ if (!nodeType.states || Object.keys(nodeType.states).length === 0) {
29
+ continue;
30
+ }
31
+
32
+ const stateIds = Object.keys(nodeType.states);
33
+
34
+ // If there's only one state, it's implicitly the initial state
35
+ if (stateIds.length <= 1) {
36
+ continue;
37
+ }
38
+
39
+ // Get state transitions for this nodeType
40
+ const transitions = configuration.validation?.stateTransitions?.[typeId];
41
+
42
+ if (!transitions || !Array.isArray(transitions) || transitions.length === 0) {
43
+ // No transitions defined - all states except the first are unreachable
44
+ // The first state is conventionally the initial state
45
+ for (let i = 1; i < stateIds.length; i++) {
46
+ violations.push({
47
+ ruleId: 'unreachable-states',
48
+ severity: 'error',
49
+ file: configPath,
50
+ path: `nodeTypes.${typeId}.states.${stateIds[i]}`,
51
+ message: `State "${stateIds[i]}" in node type "${typeId}" has no entry transitions`,
52
+ impact: 'This state can never be reached',
53
+ suggestion: `Add a state transition to "${stateIds[i]}" in validation.stateTransitions.${typeId}`,
54
+ fixable: false,
55
+ });
56
+ }
57
+ continue;
58
+ }
59
+
60
+ // Build set of states that can be reached (are targets of transitions)
61
+ const reachableStates = new Set<string>();
62
+
63
+ // First state is assumed to be the initial state
64
+ reachableStates.add(stateIds[0]);
65
+
66
+ // Add all states that are targets of transitions
67
+ for (const transition of transitions) {
68
+ if (Array.isArray(transition.to)) {
69
+ for (const toState of transition.to) {
70
+ reachableStates.add(toState);
71
+ }
72
+ }
73
+ }
74
+
75
+ // Check for unreachable states
76
+ for (const stateId of stateIds) {
77
+ if (!reachableStates.has(stateId)) {
78
+ violations.push({
79
+ ruleId: 'unreachable-states',
80
+ severity: 'error',
81
+ file: configPath,
82
+ path: `nodeTypes.${typeId}.states.${stateId}`,
83
+ message: `State "${stateId}" in node type "${typeId}" has no entry transitions`,
84
+ impact: 'This state can never be reached',
85
+ suggestion: `Add a state transition to "${stateId}" in validation.stateTransitions.${typeId}`,
86
+ fixable: false,
87
+ });
88
+ }
89
+ }
90
+ }
91
+
92
+ return violations;
93
+ },
94
+ };
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Rule: valid-action-patterns
3
+ * Ensures action pattern regex is syntactically valid
4
+ */
5
+
6
+ import type { GraphRule, GraphRuleContext, GraphRuleViolation, RuleOptions } from '../types';
7
+
8
+ /**
9
+ * Options for valid-action-patterns rule
10
+ */
11
+ export interface ValidActionPatternsOptions extends RuleOptions {
12
+ /**
13
+ * Enable strict mode - also validates capture group references
14
+ * @default false
15
+ */
16
+ strictMode: boolean;
17
+ }
18
+
19
+ const DEFAULT_OPTIONS: ValidActionPatternsOptions = {
20
+ strictMode: false,
21
+ };
22
+
23
+ export const validActionPatterns: GraphRule<ValidActionPatternsOptions> = {
24
+ id: 'valid-action-patterns',
25
+ name: 'Valid Action Patterns',
26
+ description: 'Action pattern regex must be syntactically valid',
27
+ impact: 'Invalid regex patterns will cause runtime errors during log processing',
28
+ severity: 'error',
29
+ category: 'pattern',
30
+ enabled: true,
31
+ fixable: false,
32
+ defaultOptions: DEFAULT_OPTIONS,
33
+
34
+ async check(
35
+ context: GraphRuleContext<ValidActionPatternsOptions>
36
+ ): Promise<GraphRuleViolation[]> {
37
+ const violations: GraphRuleViolation[] = [];
38
+ const { configuration, configPath, options } = context;
39
+
40
+ if (!configuration.nodeTypes) {
41
+ return violations;
42
+ }
43
+
44
+ for (const [typeId, nodeType] of Object.entries(configuration.nodeTypes)) {
45
+ // Check if nodeType has actions (from path-based config extension)
46
+ const nodeTypeAny = nodeType as unknown as Record<string, unknown>;
47
+ const actions = nodeTypeAny.actions;
48
+
49
+ if (!Array.isArray(actions)) {
50
+ continue;
51
+ }
52
+
53
+ for (let i = 0; i < actions.length; i++) {
54
+ const action = actions[i] as Record<string, unknown>;
55
+ const pattern = action.pattern;
56
+ const basePath = `nodeTypes.${typeId}.actions[${i}]`;
57
+
58
+ if (typeof pattern !== 'string') {
59
+ violations.push({
60
+ ruleId: 'valid-action-patterns',
61
+ severity: 'error',
62
+ file: configPath,
63
+ path: `${basePath}.pattern`,
64
+ message: `Action pattern must be a string`,
65
+ impact: 'Pattern matching will fail',
66
+ suggestion: 'Provide a valid regex pattern string',
67
+ fixable: false,
68
+ });
69
+ continue;
70
+ }
71
+
72
+ // Test if regex is valid
73
+ try {
74
+ new RegExp(pattern);
75
+ } catch (error) {
76
+ const errorMessage = error instanceof Error ? error.message : String(error);
77
+ violations.push({
78
+ ruleId: 'valid-action-patterns',
79
+ severity: 'error',
80
+ file: configPath,
81
+ path: `${basePath}.pattern`,
82
+ message: `Invalid regex pattern "${pattern}": ${errorMessage}`,
83
+ impact: 'Pattern matching will fail at runtime',
84
+ suggestion: 'Fix the regex syntax error',
85
+ fixable: false,
86
+ });
87
+ continue;
88
+ }
89
+
90
+ // In strict mode, validate capture group references in metadata
91
+ if (options.strictMode) {
92
+ const metadata = action.metadata as Record<string, unknown> | undefined;
93
+ if (metadata) {
94
+ // Extract capture group names from pattern
95
+ const captureGroupNames = extractCaptureGroupNames(pattern);
96
+
97
+ for (const [metaKey, metaValue] of Object.entries(metadata)) {
98
+ if (typeof metaValue === 'string' && metaValue.startsWith('$')) {
99
+ const groupName = metaValue.slice(1);
100
+ if (!captureGroupNames.has(groupName)) {
101
+ violations.push({
102
+ ruleId: 'valid-action-patterns',
103
+ severity: 'error',
104
+ file: configPath,
105
+ path: `${basePath}.metadata.${metaKey}`,
106
+ message: `Metadata references undefined capture group "$${groupName}"`,
107
+ impact: 'Metadata extraction will fail',
108
+ suggestion: `Available capture groups: ${
109
+ [...captureGroupNames].join(', ') || '(none)'
110
+ }`,
111
+ fixable: false,
112
+ });
113
+ }
114
+ }
115
+ }
116
+ }
117
+ }
118
+ }
119
+ }
120
+
121
+ return violations;
122
+ },
123
+ };
124
+
125
+ /**
126
+ * Extract named capture group names from a regex pattern
127
+ */
128
+ function extractCaptureGroupNames(pattern: string): Set<string> {
129
+ const names = new Set<string>();
130
+
131
+ // Match named capture groups: (?<name>...)
132
+ const namedGroupRegex = /\(\?<([a-zA-Z_][a-zA-Z0-9_]*)>/g;
133
+ let match;
134
+
135
+ while ((match = namedGroupRegex.exec(pattern)) !== null) {
136
+ names.add(match[1]);
137
+ }
138
+
139
+ return names;
140
+ }
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Rule: valid-color-format
3
+ * Ensures all color values are valid hex codes
4
+ */
5
+
6
+ import type { GraphRule, GraphRuleContext, GraphRuleViolation } from '../types';
7
+
8
+ /**
9
+ * Regex for valid hex color codes (#RGB or #RRGGBB)
10
+ */
11
+ const HEX_COLOR_REGEX = /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/;
12
+
13
+ export const validColorFormat: GraphRule = {
14
+ id: 'valid-color-format',
15
+ name: 'Valid Color Format',
16
+ description: 'Color values must be valid hex codes (#RGB or #RRGGBB)',
17
+ impact: 'Invalid colors may render incorrectly or cause visualization errors',
18
+ severity: 'error',
19
+ category: 'schema',
20
+ enabled: true,
21
+ fixable: true,
22
+
23
+ async check(context: GraphRuleContext): Promise<GraphRuleViolation[]> {
24
+ const violations: GraphRuleViolation[] = [];
25
+ const { configuration, configPath } = context;
26
+
27
+ // Check nodeTypes colors
28
+ if (configuration.nodeTypes) {
29
+ for (const [typeId, nodeType] of Object.entries(configuration.nodeTypes)) {
30
+ // Check node color
31
+ if (nodeType.color && !isValidColor(nodeType.color)) {
32
+ violations.push(
33
+ createColorViolation(
34
+ configPath,
35
+ `nodeTypes.${typeId}.color`,
36
+ nodeType.color,
37
+ `node type "${typeId}"`
38
+ )
39
+ );
40
+ }
41
+
42
+ // Check node stroke color
43
+ if (nodeType.stroke && !isValidColor(nodeType.stroke)) {
44
+ violations.push(
45
+ createColorViolation(
46
+ configPath,
47
+ `nodeTypes.${typeId}.stroke`,
48
+ nodeType.stroke,
49
+ `node type "${typeId}" stroke`
50
+ )
51
+ );
52
+ }
53
+
54
+ // Check state colors
55
+ if (nodeType.states) {
56
+ for (const [stateName, stateDef] of Object.entries(nodeType.states)) {
57
+ if (stateDef.color && !isValidColor(stateDef.color)) {
58
+ violations.push(
59
+ createColorViolation(
60
+ configPath,
61
+ `nodeTypes.${typeId}.states.${stateName}.color`,
62
+ stateDef.color,
63
+ `state "${stateName}" in node type "${typeId}"`
64
+ )
65
+ );
66
+ }
67
+ }
68
+ }
69
+ }
70
+ }
71
+
72
+ // Check edgeTypes colors
73
+ if (configuration.edgeTypes) {
74
+ for (const [typeId, edgeType] of Object.entries(configuration.edgeTypes)) {
75
+ // Check edge color
76
+ if (edgeType.color && !isValidColor(edgeType.color)) {
77
+ violations.push(
78
+ createColorViolation(
79
+ configPath,
80
+ `edgeTypes.${typeId}.color`,
81
+ edgeType.color,
82
+ `edge type "${typeId}"`
83
+ )
84
+ );
85
+ }
86
+
87
+ // Check animation color
88
+ if (edgeType.animation?.color && !isValidColor(edgeType.animation.color)) {
89
+ violations.push(
90
+ createColorViolation(
91
+ configPath,
92
+ `edgeTypes.${typeId}.animation.color`,
93
+ edgeType.animation.color,
94
+ `animation in edge type "${typeId}"`
95
+ )
96
+ );
97
+ }
98
+ }
99
+ }
100
+
101
+ // Check display theme colors
102
+ if (configuration.display?.theme) {
103
+ const theme = configuration.display.theme;
104
+ const themeColors = ['primary', 'success', 'warning', 'danger', 'info'] as const;
105
+
106
+ for (const colorKey of themeColors) {
107
+ const colorValue = theme[colorKey];
108
+ if (colorValue && !isValidColor(colorValue)) {
109
+ violations.push(
110
+ createColorViolation(
111
+ configPath,
112
+ `display.theme.${colorKey}`,
113
+ colorValue,
114
+ `theme ${colorKey} color`
115
+ )
116
+ );
117
+ }
118
+ }
119
+ }
120
+
121
+ return violations;
122
+ },
123
+ };
124
+
125
+ /**
126
+ * Check if a color value is valid
127
+ */
128
+ function isValidColor(color: string): boolean {
129
+ return HEX_COLOR_REGEX.test(color);
130
+ }
131
+
132
+ /**
133
+ * Create a color format violation
134
+ */
135
+ function createColorViolation(
136
+ configPath: string | undefined,
137
+ path: string,
138
+ value: string,
139
+ description: string
140
+ ): GraphRuleViolation {
141
+ return {
142
+ ruleId: 'valid-color-format',
143
+ severity: 'error',
144
+ file: configPath,
145
+ path,
146
+ message: `Invalid color format "${value}" for ${description}`,
147
+ impact: 'Color may not render correctly',
148
+ suggestion: 'Use hex format: #RGB or #RRGGBB (e.g., #3b82f6 or #f00)',
149
+ fixable: true,
150
+ fixData: { path, value, description },
151
+ };
152
+ }