@zentao-hub/mcp 0.3.0

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 (71) hide show
  1. package/.env.example +13 -0
  2. package/LICENSE +21 -0
  3. package/README.md +231 -0
  4. package/README.zh-CN.md +225 -0
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.js +61 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/tools/bugs.d.ts +2 -0
  9. package/dist/tools/bugs.js +387 -0
  10. package/dist/tools/bugs.js.map +1 -0
  11. package/dist/tools/builds.d.ts +2 -0
  12. package/dist/tools/builds.js +54 -0
  13. package/dist/tools/builds.js.map +1 -0
  14. package/dist/tools/cases.d.ts +2 -0
  15. package/dist/tools/cases.js +121 -0
  16. package/dist/tools/cases.js.map +1 -0
  17. package/dist/tools/docs.d.ts +2 -0
  18. package/dist/tools/docs.js +75 -0
  19. package/dist/tools/docs.js.map +1 -0
  20. package/dist/tools/efforts.d.ts +2 -0
  21. package/dist/tools/efforts.js +65 -0
  22. package/dist/tools/efforts.js.map +1 -0
  23. package/dist/tools/executions.d.ts +2 -0
  24. package/dist/tools/executions.js +118 -0
  25. package/dist/tools/executions.js.map +1 -0
  26. package/dist/tools/helpers.d.ts +36 -0
  27. package/dist/tools/helpers.js +255 -0
  28. package/dist/tools/helpers.js.map +1 -0
  29. package/dist/tools/index.d.ts +4 -0
  30. package/dist/tools/index.js +44 -0
  31. package/dist/tools/index.js.map +1 -0
  32. package/dist/tools/issues.d.ts +2 -0
  33. package/dist/tools/issues.js +89 -0
  34. package/dist/tools/issues.js.map +1 -0
  35. package/dist/tools/products.d.ts +2 -0
  36. package/dist/tools/products.js +110 -0
  37. package/dist/tools/products.js.map +1 -0
  38. package/dist/tools/programs.d.ts +2 -0
  39. package/dist/tools/programs.js +46 -0
  40. package/dist/tools/programs.js.map +1 -0
  41. package/dist/tools/projects.d.ts +2 -0
  42. package/dist/tools/projects.js +80 -0
  43. package/dist/tools/projects.js.map +1 -0
  44. package/dist/tools/releases.d.ts +2 -0
  45. package/dist/tools/releases.js +46 -0
  46. package/dist/tools/releases.js.map +1 -0
  47. package/dist/tools/repos.d.ts +2 -0
  48. package/dist/tools/repos.js +42 -0
  49. package/dist/tools/repos.js.map +1 -0
  50. package/dist/tools/request.d.ts +2 -0
  51. package/dist/tools/request.js +41 -0
  52. package/dist/tools/request.js.map +1 -0
  53. package/dist/tools/risks.d.ts +2 -0
  54. package/dist/tools/risks.js +69 -0
  55. package/dist/tools/risks.js.map +1 -0
  56. package/dist/tools/stories.d.ts +2 -0
  57. package/dist/tools/stories.js +153 -0
  58. package/dist/tools/stories.js.map +1 -0
  59. package/dist/tools/tasks.d.ts +2 -0
  60. package/dist/tools/tasks.js +205 -0
  61. package/dist/tools/tasks.js.map +1 -0
  62. package/dist/tools/testreports.d.ts +2 -0
  63. package/dist/tools/testreports.js +47 -0
  64. package/dist/tools/testreports.js.map +1 -0
  65. package/dist/tools/todos.d.ts +2 -0
  66. package/dist/tools/todos.js +70 -0
  67. package/dist/tools/todos.js.map +1 -0
  68. package/dist/tools/users.d.ts +2 -0
  69. package/dist/tools/users.js +59 -0
  70. package/dist/tools/users.js.map +1 -0
  71. package/package.json +59 -0
