clawt 2.10.0 → 2.11.0

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 (57) hide show
  1. package/.claude/agent-memory/docs-sync-updater/MEMORY.md +14 -7
  2. package/.claude/agents/docs-sync-updater.md +11 -0
  3. package/README.md +80 -284
  4. package/dist/index.js +839 -307
  5. package/dist/postinstall.js +272 -0
  6. package/docs/spec.md +84 -22
  7. package/package.json +1 -1
  8. package/src/commands/remove.ts +21 -28
  9. package/src/commands/run.ts +68 -206
  10. package/src/constants/config.ts +4 -0
  11. package/src/constants/index.ts +11 -1
  12. package/src/constants/messages/common.ts +41 -0
  13. package/src/constants/messages/config.ts +5 -0
  14. package/src/constants/messages/create.ts +5 -0
  15. package/src/constants/messages/index.ts +29 -0
  16. package/src/constants/messages/merge.ts +42 -0
  17. package/src/constants/messages/remove.ts +15 -0
  18. package/src/constants/messages/reset.ts +7 -0
  19. package/src/constants/messages/resume.ts +12 -0
  20. package/src/constants/messages/run.ts +46 -0
  21. package/src/constants/messages/status.ts +25 -0
  22. package/src/constants/messages/sync.ts +24 -0
  23. package/src/constants/messages/validate.ts +25 -0
  24. package/src/constants/progress.ts +39 -0
  25. package/src/types/command.ts +4 -0
  26. package/src/types/config.ts +2 -0
  27. package/src/types/index.ts +1 -0
  28. package/src/types/taskFile.ts +13 -0
  29. package/src/utils/formatter.ts +16 -0
  30. package/src/utils/index.ts +8 -4
  31. package/src/utils/progress-render.ts +90 -0
  32. package/src/utils/progress.ts +213 -0
  33. package/src/utils/task-executor.ts +365 -0
  34. package/src/utils/task-file.ts +87 -0
  35. package/src/utils/worktree-matcher.ts +92 -0
  36. package/src/utils/worktree.ts +27 -0
  37. package/tests/unit/commands/config.test.ts +110 -0
  38. package/tests/unit/commands/create.test.ts +115 -0
  39. package/tests/unit/commands/list.test.ts +118 -0
  40. package/tests/unit/commands/merge.test.ts +323 -0
  41. package/tests/unit/commands/remove.test.ts +240 -0
  42. package/tests/unit/commands/reset.test.ts +124 -0
  43. package/tests/unit/commands/resume.test.ts +91 -0
  44. package/tests/unit/commands/run.test.ts +456 -0
  45. package/tests/unit/commands/status.test.ts +214 -0
  46. package/tests/unit/commands/sync.test.ts +208 -0
  47. package/tests/unit/commands/validate.test.ts +382 -0
  48. package/tests/unit/constants/config.test.ts +1 -0
  49. package/tests/unit/constants/messages.test.ts +1 -1
  50. package/tests/unit/utils/config.test.ts +21 -1
  51. package/tests/unit/utils/formatter.test.ts +70 -1
  52. package/tests/unit/utils/git.test.ts +44 -0
  53. package/tests/unit/utils/progress.test.ts +255 -0
  54. package/tests/unit/utils/task-file.test.ts +236 -0
  55. package/tests/unit/utils/validate-snapshot.test.ts +25 -0
  56. package/tests/unit/utils/worktree-matcher.test.ts +81 -5
  57. package/tests/unit/utils/worktree.test.ts +26 -1
@@ -31,7 +31,7 @@
31
31
  - merge 成功消息根据 `autoPullPush` 配置动态显示推送状态
32
32
  - run 的中断清理在所有子进程退出后执行
33
33
  - run 交互式模式在创建 worktree 前检测分支是否已存在,已存在则提示使用 resume
34
- - remove 命令删除 worktree 时自动清理对应快照,`--all` 模式额外清理项目快照目录
34
+ - remove 命令通过 `resolveTargetWorktrees` 支持模糊匹配+多选(-b 可选),删除 worktree 时自动清理对应快照,`--all` 模式额外清理项目快照目录
35
35
  - remove 批量操作时收集错误继续处理,最后汇总报告
36
36
  - 文档中文风格,技术术语保留英文(worktree, merge, branch, SIGINT 等)
