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.
- package/.claude/agent-memory/docs-sync-updater/MEMORY.md +14 -7
- package/.claude/agents/docs-sync-updater.md +11 -0
- package/README.md +80 -284
- package/dist/index.js +839 -307
- package/dist/postinstall.js +272 -0
- package/docs/spec.md +84 -22
- package/package.json +1 -1
- package/src/commands/remove.ts +21 -28
- package/src/commands/run.ts +68 -206
- package/src/constants/config.ts +4 -0
- package/src/constants/index.ts +11 -1
- package/src/constants/messages/common.ts +41 -0
- package/src/constants/messages/config.ts +5 -0
- package/src/constants/messages/create.ts +5 -0
- package/src/constants/messages/index.ts +29 -0
- package/src/constants/messages/merge.ts +42 -0
- package/src/constants/messages/remove.ts +15 -0
- package/src/constants/messages/reset.ts +7 -0
- package/src/constants/messages/resume.ts +12 -0
- package/src/constants/messages/run.ts +46 -0
- package/src/constants/messages/status.ts +25 -0
- package/src/constants/messages/sync.ts +24 -0
- package/src/constants/messages/validate.ts +25 -0
- package/src/constants/progress.ts +39 -0
- package/src/types/command.ts +4 -0
- package/src/types/config.ts +2 -0
- package/src/types/index.ts +1 -0
- package/src/types/taskFile.ts +13 -0
- package/src/utils/formatter.ts +16 -0
- package/src/utils/index.ts +8 -4
- package/src/utils/progress-render.ts +90 -0
- package/src/utils/progress.ts +213 -0
- package/src/utils/task-executor.ts +365 -0
- package/src/utils/task-file.ts +87 -0
- package/src/utils/worktree-matcher.ts +92 -0
- package/src/utils/worktree.ts +27 -0
- package/tests/unit/commands/config.test.ts +110 -0
- package/tests/unit/commands/create.test.ts +115 -0
- package/tests/unit/commands/list.test.ts +118 -0
- package/tests/unit/commands/merge.test.ts +323 -0
- package/tests/unit/commands/remove.test.ts +240 -0
- package/tests/unit/commands/reset.test.ts +124 -0
- package/tests/unit/commands/resume.test.ts +91 -0
- package/tests/unit/commands/run.test.ts +456 -0
- package/tests/unit/commands/status.test.ts +214 -0
- package/tests/unit/commands/sync.test.ts +208 -0
- package/tests/unit/commands/validate.test.ts +382 -0
- package/tests/unit/constants/config.test.ts +1 -0
- package/tests/unit/constants/messages.test.ts +1 -1
- package/tests/unit/utils/config.test.ts +21 -1
- package/tests/unit/utils/formatter.test.ts +70 -1
- package/tests/unit/utils/git.test.ts +44 -0
- package/tests/unit/utils/progress.test.ts +255 -0
- package/tests/unit/utils/task-file.test.ts +236 -0
- package/tests/unit/utils/validate-snapshot.test.ts +25 -0
- package/tests/unit/utils/worktree-matcher.test.ts +81 -5
- 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
|
|
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 + `
|
|
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
|
|
74
|
-
- `
|
|
75
|
-
-
|
|
76
|
-
-
|
|
77
|
-
- validate
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
90
|
-
clawt
|
|
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
|
-
|
|
30
|
+
# 4. 验证某个分支的变更(在主 worktree 中测试)
|
|
31
|
+
clawt validate -b feature-auth-1
|
|
125
32
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
clawt validate -b <branchName> [--clean]
|
|
33
|
+
# 5. 确认无误后合并到主分支
|
|
34
|
+
clawt merge -b feature-auth-1 -m "feat: 实现用户登录功能"
|
|
129
35
|
|
|
130
|
-
#
|
|
131
|
-
clawt
|
|
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
|
-
|
|
146
|
-
|
|
147
|
-
> **提示:** 如果 validate 时 patch apply 失败(目标分支与主分支差异过大),可先执行 `clawt sync -b <branchName>` 同步主分支后重试。
|
|
44
|
+
### `clawt run` — 创建 worktree 并执行任务
|
|
148
45
|
|
|
149
46
|
```bash
|
|
150
|
-
#
|
|
151
|
-
clawt
|
|
152
|
-
|
|
153
|
-
# 模糊匹配(匹配包含 "scheme" 的分支)
|
|
154
|
-
clawt validate -b scheme
|
|
47
|
+
# 单 worktree,打开 Claude Code 交互式界面(最常用)
|
|
48
|
+
clawt run -b <branch>
|
|
155
49
|
|
|
156
|
-
#
|
|
157
|
-
clawt
|
|
50
|
+
# 多任务并行(每个 --tasks 对应一个独立 worktree)
|
|
51
|
+
clawt run -b <branch> --tasks "任务1" --tasks "任务2"
|
|
158
52
|
|
|
159
|
-
#
|
|
160
|
-
clawt
|
|
53
|
+
# 从任务文件读取任务列表(使用文件中定义的分支名)
|
|
54
|
+
clawt run -f tasks.md
|
|
161
55
|
|
|
162
|
-
#
|
|
163
|
-
clawt
|
|
164
|
-
clawt validate --clean
|
|
56
|
+
# 从任务文件读取任务,但用 -b 自动编号分支(文件中分支名可省略)
|
|
57
|
+
clawt run -f tasks.md -b feat
|
|
165
58
|
```
|
|
166
59
|
|
|
167
|
-
|
|
60
|
+
**任务文件格式:**
|
|
168
61
|
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
|
|
62
|
+
```markdown
|
|
63
|
+
<!-- CLAWT-TASKS:START -->
|
|
64
|
+
# branch: feat-login
|
|
65
|
+
实现用户登录功能
|
|
66
|
+
<!-- CLAWT-TASKS:END -->
|
|
172
67
|
|
|
173
|
-
|
|
174
|
-
|
|
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
|
-
|
|
77
|
+
按 `Ctrl+C` 可中断所有任务。
|
|
182
78
|
|
|
183
|
-
|
|
184
|
-
- 传 `-b` 时,优先精确匹配分支名;未精确匹配则进行模糊匹配(子串匹配,大小写不敏感);模糊匹配到多个时通过交互列表选择;无匹配时报错并列出所有可用分支
|
|
185
|
-
- 不传 `-b` 时,列出当前项目所有可用分支供交互式选择(仅 1 个时自动使用)
|
|
79
|
+
### `clawt resume` — 恢复之前的 Claude Code 会话
|
|
186
80
|
|
|
187
81
|
```bash
|
|
188
|
-
#
|
|
189
|
-
clawt
|
|
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
|
|
86
|
+
### `clawt create` — 仅创建 worktree(不执行任务)
|
|
199
87
|
|
|
200
88
|
```bash
|
|
201
|
-
#
|
|
202
|
-
clawt
|
|
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
|
-
#
|
|
223
|
-
clawt
|
|
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
|
-
|
|
100
|
+
支持增量模式:再次 validate 同一分支时,可通过 `git diff` 查看两次之间的增量差异。
|
|
236
101
|
|
|
237
|
-
|
|
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
|
|
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
|
|
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
|
|
115
|
+
### `clawt remove` — 移除 worktree
|
|
277
116
|
|
|
278
117
|
```bash
|
|
279
|
-
clawt
|
|
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
|
|
293
|
-
|
|
294
|
-
# JSON 格式输出
|
|
295
|
-
clawt status --json
|
|
126
|
+
clawt list # 文本格式
|
|
127
|
+
clawt list --json # JSON 格式
|
|
296
128
|
```
|
|
297
129
|
|
|
298
|
-
### `clawt
|
|
130
|
+
### `clawt status` — 项目状态总览
|
|
299
131
|
|
|
300
132
|
```bash
|
|
301
|
-
clawt
|
|
133
|
+
clawt status # 文本格式
|
|
134
|
+
clawt status --json # JSON 格式
|
|
302
135
|
```
|
|
303
136
|
|
|
304
|
-
|
|
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
|
-
|
|
322
|
-
|
|
323
|
-
`config reset` 子命令可将配置文件恢复为默认值,执行前会弹出确认提示(受 `confirmDestructiveOps` 配置项控制)。
|
|
150
|
+
## 配置
|
|
324
151
|
|
|
325
|
-
|
|
152
|
+
配置文件位于 `~/.clawt/config.json`,安装后自动生成:
|
|
326
153
|
|
|
327
|
-
|
|
154
|
+
| 配置项 | 默认值 | 说明 |
|
|
155
|
+
| ------ | ------ | ---- |
|
|
156
|
+
| `autoDeleteBranch` | `false` | 自动删除已合并/已移除的分支 |
|
|
157
|
+
| `claudeCodeCommand` | `"claude"` | Claude Code CLI 启动命令 |
|
|
158
|
+
| `autoPullPush` | `false` | merge 后自动 pull/push |
|
|
159
|
+
| `confirmDestructiveOps` | `true` | 破坏性操作前确认 |
|
|
328
160
|
|
|
329
|
-
|
|
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
|
-
|
|
351
|
-
|
|
163
|
+
| 选项 | 说明 |
|
|
164
|
+
| ---- | ---- |
|
|
165
|
+
| `--debug` | 输出调试信息 |
|
|
352
166
|
|
|
353
167
|
## 日志
|
|
354
168
|
|
|
355
|
-
日志保存在 `~/.clawt/logs
|
|
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 天。
|