@litmers/cursorflow-orchestrator 0.1.20 → 0.1.26

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 (224) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/commands/cursorflow-clean.md +19 -0
  3. package/commands/cursorflow-runs.md +59 -0
  4. package/commands/cursorflow-stop.md +55 -0
  5. package/dist/cli/clean.js +171 -0
  6. package/dist/cli/clean.js.map +1 -1
  7. package/dist/cli/index.js +7 -0
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/cli/init.js +1 -1
  10. package/dist/cli/init.js.map +1 -1
  11. package/dist/cli/logs.js +83 -42
  12. package/dist/cli/logs.js.map +1 -1
  13. package/dist/cli/monitor.d.ts +7 -0
  14. package/dist/cli/monitor.js +1007 -189
  15. package/dist/cli/monitor.js.map +1 -1
  16. package/dist/cli/prepare.js +4 -3
  17. package/dist/cli/prepare.js.map +1 -1
  18. package/dist/cli/resume.js +188 -236
  19. package/dist/cli/resume.js.map +1 -1
  20. package/dist/cli/run.js +8 -3
  21. package/dist/cli/run.js.map +1 -1
  22. package/dist/cli/runs.d.ts +5 -0
  23. package/dist/cli/runs.js +214 -0
  24. package/dist/cli/runs.js.map +1 -0
  25. package/dist/cli/setup-commands.js +0 -0
  26. package/dist/cli/signal.js +1 -1
  27. package/dist/cli/signal.js.map +1 -1
  28. package/dist/cli/stop.d.ts +5 -0
  29. package/dist/cli/stop.js +215 -0
  30. package/dist/cli/stop.js.map +1 -0
  31. package/dist/cli/tasks.d.ts +10 -0
  32. package/dist/cli/tasks.js +165 -0
  33. package/dist/cli/tasks.js.map +1 -0
  34. package/dist/core/auto-recovery.d.ts +212 -0
  35. package/dist/core/auto-recovery.js +737 -0
  36. package/dist/core/auto-recovery.js.map +1 -0
  37. package/dist/core/failure-policy.d.ts +156 -0
  38. package/dist/core/failure-policy.js +488 -0
  39. package/dist/core/failure-policy.js.map +1 -0
  40. package/dist/core/orchestrator.d.ts +15 -2
  41. package/dist/core/orchestrator.js +392 -15
  42. package/dist/core/orchestrator.js.map +1 -1
  43. package/dist/core/reviewer.d.ts +2 -0
  44. package/dist/core/reviewer.js +2 -0
  45. package/dist/core/reviewer.js.map +1 -1
  46. package/dist/core/runner.d.ts +33 -10
  47. package/dist/core/runner.js +321 -146
  48. package/dist/core/runner.js.map +1 -1
  49. package/dist/services/logging/buffer.d.ts +67 -0
  50. package/dist/services/logging/buffer.js +309 -0
  51. package/dist/services/logging/buffer.js.map +1 -0
  52. package/dist/services/logging/console.d.ts +89 -0
  53. package/dist/services/logging/console.js +169 -0
  54. package/dist/services/logging/console.js.map +1 -0
  55. package/dist/services/logging/file-writer.d.ts +71 -0
  56. package/dist/services/logging/file-writer.js +516 -0
  57. package/dist/services/logging/file-writer.js.map +1 -0
  58. package/dist/services/logging/formatter.d.ts +39 -0
  59. package/dist/services/logging/formatter.js +227 -0
  60. package/dist/services/logging/formatter.js.map +1 -0
  61. package/dist/services/logging/index.d.ts +11 -0
  62. package/dist/services/logging/index.js +30 -0
  63. package/dist/services/logging/index.js.map +1 -0
  64. package/dist/services/logging/parser.d.ts +31 -0
  65. package/dist/services/logging/parser.js +222 -0
  66. package/dist/services/logging/parser.js.map +1 -0
  67. package/dist/services/process/index.d.ts +59 -0
  68. package/dist/services/process/index.js +257 -0
  69. package/dist/services/process/index.js.map +1 -0
  70. package/dist/types/agent.d.ts +20 -0
  71. package/dist/types/agent.js +6 -0
  72. package/dist/types/agent.js.map +1 -0
  73. package/dist/types/config.d.ts +65 -0
  74. package/dist/types/config.js +6 -0
  75. package/dist/types/config.js.map +1 -0
  76. package/dist/types/events.d.ts +125 -0
  77. package/dist/types/events.js +6 -0
  78. package/dist/types/events.js.map +1 -0
  79. package/dist/types/index.d.ts +12 -0
  80. package/dist/types/index.js +37 -0
  81. package/dist/types/index.js.map +1 -0
  82. package/dist/types/lane.d.ts +43 -0
  83. package/dist/types/lane.js +6 -0
  84. package/dist/types/lane.js.map +1 -0
  85. package/dist/types/logging.d.ts +71 -0
  86. package/dist/types/logging.js +16 -0
  87. package/dist/types/logging.js.map +1 -0
  88. package/dist/types/review.d.ts +17 -0
  89. package/dist/types/review.js +6 -0
  90. package/dist/types/review.js.map +1 -0
  91. package/dist/types/run.d.ts +32 -0
  92. package/dist/types/run.js +6 -0
  93. package/dist/types/run.js.map +1 -0
  94. package/dist/types/task.d.ts +71 -0
  95. package/dist/types/task.js +6 -0
  96. package/dist/types/task.js.map +1 -0
  97. package/dist/ui/components.d.ts +134 -0
  98. package/dist/ui/components.js +389 -0
  99. package/dist/ui/components.js.map +1 -0
  100. package/dist/ui/log-viewer.d.ts +49 -0
  101. package/dist/ui/log-viewer.js +449 -0
  102. package/dist/ui/log-viewer.js.map +1 -0
  103. package/dist/utils/checkpoint.d.ts +87 -0
  104. package/dist/utils/checkpoint.js +317 -0
  105. package/dist/utils/checkpoint.js.map +1 -0
  106. package/dist/utils/config.d.ts +4 -0
  107. package/dist/utils/config.js +11 -2
  108. package/dist/utils/config.js.map +1 -1
  109. package/dist/utils/cursor-agent.js.map +1 -1
  110. package/dist/utils/dependency.d.ts +74 -0
  111. package/dist/utils/dependency.js +420 -0
  112. package/dist/utils/dependency.js.map +1 -0
  113. package/dist/utils/doctor.js +10 -5
  114. package/dist/utils/doctor.js.map +1 -1
  115. package/dist/utils/enhanced-logger.d.ts +10 -33
  116. package/dist/utils/enhanced-logger.js +94 -9
  117. package/dist/utils/enhanced-logger.js.map +1 -1
  118. package/dist/utils/git.d.ts +121 -0
  119. package/dist/utils/git.js +322 -2
  120. package/dist/utils/git.js.map +1 -1
  121. package/dist/utils/health.d.ts +91 -0
  122. package/dist/utils/health.js +556 -0
  123. package/dist/utils/health.js.map +1 -0
  124. package/dist/utils/lock.d.ts +95 -0
  125. package/dist/utils/lock.js +332 -0
  126. package/dist/utils/lock.js.map +1 -0
  127. package/dist/utils/log-buffer.d.ts +17 -0
  128. package/dist/utils/log-buffer.js +14 -0
  129. package/dist/utils/log-buffer.js.map +1 -0
  130. package/dist/utils/log-constants.d.ts +23 -0
  131. package/dist/utils/log-constants.js +28 -0
  132. package/dist/utils/log-constants.js.map +1 -0
  133. package/dist/utils/log-formatter.d.ts +9 -0
  134. package/dist/utils/log-formatter.js +113 -70
  135. package/dist/utils/log-formatter.js.map +1 -1
  136. package/dist/utils/log-service.d.ts +19 -0
  137. package/dist/utils/log-service.js +47 -0
  138. package/dist/utils/log-service.js.map +1 -0
  139. package/dist/utils/logger.d.ts +46 -27
  140. package/dist/utils/logger.js +82 -60
  141. package/dist/utils/logger.js.map +1 -1
  142. package/dist/utils/process-manager.d.ts +21 -0
  143. package/dist/utils/process-manager.js +138 -0
  144. package/dist/utils/process-manager.js.map +1 -0
  145. package/dist/utils/retry.d.ts +121 -0
  146. package/dist/utils/retry.js +374 -0
  147. package/dist/utils/retry.js.map +1 -0
  148. package/dist/utils/run-service.d.ts +88 -0
  149. package/dist/utils/run-service.js +412 -0
  150. package/dist/utils/run-service.js.map +1 -0
  151. package/dist/utils/state.d.ts +58 -2
  152. package/dist/utils/state.js +306 -3
  153. package/dist/utils/state.js.map +1 -1
  154. package/dist/utils/task-service.d.ts +82 -0
  155. package/dist/utils/task-service.js +348 -0
  156. package/dist/utils/task-service.js.map +1 -0
  157. package/dist/utils/types.d.ts +2 -272
  158. package/dist/utils/types.js +16 -0
  159. package/dist/utils/types.js.map +1 -1
  160. package/package.json +38 -23
  161. package/scripts/ai-security-check.js +0 -1
  162. package/scripts/local-security-gate.sh +0 -0
  163. package/scripts/monitor-lanes.sh +94 -0
  164. package/scripts/patches/test-cursor-agent.js +0 -1
  165. package/scripts/release.sh +0 -0
  166. package/scripts/setup-security.sh +0 -0
  167. package/scripts/stream-logs.sh +72 -0
  168. package/scripts/verify-and-fix.sh +0 -0
  169. package/src/cli/clean.ts +180 -0
  170. package/src/cli/index.ts +7 -0
  171. package/src/cli/init.ts +1 -1
  172. package/src/cli/logs.ts +79 -42
  173. package/src/cli/monitor.ts +1815 -899
  174. package/src/cli/prepare.ts +4 -3
  175. package/src/cli/resume.ts +220 -277
  176. package/src/cli/run.ts +9 -3
  177. package/src/cli/runs.ts +212 -0
  178. package/src/cli/setup-commands.ts +0 -0
  179. package/src/cli/signal.ts +1 -1
  180. package/src/cli/stop.ts +209 -0
  181. package/src/cli/tasks.ts +154 -0
  182. package/src/core/auto-recovery.ts +909 -0
  183. package/src/core/failure-policy.ts +592 -0
  184. package/src/core/orchestrator.ts +1131 -675
  185. package/src/core/reviewer.ts +4 -0
  186. package/src/core/runner.ts +388 -162
  187. package/src/services/logging/buffer.ts +326 -0
  188. package/src/services/logging/console.ts +193 -0
  189. package/src/services/logging/file-writer.ts +526 -0
  190. package/src/services/logging/formatter.ts +268 -0
  191. package/src/services/logging/index.ts +16 -0
  192. package/src/services/logging/parser.ts +232 -0
  193. package/src/services/process/index.ts +261 -0
  194. package/src/types/agent.ts +24 -0
  195. package/src/types/config.ts +79 -0
  196. package/src/types/events.ts +156 -0
  197. package/src/types/index.ts +29 -0
  198. package/src/types/lane.ts +56 -0
  199. package/src/types/logging.ts +96 -0
  200. package/src/types/review.ts +20 -0
  201. package/src/types/run.ts +37 -0
  202. package/src/types/task.ts +79 -0
  203. package/src/ui/components.ts +430 -0
  204. package/src/ui/log-viewer.ts +485 -0
  205. package/src/utils/checkpoint.ts +374 -0
  206. package/src/utils/config.ts +11 -2
  207. package/src/utils/cursor-agent.ts +1 -1
  208. package/src/utils/dependency.ts +482 -0
  209. package/src/utils/doctor.ts +11 -5
  210. package/src/utils/enhanced-logger.ts +108 -49
  211. package/src/utils/git.ts +374 -2
  212. package/src/utils/health.ts +596 -0
  213. package/src/utils/lock.ts +346 -0
  214. package/src/utils/log-buffer.ts +28 -0
  215. package/src/utils/log-constants.ts +26 -0
  216. package/src/utils/log-formatter.ts +120 -37
  217. package/src/utils/log-service.ts +49 -0
  218. package/src/utils/logger.ts +100 -51
  219. package/src/utils/process-manager.ts +100 -0
  220. package/src/utils/retry.ts +413 -0
  221. package/src/utils/run-service.ts +433 -0
  222. package/src/utils/state.ts +369 -3
  223. package/src/utils/task-service.ts +370 -0
  224. package/src/utils/types.ts +2 -315
