@litmers/cursorflow-orchestrator 0.1.2 → 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,216 @@
1
+ "use strict";
2
+ /**
3
+ * State management utilities 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.saveState = saveState;
40
+ exports.loadState = loadState;
41
+ exports.appendLog = appendLog;
42
+ exports.readLog = readLog;
43
+ exports.createLaneState = createLaneState;
44
+ exports.updateLaneState = updateLaneState;
45
+ exports.createConversationEntry = createConversationEntry;
46
+ exports.createGitLogEntry = createGitLogEntry;
47
+ exports.createEventEntry = createEventEntry;
48
+ exports.getLatestRunDir = getLatestRunDir;
49
+ exports.listLanesInRun = listLanesInRun;
50
+ exports.getLaneStateSummary = getLaneStateSummary;
51
+ const fs = __importStar(require("fs"));
52
+ const path = __importStar(require("path"));
53
+ /**
54
+ * Save state to JSON file
55
+ */
56
+ function saveState(statePath, state) {
57
+ const stateDir = path.dirname(statePath);
58
+ if (!fs.existsSync(stateDir)) {
59
+ fs.mkdirSync(stateDir, { recursive: true });
60
+ }
61
+ fs.writeFileSync(statePath, JSON.stringify(state, null, 2), 'utf8');
62
+ }
63
+ /**
64
+ * Load state from JSON file
65
+ */
66
+ function loadState(statePath) {
67
+ if (!fs.existsSync(statePath)) {
68
+ return null;
69
+ }
70
+ try {
71
+ const content = fs.readFileSync(statePath, 'utf8');
72
+ return JSON.parse(content);
73
+ }
74
+ catch (error) {
75
+ console.warn(`Warning: Failed to parse state file ${statePath}: ${error.message}`);
76
+ return null;
77
+ }
78
+ }
79
+ /**
80
+ * Append to JSONL log file
81
+ */
82
+ function appendLog(logPath, entry) {
83
+ const logDir = path.dirname(logPath);
84
+ if (!fs.existsSync(logDir)) {
85
+ fs.mkdirSync(logDir, { recursive: true });
86
+ }
87
+ const line = JSON.stringify(entry) + '\n';
88
+ fs.appendFileSync(logPath, line, 'utf8');
89
+ }
90
+ /**
91
+ * Read JSONL log file
92
+ */
93
+ function readLog(logPath) {
94
+ if (!fs.existsSync(logPath)) {
95
+ return [];
96
+ }
97
+ try {
98
+ const content = fs.readFileSync(logPath, 'utf8');
99
+ return content
100
+ .split('\n')
101
+ .filter(line => line.trim())
102
+ .map(line => JSON.parse(line));
103
+ }
104
+ catch (error) {
105
+ console.warn(`Warning: Failed to parse log file ${logPath}: ${error.message}`);
106
+ return [];
107
+ }
108
+ }
109
+ /**
110
+ * Create initial lane state
111
+ */
112
+ function createLaneState(laneName, config) {
113
+ return {
114
+ label: laneName,
115
+ status: 'pending',
116
+ currentTaskIndex: 0,
117
+ totalTasks: config.tasks ? config.tasks.length : 0,
118
+ worktreeDir: null,
119
+ pipelineBranch: null,
120
+ startTime: Date.now(),
121
+ endTime: null,
122
+ error: null,
123
+ dependencyRequest: null,
124
+ };
125
+ }
126
+ /**
127
+ * Update lane state
128
+ */
129
+ function updateLaneState(state, updates) {
130
+ return {
131
+ ...state,
132
+ ...updates,
133
+ updatedAt: Date.now(),
134
+ };
135
+ }
136
+ /**
137
+ * Create conversation log entry
138
+ */
139
+ function createConversationEntry(role, text, options = {}) {
140
+ return {
141
+ timestamp: new Date().toISOString(),
142
+ role,
143
+ task: options.task || null,
144
+ fullText: text,
145
+ textLength: text.length,
146
+ model: options.model || null,
147
+ };
148
+ }
149
+ /**
150
+ * Create git operation log entry
151
+ */
152
+ function createGitLogEntry(operation, details = {}) {
153
+ return {
154
+ timestamp: new Date().toISOString(),
155
+ operation,
156
+ ...details,
157
+ };
158
+ }
159
+ /**
160
+ * Create event log entry
161
+ */
162
+ function createEventEntry(event, data = {}) {
163
+ return {
164
+ timestamp: new Date().toISOString(),
165
+ event,
166
+ ...data,
167
+ };
168
+ }
169
+ /**
170
+ * Get latest run directory
171
+ */
172
+ function getLatestRunDir(logsDir) {
173
+ if (!fs.existsSync(logsDir)) {
174
+ return null;
175
+ }
176
+ const runs = fs.readdirSync(logsDir)
177
+ .filter(f => fs.statSync(path.join(logsDir, f)).isDirectory())
178
+ .sort()
179
+ .reverse();
180
+ if (runs.length === 0) {
181
+ return null;
182
+ }
183
+ return path.join(logsDir, runs[0]);
184
+ }
185
+ /**
186
+ * List all lanes in a run directory
187
+ */
188
+ function listLanesInRun(runDir) {
189
+ if (!fs.existsSync(runDir)) {
190
+ return [];
191
+ }
192
+ return fs.readdirSync(runDir)
193
+ .filter(f => fs.statSync(path.join(runDir, f)).isDirectory())
194
+ .map(laneName => ({
195
+ name: laneName,
196
+ dir: path.join(runDir, laneName),
197
+ statePath: path.join(runDir, laneName, 'state.json'),
198
+ }));
199
+ }
200
+ /**
201
+ * Get lane state summary
202
+ */
203
+ function getLaneStateSummary(statePath) {
204
+ const state = loadState(statePath);
205
+ if (!state) {
206
+ return { status: 'unknown', progress: '-' };
207
+ }
208
+ const progress = `${(state.currentTaskIndex || 0) + 1}/${state.totalTasks || '?'}`;
209
+ return {
210
+ status: state.status || 'unknown',
211
+ progress,
212
+ label: state.label,
213
+ error: state.error,
214
+ };
215
+ }
216
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/utils/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Shared type definitions for CursorFlow
3
+ */
4
+ export interface LaneConfig {
5
+ devPort: number;
6
+ autoCreatePr: boolean;
7
+ }
8
+ export interface CursorFlowConfig {
9
+ tasksDir: string;
10
+ logsDir: string;
11
+ baseBranch: string;
12
+ branchPrefix: string;
13
+ executor: 'cursor-agent' | 'cloud';
14
+ pollInterval: number;
15
+ allowDependencyChange: boolean;
16
+ lockfileReadOnly: boolean;
17
+ enableReview: boolean;
18
+ reviewModel: string;
19
+ maxReviewIterations: number;
20
+ defaultLaneConfig: LaneConfig;
21
+ logLevel: string;
22
+ verboseGit: boolean;
23
+ worktreePrefix: string;
24
+ maxConcurrentLanes: number;
25
+ projectRoot: string;
26
+ }
27
+ export interface DependencyPolicy {
28
+ allowDependencyChange: boolean;
29
+ lockfileReadOnly: boolean;
30
+ }
31
+ export interface Task {
32
+ name: string;
33
+ prompt: string;
34
+ model?: string;
35
+ }
36
+ export interface RunnerConfig {
37
+ tasks: Task[];
38
+ pipelineBranch?: string;
39
+ branchPrefix?: string;
40
+ worktreeRoot?: string;
41
+ baseBranch?: string;
42
+ model?: string;
43
+ dependencyPolicy: DependencyPolicy;
44
+ reviewModel?: string;
45
+ maxReviewIterations?: number;
46
+ acceptanceCriteria?: string[];
47
+ }
48
+ export interface DependencyRequestPlan {
49
+ reason: string;
50
+ changes: string[];
51
+ commands: string[];
52
+ notes?: string;
53
+ }
54
+ export interface TaskExecutionResult {
55
+ taskName: string;
56
+ taskBranch: string;
57
+ status: 'FINISHED' | 'ERROR' | 'BLOCKED_DEPENDENCY';
58
+ error?: string;
59
+ dependencyRequest?: DependencyRequestPlan | null;
60
+ }
61
+ export interface AgentSendResult {
62
+ ok: boolean;
63
+ exitCode: number;
64
+ error?: string;
65
+ sessionId?: string;
66
+ resultText?: string;
67
+ }
68
+ export interface ReviewIssue {
69
+ severity: 'critical' | 'major' | 'minor';
70
+ description: string;
71
+ file?: string;
72
+ suggestion?: string;
73
+ }
74
+ export interface ReviewResult {
75
+ status: 'approved' | 'needs_changes';
76
+ buildSuccess: boolean;
77
+ issues: ReviewIssue[];
78
+ suggestions: string[];
79
+ summary: string;
80
+ raw: string;
81
+ }
82
+ export interface TaskResult {
83
+ taskName: string;
84
+ taskBranch: string;
85
+ [key: string]: any;
86
+ }
87
+ export interface LaneState {
88
+ label: string;
89
+ status: 'pending' | 'running' | 'completed' | 'failed' | 'paused' | 'waiting' | 'reviewing';
90
+ currentTaskIndex: number;
91
+ totalTasks: number;
92
+ worktreeDir: string | null;
93
+ pipelineBranch: string | null;
94
+ startTime: number;
95
+ endTime: number | null;
96
+ error: string | null;
97
+ dependencyRequest: DependencyRequestPlan | null;
98
+ updatedAt?: number;
99
+ }
100
+ export interface ConversationEntry {
101
+ timestamp: string;
102
+ role: 'user' | 'assistant' | 'reviewer' | 'system';
103
+ task: string | null;
104
+ fullText: string;
105
+ textLength: number;
106
+ model: string | null;
107
+ }
108
+ export interface GitLogEntry {
109
+ timestamp: string;
110
+ operation: string;
111
+ [key: string]: any;
112
+ }
113
+ export interface EventEntry {
114
+ timestamp: string;
115
+ event: string;
116
+ [key: string]: any;
117
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Shared type definitions for CursorFlow
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,155 @@
1
+ # CursorFlow Examples
2
+
3
+ This directory contains example projects and configurations to help you get started with CursorFlow.
4
+
5
+ ## 📁 Available Examples
6
+
7
+ ### 1. Demo Project (`demo-project/`)
8
+
9
+ A complete demonstration of CursorFlow's core features.
10
+
11
+ **What it includes:**
12
+ - 2 parallel tasks (create utils + add tests)
13
+ - Real LLM execution with Claude 3.5 Sonnet
14
+ - Complete documentation
15
+ - Expected time: ~2-4 minutes
16
+
17
+ **Best for:**
18
+ - First-time users
19
+ - Understanding the basics
20
+ - Testing your setup
21
+
22
+ **Quick start:**
23
+ ```bash
24
+ # See demo-project/README.md for detailed instructions
25
+ cd your-project
26
+ cursorflow init
27
+ cp -r path/to/cursorflow/examples/demo-project/_cursorflow/tasks/demo-test _cursorflow/tasks/
28
+ cursorflow run _cursorflow/tasks/demo-test/
29
+ ```
30
+
31
+ ## 🎯 How to Use Examples
32
+
33
+ ### Option 1: Copy to Your Project
34
+
35
+ 1. Initialize CursorFlow in your project:
36
+ ```bash
37
+ cd your-project
38
+ cursorflow init
39
+ ```
40
+
41
+ 2. Copy example tasks:
42
+ ```bash
43
+ cp -r examples/demo-project/_cursorflow/tasks/demo-test _cursorflow/tasks/
44
+ ```
45
+
46
+ 3. Run the example:
47
+ ```bash
48
+ cursorflow run _cursorflow/tasks/demo-test/
49
+ ```
50
+
51
+ ### Option 2: Use as Reference
52
+
53
+ Browse the example files to understand:
54
+ - Task JSON structure
55
+ - Prompt engineering best practices
56
+ - Configuration options
57
+ - Expected outcomes
58
+
59
+ ## 📚 Example Structure
60
+
61
+ Each example includes:
62
+
63
+ - **Task configurations** (`*.json`) - Defines what the AI will do
64
+ - **README.md** - Detailed instructions and explanations
65
+ - **Expected results** - What you should see after running
66
+
67
+ ## 🔍 What's in a Task File?
68
+
69
+ ```json
70
+ {
71
+ "baseBranch": "main",
72
+ "branchPrefix": "cursorflow/demo-",
73
+ "executor": "cursor-agent",
74
+ "dependencyPolicy": {
75
+ "allowDependencyChange": false,
76
+ "lockfileReadOnly": true
77
+ },
78
+ "tasks": [
79
+ {
80
+ "name": "task-name",
81
+ "model": "claude-3.5-sonnet",
82
+ "prompt": "Detailed instructions for the AI..."
83
+ }
84
+ ]
85
+ }
86
+ ```
87
+
88
+ ## 🚀 Prerequisites
89
+
90
+ Before running examples:
91
+
92
+ 1. **Install CursorFlow**
93
+ ```bash
94
+ npm install -g @litmers/cursorflow-orchestrator
95
+ ```
96
+
97
+ 2. **Install cursor-agent**
98
+ ```bash
99
+ npm install -g @cursor/agent
100
+ ```
101
+
102
+ 3. **Authenticate Cursor**
103
+ - Open Cursor IDE
104
+ - Sign in to your account
105
+ - Verify AI features work
106
+
107
+ 4. **Check authentication** (optional)
108
+ ```bash
109
+ node test-auth.js
110
+ ```
111
+
112
+ ## 💡 Tips
113
+
114
+ - **Start with demo-project** - It's the simplest example
115
+ - **Monitor execution** - Use `cursorflow monitor --watch` to see real-time progress
116
+ - **Check logs** - Inspect `_cursorflow/logs/` after execution
117
+ - **Experiment** - Modify prompts to test different scenarios
118
+ - **Clean up** - Remove worktrees and branches after testing
119
+
120
+ ## 📖 Learn More
121
+
122
+ - **Main Documentation**: [README.md](../README.md)
123
+ - **Configuration Guide**: Check `cursorflow.config.js` in your project
124
+ - **Task Format**: See individual example task files
125
+ - **Monitoring**: [Monitor Command](../commands/cursorflow-monitor.md)
126
+
127
+ ## 🐛 Troubleshooting
128
+
129
+ If you encounter issues:
130
+
131
+ 1. Check prerequisites are installed
132
+ 2. Verify Cursor authentication
133
+ 3. Ensure you're in a Git repository
134
+ 4. Check you have at least one commit
135
+ 5. See example README for specific troubleshooting
136
+
137
+ ## 🤝 Contributing Examples
138
+
139
+ Have a useful example? Contributions are welcome!
140
+
141
+ Please include:
142
+ - Complete task configurations
143
+ - Detailed README
144
+ - Expected results documentation
145
+ - Troubleshooting tips
146
+
147
+ ## 📝 Notes
148
+
149
+ - Examples use real LLM API calls
150
+ - Small API usage will occur
151
+ - Internet connection required
152
+ - Make sure you have Cursor subscription active
153
+
154
+ Happy learning! 🎉
155
+