37
37
  - cleanupWorktrees 是 merge 和 run 共用的公共清理函数(在 src/utils/worktree.ts)
@@ -60,7 +60,11 @@
60
60
 
61
61
  run 命令有两种模式(自 claudeCodeCommand 特性后):
62
62
  - 不传 `--tasks`:交互式界面模式(单 worktree + `launchInteractiveClaude` + spawnSync)
63
- - 传 `--tasks`:并行任务模式(多 worktree + `executeClaudeTask` + spawnProcess)
63
+ - 传 `--tasks`:并行任务模式(多 worktree + `executeBatchTasks` + spawnProcess)
64
+ - 批量任务执行逻辑从 `src/commands/run.ts` 提取到 `src/utils/task-executor.ts`(公共函数 `executeBatchTasks`)
65
+ - 进度面板渲染逻辑从 `src/utils/progress.ts` 拆分出 `src/utils/progress-render.ts`(纯渲染函数 + TaskProgress 类型)
66
+ - `formatDuration` 从 `src/utils/progress.ts` 移至 `src/utils/formatter.ts`
67
+ - 进度面板每个任务行末尾显示 worktree 路径(终端可点击跳转)
64
68
 
65
69
  ## 命令清单(11 个)
66
70
 
@@ -70,11 +74,14 @@ Notes:
70
74
  - resume 和 run(交互式模式)共用 `launchInteractiveClaude()`,该函数从 run.ts 提取到 src/utils/claude.ts
71
75
  - `claudeCodeCommand` 配置项同时影响 run 交互式模式和 resume 命令
72
76
  - reset 命令与 validate --clean 的区别:reset 不删除快照文件,validate --clean 会删除快照
73
- - `resolveTargetWorktree()` 是 resume、validate、merge 和 sync 共用的分支匹配函数(在 src/utils/worktree-matcher.ts)
74
- - `WorktreeResolveMessages` 接口实现命令间消息解耦,每个命令传入各自的提示文案
75
- - resume 的消息常量在 `MESSAGES.RESUME_*`,validate 的消息常量在 `MESSAGES.VALIDATE_*`,merge 的消息常量在 `MESSAGES.MERGE_*`,sync 的消息常量在 `MESSAGES.SYNC_*`,status 的消息常量在 `MESSAGES.STATUS_*`
76
- - resume、validate、merge 和 sync 的 `-b` 参数均为可选,匹配策略一致:精确→模糊(子串,大小写不敏感)→交互选择
77
- - validate 的交互式选择和 resume 使用同一个 `promptSelectBranch()`(Enquirer.Select)
77
+ - `resolveTargetWorktree()` 是 resume、validate、merge 和 sync 共用的单选分支匹配函数(在 src/utils/worktree-matcher.ts)
78
+ - `resolveTargetWorktrees()` 是多选分支匹配函数(在 src/utils/worktree-matcher.ts),目前被 remove 命令使用
79
+ - `WorktreeResolveMessages` 接口用于单选命令的消息解耦,`WorktreeMultiResolveMessages` 接口用于多选命令的消息解耦
80
+ - `promptSelectBranch()`(Enquirer.Select)用于单选交互,`promptMultiSelectBranches()`(Enquirer.MultiSelect)用于多选交互
81
+ - resume 的消息常量在 `MESSAGES.RESUME_*`,validate 的消息常量在 `MESSAGES.VALIDATE_*`,merge 的消息常量在 `MESSAGES.MERGE_*`,sync 的消息常量在 `MESSAGES.SYNC_*`,status 的消息常量在 `MESSAGES.STATUS_*`,remove 的 fuzzy search 消息在 `MESSAGES.REMOVE_*`
82
+ - resume、validate、merge 和 sync 的 `-b` 参数均为可选,匹配策略一致:精确→模糊(子串,大小写不敏感)→交互单选
83
+ - remove 的 `-b` 参数可选,匹配策略:精确→模糊→交互多选;不传 `-b` 时列出所有分支供多选
84
+ - validate 的交互式选择和 resume 使用同一个 `promptSelectBranch()`(Enquirer.Select);remove 使用 `promptMultiSelectBranches()`(Enquirer.MultiSelect)
78
85
 
79
86
  ## validate 快照机制
80
87
 
