@sudocode-ai/local-server 0.1.5 → 0.1.7

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 (125) hide show
  1. package/dist/execution/process/builders/claude.d.ts +1 -1
  2. package/dist/execution/process/builders/claude.d.ts.map +1 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +70 -11
  5. package/dist/index.js.map +1 -1
  6. package/dist/public/assets/index-B3SEMufD.js +580 -0
  7. package/dist/public/assets/index-B3SEMufD.js.map +1 -0
  8. package/dist/public/assets/index-D2YGL3gX.css +1 -0
  9. package/dist/public/assets/react-vendor-ByUx1V_q.js +60 -0
  10. package/dist/public/assets/react-vendor-ByUx1V_q.js.map +1 -0
  11. package/dist/public/assets/ui-vendor-CotR6bx9.js +54 -0
  12. package/dist/public/assets/ui-vendor-CotR6bx9.js.map +1 -0
  13. package/dist/public/index.html +4 -4
  14. package/dist/routes/feedback.d.ts.map +1 -1
  15. package/dist/routes/feedback.js +20 -12
  16. package/dist/routes/feedback.js.map +1 -1
  17. package/dist/services/db.d.ts.map +1 -1
  18. package/dist/services/db.js +19 -14
  19. package/dist/services/db.js.map +1 -1
  20. package/dist/services/execution-service.d.ts.map +1 -1
  21. package/dist/services/execution-service.js +43 -22
  22. package/dist/services/execution-service.js.map +1 -1
  23. package/dist/services/executions.d.ts.map +1 -1
  24. package/dist/services/executions.js +15 -0
  25. package/dist/services/executions.js.map +1 -1
  26. package/dist/services/feedback.d.ts +16 -0
  27. package/dist/services/feedback.d.ts.map +1 -1
  28. package/dist/services/feedback.js +25 -1
  29. package/dist/services/feedback.js.map +1 -1
  30. package/dist/services/repo-info.d.ts +17 -0
  31. package/dist/services/repo-info.d.ts.map +1 -0
  32. package/dist/services/repo-info.js +53 -0
  33. package/dist/services/repo-info.js.map +1 -0
  34. package/dist/services/websocket.d.ts +25 -3
  35. package/dist/services/websocket.d.ts.map +1 -1
  36. package/dist/services/websocket.js +71 -7
  37. package/dist/services/websocket.js.map +1 -1
  38. package/package.json +8 -7
  39. package/dist/execution/engine/engine.d.ts +0 -103
  40. package/dist/execution/engine/engine.d.ts.map +0 -1
  41. package/dist/execution/engine/engine.js +0 -10
  42. package/dist/execution/engine/engine.js.map +0 -1
  43. package/dist/execution/engine/simple-engine.d.ts +0 -190
  44. package/dist/execution/engine/simple-engine.d.ts.map +0 -1
  45. package/dist/execution/engine/simple-engine.js +0 -611
  46. package/dist/execution/engine/simple-engine.js.map +0 -1
  47. package/dist/execution/engine/types.d.ts +0 -116
  48. package/dist/execution/engine/types.d.ts.map +0 -1
  49. package/dist/execution/engine/types.js +0 -10
  50. package/dist/execution/engine/types.js.map +0 -1
  51. package/dist/execution/process/index.d.ts +0 -15
  52. package/dist/execution/process/index.d.ts.map +0 -1
  53. package/dist/execution/process/index.js +0 -15
  54. package/dist/execution/process/index.js.map +0 -1
  55. package/dist/execution/process/manager.d.ts +0 -133
  56. package/dist/execution/process/manager.d.ts.map +0 -1
  57. package/dist/execution/process/manager.js +0 -10
  58. package/dist/execution/process/manager.js.map +0 -1
  59. package/dist/execution/process/simple-manager.d.ts +0 -102
  60. package/dist/execution/process/simple-manager.d.ts.map +0 -1
  61. package/dist/execution/process/simple-manager.js +0 -336
  62. package/dist/execution/process/simple-manager.js.map +0 -1
  63. package/dist/execution/process/types.d.ts +0 -105
  64. package/dist/execution/process/types.d.ts.map +0 -1
  65. package/dist/execution/process/types.js +0 -10
  66. package/dist/execution/process/types.js.map +0 -1
  67. package/dist/execution/process/utils.d.ts +0 -53
  68. package/dist/execution/process/utils.d.ts.map +0 -1
  69. package/dist/execution/process/utils.js +0 -97
  70. package/dist/execution/process/utils.js.map +0 -1
  71. package/dist/execution/resilience/circuit-breaker.d.ts +0 -170
  72. package/dist/execution/resilience/circuit-breaker.d.ts.map +0 -1
  73. package/dist/execution/resilience/circuit-breaker.js +0 -291
  74. package/dist/execution/resilience/circuit-breaker.js.map +0 -1
  75. package/dist/execution/resilience/executor.d.ts +0 -109
  76. package/dist/execution/resilience/executor.d.ts.map +0 -1
  77. package/dist/execution/resilience/executor.js +0 -10
  78. package/dist/execution/resilience/executor.js.map +0 -1
  79. package/dist/execution/resilience/index.d.ts +0 -14
  80. package/dist/execution/resilience/index.d.ts.map +0 -1
  81. package/dist/execution/resilience/index.js +0 -15
  82. package/dist/execution/resilience/index.js.map +0 -1
  83. package/dist/execution/resilience/resilient-executor.d.ts +0 -86
  84. package/dist/execution/resilience/resilient-executor.d.ts.map +0 -1
  85. package/dist/execution/resilience/resilient-executor.js +0 -261
  86. package/dist/execution/resilience/resilient-executor.js.map +0 -1
  87. package/dist/execution/resilience/retry.d.ts +0 -161
  88. package/dist/execution/resilience/retry.d.ts.map +0 -1
  89. package/dist/execution/resilience/retry.js +0 -234
  90. package/dist/execution/resilience/retry.js.map +0 -1
  91. package/dist/execution/resilience/types.d.ts +0 -226
  92. package/dist/execution/resilience/types.d.ts.map +0 -1
  93. package/dist/execution/resilience/types.js +0 -30
  94. package/dist/execution/resilience/types.js.map +0 -1
  95. package/dist/execution/workflow/index.d.ts +0 -13
  96. package/dist/execution/workflow/index.d.ts.map +0 -1
  97. package/dist/execution/workflow/index.js +0 -13
  98. package/dist/execution/workflow/index.js.map +0 -1
  99. package/dist/execution/workflow/linear-orchestrator.d.ts +0 -216
  100. package/dist/execution/workflow/linear-orchestrator.d.ts.map +0 -1
  101. package/dist/execution/workflow/linear-orchestrator.js +0 -683
  102. package/dist/execution/workflow/linear-orchestrator.js.map +0 -1
  103. package/dist/execution/workflow/memory-storage.d.ts +0 -54
  104. package/dist/execution/workflow/memory-storage.d.ts.map +0 -1
  105. package/dist/execution/workflow/memory-storage.js +0 -68
  106. package/dist/execution/workflow/memory-storage.js.map +0 -1
  107. package/dist/execution/workflow/orchestrator.d.ts +0 -158
  108. package/dist/execution/workflow/orchestrator.d.ts.map +0 -1
  109. package/dist/execution/workflow/orchestrator.js +0 -9
  110. package/dist/execution/workflow/orchestrator.js.map +0 -1
  111. package/dist/execution/workflow/types.d.ts +0 -172
  112. package/dist/execution/workflow/types.d.ts.map +0 -1
  113. package/dist/execution/workflow/types.js +0 -9
  114. package/dist/execution/workflow/types.js.map +0 -1
  115. package/dist/execution/workflow/utils.d.ts +0 -89
  116. package/dist/execution/workflow/utils.d.ts.map +0 -1
  117. package/dist/execution/workflow/utils.js +0 -152
  118. package/dist/execution/workflow/utils.js.map +0 -1
  119. package/dist/public/assets/index-CeD4U_lo.css +0 -1
  120. package/dist/public/assets/index-fLX6-3RP.js +0 -569
  121. package/dist/public/assets/index-fLX6-3RP.js.map +0 -1
  122. package/dist/public/assets/react-vendor-LX0UoTxg.js +0 -60
  123. package/dist/public/assets/react-vendor-LX0UoTxg.js.map +0 -1
  124. package/dist/public/assets/ui-vendor-_cxVHaqZ.js +0 -54
  125. package/dist/public/assets/ui-vendor-_cxVHaqZ.js.map +0 -1
