@litmers/cursorflow-orchestrator 0.1.3 → 0.1.5

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 (74) hide show
  1. package/CHANGELOG.md +7 -6
  2. package/dist/cli/clean.d.ts +5 -0
  3. package/dist/cli/clean.js +57 -0
  4. package/dist/cli/clean.js.map +1 -0
  5. package/dist/cli/index.d.ts +6 -0
  6. package/dist/cli/index.js +120 -0
  7. package/dist/cli/index.js.map +1 -0
  8. package/dist/cli/init.d.ts +7 -0
  9. package/dist/cli/init.js +302 -0
  10. package/dist/cli/init.js.map +1 -0
  11. package/dist/cli/monitor.d.ts +8 -0
  12. package/dist/cli/monitor.js +210 -0
  13. package/dist/cli/monitor.js.map +1 -0
  14. package/dist/cli/resume.d.ts +5 -0
  15. package/dist/cli/resume.js +58 -0
  16. package/dist/cli/resume.js.map +1 -0
  17. package/dist/cli/run.d.ts +5 -0
  18. package/dist/cli/run.js +74 -0
  19. package/dist/cli/run.js.map +1 -0
  20. package/dist/cli/setup-commands.d.ts +19 -0
  21. package/dist/cli/setup-commands.js +218 -0
  22. package/dist/cli/setup-commands.js.map +1 -0
  23. package/dist/core/orchestrator.d.ts +47 -0
  24. package/dist/core/orchestrator.js +192 -0
  25. package/dist/core/orchestrator.js.map +1 -0
  26. package/dist/core/reviewer.d.ts +60 -0
  27. package/dist/core/reviewer.js +239 -0
  28. package/dist/core/reviewer.js.map +1 -0
  29. package/dist/core/runner.d.ts +49 -0
  30. package/dist/core/runner.js +475 -0
  31. package/dist/core/runner.js.map +1 -0
  32. package/dist/utils/config.d.ts +31 -0
  33. package/dist/utils/config.js +198 -0
  34. package/dist/utils/config.js.map +1 -0
  35. package/dist/utils/cursor-agent.d.ts +61 -0
  36. package/dist/utils/cursor-agent.js +263 -0
  37. package/dist/utils/cursor-agent.js.map +1 -0
  38. package/dist/utils/git.d.ts +131 -0
  39. package/dist/utils/git.js +272 -0
  40. package/dist/utils/git.js.map +1 -0
  41. package/dist/utils/logger.d.ts +68 -0
  42. package/dist/utils/logger.js +158 -0
  43. package/dist/utils/logger.js.map +1 -0
  44. package/dist/utils/state.d.ts +65 -0
  45. package/dist/utils/state.js +216 -0
  46. package/dist/utils/state.js.map +1 -0
  47. package/dist/utils/types.d.ts +117 -0
  48. package/dist/utils/types.js +6 -0
  49. package/dist/utils/types.js.map +1 -0
  50. package/examples/README.md +155 -0
  51. package/examples/demo-project/README.md +262 -0
  52. package/examples/demo-project/_cursorflow/tasks/demo-test/01-create-utils.json +18 -0
  53. package/examples/demo-project/_cursorflow/tasks/demo-test/02-add-tests.json +18 -0
  54. package/examples/demo-project/_cursorflow/tasks/demo-test/README.md +109 -0
  55. package/package.json +71 -61
  56. package/scripts/ai-security-check.js +11 -4
  57. package/scripts/local-security-gate.sh +76 -0
  58. package/src/cli/{clean.js → clean.ts} +11 -5
  59. package/src/cli/{index.js → index.ts} +22 -16
  60. package/src/cli/{init.js → init.ts} +26 -18
  61. package/src/cli/{monitor.js → monitor.ts} +57 -44
  62. package/src/cli/{resume.js → resume.ts} +11 -5
  63. package/src/cli/run.ts +54 -0
  64. package/src/cli/{setup-commands.js → setup-commands.ts} +19 -18
  65. package/src/core/{orchestrator.js → orchestrator.ts} +44 -26
  66. package/src/core/{reviewer.js → reviewer.ts} +36 -29
  67. package/src/core/{runner.js → runner.ts} +78 -56
  68. package/src/utils/{config.js → config.ts} +17 -25
  69. package/src/utils/{cursor-agent.js → cursor-agent.ts} +38 -47
  70. package/src/utils/{git.js → git.ts} +70 -56
  71. package/src/utils/{logger.js → logger.ts} +170 -178
  72. package/src/utils/{state.js → state.ts} +30 -38
  73. package/src/utils/types.ts +133 -0
  74. package/src/cli/run.js +0 -51
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ /**
3
+ * CursorFlow monitor command
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
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const logger = __importStar(require("../utils/logger"));
41
+ const state_1 = require("../utils/state");
42
+ const config_1 = require("../utils/config");
43
+ function parseArgs(args) {
44
+ const watch = args.includes('--watch');
45
+ const intervalIdx = args.indexOf('--interval');
46
+ const interval = intervalIdx >= 0 ? parseInt(args[intervalIdx + 1] || '2') || 2 : 2;
47
+ // Find run directory (first non-option argument)
48
+ const runDir = args.find(arg => !arg.startsWith('--') && args.indexOf(arg) !== intervalIdx + 1);
49
+ return {
50
+ runDir,
51
+ watch,
52
+ interval,
53
+ };
54
+ }
55
+ /**
56
+ * Find the latest run directory
57
+ */
58
+ function findLatestRunDir(logsDir) {
59
+ const runsDir = path.join(logsDir, 'runs');
60
+ if (!fs.existsSync(runsDir)) {
61
+ return null;
62
+ }
63
+ const runs = fs.readdirSync(runsDir)
64
+ .filter(d => d.startsWith('run-'))
65
+ .map(d => ({
66
+ name: d,
67
+ path: path.join(runsDir, d),
68
+ mtime: fs.statSync(path.join(runsDir, d)).mtime.getTime(),
69
+ }))
70
+ .sort((a, b) => b.mtime - a.mtime);
71
+ return runs.length > 0 ? runs[0].path : null;
72
+ }
73
+ /**
74
+ * List all lanes in a run directory
75
+ */
76
+ function listLanes(runDir) {
77
+ const lanesDir = path.join(runDir, 'lanes');
78
+ if (!fs.existsSync(lanesDir)) {
79
+ return [];
80
+ }
81
+ return fs.readdirSync(lanesDir)
82
+ .filter(d => {
83
+ const stat = fs.statSync(path.join(lanesDir, d));
84
+ return stat.isDirectory();
85
+ })
86
+ .map(name => ({
87
+ name,
88
+ path: path.join(lanesDir, name),
89
+ }));
90
+ }
91
+ /**
92
+ * Get lane status
93
+ */
94
+ function getLaneStatus(lanePath) {
95
+ const statePath = path.join(lanePath, 'state.json');
96
+ const state = (0, state_1.loadState)(statePath);
97
+ if (!state) {
98
+ return {
99
+ status: 'no state',
100
+ currentTask: '-',
101
+ totalTasks: '?',
102
+ progress: '0%',
103
+ };
104
+ }
105
+ const progress = state.totalTasks > 0
106
+ ? Math.round((state.currentTaskIndex / state.totalTasks) * 100)
107
+ : 0;
108
+ return {
109
+ status: state.status || 'unknown',
110
+ currentTask: (state.currentTaskIndex || 0) + 1,
111
+ totalTasks: state.totalTasks || '?',
112
+ progress: `${progress}%`,
113
+ pipelineBranch: state.pipelineBranch || '-',
114
+ chatId: state.chatId || '-',
115
+ };
116
+ }
117
+ /**
118
+ * Get status icon
119
+ */
120
+ function getStatusIcon(status) {
121
+ const icons = {
122
+ 'running': '🔄',
123
+ 'completed': '✅',
124
+ 'failed': '❌',
125
+ 'blocked_dependency': '🚫',
126
+ 'no state': '⚪',
127
+ };
128
+ return icons[status] || '❓';
129
+ }
130
+ /**
131
+ * Display lane status table
132
+ */
133
+ function displayStatus(runDir, lanes) {
134
+ console.log('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
135
+ console.log(`📊 Run: ${path.basename(runDir)}`);
136
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
137
+ if (lanes.length === 0) {
138
+ console.log(' No lanes found\n');
139
+ return;
140
+ }
141
+ // Calculate column widths
142
+ const maxNameLen = Math.max(...lanes.map(l => l.name.length), 10);
143
+ // Header
144
+ console.log(` ${'Lane'.padEnd(maxNameLen)} Status Progress Tasks`);
145
+ console.log(` ${'─'.repeat(maxNameLen)} ${'─'.repeat(18)} ${'─'.repeat(8)} ${'─'.repeat(10)}`);
146
+ // Lanes
147
+ for (const lane of lanes) {
148
+ const status = getLaneStatus(lane.path);
149
+ const statusIcon = getStatusIcon(status.status);
150
+ const statusText = `${statusIcon} ${status.status}`.padEnd(18);
151
+ const progressText = status.progress.padEnd(8);
152
+ const tasksText = `${status.currentTask}/${status.totalTasks}`;
153
+ console.log(` ${lane.name.padEnd(maxNameLen)} ${statusText} ${progressText} ${tasksText}`);
154
+ }
155
+ console.log();
156
+ }
157
+ /**
158
+ * Monitor lanes
159
+ */
160
+ async function monitor(args) {
161
+ logger.section('📡 Monitoring Lane Execution');
162
+ const options = parseArgs(args);
163
+ const config = (0, config_1.loadConfig)();
164
+ // Determine run directory
165
+ let runDir = options.runDir;
166
+ if (!runDir || runDir === 'latest') {
167
+ runDir = findLatestRunDir(config.logsDir) || undefined;
168
+ if (!runDir) {
169
+ logger.error(`Runs directory: ${path.join(config.logsDir, 'runs')}`);
170
+ throw new Error('No run directories found');
171
+ }
172
+ logger.info(`Using latest run: ${path.basename(runDir)}`);
173
+ }
174
+ if (!fs.existsSync(runDir)) {
175
+ throw new Error(`Run directory not found: ${runDir}`);
176
+ }
177
+ // Watch mode
178
+ if (options.watch) {
179
+ logger.info(`Watch mode: every ${options.interval}s (Ctrl+C to stop)\n`);
180
+ let iteration = 0;
181
+ const refresh = () => {
182
+ if (iteration > 0) {
183
+ // Clear screen
184
+ process.stdout.write('\x1Bc');
185
+ }
186
+ const lanes = listLanes(runDir);
187
+ displayStatus(runDir, lanes);
188
+ iteration++;
189
+ };
190
+ // Initial display
191
+ refresh();
192
+ // Set up interval
193
+ const intervalId = setInterval(refresh, options.interval * 1000);
194
+ // Handle Ctrl+C
195
+ return new Promise((_, reject) => {
196
+ process.on('SIGINT', () => {
197
+ clearInterval(intervalId);
198
+ console.log('\n👋 Monitoring stopped\n');
199
+ process.exit(0);
200
+ });
201
+ });
202
+ }
203
+ else {
204
+ // Single shot
205
+ const lanes = listLanes(runDir);
206
+ displayStatus(runDir, lanes);
207
+ }
208
+ }
209
+ module.exports = monitor;
210
+ //# sourceMappingURL=monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/cli/monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * CursorFlow resume command (stub)
3
+ */
4
+ declare function resume(args: string[]): Promise<void>;
5
+ export = resume;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ /**
3
+ * CursorFlow resume command (stub)
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
+ const logger = __importStar(require("../utils/logger"));
39
+ function parseArgs(args) {
40
+ return {
41
+ lane: args[0],
42
+ runDir: null,
43
+ clean: args.includes('--clean'),
44
+ restart: args.includes('--restart'),
45
+ };
46
+ }
47
+ async function resume(args) {
48
+ logger.section('🔁 Resuming Lane');
49
+ const options = parseArgs(args);
50
+ logger.info('This command will be fully implemented in the next phase');
51
+ logger.info(`Lane: ${options.lane}`);
52
+ logger.info(`Clean: ${options.clean}`);
53
+ logger.info(`Restart: ${options.restart}`);
54
+ logger.warn('\n⚠️ Implementation pending');
55
+ logger.info('This will resume interrupted lanes');
56
+ }
57
+ module.exports = resume;
58
+ //# sourceMappingURL=resume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/cli/resume.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,wDAA0C;AAS1C,SAAS,SAAS,CAAC,IAAc;IAC/B,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACb,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC/B,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAc;IAClC,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEnC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAEhC,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IACxE,MAAM,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,MAAM,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAE3C,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC5C,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;AACpD,CAAC;AAED,iBAAS,MAAM,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * CursorFlow run command
3
+ */
4
+ declare function run(args: string[]): Promise<void>;
5
+ export = run;
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ /**
3
+ * CursorFlow run command
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
+ const path = __importStar(require("path"));
39
+ const fs = __importStar(require("fs"));
40
+ const orchestrator_1 = require("../core/orchestrator");
41
+ const config_1 = require("../utils/config");
42
+ function parseArgs(args) {
43
+ const tasksDir = args.find(a => !a.startsWith('--'));
44
+ const executorIdx = args.indexOf('--executor');
45
+ return {
46
+ tasksDir,
47
+ dryRun: args.includes('--dry-run'),
48
+ executor: executorIdx >= 0 ? args[executorIdx + 1] || null : null,
49
+ };
50
+ }
51
+ async function run(args) {
52
+ const options = parseArgs(args);
53
+ if (!options.tasksDir) {
54
+ console.log('\nUsage: cursorflow run <tasks-dir> [options]');
55
+ throw new Error('Tasks directory required');
56
+ }
57
+ if (!fs.existsSync(options.tasksDir)) {
58
+ throw new Error(`Tasks directory not found: ${options.tasksDir}`);
59
+ }
60
+ const config = (0, config_1.loadConfig)();
61
+ try {
62
+ await (0, orchestrator_1.orchestrate)(options.tasksDir, {
63
+ executor: options.executor || config.executor,
64
+ pollInterval: config.pollInterval * 1000,
65
+ runDir: path.join(config.logsDir, 'runs', `run-${Date.now()}`),
66
+ });
67
+ }
68
+ catch (error) {
69
+ // Re-throw to be handled by the main entry point
70
+ throw new Error(`Orchestration failed: ${error.message}`);
71
+ }
72
+ }
73
+ module.exports = run;
74
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2CAA6B;AAC7B,uCAAyB;AAEzB,uDAAmD;AACnD,4CAA6C;AAQ7C,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAE/C,OAAO;QACL,QAAQ;QACR,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAClC,QAAQ,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI;KAClE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,IAAc;IAC/B,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAEhC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,mBAAU,GAAE,CAAC;IAE5B,IAAI,CAAC;QACH,MAAM,IAAA,0BAAW,EAAC,OAAO,CAAC,QAAQ,EAAE;YAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;YAC7C,YAAY,EAAE,MAAM,CAAC,YAAY,GAAG,IAAI;YACxC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;SAC/D,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,iDAAiD;QACjD,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,iBAAS,GAAG,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Setup Cursor commands
3
+ *
4
+ * Installs CursorFlow commands to .cursor/commands/cursorflow/
5
+ */
6
+ interface SetupOptions {
7
+ force?: boolean;
8
+ uninstall?: boolean;
9
+ silent?: boolean;
10
+ }
11
+ export declare function setupCommands(options?: SetupOptions): {
12
+ installed: number;
13
+ backed: number;
14
+ skipped: number;
15
+ };
16
+ export declare function uninstallCommands(options?: SetupOptions): {
17
+ removed: number;
18
+ };
19
+ export {};
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ /**
3
+ * Setup Cursor commands
4
+ *
5
+ * Installs CursorFlow commands to .cursor/commands/cursorflow/
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.setupCommands = setupCommands;
42
+ exports.uninstallCommands = uninstallCommands;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const logger = __importStar(require("../utils/logger"));
46
+ const config_1 = require("../utils/config");
47
+ function parseArgs(args) {
48
+ const options = {
49
+ force: false,
50
+ uninstall: false,
51
+ silent: false,
52
+ };
53
+ for (const arg of args) {
54
+ switch (arg) {
55
+ case '--force':
56
+ options.force = true;
57
+ break;
58
+ case '--uninstall':
59
+ options.uninstall = true;
60
+ break;
61
+ case '--silent':
62
+ options.silent = true;
63
+ break;
64
+ case '--help':
65
+ case '-h':
66
+ printHelp();
67
+ process.exit(0);
68
+ break;
69
+ }
70
+ }
71
+ return options;
72
+ }
73
+ function printHelp() {
74
+ console.log(`
75
+ Usage: cursorflow-setup [options]
76
+
77
+ Install CursorFlow commands to Cursor IDE
78
+
79
+ Options:
80
+ --force Overwrite existing commands
81
+ --uninstall Remove installed commands
82
+ --silent Suppress output
83
+ --help, -h Show help
84
+
85
+ Examples:
86
+ cursorflow-setup
87
+ cursorflow-setup --force
88
+ cursorflow-setup --uninstall
89
+ `);
90
+ }
91
+ function getCommandsSourceDir() {
92
+ // Commands are in the package directory
93
+ return path.join(__dirname, '..', '..', 'commands');
94
+ }
95
+ function setupCommands(options = {}) {
96
+ const projectRoot = (0, config_1.findProjectRoot)();
97
+ const targetDir = path.join(projectRoot, '.cursor', 'commands', 'cursorflow');
98
+ const sourceDir = getCommandsSourceDir();
99
+ if (!options.silent) {
100
+ logger.info(`Installing commands to: ${path.relative(projectRoot, targetDir)}`);
101
+ }
102
+ // Create target directory
103
+ if (!fs.existsSync(targetDir)) {
104
+ fs.mkdirSync(targetDir, { recursive: true });
105
+ }
106
+ // Get list of command files
107
+ if (!fs.existsSync(sourceDir)) {
108
+ throw new Error(`Commands directory not found: ${sourceDir}`);
109
+ }
110
+ const commandFiles = fs.readdirSync(sourceDir).filter(f => f.endsWith('.md'));
111
+ if (commandFiles.length === 0) {
112
+ throw new Error(`No command files found in ${sourceDir}`);
113
+ }
114
+ let installed = 0;
115
+ let backed = 0;
116
+ let skipped = 0;
117
+ for (const file of commandFiles) {
118
+ const sourcePath = path.join(sourceDir, file);
119
+ const targetPath = path.join(targetDir, file);
120
+ // Check if file exists
121
+ if (fs.existsSync(targetPath)) {
122
+ if (options.force) {
123
+ // Backup existing file
124
+ const backupPath = `${targetPath}.backup`;
125
+ fs.copyFileSync(targetPath, backupPath);
126
+ backed++;
127
+ if (!options.silent) {
128
+ logger.info(`📦 Backed up: ${file}`);
129
+ }
130
+ }
131
+ else {
132
+ skipped++;
133
+ if (!options.silent) {
134
+ logger.info(`⏭️ Skipped (exists): ${file}`);
135
+ }
136
+ continue;
137
+ }
138
+ }
139
+ // Copy file
140
+ fs.copyFileSync(sourcePath, targetPath);
141
+ installed++;
142
+ if (!options.silent) {
143
+ logger.success(`Installed: ${file}`);
144
+ }
145
+ }
146
+ if (!options.silent) {
147
+ logger.section('🎉 Setup complete!');
148
+ console.log(` Installed: ${installed} commands`);
149
+ if (backed > 0) {
150
+ console.log(` Backed up: ${backed} existing commands`);
151
+ }
152
+ if (skipped > 0) {
153
+ console.log(` Skipped: ${skipped} commands (use --force to overwrite)`);
154
+ }
155
+ console.log(`\n📍 Location: ${targetDir}`);
156
+ console.log('\n💡 Usage: Type "/" in Cursor chat to see commands');
157
+ }
158
+ return { installed, backed, skipped };
159
+ }
160
+ function uninstallCommands(options = {}) {
161
+ const projectRoot = (0, config_1.findProjectRoot)();
162
+ const targetDir = path.join(projectRoot, '.cursor', 'commands', 'cursorflow');
163
+ if (!fs.existsSync(targetDir)) {
164
+ if (!options.silent) {
165
+ logger.info('Commands directory not found, nothing to uninstall');
166
+ }
167
+ return { removed: 0 };
168
+ }
169
+ const commandFiles = fs.readdirSync(targetDir).filter(f => f.endsWith('.md'));
170
+ let removed = 0;
171
+ for (const file of commandFiles) {
172
+ const filePath = path.join(targetDir, file);
173
+ fs.unlinkSync(filePath);
174
+ removed++;
175
+ if (!options.silent) {
176
+ logger.info(`Removed: ${file}`);
177
+ }
178
+ }
179
+ // Remove directory if empty
180
+ const remainingFiles = fs.readdirSync(targetDir);
181
+ if (remainingFiles.length === 0) {
182
+ fs.rmdirSync(targetDir);
183
+ if (!options.silent) {
184
+ logger.info(`Removed directory: ${targetDir}`);
185
+ }
186
+ }
187
+ if (!options.silent) {
188
+ logger.success(`Uninstalled ${removed} commands`);
189
+ }
190
+ return { removed };
191
+ }
192
+ async function main(args) {
193
+ const options = parseArgs(args);
194
+ try {
195
+ if (options.uninstall) {
196
+ return uninstallCommands(options);
197
+ }
198
+ else {
199
+ return setupCommands(options);
200
+ }
201
+ }
202
+ catch (error) {
203
+ if (!options.silent) {
204
+ logger.error(error.message);
205
+ }
206
+ throw error;
207
+ }
208
+ }
209
+ if (require.main === module) {
210
+ main(process.argv.slice(2)).catch(error => {
211
+ console.error('❌ Error:', error.message);
212
+ if (process.env['DEBUG']) {
213
+ console.error(error.stack);
214
+ }
215
+ process.exit(1);
216
+ });
217
+ }
218
+ //# sourceMappingURL=setup-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-commands.js","sourceRoot":"","sources":["../../src/cli/setup-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Orchestrator - Parallel lane execution with dependency management
3
+ *
4
+ * Adapted from admin-domains-orchestrator.js
5
+ */
6
+ import { ChildProcess } from 'child_process';
7
+ export interface LaneInfo {
8
+ name: string;
9
+ path: string;
10
+ }
11
+ export interface SpawnLaneResult {
12
+ child: ChildProcess;
13
+ logPath: string;
14
+ }
15
+ /**
16
+ * Spawn a lane process
17
+ */
18
+ export declare function spawnLane({ tasksFile, laneRunDir, executor }: {
19
+ laneName: string;
20
+ tasksFile: string;
21
+ laneRunDir: string;
22
+ executor: string;
23
+ }): SpawnLaneResult;
24
+ /**
25
+ * Wait for child process to exit
26
+ */
27
+ export declare function waitChild(proc: ChildProcess): Promise<number>;
28
+ /**
29
+ * List lane task files in directory
30
+ */
31
+ export declare function listLaneFiles(tasksDir: string): LaneInfo[];
32
+ /**
33
+ * Monitor lane states
34
+ */
35
+ export declare function printLaneStatus(lanes: LaneInfo[], laneRunDirs: Record<string, string>): void;
36
+ /**
37
+ * Run orchestration
38
+ */
39
+ export declare function orchestrate(tasksDir: string, options?: {
40
+ runDir?: string;
41
+ executor?: string;
42
+ pollInterval?: number;
43
+ }): Promise<{
44
+ lanes: LaneInfo[];
45
+ exitCodes: Record<string, number>;
46
+ runRoot: string;
47
+ }>;