@cogitator-ai/workflows 0.1.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 (179) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +97 -0
  3. package/dist/builder.d.ts +39 -0
  4. package/dist/builder.d.ts.map +1 -0
  5. package/dist/builder.js +224 -0
  6. package/dist/builder.js.map +1 -0
  7. package/dist/checkpoint.d.ts +33 -0
  8. package/dist/checkpoint.d.ts.map +1 -0
  9. package/dist/checkpoint.js +108 -0
  10. package/dist/checkpoint.js.map +1 -0
  11. package/dist/executor.d.ts +24 -0
  12. package/dist/executor.d.ts.map +1 -0
  13. package/dist/executor.js +207 -0
  14. package/dist/executor.js.map +1 -0
  15. package/dist/human/approval-store.d.ts +95 -0
  16. package/dist/human/approval-store.d.ts.map +1 -0
  17. package/dist/human/approval-store.js +377 -0
  18. package/dist/human/approval-store.js.map +1 -0
  19. package/dist/human/human-node.d.ts +104 -0
  20. package/dist/human/human-node.d.ts.map +1 -0
  21. package/dist/human/human-node.js +342 -0
  22. package/dist/human/human-node.js.map +1 -0
  23. package/dist/human/index.d.ts +17 -0
  24. package/dist/human/index.d.ts.map +1 -0
  25. package/dist/human/index.js +17 -0
  26. package/dist/human/index.js.map +1 -0
  27. package/dist/human/notifiers.d.ts +85 -0
  28. package/dist/human/notifiers.d.ts.map +1 -0
  29. package/dist/human/notifiers.js +289 -0
  30. package/dist/human/notifiers.js.map +1 -0
  31. package/dist/index.d.ts +32 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +19 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/manager/index.d.ts +19 -0
  36. package/dist/manager/index.d.ts.map +1 -0
  37. package/dist/manager/index.js +17 -0
  38. package/dist/manager/index.js.map +1 -0
  39. package/dist/manager/run-store.d.ts +78 -0
  40. package/dist/manager/run-store.d.ts.map +1 -0
  41. package/dist/manager/run-store.js +390 -0
  42. package/dist/manager/run-store.js.map +1 -0
  43. package/dist/manager/scheduler.d.ts +159 -0
  44. package/dist/manager/scheduler.d.ts.map +1 -0
  45. package/dist/manager/scheduler.js +355 -0
  46. package/dist/manager/scheduler.js.map +1 -0
  47. package/dist/manager/workflow-manager.d.ts +114 -0
  48. package/dist/manager/workflow-manager.d.ts.map +1 -0
  49. package/dist/manager/workflow-manager.js +460 -0
  50. package/dist/manager/workflow-manager.js.map +1 -0
  51. package/dist/nodes/agent.d.ts +24 -0
  52. package/dist/nodes/agent.d.ts.map +1 -0
  53. package/dist/nodes/agent.js +37 -0
  54. package/dist/nodes/agent.js.map +1 -0
  55. package/dist/nodes/base.d.ts +12 -0
  56. package/dist/nodes/base.d.ts.map +1 -0
  57. package/dist/nodes/base.js +5 -0
  58. package/dist/nodes/base.js.map +1 -0
  59. package/dist/nodes/function.d.ts +27 -0
  60. package/dist/nodes/function.d.ts.map +1 -0
  61. package/dist/nodes/function.js +29 -0
  62. package/dist/nodes/function.js.map +1 -0
  63. package/dist/nodes/index.d.ts +8 -0
  64. package/dist/nodes/index.d.ts.map +1 -0
  65. package/dist/nodes/index.js +8 -0
  66. package/dist/nodes/index.js.map +1 -0
  67. package/dist/nodes/tool.d.ts +19 -0
  68. package/dist/nodes/tool.d.ts.map +1 -0
  69. package/dist/nodes/tool.js +26 -0
  70. package/dist/nodes/tool.js.map +1 -0
  71. package/dist/observability/exporters.d.ts +93 -0
  72. package/dist/observability/exporters.d.ts.map +1 -0
  73. package/dist/observability/exporters.js +330 -0
  74. package/dist/observability/exporters.js.map +1 -0
  75. package/dist/observability/index.d.ts +17 -0
  76. package/dist/observability/index.d.ts.map +1 -0
  77. package/dist/observability/index.js +17 -0
  78. package/dist/observability/index.js.map +1 -0
  79. package/dist/observability/metrics.d.ts +114 -0
  80. package/dist/observability/metrics.d.ts.map +1 -0
  81. package/dist/observability/metrics.js +435 -0
  82. package/dist/observability/metrics.js.map +1 -0
  83. package/dist/observability/span-attributes.d.ts +95 -0
  84. package/dist/observability/span-attributes.d.ts.map +1 -0
  85. package/dist/observability/span-attributes.js +142 -0
  86. package/dist/observability/span-attributes.js.map +1 -0
  87. package/dist/observability/tracer.d.ts +110 -0
  88. package/dist/observability/tracer.d.ts.map +1 -0
  89. package/dist/observability/tracer.js +409 -0
  90. package/dist/observability/tracer.js.map +1 -0
  91. package/dist/patterns/index.d.ts +15 -0
  92. package/dist/patterns/index.d.ts.map +1 -0
  93. package/dist/patterns/index.js +15 -0
  94. package/dist/patterns/index.js.map +1 -0
  95. package/dist/patterns/map-reduce.d.ts +223 -0
  96. package/dist/patterns/map-reduce.d.ts.map +1 -0
  97. package/dist/patterns/map-reduce.js +378 -0
  98. package/dist/patterns/map-reduce.js.map +1 -0
  99. package/dist/saga/circuit-breaker.d.ts +153 -0
  100. package/dist/saga/circuit-breaker.d.ts.map +1 -0
  101. package/dist/saga/circuit-breaker.js +306 -0
  102. package/dist/saga/circuit-breaker.js.map +1 -0
  103. package/dist/saga/compensation.d.ts +134 -0
  104. package/dist/saga/compensation.d.ts.map +1 -0
  105. package/dist/saga/compensation.js +240 -0
  106. package/dist/saga/compensation.js.map +1 -0
  107. package/dist/saga/dead-letter.d.ts +113 -0
  108. package/dist/saga/dead-letter.d.ts.map +1 -0
  109. package/dist/saga/dead-letter.js +307 -0
  110. package/dist/saga/dead-letter.js.map +1 -0
  111. package/dist/saga/idempotency.d.ts +95 -0
  112. package/dist/saga/idempotency.d.ts.map +1 -0
  113. package/dist/saga/idempotency.js +266 -0
  114. package/dist/saga/idempotency.js.map +1 -0
  115. package/dist/saga/index.d.ts +16 -0
  116. package/dist/saga/index.d.ts.map +1 -0
  117. package/dist/saga/index.js +16 -0
  118. package/dist/saga/index.js.map +1 -0
  119. package/dist/saga/retry.d.ts +59 -0
  120. package/dist/saga/retry.d.ts.map +1 -0
  121. package/dist/saga/retry.js +222 -0
  122. package/dist/saga/retry.js.map +1 -0
  123. package/dist/scheduler.d.ts +37 -0
  124. package/dist/scheduler.d.ts.map +1 -0
  125. package/dist/scheduler.js +151 -0
  126. package/dist/scheduler.js.map +1 -0
  127. package/dist/subworkflows/index.d.ts +16 -0
  128. package/dist/subworkflows/index.d.ts.map +1 -0
  129. package/dist/subworkflows/index.js +16 -0
  130. package/dist/subworkflows/index.js.map +1 -0
  131. package/dist/subworkflows/parallel-subworkflows.d.ts +139 -0
  132. package/dist/subworkflows/parallel-subworkflows.d.ts.map +1 -0
  133. package/dist/subworkflows/parallel-subworkflows.js +270 -0
  134. package/dist/subworkflows/parallel-subworkflows.js.map +1 -0
  135. package/dist/subworkflows/subworkflow-node.d.ts +136 -0
  136. package/dist/subworkflows/subworkflow-node.d.ts.map +1 -0
  137. package/dist/subworkflows/subworkflow-node.js +164 -0
  138. package/dist/subworkflows/subworkflow-node.js.map +1 -0
  139. package/dist/timers/cron-parser.d.ts +110 -0
  140. package/dist/timers/cron-parser.d.ts.map +1 -0
  141. package/dist/timers/cron-parser.js +412 -0
  142. package/dist/timers/cron-parser.js.map +1 -0
  143. package/dist/timers/index.d.ts +18 -0
  144. package/dist/timers/index.d.ts.map +1 -0
  145. package/dist/timers/index.js +18 -0
  146. package/dist/timers/index.js.map +1 -0
  147. package/dist/timers/timer-manager.d.ts +219 -0
  148. package/dist/timers/timer-manager.d.ts.map +1 -0
  149. package/dist/timers/timer-manager.js +351 -0
  150. package/dist/timers/timer-manager.js.map +1 -0
  151. package/dist/timers/timer-node.d.ts +144 -0
  152. package/dist/timers/timer-node.d.ts.map +1 -0
  153. package/dist/timers/timer-node.js +246 -0
  154. package/dist/timers/timer-node.js.map +1 -0
  155. package/dist/timers/timer-store.d.ts +90 -0
  156. package/dist/timers/timer-store.d.ts.map +1 -0
  157. package/dist/timers/timer-store.js +357 -0
  158. package/dist/timers/timer-store.js.map +1 -0
  159. package/dist/triggers/cron-trigger.d.ts +102 -0
  160. package/dist/triggers/cron-trigger.d.ts.map +1 -0
  161. package/dist/triggers/cron-trigger.js +309 -0
  162. package/dist/triggers/cron-trigger.js.map +1 -0
  163. package/dist/triggers/index.d.ts +14 -0
  164. package/dist/triggers/index.d.ts.map +1 -0
  165. package/dist/triggers/index.js +10 -0
  166. package/dist/triggers/index.js.map +1 -0
  167. package/dist/triggers/rate-limiter.d.ts +130 -0
  168. package/dist/triggers/rate-limiter.d.ts.map +1 -0
  169. package/dist/triggers/rate-limiter.js +294 -0
  170. package/dist/triggers/rate-limiter.js.map +1 -0
  171. package/dist/triggers/trigger-manager.d.ts +166 -0
  172. package/dist/triggers/trigger-manager.d.ts.map +1 -0
  173. package/dist/triggers/trigger-manager.js +436 -0
  174. package/dist/triggers/trigger-manager.js.map +1 -0
  175. package/dist/triggers/webhook-trigger.d.ts +150 -0
  176. package/dist/triggers/webhook-trigger.d.ts.map +1 -0
  177. package/dist/triggers/webhook-trigger.js +452 -0
  178. package/dist/triggers/webhook-trigger.js.map +1 -0
  179. package/package.json +44 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-reduce.js","sourceRoot":"","sources":["../../src/patterns/map-reduce.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Circuit Breaker pattern implementation
