@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,348 @@
1
+ "use strict";
2
+ /**
3
+ * TaskService - Manages CursorFlow task directories and validation
4
+ *
5
+ * Provides:
6
+ * - List prepared task directories
7
+ * - Get task details (lanes, dependencies)
8
+ * - Validate tasks (doctor integration)
9
+ * - Check run eligibility
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.TaskService = void 0;
46
+ exports.createTaskService = createTaskService;
47
+ const fs = __importStar(require("fs"));
48
+ const path = __importStar(require("path"));
49
+ const logger = __importStar(require("./logger"));
50
+ // Cache for validation results
51
+ const validationCache = new Map();
52
+ class TaskService {
53
+ tasksDir;
54
+ constructor(tasksDir) {
55
+ this.tasksDir = tasksDir;
56
+ }
57
+ /**
58
+ * List all prepared task directories
59
+ */
60
+ listTaskDirs() {
61
+ if (!fs.existsSync(this.tasksDir)) {
62
+ return [];
63
+ }
64
+ const dirs = fs.readdirSync(this.tasksDir)
65
+ .filter(name => {
66
+ const dirPath = path.join(this.tasksDir, name);
67
+ return fs.statSync(dirPath).isDirectory() && !name.startsWith('.');
68
+ })
69
+ .sort((a, b) => b.localeCompare(a)); // Most recent first (assuming timestamp prefix)
70
+ return dirs.map(name => this.getTaskDirInfo(name)).filter((t) => t !== null);
71
+ }
72
+ /**
73
+ * Get detailed information about a task directory
74
+ */
75
+ getTaskDirInfo(taskName) {
76
+ const taskPath = path.join(this.tasksDir, taskName);
77
+ if (!fs.existsSync(taskPath)) {
78
+ return null;
79
+ }
80
+ try {
81
+ const stat = fs.statSync(taskPath);
82
+ const timestamp = this.parseTimestampFromName(taskName) || stat.mtime;
83
+ const featureName = this.extractFeatureName(taskName);
84
+ const lanes = this.scanLaneFiles(taskPath);
85
+ // Get cached validation status
86
+ const cached = validationCache.get(taskName);
87
+ const validationStatus = cached?.status || 'unknown';
88
+ const lastValidated = cached?.lastValidated;
89
+ return {
90
+ name: taskName,
91
+ path: taskPath,
92
+ timestamp,
93
+ featureName,
94
+ lanes,
95
+ validationStatus,
96
+ lastValidated,
97
+ };
98
+ }
99
+ catch (error) {
100
+ logger.debug(`Failed to read task dir ${taskName}: ${error}`);
101
+ return null;
102
+ }
103
+ }
104
+ /**
105
+ * Scan lane files in a task directory
106
+ */
107
+ scanLaneFiles(taskPath) {
108
+ const files = fs.readdirSync(taskPath)
109
+ .filter(name => name.endsWith('.json'))
110
+ .sort();
111
+ const lanes = [];
112
+ for (const fileName of files) {
113
+ try {
114
+ const filePath = path.join(taskPath, fileName);
115
+ const content = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
116
+ const laneName = this.extractLaneName(fileName);
117
+ const tasks = content.tasks || [];
118
+ const dependsOn = content.dependsOn || [];
119
+ const preset = this.detectPreset(tasks);
120
+ const taskFlow = this.generateTaskFlow(tasks);
121
+ lanes.push({
122
+ fileName,
123
+ laneName,
124
+ preset,
125
+ taskCount: tasks.length,
126
+ taskFlow,
127
+ dependsOn,
128
+ });
129
+ }
130
+ catch (error) {
131
+ logger.debug(`Failed to parse lane file ${fileName}: ${error}`);
132
+ }
133
+ }
134
+ return lanes;
135
+ }
136
+ /**
137
+ * Extract lane name from filename (e.g., "01-lane-1.json" -> "lane-1")
138
+ */
139
+ extractLaneName(fileName) {
140
+ const baseName = fileName.replace('.json', '');
141
+ // Remove numeric prefix if present (e.g., "01-lane-1" -> "lane-1")
142
+ const match = baseName.match(/^\d+-(.+)$/);
143
+ return match ? match[1] : baseName;
144
+ }
145
+ /**
146
+ * Parse timestamp from task name (format: YYMMDDHHMM_FeatureName)
147
+ */
148
+ parseTimestampFromName(taskName) {
149
+ const match = taskName.match(/^(\d{10})_/);
150
+ if (!match)
151
+ return null;
152
+ const ts = match[1];
153
+ const year = 2000 + parseInt(ts.substring(0, 2), 10);
154
+ const month = parseInt(ts.substring(2, 4), 10) - 1;
155
+ const day = parseInt(ts.substring(4, 6), 10);
156
+ const hour = parseInt(ts.substring(6, 8), 10);
157
+ const minute = parseInt(ts.substring(8, 10), 10);
158
+ return new Date(year, month, day, hour, minute);
159
+ }
160
+ /**
161
+ * Extract feature name from task directory name
162
+ */
163
+ extractFeatureName(taskName) {
164
+ const parts = taskName.split('_');
165
+ if (parts.length >= 2) {
166
+ return parts.slice(1).join('_');
167
+ }
168
+ return taskName;
169
+ }
170
+ /**
171
+ * Detect task preset based on task structure
172
+ */
173
+ detectPreset(tasks) {
174
+ if (tasks.length === 0)
175
+ return 'empty';
176
+ const taskNames = tasks.map(t => t.name.toLowerCase());
177
+ if (taskNames.includes('plan') && taskNames.includes('implement') && taskNames.includes('test')) {
178
+ return 'complex';
179
+ }
180
+ if (taskNames.includes('implement') && taskNames.includes('test') && !taskNames.includes('plan')) {
181
+ return 'simple';
182
+ }
183
+ if (taskNames.includes('merge')) {
184
+ return 'merge';
185
+ }
186
+ return 'custom';
187
+ }
188
+ /**
189
+ * Generate task flow string (e.g., "plan → implement → test")
190
+ */
191
+ generateTaskFlow(tasks) {
192
+ if (tasks.length === 0)
193
+ return '';
194
+ return tasks.map(t => t.name).join(' → ');
195
+ }
196
+ /**
197
+ * Validate a task directory
198
+ */
199
+ validateTaskDir(taskName) {
200
+ const taskInfo = this.getTaskDirInfo(taskName);
201
+ if (!taskInfo) {
202
+ return {
203
+ status: 'errors',
204
+ errors: [`Task directory not found: ${taskName}`],
205
+ warnings: [],
206
+ issues: [`Task directory not found: ${taskName}`],
207
+ lastValidated: Date.now(),
208
+ };
209
+ }
210
+ const errors = [];
211
+ const warnings = [];
212
+ // Check if there are any lane files
213
+ if (taskInfo.lanes.length === 0) {
214
+ errors.push('No lane files found in task directory');
215
+ }
216
+ // Validate each lane file
217
+ for (const lane of taskInfo.lanes) {
218
+ // Check task count
219
+ if (lane.taskCount === 0) {
220
+ errors.push(`Lane ${lane.fileName} has no tasks defined`);
221
+ }
222
+ // Check dependencies exist
223
+ for (const dep of lane.dependsOn) {
224
+ const depExists = taskInfo.lanes.some(l => l.laneName === dep || l.fileName === dep || l.fileName === `${dep}.json`);
225
+ if (!depExists) {
226
+ warnings.push(`Lane ${lane.fileName} depends on unknown lane: ${dep}`);
227
+ }
228
+ }
229
+ // Validate lane file structure
230
+ try {
231
+ const filePath = path.join(taskInfo.path, lane.fileName);
232
+ const content = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
233
+ // Check tasks array
234
+ if (!Array.isArray(content.tasks)) {
235
+ errors.push(`Lane ${lane.fileName}: 'tasks' must be an array`);
236
+ }
237
+ else {
238
+ // Validate each task
239
+ for (let i = 0; i < content.tasks.length; i++) {
240
+ const task = content.tasks[i];
241
+ if (!task.name) {
242
+ errors.push(`Lane ${lane.fileName}: Task ${i + 1} missing 'name'`);
243
+ }
244
+ if (!task.prompt) {
245
+ errors.push(`Lane ${lane.fileName}: Task ${i + 1} missing 'prompt'`);
246
+ }
247
+ }
248
+ }
249
+ }
250
+ catch (error) {
251
+ errors.push(`Lane ${lane.fileName}: Invalid JSON - ${error}`);
252
+ }
253
+ }
254
+ // Check for circular dependencies
255
+ const circularDeps = this.detectCircularDependencies(taskInfo.lanes);
256
+ if (circularDeps.length > 0) {
257
+ errors.push(`Circular dependencies detected: ${circularDeps.join(' -> ')}`);
258
+ }
259
+ // Determine overall status
260
+ let status = 'valid';
261
+ if (errors.length > 0) {
262
+ status = 'errors';
263
+ }
264
+ else if (warnings.length > 0) {
265
+ status = 'warnings';
266
+ }
267
+ const issues = [...errors, ...warnings];
268
+ const result = {
269
+ issues,
270
+ status,
271
+ errors,
272
+ warnings,
273
+ lastValidated: Date.now(),
274
+ };
275
+ // Cache the result
276
+ validationCache.set(taskName, result);
277
+ return result;
278
+ }
279
+ /**
280
+ * Detect circular dependencies in lane dependency graph
281
+ */
282
+ detectCircularDependencies(lanes) {
283
+ const visited = new Set();
284
+ const stack = new Set();
285
+ const cycle = [];
286
+ const dfs = (laneName) => {
287
+ if (stack.has(laneName)) {
288
+ cycle.push(laneName);
289
+ return true; // Cycle found
290
+ }
291
+ if (visited.has(laneName)) {
292
+ return false;
293
+ }
294
+ visited.add(laneName);
295
+ stack.add(laneName);
296
+ const lane = lanes.find(l => l.laneName === laneName);
297
+ if (lane) {
298
+ for (const dep of lane.dependsOn) {
299
+ if (dfs(dep)) {
300
+ cycle.unshift(laneName);
301
+ return true;
302
+ }
303
+ }
304
+ }
305
+ stack.delete(laneName);
306
+ return false;
307
+ };
308
+ for (const lane of lanes) {
309
+ if (dfs(lane.laneName)) {
310
+ break;
311
+ }
312
+ }
313
+ return cycle;
314
+ }
315
+ /**
316
+ * Get cached validation status
317
+ */
318
+ getValidationStatus(taskName) {
319
+ const cached = validationCache.get(taskName);
320
+ return cached?.status || 'unknown';
321
+ }
322
+ /**
323
+ * Check if a task can be run
324
+ */
325
+ canRun(taskName) {
326
+ const validation = this.validateTaskDir(taskName);
327
+ if (validation.status === 'errors') {
328
+ return { ok: false, issues: validation.errors };
329
+ }
330
+ return { ok: true, issues: validation.warnings };
331
+ }
332
+ /**
333
+ * Clear validation cache
334
+ */
335
+ clearCache() {
336
+ validationCache.clear();
337
+ }
338
+ }
339
+ exports.TaskService = TaskService;
340
+ /**
341
+ * Create a TaskService instance with default paths
342
+ */
343
+ function createTaskService(projectRoot) {
344
+ const root = projectRoot || process.cwd();
345
+ const tasksDir = path.join(root, '_cursorflow', 'tasks');
346
+ return new TaskService(tasksDir);
347
+ }
348
+ //# sourceMappingURL=task-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-service.js","sourceRoot":"","sources":["../../src/utils/task-service.ts"],"names":[],"mappings":"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"}
@@ -1,275 +1,5 @@
1
1
  /**
2
2
  * Shared type definitions for CursorFlow
3
+ * Re-exports from central types directory for backward compatibility
3
4
  */
