clawt 2.9.1 → 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 (48) hide show
  1. package/.claude/agent-memory/docs-sync-updater/MEMORY.md +14 -10
  2. package/.claude/agents/docs-sync-updater.md +11 -0
  3. package/README.md +63 -268
  4. package/dist/index.js +420 -103
  5. package/dist/postinstall.js +242 -0
  6. package/docs/spec.md +162 -14
  7. package/package.json +1 -1
  8. package/src/commands/remove.ts +21 -28
  9. package/src/commands/status.ts +327 -0
  10. package/src/constants/index.ts +1 -1
  11. package/src/constants/messages/common.ts +41 -0
  12. package/src/constants/messages/config.ts +5 -0
  13. package/src/constants/messages/create.ts +5 -0
  14. package/src/constants/messages/index.ts +29 -0
  15. package/src/constants/messages/merge.ts +42 -0
  16. package/src/constants/messages/remove.ts +15 -0
  17. package/src/constants/messages/reset.ts +7 -0
  18. package/src/constants/messages/resume.ts +12 -0
  19. package/src/constants/messages/run.ts +16 -0
  20. package/src/constants/messages/status.ts +25 -0
  21. package/src/constants/messages/sync.ts +24 -0
  22. package/src/constants/messages/validate.ts +25 -0
  23. package/src/constants/messages.ts +22 -0
  24. package/src/index.ts +2 -0
  25. package/src/types/command.ts +6 -0
  26. package/src/types/index.ts +2 -1
  27. package/src/types/status.ts +49 -0
  28. package/src/utils/git.ts +16 -0
  29. package/src/utils/index.ts +4 -3
  30. package/src/utils/validate-snapshot.ts +17 -0
  31. package/src/utils/worktree-matcher.ts +92 -0
  32. package/tests/unit/commands/config.test.ts +110 -0
  33. package/tests/unit/commands/create.test.ts +115 -0
  34. package/tests/unit/commands/list.test.ts +118 -0
  35. package/tests/unit/commands/merge.test.ts +323 -0
  36. package/tests/unit/commands/remove.test.ts +240 -0
  37. package/tests/unit/commands/reset.test.ts +124 -0
  38. package/tests/unit/commands/resume.test.ts +91 -0
  39. package/tests/unit/commands/run.test.ts +207 -0
  40. package/tests/unit/commands/status.test.ts +214 -0
  41. package/tests/unit/commands/sync.test.ts +208 -0
  42. package/tests/unit/commands/validate.test.ts +382 -0
  43. package/tests/unit/constants/messages.test.ts +1 -1
  44. package/tests/unit/utils/config.test.ts +21 -1
  45. package/tests/unit/utils/formatter.test.ts +44 -1
  46. package/tests/unit/utils/git.test.ts +44 -0
  47. package/tests/unit/utils/validate-snapshot.test.ts +25 -0
  48. package/tests/unit/utils/worktree-matcher.test.ts +81 -5
@@ -4,13 +4,14 @@
4
4
 
5
5
  ### docs/spec.md
6
6
  - 完整的软件规格说明,包含 7 大章节