3
+ *
4
+ * States:
5
+ * - CLOSED: Normal operation, requests flow through
6
+ * - OPEN: Failures exceeded threshold, requests fail fast
7
+ * - HALF_OPEN: Testing if service recovered, limited requests allowed
8
+ *
9
+ * Features:
10
+ * - Per-node circuit breakers
11
+ * - Configurable failure threshold
12
+ * - Automatic recovery testing
13
+ * - Success threshold for full recovery
14
+ * - Event hooks for monitoring
15
+ */
16
+ import type { CircuitBreakerConfig, CircuitBreakerState } from '@cogitator-ai/types';
17
+ /**
18
+ * Circuit breaker state data
19
+ */
20
+ interface CircuitBreakerData {
21
+ state: CircuitBreakerState;
22
+ failures: number;
23
+ successes: number;
24
+ lastFailure?: number;
25
+ lastStateChange: number;
26
+ halfOpenAttempts: number;
27
+ totalFailures: number;
28
+ totalSuccesses: number;
29
+ consecutiveSuccesses: number;
30
+ }
31
+ /**
32
+ * Circuit breaker event types
33
+ */
34
+ export type CircuitBreakerEvent = {
35
+ type: 'state_change';
36
+ from: CircuitBreakerState;
37
+ to: CircuitBreakerState;
38
+ nodeId: string;
39
+ } | {
40
+ type: 'success';
41
+ nodeId: string;
42
+ duration: number;
43
+ } | {
44
+ type: 'failure';
45
+ nodeId: string;
46
+ error: Error;
47
+ } | {
48
+ type: 'rejected';
49
+ nodeId: string;
50
+ reason: string;
51
+ };
52
+ /**
53
+ * Circuit breaker event handler
54
+ */
55
+ export type CircuitBreakerEventHandler = (event: CircuitBreakerEvent) => void;
56
+ export declare class CircuitBreaker {
57
+ private config;
58
+ private breakers;
59
+ private eventHandlers;
60
+ constructor(config?: Partial<CircuitBreakerConfig>);
61
+ /**
62
+ * Get or create circuit breaker data for a node
63
+ */
64
+ private getBreaker;
65
+ /**
66
+ * Change circuit state
67
+ */
68
+ private changeState;
69
+ /**
70
+ * Check if request should be allowed
71
+ */
72
+ canExecute(nodeId: string): boolean;
73
+ /**
74
+ * Execute a function with circuit breaker protection
75
+ */
76
+ execute<T>(nodeId: string, fn: () => Promise<T>): Promise<T>;
77
+ /**
78
+ * Record a successful execution
79
+ */
80
+ recordSuccess(nodeId: string, duration?: number): void;
81
+ /**
82
+ * Record a failed execution
83
+ */
84
+ recordFailure(nodeId: string, error: Error): void;
85
+ /**
86
+ * Get current state for a node
87
+ */
88
+ getState(nodeId: string): CircuitBreakerState;
89
+ /**
90
+ * Get detailed stats for a node
91
+ */
92
+ getStats(nodeId: string): CircuitBreakerStats;
93
+ /**
94
+ * Get all node stats
95
+ */
96
+ getAllStats(): Map<string, CircuitBreakerStats>;
97
+ /**
98
+ * Force circuit state (for testing/admin)
99
+ */
100
+ forceState(nodeId: string, state: CircuitBreakerState): void;
101
+ /**
102
+ * Reset a circuit breaker
103
+ */
104
+ reset(nodeId: string): void;
105
+ /**
106
+ * Reset all circuit breakers
107
+ */
108
+ resetAll(): void;
109
+ /**
110
+ * Add event handler
111
+ */
112
+ onEvent(handler: CircuitBreakerEventHandler): () => void;
113
+ /**
114
+ * Emit event to all handlers
115
+ */
116
+ private emit;
117
+ }
118
+ /**
119
+ * Circuit breaker stats
120
+ */
121
+ export interface CircuitBreakerStats {
122
+ nodeId: string;
123
+ state: CircuitBreakerState;
124
+ failures: number;
125
+ successes: number;
126
+ totalFailures: number;
127
+ totalSuccesses: number;
128
+ consecutiveSuccesses: number;
129
+ lastFailure?: number;
130
+ lastStateChange: number;
131
+ timeInState: number;
132
+ timeUntilReset?: number;
133
+ }
134
+ /**
135
+ * Error thrown when circuit breaker is open
136
+ */
137
+ export declare class CircuitBreakerOpenError extends Error {
138
+ readonly nodeId: string;
139
+ readonly state: CircuitBreakerState;
140
+ readonly failures: number;
141
+ readonly lastFailure?: number;
142
+ constructor(nodeId: string, breaker: CircuitBreakerData);
143
+ }
144
+ /**
145
+ * Create a circuit breaker instance
146
+ */
147
+ export declare function createCircuitBreaker(config?: Partial<CircuitBreakerConfig>): CircuitBreaker;
148
+ /**
149
+ * Decorator for circuit breaker protected methods
150
+ */
151
+ export declare function WithCircuitBreaker(breaker: CircuitBreaker, nodeId: string): (_target: unknown, _propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
152
+ export {};
153
+ //# sourceMappingURL=circuit-breaker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../src/saga/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAOrF;;GAEG;AACH,UAAU,kBAAkB;IAC1B,KAAK,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,mBAAmB,CAAC;IAAC,EAAE,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5F;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;AAiB9E,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,QAAQ,CAAyC;IACzD,OAAO,CAAC,aAAa,CAAoC;gBAE7C,MAAM,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAWtD;;OAEG;IACH,OAAO,CAAC,UAAU;IAgBlB;;OAEG;IACH,OAAO,CAAC,WAAW;IA8BnB;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IA2BnC;;OAEG;IACG,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA4BlE;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,IAAI;IA2BjD;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IA4BjD;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB;IAI7C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB;IAsB7C;;OAEG;IACH,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC;IAQ/C;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAK5D;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAS3B;;OAEG;IACH,QAAQ,IAAI,IAAI;IAMhB;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM,IAAI;IAUxD;;OAEG;IACH,OAAO,CAAC,IAAI;CAQb;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;gBAElB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB;CAQxD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACrC,cAAc,CAEhB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,MAAM,IAGZ,SAAS,OAAO,EAChB,cAAc,MAAM,EACpB,YAAY,kBAAkB,KAC7B,kBAAkB,CAStB"}
@@ -0,0 +1,306 @@
1
+ /**
2
+ * Circuit Breaker pattern implementation
3
+ *
4
+ * States:
5
+ * - CLOSED: Normal operation, requests flow through
6
+ * - OPEN: Failures exceeded threshold, requests fail fast
7
+ * - HALF_OPEN: Testing if service recovered, limited requests allowed
8
+ *
9
+ * Features:
10
+ * - Per-node circuit breakers
11
+ * - Configurable failure threshold
12
+ * - Automatic recovery testing
13
+ * - Success threshold for full recovery
14
+ * - Event hooks for monitoring
15
+ */
16
+ const DEFAULT_THRESHOLD = 5;
17
+ const DEFAULT_RESET_TIMEOUT = 30000;
18
+ const DEFAULT_SUCCESS_THRESHOLD = 2;
19
+ const DEFAULT_HALF_OPEN_MAX = 3;
20
+ export class CircuitBreaker {
21
+ config;
22
+ breakers = new Map();
23
+ eventHandlers = [];
24
+ constructor(config = {}) {
25
+ this.config = {
26
+ enabled: config.enabled ?? true,
27
+ threshold: config.threshold ?? DEFAULT_THRESHOLD,
28
+ resetTimeout: config.resetTimeout ?? DEFAULT_RESET_TIMEOUT,
29
+ successThreshold: config.successThreshold ?? DEFAULT_SUCCESS_THRESHOLD,
30
+ halfOpenMax: config.halfOpenMax ?? DEFAULT_HALF_OPEN_MAX,
31
+ onStateChange: config.onStateChange,
32
+ };
33
+ }
34
+ /**
35
+ * Get or create circuit breaker data for a node
36
+ */
37
+ getBreaker(nodeId) {
38
+ if (!this.breakers.has(nodeId)) {
39
+ this.breakers.set(nodeId, {
40
+ state: 'closed',
41
+ failures: 0,
42
+ successes: 0,
43
+ lastStateChange: Date.now(),
44
+ halfOpenAttempts: 0,
45
+ totalFailures: 0,
46
+ totalSuccesses: 0,
47
+ consecutiveSuccesses: 0,
48
+ });
49
+ }
50
+ return this.breakers.get(nodeId);
51
+ }
52
+ /**
53
+ * Change circuit state
54
+ */
55
+ changeState(nodeId, breaker, newState) {
56
+ if (breaker.state === newState)
57
+ return;
58
+ const oldState = breaker.state;
59
+ breaker.state = newState;
60
+ breaker.lastStateChange = Date.now();
61
+ if (newState === 'half-open') {
62
+ breaker.halfOpenAttempts = 0;
63
+ breaker.consecutiveSuccesses = 0;
64
+ }
65
+ else if (newState === 'closed') {
66
+ breaker.failures = 0;
67
+ breaker.successes = 0;
68
+ }
69
+ const event = {
70
+ type: 'state_change',
71
+ from: oldState,
72
+ to: newState,
73
+ nodeId,
74
+ };
75
+ this.emit(event);
76
+ this.config.onStateChange?.(oldState, newState, nodeId);
77
+ }
78
+ /**
79
+ * Check if request should be allowed
80
+ */
81
+ canExecute(nodeId) {
82
+ if (!this.config.enabled)
83
+ return true;
84
+ const breaker = this.getBreaker(nodeId);
85
+ const now = Date.now();
86
+ switch (breaker.state) {
87
+ case 'closed':
88
+ return true;
89
+ case 'open': {
90
+ const elapsed = now - breaker.lastStateChange;
91
+ if (elapsed >= this.config.resetTimeout) {
92
+ this.changeState(nodeId, breaker, 'half-open');
93
+ return true;
94
+ }
95
+ return false;
96
+ }
97
+ case 'half-open':
98
+ return breaker.halfOpenAttempts < this.config.halfOpenMax;
99
+ default:
100
+ return true;
101
+ }
102
+ }
103
+ /**
104
+ * Execute a function with circuit breaker protection
105
+ */
106
+ async execute(nodeId, fn) {
107
+ if (!this.canExecute(nodeId)) {
108
+ const event = {
109
+ type: 'rejected',
110
+ nodeId,
111
+ reason: 'Circuit breaker is open',
112
+ };
113
+ this.emit(event);
114
+ throw new CircuitBreakerOpenError(nodeId, this.getBreaker(nodeId));
115
+ }
116
+ const breaker = this.getBreaker(nodeId);
117
+ const startTime = Date.now();
118
+ if (breaker.state === 'half-open') {
119
+ breaker.halfOpenAttempts++;
120
+ }
121
+ try {
122
+ const result = await fn();
123
+ this.recordSuccess(nodeId, Date.now() - startTime);
124
+ return result;
125
+ }
126
+ catch (error) {
127
+ this.recordFailure(nodeId, error);
128
+ throw error;
129
+ }
130
+ }
131
+ /**
132
+ * Record a successful execution
133
+ */
134
+ recordSuccess(nodeId, duration = 0) {
135
+ const breaker = this.getBreaker(nodeId);
136
+ breaker.successes++;
137
+ breaker.totalSuccesses++;
138
+ breaker.consecutiveSuccesses++;
139
+ const event = {
140
+ type: 'success',
141
+ nodeId,
142
+ duration,
143
+ };
144
+ this.emit(event);
145
+ switch (breaker.state) {
146
+ case 'half-open':
147
+ if (breaker.consecutiveSuccesses >= this.config.successThreshold) {
148
+ this.changeState(nodeId, breaker, 'closed');
149
+ }
150
+ break;
151
+ case 'closed':
152
+ breaker.failures = 0;
153
+ break;
154
+ }
155
+ }
156
+ /**
157
+ * Record a failed execution
158
+ */
159
+ recordFailure(nodeId, error) {
160
+ const breaker = this.getBreaker(nodeId);
161
+ breaker.failures++;
162
+ breaker.totalFailures++;
163
+ breaker.lastFailure = Date.now();
164
+ breaker.consecutiveSuccesses = 0;
165
+ const event = {
166
+ type: 'failure',
167
+ nodeId,
168
+ error,
169
+ };
170
+ this.emit(event);
171
+ switch (breaker.state) {
172
+ case 'closed':
173
+ if (breaker.failures >= this.config.threshold) {
174
+ this.changeState(nodeId, breaker, 'open');
175
+ }
176
+ break;
177
+ case 'half-open':
178
+ this.changeState(nodeId, breaker, 'open');
179
+ break;
180
+ }
181
+ }
182
+ /**
183
+ * Get current state for a node
184
+ */
185
+ getState(nodeId) {
186
+ return this.getBreaker(nodeId).state;
187
+ }
188
+ /**
189
+ * Get detailed stats for a node
190
+ */
191
+ getStats(nodeId) {
192
+ const breaker = this.getBreaker(nodeId);
193
+ const now = Date.now();
194
+ return {
195
+ nodeId,
196
+ state: breaker.state,
197
+ failures: breaker.failures,
198
+ successes: breaker.successes,
199
+ totalFailures: breaker.totalFailures,
200
+ totalSuccesses: breaker.totalSuccesses,
201
+ consecutiveSuccesses: breaker.consecutiveSuccesses,
202
+ lastFailure: breaker.lastFailure,
203
+ lastStateChange: breaker.lastStateChange,
204
+ timeInState: now - breaker.lastStateChange,
205
+ timeUntilReset: breaker.state === 'open'
206
+ ? Math.max(0, this.config.resetTimeout - (now - breaker.lastStateChange))
207
+ : undefined,
208
+ };
209
+ }
210
+ /**
211
+ * Get all node stats
212
+ */
213
+ getAllStats() {
214
+ const stats = new Map();
215
+ for (const nodeId of this.breakers.keys()) {
216
+ stats.set(nodeId, this.getStats(nodeId));
217
+ }
218
+ return stats;
219
+ }
220
+ /**
221
+ * Force circuit state (for testing/admin)
222
+ */
223
+ forceState(nodeId, state) {
224
+ const breaker = this.getBreaker(nodeId);
225
+ this.changeState(nodeId, breaker, state);
226
+ }
227
+ /**
228
+ * Reset a circuit breaker
229
+ */
230
+ reset(nodeId) {
231
+ const breaker = this.getBreaker(nodeId);
232
+ breaker.failures = 0;
233
+ breaker.successes = 0;
234
+ breaker.consecutiveSuccesses = 0;
235
+ breaker.halfOpenAttempts = 0;
236
+ this.changeState(nodeId, breaker, 'closed');
237
+ }
238
+ /**
239
+ * Reset all circuit breakers
240
+ */
241
+ resetAll() {
242
+ for (const nodeId of this.breakers.keys()) {
243
+ this.reset(nodeId);
244
+ }
245
+ }
246
+ /**
247
+ * Add event handler
248
+ */
249
+ onEvent(handler) {
250
+ this.eventHandlers.push(handler);
251
+ return () => {
252
+ const idx = this.eventHandlers.indexOf(handler);
253
+ if (idx !== -1) {
254
+ this.eventHandlers.splice(idx, 1);
255
+ }
256
+ };
257
+ }
258
+ /**
259
+ * Emit event to all handlers
260
+ */
261
+ emit(event) {
262
+ for (const handler of this.eventHandlers) {
263
+ try {
264
+ handler(event);
265
+ }
266
+ catch {
267
+ }
268
+ }
269
+ }
270
+ }
271
+ /**
272
+ * Error thrown when circuit breaker is open
273
+ */
274
+ export class CircuitBreakerOpenError extends Error {
275
+ nodeId;
276
+ state;
277
+ failures;
278
+ lastFailure;
279
+ constructor(nodeId, breaker) {
280
+ super(`Circuit breaker is open for node '${nodeId}'`);
281
+ this.name = 'CircuitBreakerOpenError';
282
+ this.nodeId = nodeId;
283
+ this.state = breaker.state;
284
+ this.failures = breaker.failures;
285
+ this.lastFailure = breaker.lastFailure;
286
+ }
287
+ }
288
+ /**
289
+ * Create a circuit breaker instance
290
+ */
291
+ export function createCircuitBreaker(config) {
292
+ return new CircuitBreaker(config);
293
+ }
294
+ /**
295
+ * Decorator for circuit breaker protected methods
296
+ */
297
+ export function WithCircuitBreaker(breaker, nodeId) {
298
+ return function (_target, _propertyKey, descriptor) {
299
+ const originalMethod = descriptor.value;
300
+ descriptor.value = async function (...args) {
301
+ return breaker.execute(nodeId, () => originalMethod.apply(this, args));
302
+ };
303
+ return descriptor;
304
+ };
305
+ }
306
+ //# sourceMappingURL=circuit-breaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/saga/circuit-breaker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Compensation Manager for Saga pattern
3
+ *
4
+ * Features:
5
+ * - Automatic compensation on failure
6
+ * - Reverse-order execution
7
+ * - Partial compensation (only completed steps)
8
+ * - Compensation condition checking
9
+ * - Compensation result tracking
10
+ */
11
+ import type { CompensationConfig, CompensationOrder, WorkflowState } from '@cogitator-ai/types';
12
+ /**
13
+ * Compensation step definition
14
+ */
15
+ export interface CompensationStep<S = WorkflowState> {
16
+ nodeId: string;
17
+ compensationFn: (state: S, originalResult: unknown) => Promise<void>;
18
+ condition?: (state: S, error: Error) => boolean;
19
+ order?: CompensationOrder;
20
+ timeout?: number;
21
+ retries?: number;
22
+ }
23
+ /**
24
+ * Compensation execution result
25
+ */
26
+ export interface CompensationResult {
27
+ nodeId: string;
28
+ success: boolean;
29
+ error?: Error;
30
+ duration: number;
31
+ skipped: boolean;
32
+ skipReason?: string;
33
+ }
34
+ /**
35
+ * Full compensation execution report
36
+ */
37
+ export interface CompensationReport {
38
+ triggeredBy: {
39
+ nodeId: string;
40
+ error: Error;
41
+ };
42
+ compensated: CompensationResult[];
43
+ totalDuration: number;
44
+ allSuccessful: boolean;
45
+ partialFailures: string[];
46
+ }
47
+ /**
48
+ * Compensation Manager class
49
+ */
50
+ export declare class CompensationManager<S = WorkflowState> {
51
+ private steps;
52
+ private completedNodes;
53
+ private executionOrder;
54
+ /**
55
+ * Register a compensation step for a node
56
+ */
57
+ registerCompensation(nodeId: string, compensationFn: (state: S, originalResult: unknown) => Promise<void>, options?: Partial<Omit<CompensationStep<S>, 'nodeId' | 'compensationFn'>>): void;
58
+ /**
59
+ * Register compensation from config
60
+ */
61
+ registerFromConfig(nodeId: string, config: CompensationConfig<S>): void;
62
+ /**
63
+ * Mark a node as completed with its result
64
+ */
65
+ markCompleted(nodeId: string, result: unknown): void;
66
+ /**
67
+ * Clear a node's completion status (for retries)
68
+ */
69
+ clearCompleted(nodeId: string): void;
70
+ /**
71
+ * Check if a node has a compensation step
72
+ */
73
+ hasCompensation(nodeId: string): boolean;
74
+ /**
75
+ * Get nodes that need compensation (completed nodes with compensation steps)
76
+ */
77
+ getCompensableNodes(): string[];
78
+ /**
79
+ * Execute compensation for all completed nodes
80
+ */
81
+ compensate(state: S, failedNodeId: string, error: Error): Promise<CompensationReport>;
82
+ /**
83
+ * Sort nodes by their compensation order
84
+ */
85
+ private sortByCompensationOrder;
86
+ /**
87
+ * Execute with timeout
88
+ */
89
+ private withTimeout;
90
+ /**
91
+ * Reset manager state
92
+ */
93
+ reset(): void;
94
+ /**
95
+ * Get current state summary
96
+ */
97
+ getSummary(): CompensationManagerSummary;
98
+ }
99
+ /**
100
+ * Compensation manager summary
101
+ */
102
+ export interface CompensationManagerSummary {
103
+ registeredSteps: number;
104
+ completedNodes: number;
105
+ compensableNodes: number;
106
+ executionOrder: string[];
107
+ }
108
+ /**
109
+ * Create a compensation manager
110
+ */
111
+ export declare function createCompensationManager<S = WorkflowState>(): CompensationManager<S>;
112
+ /**
113
+ * Compensation builder for fluent API
114
+ */
115
+ export declare class CompensationBuilder<S = WorkflowState> {
116
+ private steps;
117
+ /**
118
+ * Add a compensation step
119
+ */
120
+ addStep(nodeId: string, fn: (state: S, result: unknown) => Promise<void>, options?: Partial<Omit<CompensationStep<S>, 'nodeId' | 'compensationFn'>>): this;
121
+ /**
122
+ * Add conditional compensation
123
+ */
124
+ addConditionalStep(nodeId: string, fn: (state: S, result: unknown) => Promise<void>, condition: (state: S, error: Error) => boolean, options?: Partial<Omit<CompensationStep<S>, 'nodeId' | 'compensationFn' | 'condition'>>): this;
125
+ /**
126
+ * Build the compensation manager
127
+ */
128
+ build(): CompensationManager<S>;
129
+ }
130
+ /**
131
+ * Create a compensation builder
132
+ */
133
+ export declare function compensationBuilder<S = WorkflowState>(): CompensationBuilder<S>;
134
+ //# sourceMappingURL=compensation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compensation.d.ts","sourceRoot":"","sources":["../../src/saga/compensation.ts"],"names":[],"mappings":"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"}