4
- export interface LaneConfig {
5
- devPort: number;
6
- autoCreatePr: boolean;
7
- }
8
- export interface CursorFlowConfig {
9
- tasksDir: string;
10
- logsDir: string;
11
- baseBranch: string;
12
- branchPrefix: string;
13
- executor: 'cursor-agent' | 'cloud';
14
- pollInterval: number;
15
- allowDependencyChange: boolean;
16
- lockfileReadOnly: boolean;
17
- enableReview: boolean;
18
- reviewModel: string;
19
- reviewAllTasks?: boolean;
20
- maxReviewIterations: number;
21
- defaultLaneConfig: LaneConfig;
22
- logLevel: string;
23
- verboseGit: boolean;
24
- worktreePrefix: string;
25
- maxConcurrentLanes: number;
26
- projectRoot: string;
27
- /** Output format for cursor-agent (default: 'stream-json') */
28
- agentOutputFormat: 'stream-json' | 'json' | 'plain';
29
- webhooks?: WebhookConfig[];
30
- /** Enhanced logging configuration */
31
- enhancedLogging?: Partial<EnhancedLogConfig>;
32
- }
33
- export interface WebhookConfig {
34
- enabled?: boolean;
35
- url: string;
36
- secret?: string;
37
- events?: string[];
38
- headers?: Record<string, string>;
39
- retries?: number;
40
- timeoutMs?: number;
41
- }
42
- /**
43
- * Enhanced logging configuration
44
- */
45
- export interface EnhancedLogConfig {
46
- /** Enable enhanced logging features (default: true) */
47
- enabled: boolean;
48
- /** Strip ANSI escape codes from clean logs (default: true) */
49
- stripAnsi: boolean;
50
- /** Add timestamps to each line (default: true) */
51
- addTimestamps: boolean;
52
- /** Maximum size in bytes before rotation (default: 50MB) */
53
- maxFileSize: number;
54
- /** Number of rotated files to keep (default: 5) */
55
- maxFiles: number;
56
- /** Write raw output with ANSI codes to separate file (default: true) */
57
- keepRawLogs: boolean;
58
- /** Write structured JSON log entries (default: true) */
59
- writeJsonLog: boolean;
60
- /** Timestamp format: 'iso' | 'relative' | 'short' (default: 'iso') */
61
- timestampFormat: 'iso' | 'relative' | 'short';
62
- }
63
- export interface CursorFlowEvent<T = Record<string, any>> {
64
- id: string;
65
- type: string;
66
- timestamp: string;
67
- runId: string;
68
- payload: T;
69
- }
70
- export type EventHandler<T = any> = (event: CursorFlowEvent<T>) => void | Promise<void>;
71
- export interface OrchestrationStartedPayload {
72
- runId: string;
73
- tasksDir: string;
74
- laneCount: number;
75
- runRoot: string;
76
- }
77
- export interface OrchestrationCompletedPayload {
78
- runId: string;
79
- laneCount: number;
80
- completedCount: number;
81
- failedCount: number;
82
- }
83
- export interface OrchestrationFailedPayload {
84
- error: string;
85
- blockedLanes?: string[];
86
- }
87
- export interface LaneStartedPayload {
88
- laneName: string;
89
- pid?: number;
90
- logPath: string;
91
- }
92
- export interface LaneCompletedPayload {
93
- laneName: string;
94
- exitCode: number;
95
- }
96
- export interface LaneFailedPayload {
97
- laneName: string;
98
- exitCode: number;
99
- error: string;
100
- }
101
- export interface LaneDependencyRequestedPayload {
102
- laneName: string;
103
- dependencyRequest: DependencyRequestPlan;
104
- }
105
- export interface TaskStartedPayload {
106
- taskName: string;
107
- taskBranch: string;
108
- index: number;
109
- }
110
- export interface TaskCompletedPayload {
111
- taskName: string;
112
- taskBranch: string;
113
- status: string;
114
- }
115
- export interface TaskFailedPayload {
116
- taskName: string;
117
- taskBranch: string;
118
- error: string;
119
- }
120
- export interface AgentPromptSentPayload {
121
- taskName: string;
122
- model: string;
123
- promptLength: number;
124
- }
125
- export interface AgentResponseReceivedPayload {
126
- taskName: string;
127
- ok: boolean;
128
- duration: number;
129
- responseLength: number;
130
- error?: string;
131
- }
132
- export interface ReviewStartedPayload {
133
- taskName: string;
134
- taskBranch: string;
135
- }
136
- export interface ReviewCompletedPayload {
137
- taskName: string;
138
- status: 'approved' | 'needs_changes';
139
- issueCount: number;
140
- summary: string;
141
- }
142
- export interface ReviewApprovedPayload {
143
- taskName: string;
144
- iterations: number;
145
- }
146
- export interface ReviewRejectedPayload {
147
- taskName: string;
148
- reason: string;
149
- iterations: number;
150
- }
151
- export interface DependencyPolicy {
152
- allowDependencyChange: boolean;
153
- lockfileReadOnly: boolean;
154
- }
155
- export interface Task {
156
- name: string;
157
- prompt: string;
158
- model?: string;
159
- /** Acceptance criteria for the AI reviewer to validate */
160
- acceptanceCriteria?: string[];
161
- /** Task-level dependencies (format: "lane:task") */
162
- dependsOn?: string[];
163
- /** Task execution timeout in milliseconds. Overrides lane-level timeout. */
164
- timeout?: number;
165
- }
166
- export interface RunnerConfig {
167
- tasks: Task[];
168
- dependsOn?: string[];
169
- pipelineBranch?: string;
170
- worktreeDir?: string;
171
- branchPrefix?: string;
172
- worktreeRoot?: string;
173
- baseBranch?: string;
174
- model?: string;
175
- dependencyPolicy: DependencyPolicy;
176
- enableReview?: boolean;
177
- /** Output format for cursor-agent (default: 'stream-json') */
178
- agentOutputFormat?: 'stream-json' | 'json' | 'plain';
179
- reviewModel?: string;
180
- reviewAllTasks?: boolean;
181
- maxReviewIterations?: number;
182
- acceptanceCriteria?: string[];
183
- /** Task execution timeout in milliseconds. Default: 600000 (10 minutes) */
184
- timeout?: number;
185
- /**
186
- * Enable intervention feature (stdin piping for message injection).
187
- * Warning: May cause stdout buffering issues on some systems.
188
- * Default: false
189
- */
190
- enableIntervention?: boolean;
191
- /**
192
- * Disable Git operations (worktree, branch, push, commit).
193
- * Useful for testing or environments without Git remote.
194
- * Default: false
195
- */
196
- noGit?: boolean;
197
- }
198
- export interface DependencyRequestPlan {
199
- reason: string;
200
- changes: string[];
201
- commands: string[];
202
- notes?: string;
203
- }
204
- export interface TaskExecutionResult {
205
- taskName: string;
206
- taskBranch: string;
207
- status: 'FINISHED' | 'ERROR' | 'BLOCKED_DEPENDENCY';
208
- error?: string;
209
- dependencyRequest?: DependencyRequestPlan | null;
210
- }
211
- export interface AgentSendResult {
212
- ok: boolean;
213
- exitCode: number;
214
- error?: string;
215
- sessionId?: string;
216
- resultText?: string;
217
- }
218
- export interface ReviewIssue {
219
- severity: 'critical' | 'major' | 'minor';
220
- description: string;
221
- file?: string;
222
- suggestion?: string;
223
- }
224
- export interface ReviewResult {
225
- status: 'approved' | 'needs_changes';
226
- buildSuccess: boolean;
227
- issues: ReviewIssue[];
228
- suggestions: string[];
229
- summary: string;
230
- raw: string;
231
- }
232
- export interface TaskResult {
233
- taskName: string;
234
- taskBranch: string;
235
- acceptanceCriteria?: string[];
236
- [key: string]: any;
237
- }
238
- export interface LaneState {
239
- label: string;
240
- status: 'pending' | 'running' | 'completed' | 'failed' | 'paused' | 'waiting' | 'reviewing';
241
- currentTaskIndex: number;
242
- totalTasks: number;
243
- worktreeDir: string | null;
244
- pipelineBranch: string | null;
245
- startTime: number;
246
- endTime: number | null;
247
- error: string | null;
248
- dependencyRequest: DependencyRequestPlan | null;
249
- updatedAt?: number;
250
- tasksFile?: string;
251
- dependsOn?: string[];
252
- pid?: number;
253
- /** List of completed task names in this lane */
254
- completedTasks?: string[];
255
- /** Task-level dependencies currently being waited for (format: "lane:task") */
256
- waitingFor?: string[];
257
- }
258
- export interface ConversationEntry {
259
- timestamp: string;
260
- role: 'user' | 'assistant' | 'reviewer' | 'system';
261
- task: string | null;
262
- fullText: string;
263
- textLength: number;
264
- model: string | null;
265
- }
266
- export interface GitLogEntry {
267
- timestamp: string;
268
- operation: string;
269
- [key: string]: any;
270
- }
271
- export interface EventEntry {
272
- timestamp: string;
273
- event: string;
274
- [key: string]: any;
275
- }
5
+ export * from '../types';
@@ -1,6 +1,22 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Shared type definitions for CursorFlow
4
+ * Re-exports from central types directory for backward compatibility
4
5
  */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
+ };
5
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
+ __exportStar(require("../types"), exports);
6
22
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,2CAAyB"}