7
- - 命令流程在 `5. 需求场景详细设计` 下,每个命令一个子章节(5.1-5.13
7
+ - 命令流程在 `5. 需求场景详细设计` 下,每个命令一个子章节(5.1-5.14
8
8
  - run 命令对应 `5.2 批量创建 Worktree + 执行 Claude Code 任务`,流程按步骤编号描述
9
9
  - merge 命令对应 `5.6 合并验证过的分支`,-b 可选,支持模糊匹配(与 resume/validate 共享匹配逻辑),流程按步骤编号描述
10
10
  - config 命令对应 `5.10 查看和管理全局配置`,包含查看配置和 config reset 子命令两部分(使用 `####` 子标题区分)
11
11
  - resume 命令对应 `5.11 在已有 Worktree 中恢复会话`,支持模糊匹配和交互式分支选择(-b 可选)
12
12
  - validate 命令对应 `5.4 在主 Worktree 验证其他分支`,-b 可选,支持模糊匹配(与 resume 共享匹配逻辑)
13
13
  - sync 命令对应 `5.12 将主分支代码同步到目标 Worktree`,-b 可选,支持模糊匹配(与 resume/validate/merge 共享匹配逻辑)
14
+ - status 命令对应 `5.14 项目全局状态总览`,支持 `--json` 格式输出,展示主 worktree 状态、各 worktree 详细状态、未清理快照
14
15
  - 配置项说明在 `5.7 默认配置文件` 章节的表格中
15
16
  - 更新模式:新增步骤时追加编号,配置项影响范围变化时更新说明列
16
17
 
@@ -30,13 +31,13 @@
30
31
  - merge 成功消息根据 `autoPullPush` 配置动态显示推送状态
31
32
  - run 的中断清理在所有子进程退出后执行
32
33
  - run 交互式模式在创建 worktree 前检测分支是否已存在,已存在则提示使用 resume
33
- - remove 命令删除 worktree 时自动清理对应快照,`--all` 模式额外清理项目快照目录
34
+ - remove 命令通过 `resolveTargetWorktrees` 支持模糊匹配+多选(-b 可选),删除 worktree 时自动清理对应快照,`--all` 模式额外清理项目快照目录
34
35
  - remove 批量操作时收集错误继续处理,最后汇总报告
35
36
  - 文档中文风格,技术术语保留英文(worktree, merge, branch, SIGINT 等)
36
37
  - cleanupWorktrees 是 merge 和 run 共用的公共清理函数(在 src/utils/worktree.ts)
37
38
  - `launchInteractiveClaude` 是 run(交互式模式)和 resume 共用的公共函数(在 src/utils/claude.ts)
38
39
  - killAllChildProcesses 是 run 专用的子进程终止函数(在 src/utils/shell.ts)
39
- - validate 快照管理函数在 `src/utils/validate-snapshot.ts`,被 validate、merge 和 remove 三个命令使用
40
+ - validate 快照管理函数在 `src/utils/validate-snapshot.ts`,被 validate、merge、removestatus 四个命令使用
40
41
  - `confirmDestructiveAction` 在 `src/utils/formatter.ts`,被 reset、validate --clean 和 config reset 使用
41
42
  - sanitizeBranchName 清理后为空串时抛出 BRANCH_NAME_EMPTY 错误
42
43
 
@@ -61,19 +62,22 @@ run 命令有两种模式(自 claudeCodeCommand 特性后):
61
62
  - 不传 `--tasks`:交互式界面模式(单 worktree + `launchInteractiveClaude` + spawnSync)
62
63
  - 传 `--tasks`:并行任务模式(多 worktree + `executeClaudeTask` + spawnProcess)
63
64
 
64
- ## 命令清单(10 个)
65
+ ## 命令清单(11 个)
65
66
 
66
- `create`、`run`、`resume`、`list`、`remove`、`validate`、`merge`、`config`、`sync`、`reset`
67
+ `create`、`run`、`resume`、`list`、`remove`、`validate`、`merge`、`config`、`sync`、`reset`、`status`
67
68
 
68
69
  Notes:
69
70
  - resume 和 run(交互式模式)共用 `launchInteractiveClaude()`,该函数从 run.ts 提取到 src/utils/claude.ts
70
71
  - `claudeCodeCommand` 配置项同时影响 run 交互式模式和 resume 命令
71
72
  - reset 命令与 validate --clean 的区别:reset 不删除快照文件,validate --clean 会删除快照
72
- - `resolveTargetWorktree()` 是 resume、validate、merge 和 sync 共用的分支匹配函数(在 src/utils/worktree-matcher.ts)
73
- - `WorktreeResolveMessages` 接口实现命令间消息解耦,每个命令传入各自的提示文案
74
- - resume 的消息常量在 `MESSAGES.RESUME_*`,validate 的消息常量在 `MESSAGES.VALIDATE_*`,merge 的消息常量在 `MESSAGES.MERGE_*`,sync 的消息常量在 `MESSAGES.SYNC_*`
75
- - resume、validate、merge 和 sync 的 `-b` 参数均为可选,匹配策略一致:精确→模糊(子串,大小写不敏感)→交互选择
76
- - 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)
77
81
 
78
82
  ## validate 快照机制
79
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,340 +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` | 否 | 要同步的分支名(支持模糊匹配,不传则列出所有分支供选择) |
180
-
181
- 将主分支最新代码合并到目标 worktree 的分支中。如果目标 worktree 有未提交的修改,会自动保存后再合并。存在冲突时会提示用户手动解决。合并成功后会自动清除该分支的 validate 快照(代码基础已变化,旧快照无效)。
77
+ 支持增量模式:再次 validate 同一分支时,可通过 `git diff` 查看两次之间的增量差异。
182
78
 
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
95
+ clawt remove -b <branch> # 移除指定分支的 worktree(支持模糊匹配)
96
+ clawt remove # 交互式多选要移除的 worktree
97
+ clawt remove --all # 移除当前项目下所有 worktree
252
98
  ```
253
99
 
254
- 移除时会询问是否同时删除对应的本地分支。移除 worktree 时会自动清理对应的 validate 快照;`--all` 模式还会清理整个项目的快照目录。批量移除时单个失败不会中断整个流程,最后汇总报告失败项。
255
-
256
- ### `clawt list` — 列出当前项目所有 worktree
100
+ ### `clawt list` 列出所有 worktree
257
101
 
258
102
  ```bash
259
- clawt list [--json]
103
+ clawt list # 文本格式
104
+ clawt list --json # JSON 格式
260
105
  ```
261
106
 
262
- | 参数 | 必填 | 说明 |
263
- | ---- | ---- | ---- |
264
- | `--json` | 否 | 以 JSON 格式输出(仅包含 path 和 branch) |
265
-
266
- 列出当前项目在 `~/.clawt/worktrees/` 下的所有 worktree 及对应分支。文本模式下,如果某个 worktree 处于空闲状态(0 个提交、无变更、无未提交修改),其路径会以橙色高亮显示,方便快速识别可能需要清理或还未开始工作的 worktree。指定 `--json` 时以 JSON 格式输出,便于脚本解析。
107
+ ### `clawt status` 项目状态总览
267
108
 
268
109
  ```bash
269
- # 文本格式输出(默认)
270
- clawt list
271
-
272
- # JSON 格式输出
273
- clawt list --json
110
+ clawt status # 文本格式
111
+ clawt status --json # JSON 格式
274
112
  ```
275
113
 
276
- ### `clawt reset` — 重置主 worktree 工作区和暂存区
114
+ ### `clawt reset` — 重置主 worktree 到干净状态
277
115
 
278
116
  ```bash
279
117
  clawt reset
280
118
  ```
281
119
 
282
- 重置主 worktree 的工作区和暂存区(`git reset --hard` + `git clean -f`),恢复到干净状态。如果配置了 `confirmDestructiveOps: true`(默认),执行前会提示确认。与 `clawt validate --clean` 不同,`reset` 不会删除 validate 快照文件,适用于只想清空变更而保留快照以便后续增量 validate 的场景。如果工作区和暂存区已是干净状态,会提示无需重置。
120
+ ### `clawt config` 查看配置
283
121
 
284
122
  ```bash
285
- # 重置主 worktree 工作区和暂存区
286
- clawt reset
123
+ clawt config # 查看当前配置
124
+ clawt config reset # 恢复默认配置
287
125
  ```
288
126
 
289
- ### `clawt config` — 查看和管理全局配置
127
+ ## 配置
290
128
 
291
- ```bash
292
- # 查看全局配置
293
- clawt config
129
+ 配置文件位于 `~/.clawt/config.json`,安装后自动生成:
294
130
 
295
- # 将配置恢复为默认值
296
- clawt config reset
297
- ```
298
-
299
- 读取并展示全局配置文件 `~/.clawt/config.json` 中的所有配置项,包括每项的当前值和描述说明。编辑配置需直接修改配置文件。
300
-
301
- `config reset` 子命令可将配置文件恢复为默认值,执行前会弹出确认提示(受 `confirmDestructiveOps` 配置项控制)。
302
-
303
- ## 配置文件
304
-
305
- 安装后会自动在 `~/.clawt/config.json` 生成全局配置文件:
306
-
307
- ```json
308
- {
309
- "autoDeleteBranch": false,
310
- "claudeCodeCommand": "claude",
311
- "autoPullPush": false,
312
- "confirmDestructiveOps": true
313
- }
314
- ```
315
-
316
- | 配置项 | 类型 | 默认值 | 说明 |
317
- | ------ | ---- | ------ | ---- |
318
- | `autoDeleteBranch` | `boolean` | `false` | 移除 worktree 时自动删除对应本地分支;merge 成功后自动清理 worktree 和分支;run 中断后自动清理本次创建的 worktree 和分支 |
319
- | `claudeCodeCommand` | `string` | `"claude"` | Claude Code CLI 启动指令,用于 `clawt run` 不传 `--tasks` 时和 `clawt resume` 在 worktree 中打开交互式界面 |
320
- | `autoPullPush` | `boolean` | `false` | merge 成功后是否自动执行 git pull 和 git push |
321
- | `confirmDestructiveOps` | `boolean` | `true` | 执行破坏性操作(reset、validate --clean、config reset)前是否提示确认 |
322
-
323
- ## 分支名规则
131
+ | 配置项 | 默认值 | 说明 |
132
+ | ------ | ------ | ---- |
133
+ | `autoDeleteBranch` | `false` | 自动删除已合并/已移除的分支 |
134
+ | `claudeCodeCommand` | `"claude"` | Claude Code CLI 启动命令 |
135
+ | `autoPullPush` | `false` | merge 后自动 pull/push |
136
+ | `confirmDestructiveOps` | `true` | 破坏性操作前确认 |
324
137
 
325
- 分支名中的特殊字符(`/`、`.`、空格、`~` 等)会被自动替换为 `-`,连续的 `-` 会被压缩,首尾 `-` 会被去除。发生转换时会在终端提示。
138
+ ## 全局选项
326
139
 
327
- ```
328
- feature/a.b → feature-a-b
329
- ```
140
+ | 选项 | 说明 |
141
+ | ---- | ---- |
142
+ | `--debug` | 输出调试信息 |
330
143
 
331
144
  ## 日志
332
145
 
333
- 日志保存在 `~/.clawt/logs/` 目录,按日期滚动,保留 30 天。使用 `--debug` 全局选项可在终端实时查看调试日志。
334
-
335
- ## 开发
336
-
337
- ### 测试
338
-
339
- 项目使用 [Vitest](https://vitest.dev/) 作为测试框架,搭配 `@vitest/coverage-v8` 生成覆盖率报告。
340
-
341
- ```bash
342
- # 执行全部测试
343
- npm test
344
-
345
- # 监听模式(文件变更后自动重新运行)
346
- npm run test:watch
347
-
348
- # 执行测试并生成覆盖率报告
349
- npm run test:coverage
350
- ```
351
-
146
+ 日志保存在 `~/.clawt/logs/`,按日期滚动,保留 30 天。