@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
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Checkpoint and recovery 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.getCheckpointDir = getCheckpointDir;
|
|
40
|
+
exports.createCheckpoint = createCheckpoint;
|
|
41
|
+
exports.listCheckpoints = listCheckpoints;
|
|
42
|
+
exports.getCheckpoint = getCheckpoint;
|
|
43
|
+
exports.getLatestCheckpoint = getLatestCheckpoint;
|
|
44
|
+
exports.restoreFromCheckpoint = restoreFromCheckpoint;
|
|
45
|
+
exports.deleteCheckpoint = deleteCheckpoint;
|
|
46
|
+
exports.withAutoCheckpoint = withAutoCheckpoint;
|
|
47
|
+
exports.findRecoveryCheckpoint = findRecoveryCheckpoint;
|
|
48
|
+
exports.getCheckpointStats = getCheckpointStats;
|
|
49
|
+
const fs = __importStar(require("fs"));
|
|
50
|
+
const path_1 = require("./path");
|
|
51
|
+
const git = __importStar(require("./git"));
|
|
52
|
+
const state_1 = require("./state");
|
|
53
|
+
const logger = __importStar(require("./logger"));
|
|
54
|
+
const DEFAULT_MAX_CHECKPOINTS = 10;
|
|
55
|
+
/**
|
|
56
|
+
* Get checkpoint directory for a lane
|
|
57
|
+
*/
|
|
58
|
+
function getCheckpointDir(laneDir) {
|
|
59
|
+
return (0, path_1.safeJoin)(laneDir, 'checkpoints');
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Generate checkpoint ID
|
|
63
|
+
*/
|
|
64
|
+
function generateCheckpointId() {
|
|
65
|
+
return `cp-${Date.now()}-${Math.random().toString(36).substring(2, 7)}`;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Create a checkpoint for a lane
|
|
69
|
+
*/
|
|
70
|
+
async function createCheckpoint(laneName, laneDir, worktreeDir, options = {}) {
|
|
71
|
+
const checkpointDir = options.checkpointDir || getCheckpointDir(laneDir);
|
|
72
|
+
const maxCheckpoints = options.maxCheckpoints || DEFAULT_MAX_CHECKPOINTS;
|
|
73
|
+
// Ensure checkpoint directory exists
|
|
74
|
+
if (!fs.existsSync(checkpointDir)) {
|
|
75
|
+
fs.mkdirSync(checkpointDir, { recursive: true });
|
|
76
|
+
}
|
|
77
|
+
// Load current lane state
|
|
78
|
+
const statePath = (0, path_1.safeJoin)(laneDir, 'state.json');
|
|
79
|
+
const laneState = (0, state_1.loadState)(statePath);
|
|
80
|
+
if (!laneState) {
|
|
81
|
+
throw new Error(`Cannot create checkpoint: Lane state not found at ${statePath}`);
|
|
82
|
+
}
|
|
83
|
+
// Get Git state if worktree exists
|
|
84
|
+
let gitState = null;
|
|
85
|
+
if (worktreeDir && fs.existsSync(worktreeDir)) {
|
|
86
|
+
try {
|
|
87
|
+
const branch = git.getCurrentBranch(worktreeDir);
|
|
88
|
+
const commit = git.runGit(['rev-parse', 'HEAD'], { cwd: worktreeDir, silent: true });
|
|
89
|
+
const changedFiles = git.getChangedFiles(worktreeDir);
|
|
90
|
+
gitState = {
|
|
91
|
+
branch,
|
|
92
|
+
commit,
|
|
93
|
+
uncommittedChanges: changedFiles.length > 0,
|
|
94
|
+
changedFiles: changedFiles.map(f => f.file),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
logger.warn(`Failed to capture Git state for checkpoint: ${e}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Create checkpoint
|
|
102
|
+
const checkpoint = {
|
|
103
|
+
id: generateCheckpointId(),
|
|
104
|
+
timestamp: Date.now(),
|
|
105
|
+
laneName,
|
|
106
|
+
laneState: { ...laneState },
|
|
107
|
+
gitState,
|
|
108
|
+
taskIndex: laneState.currentTaskIndex,
|
|
109
|
+
description: options.description,
|
|
110
|
+
};
|
|
111
|
+
// Save checkpoint
|
|
112
|
+
const checkpointPath = (0, path_1.safeJoin)(checkpointDir, `${checkpoint.id}.json`);
|
|
113
|
+
fs.writeFileSync(checkpointPath, JSON.stringify(checkpoint, null, 2), 'utf8');
|
|
114
|
+
// Cleanup old checkpoints
|
|
115
|
+
await cleanupOldCheckpoints(checkpointDir, maxCheckpoints);
|
|
116
|
+
logger.info(`Created checkpoint: ${checkpoint.id} (task ${checkpoint.taskIndex})`);
|
|
117
|
+
return checkpoint;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* List all checkpoints for a lane
|
|
121
|
+
*/
|
|
122
|
+
function listCheckpoints(laneDir) {
|
|
123
|
+
const checkpointDir = getCheckpointDir(laneDir);
|
|
124
|
+
if (!fs.existsSync(checkpointDir)) {
|
|
125
|
+
return [];
|
|
126
|
+
}
|
|
127
|
+
const files = fs.readdirSync(checkpointDir)
|
|
128
|
+
.filter(f => f.startsWith('cp-') && f.endsWith('.json'))
|
|
129
|
+
.sort()
|
|
130
|
+
.reverse(); // Most recent first
|
|
131
|
+
return files.map(f => {
|
|
132
|
+
try {
|
|
133
|
+
const content = fs.readFileSync((0, path_1.safeJoin)(checkpointDir, f), 'utf8');
|
|
134
|
+
return JSON.parse(content);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
}).filter((cp) => cp !== null);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Get a specific checkpoint
|
|
143
|
+
*/
|
|
144
|
+
function getCheckpoint(laneDir, checkpointId) {
|
|
145
|
+
const checkpointDir = getCheckpointDir(laneDir);
|
|
146
|
+
const checkpointPath = (0, path_1.safeJoin)(checkpointDir, `${checkpointId}.json`);
|
|
147
|
+
if (!fs.existsSync(checkpointPath)) {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
try {
|
|
151
|
+
const content = fs.readFileSync(checkpointPath, 'utf8');
|
|
152
|
+
return JSON.parse(content);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Get the latest checkpoint for a lane
|
|
160
|
+
*/
|
|
161
|
+
function getLatestCheckpoint(laneDir) {
|
|
162
|
+
const checkpoints = listCheckpoints(laneDir);
|
|
163
|
+
return checkpoints.length > 0 ? checkpoints[0] : null;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Restore lane state from a checkpoint
|
|
167
|
+
*/
|
|
168
|
+
async function restoreFromCheckpoint(checkpoint, laneDir, options = {}) {
|
|
169
|
+
const warnings = [];
|
|
170
|
+
// Restore lane state
|
|
171
|
+
const statePath = (0, path_1.safeJoin)(laneDir, 'state.json');
|
|
172
|
+
const restoredState = {
|
|
173
|
+
...checkpoint.laneState,
|
|
174
|
+
status: 'pending', // Reset status for resume
|
|
175
|
+
error: null,
|
|
176
|
+
updatedAt: Date.now(),
|
|
177
|
+
};
|
|
178
|
+
(0, state_1.saveState)(statePath, restoredState);
|
|
179
|
+
logger.info(`Restored lane state from checkpoint ${checkpoint.id}`);
|
|
180
|
+
// Restore Git state if requested
|
|
181
|
+
if (options.restoreGitState && checkpoint.gitState && options.worktreeDir) {
|
|
182
|
+
const worktreeDir = options.worktreeDir;
|
|
183
|
+
if (!fs.existsSync(worktreeDir)) {
|
|
184
|
+
warnings.push(`Worktree not found: ${worktreeDir}`);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
try {
|
|
188
|
+
// Check for uncommitted changes
|
|
189
|
+
if (git.hasUncommittedChanges(worktreeDir)) {
|
|
190
|
+
warnings.push('Worktree has uncommitted changes. Stashing...');
|
|
191
|
+
git.runGit(['stash', 'push', '-m', `Pre-restore checkpoint ${checkpoint.id}`], { cwd: worktreeDir });
|
|
192
|
+
}
|
|
193
|
+
// Checkout the checkpoint commit if available
|
|
194
|
+
if (checkpoint.gitState.commit) {
|
|
195
|
+
git.runGit(['checkout', checkpoint.gitState.commit], { cwd: worktreeDir, silent: true });
|
|
196
|
+
logger.info(`Restored Git state to commit ${checkpoint.gitState.commit.substring(0, 7)}`);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
catch (e) {
|
|
200
|
+
warnings.push(`Failed to restore Git state: ${e.message}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return { success: true, warnings };
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Delete a checkpoint
|
|
208
|
+
*/
|
|
209
|
+
function deleteCheckpoint(laneDir, checkpointId) {
|
|
210
|
+
const checkpointDir = getCheckpointDir(laneDir);
|
|
211
|
+
const checkpointPath = (0, path_1.safeJoin)(checkpointDir, `${checkpointId}.json`);
|
|
212
|
+
if (!fs.existsSync(checkpointPath)) {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
try {
|
|
216
|
+
fs.unlinkSync(checkpointPath);
|
|
217
|
+
return true;
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Clean up old checkpoints, keeping only the most recent ones
|
|
225
|
+
*/
|
|
226
|
+
async function cleanupOldCheckpoints(checkpointDir, maxCheckpoints) {
|
|
227
|
+
if (!fs.existsSync(checkpointDir)) {
|
|
228
|
+
return 0;
|
|
229
|
+
}
|
|
230
|
+
const files = fs.readdirSync(checkpointDir)
|
|
231
|
+
.filter(f => f.startsWith('cp-') && f.endsWith('.json'))
|
|
232
|
+
.sort()
|
|
233
|
+
.reverse();
|
|
234
|
+
let deleted = 0;
|
|
235
|
+
for (let i = maxCheckpoints; i < files.length; i++) {
|
|
236
|
+
try {
|
|
237
|
+
fs.unlinkSync((0, path_1.safeJoin)(checkpointDir, files[i]));
|
|
238
|
+
deleted++;
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
// Ignore
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return deleted;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Auto-checkpoint decorator - creates checkpoints before critical operations
|
|
248
|
+
*/
|
|
249
|
+
function withAutoCheckpoint(fn, options) {
|
|
250
|
+
return (async (...args) => {
|
|
251
|
+
const laneDir = options.getLaneDir(...args);
|
|
252
|
+
const laneName = options.getLaneName(...args);
|
|
253
|
+
const worktreeDir = options.getWorktreeDir?.(...args) || null;
|
|
254
|
+
try {
|
|
255
|
+
await createCheckpoint(laneName, laneDir, worktreeDir, {
|
|
256
|
+
description: options.description || `Before ${fn.name}`,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
catch (e) {
|
|
260
|
+
logger.warn(`Auto-checkpoint failed: ${e}`);
|
|
261
|
+
}
|
|
262
|
+
return fn(...args);
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Find the best checkpoint to recover from after a failure
|
|
267
|
+
*/
|
|
268
|
+
function findRecoveryCheckpoint(laneDir, targetTaskIndex) {
|
|
269
|
+
const checkpoints = listCheckpoints(laneDir);
|
|
270
|
+
if (checkpoints.length === 0) {
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
// If target task index is specified, find the checkpoint just before it
|
|
274
|
+
if (targetTaskIndex !== undefined) {
|
|
275
|
+
for (const cp of checkpoints) {
|
|
276
|
+
if (cp.taskIndex <= targetTaskIndex) {
|
|
277
|
+
return cp;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// Return the latest checkpoint
|
|
282
|
+
return checkpoints[0];
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Get checkpoint statistics for a lane
|
|
286
|
+
*/
|
|
287
|
+
function getCheckpointStats(laneDir) {
|
|
288
|
+
const checkpointDir = getCheckpointDir(laneDir);
|
|
289
|
+
if (!fs.existsSync(checkpointDir)) {
|
|
290
|
+
return {
|
|
291
|
+
totalCheckpoints: 0,
|
|
292
|
+
oldestTimestamp: null,
|
|
293
|
+
newestTimestamp: null,
|
|
294
|
+
totalSizeBytes: 0,
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
const checkpoints = listCheckpoints(laneDir);
|
|
298
|
+
let totalSize = 0;
|
|
299
|
+
const files = fs.readdirSync(checkpointDir)
|
|
300
|
+
.filter(f => f.startsWith('cp-') && f.endsWith('.json'));
|
|
301
|
+
for (const f of files) {
|
|
302
|
+
try {
|
|
303
|
+
const stat = fs.statSync((0, path_1.safeJoin)(checkpointDir, f));
|
|
304
|
+
totalSize += stat.size;
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
// Ignore
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return {
|
|
311
|
+
totalCheckpoints: checkpoints.length,
|
|
312
|
+
oldestTimestamp: checkpoints.length > 0 ? checkpoints[checkpoints.length - 1].timestamp : null,
|
|
313
|
+
newestTimestamp: checkpoints.length > 0 ? checkpoints[0].timestamp : null,
|
|
314
|
+
totalSizeBytes: totalSize,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=checkpoint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../src/utils/checkpoint.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/config.d.ts
CHANGED
|
@@ -21,6 +21,10 @@ export declare function getTasksDir(config: CursorFlowConfig): string;
|
|
|
21
21
|
* Get absolute path for logs directory
|
|
22
22
|
*/
|
|
23
23
|
export declare function getLogsDir(config: CursorFlowConfig): string;
|
|
24
|
+
/**
|
|
25
|
+
* Get absolute path for POF directory
|
|
26
|
+
*/
|
|
27
|
+
export declare function getPofDir(config: CursorFlowConfig): string;
|
|
24
28
|
/**
|
|
25
29
|
* Validate configuration
|
|
26
30
|
*/
|
package/dist/utils/config.js
CHANGED
|
@@ -42,18 +42,20 @@ exports.findProjectRoot = findProjectRoot;
|
|
|
42
42
|
exports.loadConfig = loadConfig;
|
|
43
43
|
exports.getTasksDir = getTasksDir;
|
|
44
44
|
exports.getLogsDir = getLogsDir;
|
|
45
|
+
exports.getPofDir = getPofDir;
|
|
45
46
|
exports.validateConfig = validateConfig;
|
|
46
47
|
exports.createDefaultConfig = createDefaultConfig;
|
|
47
48
|
const path = __importStar(require("path"));
|
|
48
49
|
const fs = __importStar(require("fs"));
|
|
50
|
+
const path_1 = require("./path");
|
|
49
51
|
/**
|
|
50
52
|
* Find project root by looking for package.json
|
|
51
53
|
*/
|
|
52
54
|
function findProjectRoot(cwd = process.cwd()) {
|
|
53
55
|
let current = cwd;
|
|
54
56
|
while (current !== path.parse(current).root) {
|
|
55
|
-
const packagePath =
|
|
56
|
-
const configPath =
|
|
57
|
+
const packagePath = (0, path_1.safeJoin)(current, 'package.json');
|
|
58
|
+
const configPath = (0, path_1.safeJoin)(current, 'cursorflow.config.js');
|
|
57
59
|
if (fs.existsSync(packagePath) || fs.existsSync(configPath)) {
|
|
58
60
|
return current;
|
|
59
61
|
}
|
|
@@ -68,14 +70,15 @@ function loadConfig(projectRoot = null) {
|
|
|
68
70
|
if (!projectRoot) {
|
|
69
71
|
projectRoot = findProjectRoot();
|
|
70
72
|
}
|
|
71
|
-
const configPath =
|
|
73
|
+
const configPath = (0, path_1.safeJoin)(projectRoot, 'cursorflow.config.js');
|
|
72
74
|
// Default configuration
|
|
73
75
|
const defaults = {
|
|
74
76
|
// Directories
|
|
75
77
|
tasksDir: '_cursorflow/tasks',
|
|
76
78
|
logsDir: '_cursorflow/logs',
|
|
79
|
+
pofDir: '_cursorflow/pof',
|
|
77
80
|
// Git
|
|
78
|
-
baseBranch
|
|
81
|
+
// baseBranch is auto-detected from current branch at runtime
|
|
79
82
|
branchPrefix: 'feature/',
|
|
80
83
|
// Execution
|
|
81
84
|
executor: 'cursor-agent',
|
|
@@ -133,13 +136,19 @@ function loadConfig(projectRoot = null) {
|
|
|
133
136
|
* Get absolute path for tasks directory
|
|
134
137
|
*/
|
|
135
138
|
function getTasksDir(config) {
|
|
136
|
-
return
|
|
139
|
+
return (0, path_1.safeJoin)(config.projectRoot, config.tasksDir);
|
|
137
140
|
}
|
|
138
141
|
/**
|
|
139
142
|
* Get absolute path for logs directory
|
|
140
143
|
*/
|
|
141
144
|
function getLogsDir(config) {
|
|
142
|
-
return
|
|
145
|
+
return (0, path_1.safeJoin)(config.projectRoot, config.logsDir);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get absolute path for POF directory
|
|
149
|
+
*/
|
|
150
|
+
function getPofDir(config) {
|
|
151
|
+
return (0, path_1.safeJoin)(config.projectRoot, config.pofDir);
|
|
143
152
|
}
|
|
144
153
|
/**
|
|
145
154
|
* Validate configuration
|
|
@@ -167,14 +176,15 @@ function validateConfig(config) {
|
|
|
167
176
|
* Create default config file
|
|
168
177
|
*/
|
|
169
178
|
function createDefaultConfig(projectRoot, force = false) {
|
|
170
|
-
const configPath =
|
|
179
|
+
const configPath = (0, path_1.safeJoin)(projectRoot, 'cursorflow.config.js');
|
|
171
180
|
const template = `module.exports = {
|
|
172
181
|
// Directory configuration
|
|
173
182
|
tasksDir: '_cursorflow/tasks',
|
|
174
183
|
logsDir: '_cursorflow/logs',
|
|
184
|
+
pofDir: '_cursorflow/pof',
|
|
175
185
|
|
|
176
186
|
// Git configuration
|
|
177
|
-
baseBranch: 'main',
|
|
187
|
+
baseBranch: git.getCurrentBranch() || 'main',
|
|
178
188
|
branchPrefix: 'feature/',
|
|
179
189
|
|
|
180
190
|
// Execution configuration
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-agent.js","sourceRoot":"","sources":["../../src/utils/cursor-agent.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAOH,8DAOC;AAKD,sDAUC;AAKD,8CAgBC;AAKD,wDAsBC;AAKD,8CAEC;AAKD,sCAmBC;AAKD,gDA+BC;AAKD,sDAiBC;AAKD,0CAkBC;AAKD,0DA+BC;AAaD,0CA6DC;AAKD,sCAsBC;AApUD,
|
|
1
|
+
{"version":3,"file":"cursor-agent.js","sourceRoot":"","sources":["../../src/utils/cursor-agent.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAOH,8DAOC;AAKD,sDAUC;AAKD,8CAgBC;AAKD,wDAsBC;AAKD,8CAEC;AAKD,sCAmBC;AAKD,gDA+BC;AAKD,sDAiBC;AAKD,0CAkBC;AAKD,0DA+BC;AAaD,0CA6DC;AAKD,sCAsBC;AApUD,iDAA0C;AAE1C;;GAEG;AACH,SAAgB,yBAAyB;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,cAAc,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3E,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,cAAc,EAAE,CAAC,WAAW,CAAC,EAAE;YACtD,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,IAAI,CAAC,yBAAyB,EAAE,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC;;;;;;;;;;;KAWb,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB;IACpC,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;GAoBX,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,QAAQ,GAAG,cAAc;IACrD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;QAChC,IAAI,CAAC,yBAAyB,EAAE,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB;IAChC,sDAAsD;IACtD,MAAM,WAAW,GAAG;QAClB,YAAY;QACZ,qBAAqB;QACrB,UAAU;QACV,mBAAmB;QACnB,SAAS;QACT,cAAc;KACf,CAAC;IAEF,IAAI,CAAC;QACH,qEAAqE;QACrE,iFAAiF;QACjF,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,cAAc,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,CAAC,EAAE;YAChG,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjE,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAEvD,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,MAAc;IAClD,uCAAuC;IACvC,2DAA2D;IAC3D,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,wBAAwB;IACxB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAC7C,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,cAAc,EAAE,CAAC,QAAQ,CAAC,EAAE;YACnD,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,MAAM;SACrB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,CAAC,OAAO;SACrB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB;IACrC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAE/C,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAE1C,IAAI,CAAC;QACH,oEAAoE;QACpE,MAAM,MAAM,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC,sCAAsC,CAAC,EAAE;YACjF,KAAK,EAAE,SAAS,EAAE,4BAA4B;YAC9C,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,uCAAuC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YACrE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,oCAAoC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAClE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAUD;;GAEG;AACH,SAAgB,eAAe;IAC7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,cAAc,EAAE,CAAC,aAAa,CAAC,EAAE;YACxD,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,KAAK,EAAE,oBAAoB;SACrC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAChD,OAAO;gBACL,aAAa,EAAE,IAAI;gBACnB,OAAO,EAAE,0BAA0B;aACpC,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAEnF,kCAAkC;QAClC,IAAI,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YACtC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC1B,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,OAAO;gBACL,aAAa,EAAE,KAAK;gBACpB,OAAO,EAAE,+BAA+B;gBACxC,OAAO,EAAE,QAAQ;gBACjB,IAAI,EAAE,oDAAoD;aAC3D,CAAC;QACJ,CAAC;QAED,2BAA2B;QAC3B,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC5B,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC/B,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,OAAO;gBACL,aAAa,EAAE,KAAK;gBACpB,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE,QAAQ;gBACjB,IAAI,EAAE,gCAAgC;aACvC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,aAAa,EAAE,KAAK;YACpB,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,QAAQ;SAClB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,OAAO;gBACL,aAAa,EAAE,KAAK;gBACpB,OAAO,EAAE,oBAAoB;gBAC7B,IAAI,EAAE,gCAAgC;aACvC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,aAAa,EAAE,KAAK;YACpB,OAAO,EAAE,gCAAgC;YACzC,KAAK,EAAE,KAAK,CAAC,OAAO;SACrB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa;IAC3B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;GAoBX,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency management utilities for CursorFlow
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Cyclic dependency detection
|
|
6
|
+
* - Dependency wait with timeout
|
|
7
|
+
* - Topological sorting
|
|
8
|
+
*/
|
|
9
|
+
export interface DependencyInfo {
|
|
10
|
+
name: string;
|
|
11
|
+
dependsOn: string[];
|
|
12
|
+
}
|
|
13
|
+
export interface CycleDetectionResult {
|
|
14
|
+
hasCycle: boolean;
|
|
15
|
+
cycle: string[] | null;
|
|
16
|
+
sortedOrder: string[] | null;
|
|
17
|
+
}
|
|
18
|
+
export interface DependencyWaitOptions {
|
|
19
|
+
/** Maximum time to wait in milliseconds */
|
|
20
|
+
timeoutMs?: number;
|
|
21
|
+
/** Polling interval in milliseconds */
|
|
22
|
+
pollIntervalMs?: number;
|
|
23
|
+
/** Callback when timeout is reached */
|
|
24
|
+
onTimeout?: 'fail' | 'warn' | 'continue';
|
|
25
|
+
/** Callback for progress updates */
|
|
26
|
+
onProgress?: (pending: string[], completed: string[]) => void;
|
|
27
|
+
}
|
|
28
|
+
export declare const DEFAULT_DEPENDENCY_WAIT_OPTIONS: Required<Omit<DependencyWaitOptions, 'onProgress'>>;
|
|
29
|
+
export interface DependencyWaitResult {
|
|
30
|
+
success: boolean;
|
|
31
|
+
timedOut: boolean;
|
|
32
|
+
failedDependencies: string[];
|
|
33
|
+
completedDependencies: string[];
|
|
34
|
+
elapsedMs: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Detect cyclic dependencies in a list of lanes
|
|
38
|
+
*/
|
|
39
|
+
export declare function detectCyclicDependencies(lanes: DependencyInfo[]): CycleDetectionResult;
|
|
40
|
+
/**
|
|
41
|
+
* Get topologically sorted order for lanes
|
|
42
|
+
*/
|
|
43
|
+
export declare function getExecutionOrder(lanes: DependencyInfo[]): string[] | null;
|
|
44
|
+
/**
|
|
45
|
+
* Wait for task-level dependencies with timeout and progress tracking
|
|
46
|
+
*/
|
|
47
|
+
export declare function waitForTaskDependencies(deps: string[], lanesRoot: string, options?: DependencyWaitOptions): Promise<DependencyWaitResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Check if a lane can start based on its dependencies
|
|
50
|
+
*/
|
|
51
|
+
export declare function canLaneStart(laneName: string, lanes: DependencyInfo[], completedLanes: Set<string>, failedLanes: Set<string>): {
|
|
52
|
+
canStart: boolean;
|
|
53
|
+
reason?: string;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Get all transitive dependencies for a lane
|
|
57
|
+
*/
|
|
58
|
+
export declare function getTransitiveDependencies(laneName: string, lanes: DependencyInfo[]): string[];
|
|
59
|
+
/**
|
|
60
|
+
* Get lanes that depend on a given lane
|
|
61
|
+
*/
|
|
62
|
+
export declare function getDependentLanes(laneName: string, lanes: DependencyInfo[]): string[];
|
|
63
|
+
/**
|
|
64
|
+
* Validate dependency configuration
|
|
65
|
+
*/
|
|
66
|
+
export declare function validateDependencies(lanes: DependencyInfo[]): {
|
|
67
|
+
valid: boolean;
|
|
68
|
+
errors: string[];
|
|
69
|
+
warnings: string[];
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Print dependency graph to console
|
|
73
|
+
*/
|
|
74
|
+
export declare function printDependencyGraph(lanes: DependencyInfo[]): void;
|