@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,66 @@
1
+ /**
2
+ * Built-in rule implementations
3
+ */
4
+
5
+ // Schema rules
6
+ export { requiredMetadata } from './required-metadata';
7
+ export { validNodeTypes } from './valid-node-types';
8
+ export { validEdgeTypes } from './valid-edge-types';
9
+ export { validColorFormat } from './valid-color-format';
10
+ export { noUnknownFields } from './no-unknown-fields';
11
+
12
+ // Reference rules
13
+ export { connectionTypeReferences } from './connection-type-references';
14
+ export { stateTransitionReferences } from './state-transition-references';
15
+
16
+ // Structure rules
17
+ export { minimumNodeSources, type MinimumNodeSourcesOptions } from './minimum-node-sources';
18
+ export { orphanedNodeTypes } from './orphaned-node-types';
19
+ export { orphanedEdgeTypes } from './orphaned-edge-types';
20
+ export { unreachableStates } from './unreachable-states';
21
+ export { deadEndStates, type DeadEndStatesOptions } from './dead-end-states';
22
+
23
+ // Pattern rules
24
+ export { validActionPatterns, type ValidActionPatternsOptions } from './valid-action-patterns';
25
+
26
+ import type { GraphRule } from '../types';
27
+ import { requiredMetadata } from './required-metadata';
28
+ import { validNodeTypes } from './valid-node-types';
29
+ import { validEdgeTypes } from './valid-edge-types';
30
+ import { validColorFormat } from './valid-color-format';
31
+ import { noUnknownFields } from './no-unknown-fields';
32
+ import { connectionTypeReferences } from './connection-type-references';
33
+ import { stateTransitionReferences } from './state-transition-references';
34
+ import { minimumNodeSources } from './minimum-node-sources';
35
+ import { orphanedNodeTypes } from './orphaned-node-types';
36
+ import { orphanedEdgeTypes } from './orphaned-edge-types';
37
+ import { unreachableStates } from './unreachable-states';
38
+ import { deadEndStates } from './dead-end-states';
39
+ import { validActionPatterns } from './valid-action-patterns';
40
+
41
+ /**
42
+ * All built-in rules
43
+ * Cast to GraphRule[] since rules with specific options extend the base interface
44
+ */
45
+ export const builtinRules: GraphRule[] = [
46
+ // Schema rules (5)
47
+ noUnknownFields,
48
+ requiredMetadata,
49
+ validNodeTypes,
50
+ validEdgeTypes,
51
+ validColorFormat,
52
+
53
+ // Reference rules (2)
54
+ connectionTypeReferences,
55
+ stateTransitionReferences,
56
+
57
+ // Structure rules (5)
58
+ minimumNodeSources as unknown as GraphRule,
59
+ orphanedNodeTypes,
60
+ orphanedEdgeTypes,
61
+ unreachableStates,
62
+ deadEndStates as unknown as GraphRule,
63
+
64
+ // Pattern rules (1)
65
+ validActionPatterns as unknown as GraphRule,
66
+ ];
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Rule: minimum-node-sources
3
+ * Ensures each nodeType has at least a minimum number of references (or sources) defined
4
+ *
5
+ * Note: This rule checks `references` field, with fallback to deprecated `sources` field.
6
+ */
7
+
8
+ import type { GraphRule, GraphRuleContext, GraphRuleViolation, RuleOptions } from '../types';
9
+
10
+ /**
11
+ * Options for minimum-node-sources rule
12
+ */
13
+ export interface MinimumNodeSourcesOptions extends RuleOptions {
14
+ /**
15
+ * Minimum number of references required per nodeType
16
+ * @default 1
17
+ */
18
+ minimum: number;
19
+
20
+ /**
21
+ * NodeType IDs to exclude from this check
22
+ * @default []
23
+ */
24
+ excludeNodeTypes: string[];
25
+ }
26
+
27
+ const DEFAULT_OPTIONS: MinimumNodeSourcesOptions = {
28
+ minimum: 1,
29
+ excludeNodeTypes: [],
30
+ };
31
+
32
+ export const minimumNodeSources: GraphRule<MinimumNodeSourcesOptions> = {
33
+ id: 'minimum-node-sources',
34
+ name: 'Minimum Node References',
35
+ description: 'Each nodeType must have at least a minimum number of references defined',
36
+ impact: 'NodeTypes without references cannot be associated with log activity',
37
+ severity: 'error',
38
+ category: 'structure',
39
+ enabled: true,
40
+ fixable: false,
41
+ defaultOptions: DEFAULT_OPTIONS,
42
+
43
+ async check(context: GraphRuleContext<MinimumNodeSourcesOptions>): Promise<GraphRuleViolation[]> {
44
+ const violations: GraphRuleViolation[] = [];
45
+ const { configuration, configPath, options } = context;
46
+
47
+ const minimum = options.minimum ?? DEFAULT_OPTIONS.minimum;
48
+ const excludeNodeTypes = options.excludeNodeTypes ?? DEFAULT_OPTIONS.excludeNodeTypes;
49
+
50
+ if (!configuration.nodeTypes) {
51
+ return violations;
52
+ }
53
+
54
+ for (const [typeId, nodeType] of Object.entries(configuration.nodeTypes)) {
55
+ // Skip excluded node types
56
+ if (excludeNodeTypes.includes(typeId)) {
57
+ continue;
58
+ }
59
+
60
+ // Get references from nodeType, with fallback to deprecated sources
61
+ const nodeTypeAny = nodeType as unknown as Record<string, unknown>;
62
+ const refs = nodeTypeAny.references ?? nodeTypeAny.sources;
63
+ const refCount = Array.isArray(refs) ? refs.length : 0;
64
+
65
+ if (refCount < minimum) {
66
+ violations.push({
67
+ ruleId: 'minimum-node-sources',
68
+ severity: 'error',
69
+ file: configPath,
70
+ path: `nodeTypes.${typeId}.references`,
71
+ message:
72
+ refCount === 0
73
+ ? `Node type "${typeId}" has no references defined`
74
+ : `Node type "${typeId}" has ${refCount} reference(s), minimum required is ${minimum}`,
75
+ impact: 'This node type cannot be associated with log activity from source files',
76
+ suggestion: `Add at least ${minimum} reference path(s) to nodeTypes.${typeId}.references`,
77
+ fixable: false,
78
+ });
79
+ }
80
+ }
81
+
82
+ return violations;
83
+ },
84
+ };
@@ -0,0 +1,372 @@
1
+ /**
2
+ * Rule: no-unknown-fields
3
+ * Flags fields that are not defined in the configuration schema
4
+ */
5
+
6
+ import type { GraphRule, GraphRuleContext, GraphRuleViolation } from '../types';
7
+
8
+ /**
9
+ * Allowed fields for each configuration section
10
+ */
11
+ const ALLOWED_FIELDS = {
12
+ root: ['metadata', 'nodeTypes', 'edgeTypes', 'allowedConnections', 'validation', 'display'],
13
+ metadata: ['name', 'version', 'description'],
14
+ nodeType: [
15
+ 'description',
16
+ 'shape',
17
+ 'icon',
18
+ 'color',
19
+ 'stroke',
20
+ 'size',
21
+ 'dataSchema',
22
+ 'states',
23
+ 'layout',
24
+ 'sources',
25
+ 'actions',
26
+ ],
27
+ edgeType: [
28
+ 'style',
29
+ 'color',
30
+ 'width',
31
+ 'directed',
32
+ 'animated',
33
+ 'label',
34
+ 'animation',
35
+ 'dataSchema',
36
+ 'activatedBy',
37
+ ],
38
+ connectionRule: ['from', 'to', 'via', 'constraints'],
39
+ connectionConstraints: ['maxInstances', 'bidirectional', 'exclusive'],
40
+ validation: ['stateTransitions', 'constraints', 'cardinality'],
41
+ display: ['layout', 'theme', 'animations'],
42
+ displayTheme: ['primary', 'success', 'warning', 'danger', 'info'],
43
+ displayAnimations: ['enabled', 'speed'],
44
+ dataSchemaField: ['type', 'required', 'displayInLabel', 'label', 'displayInInfo', 'description', 'placeholder'],
45
+ stateDefinition: ['color', 'icon', 'label'],
46
+ layoutHints: ['layer', 'cluster'],
47
+ edgeLabel: ['field', 'position'],
48
+ edgeAnimation: ['type', 'duration', 'color'],
49
+ nodeSize: ['width', 'height'],
50
+ stateTransition: ['from', 'to'],
51
+ constraint: ['id', 'description', 'check', 'severity'],
52
+ actionPattern: ['pattern', 'event', 'state', 'metadata'],
53
+ };
54
+
55
+ export const noUnknownFields: GraphRule = {
56
+ id: 'no-unknown-fields',
57
+ name: 'No Unknown Fields',
58
+ description: 'Flag fields that are not defined in the configuration schema',
59
+ impact: 'Unknown fields are likely typos and will be ignored',
60
+ severity: 'error',
61
+ category: 'schema',
62
+ enabled: true,
63
+ fixable: true,
64
+
65
+ async check(context: GraphRuleContext): Promise<GraphRuleViolation[]> {
66
+ const violations: GraphRuleViolation[] = [];
67
+ const { configuration, configPath } = context;
68
+
69
+ // Check root level fields
70
+ checkFields(
71
+ configuration as unknown as Record<string, unknown>,
72
+ ALLOWED_FIELDS.root,
73
+ '',
74
+ configPath,
75
+ violations
76
+ );
77
+
78
+ // Check metadata fields
79
+ if (configuration.metadata) {
80
+ checkFields(
81
+ configuration.metadata as Record<string, unknown>,
82
+ ALLOWED_FIELDS.metadata,
83
+ 'metadata',
84
+ configPath,
85
+ violations
86
+ );
87
+ }
88
+
89
+ // Check nodeTypes
90
+ if (configuration.nodeTypes) {
91
+ for (const [typeId, nodeType] of Object.entries(configuration.nodeTypes)) {
92
+ const basePath = `nodeTypes.${typeId}`;
93
+ checkFields(
94
+ nodeType as unknown as Record<string, unknown>,
95
+ ALLOWED_FIELDS.nodeType,
96
+ basePath,
97
+ configPath,
98
+ violations
99
+ );
100
+
101
+ // Check nested fields in nodeType
102
+ if (nodeType.dataSchema) {
103
+ for (const [fieldName, fieldDef] of Object.entries(nodeType.dataSchema)) {
104
+ checkFields(
105
+ fieldDef as Record<string, unknown>,
106
+ ALLOWED_FIELDS.dataSchemaField,
107
+ `${basePath}.dataSchema.${fieldName}`,
108
+ configPath,
109
+ violations
110
+ );
111
+ }
112
+ }
113
+
114
+ if (nodeType.states) {
115
+ for (const [stateName, stateDef] of Object.entries(nodeType.states)) {
116
+ checkFields(
117
+ stateDef as Record<string, unknown>,
118
+ ALLOWED_FIELDS.stateDefinition,
119
+ `${basePath}.states.${stateName}`,
120
+ configPath,
121
+ violations
122
+ );
123
+ }
124
+ }
125
+
126
+ if (nodeType.layout) {
127
+ checkFields(
128
+ nodeType.layout as Record<string, unknown>,
129
+ ALLOWED_FIELDS.layoutHints,
130
+ `${basePath}.layout`,
131
+ configPath,
132
+ violations
133
+ );
134
+ }
135
+
136
+ if (nodeType.size) {
137
+ checkFields(
138
+ nodeType.size as Record<string, unknown>,
139
+ ALLOWED_FIELDS.nodeSize,
140
+ `${basePath}.size`,
141
+ configPath,
142
+ violations
143
+ );
144
+ }
145
+
146
+ // Check actions
147
+ const nodeTypeAny = nodeType as unknown as Record<string, unknown>;
148
+ if (Array.isArray(nodeTypeAny.actions)) {
149
+ (nodeTypeAny.actions as unknown[]).forEach((action: unknown, index: number) => {
150
+ if (typeof action === 'object' && action !== null) {
151
+ checkFields(
152
+ action as Record<string, unknown>,
153
+ ALLOWED_FIELDS.actionPattern,
154
+ `${basePath}.actions[${index}]`,
155
+ configPath,
156
+ violations
157
+ );
158
+ }
159
+ });
160
+ }
161
+ }
162
+ }
163
+
164
+ // Check edgeTypes
165
+ if (configuration.edgeTypes) {
166
+ for (const [typeId, edgeType] of Object.entries(configuration.edgeTypes)) {
167
+ const basePath = `edgeTypes.${typeId}`;
168
+ checkFields(
169
+ edgeType as unknown as Record<string, unknown>,
170
+ ALLOWED_FIELDS.edgeType,
171
+ basePath,
172
+ configPath,
173
+ violations
174
+ );
175
+
176
+ if (edgeType.label && typeof edgeType.label === 'object') {
177
+ checkFields(
178
+ edgeType.label as Record<string, unknown>,
179
+ ALLOWED_FIELDS.edgeLabel,
180
+ `${basePath}.label`,
181
+ configPath,
182
+ violations
183
+ );
184
+ }
185
+
186
+ if (edgeType.animation && typeof edgeType.animation === 'object') {
187
+ checkFields(
188
+ edgeType.animation as Record<string, unknown>,
189
+ ALLOWED_FIELDS.edgeAnimation,
190
+ `${basePath}.animation`,
191
+ configPath,
192
+ violations
193
+ );
194
+ }
195
+
196
+ if (edgeType.dataSchema) {
197
+ for (const [fieldName, fieldDef] of Object.entries(edgeType.dataSchema)) {
198
+ checkFields(
199
+ fieldDef as Record<string, unknown>,
200
+ ALLOWED_FIELDS.dataSchemaField,
201
+ `${basePath}.dataSchema.${fieldName}`,
202
+ configPath,
203
+ violations
204
+ );
205
+ }
206
+ }
207
+ }
208
+ }
209
+
210
+ // Check allowedConnections
211
+ if (configuration.allowedConnections) {
212
+ configuration.allowedConnections.forEach((rule, index) => {
213
+ const basePath = `allowedConnections[${index}]`;
214
+ checkFields(
215
+ rule as unknown as Record<string, unknown>,
216
+ ALLOWED_FIELDS.connectionRule,
217
+ basePath,
218
+ configPath,
219
+ violations
220
+ );
221
+
222
+ if (rule.constraints) {
223
+ checkFields(
224
+ rule.constraints as Record<string, unknown>,
225
+ ALLOWED_FIELDS.connectionConstraints,
226
+ `${basePath}.constraints`,
227
+ configPath,
228
+ violations
229
+ );
230
+ }
231
+ });
232
+ }
233
+
234
+ // Check validation
235
+ if (configuration.validation) {
236
+ checkFields(
237
+ configuration.validation as Record<string, unknown>,
238
+ ALLOWED_FIELDS.validation,
239
+ 'validation',
240
+ configPath,
241
+ violations
242
+ );
243
+
244
+ // Check state transitions
245
+ if (configuration.validation.stateTransitions) {
246
+ for (const [nodeType, transitions] of Object.entries(
247
+ configuration.validation.stateTransitions
248
+ )) {
249
+ if (Array.isArray(transitions)) {
250
+ transitions.forEach((transition, index) => {
251
+ checkFields(
252
+ transition as Record<string, unknown>,
253
+ ALLOWED_FIELDS.stateTransition,
254
+ `validation.stateTransitions.${nodeType}[${index}]`,
255
+ configPath,
256
+ violations
257
+ );
258
+ });
259
+ }
260
+ }
261
+ }
262
+
263
+ // Check constraints
264
+ if (
265
+ configuration.validation.constraints &&
266
+ Array.isArray(configuration.validation.constraints)
267
+ ) {
268
+ configuration.validation.constraints.forEach((constraint, index) => {
269
+ checkFields(
270
+ constraint as Record<string, unknown>,
271
+ ALLOWED_FIELDS.constraint,
272
+ `validation.constraints[${index}]`,
273
+ configPath,
274
+ violations
275
+ );
276
+ });
277
+ }
278
+ }
279
+
280
+ // Check display
281
+ if (configuration.display) {
282
+ checkFields(
283
+ configuration.display as unknown as Record<string, unknown>,
284
+ ALLOWED_FIELDS.display,
285
+ 'display',
286
+ configPath,
287
+ violations
288
+ );
289
+
290
+ if (configuration.display.theme) {
291
+ checkFields(
292
+ configuration.display.theme as Record<string, unknown>,
293
+ ALLOWED_FIELDS.displayTheme,
294
+ 'display.theme',
295
+ configPath,
296
+ violations
297
+ );
298
+ }
299
+
300
+ if (configuration.display.animations) {
301
+ checkFields(
302
+ configuration.display.animations as Record<string, unknown>,
303
+ ALLOWED_FIELDS.displayAnimations,
304
+ 'display.animations',
305
+ configPath,
306
+ violations
307
+ );
308
+ }
309
+ }
310
+
311
+ return violations;
312
+ },
313
+ };
314
+
315
+ /**
316
+ * Check an object's fields against allowed fields
317
+ */
318
+ function checkFields(
319
+ obj: Record<string, unknown>,
320
+ allowedFields: string[],
321
+ path: string,
322
+ configPath: string | undefined,
323
+ violations: GraphRuleViolation[]
324
+ ): void {
325
+ for (const field of Object.keys(obj)) {
326
+ if (!allowedFields.includes(field)) {
327
+ const suggestion = findSimilarField(field, allowedFields);
328
+ violations.push({
329
+ ruleId: 'no-unknown-fields',
330
+ severity: 'error',
331
+ file: configPath,
332
+ path: path ? `${path}.${field}` : field,
333
+ message: `Unknown field "${field}"${path ? ` in ${path}` : ' at root level'}`,
334
+ impact: 'This field will be ignored and may indicate a configuration error',
335
+ suggestion: suggestion
336
+ ? `Did you mean "${suggestion}"? Allowed fields: ${allowedFields.join(', ')}`
337
+ : `Allowed fields: ${allowedFields.join(', ')}`,
338
+ fixable: true,
339
+ fixData: { path, field, suggestion },
340
+ });
341
+ }
342
+ }
343
+ }
344
+
345
+ /**
346
+ * Find a similar field name for "did you mean" suggestions
347
+ */
348
+ function findSimilarField(field: string, allowedFields: string[]): string | null {
349
+ const fieldLower = field.toLowerCase();
350
+
351
+ for (const allowed of allowedFields) {
352
+ const allowedLower = allowed.toLowerCase();
353
+
354
+ // Check for substring match
355
+ if (fieldLower.includes(allowedLower) || allowedLower.includes(fieldLower)) {
356
+ return allowed;
357
+ }
358
+
359
+ // Check for small edit distance (typos)
360
+ if (Math.abs(field.length - allowed.length) <= 2) {
361
+ let differences = 0;
362
+ const minLen = Math.min(fieldLower.length, allowedLower.length);
363
+ for (let i = 0; i < minLen; i++) {
364
+ if (fieldLower[i] !== allowedLower[i]) differences++;
365
+ }
366
+ differences += Math.abs(field.length - allowed.length);
367
+ if (differences <= 2) return allowed;
368
+ }
369
+ }
370
+
371
+ return null;
372
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Rule: orphaned-edge-types
3
+ * Warns when edgeTypes are not used in any connection rule
4
+ */
5
+
6
+ import type { GraphRule, GraphRuleContext, GraphRuleViolation } from '../types';
7
+
8
+ export const orphanedEdgeTypes: GraphRule = {
9
+ id: 'orphaned-edge-types',
10
+ name: 'Orphaned Edge Types',
11
+ description: 'EdgeTypes should be used in at least one connection rule',
12
+ impact: 'Orphaned edge types may indicate unused or misconfigured types',
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.edgeTypes || Object.keys(configuration.edgeTypes).length === 0) {
23
+ return violations;
24
+ }
25
+
26
+ // Collect all edgeTypes referenced in allowedConnections
27
+ const referencedEdgeTypes = new Set<string>();
28
+
29
+ if (configuration.allowedConnections) {
30
+ for (const connection of configuration.allowedConnections) {
31
+ if (connection.via) {
32
+ referencedEdgeTypes.add(connection.via);
33
+ }
34
+ }
35
+ }
36
+
37
+ // Check each edgeType
38
+ for (const typeId of Object.keys(configuration.edgeTypes)) {
39
+ if (!referencedEdgeTypes.has(typeId)) {
40
+ violations.push({
41
+ ruleId: 'orphaned-edge-types',
42
+ severity: 'error',
43
+ file: configPath,
44
+ path: `edgeTypes.${typeId}`,
45
+ message: `Edge type "${typeId}" is not used in any connection rule`,
46
+ impact: 'This edge type may be unused or misconfigured',
47
+ suggestion: `Add a connection rule using this edge type, or remove it if unused`,
48
+ fixable: false,
49
+ });
50
+ }
51
+ }
52
+
53
+ return violations;
54
+ },
55
+ };
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Rule: orphaned-node-types
3
+ * Warns when nodeTypes are not used in any connection rule
4
+ */
5
+
6
+ import type { GraphRule, GraphRuleContext, GraphRuleViolation } from '../types';
7
+
8
+ export const orphanedNodeTypes: GraphRule = {
9
+ id: 'orphaned-node-types',
10
+ name: 'Orphaned Node Types',
11
+ description: 'NodeTypes should be used in at least one connection rule',
12
+ impact: 'Orphaned node types may indicate unused or misconfigured types',
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 || Object.keys(configuration.nodeTypes).length === 0) {
23
+ return violations;
24
+ }
25
+
26
+ // Collect all nodeTypes referenced in allowedConnections
27
+ const referencedNodeTypes = new Set<string>();
28
+
29
+ if (configuration.allowedConnections) {
30
+ for (const connection of configuration.allowedConnections) {
31
+ if (connection.from) {
32
+ referencedNodeTypes.add(connection.from);
33
+ }
34
+ if (connection.to) {
35
+ referencedNodeTypes.add(connection.to);
36
+ }
37
+ }
38
+ }
39
+
40
+ // Check each nodeType
41
+ for (const typeId of Object.keys(configuration.nodeTypes)) {
42
+ if (!referencedNodeTypes.has(typeId)) {
43
+ violations.push({
44
+ ruleId: 'orphaned-node-types',
45
+ severity: 'error',
46
+ file: configPath,
47
+ path: `nodeTypes.${typeId}`,
48
+ message: `Node type "${typeId}" is not used in any connection rule`,
49
+ impact: 'This node type may be unused or misconfigured',
50
+ suggestion: `Add a connection rule using this node type, or remove it if unused`,
51
+ fixable: false,
52
+ });
53
+ }
54
+ }
55
+
56
+ return violations;
57
+ },
58
+ };
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Rule: required-metadata
3
+ * Ensures configuration has required metadata fields (name, version)
4
+ */
5
+
6
+ import type { GraphRule, GraphRuleContext, GraphRuleViolation } from '../types';
7
+
8
+ export const requiredMetadata: GraphRule = {
9
+ id: 'required-metadata',
10
+ name: 'Required Metadata',
11
+ description: 'Configuration must have name and version in metadata',
12
+ impact: 'Missing metadata makes configurations hard to identify and version',
13
+ severity: 'error',
14
+ category: 'schema',
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.metadata) {
23
+ violations.push({
24
+ ruleId: 'required-metadata',
25
+ severity: 'error',
26
+ file: configPath,
27
+ path: 'metadata',
28
+ message: 'Configuration is missing metadata section',
29
+ impact: 'Cannot identify or version this configuration',
30
+ suggestion: 'Add a metadata section with name and version fields',
31
+ fixable: false,
32
+ });
33
+ return violations;
34
+ }
35
+
36
+ if (!configuration.metadata.name) {
37
+ violations.push({
38
+ ruleId: 'required-metadata',
39
+ severity: 'error',
40
+ file: configPath,
41
+ path: 'metadata.name',
42
+ message: 'Configuration metadata is missing required "name" field',
43
+ impact: 'Cannot identify this configuration',
44
+ suggestion: 'Add a name field to metadata',
45
+ fixable: false,
46
+ });
47
+ }
48
+
49
+
50
+ return violations;
51
+ },
52
+ };