@xihe-lab/tapd-core 2.0.0-rc.2 → 2.0.0-rc.4

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.
Files changed (119) hide show
  1. package/README.md +1 -0
  2. package/dist/advisor/index.d.ts.map +1 -1
  3. package/dist/advisor/index.js +2 -0
  4. package/dist/advisor/index.js.map +1 -1
  5. package/dist/cache/read-cache.d.ts +136 -0
  6. package/dist/cache/read-cache.d.ts.map +1 -0
  7. package/dist/cache/read-cache.js +322 -0
  8. package/dist/cache/read-cache.js.map +1 -0
  9. package/dist/cache/read-cache.test.d.ts +2 -0
  10. package/dist/cache/read-cache.test.d.ts.map +1 -0
  11. package/dist/cache/read-cache.test.js +429 -0
  12. package/dist/cache/read-cache.test.js.map +1 -0
  13. package/dist/errors/index.d.ts +120 -0
  14. package/dist/errors/index.d.ts.map +1 -0
  15. package/dist/errors/index.js +429 -0
  16. package/dist/errors/index.js.map +1 -0
  17. package/dist/index.d.ts +3 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +2 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/registry/registry.d.ts +7 -0
  22. package/dist/registry/registry.d.ts.map +1 -1
  23. package/dist/registry/registry.js +9 -3
  24. package/dist/registry/registry.js.map +1 -1
  25. package/dist/registry/registry.test.js +293 -2
  26. package/dist/registry/registry.test.js.map +1 -1
  27. package/dist/richtext/index.d.ts +1 -14
  28. package/dist/richtext/index.d.ts.map +1 -1
  29. package/dist/richtext/index.js +3 -34
  30. package/dist/richtext/index.js.map +1 -1
  31. package/dist/richtext/pipeline.d.ts +1 -4
  32. package/dist/richtext/pipeline.d.ts.map +1 -1
  33. package/dist/richtext/pipeline.js +2 -198
  34. package/dist/richtext/pipeline.js.map +1 -1
  35. package/dist/tapd-client.d.ts +34 -2
  36. package/dist/tapd-client.d.ts.map +1 -1
  37. package/dist/tapd-client.js +121 -42
  38. package/dist/tapd-client.js.map +1 -1
  39. package/dist/tools/attachment.js +40 -40
  40. package/dist/tools/attachment.js.map +1 -1
  41. package/dist/tools/board.js +22 -22
  42. package/dist/tools/board.js.map +1 -1
  43. package/dist/tools/bug.js +259 -259
  44. package/dist/tools/bug.js.map +1 -1
  45. package/dist/tools/changes.js +20 -20
  46. package/dist/tools/changes.js.map +1 -1
  47. package/dist/tools/comment.js +23 -23
  48. package/dist/tools/comment.js.map +1 -1
  49. package/dist/tools/custom-fields.js +16 -16
  50. package/dist/tools/custom-fields.js.map +1 -1
  51. package/dist/tools/image.js +2 -2
  52. package/dist/tools/image.js.map +1 -1
  53. package/dist/tools/iteration.js +50 -50
  54. package/dist/tools/iteration.js.map +1 -1
  55. package/dist/tools/media.js +2 -2
  56. package/dist/tools/media.js.map +1 -1
  57. package/dist/tools/mini-comment.js +27 -27
  58. package/dist/tools/mini-comment.js.map +1 -1
  59. package/dist/tools/mini-item.js +83 -83
  60. package/dist/tools/mini-item.js.map +1 -1
  61. package/dist/tools/mini-workspace.js +5 -5
  62. package/dist/tools/mini-workspace.js.map +1 -1
  63. package/dist/tools/program.js +7 -7
  64. package/dist/tools/program.js.map +1 -1
  65. package/dist/tools/relations.js +14 -14
  66. package/dist/tools/relations.js.map +1 -1
  67. package/dist/tools/release.js +53 -53
  68. package/dist/tools/release.js.map +1 -1
  69. package/dist/tools/report.js +8 -8
  70. package/dist/tools/report.js.map +1 -1
  71. package/dist/tools/settings.js +77 -77
  72. package/dist/tools/settings.js.map +1 -1
  73. package/dist/tools/source.js +14 -14
  74. package/dist/tools/source.js.map +1 -1
  75. package/dist/tools/story.js +120 -120
  76. package/dist/tools/story.js.map +1 -1
  77. package/dist/tools/task.js +123 -123
  78. package/dist/tools/task.js.map +1 -1
  79. package/dist/tools/test.js +117 -117
  80. package/dist/tools/test.js.map +1 -1
  81. package/dist/tools/timesheet.js +23 -23
  82. package/dist/tools/timesheet.js.map +1 -1
  83. package/dist/tools/user.js +8 -8
  84. package/dist/tools/user.js.map +1 -1
  85. package/dist/tools/utility.d.ts +17 -0
  86. package/dist/tools/utility.d.ts.map +1 -1
  87. package/dist/tools/utility.js +73 -78
  88. package/dist/tools/utility.js.map +1 -1
  89. package/dist/tools/wiki.js +51 -51
  90. package/dist/tools/wiki.js.map +1 -1
  91. package/dist/tools/workflow.js +26 -26
  92. package/dist/tools/workflow.js.map +1 -1
  93. package/dist/tools/workspace.js +16 -16
  94. package/dist/tools/workspace.js.map +1 -1
  95. package/package.json +10 -14
  96. package/dist/richtext/attachment-anchor.d.ts +0 -58
  97. package/dist/richtext/attachment-anchor.d.ts.map +0 -1
  98. package/dist/richtext/attachment-anchor.js +0 -221
  99. package/dist/richtext/attachment-anchor.js.map +0 -1
  100. package/dist/richtext/attachment-anchor.test.d.ts +0 -2
  101. package/dist/richtext/attachment-anchor.test.d.ts.map +0 -1
  102. package/dist/richtext/attachment-anchor.test.js +0 -149
  103. package/dist/richtext/attachment-anchor.test.js.map +0 -1
  104. package/dist/richtext/escape.d.ts +0 -7
  105. package/dist/richtext/escape.d.ts.map +0 -1
  106. package/dist/richtext/escape.js +0 -60
  107. package/dist/richtext/escape.js.map +0 -1
  108. package/dist/richtext/mention.d.ts +0 -49
  109. package/dist/richtext/mention.d.ts.map +0 -1
  110. package/dist/richtext/mention.js +0 -179
  111. package/dist/richtext/mention.js.map +0 -1
  112. package/dist/richtext/mention.test.d.ts +0 -2
  113. package/dist/richtext/mention.test.d.ts.map +0 -1
  114. package/dist/richtext/mention.test.js +0 -123
  115. package/dist/richtext/mention.test.js.map +0 -1
  116. package/dist/richtext/round-trip.test.d.ts +0 -2
  117. package/dist/richtext/round-trip.test.d.ts.map +0 -1
  118. package/dist/richtext/round-trip.test.js +0 -105
  119. package/dist/richtext/round-trip.test.js.map +0 -1