@@ -65,6 +65,17 @@ memory: project
65
65
  4. **中文优先**:新增的文档内容使用中文,除非原文档使用英文且保持一致性更好。
66
66
  5. **代码示例同步**:如果文档中有代码示例受到变更影响,必须同步更新。
67
67
 
68
+ ## README.md 编写规则
69
+
70
+ README.md 的定位是**面向新用户的快速上手指南**,必须严格遵守以下规则:
71
+
72
+ 1. **只写"怎么用",不写"怎么实现"**:不涉及内部原理、实现细节、技术架构等内容。用户只需要知道命令怎么敲、参数怎么传。
73
+ 2. **保持简洁**:每个命令只展示最常用的用法和必要参数,避免罗列所有边界情况和细节行为(如分支匹配策略的内部逻辑、增量模式的 git 底层实现、squash 流程等)。
74
+ 3. **结构固定**:README.md 应保持以下结构顺序:安装 → 快速开始 → 命令一览 → 配置 → 全局选项 → 日志。不要添加"开发"、"测试"、"技术栈"等面向开发者的章节。
75
+ 4. **不包含开发相关内容**:测试命令、构建流程、技术选型、目录结构等开发者信息放在 `docs/spec.md` 中,不放在 README.md。
76
+ 5. **命令说明精简**:每个命令给出简短描述 + 核心用法示例即可,参数表只在确实需要时才添加,且只列必要参数。
77
+ 6. **详细的技术规格、设计原理、边界情况处理等内容应更新到 `docs/spec.md`**,而非 README.md。
78
+
68
79
  ## 质量检查
69
80
 
70
81
  在完成更新前,自我检查:
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Clawt
2
2
 
3
- 基于本地 Git 项目创建多个隔离的 worktree 环境,并行执行多个 Claude Code Agent 任务,所有 Agent 的代码修改互不干扰。
3
+ 基于 Git Worktree 并行执行多个 Claude Code Agent 任务,所有 Agent 的代码修改互不干扰。
4
4
 
5
5
  ## 安装
6
6
 
@@ -12,362 +12,158 @@ pnpm add -g clawt
12
12
  npm i -g clawt
13
13
  ```
14
14
 
15
- **环境要求:**
15
+ **环境要求:** Node.js >= 18 · Git >= 2.15 · Claude Code CLI
16
16
 
17
- - Node.js >= 18
18
- - Git >= 2.15
19
- - Claude Code CLI(`clawt run` 和 `clawt resume` 需要)
20
-
21
- ## 使用前提
22
-
23
- 所有命令**必须在主 worktree 的仓库根目录**下执行(即包含 `.git` 目录的原始仓库)。在子 worktree 或子目录中执行会被拒绝。
24
-
25
- ## 全局选项
26
-
27
- | 选项 | 说明 |
28
- | ---- | ---- |
29
- | `--debug` | 输出详细调试信息到终端,实时显示带颜色和时间戳的日志 |
30
-
31
- `--debug` 可与任意子命令组合使用:
32
-
33
- ```bash
34
- clawt run -b feature-login --debug
35
- clawt validate -b scheme --debug
36
- ```
37
-
38
- ## 命令
39
-
40
- ### `clawt create` — 批量创建 worktree
17
+ ## 快速开始
41
18
 
42
19
  ```bash
