@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,273 @@
1
+ /**
2
+ * Rule: valid-edge-types
3
+ * Ensures edgeTypes have required fields and valid values
4
+ */
5
+
6
+ import type { GraphRule, GraphRuleContext, GraphRuleViolation } from '../types';
7
+
8
+ /**
9
+ * Valid style values for edges
10
+ */
11
+ const VALID_STYLES = ['solid', 'dashed', 'dotted', 'animated'] as const;
12
+
13
+ /**
14
+ * Valid animation types
15
+ */
16
+ const VALID_ANIMATION_TYPES = ['flow', 'pulse', 'particle', 'glow'] as const;
17
+
18
+ /**
19
+ * Valid label positions
20
+ */
21
+ const VALID_LABEL_POSITIONS = ['start', 'middle', 'end'] as const;
22
+
23
+ /**
24
+ * Valid data schema field types
25
+ */
26
+ const VALID_DATA_TYPES = ['string', 'number', 'boolean', 'object', 'array'] as const;
27
+
28
+ export const validEdgeTypes: GraphRule = {
29
+ id: 'valid-edge-types',
30
+ name: 'Valid Edge Types',
31
+ description: 'edgeTypes must have required fields and valid values',
32
+ impact: 'Invalid edge types will cause rendering errors or unexpected behavior',
33
+ severity: 'error',
34
+ category: 'schema',
35
+ enabled: true,
36
+ fixable: false,
37
+
38
+ async check(context: GraphRuleContext): Promise<GraphRuleViolation[]> {
39
+ const violations: GraphRuleViolation[] = [];
40
+ const { configuration, configPath } = context;
41
+
42
+ if (!configuration.edgeTypes) {
43
+ violations.push({
44
+ ruleId: 'valid-edge-types',
45
+ severity: 'error',
46
+ file: configPath,
47
+ path: 'edgeTypes',
48
+ message: 'Configuration is missing edgeTypes section',
49
+ impact: 'No edges can be defined without edgeTypes',
50
+ suggestion: 'Add an edgeTypes section with at least one edge type definition',
51
+ fixable: false,
52
+ });
53
+ return violations;
54
+ }
55
+
56
+ if (Object.keys(configuration.edgeTypes).length === 0) {
57
+ violations.push({
58
+ ruleId: 'valid-edge-types',
59
+ severity: 'error',
60
+ file: configPath,
61
+ path: 'edgeTypes',
62
+ message: 'edgeTypes section is empty',
63
+ impact: 'No edges can be defined without at least one edge type',
64
+ suggestion: 'Add at least one edge type definition',
65
+ fixable: false,
66
+ });
67
+ return violations;
68
+ }
69
+
70
+ for (const [typeId, edgeType] of Object.entries(configuration.edgeTypes)) {
71
+ const basePath = `edgeTypes.${typeId}`;
72
+
73
+ // Check required style field
74
+ if (!edgeType.style) {
75
+ violations.push({
76
+ ruleId: 'valid-edge-types',
77
+ severity: 'error',
78
+ file: configPath,
79
+ path: `${basePath}.style`,
80
+ message: `Edge type "${typeId}" is missing required "style" field`,
81
+ impact: 'Edge cannot be rendered without a style',
82
+ suggestion: `Add a style field. Valid values: ${VALID_STYLES.join(', ')}`,
83
+ fixable: false,
84
+ });
85
+ } else if (!VALID_STYLES.includes(edgeType.style as (typeof VALID_STYLES)[number])) {
86
+ violations.push({
87
+ ruleId: 'valid-edge-types',
88
+ severity: 'error',
89
+ file: configPath,
90
+ path: `${basePath}.style`,
91
+ message: `Edge type "${typeId}" has invalid style "${edgeType.style}"`,
92
+ impact: 'Edge may not render correctly',
93
+ suggestion: `Valid styles: ${VALID_STYLES.join(', ')}`,
94
+ fixable: false,
95
+ });
96
+ }
97
+
98
+ // Check width is a number if provided
99
+ if (edgeType.width !== undefined && typeof edgeType.width !== 'number') {
100
+ violations.push({
101
+ ruleId: 'valid-edge-types',
102
+ severity: 'error',
103
+ file: configPath,
104
+ path: `${basePath}.width`,
105
+ message: `Edge type "${typeId}" width must be a number`,
106
+ impact: 'Edge width may not render correctly',
107
+ suggestion: 'Provide width as a number (e.g., 2)',
108
+ fixable: false,
109
+ });
110
+ }
111
+
112
+ // Check directed is a boolean if provided
113
+ if (edgeType.directed !== undefined && typeof edgeType.directed !== 'boolean') {
114
+ violations.push({
115
+ ruleId: 'valid-edge-types',
116
+ severity: 'error',
117
+ file: configPath,
118
+ path: `${basePath}.directed`,
119
+ message: `Edge type "${typeId}" directed must be a boolean`,
120
+ impact: 'Edge direction may not work correctly',
121
+ suggestion: 'Provide directed as true or false',
122
+ fixable: false,
123
+ });
124
+ }
125
+
126
+ // Check animated is a boolean if provided
127
+ if (edgeType.animated !== undefined && typeof edgeType.animated !== 'boolean') {
128
+ violations.push({
129
+ ruleId: 'valid-edge-types',
130
+ severity: 'error',
131
+ file: configPath,
132
+ path: `${basePath}.animated`,
133
+ message: `Edge type "${typeId}" animated must be a boolean`,
134
+ impact: 'Edge animation may not work correctly',
135
+ suggestion: 'Provide animated as true or false',
136
+ fixable: false,
137
+ });
138
+ }
139
+
140
+ // Check label configuration
141
+ if (edgeType.label) {
142
+ if (typeof edgeType.label !== 'object' || edgeType.label === null) {
143
+ violations.push({
144
+ ruleId: 'valid-edge-types',
145
+ severity: 'error',
146
+ file: configPath,
147
+ path: `${basePath}.label`,
148
+ message: `Edge type "${typeId}" label must be an object`,
149
+ impact: 'Edge label configuration is invalid',
150
+ suggestion:
151
+ 'Provide label as { field?: string, position?: "start" | "middle" | "end" }',
152
+ fixable: false,
153
+ });
154
+ } else {
155
+ if (edgeType.label.position !== undefined) {
156
+ if (
157
+ !VALID_LABEL_POSITIONS.includes(
158
+ edgeType.label.position as (typeof VALID_LABEL_POSITIONS)[number]
159
+ )
160
+ ) {
161
+ violations.push({
162
+ ruleId: 'valid-edge-types',
163
+ severity: 'error',
164
+ file: configPath,
165
+ path: `${basePath}.label.position`,
166
+ message: `Edge type "${typeId}" has invalid label position "${edgeType.label.position}"`,
167
+ impact: 'Label may not appear in expected position',
168
+ suggestion: `Valid positions: ${VALID_LABEL_POSITIONS.join(', ')}`,
169
+ fixable: false,
170
+ });
171
+ }
172
+ }
173
+ }
174
+ }
175
+
176
+ // Check animation configuration
177
+ if (edgeType.animation) {
178
+ if (typeof edgeType.animation !== 'object' || edgeType.animation === null) {
179
+ violations.push({
180
+ ruleId: 'valid-edge-types',
181
+ severity: 'error',
182
+ file: configPath,
183
+ path: `${basePath}.animation`,
184
+ message: `Edge type "${typeId}" animation must be an object`,
185
+ impact: 'Edge animation configuration is invalid',
186
+ suggestion:
187
+ 'Provide animation as { type: "flow" | "pulse" | "particle" | "glow", duration?: number }',
188
+ fixable: false,
189
+ });
190
+ } else {
191
+ // Check animation type
192
+ if (!edgeType.animation.type) {
193
+ violations.push({
194
+ ruleId: 'valid-edge-types',
195
+ severity: 'error',
196
+ file: configPath,
197
+ path: `${basePath}.animation.type`,
198
+ message: `Edge type "${typeId}" animation is missing required "type" field`,
199
+ impact: 'Animation cannot run without a type',
200
+ suggestion: `Add a type field. Valid values: ${VALID_ANIMATION_TYPES.join(', ')}`,
201
+ fixable: false,
202
+ });
203
+ } else if (
204
+ !VALID_ANIMATION_TYPES.includes(
205
+ edgeType.animation.type as (typeof VALID_ANIMATION_TYPES)[number]
206
+ )
207
+ ) {
208
+ violations.push({
209
+ ruleId: 'valid-edge-types',
210
+ severity: 'error',
211
+ file: configPath,
212
+ path: `${basePath}.animation.type`,
213
+ message: `Edge type "${typeId}" has invalid animation type "${edgeType.animation.type}"`,
214
+ impact: 'Animation may not work correctly',
215
+ suggestion: `Valid animation types: ${VALID_ANIMATION_TYPES.join(', ')}`,
216
+ fixable: false,
217
+ });
218
+ }
219
+
220
+ // Check animation duration
221
+ if (
222
+ edgeType.animation.duration !== undefined &&
223
+ typeof edgeType.animation.duration !== 'number'
224
+ ) {
225
+ violations.push({
226
+ ruleId: 'valid-edge-types',
227
+ severity: 'error',
228
+ file: configPath,
229
+ path: `${basePath}.animation.duration`,
230
+ message: `Edge type "${typeId}" animation duration must be a number`,
231
+ impact: 'Animation timing may not work correctly',
232
+ suggestion: 'Provide duration as a number in milliseconds',
233
+ fixable: false,
234
+ });
235
+ }
236
+ }
237
+ }
238
+
239
+ // Check dataSchema field types
240
+ if (edgeType.dataSchema) {
241
+ for (const [fieldName, fieldDef] of Object.entries(edgeType.dataSchema)) {
242
+ if (!fieldDef.type) {
243
+ violations.push({
244
+ ruleId: 'valid-edge-types',
245
+ severity: 'error',
246
+ file: configPath,
247
+ path: `${basePath}.dataSchema.${fieldName}.type`,
248
+ message: `Data schema field "${fieldName}" in edge type "${typeId}" is missing "type"`,
249
+ impact: 'Data validation will not work for this field',
250
+ suggestion: `Add a type field. Valid values: ${VALID_DATA_TYPES.join(', ')}`,
251
+ fixable: false,
252
+ });
253
+ } else if (
254
+ !VALID_DATA_TYPES.includes(fieldDef.type as (typeof VALID_DATA_TYPES)[number])
255
+ ) {
256
+ violations.push({
257
+ ruleId: 'valid-edge-types',
258
+ severity: 'error',
259
+ file: configPath,
260
+ path: `${basePath}.dataSchema.${fieldName}.type`,
261
+ message: `Invalid data type "${fieldDef.type}" for field "${fieldName}" in edge type "${typeId}"`,
262
+ impact: 'Data validation may fail',
263
+ suggestion: `Valid types: ${VALID_DATA_TYPES.join(', ')}`,
264
+ fixable: false,
265
+ });
266
+ }
267
+ }
268
+ }
269
+ }
270
+
271
+ return violations;
272
+ },
273
+ };
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Rule: valid-node-types
3
+ * Ensures nodeTypes have required fields and valid values
4
+ */
5
+
6
+ import type { GraphRule, GraphRuleContext, GraphRuleViolation } from '../types';
7
+
8
+ /**
9
+ * Valid shape values for nodes
10
+ */
11
+ const VALID_SHAPES = ['circle', 'rectangle', 'hexagon', 'diamond', 'custom'] as const;
12
+
13
+ /**
14
+ * Valid data schema field types
15
+ */
16
+ const VALID_DATA_TYPES = ['string', 'number', 'boolean', 'object', 'array'] as const;
17
+
18
+ export const validNodeTypes: GraphRule = {
19
+ id: 'valid-node-types',
20
+ name: 'Valid Node Types',
21
+ description: 'nodeTypes must have required fields and valid values',
22
+ impact: 'Invalid node types will cause rendering errors or unexpected behavior',
23
+ severity: 'error',
24
+ category: 'schema',
25
+ enabled: true,
26
+ fixable: false,
27
+
28
+ async check(context: GraphRuleContext): Promise<GraphRuleViolation[]> {
29
+ const violations: GraphRuleViolation[] = [];
30
+ const { configuration, configPath } = context;
31
+
32
+ if (!configuration.nodeTypes) {
33
+ violations.push({
34
+ ruleId: 'valid-node-types',
35
+ severity: 'error',
36
+ file: configPath,
37
+ path: 'nodeTypes',
38
+ message: 'Configuration is missing nodeTypes section',
39
+ impact: 'No nodes can be defined without nodeTypes',
40
+ suggestion: 'Add a nodeTypes section with at least one node type definition',
41
+ fixable: false,
42
+ });
43
+ return violations;
44
+ }
45
+
46
+ if (Object.keys(configuration.nodeTypes).length === 0) {
47
+ violations.push({
48
+ ruleId: 'valid-node-types',
49
+ severity: 'error',
50
+ file: configPath,
51
+ path: 'nodeTypes',
52
+ message: 'nodeTypes section is empty',
53
+ impact: 'No nodes can be defined without at least one node type',
54
+ suggestion: 'Add at least one node type definition',
55
+ fixable: false,
56
+ });
57
+ return violations;
58
+ }
59
+
60
+ for (const [typeId, nodeType] of Object.entries(configuration.nodeTypes)) {
61
+ const basePath = `nodeTypes.${typeId}`;
62
+
63
+ // Check required description field
64
+ if (!nodeType.description) {
65
+ violations.push({
66
+ ruleId: 'valid-node-types',
67
+ severity: 'error',
68
+ file: configPath,
69
+ path: `${basePath}.description`,
70
+ message: `Node type "${typeId}" is missing required "description" field`,
71
+ impact: 'Node type must have a description explaining its purpose',
72
+ suggestion: 'Add a description field explaining what this node type represents',
73
+ fixable: false,
74
+ });
75
+ }
76
+
77
+ // Check required shape field
78
+ if (!nodeType.shape) {
79
+ violations.push({
80
+ ruleId: 'valid-node-types',
81
+ severity: 'error',
82
+ file: configPath,
83
+ path: `${basePath}.shape`,
84
+ message: `Node type "${typeId}" is missing required "shape" field`,
85
+ impact: 'Node cannot be rendered without a shape',
86
+ suggestion: `Add a shape field. Valid values: ${VALID_SHAPES.join(', ')}`,
87
+ fixable: false,
88
+ });
89
+ } else if (!VALID_SHAPES.includes(nodeType.shape as (typeof VALID_SHAPES)[number])) {
90
+ violations.push({
91
+ ruleId: 'valid-node-types',
92
+ severity: 'error',
93
+ file: configPath,
94
+ path: `${basePath}.shape`,
95
+ message: `Node type "${typeId}" has invalid shape "${nodeType.shape}"`,
96
+ impact: 'Node may not render correctly',
97
+ suggestion: `Valid shapes: ${VALID_SHAPES.join(', ')}`,
98
+ fixable: false,
99
+ });
100
+ }
101
+
102
+ // Check dataSchema field types
103
+ if (nodeType.dataSchema) {
104
+ for (const [fieldName, fieldDef] of Object.entries(nodeType.dataSchema)) {
105
+ if (!fieldDef.type) {
106
+ violations.push({
107
+ ruleId: 'valid-node-types',
108
+ severity: 'error',
109
+ file: configPath,
110
+ path: `${basePath}.dataSchema.${fieldName}.type`,
111
+ message: `Data schema field "${fieldName}" in node type "${typeId}" is missing "type"`,
112
+ impact: 'Data validation will not work for this field',
113
+ suggestion: `Add a type field. Valid values: ${VALID_DATA_TYPES.join(', ')}`,
114
+ fixable: false,
115
+ });
116
+ } else if (
117
+ !VALID_DATA_TYPES.includes(fieldDef.type as (typeof VALID_DATA_TYPES)[number])
118
+ ) {
119
+ violations.push({
120
+ ruleId: 'valid-node-types',
121
+ severity: 'error',
122
+ file: configPath,
123
+ path: `${basePath}.dataSchema.${fieldName}.type`,
124
+ message: `Invalid data type "${fieldDef.type}" for field "${fieldName}" in node type "${typeId}"`,
125
+ impact: 'Data validation may fail',
126
+ suggestion: `Valid types: ${VALID_DATA_TYPES.join(', ')}`,
127
+ fixable: false,
128
+ });
129
+ }
130
+ }
131
+ }
132
+
133
+ // Check states have valid structure
134
+ if (nodeType.states) {
135
+ for (const [stateName, stateDef] of Object.entries(nodeType.states)) {
136
+ // States should be objects (even if empty)
137
+ if (typeof stateDef !== 'object' || stateDef === null) {
138
+ violations.push({
139
+ ruleId: 'valid-node-types',
140
+ severity: 'error',
141
+ file: configPath,
142
+ path: `${basePath}.states.${stateName}`,
143
+ message: `State "${stateName}" in node type "${typeId}" must be an object`,
144
+ impact: 'State definition is invalid',
145
+ suggestion: 'State should be an object with optional color, icon, and label fields',
146
+ fixable: false,
147
+ });
148
+ }
149
+ }
150
+ }
151
+
152
+ // Check size has valid structure
153
+ if (nodeType.size) {
154
+ if (typeof nodeType.size.width !== 'number' || typeof nodeType.size.height !== 'number') {
155
+ violations.push({
156
+ ruleId: 'valid-node-types',
157
+ severity: 'error',
158
+ file: configPath,
159
+ path: `${basePath}.size`,
160
+ message: `Node type "${typeId}" size must have numeric width and height`,
161
+ impact: 'Node size may not render correctly',
162
+ suggestion: 'Provide size as { width: number, height: number }',
163
+ fixable: false,
164
+ });
165
+ }
166
+ }
167
+
168
+ // Check layout has valid structure
169
+ if (nodeType.layout) {
170
+ if (nodeType.layout.layer !== undefined && typeof nodeType.layout.layer !== 'number') {
171
+ violations.push({
172
+ ruleId: 'valid-node-types',
173
+ severity: 'error',
174
+ file: configPath,
175
+ path: `${basePath}.layout.layer`,
176
+ message: `Node type "${typeId}" layout.layer must be a number`,
177
+ impact: 'Layout layering may not work correctly',
178
+ suggestion: 'Provide layer as a number',
179
+ fixable: false,
180
+ });
181
+ }
182
+
183
+ if (nodeType.layout.cluster !== undefined && typeof nodeType.layout.cluster !== 'string') {
184
+ violations.push({
185
+ ruleId: 'valid-node-types',
186
+ severity: 'error',
187
+ file: configPath,
188
+ path: `${basePath}.layout.cluster`,
189
+ message: `Node type "${typeId}" layout.cluster must be a string`,
190
+ impact: 'Cluster grouping may not work correctly',
191
+ suggestion: 'Provide cluster as a string identifier',
192
+ fixable: false,
193
+ });
194
+ }
195
+ }
196
+ }
197
+
198
+ return violations;
199
+ },
200
+ };
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Rules Engine - Configuration validation for Visual Validation Framework
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * import { createRulesEngine, builtinRules } from '@principal-ai/subsystems-core/rules';
7
+ *
8
+ * const engine = createRulesEngine(builtinRules);
9
+ * const result = await engine.lint(configuration);
10
+ *
11
+ * if (result.errorCount > 0) {
12
+ * console.error(`Found ${result.errorCount} errors`);
13
+ * for (const violation of result.violations) {
14
+ * console.error(` ${violation.path}: ${violation.message}`);
15
+ * }
16
+ * }
17
+ * ```
18
+ */
19
+
20
+ // Core engine
21
+ export { GraphRulesEngine, createRulesEngine } from './engine';
22
+
23
+ // Types
24
+ export type {
25
+ GraphRule,
26
+ GraphRuleContext,
27
+ GraphRuleViolation,
28
+ GraphLintResult,
29
+ LintOptions,
30
+ RuleOptions,
31
+ RuleSeverity,
32
+ NormalizedSeverity,
33
+ RuleCategory,
34
+ RuleConfig,
35
+ PrivuConfig,
36
+ FixResult,
37
+ } from './types';
38
+
39
+ export { normalizeSeverity, isRuleDisabled } from './types';
40
+
41
+ // Config validation
42
+ export {
43
+ validatePrivuConfig,
44
+ getDefaultConfig,
45
+ mergeConfigs,
46
+ formatConfigErrors,
47
+ CONFIG_FILE_NAMES,
48
+ DEFAULT_INCLUDE_PATTERNS,
49
+ DEFAULT_EXCLUDE_PATTERNS,
50
+ VALID_RULE_IDS,
51
+ VALID_SEVERITIES,
52
+ type ConfigValidationError,
53
+ type ConfigValidationResult,
54
+ type ValidRuleId,
55
+ } from './config';
56
+
57
+ // Built-in rules
58
+ export {
59
+ builtinRules,
60
+ // Schema rules
61
+ requiredMetadata,
62
+ validNodeTypes,
63
+ validEdgeTypes,
64
+ validColorFormat,
65
+ noUnknownFields,
66
+ // Reference rules
67
+ connectionTypeReferences,
68
+ stateTransitionReferences,
69
+ // Structure rules
70
+ minimumNodeSources,
71
+ orphanedNodeTypes,
72
+ orphanedEdgeTypes,
73
+ unreachableStates,
74
+ deadEndStates,
75
+ // Pattern rules
76
+ validActionPatterns,
77
+ // Rule option types
78
+ type MinimumNodeSourcesOptions,
79
+ type DeadEndStatesOptions,
80
+ type ValidActionPatternsOptions,
81
+ } from './implementations';
82
+
83
+ // Convenience factory that creates an engine with all built-in rules
84
+ import { createRulesEngine } from './engine';
85
+ import { builtinRules } from './implementations';
86
+
87
+ /**
88
+ * Create a rules engine pre-configured with all built-in rules
89
+ */
90
+ export function createDefaultRulesEngine() {
91
+ return createRulesEngine(builtinRules);
92
+ }