@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.
- package/CHANGELOG.md +25 -0
- package/README.md +25 -7
- package/commands/cursorflow-clean.md +19 -0
- package/commands/cursorflow-runs.md +59 -0
- package/commands/cursorflow-stop.md +55 -0
- package/dist/cli/clean.js +178 -6
- package/dist/cli/clean.js.map +1 -1
- package/dist/cli/index.js +12 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.js +8 -7
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/logs.js +126 -77
- package/dist/cli/logs.js.map +1 -1
- package/dist/cli/monitor.d.ts +7 -0
- package/dist/cli/monitor.js +1021 -202
- package/dist/cli/monitor.js.map +1 -1
- package/dist/cli/prepare.js +39 -21
- package/dist/cli/prepare.js.map +1 -1
- package/dist/cli/resume.js +268 -163
- package/dist/cli/resume.js.map +1 -1
- package/dist/cli/run.js +11 -5
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/runs.d.ts +5 -0
- package/dist/cli/runs.js +214 -0
- package/dist/cli/runs.js.map +1 -0
- package/dist/cli/setup-commands.js +0 -0
- package/dist/cli/signal.js +8 -8
- package/dist/cli/signal.js.map +1 -1
- package/dist/cli/stop.d.ts +5 -0
- package/dist/cli/stop.js +215 -0
- package/dist/cli/stop.js.map +1 -0
- package/dist/cli/tasks.d.ts +10 -0
- package/dist/cli/tasks.js +165 -0
- package/dist/cli/tasks.js.map +1 -0
- package/dist/core/auto-recovery.d.ts +212 -0
- package/dist/core/auto-recovery.js +737 -0
- package/dist/core/auto-recovery.js.map +1 -0
- package/dist/core/failure-policy.d.ts +156 -0
- package/dist/core/failure-policy.js +488 -0
- package/dist/core/failure-policy.js.map +1 -0
- package/dist/core/orchestrator.d.ts +16 -2
- package/dist/core/orchestrator.js +439 -105
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/core/reviewer.d.ts +2 -0
- package/dist/core/reviewer.js +2 -0
- package/dist/core/reviewer.js.map +1 -1
- package/dist/core/runner.d.ts +33 -10
- package/dist/core/runner.js +374 -164
- package/dist/core/runner.js.map +1 -1
- package/dist/services/logging/buffer.d.ts +67 -0
- package/dist/services/logging/buffer.js +309 -0
- package/dist/services/logging/buffer.js.map +1 -0
- package/dist/services/logging/console.d.ts +89 -0
- package/dist/services/logging/console.js +169 -0
- package/dist/services/logging/console.js.map +1 -0
- package/dist/services/logging/file-writer.d.ts +71 -0
- package/dist/services/logging/file-writer.js +516 -0
- package/dist/services/logging/file-writer.js.map +1 -0
- package/dist/services/logging/formatter.d.ts +39 -0
- package/dist/services/logging/formatter.js +227 -0
- package/dist/services/logging/formatter.js.map +1 -0
- package/dist/services/logging/index.d.ts +11 -0
- package/dist/services/logging/index.js +30 -0
- package/dist/services/logging/index.js.map +1 -0
- package/dist/services/logging/parser.d.ts +31 -0
- package/dist/services/logging/parser.js +222 -0
- package/dist/services/logging/parser.js.map +1 -0
- package/dist/services/process/index.d.ts +59 -0
- package/dist/services/process/index.js +257 -0
- package/dist/services/process/index.js.map +1 -0
- package/dist/types/agent.d.ts +20 -0
- package/dist/types/agent.js +6 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/config.d.ts +65 -0
- package/dist/types/config.js +6 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/events.d.ts +125 -0
- package/dist/types/events.js +6 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.js +37 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/lane.d.ts +43 -0
- package/dist/types/lane.js +6 -0
- package/dist/types/lane.js.map +1 -0
- package/dist/types/logging.d.ts +71 -0
- package/dist/types/logging.js +16 -0
- package/dist/types/logging.js.map +1 -0
- package/dist/types/review.d.ts +17 -0
- package/dist/types/review.js +6 -0
- package/dist/types/review.js.map +1 -0
- package/dist/types/run.d.ts +32 -0
- package/dist/types/run.js +6 -0
- package/dist/types/run.js.map +1 -0
- package/dist/types/task.d.ts +71 -0
- package/dist/types/task.js +6 -0
- package/dist/types/task.js.map +1 -0
- package/dist/ui/components.d.ts +134 -0
- package/dist/ui/components.js +389 -0
- package/dist/ui/components.js.map +1 -0
- package/dist/ui/log-viewer.d.ts +49 -0
- package/dist/ui/log-viewer.js +449 -0
- package/dist/ui/log-viewer.js.map +1 -0
- package/dist/utils/checkpoint.d.ts +87 -0
- package/dist/utils/checkpoint.js +317 -0
- package/dist/utils/checkpoint.js.map +1 -0
- package/dist/utils/config.d.ts +4 -0
- package/dist/utils/config.js +18 -8
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/cursor-agent.js.map +1 -1
- package/dist/utils/dependency.d.ts +74 -0
- package/dist/utils/dependency.js +420 -0
- package/dist/utils/dependency.js.map +1 -0
- package/dist/utils/doctor.js +17 -11
- package/dist/utils/doctor.js.map +1 -1
- package/dist/utils/enhanced-logger.d.ts +10 -33
- package/dist/utils/enhanced-logger.js +108 -20
- package/dist/utils/enhanced-logger.js.map +1 -1
- package/dist/utils/git.d.ts +121 -0
- package/dist/utils/git.js +484 -11
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/health.d.ts +91 -0
- package/dist/utils/health.js +556 -0
- package/dist/utils/health.js.map +1 -0
- package/dist/utils/lock.d.ts +95 -0
- package/dist/utils/lock.js +332 -0
- package/dist/utils/lock.js.map +1 -0
- package/dist/utils/log-buffer.d.ts +17 -0
- package/dist/utils/log-buffer.js +14 -0
- package/dist/utils/log-buffer.js.map +1 -0
- package/dist/utils/log-constants.d.ts +23 -0
- package/dist/utils/log-constants.js +28 -0
- package/dist/utils/log-constants.js.map +1 -0
- package/dist/utils/log-formatter.d.ts +25 -0
- package/dist/utils/log-formatter.js +237 -0
- package/dist/utils/log-formatter.js.map +1 -0
- package/dist/utils/log-service.d.ts +19 -0
- package/dist/utils/log-service.js +47 -0
- package/dist/utils/log-service.js.map +1 -0
- package/dist/utils/logger.d.ts +46 -27
- package/dist/utils/logger.js +82 -60
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/path.d.ts +19 -0
- package/dist/utils/path.js +77 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/utils/process-manager.d.ts +21 -0
- package/dist/utils/process-manager.js +138 -0
- package/dist/utils/process-manager.js.map +1 -0
- package/dist/utils/retry.d.ts +121 -0
- package/dist/utils/retry.js +374 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/run-service.d.ts +88 -0
- package/dist/utils/run-service.js +412 -0
- package/dist/utils/run-service.js.map +1 -0
- package/dist/utils/state.d.ts +62 -3
- package/dist/utils/state.js +317 -11
- package/dist/utils/state.js.map +1 -1
- package/dist/utils/task-service.d.ts +82 -0
- package/dist/utils/task-service.js +348 -0
- package/dist/utils/task-service.js.map +1 -0
- package/dist/utils/template.d.ts +14 -0
- package/dist/utils/template.js +122 -0
- package/dist/utils/template.js.map +1 -0
- package/dist/utils/types.d.ts +2 -271
- package/dist/utils/types.js +16 -0
- package/dist/utils/types.js.map +1 -1
- package/package.json +38 -23
- package/scripts/ai-security-check.js +0 -1
- package/scripts/local-security-gate.sh +0 -0
- package/scripts/monitor-lanes.sh +94 -0
- package/scripts/patches/test-cursor-agent.js +0 -1
- package/scripts/release.sh +0 -0
- package/scripts/setup-security.sh +0 -0
- package/scripts/stream-logs.sh +72 -0
- package/scripts/verify-and-fix.sh +0 -0
- package/src/cli/clean.ts +187 -6
- package/src/cli/index.ts +12 -1
- package/src/cli/init.ts +8 -7
- package/src/cli/logs.ts +124 -77
- package/src/cli/monitor.ts +1815 -898
- package/src/cli/prepare.ts +41 -21
- package/src/cli/resume.ts +753 -626
- package/src/cli/run.ts +12 -5
- package/src/cli/runs.ts +212 -0
- package/src/cli/setup-commands.ts +0 -0
- package/src/cli/signal.ts +8 -7
- package/src/cli/stop.ts +209 -0
- package/src/cli/tasks.ts +154 -0
- package/src/core/auto-recovery.ts +909 -0
- package/src/core/failure-policy.ts +592 -0
- package/src/core/orchestrator.ts +1131 -704
- package/src/core/reviewer.ts +4 -0
- package/src/core/runner.ts +444 -180
- package/src/services/logging/buffer.ts +326 -0
- package/src/services/logging/console.ts +193 -0
- package/src/services/logging/file-writer.ts +526 -0
- package/src/services/logging/formatter.ts +268 -0
- package/src/services/logging/index.ts +16 -0
- package/src/services/logging/parser.ts +232 -0
- package/src/services/process/index.ts +261 -0
- package/src/types/agent.ts +24 -0
- package/src/types/config.ts +79 -0
- package/src/types/events.ts +156 -0
- package/src/types/index.ts +29 -0
- package/src/types/lane.ts +56 -0
- package/src/types/logging.ts +96 -0
- package/src/types/review.ts +20 -0
- package/src/types/run.ts +37 -0
- package/src/types/task.ts +79 -0
- package/src/ui/components.ts +430 -0
- package/src/ui/log-viewer.ts +485 -0
- package/src/utils/checkpoint.ts +374 -0
- package/src/utils/config.ts +18 -8
- package/src/utils/cursor-agent.ts +1 -1
- package/src/utils/dependency.ts +482 -0
- package/src/utils/doctor.ts +18 -11
- package/src/utils/enhanced-logger.ts +122 -60
- package/src/utils/git.ts +517 -11
- package/src/utils/health.ts +596 -0
- package/src/utils/lock.ts +346 -0
- package/src/utils/log-buffer.ts +28 -0
- package/src/utils/log-constants.ts +26 -0
- package/src/utils/log-formatter.ts +245 -0
- package/src/utils/log-service.ts +49 -0
- package/src/utils/logger.ts +100 -51
- package/src/utils/path.ts +45 -0
- package/src/utils/process-manager.ts +100 -0
- package/src/utils/retry.ts +413 -0
- package/src/utils/run-service.ts +433 -0
- package/src/utils/state.ts +385 -11
- package/src/utils/task-service.ts +370 -0
- package/src/utils/template.ts +92 -0
- package/src/utils/types.ts +2 -314
- package/templates/basic.json +21 -0
package/dist/utils/state.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* State management utilities for CursorFlow
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Atomic writes to prevent corruption
|
|
7
|
+
* - State validation and repair
|
|
8
|
+
* - Versioned state with conflict detection
|
|
4
9
|
*/
|
|
5
10
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
11
|
if (k2 === undefined) k2 = k;
|
|
@@ -37,7 +42,14 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
37
42
|
})();
|
|
38
43
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
44
|
exports.saveState = saveState;
|
|
45
|
+
exports.saveStateWithLock = saveStateWithLock;
|
|
40
46
|
exports.loadState = loadState;
|
|
47
|
+
exports.loadStateWithBackup = loadStateWithBackup;
|
|
48
|
+
exports.updateStateAtomic = updateStateAtomic;
|
|
49
|
+
exports.validateLaneState = validateLaneState;
|
|
50
|
+
exports.repairLaneState = repairLaneState;
|
|
51
|
+
exports.stateNeedsRecovery = stateNeedsRecovery;
|
|
52
|
+
exports.cleanupTempFiles = cleanupTempFiles;
|
|
41
53
|
exports.appendLog = appendLog;
|
|
42
54
|
exports.readLog = readLog;
|
|
43
55
|
exports.createLaneState = createLaneState;
|
|
@@ -50,18 +62,70 @@ exports.listLanesInRun = listLanesInRun;
|
|
|
50
62
|
exports.getLaneStateSummary = getLaneStateSummary;
|
|
51
63
|
const fs = __importStar(require("fs"));
|
|
52
64
|
const path = __importStar(require("path"));
|
|
65
|
+
const path_1 = require("./path");
|
|
66
|
+
const lock_1 = require("./lock");
|
|
67
|
+
const git = __importStar(require("./git"));
|
|
53
68
|
/**
|
|
54
|
-
* Save state to JSON file
|
|
69
|
+
* Save state to JSON file with atomic write
|
|
55
70
|
*/
|
|
56
71
|
function saveState(statePath, state) {
|
|
57
72
|
const stateDir = path.dirname(statePath);
|
|
58
73
|
if (!fs.existsSync(stateDir)) {
|
|
59
74
|
fs.mkdirSync(stateDir, { recursive: true });
|
|
60
75
|
}
|
|
61
|
-
|
|
76
|
+
// Atomic write: write to temp file, then rename
|
|
77
|
+
const tempPath = `${statePath}.tmp.${process.pid}`;
|
|
78
|
+
try {
|
|
79
|
+
fs.writeFileSync(tempPath, JSON.stringify(state, null, 2), 'utf8');
|
|
80
|
+
fs.renameSync(tempPath, statePath);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
// Clean up temp file if rename fails
|
|
84
|
+
try {
|
|
85
|
+
if (fs.existsSync(tempPath)) {
|
|
86
|
+
fs.unlinkSync(tempPath);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// Ignore cleanup errors
|
|
91
|
+
}
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
62
94
|
}
|
|
63
95
|
/**
|
|
64
|
-
*
|
|
96
|
+
* Save state with file lock to prevent race conditions
|
|
97
|
+
*/
|
|
98
|
+
function saveStateWithLock(statePath, state, lockOptions) {
|
|
99
|
+
const lockPath = `${statePath}.lock`;
|
|
100
|
+
// Try to acquire lock
|
|
101
|
+
const maxRetries = 50;
|
|
102
|
+
let acquired = false;
|
|
103
|
+
let retries = 0;
|
|
104
|
+
while (retries < maxRetries && !acquired) {
|
|
105
|
+
acquired = (0, lock_1.tryAcquireLockSync)(lockPath, {
|
|
106
|
+
operation: 'saveState',
|
|
107
|
+
staleTimeoutMs: 10000,
|
|
108
|
+
...lockOptions
|
|
109
|
+
});
|
|
110
|
+
if (!acquired) {
|
|
111
|
+
retries++;
|
|
112
|
+
// Sync sleep
|
|
113
|
+
const end = Date.now() + 100;
|
|
114
|
+
while (Date.now() < end) { /* wait */ }
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (!acquired) {
|
|
118
|
+
throw new Error(`Failed to acquire lock for state file: ${statePath}`);
|
|
119
|
+
}
|
|
120
|
+
try {
|
|
121
|
+
saveState(statePath, state);
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
(0, lock_1.releaseLockSync)(lockPath);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Load state from JSON file with corruption recovery
|
|
65
129
|
*/
|
|
66
130
|
function loadState(statePath) {
|
|
67
131
|
if (!fs.existsSync(statePath)) {
|
|
@@ -72,10 +136,250 @@ function loadState(statePath) {
|
|
|
72
136
|
return JSON.parse(content);
|
|
73
137
|
}
|
|
74
138
|
catch (error) {
|
|
139
|
+
// Try to recover from backup if exists
|
|
140
|
+
const backupPath = `${statePath}.backup`;
|
|
141
|
+
if (fs.existsSync(backupPath)) {
|
|
142
|
+
try {
|
|
143
|
+
console.warn(`Warning: Main state file corrupted, trying backup: ${statePath}`);
|
|
144
|
+
const backupContent = fs.readFileSync(backupPath, 'utf8');
|
|
145
|
+
const backupState = JSON.parse(backupContent);
|
|
146
|
+
// Restore from backup
|
|
147
|
+
saveState(statePath, backupState);
|
|
148
|
+
return backupState;
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
// Backup also corrupted
|
|
152
|
+
}
|
|
153
|
+
}
|
|
75
154
|
console.warn(`Warning: Failed to parse state file ${statePath}: ${error.message}`);
|
|
76
155
|
return null;
|
|
77
156
|
}
|
|
78
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* Load state with automatic backup creation
|
|
160
|
+
*/
|
|
161
|
+
function loadStateWithBackup(statePath) {
|
|
162
|
+
const state = loadState(statePath);
|
|
163
|
+
if (state) {
|
|
164
|
+
// Create backup
|
|
165
|
+
const backupPath = `${statePath}.backup`;
|
|
166
|
+
try {
|
|
167
|
+
fs.copyFileSync(statePath, backupPath);
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
// Ignore backup failures
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return state;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Update state with optimistic locking
|
|
177
|
+
*/
|
|
178
|
+
function updateStateAtomic(statePath, updater) {
|
|
179
|
+
const lockPath = `${statePath}.lock`;
|
|
180
|
+
// Acquire lock
|
|
181
|
+
const maxRetries = 50;
|
|
182
|
+
let acquired = false;
|
|
183
|
+
let retries = 0;
|
|
184
|
+
while (retries < maxRetries && !acquired) {
|
|
185
|
+
acquired = (0, lock_1.tryAcquireLockSync)(lockPath, { operation: 'updateState', staleTimeoutMs: 10000 });
|
|
186
|
+
if (!acquired) {
|
|
187
|
+
retries++;
|
|
188
|
+
const end = Date.now() + 100;
|
|
189
|
+
while (Date.now() < end) { /* wait */ }
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (!acquired) {
|
|
193
|
+
throw new Error(`Failed to acquire lock for state update: ${statePath}`);
|
|
194
|
+
}
|
|
195
|
+
try {
|
|
196
|
+
const currentState = loadState(statePath);
|
|
197
|
+
const newState = updater(currentState);
|
|
198
|
+
newState.updatedAt = Date.now();
|
|
199
|
+
saveState(statePath, newState);
|
|
200
|
+
return newState;
|
|
201
|
+
}
|
|
202
|
+
finally {
|
|
203
|
+
(0, lock_1.releaseLockSync)(lockPath);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Validate lane state and check for inconsistencies
|
|
208
|
+
*/
|
|
209
|
+
function validateLaneState(statePath, options = {}) {
|
|
210
|
+
const state = loadState(statePath);
|
|
211
|
+
const issues = [];
|
|
212
|
+
let repaired = false;
|
|
213
|
+
let repairedState;
|
|
214
|
+
if (!state) {
|
|
215
|
+
return {
|
|
216
|
+
valid: false,
|
|
217
|
+
issues: ['State file not found or corrupted'],
|
|
218
|
+
repaired: false,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
// Check required fields
|
|
222
|
+
if (!state.label) {
|
|
223
|
+
issues.push('Missing label field');
|
|
224
|
+
}
|
|
225
|
+
if (state.status === undefined) {
|
|
226
|
+
issues.push('Missing status field');
|
|
227
|
+
}
|
|
228
|
+
if (state.currentTaskIndex === undefined || state.currentTaskIndex < 0) {
|
|
229
|
+
issues.push(`Invalid currentTaskIndex: ${state.currentTaskIndex}`);
|
|
230
|
+
}
|
|
231
|
+
if (state.totalTasks === undefined || state.totalTasks < 0) {
|
|
232
|
+
issues.push(`Invalid totalTasks: ${state.totalTasks}`);
|
|
233
|
+
}
|
|
234
|
+
if (state.currentTaskIndex > state.totalTasks) {
|
|
235
|
+
issues.push(`currentTaskIndex (${state.currentTaskIndex}) exceeds totalTasks (${state.totalTasks})`);
|
|
236
|
+
}
|
|
237
|
+
// Check worktree existence
|
|
238
|
+
if (options.checkWorktree && state.worktreeDir) {
|
|
239
|
+
if (!fs.existsSync(state.worktreeDir)) {
|
|
240
|
+
issues.push(`Worktree directory not found: ${state.worktreeDir}`);
|
|
241
|
+
if (options.autoRepair) {
|
|
242
|
+
state.worktreeDir = null;
|
|
243
|
+
repaired = true;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// Check branch existence
|
|
248
|
+
if (options.checkBranch && state.pipelineBranch) {
|
|
249
|
+
try {
|
|
250
|
+
if (!git.branchExists(state.pipelineBranch)) {
|
|
251
|
+
issues.push(`Branch not found: ${state.pipelineBranch}`);
|
|
252
|
+
if (options.autoRepair) {
|
|
253
|
+
state.pipelineBranch = null;
|
|
254
|
+
repaired = true;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
// Git check failed, don't add issue
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// Check status consistency
|
|
263
|
+
if (state.status === 'completed' && !state.endTime) {
|
|
264
|
+
issues.push('Status is completed but endTime is not set');
|
|
265
|
+
if (options.autoRepair) {
|
|
266
|
+
state.endTime = Date.now();
|
|
267
|
+
repaired = true;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
if (state.status === 'failed' && !state.error) {
|
|
271
|
+
issues.push('Status is failed but no error message');
|
|
272
|
+
}
|
|
273
|
+
// Save repaired state if auto-repair was enabled
|
|
274
|
+
if (repaired && options.autoRepair) {
|
|
275
|
+
state.updatedAt = Date.now();
|
|
276
|
+
saveState(statePath, state);
|
|
277
|
+
repairedState = state;
|
|
278
|
+
}
|
|
279
|
+
return {
|
|
280
|
+
valid: issues.length === 0,
|
|
281
|
+
issues,
|
|
282
|
+
repaired,
|
|
283
|
+
repairedState,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Repair lane state by resetting inconsistent values
|
|
288
|
+
*/
|
|
289
|
+
function repairLaneState(statePath) {
|
|
290
|
+
const result = validateLaneState(statePath, {
|
|
291
|
+
checkWorktree: true,
|
|
292
|
+
checkBranch: true,
|
|
293
|
+
autoRepair: true,
|
|
294
|
+
});
|
|
295
|
+
if (result.repairedState) {
|
|
296
|
+
return result.repairedState;
|
|
297
|
+
}
|
|
298
|
+
// If validation failed completely, try to create minimal valid state
|
|
299
|
+
const state = loadState(statePath);
|
|
300
|
+
if (!state) {
|
|
301
|
+
return null;
|
|
302
|
+
}
|
|
303
|
+
// Ensure all required fields have valid values
|
|
304
|
+
const repairedState = {
|
|
305
|
+
label: state.label || path.basename(path.dirname(statePath)),
|
|
306
|
+
status: 'pending',
|
|
307
|
+
currentTaskIndex: Math.max(0, state.currentTaskIndex || 0),
|
|
308
|
+
totalTasks: Math.max(0, state.totalTasks || 0),
|
|
309
|
+
worktreeDir: state.worktreeDir && fs.existsSync(state.worktreeDir) ? state.worktreeDir : null,
|
|
310
|
+
pipelineBranch: state.pipelineBranch,
|
|
311
|
+
startTime: state.startTime || Date.now(),
|
|
312
|
+
endTime: null,
|
|
313
|
+
error: null,
|
|
314
|
+
dependencyRequest: null,
|
|
315
|
+
tasksFile: state.tasksFile,
|
|
316
|
+
dependsOn: state.dependsOn || [],
|
|
317
|
+
completedTasks: state.completedTasks || [],
|
|
318
|
+
updatedAt: Date.now(),
|
|
319
|
+
};
|
|
320
|
+
// Ensure currentTaskIndex doesn't exceed totalTasks
|
|
321
|
+
if (repairedState.currentTaskIndex > repairedState.totalTasks) {
|
|
322
|
+
repairedState.currentTaskIndex = repairedState.totalTasks;
|
|
323
|
+
}
|
|
324
|
+
saveState(statePath, repairedState);
|
|
325
|
+
return repairedState;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Check if state needs recovery (e.g., after crash)
|
|
329
|
+
*/
|
|
330
|
+
function stateNeedsRecovery(statePath) {
|
|
331
|
+
const state = loadState(statePath);
|
|
332
|
+
if (!state) {
|
|
333
|
+
return false;
|
|
334
|
+
}
|
|
335
|
+
// Running state with no recent update might indicate a crash
|
|
336
|
+
if (state.status === 'running') {
|
|
337
|
+
const lastUpdate = state.updatedAt || state.startTime;
|
|
338
|
+
const staleThresholdMs = 5 * 60 * 1000; // 5 minutes
|
|
339
|
+
if (Date.now() - lastUpdate > staleThresholdMs) {
|
|
340
|
+
return true;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
// Check for temp files indicating incomplete write
|
|
344
|
+
const tempPattern = `${statePath}.tmp.`;
|
|
345
|
+
const stateDir = path.dirname(statePath);
|
|
346
|
+
try {
|
|
347
|
+
const files = fs.readdirSync(stateDir);
|
|
348
|
+
for (const file of files) {
|
|
349
|
+
if (file.startsWith(path.basename(tempPattern))) {
|
|
350
|
+
return true;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
catch {
|
|
355
|
+
// Ignore
|
|
356
|
+
}
|
|
357
|
+
return false;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Clean up temp files from incomplete writes
|
|
361
|
+
*/
|
|
362
|
+
function cleanupTempFiles(stateDir) {
|
|
363
|
+
let cleaned = 0;
|
|
364
|
+
try {
|
|
365
|
+
const files = fs.readdirSync(stateDir);
|
|
366
|
+
for (const file of files) {
|
|
367
|
+
if (file.includes('.tmp.')) {
|
|
368
|
+
try {
|
|
369
|
+
fs.unlinkSync((0, path_1.safeJoin)(stateDir, file));
|
|
370
|
+
cleaned++;
|
|
371
|
+
}
|
|
372
|
+
catch {
|
|
373
|
+
// Ignore
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
catch {
|
|
379
|
+
// Ignore
|
|
380
|
+
}
|
|
381
|
+
return cleaned;
|
|
382
|
+
}
|
|
79
383
|
/**
|
|
80
384
|
* Append to JSONL log file
|
|
81
385
|
*/
|
|
@@ -109,18 +413,20 @@ function readLog(logPath) {
|
|
|
109
413
|
/**
|
|
110
414
|
* Create initial lane state
|
|
111
415
|
*/
|
|
112
|
-
function createLaneState(laneName, config) {
|
|
416
|
+
function createLaneState(laneName, config, tasksFile, options = {}) {
|
|
113
417
|
return {
|
|
114
418
|
label: laneName,
|
|
115
419
|
status: 'pending',
|
|
116
420
|
currentTaskIndex: 0,
|
|
117
421
|
totalTasks: config.tasks ? config.tasks.length : 0,
|
|
118
|
-
worktreeDir: null,
|
|
119
|
-
pipelineBranch: null,
|
|
422
|
+
worktreeDir: options.worktreeDir || null,
|
|
423
|
+
pipelineBranch: options.pipelineBranch || null,
|
|
120
424
|
startTime: Date.now(),
|
|
121
425
|
endTime: null,
|
|
122
426
|
error: null,
|
|
123
427
|
dependencyRequest: null,
|
|
428
|
+
tasksFile,
|
|
429
|
+
dependsOn: config.dependsOn || [],
|
|
124
430
|
};
|
|
125
431
|
}
|
|
126
432
|
/**
|
|
@@ -174,13 +480,13 @@ function getLatestRunDir(logsDir) {
|
|
|
174
480
|
return null;
|
|
175
481
|
}
|
|
176
482
|
const runs = fs.readdirSync(logsDir)
|
|
177
|
-
.filter(f => fs.statSync(
|
|
483
|
+
.filter(f => fs.statSync((0, path_1.safeJoin)(logsDir, f)).isDirectory())
|
|
178
484
|
.sort()
|
|
179
485
|
.reverse();
|
|
180
486
|
if (runs.length === 0) {
|
|
181
487
|
return null;
|
|
182
488
|
}
|
|
183
|
-
return
|
|
489
|
+
return (0, path_1.safeJoin)(logsDir, runs[0]);
|
|
184
490
|
}
|
|
185
491
|
/**
|
|
186
492
|
* List all lanes in a run directory
|
|
@@ -190,11 +496,11 @@ function listLanesInRun(runDir) {
|
|
|
190
496
|
return [];
|
|
191
497
|
}
|
|
192
498
|
return fs.readdirSync(runDir)
|
|
193
|
-
.filter(f => fs.statSync(
|
|
499
|
+
.filter(f => fs.statSync((0, path_1.safeJoin)(runDir, f)).isDirectory())
|
|
194
500
|
.map(laneName => ({
|
|
195
501
|
name: laneName,
|
|
196
|
-
dir:
|
|
197
|
-
statePath:
|
|
502
|
+
dir: (0, path_1.safeJoin)(runDir, laneName),
|
|
503
|
+
statePath: (0, path_1.safeJoin)(runDir, laneName, 'state.json'),
|
|
198
504
|
}));
|
|
199
505
|
}
|
|
200
506
|
/**
|
package/dist/utils/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/utils/state.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/utils/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TaskService - Manages CursorFlow task directories and validation
|
|
3
|
+
*
|
|
4
|
+
* Provides:
|
|
5
|
+
* - List prepared task directories
|
|
6
|
+
* - Get task details (lanes, dependencies)
|
|
7
|
+
* - Validate tasks (doctor integration)
|
|
8
|
+
* - Check run eligibility
|
|
9
|
+
*/
|
|
10
|
+
import { TaskDirInfo, ValidationStatus } from './types';
|
|
11
|
+
export { TaskDirInfo, LaneFileInfo, ValidationStatus } from './types';
|
|
12
|
+
export interface ValidationResult {
|
|
13
|
+
/** Combined errors + warnings for backwards compatibility */
|
|
14
|
+
issues: string[];
|
|
15
|
+
status: ValidationStatus;
|
|
16
|
+
errors: string[];
|
|
17
|
+
warnings: string[];
|
|
18
|
+
lastValidated: number;
|
|
19
|
+
}
|
|
20
|
+
export declare class TaskService {
|
|
21
|
+
private tasksDir;
|
|
22
|
+
constructor(tasksDir: string);
|
|
23
|
+
/**
|
|
24
|
+
* List all prepared task directories
|
|
25
|
+
*/
|
|
26
|
+
listTaskDirs(): TaskDirInfo[];
|
|
27
|
+
/**
|
|
28
|
+
* Get detailed information about a task directory
|
|
29
|
+
*/
|
|
30
|
+
getTaskDirInfo(taskName: string): TaskDirInfo | null;
|
|
31
|
+
/**
|
|
32
|
+
* Scan lane files in a task directory
|
|
33
|
+
*/
|
|
34
|
+
private scanLaneFiles;
|
|
35
|
+
/**
|
|
36
|
+
* Extract lane name from filename (e.g., "01-lane-1.json" -> "lane-1")
|
|
37
|
+
*/
|
|
38
|
+
private extractLaneName;
|
|
39
|
+
/**
|
|
40
|
+
* Parse timestamp from task name (format: YYMMDDHHMM_FeatureName)
|
|
41
|
+
*/
|
|
42
|
+
private parseTimestampFromName;
|
|
43
|
+
/**
|
|
44
|
+
* Extract feature name from task directory name
|
|
45
|
+
*/
|
|
46
|
+
private extractFeatureName;
|
|
47
|
+
/**
|
|
48
|
+
* Detect task preset based on task structure
|
|
49
|
+
*/
|
|
50
|
+
private detectPreset;
|
|
51
|
+
/**
|
|
52
|
+
* Generate task flow string (e.g., "plan → implement → test")
|
|
53
|
+
*/
|
|
54
|
+
private generateTaskFlow;
|
|
55
|
+
/**
|
|
56
|
+
* Validate a task directory
|
|
57
|
+
*/
|
|
58
|
+
validateTaskDir(taskName: string): ValidationResult;
|
|
59
|
+
/**
|
|
60
|
+
* Detect circular dependencies in lane dependency graph
|
|
61
|
+
*/
|
|
62
|
+
private detectCircularDependencies;
|
|
63
|
+
/**
|
|
64
|
+
* Get cached validation status
|
|
65
|
+
*/
|
|
66
|
+
getValidationStatus(taskName: string): ValidationStatus;
|
|
67
|
+
/**
|
|
68
|
+
* Check if a task can be run
|
|
69
|
+
*/
|
|
70
|
+
canRun(taskName: string): {
|
|
71
|
+
ok: boolean;
|
|
72
|
+
issues: string[];
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Clear validation cache
|
|
76
|
+
*/
|
|
77
|
+
clearCache(): void;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Create a TaskService instance with default paths
|
|
81
|
+
*/
|
|
82
|
+
export declare function createTaskService(projectRoot?: string): TaskService;
|