43
- clawt create -b <branchName> [-n <count>]
44
- ```
45
-
46
- | 参数 | 必填 | 说明 |
47
- | ---- | ---- | ---- |
48
- | `-b` | 是 | 分支名 |
49
- | `-n` | 否 | 创建数量,默认 `1` |
50
-
51
- 创建 1 个时,分支名即为 `<branchName>`;创建多个时,分支名会自动加后缀编号:`<branchName>-1`、`<branchName>-2`……
52
-
53
- ```bash
54
- # 创建 1 个 worktree
55
- clawt create -b feature-login
56
-
57
- # 创建 3 个 worktree
58
- clawt create -b feature-scheme -n 3
59
- ```
60
-
61
- ### `clawt run` — 批量创建 worktree + 并行执行 Claude Code 任务
62
-
63
- ```bash
64
- # 多任务并行
65
- clawt run -b <branchName> --tasks <task1> --tasks <task2> --tasks <task3>
66
-
67
- # 单 worktree + Claude Code 交互式界面
68
- clawt run -b <branchName>
69
- ```
70
-
71
- | 参数 | 必填 | 说明 |
72
- | ---- | ---- | ---- |
73
- | `-b` | 是 | 分支名 |
74
- | `--tasks` | 否 | 任务描述,可多次指定,任务数量即 worktree 数量。不传则在 worktree 中打开 Claude Code 交互式界面 |
75
-
76
- 每个 `--tasks` 对应一个独立的 worktree,Claude Code 会在各自隔离的环境中并行执行任务。任务完成后会实时通知结果,全部完成后输出汇总信息。
77
-
78
- 不传 `--tasks` 时会创建单个 worktree,并在其中直接启动 Claude Code 交互式界面(通过 `spawnSync` + `inherit stdio`),让用户与 Claude Code 直接交互。启动命令由配置项 `claudeCodeCommand` 指定(默认 `claude`)。如果指定的分支已存在,会提示使用 `clawt resume -b <branchName>` 恢复会话。
79
-
80
- 任务执行过程中按 Ctrl+C 可中断所有任务。中断后会根据配置自动清理或询问是否清理本次创建的 worktree 和分支(`autoDeleteBranch: true` 时自动清理)。
81
-
82
- ```bash
83
- # 多任务并行
84
- clawt run -b feature-scheme \
20
+ # 1. 在项目根目录(包含 .git 的目录)下执行
21
+ # 2. 并行执行 3 个任务,每个任务在独立的 worktree 中运行
22
+ clawt run -b feature-auth \
85
23
  --tasks "实现用户登录功能" \
86
24
  --tasks "实现用户注册功能" \
87
25
  --tasks "实现密码重置功能"
88
26
 
89
- # worktree,打开 Claude Code 交互式界面
90
- clawt run -b feature-login
91
- ```
92
-
93
- ### `clawt resume` — 在已有 worktree 中恢复 Claude Code 会话
94
-
95
- ```bash
96
- # 指定分支名(支持模糊匹配)
97
- clawt resume -b <branchName>
98
-
99
- # 不指定分支名(列出所有分支供选择)
100
- clawt resume
101
- ```
102
-
103
- | 参数 | 必填 | 说明 |
104
- | ---- | ---- | ---- |
105
- | `-b` | 否 | 要恢复的分支名(支持模糊匹配,不传则列出所有分支供选择) |
106
-
107
- 在之前通过 `clawt run` 或 `clawt create` 创建的 worktree 中重新打开 Claude Code 交互式界面,继续之前的工作。启动命令由配置项 `claudeCodeCommand` 指定(默认 `claude`)。
108
-
109
- **分支匹配策略:**
110
- - 传 `-b` 时,优先精确匹配分支名;未精确匹配则进行模糊匹配(子串匹配,大小写不敏感);模糊匹配到多个时通过交互列表选择;无匹配时报错并列出所有可用分支
111
- - 不传 `-b` 时,列出当前项目所有可用分支供交互式选择(仅 1 个时自动使用)
112
-
113
- ```bash
114
- # 精确匹配
115
- clawt resume -b feature-login
116
-
117
- # 模糊匹配(匹配包含 "login" 的分支)
118
- clawt resume -b login
119
-
120
- # 交互式选择所有分支
121
- clawt resume
122
- ```
27
+ # 3. 查看所有 worktree 状态
28
+ clawt status
123
29
 
124
- ### `clawt validate` — 在主 worktree 验证分支变更
30
+ # 4. 验证某个分支的变更(在主 worktree 中测试)
31
+ clawt validate -b feature-auth-1
125
32
 
126
- ```bash
127
- # 指定分支名(支持模糊匹配)
128
- clawt validate -b <branchName> [--clean]
33
+ # 5. 确认无误后合并到主分支
34
+ clawt merge -b feature-auth-1 -m "feat: 实现用户登录功能"
129
35
 
