@auto-engineer/pipeline 0.0.1

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 (270) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/LICENSE +10 -0
  3. package/claude.md +160 -0
  4. package/dist/src/builder/define.d.ts +90 -0
  5. package/dist/src/builder/define.d.ts.map +1 -0
  6. package/dist/src/builder/define.js +425 -0
  7. package/dist/src/builder/define.js.map +1 -0
  8. package/dist/src/builder/define.specs.d.ts +2 -0
  9. package/dist/src/builder/define.specs.d.ts.map +1 -0
  10. package/dist/src/builder/define.specs.js +435 -0
  11. package/dist/src/builder/define.specs.js.map +1 -0
  12. package/dist/src/config/pipeline-config.d.ts +13 -0
  13. package/dist/src/config/pipeline-config.d.ts.map +1 -0
  14. package/dist/src/config/pipeline-config.js +15 -0
  15. package/dist/src/config/pipeline-config.js.map +1 -0
  16. package/dist/src/core/descriptors.d.ts +84 -0
  17. package/dist/src/core/descriptors.d.ts.map +1 -0
  18. package/dist/src/core/descriptors.js +2 -0
  19. package/dist/src/core/descriptors.js.map +1 -0
  20. package/dist/src/core/descriptors.specs.d.ts +2 -0
  21. package/dist/src/core/descriptors.specs.d.ts.map +1 -0
  22. package/dist/src/core/descriptors.specs.js +24 -0
  23. package/dist/src/core/descriptors.specs.js.map +1 -0
  24. package/dist/src/core/types.d.ts +10 -0
  25. package/dist/src/core/types.d.ts.map +1 -0
  26. package/dist/src/core/types.js +4 -0
  27. package/dist/src/core/types.js.map +1 -0
  28. package/dist/src/core/types.specs.d.ts +2 -0
  29. package/dist/src/core/types.specs.d.ts.map +1 -0
  30. package/dist/src/core/types.specs.js +40 -0
  31. package/dist/src/core/types.specs.js.map +1 -0
  32. package/dist/src/graph/types.d.ts +17 -0
  33. package/dist/src/graph/types.d.ts.map +1 -0
  34. package/dist/src/graph/types.js +2 -0
  35. package/dist/src/graph/types.js.map +1 -0
  36. package/dist/src/graph/types.specs.d.ts +2 -0
  37. package/dist/src/graph/types.specs.d.ts.map +1 -0
  38. package/dist/src/graph/types.specs.js +148 -0
  39. package/dist/src/graph/types.specs.js.map +1 -0
  40. package/dist/src/index.d.ts +20 -0
  41. package/dist/src/index.d.ts.map +1 -0
  42. package/dist/src/index.js +12 -0
  43. package/dist/src/index.js.map +1 -0
  44. package/dist/src/logging/event-logger.d.ts +21 -0
  45. package/dist/src/logging/event-logger.d.ts.map +1 -0
  46. package/dist/src/logging/event-logger.js +31 -0
  47. package/dist/src/logging/event-logger.js.map +1 -0
  48. package/dist/src/logging/event-logger.specs.d.ts +2 -0
  49. package/dist/src/logging/event-logger.specs.d.ts.map +1 -0
  50. package/dist/src/logging/event-logger.specs.js +81 -0
  51. package/dist/src/logging/event-logger.specs.js.map +1 -0
  52. package/dist/src/plugins/handler-adapter.d.ts +5 -0
  53. package/dist/src/plugins/handler-adapter.d.ts.map +1 -0
  54. package/dist/src/plugins/handler-adapter.js +17 -0
  55. package/dist/src/plugins/handler-adapter.js.map +1 -0
  56. package/dist/src/plugins/handler-adapter.specs.d.ts +2 -0
  57. package/dist/src/plugins/handler-adapter.specs.d.ts.map +1 -0
  58. package/dist/src/plugins/handler-adapter.specs.js +129 -0
  59. package/dist/src/plugins/handler-adapter.specs.js.map +1 -0
  60. package/dist/src/plugins/plugin-loader.d.ts +25 -0
  61. package/dist/src/plugins/plugin-loader.d.ts.map +1 -0
  62. package/dist/src/plugins/plugin-loader.js +150 -0
  63. package/dist/src/plugins/plugin-loader.js.map +1 -0
  64. package/dist/src/plugins/plugin-loader.specs.d.ts +2 -0
  65. package/dist/src/plugins/plugin-loader.specs.d.ts.map +1 -0
  66. package/dist/src/plugins/plugin-loader.specs.js +246 -0
  67. package/dist/src/plugins/plugin-loader.specs.js.map +1 -0
  68. package/dist/src/runtime/await-tracker.d.ts +10 -0
  69. package/dist/src/runtime/await-tracker.d.ts.map +1 -0
  70. package/dist/src/runtime/await-tracker.js +42 -0
  71. package/dist/src/runtime/await-tracker.js.map +1 -0
  72. package/dist/src/runtime/await-tracker.specs.d.ts +2 -0
  73. package/dist/src/runtime/await-tracker.specs.d.ts.map +1 -0
  74. package/dist/src/runtime/await-tracker.specs.js +46 -0
  75. package/dist/src/runtime/await-tracker.specs.js.map +1 -0
  76. package/dist/src/runtime/context.d.ts +12 -0
  77. package/dist/src/runtime/context.d.ts.map +1 -0
  78. package/dist/src/runtime/context.js +2 -0
  79. package/dist/src/runtime/context.js.map +1 -0
  80. package/dist/src/runtime/context.specs.d.ts +2 -0
  81. package/dist/src/runtime/context.specs.d.ts.map +1 -0
  82. package/dist/src/runtime/context.specs.js +26 -0
  83. package/dist/src/runtime/context.specs.js.map +1 -0
  84. package/dist/src/runtime/event-command-map.d.ts +15 -0
  85. package/dist/src/runtime/event-command-map.d.ts.map +1 -0
  86. package/dist/src/runtime/event-command-map.js +26 -0
  87. package/dist/src/runtime/event-command-map.js.map +1 -0
  88. package/dist/src/runtime/event-command-map.specs.d.ts +2 -0
  89. package/dist/src/runtime/event-command-map.specs.d.ts.map +1 -0
  90. package/dist/src/runtime/event-command-map.specs.js +108 -0
  91. package/dist/src/runtime/event-command-map.specs.js.map +1 -0
  92. package/dist/src/runtime/phased-executor.d.ts +29 -0
  93. package/dist/src/runtime/phased-executor.d.ts.map +1 -0
  94. package/dist/src/runtime/phased-executor.js +164 -0
  95. package/dist/src/runtime/phased-executor.js.map +1 -0
  96. package/dist/src/runtime/phased-executor.specs.d.ts +2 -0
  97. package/dist/src/runtime/phased-executor.specs.d.ts.map +1 -0
  98. package/dist/src/runtime/phased-executor.specs.js +256 -0
  99. package/dist/src/runtime/phased-executor.specs.js.map +1 -0
  100. package/dist/src/runtime/pipeline-runtime.d.ts +17 -0
  101. package/dist/src/runtime/pipeline-runtime.d.ts.map +1 -0
  102. package/dist/src/runtime/pipeline-runtime.js +87 -0
  103. package/dist/src/runtime/pipeline-runtime.js.map +1 -0
  104. package/dist/src/runtime/pipeline-runtime.specs.d.ts +2 -0
  105. package/dist/src/runtime/pipeline-runtime.specs.d.ts.map +1 -0
  106. package/dist/src/runtime/pipeline-runtime.specs.js +192 -0
  107. package/dist/src/runtime/pipeline-runtime.specs.js.map +1 -0
  108. package/dist/src/runtime/settled-tracker.d.ts +42 -0
  109. package/dist/src/runtime/settled-tracker.d.ts.map +1 -0
  110. package/dist/src/runtime/settled-tracker.js +161 -0
  111. package/dist/src/runtime/settled-tracker.js.map +1 -0
  112. package/dist/src/runtime/settled-tracker.specs.d.ts +2 -0
  113. package/dist/src/runtime/settled-tracker.specs.d.ts.map +1 -0
  114. package/dist/src/runtime/settled-tracker.specs.js +361 -0
  115. package/dist/src/runtime/settled-tracker.specs.js.map +1 -0
  116. package/dist/src/server/full-orchestration.e2e.specs.d.ts +2 -0
  117. package/dist/src/server/full-orchestration.e2e.specs.d.ts.map +1 -0
  118. package/dist/src/server/full-orchestration.e2e.specs.js +561 -0
  119. package/dist/src/server/full-orchestration.e2e.specs.js.map +1 -0
  120. package/dist/src/server/pipeline-server.d.ts +59 -0
  121. package/dist/src/server/pipeline-server.d.ts.map +1 -0
  122. package/dist/src/server/pipeline-server.e2e.specs.d.ts +2 -0
  123. package/dist/src/server/pipeline-server.e2e.specs.d.ts.map +1 -0
  124. package/dist/src/server/pipeline-server.e2e.specs.js +381 -0
  125. package/dist/src/server/pipeline-server.e2e.specs.js.map +1 -0
  126. package/dist/src/server/pipeline-server.js +527 -0
  127. package/dist/src/server/pipeline-server.js.map +1 -0
  128. package/dist/src/server/pipeline-server.specs.d.ts +2 -0
  129. package/dist/src/server/pipeline-server.specs.d.ts.map +1 -0
  130. package/dist/src/server/pipeline-server.specs.js +662 -0
  131. package/dist/src/server/pipeline-server.specs.js.map +1 -0
  132. package/dist/src/server/sse-manager.d.ts +12 -0
  133. package/dist/src/server/sse-manager.d.ts.map +1 -0
  134. package/dist/src/server/sse-manager.js +63 -0
  135. package/dist/src/server/sse-manager.js.map +1 -0
  136. package/dist/src/server/sse-manager.specs.d.ts +2 -0
  137. package/dist/src/server/sse-manager.specs.d.ts.map +1 -0
  138. package/dist/src/server/sse-manager.specs.js +158 -0
  139. package/dist/src/server/sse-manager.specs.js.map +1 -0
  140. package/dist/src/testing/event-capture.d.ts +14 -0
  141. package/dist/src/testing/event-capture.d.ts.map +1 -0
  142. package/dist/src/testing/event-capture.js +55 -0
  143. package/dist/src/testing/event-capture.js.map +1 -0
  144. package/dist/src/testing/event-capture.specs.d.ts +2 -0
  145. package/dist/src/testing/event-capture.specs.d.ts.map +1 -0
  146. package/dist/src/testing/event-capture.specs.js +114 -0
  147. package/dist/src/testing/event-capture.specs.js.map +1 -0
  148. package/dist/src/testing/fixtures/kanban-full.pipeline.d.ts +7 -0
  149. package/dist/src/testing/fixtures/kanban-full.pipeline.d.ts.map +1 -0
  150. package/dist/src/testing/fixtures/kanban-full.pipeline.js +168 -0
  151. package/dist/src/testing/fixtures/kanban-full.pipeline.js.map +1 -0
  152. package/dist/src/testing/fixtures/kanban-full.pipeline.specs.d.ts +2 -0
  153. package/dist/src/testing/fixtures/kanban-full.pipeline.specs.d.ts.map +1 -0
  154. package/dist/src/testing/fixtures/kanban-full.pipeline.specs.js +263 -0
  155. package/dist/src/testing/fixtures/kanban-full.pipeline.specs.js.map +1 -0
  156. package/dist/src/testing/fixtures/kanban-todo.config.d.ts +3 -0
  157. package/dist/src/testing/fixtures/kanban-todo.config.d.ts.map +1 -0
  158. package/dist/src/testing/fixtures/kanban-todo.config.js +19 -0
  159. package/dist/src/testing/fixtures/kanban-todo.config.js.map +1 -0
  160. package/dist/src/testing/fixtures/kanban.pipeline.d.ts +5 -0
  161. package/dist/src/testing/fixtures/kanban.pipeline.d.ts.map +1 -0
  162. package/dist/src/testing/fixtures/kanban.pipeline.js +76 -0
  163. package/dist/src/testing/fixtures/kanban.pipeline.js.map +1 -0
  164. package/dist/src/testing/fixtures/kanban.pipeline.specs.d.ts +2 -0
  165. package/dist/src/testing/fixtures/kanban.pipeline.specs.d.ts.map +1 -0
  166. package/dist/src/testing/fixtures/kanban.pipeline.specs.js +29 -0
  167. package/dist/src/testing/fixtures/kanban.pipeline.specs.js.map +1 -0
  168. package/dist/src/testing/kanban-todo.e2e.specs.d.ts +2 -0
  169. package/dist/src/testing/kanban-todo.e2e.specs.d.ts.map +1 -0
  170. package/dist/src/testing/kanban-todo.e2e.specs.js +160 -0
  171. package/dist/src/testing/kanban-todo.e2e.specs.js.map +1 -0
  172. package/dist/src/testing/mock-handlers.d.ts +21 -0
  173. package/dist/src/testing/mock-handlers.d.ts.map +1 -0
  174. package/dist/src/testing/mock-handlers.js +34 -0
  175. package/dist/src/testing/mock-handlers.js.map +1 -0
  176. package/dist/src/testing/mock-handlers.specs.d.ts +2 -0
  177. package/dist/src/testing/mock-handlers.specs.d.ts.map +1 -0
  178. package/dist/src/testing/mock-handlers.specs.js +193 -0
  179. package/dist/src/testing/mock-handlers.specs.js.map +1 -0
  180. package/dist/src/testing/real-execution.e2e.specs.d.ts +2 -0
  181. package/dist/src/testing/real-execution.e2e.specs.d.ts.map +1 -0
  182. package/dist/src/testing/real-execution.e2e.specs.js +140 -0
  183. package/dist/src/testing/real-execution.e2e.specs.js.map +1 -0
  184. package/dist/src/testing/real-plugin.e2e.specs.d.ts +2 -0
  185. package/dist/src/testing/real-plugin.e2e.specs.d.ts.map +1 -0
  186. package/dist/src/testing/real-plugin.e2e.specs.js +65 -0
  187. package/dist/src/testing/real-plugin.e2e.specs.js.map +1 -0
  188. package/dist/src/testing/server-startup.e2e.specs.d.ts +2 -0
  189. package/dist/src/testing/server-startup.e2e.specs.d.ts.map +1 -0
  190. package/dist/src/testing/server-startup.e2e.specs.js +104 -0
  191. package/dist/src/testing/server-startup.e2e.specs.js.map +1 -0
  192. package/dist/src/testing/snapshot-compare.d.ts +18 -0
  193. package/dist/src/testing/snapshot-compare.d.ts.map +1 -0
  194. package/dist/src/testing/snapshot-compare.js +86 -0
  195. package/dist/src/testing/snapshot-compare.js.map +1 -0
  196. package/dist/src/testing/snapshot-compare.specs.d.ts +2 -0
  197. package/dist/src/testing/snapshot-compare.specs.d.ts.map +1 -0
  198. package/dist/src/testing/snapshot-compare.specs.js +112 -0
  199. package/dist/src/testing/snapshot-compare.specs.js.map +1 -0
  200. package/dist/src/testing/snapshot-sanitize.d.ts +8 -0
  201. package/dist/src/testing/snapshot-sanitize.d.ts.map +1 -0
  202. package/dist/src/testing/snapshot-sanitize.js +10 -0
  203. package/dist/src/testing/snapshot-sanitize.js.map +1 -0
  204. package/dist/src/testing/snapshot-sanitize.specs.d.ts +2 -0
  205. package/dist/src/testing/snapshot-sanitize.specs.d.ts.map +1 -0
  206. package/dist/src/testing/snapshot-sanitize.specs.js +104 -0
  207. package/dist/src/testing/snapshot-sanitize.specs.js.map +1 -0
  208. package/dist/tsconfig.tsbuildinfo +1 -0
  209. package/docs/testing-analysis.md +395 -0
  210. package/package.json +31 -0
  211. package/pipeline-api-new.md +1078 -0
  212. package/pomodoro-plan.md +651 -0
  213. package/scripts/run-kanban-e2e.ts +219 -0
  214. package/scripts/start-server.ts +64 -0
  215. package/snapshots/e2e-run-2025-12-22T15-52-03.json +613 -0
  216. package/snapshots/e2e-run-2025-12-22T16-51-30.json +699 -0
  217. package/src/builder/define.specs.ts +531 -0
  218. package/src/builder/define.ts +700 -0
  219. package/src/config/pipeline-config.ts +32 -0
  220. package/src/core/descriptors.specs.ts +28 -0
  221. package/src/core/descriptors.ts +99 -0
  222. package/src/core/types.specs.ts +44 -0
  223. package/src/core/types.ts +16 -0
  224. package/src/graph/types.specs.ts +176 -0
  225. package/src/graph/types.ts +19 -0
  226. package/src/index.ts +54 -0
  227. package/src/logging/event-logger.specs.ts +100 -0
  228. package/src/logging/event-logger.ts +50 -0
  229. package/src/plugins/handler-adapter.specs.ts +164 -0
  230. package/src/plugins/handler-adapter.ts +21 -0
  231. package/src/plugins/plugin-loader.specs.ts +295 -0
  232. package/src/plugins/plugin-loader.ts +202 -0
  233. package/src/runtime/await-tracker.specs.ts +52 -0
  234. package/src/runtime/await-tracker.ts +50 -0
  235. package/src/runtime/context.specs.ts +28 -0
  236. package/src/runtime/context.ts +13 -0
  237. package/src/runtime/event-command-map.specs.ts +136 -0
  238. package/src/runtime/event-command-map.ts +38 -0
  239. package/src/runtime/phased-executor.specs.ts +358 -0
  240. package/src/runtime/phased-executor.ts +224 -0
  241. package/src/runtime/pipeline-runtime.specs.ts +214 -0
  242. package/src/runtime/pipeline-runtime.ts +119 -0
  243. package/src/runtime/settled-tracker.specs.ts +448 -0
  244. package/src/runtime/settled-tracker.ts +237 -0
  245. package/src/server/full-orchestration.e2e.specs.ts +672 -0
  246. package/src/server/pipeline-server.e2e.specs.ts +505 -0
  247. package/src/server/pipeline-server.specs.ts +761 -0
  248. package/src/server/pipeline-server.ts +656 -0
  249. package/src/server/sse-manager.specs.ts +208 -0
  250. package/src/server/sse-manager.ts +79 -0
  251. package/src/testing/event-capture.specs.ts +143 -0
  252. package/src/testing/event-capture.ts +65 -0
  253. package/src/testing/fixtures/kanban-full.pipeline.specs.ts +337 -0
  254. package/src/testing/fixtures/kanban-full.pipeline.ts +225 -0
  255. package/src/testing/fixtures/kanban-todo.config.ts +19 -0
  256. package/src/testing/fixtures/kanban.pipeline.specs.ts +33 -0
  257. package/src/testing/fixtures/kanban.pipeline.ts +124 -0
  258. package/src/testing/kanban-todo.e2e.specs.ts +209 -0
  259. package/src/testing/mock-handlers.specs.ts +229 -0
  260. package/src/testing/mock-handlers.ts +58 -0
  261. package/src/testing/real-execution.e2e.specs.ts +193 -0
  262. package/src/testing/real-plugin.e2e.specs.ts +94 -0
  263. package/src/testing/server-startup.e2e.specs.ts +162 -0
  264. package/src/testing/snapshot-compare.specs.ts +136 -0
  265. package/src/testing/snapshot-compare.ts +106 -0
  266. package/src/testing/snapshot-sanitize.specs.ts +131 -0
  267. package/src/testing/snapshot-sanitize.ts +17 -0
  268. package/tsconfig.json +11 -0
  269. package/tsconfig.test.json +9 -0
  270. package/vitest.config.ts +29 -0
