@cloudglab/zentao-cli 0.1.4 → 0.1.6
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 +38 -0
- package/README.md +139 -257
- package/dist/api/execution.d.ts +33 -0
- package/dist/api/execution.js +363 -0
- package/dist/api/execution.js.map +1 -1
- package/dist/api/index.js +1 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/statistics.d.ts +38 -1
- package/dist/api/statistics.js +307 -1
- package/dist/api/statistics.js.map +1 -1
- package/dist/api/task.js +24 -5
- package/dist/api/task.js.map +1 -1
- package/dist/cli.js +21 -3
- package/dist/cli.js.map +1 -1
- package/dist/core/http.d.ts +1 -0
- package/dist/core/http.js +26 -0
- package/dist/core/http.js.map +1 -1
- package/dist/core/roles.js +1 -1
- package/dist/core/roles.js.map +1 -1
- package/dist/install.d.ts +2 -0
- package/dist/install.js +206 -0
- package/dist/install.js.map +1 -0
- package/dist/tools/execution.js +8 -0
- package/dist/tools/execution.js.map +1 -1
- package/dist/tools/statistics.js +8 -0
- package/dist/tools/statistics.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +10 -3
- package/skills/zentao-cli/SKILL.md +185 -0
- package/skills/zentao-cli/reference/bug.md +93 -0
- package/skills/zentao-cli/reference/build.md +21 -0
- package/skills/zentao-cli/reference/cli.md +25 -0
- package/skills/zentao-cli/reference/execution.md +38 -0
- package/skills/zentao-cli/reference/install.md +90 -0
- package/skills/zentao-cli/reference/overview.md +24 -0
- package/skills/zentao-cli/reference/plan.md +20 -0
- package/skills/zentao-cli/reference/product.md +14 -0
- package/skills/zentao-cli/reference/project.md +14 -0
- package/skills/zentao-cli/reference/statistics.md +30 -0
- package/skills/zentao-cli/reference/story.md +22 -0
- package/skills/zentao-cli/reference/task.md +21 -0
- package/skills/zentao-cli/reference/testcase.md +20 -0
- package/skills/zentao-cli/reference/testtask.md +20 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,44 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## 0.1.6 - 2026-06-06
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- 修正 `zentao install` / `zentao update` 的 skill 安装源,默认使用 `cloudglab/zentao-cli` GitHub 仓库源,避免把 npm 包名误解析为错误仓库地址。
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- 新增 `--skill-source npm` 安装模式:在不能访问远程 `.git` 仓库但可以访问 npm 的环境中,自动下载 `@cloudglab/zentao-cli` 静态包、解压并通过本地路径安装 skill。
|
|
14
|
+
- 新增 `--skill-local-path` 参数,支持直接从已解压的本地 skill 包目录安装。
|
|
15
|
+
- 新增安装流程测试,覆盖默认 GitHub 源和 npm 静态包本地路径安装流程。
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- README、skill 文档和安装参考文档补充 GitHub 源、npm 静态包、本地路径三种 skill 安装方式。
|
|
20
|
+
|
|
21
|
+
## 0.1.5 - 2026-06-06
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- 修正 skill 安装源:默认使用 `cloudglab/zentao-cli` GitHub 仓库源;不能访问远程 `.git` 仓库时,支持通过 npm 静态包解压后的本地路径安装 skill。
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
|
|
29
|
+
- 新增 `zentao install` / `zentao update` 内置命令,一键安装或更新 CLI 与 skill,并校验禅道配置。
|
|
30
|
+
- 新增 `getExecutionDynamic`,支持按执行 ID 近似读取执行动态摘要。
|
|
31
|
+
- 新增 `getExecutionDailyBugStats`,输出迭代每日 Bug、任务、参与人员和问题明细统计报告。
|
|
32
|
+
- 新增 `getMyWeeklyActivity`,支持上周、本周、最近 N 天、单日和自定义日期范围的个人阶段性工作清单。
|
|
33
|
+
- 新增 Vitest 测试体系、覆盖率配置和 lefthook pre-commit 检查入口。
|
|
34
|
+
- 新增核心函数、API 封装、工具注册、配置、认证和 HTTP 客户端测试。
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
|
|
38
|
+
- `getMyTasks` 改为尽量拉取完整任务列表后在客户端按状态和分页过滤,以适配部分禅道部署忽略查询参数的问题。
|
|
39
|
+
- QA 角色新增任务相关命令入口。
|
|
40
|
+
- npm 发布文件列表加入 `skills` 目录,确保 skill 随包发布。
|
|
41
|
+
- README、skill 和 reference 文档同步到新增安装、动态和统计能力。
|
|
42
|
+
|
|
5
43
|
## 0.1.4 - 2026-06-05
|
|
6
44
|
|
|
7
45
|
### Changed
|
package/README.md
CHANGED
|
@@ -1,319 +1,201 @@
|
|
|
1
1
|
# @cloudglab/zentao-cli
|
|
2
2
|
|
|
3
|
-
基于 TypeScript 重建的禅道命令行工具,优先适配当前禅道 `18.5` 的 REST v1 API。
|
|
4
|
-
|
|
5
3
|

