@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.
- package/.env.example +13 -0
- package/LICENSE +21 -0
- package/README.md +231 -0
- package/README.zh-CN.md +225 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/bugs.d.ts +2 -0
- package/dist/tools/bugs.js +387 -0
- package/dist/tools/bugs.js.map +1 -0
- package/dist/tools/builds.d.ts +2 -0
- package/dist/tools/builds.js +54 -0
- package/dist/tools/builds.js.map +1 -0
- package/dist/tools/cases.d.ts +2 -0
- package/dist/tools/cases.js +121 -0
- package/dist/tools/cases.js.map +1 -0
- package/dist/tools/docs.d.ts +2 -0
- package/dist/tools/docs.js +75 -0
- package/dist/tools/docs.js.map +1 -0
- package/dist/tools/efforts.d.ts +2 -0
- package/dist/tools/efforts.js +65 -0
- package/dist/tools/efforts.js.map +1 -0
- package/dist/tools/executions.d.ts +2 -0
- package/dist/tools/executions.js +118 -0
- package/dist/tools/executions.js.map +1 -0
- package/dist/tools/helpers.d.ts +36 -0
- package/dist/tools/helpers.js +255 -0
- package/dist/tools/helpers.js.map +1 -0
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.js +44 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/issues.d.ts +2 -0
- package/dist/tools/issues.js +89 -0
- package/dist/tools/issues.js.map +1 -0
- package/dist/tools/products.d.ts +2 -0
- package/dist/tools/products.js +110 -0
- package/dist/tools/products.js.map +1 -0
- package/dist/tools/programs.d.ts +2 -0
- package/dist/tools/programs.js +46 -0
- package/dist/tools/programs.js.map +1 -0
- package/dist/tools/projects.d.ts +2 -0
- package/dist/tools/projects.js +80 -0
- package/dist/tools/projects.js.map +1 -0
- package/dist/tools/releases.d.ts +2 -0
- package/dist/tools/releases.js +46 -0
- package/dist/tools/releases.js.map +1 -0
- package/dist/tools/repos.d.ts +2 -0
- package/dist/tools/repos.js +42 -0
- package/dist/tools/repos.js.map +1 -0
- package/dist/tools/request.d.ts +2 -0
- package/dist/tools/request.js +41 -0
- package/dist/tools/request.js.map +1 -0
- package/dist/tools/risks.d.ts +2 -0
- package/dist/tools/risks.js +69 -0
- package/dist/tools/risks.js.map +1 -0
- package/dist/tools/stories.d.ts +2 -0
- package/dist/tools/stories.js +153 -0
- package/dist/tools/stories.js.map +1 -0
- package/dist/tools/tasks.d.ts +2 -0
- package/dist/tools/tasks.js +205 -0
- package/dist/tools/tasks.js.map +1 -0
- package/dist/tools/testreports.d.ts +2 -0
- package/dist/tools/testreports.js +47 -0
- package/dist/tools/testreports.js.map +1 -0
- package/dist/tools/todos.d.ts +2 -0
- package/dist/tools/todos.js +70 -0
- package/dist/tools/todos.js.map +1 -0
- package/dist/tools/users.d.ts +2 -0
- package/dist/tools/users.js +59 -0
- package/dist/tools/users.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { defineTool, extractList, extractTotal, paginationShape, pickDefined, } from "./helpers.js";
|
|
3
|
+
const ISSUE_TYPES = ["design", "quality", "schedule", "cost", "scope", "resource", "comm", "other"];
|
|
4
|
+
export function buildIssueTools(ctx) {
|
|
5
|
+
const { client } = ctx;
|
|
6
|
+
return {
|
|
7
|
+
list_project_issues: defineTool({
|
|
8
|
+
description: "List issues raised inside a project (waterfall/IPD models track issues separately from bugs).",
|
|
9
|
+
schema: z.object({
|
|
10
|
+
projectId: z.number().int().positive(),
|
|
11
|
+
status: z.enum(["active", "resolved", "closed", "all"]).optional(),
|
|
12
|
+
...paginationShape,
|
|
13
|
+
}),
|
|
14
|
+
handler: async (args) => {
|
|
15
|
+
const payload = await client.issues.listByProject(args.projectId, {
|
|
16
|
+
status: args.status,
|
|
17
|
+
limit: args.limit ?? 20,
|
|
18
|
+
page: args.page,
|
|
19
|
+
});
|
|
20
|
+
return { total: extractTotal(payload) ?? extractList(payload).length, issues: extractList(payload) };
|
|
21
|
+
},
|
|
22
|
+
}),
|
|
23
|
+
get_issue: defineTool({
|
|
24
|
+
description: "Fetch an issue's full details.",
|
|
25
|
+
schema: z.object({ issueId: z.number().int().positive() }),
|
|
26
|
+
handler: async (args) => client.issues.get(args.issueId),
|
|
27
|
+
}),
|
|
28
|
+
create_issue: defineTool({
|
|
29
|
+
description: "Raise a new issue under a project.",
|
|
30
|
+
schema: z.object({
|
|
31
|
+
projectId: z.number().int().positive(),
|
|
32
|
+
title: z.string().min(1),
|
|
33
|
+
type: z.enum(ISSUE_TYPES).optional(),
|
|
34
|
+
severity: z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]).optional(),
|
|
35
|
+
pri: z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]).optional(),
|
|
36
|
+
desc: z.string().optional(),
|
|
37
|
+
assignedTo: z.string().optional(),
|
|
38
|
+
deadline: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
39
|
+
keywords: z.string().optional(),
|
|
40
|
+
}),
|
|
41
|
+
handler: async (args) => {
|
|
42
|
+
const { projectId, ...rest } = args;
|
|
43
|
+
return client.issues.create(projectId, pickDefined(rest));
|
|
44
|
+
},
|
|
45
|
+
}),
|
|
46
|
+
update_issue: defineTool({
|
|
47
|
+
description: "Update an issue's editable fields.",
|
|
48
|
+
schema: z.object({
|
|
49
|
+
issueId: z.number().int().positive(),
|
|
50
|
+
title: z.string().optional(),
|
|
51
|
+
type: z.enum(ISSUE_TYPES).optional(),
|
|
52
|
+
severity: z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]).optional(),
|
|
53
|
+
pri: z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]).optional(),
|
|
54
|
+
desc: z.string().optional(),
|
|
55
|
+
deadline: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
56
|
+
}),
|
|
57
|
+
handler: async (args) => {
|
|
58
|
+
const { issueId, ...rest } = args;
|
|
59
|
+
return client.issues.update(issueId, pickDefined(rest));
|
|
60
|
+
},
|
|
61
|
+
}),
|
|
62
|
+
resolve_issue: defineTool({
|
|
63
|
+
description: "Mark an issue as resolved.",
|
|
64
|
+
schema: z.object({
|
|
65
|
+
issueId: z.number().int().positive(),
|
|
66
|
+
resolution: z.string().optional(),
|
|
67
|
+
comment: z.string().optional(),
|
|
68
|
+
}),
|
|
69
|
+
handler: async (args) => {
|
|
70
|
+
const { issueId, ...rest } = args;
|
|
71
|
+
return client.issues.resolve(issueId, pickDefined(rest));
|
|
72
|
+
},
|
|
73
|
+
}),
|
|
74
|
+
close_issue: defineTool({
|
|
75
|
+
description: "Close an issue.",
|
|
76
|
+
schema: z.object({
|
|
77
|
+
issueId: z.number().int().positive(),
|
|
78
|
+
comment: z.string().optional(),
|
|
79
|
+
}),
|
|
80
|
+
handler: async (args) => client.issues.close(args.issueId, pickDefined({ comment: args.comment })),
|
|
81
|
+
}),
|
|
82
|
+
delete_issue: defineTool({
|
|
83
|
+
description: "Delete an issue. Irreversible.",
|
|
84
|
+
schema: z.object({ issueId: z.number().int().positive() }),
|
|
85
|
+
handler: async (args) => client.issues.delete(args.issueId),
|
|
86
|
+
}),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=issues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/tools/issues.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { PRODUCT_SUMMARY_KEYS, defineTool, extractList, extractTotal, paginationShape, pickDefined, summarize, } from "./helpers.js";
|
|
3
|
+
const PRODUCT_TYPES = ["normal", "branch", "platform"];
|
|
4
|
+
export function buildProductTools(ctx) {
|
|
5
|
+
const { client } = ctx;
|
|
6
|
+
return {
|
|
7
|
+
list_products: defineTool({
|
|
8
|
+
description: "List products visible to the authenticated user. Use this first to discover product IDs — most ZenTao bug / story / build / release queries are product-scoped.",
|
|
9
|
+
schema: z.object({
|
|
10
|
+
status: z.enum(["normal", "closed", "all"]).optional().describe("Default 'normal'."),
|
|
11
|
+
...paginationShape,
|
|
12
|
+
}),
|
|
13
|
+
handler: async (args) => {
|
|
14
|
+
const payload = await client.products.list({
|
|
15
|
+
status: args.status,
|
|
16
|
+
limit: args.limit ?? 20,
|
|
17
|
+
page: args.page,
|
|
18
|
+
});
|
|
19
|
+
const products = extractList(payload).map((p) => summarize(p, PRODUCT_SUMMARY_KEYS));
|
|
20
|
+
return { total: extractTotal(payload) ?? products.length, products };
|
|
21
|
+
},
|
|
22
|
+
}),
|
|
23
|
+
get_product: defineTool({
|
|
24
|
+
description: "Fetch full details for a product (line, program, owners, branches, …).",
|
|
25
|
+
schema: z.object({ productId: z.number().int().positive() }),
|
|
26
|
+
handler: async (args) => client.products.get(args.productId),
|
|
27
|
+
}),
|
|
28
|
+
create_product: defineTool({
|
|
29
|
+
description: "Create a new product. Requires name + code; PO/QD/RD are owner accounts.",
|
|
30
|
+
schema: z.object({
|
|
31
|
+
name: z.string().min(1),
|
|
32
|
+
code: z.string().min(1).describe("Short code, often used as path slug."),
|
|
33
|
+
program: z.number().int().optional(),
|
|
34
|
+
line: z.number().int().optional(),
|
|
35
|
+
type: z.enum(PRODUCT_TYPES).optional(),
|
|
36
|
+
desc: z.string().optional(),
|
|
37
|
+
PO: z.string().optional().describe("Product owner account."),
|
|
38
|
+
QD: z.string().optional().describe("QA owner account."),
|
|
39
|
+
RD: z.string().optional().describe("Dev owner account."),
|
|
40
|
+
acl: z.enum(["open", "private", "custom"]).optional(),
|
|
41
|
+
}),
|
|
42
|
+
handler: async (args) => client.products.create(pickDefined(args)),
|
|
43
|
+
}),
|
|
44
|
+
update_product: defineTool({
|
|
45
|
+
description: "Update product fields. Pass only the fields you want to change.",
|
|
46
|
+
schema: z.object({
|
|
47
|
+
productId: z.number().int().positive(),
|
|
48
|
+
name: z.string().optional(),
|
|
49
|
+
code: z.string().optional(),
|
|
50
|
+
program: z.number().int().optional(),
|
|
51
|
+
line: z.number().int().optional(),
|
|
52
|
+
desc: z.string().optional(),
|
|
53
|
+
PO: z.string().optional(),
|
|
54
|
+
QD: z.string().optional(),
|
|
55
|
+
RD: z.string().optional(),
|
|
56
|
+
status: z.enum(["normal", "closed"]).optional(),
|
|
57
|
+
acl: z.enum(["open", "private", "custom"]).optional(),
|
|
58
|
+
}),
|
|
59
|
+
handler: async (args) => {
|
|
60
|
+
const { productId, ...rest } = args;
|
|
61
|
+
return client.products.update(productId, pickDefined(rest));
|
|
62
|
+
},
|
|
63
|
+
}),
|
|
64
|
+
delete_product: defineTool({
|
|
65
|
+
description: "Delete a product. Irreversible.",
|
|
66
|
+
schema: z.object({ productId: z.number().int().positive() }),
|
|
67
|
+
handler: async (args) => client.products.delete(args.productId),
|
|
68
|
+
}),
|
|
69
|
+
list_product_branches: defineTool({
|
|
70
|
+
description: "List branches of a multi-branch (or platform) product.",
|
|
71
|
+
schema: z.object({ productId: z.number().int().positive(), ...paginationShape }),
|
|
72
|
+
handler: async (args) => {
|
|
73
|
+
const payload = await client.products.listBranches(args.productId, {
|
|
74
|
+
limit: args.limit ?? 20,
|
|
75
|
+
page: args.page,
|
|
76
|
+
});
|
|
77
|
+
return { total: extractTotal(payload) ?? extractList(payload).length, branches: extractList(payload) };
|
|
78
|
+
},
|
|
79
|
+
}),
|
|
80
|
+
list_product_modules: defineTool({
|
|
81
|
+
description: "List the module tree of a product. type defaults to 'story'; can be 'bug', 'case', 'doc', etc.",
|
|
82
|
+
schema: z.object({
|
|
83
|
+
productId: z.number().int().positive(),
|
|
84
|
+
type: z.enum(["story", "bug", "case", "doc", "task"]).optional(),
|
|
85
|
+
branch: z.number().int().optional(),
|
|
86
|
+
}),
|
|
87
|
+
handler: async (args) => client.products.listModules(args.productId, {
|
|
88
|
+
type: args.type,
|
|
89
|
+
branch: args.branch,
|
|
90
|
+
}),
|
|
91
|
+
}),
|
|
92
|
+
list_product_plans: defineTool({
|
|
93
|
+
description: "List release plans of a product. Plans group stories / cases / builds into a planned release.",
|
|
94
|
+
schema: z.object({ productId: z.number().int().positive(), ...paginationShape }),
|
|
95
|
+
handler: async (args) => client.products.listPlans(args.productId, {
|
|
96
|
+
limit: args.limit ?? 20,
|
|
97
|
+
page: args.page,
|
|
98
|
+
}),
|
|
99
|
+
}),
|
|
100
|
+
list_product_executions: defineTool({
|
|
101
|
+
description: "List executions (sprints / iterations) attached to a product.",
|
|
102
|
+
schema: z.object({ productId: z.number().int().positive(), ...paginationShape }),
|
|
103
|
+
handler: async (args) => client.products.listExecutions(args.productId, {
|
|
104
|
+
limit: args.limit ?? 20,
|
|
105
|
+
page: args.page,
|
|
106
|
+
}),
|
|
107
|
+
}),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=products.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"products.js","sourceRoot":"","sources":["../../src/tools/products.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { defineTool, extractList, extractTotal, paginationShape, pickDefined, } from "./helpers.js";
|
|
3
|
+
export function buildProgramTools(ctx) {
|
|
4
|
+
const { client } = ctx;
|
|
5
|
+
return {
|
|
6
|
+
list_programs: defineTool({
|
|
7
|
+
description: "List programs (top-of-hierarchy container; a program holds projects, which hold executions).",
|
|
8
|
+
schema: z.object({
|
|
9
|
+
status: z.enum(["wait", "doing", "suspended", "closed", "all"]).optional(),
|
|
10
|
+
...paginationShape,
|
|
11
|
+
}),
|
|
12
|
+
handler: async (args) => {
|
|
13
|
+
const payload = await client.programs.list({
|
|
14
|
+
status: args.status,
|
|
15
|
+
limit: args.limit ?? 20,
|
|
16
|
+
page: args.page,
|
|
17
|
+
});
|
|
18
|
+
return { total: extractTotal(payload) ?? extractList(payload).length, programs: extractList(payload) };
|
|
19
|
+
},
|
|
20
|
+
}),
|
|
21
|
+
get_program: defineTool({
|
|
22
|
+
description: "Fetch a program's full details.",
|
|
23
|
+
schema: z.object({ programId: z.number().int().positive() }),
|
|
24
|
+
handler: async (args) => client.programs.get(args.programId),
|
|
25
|
+
}),
|
|
26
|
+
create_program: defineTool({
|
|
27
|
+
description: "Create a program.",
|
|
28
|
+
schema: z.object({
|
|
29
|
+
name: z.string().min(1),
|
|
30
|
+
begin: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
31
|
+
end: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
32
|
+
PM: z.string().optional(),
|
|
33
|
+
parent: z.number().int().optional(),
|
|
34
|
+
desc: z.string().optional(),
|
|
35
|
+
acl: z.enum(["open", "private", "custom"]).optional(),
|
|
36
|
+
}),
|
|
37
|
+
handler: async (args) => client.programs.create(pickDefined(args)),
|
|
38
|
+
}),
|
|
39
|
+
delete_program: defineTool({
|
|
40
|
+
description: "Delete a program. Irreversible.",
|
|
41
|
+
schema: z.object({ programId: z.number().int().positive() }),
|
|
42
|
+
handler: async (args) => client.programs.delete(args.programId),
|
|
43
|
+
}),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=programs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"programs.js","sourceRoot":"","sources":["../../src/tools/programs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { PROJECT_SUMMARY_KEYS, defineTool, extractList, extractTotal, paginationShape, pickDefined, summarize, } from "./helpers.js";
|
|
3
|
+
const PROJECT_MODELS = ["scrum", "waterfall", "kanban", "agileplus", "waterfallplus", "ipd"];
|
|
4
|
+
export function buildProjectTools(ctx) {
|
|
5
|
+
const { client } = ctx;
|
|
6
|
+
return {
|
|
7
|
+
list_projects: defineTool({
|
|
8
|
+
description: "List projects (top-level deliverable container, may hold multiple executions).",
|
|
9
|
+
schema: z.object({
|
|
10
|
+
status: z.enum(["wait", "doing", "suspended", "closed", "all"]).optional(),
|
|
11
|
+
...paginationShape,
|
|
12
|
+
}),
|
|
13
|
+
handler: async (args) => {
|
|
14
|
+
const payload = await client.projects.list({
|
|
15
|
+
status: args.status,
|
|
16
|
+
limit: args.limit ?? 20,
|
|
17
|
+
page: args.page,
|
|
18
|
+
});
|
|
19
|
+
const projects = extractList(payload).map((p) => summarize(p, PROJECT_SUMMARY_KEYS));
|
|
20
|
+
return { total: extractTotal(payload) ?? projects.length, projects };
|
|
21
|
+
},
|
|
22
|
+
}),
|
|
23
|
+
get_project: defineTool({
|
|
24
|
+
description: "Fetch a project's full details (dates, PM, model, ACL, …).",
|
|
25
|
+
schema: z.object({ projectId: z.number().int().positive() }),
|
|
26
|
+
handler: async (args) => client.projects.get(args.projectId),
|
|
27
|
+
}),
|
|
28
|
+
create_project: defineTool({
|
|
29
|
+
description: "Create a new project. model picks methodology (scrum / waterfall / kanban / …).",
|
|
30
|
+
schema: z.object({
|
|
31
|
+
name: z.string().min(1),
|
|
32
|
+
code: z.string().optional(),
|
|
33
|
+
model: z.enum(PROJECT_MODELS).optional(),
|
|
34
|
+
begin: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
35
|
+
end: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
36
|
+
PM: z.string().optional().describe("Project manager account."),
|
|
37
|
+
desc: z.string().optional(),
|
|
38
|
+
acl: z.enum(["open", "private", "custom"]).optional(),
|
|
39
|
+
parent: z.number().int().optional().describe("Parent program ID."),
|
|
40
|
+
products: z.array(z.number().int().positive()).optional().describe("Linked product IDs."),
|
|
41
|
+
}),
|
|
42
|
+
handler: async (args) => client.projects.create(pickDefined(args)),
|
|
43
|
+
}),
|
|
44
|
+
update_project: defineTool({
|
|
45
|
+
description: "Update project fields.",
|
|
46
|
+
schema: z.object({
|
|
47
|
+
projectId: z.number().int().positive(),
|
|
48
|
+
name: z.string().optional(),
|
|
49
|
+
begin: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
50
|
+
end: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
51
|
+
PM: z.string().optional(),
|
|
52
|
+
desc: z.string().optional(),
|
|
53
|
+
status: z.enum(["wait", "doing", "suspended", "closed"]).optional(),
|
|
54
|
+
}),
|
|
55
|
+
handler: async (args) => {
|
|
56
|
+
const { projectId, ...rest } = args;
|
|
57
|
+
return client.projects.update(projectId, pickDefined(rest));
|
|
58
|
+
},
|
|
59
|
+
}),
|
|
60
|
+
delete_project: defineTool({
|
|
61
|
+
description: "Delete a project. Irreversible.",
|
|
62
|
+
schema: z.object({ projectId: z.number().int().positive() }),
|
|
63
|
+
handler: async (args) => client.projects.delete(args.projectId),
|
|
64
|
+
}),
|
|
65
|
+
list_project_executions: defineTool({
|
|
66
|
+
description: "List the executions (sprints / iterations / phases) inside one project.",
|
|
67
|
+
schema: z.object({ projectId: z.number().int().positive(), ...paginationShape }),
|
|
68
|
+
handler: async (args) => client.projects.listExecutions(args.projectId, {
|
|
69
|
+
limit: args.limit ?? 20,
|
|
70
|
+
page: args.page,
|
|
71
|
+
}),
|
|
72
|
+
}),
|
|
73
|
+
list_project_products: defineTool({
|
|
74
|
+
description: "List the products linked to a project (a project can span multiple products).",
|
|
75
|
+
schema: z.object({ projectId: z.number().int().positive() }),
|
|
76
|
+
handler: async (args) => client.projects.listProducts(args.projectId),
|
|
77
|
+
}),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/tools/projects.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { RELEASE_SUMMARY_KEYS, defineTool, extractList, extractTotal, paginationShape, pickDefined, summarize, } from "./helpers.js";
|
|
3
|
+
export function buildReleaseTools(ctx) {
|
|
4
|
+
const { client } = ctx;
|
|
5
|
+
return {
|
|
6
|
+
list_product_releases: defineTool({
|
|
7
|
+
description: "List releases of a product.",
|
|
8
|
+
schema: z.object({ productId: z.number().int().positive(), ...paginationShape }),
|
|
9
|
+
handler: async (args) => {
|
|
10
|
+
const payload = await client.releases.listByProduct(args.productId, {
|
|
11
|
+
limit: args.limit ?? 20,
|
|
12
|
+
page: args.page,
|
|
13
|
+
});
|
|
14
|
+
const releases = extractList(payload).map((r) => summarize(r, RELEASE_SUMMARY_KEYS));
|
|
15
|
+
return { total: extractTotal(payload) ?? releases.length, releases };
|
|
16
|
+
},
|
|
17
|
+
}),
|
|
18
|
+
get_release: defineTool({
|
|
19
|
+
description: "Fetch a release.",
|
|
20
|
+
schema: z.object({ releaseId: z.number().int().positive() }),
|
|
21
|
+
handler: async (args) => client.releases.get(args.releaseId),
|
|
22
|
+
}),
|
|
23
|
+
create_release: defineTool({
|
|
24
|
+
description: "Create a release tied to a build.",
|
|
25
|
+
schema: z.object({
|
|
26
|
+
productId: z.number().int().positive(),
|
|
27
|
+
build: z.number().int().positive().describe("Build ID this release marks."),
|
|
28
|
+
name: z.string().min(1),
|
|
29
|
+
marker: z.string().optional().describe("Marker text (e.g. tag)."),
|
|
30
|
+
date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
31
|
+
desc: z.string().optional(),
|
|
32
|
+
status: z.enum(["normal", "terminate"]).optional(),
|
|
33
|
+
}),
|
|
34
|
+
handler: async (args) => {
|
|
35
|
+
const { productId, ...rest } = args;
|
|
36
|
+
return client.releases.create(productId, pickDefined(rest));
|
|
37
|
+
},
|
|
38
|
+
}),
|
|
39
|
+
delete_release: defineTool({
|
|
40
|
+
description: "Delete a release. Irreversible.",
|
|
41
|
+
schema: z.object({ releaseId: z.number().int().positive() }),
|
|
42
|
+
handler: async (args) => client.releases.delete(args.releaseId),
|
|
43
|
+
}),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=releases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"releases.js","sourceRoot":"","sources":["../../src/tools/releases.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { defineTool, extractList, extractTotal, paginationShape, } from "./helpers.js";
|
|
3
|
+
export function buildRepoTools(ctx) {
|
|
4
|
+
const { client } = ctx;
|
|
5
|
+
return {
|
|
6
|
+
list_repos: defineTool({
|
|
7
|
+
description: "List code repositories (ZenTao's Devops > Repo) registered in the instance. Useful for linking bugs/stories to commits.",
|
|
8
|
+
schema: z.object({ ...paginationShape }),
|
|
9
|
+
handler: async (args) => client.repos.list({ limit: args.limit ?? 20, page: args.page }),
|
|
10
|
+
}),
|
|
11
|
+
get_repo: defineTool({
|
|
12
|
+
description: "Fetch a repo's configuration.",
|
|
13
|
+
schema: z.object({ repoId: z.number().int().positive() }),
|
|
14
|
+
handler: async (args) => client.repos.get(args.repoId),
|
|
15
|
+
}),
|
|
16
|
+
list_repo_branches: defineTool({
|
|
17
|
+
description: "List branches of a code repo.",
|
|
18
|
+
schema: z.object({ repoId: z.number().int().positive(), ...paginationShape }),
|
|
19
|
+
handler: async (args) => {
|
|
20
|
+
const payload = await client.repos.listBranches(args.repoId, {
|
|
21
|
+
limit: args.limit ?? 20,
|
|
22
|
+
page: args.page,
|
|
23
|
+
});
|
|
24
|
+
return { total: extractTotal(payload) ?? extractList(payload).length, branches: extractList(payload) };
|
|
25
|
+
},
|
|
26
|
+
}),
|
|
27
|
+
list_repo_commits: defineTool({
|
|
28
|
+
description: "List recent commits in a repo.",
|
|
29
|
+
schema: z.object({
|
|
30
|
+
repoId: z.number().int().positive(),
|
|
31
|
+
branch: z.string().optional(),
|
|
32
|
+
...paginationShape,
|
|
33
|
+
}),
|
|
34
|
+
handler: async (args) => client.repos.listCommits(args.repoId, {
|
|
35
|
+
branch: args.branch,
|
|
36
|
+
limit: args.limit ?? 20,
|
|
37
|
+
page: args.page,
|
|
38
|
+
}),
|
|
39
|
+
}),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=repos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repos.js","sourceRoot":"","sources":["../../src/tools/repos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAGL,UAAU,EACV,WAAW,EACX,YAAY,EACZ,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,MAAM,UAAU,cAAc,CAAC,GAAmB;IAChD,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IACvB,OAAO;QACL,UAAU,EAAE,UAAU,CAAC;YACrB,WAAW,EACT,yHAAyH;YAC3H,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,eAAe,EAAE,CAAC;YACxC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CACtB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;SAClE,CAAC;QAEF,QAAQ,EAAE,UAAU,CAAC;YACnB,WAAW,EAAE,+BAA+B;YAC5C,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;YACzD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;SACvD,CAAC;QAEF,kBAAkB,EAAE,UAAU,CAAC;YAC7B,WAAW,EAAE,+BAA+B;YAC5C,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,GAAG,eAAe,EAAE,CAAC;YAC7E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACtB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE;oBAC3D,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;oBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;iBAChB,CAAC,CAAC;gBACH,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YACzG,CAAC;SACF,CAAC;QAEF,iBAAiB,EAAE,UAAU,CAAC;YAC5B,WAAW,EAAE,gCAAgC;YAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;gBACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;gBACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC7B,GAAG,eAAe;aACnB,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CACtB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE;gBACpC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;gBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC;SACL,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { defineTool } from "./helpers.js";
|
|
3
|
+
export function buildRequestTools(ctx) {
|
|
4
|
+
const { client } = ctx;
|
|
5
|
+
return {
|
|
6
|
+
zentao_request: defineTool({
|
|
7
|
+
description: "Escape hatch: call any ZenTao v1 REST endpoint that isn't covered by a typed tool. The path is appended after /api.php/v1 — pass it without that prefix, e.g. '/products/27/builds' or 'modules?type=story'. Use this for read-only exploration of unfamiliar endpoints, or for writes when you know the exact payload shape (consult ZenTao's API docs). Returns the raw parsed JSON response. Token / auth headers are added automatically. Avoid using this when a typed tool exists — typed tools have better schemas and summarization.",
|
|
8
|
+
schema: z.object({
|
|
9
|
+
method: z
|
|
10
|
+
.enum(["GET", "POST", "PUT", "DELETE"])
|
|
11
|
+
.describe("HTTP method. Most reads are GET; ZenTao state transitions are typically POST /{entity}/{id}/{action}."),
|
|
12
|
+
path: z
|
|
13
|
+
.string()
|
|
14
|
+
.min(1)
|
|
15
|
+
.describe("Path relative to /api.php/v1 (with or without leading slash). Example: '/products' or 'bugs/123/resolve'."),
|
|
16
|
+
body: z
|
|
17
|
+
.record(z.unknown())
|
|
18
|
+
.optional()
|
|
19
|
+
.describe("JSON body. Omit for GET. ZenTao expects flat objects — values are typed (string / number / bool)."),
|
|
20
|
+
query: z
|
|
21
|
+
.record(z.union([z.string(), z.number(), z.boolean()]))
|
|
22
|
+
.optional()
|
|
23
|
+
.describe("Query string params. Useful for pagination (limit, page) or filters."),
|
|
24
|
+
}),
|
|
25
|
+
handler: async (args) => {
|
|
26
|
+
const opts = { query: args.query };
|
|
27
|
+
switch (args.method) {
|
|
28
|
+
case "GET":
|
|
29
|
+
return client.get(args.path, opts.query);
|
|
30
|
+
case "POST":
|
|
31
|
+
return client.post(args.path, args.body, opts.query);
|
|
32
|
+
case "PUT":
|
|
33
|
+
return client.put(args.path, args.body, opts.query);
|
|
34
|
+
case "DELETE":
|
|
35
|
+
return client.delete(args.path, opts.query);
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
}),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/tools/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAgD,UAAU,EAAE,MAAM,cAAc,CAAC;AAExF,MAAM,UAAU,iBAAiB,CAAC,GAAmB;IACnD,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IACvB,OAAO;QACL,cAAc,EAAE,UAAU,CAAC;YACzB,WAAW,EACT,8gBAA8gB;YAChhB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;gBACf,MAAM,EAAE,CAAC;qBACN,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;qBACtC,QAAQ,CAAC,uGAAuG,CAAC;gBACpH,IAAI,EAAE,CAAC;qBACJ,MAAM,EAAE;qBACR,GAAG,CAAC,CAAC,CAAC;qBACN,QAAQ,CACP,2GAA2G,CAC5G;gBACH,IAAI,EAAE,CAAC;qBACJ,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;qBACnB,QAAQ,EAAE;qBACV,QAAQ,CAAC,mGAAmG,CAAC;gBAChH,KAAK,EAAE,CAAC;qBACL,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;qBACtD,QAAQ,EAAE;qBACV,QAAQ,CAAC,sEAAsE,CAAC;aACpF,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACtB,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAA8D,EAAE,CAAC;gBAC5F,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;oBACpB,KAAK,KAAK;wBACR,OAAO,MAAM,CAAC,GAAG,CAAO,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjD,KAAK,MAAM;wBACT,OAAO,MAAM,CAAC,IAAI,CAAO,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC7D,KAAK,KAAK;wBACR,OAAO,MAAM,CAAC,GAAG,CAAO,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC5D,KAAK,QAAQ;wBACX,OAAO,MAAM,CAAC,MAAM,CAAO,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;SACF,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { defineTool, extractList, extractTotal, paginationShape, pickDefined, } from "./helpers.js";
|
|
3
|
+
export function buildRiskTools(ctx) {
|
|
4
|
+
const { client } = ctx;
|
|
5
|
+
return {
|
|
6
|
+
list_project_risks: defineTool({
|
|
7
|
+
description: "List risks tracked under a project.",
|
|
8
|
+
schema: z.object({
|
|
9
|
+
projectId: z.number().int().positive(),
|
|
10
|
+
status: z.enum(["active", "cancel", "hold", "closed", "all"]).optional(),
|
|
11
|
+
...paginationShape,
|
|
12
|
+
}),
|
|
13
|
+
handler: async (args) => {
|
|
14
|
+
const payload = await client.risks.listByProject(args.projectId, {
|
|
15
|
+
status: args.status,
|
|
16
|
+
limit: args.limit ?? 20,
|
|
17
|
+
page: args.page,
|
|
18
|
+
});
|
|
19
|
+
return { total: extractTotal(payload) ?? extractList(payload).length, risks: extractList(payload) };
|
|
20
|
+
},
|
|
21
|
+
}),
|
|
22
|
+
get_risk: defineTool({
|
|
23
|
+
description: "Fetch a risk's full details.",
|
|
24
|
+
schema: z.object({ riskId: z.number().int().positive() }),
|
|
25
|
+
handler: async (args) => client.risks.get(args.riskId),
|
|
26
|
+
}),
|
|
27
|
+
create_risk: defineTool({
|
|
28
|
+
description: "Create a risk entry under a project.",
|
|
29
|
+
schema: z.object({
|
|
30
|
+
projectId: z.number().int().positive(),
|
|
31
|
+
name: z.string().min(1),
|
|
32
|
+
category: z.string().optional(),
|
|
33
|
+
prob: z.union([z.literal(1), z.literal(2), z.literal(3)]).optional().describe("Probability: 1 low / 2 mid / 3 high."),
|
|
34
|
+
impact: z.union([z.literal(1), z.literal(2), z.literal(3)]).optional(),
|
|
35
|
+
strategy: z.enum(["accept", "transfer", "mitigate", "avoid"]).optional(),
|
|
36
|
+
desc: z.string().optional(),
|
|
37
|
+
plan: z.string().optional().describe("Mitigation plan."),
|
|
38
|
+
assignedTo: z.string().optional(),
|
|
39
|
+
deadline: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
40
|
+
}),
|
|
41
|
+
handler: async (args) => {
|
|
42
|
+
const { projectId, ...rest } = args;
|
|
43
|
+
return client.risks.create(projectId, pickDefined(rest));
|
|
44
|
+
},
|
|
45
|
+
}),
|
|
46
|
+
update_risk: defineTool({
|
|
47
|
+
description: "Update a risk.",
|
|
48
|
+
schema: z.object({
|
|
49
|
+
riskId: z.number().int().positive(),
|
|
50
|
+
name: z.string().optional(),
|
|
51
|
+
prob: z.union([z.literal(1), z.literal(2), z.literal(3)]).optional(),
|
|
52
|
+
impact: z.union([z.literal(1), z.literal(2), z.literal(3)]).optional(),
|
|
53
|
+
strategy: z.enum(["accept", "transfer", "mitigate", "avoid"]).optional(),
|
|
54
|
+
plan: z.string().optional(),
|
|
55
|
+
status: z.enum(["active", "cancel", "hold", "closed"]).optional(),
|
|
56
|
+
}),
|
|
57
|
+
handler: async (args) => {
|
|
58
|
+
const { riskId, ...rest } = args;
|
|
59
|
+
return client.risks.update(riskId, pickDefined(rest));
|
|
60
|
+
},
|
|
61
|
+
}),
|
|
62
|
+
delete_risk: defineTool({
|
|
63
|
+
description: "Delete a risk. Irreversible.",
|
|
64
|
+
schema: z.object({ riskId: z.number().int().positive() }),
|
|
65
|
+
handler: async (args) => client.risks.delete(args.riskId),
|
|
66
|
+
}),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=risks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risks.js","sourceRoot":"","sources":["../../src/tools/risks.ts"],"names":[],"mappings":"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"}
|