@xihe-lab/tapd-core 2.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/LICENSE +190 -0
  2. package/dist/advisor/advisor.test.d.ts +2 -0
  3. package/dist/advisor/advisor.test.d.ts.map +1 -0
  4. package/dist/advisor/advisor.test.js +102 -0
  5. package/dist/advisor/advisor.test.js.map +1 -0
  6. package/dist/advisor/index.d.ts +19 -0
  7. package/dist/advisor/index.d.ts.map +1 -0
  8. package/dist/advisor/index.js +240 -0
  9. package/dist/advisor/index.js.map +1 -0
  10. package/dist/config/config.d.ts +43 -0
  11. package/dist/config/config.d.ts.map +1 -0
  12. package/dist/config/config.js +221 -0
  13. package/dist/config/config.js.map +1 -0
  14. package/dist/config/config.test.d.ts +2 -0
  15. package/dist/config/config.test.d.ts.map +1 -0
  16. package/dist/config/config.test.js +229 -0
  17. package/dist/config/config.test.js.map +1 -0
  18. package/dist/index.d.ts +11 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +10 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/registry/cli-meta.d.ts +4 -0
  23. package/dist/registry/cli-meta.d.ts.map +1 -0
  24. package/dist/registry/cli-meta.js +104 -0
  25. package/dist/registry/cli-meta.js.map +1 -0
  26. package/dist/registry/debug-commands.d.ts +2 -0
  27. package/dist/registry/debug-commands.d.ts.map +1 -0
  28. package/dist/registry/debug-commands.js +47 -0
  29. package/dist/registry/debug-commands.js.map +1 -0
  30. package/dist/registry/derive-command.d.ts +6 -0
  31. package/dist/registry/derive-command.d.ts.map +1 -0
  32. package/dist/registry/derive-command.js +69 -0
  33. package/dist/registry/derive-command.js.map +1 -0
  34. package/dist/registry/long-id-guard.d.ts +3 -0
  35. package/dist/registry/long-id-guard.d.ts.map +1 -0
  36. package/dist/registry/long-id-guard.js +39 -0
  37. package/dist/registry/long-id-guard.js.map +1 -0
  38. package/dist/registry/long-id-guard.test.d.ts +2 -0
  39. package/dist/registry/long-id-guard.test.d.ts.map +1 -0
  40. package/dist/registry/long-id-guard.test.js +224 -0
  41. package/dist/registry/long-id-guard.test.js.map +1 -0
  42. package/dist/registry/registry.d.ts +43 -0
  43. package/dist/registry/registry.d.ts.map +1 -0
  44. package/dist/registry/registry.js +131 -0
  45. package/dist/registry/registry.js.map +1 -0
  46. package/dist/registry/registry.test.d.ts +2 -0
  47. package/dist/registry/registry.test.d.ts.map +1 -0
  48. package/dist/registry/registry.test.js +220 -0
  49. package/dist/registry/registry.test.js.map +1 -0
  50. package/dist/registry/richtext-manifests.generated.d.ts +3 -0
  51. package/dist/registry/richtext-manifests.generated.d.ts.map +1 -0
  52. package/dist/registry/richtext-manifests.generated.js +98 -0
  53. package/dist/registry/richtext-manifests.generated.js.map +1 -0
  54. package/dist/registry/richtext.d.ts +6 -0
  55. package/dist/registry/richtext.d.ts.map +1 -0
  56. package/dist/registry/richtext.js +64 -0
  57. package/dist/registry/richtext.js.map +1 -0
  58. package/dist/registry/richtext.test.d.ts +2 -0
  59. package/dist/registry/richtext.test.d.ts.map +1 -0
  60. package/dist/registry/richtext.test.js +210 -0
  61. package/dist/registry/richtext.test.js.map +1 -0
  62. package/dist/registry/write-policy.d.ts +3 -0
  63. package/dist/registry/write-policy.d.ts.map +1 -0
  64. package/dist/registry/write-policy.js +5 -0
  65. package/dist/registry/write-policy.js.map +1 -0
  66. package/dist/schema/export.d.ts +12 -0
  67. package/dist/schema/export.d.ts.map +1 -0
  68. package/dist/schema/export.js +39 -0
  69. package/dist/schema/export.js.map +1 -0
  70. package/dist/schema/export.test.d.ts +2 -0
  71. package/dist/schema/export.test.d.ts.map +1 -0
  72. package/dist/schema/export.test.js +68 -0
  73. package/dist/schema/export.test.js.map +1 -0
  74. package/dist/sdk-routes.d.ts +9 -0
  75. package/dist/sdk-routes.d.ts.map +1 -0
  76. package/dist/sdk-routes.js +148 -0
  77. package/dist/sdk-routes.js.map +1 -0
  78. package/dist/tapd-client.d.ts +99 -0
  79. package/dist/tapd-client.d.ts.map +1 -0
  80. package/dist/tapd-client.js +252 -0
  81. package/dist/tapd-client.js.map +1 -0
  82. package/dist/tools/attachment.d.ts +3 -0
  83. package/dist/tools/attachment.d.ts.map +1 -0
  84. package/dist/tools/attachment.js +99 -0
  85. package/dist/tools/attachment.js.map +1 -0
  86. package/dist/tools/board.d.ts +3 -0
  87. package/dist/tools/board.d.ts.map +1 -0
  88. package/dist/tools/board.js +98 -0
  89. package/dist/tools/board.js.map +1 -0
  90. package/dist/tools/bug.d.ts +3 -0
  91. package/dist/tools/bug.d.ts.map +1 -0
  92. package/dist/tools/bug.js +619 -0
  93. package/dist/tools/bug.js.map +1 -0
  94. package/dist/tools/changes.d.ts +3 -0
  95. package/dist/tools/changes.d.ts.map +1 -0
  96. package/dist/tools/changes.js +73 -0
  97. package/dist/tools/changes.js.map +1 -0
  98. package/dist/tools/comment.d.ts +3 -0
  99. package/dist/tools/comment.d.ts.map +1 -0
  100. package/dist/tools/comment.js +93 -0
  101. package/dist/tools/comment.js.map +1 -0
  102. package/dist/tools/custom-fields.d.ts +3 -0
  103. package/dist/tools/custom-fields.d.ts.map +1 -0
  104. package/dist/tools/custom-fields.js +105 -0
  105. package/dist/tools/custom-fields.js.map +1 -0
  106. package/dist/tools/image.d.ts +3 -0
  107. package/dist/tools/image.d.ts.map +1 -0
  108. package/dist/tools/image.js +23 -0
  109. package/dist/tools/image.js.map +1 -0
  110. package/dist/tools/index.d.ts +3 -0
  111. package/dist/tools/index.d.ts.map +1 -0
  112. package/dist/tools/index.js +55 -0
  113. package/dist/tools/index.js.map +1 -0
  114. package/dist/tools/iteration.d.ts +3 -0
  115. package/dist/tools/iteration.d.ts.map +1 -0
  116. package/dist/tools/iteration.js +190 -0
  117. package/dist/tools/iteration.js.map +1 -0
  118. package/dist/tools/md-to-html.test.d.ts +2 -0
  119. package/dist/tools/md-to-html.test.d.ts.map +1 -0
  120. package/dist/tools/md-to-html.test.js +125 -0
  121. package/dist/tools/md-to-html.test.js.map +1 -0
  122. package/dist/tools/mini-comment.d.ts +3 -0
  123. package/dist/tools/mini-comment.d.ts.map +1 -0
  124. package/dist/tools/mini-comment.js +74 -0
  125. package/dist/tools/mini-comment.js.map +1 -0
  126. package/dist/tools/mini-item.d.ts +3 -0
  127. package/dist/tools/mini-item.d.ts.map +1 -0
  128. package/dist/tools/mini-item.js +166 -0
  129. package/dist/tools/mini-item.js.map +1 -0
  130. package/dist/tools/mini-workspace.d.ts +3 -0
  131. package/dist/tools/mini-workspace.d.ts.map +1 -0
  132. package/dist/tools/mini-workspace.js +43 -0
  133. package/dist/tools/mini-workspace.js.map +1 -0
  134. package/dist/tools/program.d.ts +3 -0
  135. package/dist/tools/program.d.ts.map +1 -0
  136. package/dist/tools/program.js +27 -0
  137. package/dist/tools/program.js.map +1 -0
  138. package/dist/tools/relations.d.ts +3 -0
  139. package/dist/tools/relations.d.ts.map +1 -0
  140. package/dist/tools/relations.js +68 -0
  141. package/dist/tools/relations.js.map +1 -0
  142. package/dist/tools/release.d.ts +3 -0
  143. package/dist/tools/release.d.ts.map +1 -0
  144. package/dist/tools/release.js +250 -0
  145. package/dist/tools/release.js.map +1 -0
  146. package/dist/tools/report.d.ts +3 -0
  147. package/dist/tools/report.d.ts.map +1 -0
  148. package/dist/tools/report.js +38 -0
  149. package/dist/tools/report.js.map +1 -0
  150. package/dist/tools/settings.d.ts +3 -0
  151. package/dist/tools/settings.d.ts.map +1 -0
  152. package/dist/tools/settings.js +409 -0
  153. package/dist/tools/settings.js.map +1 -0
  154. package/dist/tools/source.d.ts +3 -0
  155. package/dist/tools/source.d.ts.map +1 -0
  156. package/dist/tools/source.js +69 -0
  157. package/dist/tools/source.js.map +1 -0
  158. package/dist/tools/story.d.ts +3 -0
  159. package/dist/tools/story.d.ts.map +1 -0
  160. package/dist/tools/story.js +680 -0
  161. package/dist/tools/story.js.map +1 -0
  162. package/dist/tools/task.d.ts +3 -0
  163. package/dist/tools/task.d.ts.map +1 -0
  164. package/dist/tools/task.js +267 -0
  165. package/dist/tools/task.js.map +1 -0
  166. package/dist/tools/test.d.ts +3 -0
  167. package/dist/tools/test.d.ts.map +1 -0
  168. package/dist/tools/test.js +564 -0
  169. package/dist/tools/test.js.map +1 -0
  170. package/dist/tools/timesheet.d.ts +3 -0
  171. package/dist/tools/timesheet.d.ts.map +1 -0
  172. package/dist/tools/timesheet.js +118 -0
  173. package/dist/tools/timesheet.js.map +1 -0
  174. package/dist/tools/user.d.ts +3 -0
  175. package/dist/tools/user.d.ts.map +1 -0
  176. package/dist/tools/user.js +57 -0
  177. package/dist/tools/user.js.map +1 -0
  178. package/dist/tools/utility.d.ts +3 -0
  179. package/dist/tools/utility.d.ts.map +1 -0
  180. package/dist/tools/utility.js +165 -0
  181. package/dist/tools/utility.js.map +1 -0
  182. package/dist/tools/wiki.d.ts +3 -0
  183. package/dist/tools/wiki.d.ts.map +1 -0
  184. package/dist/tools/wiki.js +227 -0
  185. package/dist/tools/wiki.js.map +1 -0
  186. package/dist/tools/workflow.d.ts +3 -0
  187. package/dist/tools/workflow.d.ts.map +1 -0
  188. package/dist/tools/workflow.js +116 -0
  189. package/dist/tools/workflow.js.map +1 -0
  190. package/dist/tools/workspace.d.ts +3 -0
  191. package/dist/tools/workspace.d.ts.map +1 -0
  192. package/dist/tools/workspace.js +137 -0
  193. package/dist/tools/workspace.js.map +1 -0
  194. package/dist/tools/zz-acceptance-echo.d.ts +3 -0
  195. package/dist/tools/zz-acceptance-echo.d.ts.map +1 -0
  196. package/dist/tools/zz-acceptance-echo.js +9 -0
  197. package/dist/tools/zz-acceptance-echo.js.map +1 -0
  198. package/dist/types.d.ts +34 -0
  199. package/dist/types.d.ts.map +1 -0
  200. package/dist/types.js +2 -0
  201. package/dist/types.js.map +1 -0
  202. package/package.json +49 -0
