clawt 2.10.0 → 2.10.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.
Files changed (40) hide show
  1. package/.claude/agent-memory/docs-sync-updater/MEMORY.md +9 -6
  2. package/.claude/agents/docs-sync-updater.md +11 -0
  3. package/README.md +63 -290
  4. package/dist/index.js +203 -104
  5. package/dist/postinstall.js +242 -0
  6. package/docs/spec.md +27 -14
  7. package/package.json +1 -1
  8. package/src/commands/remove.ts +21 -28
  9. package/src/constants/index.ts +1 -1
  10. package/src/constants/messages/common.ts +41 -0
  11. package/src/constants/messages/config.ts +5 -0
  12. package/src/constants/messages/create.ts +5 -0
  13. package/src/constants/messages/index.ts +29 -0
  14. package/src/constants/messages/merge.ts +42 -0
  15. package/src/constants/messages/remove.ts +15 -0
  16. package/src/constants/messages/reset.ts +7 -0
  17. package/src/constants/messages/resume.ts +12 -0
  18. package/src/constants/messages/run.ts +16 -0
  19. package/src/constants/messages/status.ts +25 -0
  20. package/src/constants/messages/sync.ts +24 -0
  21. package/src/constants/messages/validate.ts +25 -0
  22. package/src/utils/index.ts +2 -2
  23. package/src/utils/worktree-matcher.ts +92 -0
  24. package/tests/unit/commands/config.test.ts +110 -0
  25. package/tests/unit/commands/create.test.ts +115 -0
  26. package/tests/unit/commands/list.test.ts +118 -0
  27. package/tests/unit/commands/merge.test.ts +323 -0
  28. package/tests/unit/commands/remove.test.ts +240 -0
  29. package/tests/unit/commands/reset.test.ts +124 -0
  30. package/tests/unit/commands/resume.test.ts +91 -0
  31. package/tests/unit/commands/run.test.ts +207 -0
  32. package/tests/unit/commands/status.test.ts +214 -0
  33. package/tests/unit/commands/sync.test.ts +208 -0
  34. package/tests/unit/commands/validate.test.ts +382 -0
  35. package/tests/unit/constants/messages.test.ts +1 -1
  36. package/tests/unit/utils/config.test.ts +21 -1
  37. package/tests/unit/utils/formatter.test.ts +44 -1
  38. package/tests/unit/utils/git.test.ts +44 -0
  39. package/tests/unit/utils/validate-snapshot.test.ts +25 -0
  40. package/tests/unit/utils/worktree-matcher.test.ts +81 -5
@@ -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)
@@ -70,11 +70,14 @@ Notes:
70
70
  - resume 和 run(交互式模式)共用 `launchInteractiveClaude()`,该函数从 run.ts 提取到 src/utils/claude.ts
71
71
  - `claudeCodeCommand` 配置项同时影响 run 交互式模式和 resume 命令
72
72
  - 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)
73
+ - `resolveTargetWorktree()` 是 resume、validate、merge 和 sync 共用的单选分支匹配函数(在 src/utils/worktree-matcher.ts)
74
+ - `resolveTargetWorktrees()` 是多选分支匹配函数(在 src/utils/worktree-matcher.ts),目前被 remove 命令使用
75
+ - `WorktreeResolveMessages` 接口用于单选命令的消息解耦,`WorktreeMultiResolveMessages` 接口用于多选命令的消息解耦
76
+ - `promptSelectBranch()`(Enquirer.Select)用于单选交互,`promptMultiSelectBranches()`(Enquirer.MultiSelect)用于多选交互
77
+ - resume 的消息常量在 `MESSAGES.RESUME_*`,validate 的消息常量在 `MESSAGES.VALIDATE_*`,merge 的消息常量在 `MESSAGES.MERGE_*`,sync 的消息常量在 `MESSAGES.SYNC_*`,status 的消息常量在 `MESSAGES.STATUS_*`,remove 的 fuzzy search 消息在 `MESSAGES.REMOVE_*`
78
+ - resume、validate、merge 和 sync 的 `-b` 参数均为可选,匹配策略一致:精确→模糊(子串,大小写不敏感)→交互单选
79
+ - remove 的 `-b` 参数可选,匹配策略:精确→模糊→交互多选;不传 `-b` 时列出所有分支供多选
80
+ - validate 的交互式选择和 resume 使用同一个 `promptSelectBranch()`(Enquirer.Select);remove 使用 `promptMultiSelectBranches()`(Enquirer.MultiSelect)
78
81
 
