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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/README.md +23 -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/registry/richtext-manifests.generated.d.ts +1 -1
  28. package/dist/registry/richtext-manifests.generated.d.ts.map +1 -1
  29. package/dist/registry/richtext-manifests.generated.js +1 -1
  30. package/dist/registry/richtext-manifests.generated.js.map +1 -1
  31. package/dist/registry/richtext.d.ts +9 -0
  32. package/dist/registry/richtext.d.ts.map +1 -1
  33. package/dist/registry/richtext.js +33 -15
  34. package/dist/registry/richtext.js.map +1 -1
  35. package/dist/registry/richtext.test.js +70 -7
  36. package/dist/registry/richtext.test.js.map +1 -1
  37. package/dist/richtext/attachment-anchor.d.ts +58 -0
  38. package/dist/richtext/attachment-anchor.d.ts.map +1 -0
  39. package/dist/richtext/attachment-anchor.js +221 -0
  40. package/dist/richtext/attachment-anchor.js.map +1 -0
  41. package/dist/richtext/attachment-anchor.test.d.ts +2 -0
  42. package/dist/richtext/attachment-anchor.test.d.ts.map +1 -0
  43. package/dist/richtext/attachment-anchor.test.js +149 -0
  44. package/dist/richtext/attachment-anchor.test.js.map +1 -0
  45. package/dist/richtext/escape.d.ts +7 -0
  46. package/dist/richtext/escape.d.ts.map +1 -0
  47. package/dist/richtext/escape.js +60 -0
  48. package/dist/richtext/escape.js.map +1 -0
  49. package/dist/richtext/index.d.ts +15 -0
  50. package/dist/richtext/index.d.ts.map +1 -0
  51. package/dist/richtext/index.js +35 -0
  52. package/dist/richtext/index.js.map +1 -0
  53. package/dist/richtext/mention.d.ts +49 -0
  54. package/dist/richtext/mention.d.ts.map +1 -0
  55. package/dist/richtext/mention.js +179 -0
  56. package/dist/richtext/mention.js.map +1 -0
  57. package/dist/richtext/mention.test.d.ts +2 -0
  58. package/dist/richtext/mention.test.d.ts.map +1 -0
  59. package/dist/richtext/mention.test.js +123 -0
  60. package/dist/richtext/mention.test.js.map +1 -0
  61. package/dist/richtext/pipeline.d.ts +5 -0
  62. package/dist/richtext/pipeline.d.ts.map +1 -0
  63. package/dist/richtext/pipeline.js +199 -0
  64. package/dist/richtext/pipeline.js.map +1 -0
  65. package/dist/richtext/round-trip.test.d.ts +2 -0
  66. package/dist/richtext/round-trip.test.d.ts.map +1 -0
  67. package/dist/richtext/round-trip.test.js +105 -0
  68. package/dist/richtext/round-trip.test.js.map +1 -0
  69. package/dist/sdk-routes.d.ts.map +1 -1
  70. package/dist/sdk-routes.js +4 -0
  71. package/dist/sdk-routes.js.map +1 -1
  72. package/dist/tapd-client.d.ts +79 -2
  73. package/dist/tapd-client.d.ts.map +1 -1
  74. package/dist/tapd-client.js +177 -24
  75. package/dist/tapd-client.js.map +1 -1
  76. package/dist/tools/attachment.d.ts +47 -0
  77. package/dist/tools/attachment.d.ts.map +1 -1
  78. package/dist/tools/attachment.js +278 -32
  79. package/dist/tools/attachment.js.map +1 -1
  80. package/dist/tools/attachment.test.d.ts +2 -0
  81. package/dist/tools/attachment.test.d.ts.map +1 -0
  82. package/dist/tools/attachment.test.js +432 -0
  83. package/dist/tools/attachment.test.js.map +1 -0
  84. package/dist/tools/board.js +22 -22
  85. package/dist/tools/board.js.map +1 -1
  86. package/dist/tools/bug.d.ts.map +1 -1
  87. package/dist/tools/bug.js +262 -259
  88. package/dist/tools/bug.js.map +1 -1
  89. package/dist/tools/changes.js +20 -20
  90. package/dist/tools/changes.js.map +1 -1
  91. package/dist/tools/comment.d.ts.map +1 -1
  92. package/dist/tools/comment.js +26 -23
  93. package/dist/tools/comment.js.map +1 -1
  94. package/dist/tools/custom-fields.js +16 -16
  95. package/dist/tools/custom-fields.js.map +1 -1
  96. package/dist/tools/image.js +2 -2
  97. package/dist/tools/image.js.map +1 -1
  98. package/dist/tools/index.d.ts.map +1 -1
  99. package/dist/tools/index.js +2 -0
  100. package/dist/tools/index.js.map +1 -1
  101. package/dist/tools/iteration.js +50 -50
  102. package/dist/tools/iteration.js.map +1 -1
  103. package/dist/tools/media.d.ts +9 -0
  104. package/dist/tools/media.d.ts.map +1 -0
  105. package/dist/tools/media.js +45 -0
  106. package/dist/tools/media.js.map +1 -0
  107. package/dist/tools/mini-comment.js +27 -27
  108. package/dist/tools/mini-comment.js.map +1 -1
  109. package/dist/tools/mini-item.js +83 -83
  110. package/dist/tools/mini-item.js.map +1 -1
  111. package/dist/tools/mini-workspace.js +5 -5
  112. package/dist/tools/mini-workspace.js.map +1 -1
  113. package/dist/tools/program.js +7 -7
  114. package/dist/tools/program.js.map +1 -1
  115. package/dist/tools/relations.js +14 -14
  116. package/dist/tools/relations.js.map +1 -1
  117. package/dist/tools/release.js +53 -53
  118. package/dist/tools/release.js.map +1 -1
  119. package/dist/tools/report.js +8 -8
  120. package/dist/tools/report.js.map +1 -1
  121. package/dist/tools/richtext-wiring.test.d.ts +2 -0
  122. package/dist/tools/richtext-wiring.test.d.ts.map +1 -0
  123. package/dist/tools/richtext-wiring.test.js +302 -0
  124. package/dist/tools/richtext-wiring.test.js.map +1 -0
  125. package/dist/tools/settings.js +77 -77
  126. package/dist/tools/settings.js.map +1 -1
  127. package/dist/tools/source.js +14 -14
  128. package/dist/tools/source.js.map +1 -1
  129. package/dist/tools/story.d.ts.map +1 -1
  130. package/dist/tools/story.js +123 -120
  131. package/dist/tools/story.js.map +1 -1
  132. package/dist/tools/task.d.ts.map +1 -1
  133. package/dist/tools/task.js +126 -123
  134. package/dist/tools/task.js.map +1 -1
  135. package/dist/tools/test.js +117 -117
  136. package/dist/tools/test.js.map +1 -1
  137. package/dist/tools/timesheet.js +23 -23
  138. package/dist/tools/timesheet.js.map +1 -1
  139. package/dist/tools/user.js +8 -8
  140. package/dist/tools/user.js.map +1 -1
  141. package/dist/tools/utility.d.ts +17 -0
  142. package/dist/tools/utility.d.ts.map +1 -1
  143. package/dist/tools/utility.js +204 -88
  144. package/dist/tools/utility.js.map +1 -1
  145. package/dist/tools/wiki.d.ts.map +1 -1
  146. package/dist/tools/wiki.js +71 -56
  147. package/dist/tools/wiki.js.map +1 -1
  148. package/dist/tools/workflow.js +26 -26
  149. package/dist/tools/workflow.js.map +1 -1
  150. package/dist/tools/workspace.js +16 -16
  151. package/dist/tools/workspace.js.map +1 -1
  152. package/dist/types.d.ts +5 -0
  153. package/dist/types.d.ts.map +1 -1
  154. package/package.json +15 -11
  155. package/dist/tools/zz-acceptance-echo.d.ts +0 -3
  156. package/dist/tools/zz-acceptance-echo.d.ts.map +0 -1
  157. package/dist/tools/zz-acceptance-echo.js +0 -9
  158. package/dist/tools/zz-acceptance-echo.js.map +0 -1