@@ -0,0 +1,619 @@
1
+ import { z } from 'zod';
2
+ import { TapdClient } from '../tapd-client.js';
3
+ export const bugTools = [
4
+ {
5
+ name: 'tapd_get_bugs',
6
+ description: 'Query TAPD bugs with filters',
7
+ inputSchema: z.object({
8
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
9
+ id: z.string().optional().describe('Supports multiple IDs;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
10
+ title: z.string().optional().describe('Bug title, supports fuzzy matching'),
11
+ priority: z.string().optional().describe('Priority, recommend using priority_label'),
12
+ priority_label: z.string().optional().describe('Priority (recommended)'),
13
+ severity: z.string().optional().describe('Severity, supports enum query'),
14
+ status: z.string().optional().describe('Status, supports enum query'),
15
+ v_status: z.string().optional().describe('Status (Chinese)'),
16
+ label: z.string().optional().describe('Label, supports enum query'),
17
+ iteration_id: z.string().optional().describe('Iteration ID, supports enum query;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
18
+ module: z.string().optional().describe('Module, supports enum query'),
19
+ current_owner: z.string().optional().describe('Current owner, supports fuzzy matching'),
20
+ reporter: z.string().optional().describe('Reporter, supports multiple users query'),
21
+ participator: z.string().optional().describe('Participant, supports multiple users query'),
22
+ te: z.string().optional().describe('Tester, supports fuzzy matching'),
23
+ de: z.string().optional().describe('Developer, supports fuzzy matching'),
24
+ cc: z.string().optional().describe('CC person'),
25
+ created: z.string().optional().describe('Creation time, Format: YYYY-MM-DD HH:mm'),
26
+ in_progress_time: z.string().optional().describe('Accept time, Format: YYYY-MM-DD HH:mm'),
27
+ resolved: z.string().optional().describe('Resolve time, Format: YYYY-MM-DD HH:mm'),
28
+ verify_time: z.string().optional().describe('Verify time, Format: YYYY-MM-DD HH:mm'),
29
+ closed: z.string().optional().describe('Close time, Format: YYYY-MM-DD HH:mm'),
30
+ reject_time: z.string().optional().describe('Reject time, Format: YYYY-MM-DD HH:mm'),
31
+ modified: z.string().optional().describe('Last modification time, Format: YYYY-MM-DD HH:mm'),
32
+ begin: z.string().optional().describe('Estimated start date, Format: YYYY-MM-DD'),
33
+ due: z.string().optional().describe('Estimated end date, Format: YYYY-MM-DD'),
34
+ deadline: z.string().optional().describe('Resolve deadline, Format: YYYY-MM-DD'),
35
+ release_id: z.string().optional().describe('Release plan;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
36
+ version_report: z.string().optional().describe('Found version, enum query'),
37
+ version_test: z.string().optional().describe('Verify version'),
38
+ version_fix: z.string().optional().describe('Fix version'),
39
+ version_close: z.string().optional().describe('Close version'),
40
+ baseline_find: z.string().optional().describe('Found baseline'),
41
+ baseline_join: z.string().optional().describe('Join baseline'),
42
+ baseline_test: z.string().optional().describe('Test baseline'),
43
+ baseline_close: z.string().optional().describe('Close baseline'),
44
+ feature: z.string().optional().describe('Feature'),
45
+ source: z.string().optional().describe('Bug root cause, supports enum query'),
46
+ bugtype: z.string().optional().describe('Bug type'),
47
+ frequency: z.string().optional().describe('Reproduction frequency, supports enum query'),
48
+ originphase: z.string().optional().describe('Found phase'),
49
+ sourcephase: z.string().optional().describe('Introduction phase'),
50
+ resolution: z.string().optional().describe('Resolution method, supports enum query'),
51
+ description: z.string().optional().describe('Detailed description, supports fuzzy matching'),
52
+ os: z.string().optional().describe('Operating system'),
53
+ platform: z.string().optional().describe('Software platform'),
54
+ testmode: z.string().optional().describe('Test mode'),
55
+ testphase: z.string().optional().describe('Test phase'),
56
+ testtype: z.string().optional().describe('Test type'),
57
+ size: z.string().optional().describe('Size'),
58
+ estimate: z.number().optional().describe('Estimated resolve time'),
59
+ custom_field_one: z.string().optional().describe('Custom field 1 (supports 1-200)'),
60
+ limit: z.number().optional().describe('Return count, default 30, max 200'),
61
+ page: z.number().optional().describe('Page number, default 1'),
62
+ order: z.string().optional().describe('Sort order'),
63
+ fields: z.string().optional().describe('Specify return fields'),
64
+ }),
65
+ handler: async (client, params) => {
66
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
67
+ if (!workspaceId) {
68
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
69
+ }
70
+ const convertedParams = {
71
+ ...params,
72
+ id: params.id ? TapdClient.toLongId(params.id, workspaceId) : undefined,
73
+ workspace_id: workspaceId,
74
+ };
75
+ return client.get('/bugs', convertedParams);
76
+ },
77
+ },
78
+ {
79
+ name: 'tapd_create_bug',
80
+ description: 'Create a new bug in TAPD',
81
+ inputSchema: z.object({
82
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
83
+ title: z.string().describe('Bug title (required)'),
84
+ priority: z.string().optional().describe('Priority'),
85
+ priority_label: z.string().optional().describe('Priority label (recommended)'),
86
+ severity: z.string().optional().describe('Severity'),
87
+ current_owner: z.string().optional().describe('Current owner (defaults to TAPD_NICK_NAME env)'),
88
+ description: z.string().optional().describe('Detailed description'),
89
+ module: z.string().optional().describe('Module'),
90
+ iteration_id: z.string().optional().describe('Iteration ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
91
+ label: z.string().optional().describe('Label, multiple values separated by |'),
92
+ effort: z.number().optional().describe('Estimated effort'),
93
+ template_id: z.string().optional().describe('Template ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
94
+ cc: z.string().optional().describe('CC person'),
95
+ te: z.string().optional().describe('Tester'),
96
+ de: z.string().optional().describe('Developer'),
97
+ reporter: z.string().optional().describe('Reporter'),
98
+ participator: z.string().optional().describe('Participant'),
99
+ auditer: z.string().optional().describe('Auditor'),
100
+ confirmer: z.string().optional().describe('Confirmer'),
101
+ fixer: z.string().optional().describe('Fixer'),
102
+ closer: z.string().optional().describe('Closer'),
103
+ begin: z.string().optional().describe('Estimated start date, Format: YYYY-MM-DD'),
104
+ due: z.string().optional().describe('Estimated end date, Format: YYYY-MM-DD'),
105
+ deadline: z.string().optional().describe('Resolve deadline, Format: YYYY-MM-DD'),
106
+ release_id: z.string().optional().describe('Release plan;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
107
+ version_report: z.string().optional().describe('Found version'),
108
+ version_test: z.string().optional().describe('Verify version'),
109
+ version_fix: z.string().optional().describe('Fix version'),
110
+ version_close: z.string().optional().describe('Close version'),
111
+ baseline_find: z.string().optional().describe('Found baseline'),
112
+ baseline_join: z.string().optional().describe('Join baseline'),
113
+ baseline_test: z.string().optional().describe('Test baseline'),
114
+ baseline_close: z.string().optional().describe('Close baseline'),
115
+ feature: z.string().optional().describe('Feature'),
116
+ source: z.string().optional().describe('Bug root cause'),
117
+ bugtype: z.string().optional().describe('Bug type'),
118
+ frequency: z.string().optional().describe('Reproduction frequency'),
119
+ originphase: z.string().optional().describe('Found phase'),
120
+ sourcephase: z.string().optional().describe('Introduction phase'),
121
+ resolution: z.string().optional().describe('Resolution method'),
122
+ os: z.string().optional().describe('Operating system'),
123
+ platform: z.string().optional().describe('Software platform'),
124
+ testmode: z.string().optional().describe('Test mode'),
125
+ testphase: z.string().optional().describe('Test phase'),
126
+ testtype: z.string().optional().describe('Test type'),
127
+ size: z.string().optional().describe('Size'),
128
+ estimate: z.number().optional().describe('Estimated resolve time'),
129
+ custom_field_one: z.string().optional().describe('Custom field 1 (supports 1-200)'),
130
+ }),
131
+ handler: async (client, params) => {
132
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
133
+ if (!workspaceId) {
134
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
135
+ }
136
+ const nickName = TapdClient.getNickName();
137
+ const finalParams = {
138
+ ...params,
139
+ workspace_id: workspaceId,
140
+ current_owner: params.current_owner ?? nickName,
141
+ reporter: params.reporter ?? nickName,
142
+ };
143
+ return client.post('/bugs', finalParams);
144
+ },
145
+ },
146
+ {
147
+ name: 'tapd_update_bug',
148
+ description: 'Update an existing bug in TAPD',
149
+ inputSchema: z.object({
150
+ id: z.string().describe('Bug ID (required);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
151
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
152
+ title: z.string().optional().describe('Bug title'),
153
+ priority: z.string().optional().describe('Priority'),
154
+ priority_label: z.string().optional().describe('Priority label (recommended)'),
155
+ severity: z.string().optional().describe('Severity'),
156
+ status: z.string().optional().describe('Status'),
157
+ current_owner: z.string().optional().describe('Current owner'),
158
+ description: z.string().optional().describe('Detailed description'),
159
+ module: z.string().optional().describe('Module'),
160
+ iteration_id: z.string().optional().describe('Iteration ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
161
+ label: z.string().optional().describe('Label, multiple values separated by |'),
162
+ effort: z.number().optional().describe('Estimated effort'),
163
+ cc: z.string().optional().describe('CC person'),
164
+ te: z.string().optional().describe('Tester'),
165
+ de: z.string().optional().describe('Developer'),
166
+ reporter: z.string().optional().describe('Reporter'),
167
+ participator: z.string().optional().describe('Participant'),
168
+ begin: z.string().optional().describe('Estimated start date, Format: YYYY-MM-DD'),
169
+ due: z.string().optional().describe('Estimated end date, Format: YYYY-MM-DD'),
170
+ deadline: z.string().optional().describe('Resolve deadline, Format: YYYY-MM-DD'),
171
+ release_id: z.string().optional().describe('Release plan;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
172
+ version_report: z.string().optional().describe('Found version'),
173
+ version_test: z.string().optional().describe('Verify version'),
174
+ version_fix: z.string().optional().describe('Fix version'),
175
+ version_close: z.string().optional().describe('Close version'),
176
+ baseline_find: z.string().optional().describe('Found baseline'),
177
+ baseline_join: z.string().optional().describe('Join baseline'),
178
+ baseline_test: z.string().optional().describe('Test baseline'),
179
+ baseline_close: z.string().optional().describe('Close baseline'),
180
+ feature: z.string().optional().describe('Feature'),
181
+ source: z.string().optional().describe('Bug root cause'),
182
+ bugtype: z.string().optional().describe('Bug type'),
183
+ frequency: z.string().optional().describe('Reproduction frequency'),
184
+ originphase: z.string().optional().describe('Found phase'),
185
+ sourcephase: z.string().optional().describe('Introduction phase'),
186
+ resolution: z.string().optional().describe('Resolution method'),
187
+ os: z.string().optional().describe('Operating system'),
188
+ platform: z.string().optional().describe('Software platform'),
189
+ testmode: z.string().optional().describe('Test mode'),
190
+ testphase: z.string().optional().describe('Test phase'),
191
+ testtype: z.string().optional().describe('Test type'),
192
+ size: z.string().optional().describe('Size'),
193
+ estimate: z.number().optional().describe('Estimated resolve time'),
194
+ custom_field_one: z.string().optional().describe('Custom field 1 (supports 1-200)'),
195
+ }),
196
+ handler: async (client, params) => {
197
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
198
+ if (!workspaceId) {
199
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
200
+ }
201
+ const convertedParams = {
202
+ ...params,
203
+ id: TapdClient.toLongId(params.id, workspaceId),
204
+ workspace_id: workspaceId,
205
+ };
206
+ return client.post('/bugs', convertedParams);
207
+ },
208
+ },
209
+ {
210
+ name: 'tapd_get_bug_count',
211
+ description: 'Get the count of bugs matching filters',
212
+ inputSchema: z.object({
213
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
214
+ id: z.string().optional().describe('Supports multiple IDs;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
215
+ title: z.string().optional().describe('Bug title, supports fuzzy matching'),
216
+ priority: z.string().optional().describe('Priority, recommend using priority_label'),
217
+ priority_label: z.string().optional().describe('Priority (recommended)'),
218
+ severity: z.string().optional().describe('Severity, supports enum query'),
219
+ status: z.string().optional().describe('Status, supports enum query'),
220
+ v_status: z.string().optional().describe('Status (Chinese)'),
221
+ label: z.string().optional().describe('Label, supports enum query'),
222
+ iteration_id: z.string().optional().describe('Iteration ID, supports enum query;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
223
+ module: z.string().optional().describe('Module, supports enum query'),
224
+ current_owner: z.string().optional().describe('Current owner, supports fuzzy matching'),
225
+ reporter: z.string().optional().describe('Reporter, supports multiple users query'),
226
+ participator: z.string().optional().describe('Participant, supports multiple users query'),
227
+ te: z.string().optional().describe('Tester, supports fuzzy matching'),
228
+ de: z.string().optional().describe('Developer, supports fuzzy matching'),
229
+ cc: z.string().optional().describe('CC person'),
230
+ created: z.string().optional().describe('Creation time, Format: YYYY-MM-DD HH:mm'),
231
+ in_progress_time: z.string().optional().describe('Accept time, Format: YYYY-MM-DD HH:mm'),
232
+ resolved: z.string().optional().describe('Resolve time, Format: YYYY-MM-DD HH:mm'),
233
+ verify_time: z.string().optional().describe('Verify time, Format: YYYY-MM-DD HH:mm'),
234
+ closed: z.string().optional().describe('Close time, Format: YYYY-MM-DD HH:mm'),
235
+ reject_time: z.string().optional().describe('Reject time, Format: YYYY-MM-DD HH:mm'),
236
+ modified: z.string().optional().describe('Last modification time, Format: YYYY-MM-DD HH:mm'),
237
+ begin: z.string().optional().describe('Estimated start date, Format: YYYY-MM-DD'),
238
+ due: z.string().optional().describe('Estimated end date, Format: YYYY-MM-DD'),
239
+ deadline: z.string().optional().describe('Resolve deadline, Format: YYYY-MM-DD'),
240
+ release_id: z.string().optional().describe('Release plan;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
241
+ version_report: z.string().optional().describe('Found version, enum query'),
242
+ version_test: z.string().optional().describe('Verify version'),
243
+ version_fix: z.string().optional().describe('Fix version'),
244
+ version_close: z.string().optional().describe('Close version'),
245
+ baseline_find: z.string().optional().describe('Found baseline'),
246
+ baseline_join: z.string().optional().describe('Join baseline'),
247
+ baseline_test: z.string().optional().describe('Test baseline'),
248
+ baseline_close: z.string().optional().describe('Close baseline'),
249
+ feature: z.string().optional().describe('Feature'),
250
+ source: z.string().optional().describe('Bug root cause, supports enum query'),
251
+ bugtype: z.string().optional().describe('Bug type'),
252
+ frequency: z.string().optional().describe('Reproduction frequency, supports enum query'),
253
+ originphase: z.string().optional().describe('Found phase'),
254
+ sourcephase: z.string().optional().describe('Introduction phase'),
255
+ resolution: z.string().optional().describe('Resolution method, supports enum query'),
256
+ description: z.string().optional().describe('Detailed description, supports fuzzy matching'),
257
+ os: z.string().optional().describe('Operating system'),
258
+ platform: z.string().optional().describe('Software platform'),
259
+ testmode: z.string().optional().describe('Test mode'),
260
+ testphase: z.string().optional().describe('Test phase'),
261
+ testtype: z.string().optional().describe('Test type'),
262
+ size: z.string().optional().describe('Size'),
263
+ estimate: z.number().optional().describe('Estimated resolve time'),
264
+ custom_field_one: z.string().optional().describe('Custom field 1 (supports 1-200)'),
265
+ }),
266
+ handler: async (client, params) => {
267
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
268
+ if (!workspaceId) {
269
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
270
+ }
271
+ const convertedParams = {
272
+ ...params,
273
+ id: params.id ? TapdClient.toLongId(params.id, workspaceId) : undefined,
274
+ workspace_id: workspaceId,
275
+ };
276
+ return client.get('/bugs/count', convertedParams);
277
+ },
278
+ },
279
+ // 缺陷变更历史
280
+ {
281
+ name: 'tapd_get_bug_changes',
282
+ description: '获取缺陷变更历史',
283
+ inputSchema: z.object({
284
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
285
+ id: z.string().optional().describe('变更记录ID,支持多ID查询;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
286
+ bug_id: z.string().optional().describe('缺陷ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
287
+ field: z.string().optional().describe('变更字段'),
288
+ value_before: z.string().optional().describe('变更前值'),
289
+ value_after: z.string().optional().describe('变更后值'),
290
+ user: z.string().optional().describe('变更人'),
291
+ created: z.string().optional().describe('创建时间,支持时间查询'),
292
+ limit: z.number().optional().describe('返回数量,默认30,最大200'),
293
+ page: z.number().optional().describe('页码,默认1'),
294
+ order: z.string().optional().describe('排序'),
295
+ fields: z.string().optional().describe('返回字段'),
296
+ }),
297
+ handler: async (client, params) => {
298
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
299
+ if (!workspaceId) {
300
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
301
+ }
302
+ const convertedParams = {
303
+ ...params,
304
+ bug_id: params.bug_id ? TapdClient.toLongId(params.bug_id, workspaceId) : undefined,
305
+ workspace_id: workspaceId,
306
+ };
307
+ return client.get('/bug_changes', convertedParams);
308
+ },
309
+ },
310
+ {
311
+ name: 'tapd_get_bug_changes_count',
312
+ description: '获取缺陷变更次数',
313
+ inputSchema: z.object({
314
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
315
+ bug_id: z.string().optional().describe('缺陷ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
316
+ field: z.string().optional().describe('变更字段'),
317
+ user: z.string().optional().describe('变更人'),
318
+ created: z.string().optional().describe('创建时间'),
319
+ }),
320
+ handler: async (client, params) => {
321
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
322
+ if (!workspaceId) {
323
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
324
+ }
325
+ const convertedParams = {
326
+ ...params,
327
+ bug_id: params.bug_id ? TapdClient.toLongId(params.bug_id, workspaceId) : undefined,
328
+ workspace_id: workspaceId,
329
+ };
330
+ return client.get('/bug_changes/count', convertedParams);
331
+ },
332
+ },
333
+ // 缺陷字段配置
334
+ {
335
+ name: 'tapd_get_bug_custom_fields_settings',
336
+ description: '获取缺陷自定义字段配置',
337
+ inputSchema: z.object({
338
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
339
+ }),
340
+ handler: async (client, params) => {
341
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
342
+ if (!workspaceId) {
343
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
344
+ }
345
+ return client.get('/bugs/custom_fields_settings', { ...params, workspace_id: workspaceId });
346
+ },
347
+ },
348
+ {
349
+ name: 'tapd_get_bug_fields_info',
350
+ description: '获取缺陷字段信息',
351
+ inputSchema: z.object({
352
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
353
+ }),
354
+ handler: async (client, params) => {
355
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
356
+ if (!workspaceId) {
357
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
358
+ }
359
+ return client.get('/bugs/get_fields_info', { ...params, workspace_id: workspaceId });
360
+ },
361
+ },
362
+ {
363
+ name: 'tapd_get_bug_fields_lable',
364
+ description: '获取缺陷字段中英文对照',
365
+ inputSchema: z.object({
366
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
367
+ }),
368
+ handler: async (client, params) => {
369
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
370
+ if (!workspaceId) {
371
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
372
+ }
373
+ return client.get('/bugs/fields_lable', { ...params, workspace_id: workspaceId });
374
+ },
375
+ },
376
+ // 缺陷模板
377
+ {
378
+ name: 'tapd_get_bug_template_list',
379
+ description: '获取缺陷模板列表',
380
+ inputSchema: z.object({
381
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
382
+ limit: z.number().optional().describe('返回数量'),
383
+ page: z.number().optional().describe('页码'),
384
+ fields: z.string().optional().describe('返回字段'),
385
+ }),
386
+ handler: async (client, params) => {
387
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
388
+ if (!workspaceId) {
389
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
390
+ }
391
+ return client.get('/bugs/templates', { ...params, workspace_id: workspaceId });
392
+ },
393
+ },
394
+ {
395
+ name: 'tapd_get_default_bug_template',
396
+ description: '获取缺陷默认模板',
397
+ inputSchema: z.object({
398
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
399
+ }),
400
+ handler: async (client, params) => {
401
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
402
+ if (!workspaceId) {
403
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
404
+ }
405
+ return client.get('/bugs/default_template', { ...params, workspace_id: workspaceId });
406
+ },
407
+ },
408
+ // 批量操作
409
+ {
410
+ name: 'tapd_batch_update_bugs',
411
+ description: '批量更新缺陷',
412
+ inputSchema: z.object({
413
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
414
+ bugs: z.string().describe('缺陷更新数组JSON,最多50条 (必填)'),
415
+ }),
416
+ handler: async (client, params) => {
417
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
418
+ if (!workspaceId) {
419
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
420
+ }
421
+ // TAPD API expects bugs as a JSON string
422
+ // Parse and convert bug IDs
423
+ const bugsJson = params.bugs;
424
+ const bugs = JSON.parse(bugsJson);
425
+ const convertedBugs = bugs.map((bug) => {
426
+ const { id, ...rest } = bug;
427
+ return {
428
+ id: TapdClient.toLongId(id, workspaceId),
429
+ ...rest,
430
+ };
431
+ });
432
+ const convertedBugsJson = JSON.stringify(convertedBugs);
433
+ return client.post('/bugs/batch_update', {
434
+ workspace_id: workspaceId,
435
+ bugs: convertedBugsJson,
436
+ });
437
+ },
438
+ },
439
+ {
440
+ name: 'tapd_copy_bug',
441
+ description: '复制缺陷',
442
+ inputSchema: z.object({
443
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
444
+ id: z.string().describe('要复制的缺陷ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
445
+ title: z.string().optional().describe('新缺陷标题(默认为原标题)'),
446
+ current_owner: z.string().optional().describe('处理人'),
447
+ iteration_id: z.string().optional().describe('迭代ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
448
+ copy_attachments: z.number().optional().describe('是否复制附件,值=1复制'),
449
+ copy_comments: z.number().optional().describe('是否复制评论,值=1复制'),
450
+ }),
451
+ handler: async (client, params) => {
452
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
453
+ if (!workspaceId) {
454
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
455
+ }
456
+ const convertedParams = {
457
+ ...params,
458
+ id: TapdClient.toLongId(params.id, workspaceId),
459
+ workspace_id: workspaceId,
460
+ };
461
+ return client.post('/bugs/copy', convertedParams);
462
+ },
463
+ },
464
+ // 缺陷关联
465
+ {
466
+ name: 'tapd_get_link_bugs',
467
+ description: '获取缺陷关联关系',
468
+ inputSchema: z.object({
469
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
470
+ bug_id: z.string().describe('缺陷ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
471
+ }),
472
+ handler: async (client, params) => {
473
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
474
+ if (!workspaceId) {
475
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
476
+ }
477
+ const convertedParams = {
478
+ ...params,
479
+ bug_id: TapdClient.toLongId(params.bug_id, workspaceId),
480
+ workspace_id: workspaceId,
481
+ };
482
+ return client.get('/bugs/get_link_bugs', convertedParams);
483
+ },
484
+ },
485
+ {
486
+ name: 'tapd_link_bugs',
487
+ description: '关联缺陷',
488
+ inputSchema: z.object({
489
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
490
+ bug_id: z.string().describe('主缺陷ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
491
+ link_bug_id: z.string().describe('关联缺陷ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
492
+ link_type: z.string().optional().describe('关联类型(前置/后置等)'),
493
+ }),
494
+ handler: async (client, params) => {
495
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
496
+ if (!workspaceId) {
497
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
498
+ }
499
+ const convertedParams = {
500
+ ...params,
501
+ bug_id: TapdClient.toLongId(params.bug_id, workspaceId),
502
+ link_bug_id: TapdClient.toLongId(params.link_bug_id, workspaceId),
503
+ workspace_id: workspaceId,
504
+ };
505
+ return client.post('/bugs/link_bugs', convertedParams);
506
+ },
507
+ },
508
+ {
509
+ name: 'tapd_delete_link_bugs',
510
+ description: '取消关联缺陷',
511
+ inputSchema: z.object({
512
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
513
+ bug_id: z.string().describe('主缺陷ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
514
+ link_bug_id: z.string().describe('要取消关联的缺陷ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
515
+ }),
516
+ handler: async (client, params) => {
517
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
518
+ if (!workspaceId) {
519
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
520
+ }
521
+ const convertedParams = {
522
+ ...params,
523
+ bug_id: TapdClient.toLongId(params.bug_id, workspaceId),
524
+ link_bug_id: TapdClient.toLongId(params.link_bug_id, workspaceId),
525
+ workspace_id: workspaceId,
526
+ };
527
+ return client.post('/bugs/delete_link_bugs', convertedParams);
528
+ },
529
+ },
530
+ {
531
+ name: 'tapd_get_related_stories',
532
+ description: '获取缺陷关联需求',
533
+ inputSchema: z.object({
534
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
535
+ bug_id: z.string().describe('缺陷ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
536
+ }),
537
+ handler: async (client, params) => {
538
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
539
+ if (!workspaceId) {
540
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
541
+ }
542
+ const convertedParams = {
543
+ ...params,
544
+ bug_id: TapdClient.toLongId(params.bug_id, workspaceId),
545
+ workspace_id: workspaceId,
546
+ };
547
+ return client.get('/bugs/get_related_stories', convertedParams);
548
+ },
549
+ },
550
+ // 其他
551
+ {
552
+ name: 'tapd_get_bugs_by_view_conf_id',
553
+ description: '获取视图缺陷列表',
554
+ inputSchema: z.object({
555
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
556
+ view_conf_id: z.string().describe('视图配置ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
557
+ limit: z.number().optional().describe('返回数量,默认30,最大200'),
558
+ page: z.number().optional().describe('页码,默认1'),
559
+ fields: z.string().optional().describe('返回字段'),
560
+ }),
561
+ handler: async (client, params) => {
562
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
563
+ if (!workspaceId) {
564
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
565
+ }
566
+ return client.get('/bugs/by_view_conf_id', { ...params, workspace_id: workspaceId });
567
+ },
568
+ },
569
+ {
570
+ name: 'tapd_get_removed_bugs',
571
+ description: '获取回收站缺陷',
572
+ inputSchema: z.object({
573
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
574
+ id: z.string().optional().describe('缺陷ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
575
+ title: z.string().optional().describe('标题'),
576
+ current_owner: z.string().optional().describe('处理人'),
577
+ reporter: z.string().optional().describe('创建人'),
578
+ created: z.string().optional().describe('创建时间'),
579
+ deleted: z.string().optional().describe('删除时间'),
580
+ limit: z.number().optional().describe('返回数量,默认30,最大200'),
581
+ page: z.number().optional().describe('页码'),
582
+ order: z.string().optional().describe('排序'),
583
+ fields: z.string().optional().describe('返回字段'),
584
+ }),
585
+ handler: async (client, params) => {
586
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
587
+ if (!workspaceId) {
588
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
589
+ }
590
+ const convertedParams = {
591
+ ...params,
592
+ id: params.id ? TapdClient.toLongId(params.id, workspaceId) : undefined,
593
+ workspace_id: workspaceId,
594
+ };
595
+ return client.get('/bugs/removed', convertedParams);
596
+ },
597
+ },
598
+ {
599
+ name: 'tapd_bug_ids_to_query_token',
600
+ description: '转换缺陷ID为queryToken',
601
+ inputSchema: z.object({
602
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
603
+ ids: z.string().describe('缺陷ID列表,逗号分隔 (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
604
+ }),
605
+ handler: async (client, params) => {
606
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
607
+ if (!workspaceId) {
608
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
609
+ }
610
+ // Convert comma-separated IDs: split → convert each → join
611
+ const convertedIds = params.ids.split(',').map((id) => TapdClient.toLongId(id.trim(), workspaceId)).join(',');
612
+ return client.get('/bugs/ids_to_query_token', {
613
+ workspace_id: workspaceId,
614
+ ids: convertedIds,
615
+ });
616
+ },
617
+ },
618
+ ];
619
+ //# sourceMappingURL=bug.js.map