130
- # 不指定分支名(列出所有分支供选择)
131
- clawt validate [--clean]
36
+ # 6. 清理不需要的 worktree
37
+ clawt remove -b feature-auth
132
38
  ```
133
39
 
134
- | 参数 | 必填 | 说明 |
135
- | ---- | ---- | ---- |
136
- | `-b` | 否 | 要验证的分支名(支持模糊匹配,不传则列出所有分支供选择) |
137
- | `--clean` | 否 | 清理 validate 状态(重置主 worktree 并删除快照) |
138
-
139
- 将目标 worktree 的变更通过 `git diff`(三点 diff)迁移到主 worktree,方便在主 worktree 中直接测试,无需重新安装依赖。同时检测未提交修改和已提交 commit,确保所有变更都能被捕获。
40
+ ## 命令一览
140
41
 
141
- **分支匹配策略:**
142
- - 传 `-b` 时,优先精确匹配分支名;未精确匹配则进行模糊匹配(子串匹配,大小写不敏感);模糊匹配到多个时通过交互列表选择;无匹配时报错并列出所有可用分支
143
- - 不传 `-b` 时,列出当前项目所有可用分支供交互式选择(仅 1 个时自动使用)
42
+ > 所有命令必须在**主 worktree 的仓库根目录**下执行。`-b` 参数支持模糊匹配。
144
43
 
145
- 支持增量模式:首次 validate 后会自动保存快照(通过 `git write-tree` 将变更存储为 git tree 对象,并记录当前 HEAD commit hash),再次 validate 同一分支时会将上次快照载入暂存区、最新变更保留在工作目录,用户可通过 `git diff` 查看两次 validate 之间的增量差异。当主分支 HEAD 发生变化(如合并了其他分支)时,会自动将旧变更 patch 重放到当前 HEAD 暂存区上,避免 diff 混入 HEAD 变化的内容;若 patch 存在冲突则自动降级为全量模式。使用 `--clean` 可清理 validate 状态(重置主 worktree 并删除快照文件)。
146
-
147
- > **提示:** 如果 validate 时 patch apply 失败(目标分支与主分支差异过大),可先执行 `clawt sync -b <branchName>` 同步主分支后重试。
44
+ ### `clawt run` 创建 worktree 并执行任务
148
45
 
149
46
  ```bash
150
- # 精确匹配分支名
151
- clawt validate -b feature-scheme-1
152
-
153
- # 模糊匹配(匹配包含 "scheme" 的分支)
154
- clawt validate -b scheme
47
+ # 单 worktree,打开 Claude Code 交互式界面(最常用)
48
+ clawt run -b <branch>
155
49
 
156
- # 交互式选择所有分支
157
- clawt validate
50
+ # 多任务并行(每个 --tasks 对应一个独立 worktree)
51
+ clawt run -b <branch> --tasks "任务1" --tasks "任务2"
158
52
 
159
- # 再次验证(增量模式,可通过 git diff 查看增量差异)
160
- clawt validate -b feature-scheme-1
53
+ # 从任务文件读取任务列表(使用文件中定义的分支名)
54
+ clawt run -f tasks.md
161
55
 
162
- # 清理 validate 状态(同样支持模糊匹配)
163
- clawt validate -b feature-scheme-1 --clean
164
- clawt validate --clean
56
+ # 从任务文件读取任务,但用 -b 自动编号分支(文件中分支名可省略)
57
+ clawt run -f tasks.md -b feat
165
58
  ```
166
59
 
167
- ### `clawt sync` — 将主分支代码同步到目标 worktree
60
+ **任务文件格式:**
168
61
 
169
- ```bash
170
- # 指定分支名(支持模糊匹配)
171
- clawt sync -b <branchName>
62
+ ```markdown
63
+ <!-- CLAWT-TASKS:START -->
64
+ # branch: feat-login
65
+ 实现用户登录功能
66
+ <!-- CLAWT-TASKS:END -->
172
67
 
173
- # 不指定分支名(列出所有分支供选择)
174
- clawt sync
68
+ <!-- CLAWT-TASKS:START -->
69
+ # branch: fix-bug
70
+ 修复内存泄漏问题
71
+ 支持多行任务描述
72
+ <!-- CLAWT-TASKS:END -->
175
73
  ```
176
74
 
177
- | 参数 | 必填 | 说明 |
178
- | ---- | ---- | ---- |
179
- | `-b` | 否 | 要同步的分支名(支持模糊匹配,不传则列出所有分支供选择) |
75
+ > 使用 `-b` 时,文件中的 `# branch: ...` 行可省略,分支名由 `-b` 值自动编号(如 `feat-1`、`feat-2`)。
180
76
 
