@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,556 @@
1
+ "use strict";
2
+ /**
3
+ * Health check system for CursorFlow
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.checkAgentHealth = checkAgentHealth;
40
+ exports.checkAuthHealth = checkAuthHealth;
41
+ exports.checkGitHealth = checkGitHealth;
42
+ exports.checkGitRemoteHealth = checkGitRemoteHealth;
43
+ exports.checkDiskSpace = checkDiskSpace;
44
+ exports.checkLockFiles = checkLockFiles;
45
+ exports.checkSystemResources = checkSystemResources;
46
+ exports.checkWorktrees = checkWorktrees;
47
+ exports.runHealthCheck = runHealthCheck;
48
+ exports.preflightCheck = preflightCheck;
49
+ exports.printHealthReport = printHealthReport;
50
+ exports.printPreflightReport = printPreflightReport;
51
+ exports.autoRepair = autoRepair;
52
+ const fs = __importStar(require("fs"));
53
+ const os = __importStar(require("os"));
54
+ const child_process_1 = require("child_process");
55
+ const git = __importStar(require("./git"));
56
+ const lock_1 = require("./lock");
57
+ const cursor_agent_1 = require("./cursor-agent");
58
+ const logger = __importStar(require("./logger"));
59
+ /**
60
+ * Check if cursor-agent is installed and responsive
61
+ */
62
+ async function checkAgentHealth() {
63
+ const start = Date.now();
64
+ if (!(0, cursor_agent_1.checkCursorAgentInstalled)()) {
65
+ return {
66
+ name: 'cursor-agent',
67
+ ok: false,
68
+ message: 'cursor-agent CLI is not installed',
69
+ latencyMs: Date.now() - start,
70
+ };
71
+ }
72
+ try {
73
+ const result = (0, child_process_1.spawnSync)('cursor-agent', ['--version'], {
74
+ encoding: 'utf8',
75
+ stdio: 'pipe',
76
+ timeout: 5000,
77
+ });
78
+ if (result.status === 0) {
79
+ const version = result.stdout.trim();
80
+ return {
81
+ name: 'cursor-agent',
82
+ ok: true,
83
+ message: `cursor-agent installed (${version})`,
84
+ details: { version },
85
+ latencyMs: Date.now() - start,
86
+ };
87
+ }
88
+ else {
89
+ return {
90
+ name: 'cursor-agent',
91
+ ok: false,
92
+ message: `cursor-agent error: ${result.stderr}`,
93
+ latencyMs: Date.now() - start,
94
+ };
95
+ }
96
+ }
97
+ catch (error) {
98
+ return {
99
+ name: 'cursor-agent',
100
+ ok: false,
101
+ message: `cursor-agent check failed: ${error.message}`,
102
+ latencyMs: Date.now() - start,
103
+ };
104
+ }
105
+ }
106
+ /**
107
+ * Check cursor authentication status
108
+ */
109
+ async function checkAuthHealth() {
110
+ const start = Date.now();
111
+ try {
112
+ const authStatus = (0, cursor_agent_1.checkCursorAuth)();
113
+ return {
114
+ name: 'cursor-auth',
115
+ ok: authStatus.authenticated,
116
+ message: authStatus.message,
117
+ details: authStatus.details ? { details: authStatus.details } : undefined,
118
+ latencyMs: Date.now() - start,
119
+ };
120
+ }
121
+ catch (error) {
122
+ return {
123
+ name: 'cursor-auth',
124
+ ok: false,
125
+ message: `Auth check failed: ${error.message}`,
126
+ latencyMs: Date.now() - start,
127
+ };
128
+ }
129
+ }
130
+ /**
131
+ * Check Git repository status
132
+ */
133
+ async function checkGitHealth(cwd) {
134
+ const start = Date.now();
135
+ try {
136
+ if (!git.isGitRepo(cwd)) {
137
+ return {
138
+ name: 'git-repo',
139
+ ok: false,
140
+ message: 'Not a Git repository',
141
+ latencyMs: Date.now() - start,
142
+ };
143
+ }
144
+ const branch = git.getCurrentBranch(cwd);
145
+ const hasRemote = git.remoteExists('origin', { cwd });
146
+ return {
147
+ name: 'git-repo',
148
+ ok: true,
149
+ message: `Git repository OK (branch: ${branch})`,
150
+ details: {
151
+ branch,
152
+ hasRemote,
153
+ },
154
+ latencyMs: Date.now() - start,
155
+ };
156
+ }
157
+ catch (error) {
158
+ return {
159
+ name: 'git-repo',
160
+ ok: false,
161
+ message: `Git check failed: ${error.message}`,
162
+ latencyMs: Date.now() - start,
163
+ };
164
+ }
165
+ }
166
+ /**
167
+ * Check Git remote connectivity
168
+ */
169
+ async function checkGitRemoteHealth(cwd) {
170
+ const start = Date.now();
171
+ try {
172
+ if (!git.remoteExists('origin', { cwd })) {
173
+ return {
174
+ name: 'git-remote',
175
+ ok: true, // Not an error, just not configured
176
+ message: 'No remote "origin" configured',
177
+ latencyMs: Date.now() - start,
178
+ };
179
+ }
180
+ // Try to fetch with timeout
181
+ const result = (0, child_process_1.spawnSync)('git', ['ls-remote', '--exit-code', 'origin', 'HEAD'], {
182
+ cwd: cwd || process.cwd(),
183
+ encoding: 'utf8',
184
+ stdio: 'pipe',
185
+ timeout: 10000,
186
+ });
187
+ if (result.status === 0) {
188
+ return {
189
+ name: 'git-remote',
190
+ ok: true,
191
+ message: 'Git remote is reachable',
192
+ latencyMs: Date.now() - start,
193
+ };
194
+ }
195
+ else {
196
+ return {
197
+ name: 'git-remote',
198
+ ok: false,
199
+ message: `Git remote unreachable: ${result.stderr}`,
200
+ latencyMs: Date.now() - start,
201
+ };
202
+ }
203
+ }
204
+ catch (error) {
205
+ return {
206
+ name: 'git-remote',
207
+ ok: false,
208
+ message: `Git remote check failed: ${error.message}`,
209
+ latencyMs: Date.now() - start,
210
+ };
211
+ }
212
+ }
213
+ /**
214
+ * Check available disk space
215
+ */
216
+ async function checkDiskSpace(minMb = 500) {
217
+ const start = Date.now();
218
+ try {
219
+ const cwd = process.cwd();
220
+ // Use df command to check disk space
221
+ const result = (0, child_process_1.spawnSync)('df', ['-m', cwd], {
222
+ encoding: 'utf8',
223
+ stdio: 'pipe',
224
+ });
225
+ if (result.status === 0) {
226
+ const lines = result.stdout.trim().split('\n');
227
+ if (lines.length >= 2) {
228
+ const parts = lines[1].split(/\s+/);
229
+ const availableMb = parseInt(parts[3] || '0');
230
+ return {
231
+ name: 'disk-space',
232
+ ok: availableMb >= minMb,
233
+ message: availableMb >= minMb
234
+ ? `${availableMb} MB available`
235
+ : `Low disk space: ${availableMb} MB (minimum: ${minMb} MB)`,
236
+ details: { availableMb, minMb },
237
+ latencyMs: Date.now() - start,
238
+ };
239
+ }
240
+ }
241
+ // Fallback: assume OK if we can't check
242
+ return {
243
+ name: 'disk-space',
244
+ ok: true,
245
+ message: 'Could not determine disk space (assuming OK)',
246
+ latencyMs: Date.now() - start,
247
+ };
248
+ }
249
+ catch (error) {
250
+ return {
251
+ name: 'disk-space',
252
+ ok: true, // Don't block on disk check failures
253
+ message: `Disk check skipped: ${error.message}`,
254
+ latencyMs: Date.now() - start,
255
+ };
256
+ }
257
+ }
258
+ /**
259
+ * Check for stale lock files
260
+ */
261
+ async function checkLockFiles(basePath) {
262
+ const start = Date.now();
263
+ try {
264
+ const lockDir = (0, lock_1.getLockDir)(basePath || process.cwd());
265
+ if (!fs.existsSync(lockDir)) {
266
+ return {
267
+ name: 'lock-files',
268
+ ok: true,
269
+ message: 'No lock directory (OK)',
270
+ latencyMs: Date.now() - start,
271
+ };
272
+ }
273
+ const status = (0, lock_1.getLockStatus)(lockDir);
274
+ const staleCount = status.filter(s => s.stale).length;
275
+ const activeCount = status.filter(s => !s.stale).length;
276
+ if (staleCount > 0) {
277
+ return {
278
+ name: 'lock-files',
279
+ ok: false,
280
+ message: `${staleCount} stale lock(s) found`,
281
+ details: { staleCount, activeCount, locks: status },
282
+ latencyMs: Date.now() - start,
283
+ };
284
+ }
285
+ return {
286
+ name: 'lock-files',
287
+ ok: true,
288
+ message: activeCount > 0 ? `${activeCount} active lock(s)` : 'No locks',
289
+ details: { activeCount },
290
+ latencyMs: Date.now() - start,
291
+ };
292
+ }
293
+ catch (error) {
294
+ return {
295
+ name: 'lock-files',
296
+ ok: true, // Don't block on lock check failures
297
+ message: `Lock check skipped: ${error.message}`,
298
+ latencyMs: Date.now() - start,
299
+ };
300
+ }
301
+ }
302
+ /**
303
+ * Check system resources (CPU, memory)
304
+ */
305
+ async function checkSystemResources() {
306
+ const start = Date.now();
307
+ try {
308
+ const totalMem = os.totalmem() / (1024 * 1024 * 1024); // GB
309
+ const freeMem = os.freemem() / (1024 * 1024 * 1024); // GB
310
+ const usedPercent = ((totalMem - freeMem) / totalMem) * 100;
311
+ const cpuCount = os.cpus().length;
312
+ const loadAvg = os.loadavg()[0]; // 1-minute average
313
+ const memoryOk = freeMem > 1; // At least 1GB free
314
+ const cpuOk = loadAvg < cpuCount * 2; // Load less than 2x CPU count
315
+ return {
316
+ name: 'system-resources',
317
+ ok: memoryOk && cpuOk,
318
+ message: memoryOk && cpuOk
319
+ ? 'System resources OK'
320
+ : `System under load (Memory: ${usedPercent.toFixed(0)}%, Load: ${loadAvg.toFixed(1)})`,
321
+ details: {
322
+ totalMemoryGb: totalMem.toFixed(1),
323
+ freeMemoryGb: freeMem.toFixed(1),
324
+ memoryUsedPercent: usedPercent.toFixed(1),
325
+ cpuCount,
326
+ loadAverage: loadAvg.toFixed(2),
327
+ },
328
+ latencyMs: Date.now() - start,
329
+ };
330
+ }
331
+ catch (error) {
332
+ return {
333
+ name: 'system-resources',
334
+ ok: true, // Don't block on resource check failures
335
+ message: `Resource check skipped: ${error.message}`,
336
+ latencyMs: Date.now() - start,
337
+ };
338
+ }
339
+ }
340
+ /**
341
+ * Check worktrees status
342
+ */
343
+ async function checkWorktrees(cwd) {
344
+ const start = Date.now();
345
+ try {
346
+ const worktrees = git.listWorktrees(cwd);
347
+ const orphaned = [];
348
+ for (const wt of worktrees) {
349
+ if (wt.path && !fs.existsSync(wt.path)) {
350
+ orphaned.push(wt.path);
351
+ }
352
+ }
353
+ if (orphaned.length > 0) {
354
+ return {
355
+ name: 'worktrees',
356
+ ok: false,
357
+ message: `${orphaned.length} orphaned worktree(s) found`,
358
+ details: { total: worktrees.length, orphaned },
359
+ latencyMs: Date.now() - start,
360
+ };
361
+ }
362
+ return {
363
+ name: 'worktrees',
364
+ ok: true,
365
+ message: `${worktrees.length} worktree(s) OK`,
366
+ details: { count: worktrees.length },
367
+ latencyMs: Date.now() - start,
368
+ };
369
+ }
370
+ catch (error) {
371
+ return {
372
+ name: 'worktrees',
373
+ ok: true, // Don't block on worktree check failures
374
+ message: `Worktree check skipped: ${error.message}`,
375
+ latencyMs: Date.now() - start,
376
+ };
377
+ }
378
+ }
379
+ /**
380
+ * Run all health checks
381
+ */
382
+ async function runHealthCheck(options = {}) {
383
+ const checks = [];
384
+ // Run checks in parallel where possible
385
+ const [agentHealth, gitHealth, diskSpace, lockFiles, sysResources, worktrees] = await Promise.all([
386
+ checkAgentHealth(),
387
+ checkGitHealth(options.cwd),
388
+ checkDiskSpace(),
389
+ checkLockFiles(options.cwd),
390
+ checkSystemResources(),
391
+ checkWorktrees(options.cwd),
392
+ ]);
393
+ checks.push(agentHealth, gitHealth, diskSpace, lockFiles, sysResources, worktrees);
394
+ // Remote checks (might be slow, so optional)
395
+ if (!options.skipRemote) {
396
+ checks.push(await checkGitRemoteHealth(options.cwd));
397
+ }
398
+ // Auth check (requires network, so optional)
399
+ if (!options.skipAuth) {
400
+ checks.push(await checkAuthHealth());
401
+ }
402
+ const passed = checks.filter(c => c.ok).length;
403
+ const failed = checks.filter(c => !c.ok).length;
404
+ return {
405
+ healthy: failed === 0,
406
+ timestamp: Date.now(),
407
+ checks,
408
+ summary: {
409
+ passed,
410
+ failed,
411
+ warnings: 0, // Could be extended to include warnings
412
+ },
413
+ };
414
+ }
415
+ /**
416
+ * Run preflight checks before starting orchestration
417
+ */
418
+ async function preflightCheck(options = {}) {
419
+ const blockers = [];
420
+ const warnings = [];
421
+ const recommendations = [];
422
+ // Check cursor-agent
423
+ const agentHealth = await checkAgentHealth();
424
+ if (!agentHealth.ok) {
425
+ blockers.push(`cursor-agent: ${agentHealth.message}`);
426
+ }
427
+ // Check Git repository
428
+ const gitHealth = await checkGitHealth(options.cwd);
429
+ if (!gitHealth.ok) {
430
+ blockers.push(`Git: ${gitHealth.message}`);
431
+ }
432
+ // Check authentication
433
+ if (options.requireAuth !== false) {
434
+ const authHealth = await checkAuthHealth();
435
+ if (!authHealth.ok) {
436
+ blockers.push(`Authentication: ${authHealth.message}`);
437
+ }
438
+ }
439
+ // Check Git remote (warning only unless required)
440
+ const remoteHealth = await checkGitRemoteHealth(options.cwd);
441
+ if (!remoteHealth.ok) {
442
+ if (options.requireRemote) {
443
+ blockers.push(`Git remote: ${remoteHealth.message}`);
444
+ }
445
+ else {
446
+ warnings.push(`Git remote: ${remoteHealth.message}`);
447
+ }
448
+ }
449
+ // Check disk space
450
+ const diskHealth = await checkDiskSpace();
451
+ if (!diskHealth.ok) {
452
+ warnings.push(`Disk space: ${diskHealth.message}`);
453
+ }
454
+ // Check for stale locks
455
+ const lockHealth = await checkLockFiles(options.cwd);
456
+ if (!lockHealth.ok) {
457
+ warnings.push(`Locks: ${lockHealth.message}`);
458
+ recommendations.push('Run `cursorflow clean locks` to remove stale locks');
459
+ }
460
+ // Check worktrees
461
+ const worktreeHealth = await checkWorktrees(options.cwd);
462
+ if (!worktreeHealth.ok) {
463
+ warnings.push(`Worktrees: ${worktreeHealth.message}`);
464
+ recommendations.push('Run `cursorflow clean worktrees` to clean up orphaned worktrees');
465
+ }
466
+ // Check system resources
467
+ const resourceHealth = await checkSystemResources();
468
+ if (!resourceHealth.ok) {
469
+ warnings.push(`Resources: ${resourceHealth.message}`);
470
+ }
471
+ return {
472
+ canProceed: blockers.length === 0,
473
+ blockers,
474
+ warnings,
475
+ recommendations,
476
+ };
477
+ }
478
+ /**
479
+ * Print health check results to console
480
+ */
481
+ function printHealthReport(health) {
482
+ logger.section('🏥 System Health Check');
483
+ for (const check of health.checks) {
484
+ const icon = check.ok ? '✅' : '❌';
485
+ const latency = check.latencyMs ? ` (${check.latencyMs}ms)` : '';
486
+ console.log(`${icon} ${check.name}: ${check.message}${latency}`);
487
+ }
488
+ console.log('');
489
+ console.log(`Summary: ${health.summary.passed} passed, ${health.summary.failed} failed`);
490
+ console.log(`Overall: ${health.healthy ? '✅ Healthy' : '❌ Unhealthy'}`);
491
+ }
492
+ /**
493
+ * Print preflight check results to console
494
+ */
495
+ function printPreflightReport(result) {
496
+ logger.section('🚀 Preflight Check');
497
+ if (result.blockers.length > 0) {
498
+ console.log('❌ Blockers:');
499
+ for (const blocker of result.blockers) {
500
+ console.log(` • ${blocker}`);
501
+ }
502
+ console.log('');
503
+ }
504
+ if (result.warnings.length > 0) {
505
+ console.log('⚠️ Warnings:');
506
+ for (const warning of result.warnings) {
507
+ console.log(` • ${warning}`);
508
+ }
509
+ console.log('');
510
+ }
511
+ if (result.recommendations.length > 0) {
512
+ console.log('💡 Recommendations:');
513
+ for (const rec of result.recommendations) {
514
+ console.log(` • ${rec}`);
515
+ }
516
+ console.log('');
517
+ }
518
+ if (result.canProceed) {
519
+ logger.success('Preflight check passed!');
520
+ }
521
+ else {
522
+ logger.error('Preflight check failed. Please fix the blockers above.');
523
+ }
524
+ }
525
+ /**
526
+ * Auto-repair common issues found during health check
527
+ */
528
+ async function autoRepair(options = {}) {
529
+ const repaired = [];
530
+ const failed = [];
531
+ // Clean stale locks
532
+ try {
533
+ const lockDir = (0, lock_1.getLockDir)(options.cwd || process.cwd());
534
+ if (fs.existsSync(lockDir)) {
535
+ const cleaned = (0, lock_1.cleanStaleLocks)(lockDir);
536
+ if (cleaned > 0) {
537
+ repaired.push(`Cleaned ${cleaned} stale lock(s)`);
538
+ }
539
+ }
540
+ }
541
+ catch (e) {
542
+ failed.push(`Lock cleanup failed: ${e.message}`);
543
+ }
544
+ // Prune orphaned worktrees
545
+ try {
546
+ const result = git.runGitResult(['worktree', 'prune'], { cwd: options.cwd });
547
+ if (result.success) {
548
+ repaired.push('Pruned orphaned worktrees');
549
+ }
550
+ }
551
+ catch (e) {
552
+ failed.push(`Worktree prune failed: ${e.message}`);
553
+ }
554
+ return { repaired, failed };
555
+ }
556
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/utils/health.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Enhanced file-based locking with async support and stale lock detection
3
+ */
4
+ export interface LockInfo {
5
+ pid: number;
6
+ timestamp: number;
7
+ operation: string;
8
+ hostname?: string;
9
+ }
10
+ export interface LockOptions {
11
+ /** Maximum time to wait for lock in milliseconds */
12
+ timeoutMs?: number;
13
+ /** Delay between retry attempts in milliseconds */
14
+ retryDelayMs?: number;
15
+ /** Lock is considered stale after this many milliseconds */
16
+ staleTimeoutMs?: number;
17
+ /** Description of the operation for logging */
18
+ operation?: string;
19
+ }
20
+ export declare const DEFAULT_LOCK_OPTIONS: Required<LockOptions>;
21
+ /**
22
+ * Check if a process is still running
23
+ */
24
+ export declare function isProcessRunning(pid: number): boolean;
25
+ /**
26
+ * Get the lock directory for a given base path
27
+ */
28
+ export declare function getLockDir(basePath: string): string;
29
+ /**
30
+ * Ensure lock directory exists
31
+ */
32
+ export declare function ensureLockDir(basePath: string): string;
33
+ /**
34
+ * Read lock file info
35
+ */
36
+ export declare function readLockInfo(lockFile: string): LockInfo | null;
37
+ /**
38
+ * Check if a lock is stale
39
+ */
40
+ export declare function isLockStale(lockInfo: LockInfo, staleTimeoutMs: number): boolean;
41
+ /**
42
+ * Try to acquire a lock synchronously (for backward compatibility)
43
+ */
44
+ export declare function tryAcquireLockSync(lockFile: string, options?: LockOptions): boolean;
45
+ /**
46
+ * Release a lock synchronously
47
+ */
48
+ export declare function releaseLockSync(lockFile: string): void;
49
+ /**
50
+ * Acquire a lock with async waiting
51
+ */
52
+ export declare function acquireLock(lockFile: string, options?: LockOptions): Promise<boolean>;
53
+ /**
54
+ * Release a lock
55
+ */
56
+ export declare function releaseLock(lockFile: string): Promise<void>;
57
+ /**
58
+ * Execute a function while holding a lock
59
+ */
60
+ export declare function withLock<T>(lockFile: string, fn: () => Promise<T>, options?: LockOptions): Promise<T>;
61
+ /**
62
+ * Execute a synchronous function while holding a lock
63
+ */
64
+ export declare function withLockSync<T>(lockFile: string, fn: () => T, options?: LockOptions): T;
65
+ /**
66
+ * Clean up stale locks in a directory
67
+ */
68
+ export declare function cleanStaleLocks(lockDir: string, staleTimeoutMs?: number): number;
69
+ /**
70
+ * Get status of all locks in a directory
71
+ */
72
+ export declare function getLockStatus(lockDir: string): Array<{
73
+ file: string;
74
+ info: LockInfo;
75
+ stale: boolean;
76
+ }>;
77
+ /**
78
+ * Named lock manager for managing multiple locks
79
+ */
80
+ export declare class LockManager {
81
+ private readonly basePath;
82
+ private readonly heldLocks;
83
+ constructor(basePath: string);
84
+ private getLockPath;
85
+ acquire(name: string, options?: LockOptions): Promise<boolean>;
86
+ release(name: string): Promise<void>;
87
+ releaseAll(): void;
88
+ withLock<T>(name: string, fn: () => Promise<T>, options?: LockOptions): Promise<T>;
89
+ cleanStale(staleTimeoutMs?: number): number;
90
+ getStatus(): Array<{
91
+ file: string;
92
+ info: LockInfo;
93
+ stale: boolean;
94
+ }>;
95
+ }