79
82
  ## validate 快照机制
80
83
 
@@ -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,135 @@ 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
41
-
42
- ```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` 时自动清理)。
17
+ ## 快速开始
81
18
 
82
19
  ```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
- ```
27
+ # 3. 查看所有 worktree 状态
28
+ clawt status
92
29
 
93
- ### `clawt resume` — 在已有 worktree 中恢复 Claude Code 会话
30
+ # 4. 验证某个分支的变更(在主 worktree 中测试)
31
+ clawt validate -b feature-auth-1
94
32
 
95
- ```bash
96
- # 指定分支名(支持模糊匹配)
97
- clawt resume -b <branchName>
33
+ # 5. 确认无误后合并到主分支
34
+ clawt merge -b feature-auth-1 -m "feat: 实现用户登录功能"
98
35
 
99
- # 不指定分支名(列出所有分支供选择)
100
- clawt resume
36
+ # 6. 清理不需要的 worktree
37
+ clawt remove -b feature-auth
101
38
  ```
102
39
 
103
- | 参数 | 必填 | 说明 |
104
- | ---- | ---- | ---- |
105
- | `-b` | 否 | 要恢复的分支名(支持模糊匹配,不传则列出所有分支供选择) |
40
+ ## 命令一览
106
41
 
107
- 在之前通过 `clawt run` 或 `clawt create` 创建的 worktree 中重新打开 Claude Code 交互式界面,继续之前的工作。启动命令由配置项 `claudeCodeCommand` 指定(默认 `claude`)。
42
+ > 所有命令必须在**主 worktree 的仓库根目录**下执行。`-b` 参数支持模糊匹配。
108
43
 
109
- **分支匹配策略:**
110
- - 传 `-b` 时,优先精确匹配分支名;未精确匹配则进行模糊匹配(子串匹配,大小写不敏感);模糊匹配到多个时通过交互列表选择;无匹配时报错并列出所有可用分支
111
- - 不传 `-b` 时,列出当前项目所有可用分支供交互式选择(仅 1 个时自动使用)
44
+ ### `clawt run` — 创建 worktree 并执行任务
112
45
 
113
46
  ```bash
114
- # 精确匹配
115
- clawt resume -b feature-login
116
-
117
- # 模糊匹配(匹配包含 "login" 的分支)
118
- clawt resume -b login
47
+ # 多任务并行(每个 --tasks 对应一个独立 worktree)
48
+ clawt run -b <branch> --tasks "任务1" --tasks "任务2"
119
49
 
120
- # 交互式选择所有分支
121
- clawt resume
50
+ # 单 worktree,打开 Claude Code 交互式界面
51
+ clawt run -b <branch>
122
52
  ```
123
53
 
124
- ### `clawt validate` — 在主 worktree 验证分支变更
54
+ `Ctrl+C` 可中断所有任务。
125
55
 
126
- ```bash
127
- # 指定分支名(支持模糊匹配)
128
- clawt validate -b <branchName> [--clean]
56
+ ### `clawt resume` — 恢复之前的 Claude Code 会话
129
57
 
130
- # 不指定分支名(列出所有分支供选择)
131
- clawt validate [--clean]
58
+ ```bash
59
+ clawt resume -b <branch> # 指定分支
60
+ clawt resume # 交互式选择
132
61
  ```
133
62
 
134
- | 参数 | 必填 | 说明 |
135
- | ---- | ---- | ---- |
136
- | `-b` | 否 | 要验证的分支名(支持模糊匹配,不传则列出所有分支供选择) |
137
- | `--clean` | 否 | 清理 validate 状态(重置主 worktree 并删除快照) |
138
-
139
- 将目标 worktree 的变更通过 `git diff`(三点 diff)迁移到主 worktree,方便在主 worktree 中直接测试,无需重新安装依赖。同时检测未提交修改和已提交 commit,确保所有变更都能被捕获。
140
-
141
- **分支匹配策略:**
142
- - 传 `-b` 时,优先精确匹配分支名;未精确匹配则进行模糊匹配(子串匹配,大小写不敏感);模糊匹配到多个时通过交互列表选择;无匹配时报错并列出所有可用分支
143
- - 不传 `-b` 时,列出当前项目所有可用分支供交互式选择(仅 1 个时自动使用)
144
-
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>` 同步主分支后重试。
63
+ ### `clawt create` 仅创建 worktree(不执行任务)
148
64
 
