@litmers/cursorflow-orchestrator 0.1.30 → 0.1.34

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 (129) hide show
  1. package/README.md +144 -52
  2. package/commands/cursorflow-add.md +159 -0
  3. package/commands/cursorflow-monitor.md +23 -2
  4. package/commands/cursorflow-new.md +87 -0
  5. package/dist/cli/add.d.ts +7 -0
  6. package/dist/cli/add.js +377 -0
  7. package/dist/cli/add.js.map +1 -0
  8. package/dist/cli/clean.js +1 -0
  9. package/dist/cli/clean.js.map +1 -1
  10. package/dist/cli/config.d.ts +7 -0
  11. package/dist/cli/config.js +181 -0
  12. package/dist/cli/config.js.map +1 -0
  13. package/dist/cli/index.js +34 -30
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/logs.js +7 -33
  16. package/dist/cli/logs.js.map +1 -1
  17. package/dist/cli/monitor.js +51 -62
  18. package/dist/cli/monitor.js.map +1 -1
  19. package/dist/cli/new.d.ts +7 -0
  20. package/dist/cli/new.js +232 -0
  21. package/dist/cli/new.js.map +1 -0
  22. package/dist/cli/prepare.js +95 -193
  23. package/dist/cli/prepare.js.map +1 -1
  24. package/dist/cli/resume.js +11 -47
  25. package/dist/cli/resume.js.map +1 -1
  26. package/dist/cli/run.js +27 -22
  27. package/dist/cli/run.js.map +1 -1
  28. package/dist/cli/tasks.js +1 -2
  29. package/dist/cli/tasks.js.map +1 -1
  30. package/dist/core/failure-policy.d.ts +9 -0
  31. package/dist/core/failure-policy.js +9 -0
  32. package/dist/core/failure-policy.js.map +1 -1
  33. package/dist/core/orchestrator.d.ts +20 -6
  34. package/dist/core/orchestrator.js +217 -331
  35. package/dist/core/orchestrator.js.map +1 -1
  36. package/dist/core/runner/agent.d.ts +27 -0
  37. package/dist/core/runner/agent.js +294 -0
  38. package/dist/core/runner/agent.js.map +1 -0
  39. package/dist/core/runner/index.d.ts +5 -0
  40. package/dist/core/runner/index.js +22 -0
  41. package/dist/core/runner/index.js.map +1 -0
  42. package/dist/core/runner/pipeline.d.ts +9 -0
  43. package/dist/core/runner/pipeline.js +539 -0
  44. package/dist/core/runner/pipeline.js.map +1 -0
  45. package/dist/core/runner/prompt.d.ts +25 -0
  46. package/dist/core/runner/prompt.js +175 -0
  47. package/dist/core/runner/prompt.js.map +1 -0
  48. package/dist/core/runner/task.d.ts +26 -0
  49. package/dist/core/runner/task.js +283 -0
  50. package/dist/core/runner/task.js.map +1 -0
  51. package/dist/core/runner/utils.d.ts +37 -0
  52. package/dist/core/runner/utils.js +161 -0
  53. package/dist/core/runner/utils.js.map +1 -0
  54. package/dist/core/runner.d.ts +2 -96
  55. package/dist/core/runner.js +11 -1136
  56. package/dist/core/runner.js.map +1 -1
  57. package/dist/core/stall-detection.d.ts +326 -0
  58. package/dist/core/stall-detection.js +781 -0
  59. package/dist/core/stall-detection.js.map +1 -0
  60. package/dist/types/config.d.ts +6 -6
  61. package/dist/types/flow.d.ts +84 -0
  62. package/dist/types/flow.js +10 -0
  63. package/dist/types/flow.js.map +1 -0
  64. package/dist/types/index.d.ts +1 -0
  65. package/dist/types/index.js +3 -3
  66. package/dist/types/index.js.map +1 -1
  67. package/dist/types/lane.d.ts +0 -2
  68. package/dist/types/logging.d.ts +5 -1
  69. package/dist/types/task.d.ts +7 -11
  70. package/dist/utils/config.js +7 -15
  71. package/dist/utils/config.js.map +1 -1
  72. package/dist/utils/dependency.d.ts +36 -1
  73. package/dist/utils/dependency.js +256 -1
  74. package/dist/utils/dependency.js.map +1 -1
  75. package/dist/utils/enhanced-logger.d.ts +45 -82
  76. package/dist/utils/enhanced-logger.js +238 -844
  77. package/dist/utils/enhanced-logger.js.map +1 -1
  78. package/dist/utils/git.d.ts +29 -0
  79. package/dist/utils/git.js +115 -5
  80. package/dist/utils/git.js.map +1 -1
  81. package/dist/utils/state.js +0 -2
  82. package/dist/utils/state.js.map +1 -1
  83. package/dist/utils/task-service.d.ts +2 -2
  84. package/dist/utils/task-service.js +40 -31
  85. package/dist/utils/task-service.js.map +1 -1
  86. package/package.json +4 -3
  87. package/src/cli/add.ts +397 -0
  88. package/src/cli/clean.ts +1 -0
  89. package/src/cli/config.ts +177 -0
  90. package/src/cli/index.ts +36 -32
  91. package/src/cli/logs.ts +7 -31
  92. package/src/cli/monitor.ts +55 -71
  93. package/src/cli/new.ts +235 -0
  94. package/src/cli/prepare.ts +98 -205
  95. package/src/cli/resume.ts +13 -56
  96. package/src/cli/run.ts +311 -306
  97. package/src/cli/tasks.ts +1 -2
  98. package/src/core/failure-policy.ts +9 -0
  99. package/src/core/orchestrator.ts +281 -375
  100. package/src/core/runner/agent.ts +314 -0
  101. package/src/core/runner/index.ts +6 -0
  102. package/src/core/runner/pipeline.ts +567 -0
  103. package/src/core/runner/prompt.ts +174 -0
  104. package/src/core/runner/task.ts +320 -0
  105. package/src/core/runner/utils.ts +142 -0
  106. package/src/core/runner.ts +8 -1347
  107. package/src/core/stall-detection.ts +936 -0
  108. package/src/types/config.ts +6 -6
  109. package/src/types/flow.ts +91 -0
  110. package/src/types/index.ts +15 -3
  111. package/src/types/lane.ts +0 -2
  112. package/src/types/logging.ts +5 -1
  113. package/src/types/task.ts +7 -11
  114. package/src/utils/config.ts +8 -16
  115. package/src/utils/dependency.ts +311 -2
  116. package/src/utils/enhanced-logger.ts +263 -927
  117. package/src/utils/git.ts +145 -5
  118. package/src/utils/state.ts +0 -2
  119. package/src/utils/task-service.ts +48 -40
  120. package/commands/cursorflow-review.md +0 -56
  121. package/commands/cursorflow-runs.md +0 -59
  122. package/dist/cli/runs.d.ts +0 -5
  123. package/dist/cli/runs.js +0 -214
  124. package/dist/cli/runs.js.map +0 -1
  125. package/dist/core/reviewer.d.ts +0 -66
  126. package/dist/core/reviewer.js +0 -265
  127. package/dist/core/reviewer.js.map +0 -1
  128. package/src/cli/runs.ts +0 -212
  129. package/src/core/reviewer.ts +0 -285