181
- 将主分支最新代码合并到目标 worktree 的分支中。如果目标 worktree 有未提交的修改,会自动保存后再合并。存在冲突时会提示用户手动解决。合并成功后会自动清除该分支的 validate 快照(代码基础已变化,旧快照无效)。
77
+ `Ctrl+C` 可中断所有任务。
182
78
 
183
- **分支匹配策略:**
184
- - 传 `-b` 时,优先精确匹配分支名;未精确匹配则进行模糊匹配(子串匹配,大小写不敏感);模糊匹配到多个时通过交互列表选择;无匹配时报错并列出所有可用分支
185
- - 不传 `-b` 时,列出当前项目所有可用分支供交互式选择(仅 1 个时自动使用)
79
+ ### `clawt resume` — 恢复之前的 Claude Code 会话
186
80
 
187
81
  ```bash
188
- # 精确匹配分支名
189
- clawt sync -b feature-scheme-1
190
-
191
- # 模糊匹配(匹配包含 "scheme" 的分支)
192
- clawt sync -b scheme
193
-
194
- # 交互式选择所有分支
195
- clawt sync
82
+ clawt resume -b <branch> # 指定分支
83
+ clawt resume # 交互式选择
196
84
  ```
197
85
 
198
- ### `clawt merge` — 合并分支到主 worktree
86
+ ### `clawt create` — 仅创建 worktree(不执行任务)
199
87
 
200
88
  ```bash
201
- # 指定分支名(支持模糊匹配)
202
- clawt merge -b <branchName> [-m <commitMessage>]
203
-
204
- # 不指定分支名(列出所有分支供选择)
205
- clawt merge [-m <commitMessage>]
89
+ clawt create -b <branch> # 创建 1 个
90
+ clawt create -b <branch> -n 3 # 批量创建 3 个
206
91
  ```
207
92
 
208
- | 参数 | 必填 | 说明 |
209
- | ---- | ---- | ---- |
210
- | `-b` | 否 | 要合并的分支名(支持模糊匹配,不传则列出所有分支供选择) |
211
- | `-m` | 否 | 提交信息(目标 worktree 工作区有修改时必填) |
212
-
213
- 将目标 worktree 的变更合并到主 worktree 的当前分支。如果配置了 `autoPullPush: true`,合并后会自动推送到远程仓库。如果目标 worktree 工作区有未提交的修改,需要通过 `-m` 提供提交信息;如果目标 worktree 已经提交过(工作区干净但有本地提交),可以省略 `-m` 直接合并。merge 成功后会询问是否清理对应的 worktree 和分支(如果配置了 `autoDeleteBranch: true` 则自动清理)。
214
-
215
- **分支匹配策略:**
216
- - 传 `-b` 时,优先精确匹配分支名;未精确匹配则进行模糊匹配(子串匹配,大小写不敏感);模糊匹配到多个时通过交互列表选择;无匹配时报错并列出所有可用分支
217
- - 不传 `-b` 时,列出当前项目所有可用分支供交互式选择(仅 1 个时自动使用)
218
-
219
- 如果检测到目标分支存在 `clawt sync` 产生的临时提交(auto-save commit),会自动提示是否将所有提交压缩(squash)为一个。用户选择压缩后,所有 commit 会被 reset 到暂存区:如果提供了 `-m` 则直接提交并继续合并流程;如果未提供 `-m` 则提示用户前往目标 worktree 自行提交后重新执行 merge。
93
+ ### `clawt validate` 在主 worktree 中验证分支变更
220
94
 
221
95
  ```bash
222
- # 精确匹配,目标 worktree 有未提交修改,需提供 -m
223
- clawt merge -b feature-scheme-1 -m "feat: 实现用户登录功能"
224
-
225
- # 模糊匹配(匹配包含 "scheme" 的分支)
226
- clawt merge -b scheme
227
-
228
- # 交互式选择所有分支
229
- clawt merge
230
-
231
- # 目标 worktree 已提交过,可省略 -m
232
- clawt merge -b feature-scheme-1
96
+ clawt validate -b <branch> # 将变更迁移到主 worktree 测试
97
+ clawt validate -b <branch> --clean # 清理 validate 状态
233
98
  ```
234
99
 
235
- ### `clawt remove` — 移除 worktree
100
+ 支持增量模式:再次 validate 同一分支时,可通过 `git diff` 查看两次之间的增量差异。
236
101
 