149
65
  ```bash
150
- # 精确匹配分支名
151
- clawt validate -b feature-scheme-1
152
-
153
- # 模糊匹配(匹配包含 "scheme" 的分支)
154
- clawt validate -b scheme
155
-
156
- # 交互式选择所有分支
157
- clawt validate
158
-
159
- # 再次验证(增量模式,可通过 git diff 查看增量差异)
160
- clawt validate -b feature-scheme-1
161
-
162
- # 清理 validate 状态(同样支持模糊匹配)
163
- clawt validate -b feature-scheme-1 --clean
164
- clawt validate --clean
66
+ clawt create -b <branch> # 创建 1 个
67
+ clawt create -b <branch> -n 3 # 批量创建 3 个
165
68
  ```
166
69
 
167
- ### `clawt sync` — 将主分支代码同步到目标 worktree
70
+ ### `clawt validate` — 在主 worktree 中验证分支变更
168
71
 
169
72
  ```bash
170
- # 指定分支名(支持模糊匹配)
171
- clawt sync -b <branchName>
172
-
173
- # 不指定分支名(列出所有分支供选择)
174
- clawt sync
73
+ clawt validate -b <branch> # 将变更迁移到主 worktree 测试
74
+ clawt validate -b <branch> --clean # 清理 validate 状态
175
75
  ```
176
76
 
177
- | 参数 | 必填 | 说明 |
178
- | ---- | ---- | ---- |
179
- | `-b` | 否 | 要同步的分支名(支持模糊匹配,不传则列出所有分支供选择) |
77
+ 支持增量模式:再次 validate 同一分支时,可通过 `git diff` 查看两次之间的增量差异。
180
78
 
181
- 将主分支最新代码合并到目标 worktree 的分支中。如果目标 worktree 有未提交的修改,会自动保存后再合并。存在冲突时会提示用户手动解决。合并成功后会自动清除该分支的 validate 快照(代码基础已变化,旧快照无效)。
182
-
183
- **分支匹配策略:**
184
- - 传 `-b` 时,优先精确匹配分支名;未精确匹配则进行模糊匹配(子串匹配,大小写不敏感);模糊匹配到多个时通过交互列表选择;无匹配时报错并列出所有可用分支
185
- - 不传 `-b` 时,列出当前项目所有可用分支供交互式选择(仅 1 个时自动使用)
79
+ ### `clawt sync` 同步主分支代码到目标 worktree
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 sync -b <branch>
196
83
  ```
197
84
 
198
85
  ### `clawt merge` — 合并分支到主 worktree
199
86
 
200
87
  ```bash
201
- # 指定分支名(支持模糊匹配)
202
- clawt merge -b <branchName> [-m <commitMessage>]
203
-
204
- # 不指定分支名(列出所有分支供选择)
205
- clawt merge [-m <commitMessage>]
206
- ```
207
-
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。
220
-
221
- ```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
88
+ clawt merge -b <branch> -m "feat: 提交信息" # 有未提交修改时需要 -m
89
+ clawt merge -b <branch> # 已提交过可省略 -m
233
90
  ```
234
91
 
235
92
  ### `clawt remove` — 移除 worktree
236
93
 
237
94
  ```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
257
-
258
- ```bash
259
- clawt list [--json]
260
- ```
261
-
262
- | 参数 | 必填 | 说明 |
263
- | ---- | ---- | ---- |
264
- | `--json` | 否 | 以 JSON 格式输出(仅包含 path 和 branch) |
265
-
266
- 列出当前项目在 `~/.clawt/worktrees/` 下的所有 worktree 及对应分支。文本模式下,如果某个 worktree 处于空闲状态(0 个提交、无变更、无未提交修改),其路径会以橙色高亮显示,方便快速识别可能需要清理或还未开始工作的 worktree。指定 `--json` 时以 JSON 格式输出,便于脚本解析。
267
-
268
- ```bash
269
- # 文本格式输出(默认)
270
- clawt list
271
-
272
- # JSON 格式输出
273
- clawt list --json
274
- ```
275
-
276
- ### `clawt status` — 显示项目全局状态总览
277
-
278
- ```bash
279
- clawt status [--json]
95
+ clawt remove -b <branch> # 移除指定分支的 worktree(支持模糊匹配)
96
+ clawt remove # 交互式多选要移除的 worktree
97
+ clawt remove --all # 移除当前项目下所有 worktree
280
98
  ```
