@litmers/cursorflow-orchestrator 0.1.18 → 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 (234) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +25 -7
  3. package/commands/cursorflow-clean.md +19 -0
  4. package/commands/cursorflow-runs.md +59 -0
  5. package/commands/cursorflow-stop.md +55 -0
  6. package/dist/cli/clean.js +178 -6
  7. package/dist/cli/clean.js.map +1 -1
  8. package/dist/cli/index.js +12 -1
  9. package/dist/cli/index.js.map +1 -1
  10. package/dist/cli/init.js +8 -7
  11. package/dist/cli/init.js.map +1 -1
  12. package/dist/cli/logs.js +126 -77
  13. package/dist/cli/logs.js.map +1 -1
  14. package/dist/cli/monitor.d.ts +7 -0
  15. package/dist/cli/monitor.js +1021 -202
  16. package/dist/cli/monitor.js.map +1 -1
  17. package/dist/cli/prepare.js +39 -21
  18. package/dist/cli/prepare.js.map +1 -1
  19. package/dist/cli/resume.js +268 -163
  20. package/dist/cli/resume.js.map +1 -1
  21. package/dist/cli/run.js +11 -5
  22. package/dist/cli/run.js.map +1 -1
  23. package/dist/cli/runs.d.ts +5 -0
  24. package/dist/cli/runs.js +214 -0
  25. package/dist/cli/runs.js.map +1 -0
  26. package/dist/cli/setup-commands.js +0 -0
  27. package/dist/cli/signal.js +8 -8
  28. package/dist/cli/signal.js.map +1 -1
  29. package/dist/cli/stop.d.ts +5 -0
  30. package/dist/cli/stop.js +215 -0
  31. package/dist/cli/stop.js.map +1 -0
  32. package/dist/cli/tasks.d.ts +10 -0
  33. package/dist/cli/tasks.js +165 -0
  34. package/dist/cli/tasks.js.map +1 -0
  35. package/dist/core/auto-recovery.d.ts +212 -0
  36. package/dist/core/auto-recovery.js +737 -0
  37. package/dist/core/auto-recovery.js.map +1 -0
  38. package/dist/core/failure-policy.d.ts +156 -0
  39. package/dist/core/failure-policy.js +488 -0
  40. package/dist/core/failure-policy.js.map +1 -0
  41. package/dist/core/orchestrator.d.ts +16 -2
  42. package/dist/core/orchestrator.js +439 -105
  43. package/dist/core/orchestrator.js.map +1 -1
  44. package/dist/core/reviewer.d.ts +2 -0
  45. package/dist/core/reviewer.js +2 -0
  46. package/dist/core/reviewer.js.map +1 -1
  47. package/dist/core/runner.d.ts +33 -10
  48. package/dist/core/runner.js +374 -164
  49. package/dist/core/runner.js.map +1 -1
  50. package/dist/services/logging/buffer.d.ts +67 -0
  51. package/dist/services/logging/buffer.js +309 -0
  52. package/dist/services/logging/buffer.js.map +1 -0
  53. package/dist/services/logging/console.d.ts +89 -0
  54. package/dist/services/logging/console.js +169 -0
  55. package/dist/services/logging/console.js.map +1 -0
  56. package/dist/services/logging/file-writer.d.ts +71 -0
  57. package/dist/services/logging/file-writer.js +516 -0
  58. package/dist/services/logging/file-writer.js.map +1 -0
  59. package/dist/services/logging/formatter.d.ts +39 -0
  60. package/dist/services/logging/formatter.js +227 -0
  61. package/dist/services/logging/formatter.js.map +1 -0
  62. package/dist/services/logging/index.d.ts +11 -0
  63. package/dist/services/logging/index.js +30 -0
  64. package/dist/services/logging/index.js.map +1 -0
  65. package/dist/services/logging/parser.d.ts +31 -0
  66. package/dist/services/logging/parser.js +222 -0
  67. package/dist/services/logging/parser.js.map +1 -0
  68. package/dist/services/process/index.d.ts +59 -0
  69. package/dist/services/process/index.js +257 -0
  70. package/dist/services/process/index.js.map +1 -0
  71. package/dist/types/agent.d.ts +20 -0
  72. package/dist/types/agent.js +6 -0
  73. package/dist/types/agent.js.map +1 -0
  74. package/dist/types/config.d.ts +65 -0
  75. package/dist/types/config.js +6 -0
  76. package/dist/types/config.js.map +1 -0
  77. package/dist/types/events.d.ts +125 -0
  78. package/dist/types/events.js +6 -0
  79. package/dist/types/events.js.map +1 -0
  80. package/dist/types/index.d.ts +12 -0
  81. package/dist/types/index.js +37 -0
  82. package/dist/types/index.js.map +1 -0
  83. package/dist/types/lane.d.ts +43 -0
  84. package/dist/types/lane.js +6 -0
  85. package/dist/types/lane.js.map +1 -0
  86. package/dist/types/logging.d.ts +71 -0
  87. package/dist/types/logging.js +16 -0
  88. package/dist/types/logging.js.map +1 -0
  89. package/dist/types/review.d.ts +17 -0
  90. package/dist/types/review.js +6 -0
  91. package/dist/types/review.js.map +1 -0
  92. package/dist/types/run.d.ts +32 -0
  93. package/dist/types/run.js +6 -0
  94. package/dist/types/run.js.map +1 -0
  95. package/dist/types/task.d.ts +71 -0
  96. package/dist/types/task.js +6 -0
  97. package/dist/types/task.js.map +1 -0
  98. package/dist/ui/components.d.ts +134 -0
  99. package/dist/ui/components.js +389 -0
  100. package/dist/ui/components.js.map +1 -0
  101. package/dist/ui/log-viewer.d.ts +49 -0
  102. package/dist/ui/log-viewer.js +449 -0
  103. package/dist/ui/log-viewer.js.map +1 -0
  104. package/dist/utils/checkpoint.d.ts +87 -0
  105. package/dist/utils/checkpoint.js +317 -0
  106. package/dist/utils/checkpoint.js.map +1 -0
  107. package/dist/utils/config.d.ts +4 -0
  108. package/dist/utils/config.js +18 -8
  109. package/dist/utils/config.js.map +1 -1
  110. package/dist/utils/cursor-agent.js.map +1 -1
  111. package/dist/utils/dependency.d.ts +74 -0
  112. package/dist/utils/dependency.js +420 -0
  113. package/dist/utils/dependency.js.map +1 -0
  114. package/dist/utils/doctor.js +17 -11
  115. package/dist/utils/doctor.js.map +1 -1
  116. package/dist/utils/enhanced-logger.d.ts +10 -33
  117. package/dist/utils/enhanced-logger.js +108 -20
  118. package/dist/utils/enhanced-logger.js.map +1 -1
  119. package/dist/utils/git.d.ts +121 -0
  120. package/dist/utils/git.js +484 -11
  121. package/dist/utils/git.js.map +1 -1
  122. package/dist/utils/health.d.ts +91 -0
  123. package/dist/utils/health.js +556 -0
  124. package/dist/utils/health.js.map +1 -0
  125. package/dist/utils/lock.d.ts +95 -0
  126. package/dist/utils/lock.js +332 -0
  127. package/dist/utils/lock.js.map +1 -0
  128. package/dist/utils/log-buffer.d.ts +17 -0
  129. package/dist/utils/log-buffer.js +14 -0
  130. package/dist/utils/log-buffer.js.map +1 -0
  131. package/dist/utils/log-constants.d.ts +23 -0
  132. package/dist/utils/log-constants.js +28 -0
  133. package/dist/utils/log-constants.js.map +1 -0
  134. package/dist/utils/log-formatter.d.ts +25 -0
  135. package/dist/utils/log-formatter.js +237 -0
  136. package/dist/utils/log-formatter.js.map +1 -0
  137. package/dist/utils/log-service.d.ts +19 -0
  138. package/dist/utils/log-service.js +47 -0
  139. package/dist/utils/log-service.js.map +1 -0
  140. package/dist/utils/logger.d.ts +46 -27
  141. package/dist/utils/logger.js +82 -60
  142. package/dist/utils/logger.js.map +1 -1
  143. package/dist/utils/path.d.ts +19 -0
  144. package/dist/utils/path.js +77 -0
  145. package/dist/utils/path.js.map +1 -0
  146. package/dist/utils/process-manager.d.ts +21 -0
  147. package/dist/utils/process-manager.js +138 -0
  148. package/dist/utils/process-manager.js.map +1 -0
  149. package/dist/utils/retry.d.ts +121 -0
  150. package/dist/utils/retry.js +374 -0
  151. package/dist/utils/retry.js.map +1 -0
  152. package/dist/utils/run-service.d.ts +88 -0
  153. package/dist/utils/run-service.js +412 -0
  154. package/dist/utils/run-service.js.map +1 -0
  155. package/dist/utils/state.d.ts +62 -3
  156. package/dist/utils/state.js +317 -11
  157. package/dist/utils/state.js.map +1 -1
  158. package/dist/utils/task-service.d.ts +82 -0
  159. package/dist/utils/task-service.js +348 -0
  160. package/dist/utils/task-service.js.map +1 -0
  161. package/dist/utils/template.d.ts +14 -0
  162. package/dist/utils/template.js +122 -0
  163. package/dist/utils/template.js.map +1 -0
  164. package/dist/utils/types.d.ts +2 -271
  165. package/dist/utils/types.js +16 -0
  166. package/dist/utils/types.js.map +1 -1
  167. package/package.json +38 -23
  168. package/scripts/ai-security-check.js +0 -1
  169. package/scripts/local-security-gate.sh +0 -0
  170. package/scripts/monitor-lanes.sh +94 -0
  171. package/scripts/patches/test-cursor-agent.js +0 -1
  172. package/scripts/release.sh +0 -0
  173. package/scripts/setup-security.sh +0 -0
  174. package/scripts/stream-logs.sh +72 -0
  175. package/scripts/verify-and-fix.sh +0 -0
  176. package/src/cli/clean.ts +187 -6
  177. package/src/cli/index.ts +12 -1
  178. package/src/cli/init.ts +8 -7
  179. package/src/cli/logs.ts +124 -77
  180. package/src/cli/monitor.ts +1815 -898
  181. package/src/cli/prepare.ts +41 -21
  182. package/src/cli/resume.ts +753 -626
  183. package/src/cli/run.ts +12 -5
  184. package/src/cli/runs.ts +212 -0
  185. package/src/cli/setup-commands.ts +0 -0
  186. package/src/cli/signal.ts +8 -7
  187. package/src/cli/stop.ts +209 -0
  188. package/src/cli/tasks.ts +154 -0
  189. package/src/core/auto-recovery.ts +909 -0
  190. package/src/core/failure-policy.ts +592 -0
  191. package/src/core/orchestrator.ts +1131 -704
  192. package/src/core/reviewer.ts +4 -0
  193. package/src/core/runner.ts +444 -180
  194. package/src/services/logging/buffer.ts +326 -0
  195. package/src/services/logging/console.ts +193 -0
  196. package/src/services/logging/file-writer.ts +526 -0
  197. package/src/services/logging/formatter.ts +268 -0
  198. package/src/services/logging/index.ts +16 -0
  199. package/src/services/logging/parser.ts +232 -0
  200. package/src/services/process/index.ts +261 -0
  201. package/src/types/agent.ts +24 -0
  202. package/src/types/config.ts +79 -0
  203. package/src/types/events.ts +156 -0
  204. package/src/types/index.ts +29 -0
  205. package/src/types/lane.ts +56 -0
  206. package/src/types/logging.ts +96 -0
  207. package/src/types/review.ts +20 -0
  208. package/src/types/run.ts +37 -0
  209. package/src/types/task.ts +79 -0
  210. package/src/ui/components.ts +430 -0
  211. package/src/ui/log-viewer.ts +485 -0
  212. package/src/utils/checkpoint.ts +374 -0
  213. package/src/utils/config.ts +18 -8
  214. package/src/utils/cursor-agent.ts +1 -1
  215. package/src/utils/dependency.ts +482 -0
  216. package/src/utils/doctor.ts +18 -11
  217. package/src/utils/enhanced-logger.ts +122 -60
  218. package/src/utils/git.ts +517 -11
  219. package/src/utils/health.ts +596 -0
  220. package/src/utils/lock.ts +346 -0
  221. package/src/utils/log-buffer.ts +28 -0
  222. package/src/utils/log-constants.ts +26 -0
  223. package/src/utils/log-formatter.ts +245 -0
  224. package/src/utils/log-service.ts +49 -0
  225. package/src/utils/logger.ts +100 -51
  226. package/src/utils/path.ts +45 -0
  227. package/src/utils/process-manager.ts +100 -0
  228. package/src/utils/retry.ts +413 -0
  229. package/src/utils/run-service.ts +433 -0
  230. package/src/utils/state.ts +385 -11
  231. package/src/utils/task-service.ts +370 -0
  232. package/src/utils/template.ts +92 -0
  233. package/src/utils/types.ts +2 -314
  234. package/templates/basic.json +21 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-recovery.js","sourceRoot":"","sources":["../../src/core/auto-recovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Failure Policy - Centralized management of failure cases and recovery actions
