@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,190 @@
1
+ import { z } from 'zod';
2
+ import { TapdClient } from '../tapd-client.js';
3
+ export const iterationTools = [
4
+ {
5
+ name: "tapd_get_iterations",
6
+ description: "Get iterations with optional filters",
7
+ inputSchema: z.object({
8
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
9
+ id: z.string().optional().describe('Iteration ID, supports multi-ID query;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
10
+ name: z.string().optional().describe("Iteration title, supports fuzzy matching"),
11
+ description: z.string().optional().describe("Iteration description"),
12
+ status: z.string().optional().describe("Status: open/done or custom Chinese status"),
13
+ startdate: z.string().optional().describe("Start date, supports time query"),
14
+ enddate: z.string().optional().describe("End date, supports time query"),
15
+ creator: z.string().optional().describe("Creator"),
16
+ created: z.string().optional().describe("Creation time, supports time query"),
17
+ modified: z.string().optional().describe("Modification time, supports time query"),
18
+ completed: z.string().optional().describe("Completion time"),
19
+ workitem_type_id: z.string().optional().describe('Iteration category;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
20
+ plan_app_id: z.string().optional().describe('Plan application ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
21
+ locker: z.string().optional().describe("Locked by user"),
22
+ custom_field_one: z.string().optional().describe("Custom field 1 (supports 1-200)"),
23
+ limit: z.number().optional().describe("Return count limit, default 30, max 200"),
24
+ page: z.number().optional().describe("Page number, default 1"),
25
+ order: z.string().optional().describe("Sort order"),
26
+ fields: z.string().optional().describe("Specify return fields"),
27
+ }),
28
+ handler: async (client, params) => {
29
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
30
+ if (!workspaceId) {
31
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
32
+ }
33
+ return client.get("/iterations", { ...params, workspace_id: workspaceId });
34
+ },
35
+ },
36
+ {
37
+ name: "tapd_create_iteration",
38
+ description: "Create a new iteration",
39
+ inputSchema: z.object({
40
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
41
+ name: z.string().describe("Iteration name"),
42
+ startdate: z.string().optional().describe("Start date"),
43
+ enddate: z.string().optional().describe("End date"),
44
+ description: z.string().optional().describe("Iteration description"),
45
+ status: z.string().optional().describe("Status: open/done"),
46
+ creator: z.string().optional().describe("Creator (defaults to TAPD_NICK_NAME env, required by API)"),
47
+ workitem_type_id: z.string().optional().describe('Iteration category;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
48
+ plan_app_id: z.string().optional().describe('Plan application ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
49
+ entity_type: z.string().optional().describe("Entity type: iteration or release (default: iteration)"),
50
+ parent_id: z.string().optional().describe('Parent plan ID (for iteration under release);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
51
+ label: z.string().optional().describe("Label, multiple labels separated by |"),
52
+ custom_field_one: z.string().optional().describe("Custom field 1 (supports 1-200)"),
53
+ }),
54
+ handler: async (client, params) => {
55
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
56
+ if (!workspaceId) {
57
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
58
+ }
59
+ const finalParams = {
60
+ ...params,
61
+ workspace_id: workspaceId,
62
+ creator: params.creator ?? TapdClient.getNickName(),
63
+ };
64
+ return client.post("/iterations", finalParams);
65
+ },
66
+ },
67
+ {
68
+ name: "tapd_update_iteration",
69
+ description: "Update an existing iteration",
70
+ inputSchema: z.object({
71
+ id: z.string().describe('Iteration ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
72
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
73
+ name: z.string().optional().describe("Iteration name"),
74
+ startdate: z.string().optional().describe("Start date"),
75
+ enddate: z.string().optional().describe("End date"),
76
+ description: z.string().optional().describe("Iteration description"),
77
+ status: z.string().optional().describe("Status: open/done"),
78
+ label: z.string().optional().describe("Label, multiple labels separated by |"),
79
+ current_user: z.string().optional().describe("Current user for operation (defaults to TAPD_NICK_NAME env, required by API)"),
80
+ workitem_type_id: z.string().optional().describe('Iteration category;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
81
+ plan_app_id: z.string().optional().describe('Plan application ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
82
+ custom_field_one: z.string().optional().describe("Custom field 1 (supports 1-200)"),
83
+ }),
84
+ handler: async (client, params) => {
85
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
86
+ if (!workspaceId) {
87
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
88
+ }
89
+ const finalParams = {
90
+ ...params,
91
+ workspace_id: workspaceId,
92
+ current_user: params.current_user ?? TapdClient.getNickName(),
93
+ };
94
+ return client.post("/iterations", finalParams);
95
+ },
96
+ },
97
+ {
98
+ name: "tapd_get_iteration_count",
99
+ description: "Get count of iterations matching filters",
100
+ inputSchema: z.object({
101
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
102
+ name: z.string().optional().describe("Iteration title, supports fuzzy matching"),
103
+ status: z.string().optional().describe("Status: open/done or custom Chinese status"),
104
+ startdate: z.string().optional().describe("Start date, supports time query"),
105
+ enddate: z.string().optional().describe("End date, supports time query"),
106
+ creator: z.string().optional().describe("Creator"),
107
+ created: z.string().optional().describe("Creation time, supports time query"),
108
+ modified: z.string().optional().describe("Modification time, supports time query"),
109
+ completed: z.string().optional().describe("Completion time"),
110
+ workitem_type_id: z.string().optional().describe('Iteration category;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
111
+ plan_app_id: z.string().optional().describe('Plan application ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
112
+ locker: z.string().optional().describe("Locked by user"),
113
+ custom_field_one: z.string().optional().describe("Custom field 1 (supports 1-200)"),
114
+ }),
115
+ handler: async (client, params) => {
116
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
117
+ if (!workspaceId) {
118
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
119
+ }
120
+ return client.get("/iterations/count", { ...params, workspace_id: workspaceId });
121
+ },
122
+ },
123
+ // 迭代变更历史
124
+ {
125
+ name: "tapd_get_iteration_changes",
126
+ description: "获取迭代变更历史",
127
+ inputSchema: z.object({
128
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
129
+ iteration_id: z.string().optional().describe('迭代ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
130
+ field: z.string().optional().describe("变更字段"),
131
+ user: z.string().optional().describe("变更人"),
132
+ created: z.string().optional().describe("创建时间"),
133
+ limit: z.number().optional().describe("返回数量,默认30,最大200"),
134
+ page: z.number().optional().describe("页码,默认1"),
135
+ order: z.string().optional().describe("排序"),
136
+ fields: z.string().optional().describe("返回字段"),
137
+ }),
138
+ handler: async (client, params) => {
139
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
140
+ if (!workspaceId) {
141
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
142
+ }
143
+ return client.get("/iterations/changes", { ...params, workspace_id: workspaceId });
144
+ },
145
+ },
146
+ // 锁定/解锁
147
+ {
148
+ name: "tapd_lock_iteration",
149
+ description: "锁定迭代",
150
+ inputSchema: z.object({
151
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
152
+ id: z.string().describe('迭代ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
153
+ current_user: z.string().optional().describe("操作人(默认当前用户)"),
154
+ }),
155
+ handler: async (client, params) => {
156
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
157
+ if (!workspaceId) {
158
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
159
+ }
160
+ const finalParams = {
161
+ ...params,
162
+ workspace_id: workspaceId,
163
+ current_user: params.current_user ?? TapdClient.getNickName(),
164
+ };
165
+ return client.post("/iterations/lock", finalParams);
166
+ },
167
+ },
168
+ {
169
+ name: "tapd_unlock_iteration",
170
+ description: "解锁迭代",
171
+ inputSchema: z.object({
172
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
173
+ id: z.string().describe('迭代ID (必填);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
174
+ current_user: z.string().optional().describe("操作人(默认当前用户)"),
175
+ }),
176
+ handler: async (client, params) => {
177
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
178
+ if (!workspaceId) {
179
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
180
+ }
181
+ const finalParams = {
182
+ ...params,
183
+ workspace_id: workspaceId,
184
+ current_user: params.current_user ?? TapdClient.getNickName(),
185
+ };
186
+ return client.post("/iterations/unlock", finalParams);
187
+ },
188
+ },
189
+ ];
190
+ //# sourceMappingURL=iteration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iteration.js","sourceRoot":"","sources":["../../src/tools/iteration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=md-to-html.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md-to-html.test.d.ts","sourceRoot":"","sources":["../../src/tools/md-to-html.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,125 @@
1
+ import assert from 'node:assert/strict';
2
+ import { utilityTools } from './utility.js';
3
+ import { ToolRegistry } from '../registry/registry.js';
4
+ const mdToHtml = utilityTools.find(t => t.name === 'tapd_md_to_html');
5
+ const htmlToMd = utilityTools.find(t => t.name === 'tapd_html_to_md');
6
+ const fakeClient = {};
7
+ async function mdRender(content) {
8
+ const result = await mdToHtml.handler(fakeClient, { content });
9
+ return result.html;
10
+ }
11
+ async function mdFromHtml(html) {
12
+ const result = await htmlToMd.handler(fakeClient, { html });
13
+ return result.markdown;
14
+ }
15
+ const checks = [
16
+ ['md->html: headings h1-h4', async () => {
17
+ const html = await mdRender('# t1\n\n## t2\n\n### t3\n\n#### t4');
18
+ assert.ok(html.includes('<h1>t1</h1>'));
19
+ assert.ok(html.includes('<h2>t2</h2>'));
20
+ assert.ok(html.includes('<h3>t3</h3>'));
21
+ assert.ok(html.includes('<h4>t4</h4>'));
22
+ }],
23
+ ['md->html: paragraph, bold, italic, inline code', async () => {
24
+ const html = await mdRender('a **b** *c* `d`');
25
+ assert.ok(html.includes('<p>a <strong>b</strong> <em>c</em> <code>d</code></p>'));
26
+ }],
27
+ ['md->html: fenced code block', async () => {
28
+ const html = await mdRender('```js\nconst x = 1;\n```');
29
+ assert.match(html, /<pre><code class="language-js">const x = 1;\n<\/code><\/pre>/);
30
+ }],
31
+ ['md->html: ul, ol, blockquote', async () => {
32
+ const html = await mdRender('- a\n- b\n\n1. x\n2. y\n\n> q');
33
+ assert.match(html, /<ul>\n<li>a<\/li>\n<li>b<\/li>\n<\/ul>/);
34
+ assert.match(html, /<ol>\n<li>x<\/li>\n<li>y<\/li>\n<\/ol>/);
35
+ assert.match(html, /<blockquote>\n<p>q<\/p>\n<\/blockquote>/);
36
+ }],
37
+ ['md->html: gfm table', async () => {
38
+ const html = await mdRender('| a | b |\n|---|---|\n| 1 | 2 |');
39
+ assert.match(html, /<th>a<\/th>/);
40
+ assert.match(html, /<td>1<\/td>/);
41
+ assert.match(html, /<td>2<\/td>/);
42
+ }],
43
+ ['md->html: link and hr', async () => {
44
+ const html = await mdRender('[t](https://e.com)\n\n---');
45
+ assert.ok(html.includes('<a href="https://e.com">t</a>'));
46
+ assert.ok(html.includes('<hr>'));
47
+ }],
48
+ ['md->html: raw html escaped (html:false)', async () => {
49
+ const html = await mdRender('<script>x</script>');
50
+ assert.ok(html.includes('&lt;script&gt;x&lt;/script&gt;'));
51
+ assert.ok(!html.includes('<script>'));
52
+ }],
53
+ ['md->html: breaks single newline becomes <br>', async () => {
54
+ const html = await mdRender('l1\nl2');
55
+ assert.match(html, /<p>l1<br>\nl2<\/p>/);
56
+ }],
57
+ ['html->md: TAPD description structure', async () => {
58
+ const md = await mdFromHtml([
59
+ '<p><strong>背景</strong></p>',
60
+ '<p>订单同步<em>偶发</em>失败,需排查 <code>order_id</code>。</p>',
61
+ '<h3>方案</h3>',
62
+ '<ul><li>接入回调</li><li>重试 <strong>3</strong> 次</li></ul>',
63
+ '<table><thead><tr><th>字段</th><th>说明</th></tr></thead><tbody><tr><td>order_id</td><td>单号</td></tr></tbody></table>',
64
+ '<blockquote><p>注意:先灰度</p></blockquote>',
65
+ '<pre><code>curl /api/v1/orders</code></pre>',
66
+ ].join(''));
67
+ assert.ok(md.includes('**背景**'));
68
+ assert.ok(md.includes('_偶发_'));
69
+ assert.ok(md.includes('`order_id`'));
70
+ assert.ok(md.includes('### 方案'));
71
+ assert.match(md, /\*\s+接入回调/);
72
+ assert.ok(md.includes('**3** 次'));
73
+ assert.match(md, /\|\s*字段\s*\|\s*说明\s*\|/);
74
+ assert.match(md, /\|\s*order\\_id\s*\|\s*单号\s*\|/);
75
+ assert.ok(md.includes('> 注意:先灰度'));
76
+ assert.ok(md.includes('```\ncurl /api/v1/orders\n```'));
77
+ }],
78
+ ['html->md: br, hr, link, ordered list', async () => {
79
+ const md = await mdFromHtml('<p>line1<br>line2</p><hr><p><a href="https://e.com">t</a></p><ol><li>o1</li><li>o2</li></ol>');
80
+ assert.match(md, /line1 {2}\nline2/);
81
+ assert.ok(md.includes('* * *'));
82
+ assert.ok(md.includes('[t](https://e.com)'));
83
+ assert.match(md, /1\.\s+o1/);
84
+ assert.match(md, /2\.\s+o2/);
85
+ }],
86
+ ['roundtrip: md -> html -> md -> html stays equivalent', async () => {
87
+ const markdown = '# 标题\n\n段落 **加粗** 和 `code`。\n\n- a\n- b\n\n| x | y |\n|--|--|\n| 1 | 2 |\n\n> 引用';
88
+ const html1 = await mdRender(markdown);
89
+ const md2 = await mdFromHtml(html1);
90
+ const html2 = await mdRender(md2);
91
+ assert.equal(html2, html1);
92
+ }],
93
+ ['registry: both tools are read-only pure compute, exec without credentials', async () => {
94
+ const registry = new ToolRegistry();
95
+ registry.register(utilityTools);
96
+ const result = await registry.exec('tapd_md_to_html', { content: '# hi' }, { entry: 'cli', readOnly: true }, () => ({}));
97
+ assert.equal(result.ok, true);
98
+ assert.equal(result.data.html, '<h1>hi</h1>\n');
99
+ const back = await registry.exec('tapd_html_to_md', { html: '<h1>hi</h1>' }, { entry: 'cli', readOnly: true }, () => ({}));
100
+ assert.equal(back.ok, true);
101
+ assert.ok(back.data.markdown.includes('# hi'));
102
+ const missing = await registry.exec('tapd_md_to_html', {}, { entry: 'cli' }, () => ({}));
103
+ assert.equal(missing.error?.code, 'INVALID_ARGS');
104
+ }],
105
+ ];
106
+ let failed = 0;
107
+ for (const [name, check] of checks) {
108
+ try {
109
+ await check();
110
+ console.log(`PASS ${name}`);
111
+ }
112
+ catch (error) {
113
+ failed++;
114
+ console.error(`FAIL ${name}`);
115
+ console.error(` ${error instanceof Error ? error.message : String(error)}`);
116
+ }
117
+ }
118
+ if (failed > 0) {
119
+ console.error(`\n${failed}/${checks.length} failed`);
120
+ process.exitCode = 1;
121
+ }
122
+ else {
123
+ console.log(`\n${checks.length}/${checks.length} passed`);
124
+ }
125
+ //# sourceMappingURL=md-to-html.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md-to-html.test.js","sourceRoot":"","sources":["../../src/tools/md-to-html.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDef } from '../types.js';
2
+ export declare const miniCommentTools: ToolDef[];
3
+ //# sourceMappingURL=mini-comment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mini-comment.d.ts","sourceRoot":"","sources":["../../src/tools/mini-comment.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,eAAO,MAAM,gBAAgB,EAAE,OAAO,EAsErC,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { z } from 'zod';
2
+ import { TapdClient } from '../tapd-client.js';
3
+ export const miniCommentTools = [
4
+ {
5
+ name: 'tapd_mini_get_comments',
6
+ description: 'Get comments from mini workspace',
7
+ inputSchema: z.object({
8
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
9
+ id: z.string().optional().describe('Comment ID, supports multiple IDs;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
10
+ entry_id: z.string().optional().describe('Item ID the comment belongs to;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
11
+ author: z.string().optional().describe('Comment author'),
12
+ created: z.string().optional().describe('Creation time, supports time query'),
13
+ modified: z.string().optional().describe('Last modification time, supports time query'),
14
+ root_id: z.string().optional().describe('Root comment ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
15
+ reply_id: z.string().optional().describe('Reply comment ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
16
+ limit: z.number().optional().describe('Return count, default 30, max 200'),
17
+ page: z.number().optional().describe('Page number, default 1'),
18
+ order: z.string().optional().describe('Sort order, e.g., "created desc"'),
19
+ fields: z.string().optional().describe('Comma-separated list of fields to return'),
20
+ }),
21
+ handler: async (client, params) => {
22
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
23
+ if (!workspaceId) {
24
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
25
+ }
26
+ return client.get('/comments', { ...params, workspace_id: workspaceId });
27
+ },
28
+ },
29
+ {
30
+ name: 'tapd_mini_create_comment',
31
+ description: 'Create a comment in mini workspace',
32
+ inputSchema: z.object({
33
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
34
+ entry_id: z.string().describe('Item ID the comment belongs to (required);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
35
+ description: z.string().describe('Comment content (required, wrap with <p> tags)'),
36
+ author: z.string().optional().describe('Comment author (defaults to TAPD_NICK_NAME env)'),
37
+ root_id: z.string().optional().describe('Root comment ID (for replies);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
38
+ reply_id: z.string().optional().describe('Reply comment ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
39
+ }),
40
+ handler: async (client, params) => {
41
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
42
+ if (!workspaceId) {
43
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
44
+ }
45
+ const nickName = TapdClient.getNickName();
46
+ const finalParams = {
47
+ ...params,
48
+ workspace_id: workspaceId,
49
+ author: params.author ?? nickName,
50
+ };
51
+ return client.post('/comments', finalParams);
52
+ },
53
+ },
54
+ {
55
+ name: 'tapd_mini_get_comment_count',
56
+ description: 'Get the count of comments in mini workspace',
57
+ inputSchema: z.object({
58
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
59
+ id: z.string().optional().describe('Comment ID, supports multiple IDs;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
60
+ entry_id: z.string().optional().describe('Item ID the comment belongs to;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
61
+ author: z.string().optional().describe('Comment author'),
62
+ created: z.string().optional().describe('Creation time, supports time query'),
63
+ modified: z.string().optional().describe('Last modification time, supports time query'),
64
+ }),
65
+ handler: async (client, params) => {
66
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
67
+ if (!workspaceId) {
68
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
69
+ }
70
+ return client.get('/comments/count', { ...params, workspace_id: workspaceId });
71
+ },
72
+ },
73
+ ];
74
+ //# sourceMappingURL=mini-comment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mini-comment.js","sourceRoot":"","sources":["../../src/tools/mini-comment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,CAAC,MAAM,gBAAgB,GAAc;IACzC;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,kCAAkC;QAC/C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAChE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gFAAgF,CAAC;YACpH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;YACvH,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACxD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YAC7E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YACvF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;YACvG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;YACzG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YAC1E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;YAC9D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;YACzE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;SACnF,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YAChC,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;YACD,OAAO,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3E,CAAC;KACF;IACD;QACE,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,oCAAoC;QACjD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAChE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wFAAwF,CAAC;YACvH,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;YAClF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;YACzF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4EAA4E,CAAC;YACrH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;SAC1G,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YAChC,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;YACD,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;YAC1C,MAAM,WAAW,GAAG;gBAClB,GAAG,MAAM;gBACT,YAAY,EAAE,WAAW;gBACzB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,QAAQ;aAClC,CAAC;YACF,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC/C,CAAC;KACF;IACD;QACE,IAAI,EAAE,6BAA6B;QACnC,WAAW,EAAE,6CAA6C;QAC1D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAChE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gFAAgF,CAAC;YACpH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;YACvH,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACxD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YAC7E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;SACxF,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YAChC,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;YACD,OAAO,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC;QACjF,CAAC;KACF;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDef } from '../types.js';
2
+ export declare const miniItemTools: ToolDef[];
3
+ //# sourceMappingURL=mini-item.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mini-item.d.ts","sourceRoot":"","sources":["../../src/tools/mini-item.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,eAAO,MAAM,aAAa,EAAE,OAAO,EAkKlC,CAAC"}
@@ -0,0 +1,166 @@
1
+ import { z } from 'zod';
2
+ import { TapdClient } from '../tapd-client.js';
3
+ export const miniItemTools = [
4
+ {
5
+ name: 'tapd_mini_get_items',
6
+ description: 'Get mini workspace items (轻协作工作项)',
7
+ inputSchema: z.object({
8
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
9
+ id: z.string().optional().describe('Item ID, supports multiple IDs;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
10
+ name: z.string().optional().describe('Item title, supports fuzzy matching'),
11
+ priority: z.string().optional().describe('Priority, supports enum query'),
12
+ status: z.string().optional().describe('Status (open/done), supports enum query'),
13
+ label: z.string().optional().describe('Label, supports enum query'),
14
+ owner: z.string().optional().describe('Owner, supports fuzzy matching'),
15
+ creator: z.string().optional().describe('Creator, supports multiple users query'),
16
+ is_archived: z.boolean().optional().describe('Is archived'),
17
+ begin: z.string().optional().describe('Estimated start date, supports time query'),
18
+ due: z.string().optional().describe('Estimated end date, supports time query'),
19
+ created: z.string().optional().describe('Creation time, supports time query'),
20
+ modified: z.string().optional().describe('Last modification time, supports time query'),
21
+ completed: z.string().optional().describe('Completion time, supports time query'),
22
+ progress_manual: z.number().optional().describe('Progress'),
23
+ category_id: z.string().optional().describe('Category ID, supports enum query (-1 for uncategorized);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
24
+ parent_id: z.string().optional().describe('Parent item ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
25
+ children_id: z.string().optional().describe('Child item ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
26
+ description: z.string().optional().describe('Description, supports fuzzy matching'),
27
+ limit: z.number().optional().describe('Return count, default 30, max 200'),
28
+ page: z.number().optional().describe('Page number, default 1'),
29
+ order: z.string().optional().describe('Sort order, e.g., "created desc"'),
30
+ fields: z.string().optional().describe('Comma-separated list of fields to return'),
31
+ }),
32
+ handler: async (client, params) => {
33
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
34
+ if (!workspaceId) {
35
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
36
+ }
37
+ return client.get('/mini_items', { ...params, workspace_id: workspaceId });
38
+ },
39
+ },
40
+ {
41
+ name: 'tapd_mini_create_item',
42
+ description: 'Create a new item in mini workspace',
43
+ inputSchema: z.object({
44
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
45
+ name: z.string().describe('Item title (required)'),
46
+ priority: z.string().optional().describe('Priority'),
47
+ owner: z.string().optional().describe('Owner'),
48
+ creator: z.string().optional().describe('Creator (defaults to TAPD_NICK_NAME env)'),
49
+ is_archived: z.boolean().optional().describe('Is archived'),
50
+ begin: z.string().optional().describe('Estimated start date (YYYY-MM-DD)'),
51
+ due: z.string().optional().describe('Estimated end date (YYYY-MM-DD)'),
52
+ parent_id: z.string().optional().describe('Parent item ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
53
+ category_id: z.string().optional().describe('Category ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
54
+ description: z.string().optional().describe('Description'),
55
+ label: z.string().optional().describe('Labels, separated by |'),
56
+ }),
57
+ handler: async (client, params) => {
58
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
59
+ if (!workspaceId) {
60
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
61
+ }
62
+ const nickName = TapdClient.getNickName();
63
+ const finalParams = {
64
+ ...params,
65
+ workspace_id: workspaceId,
66
+ creator: params.creator ?? nickName,
67
+ };
68
+ return client.post('/mini_items', finalParams);
69
+ },
70
+ },
71
+ {
72
+ name: 'tapd_mini_update_item',
73
+ description: 'Update an existing item in mini workspace',
74
+ inputSchema: z.object({
75
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
76
+ id: z.string().describe('Item ID (required);必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
77
+ name: z.string().optional().describe('Item title'),
78
+ priority: z.string().optional().describe('Priority'),
79
+ owner: z.string().optional().describe('Owner'),
80
+ is_archived: z.boolean().optional().describe('Is archived'),
81
+ begin: z.string().optional().describe('Estimated start date (YYYY-MM-DD)'),
82
+ due: z.string().optional().describe('Estimated end date (YYYY-MM-DD)'),
83
+ parent_id: z.string().optional().describe('Parent item ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
84
+ category_id: z.string().optional().describe('Category ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
85
+ description: z.string().optional().describe('Description'),
86
+ label: z.string().optional().describe('Labels, separated by |'),
87
+ status: z.string().optional().describe('Status (open/done)'),
88
+ progress_manual: z.number().optional().describe('Progress'),
89
+ }),
90
+ handler: async (client, params) => {
91
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
92
+ if (!workspaceId) {
93
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
94
+ }
95
+ return client.post('/mini_items/update', { ...params, workspace_id: workspaceId });
96
+ },
97
+ },
98
+ {
99
+ name: 'tapd_mini_get_item_count',
100
+ description: 'Get the count of mini workspace items',
101
+ inputSchema: z.object({
102
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
103
+ id: z.string().optional().describe('Item ID, supports multiple IDs;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
104
+ name: z.string().optional().describe('Item title, supports fuzzy matching'),
105
+ priority: z.string().optional().describe('Priority, supports enum query'),
106
+ status: z.string().optional().describe('Status (open/done), supports enum query'),
107
+ label: z.string().optional().describe('Label, supports enum query'),
108
+ owner: z.string().optional().describe('Owner, supports fuzzy matching'),
109
+ creator: z.string().optional().describe('Creator, supports multiple users query'),
110
+ is_archived: z.boolean().optional().describe('Is archived'),
111
+ begin: z.string().optional().describe('Estimated start date, supports time query'),
112
+ due: z.string().optional().describe('Estimated end date, supports time query'),
113
+ created: z.string().optional().describe('Creation time, supports time query'),
114
+ modified: z.string().optional().describe('Last modification time, supports time query'),
115
+ completed: z.string().optional().describe('Completion time, supports time query'),
116
+ category_id: z.string().optional().describe('Category ID, supports enum query;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
117
+ }),
118
+ handler: async (client, params) => {
119
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
120
+ if (!workspaceId) {
121
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
122
+ }
123
+ return client.get('/mini_items/count', { ...params, workspace_id: workspaceId });
124
+ },
125
+ },
126
+ {
127
+ name: 'tapd_mini_get_categories',
128
+ description: 'Get mini workspace item categories',
129
+ inputSchema: z.object({
130
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
131
+ id: z.string().optional().describe('Category ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
132
+ name: z.string().optional().describe('Category name'),
133
+ limit: z.number().optional().describe('Return count, default 30, max 200'),
134
+ page: z.number().optional().describe('Page number, default 1'),
135
+ }),
136
+ handler: async (client, params) => {
137
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
138
+ if (!workspaceId) {
139
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
140
+ }
141
+ return client.get('/mini_item_categories', { ...params, workspace_id: workspaceId });
142
+ },
143
+ },
144
+ {
145
+ name: 'tapd_mini_get_changes',
146
+ description: 'Get mini workspace item changes/history',
147
+ inputSchema: z.object({
148
+ workspace_id: z.number().optional().describe('项目ID(可省略,使用默认配置)'),
149
+ id: z.string().optional().describe('Change ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
150
+ item_id: z.string().optional().describe('Item ID;必须以字符串(带引号)传递,禁止传数值,20 位 ID 超出 JS 安全整数范围会丢精度'),
151
+ created: z.string().optional().describe('Creation time, supports time query'),
152
+ limit: z.number().optional().describe('Return count, default 30, max 200'),
153
+ page: z.number().optional().describe('Page number, default 1'),
154
+ order: z.string().optional().describe('Sort order'),
155
+ fields: z.string().optional().describe('Comma-separated list of fields to return'),
156
+ }),
157
+ handler: async (client, params) => {
158
+ const workspaceId = params.workspace_id ?? TapdClient.getDefaultWorkspaceId();
159
+ if (!workspaceId) {
160
+ throw new Error('workspace_id is required (either provide it or set TAPD_DEFAULT_WORKSPACE_ID env)');
161
+ }
162
+ return client.get('/mini_item_changes', { ...params, workspace_id: workspaceId });
163
+ },
164
+ },
165
+ ];
166
+ //# sourceMappingURL=mini-item.js.map