@@ -0,0 +1,539 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.runTasks = runTasks;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const git = __importStar(require("../../utils/git"));
40
+ const logger = __importStar(require("../../utils/logger"));
41
+ const cursor_agent_1 = require("../../utils/cursor-agent");
42
+ const state_1 = require("../../utils/state");
43
+ const events_1 = require("../../utils/events");
44
+ const health_1 = require("../../utils/health");
45
+ const checkpoint_1 = require("../../utils/checkpoint");
46
+ const path_1 = require("../../utils/path");
47
+ const agent_1 = require("./agent");
48
+ const task_1 = require("./task");
49
+ /**
50
+ * Validate task configuration
51
+ */
52
+ function validateTaskConfig(config) {
53
+ if (!config.tasks || config.tasks.length === 0) {
54
+ throw new Error('No tasks defined in configuration');
55
+ }
56
+ for (let i = 0; i < config.tasks.length; i++) {
57
+ const task = config.tasks[i];
58
+ if (!task.name)
59
+ throw new Error(`Task at index ${i} has no name`);
60
+ if (!task.prompt)
61
+ throw new Error(`Task "${task.name}" has no prompt`);
62
+ }
63
+ }
64
+ /**
65
+ * Run all tasks in sequence
66
+ */
67
+ async function runTasks(tasksFile, config, runDir, options = {}) {
68
+ const startIndex = options.startIndex || 0;
69
+ const noGit = options.noGit || config.noGit || false;
70
+ // Ensure paths are absolute before potentially changing directory
71
+ runDir = path.resolve(runDir);
72
+ tasksFile = path.resolve(tasksFile);
73
+ if (noGit) {
74
+ logger.info('🚫 Running in noGit mode - Git operations will be skipped');
75
+ }
76
+ // Validate configuration before starting
77
+ logger.info('Validating task configuration...');
78
+ try {
79
+ validateTaskConfig(config);
80
+ logger.success('✓ Configuration valid');
81
+ }
82
+ catch (validationError) {
83
+ logger.error('❌ Configuration validation failed');
84
+ logger.error(` ${validationError.message}`);
85
+ throw validationError;
86
+ }
87
+ // Run preflight checks (can be skipped for resume)
88
+ if (!options.skipPreflight && startIndex === 0) {
89
+ logger.info('Running preflight checks...');
90
+ const preflight = await (0, health_1.preflightCheck)({
91
+ requireRemote: !noGit,
92
+ requireAuth: true,
93
+ });
94
+ if (!preflight.canProceed) {
95
+ (0, health_1.printPreflightReport)(preflight);
96
+ throw new Error('Preflight check failed. Please fix the blockers above.');
97
+ }
98
+ if (preflight.warnings.length > 0) {
99
+ for (const warning of preflight.warnings) {
100
+ logger.warn(`⚠️ ${warning}`);
101
+ }
102
+ }
103
+ logger.success('✓ Preflight checks passed');
104
+ }
105
+ // Warn if baseBranch is set in config (it will be ignored)
106
+ if (config.baseBranch) {
107
+ logger.warn(`⚠️ config.baseBranch="${config.baseBranch}" will be ignored. Using current branch instead.`);
108
+ }
109
+ // Set verbose git logging
110
+ git.setVerboseGit(config.verboseGit || false);
111
+ // Ensure cursor-agent is installed
112
+ (0, cursor_agent_1.ensureCursorAgent)();
113
+ // Check authentication before starting
114
+ logger.info('Checking Cursor authentication...');
115
+ const authStatus = (0, cursor_agent_1.checkCursorAuth)();
116
+ if (!authStatus.authenticated) {
117
+ logger.error('❌ Cursor authentication failed');
118
+ logger.error(` ${authStatus.message}`);
119
+ if (authStatus.details) {
120
+ logger.error(` Details: ${authStatus.details}`);
121
+ }
122
+ if (authStatus.help) {
123
+ logger.error(` ${authStatus.help}`);
124
+ }
125
+ console.log('');
126
+ (0, cursor_agent_1.printAuthHelp)();
127
+ throw new Error('Cursor authentication required. Please authenticate and try again.');
128
+ }
129
+ logger.success('✓ Cursor authentication OK');
130
+ // In noGit mode, we don't need repoRoot - use current directory
131
+ const repoRoot = noGit ? process.cwd() : git.getMainRepoRoot();
132
+ // ALWAYS use current branch as base - ignore config.baseBranch
133
+ // This ensures dependency structure is maintained in the worktree
134
+ const currentBranch = noGit ? 'main' : git.getCurrentBranch(repoRoot);
135
+ logger.info(`📍 Base branch: ${currentBranch} (current branch)`);
136
+ // Load existing state if resuming
137
+ const statePath = (0, path_1.safeJoin)(runDir, 'state.json');
138
+ let state = null;
139
+ if (fs.existsSync(statePath)) {
140
+ // Check if state needs recovery
141
+ if ((0, state_1.stateNeedsRecovery)(statePath)) {
142
+ logger.warn('State file indicates incomplete previous run. Attempting recovery...');
143
+ const repairedState = (0, state_1.repairLaneState)(statePath);
144
+ if (repairedState) {
145
+ state = repairedState;
146
+ logger.success('✓ State recovered');
147
+ }
148
+ else {
149
+ logger.warn('Could not recover state. Starting fresh.');
150
+ }
151
+ }
152
+ else {
153
+ state = (0, state_1.loadState)(statePath);
154
+ // Validate loaded state
155
+ if (state) {
156
+ const validation = (0, state_1.validateLaneState)(statePath, {
157
+ checkWorktree: !noGit,
158
+ checkBranch: !noGit,
159
+ autoRepair: true,
160
+ });
161
+ if (!validation.valid) {
162
+ logger.warn(`State validation issues: ${validation.issues.join(', ')}`);
163
+ if (validation.repaired) {
164
+ logger.info('State was auto-repaired');
165
+ state = validation.repairedState || state;
166
+ }
167
+ }
168
+ }
169
+ }
170
+ }
171
+ const randomSuffix = Math.random().toString(36).substring(2, 7);
172
+ const pipelineBranch = state?.pipelineBranch || config.pipelineBranch || `${config.branchPrefix || 'cursorflow/'}${Date.now().toString(36)}-${randomSuffix}`;
173
+ // In noGit mode, use a simple local directory instead of worktree
174
+ // Flatten the path by replacing slashes with hyphens to avoid race conditions in parent directory creation
175
+ const worktreeDir = state?.worktreeDir || config.worktreeDir || (noGit
176
+ ? (0, path_1.safeJoin)(repoRoot, config.worktreeRoot || '_cursorflow/workdir', pipelineBranch.replace(/\//g, '-'))
177
+ : (0, path_1.safeJoin)(repoRoot, config.worktreeRoot || '_cursorflow/worktrees', pipelineBranch.replace(/\//g, '-')));
178
+ if (startIndex === 0) {
179
+ logger.section('🚀 Starting Pipeline');
180
+ }
181
+ else {
182
+ logger.section(`🔁 Resuming Pipeline from task ${startIndex + 1}`);
183
+ }
184
+ logger.info(`Pipeline Branch: ${pipelineBranch}`);
185
+ logger.info(`Worktree: ${worktreeDir}`);
186
+ logger.info(`Tasks: ${config.tasks.length}`);
187
+ // Create worktree only if starting fresh and worktree doesn't exist
188
+ if (!fs.existsSync(worktreeDir)) {
189
+ if (noGit) {
190
+ // In noGit mode, just create the directory
191
+ logger.info(`Creating work directory: ${worktreeDir}`);
192
+ fs.mkdirSync(worktreeDir, { recursive: true });
193
+ }
194
+ else {
195
+ // Use a simple retry mechanism for Git worktree creation to handle potential race conditions
196
+ let retries = 3;
197
+ let lastError = null;
198
+ while (retries > 0) {
199
+ try {
200
+ // Ensure parent directory exists before calling git worktree
201
+ const worktreeParent = path.dirname(worktreeDir);
202
+ if (!fs.existsSync(worktreeParent)) {
203
+ fs.mkdirSync(worktreeParent, { recursive: true });
204
+ }
205
+ // Always use the current branch (already captured at start) as the base branch
206
+ git.createWorktree(worktreeDir, pipelineBranch, {
207
+ baseBranch: currentBranch,
208
+ cwd: repoRoot,
209
+ });
210
+ break; // Success
211
+ }
212
+ catch (e) {
213
+ lastError = e;
214
+ retries--;
215
+ if (retries > 0) {
216
+ const delay = Math.floor(Math.random() * 1000) + 500;
217
+ logger.warn(`Worktree creation failed, retrying in ${delay}ms... (${retries} retries left)`);
218
+ await new Promise(resolve => setTimeout(resolve, delay));
219
+ }
220
+ }
221
+ }
222
+ if (retries === 0 && lastError) {
223
+ throw new Error(`Failed to create Git worktree after retries: ${lastError.message}`);
224
+ }
225
+ }
226
+ }
227
+ else if (!noGit) {
228
+ // If it exists but we are in Git mode, ensure it's actually a worktree and on the right branch
229
+ logger.info(`Reusing existing worktree: ${worktreeDir}`);
230
+ try {
231
+ git.runGit(['checkout', pipelineBranch], { cwd: worktreeDir });
232
+ }
233
+ catch (e) {
234
+ // If checkout fails, maybe the worktree is in a weird state.
235
+ // For now, just log it. In a more robust impl, we might want to repair it.
236
+ logger.warn(`Failed to checkout branch ${pipelineBranch} in existing worktree: ${e}`);
237
+ }
238
+ }
239
+ // Change current directory to worktree for all subsequent operations
240
+ // This ensures that all spawned processes (like git or npm) inherit the correct CWD
241
+ logger.info(`Changing directory to worktree: ${worktreeDir}`);
242
+ process.chdir(worktreeDir);
243
+ // Create chat
244
+ logger.info('Creating chat session...');
245
+ const chatId = (0, agent_1.cursorAgentCreateChat)(worktreeDir);
246
+ // Initialize state if not loaded
247
+ if (!state) {
248
+ state = {
249
+ status: 'running',
250
+ pipelineBranch,
251
+ worktreeDir,
252
+ totalTasks: config.tasks.length,
253
+ currentTaskIndex: 0,
254
+ label: pipelineBranch,
255
+ startTime: Date.now(),
256
+ endTime: null,
257
+ error: null,
258
+ dependencyRequest: null,
259
+ tasksFile, // Store tasks file for resume
260
+ completedTasks: [],
261
+ };
262
+ }
263
+ else {
264
+ state.status = 'running';
265
+ state.error = null;
266
+ state.dependencyRequest = null;
267
+ state.pipelineBranch = pipelineBranch;
268
+ state.worktreeDir = worktreeDir;
269
+ state.label = state.label || pipelineBranch;
270
+ state.completedTasks = state.completedTasks || [];
271
+ }
272
+ (0, state_1.saveState)(statePath, state);
273
+ // Run tasks
274
+ const results = [];
275
+ const laneName = state.label || path.basename(runDir);
276
+ let previousTaskBranch = null;
277
+ for (let i = startIndex; i < config.tasks.length; i++) {
278
+ // Re-read tasks file to allow dynamic updates to future tasks
279
+ try {
280
+ const currentConfig = JSON.parse(fs.readFileSync(tasksFile, 'utf8'));
281
+ if (currentConfig.tasks && currentConfig.tasks.length > i) {
282
+ // Update the current and future tasks from the file
283
+ config.tasks[i] = currentConfig.tasks[i];
284
+ // Also update future tasks in case the user added/removed tasks
285
+ for (let j = i + 1; j < currentConfig.tasks.length; j++) {
286
+ config.tasks[j] = currentConfig.tasks[j];
287
+ }
288
+ // Sync the length if tasks were added
289
+ if (currentConfig.tasks.length > config.tasks.length) {
290
+ for (let j = config.tasks.length; j < currentConfig.tasks.length; j++) {
291
+ config.tasks.push(currentConfig.tasks[j]);
292
+ }
293
+ }
294
+ // Update total tasks count in state if it changed
295
+ if (state && state.totalTasks !== currentConfig.tasks.length) {
296
+ state.totalTasks = currentConfig.tasks.length;
297
+ (0, state_1.saveState)(statePath, state);
298
+ logger.info(`📋 Task list updated. New total tasks: ${state.totalTasks}`);
299
+ }
300
+ }
301
+ }
302
+ catch (e) {
303
+ logger.warn(`⚠️ Could not reload tasks from ${tasksFile}. Using existing configuration. (${e instanceof Error ? e.message : String(e)})`);
304
+ }
305
+ const task = config.tasks[i];
306
+ const taskBranch = `${pipelineBranch}--${String(i + 1).padStart(2, '0')}-${task.name}`;
307
+ // Delete previous task branch if it exists (Task 1 deleted when Task 2 starts, etc.)
308
+ if (!noGit && previousTaskBranch) {
309
+ logger.info(`🧹 Deleting previous task branch: ${previousTaskBranch}`);
310
+ try {
311
+ // Only delete if it's not the current branch
312
+ const current = git.getCurrentBranch(worktreeDir);
313
+ if (current !== previousTaskBranch) {
314
+ git.deleteBranch(previousTaskBranch, { cwd: worktreeDir, force: true });
315
+ }
316
+ }
317
+ catch (e) {
318
+ logger.warn(`Failed to delete previous branch ${previousTaskBranch}: ${e}`);
319
+ }
320
+ }
321
+ // Create checkpoint before each task
322
+ try {
323
+ await (0, checkpoint_1.createCheckpoint)(laneName, runDir, noGit ? null : worktreeDir, {
324
+ description: `Before task ${i + 1}: ${task.name}`,
325
+ maxCheckpoints: 5,
326
+ });
327
+ }
328
+ catch (e) {
329
+ logger.warn(`Failed to create checkpoint: ${e.message}`);
330
+ }
331
+ // Handle task-level dependencies
332
+ if (task.dependsOn && task.dependsOn.length > 0) {
333
+ state.status = 'waiting';
334
+ state.waitingFor = task.dependsOn;
335
+ (0, state_1.saveState)(statePath, state);
336
+ try {
337
+ // Use enhanced dependency wait with timeout
338
+ await (0, task_1.waitForTaskDependencies)(task.dependsOn, runDir, {
339
+ timeoutMs: config.timeout || 30 * 60 * 1000,
340
+ onTimeout: 'fail',
341
+ });
342
+ if (!noGit) {
343
+ await (0, task_1.mergeDependencyBranches)(task.dependsOn, runDir, worktreeDir, pipelineBranch);
344
+ }
345
+ state.status = 'running';
346
+ state.waitingFor = [];
347
+ (0, state_1.saveState)(statePath, state);
348
+ }
349
+ catch (e) {
350
+ state.status = 'failed';
351
+ state.waitingFor = [];
352
+ state.error = e.message;
353
+ (0, state_1.saveState)(statePath, state);
354
+ logger.error(`Task dependency wait/merge failed: ${e.message}`);
355
+ // Try to restore from checkpoint
356
+ const latestCheckpoint = (0, checkpoint_1.getLatestCheckpoint)(runDir);
357
+ if (latestCheckpoint) {
358
+ logger.info(`💾 Checkpoint available: ${latestCheckpoint.id}`);
359
+ logger.info(` Resume with: cursorflow resume --checkpoint ${latestCheckpoint.id}`);
360
+ }
361
+ process.exit(1);
362
+ }
363
+ }
364
+ const result = await (0, task_1.runTask)({
365
+ task,
366
+ config,
367
+ index: i,
368
+ worktreeDir,
369
+ pipelineBranch,
370
+ taskBranch,
371
+ chatId,
372
+ runDir,
373
+ noGit,
374
+ });
375
+ results.push(result);
376
+ // Update state
377
+ state.currentTaskIndex = i + 1;
378
+ state.completedTasks = state.completedTasks || [];
379
+ if (!state.completedTasks.includes(task.name)) {
380
+ state.completedTasks.push(task.name);
381
+ }
382
+ (0, state_1.saveState)(statePath, state);
383
+ // Handle blocked or error
384
+ if (result.status === 'BLOCKED_DEPENDENCY') {
385
+ state.status = 'failed';
386
+ state.dependencyRequest = result.dependencyRequest || null;
387
+ (0, state_1.saveState)(statePath, state);
388
+ if (result.dependencyRequest) {
389
+ events_1.events.emit('lane.dependency_requested', {
390
+ laneName: state.label,
391
+ dependencyRequest: result.dependencyRequest,
392
+ });
393
+ }
394
+ logger.warn('Task blocked on dependency change');
395
+ process.exit(2);
396
+ }
397
+ if (result.status !== 'FINISHED') {
398
+ state.status = 'failed';
399
+ state.error = result.error || 'Unknown error';
400
+ (0, state_1.saveState)(statePath, state);
401
+ logger.error(`Task failed: ${result.error}`);
402
+ process.exit(1);
403
+ }
404
+ // Merge into pipeline (skip in noGit mode)
405
+ if (!noGit) {
406
+ logger.info(`Merging ${taskBranch} → ${pipelineBranch}`);
407
+ // Ensure we are on the pipeline branch before merging the task branch
408
+ logger.info(`🔄 Switching to pipeline branch ${pipelineBranch} to integrate changes`);
409
+ git.runGit(['checkout', pipelineBranch], { cwd: worktreeDir });
410
+ // Pre-check for conflicts (should be rare since task branch was created from pipeline)
411
+ const conflictCheck = git.checkMergeConflict(taskBranch, { cwd: worktreeDir });
412
+ if (conflictCheck.willConflict) {
413
+ logger.warn(`⚠️ Unexpected conflict detected when merging ${taskBranch}`);
414
+ logger.warn(` Conflicting files: ${conflictCheck.conflictingFiles.join(', ')}`);
415
+ logger.warn(` This may indicate concurrent modifications to ${pipelineBranch}`);
416
+ events_1.events.emit('merge.conflict_detected', {
417
+ taskName: task.name,
418
+ taskBranch,
419
+ pipelineBranch,
420
+ conflictingFiles: conflictCheck.conflictingFiles,
421
+ preCheck: true,
422
+ });
423
+ }
424
+ // Use safeMerge instead of plain merge for better error handling
425
+ logger.info(`🔀 Merging task ${task.name} (${taskBranch}) into ${pipelineBranch}`);
426
+ const mergeResult = git.safeMerge(taskBranch, {
427
+ cwd: worktreeDir,
428
+ noFf: true,
429
+ message: `chore: merge task ${task.name} into pipeline`,
430
+ abortOnConflict: true,
431
+ });
432
+ if (!mergeResult.success) {
433
+ if (mergeResult.conflict) {
434
+ logger.error(`❌ Merge conflict: ${mergeResult.conflictingFiles.join(', ')}`);
435
+ state.status = 'failed';
436
+ state.error = `Merge conflict when integrating task ${task.name}: ${mergeResult.conflictingFiles.join(', ')}`;
437
+ (0, state_1.saveState)(statePath, state);
438
+ process.exit(1);
439
+ }
440
+ throw new Error(mergeResult.error || 'Merge failed');
441
+ }
442
+ // Log changed files
443
+ const stats = git.getLastOperationStats(worktreeDir);
444
+ if (stats) {
445
+ logger.info('Changed files:\n' + stats);
446
+ }
447
+ git.push(pipelineBranch, { cwd: worktreeDir });
448
+ }
449
+ else {
450
+ logger.info(`✓ Task ${task.name} completed (noGit mode - no branch operations)`);
451
+ }
452
+ // Set previousTaskBranch for cleanup in the next iteration
453
+ previousTaskBranch = noGit ? null : taskBranch;
454
+ }
455
+ // Final Consolidation: Create flow branch and cleanup
456
+ if (!noGit) {
457
+ const flowBranch = laneName;
458
+ logger.section(`🏁 Final Consolidation: ${flowBranch}`);
459
+ // 1. Delete the very last task branch
460
+ if (previousTaskBranch) {
461
+ logger.info(`🧹 Deleting last task branch: ${previousTaskBranch}`);
462
+ try {
463
+ git.deleteBranch(previousTaskBranch, { cwd: worktreeDir, force: true });
464
+ }
465
+ catch (e) {
466
+ logger.warn(` Failed to delete last task branch: ${e}`);
467
+ }
468
+ }
469
+ // 2. Create flow branch from pipelineBranch and cleanup
470
+ if (flowBranch !== pipelineBranch) {
471
+ logger.info(`🌿 Creating final flow branch: ${flowBranch}`);
472
+ try {
473
+ // Create/Overwrite flow branch from pipeline branch
474
+ git.runGit(['checkout', '-B', flowBranch, pipelineBranch], { cwd: worktreeDir });
475
+ git.push(flowBranch, { cwd: worktreeDir, setUpstream: true });
476
+ // 3. Delete temporary pipeline branch
477
+ logger.info(`🗑️ Deleting temporary pipeline branch: ${pipelineBranch}`);
478
+ // Must be on another branch to delete pipelineBranch
479
+ git.runGit(['checkout', flowBranch], { cwd: worktreeDir });
480
+ git.deleteBranch(pipelineBranch, { cwd: worktreeDir, force: true });
481
+ try {
482
+ git.deleteBranch(pipelineBranch, { cwd: worktreeDir, force: true, remote: true });
483
+ logger.info(` Deleted remote branch: origin/${pipelineBranch}`);
484
+ }
485
+ catch {
486
+ // May not exist on remote or delete failed
487
+ }
488
+ logger.success(`✓ Flow branch '${flowBranch}' is now the only remaining branch.`);
489
+ }
490
+ catch (e) {
491
+ logger.error(`❌ Failed during final consolidation: ${e}`);
492
+ }
493
+ }
494
+ }
495
+ // Complete
496
+ state.status = 'completed';
497
+ state.endTime = Date.now();
498
+ (0, state_1.saveState)(statePath, state);
499
+ // Log final file summary
500
+ if (noGit) {
501
+ const getFileSummary = (dir) => {
502
+ let stats = { files: 0, dirs: 0 };
503
+ if (!fs.existsSync(dir))
504
+ return stats;
505
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
506
+ for (const entry of entries) {
507
+ if (entry.name === '.git' || entry.name === '_cursorflow' || entry.name === 'node_modules')
508
+ continue;
509
+ if (entry.isDirectory()) {
510
+ stats.dirs++;
511
+ const sub = getFileSummary((0, path_1.safeJoin)(dir, entry.name));
512
+ stats.files += sub.files;
513
+ stats.dirs += sub.dirs;
514
+ }
515
+ else {
516
+ stats.files++;
517
+ }
518
+ }
519
+ return stats;
520
+ };
521
+ const summary = getFileSummary(worktreeDir);
522
+ logger.info(`Final Workspace Summary (noGit): ${summary.files} files, ${summary.dirs} directories created/modified`);
523
+ }
524
+ else {
525
+ try {
526
+ // Always use current branch for comparison (already captured at start)
527
+ const stats = git.runGit(['diff', '--stat', currentBranch, pipelineBranch], { cwd: repoRoot, silent: true });
528
+ if (stats) {
529
+ logger.info('Final Workspace Summary (Git):\n' + stats);
530
+ }
531
+ }
532
+ catch (e) {
533
+ // Ignore
534
+ }
535
+ }
536
+ logger.success('All tasks completed!');
537
+ return results;
538
+ }
539
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../src/core/runner/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { DependencyPolicy, RunnerConfig } from '../../types';
2
+ import { DependencyResult } from './utils';
3
+ /**
4
+ * Dependency request file name - agent writes here when dependency changes are needed
5
+ */
6
+ export declare const DEPENDENCY_REQUEST_FILE = "_cursorflow/dependency-request.json";
7
+ /**
8
+ * Wrap prompt with dependency policy instructions (legacy, used by tests)
9
+ */
10
+ export declare function wrapPromptForDependencyPolicy(prompt: string, policy: DependencyPolicy): string;
11
+ /**
12
+ * Wrap prompt with global context, dependency policy, and worktree instructions
13
+ */
14
+ export declare function wrapPrompt(prompt: string, config: RunnerConfig, options?: {
15
+ noGit?: boolean;
16
+ isWorktree?: boolean;
17
+ dependencyResults?: DependencyResult[];
18
+ worktreePath?: string;
19
+ taskBranch?: string;
20
+ pipelineBranch?: string;
21
+ }): string;
22
+ /**
23
+ * Apply file permissions based on dependency policy
24
+ */
25
+ export declare function applyDependencyFilePermissions(worktreeDir: string, policy: DependencyPolicy): void;