@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,210 @@
1
+ import assert from 'node:assert/strict';
2
+ import { allTools } from '../tools/index.js';
3
+ import { resolveWrite } from './write-policy.js';
4
+ import { ToolRegistry } from './registry.js';
5
+ import { SERVER_MD_TOOLS, WRITE_RICHTEXT_FIELDS_BY_TOOL, } from './richtext-manifests.generated.js';
6
+ import { isRichtextAutoEnabled, looksLikeHtml, transformWriteArgs, transformReadData, READ_RICHTEXT_FIELDS, } from './richtext.js';
7
+ const RICHTEXT_PARAM_FIELDS = ['description', 'markdown_description'];
8
+ function withAutoOff(fn) {
9
+ process.env.TAPD_RICHTEXT_AUTO = '0';
10
+ try {
11
+ return fn();
12
+ }
13
+ finally {
14
+ delete process.env.TAPD_RICHTEXT_AUTO;
15
+ }
16
+ }
17
+ const checks = [
18
+ ['switch: enabled by default, env TAPD_RICHTEXT_AUTO=0 disables', () => {
19
+ delete process.env.TAPD_RICHTEXT_AUTO;
20
+ assert.equal(isRichtextAutoEnabled(), true);
21
+ assert.equal(withAutoOff(() => isRichtextAutoEnabled()), false);
22
+ }],
23
+ ['looksLikeHtml: block tags detected, plain markdown not', () => {
24
+ assert.equal(looksLikeHtml('<p>hi</p>'), true);
25
+ assert.equal(looksLikeHtml('标题<br>正文'), true);
26
+ assert.equal(looksLikeHtml('# 标题\n\n- 列表'), false);
27
+ assert.equal(looksLikeHtml('1 < 2 且 a>b'), false);
28
+ }],
29
+ ['write: markdown converted to html for client-side tools', () => {
30
+ const args = transformWriteArgs('tapd_create_story', {
31
+ name: 't',
32
+ description: '# 标题\n\n- a\n- b',
33
+ });
34
+ assert.equal(args.name, 't');
35
+ assert.match(args.description, /<h1>标题<\/h1>/);
36
+ assert.match(args.description, /<li>a<\/li>/);
37
+ }],
38
+ ['write: html passthrough unchanged (存量 HTML 零破坏)', () => {
39
+ const html = '<p>存量 <strong>HTML</strong></p>';
40
+ const args = transformWriteArgs('tapd_create_story', { description: html });
41
+ assert.equal(args.description, html);
42
+ }],
43
+ ['write: wiki markdown routed to server markdown_description', () => {
44
+ const args = transformWriteArgs('tapd_create_wiki', {
45
+ name: 'w',
46
+ description: '# wiki md',
47
+ });
48
+ assert.equal(args.description, undefined);
49
+ assert.equal(args.markdown_description, '# wiki md');
50
+ }],
51
+ ['write: wiki html passthrough keeps description', () => {
52
+ const html = '<p>wiki html</p>';
53
+ const args = transformWriteArgs('tapd_update_wiki', { id: '1', description: html });
54
+ assert.equal(args.description, html);
55
+ assert.equal(args.markdown_description, undefined);
56
+ }],
57
+ ['write: explicit markdown_description wins over converted description', () => {
58
+ const args = transformWriteArgs('tapd_create_wiki', {
59
+ name: 'w',
60
+ description: '# md from description',
61
+ markdown_description: '# explicit md',
62
+ });
63
+ assert.equal(args.markdown_description, '# explicit md');
64
+ assert.equal(args.description, undefined);
65
+ }],
66
+ ['write: switch off leaves args untouched', () => {
67
+ const md = '# 原样';
68
+ const out = withAutoOff(() => transformWriteArgs('tapd_create_story', { description: md }));
69
+ assert.equal(out.description, md);
70
+ const wiki = withAutoOff(() => transformWriteArgs('tapd_create_wiki', { description: md }));
71
+ assert.equal(wiki.description, md);
72
+ assert.equal(wiki.markdown_description, undefined);
73
+ }],
74
+ ['write: tools without richtext fields untouched', () => {
75
+ const args = transformWriteArgs('tapd_get_stories', { description: '# not a write tool' });
76
+ assert.equal(args.description, '# not a write tool');
77
+ }],
78
+ ['read: nested and array richtext fields converted to markdown', () => {
79
+ const data = {
80
+ data: {
81
+ Story: { id: '1', description: '<h1>标题</h1><p><strong>加粗</strong></p>' },
82
+ list: [{ id: '2', description: '<ul><li>项</li></ul>' }],
83
+ info: { Comments: [{ id: '3', description: '<p>评论 <code>代码</code></p>' }] },
84
+ },
85
+ };
86
+ const result = transformReadData(data);
87
+ assert.equal(result.data.Story.id, '1');
88
+ assert.match(result.data.Story.description, /# 标题/);
89
+ assert.match(result.data.Story.description, /\*\*加粗\*\*/);
90
+ assert.match((result.data.list[0].description), /\*\s+项/);
91
+ assert.match((result.data.info.Comments[0].description), /评论 `代码`/);
92
+ }],
93
+ ['read: plain-text and non-richtext fields untouched', () => {
94
+ const data = {
95
+ description: '纯文本没有标签',
96
+ name: 'a<b 的名字',
97
+ note: '<p>note 不在富文本清单</p>',
98
+ nested: { description: '' },
99
+ };
100
+ const result = transformReadData(data);
101
+ assert.equal(result.description, '纯文本没有标签');
102
+ assert.equal(result.name, 'a<b 的名字');
103
+ assert.equal(result.note, '<p>note 不在富文本清单</p>');
104
+ assert.equal(result.nested.description, '');
105
+ }],
106
+ ['read: switch off returns raw html', () => {
107
+ const data = { description: '<p>raw</p>' };
108
+ const result = withAutoOff(() => transformReadData(data));
109
+ assert.equal(result, data);
110
+ }],
111
+ ['read: gfm tables and fenced code survive', () => {
112
+ const html = '<table><thead><tr><th>列</th></tr></thead><tbody><tr><td>值</td></tr></tbody></table><pre><code>echo hi</code></pre>';
113
+ const md = transformReadData({ description: html });
114
+ assert.match(md.description, /\|\s*列\s*\|/);
115
+ assert.match(md.description, /```\necho hi\n```/);
116
+ }],
117
+ ['exec: write tool receives converted html at client', async () => {
118
+ delete process.env.TAPD_RICHTEXT_AUTO;
119
+ let captured;
120
+ const registry = new ToolRegistry();
121
+ registry.register([allTools.find(t => t.name === 'tapd_create_story')]);
122
+ const result = await registry.exec('tapd_create_story', { name: 'zzz-delete-me', description: '# hi', workspace_id: 39814312, owner: 'x', workitem_type_id: '1139814312001000001' }, { entry: 'mcp' }, () => ({
123
+ post: (_path, body) => {
124
+ captured = body;
125
+ return Promise.resolve({ status: 1, data: {} });
126
+ },
127
+ }));
128
+ assert.equal(result.ok, true);
129
+ assert.match(captured?.description, /<h1>hi<\/h1>/);
130
+ }],
131
+ ['exec: read tool returns markdown description', async () => {
132
+ delete process.env.TAPD_RICHTEXT_AUTO;
133
+ const registry = new ToolRegistry();
134
+ registry.register([allTools.find(t => t.name === 'tapd_get_stories')]);
135
+ const result = await registry.exec('tapd_get_stories', { workspace_id: 39814312 }, { entry: 'mcp' }, () => ({
136
+ get: () => Promise.resolve({ status: 1, data: [{ id: '1', description: '<p>富文本 <strong>加粗</strong></p>' }] }),
137
+ }));
138
+ assert.equal(result.ok, true);
139
+ const data = result.data;
140
+ assert.match(data.data[0].description, /富文本 \*\*加粗\*\*/);
141
+ }],
142
+ ['exec: switch off keeps raw html on both sides', async () => {
143
+ process.env.TAPD_RICHTEXT_AUTO = '0';
144
+ try {
145
+ const registry = new ToolRegistry();
146
+ registry.register([allTools.find(t => t.name === 'tapd_create_story')]);
147
+ let captured;
148
+ const result = await registry.exec('tapd_create_story', { name: 'zzz-delete-me', description: '# 原样', workspace_id: 39814312, owner: 'x', workitem_type_id: '1139814312001000001' }, { entry: 'cli' }, () => ({
149
+ post: (_path, body) => {
150
+ captured = body;
151
+ return Promise.resolve({ status: 1, data: {} });
152
+ },
153
+ }));
154
+ assert.equal(result.ok, true);
155
+ assert.equal(captured?.description, '# 原样');
156
+ }
157
+ finally {
158
+ delete process.env.TAPD_RICHTEXT_AUTO;
159
+ }
160
+ }],
161
+ ['roundtrip: md -> html(write) -> md(read) -> html stays stable', () => {
162
+ delete process.env.TAPD_RICHTEXT_AUTO;
163
+ const markdown = '# 标题\n\n段落 **加粗** `code`。\n\n- a\n- b\n\n| x | y |\n|--|--|\n| 1 | 2 |';
164
+ const written = transformWriteArgs('tapd_create_story', { description: markdown });
165
+ const html1 = written.description;
166
+ const readBack = transformReadData({ description: html1 });
167
+ const written2 = transformWriteArgs('tapd_create_story', { description: readBack.description });
168
+ assert.equal(written2.description, html1);
169
+ }],
170
+ ['manifests: generated write-field list matches live schema scan', () => {
171
+ const scanned = {};
172
+ for (const tool of allTools) {
173
+ if (!resolveWrite(tool))
174
+ continue;
175
+ const shape = tool.inputSchema.shape ?? {};
176
+ const fields = RICHTEXT_PARAM_FIELDS.filter(f => f in shape);
177
+ if (fields.length > 0)
178
+ scanned[tool.name] = fields;
179
+ }
180
+ assert.deepEqual(WRITE_RICHTEXT_FIELDS_BY_TOOL, scanned);
181
+ assert.equal(Object.keys(scanned).length >= 25, true);
182
+ for (const name of SERVER_MD_TOOLS) {
183
+ assert.ok(scanned[name]?.includes('description'), name);
184
+ assert.ok(scanned[name]?.includes('markdown_description'), name);
185
+ }
186
+ }],
187
+ ['manifests: read fields cover TAPD richtext naming convention', () => {
188
+ assert.deepEqual([...READ_RICHTEXT_FIELDS].sort(), ['description']);
189
+ }],
190
+ ];
191
+ let failed = 0;
192
+ for (const [name, check] of checks) {
193
+ try {
194
+ await check();
195
+ console.log(`PASS ${name}`);
196
+ }
197
+ catch (error) {
198
+ failed++;
199
+ console.error(`FAIL ${name}`);
200
+ console.error(` ${error instanceof Error ? error.message : String(error)}`);
201
+ }
202
+ }
203
+ if (failed > 0) {
204
+ console.error(`\n${failed}/${checks.length} failed`);
205
+ process.exitCode = 1;
206
+ }
207
+ else {
208
+ console.log(`\n${checks.length}/${checks.length} passed`);
209
+ }
210
+ //# sourceMappingURL=richtext.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"richtext.test.js","sourceRoot":"","sources":["../../src/registry/richtext.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDef } from '../types.js';
2
+ export declare function resolveWrite(tool: ToolDef): boolean;
3
+ //# sourceMappingURL=write-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-policy.d.ts","sourceRoot":"","sources":["../../src/registry/write-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAK3C,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAEnD"}
@@ -0,0 +1,5 @@
1
+ const WRITE_VERBS = /^(create|update|delete|add|copy|batch_update|save|remove|execute|lock|unlock|assign|bind|relate|link|submit|upload|set)_/;
2
+ export function resolveWrite(tool) {
3
+ return tool.write ?? WRITE_VERBS.test(tool.name.replace(/^tapd_/, ''));
4
+ }
5
+ //# sourceMappingURL=write-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-policy.js","sourceRoot":"","sources":["../../src/registry/write-policy.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GACf,0HAA0H,CAAC;AAE7H,MAAM,UAAU,YAAY,CAAC,IAAa;IACxC,OAAO,IAAI,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;AACzE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { ToolDef } from '../types.js';
2
+ export interface ToolSchema {
3
+ name: string;
4
+ description: string;
5
+ input_schema: Record<string, unknown>;
6
+ }
7
+ export type SchemaExportFormat = 'anthropic' | 'openai';
8
+ export interface SchemaFilter {
9
+ resource?: string;
10
+ }
11
+ export declare function exportSchemas(tools: ToolDef[], format: SchemaExportFormat, filter?: SchemaFilter): unknown;
12
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/schema/export.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA+BD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAO1G"}
@@ -0,0 +1,39 @@
1
+ import * as z4mini from 'zod/v4-mini';
2
+ import { zodToJsonSchema } from 'zod-to-json-schema';
3
+ import { deriveCommand } from '../registry/derive-command.js';
4
+ // 与 @modelcontextprotocol/sdk v3 分支的转换参数一致,保证与 tools/list 的 inputSchema 等价
5
+ const TO_JSON_SCHEMA_OPTIONS = {
6
+ strictUnions: true,
7
+ pipeStrategy: 'input',
8
+ };
9
+ // MCP 侧空 shape 会经 objectFromShape 落到 zod v4-mini 转换,产物无 additionalProperties,
10
+ // 此处走同一条路径保持字节级一致
11
+ function toInputSchema(inputSchema) {
12
+ const shape = inputSchema.shape;
13
+ if (shape && Object.keys(shape).length === 0) {
14
+ return z4mini.toJSONSchema(z4mini.object({}), { target: 'draft-7', io: 'input' });
15
+ }
16
+ return zodToJsonSchema(inputSchema, TO_JSON_SCHEMA_OPTIONS);
17
+ }
18
+ function toToolSchema(tool) {
19
+ return {
20
+ name: tool.name,
21
+ description: tool.description,
22
+ input_schema: toInputSchema(tool.inputSchema),
23
+ };
24
+ }
25
+ function applyFilter(tools, filter) {
26
+ if (!filter?.resource)
27
+ return tools;
28
+ return tools.filter(tool => deriveCommand(tool.name).resource === filter.resource);
29
+ }
30
+ export function exportSchemas(tools, format, filter) {
31
+ const list = applyFilter(tools, filter).map(toToolSchema);
32
+ if (format === 'anthropic')
33
+ return list;
34
+ return list.map(t => ({
35
+ type: 'function',
36
+ function: { name: t.name, description: t.description, parameters: t.input_schema },
37
+ }));
38
+ }
39
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/schema/export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAe9D,2EAA2E;AAC3E,MAAM,sBAAsB,GAAqD;IAC/E,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,OAAO;CACtB,CAAC;AAEF,8EAA8E;AAC9E,kBAAkB;AAClB,SAAS,aAAa,CAAC,WAAoB;IACzC,MAAM,KAAK,GAAI,WAAmD,CAAC,KAAK,CAAC;IACzE,IAAI,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,eAAe,CAAC,WAAwB,EAAE,sBAAsB,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,YAAY,CAAC,IAAa;IACjC,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,YAAY,EAAE,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAgB,EAAE,MAAqB;IAC1D,IAAI,CAAC,MAAM,EAAE,QAAQ;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAgB,EAAE,MAA0B,EAAE,MAAqB;IAC/F,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1D,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpB,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC,YAAY,EAAE;KACnF,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=export.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.test.d.ts","sourceRoot":"","sources":["../../src/schema/export.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
1
+ import assert from 'node:assert/strict';
2
+ import { z } from 'zod';
3
+ import { exportSchemas } from './export.js';
4
+ function makeTool(overrides) {
5
+ return {
6
+ description: '获取需求列表',
7
+ inputSchema: z.object({ id: z.string().describe('需求ID') }),
8
+ handler: () => Promise.resolve({ done: true }),
9
+ ...overrides,
10
+ };
11
+ }
12
+ const tools = [
13
+ makeTool({ name: 'tapd_get_stories', cli: { resource: 'story', action: 'list' } }),
14
+ makeTool({ name: 'tapd_create_story', cli: { resource: 'story', action: 'create' } }),
15
+ makeTool({ name: 'tapd_get_bugs', cli: { resource: 'bug', action: 'list' } }),
16
+ ];
17
+ const checks = [
18
+ ['anthropic format returns name/description/input_schema list', () => {
19
+ const result = exportSchemas(tools, 'anthropic');
20
+ assert.equal(result.length, 3);
21
+ const first = result[0];
22
+ assert.equal(first.name, 'tapd_get_stories');
23
+ assert.equal(first.description, '获取需求列表');
24
+ assert.equal(first.input_schema.type, 'object');
25
+ }],
26
+ ['input_schema converts zod object to JSON schema', () => {
27
+ const result = exportSchemas(tools, 'anthropic');
28
+ const schema = result[0].input_schema;
29
+ assert.equal(schema.properties.id.type, 'string');
30
+ assert.equal(schema.properties.id.description, '需求ID');
31
+ assert.deepEqual(schema.required, ['id']);
32
+ }],
33
+ ['openai format wraps in function calling shape', () => {
34
+ const result = exportSchemas(tools, 'openai');
35
+ assert.equal(result.length, 3);
36
+ const first = result[0];
37
+ assert.equal(first.type, 'function');
38
+ assert.equal(first.function.name, 'tapd_get_stories');
39
+ assert.equal(first.function.description, '获取需求列表');
40
+ assert.equal(first.function.parameters.type, 'object');
41
+ }],
42
+ ['filter.resource keeps only derived resource match', () => {
43
+ const result = exportSchemas(tools, 'anthropic', { resource: 'story' });
44
+ assert.deepEqual(result.map(t => t.name).sort(), ['tapd_create_story', 'tapd_get_stories']);
45
+ }],
46
+ ['no filter returns all tools', () => {
47
+ const result = exportSchemas(tools, 'openai', {});
48
+ assert.equal(result.length, 3);
49
+ }],
50
+ ];
51
+ let failed = 0;
52
+ for (const [name, check] of checks) {
53
+ try {
54
+ await check();
55
+ console.log(`PASS: ${name}`);
56
+ }
57
+ catch (error) {
58
+ failed++;
59
+ console.error(`FAIL: ${name}`);
60
+ console.error(error instanceof Error ? error.message : error);
61
+ }
62
+ }
63
+ if (failed > 0) {
64
+ console.error(`${failed}/${checks.length} checks failed`);
65
+ process.exit(1);
66
+ }
67
+ console.log(`${checks.length}/${checks.length} checks passed`);
68
+ //# sourceMappingURL=export.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.test.js","sourceRoot":"","sources":["../../src/schema/export.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type RouteKey = `${'GET' | 'POST'} ${string}`;
2
+ /**
3
+ * SDK route table: `METHOD /path` -> @opentapd/tapd-node-sdk method name.
4
+ * Covers every API path the 210 tool handlers call that exists in the SDK (1.68.0).
5
+ * Unlisted paths go through the original fetch path.
6
+ * Validate with `pnpm validate:sdk-routes` (fails on SDK upgrade drift).
7
+ */
8
+ export declare const SDK_ROUTES: Partial<Record<RouteKey, string>>;
9
+ //# sourceMappingURL=sdk-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk-routes.d.ts","sourceRoot":"","sources":["../src/sdk-routes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,GAAG,KAAK,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;AAErD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAgLxD,CAAC"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * SDK route table: `METHOD /path` -> @opentapd/tapd-node-sdk method name.
3
+ * Covers every API path the 210 tool handlers call that exists in the SDK (1.68.0).
4
+ * Unlisted paths go through the original fetch path.
5
+ * Validate with `pnpm validate:sdk-routes` (fails on SDK upgrade drift).
6
+ */
7
+ export const SDK_ROUTES = {
8
+ // attachments
9
+ 'GET /attachments': 'getAttachments',
10
+ 'GET /attachments/down': 'downloadAttachment',
11
+ // board-cards
12
+ 'GET /board_cards': 'getBoardCards',
13
+ // board-columns
14
+ 'GET /board_columns': 'getBoardColumns',
15
+ // bug-changes
16
+ 'GET /bug_changes': 'getBugChanges',
17
+ 'GET /bug_changes/count': 'getBugChangesCount',
18
+ // bugs
19
+ 'GET /bugs': 'getBugs',
20
+ 'GET /bugs/count': 'getBugsCount',
21
+ 'GET /bugs/custom_fields_settings': 'getBugCustomFieldsSettings',
22
+ 'GET /bugs/get_fields_info': 'getBugFieldsInfo',
23
+ 'GET /bugs/get_link_bugs': 'getLinkBugs',
24
+ 'GET /bugs/get_related_stories': 'getRelatedStories',
25
+ 'POST /bugs': 'addBug', // multiple SDK methods share this path (add/update equivalent, FSD §2.4#5)
26
+ // code-commit-infos
27
+ 'GET /code_commit_infos': 'getCodeCommitInfos',
28
+ // comments
29
+ 'GET /comments': 'getComments',
30
+ 'GET /comments/count': 'getCommentsCount',
31
+ 'POST /comments': 'addComment', // multiple SDK methods share this path (add/update equivalent, FSD §2.4#5)
32
+ // files
33
+ 'GET /files/get_image': 'getImage',
34
+ // iterations
35
+ 'GET /iterations': 'getIterations',
36
+ 'GET /iterations/count': 'getIterationsCount',
37
+ 'GET /iterations/custom_fields_settings': 'getIterationCustomFieldsSettings',
38
+ 'POST /iterations': 'addIteration', // multiple SDK methods share this path (add/update equivalent, FSD §2.4#5)
39
+ // launch-accessories
40
+ 'GET /launch_accessories': 'getLaunchAccessories',
41
+ // life-times
42
+ 'GET /life_times': 'getLifeTimes',
43
+ // mini-item-categories
44
+ 'GET /mini_item_categories': 'getMiniItemCategories',
45
+ // mini-item-changes
46
+ 'GET /mini_item_changes': 'getMiniItemChanges',
47
+ // mini-items
48
+ 'GET /mini_items': 'getMiniItems',
49
+ 'GET /mini_items/count': 'getMiniItemsCount',
50
+ 'POST /mini_items': 'addMiniItem', // multiple SDK methods share this path (add/update equivalent, FSD §2.4#5)
51
+ // releases
52
+ 'GET /releases': 'getReleases',
53
+ 'GET /releases/count': 'getReleasesCount',
54
+ 'POST /releases': 'addRelease', // multiple SDK methods share this path (add/update equivalent, FSD §2.4#5)
55
+ // roles
56
+ 'GET /roles': 'getRoles',
57
+ // stories
58
+ 'GET /stories': 'getStories',
59
+ 'GET /stories/count': 'getStoriesCount',
60
+ 'GET /stories/custom_fields_settings': 'getStoryCustomFieldsSettings',
61
+ 'GET /stories/get_link_stories': 'getLinkStories',
62
+ 'GET /stories/get_related_bugs': 'getStoryRelatedBugs',
63
+ 'POST /stories': 'addStory', // multiple SDK methods share this path (add/update equivalent, FSD §2.4#5)
64
+ 'POST /stories/add_story_link_relations': 'addStoryLinkRelations',
65
+ 'POST /stories/change_workitem_type': 'changeWorkitemType',
66
+ 'POST /stories/remove_story_link_relation': 'removeStoryLinkRelation',
67
+ // story-categories
68
+ 'GET /story_categories': 'getStoryCategories',
69
+ 'GET /story_categories/count': 'getStoryCategoriesCount',
70
+ // story-changes
71
+ 'GET /story_changes': 'getStoryChanges',
72
+ 'GET /story_changes/count': 'getStoryChangesCount',
73
+ // tapd-wikis
74
+ 'GET /tapd_wikis': 'getTapdWikis',
75
+ 'GET /tapd_wikis/count': 'getTapdWikisCount',
76
+ 'POST /tapd_wikis': 'addTapdWiki', // multiple SDK methods share this path (add/update equivalent, FSD §2.4#5)
77
+ // tapd-wikis-attachments
78
+ 'GET /tapd_wikis_attachments/count': 'getTapdWikisAttachmentsCount',
79
+ // tapd-wikis-drawios
80
+ 'GET /tapd_wikis_drawios': 'getTapdWikisDrawios',
81
+ // tapd-wikis-entity-permissions
82
+ 'GET /tapd_wikis_entity_permissions': 'getTapdWikisEntityPermissions',
83
+ // tapd-wikis-followers
84
+ 'GET /tapd_wikis_followers': 'getTapdWikisFollowers',
85
+ 'GET /tapd_wikis_followers/count': 'getTapdWikisFollowersCount',
86
+ // tapd-wikis-tags
87
+ 'GET /tapd_wikis_tags': 'getTapdWikisTags',
88
+ 'GET /tapd_wikis_tags/count': 'getTapdWikisTagsCount',
89
+ // task-changes
90
+ 'GET /task_changes': 'getTaskChanges',
91
+ 'GET /task_changes/count': 'getTaskChangesCount',
92
+ // tasks
93
+ 'GET /tasks': 'getTasks',
94
+ 'GET /tasks/count': 'getTasksCount',
95
+ 'GET /tasks/custom_fields_settings': 'getTaskCustomFieldsSettings',
96
+ 'GET /tasks/get_fields_info': 'getTaskFieldsInfo',
97
+ 'POST /tasks': 'addTask', // multiple SDK methods share this path (add/update equivalent, FSD §2.4#5)
98
+ // tcase-categories
99
+ 'GET /tcase_categories': 'getTcaseCategories',
100
+ 'GET /tcase_categories/count': 'getTcaseCategoriesCount',
101
+ 'POST /tcase_categories': 'addTcaseCategory',
102
+ // tcase-instance
103
+ 'GET /tcase_instance/result': 'getTcaseResult',
104
+ 'POST /tcase_instance/assign': 'assignTcaseInstance',
105
+ 'POST /tcase_instance/delete_tcase_story_relation': 'deleteTcaseStoryRelation',
106
+ 'POST /tcase_instance/execute': 'executeTcaseInstance',
107
+ 'POST /tcase_instance/remove_tcase': 'removeTcaseInstance',
108
+ // tcases
109
+ 'GET /tcases': 'getTcases',
110
+ 'GET /tcases/count': 'getTcasesCount',
111
+ 'GET /tcases/custom_fields_settings': 'getTcaseCustomFieldsSettings',
112
+ 'GET /tcases/get_fields_info': 'getTcaseFieldsInfo',
113
+ 'GET /tcases/get_story_by_tcase_id': 'getStoryByTcaseId',
114
+ 'POST /tcases': 'addTcase', // multiple SDK methods share this path (add/update equivalent, FSD §2.4#5)
115
+ // test-plans
116
+ 'GET /test_plans': 'getTestPlans',
117
+ 'GET /test_plans/count': 'getTestPlansCount',
118
+ 'GET /test_plans/details': 'getTestPlanDetails',
119
+ 'GET /test_plans/get_fields_info': 'getTestPlanFieldsInfo',
120
+ 'GET /test_plans/get_relative_stories': 'getTestPlanRelativeStories',
121
+ 'GET /test_plans/get_test_plan_tcase': 'getTestPlanTcases',
122
+ 'GET /test_plans/progress': 'getTestPlanProgress',
123
+ 'GET /test_plans/result_relation_bugs': 'getTestPlanBugs',
124
+ 'POST /test_plans': 'addTestPlan', // multiple SDK methods share this path (add/update equivalent, FSD §2.4#5)
125
+ 'POST /test_plans/create_story_relation': 'createStoryRelation',
126
+ 'POST /test_plans/create_tcase_relation': 'createTcaseRelation',
127
+ 'POST /test_plans/delete_story_relation': 'deleteStoryRelation',
128
+ // timesheets
129
+ 'GET /timesheets': 'getTimesheets',
130
+ 'GET /timesheets/count': 'getTimesheetsCount',
131
+ 'POST /timesheets': 'addTimesheet', // multiple SDK methods share this path (add/update equivalent, FSD §2.4#5)
132
+ // users
133
+ 'GET /users': 'getUsers',
134
+ // workflows
135
+ 'GET /workflows': 'getWorkflows',
136
+ 'GET /workflows/all_transitions': 'getWorkflowAllTransitions',
137
+ 'GET /workflows/first_step': 'getWorkflowFirstStep',
138
+ 'GET /workflows/last_steps': 'getWorkflowLastSteps',
139
+ 'GET /workflows/status_map': 'getWorkflowStatusMap',
140
+ // workitem-types
141
+ 'GET /workitem_types': 'getWorkitemTypes',
142
+ // workspaces
143
+ 'GET /workspaces/get_workspace_info': 'getWorkspaceInfo', // multiple SDK methods share this path (add/update equivalent, FSD §2.4#5)
144
+ 'GET /workspaces/sub_workspaces': 'getSubWorkspaces',
145
+ 'GET /workspaces/user_participant_projects': 'userParticipantProjects',
146
+ 'GET /workspaces/users': 'getWorkspaceUsers', // multiple SDK methods share this path (add/update equivalent, FSD §2.4#5)
147
+ };
148
+ //# sourceMappingURL=sdk-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk-routes.js","sourceRoot":"","sources":["../src/sdk-routes.ts"],"names":[],"mappings":"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"}