@@ -1,24 +1,145 @@
1
+ import path from 'node:path';
1
2
  import { z } from 'zod';
2
- import MarkdownIt from 'markdown-it';
3
- import TurndownService from 'turndown';
4
- import { gfm } from 'turndown-plugin-gfm';
5
3
  import { TapdClient } from '../tapd-client.js';
6
- const markdownIt = new MarkdownIt({ html: false, breaks: true });
7
- const turndown = new TurndownService({ headingStyle: 'atx', codeBlockStyle: 'fenced' });
8
- turndown.use(gfm);
4
+ import { TapdError } from '../errors/index.js';
5
+ import { findMentions } from '../richtext/index.js';
6
+ import { htmlToMd, mdToHtml } from '../richtext/pipeline.js';
7
+ import { mediaTools } from './media.js';
9
8
  const mdToHtmlSchema = z.object({
10
9
  content: z.string().describe('Markdown 内容'),
10
+ upload_images: z.boolean().optional().default(false).describe('显式副作用(默认 false):扫描 md 中 `![]()` 的本地存在图片路径并逐个上传 TAPD 图床,替换为 /tfl/ 远端路径;返回 uploaded_images 清单(失败项列入 failed_images,不影响其余内容)。上传语义为图片资源创建,不计入实体写闸门(FSD §3.4,side_effect: upload)'),
11
+ workspace_id: z.number().optional().describe('项目ID:提供时对 `@昵称` 做成员校验(调 tapd_get_workspace_users;接口 403/失败自动降级跳过并在 warnings 说明),未命中昵称列入 warnings;同时作为 upload_images 的上传项目(省略时取默认项目配置)'),
11
12
  });