|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
把禅道任务、Bug、执行、构建、动态和统计能力接到命令行,方便在 CI、脚本和 AI Skill 里直接调用。
|
|
8
6
|
|
|
9
|
-
##
|
|
7
|
+
## 安装方式
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
- `4` 个内置角色:`Dev / QA / PM / Full`
|
|
13
|
-
- 基于 TypeScript 重建,优先适配禅道 `18.5` REST v1 API
|
|
14
|
-
- 发布产物运行时目标:`Node.js >= 16`
|
|
15
|
-
- 默认写保护,写操作需要显式开启并确认,更适合接入智能体和自动化流程
|
|
9
|
+
### 一键安装 CLI + Skill
|
|
16
10
|
|
|
17
|
-
|
|
11
|
+
```bash
|
|
12
|
+
npx -y @cloudglab/zentao-cli@latest install
|
|
13
|
+
```
|
|
18
14
|
|
|
19
|
-
|
|
15
|
+
该命令会依次安装全局 CLI、安装 skill,并在禅道配置缺失或登录校验失败时引导输入配置。
|
|
20
16
|
|
|
21
|
-
|
|
17
|
+
默认通过 GitHub 仓库安装 skill。如果当前环境不能访问远程 `.git` 仓库,但可以访问 npm 包,可改用 npm 静态包模式:
|
|
22
18
|
|
|
23
19
|
```bash
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
# 直接运行
|
|
27
|
-
npx -y @cloudglab/zentao-cli@latest
|
|
28
|
-
|
|
29
|
-
# 全局安装
|
|
30
|
-
npm i -g @cloudglab/zentao-cli@latest
|
|
20
|
+
npx -y @cloudglab/zentao-cli@latest install --skill-source npm
|
|
31
21
|
```
|
|
32
22
|
|
|
33
|
-
|
|
23
|
+
npm 模式会下载 `@cloudglab/zentao-cli` 包,解压其中的 `skills/` 目录,再通过本地路径安装 skill。
|
|
34
24
|
|
|
35
|
-
|
|
36
|
-
export ZENTAO_URL="https://your-zentao.example.com"
|
|
37
|
-
export ZENTAO_USERNAME="your-account"
|
|
38
|
-
export ZENTAO_PASSWORD="your-password"
|
|
39
|
-
export ZENTAO_API_VERSION="v1"
|
|
25
|
+
如果已经提前下载并解压好了 npm 静态包,也可以直接指定本地目录:
|
|
40
26
|
|
|
41
|
-
|
|
42
|
-
|
|
27
|
+
```bash
|
|
28
|
+
zentao install --skill-local-path ./package
|
|
43
29
|
```
|
|
44
30
|
|
|
45
|
-
|
|
31
|
+
后续更新也可以直接运行:
|
|
46
32
|
|
|
47
33
|
```bash
|
|
48
|
-
|
|
49
|
-
zentao help
|
|
50
|
-
zentao --version
|
|
51
|
-
|
|
52
|
-
# 默认 full 角色
|
|
53
|
-
zentao list
|
|
54
|
-
zentao getMyTasks --status all --limit 20
|
|
55
|
-
|
|
56
|
-
# 按角色启动
|
|
57
|
-
zentao --role dev getMyTasks --status all
|
|
58
|
-
zentao --role qa getMyBugs --limit 50
|
|
59
|
-
zentao --role pm getProducts
|
|
60
|
-
|
|
61
|
-
# 也可以直接用 npx
|
|
62
|
-
npx -y @cloudglab/zentao-cli@latest --role qa getMyBugs --limit 50
|
|
34
|
+
zentao update
|
|
63
35
|
```
|
|
64
36
|
|
|
65
|
-
|
|
37
|
+
### CI / 脚本里临时使用
|
|
66
38
|
|
|
67
|
-
|
|
39
|
+
```bash
|
|
40
|
+
npx -y @cloudglab/zentao-cli@latest --help
|
|
41
|
+
npx -y @cloudglab/zentao-cli@latest --role qa getMyTasks --status all --limit 20
|
|
42
|
+
```
|
|
68
43
|
|
|
69
|
-
|
|
44
|
+
### 全局安装
|
|
70
45
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
46
|
+
```bash
|
|
47
|
+
npm i -g @cloudglab/zentao-cli@latest
|
|
48
|
+
zentao --version
|
|
49
|
+
zentao version
|
|
50
|
+
zentao help
|
|
51
|
+
```
|
|
77
52
|
|
|
78
|
-
###
|
|
53
|
+
### Skill 安装
|
|
79
54
|
|
|
80
|
-
|
|
55
|
+
默认 GitHub 仓库方式:
|
|
81
56
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
4. 只在不能安装时,才退回 `npx -y @cloudglab/zentao-cli@latest`
|
|
57
|
+
```bash
|
|
58
|
+
npx -y skills add -g cloudglab/zentao-cli
|
|
59
|
+
```
|
|
86
60
|
|
|
87
|
-
|
|
61
|
+
如果只能访问 npm,不能 clone `.git` 仓库:
|
|
88
62
|
|
|
89
63
|
```bash
|
|
90
|
-
|
|
91
|
-
zentao
|
|
64
|
+
npm pack @cloudglab/zentao-cli@latest
|
|
65
|
+
tar -xzf cloudglab-zentao-cli-*.tgz
|
|
66
|
+
npx -y skills add -g ./package
|
|
92
67
|
```
|
|
93
68
|
|
|
94
|
-
|
|
69
|
+
Skill / Agent 里推荐优先调用本地命令:
|
|
95
70
|
|
|
96
71
|
```bash
|
|
97
72
|
zentao --role qa getMyBugs --limit 50
|
|
98
|
-
zentao getProductBugs --productId 123 --status all --limit 100
|
|
99
73
|
```
|
|
100
74
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
适合把当前能力包装成可复用的 AI Skill,对外推广更友好。
|
|
104
|
-
|
|
105
|
-
相关文档:
|
|
106
|
-
- `skills/zentao-cli/reference/overview.md`
|
|
107
|
-
- `skills/zentao-cli/reference/install.md`
|
|
108
|
-
|
|
109
|
-
安装 skill 时,统一走:
|
|
75
|
+
本地没有安装时再退回:
|
|
110
76
|
|
|
111
77
|
```bash
|
|
112
|
-
npx
|
|
78
|
+
npx -y @cloudglab/zentao-cli@latest --role qa getMyBugs --limit 50
|
|
113
79
|
```
|
|
114
80
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
- 优先:`zentao`
|
|
118
|
-
- 或按角色:`zentao --role qa`
|
|
119
|
-
- 无本地安装时兜底:`npx -y @cloudglab/zentao-cli@latest`
|
|
120
|
-
|
|
121
|
-
适合场景:
|
|
122
|
-
- 给团队成员提供统一入口
|
|
123
|
-
- 给非开发用户提供更低门槛的禅道操作方式
|
|
124
|
-
- 做内部推广和标准化接入
|
|
125
|
-
|
|
126
|
-
## 当前 MVP 能力
|
|
127
|
-
|
|
128
|
-
- token 登录:仅在明确鉴权失败时才从明文密码回退到 MD5
|
|
129
|
-
- 登录错误分类:区分账号密码错误、token 接口不存在、网络失败、服务端异常
|
|
130
|
-
- 自动清洗 PHP warning + JSON 混合响应
|
|
131
|
-
- `getMyTasks`
|
|
132
|
-
- `getTaskDetail`
|
|
133
|
-
- `getBugDetail`
|
|
134
|
-
- `getStoryDetail`
|
|
135
|
-
- `getExecutionDetail`
|
|
136
|
-
- `getExecutionBugs`
|
|
137
|
-
- `getMyBugs`
|
|
138
|
-
- `getProductBugs`
|
|
139
|
-
- `getComments`
|
|
140
|
-
- 写操作 preview:`updateTask`、`finishTask`、`resolveBug`、`addComment`
|
|
141
|
-
- `getMyProfile`
|
|
142
|
-
- `getMyTaskStatistics`
|
|
143
|
-
- `getMyBugStatistics`
|
|
144
|
-
- `getStoryRelatedBugs`
|
|
145
|
-
- `getBugRelatedStory`
|
|
146
|
-
- `getDevelopmentContext`
|
|
147
|
-
- `getProducts` / `getProductDetail`
|
|
148
|
-
- `getProjects` / `getProjectDetail`
|
|
149
|
-
- `getProjectExecutions` / `getExecutionBuilds`
|
|
150
|
-
- `getProductStories`
|
|
151
|
-
- `getProductTestCases` / `getTestCaseDetail`
|
|
152
|
-
- `getTestTasks` / `getTestTaskDetail`
|
|
153
|
-
- `getPrograms` / `getProgramDetail`
|
|
154
|
-
- `getProductPlans` / `getPlanDetail`
|
|
155
|
-
- `getProjectBuilds` / `getBuildDetail`
|
|
156
|
-
- `getProjectReleases`
|
|
157
|
-
- `searchStories`
|
|
158
|
-
- `searchStoriesByProductName`
|
|
159
|
-
- `updateStory` / `changeStory`(默认 preview)
|
|
160
|
-
- `createTaskFromStory` / `createTaskFromBug`(默认 preview)
|
|
161
|
-
- `linkStoriesToPlan` / `unlinkStoriesFromPlan`(默认 preview)
|
|
162
|
-
- `linkBugsToPlan` / `unlinkBugsFromPlan`(默认 preview)
|
|
163
|
-
- `updateExecution` / `startExecution` / `closeExecution` / `suspendExecution` / `activateExecution` / `putoffExecution`(默认 preview)
|
|
164
|
-
- `createBuild` / `updateBuild`(默认 preview)
|
|
165
|
-
- `createTestCase` / `updateTestCase`(默认 preview)
|
|
166
|
-
- `createTestTask` / `updateTestTask`(默认 preview)
|
|
167
|
-
|
|
168
|
-
`updateExecution` 按禅道 18.5 REST v1 文档/源码需要保留/传入:
|
|
169
|
-
|
|
170
|
-
- `project`
|
|
171
|
-
- `name`
|
|
172
|
-
- `code`
|
|
173
|
-
- `begin`
|
|
174
|
-
- `end`
|
|
175
|
-
|
|
176
|
-
注意:`updateExecution` 在禅道 18.5 且后台启用代号时存在服务端源码问题:`api/v1/entries/execution.php` 中 `$fields .= 'code'` 缺少前置逗号,导致请求体里的 `code` 不会进入服务端 `$_POST`,服务端会误报 `『迭代代号』不能为空。`。客户端无法稳定绕过;工具仍保留,但调用时会直接返回该诊断错误,不做真实写入。
|
|
177
|
-
|
|
178
|
-
`createBuild` 当前按禅道 18.5 实机/参考包契约使用 `POST /projects/{project}/builds`,通常需要提供:
|
|
179
|
-
|
|
180
|
-
- `project`
|
|
181
|
-
- `execution`
|
|
182
|
-
- `product`
|
|
183
|
-
- `name`
|
|
184
|
-
- `builder`
|
|
185
|
-
|
|
186
|
-
补充说明:
|
|
187
|
-
|
|
188
|
-
- `createTaskFromStory` / `createTaskFromBug` 在当前实例上实机验证发现通常需要额外提供:
|
|
189
|
-
- `assignedTo`
|
|
190
|
-
- `estStarted`
|
|
191
|
-
- `deadline`
|
|
192
|
-
- `createTaskFromBug` 当前只保证:
|
|
193
|
-
- 基于 Bug 预填任务内容并尝试创建任务
|
|
194
|
-
- 不保证创建后自动建立 Bug 关联
|
|
195
|
-
- 角色工具过滤:`full` / `dev` / `qa` / `pm`
|
|
196
|
-
- 写操作保护 helper:默认禁用写操作,后续写工具必须配合 `ZENTAO_ENABLE_WRITE=true` 和 `confirm: true`;已知 18.5 不支持或服务端有缺陷的写工具会保留入口,但调用时直接返回明确诊断错误。
|
|
197
|
-
- Phase 3B 写工具(execution / build / testcase / testtask)默认同样返回 preview,真实执行仍需 `ZENTAO_ENABLE_WRITE=true` + `confirm=true`:
|
|
198
|
-
- execution:`updateExecution` / `startExecution` / `closeExecution` / `suspendExecution` / `activateExecution` / `putoffExecution`
|
|
199
|
-
- build:`createBuild` / `updateBuild`
|
|
200
|
-
- testcase:`createTestCase` / `updateTestCase`
|
|
201
|
-
- testtask:`createTestTask` / `updateTestTask`
|
|
202
|
-
- 角色权限:
|
|
203
|
-
- `full` 拥有 `execution-write` + `build-write` + `testcase-write` + `testtask-write`
|
|
204
|
-
- `dev` 拥有 `execution-write` + `build-write`
|
|
205
|
-
- `pm` 仅拥有 `execution-write`
|
|
206
|
-
- `qa` 拥有 `testcase-write` + `testtask-write`
|
|
207
|
-
- `createTestCase` / `updateTestCase` 当前按禅道 18.5 REST v1 契约:
|
|
208
|
-
- 创建路径:`POST /products/{productId}/testcases`
|
|
209
|
-
- 更新路径:`PUT /testcases/{testCaseId}`
|
|
210
|
-
- `steps` 数组每项形如 `{ desc, expect, type? }`,`type` 支持 `step` / `item` / `group`,默认 `step`
|
|
211
|
-
- `module` / `story` 允许传 `0` 表示无模块 / 无关联需求
|
|
212
|
-
- `project` / `execution` / `keywords` 不是禅道 18.5 REST v1 用例创建/更新 entry 接收字段,传入会被服务端忽略;18.5 v1 创建的是产品用例,不会直接绑定项目/执行。
|
|
213
|
-
- `createTestTask` 当前按禅道 18.5 REST v1 契约:
|
|
214
|
-
- 创建路径:`POST /projects/{project}/testtasks`
|
|
215
|
-
- 创建必填:`project` / `productID` / `name` / `build` / `begin` / `end`,`begin` / `end` 格式 `YYYY-MM-DD`
|
|
216
|
-
- 创建请求体实际使用 `product` 字段,工具入参保留 `productID` 并在 API 层映射
|
|
217
|
-
- `build` 兼容数字 ID 和字符串 ID
|
|
218
|
-
- `createTestTask` 当前实例真实写验证通过
|
|
219
|
-
- `updateTestTask`:禅道 18.5 v1 `api/v1/entries/testtask.php` 只有 `get/delete`,没有 `put` 更新入口。工具仍保留,但调用时会直接返回该诊断错误,不做真实写入。
|
|
220
|
-
- `linkBugsToPlan` 已按 18.5 源码修正为 `POST /productplans/{planId}/linkbugs`。
|
|
221
|
-
- `finishTask` 已按 18.5 源码改为 `POST /tasks/{taskId}/finish`,需要 `currentConsumed` / `realStarted` / `finishedDate`。
|
|
222
|
-
- `addComment`:禅道 18.5 v1 没有 `comment/comments` entry,当前只支持 `getComments` 从对象详情 actions 回退读取;`addComment` 工具仍保留,但调用时会直接返回该诊断错误。
|
|
223
|
-
- token 失效后自动重试一次
|
|
224
|
-
- 可选 `ZENTAO_API_BASE_URL`:用于非标准 `/zentao/api.php/v1` 部署
|
|
225
|
-
|
|
226
|
-
## 配置
|
|
227
|
-
|
|
228
|
-
说明:
|
|
229
|
-
|
|
230
|
-
- `getMyBugs` 当前默认语义是“跨所有产品指派给我的 Bug”;传 `productId` 时收窄到指定产品。
|
|
231
|
-
- `getMyBugStatistics` 默认统计跨所有产品指派给我的 Bug;传 `productId` 时收窄到指定产品。
|
|
232
|
-
- `getComments` 在禅道 18.5 上会 fallback 到对象详情里的 `actions`,返回结果会明确标注 `source: "actions-fallback"`。
|
|
233
|
-
- `updateTask` / `finishTask` 不会默认修改 `assignedTo`,只有显式传入才会更新指派人。
|
|
234
|
-
|
|
235
|
-
支持环境变量:
|
|
81
|
+
## 环境变量
|
|
236
82
|
|
|
237
83
|
```bash
|
|
238
|
-
export ZENTAO_URL="https://zentao.
|
|
84
|
+
export ZENTAO_URL="https://your-zentao.example.com"
|
|
239
85
|
export ZENTAO_USERNAME="your-account"
|
|
240
86
|
export ZENTAO_PASSWORD="your-password"
|
|
241
87
|
export ZENTAO_API_VERSION="v1"
|
|
242
|
-
# 可选:非标准部署时直接指定完整 API 基础地址
|
|
243
|
-
# export ZENTAO_API_BASE_URL="https://zentao.cloudglab.cn/custom/api.php/v1"
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
注意:`ZENTAO_URL` 传根域名即可,不要带 `/zentao`。
|
|
247
|
-
|
|
248
|
-
`initZentao` 现在默认只校验并在当前进程内生效,不会自动把密码写入 `~/.zentao/config.json`。
|
|
249
|
-
只有显式传 `save: true` 才会落盘。
|
|
250
|
-
|
|
251
|
-
## 开发
|
|
252
88
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
pnpm typecheck
|
|
256
|
-
pnpm build
|
|
89
|
+
# 可选:非标准部署时指定完整 API 基础地址
|
|
90
|
+
# export ZENTAO_API_BASE_URL="https://your-zentao.example.com/custom/api.php/v1"
|
|
257
91
|
```
|
|
258
92
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
93
|
+
`ZENTAO_URL` 传根域名即可,不要带 `/zentao`。
|
|
94
|
+
|
|
95
|
+
## 可以这样描述场景
|
|
96
|
+
|
|
97
|
+
下面这些话可以交给 AI Skill / Agent 转成对应的 zentao-cli 命令。
|
|
98
|
+
|
|
99
|
+
### 我的任务和 Bug
|
|
100
|
+
|
|
101
|
+
- 我今天的 Bug 有多少?
|
|
102
|
+
- 我今天的任务有多少?
|
|
103
|
+
- 获取我的所有任务。
|
|
104
|
+
- 看我等待中的任务。
|
|
105
|
+
- 看我进行中的任务。
|
|
106
|
+
- 看我已取消的任务。
|
|
107
|
+
- 分页看我的任务。
|
|
108
|
+
- 看我当前指派的 Bug。
|
|
109
|
+
- 统计我当前 Bug 的状态分布。
|
|
110
|
+
- 统计我当前任务的状态分布。
|
|
111
|
+
|
|
112
|
+
### 一段时间内我做了什么
|
|
113
|
+
|
|
114
|
+
- 分析上周我都干了什么。
|
|
115
|
+
- 查一下我本周解决了多少个 Bug。
|
|
116
|
+
- 查一下 lixm1 上周解决了多少个 Bug。
|
|
117
|
+
- 看 lixm1 最近 3 天做了什么。
|
|
118
|
+
- 看我 2026-05-28 做了什么。
|
|
119
|
+
- 拉一下 2026-05-25 到 2026-05-29 的工作清单。
|
|
120
|
+
- 汇总我上周的评论、指派、流转和解决记录。
|
|
121
|
+
- 按天列出我最近几天处理过的 Bug 和任务。
|
|
122
|
+
|
|
123
|
+
### 执行 / 迭代统计
|
|
124
|
+
|
|
125
|
+
- 这个迭代有多少个 Bug?
|
|
126
|
+
- 这个迭代今天解决了多少个问题?
|
|
127
|
+
- 分析 execution 2067 的每日迭代执行统计。
|
|
128
|
+
- 生成 1.2.3 迭代日报。
|
|
129
|
+
- 统计某个迭代今天 Bug 和任务情况。
|
|
130
|
+
- 看这个执行的 Bug、任务、参与人员和风险明细。
|
|
131
|
+
- 统计这个迭代的延期 Bug、reopen Bug 和未解决 Bug。
|
|
132
|
+
- 看这个迭代里测试未及时关闭的问题。
|
|
133
|
+
- 看这个迭代里开发今日未及时解决的问题。
|
|
134
|
+
- 看这个迭代的任务总数、完成数、逾期未完成数和工时消耗。
|
|
135
|
+
- 看这个迭代每个人负责了多少 Bug 和任务。
|
|
136
|
+
|
|
137
|
+
### 禅道页面 URL 查询
|
|
138
|
+
|
|
139
|
+
- 列出 `execution-bug-2130.html` 里面的 Bug。
|
|
140
|
+
- 看 `execution-build-2130.html` 这个执行有哪些版本。
|
|
141
|
+
- 看 `execution-dynamic-2130.html` 这个执行最近的动态。
|
|
142
|
+
- 从禅道 Bug 列表页里提取 execution ID 并列出 Bug。
|
|
143
|
+
- 从禅道版本页里提取 execution ID 并列出构建。
|
|
144
|
+
|
|
145
|
+
### Bug 和版本
|
|
146
|
+
|
|
147
|
+
- 看某个执行下有哪些版本。
|
|
148
|
+
- 解决 Bug 时关联到某个版本。
|
|
149
|
+
- 查某个执行下已解决但还没关闭的 Bug。
|
|
150
|
+
- 查某个执行下延期处理的 Bug。
|
|
151
|
+
- 查某个执行下 reopen 过的 Bug。
|
|
152
|
+
|
|
153
|
+
### 需求、产品、项目和测试
|
|
154
|
+
|
|
155
|
+
- 查某个产品下的需求。
|
|
156
|
+
- 查某个产品下的 Bug。
|
|
157
|
+
- 查某个项目下的执行列表。
|
|
158
|
+
- 查某个执行下的构建列表。
|
|
159
|
+
- 查某个产品下的测试用例。
|
|
160
|
+
- 查某个测试单详情。
|
|
161
|
+
- 搜索包含某个关键词的需求。
|
|
162
|
+
|
|
163
|
+
## 常用命令示例
|
|
282
164
|
|
|
283
165
|
```bash
|
|
284
|
-
|
|
285
|
-
|
|
166
|
+
# 我的任务
|
|
167
|
+
zentao --role qa getMyTasks --status all --limit 100
|
|
168
|
+
zentao --role qa getMyTasks --status wait --limit 50
|
|
169
|
+
|
|
170
|
+
# 我的阶段性工作清单
|
|
171
|
+
zentao --role qa getMyWeeklyActivity --account lixm1 --week last
|
|
172
|
+
zentao --role qa getMyWeeklyActivity --account lixm1 --dateRange 最近3天
|
|
173
|
+
zentao --role qa getMyWeeklyActivity --account lixm1 --dateRange 2026-05-25到2026-05-29
|
|
174
|
+
|
|
175
|
+
# 执行 Bug / 构建 / 动态
|
|
176
|
+
zentao --role qa getExecutionBugs --executionId 2130 --limit 100
|
|
177
|
+
zentao --role qa getExecutionBuilds --executionId 2130
|
|
178
|
+
zentao --role qa getExecutionDynamic --executionId 2130
|
|
179
|
+
|
|
180
|
+
# 每日迭代执行统计
|
|
181
|
+
zentao --role qa getExecutionDailyBugStats --executionId 2067 --iterationName 1.2.3迭代
|
|
182
|
+
zentao --role qa getExecutionDailyBugStats --executionId 2067 --iterationName 1.2.3迭代 --date 2026-06-06
|
|
286
183
|
```
|
|
287
184
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
- tag `v0.1.0` 是否与 `package.json` 中的 `0.1.0` 一致
|
|
185
|
+
## 写操作保护
|
|
291
186
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
### 推荐顺序
|
|
187
|
+
默认不写入线上。真实写操作需要同时满足:
|
|
295
188
|
|
|
296
189
|
```bash
|
|
297
|
-
|
|
298
|
-
# 2. 提交代码
|
|
299
|
-
# 3. 推送分支
|
|
300
|
-
# 4. 打 tag
|
|
301
|
-
git tag v0.1.0
|
|
302
|
-
git push origin main
|
|
303
|
-
git push origin v0.1.0
|
|
190
|
+
export ZENTAO_ENABLE_WRITE=true
|
|
304
191
|
```
|
|
305
192
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
下面这些仍需要你首次手动完成一次:
|
|
193
|
+
并且命令参数里显式传入 `confirm=true`。
|
|
309
194
|
|
|
310
|
-
|
|
311
|
-
- 首次 commit
|
|
312
|
-
- 创建 GitHub 仓库并 push 上去
|
|
313
|
-
- 在 npm 包侧完成 trusted publisher 绑定
|
|
314
|
-
|
|
315
|
-
## 启动
|
|
195
|
+
## 更多命令
|
|
316
196
|
|
|
317
197
|
```bash
|
|
318
|
-
|
|
198
|
+
zentao help
|
|
199
|
+
zentao list
|
|
200
|
+
zentao --role qa list
|
|
319
201
|
```
|
package/dist/api/execution.d.ts
CHANGED
|
@@ -26,10 +26,15 @@ export interface PutoffExecutionInput {
|
|
|
26
26
|
days: number;
|
|
27
27
|
comment?: string;
|
|
28
28
|
}
|
|
29
|
+
export interface ExecutionDailyBugStatsInput {
|
|
30
|
+
iterationName?: string;
|
|
31
|
+
date?: string;
|
|
32
|
+
}
|
|
29
33
|
export declare class ExecutionApi {
|
|
30
34
|
private readonly http;
|
|
31
35
|
constructor(http: ZentaoHttpClient);
|
|
32
36
|
getExecutionDetail(executionId: number): Promise<ZentaoExecution>;
|
|
37
|
+
getExecutionDynamic(executionId: number): Promise<unknown>;
|
|
33
38
|
getProjectExecutions(projectId: number): Promise<unknown>;
|
|
34
39
|
getExecutionBuilds(executionId: number): Promise<unknown>;
|
|
35
40
|
getExecutionBugs(executionId: number, params?: {
|
|
@@ -37,10 +42,38 @@ export declare class ExecutionApi {
|
|
|
37
42
|
limit?: number;
|
|
38
43
|
status?: string;
|
|
39
44
|
}): Promise<unknown>;
|
|
45
|
+
getExecutionDailyBugStats(executionId: number, input?: ExecutionDailyBugStatsInput): Promise<unknown>;
|
|
40
46
|
updateExecution(executionId: number, update: UpdateExecutionInput): Promise<unknown>;
|
|
41
47
|
startExecution(executionId: number, payload?: ExecutionActionInput): Promise<unknown>;
|
|
42
48
|
closeExecution(executionId: number, payload?: ExecutionActionInput): Promise<unknown>;
|
|
43
49
|
suspendExecution(executionId: number, payload?: ExecutionActionInput): Promise<unknown>;
|
|
44
50
|
activateExecution(executionId: number, payload?: ExecutionActionInput): Promise<unknown>;
|
|
45
51
|
putoffExecution(executionId: number, payload: PutoffExecutionInput): Promise<unknown>;
|
|
52
|
+
private getAllExecutionBugs;
|
|
53
|
+
private getAllExecutionTasks;
|
|
54
|
+
private buildParticipantBugStats;
|
|
55
|
+
private getBugOwner;
|
|
56
|
+
private isDelayedBug;
|
|
57
|
+
private resolveUserNames;
|
|
58
|
+
private buildDailyBugNotes;
|
|
59
|
+
private buildSeveritySummary;
|
|
60
|
+
private buildTaskSummary;
|
|
61
|
+
private buildTaskParticipantStats;
|
|
62
|
+
private buildTaskDetails;
|
|
63
|
+
private getTaskOwner;
|
|
64
|
+
private isOverdueUnfinishedTask;
|
|
65
|
+
private buildBugDetails;
|
|
66
|
+
private formatDailyBugStatsReport;
|
|
67
|
+
private formatBugDetailSection;
|
|
68
|
+
private formatTaskDetailSection;
|
|
69
|
+
private formatCountWithRate;
|
|
70
|
+
private formatCountWithRateOrZero;
|
|
71
|
+
private percent;
|
|
72
|
+
private resolveStatsDate;
|
|
73
|
+
private parseDate;
|
|
74
|
+
private toDateOnly;
|
|
75
|
+
private isOnOrBefore;
|
|
76
|
+
private addDays;
|
|
77
|
+
private formatDate;
|
|
78
|
+
private toString;
|
|
46
79
|
}
|