@zzp123/mcp-zentao 1.4.2 → 1.5.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/CHANGELOG.md ADDED
@@ -0,0 +1,334 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [1.5.0] - 2025-11-05
9
+
10
+ ### Added
11
+ - **模块数据简化功能** - 新增 `SimpleModule` 接口,简化模块API返回数据
12
+ - `getModules` 接口现在只返回核心字段:id、name、parent、grade、children
13
+ - 移除冗余的字段(type、path、order等),大幅减少数据传输量
14
+ - 保持树形结构,递归简化所有子模块数据
15
+
16
+ ### Changed
17
+ - 优化 `getModules()` 方法,返回类型从 `Module[]` 改为 `SimpleModule[]`
18
+ - 添加 `simplifyModule()` 私有方法,用于递归转换模块数据结构
19
+
20
+ ### Benefits
21
+ - 减少网络传输数据量,提升API响应速度
22
+ - 简化客户端数据处理逻辑
23
+ - 更清晰的数据结构,只包含必要信息
24
+
25
+ ## [1.4.3] - 2025-11-05
26
+
27
+ ### Fixed
28
+ - 将 `CHANGELOG.md` 添加到 npm 包发布文件列表中
29
+ - 确保用户可以在安装包后查看完整的版本历史
30
+
31
+ ## [1.4.2] - 2025-11-05
32
+
33
+ ### Added
34
+ - 创建 `CHANGELOG.md` - 完整的版本更新历史文档
35
+ - 在 README.md 中添加版本历史章节和最新版本信息
36
+ - 添加 npm 版本徽章和 MIT 许可证徽章
37
+
38
+ ### Changed
39
+ - 更新 README.md 中的包名从 `@bigtian/mcp-zentao` 到 `@zzp123/mcp-zentao`
40
+ - 更新 API 文档示例代码,使用最新的接口签名
41
+ - 添加版本标记到 API 方法说明(如 v1.4.0+, v1.2.0+)
42
+ - 完善类型定义文档,添加 `ResolveBugRequest`、`UploadFileRequest`、`FileUploadResponse` 等新接口
43
+
44
+ ### Documentation
45
+ - 整理所有版本的更新内容到 CHANGELOG
46
+ - 记录从 v1.0.x 到 v1.4.2 的完整演进历史
47
+ - 提供清晰的版本规范说明
48
+
49
+ ## [1.4.1] - 2025-11-05
50
+
51
+ ### Fixed
52
+ - 修复 `uploadImageFromClipboard` 工具上传成功后没有返回内容的问题,该问题导致 AI 一直等待响应而卡住
53
+ - 改进返回数据结构,现在包含 `success` 标志位、文件大小、文件名等详细信息
54
+ - 增强错误处理,为每个平台(Windows/macOS/Linux)提供专门的错误处理和清晰的错误提示
55
+ - 添加完整的执行日志,方便调试和问题排查
56
+
57
+ ### Changed
58
+ - 优化返回格式,统一成功和失败响应的数据结构
59
+ - 改进错误信息,包含堆栈跟踪和解决建议
60
+
61
+ ## [1.4.0] - 2025-11-05
62
+
63
+ ### Added
64
+ - **新增解决Bug接口** `resolveBug` - 根据最新的禅道API文档添加
65
+ - 接口路径:`POST /bugs/:id/resolve`
66
+ - 支持7种解决方案:fixed(已解决)、bydesign(设计如此)、duplicate(重复Bug)、external(外部原因)、notrepro(无法重现)、postponed(延期处理)、willnotfix(不予解决)
67
+ - 自动验证必填字段:fixed 需要 resolvedBuild,duplicate 需要 duplicateBug
68
+ - 支持备注和指派功能
69
+ - 新增 `ResolutionType` 类型定义
70
+ - 新增 `ResolveBugRequest` 接口定义
71
+
72
+ ### Technical
73
+ - 在 `zentaoApi.ts` 中实现 `resolveBug()` 方法,包含参数验证逻辑
74
+ - 在 `index.ts` 中注册 `resolveBug` MCP 工具
75
+ - 完善类型系统,确保类型安全
76
+
77
+ ## [1.3.2] - 2025-11-05
78
+
79
+ ### Removed
80
+ - 移除 `resolveBug` API 方法(之前的实现与文档不符)
81
+ - 移除 `resolveBug` MCP 工具注册
82
+ - 移除 `BugResolution` 接口类型定义
83
+
84
+ ### Reason
85
+ - 禅道REST API文档中的修改Bug接口(`PUT /bugs/:id`)不支持修改Bug状态
86
+ - 该接口只支持修改基本信息(标题、优先级、严重程度等),不能修改 status、resolution、resolvedBuild 等字段
87
+ - 这些字段只在返回数据中存在,不能作为请求参数
88
+
89
+ ### Note
90
+ - 此版本移除的功能在 v1.4.0 中以正确的实现方式重新添加
91
+
92
+ ## [1.3.1] - 2025-11-05
93
+
94
+ ### Fixed
95
+ - **修复 Claude Code 中剪贴板图片无法上传的核心问题**
96
+ - 修改 `uploadImageFromClipboard` 工具,使其主动读取系统剪贴板,而不是期望 Claude Code 提供 base64Data
97
+
98
+ ### Changed
99
+ - 工具现在直接使用操作系统原生方法读取剪贴板:
100
+ - Windows: PowerShell 的 `System.Windows.Forms.Clipboard`
101
+ - macOS: `pngpaste` 命令
102
+ - Linux: `xclip` 命令
103
+ - 移除 `base64Data` 必填参数,改为可选的 `filename` 和 `uid`
104
+
105
+ ### Technical Details
106
+ - **问题根源**:Claude Code 输入框中粘贴的图片会上传到 Claude 服务器用于视觉分析,MCP 工具运行在本地只能访问系统剪贴板,这是两个完全独立的数据源
107
+ - **解决方案**:工具直接读取系统剪贴板,不依赖 Claude Code 传递图片数据
108
+
109
+ ### Documentation
110
+ - 创建 `为什么读取不到剪贴板图片.md` - 详细解释技术原理
111
+ - 创建 `Claude-Code图片上传指南.md` - 提供正确的使用方法
112
+ - 创建 `scripts/get-clipboard-base64.js` - 辅助脚本
113
+
114
+ ## [1.3.0] - 2025-11-05
115
+
116
+ ### Added
117
+ - **命令行脚本支持** - 添加跨平台的剪贴板图片上传脚本
118
+ - `scripts/upload-clipboard-image.js` - Node.js 实现(跨平台)
119
+ - `scripts/upload-clipboard-image.ps1` - PowerShell 脚本(Windows)
120
+ - `scripts/upload-clipboard-image.py` - Python 实现(跨平台)
121
+ - 添加 npm 脚本命令:
122
+ - `npm run upload:clipboard` - 运行 Node.js 脚本
123
+ - `npm run upload:clipboard:py` - 运行 Python 脚本
124
+ - 创建 `upload.bat.example` 配置模板
125
+
126
+ ### Documentation
127
+ - 创建 `scripts/README.md` - 详细的脚本使用文档
128
+ - 创建 `scripts/MCP-INTEGRATION.md` - MCP 集成说明
129
+ - 创建 `上传图片使用说明.md` - 中文快速开始指南
130
+
131
+ ### Changed
132
+ - 更新 package.json,将 scripts 文件夹包含到发布包中
133
+
134
+ ### Features
135
+ - 支持从系统剪贴板直接上传图片到禅道
136
+ - 100% 可靠的命令行方式(不依赖 MCP)
137
+ - 自动保存图片到本地 img 文件夹
138
+ - 返回文件 ID 和访问 URL
139
+
140
+ ## [1.2.2] - 2025-11-05
141
+
142
+ ### Added
143
+ - 创建专门的 `uploadImageFromClipboard` MCP 工具
144
+ - 工具接受 `base64Data`(必填)、`filename`(可选)、`uid`(可选)参数
145
+
146
+ ### Changed
147
+ - 简化剪贴板图片上传流程
148
+ - 使工具更加明确和易用
149
+
150
+ ### Note
151
+ - 此版本的实现在 v1.3.1 中被完全重写,以解决 Claude Code 集成问题
152
+
153
+ ## [1.2.1] - 2025-11-05
154
+
155
+ ### Added
156
+ - `uploadFile` 工具支持 `base64Data` 参数,可以直接上传 base64 编码的图片
157
+ - 自动创建 `img` 文件夹(如果不存在)
158
+ - 智能图片格式检测(从 data URL 中提取)
159
+ - 默认文件名生成(使用时间戳)
160
+
161
+ ### Changed
162
+ - 增强 `uploadFile` 工具,同时支持 `filePath` 和 `base64Data` 两种方式
163
+ - 改进错误处理和参数验证
164
+
165
+ ### Technical
166
+ - 添加 data URL 解析逻辑
167
+ - 支持 png、jpg、jpeg、gif 等常见图片格式
168
+
169
+ ## [1.2.0] - 2025-11-05
170
+
171
+ ### Added
172
+ - **文件上传接口** `uploadFile` - POST `/files`
173
+ - 支持 multipart/form-data 格式上传
174
+ - 支持 `uid` 参数(用于富文本编辑器关联)
175
+ - 支持多种文件格式(文档、图片、媒体、压缩包等)
176
+ - **文件下载接口** `downloadFile` - GET `/files/:id`
177
+ - 返回文件的二进制数据(Buffer)
178
+ - 支持将文件保存到指定路径
179
+
180
+ ### Technical
181
+ - 添加 `FileUploadResponse` 接口类型
182
+ - 添加 `UploadFileRequest` 接口类型
183
+ - 实现 `zentaoApi.uploadFile()` 方法,使用 form-data 库
184
+ - 实现 `zentaoApi.downloadFile()` 方法,支持 arraybuffer 响应
185
+ - 安装依赖:`form-data` 和 `@types/form-data`
186
+
187
+ ### MCP Tools
188
+ - 注册 `uploadFile` MCP 工具
189
+ - 注册 `downloadFile` MCP 工具
190
+
191
+ ## [1.1.x] - 早期版本
192
+
193
+ ### Added
194
+ - 模块管理接口 `getModules` - GET `/modules`
195
+ - 支持按类型和ID获取模块树
196
+ - 支持需求、任务、Bug、用例、反馈、产品等多种模块类型
197
+
198
+ ## [1.0.x] - 初始版本
199
+
200
+ ### Added
201
+ - **基础功能**
202
+ - 禅道 API 认证(Token 获取)
203
+ - 配置管理(本地配置文件)
204
+ - MCP 服务器初始化
205
+
206
+ - **任务管理**
207
+ - `getMyTasks` - 获取我的任务列表
208
+ - `getTaskDetail` - 获取任务详情
209
+ - `updateTask` - 更新任务
210
+ - `finishTask` - 完成任务
211
+ - `createTask` - 创建任务
212
+
213
+ - **Bug管理**
214
+ - `getMyBugs` - 获取我的Bug列表
215
+ - `getBugDetail` - 获取Bug详情
216
+ - `createBug` - 创建Bug
217
+ - `updateBug` - 修改Bug
218
+ - `deleteBug` - 删除Bug
219
+
220
+ - **产品管理**
221
+ - `getProducts` - 获取产品列表
222
+ - `getProductDetail` - 获取产品详情
223
+ - `createProduct` - 创建产品
224
+ - `updateProduct` - 更新产品
225
+ - `deleteProduct` - 删除产品
226
+
227
+ - **项目集管理**
228
+ - `getPrograms` - 获取项目集列表
229
+ - `getProgramDetail` - 获取项目集详情
230
+ - `createProgram` - 创建项目集
231
+ - `updateProgram` - 更新项目集
232
+ - `deleteProgram` - 删除项目集
233
+
234
+ - **项目管理**
235
+ - `getProjects` - 获取项目列表
236
+ - `getProjectDetail` - 获取项目详情
237
+ - `createProject` - 创建项目
238
+ - `updateProject` - 更新项目
239
+ - `deleteProject` - 删除项目
240
+
241
+ - **执行管理**
242
+ - `getExecutions` - 获取执行列表
243
+ - `getExecutionDetail` - 获取执行详情
244
+ - `createExecution` - 创建执行
245
+ - `updateExecution` - 更新执行
246
+ - `deleteExecution` - 删除执行
247
+
248
+ - **需求管理**
249
+ - `getStories` - 获取需求列表
250
+ - `getStoryDetail` - 获取需求详情
251
+ - `createStory` - 创建需求
252
+ - `updateStory` - 更新需求
253
+ - `deleteStory` - 删除需求
254
+
255
+ - **产品计划**
256
+ - `getPlans` - 获取计划列表
257
+ - `getPlanDetail` - 获取计划详情
258
+ - `createPlan` - 创建计划
259
+ - `updatePlan` - 更新计划
260
+ - `deletePlan` - 删除计划
261
+ - `linkBugsToPlan` - 关联Bug到计划
262
+ - `unlinkBugsFromPlan` - 取消关联Bug
263
+
264
+ - **版本管理**
265
+ - `getBuilds` - 获取版本列表
266
+ - `getBuildDetail` - 获取版本详情
267
+ - `createBuild` - 创建版本
268
+ - `updateBuild` - 更新版本
269
+ - `deleteBuild` - 删除版本
270
+
271
+ - **反馈管理**
272
+ - `getFeedbacks` - 获取反馈列表
273
+ - `getFeedbackDetail` - 获取反馈详情
274
+ - `createFeedback` - 创建反馈
275
+ - `updateFeedback` - 更新反馈
276
+ - `deleteFeedback` - 删除反馈
277
+ - `assignFeedback` - 指派反馈
278
+ - `closeFeedback` - 关闭反馈
279
+
280
+ - **测试用例**
281
+ - `getTestCases` - 获取用例列表
282
+ - `getTestCaseDetail` - 获取用例详情
283
+ - `createTestCase` - 创建用例
284
+ - `updateTestCase` - 更新用例
285
+ - `deleteTestCase` - 删除用例
286
+
287
+ - **工单管理**
288
+ - `getTickets` - 获取工单列表
289
+ - `getTicketDetail` - 获取工单详情
290
+ - `createTicket` - 创建工单
291
+ - `updateTicket` - 更新工单
292
+ - `deleteTicket` - 删除工单
293
+
294
+ - **用户管理**
295
+ - `getMyProfile` - 获取我的信息
296
+ - `getUsers` - 获取用户列表
297
+ - `getUserDetail` - 获取用户详情
298
+ - `createUser` - 创建用户
299
+ - `updateUser` - 更新用户
300
+ - `deleteUser` - 删除用户
301
+
302
+ - **发布管理**
303
+ - `getReleases` - 获取发布列表
304
+ - `getReleaseDetail` - 获取发布详情
305
+
306
+ ### Technical
307
+ - TypeScript 实现,提供完整的类型定义
308
+ - 基于 Axios 的 HTTP 客户端
309
+ - MD5 密码加密
310
+ - 自动 Token 管理和刷新
311
+ - 配置文件支持(~/.zentao/config.json)
312
+ - MCP (Model Context Protocol) 集成
313
+ - Zod schema 验证
314
+
315
+ ### Documentation
316
+ - README.md - 项目说明
317
+ - 禅道API文档.md - 完整的 API 文档
318
+
319
+ ---
320
+
321
+ ## 版本规范
322
+
323
+ - **主版本号 (Major)**: 不兼容的 API 变更
324
+ - **次版本号 (Minor)**: 向下兼容的功能新增
325
+ - **修订号 (Patch)**: 向下兼容的问题修正
326
+
327
+ ## 链接
328
+
329
+ - [npm 包地址](https://www.npmjs.com/package/@zzp123/mcp-zentao)
330
+ - [GitHub 仓库](https://github.com/yourusername/mcp-zentao)(待更新)
331
+
332
+ ## 贡献者
333
+
334
+ - [@zzp123](https://github.com/zzp123) - 项目维护者
package/README.md CHANGED
@@ -15,10 +15,10 @@ npm install @zzp123/mcp-zentao -g
15
15
 
16
16
  查看完整的版本更新历史,请访问 [CHANGELOG.md](./CHANGELOG.md)
17
17
 
18
- **最新版本**: v1.4.2
19
- - 创建完整的版本更新历史文档(CHANGELOG.md)
20
- - 更新所有文档和示例代码
21
- - 修正包名和API签名
18
+ **最新版本**: v1.5.0
19
+ - 模块数据简化功能 - getModules接口现在只返回核心字段
20
+ - 大幅减少数据传输量,提升API响应速度
21
+ - 新增 SimpleModule 接口,优化数据结构
22
22
 
23
23
  **主要版本**:
24
24
  - v1.4.1 - 修复 uploadImageFromClipboard 返回值问题
@@ -1,4 +1,4 @@
1
- import { AssignFeedbackRequest, Bug, BugStatus, Build, CloseFeedbackRequest, CreateBuildRequest, CreateBugRequest, CreateExecutionRequest, CreateFeedbackRequest, CreatePlanRequest, CreateProductRequest, CreateProgramRequest, CreateProjectRequest, CreateStoryRequest, CreateTaskRequest, CreateTestCaseRequest, CreateTicketRequest, CreateUserRequest, Execution, Feedback, FileUploadResponse, Module, ModuleType, Plan, Product, Program, Project, Release, ResolveBugRequest, Story, Task, TaskStatus, TaskUpdate, TestCase, Ticket, UpdateBuildRequest, UpdateBugRequest, UpdateExecutionRequest, UpdateFeedbackRequest, UpdatePlanRequest, UpdateProductRequest, UpdateProgramRequest, UpdateProjectRequest, UpdateStoryRequest, UpdateTestCaseRequest, UpdateTicketRequest, UpdateUserRequest, UploadFileRequest, UserDetail, ZentaoConfig } from '../types/zentao';
1
+ import { AssignFeedbackRequest, Bug, BugStatus, Build, CloseFeedbackRequest, CreateBuildRequest, CreateBugRequest, CreateExecutionRequest, CreateFeedbackRequest, CreatePlanRequest, CreateProductRequest, CreateProgramRequest, CreateProjectRequest, CreateStoryRequest, CreateTaskRequest, CreateTestCaseRequest, CreateTicketRequest, CreateUserRequest, Execution, Feedback, FileUploadResponse, ModuleType, Plan, Product, Program, Project, Release, ResolveBugRequest, SimpleModule, Story, Task, TaskStatus, TaskUpdate, TestCase, Ticket, UpdateBuildRequest, UpdateBugRequest, UpdateExecutionRequest, UpdateFeedbackRequest, UpdatePlanRequest, UpdateProductRequest, UpdateProgramRequest, UpdateProjectRequest, UpdateStoryRequest, UpdateTestCaseRequest, UpdateTicketRequest, UpdateUserRequest, UploadFileRequest, UserDetail, ZentaoConfig } from '../types/zentao';
2
2
  export declare class ZentaoAPI {
3
3
  private config;
4
4
  private client;
@@ -148,7 +148,14 @@ export declare class ZentaoAPI {
148
148
  deleteTicket(ticketId: number): Promise<{
149
149
  message: string;
150
150
  }>;
151
- getModules(type: ModuleType, id: number): Promise<Module[]>;
151
+ /**
152
+ * 将完整的Module对象转换为简化的SimpleModule对象
153
+ */
154
+ private simplifyModule;
155
+ /**
156
+ * 获取模块列表(返回简化数据)
157
+ */
158
+ getModules(type: ModuleType, id: number): Promise<SimpleModule[]>;
152
159
  uploadFile(uploadRequest: UploadFileRequest): Promise<FileUploadResponse>;
153
160
  downloadFile(fileId: number): Promise<Buffer>;
154
161
  }
@@ -1119,13 +1119,35 @@ export class ZentaoAPI {
1119
1119
  }
1120
1120
  }
1121
1121
  // 模块相关API
1122
+ /**
1123
+ * 将完整的Module对象转换为简化的SimpleModule对象
1124
+ */
1125
+ simplifyModule(module) {
1126
+ const simple = {
1127
+ id: module.id,
1128
+ name: module.name,
1129
+ parent: module.parent,
1130
+ grade: module.grade
1131
+ };
1132
+ // 递归处理子模块
1133
+ if (module.children && module.children.length > 0) {
1134
+ simple.children = module.children.map(child => this.simplifyModule(child));
1135
+ }
1136
+ return simple;
1137
+ }
1138
+ /**
1139
+ * 获取模块列表(返回简化数据)
1140
+ */
1122
1141
  async getModules(type, id) {
1123
1142
  try {
1124
1143
  console.log(`正在获取模块列表,类型: ${type}, ID: ${id}...`);
1125
1144
  const params = { type, id };
1126
1145
  const response = await this.request('GET', '/modules', params);
1127
- console.log('获取模块列表响应:', response);
1128
- return response.modules;
1146
+ console.log('获取模块列表响应(原始数据):', response);
1147
+ // 转换为简化格式
1148
+ const simpleModules = response.modules.map(module => this.simplifyModule(module));
1149
+ console.log('获取模块列表响应(简化数据):', simpleModules);
1150
+ return simpleModules;
1129
1151
  }
1130
1152
  catch (error) {
1131
1153
  console.error('获取模块列表失败:', error);
@@ -626,8 +626,19 @@ export interface Module {
626
626
  owner: string;
627
627
  collector?: string;
628
628
  short?: string;
629
+ deleted?: string;
630
+ from?: number;
631
+ url?: string;
632
+ children?: Module[];
629
633
  }
630
634
  export type ModuleType = 'story' | 'task' | 'bug' | 'case' | 'feedback' | 'product';
635
+ export interface SimpleModule {
636
+ id: string;
637
+ name: string;
638
+ parent: string;
639
+ grade: string;
640
+ children?: SimpleModule[];
641
+ }
631
642
  export interface FileUploadResponse {
632
643
  id: number;
633
644
  url: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zzp123/mcp-zentao",
3
- "version": "1.4.2",
3
+ "version": "1.5.0",
4
4
  "description": "禅道项目管理系统的高级API集成包,提供任务管理、Bug跟踪等功能的完整封装,专为Cursor IDE设计的MCP扩展",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -11,6 +11,7 @@
11
11
  "files": [
12
12
  "dist",
13
13
  "README.md",
14
+ "CHANGELOG.md",
14
15
  "json-args.js",
15
16
  "scripts"
16
17
  ],