12
13
  const htmlToMdSchema = z.object({
13
14
  html: z.string().describe('TAPD 富文本 HTML(description/comment 等)'),
14
15
  });
15
- // eslint-disable-next-line @typescript-eslint/require-await
16
- const mdToHtmlHandler = async (_client, params) => {
17
- return { html: markdownIt.render(params.content) };
16
+ /**
17
+ * md 内 `![]()` 图片目的地扫描(支持 `<包角>` 与可选标题)。
18
+ * 每次调用新建正则实例,避免全局正则 lastIndex 状态串扰。
19
+ */
20
+ function imageMdRe() {
21
+ return /!\[([^\]\n]*)\]\(\s*(<[^>\n]*>|[^)\s\n]+)(?:\s+"[^"\n]*")?\s*\)/g;
22
+ }
23
+ /**
24
+ * 判定图片目的地是否可能为本地路径(需 upload 后再由存在性检查裁决):
25
+ * scheme(http:/https:/attach:/data:...)、锚点、协议相对地址、TAPD 图床 /tfl/ 保留前缀排除;
26
+ * 其余(含 macOS/Linux 绝对路径与相对路径)交由上传 handler 的 existsSync 判定,
27
+ * 不存在的路径进 failed_images 原样保留(绝不猜测改写)。
28
+ */
29
+ function isLocalPathCandidate(dest) {
30
+ if (dest === '')
31
+ return false;
32
+ if (dest.startsWith('#') || dest.startsWith('//'))
33
+ return false;
34
+ if (dest.startsWith('/tfl/'))
35
+ return false; // TAPD 图床远端路径(上传后的产物,不再二次上传)
36
+ return !/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(dest);
37
+ }
38
+ function unwrapAngleDest(dest) {
39
+ return dest.startsWith('<') && dest.endsWith('>') ? dest.slice(1, -1) : dest;
40
+ }
41
+ /** FSD §3.4:md 本地图 → 上传(复用 tapd_upload_image handler,函数组合)→ /tfl/ 路径替换。 */
42
+ async function uploadLocalImages(client, content, workspaceId) {
43
+ const uploadImage = mediaTools.find(t => t.name === 'tapd_upload_image');
44
+ if (!uploadImage)
45
+ throw new Error('tapd_upload_image tool is not available for upload_images');
46
+ const uploaded = [];
47
+ const failed = [];
48
+ const srcByDest = new Map();
49
+ const srcByResolved = new Map(); // 去重:同一文件的不同写法只上传一次
50
+ const dests = new Set();
51
+ for (const match of content.matchAll(imageMdRe())) {
52
+ const dest = unwrapAngleDest(match[2]);
53
+ if (isLocalPathCandidate(dest))
54
+ dests.add(dest);
55
+ }
56
+ for (const dest of dests) {
57
+ const resolvedKey = path.resolve(dest);
58
+ const reused = srcByResolved.get(resolvedKey);
59
+ if (reused) {
60
+ srcByDest.set(dest, reused);
61
+ continue;
62
+ }
63
+ try {
64
+ const result = await uploadImage.handler(client, { workspace_id: workspaceId, image_path: dest });
65
+ if (typeof result?.image_src === 'string' && result.image_src !== '') {
66
+ srcByDest.set(dest, result.image_src);
67
+ srcByResolved.set(resolvedKey, result.image_src);
68
+ uploaded.push({ local_path: dest, image_src: result.image_src });
69
+ }
70
+ else {
71
+ failed.push({ local_path: dest, reason: 'upload returned no image_src' });
72
+ }
73
+ }
74
+ catch (error) {
75
+ failed.push({ local_path: dest, reason: error instanceof Error ? error.message : String(error) });
76
+ }
77
+ }
78
+ if (uploaded.length > 0) {
79
+ content = content.replace(imageMdRe(), (whole, alt, dest) => {
80
+ const src = srcByDest.get(unwrapAngleDest(dest));
81
+ return src ? `![${alt}](${src})` : whole;
82
+ });
83
+ }
84
+ return { content, uploaded, failed };
85
+ }
86
+ function extractNicknames(payload) {
87
+ const names = new Set();
88
+ for (const item of Array.isArray(payload) ? payload : []) {
89
+ if (typeof item === 'string' && item !== '') {
90
+ names.add(item);
91
+ }
92
+ else if (item && typeof item === 'object') {
93
+ const rec = item;
94
+ const user = rec.User?.user ?? rec.user;
95
+ if (typeof user === 'string' && user !== '')
96
+ names.add(user);
97
+ }
98
+ }
99
+ return names;
100
+ }
101
+ /** FSD §3.6:昵称成员校验(尽力而为;403/失败降级跳过——R4 服务端仍智能识别,欠标记无害)。 */
102
+ async function validateMentionNicknames(client, workspaceId, content) {
103
+ let known;
104
+ try {
105
+ const payload = await client.get('/users', { workspace_id: workspaceId, fields: 'user' });
106
+ known = extractNicknames(payload);
107
+ }
108
+ catch (error) {
109
+ const reason = error instanceof Error ? error.message : String(error);
110
+ return [`成员校验已跳过(tapd_get_workspace_users 不可用:${reason.slice(0, 120)});@昵称 仍由服务端智能识别`];
111
+ }
112
+ if (known.size === 0) {
113
+ return ['成员校验已跳过(成员列表为空或无权限读取);@昵称 仍由服务端智能识别'];
114
+ }
115
+ const misses = [...new Set(findMentions(content).map(m => m.name))].filter(name => !known.has(name));
116
+ return misses.map(name => `@${name} 未命中项目成员昵称(请核对昵称拼写;关键通知场景建议同时填 cc)`);
117
+ }
118
+ const mdToHtmlHandler = async (client, params) => {
119
+ let content = params.content;
120
+ let uploaded = [];
121
+ let failed = [];
122
+ if (params.upload_images) {
123
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
124
+ if (!workspaceId) {
125
+ throw new Error('workspace_id is required for upload_images (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
126
+ }
127
+ ({ content, uploaded, failed } = await uploadLocalImages(client, content, workspaceId));
128
+ }
129
+ let warnings = [];
130
+ if (params.workspace_id !== undefined) {
131
+ warnings = await validateMentionNicknames(client, params.workspace_id, content);
132
+ }
133
+ return {
134
+ html: mdToHtml(content),
135
+ ...(uploaded.length > 0 ? { uploaded_images: uploaded } : {}),
136
+ ...(failed.length > 0 ? { failed_images: failed } : {}),
137
+ ...(warnings.length > 0 ? { warnings } : {}),
138
+ };
18
139
  };
19
140
  // eslint-disable-next-line @typescript-eslint/require-await
20
141
  const htmlToMdHandler = async (_client, params) => {
21
- return { markdown: turndown.turndown(params.html) };
142
+ return { markdown: htmlToMd(params.html) };
22
143
  };
23
144
  const shortToLongIdSchema = z.object({
24
145
  short_id: z.string().describe('短 ID(纯数字,≤9 位);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
@@ -35,131 +156,126 @@ const shortToLongIdHandler = async (_client, params) => {
35
156
  is_converted: result !== params.short_id,
36
157
  };
37
158
  };
159
+ async function runBatch(items, maxConcurrency) {
160
+ const outcomes = new Array(items.length);
161
+ let cursor = 0;
162
+ const workerCount = Math.max(1, Math.min(maxConcurrency, items.length));
163
+ const workers = Array.from({ length: workerCount }, async () => {
164
+ while (cursor < items.length) {
165
+ const index = cursor;
166
+ cursor++;
167
+ const item = items[index];
168
+ try {
169
+ outcomes[index] = { id: item.id, data: await item.run() };
170
+ }
171
+ catch (error) {
172
+ outcomes[index] = { id: item.id, error: error instanceof TapdError ? error : TapdError.wrap(error) };
173
+ }
174
+ }
175
+ });
176
+ await Promise.all(workers);
177
+ return outcomes;
178
+ }
38
179
  /**
39
- * Run promises with limited concurrency
180
+ * 批量逐 ID 拉取详情(tapd_batch_fetch_stories/bugs/tasks 共用)。
181
+ * 降级取舍:
182
+ * - 全部成功 → 返回原始数组(与旧契约一致,渲染层零感知)
183
+ * - 部分失败 → 返回 BatchDegradedResult(成功项保留 + 逐项结构化错误 + 汇总),不再让单项失败吞掉整批
184
+ * - 全部失败 → 抛 TAPD_PARTIAL(items 携带逐项错误),保持整体失败语义(ok:false)不误导消费方
40
185
  */
41
- async function runWithConcurrency(tasks, maxConcurrency) {
42
- const results = [];
43
- const executing = [];
44
- for (const task of tasks) {
45
- const promise = task().then(result => {
46
- results.push(result);
47
- });
48
- executing.push(promise);
49
- if (executing.length >= maxConcurrency) {
50
- await Promise.race(executing);
51
- // Remove completed promises
52
- for (let i = executing.length - 1; i >= 0; i--) {
53
- const p = executing[i];
54
- const settled = await Promise.race([p, Promise.resolve('pending')]);
55
- if (settled !== 'pending') {
56
- void executing.splice(i, 1);
57
- }
58
- }
186
+ async function batchFetchByIds(client, path, params) {
187
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
188
+ if (!workspaceId) {
189
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
190
+ }
191
+ const requestContext = { method: 'GET', path, params: { workspace_id: workspaceId } };
192
+ const items = params.ids.map(id => ({
193
+ id,
194
+ run: () => client.get(path, {
195
+ workspace_id: workspaceId,
196
+ id: TapdClient.toLongId(id, workspaceId),
197
+ ...(params.fields ? { fields: params.fields } : {}),
198
+ }),
199
+ }));
200
+ const outcomes = await runBatch(items, params.max_workers ?? 3);
201
+ const succeeded = [];
202
+ const failed = [];
203
+ for (const outcome of outcomes) {
204
+ if (outcome.error !== undefined) {
205
+ failed.push({ id: outcome.id, error: outcome.error });
206
+ }
207
+ else {
208
+ succeeded.push({ id: outcome.id, data: outcome.data });
59
209
  }
60
210
  }
61
- await Promise.all(executing);
62
- return results;
211
+ if (failed.length === 0) {
212
+ return succeeded.map(item => item.data);
213
+ }
214
+ if (succeeded.length === 0) {
215
+ throw TapdError.partial(requestContext, outcomes.length, failed);
216
+ }
217
+ const degraded = {
218
+ summary: { total: outcomes.length, succeeded: succeeded.length, failed: failed.length },
219
+ succeeded,
220
+ failed: failed.map(item => ({ id: item.id, error: item.error.toJSON() })),
221
+ };
222
+ return degraded;
63
223
  }
64
224
  const batchFetchStoriesSchema = z.object({
65
225
  ids: z.array(z.string()).describe('需求 ID 列表(支持短 ID 和长 ID)'),
66
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
226
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
67
227
  fields: z.string().optional().describe('返回字段'),
68
228
  max_workers: z.number().optional().default(3).describe('最大并发数(默认 3)'),
69
229
  });
70
230
  const batchFetchBugsSchema = z.object({
71
231
  ids: z.array(z.string()).describe('缺陷 ID 列表(支持短 ID 和长 ID)'),
72
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
232
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
73
233
  fields: z.string().optional().describe('返回字段'),
74
234
  max_workers: z.number().optional().default(3).describe('最大并发数(默认 3)'),
75
235
  });
76
236
  const batchFetchTasksSchema = z.object({
77
237
  ids: z.array(z.string()).describe('任务 ID 列表(支持短 ID 和长 ID)'),
78
- workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
238
+ workspace_id: z.number().optional().describe('项目 ID,可省略(默认取环境变量 TAPD_DEFAULT_WORKSPACE_ID)'),
79
239
  fields: z.string().optional().describe('返回字段'),
80
240
  max_workers: z.number().optional().default(3).describe('最大并发数(默认 3)'),
81
241
  });
82
242
  export const utilityTools = [
83
243
  {
84
244
  name: 'tapd_md_to_html',
85
- description: '将 Markdown 转为 TAPD 富文本 HTML(description/comment 字段专用),模型产 md 省 token,先转再传。',
245
+ description: '把 Markdown 转成 TAPD 富文本 HTML(写 description/comment 前先转换,模型产 md 省生成 token)。支持 TAPD 扩展语法:@昵称 → at-who 提及(@@ 为字面 @ 转义)、[📎 文件名](attach:<ws>/<id>) → 附件锚点;代码段/链接 URL 内的 @ 不误伤。upload_images=true 时把 md 中本地存在的图片路径上传图床并替换为 /tfl/(显式副作用,默认关闭);workspace_id 提供时校验 @昵称 是否项目成员(不可用时降级跳过)。读侧配套用反向转换工具。返回 {html, uploaded_images?, failed_images?, warnings?}。',
86
246
  inputSchema: mdToHtmlSchema,
87
247
  handler: mdToHtmlHandler,
248
+ side_effect: 'upload',
88
249
  },
89
250
  {
90
251
  name: 'tapd_html_to_md',
91
- description: '将 TAPD 富文本 HTML 转为 Markdown(读取 description/comment 后消费专用),HTML 转 md 省 input token。',
252
+ description: '把 TAPD 富文本 HTML 转成 Markdown(读取 description/comment 后消费用,省输入 token)。at-who 提及还原为 @昵称(不降级为粗体)、附件锚点还原为 [📎 文件名](attach:<ws>/<id>)、图片还原为 ![](/tfl/...)。纯本地转换零请求,写入侧配套用正向转换工具。返回 {markdown}。',
92
253
  inputSchema: htmlToMdSchema,
93
254
  handler: htmlToMdHandler,
94
255
  },
95
256
  {
96
257
  name: 'tapd_short_to_long_id',
97
- description: '将短 ID 转换为长 ID。规则:纯数字且 ≤9 位视为短 ID,云环境前缀 "11",补零到 9 位拼接 workspace_id。',
258
+ description: '把短 ID 转换为长 ID。规则:纯数字且 ≤9 位视为短 ID,云环境前缀 "11",补零到 9 位拼接 workspace_id。列表类工具的 id 参数已内置自动转换,仅手工拼长 ID 时需要本工具。返回 {short_id, workspace_id, long_id, is_converted}。',
98
259
  inputSchema: shortToLongIdSchema,
99
260
  handler: shortToLongIdHandler,
100
261
  },
101
262
  {
102
263
  name: 'tapd_batch_fetch_stories',
103
- description: '批量并发获取多个需求详情。支持短 ID 自动转换,默认并发数为 3。',
264
+ description: '按 ID 列表批量并发获取需求完整详情(支持短 ID 自动转换,max_workers 默认 3)。按条件筛选走列表查询工具;只统计数量用数量统计工具。读操作;ids 为字符串数组。返回按入参顺序的需求详情数组;部分 ID 失败时返回降级聚合 {summary, succeeded, failed}(failed 含逐项结构化错误),仅全部失败才整体报错。',
104
265
  inputSchema: batchFetchStoriesSchema,
105
- handler: async (client, params) => {
106
- const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
107
- if (!workspaceId) {
108
- throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
109
- }
110
- const maxConcurrency = params.max_workers ?? 3;
111
- const tasks = params.ids.map(id => () => {
112
- const longId = TapdClient.toLongId(id, workspaceId);
113
- return client.get('/stories', {
114
- workspace_id: workspaceId,
115
- id: longId,
116
- ...(params.fields ? { fields: params.fields } : {}),
117
- });
118
- });
119
- return runWithConcurrency(tasks, maxConcurrency);
120
- },
266
+ handler: (client, params) => batchFetchByIds(client, '/stories', params),
121
267
  },
122
268
  {
123
269
  name: 'tapd_batch_fetch_bugs',
124
- description: '批量并发获取多个缺陷详情。支持短 ID 自动转换,默认并发数为 3。',
270
+ description: '按 ID 列表批量并发获取缺陷完整详情(支持短 ID 自动转换,max_workers 默认 3)。按条件筛选走列表查询工具;只统计数量用数量统计工具。读操作;ids 为字符串数组。返回按入参顺序的缺陷详情数组;部分 ID 失败时返回降级聚合 {summary, succeeded, failed}(failed 含逐项结构化错误),仅全部失败才整体报错。',
125
271
  inputSchema: batchFetchBugsSchema,
126
- handler: async (client, params) => {
127
- const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
128
- if (!workspaceId) {
129
- throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
130
- }
131
- const maxConcurrency = params.max_workers ?? 3;
132
- const tasks = params.ids.map(id => () => {
133
- const longId = TapdClient.toLongId(id, workspaceId);
134
- return client.get('/bugs', {
135
- workspace_id: workspaceId,
136
- id: longId,
137
- ...(params.fields ? { fields: params.fields } : {}),
138
- });
139
- });
140
- return runWithConcurrency(tasks, maxConcurrency);
141
- },
272
+ handler: (client, params) => batchFetchByIds(client, '/bugs', params),
142
273
  },
143
274
  {
144
275
  name: 'tapd_batch_fetch_tasks',
145
- description: '批量并发获取多个任务详情。支持短 ID 自动转换,默认并发数为 3。',
276
+ description: '按 ID 列表批量并发获取任务完整详情(支持短 ID 自动转换,max_workers 默认 3)。按条件筛选走列表查询工具;只统计数量用数量统计工具。读操作;ids 为字符串数组。返回按入参顺序的任务详情数组;部分 ID 失败时返回降级聚合 {summary, succeeded, failed}(failed 含逐项结构化错误),仅全部失败才整体报错。',
146
277
  inputSchema: batchFetchTasksSchema,
147
- handler: async (client, params) => {
148
- const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
149
- if (!workspaceId) {
150
- throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
151
- }
152
- const maxConcurrency = params.max_workers ?? 3;
153
- const tasks = params.ids.map(id => () => {
154
- const longId = TapdClient.toLongId(id, workspaceId);
155
- return client.get('/tasks', {
156
- workspace_id: workspaceId,
157
- id: longId,
158
- ...(params.fields ? { fields: params.fields } : {}),
159
- });
160
- });
161
- return runWithConcurrency(tasks, maxConcurrency);
162
- },
278
+ handler: (client, params) => batchFetchByIds(client, '/tasks', params),
163
279
  },
164
280
  ];
165
281
  //# sourceMappingURL=utility.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utility.js","sourceRoot":"","sources":["../../src/tools/utility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,eAAe,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAEjE,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC;AACxF,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAElB,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;CAC5C,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;CAClE,CAAC,CAAC;AAEH,4DAA4D;AAC5D,MAAM,eAAe,GAAG,KAAK,EAAE,OAAmB,EAAE,MAAsC,EAAE,EAAE;IAC5F,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;AACrD,CAAC,CAAC;AAEF,4DAA4D;AAC5D,MAAM,eAAe,GAAG,KAAK,EAAE,OAAmB,EAAE,MAAsC,EAAE,EAAE;IAC5F,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;IAC5F,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;IACjE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;CAC1E,CAAC,CAAC;AAEH,4DAA4D;AAC5D,MAAM,oBAAoB,GAAG,KAAK,EAAE,OAAmB,EAAE,MAA2C,EAAE,EAAE;IACtG,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1F,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,OAAO,EAAE,MAAM;QACf,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC,QAAQ;KACzC,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAC/B,KAA2B,EAC3B,cAAsB;IAEtB,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,MAAM,SAAS,GAAoB,EAAE,CAAC;IAEtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YACnC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAExB,IAAI,SAAS,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;YACvC,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,4BAA4B;YAC5B,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBACvB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACpE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1B,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC3D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAChE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;CACtE,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC3D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAChE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;CACtE,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC3D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAChE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;CACtE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAc;IACrC;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,4EAA4E;QACzF,WAAW,EAAE,cAAc;QAC3B,OAAO,EAAE,eAAe;KACzB;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,oFAAoF;QACjG,WAAW,EAAE,cAAc;QAC3B,OAAO,EAAE,eAAe;KACzB;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,qEAAqE;QAClF,WAAW,EAAE,mBAAmB;QAChC,OAAO,EAAE,oBAAoB;KAC9B;IACD;QACE,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,oCAAoC;QACjD,WAAW,EAAE,uBAAuB;QACpC,OAAO,EAAE,KAAK,EAAE,MAAkB,EAAE,MAA+C,EAAE,EAAE;YACrF,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,IAAI,UAAU,CAAC,qBAAqB,EAAE,CAAC;YAC9E,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;YACvG,CAAC;YAED,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE;gBACtC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;gBACpD,OAAO,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE;oBAC5B,YAAY,EAAE,WAAW;oBACzB,EAAE,EAAE,MAAM;oBACV,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpD,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,kBAAkB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACnD,CAAC;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,oCAAoC;QACjD,WAAW,EAAE,oBAAoB;QACjC,OAAO,EAAE,KAAK,EAAE,MAAkB,EAAE,MAA4C,EAAE,EAAE;YAClF,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,IAAI,UAAU,CAAC,qBAAqB,EAAE,CAAC;YAC9E,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;YACvG,CAAC;YAED,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE;gBACtC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;gBACpD,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE;oBACzB,YAAY,EAAE,WAAW;oBACzB,EAAE,EAAE,MAAM;oBACV,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpD,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,kBAAkB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACnD,CAAC;KACF;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,oCAAoC;QACjD,WAAW,EAAE,qBAAqB;QAClC,OAAO,EAAE,KAAK,EAAE,MAAkB,EAAE,MAA6C,EAAE,EAAE;YACnF,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,IAAI,UAAU,CAAC,qBAAqB,EAAE,CAAC;YAC9E,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;YACvG,CAAC;YAED,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE;gBACtC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;gBACpD,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE;oBAC1B,YAAY,EAAE,WAAW;oBACzB,EAAE,EAAE,MAAM;oBACV,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpD,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,kBAAkB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACnD,CAAC;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"utility.js","sourceRoot":"","sources":["../../src/tools/utility.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wiki.d.ts","sourceRoot":"","sources":["../../src/tools/wiki.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,eAAO,MAAM,SAAS,EAAE,OAAO,EA+N9B,CAAC"}
1
+ {"version":3,"file":"wiki.d.ts","sourceRoot":"","sources":["../../src/tools/wiki.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAI3C,eAAO,MAAM,SAAS,EAAE,OAAO,EA4O9B,CAAC"}