@@ -1,170 +0,0 @@
1
- /**
2
- * Circuit Breaker Implementation
3
- *
4
- * Implements the circuit breaker pattern for preventing cascading failures.
5
- * Tracks failures and successes, automatically opening when thresholds are
6
- * exceeded and recovering through half-open state.
7
- *
8
- * @module execution/resilience/circuit-breaker
9
- */
10
- import type { CircuitBreaker, CircuitState } from './types.js';
11
- /**
12
- * CircuitBreakerManager - Manages multiple circuit breakers
13
- *
14
- * Maintains a collection of circuit breakers, typically one per task type
15
- * or service. Provides methods for checking state, recording outcomes,
16
- * and managing circuit lifecycle.
17
- *
18
- * @example
19
- * ```typescript
20
- * const manager = new CircuitBreakerManager();
21
- * const breaker = manager.getOrCreate('issue-executor', {
22
- * failureThreshold: 5,
23
- * successThreshold: 2,
24
- * timeout: 60000,
25
- * });
26
- *
27
- * if (manager.canExecute('issue-executor')) {
28
- * // Execute task
29
- * const success = await executeTask();
30
- * if (success) {
31
- * manager.recordSuccess('issue-executor');
32
- * } else {
33
- * manager.recordFailure('issue-executor', new Error('Task failed'));
34
- * }
35
- * }
36
- * ```
37
- */
38
- export declare class CircuitBreakerManager {
39
- private breakers;
40
- /**
41
- * Get an existing circuit breaker by name
42
- *
43
- * @param name - Circuit breaker name
44
- * @returns Circuit breaker or null if not found
45
- */
46
- get(name: string): CircuitBreaker | null;
47
- /**
48
- * Get or create a circuit breaker
49
- *
50
- * If a circuit breaker with the given name exists, returns it.
51
- * Otherwise creates a new one with the provided configuration.
52
- *
53
- * @param name - Circuit breaker name (typically task type)
54
- * @param config - Configuration for new circuit breaker
55
- * @returns Circuit breaker instance
56
- */
57
- getOrCreate(name: string, config?: CircuitBreaker['config']): CircuitBreaker;
58
- /**
59
- * Check if a circuit breaker allows execution
60
- *
61
- * Returns false if circuit is open and timeout hasn't elapsed yet.
62
- * Returns true for closed and half-open states.
63
- *
64
- * @param name - Circuit breaker name
65
- * @returns True if execution is allowed
66
- */
67
- canExecute(name: string): boolean;
68
- /**
69
- * Record a successful execution
70
- *
71
- * Updates metrics and may transition circuit from half-open to closed
72
- * if success threshold is met.
73
- *
74
- * @param name - Circuit breaker name
75
- */
76
- recordSuccess(name: string): void;
77
- /**
78
- * Record a failed execution
79
- *
80
- * Updates metrics and may transition circuit from closed/half-open to open
81
- * if failure threshold is met.
82
- *
83
- * @param name - Circuit breaker name
84
- * @param error - Error that occurred
85
- */
86
- recordFailure(name: string, error: Error): void;
87
- /**
88
- * Reset a circuit breaker to closed state
89
- *
90
- * Clears all failure counts and returns circuit to closed state.
91
- * Useful for manual recovery or after fixing underlying issues.
92
- *
93
- * @param name - Circuit breaker name
94
- */
95
- reset(name: string): void;
96
- /**
97
- * Get all circuit breakers
98
- *
99
- * @returns Map of circuit breaker name to breaker instance
100
- */
101
- getAll(): Map<string, CircuitBreaker>;
102
- /**
103
- * Check if enough time has passed to transition from open to half-open
104
- *
105
- * @param breaker - Circuit breaker to check
106
- * @returns True if timeout has elapsed
107
- * @private
108
- */
109
- private shouldTransitionToHalfOpen;
110
- /**
111
- * Get count of consecutive successes
112
- *
113
- * In a production implementation, this would track a sliding window
114
- * of recent attempts. For simplicity, we use total successful requests.
115
- *
116
- * @param breaker - Circuit breaker to check
117
- * @returns Number of consecutive successes
118
- * @private
119
- */
120
- private getConsecutiveSuccesses;
121
- }
122
- /**
123
- * Create a new circuit breaker instance
124
- *
125
- * Helper function to create a properly configured circuit breaker.
126
- *
127
- * @param name - Circuit breaker name
128
- * @param config - Circuit breaker configuration
129
- * @returns New circuit breaker instance
130
- *
131
- * @example
132
- * ```typescript
133
- * const breaker = createCircuitBreaker('api-calls', {
134
- * failureThreshold: 10,
135
- * successThreshold: 3,
136
- * timeout: 30000,
137
- * });
138
- * ```
139
- */
140
- export declare function createCircuitBreaker(name: string, config?: CircuitBreaker['config']): CircuitBreaker;
141
- /**
142
- * Check if a circuit breaker is in a specific state
143
- *
144
- * @param breaker - Circuit breaker to check
145
- * @param state - State to check for
146
- * @returns True if breaker is in the specified state
147
- */
148
- export declare function isInState(breaker: CircuitBreaker, state: CircuitState): boolean;
149
- /**
150
- * Get the current state of a circuit breaker
151
- *
152
- * @param breaker - Circuit breaker to check
153
- * @returns Current state
154
- */
155
- export declare function getState(breaker: CircuitBreaker): CircuitState;
156
- /**
157
- * Calculate failure rate for a circuit breaker
158
- *
159
- * @param breaker - Circuit breaker to analyze
160
- * @returns Failure rate (0-1) or 0 if no requests
161
- */
162
- export declare function getFailureRate(breaker: CircuitBreaker): number;
163
- /**
164
- * Calculate success rate for a circuit breaker
165
- *
166
- * @param breaker - Circuit breaker to analyze
167
- * @returns Success rate (0-1) or 0 if no requests
168
- */
169
- export declare function getSuccessRate(breaker: CircuitBreaker): number;
170
- //# sourceMappingURL=circuit-breaker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../../src/execution/resilience/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAqC;IAErD;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAIxC;;;;;;;;;OASG;IACH,WAAW,CACT,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,cAAc,CAAC,QAAQ,CAI9B,GACA,cAAc;IAqBjB;;;;;;;;OAQG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAkBjC;;;;;;;OAOG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAuBjC;;;;;;;;OAQG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAuB/C;;;;;;;OAOG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAWzB;;;;OAIG;IACH,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAIrC;;;;;;OAMG;IACH,OAAO,CAAC,0BAA0B;IAWlC;;;;;;;;;OASG;IACH,OAAO,CAAC,uBAAuB;CAKhC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,cAAc,CAAC,QAAQ,CAI9B,GACA,cAAc,CAWhB;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,YAAY,GAClB,OAAO,CAET;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,YAAY,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAM9D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAM9D"}
@@ -1,291 +0,0 @@
1
- /**
2
- * Circuit Breaker Implementation
3
- *
4
- * Implements the circuit breaker pattern for preventing cascading failures.
5
- * Tracks failures and successes, automatically opening when thresholds are
6
- * exceeded and recovering through half-open state.
7
- *
8
- * @module execution/resilience/circuit-breaker
9
- */
10
- /**
11
- * CircuitBreakerManager - Manages multiple circuit breakers
12
- *
13
- * Maintains a collection of circuit breakers, typically one per task type
14
- * or service. Provides methods for checking state, recording outcomes,
15
- * and managing circuit lifecycle.
16
- *
17
- * @example
18
- * ```typescript
19
- * const manager = new CircuitBreakerManager();
20
- * const breaker = manager.getOrCreate('issue-executor', {
21
- * failureThreshold: 5,
22
- * successThreshold: 2,
23
- * timeout: 60000,
24
- * });
25
- *
26
- * if (manager.canExecute('issue-executor')) {
27
- * // Execute task
28
- * const success = await executeTask();
29
- * if (success) {
30
- * manager.recordSuccess('issue-executor');
31
- * } else {
32
- * manager.recordFailure('issue-executor', new Error('Task failed'));
33
- * }
34
- * }
35
- * ```
36
- */
37
- export class CircuitBreakerManager {
38
- breakers = new Map();
39
- /**
40
- * Get an existing circuit breaker by name
41
- *
42
- * @param name - Circuit breaker name
43
- * @returns Circuit breaker or null if not found
44
- */
45
- get(name) {
46
- return this.breakers.get(name) || null;
47
- }
48
- /**
49
- * Get or create a circuit breaker
50
- *
51
- * If a circuit breaker with the given name exists, returns it.
52
- * Otherwise creates a new one with the provided configuration.
53
- *
54
- * @param name - Circuit breaker name (typically task type)
55
- * @param config - Configuration for new circuit breaker
56
- * @returns Circuit breaker instance
57
- */
58
- getOrCreate(name, config = {
59
- failureThreshold: 5,
60
- successThreshold: 2,
61
- timeout: 60000,
62
- }) {
63
- let breaker = this.breakers.get(name);
64
- if (!breaker) {
65
- breaker = {
66
- name,
67
- state: 'closed',
68
- config,
69
- metrics: {
70
- totalRequests: 0,
71
- failedRequests: 0,
72
- successfulRequests: 0,
73
- },
74
- };
75
- this.breakers.set(name, breaker);
76
- }
77
- return breaker;
78
- }
79
- /**
80
- * Check if a circuit breaker allows execution
81
- *
82
- * Returns false if circuit is open and timeout hasn't elapsed yet.
83
- * Returns true for closed and half-open states.
84
- *
85
- * @param name - Circuit breaker name
86
- * @returns True if execution is allowed
87
- */
88
- canExecute(name) {
89
- const breaker = this.breakers.get(name);
90
- if (!breaker) {
91
- return true; // No breaker means no restriction
92
- }
93
- if (breaker.state === 'open') {
94
- // Check if timeout has elapsed to transition to half-open
95
- if (this.shouldTransitionToHalfOpen(breaker)) {
96
- breaker.state = 'half-open';
97
- return true;
98
- }
99
- return false;
100
- }
101
- return true; // closed or half-open allows execution
102
- }
103
- /**
104
- * Record a successful execution
105
- *
106
- * Updates metrics and may transition circuit from half-open to closed
107
- * if success threshold is met.
108
- *
109
- * @param name - Circuit breaker name
110
- */
111
- recordSuccess(name) {
112
- const breaker = this.breakers.get(name);
113
- if (!breaker) {
114
- return;
115
- }
116
- breaker.metrics.totalRequests++;
117
- breaker.metrics.successfulRequests++;
118
- breaker.metrics.lastSuccessTime = new Date();
119
- // If in half-open state, check if we should close
120
- if (breaker.state === 'half-open') {
121
- // Count recent successes (simplified: use total for now)
122
- // In production, you'd track a sliding window of recent attempts
123
- const recentSuccesses = this.getConsecutiveSuccesses(breaker);
124
- if (recentSuccesses >= breaker.config.successThreshold) {
125
- breaker.state = 'closed';
126
- breaker.metrics.failedRequests = 0; // Reset failure count
127
- }
128
- }
129
- }
130
- /**
131
- * Record a failed execution
132
- *
133
- * Updates metrics and may transition circuit from closed/half-open to open
134
- * if failure threshold is met.
135
- *
136
- * @param name - Circuit breaker name
137
- * @param error - Error that occurred
138
- */
139
- recordFailure(name, error) {
140
- const breaker = this.breakers.get(name);
141
- if (!breaker) {
142
- return;
143
- }
144
- void error; // Error logged but not used in current implementation
145
- breaker.metrics.totalRequests++;
146
- breaker.metrics.failedRequests++;
147
- breaker.metrics.lastFailureTime = new Date();
148
- // Check if we should open the circuit
149
- if (breaker.state === 'closed') {
150
- if (breaker.metrics.failedRequests >= breaker.config.failureThreshold) {
151
- breaker.state = 'open';
152
- }
153
- }
154
- else if (breaker.state === 'half-open') {
155
- // Any failure in half-open state reopens the circuit
156
- breaker.state = 'open';
157
- }
158
- }
159
- /**
160
- * Reset a circuit breaker to closed state
161
- *
162
- * Clears all failure counts and returns circuit to closed state.
163
- * Useful for manual recovery or after fixing underlying issues.
164
- *
165
- * @param name - Circuit breaker name
166
- */
167
- reset(name) {
168
- const breaker = this.breakers.get(name);
169
- if (!breaker) {
170
- return;
171
- }
172
- breaker.state = 'closed';
173
- breaker.metrics.failedRequests = 0;
174
- breaker.metrics.successfulRequests = 0;
175
- }
176
- /**
177
- * Get all circuit breakers
178
- *
179
- * @returns Map of circuit breaker name to breaker instance
180
- */
181
- getAll() {
182
- return new Map(this.breakers);
183
- }
184
- /**
185
- * Check if enough time has passed to transition from open to half-open
186
- *
187
- * @param breaker - Circuit breaker to check
188
- * @returns True if timeout has elapsed
189
- * @private
190
- */
191
- shouldTransitionToHalfOpen(breaker) {
192
- if (!breaker.metrics.lastFailureTime) {
193
- return true;
194
- }
195
- const timeSinceFailure = Date.now() - breaker.metrics.lastFailureTime.getTime();
196
- return timeSinceFailure >= breaker.config.timeout;
197
- }
198
- /**
199
- * Get count of consecutive successes
200
- *
201
- * In a production implementation, this would track a sliding window
202
- * of recent attempts. For simplicity, we use total successful requests.
203
- *
204
- * @param breaker - Circuit breaker to check
205
- * @returns Number of consecutive successes
206
- * @private
207
- */
208
- getConsecutiveSuccesses(breaker) {
209
- // Simplified: In production, track recent attempts in a circular buffer
210
- // For now, use successful requests as a proxy
211
- return breaker.metrics.successfulRequests;
212
- }
213
- }
214
- /**
215
- * Create a new circuit breaker instance
216
- *
217
- * Helper function to create a properly configured circuit breaker.
218
- *
219
- * @param name - Circuit breaker name
220
- * @param config - Circuit breaker configuration
221
- * @returns New circuit breaker instance
222
- *
223
- * @example
224
- * ```typescript
225
- * const breaker = createCircuitBreaker('api-calls', {
226
- * failureThreshold: 10,
227
- * successThreshold: 3,
228
- * timeout: 30000,
229
- * });
230
- * ```
231
- */
232
- export function createCircuitBreaker(name, config = {
233
- failureThreshold: 5,
234
- successThreshold: 2,
235
- timeout: 60000,
236
- }) {
237
- return {
238
- name,
239
- state: 'closed',
240
- config,
241
- metrics: {
242
- totalRequests: 0,
243
- failedRequests: 0,
244
- successfulRequests: 0,
245
- },
246
- };
247
- }
248
- /**
249
- * Check if a circuit breaker is in a specific state
250
- *
251
- * @param breaker - Circuit breaker to check
252
- * @param state - State to check for
253
- * @returns True if breaker is in the specified state
254
- */
255
- export function isInState(breaker, state) {
256
- return breaker.state === state;
257
- }
258
- /**
259
- * Get the current state of a circuit breaker
260
- *
261
- * @param breaker - Circuit breaker to check
262
- * @returns Current state
263
- */
264
- export function getState(breaker) {
265
- return breaker.state;
266
- }
267
- /**
268
- * Calculate failure rate for a circuit breaker
269
- *
270
- * @param breaker - Circuit breaker to analyze
271
- * @returns Failure rate (0-1) or 0 if no requests
272
- */
273
- export function getFailureRate(breaker) {
274
- if (breaker.metrics.totalRequests === 0) {
275
- return 0;
276
- }
277
- return breaker.metrics.failedRequests / breaker.metrics.totalRequests;
278
- }
279
- /**
280
- * Calculate success rate for a circuit breaker
281
- *
282
- * @param breaker - Circuit breaker to analyze
283
- * @returns Success rate (0-1) or 0 if no requests
284
- */
285
- export function getSuccessRate(breaker) {
286
- if (breaker.metrics.totalRequests === 0) {
287
- return 0;
288
- }
289
- return breaker.metrics.successfulRequests / breaker.metrics.totalRequests;
290
- }
291
- //# sourceMappingURL=circuit-breaker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../../src/execution/resilience/circuit-breaker.ts"],"names":[],"mappings":"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"}
@@ -1,109 +0,0 @@
1
- /**
2
- * Resilient Executor Interface
3
- *
4
- * Core abstraction for resilient task execution. Provides methods for
5
- * executing tasks with retry logic, circuit breakers, and fault tolerance.
6
- *
7
- * @module execution/resilience/executor
8
- */
9
- import type { ExecutionTask } from '../engine/types.js';
10
- import type { RetryPolicy, CircuitBreaker, RetryMetrics, ResilientExecutionResult, RetryAttemptHandler, CircuitOpenHandler } from './types.js';
11
- /**
12
- * IResilientExecutor - Interface for resilient task execution
13
- *
14
- * Defines the contract for executors that add resilience patterns
15
- * (retry, circuit breaker) to task execution. Implementations wrap
16
- * the Engine Layer with fault tolerance mechanisms.
17
- *
18
- * @example
19
- * ```typescript
20
- * const executor = new ResilientExecutor(engine, {
21
- * maxAttempts: 3,
22
- * backoff: {
23
- * type: 'exponential',
24
- * baseDelayMs: 1000,
25
- * maxDelayMs: 30000,
26
- * jitter: true,
27
- * },
28
- * retryableErrors: ['timeout', 'ECONNREFUSED'],
29
- * retryableExitCodes: [1],
30
- * });
31
- *
32
- * const result = await executor.executeTask(task);
33
- * console.log(`Success after ${result.totalAttempts} attempts`);
34
- * ```
35
- */
36
- export interface IResilientExecutor {
37
- /**
38
- * Execute a single task with retry and circuit breaker
39
- *
40
- * Attempts to execute the task, retrying on transient failures according
41
- * to the retry policy. Checks circuit breaker before execution to prevent
42
- * cascading failures.
43
- *
44
- * @param task - The task to execute
45
- * @param policy - Optional retry policy (uses default if not provided)
46
- * @returns Promise resolving to enhanced result with retry information
47
- * @throws Error if circuit breaker is open or max retries exceeded
48
- */
49
- executeTask(task: ExecutionTask, policy?: RetryPolicy): Promise<ResilientExecutionResult>;
50
- /**
51
- * Execute multiple tasks with retry and circuit breaker
52
- *
53
- * Executes all tasks in parallel, each with its own retry logic.
54
- * Tasks of the same type share a circuit breaker.
55
- *
56
- * @param tasks - Array of tasks to execute
57
- * @param policy - Optional retry policy for all tasks
58
- * @returns Promise resolving to array of enhanced results
59
- */
60
- executeTasks(tasks: ExecutionTask[], policy?: RetryPolicy): Promise<ResilientExecutionResult[]>;
61
- /**
62
- * Get circuit breaker by name
63
- *
64
- * Circuit breakers are typically named by task type (e.g., 'issue', 'spec').
65
- * Returns null if no circuit breaker exists for the given name.
66
- *
67
- * @param name - Name of the circuit breaker
68
- * @returns Circuit breaker or null if not found
69
- */
70
- getCircuitBreaker(name: string): CircuitBreaker | null;
71
- /**
72
- * Reset a circuit breaker to closed state
73
- *
74
- * Manually resets a circuit breaker, clearing failure counts and
75
- * returning it to the closed state. Useful for recovery after
76
- * fixing underlying issues.
77
- *
78
- * @param name - Name of the circuit breaker to reset
79
- */
80
- resetCircuitBreaker(name: string): void;
81
- /**
82
- * Get aggregate retry metrics
83
- *
84
- * Returns statistics about retry behavior across all tasks,
85
- * including circuit breaker states.
86
- *
87
- * @returns Retry metrics (defensive copy)
88
- */
89
- getRetryMetrics(): RetryMetrics;
90
- /**
91
- * Register handler for retry attempt events
92
- *
93
- * Called whenever a task is retried after a failure. Useful for
94
- * logging, alerting, or monitoring retry patterns.
95
- *
96
- * @param handler - Callback function to invoke on each retry
97
- */
98
- onRetryAttempt(handler: RetryAttemptHandler): void;
99
- /**
100
- * Register handler for circuit breaker open events
101
- *
102
- * Called when a circuit breaker transitions from closed/half-open
103
- * to open state. Useful for alerting on service degradation.
104
- *
105
- * @param handler - Callback function to invoke when circuit opens
106
- */
107
- onCircuitOpen(handler: CircuitOpenHandler): void;
108
- }
109
- //# sourceMappingURL=executor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/execution/resilience/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,kBAAkB;IAKjC;;;;;;;;;;;OAWG;IACH,WAAW,CACT,IAAI,EAAE,aAAa,EACnB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAErC;;;;;;;;;OASG;IACH,YAAY,CACV,KAAK,EAAE,aAAa,EAAE,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAMvC;;;;;;;;OAQG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;IAEvD;;;;;;;;OAQG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAMxC;;;;;;;OAOG;IACH,eAAe,IAAI,YAAY,CAAC;IAEhC;;;;;;;OAOG;IACH,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAEnD;;;;;;;OAOG;IACH,aAAa,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAClD"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Resilient Executor Interface
3
- *
4
- * Core abstraction for resilient task execution. Provides methods for
5
- * executing tasks with retry logic, circuit breakers, and fault tolerance.
6
- *
7
- * @module execution/resilience/executor
8
- */
9
- export {};
10
- //# sourceMappingURL=executor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/execution/resilience/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -1,14 +0,0 @@
1
- /**
2
- * Resilience Layer Exports
3
- *
4
- * Layer 3: Task Execution Layer - Resilience & Retry
5
- *
6
- * @module execution/resilience
7
- */
8
- export type { RetryPolicy, CircuitState, CircuitBreaker, ExecutionAttempt, ResilientExecutionResult, RetryMetrics, RetryAttemptHandler, CircuitOpenHandler, } from './types.js';
9
- export { DEFAULT_RETRY_POLICY } from './types.js';
10
- export type { IResilientExecutor } from './executor.js';
11
- export { ResilientExecutor } from './resilient-executor.js';
12
- export { calculateBackoff, isRetryableError, isRetryableExitCode, isRetryableResult, sleep, createAttempt, calculateTotalRetryDelay, } from './retry.js';
13
- export { CircuitBreakerManager, createCircuitBreaker, isInState, getState, getFailureRate, getSuccessRate, } from './circuit-breaker.js';
14
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/execution/resilience/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,WAAW,EACX,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,wBAAwB,EACxB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGlD,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,EACL,aAAa,EACb,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,SAAS,EACT,QAAQ,EACR,cAAc,EACd,cAAc,GACf,MAAM,sBAAsB,CAAC"}
@@ -1,15 +0,0 @@
1
- /**
2
- * Resilience Layer Exports
3
- *
4
- * Layer 3: Task Execution Layer - Resilience & Retry
5
- *
6
- * @module execution/resilience
7
- */
8
- export { DEFAULT_RETRY_POLICY } from './types.js';
9
- // Implementation
10
- export { ResilientExecutor } from './resilient-executor.js';
11
- // Retry utilities
12
- export { calculateBackoff, isRetryableError, isRetryableExitCode, isRetryableResult, sleep, createAttempt, calculateTotalRetryDelay, } from './retry.js';
13
- // Circuit breaker
14
- export { CircuitBreakerManager, createCircuitBreaker, isInState, getState, getFailureRate, getSuccessRate, } from './circuit-breaker.js';
15
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/execution/resilience/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAKlD,iBAAiB;AACjB,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,kBAAkB;AAClB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,EACL,aAAa,EACb,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAEpB,kBAAkB;AAClB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,SAAS,EACT,QAAQ,EACR,cAAc,EACd,cAAc,GACf,MAAM,sBAAsB,CAAC"}