237
- ```bash
238
- clawt remove [options]
239
- ```
240
-
241
- 支持三种移除粒度:
242
-
243
- ```bash
244
- # 移除当前项目下所有 worktree
245
- clawt remove --all
246
-
247
- # 移除指定分支名下的所有 worktree(匹配 feature-scheme 和 feature-scheme-*)
248
- clawt remove -b feature-scheme
249
-
250
- # 移除单个 worktree(直接写完整分支名)
251
- clawt remove -b feature-scheme-2
252
- ```
253
-
254
- 移除时会询问是否同时删除对应的本地分支。移除 worktree 时会自动清理对应的 validate 快照;`--all` 模式还会清理整个项目的快照目录。批量移除时单个失败不会中断整个流程,最后汇总报告失败项。
255
-
256
- ### `clawt list` — 列出当前项目所有 worktree
102
+ ### `clawt sync` — 同步主分支代码到目标 worktree
257
103
 
258
104
  ```bash
259
- clawt list [--json]
105
+ clawt sync -b <branch>
260
106
  ```
261
107
 
262
- | 参数 | 必填 | 说明 |
263
- | ---- | ---- | ---- |
264
- | `--json` | 否 | 以 JSON 格式输出(仅包含 path 和 branch) |
265
-
266
- 列出当前项目在 `~/.clawt/worktrees/` 下的所有 worktree 及对应分支。文本模式下,如果某个 worktree 处于空闲状态(0 个提交、无变更、无未提交修改),其路径会以橙色高亮显示,方便快速识别可能需要清理或还未开始工作的 worktree。指定 `--json` 时以 JSON 格式输出,便于脚本解析。
108
+ ### `clawt merge` 合并分支到主 worktree
267
109
 
268
110
  ```bash
269
- # 文本格式输出(默认)
270
- clawt list
271
-
272
- # JSON 格式输出
273
- clawt list --json
111
+ clawt merge -b <branch> -m "feat: 提交信息" # 有未提交修改时需要 -m
112
+ clawt merge -b <branch> # 已提交过可省略 -m
274
113
  ```
275
114
 
276
- ### `clawt status` — 显示项目全局状态总览
115
+ ### `clawt remove` — 移除 worktree
277
116
 
278
117
  ```bash
279
- clawt status [--json]
118
+ clawt remove -b <branch> # 移除指定分支的 worktree(支持模糊匹配)
119
+ clawt remove # 交互式多选要移除的 worktree
120
+ clawt remove --all # 移除当前项目下所有 worktree
280
121
  ```
281
122
 
282
- | 参数 | 必填 | 说明 |
283
- | ---- | ---- | ---- |
284
- | `--json` | 否 | 以 JSON 格式输出完整状态数据 |
285
-
286
- 显示项目全局状态总览,包括:主 worktree 当前分支及干净状态、所有 worktree 的变更状态(已提交/未提交/合并冲突/无变更)、与主分支的差异(领先/落后提交数、行数变更)、未清理的 validate 快照检测(标识孤立快照)。
287
-
288
- 文本模式下输出分为三个区块:主 Worktree 状态、Worktree 列表(含变更状态标签和差异统计)、未清理的 Validate 快照。指定 `--json` 时以 JSON 格式输出完整状态数据,便于脚本解析。
123
+ ### `clawt list` 列出所有 worktree
289
124
 
290
125
  ```bash
291
- # 文本格式输出(默认)
292
- clawt status
293
-
294
- # JSON 格式输出
295
- clawt status --json
126
+ clawt list # 文本格式
127
+ clawt list --json # JSON 格式
296
128
  ```
297
129
 
298
- ### `clawt reset` — 重置主 worktree 工作区和暂存区
130
+ ### `clawt status` — 项目状态总览
299
131
 
300
132
  ```bash
301
- clawt reset
133
+ clawt status # 文本格式
134
+ clawt status --json # JSON 格式
302
135
  ```
303
136
 
304
- 重置主 worktree 的工作区和暂存区(`git reset --hard` + `git clean -f`),恢复到干净状态。如果配置了 `confirmDestructiveOps: true`(默认),执行前会提示确认。与 `clawt validate --clean` 不同,`reset` 不会删除 validate 快照文件,适用于只想清空变更而保留快照以便后续增量 validate 的场景。如果工作区和暂存区已是干净状态,会提示无需重置。
137
+ ### `clawt reset` 重置主 worktree 到干净状态
305
138
 