@@ -0,0 +1,42 @@
1
+ import type { Command, Event } from '@auto-engineer/message-bus';
2
+ type SendFunction = (commandType: string, data: unknown) => void;
3
+ type SettledHandler = (events: Record<string, Event[]>, send: SendFunction) => void | {
4
+ persist: boolean;
5
+ };
6
+ interface SettledHandlerRegistration {
7
+ commandTypes: readonly string[];
8
+ handler: SettledHandler;
9
+ }
10
+ interface SettledErrorContext {
11
+ commandTypes: readonly string[];
12
+ correlationId: string;
13
+ }
14
+ interface SettledTrackerOptions {
15
+ onDispatch?: (commandType: string, data: unknown, correlationId: string) => void;
16
+ onError?: (error: unknown, context: SettledErrorContext) => void;
17
+ }
18
+ export declare class SettledTracker {
19
+ private handlerTemplates;
20
+ private handlerInstances;
21
+ private commandToTemplateIds;
22
+ private readonly onDispatch?;
23
+ private readonly onError?;
24
+ constructor(options?: SettledTrackerOptions);
25
+ registerHandler(registration: SettledHandlerRegistration): void;
26
+ getRegisteredHandlerCount(): number;
27
+ getActiveInstanceCount(): number;
28
+ onCommandStarted(command: Command): void;
29
+ isWaitingFor(correlationId: string, commandType: string): boolean;
30
+ onEventReceived(event: Event, sourceCommandType: string): void;
31
+ private isValidId;
32
+ private generateTemplateId;
33
+ private generateInstanceId;
34
+ private ensureInstanceExists;
35
+ private markCommandStarted;
36
+ private checkAndFireHandler;
37
+ private collectEvents;
38
+ private shouldPersist;
39
+ private resetTrackers;
40
+ }
41
+ export {};
42
+ //# sourceMappingURL=settled-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settled-tracker.d.ts","sourceRoot":"","sources":["../../../src/runtime/settled-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAEjE,KAAK,YAAY,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;AAEjE,KAAK,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3G,UAAU,0BAA0B;IAClC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,OAAO,EAAE,cAAc,CAAC;CACzB;AAqBD,UAAU,mBAAmB;IAC3B,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,qBAAqB;IAC7B,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACjF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAClE;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,gBAAgB,CAAsC;IAC9D,OAAO,CAAC,gBAAgB,CAAsC;IAC9D,OAAO,CAAC,oBAAoB,CAAkC;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAsE;IAClG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAyD;gBAEtE,OAAO,CAAC,EAAE,qBAAqB;IAK3C,eAAe,CAAC,YAAY,EAAE,0BAA0B,GAAG,IAAI;IAe/D,yBAAyB,IAAI,MAAM;IAInC,sBAAsB,IAAI,MAAM;IAIhC,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAqBxC,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAYjE,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAqB9D,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,mBAAmB;IAkC3B,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,aAAa;CAOtB"}
@@ -0,0 +1,161 @@
1
+ export class SettledTracker {
2
+ constructor(options) {
3
+ this.handlerTemplates = new Map();
4
+ this.handlerInstances = new Map();
5
+ this.commandToTemplateIds = new Map();
6
+ this.onDispatch = options?.onDispatch;
7
+ this.onError = options?.onError;
8
+ }
9
+ registerHandler(registration) {
10
+ const templateId = this.generateTemplateId(registration);
11
+ this.handlerTemplates.set(templateId, {
12
+ id: templateId,
13
+ registration,
14
+ });
15
+ for (const commandType of registration.commandTypes) {
16
+ const existing = this.commandToTemplateIds.get(commandType) ?? new Set();
17
+ existing.add(templateId);
18
+ this.commandToTemplateIds.set(commandType, existing);
19
+ }
20
+ }
21
+ getRegisteredHandlerCount() {
22
+ return this.handlerTemplates.size;
23
+ }
24
+ getActiveInstanceCount() {
25
+ return this.handlerInstances.size;
26
+ }
27
+ onCommandStarted(command) {
28
+ const { type: commandType, correlationId, requestId } = command;
29
+ if (!this.isValidId(correlationId) || !this.isValidId(requestId)) {
30
+ return;
31
+ }
32
+ const templateIds = this.commandToTemplateIds.get(commandType);
33
+ if (!templateIds) {
34
+ return;
35
+ }
36
+ for (const templateId of templateIds) {
37
+ const template = this.handlerTemplates.get(templateId);
38
+ if (template) {
39
+ this.ensureInstanceExists(template, correlationId);
40
+ this.markCommandStarted(template.id, correlationId, commandType);
41
+ }
42
+ }
43
+ }
44
+ isWaitingFor(correlationId, commandType) {
45
+ for (const instance of this.handlerInstances.values()) {
46
+ if (instance.correlationId === correlationId) {
47
+ const tracker = instance.commandTrackers.get(commandType);
48
+ if (tracker?.hasStarted === true && tracker.hasCompleted === false) {
49
+ return true;
50
+ }
51
+ }
52
+ }
53
+ return false;
54
+ }
55
+ onEventReceived(event, sourceCommandType) {
56
+ const correlationId = event.correlationId;
57
+ if (!this.isValidId(correlationId)) {
58
+ return;
59
+ }
60
+ for (const [instanceId, instance] of this.handlerInstances) {
61
+ if (instance.correlationId !== correlationId) {
62
+ continue;
63
+ }
64
+ const tracker = instance.commandTrackers.get(sourceCommandType);
65
+ if (tracker && !tracker.hasCompleted) {
66
+ tracker.events.push(event);
67
+ tracker.hasCompleted = true;
68
+ this.checkAndFireHandler(instanceId, instance);
69
+ }
70
+ }
71
+ }
72
+ isValidId(id) {
73
+ return id !== undefined && id !== null && id !== '';
74
+ }
75
+ generateTemplateId(registration) {
76
+ return `template-${registration.commandTypes.join(',')}`;
77
+ }
78
+ generateInstanceId(templateId, correlationId) {
79
+ return `${templateId}-${correlationId}`;
80
+ }
81
+ ensureInstanceExists(template, correlationId) {
82
+ const instanceId = this.generateInstanceId(template.id, correlationId);
83
+ if (this.handlerInstances.has(instanceId)) {
84
+ return;
85
+ }
86
+ const commandTrackers = new Map();
87
+ for (const commandType of template.registration.commandTypes) {
88
+ commandTrackers.set(commandType, {
89
+ commandType,
90
+ hasStarted: false,
91
+ hasCompleted: false,
92
+ events: [],
93
+ });
94
+ }
95
+ this.handlerInstances.set(instanceId, {
96
+ templateId: template.id,
97
+ correlationId,
98
+ registration: template.registration,
99
+ commandTrackers,
100
+ });
101
+ }
102
+ markCommandStarted(templateId, correlationId, commandType) {
103
+ const instanceId = this.generateInstanceId(templateId, correlationId);
104
+ const instance = this.handlerInstances.get(instanceId);
105
+ const tracker = instance?.commandTrackers.get(commandType);
106
+ if (tracker) {
107
+ tracker.hasStarted = true;
108
+ tracker.hasCompleted = false;
109
+ }
110
+ }
111
+ checkAndFireHandler(instanceId, instance) {
112
+ const allComplete = Array.from(instance.commandTrackers.values()).every((tracker) => tracker.hasStarted && tracker.hasCompleted);
113
+ if (!allComplete) {
114
+ return;
115
+ }
116
+ const eventsByCommandType = this.collectEvents(instance);
117
+ try {
118
+ const send = (commandType, data) => {
119
+ if (this.onDispatch) {
120
+ this.onDispatch(commandType, data, instance.correlationId);
121
+ }
122
+ };
123
+ const result = instance.registration.handler(eventsByCommandType, send);
124
+ if (this.shouldPersist(result)) {
125
+ this.resetTrackers(instance);
126
+ }
127
+ else {
128
+ this.handlerInstances.delete(instanceId);
129
+ }
130
+ }
131
+ catch (error) {
132
+ this.onError?.(error, {
133
+ commandTypes: instance.registration.commandTypes,
134
+ correlationId: instance.correlationId,
135
+ });
136
+ this.handlerInstances.delete(instanceId);
137
+ }
138
+ }
139
+ collectEvents(instance) {
140
+ const events = {};
141
+ for (const [commandType, tracker] of instance.commandTrackers) {
142
+ events[commandType] = [...tracker.events];
143
+ }
144
+ return events;
145
+ }
146
+ shouldPersist(result) {
147
+ return (result !== null &&
148
+ result !== undefined &&
149
+ typeof result === 'object' &&
150
+ 'persist' in result &&
151
+ result.persist === true);
152
+ }
153
+ resetTrackers(instance) {
154
+ for (const tracker of instance.commandTrackers.values()) {
155
+ tracker.hasStarted = false;
156
+ tracker.hasCompleted = false;
157
+ tracker.events = [];
158
+ }
159
+ }
160
+ }
161
+ //# sourceMappingURL=settled-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settled-tracker.js","sourceRoot":"","sources":["../../../src/runtime/settled-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=settled-tracker.specs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settled-tracker.specs.d.ts","sourceRoot":"","sources":["../../../src/runtime/settled-tracker.specs.ts"],"names":[],"mappings":""}
@@ -0,0 +1,361 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { SettledTracker } from './settled-tracker.js';
3
+ describe('SettledTracker', () => {
4
+ let tracker;
5
+ beforeEach(() => {
6
+ tracker = new SettledTracker();
7
+ });
8
+ describe('handler registration', () => {
9
+ it('should register a handler for multiple command types', () => {
10
+ tracker.registerHandler({
11
+ commandTypes: ['CheckTests', 'CheckTypes', 'CheckLint'],
12
+ handler: () => { },
13
+ });
14
+ expect(tracker.getRegisteredHandlerCount()).toBe(1);
15
+ });
16
+ it('should register multiple handlers', () => {
17
+ tracker.registerHandler({
18
+ commandTypes: ['A', 'B'],
19
+ handler: () => { },
20
+ });
21
+ tracker.registerHandler({
22
+ commandTypes: ['C', 'D'],
23
+ handler: () => { },
24
+ });
25
+ expect(tracker.getRegisteredHandlerCount()).toBe(2);
26
+ });
27
+ });
28
+ describe('command tracking', () => {
29
+ it('should track multiple commands by correlationId', () => {
30
+ tracker.registerHandler({
31
+ commandTypes: ['CheckTests', 'CheckTypes', 'CheckLint'],
32
+ handler: () => { },
33
+ });
34
+ const command = {
35
+ type: 'CheckTests',
36
+ correlationId: 'c1',
37
+ requestId: 'r1',
38
+ data: {},
39
+ };
40
+ tracker.onCommandStarted(command);
41
+ expect(tracker.isWaitingFor('c1', 'CheckTests')).toBe(true);
42
+ expect(tracker.isWaitingFor('c1', 'CheckTypes')).toBe(false);
43
+ });
44
+ it('should instantiate handler instance when first tracked command arrives', () => {
45
+ tracker.registerHandler({
46
+ commandTypes: ['A', 'B'],
47
+ handler: () => { },
48
+ });
49
+ tracker.onCommandStarted({
50
+ type: 'A',
51
+ correlationId: 'c1',
52
+ requestId: 'r1',
53
+ data: {},
54
+ });
55
+ expect(tracker.getActiveInstanceCount()).toBe(1);
56
+ });
57
+ it('should not create duplicate instances for same correlationId', () => {
58
+ tracker.registerHandler({
59
+ commandTypes: ['A', 'B'],
60
+ handler: () => { },
61
+ });
62
+ tracker.onCommandStarted({
63
+ type: 'A',
64
+ correlationId: 'c1',
65
+ requestId: 'r1',
66
+ data: {},
67
+ });
68
+ tracker.onCommandStarted({
69
+ type: 'B',
70
+ correlationId: 'c1',
71
+ requestId: 'r2',
72
+ data: {},
73
+ });
74
+ expect(tracker.getActiveInstanceCount()).toBe(1);
75
+ });
76
+ it('should ignore commands without correlationId', () => {
77
+ tracker.registerHandler({
78
+ commandTypes: ['A'],
79
+ handler: () => { },
80
+ });
81
+ tracker.onCommandStarted({
82
+ type: 'A',
83
+ requestId: 'r1',
84
+ data: {},
85
+ });
86
+ expect(tracker.getActiveInstanceCount()).toBe(0);
87
+ });
88
+ it('should ignore commands without requestId', () => {
89
+ tracker.registerHandler({
90
+ commandTypes: ['A'],
91
+ handler: () => { },
92
+ });
93
+ tracker.onCommandStarted({
94
+ type: 'A',
95
+ correlationId: 'c1',
96
+ data: {},
97
+ });
98
+ expect(tracker.getActiveInstanceCount()).toBe(0);
99
+ });
100
+ });
101
+ describe('event routing', () => {
102
+ it('should mark command as complete when event received', () => {
103
+ tracker.registerHandler({
104
+ commandTypes: ['A'],
105
+ handler: () => { },
106
+ });
107
+ tracker.onCommandStarted({
108
+ type: 'A',
109
+ correlationId: 'c1',
110
+ requestId: 'r1',
111
+ data: {},
112
+ });
113
+ const event = {
114
+ type: 'ADone',
115
+ correlationId: 'c1',
116
+ data: {},
117
+ };
118
+ tracker.onEventReceived(event, 'A');
119
+ expect(tracker.isWaitingFor('c1', 'A')).toBe(false);
120
+ });
121
+ it('should collect events for each command type', () => {
122
+ let receivedEvents = {};
123
+ tracker.registerHandler({
124
+ commandTypes: ['A', 'B'],
125
+ handler: (events) => {
126
+ receivedEvents = events;
127
+ },
128
+ });
129
+ tracker.onCommandStarted({
130
+ type: 'A',
131
+ correlationId: 'c1',
132
+ requestId: 'r1',
133
+ data: {},
134
+ });
135
+ tracker.onCommandStarted({
136
+ type: 'B',
137
+ correlationId: 'c1',
138
+ requestId: 'r2',
139
+ data: {},
140
+ });
141
+ tracker.onEventReceived({ type: 'ADone', correlationId: 'c1', data: { foo: 1 } }, 'A');
142
+ tracker.onEventReceived({ type: 'BDone', correlationId: 'c1', data: { bar: 2 } }, 'B');
143
+ expect(receivedEvents.A).toHaveLength(1);
144
+ expect(receivedEvents.A[0].type).toBe('ADone');
145
+ expect(receivedEvents.B).toHaveLength(1);
146
+ expect(receivedEvents.B[0].type).toBe('BDone');
147
+ });
148
+ it('should ignore events without correlationId', () => {
149
+ let handlerCalled = false;
150
+ tracker.registerHandler({
151
+ commandTypes: ['A'],
152
+ handler: () => {
153
+ handlerCalled = true;
154
+ },
155
+ });
156
+ tracker.onCommandStarted({
157
+ type: 'A',
158
+ correlationId: 'c1',
159
+ requestId: 'r1',
160
+ data: {},
161
+ });
162
+ tracker.onEventReceived({ type: 'ADone', data: {} }, 'A');
163
+ expect(handlerCalled).toBe(false);
164
+ });
165
+ });
166
+ describe('handler execution', () => {
167
+ it('should fire handler when all commands complete', () => {
168
+ let fired = false;
169
+ tracker.registerHandler({
170
+ commandTypes: ['A', 'B'],
171
+ handler: () => {
172
+ fired = true;
173
+ },
174
+ });
175
+ tracker.onCommandStarted({
176
+ type: 'A',
177
+ correlationId: 'c1',
178
+ requestId: 'r1',
179
+ data: {},
180
+ });
181
+ tracker.onCommandStarted({
182
+ type: 'B',
183
+ correlationId: 'c1',
184
+ requestId: 'r2',
185
+ data: {},
186
+ });
187
+ tracker.onEventReceived({ type: 'ADone', correlationId: 'c1', data: {} }, 'A');
188
+ expect(fired).toBe(false);
189
+ tracker.onEventReceived({ type: 'BDone', correlationId: 'c1', data: {} }, 'B');
190
+ expect(fired).toBe(true);
191
+ });
192
+ it('should not fire handler until all tracked commands have events', () => {
193
+ let fireCount = 0;
194
+ tracker.registerHandler({
195
+ commandTypes: ['CheckTests', 'CheckTypes', 'CheckLint'],
196
+ handler: () => {
197
+ fireCount++;
198
+ },
199
+ });
200
+ tracker.onCommandStarted({
201
+ type: 'CheckTests',
202
+ correlationId: 'c1',
203
+ requestId: 'r1',
204
+ data: {},
205
+ });
206
+ tracker.onCommandStarted({
207
+ type: 'CheckTypes',
208
+ correlationId: 'c1',
209
+ requestId: 'r2',
210
+ data: {},
211
+ });
212
+ tracker.onCommandStarted({
213
+ type: 'CheckLint',
214
+ correlationId: 'c1',
215
+ requestId: 'r3',
216
+ data: {},
217
+ });
218
+ tracker.onEventReceived({ type: 'TestsCheckPassed', correlationId: 'c1', data: {} }, 'CheckTests');
219
+ expect(fireCount).toBe(0);
220
+ tracker.onEventReceived({ type: 'TypeCheckPassed', correlationId: 'c1', data: {} }, 'CheckTypes');
221
+ expect(fireCount).toBe(0);
222
+ tracker.onEventReceived({ type: 'LintCheckPassed', correlationId: 'c1', data: {} }, 'CheckLint');
223
+ expect(fireCount).toBe(1);
224
+ });
225
+ it('should cleanup instance after handler fires', () => {
226
+ tracker.registerHandler({
227
+ commandTypes: ['A'],
228
+ handler: () => { },
229
+ });
230
+ tracker.onCommandStarted({
231
+ type: 'A',
232
+ correlationId: 'c1',
233
+ requestId: 'r1',
234
+ data: {},
235
+ });
236
+ expect(tracker.getActiveInstanceCount()).toBe(1);
237
+ tracker.onEventReceived({ type: 'ADone', correlationId: 'c1', data: {} }, 'A');
238
+ expect(tracker.getActiveInstanceCount()).toBe(0);
239
+ });
240
+ it('should handle separate correlationIds independently', () => {
241
+ const firedFor = [];
242
+ tracker.registerHandler({
243
+ commandTypes: ['A', 'B'],
244
+ handler: (events) => {
245
+ firedFor.push(events.A[0].correlationId ?? 'unknown');
246
+ },
247
+ });
248
+ tracker.onCommandStarted({ type: 'A', correlationId: 'c1', requestId: 'r1', data: {} });
249
+ tracker.onCommandStarted({ type: 'B', correlationId: 'c1', requestId: 'r2', data: {} });
250
+ tracker.onCommandStarted({ type: 'A', correlationId: 'c2', requestId: 'r3', data: {} });
251
+ tracker.onCommandStarted({ type: 'B', correlationId: 'c2', requestId: 'r4', data: {} });
252
+ tracker.onEventReceived({ type: 'ADone', correlationId: 'c1', data: {} }, 'A');
253
+ tracker.onEventReceived({ type: 'BDone', correlationId: 'c2', data: {} }, 'B');
254
+ expect(firedFor).toHaveLength(0);
255
+ tracker.onEventReceived({ type: 'BDone', correlationId: 'c1', data: {} }, 'B');
256
+ expect(firedFor).toEqual(['c1']);
257
+ tracker.onEventReceived({ type: 'ADone', correlationId: 'c2', data: {} }, 'A');
258
+ expect(firedFor).toEqual(['c1', 'c2']);
259
+ });
260
+ });
261
+ describe('persist for retry', () => {
262
+ it('should reset trackers when handler returns persist: true', () => {
263
+ let callCount = 0;
264
+ tracker.registerHandler({
265
+ commandTypes: ['A'],
266
+ handler: () => {
267
+ callCount++;
268
+ return callCount < 3 ? { persist: true } : undefined;
269
+ },
270
+ });
271
+ tracker.onCommandStarted({ type: 'A', correlationId: 'c1', requestId: 'r1', data: {} });
272
+ tracker.onEventReceived({ type: 'ADone', correlationId: 'c1', data: {} }, 'A');
273
+ expect(callCount).toBe(1);
274
+ expect(tracker.getActiveInstanceCount()).toBe(1);
275
+ tracker.onCommandStarted({ type: 'A', correlationId: 'c1', requestId: 'r2', data: {} });
276
+ tracker.onEventReceived({ type: 'ADone', correlationId: 'c1', data: {} }, 'A');
277
+ expect(callCount).toBe(2);
278
+ expect(tracker.getActiveInstanceCount()).toBe(1);
279
+ tracker.onCommandStarted({ type: 'A', correlationId: 'c1', requestId: 'r3', data: {} });
280
+ tracker.onEventReceived({ type: 'ADone', correlationId: 'c1', data: {} }, 'A');
281
+ expect(callCount).toBe(3);
282
+ expect(tracker.getActiveInstanceCount()).toBe(0);
283
+ });
284
+ it('should cleanup on handler error', () => {
285
+ tracker.registerHandler({
286
+ commandTypes: ['A'],
287
+ handler: () => {
288
+ throw new Error('Handler error');
289
+ },
290
+ });
291
+ tracker.onCommandStarted({ type: 'A', correlationId: 'c1', requestId: 'r1', data: {} });
292
+ expect(() => {
293
+ tracker.onEventReceived({ type: 'ADone', correlationId: 'c1', data: {} }, 'A');
294
+ }).not.toThrow();
295
+ expect(tracker.getActiveInstanceCount()).toBe(0);
296
+ });
297
+ });
298
+ describe('error callback', () => {
299
+ it('should accept onError callback in options', () => {
300
+ const onError = vi.fn();
301
+ tracker = new SettledTracker({ onError });
302
+ expect(tracker).toBeInstanceOf(SettledTracker);
303
+ });
304
+ it('should call onError when handler throws', () => {
305
+ const onError = vi.fn();
306
+ const thrownError = new Error('Handler failed');
307
+ tracker = new SettledTracker({ onError });
308
+ tracker.registerHandler({
309
+ commandTypes: ['A'],
310
+ handler: () => {
311
+ throw thrownError;
312
+ },
313
+ });
314
+ tracker.onCommandStarted({ type: 'A', correlationId: 'c1', requestId: 'r1', data: {} });
315
+ tracker.onEventReceived({ type: 'ADone', correlationId: 'c1', data: {} }, 'A');
316
+ expect(onError).toHaveBeenCalledTimes(1);
317
+ expect(onError).toHaveBeenCalledWith(thrownError, {
318
+ commandTypes: ['A'],
319
+ correlationId: 'c1',
320
+ });
321
+ });
322
+ });
323
+ describe('dispatch callback', () => {
324
+ it('should call onDispatch when provided', () => {
325
+ const dispatched = [];
326
+ tracker = new SettledTracker({
327
+ onDispatch: (commandType, data, _correlationId) => {
328
+ dispatched.push({ type: commandType, data });
329
+ },
330
+ });
331
+ tracker.registerHandler({
332
+ commandTypes: ['A'],
333
+ handler: (_events, send) => {
334
+ send('FollowUp', { foo: 'bar' });
335
+ },
336
+ });
337
+ tracker.onCommandStarted({ type: 'A', correlationId: 'c1', requestId: 'r1', data: {} });
338
+ tracker.onEventReceived({ type: 'ADone', correlationId: 'c1', data: {} }, 'A');
339
+ expect(dispatched).toHaveLength(1);
340
+ expect(dispatched[0]).toEqual({ type: 'FollowUp', data: { foo: 'bar' } });
341
+ });
342
+ it('should pass correlationId to onDispatch', () => {
343
+ let receivedCorrelationId;
344
+ tracker = new SettledTracker({
345
+ onDispatch: (_commandType, _data, correlationId) => {
346
+ receivedCorrelationId = correlationId;
347
+ },
348
+ });
349
+ tracker.registerHandler({
350
+ commandTypes: ['A'],
351
+ handler: (_events, send) => {
352
+ send('FollowUp', {});
353
+ },
354
+ });
355
+ tracker.onCommandStarted({ type: 'A', correlationId: 'c1', requestId: 'r1', data: {} });
356
+ tracker.onEventReceived({ type: 'ADone', correlationId: 'c1', data: {} }, 'A');
357
+ expect(receivedCorrelationId).toBe('c1');
358
+ });
359
+ });
360
+ });
361
+ //# sourceMappingURL=settled-tracker.specs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settled-tracker.specs.js","sourceRoot":"","sources":["../../../src/runtime/settled-tracker.specs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=full-orchestration.e2e.specs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full-orchestration.e2e.specs.d.ts","sourceRoot":"","sources":["../../../src/server/full-orchestration.e2e.specs.ts"],"names":[],"mappings":""}