@jahanxu/code-flow 0.2.1 → 0.2.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jahanxu/code-flow",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "license": "UNLICENSED",
5
5
  "bin": {
6
6
  "code-flow": "src/cli.js"
@@ -0,0 +1,53 @@
1
+ # cf-task:archive
2
+
3
+ 归档已完成的整个 task 文件。
4
+
5
+ ## 输入
6
+
7
+ - `/cf-task:archive <file>` — 归档指定的 task 文件
8
+
9
+ 其中 `<file>` 可省略路径前缀和 `.md` 后缀。
10
+
11
+ ## 执行步骤
12
+
13
+ ### 1. 完成度检查
14
+
15
+ 1. 用 Read 读取 `.code-flow/tasks/<file>.md`
16
+ 2. 提取所有 `## TASK-xxx` 段落的 Status
17
+ 3. 检查是否所有子任务均为 `done`
18
+
19
+ 若有未完成子任务,拒绝归档并输出:
20
+
21
+ ```
22
+ 无法归档: 以下子任务未完成
23
+
24
+ - TASK-002: in-progress (进度 1/4)
25
+ - TASK-004: blocked ([BLOCKED] 等待 SDK)
26
+
27
+ 请先完成所有子任务后再归档。
28
+ 当前完成度: 2/4 (50%)
29
+ ```
30
+
31
+ ### 2. 执行归档
32
+
33
+ 所有子任务已完成:
34
+
35
+ 1. 用 Bash 创建归档目录并移动文件:
36
+ ```bash
37
+ mkdir -p .code-flow/tasks/archived
38
+ mv .code-flow/tasks/<file>.md .code-flow/tasks/archived/
39
+ ```
40
+ 2. 输出归档摘要
41
+
42
+ ### 3. 归档摘要
43
+
44
+ ```
45
+ 已归档: <file>.md → .code-flow/tasks/archived/<file>.md
46
+
47
+ 摘要:
48
+ - 来源: docs/xxx设计说明书.md
49
+ - 子任务数: N 个
50
+ - 创建日期: 2026-03-15
51
+ - 归档日期: 2026-03-20
52
+ - 历时: 5 天
53
+ ```
@@ -0,0 +1,28 @@
1
+ # cf-task:block
2
+
3
+ 标记子任务为阻塞状态。
4
+
5
+ ## 输入
6
+
7
+ - `/cf-task:block <file> TASK-001 "阻塞原因"`
8
+
9
+ 其中 `<file>` 可省略路径前缀和 `.md` 后缀。
10
+
11
+ ## 执行步骤
12
+
13
+ 1. 用 Read 读取 `.code-flow/tasks/<file>.md`
14
+ 2. 定位 `## TASK-001` 段落,检查当前 Status:
15
+ - `done` → 拒绝:`TASK-001 已完成,无法标记阻塞`
16
+ - `blocked` → 提示:`TASK-001 已处于 blocked 状态`,仍追加新的阻塞原因
17
+ - `draft` / `in-progress` → 继续
18
+ 3. 用 Edit 更新 Status 为 `blocked`
19
+ 4. 在 `### Notes` 追加:`- [BLOCKED] <阻塞原因>`
20
+ 5. 在 `### Log` 追加:`- [<当前日期>] blocked (<阻塞原因>)`
21
+ 6. 更新文件头 `Updated` 日期
22
+ 7. 输出确认:`TASK-001 已标记为 blocked: <原因>`
23
+
24
+ ## 解除阻塞
25
+
26
+ 阻塞的解除不通过本命令操作,而是:
27
+ - 如果是 Notes 导致的阻塞 → 用 `/cf-task:note resolve` 解决批注后自动解除
28
+ - 如果是 `[BLOCKED]` 标记 → 用户手动编辑文件移除 `[BLOCKED]` 条目,或用 `/cf-task:start` 重新启动(需所有阻塞条件清除)
@@ -0,0 +1,71 @@
1
+ # cf-task:graph
2
+
3
+ 可视化子任务的依赖关系 DAG,识别可并行执行的任务组。
4
+
5
+ ## 输入
6
+
7
+ - `/cf-task:graph <file>` — 显示指定文件的依赖图
8
+ - `/cf-task:graph` — 显示所有活跃 task 文件的依赖图
9
+
10
+ 其中 `<file>` 可省略路径前缀和 `.md` 后缀。
11
+
12
+ ## 执行步骤
13
+
14
+ ### 1. 读取任务数据
15
+
16
+ - 指定文件:Read `.code-flow/tasks/<file>.md`
17
+ - 全部文件:Glob `.code-flow/tasks/*.md`(排除 `archived/` 目录),逐个 Read
18
+
19
+ 从每个 `## TASK-xxx` 段落提取:ID、标题、Status、Depends。
20
+
21
+ ### 2. 构建依赖 DAG
22
+
23
+ 按依赖关系构建有向无环图。检测循环依赖,若存在则报错。
24
+
25
+ ### 3. 输出可视化
26
+
27
+ 用 ASCII art 渲染 DAG,格式示例:
28
+
29
+ ```
30
+ 依赖关系图: auth-module
31
+
32
+ Layer 0 (无依赖):
33
+ ┌──────────────────────┐ ┌──────────────────────┐
34
+ │ TASK-001 [draft] │ │ TASK-003 [draft] │
35
+ │ 用户模型定义 │ │ JWT 工具函数 │
36
+ └──────────┬───────────┘ └──────────┬───────────┘
37
+ │ │
38
+ ▼ │
39
+ Layer 1: │ │
40
+ ┌──────────┴───────────┐ │
41
+ │ TASK-002 [draft] │◄─────────────┘
42
+ │ 注册接口实现 │
43
+ └──────────┬───────────┘
44
+
45
+
46
+ Layer 2:
47
+ ┌──────────┴───────────┐
48
+ │ TASK-004 [draft] │
49
+ │ 登录接口实现 │
50
+ └──────────────────────┘
51
+
52
+ 可并行执行组:
53
+ - 组 1: TASK-001, TASK-003 (无依赖,可同时开始)
54
+ - 组 2: TASK-002 (需等待组 1 完成)
55
+ - 组 3: TASK-004 (需等待组 2 完成)
56
+
57
+ 建议执行顺序: TASK-001 → TASK-003 → TASK-002 → TASK-004
58
+ 关键路径: TASK-001 → TASK-002 → TASK-004
59
+ ```
60
+
61
+ ### 4. 状态标注
62
+
63
+ 按子任务状态标注:
64
+ - `[draft]` — 待启动
65
+ - `[in-progress]` — 进行中
66
+ - `[done]` — 已完成
67
+ - `[blocked]` — 被阻塞(附原因)
68
+
69
+ ### 5. 多文件模式
70
+
71
+ 当显示所有文件时,按文件分组输出,每个文件一个独立的 DAG。
@@ -0,0 +1,40 @@
1
+ # cf-task:note
2
+
3
+ 为子任务添加审阅批注或标记批注为已解决。
4
+
5
+ ## 输入
6
+
7
+ - `/cf-task:note <file> TASK-001 "批注内容"` — 添加新批注
8
+ - `/cf-task:note <file> TASK-001 resolve NOTE-1` — 标记批注为已解决
9
+ - `/cf-task:note <file> TASK-001 resolve all` — 标记所有批注为已解决
10
+
11
+ 其中 `<file>` 可省略路径前缀和 `.md` 后缀。
12
+
13
+ ## 添加批注
14
+
15
+ ### 执行步骤
16
+
17
+ 1. 用 Read 读取 `.code-flow/tasks/<file>.md`
18
+ 2. 定位 `## TASK-001` 段落下的 `### Notes` 区域
19
+ 3. 扫描已有 `[NOTE-n]`,计算下一个编号
20
+ 4. 用 Edit 在 `### Notes` 下追加:`- [NOTE-<n>] <批注内容>`
21
+ 5. 如果子任务 Status 为 `in-progress`,自动用 Edit 改为 `blocked`,并在 `### Log` 追加:`- [<当前日期>] blocked (unresolved note)`
22
+ 6. 更新文件头 `Updated` 日期
23
+ 7. 输出确认:`已添加 [NOTE-<n>],TASK-001 状态: blocked`
24
+
25
+ ## 解决批注
26
+
27
+ ### 执行步骤
28
+
29
+ 1. 用 Read 读取任务文件
30
+ 2. 定位指定的 `[NOTE-n]` 批注
31
+ 3. 用 Edit 将 `[NOTE-n]` 改为 `[NOTE-n] [RESOLVED]`
32
+ 4. 检查是否还有未解决的 Notes:
33
+ - 全部解决 + 状态为 blocked → 自动恢复为 `draft`(如果之前是 draft 被阻塞)或 `in-progress`
34
+ - 在 `### Log` 追加:`- [<当前日期>] unblocked (notes resolved)`
35
+ 5. 更新文件头 `Updated` 日期
36
+ 6. 输出确认
37
+
38
+ ## resolve all 模式
39
+
40
+ 批量标记所有未解决的 Notes 为 `[RESOLVED]`,同时检查是否可以自动解除 blocked 状态。
@@ -0,0 +1,122 @@
1
+ # cf-task:plan
2
+
3
+ 从设计文档拆解需求,生成结构化任务文件。
4
+
5
+ ## 输入
6
+
7
+ - `/cf-task:plan <设计文档路径>` — 指定文档路径
8
+ - `/cf-task:plan` — 交互式选择(从 `docs/` 目录列出候选)
9
+
10
+ ## 执行步骤
11
+
12
+ ### 1. 获取设计文档
13
+
14
+ 如果用户提供了路径,直接用 Read 读取。
15
+
16
+ 如果未提供路径:
17
+ 1. 用 Glob 搜索 `docs/**/*.md` 列出所有文档
18
+ 2. 展示列表,让用户选择目标文档
19
+ 3. Read 读取选中的文档
20
+
21
+ ### 2. 分析文档,拆解子任务
22
+
23
+ 阅读设计文档内容,按以下原则拆解:
24
+
25
+ **拆解粒度**:
26
+ - 每个子任务应是一个可独立编码和验证的原子单元
27
+ - 一个子任务对应 1-3 个文件的修改
28
+ - 预估编码时间 15-60 分钟
29
+
30
+ **提取内容**:
31
+ - 功能需求 → 子任务标题 + 描述
32
+ - 实现要点 → Checklist 条目
33
+ - 模块依赖 → Depends 字段
34
+ - 紧急程度 → Priority(P0 核心功能 / P1 重要功能 / P2 优化项)
35
+
36
+ ### 3. 生成任务文件方案
37
+
38
+ 将拆解结果按以下格式组织,展示给用户确认:
39
+
40
+ ```markdown
41
+ # Tasks: <功能/模块名称>
42
+
43
+ - **Source**: <设计文档路径>
44
+ - **Created**: <当前日期>
45
+ - **Updated**: <当前日期>
46
+
47
+ ---
48
+
49
+ ## TASK-001: <子任务标题>
50
+
51
+ - **Status**: draft
52
+ - **Priority**: P0
53
+ - **Depends**:
54
+
55
+ ### Description
56
+ <从设计文档提取的需求描述>
57
+
58
+ ### Checklist
59
+ - [ ] <具体实现步骤1>
60
+ - [ ] <具体实现步骤2>
61
+ - [ ] <编写测试>
62
+
63
+ ### Notes
64
+
65
+ ### Log
66
+ - [<当前日期>] created (draft)
67
+
68
+ ---
69
+
70
+ ## TASK-002: <子任务标题>
71
+ ...
72
+ ```
73
+
74
+ **展示格式**(供用户审阅):
75
+
76
+ ```
77
+ 拆解结果(共 N 个子任务):
78
+
79
+ TASK-001: <标题> [P0]
80
+ 描述: ...
81
+ Checklist: N 项
82
+ 依赖: 无
83
+
84
+ TASK-002: <标题> [P1]
85
+ 描述: ...
86
+ Checklist: N 项
87
+ 依赖: TASK-001
88
+
89
+ 确认写入?可以调整:
90
+ - 修改某个子任务的内容
91
+ - 删除不需要的子任务
92
+ - 合并过于细碎的子任务
93
+ - 调整依赖关系
94
+ ```
95
+
96
+ 等待用户确认或调整。
97
+
98
+ ### 4. 写入文件
99
+
100
+ 用户确认后:
101
+ 1. 文件名取模块/功能名(kebab-case),如 `auth-module.md`、`payment-api.md`
102
+ 2. 用 Write 写入 `.code-flow/tasks/<name>.md`
103
+
104
+ ### 5. 输出摘要
105
+
106
+ ```
107
+ 已生成任务文件: .code-flow/tasks/<name>.md
108
+ - 子任务数: N
109
+ - P0: x 个, P1: y 个, P2: z 个
110
+ - 依赖链深度: N 层
111
+
112
+ 建议执行顺序:
113
+ 1. TASK-001 (无依赖)
114
+ 2. TASK-003 (无依赖) ← 可与 TASK-001 并行
115
+ 3. TASK-002 (依赖: TASK-001)
116
+ ...
117
+
118
+ 下一步:
119
+ - 审阅任务: 直接阅读 .code-flow/tasks/<name>.md
120
+ - 添加批注: /cf-task:note <name> TASK-001 "批注内容"
121
+ - 开始编码: /cf-task:start <name>
122
+ ```
@@ -0,0 +1,97 @@
1
+ # cf-task:start
2
+
3
+ 激活子任务并开始编码。支持单任务模式和整文件模式。
4
+
5
+ ## 输入
6
+
7
+ - `/cf-task:start <file> TASK-001` — 激活指定文件中的单个子任务
8
+ - `/cf-task:start <file>` — 激活文件内所有可执行的 draft 子任务
9
+
10
+ 其中 `<file>` 为 `.code-flow/tasks/` 下的文件名,可省略路径前缀和 `.md` 后缀。
11
+
12
+ 示例:
13
+ - `/cf-task:start auth-module TASK-002`
14
+ - `/cf-task:start auth-module`
15
+
16
+ ## 单任务模式
17
+
18
+ ### 1. 前置检查
19
+
20
+ 用 Read 读取 `.code-flow/tasks/<file>.md`,定位 `## TASK-xxx` 段落:
21
+
22
+ **状态检查**:Status 必须为 `draft`。若为其他状态:
23
+ - `in-progress` → 提示"任务已在进行中,继续编码"(不阻塞,直接跳到步骤 2)
24
+ - `done` → 提示"任务已完成",结束
25
+ - `blocked` → 提示"任务被阻塞",列出 Notes 中的阻塞原因,结束
26
+
27
+ **Notes 检查**:扫描 `### Notes` 区域
28
+ - 如果存在 `[NOTE-n]` 格式的批注且未标记 `[RESOLVED]`,则拒绝启动
29
+ - 输出:`前置检查失败:以下 Notes 未解决\n- [NOTE-1] xxx\n- [NOTE-2] xxx\n请先解决后重试,或用 /cf-task:note 标记为 [RESOLVED]`
30
+
31
+ **依赖检查**:读取 `Depends` 字段
32
+ - 对每个依赖的 TASK-ID,在同文件中查找其 Status
33
+ - 所有依赖必须为 `done`
34
+ - 未满足 → 输出:`前置检查失败:以下依赖未完成\n- TASK-001: in-progress\n- TASK-003: draft`
35
+
36
+ ### 2. 激活并编码
37
+
38
+ 前置检查通过后:
39
+ 1. 用 Edit 更新子任务 Status 为 `in-progress`
40
+ 2. 在 `### Log` 追加:`- [<当前日期>] started (in-progress)`
41
+ 3. 更新文件头 `Updated` 日期
42
+ 4. 读取 `### Checklist`,逐项执行编码工作
43
+ 5. 每完成一个 checklist 项 → 用 Edit 将 `- [ ]` 改为 `- [x]`
44
+
45
+ ### 3. 自动完成
46
+
47
+ 当所有 checklist 项都勾选为 `[x]` 后:
48
+ 1. 用 Edit 更新 Status 为 `done`
49
+ 2. 在 `### Log` 追加:`- [<当前日期>] completed (done)`
50
+ 3. 更新文件头 `Updated` 日期
51
+ 4. 输出:`TASK-xxx 已完成 ✓`
52
+
53
+ ## 整文件模式
54
+
55
+ ### 1. 扫描所有子任务
56
+
57
+ 用 Read 读取整个 task 文件,提取所有 `## TASK-xxx` 段落的 ID、Status、Depends。
58
+
59
+ ### 2. 构建执行计划
60
+
61
+ 按依赖关系拓扑排序:
62
+ 1. 筛选所有 `draft` 状态的子任务
63
+ 2. 按依赖关系排序:先无依赖的,再逐层解锁
64
+ 3. 逐个检查 Notes 前置条件
65
+
66
+ 输出执行计划:
67
+ ```
68
+ 执行计划(共 N 个可激活子任务):
69
+
70
+ 批次 1(可并行):
71
+ - TASK-001: xxx
72
+ - TASK-003: xxx
73
+
74
+ 批次 2(依赖批次 1):
75
+ - TASK-002: xxx (依赖 TASK-001)
76
+
77
+ 跳过(前置条件未满足):
78
+ - TASK-004: Notes 未解决 [NOTE-1]
79
+ - TASK-005: 依赖 TASK-004 (blocked)
80
+
81
+ 开始执行...
82
+ ```
83
+
84
+ ### 3. 按序执行
85
+
86
+ 对每个可激活的子任务,执行单任务模式的步骤 2-3。
87
+
88
+ 完成一个子任务后,检查是否解锁了新的子任务(依赖已满足),如果是则继续执行。
89
+
90
+ ### 4. 输出摘要
91
+
92
+ ```
93
+ 执行完成:
94
+ - 完成: TASK-001, TASK-003, TASK-002
95
+ - 跳过: TASK-004 (Notes 未解决)
96
+ - 剩余 draft: 1 个
97
+ ```
@@ -0,0 +1,59 @@
1
+ # cf-task:status
2
+
3
+ 显示任务状态总览。
4
+
5
+ ## 输入
6
+
7
+ - `/cf-task:status` — 显示所有活跃 task 文件的状态
8
+ - `/cf-task:status <file>` — 显示指定文件的详细状态
9
+
10
+ ## 执行步骤
11
+
12
+ ### 1. 读取任务数据
13
+
14
+ - 用 Glob 搜索 `.code-flow/tasks/*.md`(排除 `archived/` 目录)
15
+ - 逐个 Read,提取每个 `## TASK-xxx` 的:ID、标题、Status、Priority、Depends、Checklist 完成度
16
+
17
+ ### 2. 输出总览表格
18
+
19
+ ```
20
+ 任务状态总览
21
+ ============
22
+
23
+ 📋 auth-module.md (来源: docs/auth-design.md)
24
+ ┌──────────┬──────────────────┬────────────┬──────┬──────────────┐
25
+ │ ID │ 标题 │ 状态 │ 优先 │ 进度 │
26
+ ├──────────┼──────────────────┼────────────┼──────┼──────────────┤
27
+ │ TASK-001 │ 用户模型定义 │ done │ P0 │ 3/3 [100%] │
28
+ │ TASK-002 │ 注册接口实现 │ in-progress│ P0 │ 1/4 [25%] │
29
+ │ TASK-003 │ JWT 工具函数 │ draft │ P1 │ 0/2 [0%] │
30
+ │ TASK-004 │ 登录接口实现 │ blocked │ P0 │ 0/3 [0%] │
31
+ └──────────┴──────────────────┴────────────┴──────┴──────────────┘
32
+ 汇总: 4 个子任务 | done: 1 | in-progress: 1 | draft: 1 | blocked: 1
33
+ 整体完成度: 25%
34
+
35
+ 📋 payment-api.md (来源: docs/payment-design.md)
36
+ ...
37
+
38
+ ═══════════════════════════
39
+ 全局汇总: 2 个文件, 8 个子任务
40
+ done: 3 | in-progress: 2 | draft: 2 | blocked: 1
41
+ ```
42
+
43
+ ### 3. 阻塞详情
44
+
45
+ 如果存在 blocked 子任务,额外输出:
46
+
47
+ ```
48
+ ⚠ 阻塞任务:
49
+ - auth-module/TASK-004: [BLOCKED] 等待第三方 SDK 文档
50
+ - auth-module/TASK-004: [NOTE-2] 接口签名需与前端对齐
51
+ ```
52
+
53
+ ### 4. 指定文件模式
54
+
55
+ 当指定 `<file>` 时,输出该文件的详细信息,包括:
56
+ - 完整的子任务表格
57
+ - 每个子任务的 Checklist 明细
58
+ - 未解决的 Notes 列表
59
+ - 依赖关系简图
File without changes