hamster-wheel-cli 0.2.0-beta.2 → 0.3.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.
- package/CHANGELOG.md +29 -2
- package/README.md +56 -19
- package/dist/cli.js +567 -22
- package/dist/cli.js.map +1 -1
- package/dist/index.js +567 -22
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/cli.ts +376 -18
- package/src/global-config.ts +251 -0
- package/src/logs-viewer.ts +13 -1
- package/src/loop.ts +92 -12
- package/src/utils.ts +13 -0
- package/src/webhook.ts +54 -9
- package/tests/e2e/cli.e2e.test.ts +41 -3
- package/tests/global-config.test.ts +89 -1
- package/tests/webhook.test.ts +10 -6
package/CHANGELOG.md
CHANGED
|
@@ -2,12 +2,39 @@
|
|
|
2
2
|
|
|
3
3
|
本项目遵循语义化版本,变更日志以时间倒序记录。
|
|
4
4
|
|
|
5
|
-
## [0.
|
|
5
|
+
## [0.3.1] - 2025-12-24
|
|
6
6
|
### Added
|
|
7
|
-
-
|
|
7
|
+
- webhook 在“计划生成”阶段新增 `plan` 字段,携带计划原文便于下游对接。
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
- webhook 发送的 `plan` 内容统一为 `\n` 换行,确保换行不丢失。
|
|
11
|
+
|
|
12
|
+
## [0.3.0] - 2025-12-24
|
|
13
|
+
### Added
|
|
14
|
+
- 新增 `alias set/list/delete` 命令,用于管理全局 alias 配置。
|
|
15
|
+
- `run` 支持多次 `--use-alias` 叠加,并按命令行顺序覆盖同名选项。
|
|
16
|
+
- `run` 新增 `--use-agent`,支持叠加 agent 配置并参与覆盖合并。
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- alias 管理方式调整为 `alias set/list/delete`,便于显式维护与查看。
|
|
20
|
+
- alias 列表仅展示 `[alias]` 段,避免与 shortcut 混淆。
|
|
21
|
+
- run 参数合并规则统一为“同名选项后出现覆盖前出现”。
|
|
22
|
+
|
|
23
|
+
## [0.2.1] - 2025-12-24
|
|
24
|
+
### Added
|
|
25
|
+
- webhook payload 新增 `project` 字段,值为当前工作目录名称(仅文件夹名)。
|
|
26
|
+
- webhook payload 新增 `commit` 与 `pr` 字段,用于提交与 PR 链接(无链接时为空字符串)。
|
|
27
|
+
- 新增 `agent add/delete/set/list` 命令,支持管理 AI CLI 命令配置。
|
|
28
|
+
- 支持在全局配置中存储与解析 `[agent]` 表(兼容 `[agents]` 读取),便于复用 AI CLI 命令。
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
- 仅在 `task_start` 事件发送 `task` 字段,其余阶段不再携带。
|
|
32
|
+
- webhook 时间戳改为本地时区 `YYYYMMDD-HHmmss` 格式。
|
|
33
|
+
- logs 列表支持 PageUp/PageDown 翻页,并补充按键提示。
|
|
8
34
|
|
|
9
35
|
## [0.2.0] - 2025-12-24
|
|
10
36
|
### Added
|
|
37
|
+
- 新增 `alias run` 子命令,支持执行 alias 时追加参数并覆盖同名选项。
|
|
11
38
|
- 支持多任务执行与 multi-task 模式,提供 relay(接力)、serial(串行)、serial-continue(串行继续)、parallel(并行)四种执行方式。
|
|
12
39
|
- 新增 `alias` 命令,提供交互式 alias 配置浏览界面,支持上下键选择与 q 退出。
|
|
13
40
|
- Monitor 支持通过 `t` 键终止运行中的任务,增加确认对话框防止误操作。
|
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# wheel-ai
|
|
2
2
|
|
|
3
3
|
基于 Node.js + commander 的持续迭代开发工具,结合外部 AI CLI(运行时指定)驱动完整软件交付流程:需求澄清、计划生成、编码、自审、测试(单元+e2e)、推送与 PR。
|
|
4
4
|
|
|
@@ -27,6 +27,7 @@ node dist/cli.js run \
|
|
|
27
27
|
```
|
|
28
28
|
- `-t, --task`:任务描述,可重复传入多个任务,默认按接力模式依次执行。
|
|
29
29
|
- `--ai-cli`/`--ai-args`:指向系统已有的 AI CLI,提示文本通过 stdin(或 `--ai-prompt-arg`)传入。
|
|
30
|
+
- `--use-alias`/`--use-agent`:叠加 alias/agent 配置参数,重复传入时按命令行顺序覆盖。
|
|
30
31
|
- `--worktree`:在独立分支 worktree 中作业;基线分支通过 `--base-branch` 指定。
|
|
31
32
|
- 使用 `--worktree` 创建的临时工作目录,在确认分支已提交、推送且存在 PR 后会自动清理(仅删除本次创建的 worktree)。
|
|
32
33
|
- `--run-tests`/`--run-e2e`:运行测试命令(默认 `yarn test`、`yarn e2e`)。
|
|
@@ -63,31 +64,60 @@ wheel-ai run --task "补充文档" --ai-cli "claude" --ai-args "--model" "claude
|
|
|
63
64
|
- 仅支持一个 `[shortcut]`,且 `name` 不能包含空白字符。
|
|
64
65
|
- 配置文件不存在或内容不合法会被忽略,不影响正常使用。
|
|
65
66
|
|
|
66
|
-
## alias
|
|
67
|
-
可在 `~/.wheel-ai/config.toml` 中维护多个 alias
|
|
67
|
+
## alias 管理与使用
|
|
68
|
+
可在 `~/.wheel-ai/config.toml` 中维护多个 alias,便于复用常用参数组合:
|
|
68
69
|
|
|
69
70
|
```toml
|
|
70
71
|
[alias]
|
|
71
|
-
daily = "--task \"补充文档\" --
|
|
72
|
-
weekly = "
|
|
72
|
+
daily = "--task \"补充文档\" --run-tests"
|
|
73
|
+
weekly = "--task \"补充测试\" --run-tests --run-e2e"
|
|
73
74
|
```
|
|
74
75
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
-
|
|
78
|
-
- alias
|
|
76
|
+
命令示例:
|
|
77
|
+
```bash
|
|
78
|
+
wheel-ai alias set daily --task "补充文档" --run-tests
|
|
79
|
+
wheel-ai alias list
|
|
80
|
+
wheel-ai alias delete daily
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
在 run 中叠加 alias:
|
|
84
|
+
```bash
|
|
85
|
+
wheel-ai run --use-alias daily --use-alias weekly -t "balabala"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
- alias 名称不能为空且不能包含空白字符。
|
|
89
|
+
- `--use-alias` 可重复传入,按出现顺序叠加参数。
|
|
90
|
+
- 当出现同名选项时,后出现的 alias 覆盖前面的。
|
|
79
91
|
|
|
80
|
-
|
|
92
|
+
## agent 配置
|
|
93
|
+
可在 `~/.wheel-ai/config.toml` 中维护多个 AI CLI 命令,便于复用:
|
|
94
|
+
|
|
95
|
+
```toml
|
|
96
|
+
[agent]
|
|
97
|
+
claude = "claude --model sonnet"
|
|
98
|
+
openai = "openai --model gpt-4o"
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
命令示例:
|
|
81
102
|
```bash
|
|
82
|
-
wheel-ai
|
|
103
|
+
wheel-ai agent add claude claude --model sonnet
|
|
104
|
+
wheel-ai agent set openai openai --model gpt-4o
|
|
105
|
+
wheel-ai agent delete claude
|
|
106
|
+
wheel-ai agent list
|
|
83
107
|
```
|
|
84
108
|
|
|
85
|
-
|
|
109
|
+
在 run 中使用 agent:
|
|
86
110
|
```bash
|
|
87
|
-
wheel-ai
|
|
111
|
+
wheel-ai run --use-agent claude -t "补充文档"
|
|
88
112
|
```
|
|
89
|
-
|
|
90
|
-
-
|
|
113
|
+
|
|
114
|
+
- `--use-agent` 会叠加 agent 配置的参数,冲突时按命令行出现顺序覆盖。
|
|
115
|
+
|
|
116
|
+
- `add` 仅新增,已存在会报错。
|
|
117
|
+
- `set` 新增或覆盖。
|
|
118
|
+
- `delete` 删除指定 agent。
|
|
119
|
+
- `list` 输出全部 agent 配置。
|
|
120
|
+
- agent 名称不能为空且不能包含空白字符。
|
|
91
121
|
|
|
92
122
|
## 持久化记忆
|
|
93
123
|
- `docs/ai-workflow.md`:AI 执行前的工作流基线,需作为提示前置输入。
|
|
@@ -99,26 +129,33 @@ wheel-ai alias run daily --run-e2e --task "补充 e2e"
|
|
|
99
129
|
- 在监控界面按 `t` 触发终止,会弹出确认框(y/n)。
|
|
100
130
|
|
|
101
131
|
## Webhook 通知
|
|
102
|
-
可通过 `--webhook` 配置通知回调地址,系统会在任务开始、第 N 轮开始、任务结束时发送 POST JSON
|
|
132
|
+
可通过 `--webhook` 配置通知回调地址,系统会在任务开始、第 N 轮开始、任务结束时发送 POST JSON;其中“计划生成”阶段(`iteration_start` 且 `stage` 为“计划生成”)会额外携带 `plan` 字段,换行统一为 `\n`。
|
|
103
133
|
|
|
104
134
|
Payload 示例:
|
|
105
135
|
```json
|
|
106
136
|
{
|
|
107
137
|
"event": "task_start",
|
|
108
138
|
"task": "修复依赖安装错误",
|
|
139
|
+
"project": "webhook-start-task-project",
|
|
109
140
|
"branch": "feat/webhooks",
|
|
110
141
|
"iteration": 0,
|
|
111
142
|
"stage": "任务开始",
|
|
112
|
-
"timestamp": "
|
|
143
|
+
"timestamp": "20251224-210815",
|
|
144
|
+
"commit": "",
|
|
145
|
+
"pr": ""
|
|
113
146
|
}
|
|
114
147
|
```
|
|
115
148
|
字段说明:
|
|
116
149
|
- `event`:`task_start` / `iteration_start` / `task_end`
|
|
117
|
-
- `task
|
|
150
|
+
- `task`:任务描述(仅 `task_start` 会携带)
|
|
151
|
+
- `project`:当前工作目录名称(仅文件夹名,不含路径)
|
|
118
152
|
- `branch`:分支名(可能为空)
|
|
119
153
|
- `iteration`:当前轮次(任务开始为 0)
|
|
120
154
|
- `stage`:当前节点描述
|
|
121
|
-
- `timestamp
|
|
155
|
+
- `timestamp`:本地时区 `YYYYMMDD-HHmmss` 时间戳
|
|
156
|
+
- `commit`:提交链接(仅在自动提交且推送成功时写入,否则为空字符串)
|
|
157
|
+
- `pr`:PR 链接(存在时写入,否则为空字符串)
|
|
158
|
+
- `plan`:计划原文(仅 `iteration_start` 且 `stage` 为“计划生成”时携带,换行标准化为 `\n`)
|
|
122
159
|
|
|
123
160
|
## 开发约束
|
|
124
161
|
- 使用 yarn 管理依赖,TypeScript 避免 `any`。
|