package/dist/tools/bug.js CHANGED
@@ -4,64 +4,64 @@ import { RAW_HTML_FIELD } from '../registry/richtext.js';
4
4
  export const bugTools = [
5
5
  {
6
6
  name: 'tapd_get_bugs',
7
- description: 'Query TAPD bugs with filters',
7
+ description: '按条件查询缺陷列表,支持严重级、状态、处理人、迭代、发现/修复版本等多字段过滤与分页。只统计数量用数量统计工具;已知多个 ID 要完整详情用批量详情工具。读操作;limit 默认 30、最大 200。返回缺陷(Bug)数组。',
8
8
  inputSchema: z.object({
9
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
10
- id: z.string().optional().describe('Supports multiple IDs;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
11
- title: z.string().optional().describe('Bug title, supports fuzzy matching'),
12
- priority: z.string().optional().describe('Priority, recommend using priority_label'),
13
- priority_label: z.string().optional().describe('Priority (recommended)'),
14
- severity: z.string().optional().describe('Severity, supports enum query'),
15
- status: z.string().optional().describe('Status, supports enum query'),
16
- v_status: z.string().optional().describe('Status (Chinese)'),
17
- label: z.string().optional().describe('Label, supports enum query'),
18
- iteration_id: z.string().optional().describe('Iteration ID, supports enum query;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
19
- module: z.string().optional().describe('Module, supports enum query'),
20
- current_owner: z.string().optional().describe('Current owner, supports fuzzy matching'),
21
- reporter: z.string().optional().describe('Reporter, supports multiple users query'),
22
- participator: z.string().optional().describe('Participant, supports multiple users query'),
23
- te: z.string().optional().describe('Tester, supports fuzzy matching'),
24
- de: z.string().optional().describe('Developer, supports fuzzy matching'),
25
- cc: z.string().optional().describe('CC person'),
26
- created: z.string().optional().describe('Creation time, Format: YYYY-MM-DD HH:mm'),
27
- in_progress_time: z.string().optional().describe('Accept time, Format: YYYY-MM-DD HH:mm'),
28
- resolved: z.string().optional().describe('Resolve time, Format: YYYY-MM-DD HH:mm'),
29
- verify_time: z.string().optional().describe('Verify time, Format: YYYY-MM-DD HH:mm'),
30
- closed: z.string().optional().describe('Close time, Format: YYYY-MM-DD HH:mm'),
31
- reject_time: z.string().optional().describe('Reject time, Format: YYYY-MM-DD HH:mm'),
32
- modified: z.string().optional().describe('Last modification time, Format: YYYY-MM-DD HH:mm'),
33
- begin: z.string().optional().describe('Estimated start date, Format: YYYY-MM-DD'),
34
- due: z.string().optional().describe('Estimated end date, Format: YYYY-MM-DD'),
35
- deadline: z.string().optional().describe('Resolve deadline, Format: YYYY-MM-DD'),
36
- release_id: z.string().optional().describe('Release plan;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
37
- version_report: z.string().optional().describe('Found version, enum query'),
38
- version_test: z.string().optional().describe('Verify version'),
39
- version_fix: z.string().optional().describe('Fix version'),
40
- version_close: z.string().optional().describe('Close version'),
41
- baseline_find: z.string().optional().describe('Found baseline'),
42
- baseline_join: z.string().optional().describe('Join baseline'),
43
- baseline_test: z.string().optional().describe('Test baseline'),
44
- baseline_close: z.string().optional().describe('Close baseline'),
45
- feature: z.string().optional().describe('Feature'),
46
- source: z.string().optional().describe('Bug root cause, supports enum query'),
47
- bugtype: z.string().optional().describe('Bug type'),
48
- frequency: z.string().optional().describe('Reproduction frequency, supports enum query'),
49
- originphase: z.string().optional().describe('Found phase'),
50
- sourcephase: z.string().optional().describe('Introduction phase'),
51
- resolution: z.string().optional().describe('Resolution method, supports enum query'),
52
- description: z.string().optional().describe('Detailed description, supports fuzzy matching'),
53
- os: z.string().optional().describe('Operating system'),
54
- platform: z.string().optional().describe('Software platform'),
55
- testmode: z.string().optional().describe('Test mode'),
56
- testphase: z.string().optional().describe('Test phase'),
57
- testtype: z.string().optional().describe('Test type'),
58
- size: z.string().optional().describe('Size'),
59
- estimate: z.number().optional().describe('Estimated resolve time'),
60
- custom_field_one: z.string().optional().describe('Custom field 1 (supports 1-200)'),
61
- limit: z.number().optional().describe('Return count, default 30, max 200'),
62
- page: z.number().optional().describe('Page number, default 1'),
63
- order: z.string().optional().describe('Sort order'),
64
- fields: z.string().optional().describe('Specify return fields'),
9
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
10
+ id: z.string().optional().describe('支持多 ID 查询;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
11
+ title: z.string().optional().describe('缺陷标题,支持模糊匹配'),
12
+ priority: z.string().optional().describe('优先级,建议直接用 priority_label'),
13
+ priority_label: z.string().optional().describe('优先级(推荐)'),
14
+ severity: z.string().optional().describe('严重程度,支持枚举值查询'),
15
+ status: z.string().optional().describe('状态,支持枚举值查询'),
16
+ v_status: z.string().optional().describe('状态(中文)'),
17
+ label: z.string().optional().describe('标签,支持枚举值查询'),
18
+ iteration_id: z.string().optional().describe('迭代 ID,支持枚举值查询;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
19
+ module: z.string().optional().describe('模块,支持枚举值查询'),
20
+ current_owner: z.string().optional().describe('当前处理人,支持模糊匹配'),
21
+ reporter: z.string().optional().describe('报告人,支持多人查询'),
22
+ participator: z.string().optional().describe('参与人,支持多人查询'),
23
+ te: z.string().optional().describe('测试人员,支持模糊匹配'),
24
+ de: z.string().optional().describe('开发人员,支持模糊匹配'),
25
+ cc: z.string().optional().describe('抄送人'),
26
+ created: z.string().optional().describe('创建时间,格式 YYYY-MM-DD HH:mm'),
27
+ in_progress_time: z.string().optional().describe('接收时间,格式 YYYY-MM-DD HH:mm'),
28
+ resolved: z.string().optional().describe('解决时间,格式 YYYY-MM-DD HH:mm'),
29
+ verify_time: z.string().optional().describe('验证时间,格式 YYYY-MM-DD HH:mm'),
30
+ closed: z.string().optional().describe('关闭时间,格式 YYYY-MM-DD HH:mm'),
31
+ reject_time: z.string().optional().describe('拒绝时间,格式 YYYY-MM-DD HH:mm'),
32
+ modified: z.string().optional().describe('最后修改时间,格式 YYYY-MM-DD HH:mm'),
33
+ begin: z.string().optional().describe('预计开始日期,格式 YYYY-MM-DD'),
34
+ due: z.string().optional().describe('预计结束日期,格式 YYYY-MM-DD'),
35
+ deadline: z.string().optional().describe('解决期限,格式 YYYY-MM-DD'),
36
+ release_id: z.string().optional().describe('发布计划;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
37
+ version_report: z.string().optional().describe('发现版本,枚举值查询'),
38
+ version_test: z.string().optional().describe('验证版本'),
39
+ version_fix: z.string().optional().describe('修复版本'),
40
+ version_close: z.string().optional().describe('关闭版本'),
41
+ baseline_find: z.string().optional().describe('发现基线'),
42
+ baseline_join: z.string().optional().describe('加入基线'),
43
+ baseline_test: z.string().optional().describe('测试基线'),
44
+ baseline_close: z.string().optional().describe('关闭基线'),
45
+ feature: z.string().optional().describe('特性'),
46
+ source: z.string().optional().describe('缺陷根源,支持枚举值查询'),
47
+ bugtype: z.string().optional().describe('缺陷类型'),
48
+ frequency: z.string().optional().describe('复现频率,支持枚举值查询'),
49
+ originphase: z.string().optional().describe('发现阶段'),
50
+ sourcephase: z.string().optional().describe('引入阶段'),
51
+ resolution: z.string().optional().describe('解决方法,支持枚举值查询'),
52
+ description: z.string().optional().describe('详细描述,支持模糊匹配'),
53
+ os: z.string().optional().describe('操作系统'),
54
+ platform: z.string().optional().describe('软件平台'),
55
+ testmode: z.string().optional().describe('测试方式'),
56
+ testphase: z.string().optional().describe('测试阶段'),
57
+ testtype: z.string().optional().describe('测试类型'),
58
+ size: z.string().optional().describe('规模'),
59
+ estimate: z.number().optional().describe('预计解决时长'),
60
+ custom_field_one: z.string().optional().describe('自定义字段 1(支持 1-200)'),
61
+ limit: z.number().optional().describe('返回数量,默认 30,最大 200'),
62
+ page: z.number().optional().describe('页码,默认 1'),
63
+ order: z.string().optional().describe('排序'),
64
+ fields: z.string().optional().describe('返回字段'),
65
65
  }),
66
66
  handler: async (client, params) => {
67
67
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -78,57 +78,57 @@ export const bugTools = [
78
78
  },
79
79
  {
80
80
  name: 'tapd_create_bug',
81
- description: 'Create a new bug in TAPD',
81
+ description: '创建缺陷。从已有缺陷复制用复制工具。写操作;title 必填;当前处理人/报告人缺省取环境变量 TAPD_NICK_NAME。返回新缺陷。',
82
82
  inputSchema: z.object({
83
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
84
- title: z.string().describe('Bug title (required)'),
85
- priority: z.string().optional().describe('Priority'),
86
- priority_label: z.string().optional().describe('Priority label (recommended)'),
87
- severity: z.string().optional().describe('Severity'),
88
- current_owner: z.string().optional().describe('Current owner (defaults to TAPD_NICK_NAME env)'),
89
- description: z.string().optional().describe('Detailed description'),
83
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
84
+ title: z.string().describe('缺陷标题(必填)'),
85
+ priority: z.string().optional().describe('优先级'),
86
+ priority_label: z.string().optional().describe('优先级标签(推荐)'),
87
+ severity: z.string().optional().describe('严重程度'),
88
+ current_owner: z.string().optional().describe('当前处理人(缺省取环境变量 TAPD_NICK_NAME)'),
89
+ description: z.string().optional().describe('详细描述'),
90
90
  raw_html: RAW_HTML_FIELD,
91
- module: z.string().optional().describe('Module'),
92
- iteration_id: z.string().optional().describe('Iteration ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
93
- label: z.string().optional().describe('Label, multiple values separated by |'),
94
- effort: z.number().optional().describe('Estimated effort'),
95
- template_id: z.string().optional().describe('Template ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
96
- cc: z.string().optional().describe('CC person'),
97
- te: z.string().optional().describe('Tester'),
98
- de: z.string().optional().describe('Developer'),
99
- reporter: z.string().optional().describe('Reporter'),
100
- participator: z.string().optional().describe('Participant'),
101
- auditer: z.string().optional().describe('Auditor'),
102
- confirmer: z.string().optional().describe('Confirmer'),
103
- fixer: z.string().optional().describe('Fixer'),
104
- closer: z.string().optional().describe('Closer'),
105
- begin: z.string().optional().describe('Estimated start date, Format: YYYY-MM-DD'),
106
- due: z.string().optional().describe('Estimated end date, Format: YYYY-MM-DD'),
107
- deadline: z.string().optional().describe('Resolve deadline, Format: YYYY-MM-DD'),
108
- release_id: z.string().optional().describe('Release plan;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
109
- version_report: z.string().optional().describe('Found version'),
110
- version_test: z.string().optional().describe('Verify version'),
111
- version_fix: z.string().optional().describe('Fix version'),
112
- version_close: z.string().optional().describe('Close version'),
113
- baseline_find: z.string().optional().describe('Found baseline'),
114
- baseline_join: z.string().optional().describe('Join baseline'),
115
- baseline_test: z.string().optional().describe('Test baseline'),
116
- baseline_close: z.string().optional().describe('Close baseline'),
117
- feature: z.string().optional().describe('Feature'),
118
- source: z.string().optional().describe('Bug root cause'),
119
- bugtype: z.string().optional().describe('Bug type'),
120
- frequency: z.string().optional().describe('Reproduction frequency'),
121
- originphase: z.string().optional().describe('Found phase'),
122
- sourcephase: z.string().optional().describe('Introduction phase'),
123
- resolution: z.string().optional().describe('Resolution method'),
124
- os: z.string().optional().describe('Operating system'),
125
- platform: z.string().optional().describe('Software platform'),
126
- testmode: z.string().optional().describe('Test mode'),
127
- testphase: z.string().optional().describe('Test phase'),
128
- testtype: z.string().optional().describe('Test type'),
129
- size: z.string().optional().describe('Size'),
130
- estimate: z.number().optional().describe('Estimated resolve time'),
131
- custom_field_one: z.string().optional().describe('Custom field 1 (supports 1-200)'),
91
+ module: z.string().optional().describe('模块'),
92
+ iteration_id: z.string().optional().describe('迭代 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
93
+ label: z.string().optional().describe('标签,多个以 | 分隔'),
94
+ effort: z.number().optional().describe('预估工时'),
95
+ template_id: z.string().optional().describe('模板 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
96
+ cc: z.string().optional().describe('抄送人'),
97
+ te: z.string().optional().describe('测试人员'),
98
+ de: z.string().optional().describe('开发人员'),
99
+ reporter: z.string().optional().describe('报告人'),
100
+ participator: z.string().optional().describe('参与人'),
101
+ auditer: z.string().optional().describe('审核人'),
102
+ confirmer: z.string().optional().describe('确认人'),
103
+ fixer: z.string().optional().describe('修复人'),
104
+ closer: z.string().optional().describe('关闭人'),
105
+ begin: z.string().optional().describe('预计开始日期,格式 YYYY-MM-DD'),
106
+ due: z.string().optional().describe('预计结束日期,格式 YYYY-MM-DD'),
107
+ deadline: z.string().optional().describe('解决期限,格式 YYYY-MM-DD'),
108
+ release_id: z.string().optional().describe('发布计划;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
109
+ version_report: z.string().optional().describe('发现版本'),
110
+ version_test: z.string().optional().describe('验证版本'),
111
+ version_fix: z.string().optional().describe('修复版本'),
112
+ version_close: z.string().optional().describe('关闭版本'),
113
+ baseline_find: z.string().optional().describe('发现基线'),
114
+ baseline_join: z.string().optional().describe('加入基线'),
115
+ baseline_test: z.string().optional().describe('测试基线'),
116
+ baseline_close: z.string().optional().describe('关闭基线'),
117
+ feature: z.string().optional().describe('特性'),
118
+ source: z.string().optional().describe('缺陷根源'),
119
+ bugtype: z.string().optional().describe('缺陷类型'),
120
+ frequency: z.string().optional().describe('复现频率'),
121
+ originphase: z.string().optional().describe('发现阶段'),
122
+ sourcephase: z.string().optional().describe('引入阶段'),
123
+ resolution: z.string().optional().describe('解决方法'),
124
+ os: z.string().optional().describe('操作系统'),
125
+ platform: z.string().optional().describe('软件平台'),
126
+ testmode: z.string().optional().describe('测试方式'),
127
+ testphase: z.string().optional().describe('测试阶段'),
128
+ testtype: z.string().optional().describe('测试类型'),
129
+ size: z.string().optional().describe('规模'),
130
+ estimate: z.number().optional().describe('预计解决时长'),
131
+ custom_field_one: z.string().optional().describe('自定义字段 1(支持 1-200)'),
132
132
  }),
133
133
  handler: async (client, params) => {
134
134
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -147,54 +147,54 @@ export const bugTools = [
147
147
  },
148
148
  {
149
149
  name: 'tapd_update_bug',
150
- description: 'Update an existing bug in TAPD',
150
+ description: '按 ID 更新缺陷字段(状态流转、处理人、解决期限等)。批量改多条用批量更新工具。写操作;id 必填。返回更新后的缺陷。',
151
151
  inputSchema: z.object({
152
- id: z.string().describe('Bug ID (required);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
153
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
154
- title: z.string().optional().describe('Bug title'),
155
- priority: z.string().optional().describe('Priority'),
156
- priority_label: z.string().optional().describe('Priority label (recommended)'),
157
- severity: z.string().optional().describe('Severity'),
158
- status: z.string().optional().describe('Status'),
159
- current_owner: z.string().optional().describe('Current owner'),
160
- description: z.string().optional().describe('Detailed description'),
152
+ id: z.string().describe('缺陷 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
153
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
154
+ title: z.string().optional().describe('缺陷标题'),
155
+ priority: z.string().optional().describe('优先级'),
156
+ priority_label: z.string().optional().describe('优先级标签(推荐)'),
157
+ severity: z.string().optional().describe('严重程度'),
158
+ status: z.string().optional().describe('状态'),
159
+ current_owner: z.string().optional().describe('当前处理人'),
160
+ description: z.string().optional().describe('详细描述'),
161
161
  raw_html: RAW_HTML_FIELD,
162
- module: z.string().optional().describe('Module'),
163
- iteration_id: z.string().optional().describe('Iteration ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
164
- label: z.string().optional().describe('Label, multiple values separated by |'),
165
- effort: z.number().optional().describe('Estimated effort'),
166
- cc: z.string().optional().describe('CC person'),
167
- te: z.string().optional().describe('Tester'),
168
- de: z.string().optional().describe('Developer'),
169
- reporter: z.string().optional().describe('Reporter'),
170
- participator: z.string().optional().describe('Participant'),
171
- begin: z.string().optional().describe('Estimated start date, Format: YYYY-MM-DD'),
172
- due: z.string().optional().describe('Estimated end date, Format: YYYY-MM-DD'),
173
- deadline: z.string().optional().describe('Resolve deadline, Format: YYYY-MM-DD'),
174
- release_id: z.string().optional().describe('Release plan;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
175
- version_report: z.string().optional().describe('Found version'),
176
- version_test: z.string().optional().describe('Verify version'),
177
- version_fix: z.string().optional().describe('Fix version'),
178
- version_close: z.string().optional().describe('Close version'),
179
- baseline_find: z.string().optional().describe('Found baseline'),
180
- baseline_join: z.string().optional().describe('Join baseline'),
181
- baseline_test: z.string().optional().describe('Test baseline'),
182
- baseline_close: z.string().optional().describe('Close baseline'),
183
- feature: z.string().optional().describe('Feature'),
184
- source: z.string().optional().describe('Bug root cause'),
185
- bugtype: z.string().optional().describe('Bug type'),
186
- frequency: z.string().optional().describe('Reproduction frequency'),
187
- originphase: z.string().optional().describe('Found phase'),
188
- sourcephase: z.string().optional().describe('Introduction phase'),
189
- resolution: z.string().optional().describe('Resolution method'),
190
- os: z.string().optional().describe('Operating system'),
191
- platform: z.string().optional().describe('Software platform'),
192
- testmode: z.string().optional().describe('Test mode'),
193
- testphase: z.string().optional().describe('Test phase'),
194
- testtype: z.string().optional().describe('Test type'),
195
- size: z.string().optional().describe('Size'),
196
- estimate: z.number().optional().describe('Estimated resolve time'),
197
- custom_field_one: z.string().optional().describe('Custom field 1 (supports 1-200)'),
162
+ module: z.string().optional().describe('模块'),
163
+ iteration_id: z.string().optional().describe('迭代 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
164
+ label: z.string().optional().describe('标签,多个以 | 分隔'),
165
+ effort: z.number().optional().describe('预估工时'),
166
+ cc: z.string().optional().describe('抄送人'),
167
+ te: z.string().optional().describe('测试人员'),
168
+ de: z.string().optional().describe('开发人员'),
169
+ reporter: z.string().optional().describe('报告人'),
170
+ participator: z.string().optional().describe('参与人'),
171
+ begin: z.string().optional().describe('预计开始日期,格式 YYYY-MM-DD'),
172
+ due: z.string().optional().describe('预计结束日期,格式 YYYY-MM-DD'),
173
+ deadline: z.string().optional().describe('解决期限,格式 YYYY-MM-DD'),
174
+ release_id: z.string().optional().describe('发布计划;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
175
+ version_report: z.string().optional().describe('发现版本'),
176
+ version_test: z.string().optional().describe('验证版本'),
177
+ version_fix: z.string().optional().describe('修复版本'),
178
+ version_close: z.string().optional().describe('关闭版本'),
179
+ baseline_find: z.string().optional().describe('发现基线'),
180
+ baseline_join: z.string().optional().describe('加入基线'),
181
+ baseline_test: z.string().optional().describe('测试基线'),
182
+ baseline_close: z.string().optional().describe('关闭基线'),
183
+ feature: z.string().optional().describe('特性'),
184
+ source: z.string().optional().describe('缺陷根源'),
185
+ bugtype: z.string().optional().describe('缺陷类型'),
186
+ frequency: z.string().optional().describe('复现频率'),
187
+ originphase: z.string().optional().describe('发现阶段'),
188
+ sourcephase: z.string().optional().describe('引入阶段'),
189
+ resolution: z.string().optional().describe('解决方法'),
190
+ os: z.string().optional().describe('操作系统'),
191
+ platform: z.string().optional().describe('软件平台'),
192
+ testmode: z.string().optional().describe('测试方式'),
193
+ testphase: z.string().optional().describe('测试阶段'),
194
+ testtype: z.string().optional().describe('测试类型'),
195
+ size: z.string().optional().describe('规模'),
196
+ estimate: z.number().optional().describe('预计解决时长'),
197
+ custom_field_one: z.string().optional().describe('自定义字段 1(支持 1-200)'),
198
198
  }),
199
199
  handler: async (client, params) => {
200
200
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -211,60 +211,60 @@ export const bugTools = [
211
211
  },
212
212
  {
213
213
  name: 'tapd_get_bug_count',
214
- description: 'Get the count of bugs matching filters',
214
+ description: '按与缺陷列表查询相同的过滤条件返回缺陷数量,不返回列表。统计缺陷存量/趋势时用。读操作。返回 {count}。',
215
215
  inputSchema: z.object({
216
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
217
- id: z.string().optional().describe('Supports multiple IDs;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
218
- title: z.string().optional().describe('Bug title, supports fuzzy matching'),
219
- priority: z.string().optional().describe('Priority, recommend using priority_label'),
220
- priority_label: z.string().optional().describe('Priority (recommended)'),
221
- severity: z.string().optional().describe('Severity, supports enum query'),
222
- status: z.string().optional().describe('Status, supports enum query'),
223
- v_status: z.string().optional().describe('Status (Chinese)'),
224
- label: z.string().optional().describe('Label, supports enum query'),
225
- iteration_id: z.string().optional().describe('Iteration ID, supports enum query;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
226
- module: z.string().optional().describe('Module, supports enum query'),
227
- current_owner: z.string().optional().describe('Current owner, supports fuzzy matching'),
228
- reporter: z.string().optional().describe('Reporter, supports multiple users query'),
229
- participator: z.string().optional().describe('Participant, supports multiple users query'),
230
- te: z.string().optional().describe('Tester, supports fuzzy matching'),
231
- de: z.string().optional().describe('Developer, supports fuzzy matching'),
232
- cc: z.string().optional().describe('CC person'),
233
- created: z.string().optional().describe('Creation time, Format: YYYY-MM-DD HH:mm'),
234
- in_progress_time: z.string().optional().describe('Accept time, Format: YYYY-MM-DD HH:mm'),
235
- resolved: z.string().optional().describe('Resolve time, Format: YYYY-MM-DD HH:mm'),
236
- verify_time: z.string().optional().describe('Verify time, Format: YYYY-MM-DD HH:mm'),
237
- closed: z.string().optional().describe('Close time, Format: YYYY-MM-DD HH:mm'),
238
- reject_time: z.string().optional().describe('Reject time, Format: YYYY-MM-DD HH:mm'),
239
- modified: z.string().optional().describe('Last modification time, Format: YYYY-MM-DD HH:mm'),
240
- begin: z.string().optional().describe('Estimated start date, Format: YYYY-MM-DD'),
241
- due: z.string().optional().describe('Estimated end date, Format: YYYY-MM-DD'),
242
- deadline: z.string().optional().describe('Resolve deadline, Format: YYYY-MM-DD'),
243
- release_id: z.string().optional().describe('Release plan;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
244
- version_report: z.string().optional().describe('Found version, enum query'),
245
- version_test: z.string().optional().describe('Verify version'),
246
- version_fix: z.string().optional().describe('Fix version'),
247
- version_close: z.string().optional().describe('Close version'),
248
- baseline_find: z.string().optional().describe('Found baseline'),
249
- baseline_join: z.string().optional().describe('Join baseline'),
250
- baseline_test: z.string().optional().describe('Test baseline'),
251
- baseline_close: z.string().optional().describe('Close baseline'),
252
- feature: z.string().optional().describe('Feature'),
253
- source: z.string().optional().describe('Bug root cause, supports enum query'),
254
- bugtype: z.string().optional().describe('Bug type'),
255
- frequency: z.string().optional().describe('Reproduction frequency, supports enum query'),
256
- originphase: z.string().optional().describe('Found phase'),
257
- sourcephase: z.string().optional().describe('Introduction phase'),
258
- resolution: z.string().optional().describe('Resolution method, supports enum query'),
259
- description: z.string().optional().describe('Detailed description, supports fuzzy matching'),
260
- os: z.string().optional().describe('Operating system'),
261
- platform: z.string().optional().describe('Software platform'),
262
- testmode: z.string().optional().describe('Test mode'),
263
- testphase: z.string().optional().describe('Test phase'),
264
- testtype: z.string().optional().describe('Test type'),
265
- size: z.string().optional().describe('Size'),
266
- estimate: z.number().optional().describe('Estimated resolve time'),
267
- custom_field_one: z.string().optional().describe('Custom field 1 (supports 1-200)'),
216
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
217
+ id: z.string().optional().describe('支持多 ID 查询;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
218
+ title: z.string().optional().describe('缺陷标题,支持模糊匹配'),
219
+ priority: z.string().optional().describe('优先级,建议直接用 priority_label'),
220
+ priority_label: z.string().optional().describe('优先级(推荐)'),
221
+ severity: z.string().optional().describe('严重程度,支持枚举值查询'),
222
+ status: z.string().optional().describe('状态,支持枚举值查询'),
223
+ v_status: z.string().optional().describe('状态(中文)'),
224
+ label: z.string().optional().describe('标签,支持枚举值查询'),
225
+ iteration_id: z.string().optional().describe('迭代 ID,支持枚举值查询;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
226
+ module: z.string().optional().describe('模块,支持枚举值查询'),
227
+ current_owner: z.string().optional().describe('当前处理人,支持模糊匹配'),
228
+ reporter: z.string().optional().describe('报告人,支持多人查询'),
229
+ participator: z.string().optional().describe('参与人,支持多人查询'),
230
+ te: z.string().optional().describe('测试人员,支持模糊匹配'),
231
+ de: z.string().optional().describe('开发人员,支持模糊匹配'),
232
+ cc: z.string().optional().describe('抄送人'),
233
+ created: z.string().optional().describe('创建时间,格式 YYYY-MM-DD HH:mm'),
234
+ in_progress_time: z.string().optional().describe('接收时间,格式 YYYY-MM-DD HH:mm'),
235
+ resolved: z.string().optional().describe('解决时间,格式 YYYY-MM-DD HH:mm'),
236
+ verify_time: z.string().optional().describe('验证时间,格式 YYYY-MM-DD HH:mm'),
237
+ closed: z.string().optional().describe('关闭时间,格式 YYYY-MM-DD HH:mm'),
238
+ reject_time: z.string().optional().describe('拒绝时间,格式 YYYY-MM-DD HH:mm'),
239
+ modified: z.string().optional().describe('最后修改时间,格式 YYYY-MM-DD HH:mm'),
240
+ begin: z.string().optional().describe('预计开始日期,格式 YYYY-MM-DD'),
241
+ due: z.string().optional().describe('预计结束日期,格式 YYYY-MM-DD'),
242
+ deadline: z.string().optional().describe('解决期限,格式 YYYY-MM-DD'),
243
+ release_id: z.string().optional().describe('发布计划;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
244
+ version_report: z.string().optional().describe('发现版本,枚举值查询'),
245
+ version_test: z.string().optional().describe('验证版本'),
246
+ version_fix: z.string().optional().describe('修复版本'),
247
+ version_close: z.string().optional().describe('关闭版本'),
248
+ baseline_find: z.string().optional().describe('发现基线'),
249
+ baseline_join: z.string().optional().describe('加入基线'),
250
+ baseline_test: z.string().optional().describe('测试基线'),
251
+ baseline_close: z.string().optional().describe('关闭基线'),
252
+ feature: z.string().optional().describe('特性'),
253
+ source: z.string().optional().describe('缺陷根源,支持枚举值查询'),
254
+ bugtype: z.string().optional().describe('缺陷类型'),
255
+ frequency: z.string().optional().describe('复现频率,支持枚举值查询'),
256
+ originphase: z.string().optional().describe('发现阶段'),
257
+ sourcephase: z.string().optional().describe('引入阶段'),
258
+ resolution: z.string().optional().describe('解决方法,支持枚举值查询'),
259
+ description: z.string().optional().describe('详细描述,支持模糊匹配'),
260
+ os: z.string().optional().describe('操作系统'),
261
+ platform: z.string().optional().describe('软件平台'),
262
+ testmode: z.string().optional().describe('测试方式'),
263
+ testphase: z.string().optional().describe('测试阶段'),
264
+ testtype: z.string().optional().describe('测试类型'),
265
+ size: z.string().optional().describe('规模'),
266
+ estimate: z.number().optional().describe('预计解决时长'),
267
+ custom_field_one: z.string().optional().describe('自定义字段 1(支持 1-200)'),
268
268
  }),
269
269
  handler: async (client, params) => {
270
270
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -282,18 +282,18 @@ export const bugTools = [
282
282
  // 缺陷变更历史
283
283
  {
284
284
  name: 'tapd_get_bug_changes',
285
- description: '获取缺陷变更历史',
285
+ description: '查询缺陷字段变更历史(谁在何时把什么字段从什么改成什么)。只要条数用变更次数统计工具。读操作;limit 默认 30、最大 200。返回变更记录数组。',
286
286
  inputSchema: z.object({
287
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
288
- id: z.string().optional().describe('变更记录ID,支持多ID查询;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
289
- bug_id: z.string().optional().describe('缺陷ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
287
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
288
+ id: z.string().optional().describe('变更记录 ID,支持多 ID查询;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
289
+ bug_id: z.string().optional().describe('缺陷 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
290
290
  field: z.string().optional().describe('变更字段'),
291
291
  value_before: z.string().optional().describe('变更前值'),
292
292
  value_after: z.string().optional().describe('变更后值'),
293
293
  user: z.string().optional().describe('变更人'),
294
294
  created: z.string().optional().describe('创建时间,支持时间查询'),
295
- limit: z.number().optional().describe('返回数量,默认30,最大200'),
296
- page: z.number().optional().describe('页码,默认1'),
295
+ limit: z.number().optional().describe('返回数量,默认 30,最大 200'),
296
+ page: z.number().optional().describe('页码,默认 1'),
297
297
  order: z.string().optional().describe('排序'),
298
298
  fields: z.string().optional().describe('返回字段'),
299
299
  }),
@@ -312,10 +312,10 @@ export const bugTools = [
312
312
  },
313
313
  {
314
314
  name: 'tapd_get_bug_changes_count',
315
- description: '获取缺陷变更次数',
315
+ description: '按过滤条件返回缺陷变更记录条数。要看明细用变更历史查询工具。读操作。返回 {count}。',
316
316
  inputSchema: z.object({
317
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
318
- bug_id: z.string().optional().describe('缺陷ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
317
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
318
+ bug_id: z.string().optional().describe('缺陷 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
319
319
  field: z.string().optional().describe('变更字段'),
320
320
  user: z.string().optional().describe('变更人'),
321
321
  created: z.string().optional().describe('创建时间'),
@@ -336,9 +336,9 @@ export const bugTools = [
336
336
  // 缺陷字段配置
337
337
  {
338
338
  name: 'tapd_get_bug_custom_fields_settings',
339
- description: '获取缺陷自定义字段配置',
339
+ description: '查询缺陷自定义字段配置(字段名、类型、候选值)。需求侧用需求自定义字段查询工具。读操作。返回配置数组。',
340
340
  inputSchema: z.object({
341
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
341
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
342
342
  }),
343
343
  handler: async (client, params) => {
344
344
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -350,9 +350,9 @@ export const bugTools = [
350
350
  },
351
351
  {
352
352
  name: 'tapd_get_bug_fields_info',
353
- description: '获取缺陷字段信息',
353
+ description: '查询缺陷可写字段元信息(类型、是否必填)。读操作。返回字段定义数组。',
354
354
  inputSchema: z.object({
355
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
355
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
356
356
  }),
357
357
  handler: async (client, params) => {
358
358
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -364,9 +364,9 @@ export const bugTools = [
364
364
  },
365
365
  {
366
366
  name: 'tapd_get_bug_fields_lable',
367
- description: '获取缺陷字段中英文对照',
367
+ description: '查询缺陷字段名中英文对照。读操作。返回映射对象。',
368
368
  inputSchema: z.object({
369
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
369
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
370
370
  }),
371
371
  handler: async (client, params) => {
372
372
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -379,9 +379,9 @@ export const bugTools = [
379
379
  // 缺陷模板
380
380
  {
381
381
  name: 'tapd_get_bug_template_list',
382
- description: '获取缺陷模板列表',
382
+ description: '查询缺陷模板列表。取默认模板用默认模板查询工具。读操作。返回模板数组。',
383
383
  inputSchema: z.object({
384
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
384
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
385
385
  limit: z.number().optional().describe('返回数量'),
386
386
  page: z.number().optional().describe('页码'),
387
387
  fields: z.string().optional().describe('返回字段'),
@@ -396,9 +396,9 @@ export const bugTools = [
396
396
  },
397
397
  {
398
398
  name: 'tapd_get_default_bug_template',
399
- description: '获取缺陷默认模板',
399
+ description: '查询缺陷默认模板字段。要模板清单用模板列表查询工具。读操作。返回默认模板。',
400
400
  inputSchema: z.object({
401
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
401
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
402
402
  }),
403
403
  handler: async (client, params) => {
404
404
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -411,10 +411,10 @@ export const bugTools = [
411
411
  // 批量操作
412
412
  {
413
413
  name: 'tapd_batch_update_bugs',
414
- description: '批量更新缺陷',
414
+ description: '一次批量更新最多 50 条缺陷(处理器内自动做长 ID 转换)。只改一条用单条更新工具。写操作;bugs 传 JSON 数组字符串。返回批量结果。',
415
415
  inputSchema: z.object({
416
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
417
- bugs: z.string().describe('缺陷更新数组JSON,最多50条 (必填)'),
416
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
417
+ bugs: z.string().describe('缺陷更新数组JSON,最多50条(必填)'),
418
418
  }),
419
419
  handler: async (client, params) => {
420
420
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -441,15 +441,15 @@ export const bugTools = [
441
441
  },
442
442
  {
443
443
  name: 'tapd_copy_bug',
444
- description: '复制缺陷',
444
+ description: '复制已有缺陷创建新缺陷,可选带附件、评论。从零新建用创建工具。写操作;id 必填。返回新缺陷。',
445
445
  inputSchema: z.object({
446
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
447
- id: z.string().describe('要复制的缺陷ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
446
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
447
+ id: z.string().describe('要复制的缺陷 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
448
448
  title: z.string().optional().describe('新缺陷标题(默认为原标题)'),
449
449
  current_owner: z.string().optional().describe('处理人'),
450
- iteration_id: z.string().optional().describe('迭代ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
451
- copy_attachments: z.number().optional().describe('是否复制附件,值=1复制'),
452
- copy_comments: z.number().optional().describe('是否复制评论,值=1复制'),
450
+ iteration_id: z.string().optional().describe('迭代 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
451
+ copy_attachments: z.number().optional().describe('是否复制附件,值=1 为复制'),
452
+ copy_comments: z.number().optional().describe('是否复制评论,值=1 为复制'),
453
453
  }),
454
454
  handler: async (client, params) => {
455
455
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -467,10 +467,10 @@ export const bugTools = [
467
467
  // 缺陷关联
468
468
  {
469
469
  name: 'tapd_get_link_bugs',
470
- description: '获取缺陷关联关系',
470
+ description: '查询某缺陷的缺陷间关联关系。建立/取消关联用关联建立/取消工具;查缺陷关联的需求用关联需求查询工具。读操作;bug_id 必填。返回关联数组。',
471
471
  inputSchema: z.object({
472
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
473
- bug_id: z.string().describe('缺陷ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
472
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
473
+ bug_id: z.string().describe('缺陷 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
474
474
  }),
475
475
  handler: async (client, params) => {
476
476
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -487,11 +487,11 @@ export const bugTools = [
487
487
  },
488
488
  {
489
489
  name: 'tapd_link_bugs',
490
- description: '关联缺陷',
490
+ description: '建立缺陷与缺陷的关联(可标前置/后置等类型)。查询用关联关系查询工具;取消用关联取消工具。写操作;bug_id(主缺陷)与被关联缺陷 ID 必填。返回关联结果。',
491
491
  inputSchema: z.object({
492
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
493
- bug_id: z.string().describe('主缺陷ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
494
- link_bug_id: z.string().describe('关联缺陷ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
492
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
493
+ bug_id: z.string().describe('主缺陷 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
494
+ link_bug_id: z.string().describe('关联缺陷 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
495
495
  link_type: z.string().optional().describe('关联类型(前置/后置等)'),
496
496
  }),
497
497
  handler: async (client, params) => {
@@ -510,11 +510,11 @@ export const bugTools = [
510
510
  },
511
511
  {
512
512
  name: 'tapd_delete_link_bugs',
513
- description: '取消关联缺陷',
513
+ description: '取消缺陷与缺陷的关联。建立关联用关联建立工具。写操作;bug_id、被取消关联的缺陷 ID 必填。返回解除结果。',
514
514
  inputSchema: z.object({
515
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
516
- bug_id: z.string().describe('主缺陷ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
517
- link_bug_id: z.string().describe('要取消关联的缺陷ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
515
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
516
+ bug_id: z.string().describe('主缺陷 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
517
+ link_bug_id: z.string().describe('要取消关联的缺陷 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
518
518
  }),
519
519
  handler: async (client, params) => {
520
520
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -532,10 +532,10 @@ export const bugTools = [
532
532
  },
533
533
  {
534
534
  name: 'tapd_get_related_stories',
535
- description: '获取缺陷关联需求',
535
+ description: '查询缺陷关联的需求。反向(按需求找缺陷)用需求侧关联缺陷查询工具;缺陷间关联用缺陷关联关系查询工具。读操作;bug_id 必填。返回关联需求。',
536
536
  inputSchema: z.object({
537
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
538
- bug_id: z.string().describe('缺陷ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
537
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
538
+ bug_id: z.string().describe('缺陷 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
539
539
  }),
540
540
  handler: async (client, params) => {
541
541
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -553,12 +553,12 @@ export const bugTools = [
553
553
  // 其他
554
554
  {
555
555
  name: 'tapd_get_bugs_by_view_conf_id',
556
- description: '获取视图缺陷列表',
556
+ description: '按视图配置 ID 查询该视图下的缺陷列表。自定义条件查询用列表查询工具。读操作;view_conf_id 必填。返回缺陷列表。',
557
557
  inputSchema: z.object({
558
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
559
- view_conf_id: z.string().describe('视图配置ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
560
- limit: z.number().optional().describe('返回数量,默认30,最大200'),
561
- page: z.number().optional().describe('页码,默认1'),
558
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
559
+ view_conf_id: z.string().describe('视图配置 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
560
+ limit: z.number().optional().describe('返回数量,默认 30,最大 200'),
561
+ page: z.number().optional().describe('页码,默认 1'),
562
562
  fields: z.string().optional().describe('返回字段'),
563
563
  }),
564
564
  handler: async (client, params) => {
@@ -571,16 +571,16 @@ export const bugTools = [
571
571
  },
572
572
  {
573
573
  name: 'tapd_get_removed_bugs',
574
- description: '获取回收站缺陷',
574
+ description: '查询回收站中的缺陷。存续缺陷用列表查询工具。读操作;limit 默认 30、最大 200。返回已删除缺陷数组。',
575
575
  inputSchema: z.object({
576
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
577
- id: z.string().optional().describe('缺陷ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
576
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
577
+ id: z.string().optional().describe('缺陷 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
578
578
  title: z.string().optional().describe('标题'),
579
579
  current_owner: z.string().optional().describe('处理人'),
580
580
  reporter: z.string().optional().describe('创建人'),
581
581
  created: z.string().optional().describe('创建时间'),
582
582
  deleted: z.string().optional().describe('删除时间'),
583
- limit: z.number().optional().describe('返回数量,默认30,最大200'),
583
+ limit: z.number().optional().describe('返回数量,默认 30,最大 200'),
584
584
  page: z.number().optional().describe('页码'),
585
585
  order: z.string().optional().describe('排序'),
586
586
  fields: z.string().optional().describe('返回字段'),
@@ -600,10 +600,10 @@ export const bugTools = [
600
600
  },
601
601
  {
602
602
  name: 'tapd_bug_ids_to_query_token',
603
- description: '转换缺陷ID为queryToken',
603
+ description: '把一批缺陷 ID 转成服务端 queryToken(供按 ID 集合查询的场景)。仅做 ID→token 转换;要完整详情用批量详情工具。读操作;ids 逗号分隔。返回 queryToken。',
604
604
  inputSchema: z.object({
605
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
606
- ids: z.string().describe('缺陷ID列表,逗号分隔 (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
605
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
606
+ ids: z.string().describe('缺陷 ID列表,逗号分隔(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
607
607
  }),
608
608
  handler: async (client, params) => {
609
609
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();