@cloudglab/zentao-cli 0.1.3
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 +50 -0
- package/MCP_ZENTAO_REBUILD_PLAN.md +505 -0
- package/README.md +319 -0
- package/dist/api/bug.d.ts +32 -0
- package/dist/api/bug.js +85 -0
- package/dist/api/bug.js.map +1 -0
- package/dist/api/build.d.ts +31 -0
- package/dist/api/build.js +21 -0
- package/dist/api/build.js.map +1 -0
- package/dist/api/comment.d.ts +20 -0
- package/dist/api/comment.js +47 -0
- package/dist/api/comment.js.map +1 -0
- package/dist/api/development-context.d.ts +14 -0
- package/dist/api/development-context.js +35 -0
- package/dist/api/development-context.js.map +1 -0
- package/dist/api/execution.d.ts +46 -0
- package/dist/api/execution.js +47 -0
- package/dist/api/execution.js.map +1 -0
- package/dist/api/index.d.ts +43 -0
- package/dist/api/index.js +46 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/plan.d.ts +18 -0
- package/dist/api/plan.js +33 -0
- package/dist/api/plan.js.map +1 -0
- package/dist/api/product.d.ts +7 -0
- package/dist/api/product.js +14 -0
- package/dist/api/product.js.map +1 -0
- package/dist/api/program.d.ts +7 -0
- package/dist/api/program.js +14 -0
- package/dist/api/program.js.map +1 -0
- package/dist/api/project.d.ts +8 -0
- package/dist/api/project.js +15 -0
- package/dist/api/project.js.map +1 -0
- package/dist/api/relation.d.ts +17 -0
- package/dist/api/relation.js +66 -0
- package/dist/api/relation.js.map +1 -0
- package/dist/api/release.d.ts +6 -0
- package/dist/api/release.js +11 -0
- package/dist/api/release.js.map +1 -0
- package/dist/api/search.d.ts +17 -0
- package/dist/api/search.js +168 -0
- package/dist/api/search.js.map +1 -0
- package/dist/api/statistics.d.ts +13 -0
- package/dist/api/statistics.js +67 -0
- package/dist/api/statistics.js.map +1 -0
- package/dist/api/story.d.ts +14 -0
- package/dist/api/story.js +23 -0
- package/dist/api/story.js.map +1 -0
- package/dist/api/task.d.ts +17 -0
- package/dist/api/task.js +37 -0
- package/dist/api/task.js.map +1 -0
- package/dist/api/testcase.d.ts +51 -0
- package/dist/api/testcase.js +31 -0
- package/dist/api/testcase.js.map +1 -0
- package/dist/api/testtask.d.ts +41 -0
- package/dist/api/testtask.js +34 -0
- package/dist/api/testtask.js.map +1 -0
- package/dist/api/user.d.ts +6 -0
- package/dist/api/user.js +9 -0
- package/dist/api/user.js.map +1 -0
- package/dist/bin/zentao-dev.d.ts +2 -0
- package/dist/bin/zentao-dev.js +8 -0
- package/dist/bin/zentao-dev.js.map +1 -0
- package/dist/bin/zentao-pm.d.ts +2 -0
- package/dist/bin/zentao-pm.js +8 -0
- package/dist/bin/zentao-pm.js.map +1 -0
- package/dist/bin/zentao-qa.d.ts +2 -0
- package/dist/bin/zentao-qa.js +8 -0
- package/dist/bin/zentao-qa.js.map +1 -0
- package/dist/bin/zentao.d.ts +2 -0
- package/dist/bin/zentao.js +8 -0
- package/dist/bin/zentao.js.map +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +74 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/api-provider.d.ts +3 -0
- package/dist/core/api-provider.js +17 -0
- package/dist/core/api-provider.js.map +1 -0
- package/dist/core/auth.d.ts +13 -0
- package/dist/core/auth.js +90 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/cli-registry.d.ts +18 -0
- package/dist/core/cli-registry.js +128 -0
- package/dist/core/cli-registry.js.map +1 -0
- package/dist/core/config.d.ts +7 -0
- package/dist/core/config.js +58 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/http.d.ts +12 -0
- package/dist/core/http.js +50 -0
- package/dist/core/http.js.map +1 -0
- package/dist/core/list-result.d.ts +14 -0
- package/dist/core/list-result.js +59 -0
- package/dist/core/list-result.js.map +1 -0
- package/dist/core/pagination.d.ts +9 -0
- package/dist/core/pagination.js +12 -0
- package/dist/core/pagination.js.map +1 -0
- package/dist/core/roles.d.ts +4 -0
- package/dist/core/roles.js +13 -0
- package/dist/core/roles.js.map +1 -0
- package/dist/core/tool-registry.d.ts +3 -0
- package/dist/core/tool-registry.js +77 -0
- package/dist/core/tool-registry.js.map +1 -0
- package/dist/core/write-guard.d.ts +25 -0
- package/dist/core/write-guard.js +53 -0
- package/dist/core/write-guard.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/bug.d.ts +2 -0
- package/dist/tools/bug.js +41 -0
- package/dist/tools/bug.js.map +1 -0
- package/dist/tools/build.d.ts +2 -0
- package/dist/tools/build.js +8 -0
- package/dist/tools/build.js.map +1 -0
- package/dist/tools/comment.d.ts +2 -0
- package/dist/tools/comment.js +23 -0
- package/dist/tools/comment.js.map +1 -0
- package/dist/tools/context.d.ts +2 -0
- package/dist/tools/context.js +11 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/execution.d.ts +2 -0
- package/dist/tools/execution.js +21 -0
- package/dist/tools/execution.js.map +1 -0
- package/dist/tools/init.d.ts +2 -0
- package/dist/tools/init.js +28 -0
- package/dist/tools/init.js.map +1 -0
- package/dist/tools/phase3a.d.ts +4 -0
- package/dist/tools/phase3a.js +123 -0
- package/dist/tools/phase3a.js.map +1 -0
- package/dist/tools/phase3b.d.ts +5 -0
- package/dist/tools/phase3b.js +161 -0
- package/dist/tools/phase3b.js.map +1 -0
- package/dist/tools/plan.d.ts +2 -0
- package/dist/tools/plan.js +14 -0
- package/dist/tools/plan.js.map +1 -0
- package/dist/tools/product.d.ts +2 -0
- package/dist/tools/product.js +10 -0
- package/dist/tools/product.js.map +1 -0
- package/dist/tools/profile.d.ts +2 -0
- package/dist/tools/profile.js +6 -0
- package/dist/tools/profile.js.map +1 -0
- package/dist/tools/program.d.ts +2 -0
- package/dist/tools/program.js +8 -0
- package/dist/tools/program.js.map +1 -0
- package/dist/tools/project.d.ts +2 -0
- package/dist/tools/project.js +13 -0
- package/dist/tools/project.js.map +1 -0
- package/dist/tools/relation.d.ts +2 -0
- package/dist/tools/relation.js +13 -0
- package/dist/tools/relation.js.map +1 -0
- package/dist/tools/release.d.ts +2 -0
- package/dist/tools/release.js +7 -0
- package/dist/tools/release.js.map +1 -0
- package/dist/tools/search.d.ts +2 -0
- package/dist/tools/search.js +18 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/shared.d.ts +2 -0
- package/dist/tools/shared.js +11 -0
- package/dist/tools/shared.js.map +1 -0
- package/dist/tools/statistics.d.ts +2 -0
- package/dist/tools/statistics.js +10 -0
- package/dist/tools/statistics.js.map +1 -0
- package/dist/tools/story.d.ts +2 -0
- package/dist/tools/story.js +14 -0
- package/dist/tools/story.js.map +1 -0
- package/dist/tools/task.d.ts +2 -0
- package/dist/tools/task.js +48 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/testcase.d.ts +2 -0
- package/dist/tools/testcase.js +16 -0
- package/dist/tools/testcase.js.map +1 -0
- package/dist/tools/testtask.d.ts +2 -0
- package/dist/tools/testtask.js +14 -0
- package/dist/tools/testtask.js.map +1 -0
- package/dist/types/common.d.ts +15 -0
- package/dist/types/common.js +2 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/zentao.d.ts +42 -0
- package/dist/types/zentao.js +2 -0
- package/dist/types/zentao.js.map +1 -0
- package/dist/utils/json.d.ts +2 -0
- package/dist/utils/json.js +27 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +48 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
## 0.1.3 - 2026-06-05
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- 修复构建前未清理 `dist` 导致 npm 包可能混入旧 MCP 产物的问题;构建现会先清空 `dist` 再重新编译。
|
|
10
|
+
|
|
11
|
+
## 0.1.2 - 2026-06-05
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- 为 npm trusted publishing 补齐 `package.json.repository.url`,明确绑定到 `https://github.com/cloudglab/zentao-cli.git`。
|
|
16
|
+
- 版本提升到 `0.1.2`,用于重新触发自动发布链路。
|
|
17
|
+
|
|
18
|
+
## 0.1.1 - 2026-06-05
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- 发布工作流切换为 npm trusted publishing,去掉 `NPM_TOKEN` 发布依赖。
|
|
23
|
+
- GitHub Actions 发布环境升级为 Node.js 24,以满足 npm OIDC trusted publishing 运行要求。
|
|
24
|
+
|
|
25
|
+
## 0.1.0 - 2026-06-05
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
|
|
29
|
+
- 新增更稳的认证错误分类:区分账号密码错误、接口不存在、服务端异常、网络错误、响应异常。
|
|
30
|
+
- 新增 `ZENTAO_API_BASE_URL` 配置,支持非标准禅道 API 部署路径。
|
|
31
|
+
- 新增 `initZentao --save` 显式落盘控制,默认仅校验当前会话配置。
|
|
32
|
+
- 新增线上 Bug 查询强制判断与固定口径文档:`市场和售后问题跟踪` + 模块匹配。
|
|
33
|
+
- 新增 `getMyBugs` / `getMyBugStatistics` 默认跨产品查询能力,`productId` 改为可选收窄条件。
|
|
34
|
+
- 新增 GitHub Actions 发布链路:push `v*` tag 后自动校验、构建、发布 npm、创建 GitHub Release。
|
|
35
|
+
- 新增纯 CLI 运行层:`zentao help`、`zentao list`、`zentao --version`。
|
|
36
|
+
|
|
37
|
+
### Changed
|
|
38
|
+
|
|
39
|
+
- 包名统一为 `@cloudglab/zentao-cli`,本地命令统一为 `zentao`。
|
|
40
|
+
- skill 安装方式统一为 `npx skills add @cloudglab/zentao-cli -g`。
|
|
41
|
+
- 运行架构从 MCP server 切换为本地 CLI 命令执行链路。
|
|
42
|
+
- 发布产物运行时目标下调为 `Node.js >= 16`。
|
|
43
|
+
- TypeScript 构建目标下调为 `ES2020`,并移除运行时 `@modelcontextprotocol/sdk` 依赖。
|
|
44
|
+
- README、skill、reference 文档整体同步到“本地 `zentao` + skill 调用”口径。
|
|
45
|
+
|
|
46
|
+
### Fixed
|
|
47
|
+
|
|
48
|
+
- 修复 token 获取失败时对所有错误都盲目回退 MD5 的问题,仅在明确鉴权失败时回退。
|
|
49
|
+
- 修复固定 API 路径导致部分实例无法登录的问题。
|
|
50
|
+
- 修复默认将敏感配置落盘的问题,改为显式保存才写入本地。
|
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
# mcp-zentao 重建计划
|
|
2
|
+
|
|
3
|
+
## 目标
|
|
4
|
+
|
|
5
|
+
在 `/Users/lixiaoming/Desktop/doing/zentao-cli` 中重建一个新的禅道 MCP 项目。
|
|
6
|
+
|
|
7
|
+
目标不是 1:1 反编译原作者源码,而是基于现有可运行产物和已验证行为,写一个结构清晰、可维护、适配当前禅道 18.5 的 TypeScript 项目。
|
|
8
|
+
|
|
9
|
+
## 当前依据
|
|
10
|
+
|
|
11
|
+
参考来源:
|
|
12
|
+
|
|
13
|
+
- 全局包:`@zzp123/mcp-zentao@1.18.15`
|
|
14
|
+
- 路径:`~/.nvm/versions/node/v20.19.2/lib/node_modules/@zzp123/mcp-zentao`
|
|
15
|
+
- 主要参考:`dist/api/zentaoApi.js`、`dist/index.js`、`dist/index-dev.js`、`README.md`
|
|
16
|
+
- 本地 Legacy 项目:`/Users/lixiaoming/Desktop/open/mcp-zentao-11-3`
|
|
17
|
+
- 主要参考:导出、批量处理、AI 摘要、图片下载等能力
|
|
18
|
+
- 当前环境验证结果:
|
|
19
|
+
- 禅道版本:`18.5`
|
|
20
|
+
- 地址根域名:`https://zentao.cloudglab.cn`
|
|
21
|
+
- 实际 API 路径:`/zentao/api.php/v1`
|
|
22
|
+
- `zentao-cli` 依赖 v2,不适配当前环境
|
|
23
|
+
- `@zzp123/mcp-zentao` 补丁后可用
|
|
24
|
+
|
|
25
|
+
## 已验证的关键行为
|
|
26
|
+
|
|
27
|
+
### 认证
|
|
28
|
+
|
|
29
|
+
当前禅道 `18.5` 的 token 接口:
|
|
30
|
+
|
|
31
|
+
```txt
|
|
32
|
+
POST /zentao/api.php/v1/tokens
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
要求:
|
|
36
|
+
|
|
37
|
+
- 密码优先使用明文
|
|
38
|
+
- 部分环境可能需要 MD5,因此保留 MD5 回退
|
|
39
|
+
|
|
40
|
+
认证逻辑:
|
|
41
|
+
|
|
42
|
+
1. 先用明文密码请求 token
|
|
43
|
+
2. 明文失败后再用 MD5 密码请求 token
|
|
44
|
+
3. 成功后请求头携带:`Token: <token>`
|
|
45
|
+
|
|
46
|
+
### 脏 JSON 响应清洗
|
|
47
|
+
|
|
48
|
+
当前服务端会在 JSON 前输出 PHP warning,例如:
|
|
49
|
+
|
|
50
|
+
```html
|
|
51
|
+
<br />
|
|
52
|
+
<b>Deprecated</b>: ...
|
|
53
|
+
{"token":"..."}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
因此 HTTP 层必须实现:
|
|
57
|
+
|
|
58
|
+
1. 如果响应已经是 object,直接返回
|
|
59
|
+
2. 如果响应是 string,查找第一个 `{` 或 `[`
|
|
60
|
+
3. 截取 JSON 部分后再 `JSON.parse`
|
|
61
|
+
|
|
62
|
+
### 已验证 API
|
|
63
|
+
|
|
64
|
+
这些接口已经在当前环境验证可用:
|
|
65
|
+
|
|
66
|
+
```txt
|
|
67
|
+
GET /tasks
|
|
68
|
+
GET /bugs/:id
|
|
69
|
+
GET /stories/:id
|
|
70
|
+
GET /executions/:id
|
|
71
|
+
GET /executions/:id/bugs
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
其中:
|
|
75
|
+
|
|
76
|
+
- `getMyTasks()` 成功
|
|
77
|
+
- `getBugDetail(84362)` 成功
|
|
78
|
+
- `getStoryDetail(9680)` 成功
|
|
79
|
+
- `getExecutionDetail(2140)` 成功
|
|
80
|
+
- `request('GET', '/executions/2140/bugs')` 成功
|
|
81
|
+
|
|
82
|
+
## 技术栈
|
|
83
|
+
|
|
84
|
+
建议:
|
|
85
|
+
|
|
86
|
+
- TypeScript
|
|
87
|
+
- Node.js >= 20
|
|
88
|
+
- `@modelcontextprotocol/sdk`
|
|
89
|
+
- `zod`
|
|
90
|
+
- `axios` 或 `ofetch`
|
|
91
|
+
- `tsx` 用于本地开发
|
|
92
|
+
- `tsc` 用于类型检查和构建
|
|
93
|
+
- `oxlint` 用于 lint
|
|
94
|
+
- `oxfmt` 可用于格式化,先试点
|
|
95
|
+
|
|
96
|
+
不建议一开始使用 OXC 作为主构建系统。当前项目更适合:
|
|
97
|
+
|
|
98
|
+
```txt
|
|
99
|
+
TypeScript + tsc + oxlint + oxfmt
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## 推荐目录结构
|
|
103
|
+
|
|
104
|
+
```txt
|
|
105
|
+
src/
|
|
106
|
+
bin/
|
|
107
|
+
zentao.ts
|
|
108
|
+
zentao-dev.ts
|
|
109
|
+
zentao-pm.ts
|
|
110
|
+
zentao-qa.ts
|
|
111
|
+
|
|
112
|
+
core/
|
|
113
|
+
auth.ts
|
|
114
|
+
config.ts
|
|
115
|
+
errors.ts
|
|
116
|
+
http.ts
|
|
117
|
+
roles.ts
|
|
118
|
+
tool-registry.ts
|
|
119
|
+
transport.ts
|
|
120
|
+
|
|
121
|
+
api/
|
|
122
|
+
bug.ts
|
|
123
|
+
build.ts
|
|
124
|
+
comment.ts
|
|
125
|
+
execution.ts
|
|
126
|
+
feedback.ts
|
|
127
|
+
file.ts
|
|
128
|
+
product.ts
|
|
129
|
+
project.ts
|
|
130
|
+
story.ts
|
|
131
|
+
task.ts
|
|
132
|
+
testcase.ts
|
|
133
|
+
ticket.ts
|
|
134
|
+
user.ts
|
|
135
|
+
|
|
136
|
+
tools/
|
|
137
|
+
bug.ts
|
|
138
|
+
comment.ts
|
|
139
|
+
execution.ts
|
|
140
|
+
init.ts
|
|
141
|
+
product.ts
|
|
142
|
+
story.ts
|
|
143
|
+
task.ts
|
|
144
|
+
shared.ts
|
|
145
|
+
|
|
146
|
+
schemas/
|
|
147
|
+
bug.ts
|
|
148
|
+
execution.ts
|
|
149
|
+
story.ts
|
|
150
|
+
task.ts
|
|
151
|
+
|
|
152
|
+
types/
|
|
153
|
+
common.ts
|
|
154
|
+
zentao.ts
|
|
155
|
+
|
|
156
|
+
utils/
|
|
157
|
+
date.ts
|
|
158
|
+
html.ts
|
|
159
|
+
json.ts
|
|
160
|
+
markdown.ts
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## 核心模块设计
|
|
164
|
+
|
|
165
|
+
### `core/http.ts`
|
|
166
|
+
|
|
167
|
+
职责:
|
|
168
|
+
|
|
169
|
+
- 创建 HTTP client
|
|
170
|
+
- 统一拼接 API base URL
|
|
171
|
+
- 注入 `Token` header
|
|
172
|
+
- 清洗 PHP warning 脏响应
|
|
173
|
+
- 统一错误格式
|
|
174
|
+
|
|
175
|
+
必须内置:
|
|
176
|
+
|
|
177
|
+
```ts
|
|
178
|
+
sanitizeJsonLikeResponse(data)
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### `core/auth.ts`
|
|
182
|
+
|
|
183
|
+
职责:
|
|
184
|
+
|
|
185
|
+
- 获取 token
|
|
186
|
+
- 明文优先
|
|
187
|
+
- MD5 回退
|
|
188
|
+
- 缓存 token
|
|
189
|
+
- 后续可扩展 401 自动重登
|
|
190
|
+
|
|
191
|
+
### `core/config.ts`
|
|
192
|
+
|
|
193
|
+
职责:
|
|
194
|
+
|
|
195
|
+
- 读取环境变量
|
|
196
|
+
- 读取本地配置
|
|
197
|
+
- 保存配置
|
|
198
|
+
|
|
199
|
+
建议支持:
|
|
200
|
+
|
|
201
|
+
```txt
|
|
202
|
+
ZENTAO_URL
|
|
203
|
+
ZENTAO_USERNAME
|
|
204
|
+
ZENTAO_PASSWORD
|
|
205
|
+
ZENTAO_API_VERSION
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
本地配置路径建议:
|
|
209
|
+
|
|
210
|
+
```txt
|
|
211
|
+
~/.zentao/config.json
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### `core/transport.ts`
|
|
215
|
+
|
|
216
|
+
职责:
|
|
217
|
+
|
|
218
|
+
- 启动 stdio MCP server
|
|
219
|
+
- 后续支持 HTTP transport
|
|
220
|
+
|
|
221
|
+
### `core/tool-registry.ts`
|
|
222
|
+
|
|
223
|
+
职责:
|
|
224
|
+
|
|
225
|
+
- 统一注册所有工具
|
|
226
|
+
- 根据角色过滤工具
|
|
227
|
+
|
|
228
|
+
不要复制四份入口文件。
|
|
229
|
+
|
|
230
|
+
推荐方式:
|
|
231
|
+
|
|
232
|
+
```ts
|
|
233
|
+
registerTools(server, { role: 'dev' })
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## 角色设计
|
|
237
|
+
|
|
238
|
+
### full
|
|
239
|
+
|
|
240
|
+
完整能力,适合维护和排查。
|
|
241
|
+
|
|
242
|
+
### dev
|
|
243
|
+
|
|
244
|
+
开发常用:
|
|
245
|
+
|
|
246
|
+
- task 查询、更新、完成
|
|
247
|
+
- bug 查询、解决、评论
|
|
248
|
+
- story 查询
|
|
249
|
+
- execution 查询
|
|
250
|
+
- build 查询
|
|
251
|
+
|
|
252
|
+
### qa
|
|
253
|
+
|
|
254
|
+
测试常用:
|
|
255
|
+
|
|
256
|
+
- bug 查询、创建、解决
|
|
257
|
+
- testcase 查询
|
|
258
|
+
- testtask 查询
|
|
259
|
+
- story 查询
|
|
260
|
+
|
|
261
|
+
### pm
|
|
262
|
+
|
|
263
|
+
产品常用:
|
|
264
|
+
|
|
265
|
+
- product
|
|
266
|
+
- story
|
|
267
|
+
- requirement
|
|
268
|
+
- plan
|
|
269
|
+
- feedback
|
|
270
|
+
- project
|
|
271
|
+
|
|
272
|
+
## 分阶段计划
|
|
273
|
+
|
|
274
|
+
### 阶段 0:项目初始化
|
|
275
|
+
|
|
276
|
+
产出:
|
|
277
|
+
|
|
278
|
+
- `package.json`
|
|
279
|
+
- `tsconfig.json`
|
|
280
|
+
- `oxlint` 配置
|
|
281
|
+
- `src/` 基础目录
|
|
282
|
+
- `README.md`
|
|
283
|
+
- 基础 bin 入口
|
|
284
|
+
|
|
285
|
+
验收:
|
|
286
|
+
|
|
287
|
+
```bash
|
|
288
|
+
pnpm install
|
|
289
|
+
pnpm typecheck
|
|
290
|
+
pnpm lint
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### 阶段 1:MVP 内核
|
|
294
|
+
|
|
295
|
+
实现:
|
|
296
|
+
|
|
297
|
+
- `core/config.ts`
|
|
298
|
+
- `core/http.ts`
|
|
299
|
+
- `core/auth.ts`
|
|
300
|
+
- `core/transport.ts`
|
|
301
|
+
- `core/tool-registry.ts`
|
|
302
|
+
- `tools/init.ts`
|
|
303
|
+
|
|
304
|
+
验收:
|
|
305
|
+
|
|
306
|
+
- 能启动 MCP server
|
|
307
|
+
- 能读取配置
|
|
308
|
+
- 能拿到 token
|
|
309
|
+
- 能清洗 PHP warning
|
|
310
|
+
|
|
311
|
+
### 阶段 2:开发最小闭环
|
|
312
|
+
|
|
313
|
+
实现 API:
|
|
314
|
+
|
|
315
|
+
- `api/task.ts`
|
|
316
|
+
- `api/bug.ts`
|
|
317
|
+
- `api/story.ts`
|
|
318
|
+
- `api/execution.ts`
|
|
319
|
+
|
|
320
|
+
实现工具:
|
|
321
|
+
|
|
322
|
+
- `getMyTasks`
|
|
323
|
+
- `getTaskDetail`
|
|
324
|
+
- `getBugDetail`
|
|
325
|
+
- `getStoryDetail`
|
|
326
|
+
- `getExecutionDetail`
|
|
327
|
+
- `getExecutionBugs`
|
|
328
|
+
|
|
329
|
+
验收:
|
|
330
|
+
|
|
331
|
+
- `getBugDetail(84362)` 成功
|
|
332
|
+
- `getExecutionBugs(2140)` 成功
|
|
333
|
+
- `getStoryDetail(9680)` 成功
|
|
334
|
+
|
|
335
|
+
### 阶段 3:开发常用写操作
|
|
336
|
+
|
|
337
|
+
实现:
|
|
338
|
+
|
|
339
|
+
- `updateTask`
|
|
340
|
+
- `finishTask`
|
|
341
|
+
- `resolveBug`
|
|
342
|
+
- `addComment`
|
|
343
|
+
|
|
344
|
+
注意:
|
|
345
|
+
|
|
346
|
+
- 写操作必须由调用方确认后再执行
|
|
347
|
+
- 先做只读验证,再做写操作
|
|
348
|
+
|
|
349
|
+
### 阶段 4:完整模块迁移
|
|
350
|
+
|
|
351
|
+
按优先级迁移:
|
|
352
|
+
|
|
353
|
+
1. task
|
|
354
|
+
2. bug
|
|
355
|
+
3. story
|
|
356
|
+
4. execution
|
|
357
|
+
5. product
|
|
358
|
+
6. project
|
|
359
|
+
7. build
|
|
360
|
+
8. testcase
|
|
361
|
+
9. file
|
|
362
|
+
10. comment
|
|
363
|
+
11. feedback
|
|
364
|
+
12. ticket
|
|
365
|
+
13. user
|
|
366
|
+
|
|
367
|
+
### 阶段 5:吸收 Legacy 项目增强能力
|
|
368
|
+
|
|
369
|
+
从 `/Users/lixiaoming/Desktop/open/mcp-zentao-11-3` 借鉴:
|
|
370
|
+
|
|
371
|
+
- `batchUpdateTasks`
|
|
372
|
+
- `batchResolveBugs`
|
|
373
|
+
- `getStoryRelatedBugs`
|
|
374
|
+
- `getBugRelatedStory`
|
|
375
|
+
- `exportStory`
|
|
376
|
+
- `exportBug`
|
|
377
|
+
- `exportItems`
|
|
378
|
+
- Markdown 格式化
|
|
379
|
+
- 图片下载
|
|
380
|
+
- story/bug/task 分析摘要
|
|
381
|
+
- 下一步建议
|
|
382
|
+
|
|
383
|
+
### 阶段 6:角色入口和发布准备
|
|
384
|
+
|
|
385
|
+
实现 bin:
|
|
386
|
+
|
|
387
|
+
- `zentao`
|
|
388
|
+
- `zentao-dev`
|
|
389
|
+
- `zentao-qa`
|
|
390
|
+
- `zentao-pm`
|
|
391
|
+
|
|
392
|
+
验收:
|
|
393
|
+
|
|
394
|
+
- 每个 bin 可启动
|
|
395
|
+
- 工具数量符合角色配置
|
|
396
|
+
- 文档和实际工具一致
|
|
397
|
+
|
|
398
|
+
## API 优先级清单
|
|
399
|
+
|
|
400
|
+
### P0
|
|
401
|
+
|
|
402
|
+
必须先实现:
|
|
403
|
+
|
|
404
|
+
- token 登录
|
|
405
|
+
- request
|
|
406
|
+
- response sanitize
|
|
407
|
+
- getMyTasks
|
|
408
|
+
- getBugDetail
|
|
409
|
+
- getStoryDetail
|
|
410
|
+
- getExecutionBugs
|
|
411
|
+
- getExecutionDetail
|
|
412
|
+
|
|
413
|
+
### P1
|
|
414
|
+
|
|
415
|
+
开发日常需要:
|
|
416
|
+
|
|
417
|
+
- updateTask
|
|
418
|
+
- finishTask
|
|
419
|
+
- resolveBug
|
|
420
|
+
- addComment
|
|
421
|
+
- getProductBugs
|
|
422
|
+
- getProductStories
|
|
423
|
+
|
|
424
|
+
### P2
|
|
425
|
+
|
|
426
|
+
完整能力:
|
|
427
|
+
|
|
428
|
+
- createTask
|
|
429
|
+
- createBug
|
|
430
|
+
- createStory
|
|
431
|
+
- product/project/execution CRUD
|
|
432
|
+
- testcase
|
|
433
|
+
- build
|
|
434
|
+
- file upload/download
|
|
435
|
+
|
|
436
|
+
### P3
|
|
437
|
+
|
|
438
|
+
增强体验:
|
|
439
|
+
|
|
440
|
+
- Markdown 导出
|
|
441
|
+
- 图片下载
|
|
442
|
+
- 批量处理
|
|
443
|
+
- AI 摘要
|
|
444
|
+
- 智能建议
|
|
445
|
+
|
|
446
|
+
## 与现有包的差异目标
|
|
447
|
+
|
|
448
|
+
新项目不要重复旧包的问题:
|
|
449
|
+
|
|
450
|
+
- 不要一个 1400 行 `ZentaoAPI` 大文件
|
|
451
|
+
- 不要四份入口复制大量代码
|
|
452
|
+
- 不要 README 工具数和真实工具数不一致
|
|
453
|
+
- 不要把补丁脚本作为长期方案
|
|
454
|
+
- 不要默认强制 MD5 密码
|
|
455
|
+
- 不要忽略 PHP warning 脏响应
|
|
456
|
+
|
|
457
|
+
新项目需要内置:
|
|
458
|
+
|
|
459
|
+
- 明文密码优先
|
|
460
|
+
- MD5 回退
|
|
461
|
+
- PHP warning 清洗
|
|
462
|
+
- execution bug list 正式方法
|
|
463
|
+
- 可扩展的角色工具过滤
|
|
464
|
+
- 后续可加 401 自动重登
|
|
465
|
+
|
|
466
|
+
## 验收基准
|
|
467
|
+
|
|
468
|
+
最小验收:
|
|
469
|
+
|
|
470
|
+
```txt
|
|
471
|
+
getToken 成功
|
|
472
|
+
getMyTasks 成功
|
|
473
|
+
getBugDetail(84362) 成功
|
|
474
|
+
getExecutionBugs(2140) 成功
|
|
475
|
+
getStoryDetail(9680) 成功
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
完整验收:
|
|
479
|
+
|
|
480
|
+
```txt
|
|
481
|
+
dev 角色可完成日常开发相关任务
|
|
482
|
+
full 角色覆盖当前 @zzp123/mcp-zentao 的主要能力
|
|
483
|
+
导出能力覆盖 mcp-zentao-11-3 的 Markdown + 图片下载场景
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
## 后续第一步
|
|
487
|
+
|
|
488
|
+
建议下一步直接初始化项目:
|
|
489
|
+
|
|
490
|
+
```bash
|
|
491
|
+
pnpm init
|
|
492
|
+
pnpm add @modelcontextprotocol/sdk zod axios
|
|
493
|
+
pnpm add -D typescript tsx oxlint
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
然后优先实现:
|
|
497
|
+
|
|
498
|
+
```txt
|
|
499
|
+
src/core/http.ts
|
|
500
|
+
src/core/auth.ts
|
|
501
|
+
src/api/bug.ts
|
|
502
|
+
src/api/execution.ts
|
|
503
|
+
src/tools/bug.ts
|
|
504
|
+
src/tools/execution.ts
|
|
505
|
+
```
|