306
139
  ```bash
307
- # 重置主 worktree 工作区和暂存区
308
140
  clawt reset
309
141
  ```
310
142
 
311
- ### `clawt config` — 查看和管理全局配置
143
+ ### `clawt config` — 查看配置
312
144
 
313
145
  ```bash
314
- # 查看全局配置
315
- clawt config
316
-
317
- # 将配置恢复为默认值
318
- clawt config reset
146
+ clawt config # 查看当前配置
147
+ clawt config reset # 恢复默认配置
319
148
  ```
320
149
 
321
- 读取并展示全局配置文件 `~/.clawt/config.json` 中的所有配置项,包括每项的当前值和描述说明。编辑配置需直接修改配置文件。
322
-
323
- `config reset` 子命令可将配置文件恢复为默认值,执行前会弹出确认提示(受 `confirmDestructiveOps` 配置项控制)。
150
+ ## 配置
324
151
 
325
- ## 配置文件
152
+ 配置文件位于 `~/.clawt/config.json`,安装后自动生成:
326
153
 
327
- 安装后会自动在 `~/.clawt/config.json` 生成全局配置文件:
154
+ | 配置项 | 默认值 | 说明 |
155
+ | ------ | ------ | ---- |
156
+ | `autoDeleteBranch` | `false` | 自动删除已合并/已移除的分支 |
157
+ | `claudeCodeCommand` | `"claude"` | Claude Code CLI 启动命令 |
158
+ | `autoPullPush` | `false` | merge 后自动 pull/push |
159
+ | `confirmDestructiveOps` | `true` | 破坏性操作前确认 |
328
160
 
329
- ```json
330
- {
331
- "autoDeleteBranch": false,
332
- "claudeCodeCommand": "claude",
333
- "autoPullPush": false,
334
- "confirmDestructiveOps": true
335
- }
336
- ```
337
-
338
- | 配置项 | 类型 | 默认值 | 说明 |
339
- | ------ | ---- | ------ | ---- |
340
- | `autoDeleteBranch` | `boolean` | `false` | 移除 worktree 时自动删除对应本地分支;merge 成功后自动清理 worktree 和分支;run 中断后自动清理本次创建的 worktree 和分支 |
341
- | `claudeCodeCommand` | `string` | `"claude"` | Claude Code CLI 启动指令,用于 `clawt run` 不传 `--tasks` 时和 `clawt resume` 在 worktree 中打开交互式界面 |
342
- | `autoPullPush` | `boolean` | `false` | merge 成功后是否自动执行 git pull 和 git push |
343
- | `confirmDestructiveOps` | `boolean` | `true` | 执行破坏性操作(reset、validate --clean、config reset)前是否提示确认 |
344
-
345
- ## 分支名规则
346
-
347
- 分支名中的特殊字符(`/`、`.`、空格、`~` 等)会被自动替换为 `-`,连续的 `-` 会被压缩,首尾 `-` 会被去除。发生转换时会在终端提示。
161
+ ## 全局选项
348
162
 
349
- ```
350
- feature/a.b → feature-a-b
351
- ```
163
+ | 选项 | 说明 |
164
+ | ---- | ---- |
165
+ | `--debug` | 输出调试信息 |
352
166
 
353
167
  ## 日志
354
168
 
355
- 日志保存在 `~/.clawt/logs/` 目录,按日期滚动,保留 30 天。使用 `--debug` 全局选项可在终端实时查看调试日志。
356
-
357
- ## 开发
358
-
359
- ### 测试
360
-
361
- 项目使用 [Vitest](https://vitest.dev/) 作为测试框架,搭配 `@vitest/coverage-v8` 生成覆盖率报告。
362
-
363
- ```bash
364
- # 执行全部测试
365
- npm test
366
-
367
- # 监听模式(文件变更后自动重新运行)
368
- npm run test:watch
369
-
370
- # 执行测试并生成覆盖率报告
371
- npm run test:coverage
372
- ```
373
-
169
+ 日志保存在 `~/.clawt/logs/`,按日期滚动,保留 30 天。