@@ -0,0 +1,374 @@
1
+ "use strict";
2
+ /**
3
+ * Enhanced retry logic with exponential backoff and circuit breaker
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.CircuitBreaker = exports.CircuitState = exports.DEFAULT_CIRCUIT_BREAKER_CONFIG = exports.DEFAULT_RETRY_CONFIG = void 0;
40
+ exports.getCircuitBreaker = getCircuitBreaker;
41
+ exports.calculateDelay = calculateDelay;
42
+ exports.sleep = sleep;
43
+ exports.withTimeout = withTimeout;
44
+ exports.withEnhancedRetry = withEnhancedRetry;
45
+ exports.isTransientError = isTransientError;
46
+ exports.isPermanentError = isPermanentError;
47
+ exports.defaultShouldRetry = defaultShouldRetry;
48
+ const logger = __importStar(require("./logger"));
49
+ exports.DEFAULT_RETRY_CONFIG = {
50
+ maxRetries: 3,
51
+ baseDelayMs: 1000,
52
+ maxDelayMs: 30000,
53
+ backoffFactor: 2,
54
+ jitter: true,
55
+ attemptTimeoutMs: undefined,
56
+ };
57
+ exports.DEFAULT_CIRCUIT_BREAKER_CONFIG = {
58
+ failureThreshold: 5,
59
+ resetTimeoutMs: 60000,
60
+ successThreshold: 2,
61
+ };
62
+ var CircuitState;
63
+ (function (CircuitState) {
64
+ CircuitState["CLOSED"] = "CLOSED";
65
+ CircuitState["OPEN"] = "OPEN";
66
+ CircuitState["HALF_OPEN"] = "HALF_OPEN";
67
+ })(CircuitState || (exports.CircuitState = CircuitState = {}));
68
+ /**
69
+ * Circuit breaker implementation for managing service availability
70
+ */
71
+ class CircuitBreaker {
72
+ state = CircuitState.CLOSED;
73
+ failureCount = 0;
74
+ successCount = 0;
75
+ lastFailureTime = 0;
76
+ config;
77
+ name;
78
+ constructor(name, config = {}) {
79
+ this.name = name;
80
+ this.config = { ...exports.DEFAULT_CIRCUIT_BREAKER_CONFIG, ...config };
81
+ }
82
+ /**
83
+ * Check if circuit allows a call
84
+ */
85
+ canCall() {
86
+ if (this.state === CircuitState.CLOSED) {
87
+ return true;
88
+ }
89
+ if (this.state === CircuitState.OPEN) {
90
+ // Check if enough time has passed to try again
91
+ if (Date.now() - this.lastFailureTime >= this.config.resetTimeoutMs) {
92
+ this.state = CircuitState.HALF_OPEN;
93
+ this.successCount = 0;
94
+ logger.info(`[CircuitBreaker:${this.name}] Transitioning to HALF_OPEN`);
95
+ return true;
96
+ }
97
+ return false;
98
+ }
99
+ // HALF_OPEN - allow limited calls
100
+ return true;
101
+ }
102
+ /**
103
+ * Record a successful call
104
+ */
105
+ recordSuccess() {
106
+ if (this.state === CircuitState.HALF_OPEN) {
107
+ this.successCount++;
108
+ if (this.successCount >= this.config.successThreshold) {
109
+ this.state = CircuitState.CLOSED;
110
+ this.failureCount = 0;
111
+ logger.info(`[CircuitBreaker:${this.name}] Circuit CLOSED after recovery`);
112
+ }
113
+ }
114
+ else if (this.state === CircuitState.CLOSED) {
115
+ // Reset failure count on success
116
+ this.failureCount = Math.max(0, this.failureCount - 1);
117
+ }
118
+ }
119
+ /**
120
+ * Record a failed call
121
+ */
122
+ recordFailure() {
123
+ this.failureCount++;
124
+ this.lastFailureTime = Date.now();
125
+ if (this.state === CircuitState.HALF_OPEN) {
126
+ // Immediately open circuit on failure in half-open state
127
+ this.state = CircuitState.OPEN;
128
+ logger.warn(`[CircuitBreaker:${this.name}] Circuit OPEN (failure in half-open state)`);
129
+ }
130
+ else if (this.state === CircuitState.CLOSED && this.failureCount >= this.config.failureThreshold) {
131
+ this.state = CircuitState.OPEN;
132
+ logger.warn(`[CircuitBreaker:${this.name}] Circuit OPEN (threshold reached: ${this.failureCount} failures)`);
133
+ }
134
+ }
135
+ /**
136
+ * Get current circuit state
137
+ */
138
+ getState() {
139
+ return this.state;
140
+ }
141
+ /**
142
+ * Get time until circuit might close (for OPEN state)
143
+ */
144
+ getTimeUntilRetry() {
145
+ if (this.state !== CircuitState.OPEN) {
146
+ return 0;
147
+ }
148
+ return Math.max(0, this.config.resetTimeoutMs - (Date.now() - this.lastFailureTime));
149
+ }
150
+ /**
151
+ * Force reset the circuit breaker
152
+ */
153
+ reset() {
154
+ this.state = CircuitState.CLOSED;
155
+ this.failureCount = 0;
156
+ this.successCount = 0;
157
+ this.lastFailureTime = 0;
158
+ }
159
+ /**
160
+ * Get circuit breaker status for monitoring
161
+ */
162
+ getStatus() {
163
+ return {
164
+ state: this.state,
165
+ failureCount: this.failureCount,
166
+ timeUntilRetry: this.getTimeUntilRetry(),
167
+ };
168
+ }
169
+ }
170
+ exports.CircuitBreaker = CircuitBreaker;
171
+ /**
172
+ * Global circuit breaker registry
173
+ */
174
+ const circuitBreakers = new Map();
175
+ /**
176
+ * Get or create a circuit breaker by name
177
+ */
178
+ function getCircuitBreaker(name, config) {
179
+ let breaker = circuitBreakers.get(name);
180
+ if (!breaker) {
181
+ breaker = new CircuitBreaker(name, config);
182
+ circuitBreakers.set(name, breaker);
183
+ }
184
+ return breaker;
185
+ }
186
+ /**
187
+ * Calculate delay with exponential backoff and optional jitter
188
+ */
189
+ function calculateDelay(attempt, config) {
190
+ let delay = config.baseDelayMs * Math.pow(config.backoffFactor, attempt);
191
+ delay = Math.min(delay, config.maxDelayMs);
192
+ if (config.jitter) {
193
+ // Add random jitter of ±25%
194
+ const jitterRange = delay * 0.25;
195
+ delay = delay - jitterRange + Math.random() * jitterRange * 2;
196
+ }
197
+ return Math.round(delay);
198
+ }
199
+ /**
200
+ * Sleep for specified milliseconds
201
+ */
202
+ function sleep(ms) {
203
+ return new Promise(resolve => setTimeout(resolve, ms));
204
+ }
205
+ /**
206
+ * Wrap a promise with timeout
207
+ */
208
+ function withTimeout(promise, timeoutMs, message) {
209
+ return new Promise((resolve, reject) => {
210
+ const timer = setTimeout(() => {
211
+ reject(new Error(message || `Operation timed out after ${timeoutMs}ms`));
212
+ }, timeoutMs);
213
+ promise
214
+ .then(result => {
215
+ clearTimeout(timer);
216
+ resolve(result);
217
+ })
218
+ .catch(error => {
219
+ clearTimeout(timer);
220
+ reject(error);
221
+ });
222
+ });
223
+ }
224
+ /**
225
+ * Execute a function with enhanced retry logic
226
+ */
227
+ async function withEnhancedRetry(fn, options = {}) {
228
+ const config = { ...exports.DEFAULT_RETRY_CONFIG, ...options.config };
229
+ const label = options.label || 'operation';
230
+ const startTime = Date.now();
231
+ // Get circuit breaker if specified
232
+ let breaker;
233
+ if (options.circuitBreaker) {
234
+ breaker = typeof options.circuitBreaker === 'string'
235
+ ? getCircuitBreaker(options.circuitBreaker)
236
+ : options.circuitBreaker;
237
+ }
238
+ // Check circuit breaker before starting
239
+ if (breaker && !breaker.canCall()) {
240
+ const waitTime = breaker.getTimeUntilRetry();
241
+ return {
242
+ success: false,
243
+ error: new Error(`Circuit breaker is OPEN. Retry in ${Math.round(waitTime / 1000)}s`),
244
+ attempts: 0,
245
+ totalTimeMs: Date.now() - startTime,
246
+ };
247
+ }
248
+ let lastError;
249
+ for (let attempt = 0; attempt <= config.maxRetries; attempt++) {
250
+ try {
251
+ // Execute with optional timeout
252
+ let result;
253
+ if (config.attemptTimeoutMs) {
254
+ result = await withTimeout(fn(), config.attemptTimeoutMs, `${label} timed out`);
255
+ }
256
+ else {
257
+ result = await fn();
258
+ }
259
+ // Success - record in circuit breaker
260
+ if (breaker) {
261
+ breaker.recordSuccess();
262
+ }
263
+ return {
264
+ success: true,
265
+ result,
266
+ attempts: attempt + 1,
267
+ totalTimeMs: Date.now() - startTime,
268
+ };
269
+ }
270
+ catch (error) {
271
+ lastError = error;
272
+ // Record failure in circuit breaker
273
+ if (breaker) {
274
+ breaker.recordFailure();
275
+ if (!breaker.canCall()) {
276
+ logger.warn(`[${label}] Circuit breaker opened, stopping retries`);
277
+ break;
278
+ }
279
+ }
280
+ // Check if we should retry
281
+ if (options.shouldRetry && !options.shouldRetry(error, attempt)) {
282
+ logger.warn(`[${label}] Error is not retryable: ${error.message}`);
283
+ break;
284
+ }
285
+ // Check if we have more retries
286
+ if (attempt >= config.maxRetries) {
287
+ logger.error(`[${label}] All ${config.maxRetries + 1} attempts failed`);
288
+ break;
289
+ }
290
+ // Calculate delay
291
+ const delay = calculateDelay(attempt, config);
292
+ // Notify on retry
293
+ if (options.onRetry) {
294
+ options.onRetry(error, attempt, delay);
295
+ }
296
+ else {
297
+ logger.warn(`[${label}] Attempt ${attempt + 1} failed: ${error.message}. Retrying in ${delay}ms...`);
298
+ }
299
+ await sleep(delay);
300
+ }
301
+ }
302
+ return {
303
+ success: false,
304
+ error: lastError,
305
+ attempts: config.maxRetries + 1,
306
+ totalTimeMs: Date.now() - startTime,
307
+ };
308
+ }
309
+ /**
310
+ * Check if an error is transient and worth retrying
311
+ */
312
+ function isTransientError(error) {
313
+ const message = error.message.toLowerCase();
314
+ // Network errors
315
+ if (message.includes('econnreset') ||
316
+ message.includes('econnrefused') ||
317
+ message.includes('etimedout') ||
318
+ message.includes('enotfound') ||
319
+ message.includes('socket hang up')) {
320
+ return true;
321
+ }
322
+ // Service unavailable
323
+ if (message.includes('unavailable') ||
324
+ message.includes('503') ||
325
+ message.includes('502') ||
326
+ message.includes('504')) {
327
+ return true;
328
+ }
329
+ // Rate limiting (should retry after delay)
330
+ if (message.includes('rate limit') ||
331
+ message.includes('429') ||
332
+ message.includes('too many requests')) {
333
+ return true;
334
+ }
335
+ // Temporary server errors
336
+ if (message.includes('internal server error') ||
337
+ message.includes('500') ||
338
+ message.includes('temporarily')) {
339
+ return true;
340
+ }
341
+ return false;
342
+ }
343
+ /**
344
+ * Check if an error is permanent and should not be retried
345
+ */
346
+ function isPermanentError(error) {
347
+ const message = error.message.toLowerCase();
348
+ // Authentication errors
349
+ if (message.includes('unauthorized') ||
350
+ message.includes('401') ||
351
+ message.includes('forbidden') ||
352
+ message.includes('403') ||
353
+ message.includes('not authenticated')) {
354
+ return true;
355
+ }
356
+ // Configuration/setup errors
357
+ if (message.includes('not found') ||
358
+ message.includes('404') ||
359
+ message.includes('invalid configuration') ||
360
+ message.includes('invalid api key')) {
361
+ return true;
362
+ }
363
+ return false;
364
+ }
365
+ /**
366
+ * Default retry predicate
367
+ */
368
+ function defaultShouldRetry(error, attempt) {
369
+ if (isPermanentError(error)) {
370
+ return false;
371
+ }
372
+ return isTransientError(error);
373
+ }
374
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * RunService - Manages CursorFlow run history and active processes
3
+ *
4
+ * Provides:
5
+ * - List all runs (with filtering by status)
6
+ * - Get detailed run information
7
+ * - Stop running processes
8
+ * - Delete run resources
9
+ */
10
+ import { RunStatus, RunInfo } from './types';
11
+ export interface RunFilter {
12
+ status?: RunStatus;
13
+ limit?: number;
14
+ taskName?: string;
15
+ }
16
+ export interface RunResources {
17
+ branches: string[];
18
+ worktrees: string[];
19
+ logSize: number;
20
+ }
21
+ export declare class RunService {
22
+ private logsDir;
23
+ private runsDir;
24
+ constructor(logsDir: string);
25
+ /**
26
+ * List all runs with optional filtering
27
+ */
28
+ listRuns(filter?: RunFilter): RunInfo[];
29
+ /**
30
+ * Get detailed information about a specific run
31
+ */
32
+ getRunInfo(runId: string): RunInfo | null;
33
+ /**
34
+ * Get currently active (running) runs
35
+ */
36
+ getActiveRuns(): RunInfo[];
37
+ /**
38
+ * Calculate overall run status based on lane statuses
39
+ */
40
+ private calculateRunStatus;
41
+ /**
42
+ * Extract timestamp from run ID (format: run-TIMESTAMP)
43
+ */
44
+ private extractTimestampFromRunId;
45
+ /**
46
+ * Extract task name from run ID or directory structure
47
+ */
48
+ private extractTaskNameFromRunId;
49
+ /**
50
+ * Get run end time from lane states
51
+ */
52
+ private getRunEndTime;
53
+ /**
54
+ * Get resources linked to a run (branches, worktrees)
55
+ */
56
+ getLinkedResources(runId: string): RunResources;
57
+ /**
58
+ * Stop a running workflow
59
+ */
60
+ stopRun(runId: string): boolean;
61
+ /**
62
+ * Stop all running workflows
63
+ */
64
+ stopAllRuns(): number;
65
+ /**
66
+ * Delete a run and optionally its associated resources
67
+ */
68
+ deleteRun(runId: string, options?: {
69
+ includeBranches?: boolean;
70
+ force?: boolean;
71
+ }): void;
72
+ /**
73
+ * Calculate directory size in bytes
74
+ */
75
+ private getDirectorySize;
76
+ /**
77
+ * Format duration for display
78
+ */
79
+ static formatDuration(ms: number): string;
80
+ /**
81
+ * Format bytes for display
82
+ */
83
+ static formatBytes(bytes: number): string;
84
+ }
85
+ /**
86
+ * Create a RunService instance with default paths
87
+ */
88
+ export declare function createRunService(projectRoot?: string): RunService;