@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
@@ -5,29 +5,29 @@ export const storyTools = [
5
5
  // 需求 CRUD
6
6
  {
7
7
  name: 'tapd_get_stories',
8
- description: '获取需求列表',
8
+ description: '按条件查询需求列表,支持标题、状态、处理人、迭代、分类等多字段过滤与分页。只统计数量用数量统计工具;已知多个 ID 要完整详情用批量详情工具。读操作;limit 默认 30。返回需求(Story)数组。',
9
9
  inputSchema: z.object({
10
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
11
- id: z.string().optional().describe('需求ID,支持多ID查询;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
10
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
11
+ id: z.string().optional().describe('需求 ID,支持多 ID查询;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
12
12
  name: z.string().optional().describe('需求标题,支持模糊匹配'),
13
13
  priority: z.string().optional().describe('优先级'),
14
14
  priority_label: z.string().optional().describe('优先级标签(推荐)'),
15
15
  status: z.string().optional().describe('状态'),
16
16
  v_status: z.string().optional().describe('状态(中文)'),
17
- with_v_status: z.string().optional().describe('设为1返回中文状态'),
17
+ with_v_status: z.string().optional().describe('设为 1 返回中文状态'),
18
18
  label: z.string().optional().describe('标签'),
19
- workitem_type_id: z.string().optional().describe('需求类别ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
19
+ workitem_type_id: z.string().optional().describe('需求类别 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
20
20
  owner: z.string().optional().describe('处理人,支持模糊匹配'),
21
21
  creator: z.string().optional().describe('创建人'),
22
22
  developer: z.string().optional().describe('开发人员'),
23
23
  cc: z.string().optional().describe('抄送人'),
24
- iteration_id: z.string().optional().describe('迭代ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
25
- include_sub_iteration: z.string().optional().describe('包含子迭代:0或1'),
24
+ iteration_id: z.string().optional().describe('迭代 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
25
+ include_sub_iteration: z.string().optional().describe('包含子迭代:0 或 1'),
26
26
  category_id: z.string().optional().describe('需求分类;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
27
- include_sub_category: z.string().optional().describe('包含子分类:0或1'),
28
- parent_id: z.string().optional().describe('父需求ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
29
- ancestor_id: z.string().optional().describe('祖先需求ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
30
- children_id: z.string().optional().describe('子需求ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
27
+ include_sub_category: z.string().optional().describe('包含子分类:0 或 1'),
28
+ parent_id: z.string().optional().describe('父需求 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
29
+ ancestor_id: z.string().optional().describe('祖先需求 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
30
+ children_id: z.string().optional().describe('子需求 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
31
31
  begin: z.string().optional().describe('预计开始日期 YYYY-MM-DD'),
32
32
  due: z.string().optional().describe('预计结束日期 YYYY-MM-DD'),
33
33
  created: z.string().optional().describe('创建时间 YYYY-MM-DD HH:mm'),
@@ -44,9 +44,9 @@ export const storyTools = [
44
44
  source: z.string().optional().describe('需求来源'),
45
45
  type: z.string().optional().describe('需求类型'),
46
46
  description: z.string().optional().describe('详细描述'),
47
- custom_field_one: z.string().optional().describe('自定义字段 (支持1-200)'),
48
- limit: z.number().optional().describe('返回数量,默认30'),
49
- page: z.number().optional().describe('页码,默认1'),
47
+ custom_field_one: z.string().optional().describe('自定义字段(支持 1-200)'),
48
+ limit: z.number().optional().describe('返回数量,默认 30'),
49
+ page: z.number().optional().describe('页码,默认 1'),
50
50
  order: z.string().optional().describe('排序'),
51
51
  fields: z.string().optional().describe('返回字段'),
52
52
  }),
@@ -65,21 +65,21 @@ export const storyTools = [
65
65
  },
66
66
  {
67
67
  name: 'tapd_create_story',
68
- description: '创建需求(也可创建任务:传入 workitem_type_id 为 TASK 类型 ID 即可创建任务,适合仅有 stories::create 权限而无 tasks::create 权限的场景)',
68
+ description: '创建需求。兼可创建任务:工作项类别参数传「任务型」类别的 ID 即走任务创建(适合仅有需求创建权限而无任务创建权限的场景,类别可用类别查询工具查)。从已有需求复制用复制工具。写操作;name 必填,负责人/创建人缺省取环境变量 TAPD_NICK_NAME。返回新需求。',
69
69
  inputSchema: z.object({
70
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
71
- name: z.string().describe('需求标题 (必填)'),
70
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
71
+ name: z.string().describe('需求标题(必填)'),
72
72
  description: z.string().optional().describe('详细描述'),
73
73
  raw_html: RAW_HTML_FIELD,
74
74
  priority: z.string().optional().describe('优先级'),
75
75
  priority_label: z.string().optional().describe('优先级标签(推荐)'),
76
- owner: z.string().optional().describe('处理人(默认当前用户)'),
77
- creator: z.string().optional().describe('创建人(默认当前用户)'),
76
+ owner: z.string().optional().describe('处理人(缺省取当前用户)'),
77
+ creator: z.string().optional().describe('创建人(缺省取当前用户)'),
78
78
  developer: z.string().optional().describe('开发人员'),
79
79
  cc: z.string().optional().describe('抄送人'),
80
- iteration_id: z.string().optional().describe('迭代ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
80
+ iteration_id: z.string().optional().describe('迭代 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
81
81
  category_id: z.string().optional().describe('需求分类;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
82
- parent_id: z.string().optional().describe('父需求ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
82
+ parent_id: z.string().optional().describe('父需求 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
83
83
  begin: z.string().optional().describe('预计开始日期 YYYY-MM-DD'),
84
84
  due: z.string().optional().describe('预计结束日期 YYYY-MM-DD'),
85
85
  effort: z.string().optional().describe('预估工时'),
@@ -90,12 +90,12 @@ export const storyTools = [
90
90
  source: z.string().optional().describe('需求来源'),
91
91
  type: z.string().optional().describe('需求类型'),
92
92
  label: z.string().optional().describe('标签'),
93
- template_id: z.string().optional().describe('模板ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
93
+ template_id: z.string().optional().describe('模板 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
94
94
  business_value: z.string().optional().describe('业务价值'),
95
95
  test_focus: z.string().optional().describe('测试关注点'),
96
- size: z.string().optional().describe('规模/大小'),
96
+ size: z.string().optional().describe('规模'),
97
97
  custom_field_one: z.string().optional().describe('自定义字段'),
98
- workitem_type_id: z.string().optional().describe('工作项类型ID(可选,默认创建需求;传入 TASK 类型 ID 可创建任务。可通过 tapd_get_workitem_types 查询可用类型);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
98
+ workitem_type_id: z.string().optional().describe('工作项类型 ID(可选,默认创建需求;传任务型类别 ID 可创建任务,可用类别查询工具查);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
99
99
  }),
100
100
  handler: async (client, params) => {
101
101
  const nickName = TapdClient.getNickName();
@@ -126,10 +126,10 @@ export const storyTools = [
126
126
  },
127
127
  {
128
128
  name: 'tapd_update_story',
129
- description: '更新需求',
129
+ description: '按 ID 更新需求的单个或多个字段(状态、处理人、迭代、工时等)。批量改多条用批量更新工具;整条复制用复制工具。写操作;id 必填。返回更新后的需求。',
130
130
  inputSchema: z.object({
131
- id: z.string().describe('需求ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
132
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
131
+ id: z.string().describe('需求 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
132
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
133
133
  name: z.string().optional().describe('需求标题'),
134
134
  description: z.string().optional().describe('详细描述'),
135
135
  raw_html: RAW_HTML_FIELD,
@@ -137,7 +137,7 @@ export const storyTools = [
137
137
  owner: z.string().optional().describe('处理人'),
138
138
  priority: z.string().optional().describe('优先级'),
139
139
  priority_label: z.string().optional().describe('优先级标签'),
140
- iteration_id: z.string().optional().describe('迭代ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
140
+ iteration_id: z.string().optional().describe('迭代 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
141
141
  category_id: z.string().optional().describe('需求分类;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
142
142
  begin: z.string().optional().describe('预计开始日期'),
143
143
  due: z.string().optional().describe('预计结束日期'),
@@ -166,10 +166,10 @@ export const storyTools = [
166
166
  },
167
167
  {
168
168
  name: 'tapd_get_story_count',
169
- description: '获取需求数量',
169
+ description: '按与需求列表查询相同的过滤条件返回需求数量,不返回列表。只关心「有多少条」时用它,比拉全量列表省流量。读操作。返回 {count}。',
170
170
  inputSchema: z.object({
171
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
172
- id: z.string().optional().describe('需求ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
171
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
172
+ id: z.string().optional().describe('需求 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
173
173
  name: z.string().optional().describe('需求标题'),
174
174
  priority: z.string().optional().describe('优先级'),
175
175
  priority_label: z.string().optional().describe('优先级标签(推荐)'),
@@ -178,10 +178,10 @@ export const storyTools = [
178
178
  creator: z.string().optional().describe('创建人'),
179
179
  developer: z.string().optional().describe('开发人员'),
180
180
  cc: z.string().optional().describe('抄送人'),
181
- iteration_id: z.string().optional().describe('迭代ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
181
+ iteration_id: z.string().optional().describe('迭代 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
182
182
  category_id: z.string().optional().describe('需求分类;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
183
- parent_id: z.string().optional().describe('父需求ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
184
- ancestor_id: z.string().optional().describe('祖先需求ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
183
+ parent_id: z.string().optional().describe('父需求 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
184
+ ancestor_id: z.string().optional().describe('祖先需求 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
185
185
  begin: z.string().optional().describe('预计开始日期'),
186
186
  due: z.string().optional().describe('预计结束日期'),
187
187
  created: z.string().optional().describe('创建时间'),
@@ -205,16 +205,16 @@ export const storyTools = [
205
205
  },
206
206
  {
207
207
  name: 'tapd_copy_story',
208
- description: '复制需求',
208
+ description: '复制已有需求创建新需求,可选连带复制附件、评论、子任务。从零新建用创建工具。写操作;id 必填。返回新需求。',
209
209
  inputSchema: z.object({
210
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
211
- id: z.string().describe('要复制的需求ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
210
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
211
+ id: z.string().describe('要复制的需求 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
212
212
  name: z.string().optional().describe('新需求标题(默认为原标题)'),
213
213
  owner: z.string().optional().describe('处理人'),
214
- iteration_id: z.string().optional().describe('迭代ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
215
- copy_attachments: z.number().optional().describe('是否复制附件,值=1复制'),
216
- copy_comments: z.number().optional().describe('是否复制评论,值=1复制'),
217
- copy_sub_tasks: z.number().optional().describe('是否复制子任务,值=1复制'),
214
+ iteration_id: z.string().optional().describe('迭代 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
215
+ copy_attachments: z.number().optional().describe('是否复制附件,值=1 为复制'),
216
+ copy_comments: z.number().optional().describe('是否复制评论,值=1 为复制'),
217
+ copy_sub_tasks: z.number().optional().describe('是否复制子任务,值=1 为复制'),
218
218
  }),
219
219
  handler: async (client, params) => {
220
220
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -231,10 +231,10 @@ export const storyTools = [
231
231
  },
232
232
  {
233
233
  name: 'tapd_batch_update_stories',
234
- description: '批量更新需求',
234
+ description: '一次批量更新最多 50 条需求。只改一条用单条更新工具。写操作;stories 传 JSON 数组字符串,每项含 id 与要改的字段。返回批量结果。',
235
235
  inputSchema: z.object({
236
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
237
- stories: z.string().describe('需求更新数组JSON,最多50条 (必填)'),
236
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
237
+ stories: z.string().describe('需求更新数组JSON,最多50条(必填)'),
238
238
  }),
239
239
  handler: async (client, params) => {
240
240
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -247,12 +247,12 @@ export const storyTools = [
247
247
  // 需求分类
248
248
  {
249
249
  name: 'tapd_get_story_categories',
250
- description: '获取需求分类列表',
250
+ description: '查询需求分类列表,支持名称模糊匹配与分页。只统计数量用数量统计工具。读操作。返回分类数组。',
251
251
  inputSchema: z.object({
252
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
253
- id: z.string().optional().describe('分类ID,支持多ID查询;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
252
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
253
+ id: z.string().optional().describe('分类 ID,支持多 ID查询;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
254
254
  name: z.string().optional().describe('分类名称,支持模糊匹配'),
255
- parent_id: z.string().optional().describe('父分类ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
255
+ parent_id: z.string().optional().describe('父分类 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
256
256
  created: z.string().optional().describe('创建时间'),
257
257
  modified: z.string().optional().describe('修改时间'),
258
258
  limit: z.number().optional().describe('返回数量'),
@@ -270,12 +270,12 @@ export const storyTools = [
270
270
  },
271
271
  {
272
272
  name: 'tapd_get_story_categories_count',
273
- description: '获取需求分类数量',
273
+ description: '按相同过滤条件返回需求分类数量。要看列表用分类列表查询工具。读操作。返回 {count}。',
274
274
  inputSchema: z.object({
275
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
276
- id: z.string().optional().describe('分类ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
275
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
276
+ id: z.string().optional().describe('分类 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
277
277
  name: z.string().optional().describe('分类名称'),
278
- parent_id: z.string().optional().describe('父分类ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
278
+ parent_id: z.string().optional().describe('父分类 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
279
279
  }),
280
280
  handler: async (client, params) => {
281
281
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -287,11 +287,11 @@ export const storyTools = [
287
287
  },
288
288
  {
289
289
  name: 'tapd_add_story_category',
290
- description: '创建需求分类',
290
+ description: '创建需求分类,可指定父分类 ID 挂到父分类下。写操作;name 必填。返回新分类。',
291
291
  inputSchema: z.object({
292
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
293
- name: z.string().describe('分类名称 (必填)'),
294
- parent_id: z.string().optional().describe('父分类ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
292
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
293
+ name: z.string().describe('分类名称(必填)'),
294
+ parent_id: z.string().optional().describe('父分类 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
295
295
  }),
296
296
  handler: async (client, params) => {
297
297
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -303,12 +303,12 @@ export const storyTools = [
303
303
  },
304
304
  {
305
305
  name: 'tapd_update_story_category',
306
- description: '更新需求分类',
306
+ description: '按 ID 更新需求分类(改名或调整父分类)。写操作;id 必填。返回更新后的分类。',
307
307
  inputSchema: z.object({
308
- id: z.string().describe('分类ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
309
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
308
+ id: z.string().describe('分类 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
309
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
310
310
  name: z.string().optional().describe('分类名称'),
311
- parent_id: z.string().optional().describe('父分类ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
311
+ parent_id: z.string().optional().describe('父分类 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
312
312
  }),
313
313
  handler: async (client, params) => {
314
314
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -321,9 +321,9 @@ export const storyTools = [
321
321
  // 需求类别
322
322
  {
323
323
  name: 'tapd_get_workitem_types',
324
- description: '获取需求类别列表',
324
+ description: '查询项目工作项类别列表(需求/缺陷/任务等类型及类别 ID)。给创建、工作流类工具取类别 ID 前先查这里。注意:需要 stories::workitem_types 权限,无权限时 403。读操作。返回类别数组。',
325
325
  inputSchema: z.object({
326
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
326
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
327
327
  }),
328
328
  handler: async (client, params) => {
329
329
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -335,11 +335,11 @@ export const storyTools = [
335
335
  },
336
336
  {
337
337
  name: 'tapd_change_workitem_type',
338
- description: '更新需求类别',
338
+ description: '把需求变更到另一个工作项类别(如普通需求转任务型类别)。查类别用类别查询工具;改其他字段用单条更新工具。写操作;id 与新类别 ID 必填。返回变更结果。',
339
339
  inputSchema: z.object({
340
- id: z.string().describe('需求ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
341
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
342
- workitem_type_id: z.string().describe('新的需求类别ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
340
+ id: z.string().describe('需求 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
341
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
342
+ workitem_type_id: z.string().describe('新的需求类别 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
343
343
  }),
344
344
  handler: async (client, params) => {
345
345
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -357,10 +357,10 @@ export const storyTools = [
357
357
  // 字段配置
358
358
  {
359
359
  name: 'tapd_get_story_fields_info',
360
- description: '获取需求字段信息',
360
+ description: '查询需求可写字段元信息(类型、是否必填、候选值)。拼创建/更新参数前查字段合法性用。读操作。返回字段定义数组。',
361
361
  inputSchema: z.object({
362
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
363
- workitem_type_id: z.string().optional().describe('需求类别ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
362
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
363
+ workitem_type_id: z.string().optional().describe('需求类别 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
364
364
  }),
365
365
  handler: async (client, params) => {
366
366
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -372,9 +372,9 @@ export const storyTools = [
372
372
  },
373
373
  {
374
374
  name: 'tapd_get_story_fields_lable',
375
- description: '获取需求字段中英文映射',
375
+ description: '查询需求字段名中英文映射(英文字段名 → 中文标签)。把返回数据转成人类可读表头时用。读操作。返回映射对象。',
376
376
  inputSchema: z.object({
377
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
377
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
378
378
  }),
379
379
  handler: async (client, params) => {
380
380
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -387,10 +387,10 @@ export const storyTools = [
387
387
  // 模板
388
388
  {
389
389
  name: 'tapd_get_story_template_list',
390
- description: '获取需求模板列表',
390
+ description: '查询需求模板列表(按类别 ID 过滤)。取默认模板用默认模板查询工具。读操作;支持分页。返回模板数组。',
391
391
  inputSchema: z.object({
392
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
393
- workitem_type_id: z.string().optional().describe('需求类别ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
392
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
393
+ workitem_type_id: z.string().optional().describe('需求类别 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
394
394
  limit: z.number().optional().describe('返回数量'),
395
395
  page: z.number().optional().describe('页码'),
396
396
  fields: z.string().optional().describe('返回字段'),
@@ -405,10 +405,10 @@ export const storyTools = [
405
405
  },
406
406
  {
407
407
  name: 'tapd_get_default_story_template',
408
- description: '获取需求默认模板',
408
+ description: '查询指定类别的默认需求模板。要模板清单用模板列表查询工具。读操作。返回默认模板。',
409
409
  inputSchema: z.object({
410
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
411
- workitem_type_id: z.string().optional().describe('需求类别ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
410
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
411
+ workitem_type_id: z.string().optional().describe('需求类别 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
412
412
  }),
413
413
  handler: async (client, params) => {
414
414
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -421,10 +421,10 @@ export const storyTools = [
421
421
  // 关联关系
422
422
  {
423
423
  name: 'tapd_get_story_related_bugs',
424
- description: '获取需求关联的缺陷',
424
+ description: '查询某需求已关联的缺陷列表。反向(按缺陷找需求)用缺陷侧关联查询工具;建立/解除关联用关联建立/解除工具。读操作;story_id 必填。返回关联缺陷数组。',
425
425
  inputSchema: z.object({
426
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
427
- story_id: z.string().describe('需求ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
426
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
427
+ story_id: z.string().describe('需求 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
428
428
  limit: z.number().optional().describe('返回数量'),
429
429
  page: z.number().optional().describe('页码'),
430
430
  fields: z.string().optional().describe('返回字段'),
@@ -444,11 +444,11 @@ export const storyTools = [
444
444
  },
445
445
  {
446
446
  name: 'tapd_create_story_bug',
447
- description: '创建需求缺陷关联',
447
+ description: '建立需求与缺陷的关联。查询已有关联用需求侧关联缺陷查询工具;解除用关联解除工具。写操作;story_id、bug_id 必填。返回关联结果。',
448
448
  inputSchema: z.object({
449
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
450
- story_id: z.string().describe('需求ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
451
- bug_id: z.string().describe('缺陷ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
449
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
450
+ story_id: z.string().describe('需求 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
451
+ bug_id: z.string().describe('缺陷 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
452
452
  }),
453
453
  handler: async (client, params) => {
454
454
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -466,11 +466,11 @@ export const storyTools = [
466
466
  },
467
467
  {
468
468
  name: 'tapd_remove_story_bug_relations',
469
- description: '解除需求缺陷关联',
469
+ description: '解除需求与缺陷的关联。建立关联用关联建立工具。写操作;story_id、bug_id 必填。返回解除结果。',
470
470
  inputSchema: z.object({
471
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
472
- story_id: z.string().describe('需求ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
473
- bug_id: z.string().describe('缺陷ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
471
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
472
+ story_id: z.string().describe('需求 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
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();
@@ -488,11 +488,11 @@ export const storyTools = [
488
488
  },
489
489
  {
490
490
  name: 'tapd_get_story_tcase',
491
- description: '获取需求测试用例关联',
491
+ description: '查询需求已关联的测试用例。建立关联用关联建立工具;反向(按用例找需求)用用例侧反查工具。读操作;story_id 必填。返回关联用例数组。',
492
492
  inputSchema: z.object({
493
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
494
- story_id: z.string().describe('需求ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
495
- tcase_id: z.string().optional().describe('测试用例ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
493
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
494
+ story_id: z.string().describe('需求 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
495
+ tcase_id: z.string().optional().describe('测试用例 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
496
496
  limit: z.number().optional().describe('返回数量'),
497
497
  page: z.number().optional().describe('页码'),
498
498
  fields: z.string().optional().describe('返回字段'),
@@ -512,11 +512,11 @@ export const storyTools = [
512
512
  },
513
513
  {
514
514
  name: 'tapd_create_story_tcase',
515
- description: '创建需求测试用例关联',
515
+ description: '建立需求与测试用例的关联。查询用需求侧关联用例查询工具;解除用用例侧解除工具。写操作;story_id、tcase_id 必填。返回关联结果。',
516
516
  inputSchema: z.object({
517
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
518
- story_id: z.string().describe('需求ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
519
- tcase_id: z.string().describe('测试用例ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
517
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
518
+ story_id: z.string().describe('需求 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
519
+ tcase_id: z.string().describe('测试用例 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
520
520
  }),
521
521
  handler: async (client, params) => {
522
522
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -534,12 +534,12 @@ export const storyTools = [
534
534
  // 前后置关系
535
535
  {
536
536
  name: 'tapd_get_time_relative_stories',
537
- description: '获取需求前后置关系',
537
+ description: '查询需求前后置(依赖)关系。维护关系用关系保存/删除工具。读操作;story_id、前置 ID、后置 ID 至少给一个。返回关系数组。',
538
538
  inputSchema: z.object({
539
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
540
- story_id: z.string().optional().describe('需求ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
541
- predecessor_id: z.string().optional().describe('前置需求ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
542
- successor_id: z.string().optional().describe('后置需求ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
539
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
540
+ story_id: z.string().optional().describe('需求 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
541
+ predecessor_id: z.string().optional().describe('前置需求 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
542
+ successor_id: z.string().optional().describe('后置需求 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
543
543
  relation_type: z.string().optional().describe('关系类型'),
544
544
  limit: z.number().optional().describe('返回数量'),
545
545
  page: z.number().optional().describe('页码'),
@@ -562,10 +562,10 @@ export const storyTools = [
562
562
  },
563
563
  {
564
564
  name: 'tapd_save_time_relations',
565
- description: '批量新增/修改前后置关系',
565
+ description: '批量新增或修改需求前后置关系(同 ID 覆盖为修改)。查询用关系查询工具;删除用关系删除工具。写操作;relations 传 JSON 数组字符串。返回保存结果。',
566
566
  inputSchema: z.object({
567
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
568
- relations: z.string().describe('前后置关系数组JSON (必填)'),
567
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
568
+ relations: z.string().describe('前后置关系数组JSON(必填)'),
569
569
  }),
570
570
  handler: async (client, params) => {
571
571
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -577,10 +577,10 @@ export const storyTools = [
577
577
  },
578
578
  {
579
579
  name: 'tapd_delete_time_relations',
580
- description: '批量删除前后置关系',
580
+ description: '批量删除需求前后置关系。新增/修改用关系保存工具。写操作;relations 传 JSON 数组字符串。返回删除结果。',
581
581
  inputSchema: z.object({
582
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
583
- relations: z.string().describe('要删除的前后置关系数组JSON (必填)'),
582
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
583
+ relations: z.string().describe('要删除的前后置关系数组JSON(必填)'),
584
584
  }),
585
585
  handler: async (client, params) => {
586
586
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -593,10 +593,10 @@ export const storyTools = [
593
593
  // 其他
594
594
  {
595
595
  name: 'tapd_get_removed_stories',
596
- description: '获取回收站的需求',
596
+ description: '查询回收站中的需求(可按删除时间、处理人过滤)。存续需求用列表查询工具。读操作;支持分页。返回已删除需求数组。',
597
597
  inputSchema: z.object({
598
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
599
- id: z.string().optional().describe('需求ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
598
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
599
+ id: z.string().optional().describe('需求 ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
600
600
  name: z.string().optional().describe('标题'),
601
601
  owner: z.string().optional().describe('处理人'),
602
602
  creator: z.string().optional().describe('创建人'),
@@ -617,11 +617,11 @@ export const storyTools = [
617
617
  },
618
618
  {
619
619
  name: 'tapd_update_story_parent',
620
- description: '更新父需求',
620
+ description: '设置或取消需求的父子层级(父需求 ID 传 "0" 取消父子关系)。一般字段更新用单条更新工具。写操作;id、parent_id 必填。返回更新结果。',
621
621
  inputSchema: z.object({
622
- id: z.string().describe('需求ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
623
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
624
- parent_id: z.string().describe('新的父需求ID (必填),设为0取消父子关系;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
622
+ id: z.string().describe('需求 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
623
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
624
+ parent_id: z.string().describe('新的父需求 ID(必填),设为 0 取消父子关系;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
625
625
  }),
626
626
  handler: async (client, params) => {
627
627
  const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
@@ -640,10 +640,10 @@ export const storyTools = [
640
640
  },
641
641
  {
642
642
  name: 'tapd_get_stories_by_view_conf_id',
643
- description: '获取视图需求列表',
643
+ description: '按视图配置 ID 查询该视图下的需求列表(复用网页端保存的视图条件)。自定义条件查询用列表查询工具。读操作;view_conf_id 必填。返回需求列表。',
644
644
  inputSchema: z.object({
645
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
646
- view_conf_id: z.string().describe('视图配置ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
645
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
646
+ view_conf_id: z.string().describe('视图配置 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
647
647
  limit: z.number().optional().describe('返回数量'),
648
648
  page: z.number().optional().describe('页码'),
649
649
  fields: z.string().optional().describe('返回字段'),
@@ -658,10 +658,10 @@ export const storyTools = [
658
658
  },
659
659
  {
660
660
  name: 'tapd_get_story_steps',
661
- description: '获取需求节点信息',
661
+ description: '查询需求步骤(验收/拆解节点)信息。读操作;story_id 必填。返回步骤数组。',
662
662
  inputSchema: z.object({
663
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
664
- story_id: z.string().describe('需求ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
663
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
664
+ story_id: z.string().describe('需求 ID(必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
665
665
  limit: z.number().optional().describe('返回数量'),
666
666
  page: z.number().optional().describe('页码'),
667
667
  fields: z.string().optional().describe('返回字段'),