rbin-task-flow 1.27.1 → 1.30.1
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/.claude/skills/task-flow-report/SKILL.md +3 -1
- package/.claude/skills/task-flow-run/SKILL.md +15 -9
- package/.claude/skills/task-flow-run/workflow.md +94 -34
- package/.claude/skills/task-flow-status/SKILL.md +1 -1
- package/.claude/skills/task-flow-sync/workflow.md +3 -3
- package/.cursor/rules/task-flow-cursor.mdc +3 -0
- package/.cursor/rules/task-flow-sync.mdc +3 -3
- package/.cursor/rules/task_generation.mdc +2 -2
- package/.cursor/rules/task_status.mdc +2 -2
- package/.cursor/rules/task_validate.mdc +3 -2
- package/.cursor/rules/task_work.mdc +8 -26
- package/.task-flow/README.md +22 -9
- package/.task-flow/dev-logs/.gitkeep +0 -0
- package/.task-flow/guides/AI-PLATFORMS.md +1 -1
- package/.task-flow/guides/CODEX.md +5 -3
- package/.task-flow/guides/CURSOR.md +2 -2
- package/.task-flow/guides/GRAPHIFY.md +3 -3
- package/.task-flow/guides/platforms/claude-code.md +1 -1
- package/.task-flow/guides/platforms/cursor.md +9 -8
- package/AGENTS.md +8 -6
- package/README.md +32 -18
- package/bin/cli.js +8 -3
- package/lib/cursor.js +1 -1
- package/lib/install.js +91 -14
- package/lib/profiles.js +2 -2
- package/lib/version.js +1 -1
- package/package.json +1 -1
|
@@ -7,9 +7,11 @@ paths: [".task-flow/**"]
|
|
|
7
7
|
|
|
8
8
|
# Task Flow — Report
|
|
9
9
|
|
|
10
|
-
1. Verify task X is fully `done` in `status.json` (warn if
|
|
10
|
+
1. Verify task X is fully `done` in `status.json` — **no** `manual`, `pending`, or `in_progress` subtasks (warn and stop if any).
|
|
11
11
|
2. Read `tasks.json`; analyze related code changes (read-only git ok).
|
|
12
12
|
3. Write `.task-flow/guides/reports/task-X-implementation.md` using project template.
|
|
13
13
|
4. Create `.task-flow/guides/reports/` if missing.
|
|
14
14
|
|
|
15
|
+
**Never** generate this report during `task-flow: run` — only when the user explicitly asks for `task-flow: report`.
|
|
16
|
+
|
|
15
17
|
Reference: `.cursor/rules/task_report.mdc`
|
|
@@ -13,15 +13,21 @@ paths: [".task-flow/**"]
|
|
|
13
13
|
|
|
14
14
|
## Steps
|
|
15
15
|
|
|
16
|
-
1. Read `status.json
|
|
17
|
-
2.
|
|
18
|
-
3.
|
|
19
|
-
4.
|
|
20
|
-
5.
|
|
21
|
-
6.
|
|
22
|
-
7.
|
|
23
|
-
8.
|
|
24
|
-
9.
|
|
16
|
+
1. Read `status.json`; resolve **`manual`** subtasks first via dev-logs + current conversation (see workflow).
|
|
17
|
+
2. List **pending** task/subtask IDs (`done`, `manual` until resolved).
|
|
18
|
+
3. **tasks.json:** partial read by task id if **>50** subtasks total.
|
|
19
|
+
4. Parse intent: `run next X` (default X=1) | `run X` | `run X,Y` | `run all`.
|
|
20
|
+
5. **`run X` / `run X,Y`:** Stop if earlier tasks/subtasks are not `done`.
|
|
21
|
+
6. Per subtask: `instructions` + `contexts/`; optional `graphify query`.
|
|
22
|
+
7. **Automatable** → `done` + `tasks.status.md` Summary.
|
|
23
|
+
8. **Manual intervention** → `manual` + `.task-flow/dev-logs/task-X.Y-manual.md`; user reports progress **in chat**; AI appends **Conversation log** and marks `done` only when verified complete.
|
|
24
|
+
9. Parent task all `done` → mark task `done`.
|
|
25
|
+
10. Suggest commit via `/rbin-git` — never git write.
|
|
26
|
+
|
|
27
|
+
## Never during run
|
|
28
|
+
|
|
29
|
+
- Mark `done` when manual steps remain unverified
|
|
30
|
+
- Write `guides/reports/task-*-implementation.md`
|
|
25
31
|
|
|
26
32
|
## Full workflow
|
|
27
33
|
|
|
@@ -4,56 +4,116 @@
|
|
|
4
4
|
|
|
5
5
|
| Input | Behavior |
|
|
6
6
|
|-------|----------|
|
|
7
|
-
| `task-flow: run next X` | Next X pending subtasks in order (
|
|
7
|
+
| `task-flow: run next X` | Next X **pending** subtasks in order (skip `done`; resolve `manual` first — see below) |
|
|
8
8
|
| `task-flow: run next` | X = 1 |
|
|
9
|
-
| `task-flow: run X` | All pending subtasks of task X |
|
|
9
|
+
| `task-flow: run X` | All **pending** subtasks of task X |
|
|
10
10
|
| `task-flow: run X,Y` | Tasks X then Y sequentially |
|
|
11
|
-
| `task-flow: run all` | All pending subtasks |
|
|
11
|
+
| `task-flow: run all` | All **pending** subtasks |
|
|
12
|
+
|
|
13
|
+
Subtasks in `manual` block later subtasks in the same task until the dev-log shows they are complete.
|
|
14
|
+
|
|
15
|
+
## Before picking pending subtasks — resolve `manual`
|
|
16
|
+
|
|
17
|
+
1. List all `manual` subtasks in scope (same task or global for `run next`).
|
|
18
|
+
2. Read `.task-flow/dev-logs/task-X.Y-manual.md` for each.
|
|
19
|
+
3. Use the **current conversation** (and codebase checks) to assess completion — no separate confirm command.
|
|
20
|
+
4. If the user reported progress in chat, append to the dev-log **Conversation log** (see format below).
|
|
21
|
+
5. When the log + verification show all manual steps done → set `done`, refresh `tasks.status.md`, continue the run.
|
|
22
|
+
6. If still incomplete → keep `manual`, tell the user what remains; do not skip marking done prematurely.
|
|
12
23
|
|
|
13
24
|
## Dependency check (`run X`)
|
|
14
25
|
|
|
15
26
|
1. For tasks `1 .. X-1`, verify every subtask is `done`.
|
|
16
|
-
2. If any pending
|
|
17
|
-
`⚠️ Cannot execute task X: complete tasks [list] first. Use task-flow: run Y.`
|
|
18
|
-
3.
|
|
27
|
+
2. If any `pending`, `manual`, or `in_progress`: stop with
|
|
28
|
+
`⚠️ Cannot execute task X: complete tasks [list] first. Use task-flow: run Y or finish manual steps in dev-logs.`
|
|
29
|
+
3. For task X: if any earlier subtask is still `manual` (dev-log incomplete), stop — resolve via conversation first.
|
|
19
30
|
|
|
20
31
|
## tasks.json — partial read (>50 subtasks)
|
|
21
32
|
|
|
22
|
-
1. From `status.json`, collect pending `(taskId, subtaskId)` for this run.
|
|
23
|
-
2. Count total subtasks in `tasks.json
|
|
24
|
-
3. If total **>50**: load
|
|
25
|
-
4. If **≤50**:
|
|
26
|
-
|
|
27
|
-
## Per subtask
|
|
28
|
-
|
|
29
|
-
1. Load subtask from `tasks.json
|
|
30
|
-
2.
|
|
31
|
-
3. Implement; verify (tests/build
|
|
32
|
-
4.
|
|
33
|
-
5.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
33
|
+
1. From `status.json`, collect **pending** `(taskId, subtaskId)` for this run.
|
|
34
|
+
2. Count total subtasks in `tasks.json`.
|
|
35
|
+
3. If total **>50**: load only each `tasks[]` entry for pending/manual task ids.
|
|
36
|
+
4. If **≤50**: full read is OK.
|
|
37
|
+
|
|
38
|
+
## Per subtask — fully automatable
|
|
39
|
+
|
|
40
|
+
1. Load subtask from `tasks.json`.
|
|
41
|
+
2. Read `.task-flow/contexts/` when cited.
|
|
42
|
+
3. Implement; verify (tests/build).
|
|
43
|
+
4. `done` in `status.json` + update `tasks.status.md` Summary.
|
|
44
|
+
5. Suggest commit via `@rbin-git` when appropriate.
|
|
45
|
+
|
|
46
|
+
## Per subtask — manual intervention required
|
|
47
|
+
|
|
48
|
+
When the agent **cannot** finish alone (deploy, console, credentials, production, third-party dashboard, etc.):
|
|
49
|
+
|
|
50
|
+
1. Implement everything possible in code/repo first.
|
|
51
|
+
2. Set **`manual`** in `status.json` — never `done`.
|
|
52
|
+
3. Create `.task-flow/dev-logs/task-X.Y-manual.md`:
|
|
53
|
+
|
|
54
|
+
```markdown
|
|
55
|
+
# Task X.Y — Manual intervention required
|
|
56
|
+
|
|
57
|
+
**Subtask:** [title]
|
|
58
|
+
**Status:** manual
|
|
59
|
+
**Created:** [ISO 8601]
|
|
60
|
+
|
|
61
|
+
## What the AI completed
|
|
62
|
+
- [automated work]
|
|
63
|
+
|
|
64
|
+
## What you need to do manually
|
|
65
|
+
1. [clear step]
|
|
66
|
+
2. [clear step]
|
|
67
|
+
|
|
68
|
+
## Conversation log
|
|
69
|
+
(AI appends as you report progress in chat — no separate command)
|
|
70
|
+
|
|
71
|
+
### YYYY-MM-DDTHH:mm:ssZ
|
|
72
|
+
**User said:** [from conversation]
|
|
73
|
+
**Verified:** pending | complete
|
|
74
|
+
**Notes:** [what was checked; what remains]
|
|
47
75
|
```
|
|
48
76
|
|
|
77
|
+
4. `tasks.status.md`: `- [~] [title] — manual: .task-flow/dev-logs/task-X.Y-manual.md`
|
|
78
|
+
5. Stop further subtasks in that task.
|
|
79
|
+
6. Tell the user the manual steps; they report back **in normal chat** when done.
|
|
80
|
+
|
|
81
|
+
## Conversation-driven completion (any turn)
|
|
82
|
+
|
|
83
|
+
Applies during `run`, `status`, or whenever the user mentions manual work — **no `task-flow: confirm` command**.
|
|
84
|
+
|
|
85
|
+
1. Read `status.json` for `manual` subtasks.
|
|
86
|
+
2. Match user message to a dev-log (by task id, keywords, or open manual items).
|
|
87
|
+
3. Append **Conversation log** entry with what the user said.
|
|
88
|
+
4. Verify against checklist + codebase when possible.
|
|
89
|
+
5. All steps satisfied → `done` + `tasks.status.md` + continue blocked work on next `run`.
|
|
90
|
+
6. Partial → keep `manual`, update dev-log with remaining steps.
|
|
91
|
+
|
|
92
|
+
## Never during run
|
|
93
|
+
|
|
94
|
+
- Mark `done` when manual steps remain unverified
|
|
95
|
+
- Write `.task-flow/guides/reports/task-*-implementation.md` (`task-flow: report` only)
|
|
96
|
+
|
|
97
|
+
## Blocked (not manual)
|
|
98
|
+
|
|
99
|
+
Temporarily blocked without user action: `in_progress` + explain.
|
|
100
|
+
|
|
101
|
+
## status.json
|
|
102
|
+
|
|
103
|
+
Subtask status: `pending` | `done` | `in_progress` | `manual`
|
|
104
|
+
|
|
49
105
|
## Completion summary
|
|
50
106
|
|
|
51
107
|
```
|
|
52
108
|
✅ Completed N subtasks:
|
|
53
109
|
- Task 1.2: [title]
|
|
54
|
-
|
|
110
|
+
|
|
111
|
+
🖐️ Manual — waiting on you:
|
|
112
|
+
- Task 1.3: .task-flow/dev-logs/task-1.3-manual.md (report in chat when done)
|
|
113
|
+
|
|
114
|
+
📝 Next pending: Task 1.4 (after 1.3 resolves)
|
|
55
115
|
```
|
|
56
116
|
|
|
57
|
-
## Related
|
|
117
|
+
## Related
|
|
58
118
|
|
|
59
|
-
Cursor fallback
|
|
119
|
+
Cursor fallback: `.cursor/rules/task_work.mdc` — prefer `@task-flow-run` / this file.
|
|
@@ -7,7 +7,7 @@ disable-model-invocation: false
|
|
|
7
7
|
# Task Flow — Status
|
|
8
8
|
|
|
9
9
|
1. Read `.task-flow/tasks.status.md`.
|
|
10
|
-
2. Display summary (✅ completed, ⏳ in progress, 📝 remaining) and task/subtask checkboxes.
|
|
10
|
+
2. Display summary (✅ completed, ⏳ in progress, 🖐️ manual, 📝 remaining) and task/subtask checkboxes (`[x]` `[ ]` `[~]`).
|
|
11
11
|
3. If file missing, suggest `/task-flow-sync`.
|
|
12
12
|
|
|
13
13
|
Reference: `.cursor/rules/task_status.mdc`
|
|
@@ -43,12 +43,12 @@ All subtasks `pending`; task `pending`.
|
|
|
43
43
|
## tasks.status.md
|
|
44
44
|
|
|
45
45
|
- Auto-generated banner warning (do not edit manually).
|
|
46
|
-
- Summary section with counts.
|
|
47
|
-
- `- [ ]` / `- [x]` for tasks and indented subtasks.
|
|
46
|
+
- Summary section with counts (include 🖐️ manual when any).
|
|
47
|
+
- `- [ ]` / `- [x]` / `- [~]` for tasks and indented subtasks (`[~]` → link dev-log).
|
|
48
48
|
|
|
49
49
|
## Sync-only rules
|
|
50
50
|
|
|
51
|
-
- Preserve status on modified tasks when subtasks still match.
|
|
51
|
+
- Preserve status on modified tasks when subtasks still match (`done`, `manual`, `pending`).
|
|
52
52
|
- New subtasks after regen → `pending`; removed subtasks → drop from status.
|
|
53
53
|
- Never explore codebase during pure sync unless user explicitly asks for codebase analysis in the same message.
|
|
54
54
|
|
|
@@ -14,6 +14,7 @@ alwaysApply: true
|
|
|
14
14
|
| `.task-flow/.internal/tasks.json` | Definitions |
|
|
15
15
|
| `.task-flow/.internal/status.json` | Status source of truth |
|
|
16
16
|
| `.task-flow/contexts/` | Specs / mockups |
|
|
17
|
+
| `.task-flow/dev-logs/` | Manual steps + conversation log (`task-X.Y-manual.md`) |
|
|
17
18
|
| `.task-flow/guides/` | Platform guides, Graphify, standards, reports |
|
|
18
19
|
|
|
19
20
|
## Prefer skills (`.cursor/skills/`)
|
|
@@ -34,6 +35,8 @@ alwaysApply: true
|
|
|
34
35
|
|
|
35
36
|
Natural language (`work on next 3 subtasks`) = same as `task-flow: run next 3`.
|
|
36
37
|
|
|
38
|
+
**Manual subtasks:** user reports progress in chat; AI updates `.task-flow/dev-logs/` Conversation log and marks `done` when verified — no separate command.
|
|
39
|
+
|
|
37
40
|
## Git (always)
|
|
38
41
|
|
|
39
42
|
Never write git — user runs all commits. Policy: [rbin-git-policy.mdc](mdc:.cursor/rules/rbin-git-policy.mdc). Suggest via `@rbin-git`.
|
|
@@ -20,7 +20,7 @@ alwaysApply: false
|
|
|
20
20
|
|--------|--------|
|
|
21
21
|
| **New** | Generate task + 3–8 subtasks; all `pending` |
|
|
22
22
|
| **Removed** | Drop from `tasks.json`, `status.json`, `tasks.status.md` |
|
|
23
|
-
| **Modified** | Update title/description; regen subtasks; **preserve** done/pending status where possible |
|
|
23
|
+
| **Modified** | Update title/description; regen subtasks; **preserve** done/pending/**manual** status where possible |
|
|
24
24
|
| **Unchanged** | Leave task data and status as-is |
|
|
25
25
|
|
|
26
26
|
Task IDs stay sequential (1, 2, 3…) matching `tasks.input.txt` order.
|
|
@@ -38,8 +38,8 @@ Task IDs stay sequential (1, 2, 3…) matching `tasks.input.txt` order.
|
|
|
38
38
|
## 4. Align status
|
|
39
39
|
|
|
40
40
|
- `status.json` = source of truth
|
|
41
|
-
- Rebuild `tasks.status.md` checkboxes to match; **regenerate 📊 Summary** (completed / in progress / remaining counts)
|
|
42
|
-
- After regen: new subtasks → `pending`; keep `done` on matched subtasks when possible
|
|
41
|
+
- Rebuild `tasks.status.md` checkboxes to match (`[ ]` pending · `[x]` done · `[~]` manual); **regenerate 📊 Summary** (completed / in progress / 🖐️ manual / remaining counts)
|
|
42
|
+
- After regen: new subtasks → `pending`; keep `done` and `manual` on matched subtasks when possible
|
|
43
43
|
|
|
44
44
|
## 5. Principles
|
|
45
45
|
|
|
@@ -26,9 +26,9 @@ Use this rule for **subtask shape** when `task-flow-sync` creates or regenerates
|
|
|
26
26
|
|
|
27
27
|
**tasks.json:** `id`, `title`, `description`, `originalRequest`, `createdAt`, `subtasks[]` with `id`, `title`, `description`, `instructions`.
|
|
28
28
|
|
|
29
|
-
**status.json:** `tasks.{id}.status`, `tasks.{id}.subtasks.{subtaskId}` → `pending` | `done` | `in_progress`.
|
|
29
|
+
**status.json:** `tasks.{id}.status`, `tasks.{id}.subtasks.{subtaskId}` → `pending` | `done` | `in_progress` | `manual`.
|
|
30
30
|
|
|
31
|
-
**tasks.status.md:** banner “do not edit”; 📊 Summary;
|
|
31
|
+
**tasks.status.md:** banner “do not edit”; 📊 Summary (include 🖐️ manual count); `- [ ]` pending · `- [x]` done · `- [~]` manual (link to `.task-flow/dev-logs/task-X.Y-manual.md`).
|
|
32
32
|
|
|
33
33
|
## Rules
|
|
34
34
|
|
|
@@ -9,11 +9,11 @@ alwaysApply: false
|
|
|
9
9
|
- When user says "task-flow: status" or "task-flow status":
|
|
10
10
|
- **READ**: `.task-flow/tasks.status.md`
|
|
11
11
|
- **DISPLAY**: Show the current status of all tasks and subtasks
|
|
12
|
-
- **FORMAT**: Display
|
|
12
|
+
- **FORMAT**: Display done `[x]`, pending `[ ]`, manual `[~]` (see `.task-flow/dev-logs/`)
|
|
13
13
|
|
|
14
14
|
- **Status Display:**
|
|
15
15
|
- Read `.task-flow/tasks.status.md` file
|
|
16
|
-
- Show tasks marked as `- [x]` (done)
|
|
16
|
+
- Show tasks marked as `- [x]` (done), `- [ ]` (pending), `- [~]` (manual — user action required)
|
|
17
17
|
- Display subtasks with their status
|
|
18
18
|
- Show progress summary if available
|
|
19
19
|
|
|
@@ -32,12 +32,13 @@ For each task/subtask in scope:
|
|
|
32
32
|
| Status | Check |
|
|
33
33
|
|--------|--------|
|
|
34
34
|
| `done` | Implementation exists and matches requirements (files, tests, docs per instructions) |
|
|
35
|
+
| `manual` | Dev-log + conversation log; not `done` until IA verifies via chat history |
|
|
35
36
|
| `pending` / `in_progress` | Whether code already partially or fully implements the subtask (status drift) |
|
|
36
37
|
|
|
37
38
|
Record:
|
|
38
39
|
|
|
39
40
|
- **Verified done** — correctly marked
|
|
40
|
-
- **False done** — marked `done` but missing or
|
|
41
|
+
- **False done** — marked `done` but missing, incomplete, or should be `manual`
|
|
41
42
|
- **Drift** — implemented in code but still `pending`
|
|
42
43
|
- **Confirmed pending** — not implemented yet (expected)
|
|
43
44
|
|
|
@@ -51,7 +52,7 @@ Find work not covered by current tasks:
|
|
|
51
52
|
|
|
52
53
|
### 4. Apply fixes (no ask — user invoked validate)
|
|
53
54
|
|
|
54
|
-
1. **Status:** set false `done` → `pending`
|
|
55
|
+
1. **Status:** set false `done` → `pending` or `manual` (with dev-log if user action required) in `status.json`
|
|
55
56
|
2. **Input:** append new lacunas as `- Description` lines to `tasks.input.txt` (append only; never remove or edit existing lines)
|
|
56
57
|
3. **Sync:** follow [task-flow-sync.mdc](mdc:.cursor/rules/task-flow-sync.mdc) — diff input, regen subtasks for new tasks, rebuild `tasks.status.md` Summary
|
|
57
58
|
4. **Never** edit `.internal/` by hand except through sync-aligned updates to `status.json` for false-done fixes before sync
|
|
@@ -5,32 +5,14 @@ alwaysApply: false
|
|
|
5
5
|
|
|
6
6
|
# Task Flow — Run (fallback)
|
|
7
7
|
|
|
8
|
-
**Prefer:** `@task-flow-run`
|
|
8
|
+
**Prefer:** `@task-flow-run` — `.claude/skills/task-flow-run/workflow.md`
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
## Critical flow
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
1. **Resolve `manual` first:** read dev-logs + conversation; append Conversation log; mark `done` only when verified.
|
|
13
|
+
2. **`run next X`:** pending subtasks only; `manual` blocks until dev-log shows complete.
|
|
14
|
+
3. **Automatable** → `done`; **user must act** → `manual` + dev-log; never `done` until log confirms.
|
|
15
|
+
4. User reports manual progress **in normal chat** — no separate confirm command.
|
|
16
|
+
5. Suggest commit via `@rbin-git` — never write git.
|
|
13
17
|
|
|
14
|
-
|
|
15
|
-
|-----------|--------|
|
|
16
|
-
| `task-flow: run next X` / `run next` | Next X pending subtasks in order (default X=1) |
|
|
17
|
-
| `task-flow: run X` | All pending subtasks of task X |
|
|
18
|
-
| `task-flow: run X,Y` / `run all` | As labeled |
|
|
19
|
-
|
|
20
|
-
Natural language (`work on next 3 subtasks`, `execute all subtasks of task 2`) = same as above.
|
|
21
|
-
|
|
22
|
-
## Critical flow (each subtask)
|
|
23
|
-
|
|
24
|
-
1. Read `status.json` first; load `tasks.json` by pending task ids only if **>50 subtasks** total (see `@task-flow-run` workflow).
|
|
25
|
-
2. **`run X`:** If tasks `1..X-1` have any pending subtask, **stop** and list blockers; do not run X.
|
|
26
|
-
3. Implement per `instructions`; read `.task-flow/contexts/` when referenced; optional `graphify query` if `.task-flow/guides/graphify-out/` exists ([graphify-task-flow.mdc](mdc:.cursor/rules/graphify-task-flow.mdc)).
|
|
27
|
-
4. After each subtask: `status.json` → `done`; `tasks.status.md` → `- [x]` + regenerate 📊 Summary.
|
|
28
|
-
5. Parent task all done → mark task `done` in both files.
|
|
29
|
-
6. Suggest commit via [rbin-git-policy.mdc](mdc:.cursor/rules/rbin-git-policy.mdc) / `@rbin-git` — never write git.
|
|
30
|
-
|
|
31
|
-
If blocked: subtask `in_progress` + explain.
|
|
32
|
-
|
|
33
|
-
## More detail
|
|
34
|
-
|
|
35
|
-
- Skill workflow: `.claude/skills/task-flow-run/workflow.md`
|
|
36
|
-
- Command index: [task-flow-cursor.mdc](mdc:.cursor/rules/task-flow-cursor.mdc) · [task_execution.mdc](mdc:.cursor/rules/task_execution.mdc) (stub)
|
|
18
|
+
**Never during run:** `guides/reports/task-*-implementation.md`.
|
package/.task-flow/README.md
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
├── tasks.input.txt ← defina tasks (`- descrição`)
|
|
9
9
|
├── tasks.status.md ← progresso (auto; não editar)
|
|
10
10
|
├── contexts/ ← specs, mockups
|
|
11
|
+
├── dev-logs/ ← passos manuais + log da conversa (IA atualiza)
|
|
11
12
|
├── .internal/ ← tasks.json, status.json (sistema)
|
|
12
13
|
└── guides/ ← documentação e configs
|
|
13
14
|
├── AI-PLATFORMS.md
|
|
@@ -46,15 +47,23 @@ cd seu-projeto
|
|
|
46
47
|
rbin-task-flow init --graphify
|
|
47
48
|
```
|
|
48
49
|
|
|
49
|
-
### Projeto que já usa Task Flow (
|
|
50
|
+
### Projeto que já usa Task Flow (subir versão + migrar grafo)
|
|
50
51
|
|
|
51
52
|
```bash
|
|
52
53
|
npm install -g rbin-task-flow@latest
|
|
53
54
|
cd seu-projeto
|
|
54
|
-
rbin-task-flow
|
|
55
|
+
rbin-task-flow reset --keep-tasks --graphify
|
|
55
56
|
```
|
|
56
57
|
|
|
57
|
-
|
|
58
|
+
**Manter suas tasks** ao subir versão (não sobrescreve `tasks.input.txt`, `tasks.status.md` nem `.internal/`):
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
npm install -g rbin-task-flow@latest
|
|
62
|
+
cd seu-projeto
|
|
63
|
+
rbin-task-flow reset --keep-tasks
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
O `reset --keep-tasks --graphify` reaplica rules/skills, move `graphify-out/` legado da raiz para `guides/graphify-out/` (se existir) e roda o extract.
|
|
58
67
|
|
|
59
68
|
### Só regerar o grafo (sem reinstall do template)
|
|
60
69
|
|
|
@@ -80,7 +89,7 @@ Guia completo: [guides/GRAPHIFY.md](guides/GRAPHIFY.md).
|
|
|
80
89
|
| `task-flow: sync` | — | Complete synchronization: adds new, removes deleted, updates modified, preserves status |
|
|
81
90
|
| `task-flow: validate` | `all` (default) · `X` · `X,Y` | Deep audit vs codebase; revert false done; append gaps to `tasks.input.txt`; sync |
|
|
82
91
|
| `task-flow: status` | — | Shows current task status |
|
|
83
|
-
| `task-flow: run` | `next X` · `X` · `X,Y` · `all` | Execute pending subtasks
|
|
92
|
+
| `task-flow: run` | `next X` · `X` · `X,Y` · `all` | Execute pending subtasks; manual → `dev-logs/`, status `manual` |
|
|
84
93
|
| `task-flow: split` | `:3` · `:2` · `:3 50-72` | Plan **N** parallel `run` lines — `:N` required |
|
|
85
94
|
| `task-flow: estimate` | `X` · `X,Y` · `all` | Time estimate for average developer pace (hours + management buffer) |
|
|
86
95
|
| `task-flow: report` | `X` · `X,Y` · `all` | Implementation report → `.task-flow/guides/reports/task-X-implementation.md` |
|
|
@@ -111,7 +120,7 @@ Complete synchronization between `tasks.input.txt` and the system:
|
|
|
111
120
|
- ✅ Adds new tasks from `tasks.input.txt`
|
|
112
121
|
- ✅ Removes tasks that were deleted from `tasks.input.txt`
|
|
113
122
|
- ✅ Updates tasks that were modified in `tasks.input.txt`
|
|
114
|
-
- ✅ Preserves status (done
|
|
123
|
+
- ✅ Preserves status (`done`, `pending`, `manual`) of existing tasks
|
|
115
124
|
- ✅ Synchronizes status between `status.json` and `tasks.status.md` (ensures they are always aligned)
|
|
116
125
|
|
|
117
126
|
### `task-flow: validate`
|
|
@@ -137,14 +146,18 @@ Plans **parallel work across N IAs** (`split:3`, `split:2`, …). **`:N` is requ
|
|
|
137
146
|
Output: N copy-paste lines `task-flow: run id,id,id` + coordination notes. Invoke: `@task-flow-split`.
|
|
138
147
|
|
|
139
148
|
### `task-flow: run next X`
|
|
140
|
-
Works on next X pending subtasks
|
|
149
|
+
Works on next X **pending** subtasks. Resolves `manual` first by reading dev-logs and the current conversation.
|
|
150
|
+
|
|
151
|
+
- **Fully automatable** → `done`
|
|
152
|
+
- **Needs your action** → `manual` + `.task-flow/dev-logs/task-X.Y-manual.md`
|
|
153
|
+
- You report progress **in chat** (no extra command); the AI appends the **Conversation log** and marks `done` when verified
|
|
141
154
|
|
|
142
155
|
**Examples:**
|
|
143
|
-
- `task-flow: run next 4` → Next 4 subtasks
|
|
144
|
-
- `task-flow: run next` → Next 1 subtask
|
|
156
|
+
- `task-flow: run next 4` → Next 4 pending subtasks
|
|
157
|
+
- `task-flow: run next` → Next 1 pending subtask
|
|
145
158
|
|
|
146
159
|
### `task-flow: run X` (simplified syntax)
|
|
147
|
-
Executes all pending subtasks of a specific task.
|
|
160
|
+
Executes all **pending** subtasks of a specific task. Stops if a subtask requires manual intervention.
|
|
148
161
|
|
|
149
162
|
**⚠️ Dependency Check:**
|
|
150
163
|
- Only executes if all previous tasks (1, 2, ..., X-1) are completely finished
|
|
File without changes
|
|
@@ -53,7 +53,7 @@ Detalhes dos comandos: [README.md](../README.md).
|
|
|
53
53
|
| `.task-flow/guides/CURSOR.md` | — | ✅ | — |
|
|
54
54
|
| `.task-flow/guides/coding-standards-full.md` | on demand | on demand (sections only) | on demand |
|
|
55
55
|
| [OPTIMIZATION-PLAN.md](OPTIMIZATION-PLAN.md) | — | token roadmap | — |
|
|
56
|
-
| `.codex/config.toml` | — | — | ✅ (opcional, preservado no
|
|
56
|
+
| `.codex/config.toml` | — | — | ✅ (opcional, preservado no reset --keep-tasks) |
|
|
57
57
|
| `task-flow-cursor.mdc` | — | ✅ always-on | — |
|
|
58
58
|
| `rbin-git-policy.mdc` | — | ✅ always-on | — |
|
|
59
59
|
| `.claude/skills/` | ✅ (11 skills) | — | — |
|
|
@@ -46,11 +46,13 @@ Rule: `.cursor/rules/task_split.mdc`
|
|
|
46
46
|
|
|
47
47
|
See AGENTS.md **Run** section. Prefer `.claude/skills/task-flow-run/workflow.md`; fallback: `.cursor/rules/task_work.mdc`.
|
|
48
48
|
|
|
49
|
-
**Dependency:** `run N` only if tasks `1..N-1` fully done.
|
|
49
|
+
**Dependency:** `run N` only if tasks `1..N-1` fully `done` (no `manual` blocking).
|
|
50
50
|
|
|
51
|
-
**Per subtask:** implement → `done`
|
|
51
|
+
**Per subtask (automatable):** implement → `done` → refresh `tasks.status.md` → suggest commit.
|
|
52
52
|
|
|
53
|
-
**
|
|
53
|
+
**Manual intervention:** implement what you can → `manual` → dev-log → user reports in chat → AI updates Conversation log → `done` when verified.
|
|
54
|
+
|
|
55
|
+
**Never during run:** `guides/reports/task-*-implementation.md`.
|
|
54
56
|
|
|
55
57
|
---
|
|
56
58
|
|
|
@@ -78,12 +78,12 @@ Only during `run` / `validate` when `.task-flow/guides/graphify-out/` exists. Do
|
|
|
78
78
|
|
|
79
79
|
| Issue | Fix |
|
|
80
80
|
|-------|-----|
|
|
81
|
-
| Ignores task-flow | `rbin-task-flow
|
|
81
|
+
| Ignores task-flow | `rbin-task-flow reset --keep-tasks` |
|
|
82
82
|
| Run workflow wrong | **`@task-flow-run`** — avoid `@task_work` |
|
|
83
83
|
| Rule not applied | `@task-flow-<command>` for that workflow |
|
|
84
84
|
| Standards missing | File under `src/` or `@rbin-coding-standards` |
|
|
85
85
|
| Context too large | Fewer `src/` files in chat; skills not full docs |
|
|
86
|
-
| Wrong always-on count | `
|
|
86
|
+
| Wrong always-on count | `reset --keep-tasks`; don't set `graphify.mdc` always-on |
|
|
87
87
|
|
|
88
88
|
---
|
|
89
89
|
|
|
@@ -31,7 +31,7 @@ Graphify ([graphifyy](https://pypi.org/project/graphifyyy/)) cria um **grafo de
|
|
|
31
31
|
1. Copia **`.cursor/rules/graphify-task-flow.mdc`** — `alwaysApply: false` (não compete com `task_work`, etc.).
|
|
32
32
|
2. Grafo em **`.task-flow/guides/graphify-out/`** (já coberto pelo `.task-flow/` no `.gitignore`; remove entrada legada `graphify-out/` na raiz).
|
|
33
33
|
3. Se existir **`.cursor/rules/graphify.mdc`** do `graphify cursor install` (upstream com `alwaysApply: true`), o instalador **desativa** `alwaysApply` para economizar contexto.
|
|
34
|
-
4. Com **`--graphify`** em `init
|
|
34
|
+
4. Com **`--graphify`** em `init` ou **`reset`**, roda `graphify extract . --backend claude-cli --out .task-flow/guides` se o CLI estiver no PATH (usa assinatura Claude Code — sem API key separada).
|
|
35
35
|
|
|
36
36
|
**Não** rodamos `graphify claude install` / `graphify cursor install` automaticamente — o install upstream força `graphify.mdc` always-on e incham `CLAUDE.md` / `AGENTS.md`.
|
|
37
37
|
|
|
@@ -41,7 +41,7 @@ Graphify ([graphifyy](https://pypi.org/project/graphifyyy/)) cria um **grafo de
|
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
43
|
cd seu-projeto
|
|
44
|
-
rbin-task-flow reset --graphify # ou init
|
|
44
|
+
rbin-task-flow reset --keep-tasks --graphify # ou init --graphify; recria template + grafo
|
|
45
45
|
task-flow: sync
|
|
46
46
|
task-flow: run next 3 # IA usa grafo só ao implementar
|
|
47
47
|
# você: git commit
|
|
@@ -89,7 +89,7 @@ task-flow: run next 2 — se .task-flow/guides/graphify-out/ existir, graphify q
|
|
|
89
89
|
| Primeiro setup | `rbin-task-flow init --graphify` ou `graphify extract . --backend claude-cli --out .task-flow/guides` |
|
|
90
90
|
| Reset completo (tasks + template + grafo) | `rbin-task-flow reset --graphify` |
|
|
91
91
|
| Refactor grande após vários `run` | `graphify update .` ou `graphify extract . --backend claude-cli --out .task-flow/guides` |
|
|
92
|
-
| `task-flow
|
|
92
|
+
| `rbin-task-flow reset --keep-tasks` | Reaplica `graphify-task-flow.mdc` e pode rebaixar `graphify.mdc` |
|
|
93
93
|
|
|
94
94
|
---
|
|
95
95
|
|
|
@@ -36,7 +36,7 @@ projeto/
|
|
|
36
36
|
└── .task-flow/
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
-
Após `rbin-task-flow init` ou `
|
|
39
|
+
Após `rbin-task-flow init` ou `reset --keep-tasks`, use **`/task-flow-sync`**, **`/task-flow-run`**, etc. Reinicie o Claude Code se `.claude/skills/` foi criado pela primeira vez na sessão.
|
|
40
40
|
|
|
41
41
|
---
|
|
42
42
|
|
|
@@ -33,8 +33,8 @@ Documentação: [Cursor Rules](https://cursor.com/docs/context/rules) · Referê
|
|
|
33
33
|
| **minimal** | `rbin-task-flow init --profile minimal` | Só `task-flow-cursor.mdc` + `rbin-git-policy.mdc` + skills |
|
|
34
34
|
|
|
35
35
|
- **minimal:** ≤2 always-on; workflows só via `@task-flow-*` (sem glob `coding_standards`, `task_work`, etc.).
|
|
36
|
-
- **
|
|
37
|
-
- Migrar para regras completas: `rbin-task-flow
|
|
36
|
+
- **reset** sem `--profile` reaplica o profile salvo em `.task-flow/install-meta.json`.
|
|
37
|
+
- Migrar para regras completas: `rbin-task-flow reset --profile standard --keep-tasks`.
|
|
38
38
|
|
|
39
39
|
---
|
|
40
40
|
|
|
@@ -111,7 +111,7 @@ Cursor suporta o mesmo formato que Claude Code: `.cursor/skills/<nome>/SKILL.md`
|
|
|
111
111
|
|
|
112
112
|
O `rbin-task-flow init` copia **11 skills** para `.cursor/skills/` (mesmo conteúdo que `.claude/skills/`). No Agent, use `@task-flow-split`, `@task-flow-run`, `@task-flow-sync`, etc.
|
|
113
113
|
|
|
114
|
-
Após `rbin-task-flow init` ou `
|
|
114
|
+
Após `rbin-task-flow init` ou `reset --keep-tasks`, use `@task-flow-*` no Agent. Para sync: `@task-flow-sync` (não `task_generation` isolado).
|
|
115
115
|
|
|
116
116
|
---
|
|
117
117
|
|
|
@@ -201,7 +201,7 @@ Coloque PNG/PDF/MD em `.task-flow/contexts/`. Nas subtarefas geradas, instruçõ
|
|
|
201
201
|
| Stubs `task_work` / `task_execution` | ✅ |
|
|
202
202
|
| Unificar git em `rbin-git-policy` | ✅ |
|
|
203
203
|
|
|
204
|
-
**No seu projeto:** `rbin-task-flow
|
|
204
|
+
**No seu projeto:** `rbin-task-flow reset --keep-tasks` reaplica o template. Evite reativar `alwaysApply: true` em `graphify.mdc` upstream.
|
|
205
205
|
|
|
206
206
|
**Roadmap:** [OPTIMIZATION-PLAN.md](../OPTIMIZATION-PLAN.md) · tarefas: [OPTIMIZATION-IMPLEMENTATION-TASKS.md](../OPTIMIZATION-IMPLEMENTATION-TASKS.md).
|
|
207
207
|
|
|
@@ -238,10 +238,11 @@ Cursor também pode ler `AGENTS.md` em alguns fluxos; no RBIN ele é focado em *
|
|
|
238
238
|
|
|
239
239
|
| Comando CLI | Uso com Cursor |
|
|
240
240
|
|-------------|----------------|
|
|
241
|
-
| `rbin-task-flow init` |
|
|
242
|
-
| `rbin-task-flow update` | Atualiza rules; preserva `.internal/` |
|
|
241
|
+
| `rbin-task-flow init` | Primeira instalação (rules + task-flow) |
|
|
243
242
|
| `rbin-task-flow reset` | Recria `.task-flow` do zero |
|
|
243
|
+
| `rbin-task-flow reset --keep-tasks` | Sobe versão sem sobrescrever `tasks.input.txt`, `tasks.status.md`, `.internal/` |
|
|
244
244
|
| `rbin-task-flow reset --graphify` | Reset + `graphify extract . --backend claude-cli` |
|
|
245
|
+
| `rbin-task-flow reset --keep-tasks --graphify` | Upgrade + mantém tasks + grafo |
|
|
245
246
|
|
|
246
247
|
O Agent executa o workflow (`task-flow: audit`, `task-flow: run`, etc.); o CLI prepara arquivos.
|
|
247
248
|
|
|
@@ -258,7 +259,7 @@ O Agent executa o workflow (`task-flow: audit`, `task-flow: run`, etc.); o CLI p
|
|
|
258
259
|
| Local (padrão) | `init` | Repo limpo; cada dev com setup próprio | Sem sync de rules/skills |
|
|
259
260
|
| Time | `init --share-ai-config` | Mesmo Task Flow para todos | Mais arquivos de IA no git; tokens por dev ao usar rules |
|
|
260
261
|
|
|
261
|
-
`
|
|
262
|
+
`reset` sem flag reaplica a opção salva em `.task-flow/install-meta.json` (`shareAiConfig`).
|
|
262
263
|
|
|
263
264
|
Para open source: documente no README — contribuidores podem usar `--share-ai-config` ou `init` local.
|
|
264
265
|
|
|
@@ -268,7 +269,7 @@ Para open source: documente no README — contribuidores podem usar `--share-ai-
|
|
|
268
269
|
|
|
269
270
|
| Problema | Causa provável | Ação |
|
|
270
271
|
|----------|----------------|------|
|
|
271
|
-
| Agent ignora `task-flow:` | Rules não instaladas / projeto errado | `rbin-task-flow
|
|
272
|
+
| Agent ignora `task-flow:` | Rules não instaladas / projeto errado | `rbin-task-flow reset --keep-tasks` |
|
|
272
273
|
| Não atualiza `tasks.status.md` | Só mexeu em `status.json` | `@task-flow-run` — regenerar Summary |
|
|
273
274
|
| `run 3` não roda | Tasks 1–2 incompletas | `task-flow: status` |
|
|
274
275
|
| Coding standards ignorados | Checklist não no contexto | `@rbin-coding-standards` ou abrir arquivo em `src/` |
|
package/AGENTS.md
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
| `.task-flow/.internal/tasks.json` | Task definitions |
|
|
14
14
|
| `.task-flow/.internal/status.json` | Status source of truth |
|
|
15
15
|
| `.task-flow/contexts/` | Specs/mockups for subtasks |
|
|
16
|
+
| `.task-flow/dev-logs/` | Manual steps + conversation log (AI updates from chat) |
|
|
16
17
|
|
|
17
18
|
## Git
|
|
18
19
|
|
|
@@ -52,12 +53,13 @@ No explanatory comments. Complex topics → `dev-logs/*.md`. Allowed: `// ──
|
|
|
52
53
|
## Run (embedded)
|
|
53
54
|
|
|
54
55
|
1. Read `tasks.json` + `status.json`.
|
|
55
|
-
2. `
|
|
56
|
-
3. `run X`
|
|
57
|
-
4.
|
|
58
|
-
5.
|
|
59
|
-
6.
|
|
60
|
-
7. Parent task `done` when all subtasks done
|
|
56
|
+
2. **Resolve `manual` first:** read dev-logs + conversation; append Conversation log; mark `done` only when verified.
|
|
57
|
+
3. `run next X` (default X=1): next X **pending** subtasks (skip unresolved `manual`).
|
|
58
|
+
4. `run X` / `X,Y` / `all`: all pending for task(s); block if tasks `1..X-1` have non-`done` subtasks.
|
|
59
|
+
5. Per subtask: `instructions`; `contexts/`; implement + verify; optional `graphify query`.
|
|
60
|
+
6. **Automatable** → `done`; **manual intervention** → `manual` + dev-log; user reports in chat; AI updates log and completes when verified.
|
|
61
|
+
7. Parent task `done` when all subtasks `done`. Suggest commit; never git write.
|
|
62
|
+
8. **Never** write `guides/reports/` during run.
|
|
61
63
|
|
|
62
64
|
## Prompt templates (copy)
|
|
63
65
|
|
package/README.md
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
<a id="português"></a>
|
|
34
34
|
# 🇧🇷 Português
|
|
35
35
|
|
|
36
|
-
> **v1.
|
|
36
|
+
> **v1.30.1** — `reset --keep-tasks`, sem comando `update`, subtarefas `manual` em `dev-logs/`. `npm install -g rbin-task-flow@1.30.1` e `rbin-task-flow reset --keep-tasks`. [CHANGELOG](CHANGELOG.md) · [Publicação](RELEASE-1.30.1.md).
|
|
37
37
|
|
|
38
38
|
## O Que É Este Projeto?
|
|
39
39
|
|
|
@@ -74,11 +74,12 @@ rbin-task-flow init
|
|
|
74
74
|
rbin-task-flow init # Inicializa no projeto atual
|
|
75
75
|
rbin-task-flow init --profile minimal # Só 2 regras always-on + skills (menos tokens no Cursor)
|
|
76
76
|
rbin-task-flow init --share-ai-config # Versiona .cursor/skills/ e .cursor/rules/ no git (time)
|
|
77
|
-
rbin-task-flow
|
|
78
|
-
rbin-task-flow update --profile standard # Passa a copiar todas as regras .mdc
|
|
77
|
+
rbin-task-flow init --graphify # Init + grafo em .task-flow/guides/graphify-out/
|
|
79
78
|
rbin-task-flow reset # Reinstala o Task Flow do zero
|
|
80
|
-
rbin-task-flow
|
|
79
|
+
rbin-task-flow reset --keep-tasks # Sobe versão sem sobrescrever suas tasks
|
|
80
|
+
rbin-task-flow reset --profile standard # Passa a copiar todas as regras .mdc
|
|
81
81
|
rbin-task-flow reset --graphify # Reset + graphify extract (CLI Graphify no PATH)
|
|
82
|
+
rbin-task-flow reset --keep-tasks --graphify # Upgrade + mantém tasks + graphify extract
|
|
82
83
|
rbin-task-flow version-check # Verifica atualizações de modelos
|
|
83
84
|
rbin-task-flow info # Mostra informações
|
|
84
85
|
rbin-task-flow estimate <ids> # Estima tempo (ex: "1" ou "1,2" ou "all")
|
|
@@ -91,7 +92,7 @@ Após inicializar, use estes comandos na IA (Cursor/Claude/Codex) para gerenciar
|
|
|
91
92
|
|
|
92
93
|
**Otimizar por plataforma:** [.task-flow/guides/AI-PLATFORMS.md](.task-flow/guides/AI-PLATFORMS.md) · [Claude](.task-flow/guides/platforms/claude-code.md) · [Cursor](.task-flow/guides/platforms/cursor.md) · [Codex](.task-flow/guides/platforms/codex.md) · [Graphify](.task-flow/guides/GRAPHIFY.md)
|
|
93
94
|
|
|
94
|
-
**Graphify (opcional):** grafo em `.task-flow/guides/graphify-out/`. Novo projeto: `rbin-task-flow init --graphify`. **Já tem Task Flow:** `npm install -g rbin-task-flow@latest` e `rbin-task-flow
|
|
95
|
+
**Graphify (opcional):** grafo em `.task-flow/guides/graphify-out/`. Novo projeto: `rbin-task-flow init --graphify`. **Já tem Task Flow:** `npm install -g rbin-task-flow@latest` e `rbin-task-flow reset --keep-tasks --graphify` no projeto (migra `graphify-out/` da raiz + regera grafo). **Manter suas tasks ao subir versão:** `rbin-task-flow reset --keep-tasks`. Detalhes: [.task-flow/README.md](.task-flow/README.md#graphify-opcional) · [GRAPHIFY.md](.task-flow/guides/GRAPHIFY.md).
|
|
95
96
|
|
|
96
97
|
**Claude Code / Cursor skills (v1.20+):** `init` copia 11 skills para `.claude/skills/` e `.cursor/skills/` — use `/task-flow-split`, `/task-flow-sync`, `/task-flow-run`, etc.
|
|
97
98
|
|
|
@@ -110,7 +111,7 @@ Após inicializar, use estes comandos na IA (Cursor/Claude/Codex) para gerenciar
|
|
|
110
111
|
| `task-flow: audit` | **Avalia** o quanto o código bate com os padrões de codificação | Analisa a codebase, dá um score por categoria e pergunta quais melhorias você quer adotar — sem impor nada |
|
|
111
112
|
| `task-flow: status` | **Visualiza** o progresso rapidamente | Vê resumo com tasks completas, em andamento e quantas subtarefas faltam |
|
|
112
113
|
| `task-flow: split` | `:3` · `:2` · `:3 50-72` | **Divide** trabalho entre N IAs — gera N comandos `run X,Y,Z` (só plano) |
|
|
113
|
-
| `task-flow: run next X` | **Automatiza** o trabalho nas próximas subtarefas |
|
|
114
|
+
| `task-flow: run next X` | **Automatiza** o trabalho nas próximas subtarefas | IA implementa o que pode; passos manuais → `dev-logs/`; você reporta no chat |
|
|
114
115
|
| `task-flow: run X` | **Completa** uma tarefa inteira de uma vez | Executa todas as subtarefas de uma tarefa específica (permite trabalho paralelo) |
|
|
115
116
|
| `task-flow: run X,Y` | **Completa** múltiplas tarefas | Executa tarefas separadas por vírgula (ex: `task-flow: run 10,11`) |
|
|
116
117
|
| `task-flow: run all` | **Completa** todas as tarefas | Executa todas as tarefas pendentes |
|
|
@@ -271,11 +272,17 @@ Para atualizar configurações em um projeto existente:
|
|
|
271
272
|
```bash
|
|
272
273
|
# Usando NPM (recomendado)
|
|
273
274
|
cd /caminho/para/seu/projeto
|
|
274
|
-
rbin-task-flow update
|
|
275
275
|
|
|
276
|
-
#
|
|
276
|
+
# Primeira instalação
|
|
277
|
+
rbin-task-flow init
|
|
278
|
+
|
|
279
|
+
# Subir versão do pacote mantendo suas tasks
|
|
280
|
+
npm install -g rbin-task-flow@latest
|
|
281
|
+
rbin-task-flow reset --keep-tasks
|
|
282
|
+
rbin-task-flow reset --keep-tasks --graphify
|
|
283
|
+
|
|
284
|
+
# Reiniciar o Task Flow do zero (perde tasks)
|
|
277
285
|
rbin-task-flow reset
|
|
278
|
-
# Com grafo de código (requer graphify no PATH):
|
|
279
286
|
rbin-task-flow reset --graphify
|
|
280
287
|
|
|
281
288
|
# Ou usando método legacy
|
|
@@ -416,7 +423,7 @@ Para problemas ou perguntas:
|
|
|
416
423
|
<a id="english"></a>
|
|
417
424
|
# 🇬🇧 English
|
|
418
425
|
|
|
419
|
-
> **v1.
|
|
426
|
+
> **v1.30.1** — `reset --keep-tasks`, no `update` CLI, `manual` subtasks in `dev-logs/`. `npm install -g rbin-task-flow@1.30.1` then `rbin-task-flow reset --keep-tasks`. [CHANGELOG](CHANGELOG.md) · [Release guide](RELEASE-1.30.1.md).
|
|
420
427
|
|
|
421
428
|
## What Is This Project?
|
|
422
429
|
|
|
@@ -457,11 +464,12 @@ rbin-task-flow init
|
|
|
457
464
|
rbin-task-flow init # Initialize in current project
|
|
458
465
|
rbin-task-flow init --profile minimal # 2 always-on rules + skills only (lower Cursor token cost)
|
|
459
466
|
rbin-task-flow init --share-ai-config # Commit .cursor/skills and rules with the team
|
|
460
|
-
rbin-task-flow
|
|
461
|
-
rbin-task-flow update --profile standard # Install all .cursor/rules/*.mdc
|
|
467
|
+
rbin-task-flow init --graphify # Init + graph at .task-flow/guides/graphify-out/
|
|
462
468
|
rbin-task-flow reset # Reinstall Task Flow from scratch
|
|
463
|
-
rbin-task-flow
|
|
469
|
+
rbin-task-flow reset --keep-tasks # Upgrade package without overwriting your tasks
|
|
470
|
+
rbin-task-flow reset --profile standard # Install all .cursor/rules/*.mdc
|
|
464
471
|
rbin-task-flow reset --graphify # Reset + graphify extract (Graphify CLI on PATH)
|
|
472
|
+
rbin-task-flow reset --keep-tasks --graphify # Upgrade + keep tasks + graphify extract
|
|
465
473
|
rbin-task-flow version-check # Check for model updates
|
|
466
474
|
rbin-task-flow info # Show information
|
|
467
475
|
rbin-task-flow estimate <ids> # Estimate time (e.g., "1" or "1,2" or "all")
|
|
@@ -474,7 +482,7 @@ After initializing, use these commands in your AI (Cursor/Claude/Codex) to autom
|
|
|
474
482
|
|
|
475
483
|
**Per-platform optimization:** [index](.task-flow/guides/AI-PLATFORMS.md) · [Claude](.task-flow/guides/platforms/claude-code.md) · [Cursor](.task-flow/guides/platforms/cursor.md) · [Codex](.task-flow/guides/platforms/codex.md) · [Graphify](.task-flow/guides/GRAPHIFY.md)
|
|
476
484
|
|
|
477
|
-
**Graphify (optional):** graph at `.task-flow/guides/graphify-out/`. New project: `rbin-task-flow init --graphify`. **Existing project:** `npm install -g rbin-task-flow@latest` then `rbin-task-flow
|
|
485
|
+
**Graphify (optional):** graph at `.task-flow/guides/graphify-out/`. New project: `rbin-task-flow init --graphify`. **Existing project:** `npm install -g rbin-task-flow@latest` then `rbin-task-flow reset --keep-tasks --graphify` (migrates legacy root `graphify-out/` + re-extracts). **Keep your tasks when upgrading:** `rbin-task-flow reset --keep-tasks`. See [.task-flow/README.md](.task-flow/README.md#graphify-opcional) · [GRAPHIFY.md](.task-flow/guides/GRAPHIFY.md).
|
|
478
486
|
|
|
479
487
|
**Claude / Cursor skills (v1.20+):** installs 11 skills — use `/task-flow-split`, `/task-flow-sync`, `/task-flow-run`, etc.
|
|
480
488
|
|
|
@@ -493,7 +501,7 @@ After initializing, use these commands in your AI (Cursor/Claude/Codex) to autom
|
|
|
493
501
|
| `task-flow: audit` | **Evaluate** how well your code matches coding standards | Scans the codebase, scores it by category and asks which improvements you want to adopt — never imposes changes |
|
|
494
502
|
| `task-flow: status` | **Visualize** progress quickly | See summary with completed tasks, in progress, and remaining subtasks |
|
|
495
503
|
| `task-flow: split` | `:3` · `:2` · `:3 50-72` | **Split** work across N AIs — N `run` commands (plan only) |
|
|
496
|
-
| `task-flow: run next X` | **Automate** work on next subtasks | AI
|
|
504
|
+
| `task-flow: run next X` | **Automate** work on next subtasks | AI implements what it can; manual steps → `dev-logs/`; you report in chat |
|
|
497
505
|
| `task-flow: run X` | **Complete** an entire task at once | Executes all subtasks of a specific task (allows parallel work) |
|
|
498
506
|
| `task-flow: run X,Y` | **Complete** multiple tasks | Executes comma-separated tasks (e.g., `task-flow: run 10,11`) |
|
|
499
507
|
| `task-flow: run all` | **Complete** all tasks | Executes all pending tasks |
|
|
@@ -654,11 +662,17 @@ To update configs in an existing project:
|
|
|
654
662
|
```bash
|
|
655
663
|
# Using NPM (recommended)
|
|
656
664
|
cd /path/to/your/project
|
|
657
|
-
rbin-task-flow update
|
|
658
665
|
|
|
659
|
-
#
|
|
666
|
+
# First install
|
|
667
|
+
rbin-task-flow init
|
|
668
|
+
|
|
669
|
+
# Upgrade package while keeping your tasks
|
|
670
|
+
npm install -g rbin-task-flow@latest
|
|
671
|
+
rbin-task-flow reset --keep-tasks
|
|
672
|
+
rbin-task-flow reset --keep-tasks --graphify
|
|
673
|
+
|
|
674
|
+
# Reset Task Flow from scratch (loses tasks)
|
|
660
675
|
rbin-task-flow reset
|
|
661
|
-
# With code knowledge graph (requires graphify on PATH):
|
|
662
676
|
rbin-task-flow reset --graphify
|
|
663
677
|
|
|
664
678
|
# Or using legacy method
|
package/bin/cli.js
CHANGED
|
@@ -22,12 +22,16 @@ function addInstallCommand(name, description, extra = {}) {
|
|
|
22
22
|
.option('-g, --graphify', 'Run graphify extract → .task-flow/guides/graphify-out/ (claude-cli backend; requires graphify CLI)')
|
|
23
23
|
.option(
|
|
24
24
|
'--profile <profile>',
|
|
25
|
-
'Cursor rules: minimal (2 always-on + skills) or standard (all rules);
|
|
25
|
+
'Cursor rules: minimal (2 always-on + skills) or standard (all rules); reset without flag keeps .task-flow/install-meta.json'
|
|
26
26
|
)
|
|
27
27
|
.option(
|
|
28
28
|
'--share-ai-config',
|
|
29
29
|
'Do not gitignore .cursor/skills/ or .cursor/rules/ (team can commit shared AI config; see .gitignore comment)'
|
|
30
30
|
)
|
|
31
|
+
.option(
|
|
32
|
+
'--keep-tasks',
|
|
33
|
+
'Preserve tasks.input.txt, tasks.status.md, .internal/, and dev-logs/ on reset (upgrade package without losing task definitions)'
|
|
34
|
+
)
|
|
31
35
|
.action(async (options) => {
|
|
32
36
|
const targetPath = options.path || process.cwd();
|
|
33
37
|
try {
|
|
@@ -39,6 +43,7 @@ function addInstallCommand(name, description, extra = {}) {
|
|
|
39
43
|
graphify: options.graphify,
|
|
40
44
|
profile,
|
|
41
45
|
shareAiConfig,
|
|
46
|
+
keepTasks: options.keepTasks === true,
|
|
42
47
|
});
|
|
43
48
|
} catch (error) {
|
|
44
49
|
console.error(chalk.red('\n' + error.message + '\n'));
|
|
@@ -48,7 +53,6 @@ function addInstallCommand(name, description, extra = {}) {
|
|
|
48
53
|
}
|
|
49
54
|
|
|
50
55
|
addInstallCommand('init', 'Initialize RBIN Task Flow in current directory');
|
|
51
|
-
addInstallCommand('update', 'Update RBIN Task Flow in current directory', { update: true });
|
|
52
56
|
addInstallCommand('reset', 'Reset RBIN Task Flow in current directory', { reset: true });
|
|
53
57
|
|
|
54
58
|
program
|
|
@@ -93,9 +97,10 @@ program
|
|
|
93
97
|
console.log(chalk.cyan(' rbin-task-flow init --profile minimal') + ' - Low-token install (2 always-on rules + skills)');
|
|
94
98
|
console.log(chalk.cyan(' rbin-task-flow init --share-ai-config') + ' - Version .cursor/skills and rules in git');
|
|
95
99
|
console.log(chalk.cyan(' rbin-task-flow init --graphify') + ' - Init + graphify extract --backend claude-cli (if CLI installed)');
|
|
96
|
-
console.log(chalk.cyan(' rbin-task-flow update') + ' - Update configurations');
|
|
97
100
|
console.log(chalk.cyan(' rbin-task-flow reset') + ' - Reset task flow files from scratch');
|
|
101
|
+
console.log(chalk.cyan(' rbin-task-flow reset --keep-tasks') + ' - Upgrade package without overwriting tasks');
|
|
98
102
|
console.log(chalk.cyan(' rbin-task-flow reset --graphify') + ' - Reset + graphify extract --backend claude-cli (if CLI installed)');
|
|
103
|
+
console.log(chalk.cyan(' rbin-task-flow reset --keep-tasks --graphify') + ' - Upgrade + keep tasks + graphify extract');
|
|
99
104
|
console.log(chalk.cyan(' rbin-task-flow version-check') + ' - Check for model updates');
|
|
100
105
|
console.log(chalk.cyan(' rbin-task-flow estimate <ids>') + ' - Estimate time (e.g., "1" or "1,2" or "all")');
|
|
101
106
|
console.log(chalk.cyan(' rbin-task-flow report <ids>') + ' - Generate report (e.g., "1" or "1,2" or "all")');
|
package/lib/cursor.js
CHANGED
|
@@ -30,7 +30,7 @@ async function setupCursorIntegration(targetPath, options = {}) {
|
|
|
30
30
|
|
|
31
31
|
if (profile === 'minimal') {
|
|
32
32
|
showInfo('Minimal profile: 2 always-on rules; workflows via @task-flow-* skills only');
|
|
33
|
-
showInfo('Full rules: rbin-task-flow
|
|
33
|
+
showInfo('Full rules: rbin-task-flow reset --profile standard --keep-tasks');
|
|
34
34
|
} else {
|
|
35
35
|
showInfo('Rules: 2 always-on + intelligent/glob rules; prefer @task-flow-* skills for workflows');
|
|
36
36
|
}
|
package/lib/install.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const fs = require('fs-extra');
|
|
2
|
+
const os = require('os');
|
|
2
3
|
const path = require('path');
|
|
3
4
|
const chalk = require('chalk');
|
|
4
5
|
const ora = require('ora');
|
|
@@ -23,7 +24,6 @@ const TEMPLATE_DIR = path.join(__dirname, '..');
|
|
|
23
24
|
const PACKAGE_VERSION = require('../package.json').version;
|
|
24
25
|
|
|
25
26
|
async function installInProject(targetPath, options = {}) {
|
|
26
|
-
const isUpdate = options.update || false;
|
|
27
27
|
const isReset = options.reset || false;
|
|
28
28
|
|
|
29
29
|
let profile;
|
|
@@ -42,8 +42,6 @@ async function installInProject(targetPath, options = {}) {
|
|
|
42
42
|
|
|
43
43
|
if (isReset) {
|
|
44
44
|
console.log(chalk.blue('♻️ Resetting RBIN Task Flow...'));
|
|
45
|
-
} else if (isUpdate) {
|
|
46
|
-
console.log(chalk.blue('🔄 Updating RBIN Task Flow...'));
|
|
47
45
|
} else {
|
|
48
46
|
console.log(chalk.blue('🚀 Installing RBIN Task Flow...'));
|
|
49
47
|
}
|
|
@@ -62,6 +60,12 @@ async function installInProject(targetPath, options = {}) {
|
|
|
62
60
|
? chalk.yellow('share-ai-config') + chalk.gray(' (.cursor/skills + .cursor/rules versionáveis)')
|
|
63
61
|
: chalk.gray('local .cursor/ gitignored (default)')
|
|
64
62
|
);
|
|
63
|
+
if (options.keepTasks) {
|
|
64
|
+
console.log(
|
|
65
|
+
chalk.blue('📋 Tasks:'),
|
|
66
|
+
chalk.yellow('keep-tasks') + chalk.gray(' (tasks.input.txt, tasks.status.md, .internal/, dev-logs/)')
|
|
67
|
+
);
|
|
68
|
+
}
|
|
65
69
|
console.log('');
|
|
66
70
|
|
|
67
71
|
const spinner = ora('Processing...').start();
|
|
@@ -81,8 +85,14 @@ async function installInProject(targetPath, options = {}) {
|
|
|
81
85
|
|
|
82
86
|
spinner.text = 'Creating directories...';
|
|
83
87
|
|
|
88
|
+
let taskBackup = null;
|
|
89
|
+
const taskFlowPath = path.join(targetPath, '.task-flow');
|
|
90
|
+
if (isReset && options.keepTasks && (await fs.pathExists(taskFlowPath))) {
|
|
91
|
+
taskBackup = await backupTaskFiles(taskFlowPath);
|
|
92
|
+
}
|
|
93
|
+
|
|
84
94
|
if (isReset) {
|
|
85
|
-
await fs.remove(
|
|
95
|
+
await fs.remove(taskFlowPath);
|
|
86
96
|
}
|
|
87
97
|
|
|
88
98
|
const dirs = [
|
|
@@ -100,7 +110,12 @@ async function installInProject(targetPath, options = {}) {
|
|
|
100
110
|
|
|
101
111
|
spinner.text = 'Copying configuration files...';
|
|
102
112
|
|
|
103
|
-
await copyConfigs(targetPath, {
|
|
113
|
+
await copyConfigs(targetPath, {
|
|
114
|
+
reset: isReset,
|
|
115
|
+
profile,
|
|
116
|
+
keepTasks: options.keepTasks === true,
|
|
117
|
+
taskBackup,
|
|
118
|
+
});
|
|
104
119
|
|
|
105
120
|
spinner.text = 'Updating .gitignore...';
|
|
106
121
|
|
|
@@ -144,13 +159,12 @@ async function installInProject(targetPath, options = {}) {
|
|
|
144
159
|
}
|
|
145
160
|
|
|
146
161
|
async function copyConfigs(targetPath, options = {}) {
|
|
147
|
-
const isUpdate = options.update || false;
|
|
148
162
|
const isReset = options.reset || false;
|
|
149
163
|
const profile = options.profile;
|
|
164
|
+
const taskBackup = options.taskBackup || null;
|
|
150
165
|
|
|
151
166
|
const rulesResult = await copyCursorRules(targetPath, TEMPLATE_DIR, {
|
|
152
167
|
profile,
|
|
153
|
-
update: isUpdate,
|
|
154
168
|
reset: isReset,
|
|
155
169
|
});
|
|
156
170
|
if (rulesResult?.mode === PROFILE_MINIMAL) {
|
|
@@ -200,7 +214,11 @@ async function copyConfigs(targetPath, options = {}) {
|
|
|
200
214
|
showSuccess('Codex instructions (AGENTS.md)');
|
|
201
215
|
}
|
|
202
216
|
|
|
203
|
-
await copyTaskFlow(targetPath, {
|
|
217
|
+
await copyTaskFlow(targetPath, {
|
|
218
|
+
reset: isReset,
|
|
219
|
+
keepTasks: options.keepTasks === true,
|
|
220
|
+
taskBackup,
|
|
221
|
+
});
|
|
204
222
|
}
|
|
205
223
|
|
|
206
224
|
const LEGACY_TASK_FLOW_ROOT_FILES = [
|
|
@@ -255,9 +273,55 @@ async function migrateLegacyTaskFlowLayout(taskFlowDest) {
|
|
|
255
273
|
}
|
|
256
274
|
}
|
|
257
275
|
|
|
276
|
+
async function backupTaskFiles(taskFlowDest) {
|
|
277
|
+
const backup = {};
|
|
278
|
+
const files = ['tasks.input.txt', 'tasks.status.md'];
|
|
279
|
+
for (const name of files) {
|
|
280
|
+
const filePath = path.join(taskFlowDest, name);
|
|
281
|
+
if (await fs.pathExists(filePath)) {
|
|
282
|
+
backup[name] = await fs.readFile(filePath, 'utf8');
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
const internalPath = path.join(taskFlowDest, '.internal');
|
|
286
|
+
if (await fs.pathExists(internalPath)) {
|
|
287
|
+
backup['.internal'] = await fs.mkdtemp(path.join(os.tmpdir(), 'rbin-task-flow-internal-'));
|
|
288
|
+
await fs.copy(internalPath, path.join(backup['.internal'], '.internal'));
|
|
289
|
+
}
|
|
290
|
+
const devLogsPath = path.join(taskFlowDest, 'dev-logs');
|
|
291
|
+
if (await fs.pathExists(devLogsPath)) {
|
|
292
|
+
backup['dev-logs'] = await fs.mkdtemp(path.join(os.tmpdir(), 'rbin-task-flow-dev-logs-'));
|
|
293
|
+
await fs.copy(devLogsPath, path.join(backup['dev-logs'], 'dev-logs'));
|
|
294
|
+
}
|
|
295
|
+
return backup;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
async function restoreTaskFiles(taskFlowDest, backup) {
|
|
299
|
+
if (!backup) return;
|
|
300
|
+
for (const name of ['tasks.input.txt', 'tasks.status.md']) {
|
|
301
|
+
if (backup[name] !== undefined) {
|
|
302
|
+
await fs.writeFile(path.join(taskFlowDest, name), backup[name], 'utf8');
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
if (backup['.internal']) {
|
|
306
|
+
const src = path.join(backup['.internal'], '.internal');
|
|
307
|
+
if (await fs.pathExists(src)) {
|
|
308
|
+
await fs.copy(src, path.join(taskFlowDest, '.internal'), { overwrite: true });
|
|
309
|
+
}
|
|
310
|
+
await fs.remove(backup['.internal']);
|
|
311
|
+
}
|
|
312
|
+
if (backup['dev-logs']) {
|
|
313
|
+
const src = path.join(backup['dev-logs'], 'dev-logs');
|
|
314
|
+
if (await fs.pathExists(src)) {
|
|
315
|
+
await fs.copy(src, path.join(taskFlowDest, 'dev-logs'), { overwrite: true });
|
|
316
|
+
}
|
|
317
|
+
await fs.remove(backup['dev-logs']);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
258
321
|
async function copyTaskFlow(targetPath, options = {}) {
|
|
259
|
-
const isUpdate = options.update || false;
|
|
260
322
|
const isReset = options.reset || false;
|
|
323
|
+
const keepTasks = options.keepTasks === true;
|
|
324
|
+
const taskBackup = options.taskBackup || null;
|
|
261
325
|
const taskFlowSrc = path.join(TEMPLATE_DIR, '.task-flow');
|
|
262
326
|
const taskFlowDest = path.join(targetPath, '.task-flow');
|
|
263
327
|
|
|
@@ -271,11 +335,15 @@ async function copyTaskFlow(targetPath, options = {}) {
|
|
|
271
335
|
path.join(taskFlowDest, 'tasks.status.md'),
|
|
272
336
|
path.join(taskFlowDest, 'install-meta.json'),
|
|
273
337
|
];
|
|
338
|
+
const PRESERVED_KEEP_TASKS = [
|
|
339
|
+
path.join(taskFlowDest, 'tasks.input.txt'),
|
|
340
|
+
path.join(taskFlowDest, 'tasks.status.md'),
|
|
341
|
+
];
|
|
274
342
|
|
|
275
343
|
await fs.copy(taskFlowSrc, taskFlowDest, {
|
|
276
344
|
overwrite: true,
|
|
277
345
|
filter: (src, dest) => {
|
|
278
|
-
if (isReset) {
|
|
346
|
+
if (isReset && !keepTasks) {
|
|
279
347
|
return true;
|
|
280
348
|
}
|
|
281
349
|
|
|
@@ -283,7 +351,11 @@ async function copyTaskFlow(targetPath, options = {}) {
|
|
|
283
351
|
return false;
|
|
284
352
|
}
|
|
285
353
|
|
|
286
|
-
if (
|
|
354
|
+
if (keepTasks && PRESERVED_KEEP_TASKS.includes(dest) && fs.existsSync(dest)) {
|
|
355
|
+
return false;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
if (!isReset && !keepTasks && PRESERVED_ON_INIT.includes(dest) && fs.existsSync(dest)) {
|
|
287
359
|
return false;
|
|
288
360
|
}
|
|
289
361
|
|
|
@@ -291,15 +363,20 @@ async function copyTaskFlow(targetPath, options = {}) {
|
|
|
291
363
|
},
|
|
292
364
|
});
|
|
293
365
|
|
|
366
|
+
if (taskBackup) {
|
|
367
|
+
await restoreTaskFiles(taskFlowDest, taskBackup);
|
|
368
|
+
}
|
|
369
|
+
|
|
294
370
|
await fs.ensureDir(path.join(taskFlowDest, 'contexts'));
|
|
371
|
+
await fs.ensureDir(path.join(taskFlowDest, 'dev-logs'));
|
|
295
372
|
await fs.ensureDir(path.join(taskFlowDest, 'guides', 'reports'));
|
|
296
373
|
await migrateLegacyTaskFlowLayout(taskFlowDest);
|
|
297
374
|
|
|
298
375
|
showSuccess('Task Flow directory');
|
|
299
|
-
if (
|
|
376
|
+
if (keepTasks) {
|
|
377
|
+
showInfo('Kept: tasks.input.txt, tasks.status.md, .internal/, dev-logs/');
|
|
378
|
+
} else if (isReset) {
|
|
300
379
|
showWarning('Reset completed: .task-flow was recreated from scratch');
|
|
301
|
-
} else if (isUpdate) {
|
|
302
|
-
showInfo('Protected: .internal/ (your task data is safe)');
|
|
303
380
|
} else {
|
|
304
381
|
showInfo('Protected on init: .internal/, tasks.input.txt, tasks.status.md');
|
|
305
382
|
}
|
package/lib/profiles.js
CHANGED
|
@@ -68,7 +68,7 @@ async function resolveProfile(targetPath, options = {}) {
|
|
|
68
68
|
return PROFILE_STANDARD;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
async function copyCursorRules(targetPath, templateDir, { profile,
|
|
71
|
+
async function copyCursorRules(targetPath, templateDir, { profile, reset }) {
|
|
72
72
|
const src = path.join(templateDir, '.cursor', 'rules');
|
|
73
73
|
const dest = path.join(targetPath, '.cursor', 'rules');
|
|
74
74
|
|
|
@@ -76,7 +76,7 @@ async function copyCursorRules(targetPath, templateDir, { profile, update, reset
|
|
|
76
76
|
return;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
if (
|
|
79
|
+
if (reset && fs.existsSync(dest)) {
|
|
80
80
|
await fs.emptyDir(dest);
|
|
81
81
|
}
|
|
82
82
|
await fs.ensureDir(dest);
|
package/lib/version.js
CHANGED
|
@@ -97,7 +97,7 @@ async function checkModelVersion(modelName, versionInfo, settingsPath, rl) {
|
|
|
97
97
|
}
|
|
98
98
|
await fs.writeJSON(fullSettingsPath, settings, { spaces: 2 });
|
|
99
99
|
console.log(chalk.green(` ✅ ${modelName} updated to ${versionInfo.latest}`));
|
|
100
|
-
console.log(chalk.cyan(' (Repository template updated - run init/
|
|
100
|
+
console.log(chalk.cyan(' (Repository template updated - run init/reset on projects to apply)'));
|
|
101
101
|
} else {
|
|
102
102
|
console.log(chalk.cyan(' Skipped update'));
|
|
103
103
|
}
|