@@ -0,0 +1,153 @@
1
+ import { z } from "zod";
2
+ import { STORY_SUMMARY_KEYS, defineTool, extractList, extractTotal, paginationShape, pickDefined, summarize, } from "./helpers.js";
3
+ const STORY_SOURCES = ["customer", "user", "po", "market", "research", "competitor", "company", "other"];
4
+ const STORY_CLOSE_REASONS = [
5
+ "done",
6
+ "subdivided",
7
+ "duplicate",
8
+ "postponed",
9
+ "willnotdo",
10
+ "cancel",
11
+ "bydesign",
12
+ ];
13
+ export function buildStoryTools(ctx) {
14
+ const { client } = ctx;
15
+ return {
16
+ list_product_stories: defineTool({
17
+ description: "List stories in a product. Filter by status or assignee. Stories drive feature scope in ZenTao.",
18
+ schema: z.object({
19
+ productId: z.number().int().positive(),
20
+ status: z.enum(["active", "changed", "draft", "closed", "all"]).optional(),
21
+ assignedTo: z.string().optional(),
22
+ ...paginationShape,
23
+ }),
24
+ handler: async (args) => {
25
+ const payload = await client.stories.listByProduct(args.productId, {
26
+ status: args.status,
27
+ assignedTo: args.assignedTo,
28
+ limit: args.limit ?? 20,
29
+ page: args.page,
30
+ });
31
+ const stories = extractList(payload).map((s) => summarize(s, STORY_SUMMARY_KEYS));
32
+ return { total: extractTotal(payload) ?? stories.length, stories };
33
+ },
34
+ }),
35
+ get_story: defineTool({
36
+ description: "Fetch full details of a story (spec, verification criteria, linked cases, …).",
37
+ schema: z.object({ storyId: z.number().int().positive() }),
38
+ handler: async (args) => client.stories.get(args.storyId),
39
+ }),
40
+ create_story: defineTool({
41
+ description: "Create a new story in a product. Required: productId, title. spec / verify are HTML.",
42
+ schema: z.object({
43
+ productId: z.number().int().positive(),
44
+ title: z.string().min(1),
45
+ branch: z.number().int().optional(),
46
+ module: z.number().int().optional(),
47
+ plan: z.number().int().optional(),
48
+ source: z.enum(STORY_SOURCES).optional(),
49
+ pri: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]).optional(),
50
+ estimate: z.number().nonnegative().optional().describe("Estimated hours."),
51
+ spec: z.string().optional().describe("Specification (HTML allowed)."),
52
+ verify: z.string().optional().describe("Verification criteria (HTML allowed)."),
53
+ keywords: z.string().optional(),
54
+ assignedTo: z.string().optional(),
55
+ }),
56
+ handler: async (args) => {
57
+ const { productId, ...rest } = args;
58
+ return client.stories.create(productId, pickDefined(rest));
59
+ },
60
+ }),
61
+ update_story: defineTool({
62
+ description: "Update a story's editable fields. Use change_story for spec/verify revisions that need a change record.",
63
+ schema: z.object({
64
+ storyId: z.number().int().positive(),
65
+ title: z.string().optional(),
66
+ pri: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]).optional(),
67
+ estimate: z.number().nonnegative().optional(),
68
+ module: z.number().int().optional(),
69
+ plan: z.number().int().optional(),
70
+ keywords: z.string().optional(),
71
+ }),
72
+ handler: async (args) => {
73
+ const { storyId, ...rest } = args;
74
+ return client.stories.update(storyId, pickDefined(rest));
75
+ },
76
+ }),
77
+ change_story: defineTool({
78
+ description: "Submit a change to spec / verify. Creates a story-change record and bumps the story version.",
79
+ schema: z.object({
80
+ storyId: z.number().int().positive(),
81
+ spec: z.string().optional(),
82
+ verify: z.string().optional(),
83
+ comment: z.string().optional(),
84
+ }),
85
+ handler: async (args) => {
86
+ const { storyId, ...rest } = args;
87
+ return client.stories.change(storyId, pickDefined(rest));
88
+ },
89
+ }),
90
+ review_story: defineTool({
91
+ description: "Review a draft / changed story (pass / revert / clarify / reject).",
92
+ schema: z.object({
93
+ storyId: z.number().int().positive(),
94
+ result: z.enum(["pass", "revert", "clarify", "reject"]),
95
+ preVersion: z.number().int().optional().describe("Story version being reviewed; defaults to current."),
96
+ comment: z.string().optional(),
97
+ closedReason: z.enum(STORY_CLOSE_REASONS).optional().describe("Required when result='reject'."),
98
+ }),
99
+ handler: async (args) => {
100
+ const { storyId, ...rest } = args;
101
+ return client.stories.review(storyId, pickDefined(rest));
102
+ },
103
+ }),
104
+ close_story: defineTool({
105
+ description: "Close a story with a reason.",
106
+ schema: z.object({
107
+ storyId: z.number().int().positive(),
108
+ closedReason: z.enum(STORY_CLOSE_REASONS),
109
+ duplicateStory: z.number().int().positive().optional().describe("Required when closedReason='duplicate'."),
110
+ comment: z.string().optional(),
111
+ }),
112
+ handler: async (args) => {
113
+ if (args.closedReason === "duplicate" && !args.duplicateStory) {
114
+ throw new Error("closedReason='duplicate' requires duplicateStory to be set");
115
+ }
116
+ const { storyId, ...rest } = args;
117
+ return client.stories.close(storyId, pickDefined(rest));
118
+ },
119
+ }),
120
+ activate_story: defineTool({
121
+ description: "Re-activate a closed story.",
122
+ schema: z.object({
123
+ storyId: z.number().int().positive(),
124
+ assignedTo: z.string().optional(),
125
+ comment: z.string().optional(),
126
+ }),
127
+ handler: async (args) => client.stories.activate(args.storyId, pickDefined({ assignedTo: args.assignedTo, comment: args.comment })),
128
+ }),
129
+ assign_story: defineTool({
130
+ description: "Reassign a story to another account.",
131
+ schema: z.object({
132
+ storyId: z.number().int().positive(),
133
+ assignedTo: z.string().min(1),
134
+ comment: z.string().optional(),
135
+ }),
136
+ handler: async (args) => client.stories.assignTo(args.storyId, pickDefined({ assignedTo: args.assignedTo, comment: args.comment })),
137
+ }),
138
+ delete_story: defineTool({
139
+ description: "Delete a story. Irreversible.",
140
+ schema: z.object({ storyId: z.number().int().positive() }),
141
+ handler: async (args) => client.stories.delete(args.storyId),
142
+ }),
143
+ add_story_comment: defineTool({
144
+ description: "Append a comment to a story.",
145
+ schema: z.object({
146
+ storyId: z.number().int().positive(),
147
+ comment: z.string().min(1),
148
+ }),
149
+ handler: async (args) => client.stories.addComment(args.storyId, args.comment),
150
+ }),
151
+ };
152
+ }
153
+ //# sourceMappingURL=stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stories.js","sourceRoot":"","sources":["../../src/tools/stories.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type ToolDef, type ToolFactoryCtx } from "./helpers.js";
2
+ export declare function buildTaskTools(ctx: ToolFactoryCtx): Record<string, ToolDef>;
@@ -0,0 +1,205 @@
1
+ import { z } from "zod";
2
+ import { TASK_SUMMARY_KEYS, defineTool, extractList, extractTotal, pickDefined, summarize, } from "./helpers.js";
3
+ const TASK_TYPES = [
4
+ "design",
5
+ "devel",
6
+ "test",
7
+ "study",
8
+ "discuss",
9
+ "ui",
10
+ "affair",
11
+ "misc",
12
+ "review",
13
+ ];
14
+ const TASK_CLOSE_REASONS = ["done", "cancel", "bydesign", "duplicate", "postponed", "willnotdo"];
15
+ export function buildTaskTools(ctx) {
16
+ const { client } = ctx;
17
+ return {
18
+ get_task: defineTool({
19
+ description: "Fetch full details for a task (subtasks, estimate / consumed / left, effort logs).",
20
+ schema: z.object({ taskId: z.number().int().positive() }),
21
+ handler: async (args) => client.tasks.get(args.taskId),
22
+ }),
23
+ list_my_tasks: defineTool({
24
+ description: "List tasks assigned to the authenticated user within ONE execution. Mirrors list_my_bugs.",
25
+ schema: z.object({
26
+ executionId: z.number().int().positive(),
27
+ status: z.enum(["wait", "doing", "done", "pause", "cancel", "closed", "all"]).optional(),
28
+ limit: z.number().int().min(1).max(200).optional(),
29
+ maxScan: z.number().int().min(50).max(10000).optional(),
30
+ }),
31
+ handler: async (args) => {
32
+ const account = await client.getAccount();
33
+ const statusArg = args.status ?? "doing";
34
+ const wantStatus = statusArg === "all" ? undefined : statusArg;
35
+ const limit = args.limit ?? 20;
36
+ const maxScan = args.maxScan ?? 1000;
37
+ const pageSize = 200;
38
+ const matched = [];
39
+ let scanned = 0;
40
+ let totalInExec = 0;
41
+ for (let page = 1; scanned < maxScan; page++) {
42
+ const payload = await client.tasks.listByExecution(args.executionId, {
43
+ limit: pageSize,
44
+ page,
45
+ });
46
+ const batch = extractList(payload).map((t) => t);
47
+ totalInExec = extractTotal(payload) ?? totalInExec;
48
+ if (batch.length === 0)
49
+ break;
50
+ scanned += batch.length;
51
+ for (const t of batch) {
52
+ const at = t.assignedTo;
53
+ const atAccount = typeof at === "string" ? at : at && typeof at === "object" ? at.account : undefined;
54
+ if (atAccount !== account)
55
+ continue;
56
+ if (wantStatus && t.status !== wantStatus)
57
+ continue;
58
+ matched.push(summarize(t, TASK_SUMMARY_KEYS));
59
+ if (matched.length >= limit)
60
+ break;
61
+ }
62
+ if (matched.length >= limit)
63
+ break;
64
+ if (batch.length < pageSize)
65
+ break;
66
+ }
67
+ return {
68
+ total: matched.length,
69
+ tasks: matched,
70
+ scanned,
71
+ totalInExec,
72
+ account,
73
+ truncated: scanned >= maxScan && matched.length < limit,
74
+ };
75
+ },
76
+ }),
77
+ create_task: defineTool({
78
+ description: "Create a task in an execution.",
79
+ schema: z.object({
80
+ executionId: z.number().int().positive(),
81
+ name: z.string().min(1),
82
+ type: z.enum(TASK_TYPES).optional(),
83
+ story: z.number().int().optional().describe("Linked story ID."),
84
+ module: z.number().int().optional(),
85
+ assignedTo: z.union([z.string(), z.array(z.string())]).optional().describe("Single account or multiple for team task."),
86
+ pri: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]).optional(),
87
+ estimate: z.number().nonnegative().optional(),
88
+ desc: z.string().optional(),
89
+ deadline: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
90
+ }),
91
+ handler: async (args) => {
92
+ const { executionId, ...rest } = args;
93
+ return client.tasks.create(executionId, pickDefined(rest));
94
+ },
95
+ }),
96
+ update_task: defineTool({
97
+ description: "Update task fields. Use start_task / finish_task / close_task / pause_task / activate_task for state transitions.",
98
+ schema: z.object({
99
+ taskId: z.number().int().positive(),
100
+ name: z.string().optional(),
101
+ type: z.enum(TASK_TYPES).optional(),
102
+ pri: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]).optional(),
103
+ estimate: z.number().nonnegative().optional(),
104
+ left: z.number().nonnegative().optional(),
105
+ consumed: z.number().nonnegative().optional(),
106
+ desc: z.string().optional(),
107
+ deadline: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
108
+ }),
109
+ handler: async (args) => {
110
+ const { taskId, ...rest } = args;
111
+ return client.tasks.update(taskId, pickDefined(rest));
112
+ },
113
+ }),
114
+ start_task: defineTool({
115
+ description: "Start a task (wait → doing).",
116
+ schema: z.object({
117
+ taskId: z.number().int().positive(),
118
+ consumed: z.number().nonnegative().optional(),
119
+ left: z.number().nonnegative().optional(),
120
+ comment: z.string().optional(),
121
+ }),
122
+ handler: async (args) => {
123
+ const { taskId, ...rest } = args;
124
+ return client.tasks.start(taskId, pickDefined(rest));
125
+ },
126
+ }),
127
+ finish_task: defineTool({
128
+ description: "Mark a task finished (doing → done).",
129
+ schema: z.object({
130
+ taskId: z.number().int().positive(),
131
+ consumed: z.number().nonnegative().optional(),
132
+ currentConsumed: z.number().nonnegative().optional().describe("Hours logged for this finish action."),
133
+ assignedTo: z.string().optional(),
134
+ comment: z.string().optional(),
135
+ finishedDate: z.string().regex(/^\d{4}-\d{2}-\d{2}( \d{2}:\d{2}:\d{2})?$/).optional(),
136
+ }),
137
+ handler: async (args) => {
138
+ const { taskId, ...rest } = args;
139
+ return client.tasks.finish(taskId, pickDefined(rest));
140
+ },
141
+ }),
142
+ pause_task: defineTool({
143
+ description: "Pause an in-flight task.",
144
+ schema: z.object({ taskId: z.number().int().positive(), comment: z.string().optional() }),
145
+ handler: async (args) => client.tasks.pause(args.taskId, pickDefined({ comment: args.comment })),
146
+ }),
147
+ activate_task: defineTool({
148
+ description: "Re-activate a paused / closed / cancelled task.",
149
+ schema: z.object({
150
+ taskId: z.number().int().positive(),
151
+ left: z.number().nonnegative().optional(),
152
+ assignedTo: z.string().optional(),
153
+ comment: z.string().optional(),
154
+ }),
155
+ handler: async (args) => {
156
+ const { taskId, ...rest } = args;
157
+ return client.tasks.activate(taskId, pickDefined(rest));
158
+ },
159
+ }),
160
+ close_task: defineTool({
161
+ description: "Close a task with a reason.",
162
+ schema: z.object({
163
+ taskId: z.number().int().positive(),
164
+ closedReason: z.enum(TASK_CLOSE_REASONS).optional(),
165
+ comment: z.string().optional(),
166
+ }),
167
+ handler: async (args) => {
168
+ const { taskId, ...rest } = args;
169
+ return client.tasks.close(taskId, pickDefined(rest));
170
+ },
171
+ }),
172
+ cancel_task: defineTool({
173
+ description: "Cancel a task.",
174
+ schema: z.object({ taskId: z.number().int().positive(), comment: z.string().optional() }),
175
+ handler: async (args) => client.tasks.cancel(args.taskId, pickDefined({ comment: args.comment })),
176
+ }),
177
+ assign_task: defineTool({
178
+ description: "Reassign a task.",
179
+ schema: z.object({
180
+ taskId: z.number().int().positive(),
181
+ assignedTo: z.string().min(1),
182
+ left: z.number().nonnegative().optional(),
183
+ comment: z.string().optional(),
184
+ }),
185
+ handler: async (args) => {
186
+ const { taskId, ...rest } = args;
187
+ return client.tasks.assignTo(taskId, pickDefined(rest));
188
+ },
189
+ }),
190
+ delete_task: defineTool({
191
+ description: "Delete a task. Irreversible.",
192
+ schema: z.object({ taskId: z.number().int().positive() }),
193
+ handler: async (args) => client.tasks.delete(args.taskId),
194
+ }),
195
+ add_task_comment: defineTool({
196
+ description: "Append a comment to a task.",
197
+ schema: z.object({
198
+ taskId: z.number().int().positive(),
199
+ comment: z.string().min(1),
200
+ }),
201
+ handler: async (args) => client.tasks.addComment(args.taskId, args.comment),
202
+ }),
203
+ };
204
+ }
205
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type ToolDef, type ToolFactoryCtx } from "./helpers.js";
2
+ export declare function buildTestReportTools(ctx: ToolFactoryCtx): Record<string, ToolDef>;
@@ -0,0 +1,47 @@
1
+ import { z } from "zod";
2
+ import { defineTool, extractList, extractTotal, paginationShape, pickDefined, } from "./helpers.js";
3
+ export function buildTestReportTools(ctx) {
4
+ const { client } = ctx;
5
+ return {
6
+ list_product_testreports: defineTool({
7
+ description: "List test reports of a product.",
8
+ schema: z.object({ productId: z.number().int().positive(), ...paginationShape }),
9
+ handler: async (args) => {
10
+ const payload = await client.testreports.listByProduct(args.productId, {
11
+ limit: args.limit ?? 20,
12
+ page: args.page,
13
+ });
14
+ return { total: extractTotal(payload) ?? extractList(payload).length, testreports: extractList(payload) };
15
+ },
16
+ }),
17
+ get_testreport: defineTool({
18
+ description: "Fetch a test report's full details.",
19
+ schema: z.object({ testreportId: z.number().int().positive() }),
20
+ handler: async (args) => client.testreports.get(args.testreportId),
21
+ }),
22
+ create_testreport: defineTool({
23
+ description: "Create a test report under a product.",
24
+ schema: z.object({
25
+ productId: z.number().int().positive(),
26
+ title: z.string().min(1),
27
+ begin: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
28
+ end: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
29
+ owner: z.string().optional(),
30
+ report: z.string().optional().describe("Report body (HTML allowed)."),
31
+ execution: z.number().int().optional(),
32
+ builds: z.array(z.number().int().positive()).optional(),
33
+ stories: z.array(z.number().int().positive()).optional(),
34
+ }),
35
+ handler: async (args) => {
36
+ const { productId, ...rest } = args;
37
+ return client.testreports.create(productId, pickDefined(rest));
38
+ },
39
+ }),
40
+ delete_testreport: defineTool({
41
+ description: "Delete a test report. Irreversible.",
42
+ schema: z.object({ testreportId: z.number().int().positive() }),
43
+ handler: async (args) => client.testreports.delete(args.testreportId),
44
+ }),
45
+ };
46
+ }
47
+ //# sourceMappingURL=testreports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testreports.js","sourceRoot":"","sources":["../../src/tools/testreports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type ToolDef, type ToolFactoryCtx } from "./helpers.js";
2
+ export declare function buildTodoTools(ctx: ToolFactoryCtx): Record<string, ToolDef>;
@@ -0,0 +1,70 @@
1
+ import { z } from "zod";
2
+ import { defineTool, extractList, extractTotal, paginationShape, pickDefined, } from "./helpers.js";
3
+ const TODO_TYPES = ["custom", "bug", "task", "story", "feedback", "review"];
4
+ export function buildTodoTools(ctx) {
5
+ const { client } = ctx;
6
+ return {
7
+ list_todos: defineTool({
8
+ description: "List the authenticated user's personal todos.",
9
+ schema: z.object({
10
+ status: z.enum(["wait", "doing", "done", "closed", "all"]).optional(),
11
+ date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
12
+ ...paginationShape,
13
+ }),
14
+ handler: async (args) => {
15
+ const payload = await client.todos.list({
16
+ status: args.status,
17
+ date: args.date,
18
+ limit: args.limit ?? 20,
19
+ page: args.page,
20
+ });
21
+ return { total: extractTotal(payload) ?? extractList(payload).length, todos: extractList(payload) };
22
+ },
23
+ }),
24
+ get_todo: defineTool({
25
+ description: "Fetch a single todo.",
26
+ schema: z.object({ todoId: z.number().int().positive() }),
27
+ handler: async (args) => client.todos.get(args.todoId),
28
+ }),
29
+ create_todo: defineTool({
30
+ description: "Create a personal todo.",
31
+ schema: z.object({
32
+ name: z.string().min(1),
33
+ type: z.enum(TODO_TYPES).optional().describe("Defaults to 'custom'."),
34
+ pri: z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]).optional(),
35
+ date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
36
+ begin: z.string().regex(/^\d{2}:\d{2}(:\d{2})?$/).optional(),
37
+ end: z.string().regex(/^\d{2}:\d{2}(:\d{2})?$/).optional(),
38
+ desc: z.string().optional(),
39
+ objectID: z.number().int().positive().optional().describe("Linked object ID when type is bug/task/story."),
40
+ }),
41
+ handler: async (args) => client.todos.create(pickDefined(args)),
42
+ }),
43
+ update_todo: defineTool({
44
+ description: "Update a todo.",
45
+ schema: z.object({
46
+ todoId: z.number().int().positive(),
47
+ name: z.string().optional(),
48
+ pri: z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]).optional(),
49
+ date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
50
+ desc: z.string().optional(),
51
+ status: z.enum(["wait", "doing", "done", "closed"]).optional(),
52
+ }),
53
+ handler: async (args) => {
54
+ const { todoId, ...rest } = args;
55
+ return client.todos.update(todoId, pickDefined(rest));
56
+ },
57
+ }),
58
+ finish_todo: defineTool({
59
+ description: "Mark a todo as done.",
60
+ schema: z.object({ todoId: z.number().int().positive() }),
61
+ handler: async (args) => client.todos.finish(args.todoId),
62
+ }),
63
+ delete_todo: defineTool({
64
+ description: "Delete a todo. Irreversible.",
65
+ schema: z.object({ todoId: z.number().int().positive() }),
66
+ handler: async (args) => client.todos.delete(args.todoId),
67
+ }),
68
+ };
69
+ }
70
+ //# sourceMappingURL=todos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todos.js","sourceRoot":"","sources":["../../src/tools/todos.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type ToolDef, type ToolFactoryCtx } from "./helpers.js";
2
+ export declare function buildUserTools(ctx: ToolFactoryCtx): Record<string, ToolDef>;
@@ -0,0 +1,59 @@
1
+ import { z } from "zod";
2
+ import { USER_SUMMARY_KEYS, defineTool, extractList, extractTotal, paginationShape, summarize, } from "./helpers.js";
3
+ export function buildUserTools(ctx) {
4
+ const { client } = ctx;
5
+ return {
6
+ whoami: defineTool({
7
+ description: "Return the account name the server is acting as (from ZENTAO_USERNAME, or auto-detected via /user when only ZENTAO_TOKEN is set). Useful for debugging assignment filters.",
8
+ schema: z.object({}),
9
+ handler: async () => {
10
+ const account = await client.getAccount();
11
+ return { account };
12
+ },
13
+ }),
14
+ list_users: defineTool({
15
+ description: "List all users in the ZenTao instance.",
16
+ schema: z.object({
17
+ dept: z.number().int().optional().describe("Filter by department ID."),
18
+ ...paginationShape,
19
+ }),
20
+ handler: async (args) => {
21
+ const payload = await client.users.list({
22
+ dept: args.dept,
23
+ limit: args.limit ?? 50,
24
+ page: args.page,
25
+ });
26
+ const users = extractList(payload).map((u) => summarize(u, USER_SUMMARY_KEYS));
27
+ return { total: extractTotal(payload) ?? users.length, users };
28
+ },
29
+ }),
30
+ get_user: defineTool({
31
+ description: "Fetch one user's profile by account name.",
32
+ schema: z.object({ account: z.string().min(1).describe("ZenTao account name (not numeric ID).") }),
33
+ handler: async (args) => client.users.get(args.account),
34
+ }),
35
+ list_departments: defineTool({
36
+ description: "List organizational departments.",
37
+ schema: z.object({ ...paginationShape }),
38
+ handler: async (args) => {
39
+ const payload = await client.users.listDepartments({
40
+ limit: args.limit ?? 50,
41
+ page: args.page,
42
+ });
43
+ return { total: extractTotal(payload) ?? extractList(payload).length, departments: extractList(payload) };
44
+ },
45
+ }),
46
+ list_department_users: defineTool({
47
+ description: "List users in one department.",
48
+ schema: z.object({ departmentId: z.number().int().positive(), ...paginationShape }),
49
+ handler: async (args) => {
50
+ const payload = await client.users.listByDepartment(args.departmentId, {
51
+ limit: args.limit ?? 50,
52
+ page: args.page,
53
+ });
54
+ return { total: extractTotal(payload) ?? extractList(payload).length, users: extractList(payload) };
55
+ },
56
+ }),
57
+ };
58
+ }
59
+ //# sourceMappingURL=users.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"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"}