281
99
 
282
- | 参数 | 必填 | 说明 |
283
- | ---- | ---- | ---- |
284
- | `--json` | 否 | 以 JSON 格式输出完整状态数据 |
285
-
286
- 显示项目全局状态总览,包括:主 worktree 当前分支及干净状态、所有 worktree 的变更状态(已提交/未提交/合并冲突/无变更)、与主分支的差异(领先/落后提交数、行数变更)、未清理的 validate 快照检测(标识孤立快照)。
287
-
288
- 文本模式下输出分为三个区块:主 Worktree 状态、Worktree 列表(含变更状态标签和差异统计)、未清理的 Validate 快照。指定 `--json` 时以 JSON 格式输出完整状态数据,便于脚本解析。
100
+ ### `clawt list` 列出所有 worktree
289
101
 
290
102
  ```bash
291
- # 文本格式输出(默认)
292
- clawt status
293
-
294
- # JSON 格式输出
295
- clawt status --json
103
+ clawt list # 文本格式
104
+ clawt list --json # JSON 格式
296
105
  ```
297
106
 
298
- ### `clawt reset` — 重置主 worktree 工作区和暂存区
107
+ ### `clawt status` — 项目状态总览
299
108
 
300
109
  ```bash
301
- clawt reset
110
+ clawt status # 文本格式
111
+ clawt status --json # JSON 格式
302
112
  ```
303
113
 
304
- 重置主 worktree 的工作区和暂存区(`git reset --hard` + `git clean -f`),恢复到干净状态。如果配置了 `confirmDestructiveOps: true`(默认),执行前会提示确认。与 `clawt validate --clean` 不同,`reset` 不会删除 validate 快照文件,适用于只想清空变更而保留快照以便后续增量 validate 的场景。如果工作区和暂存区已是干净状态,会提示无需重置。
114
+ ### `clawt reset` 重置主 worktree 到干净状态
305
115
 
306
116
  ```bash
307
- # 重置主 worktree 工作区和暂存区
308
117
  clawt reset
309
118
  ```
310
119
 
311
- ### `clawt config` — 查看和管理全局配置
120
+ ### `clawt config` — 查看配置
312
121
 
313
122
  ```bash
314
- # 查看全局配置
315
- clawt config
316
-
317
- # 将配置恢复为默认值
318
- clawt config reset
123
+ clawt config # 查看当前配置
124
+ clawt config reset # 恢复默认配置
319
125
  ```
320
126
 
321
- 读取并展示全局配置文件 `~/.clawt/config.json` 中的所有配置项,包括每项的当前值和描述说明。编辑配置需直接修改配置文件。
322
-
323
- `config reset` 子命令可将配置文件恢复为默认值,执行前会弹出确认提示(受 `confirmDestructiveOps` 配置项控制)。
127
+ ## 配置
324
128
 
325
- ## 配置文件
129
+ 配置文件位于 `~/.clawt/config.json`,安装后自动生成:
326
130
 
327
- 安装后会自动在 `~/.clawt/config.json` 生成全局配置文件:
328
-
329
- ```json
330
- {
331
- "autoDeleteBranch": false,
332
- "claudeCodeCommand": "claude",
333
- "autoPullPush": false,
334
- "confirmDestructiveOps": true
335
- }
336
- ```
131
+ | 配置项 | 默认值 | 说明 |
132
+ | ------ | ------ | ---- |
133
+ | `autoDeleteBranch` | `false` | 自动删除已合并/已移除的分支 |
134
+ | `claudeCodeCommand` | `"claude"` | Claude Code CLI 启动命令 |
135
+ | `autoPullPush` | `false` | merge 后自动 pull/push |
136
+ | `confirmDestructiveOps` | `true` | 破坏性操作前确认 |
337
137
 
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
- 分支名中的特殊字符(`/`、`.`、空格、`~` 等)会被自动替换为 `-`,连续的 `-` 会被压缩,首尾 `-` 会被去除。发生转换时会在终端提示。
138
+ ## 全局选项
348
139
 
349
- ```
350
- feature/a.b → feature-a-b
351
- ```
140
+ | 选项 | 说明 |
141
+ | ---- | ---- |
142
+ | `--debug` | 输出调试信息 |
352
143
 
353
144
  ## 日志
354
145
 
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
-
146
+ 日志保存在 `~/.clawt/logs/`,按日期滚动,保留 30 天。