3
+ *
4
+ * Features:
5
+ * - Multi-layer stall detection
6
+ * - Circuit breaker integration
7
+ * - Configurable recovery strategies
8
+ */
9
+ export declare enum FailureType {
10
+ STALL_IDLE = "STALL_IDLE",
11
+ STALL_NO_PROGRESS = "STALL_NO_PROGRESS",
12
+ STALL_ZERO_BYTES = "STALL_ZERO_BYTES",
13
+ AGENT_UNAVAILABLE = "AGENT_UNAVAILABLE",
14
+ AGENT_AUTH_ERROR = "AGENT_AUTH_ERROR",
15
+ AGENT_RATE_LIMIT = "AGENT_RATE_LIMIT",
16
+ AGENT_TIMEOUT = "AGENT_TIMEOUT",
17
+ AGENT_NO_RESPONSE = "AGENT_NO_RESPONSE",
18
+ ZOMBIE_PROCESS = "ZOMBIE_PROCESS",
19
+ DEPENDENCY_BLOCK = "DEPENDENCY_BLOCK",
20
+ DEPENDENCY_FAILED = "DEPENDENCY_FAILED",
21
+ DEPENDENCY_TIMEOUT = "DEPENDENCY_TIMEOUT",
22
+ REVIEW_FAIL = "REVIEW_FAIL",
23
+ GIT_ERROR = "GIT_ERROR",
24
+ GIT_PUSH_REJECTED = "GIT_PUSH_REJECTED",
25
+ MERGE_CONFLICT = "MERGE_CONFLICT",
26
+ NETWORK_ERROR = "NETWORK_ERROR",
27
+ STATE_CORRUPTION = "STATE_CORRUPTION",
28
+ UNKNOWN_CRASH = "UNKNOWN_CRASH"
29
+ }
30
+ export declare enum RecoveryAction {
31
+ CONTINUE_SIGNAL = "CONTINUE_SIGNAL",
32
+ STRONGER_PROMPT = "STRONGER_PROMPT",
33
+ RETRY_TASK = "RETRY_TASK",
34
+ RESTART_LANE = "RESTART_LANE",
35
+ RESTART_LANE_FROM_CHECKPOINT = "RESTART_LANE_FROM_CHECKPOINT",
36
+ KILL_AND_RESTART = "KILL_AND_RESTART",
37
+ ABORT_LANE = "ABORT_LANE",
38
+ WAIT_FOR_USER = "WAIT_FOR_USER",
39
+ WAIT_AND_RETRY = "WAIT_AND_RETRY",
40
+ RESET_GIT = "RESET_GIT",
41
+ SEND_GIT_GUIDANCE = "SEND_GIT_GUIDANCE",
42
+ RUN_DOCTOR = "RUN_DOCTOR",
43
+ NONE = "NONE"
44
+ }
45
+ export interface FailureAnalysis {
46
+ type: FailureType;
47
+ action: RecoveryAction;
48
+ message: string;
49
+ isTransient: boolean;
50
+ suggestedDelayMs?: number;
51
+ details?: Record<string, any>;
52
+ }
53
+ /**
54
+ * Multi-layer stall detection configuration
55
+ */
56
+ export interface StallDetectionConfig {
57
+ /** Time without stdout activity before sending continue signal */
58
+ idleTimeoutMs: number;
59
+ /** Time without state file update before considering stalled */
60
+ progressTimeoutMs: number;
61
+ /** Maximum time for a single task */
62
+ taskTimeoutMs: number;
63
+ /** Grace period for known long operations (e.g., npm install) */
64
+ longOperationGraceMs: number;
65
+ /** Patterns that indicate long operations */
66
+ longOperationPatterns: RegExp[];
67
+ /** Maximum restarts before aborting */
68
+ maxRestarts: number;
69
+ }
70
+ export declare const DEFAULT_STALL_CONFIG: StallDetectionConfig;
71
+ export interface StallContext {
72
+ /** Current stall phase (0: normal, 1: continued, 2: stronger_prompt, 3: restarted) */
73
+ stallPhase: number;
74
+ /** Time since last activity */
75
+ idleTimeMs: number;
76
+ /** Time since last state update */
77
+ progressTimeMs?: number;
78
+ /** Last output line (for long operation detection) */
79
+ lastOutput?: string;
80
+ /** Number of restarts */
81
+ restartCount?: number;
82
+ /** Task start time */
83
+ taskStartTimeMs?: number;
84
+ /** Bytes received since last check (0 = no response at all) */
85
+ bytesReceived?: number;
86
+ /** Number of continue signals already sent */
87
+ continueSignalsSent?: number;
88
+ }
89
+ export interface FailureContext {
90
+ exitCode?: number;
91
+ stallPhase?: number;
92
+ idleTimeMs?: number;
93
+ retryCount?: number;
94
+ progressTimeMs?: number;
95
+ lastOutput?: string;
96
+ restartCount?: number;
97
+ taskStartTimeMs?: number;
98
+ circuitBreakerName?: string;
99
+ }
100
+ /**
101
+ * Analyze stall condition with multi-layer detection and escalating recovery
102
+ *
103
+ * Recovery escalation stages:
104
+ * 1. Phase 0 → Phase 1: Send continue signal (after 2 min idle)
105
+ * 2. Phase 1 → Phase 2: Send stronger prompt (after 1.5 min grace)
106
+ * 3. Phase 2 → Phase 3: Kill and restart process (after 1 min grace)
107
+ * 4. Phase 3+: Abort after max restarts exceeded
108
+ */
109
+ export declare function analyzeStall(context: StallContext, config?: StallDetectionConfig): FailureAnalysis;
110
+ /**
111
+ * Analyze an error message or state to determine the failure type and recovery action
112
+ */
113
+ export declare function analyzeFailure(error: string | null | undefined, context?: FailureContext): FailureAnalysis;
114
+ /**
115
+ * Log the failure analysis to the appropriate channels
116
+ */
117
+ export declare function logFailure(laneName: string, analysis: FailureAnalysis, loggerInstance?: any): void;
118
+ /**
119
+ * Get suggested delay based on failure analysis and retry count
120
+ */
121
+ export declare function getSuggestedDelay(analysis: FailureAnalysis, retryCount: number): number;
122
+ /**
123
+ * Executes a function with retry logic based on failure analysis
124
+ */
125
+ export declare function withRetry<T>(laneName: string, fn: () => Promise<T>, isError: (res: T) => {
126
+ ok: boolean;
127
+ error?: string;
128
+ }, options?: {
129
+ maxRetries?: number;
130
+ delayMs?: number;
131
+ circuitBreakerName?: string;
132
+ }): Promise<T>;
133
+ /**
134
+ * Create a failure report for logging/monitoring
135
+ */
136
+ export interface FailureReport {
137
+ timestamp: string;
138
+ laneName: string;
139
+ analysis: FailureAnalysis;
140
+ context: FailureContext;
141
+ resolved: boolean;
142
+ resolutionAction?: RecoveryAction;
143
+ }
144
+ export declare function createFailureReport(laneName: string, analysis: FailureAnalysis, context: FailureContext): FailureReport;
145
+ /**
146
+ * Failure statistics for monitoring
147
+ */
148
+ export interface FailureStats {
149
+ totalFailures: number;
150
+ byType: Record<FailureType, number>;
151
+ byAction: Record<RecoveryAction, number>;
152
+ transientCount: number;
153
+ permanentCount: number;
154
+ }
155
+ export declare function createEmptyStats(): FailureStats;
156
+ export declare function updateStats(stats: FailureStats, analysis: FailureAnalysis): FailureStats;
@@ -0,0 +1,488 @@
1
+ "use strict";
2
+ /**
3
+ * Failure Policy - Centralized management of failure cases and recovery actions
4
+ *
5
+ * Features:
6
+ * - Multi-layer stall detection
7
+ * - Circuit breaker integration
8
+ * - Configurable recovery strategies
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.DEFAULT_STALL_CONFIG = exports.RecoveryAction = exports.FailureType = void 0;
45
+ exports.analyzeStall = analyzeStall;
46
+ exports.analyzeFailure = analyzeFailure;
47
+ exports.logFailure = logFailure;
48
+ exports.getSuggestedDelay = getSuggestedDelay;
49
+ exports.withRetry = withRetry;
50
+ exports.createFailureReport = createFailureReport;
51
+ exports.createEmptyStats = createEmptyStats;
52
+ exports.updateStats = updateStats;
53
+ const logger = __importStar(require("../utils/logger"));
54
+ const retry_1 = require("../utils/retry");
55
+ var FailureType;
56
+ (function (FailureType) {
57
+ FailureType["STALL_IDLE"] = "STALL_IDLE";
58
+ FailureType["STALL_NO_PROGRESS"] = "STALL_NO_PROGRESS";
59
+ FailureType["STALL_ZERO_BYTES"] = "STALL_ZERO_BYTES";
60
+ FailureType["AGENT_UNAVAILABLE"] = "AGENT_UNAVAILABLE";
61
+ FailureType["AGENT_AUTH_ERROR"] = "AGENT_AUTH_ERROR";
62
+ FailureType["AGENT_RATE_LIMIT"] = "AGENT_RATE_LIMIT";
63
+ FailureType["AGENT_TIMEOUT"] = "AGENT_TIMEOUT";
64
+ FailureType["AGENT_NO_RESPONSE"] = "AGENT_NO_RESPONSE";
65
+ FailureType["ZOMBIE_PROCESS"] = "ZOMBIE_PROCESS";
66
+ FailureType["DEPENDENCY_BLOCK"] = "DEPENDENCY_BLOCK";
67
+ FailureType["DEPENDENCY_FAILED"] = "DEPENDENCY_FAILED";
68
+ FailureType["DEPENDENCY_TIMEOUT"] = "DEPENDENCY_TIMEOUT";
69
+ FailureType["REVIEW_FAIL"] = "REVIEW_FAIL";
70
+ FailureType["GIT_ERROR"] = "GIT_ERROR";
71
+ FailureType["GIT_PUSH_REJECTED"] = "GIT_PUSH_REJECTED";
72
+ FailureType["MERGE_CONFLICT"] = "MERGE_CONFLICT";
73
+ FailureType["NETWORK_ERROR"] = "NETWORK_ERROR";
74
+ FailureType["STATE_CORRUPTION"] = "STATE_CORRUPTION";
75
+ FailureType["UNKNOWN_CRASH"] = "UNKNOWN_CRASH";
76
+ })(FailureType || (exports.FailureType = FailureType = {}));
77
+ var RecoveryAction;
78
+ (function (RecoveryAction) {
79
+ RecoveryAction["CONTINUE_SIGNAL"] = "CONTINUE_SIGNAL";
80
+ RecoveryAction["STRONGER_PROMPT"] = "STRONGER_PROMPT";
81
+ RecoveryAction["RETRY_TASK"] = "RETRY_TASK";
82
+ RecoveryAction["RESTART_LANE"] = "RESTART_LANE";
83
+ RecoveryAction["RESTART_LANE_FROM_CHECKPOINT"] = "RESTART_LANE_FROM_CHECKPOINT";
84
+ RecoveryAction["KILL_AND_RESTART"] = "KILL_AND_RESTART";
85
+ RecoveryAction["ABORT_LANE"] = "ABORT_LANE";
86
+ RecoveryAction["WAIT_FOR_USER"] = "WAIT_FOR_USER";
87
+ RecoveryAction["WAIT_AND_RETRY"] = "WAIT_AND_RETRY";
88
+ RecoveryAction["RESET_GIT"] = "RESET_GIT";
89
+ RecoveryAction["SEND_GIT_GUIDANCE"] = "SEND_GIT_GUIDANCE";
90
+ RecoveryAction["RUN_DOCTOR"] = "RUN_DOCTOR";
91
+ RecoveryAction["NONE"] = "NONE";
92
+ })(RecoveryAction || (exports.RecoveryAction = RecoveryAction = {}));
93
+ exports.DEFAULT_STALL_CONFIG = {
94
+ idleTimeoutMs: 60 * 1000, // 1 minute without output (quick detection)
95
+ progressTimeoutMs: 10 * 60 * 1000, // 10 minutes without progress
96
+ taskTimeoutMs: 30 * 60 * 1000, // 30 minutes max per task
97
+ longOperationGraceMs: 10 * 60 * 1000, // 10 minute grace for long ops
98
+ longOperationPatterns: [
99
+ /Installing dependencies/i,
100
+ /npm install/i,
101
+ /pnpm install/i,
102
+ /yarn install/i,
103
+ /Building/i,
104
+ /Compiling/i,
105
+ /Downloading/i,
106
+ /Fetching/i,
107
+ /Cloning/i,
108
+ /Bundling/i,
109
+ ],
110
+ maxRestarts: 2,
111
+ };
112
+ /**
113
+ * Analyze stall condition with multi-layer detection and escalating recovery
114
+ *
115
+ * Recovery escalation stages:
116
+ * 1. Phase 0 → Phase 1: Send continue signal (after 2 min idle)
117
+ * 2. Phase 1 → Phase 2: Send stronger prompt (after 1.5 min grace)
118
+ * 3. Phase 2 → Phase 3: Kill and restart process (after 1 min grace)
119
+ * 4. Phase 3+: Abort after max restarts exceeded
120
+ */
121
+ function analyzeStall(context, config = exports.DEFAULT_STALL_CONFIG) {
122
+ const { stallPhase, idleTimeMs, progressTimeMs, lastOutput, restartCount = 0, taskStartTimeMs, bytesReceived = -1, // -1 means not tracked
123
+ continueSignalsSent = 0, } = context;
124
+ // Check if this might be a long operation
125
+ const isLongOperation = lastOutput && config.longOperationPatterns.some(p => p.test(lastOutput));
126
+ const effectiveIdleTimeout = isLongOperation ? config.longOperationGraceMs : config.idleTimeoutMs;
127
+ // Check for task timeout
128
+ if (taskStartTimeMs && (Date.now() - taskStartTimeMs) > config.taskTimeoutMs) {
129
+ return {
130
+ type: FailureType.AGENT_TIMEOUT,
131
+ action: restartCount < config.maxRestarts ? RecoveryAction.KILL_AND_RESTART : RecoveryAction.RUN_DOCTOR,
132
+ message: `Task exceeded maximum timeout of ${Math.round(config.taskTimeoutMs / 60000)} minutes`,
133
+ isTransient: restartCount < config.maxRestarts,
134
+ details: { taskDurationMs: Date.now() - taskStartTimeMs, restartCount },
135
+ };
136
+ }
137
+ // Check for zero bytes received (agent completely unresponsive)
138
+ if (bytesReceived === 0 && idleTimeMs > effectiveIdleTimeout) {
139
+ return {
140
+ type: FailureType.AGENT_NO_RESPONSE,
141
+ action: stallPhase < 2 ? RecoveryAction.CONTINUE_SIGNAL : RecoveryAction.KILL_AND_RESTART,
142
+ message: `Agent produced 0 bytes for ${Math.round(idleTimeMs / 1000)}s - possible API issue`,
143
+ isTransient: true,
144
+ details: { idleTimeMs, bytesReceived, stallPhase },
145
+ };
146
+ }
147
+ // Check for no progress (state file not updating)
148
+ if (progressTimeMs && progressTimeMs > config.progressTimeoutMs) {
149
+ return {
150
+ type: FailureType.STALL_NO_PROGRESS,
151
+ action: stallPhase === 0 ? RecoveryAction.CONTINUE_SIGNAL :
152
+ stallPhase === 1 ? RecoveryAction.STRONGER_PROMPT :
153
+ RecoveryAction.KILL_AND_RESTART,
154
+ message: `No progress for ${Math.round(progressTimeMs / 60000)} minutes`,
155
+ isTransient: true,
156
+ details: { progressTimeMs, stallPhase },
157
+ };
158
+ }
159
+ // Phase 0: Normal operation, check for initial idle
160
+ if (stallPhase === 0 && idleTimeMs > effectiveIdleTimeout) {
161
+ return {
162
+ type: FailureType.STALL_IDLE,
163
+ action: RecoveryAction.CONTINUE_SIGNAL,
164
+ message: `Lane idle for ${Math.round(idleTimeMs / 1000)}s. Sending continue signal...`,
165
+ isTransient: true,
166
+ details: { idleTimeMs, isLongOperation, phase: 0 },
167
+ };
168
+ }
169
+ // Phase 1: Continue signal sent, wait for response
170
+ if (stallPhase === 1) {
171
+ const graceTimeout = 90 * 1000; // 1.5 minutes grace after continue
172
+ if (idleTimeMs > graceTimeout) {
173
+ return {
174
+ type: FailureType.STALL_IDLE,
175
+ action: RecoveryAction.STRONGER_PROMPT,
176
+ message: `Still idle after continue signal. Sending stronger prompt...`,
177
+ isTransient: true,
178
+ details: { idleTimeMs, continueSignalsSent, phase: 1 },
179
+ };
180
+ }
181
+ }
182
+ // Phase 2: Stronger prompt sent, wait or escalate
183
+ if (stallPhase === 2) {
184
+ const strongerGraceTimeout = 60 * 1000; // 1 minute grace after stronger prompt
185
+ if (idleTimeMs > strongerGraceTimeout) {
186
+ if (restartCount < config.maxRestarts) {
187
+ return {
188
+ type: FailureType.STALL_IDLE,
189
+ action: RecoveryAction.KILL_AND_RESTART,
190
+ message: `No response after stronger prompt. Killing and restarting process...`,
191
+ isTransient: true,
192
+ details: { idleTimeMs, restartCount, maxRestarts: config.maxRestarts, phase: 2 },
193
+ };
194
+ }
195
+ else {
196
+ return {
197
+ type: FailureType.STALL_IDLE,
198
+ action: RecoveryAction.RUN_DOCTOR,
199
+ message: `Lane failed after ${restartCount} restarts. Running diagnostics...`,
200
+ isTransient: false,
201
+ details: { restartCount, phase: 2 },
202
+ };
203
+ }
204
+ }
205
+ }
206
+ // Phase 3+: After restart, monitor with shorter timeout
207
+ if (stallPhase >= 3) {
208
+ const postRestartTimeout = config.idleTimeoutMs * 0.75; // Shorter timeout after restart
209
+ if (idleTimeMs > postRestartTimeout) {
210
+ if (restartCount < config.maxRestarts) {
211
+ return {
212
+ type: FailureType.STALL_IDLE,
213
+ action: RecoveryAction.CONTINUE_SIGNAL,
214
+ message: `Lane idle after restart. Retrying continue signal...`,
215
+ isTransient: true,
216
+ details: { idleTimeMs, restartCount, phase: stallPhase },
217
+ };
218
+ }
219
+ else {
220
+ return {
221
+ type: FailureType.STALL_IDLE,
222
+ action: RecoveryAction.RUN_DOCTOR,
223
+ message: `Lane repeatedly stalled. Running diagnostics for root cause...`,
224
+ isTransient: false,
225
+ details: { stallPhase, restartCount },
226
+ };
227
+ }
228
+ }
229
+ }
230
+ // No action needed yet
231
+ return {
232
+ type: FailureType.STALL_IDLE,
233
+ action: RecoveryAction.NONE,
234
+ message: 'Monitoring for stall',
235
+ isTransient: true,
236
+ };
237
+ }
238
+ /**
239
+ * Analyze an error message or state to determine the failure type and recovery action
240
+ */
241
+ function analyzeFailure(error, context) {
242
+ const msg = (error || '').toLowerCase();
243
+ // Check circuit breaker status first
244
+ if (context?.circuitBreakerName) {
245
+ const breaker = (0, retry_1.getCircuitBreaker)(context.circuitBreakerName);
246
+ if (breaker.getState() === retry_1.CircuitState.OPEN) {
247
+ const waitTime = breaker.getTimeUntilRetry();
248
+ return {
249
+ type: FailureType.AGENT_UNAVAILABLE,
250
+ action: RecoveryAction.WAIT_AND_RETRY,
251
+ message: `Circuit breaker open. Retry in ${Math.round(waitTime / 1000)}s`,
252
+ isTransient: true,
253
+ suggestedDelayMs: waitTime,
254
+ };
255
+ }
256
+ }
257
+ // 1. Network errors
258
+ if (msg.includes('econnreset') || msg.includes('econnrefused') ||
259
+ msg.includes('etimedout') || msg.includes('enotfound') ||
260
+ msg.includes('socket hang up') || msg.includes('network')) {
261
+ return {
262
+ type: FailureType.NETWORK_ERROR,
263
+ action: (context?.retryCount || 0) < 3 ? RecoveryAction.RETRY_TASK : RecoveryAction.RESTART_LANE,
264
+ message: 'Network error. Retrying...',
265
+ isTransient: true,
266
+ suggestedDelayMs: 5000 * Math.pow(2, context?.retryCount || 0),
267
+ };
268
+ }
269
+ // 2. Agent service unavailable
270
+ if (msg.includes('connecterror') && msg.includes('[unavailable]')) {
271
+ return {
272
+ type: FailureType.AGENT_UNAVAILABLE,
273
+ action: (context?.retryCount || 0) < 3 ? RecoveryAction.RETRY_TASK : RecoveryAction.RESTART_LANE,
274
+ message: 'Agent service is temporarily unavailable. Retrying with a new agent session.',
275
+ isTransient: true,
276
+ suggestedDelayMs: 10000,
277
+ };
278
+ }
279
+ // 3. Authentication errors
280
+ if (msg.includes('not authenticated') || msg.includes('unauthorized') ||
281
+ msg.includes('401') || msg.includes('auth failed')) {
282
+ return {
283
+ type: FailureType.AGENT_AUTH_ERROR,
284
+ action: RecoveryAction.WAIT_FOR_USER,
285
+ message: 'Cursor authentication failed. Please sign in to Cursor IDE.',
286
+ isTransient: false,
287
+ };
288
+ }
289
+ // 4. Rate limits
290
+ if (msg.includes('rate limit') || msg.includes('quota') ||
291
+ msg.includes('429') || msg.includes('too many requests')) {
292
+ return {
293
+ type: FailureType.AGENT_RATE_LIMIT,
294
+ action: RecoveryAction.WAIT_AND_RETRY,
295
+ message: 'API rate limit reached. Waiting before retry...',
296
+ isTransient: true,
297
+ suggestedDelayMs: 60000, // 1 minute
298
+ };
299
+ }
300
+ // 5. Timeout
301
+ if (msg.includes('timeout') || msg.includes('timed out')) {
302
+ return {
303
+ type: FailureType.AGENT_TIMEOUT,
304
+ action: (context?.retryCount || 0) < 2 ? RecoveryAction.RETRY_TASK : RecoveryAction.RESTART_LANE,
305
+ message: 'Operation timed out.',
306
+ isTransient: true,
307
+ };
308
+ }
309
+ // 6. Git/merge errors - send guidance to agent
310
+ if (msg.includes('conflict') || msg.includes('merge failed') || msg.includes('automatic merge failed')) {
311
+ return {
312
+ type: FailureType.MERGE_CONFLICT,
313
+ action: RecoveryAction.SEND_GIT_GUIDANCE,
314
+ message: 'Merge conflict detected. Sending guidance to agent...',
315
+ isTransient: true,
316
+ };
317
+ }
318
+ // Git push rejected (common in parallel lanes)
319
+ if (msg.includes('rejected') || msg.includes('non-fast-forward') ||
320
+ msg.includes('failed to push') || msg.includes('fetch first')) {
321
+ return {
322
+ type: FailureType.GIT_PUSH_REJECTED,
323
+ action: RecoveryAction.SEND_GIT_GUIDANCE,
324
+ message: 'Git push rejected. Sending guidance to agent...',
325
+ isTransient: true,
326
+ };
327
+ }
328
+ if (msg.includes('git') && (msg.includes('error') || msg.includes('failed'))) {
329
+ return {
330
+ type: FailureType.GIT_ERROR,
331
+ action: (context?.retryCount || 0) < 2 ? RecoveryAction.RETRY_TASK : RecoveryAction.RESET_GIT,
332
+ message: 'Git operation failed.',
333
+ isTransient: true,
334
+ };
335
+ }
336
+ // 7. Dependency blocks (Exit Code 2)
337
+ if (context?.exitCode === 2 || msg.includes('dependency_change_required')) {
338
+ return {
339
+ type: FailureType.DEPENDENCY_BLOCK,
340
+ action: RecoveryAction.NONE, // Handled by orchestrator resolve logic
341
+ message: 'Lane is blocked on dependency change request.',
342
+ isTransient: false,
343
+ };
344
+ }
345
+ // 8. Dependency failures
346
+ if (msg.includes('dependency failed') || msg.includes('dependency timeout')) {
347
+ const isDependencyTimeout = msg.includes('timeout');
348
+ return {
349
+ type: isDependencyTimeout ? FailureType.DEPENDENCY_TIMEOUT : FailureType.DEPENDENCY_FAILED,
350
+ action: RecoveryAction.ABORT_LANE,
351
+ message: isDependencyTimeout ? 'Dependency wait timed out.' : 'A dependency lane has failed.',
352
+ isTransient: false,
353
+ };
354
+ }
355
+ // 9. State corruption
356
+ if (msg.includes('state') && (msg.includes('corrupt') || msg.includes('invalid') || msg.includes('parse'))) {
357
+ return {
358
+ type: FailureType.STATE_CORRUPTION,
359
+ action: RecoveryAction.RESTART_LANE_FROM_CHECKPOINT,
360
+ message: 'State file corruption detected.',
361
+ isTransient: false,
362
+ };
363
+ }
364
+ // 10. Stalls (handled by phase)
365
+ if (context?.stallPhase !== undefined && context.stallPhase >= 0) {
366
+ return analyzeStall({
367
+ stallPhase: context.stallPhase,
368
+ idleTimeMs: context.idleTimeMs || 0,
369
+ progressTimeMs: context.progressTimeMs,
370
+ restartCount: context.restartCount,
371
+ taskStartTimeMs: context.taskStartTimeMs,
372
+ });
373
+ }
374
+ // 11. Default fallback
375
+ return {
376
+ type: FailureType.UNKNOWN_CRASH,
377
+ action: RecoveryAction.ABORT_LANE,
378
+ message: error || `Process exited with code ${context?.exitCode}`,
379
+ isTransient: false,
380
+ };
381
+ }
382
+ /**
383
+ * Log the failure analysis to the appropriate channels
384
+ */
385
+ function logFailure(laneName, analysis, loggerInstance = logger) {
386
+ const label = `[${laneName}]`;
387
+ const actionLabel = analysis.action === RecoveryAction.NONE ? '' : ` -> Action: ${analysis.action}`;
388
+ const delayLabel = analysis.suggestedDelayMs ? ` (delay: ${Math.round(analysis.suggestedDelayMs / 1000)}s)` : '';
389
+ const message = `${label} ${analysis.type}: ${analysis.message}${actionLabel}${delayLabel}`;
390
+ if (analysis.isTransient) {
391
+ loggerInstance.warn(message);
392
+ }
393
+ else {
394
+ loggerInstance.error(message);
395
+ }
396
+ // Log details if present
397
+ if (analysis.details && process.env['DEBUG']) {
398
+ loggerInstance.info(` Details: ${JSON.stringify(analysis.details)}`);
399
+ }
400
+ }
401
+ /**
402
+ * Get suggested delay based on failure analysis and retry count
403
+ */
404
+ function getSuggestedDelay(analysis, retryCount) {
405
+ if (analysis.suggestedDelayMs) {
406
+ return analysis.suggestedDelayMs;
407
+ }
408
+ // Exponential backoff
409
+ const baseDelay = 5000;
410
+ const maxDelay = 60000;
411
+ return Math.min(baseDelay * Math.pow(2, retryCount), maxDelay);
412
+ }
413
+ /**
414
+ * Executes a function with retry logic based on failure analysis
415
+ */
416
+ async function withRetry(laneName, fn, isError, options = {}) {
417
+ const maxRetries = options.maxRetries || 3;
418
+ const baseDelayMs = options.delayMs || 5000;
419
+ let attempt = 0;
420
+ // Get circuit breaker if specified
421
+ const breaker = options.circuitBreakerName
422
+ ? (0, retry_1.getCircuitBreaker)(options.circuitBreakerName)
423
+ : null;
424
+ while (true) {
425
+ // Check circuit breaker
426
+ if (breaker && !breaker.canCall()) {
427
+ const waitTime = breaker.getTimeUntilRetry();
428
+ logger.warn(`[${laneName}] Circuit breaker open. Waiting ${Math.round(waitTime / 1000)}s...`);
429
+ await new Promise(resolve => setTimeout(resolve, waitTime));
430
+ continue;
431
+ }
432
+ const result = await fn();
433
+ const status = isError(result);
434
+ if (status.ok) {
435
+ if (breaker)
436
+ breaker.recordSuccess();
437
+ return result;
438
+ }
439
+ if (breaker)
440
+ breaker.recordFailure();
441
+ const analysis = analyzeFailure(status.error, {
442
+ retryCount: attempt,
443
+ circuitBreakerName: options.circuitBreakerName,
444
+ });
445
+ if ((analysis.action === RecoveryAction.RETRY_TASK ||
446
+ analysis.action === RecoveryAction.WAIT_AND_RETRY) &&
447
+ attempt < maxRetries) {
448
+ attempt++;
449
+ logFailure(laneName, analysis);
450
+ const delay = getSuggestedDelay(analysis, attempt) || baseDelayMs;
451
+ logger.info(`Attempt ${attempt}/${maxRetries} failed. Retrying in ${Math.round(delay / 1000)}s...`);
452
+ await new Promise(resolve => setTimeout(resolve, delay));
453
+ continue;
454
+ }
455
+ return result;
456
+ }
457
+ }
458
+ function createFailureReport(laneName, analysis, context) {
459
+ return {
460
+ timestamp: new Date().toISOString(),
461
+ laneName,
462
+ analysis,
463
+ context,
464
+ resolved: false,
465
+ };
466
+ }
467
+ function createEmptyStats() {
468
+ return {
469
+ totalFailures: 0,
470
+ byType: {},
471
+ byAction: {},
472
+ transientCount: 0,
473
+ permanentCount: 0,
474
+ };
475
+ }
476
+ function updateStats(stats, analysis) {
477
+ stats.totalFailures++;
478
+ stats.byType[analysis.type] = (stats.byType[analysis.type] || 0) + 1;
479
+ stats.byAction[analysis.action] = (stats.byAction[analysis.action] || 0) + 1;
480
+ if (analysis.isTransient) {
481
+ stats.transientCount++;
482
+ }
483
+ else {
484
+ stats.permanentCount++;
485
+ }
486
+ return stats;
487
+ }
488
+ //# sourceMappingURL=failure-policy.js.map