@litmers/cursorflow-orchestrator 0.1.31 → 0.1.36
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 +27 -0
- package/README.md +182 -59
- package/commands/cursorflow-add.md +159 -0
- package/commands/cursorflow-doctor.md +45 -23
- package/commands/cursorflow-monitor.md +23 -2
- package/commands/cursorflow-new.md +87 -0
- package/commands/cursorflow-run.md +60 -111
- package/dist/cli/add.d.ts +7 -0
- package/dist/cli/add.js +377 -0
- package/dist/cli/add.js.map +1 -0
- package/dist/cli/clean.js +1 -0
- package/dist/cli/clean.js.map +1 -1
- package/dist/cli/config.d.ts +7 -0
- package/dist/cli/config.js +181 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/doctor.js +47 -4
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.js +34 -30
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/logs.js +17 -34
- package/dist/cli/logs.js.map +1 -1
- package/dist/cli/monitor.js +62 -65
- package/dist/cli/monitor.js.map +1 -1
- package/dist/cli/new.d.ts +7 -0
- package/dist/cli/new.js +232 -0
- package/dist/cli/new.js.map +1 -0
- package/dist/cli/prepare.js +95 -193
- package/dist/cli/prepare.js.map +1 -1
- package/dist/cli/resume.js +57 -68
- package/dist/cli/resume.js.map +1 -1
- package/dist/cli/run.js +60 -30
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/stop.js +6 -0
- package/dist/cli/stop.js.map +1 -1
- package/dist/cli/tasks.d.ts +5 -3
- package/dist/cli/tasks.js +181 -29
- package/dist/cli/tasks.js.map +1 -1
- package/dist/core/failure-policy.d.ts +9 -0
- package/dist/core/failure-policy.js +9 -0
- package/dist/core/failure-policy.js.map +1 -1
- package/dist/core/orchestrator.d.ts +20 -6
- package/dist/core/orchestrator.js +215 -334
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/core/runner/agent.d.ts +27 -0
- package/dist/core/runner/agent.js +294 -0
- package/dist/core/runner/agent.js.map +1 -0
- package/dist/core/runner/index.d.ts +5 -0
- package/dist/core/runner/index.js +22 -0
- package/dist/core/runner/index.js.map +1 -0
- package/dist/core/runner/pipeline.d.ts +9 -0
- package/dist/core/runner/pipeline.js +539 -0
- package/dist/core/runner/pipeline.js.map +1 -0
- package/dist/core/runner/prompt.d.ts +25 -0
- package/dist/core/runner/prompt.js +175 -0
- package/dist/core/runner/prompt.js.map +1 -0
- package/dist/core/runner/task.d.ts +26 -0
- package/dist/core/runner/task.js +283 -0
- package/dist/core/runner/task.js.map +1 -0
- package/dist/core/runner/utils.d.ts +37 -0
- package/dist/core/runner/utils.js +161 -0
- package/dist/core/runner/utils.js.map +1 -0
- package/dist/core/runner.d.ts +2 -96
- package/dist/core/runner.js +11 -1136
- package/dist/core/runner.js.map +1 -1
- package/dist/core/stall-detection.d.ts +326 -0
- package/dist/core/stall-detection.js +781 -0
- package/dist/core/stall-detection.js.map +1 -0
- package/dist/services/logging/console.js +2 -1
- package/dist/services/logging/console.js.map +1 -1
- package/dist/types/config.d.ts +6 -6
- package/dist/types/flow.d.ts +84 -0
- package/dist/types/flow.js +10 -0
- package/dist/types/flow.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.js +3 -3
- package/dist/types/index.js.map +1 -1
- package/dist/types/lane.d.ts +0 -2
- package/dist/types/logging.d.ts +5 -1
- package/dist/types/task.d.ts +7 -11
- package/dist/utils/config.d.ts +5 -1
- package/dist/utils/config.js +15 -16
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/dependency.d.ts +36 -1
- package/dist/utils/dependency.js +256 -1
- package/dist/utils/dependency.js.map +1 -1
- package/dist/utils/doctor.js +40 -8
- package/dist/utils/doctor.js.map +1 -1
- package/dist/utils/enhanced-logger.d.ts +45 -82
- package/dist/utils/enhanced-logger.js +239 -844
- package/dist/utils/enhanced-logger.js.map +1 -1
- package/dist/utils/flow.d.ts +9 -0
- package/dist/utils/flow.js +73 -0
- package/dist/utils/flow.js.map +1 -0
- package/dist/utils/git.d.ts +29 -0
- package/dist/utils/git.js +115 -5
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/state.js +0 -2
- package/dist/utils/state.js.map +1 -1
- package/dist/utils/task-service.d.ts +2 -2
- package/dist/utils/task-service.js +40 -31
- package/dist/utils/task-service.js.map +1 -1
- package/package.json +4 -3
- package/src/cli/add.ts +397 -0
- package/src/cli/clean.ts +1 -0
- package/src/cli/config.ts +177 -0
- package/src/cli/doctor.ts +48 -4
- package/src/cli/index.ts +36 -32
- package/src/cli/logs.ts +20 -33
- package/src/cli/monitor.ts +70 -75
- package/src/cli/new.ts +235 -0
- package/src/cli/prepare.ts +98 -205
- package/src/cli/resume.ts +61 -76
- package/src/cli/run.ts +333 -306
- package/src/cli/stop.ts +8 -0
- package/src/cli/tasks.ts +200 -21
- package/src/core/failure-policy.ts +9 -0
- package/src/core/orchestrator.ts +279 -379
- package/src/core/runner/agent.ts +314 -0
- package/src/core/runner/index.ts +6 -0
- package/src/core/runner/pipeline.ts +567 -0
- package/src/core/runner/prompt.ts +174 -0
- package/src/core/runner/task.ts +320 -0
- package/src/core/runner/utils.ts +142 -0
- package/src/core/runner.ts +8 -1347
- package/src/core/stall-detection.ts +936 -0
- package/src/services/logging/console.ts +2 -1
- package/src/types/config.ts +6 -6
- package/src/types/flow.ts +91 -0
- package/src/types/index.ts +15 -3
- package/src/types/lane.ts +0 -2
- package/src/types/logging.ts +5 -1
- package/src/types/task.ts +7 -11
- package/src/utils/config.ts +16 -17
- package/src/utils/dependency.ts +311 -2
- package/src/utils/doctor.ts +36 -8
- package/src/utils/enhanced-logger.ts +264 -927
- package/src/utils/flow.ts +42 -0
- package/src/utils/git.ts +145 -5
- package/src/utils/state.ts +0 -2
- package/src/utils/task-service.ts +48 -40
- package/commands/cursorflow-review.md +0 -56
- package/commands/cursorflow-runs.md +0 -59
- package/dist/cli/runs.d.ts +0 -5
- package/dist/cli/runs.js +0 -214
- package/dist/cli/runs.js.map +0 -1
- package/dist/core/reviewer.d.ts +0 -66
- package/dist/core/reviewer.js +0 -265
- package/dist/core/reviewer.js.map +0 -1
- package/src/cli/runs.ts +0 -212
- package/src/core/reviewer.ts +0 -285
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# cursorflow new
|
|
2
|
+
|
|
3
|
+
Flow와 Lane을 생성합니다.
|
|
4
|
+
|
|
5
|
+
## 사용법
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
cursorflow new <FlowName> --lanes "lane1,lane2,..."
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 설명
|
|
12
|
+
|
|
13
|
+
새로운 Flow 디렉토리를 생성하고, 지정된 Lane 파일들의 뼈대를 만듭니다.
|
|
14
|
+
각 Lane에 실제 Task를 추가하려면 `cursorflow add` 명령을 사용하세요.
|
|
15
|
+
|
|
16
|
+
## 옵션
|
|
17
|
+
|
|
18
|
+
| 옵션 | 설명 | 예시 |
|
|
19
|
+
|------|------|------|
|
|
20
|
+
| `--lanes <names>` | 콤마로 구분된 레인 이름 목록 (필수) | `--lanes "backend,frontend"` |
|
|
21
|
+
|
|
22
|
+
## 예시
|
|
23
|
+
|
|
24
|
+
### 기본 사용
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# 백엔드와 프론트엔드 2개 레인 생성
|
|
28
|
+
cursorflow new ShopFeature --lanes "backend,frontend"
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 3개 레인 생성
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# API, Web, Mobile 3개 레인 생성
|
|
35
|
+
cursorflow new SearchFeature --lanes "api,web,mobile"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 생성 결과
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
_cursorflow/flows/001_ShopFeature/
|
|
42
|
+
├── flow.meta.json # Flow 메타데이터
|
|
43
|
+
├── 01-backend.json # Lane 1 (빈 상태)
|
|
44
|
+
└── 02-frontend.json # Lane 2 (빈 상태)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### flow.meta.json 스키마
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"id": "001",
|
|
52
|
+
"name": "ShopFeature",
|
|
53
|
+
"createdAt": "2024-12-25T10:30:00Z",
|
|
54
|
+
"createdBy": "user",
|
|
55
|
+
"baseBranch": "main",
|
|
56
|
+
"status": "pending",
|
|
57
|
+
"lanes": ["backend", "frontend"]
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Lane 파일 스키마 (빈 상태)
|
|
62
|
+
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"laneName": "backend",
|
|
66
|
+
"tasks": []
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## 다음 단계
|
|
71
|
+
|
|
72
|
+
Flow 생성 후, 각 Lane에 Task를 추가합니다:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
cursorflow add ShopFeature backend \
|
|
76
|
+
--task "name=implement|prompt=API 구현"
|
|
77
|
+
|
|
78
|
+
cursorflow add ShopFeature frontend \
|
|
79
|
+
--task "name=ui|prompt=UI 구현" \
|
|
80
|
+
--after "backend:implement"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## 관련 명령어
|
|
84
|
+
|
|
85
|
+
- [cursorflow add](cursorflow-add.md) - Lane에 Task 추가
|
|
86
|
+
- [cursorflow run](cursorflow-run.md) - Flow 실행
|
|
87
|
+
|
|
@@ -2,62 +2,66 @@
|
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
|
|
5
|
-
Execute AI agent orchestration using
|
|
5
|
+
Execute AI agent orchestration using Flow configurations. CursorFlow uses a DAG (Directed Acyclic Graph) scheduler to handle task dependencies and automatic branch merging.
|
|
6
6
|
|
|
7
7
|
## Workflow
|
|
8
8
|
|
|
9
9
|
```
|
|
10
10
|
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
11
|
-
│ 1. Create
|
|
12
|
-
│ (
|
|
11
|
+
│ 1. Create Flow │ ──▶ │ 2. Add Tasks │ ──▶ │ 3. Validate │ ──▶ │ 4. Run │
|
|
12
|
+
│ (new) │ │ (add) │ │ (doctor) │ │ (run) │
|
|
13
13
|
└─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
## Usage
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
cursorflow run <
|
|
19
|
+
cursorflow run <flow-name> [options]
|
|
20
|
+
cursorflow run <flow-path> [options]
|
|
20
21
|
```
|
|
21
22
|
|
|
22
23
|
### Quick Start
|
|
23
24
|
|
|
24
25
|
```bash
|
|
25
|
-
# Step 1: Create lanes
|
|
26
|
-
cursorflow
|
|
26
|
+
# Step 1: Create flow and lanes
|
|
27
|
+
cursorflow new AddAPI --lanes "backend,frontend"
|
|
27
28
|
|
|
28
|
-
# Step 2:
|
|
29
|
-
cursorflow
|
|
30
|
-
--
|
|
29
|
+
# Step 2: Add tasks to lanes
|
|
30
|
+
cursorflow add AddAPI backend \
|
|
31
|
+
--task "name=implement|prompt=Create REST API for users"
|
|
32
|
+
|
|
33
|
+
cursorflow add AddAPI frontend \
|
|
34
|
+
--task "name=ui|prompt=Create frontend UI" \
|
|
35
|
+
--after "backend:implement"
|
|
31
36
|
|
|
32
37
|
# Step 3: Validate configuration
|
|
33
|
-
cursorflow doctor
|
|
38
|
+
cursorflow doctor AddAPI
|
|
34
39
|
|
|
35
40
|
# Step 4: Run
|
|
36
|
-
cursorflow run
|
|
37
|
-
|
|
38
|
-
# Or run the latest prepared task
|
|
39
|
-
cursorflow run latest
|
|
41
|
+
cursorflow run AddAPI
|
|
40
42
|
```
|
|
41
43
|
|
|
42
44
|
## How It Works
|
|
43
45
|
|
|
44
|
-
1. **Load**: Read all JSON files from the
|
|
46
|
+
1. **Load**: Read all JSON files from the flow directory (excluding `flow.meta.json`)
|
|
45
47
|
2. **Validate**: Check `tasks` array, required fields (`name`, `prompt`)
|
|
46
48
|
3. **Resolve**: Build execution order from `dependsOn` dependencies
|
|
47
49
|
4. **Execute**:
|
|
48
50
|
- Start lanes with no dependencies in parallel
|
|
49
|
-
- When a
|
|
50
|
-
- **Dependent
|
|
51
|
+
- When a task completes, unlock dependent tasks
|
|
52
|
+
- **Dependent tasks auto-merge predecessor branches before starting**
|
|
51
53
|
5. **Monitor**: Heartbeat logs every 30 seconds
|
|
52
54
|
|
|
53
55
|
## Options
|
|
54
56
|
|
|
55
57
|
| Option | Description |
|
|
56
58
|
|--------|-------------|
|
|
57
|
-
| `<
|
|
59
|
+
| `<flow-name>` | Flow name (e.g., `AddAPI`) |
|
|
60
|
+
| `<flow-path>` | Flow directory path (e.g., `_cursorflow/flows/001_AddAPI`) |
|
|
58
61
|
| `--max-concurrent <num>` | Limit concurrent lane execution |
|
|
59
62
|
| `--executor <type>` | `cursor-agent` (default) or `cloud` |
|
|
60
63
|
| `--skip-doctor` | Skip environment checks (not recommended) |
|
|
64
|
+
| `--no-git` | Skip Git operations (worktree, commits, push) |
|
|
61
65
|
| `--dry-run` | Show execution plan without running |
|
|
62
66
|
|
|
63
67
|
## Execution Flow
|
|
@@ -65,15 +69,16 @@ cursorflow run latest
|
|
|
65
69
|
### Single Lane
|
|
66
70
|
|
|
67
71
|
```bash
|
|
68
|
-
cursorflow
|
|
69
|
-
cursorflow
|
|
72
|
+
cursorflow new SimpleFix --lanes "main"
|
|
73
|
+
cursorflow add SimpleFix main --task "name=fix|prompt=Fix the bug"
|
|
74
|
+
cursorflow run SimpleFix
|
|
70
75
|
```
|
|
71
76
|
|
|
72
77
|
```
|
|
73
78
|
┌─────────────────────────────────────────────────────────┐
|
|
74
|
-
│
|
|
79
|
+
│ main │
|
|
75
80
|
│ ┌─────────┐ │
|
|
76
|
-
│ │
|
|
81
|
+
│ │ fix │ → AI executes → Complete │
|
|
77
82
|
│ └─────────┘ │
|
|
78
83
|
└─────────────────────────────────────────────────────────┘
|
|
79
84
|
```
|
|
@@ -81,108 +86,67 @@ cursorflow run _cursorflow/tasks/2412211530_SimpleFix
|
|
|
81
86
|
### Multiple Tasks in Lane
|
|
82
87
|
|
|
83
88
|
```bash
|
|
84
|
-
cursorflow
|
|
85
|
-
--task "plan|
|
|
86
|
-
--task "implement|
|
|
89
|
+
cursorflow add Feature api \
|
|
90
|
+
--task "name=plan|prompt=Create plan" \
|
|
91
|
+
--task "name=implement|prompt=Build feature"
|
|
87
92
|
```
|
|
88
93
|
|
|
89
94
|
```
|
|
90
95
|
┌─────────────────────────────────────────────────────────┐
|
|
91
|
-
│
|
|
96
|
+
│ api │
|
|
92
97
|
│ ┌────┐ ┌─────────┐ │
|
|
93
|
-
│ │plan│ ──▶ │implement│ →
|
|
98
|
+
│ │plan│ ──▶ │implement│ → Complete │
|
|
94
99
|
│ └────┘ └─────────┘ │
|
|
95
100
|
└─────────────────────────────────────────────────────────┘
|
|
96
101
|
```
|
|
97
102
|
|
|
98
|
-
### Sequential Lanes (with
|
|
103
|
+
### Sequential Lanes (with dependencies)
|
|
99
104
|
|
|
100
105
|
```bash
|
|
101
|
-
cursorflow
|
|
102
|
-
|
|
106
|
+
cursorflow new FullStack --lanes "backend,api,frontend"
|
|
107
|
+
|
|
108
|
+
cursorflow add FullStack backend --task "name=db|prompt=Setup database"
|
|
109
|
+
cursorflow add FullStack api --task "name=impl|prompt=Create API" --after "backend"
|
|
110
|
+
cursorflow add FullStack frontend --task "name=ui|prompt=Create UI" --after "api"
|
|
103
111
|
```
|
|
104
112
|
|
|
105
113
|
```
|
|
106
114
|
┌───────────┐ ┌───────────┐ ┌───────────┐
|
|
107
|
-
│
|
|
108
|
-
│
|
|
115
|
+
│ backend │ ──▶ │ api │ ──▶ │ frontend │
|
|
116
|
+
│ (db) │ │ (impl) │ │ (ui) │
|
|
109
117
|
└───────────┘ └───────────┘ └───────────┘
|
|
110
118
|
│ │
|
|
111
|
-
|
|
119
|
+
merges merges
|
|
120
|
+
backend backend,api
|
|
112
121
|
```
|
|
113
122
|
|
|
114
123
|
### Parallel Lanes
|
|
115
124
|
|
|
116
125
|
```bash
|
|
117
|
-
cursorflow
|
|
118
|
-
|
|
126
|
+
cursorflow new FrontBack --lanes "frontend,backend"
|
|
127
|
+
|
|
128
|
+
cursorflow add FrontBack frontend --task "name=ui|prompt=Create UI"
|
|
129
|
+
cursorflow add FrontBack backend --task "name=api|prompt=Create API"
|
|
119
130
|
```
|
|
120
131
|
|
|
121
132
|
```
|
|
122
133
|
┌───────────┐
|
|
123
|
-
│
|
|
134
|
+
│ frontend │ (UI)
|
|
124
135
|
└───────────┘
|
|
125
136
|
─── both run in parallel
|
|
126
137
|
┌───────────┐
|
|
127
|
-
│
|
|
138
|
+
│ backend │ (API)
|
|
128
139
|
└───────────┘
|
|
129
140
|
```
|
|
130
141
|
|
|
131
|
-
##
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
{
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
"timeout": 600000,
|
|
140
|
-
"enableIntervention": false,
|
|
141
|
-
"dependsOn": ["01-lane-1"],
|
|
142
|
-
"dependencyPolicy": {
|
|
143
|
-
"allowDependencyChange": false,
|
|
144
|
-
"lockfileReadOnly": true
|
|
145
|
-
},
|
|
146
|
-
"enableReview": true,
|
|
147
|
-
"reviewModel": "sonnet-4.5-thinking",
|
|
148
|
-
"maxReviewIterations": 3,
|
|
149
|
-
"tasks": [
|
|
150
|
-
{
|
|
151
|
-
"name": "implement",
|
|
152
|
-
"prompt": "Create a reusable button component...",
|
|
153
|
-
"model": "sonnet-4.5",
|
|
154
|
-
"acceptanceCriteria": ["Build passes", "Tests pass"]
|
|
155
|
-
}
|
|
156
|
-
]
|
|
157
|
-
}
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
### Configuration Reference
|
|
161
|
-
|
|
162
|
-
| Field | Type | Required | Description |
|
|
163
|
-
|-------|------|----------|-------------|
|
|
164
|
-
| `baseBranch` | string | Yes | Branch to create worktree from |
|
|
165
|
-
| `branchPrefix` | string | Yes | Prefix for feature branch naming |
|
|
166
|
-
| `tasks` | Task[] | Yes | Array of task objects to execute |
|
|
167
|
-
| `dependsOn` | string[] | No | Lane names to wait for and merge |
|
|
168
|
-
| `timeout` | number | No | Task timeout in ms (default: 600000) |
|
|
169
|
-
| `enableIntervention` | boolean | No | Allow stdin injection during execution |
|
|
170
|
-
| `dependencyPolicy.allowDependencyChange` | boolean | No | Allow package.json modifications |
|
|
171
|
-
| `dependencyPolicy.lockfileReadOnly` | boolean | No | Keep lockfile read-only |
|
|
172
|
-
| `enableReview` | boolean | No | Enable AI code review (default: true) |
|
|
173
|
-
| `reviewModel` | string | No | Model for code review |
|
|
174
|
-
| `maxReviewIterations` | number | No | Max review cycles (default: 3) |
|
|
175
|
-
|
|
176
|
-
### Task Object
|
|
177
|
-
|
|
178
|
-
| Field | Type | Required | Description |
|
|
179
|
-
|-------|------|----------|-------------|
|
|
180
|
-
| `name` | string | Yes | Task identifier (alphanumeric, `-`, `_`) |
|
|
181
|
-
| `prompt` | string | Yes | Instructions for the AI agent |
|
|
182
|
-
| `model` | string | No | Model override for this task |
|
|
183
|
-
| `acceptanceCriteria` | string[] | No | Criteria for AI reviewer validation |
|
|
184
|
-
| `dependsOn` | string[] | No | Task-level dependencies (lane:task) |
|
|
185
|
-
| `timeout` | number | No | Task-specific timeout in ms |
|
|
142
|
+
## Log Format
|
|
143
|
+
|
|
144
|
+
Logs use the format `[L{n}-T{t}-{lanename}]`:
|
|
145
|
+
- `L{n}`: Lane number (1-indexed)
|
|
146
|
+
- `T{t}`: Task number (1-indexed)
|
|
147
|
+
- `{lanename}`: First 10 characters of lane name
|
|
148
|
+
|
|
149
|
+
Example: `[L1-T2-backend]` = Lane 1, Task 2, lane name "backend"
|
|
186
150
|
|
|
187
151
|
## Monitoring During Execution
|
|
188
152
|
|
|
@@ -190,8 +154,8 @@ Each JSON file in the tasks directory follows this schema:
|
|
|
190
154
|
# In another terminal
|
|
191
155
|
cursorflow monitor latest
|
|
192
156
|
|
|
193
|
-
# Or specify the
|
|
194
|
-
cursorflow monitor _cursorflow/
|
|
157
|
+
# Or specify the run directory
|
|
158
|
+
cursorflow monitor _cursorflow/logs/runs/run-xxxxx
|
|
195
159
|
```
|
|
196
160
|
|
|
197
161
|
The monitor shows:
|
|
@@ -221,33 +185,18 @@ Circular dependency detected
|
|
|
221
185
|
```
|
|
222
186
|
→ Check your `dependsOn` fields for cycles (A→B, B→A)
|
|
223
187
|
|
|
224
|
-
```
|
|
225
|
-
Unknown dependency: 01-lane-99
|
|
226
|
-
```
|
|
227
|
-
→ Verify the lane name in `dependsOn` matches an actual JSON filename
|
|
228
|
-
|
|
229
|
-
### Merge Conflicts
|
|
230
|
-
|
|
231
|
-
When a dependent lane's auto-merge fails:
|
|
232
|
-
|
|
233
|
-
1. Find the worktree path in `cursorflow monitor`
|
|
234
|
-
2. Navigate to the worktree directory
|
|
235
|
-
3. Resolve conflicts manually and commit
|
|
236
|
-
4. Resume with `cursorflow resume <lane-name>`
|
|
237
|
-
|
|
238
188
|
### Lane Stuck
|
|
239
189
|
|
|
240
190
|
If a lane stops responding:
|
|
241
191
|
|
|
242
192
|
1. Check the agent window in Cursor IDE
|
|
243
193
|
2. Use `cursorflow signal <lane-name> --message "continue"` to nudge
|
|
244
|
-
3. Or
|
|
194
|
+
3. Or use `cursorflow resume --all` to resume
|
|
245
195
|
|
|
246
196
|
## Best Practices
|
|
247
197
|
|
|
248
|
-
1. **Always Validate First**: Run `cursorflow doctor
|
|
198
|
+
1. **Always Validate First**: Run `cursorflow doctor <flow-name>` before `run`
|
|
249
199
|
2. **Start Small**: Test with a single lane before scaling up
|
|
250
200
|
3. **Use `--dry-run`**: Preview execution plan before committing
|
|
251
201
|
4. **Monitor Actively**: Keep `cursorflow monitor` running in a separate terminal
|
|
252
202
|
5. **Plan Dependencies**: Draw out the DAG before running complex workflows
|
|
253
|
-
6. **Include Verification**: Add verify tasks to catch edge cases
|