backlog-mcp-server 0.17.0 → 0.18.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/README.ja.md +15 -32
- package/README.md +20 -32
- package/build/auth/oauthRoutes.js +53 -1
- package/build/createBacklogMcpServer.d.ts +4 -6
- package/build/createBacklogMcpServer.js +4 -12
- package/build/handlers/builders/composeToolHandler.d.ts +1 -1
- package/build/handlers/builders/composeToolHandler.js +15 -9
- package/build/handlers/transformers/wrapWithFieldPicking.d.ts +14 -1
- package/build/handlers/transformers/wrapWithFieldPicking.js +30 -36
- package/build/index.js +20 -15
- package/build/lib.d.ts +1 -1
- package/build/reportUnknownOverrideKeys.js +0 -1
- package/build/tools/addDocument.d.ts +2 -2
- package/build/tools/addDocument.js +17 -2
- package/build/tools/addIssue.d.ts +2 -2
- package/build/tools/addIssue.js +32 -2
- package/build/tools/addIssueComment.d.ts +2 -2
- package/build/tools/addIssueComment.js +14 -2
- package/build/tools/addProject.d.ts +2 -2
- package/build/tools/addProject.js +22 -2
- package/build/tools/addPullRequest.d.ts +2 -2
- package/build/tools/addPullRequest.js +26 -2
- package/build/tools/addPullRequestComment.d.ts +2 -2
- package/build/tools/addPullRequestComment.js +12 -2
- package/build/tools/addRelatedIssue.d.ts +2 -2
- package/build/tools/addRelatedIssue.js +33 -2
- package/build/tools/addVersionMilestone.d.ts +2 -2
- package/build/tools/addVersionMilestone.js +12 -2
- package/build/tools/addWatching.d.ts +2 -2
- package/build/tools/addWatching.js +12 -2
- package/build/tools/addWiki.d.ts +2 -2
- package/build/tools/addWiki.js +16 -2
- package/build/tools/countIssues.d.ts +2 -2
- package/build/tools/countIssues.js +3 -2
- package/build/tools/deleteIssue.d.ts +2 -2
- package/build/tools/deleteIssue.js +32 -2
- package/build/tools/deleteProject.d.ts +2 -2
- package/build/tools/deleteProject.js +22 -2
- package/build/tools/deleteVersion.d.ts +2 -2
- package/build/tools/deleteVersion.js +12 -2
- package/build/tools/deleteWatching.d.ts +2 -2
- package/build/tools/deleteWatching.js +12 -2
- package/build/tools/getCategories.d.ts +2 -2
- package/build/tools/getCategories.js +8 -2
- package/build/tools/getCustomFields.d.ts +2 -2
- package/build/tools/getCustomFields.js +22 -2
- package/build/tools/getDocument.d.ts +2 -2
- package/build/tools/getDocument.js +17 -2
- package/build/tools/getDocumentTree.d.ts +2 -2
- package/build/tools/getDocumentTree.js +7 -2
- package/build/tools/getDocuments.d.ts +2 -2
- package/build/tools/getDocuments.js +17 -2
- package/build/tools/getGitRepositories.d.ts +2 -2
- package/build/tools/getGitRepositories.js +17 -2
- package/build/tools/getGitRepository.d.ts +2 -2
- package/build/tools/getGitRepository.js +17 -2
- package/build/tools/getIssue.d.ts +2 -2
- package/build/tools/getIssue.js +32 -2
- package/build/tools/getIssueComments.d.ts +2 -2
- package/build/tools/getIssueComments.js +14 -2
- package/build/tools/getIssueTypes.d.ts +2 -2
- package/build/tools/getIssueTypes.js +11 -2
- package/build/tools/getIssues.d.ts +10 -10
- package/build/tools/getIssues.js +32 -2
- package/build/tools/getMyself.d.ts +2 -2
- package/build/tools/getMyself.js +11 -2
- package/build/tools/getNotifications.d.ts +2 -2
- package/build/tools/getNotifications.js +15 -2
- package/build/tools/getNotificationsCount.d.ts +2 -2
- package/build/tools/getNotificationsCount.js +5 -2
- package/build/tools/getPriorities.d.ts +2 -2
- package/build/tools/getPriorities.js +3 -2
- package/build/tools/getProject.d.ts +2 -2
- package/build/tools/getProject.js +22 -2
- package/build/tools/getProjectList.d.ts +2 -2
- package/build/tools/getProjectList.js +22 -2
- package/build/tools/getProjectUsers.d.ts +2 -2
- package/build/tools/getProjectUsers.js +11 -2
- package/build/tools/getPullRequest.d.ts +2 -2
- package/build/tools/getPullRequest.js +26 -2
- package/build/tools/getPullRequestComments.d.ts +2 -2
- package/build/tools/getPullRequestComments.js +12 -2
- package/build/tools/getPullRequests.d.ts +2 -2
- package/build/tools/getPullRequests.js +26 -2
- package/build/tools/getPullRequestsCount.d.ts +2 -2
- package/build/tools/getPullRequestsCount.js +5 -2
- package/build/tools/getRelatedIssues.d.ts +2 -2
- package/build/tools/getRelatedIssues.js +33 -2
- package/build/tools/getResolutions.d.ts +2 -2
- package/build/tools/getResolutions.js +3 -2
- package/build/tools/getSpace.d.ts +2 -2
- package/build/tools/getSpace.js +13 -2
- package/build/tools/getSpaceActivities.d.ts +2 -2
- package/build/tools/getSpaceActivities.js +12 -2
- package/build/tools/getUserRecentUpdates.d.ts +2 -2
- package/build/tools/getUserRecentUpdates.js +12 -2
- package/build/tools/getUserStarsCount.d.ts +2 -2
- package/build/tools/getUserStarsCount.js +3 -2
- package/build/tools/getUsers.d.ts +2 -2
- package/build/tools/getUsers.js +11 -2
- package/build/tools/getVersionMilestoneList.d.ts +2 -2
- package/build/tools/getVersionMilestoneList.js +12 -2
- package/build/tools/getWatchingListCount.d.ts +2 -2
- package/build/tools/getWatchingListCount.js +5 -2
- package/build/tools/getWatchingListItems.d.ts +2 -2
- package/build/tools/getWatchingListItems.js +12 -2
- package/build/tools/getWiki.d.ts +2 -2
- package/build/tools/getWiki.js +16 -2
- package/build/tools/getWikiPages.d.ts +2 -2
- package/build/tools/getWikiPages.js +12 -2
- package/build/tools/getWikisCount.d.ts +2 -2
- package/build/tools/getWikisCount.js +3 -2
- package/build/tools/markNotificationAsRead.d.ts +6 -1
- package/build/tools/markNotificationAsRead.js +6 -1
- package/build/tools/markWatchingAsRead.d.ts +6 -1
- package/build/tools/markWatchingAsRead.js +6 -1
- package/build/tools/removeRelatedIssue.d.ts +2 -2
- package/build/tools/removeRelatedIssue.js +33 -2
- package/build/tools/resetUnreadNotificationCount.d.ts +2 -2
- package/build/tools/resetUnreadNotificationCount.js +5 -2
- package/build/tools/updateIssue.d.ts +2 -2
- package/build/tools/updateIssue.js +32 -2
- package/build/tools/updateIssueComment.d.ts +2 -2
- package/build/tools/updateIssueComment.js +14 -2
- package/build/tools/updateProject.d.ts +2 -2
- package/build/tools/updateProject.js +22 -2
- package/build/tools/updatePullRequest.d.ts +2 -2
- package/build/tools/updatePullRequest.js +26 -2
- package/build/tools/updatePullRequestComment.d.ts +2 -2
- package/build/tools/updatePullRequestComment.js +12 -2
- package/build/tools/updateVersionMilestone.d.ts +2 -2
- package/build/tools/updateVersionMilestone.js +12 -2
- package/build/tools/updateWatching.d.ts +2 -2
- package/build/tools/updateWatching.js +12 -2
- package/build/tools/updateWiki.d.ts +2 -2
- package/build/tools/updateWiki.js +16 -2
- package/build/types/outputFields.d.ts +26 -0
- package/build/types/outputFields.js +3 -0
- package/build/types/tool.d.ts +21 -8
- package/build/types/zod/activityType.d.ts +38 -0
- package/build/types/zod/activityType.js +38 -0
- package/build/utils/fieldSelection.d.ts +22 -0
- package/build/utils/fieldSelection.js +40 -0
- package/build/utils/toolsetUtils.d.ts +1 -3
- package/build/utils/toolsetUtils.js +0 -12
- package/package.json +1 -2
- package/build/tools/dynamicTools/toolsets.d.ts +0 -15
- package/build/tools/dynamicTools/toolsets.js +0 -103
- package/build/types/zod/backlogOutputDefinition.d.ts +0 -3334
- package/build/types/zod/backlogOutputDefinition.js +0 -483
- package/build/utils/generateFieldsDescription.d.ts +0 -5
- package/build/utils/generateFieldsDescription.js +0 -50
- package/build/utils/toolRegistrar.d.ts +0 -5
- package/build/utils/toolRegistrar.js +0 -12
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { Backlog } from 'backlog-js';
|
|
3
|
+
import type { Entity } from 'backlog-js';
|
|
3
4
|
import { ToolDefinition } from '../types/tool.js';
|
|
4
5
|
import { DescriptionHelper } from '../createDescriptionHelper.js';
|
|
5
|
-
import { IssueSchema } from '../types/zod/backlogOutputDefinition.js';
|
|
6
6
|
declare const updateIssueSchema: (t: DescriptionHelper["t"]) => {
|
|
7
7
|
issueId: z.ZodOptional<z.ZodNumber>;
|
|
8
8
|
issueKey: z.ZodOptional<z.ZodString>;
|
|
@@ -30,5 +30,5 @@ declare const updateIssueSchema: (t: DescriptionHelper["t"]) => {
|
|
|
30
30
|
otherValue: z.ZodOptional<z.ZodString>;
|
|
31
31
|
}, z.core.$strip>>>;
|
|
32
32
|
};
|
|
33
|
-
export declare const updateIssueTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof updateIssueSchema>,
|
|
33
|
+
export declare const updateIssueTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof updateIssueSchema>, Entity.Issue.Issue>;
|
|
34
34
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { buildToolSchema } from '../types/tool.js';
|
|
3
|
-
import {
|
|
3
|
+
import { outputFields } from '../types/outputFields.js';
|
|
4
4
|
import { resolveIdOrKey } from '../utils/resolveIdOrKey.js';
|
|
5
5
|
import { customFieldsToPayload } from '../backlog/customFields.js';
|
|
6
6
|
const updateIssueSchema = buildToolSchema((t) => ({
|
|
@@ -135,7 +135,37 @@ export const updateIssueTool = (backlog, { t }) => {
|
|
|
135
135
|
name: 'update_issue',
|
|
136
136
|
description: t('TOOL_UPDATE_ISSUE_DESCRIPTION', 'Updates an existing issue'),
|
|
137
137
|
schema: z.object(updateIssueSchema(t)),
|
|
138
|
-
|
|
138
|
+
returnsList: false,
|
|
139
|
+
outputFields: outputFields()([
|
|
140
|
+
'id',
|
|
141
|
+
'projectId',
|
|
142
|
+
'issueKey',
|
|
143
|
+
'keyId',
|
|
144
|
+
'issueType',
|
|
145
|
+
'summary',
|
|
146
|
+
'description',
|
|
147
|
+
'resolution',
|
|
148
|
+
'priority',
|
|
149
|
+
'status',
|
|
150
|
+
'assignee',
|
|
151
|
+
'category',
|
|
152
|
+
'versions',
|
|
153
|
+
'milestone',
|
|
154
|
+
'startDate',
|
|
155
|
+
'dueDate',
|
|
156
|
+
'estimatedHours',
|
|
157
|
+
'actualHours',
|
|
158
|
+
'parentIssueId',
|
|
159
|
+
'createdUser',
|
|
160
|
+
'created',
|
|
161
|
+
'updatedUser',
|
|
162
|
+
'updated',
|
|
163
|
+
'customFields',
|
|
164
|
+
'attachments',
|
|
165
|
+
'sharedFiles',
|
|
166
|
+
'stars',
|
|
167
|
+
'childIssueSummary',
|
|
168
|
+
]),
|
|
139
169
|
handler: async ({ issueId, issueKey, customFields, ...params }) => {
|
|
140
170
|
const result = resolveIdOrKey('issue', { id: issueId, key: issueKey }, t);
|
|
141
171
|
if (!result.ok) {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import type { Entity } from 'backlog-js';
|
|
2
3
|
import { Backlog } from 'backlog-js';
|
|
3
4
|
import { ToolDefinition } from '../types/tool.js';
|
|
4
5
|
import { DescriptionHelper } from '../createDescriptionHelper.js';
|
|
5
|
-
import { IssueCommentSchema } from '../types/zod/backlogOutputDefinition.js';
|
|
6
6
|
declare const updateIssueCommentSchema: (t: DescriptionHelper["t"]) => {
|
|
7
7
|
issueId: z.ZodOptional<z.ZodNumber>;
|
|
8
8
|
issueKey: z.ZodOptional<z.ZodString>;
|
|
9
9
|
commentId: z.ZodNumber;
|
|
10
10
|
content: z.ZodString;
|
|
11
11
|
};
|
|
12
|
-
export declare const updateIssueCommentTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof updateIssueCommentSchema>,
|
|
12
|
+
export declare const updateIssueCommentTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof updateIssueCommentSchema>, Entity.Issue.Comment>;
|
|
13
13
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { buildToolSchema } from '../types/tool.js';
|
|
3
|
-
import {
|
|
3
|
+
import { outputFields } from '../types/outputFields.js';
|
|
4
4
|
import { resolveIdOrKey } from '../utils/resolveIdOrKey.js';
|
|
5
5
|
const updateIssueCommentSchema = buildToolSchema((t) => ({
|
|
6
6
|
issueId: z
|
|
@@ -23,7 +23,19 @@ export const updateIssueCommentTool = (backlog, { t }) => {
|
|
|
23
23
|
name: 'update_issue_comment',
|
|
24
24
|
description: t('TOOL_UPDATE_ISSUE_COMMENT_DESCRIPTION', 'Updates a comment on an issue'),
|
|
25
25
|
schema: z.object(updateIssueCommentSchema(t)),
|
|
26
|
-
|
|
26
|
+
returnsList: false,
|
|
27
|
+
outputFields: outputFields()([
|
|
28
|
+
'id',
|
|
29
|
+
'projectId',
|
|
30
|
+
'issueId',
|
|
31
|
+
'content',
|
|
32
|
+
'changeLog',
|
|
33
|
+
'createdUser',
|
|
34
|
+
'created',
|
|
35
|
+
'updated',
|
|
36
|
+
'stars',
|
|
37
|
+
'notifications',
|
|
38
|
+
]),
|
|
27
39
|
importantFields: ['id', 'content', 'createdUser', 'updated'],
|
|
28
40
|
handler: async ({ issueId, issueKey, commentId, content }) => {
|
|
29
41
|
const result = resolveIdOrKey('issue', { id: issueId, key: issueKey }, t);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import type { Entity } from 'backlog-js';
|
|
2
3
|
import { Backlog } from 'backlog-js';
|
|
3
4
|
import { ToolDefinition } from '../types/tool.js';
|
|
4
5
|
import { DescriptionHelper } from '../createDescriptionHelper.js';
|
|
5
|
-
import { ProjectSchema } from '../types/zod/backlogOutputDefinition.js';
|
|
6
6
|
declare const updateProjectSchema: (t: DescriptionHelper["t"]) => {
|
|
7
7
|
projectId: z.ZodOptional<z.ZodNumber>;
|
|
8
8
|
projectKey: z.ZodOptional<z.ZodString>;
|
|
@@ -17,5 +17,5 @@ declare const updateProjectSchema: (t: DescriptionHelper["t"]) => {
|
|
|
17
17
|
}>>;
|
|
18
18
|
archived: z.ZodOptional<z.ZodBoolean>;
|
|
19
19
|
};
|
|
20
|
-
export declare const updateProjectTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof updateProjectSchema>,
|
|
20
|
+
export declare const updateProjectTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof updateProjectSchema>, Entity.Project.Project>;
|
|
21
21
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { buildToolSchema } from '../types/tool.js';
|
|
3
|
-
import {
|
|
3
|
+
import { outputFields } from '../types/outputFields.js';
|
|
4
4
|
import { resolveIdOrKey } from '../utils/resolveIdOrKey.js';
|
|
5
5
|
const updateProjectSchema = buildToolSchema((t) => ({
|
|
6
6
|
projectId: z
|
|
@@ -45,7 +45,27 @@ export const updateProjectTool = (backlog, { t }) => {
|
|
|
45
45
|
name: 'update_project',
|
|
46
46
|
description: t('TOOL_UPDATE_PROJECT_DESCRIPTION', 'Updates an existing project'),
|
|
47
47
|
schema: z.object(updateProjectSchema(t)),
|
|
48
|
-
|
|
48
|
+
returnsList: false,
|
|
49
|
+
outputFields: outputFields()([
|
|
50
|
+
'id',
|
|
51
|
+
'projectKey',
|
|
52
|
+
'name',
|
|
53
|
+
'chartEnabled',
|
|
54
|
+
'useResolvedForChart',
|
|
55
|
+
'subtaskingEnabled',
|
|
56
|
+
'projectLeaderCanEditProjectLeader',
|
|
57
|
+
'useWiki',
|
|
58
|
+
'useFileSharing',
|
|
59
|
+
'useWikiTreeView',
|
|
60
|
+
'useOriginalImageSizeAtWiki',
|
|
61
|
+
'useSubversion',
|
|
62
|
+
'useGit',
|
|
63
|
+
'textFormattingRule',
|
|
64
|
+
'archived',
|
|
65
|
+
'displayOrder',
|
|
66
|
+
'useDevAttributes',
|
|
67
|
+
'grandchildIssueEnabled',
|
|
68
|
+
]),
|
|
49
69
|
handler: async ({ projectId, projectKey, ...param }) => {
|
|
50
70
|
const result = resolveIdOrKey('project', { id: projectId, key: projectKey }, t);
|
|
51
71
|
if (!result.ok) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import type { Entity } from 'backlog-js';
|
|
2
3
|
import { Backlog } from 'backlog-js';
|
|
3
4
|
import { ToolDefinition } from '../types/tool.js';
|
|
4
5
|
import { DescriptionHelper } from '../createDescriptionHelper.js';
|
|
5
|
-
import { PullRequestSchema } from '../types/zod/backlogOutputDefinition.js';
|
|
6
6
|
declare const updatePullRequestSchema: (t: DescriptionHelper["t"]) => {
|
|
7
7
|
projectId: z.ZodOptional<z.ZodNumber>;
|
|
8
8
|
projectKey: z.ZodOptional<z.ZodString>;
|
|
@@ -16,5 +16,5 @@ declare const updatePullRequestSchema: (t: DescriptionHelper["t"]) => {
|
|
|
16
16
|
notifiedUserId: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
17
17
|
statusId: z.ZodOptional<z.ZodNumber>;
|
|
18
18
|
};
|
|
19
|
-
export declare const updatePullRequestTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof updatePullRequestSchema>,
|
|
19
|
+
export declare const updatePullRequestTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof updatePullRequestSchema>, Entity.PullRequest.PullRequest>;
|
|
20
20
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { buildToolSchema } from '../types/tool.js';
|
|
3
|
-
import {
|
|
3
|
+
import { outputFields } from '../types/outputFields.js';
|
|
4
4
|
import { resolveIdOrKey } from '../utils/resolveIdOrKey.js';
|
|
5
5
|
const updatePullRequestSchema = buildToolSchema((t) => ({
|
|
6
6
|
projectId: z
|
|
@@ -52,7 +52,31 @@ export const updatePullRequestTool = (backlog, { t }) => {
|
|
|
52
52
|
name: 'update_pull_request',
|
|
53
53
|
description: t('TOOL_UPDATE_PULL_REQUEST_DESCRIPTION', 'Updates an existing pull request'),
|
|
54
54
|
schema: z.object(updatePullRequestSchema(t)),
|
|
55
|
-
|
|
55
|
+
returnsList: false,
|
|
56
|
+
outputFields: outputFields()([
|
|
57
|
+
'id',
|
|
58
|
+
'projectId',
|
|
59
|
+
'repositoryId',
|
|
60
|
+
'number',
|
|
61
|
+
'summary',
|
|
62
|
+
'description',
|
|
63
|
+
'base',
|
|
64
|
+
'branch',
|
|
65
|
+
'status',
|
|
66
|
+
'assignee',
|
|
67
|
+
'issue',
|
|
68
|
+
'baseCommit',
|
|
69
|
+
'branchCommit',
|
|
70
|
+
'mergeCommit',
|
|
71
|
+
'closeAt',
|
|
72
|
+
'mergeAt',
|
|
73
|
+
'createdUser',
|
|
74
|
+
'created',
|
|
75
|
+
'updatedUser',
|
|
76
|
+
'updated',
|
|
77
|
+
'attachments',
|
|
78
|
+
'stars',
|
|
79
|
+
]),
|
|
56
80
|
handler: async ({ projectId, projectKey, repoId, repoName, number, ...params }) => {
|
|
57
81
|
const result = resolveIdOrKey('project', { id: projectId, key: projectKey }, t);
|
|
58
82
|
if (!result.ok) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import type { Entity } from 'backlog-js';
|
|
2
3
|
import { Backlog } from 'backlog-js';
|
|
3
4
|
import { ToolDefinition } from '../types/tool.js';
|
|
4
5
|
import { DescriptionHelper } from '../createDescriptionHelper.js';
|
|
5
|
-
import { PullRequestCommentSchema } from '../types/zod/backlogOutputDefinition.js';
|
|
6
6
|
declare const updatePullRequestCommentSchema: (t: DescriptionHelper["t"]) => {
|
|
7
7
|
projectId: z.ZodOptional<z.ZodNumber>;
|
|
8
8
|
projectKey: z.ZodOptional<z.ZodString>;
|
|
@@ -12,5 +12,5 @@ declare const updatePullRequestCommentSchema: (t: DescriptionHelper["t"]) => {
|
|
|
12
12
|
commentId: z.ZodNumber;
|
|
13
13
|
content: z.ZodString;
|
|
14
14
|
};
|
|
15
|
-
export declare const updatePullRequestCommentTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof updatePullRequestCommentSchema>,
|
|
15
|
+
export declare const updatePullRequestCommentTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof updatePullRequestCommentSchema>, Entity.PullRequest.Comment>;
|
|
16
16
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { buildToolSchema } from '../types/tool.js';
|
|
3
|
-
import {
|
|
3
|
+
import { outputFields } from '../types/outputFields.js';
|
|
4
4
|
import { resolveIdOrKey, resolveIdOrName } from '../utils/resolveIdOrKey.js';
|
|
5
5
|
const updatePullRequestCommentSchema = buildToolSchema((t) => ({
|
|
6
6
|
projectId: z
|
|
@@ -34,7 +34,17 @@ export const updatePullRequestCommentTool = (backlog, { t }) => {
|
|
|
34
34
|
name: 'update_pull_request_comment',
|
|
35
35
|
description: t('TOOL_UPDATE_PULL_REQUEST_COMMENT_DESCRIPTION', 'Updates a comment on a pull request'),
|
|
36
36
|
schema: z.object(updatePullRequestCommentSchema(t)),
|
|
37
|
-
|
|
37
|
+
returnsList: false,
|
|
38
|
+
outputFields: outputFields()([
|
|
39
|
+
'id',
|
|
40
|
+
'content',
|
|
41
|
+
'changeLog',
|
|
42
|
+
'createdUser',
|
|
43
|
+
'created',
|
|
44
|
+
'updated',
|
|
45
|
+
'stars',
|
|
46
|
+
'notifications',
|
|
47
|
+
]),
|
|
38
48
|
importantFields: ['id', 'content', 'createdUser', 'updated'],
|
|
39
49
|
handler: async ({ projectId, projectKey, repoId, repoName, number, commentId, content, }) => {
|
|
40
50
|
const result = resolveIdOrKey('project', { id: projectId, key: projectKey }, t);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import type { Entity } from 'backlog-js';
|
|
2
3
|
import { Backlog } from 'backlog-js';
|
|
3
4
|
import { ToolDefinition } from '../types/tool.js';
|
|
4
5
|
import { DescriptionHelper } from '../createDescriptionHelper.js';
|
|
5
|
-
import { VersionSchema } from '../types/zod/backlogOutputDefinition.js';
|
|
6
6
|
declare const updateVersionMilestoneSchema: (t: DescriptionHelper["t"]) => {
|
|
7
7
|
projectId: z.ZodOptional<z.ZodNumber>;
|
|
8
8
|
projectKey: z.ZodOptional<z.ZodString>;
|
|
@@ -13,5 +13,5 @@ declare const updateVersionMilestoneSchema: (t: DescriptionHelper["t"]) => {
|
|
|
13
13
|
releaseDueDate: z.ZodOptional<z.ZodString>;
|
|
14
14
|
archived: z.ZodOptional<z.ZodBoolean>;
|
|
15
15
|
};
|
|
16
|
-
export declare const updateVersionMilestoneTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof updateVersionMilestoneSchema>,
|
|
16
|
+
export declare const updateVersionMilestoneTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof updateVersionMilestoneSchema>, Entity.Project.Version>;
|
|
17
17
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { buildToolSchema } from '../types/tool.js';
|
|
3
|
-
import {
|
|
3
|
+
import { outputFields } from '../types/outputFields.js';
|
|
4
4
|
import { resolveIdOrKey } from '../utils/resolveIdOrKey.js';
|
|
5
5
|
const updateVersionMilestoneSchema = buildToolSchema((t) => ({
|
|
6
6
|
projectId: z
|
|
@@ -37,7 +37,17 @@ export const updateVersionMilestoneTool = (backlog, { t }) => {
|
|
|
37
37
|
name: 'update_version_milestone',
|
|
38
38
|
description: t('TOOL_UPDATE_VERSION_MILESTONE_DESCRIPTION', 'Updates an existing version milestone'),
|
|
39
39
|
schema: z.object(updateVersionMilestoneSchema(t)),
|
|
40
|
-
|
|
40
|
+
returnsList: false,
|
|
41
|
+
outputFields: outputFields()([
|
|
42
|
+
'id',
|
|
43
|
+
'projectId',
|
|
44
|
+
'name',
|
|
45
|
+
'description',
|
|
46
|
+
'startDate',
|
|
47
|
+
'releaseDueDate',
|
|
48
|
+
'archived',
|
|
49
|
+
'displayOrder',
|
|
50
|
+
]),
|
|
41
51
|
importantFields: [
|
|
42
52
|
'id',
|
|
43
53
|
'name',
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import type { Entity } from 'backlog-js';
|
|
2
3
|
import { Backlog } from 'backlog-js';
|
|
3
4
|
import { ToolDefinition } from '../types/tool.js';
|
|
4
5
|
import { DescriptionHelper } from '../createDescriptionHelper.js';
|
|
5
|
-
import { WatchingListItemSchema } from '../types/zod/backlogOutputDefinition.js';
|
|
6
6
|
declare const updateWatchingSchema: (t: DescriptionHelper["t"]) => {
|
|
7
7
|
watchId: z.ZodNumber;
|
|
8
8
|
note: z.ZodString;
|
|
9
9
|
};
|
|
10
|
-
export declare const updateWatchingTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof updateWatchingSchema>,
|
|
10
|
+
export declare const updateWatchingTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof updateWatchingSchema>, Entity.WatchingList.WatchingListItem>;
|
|
11
11
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { buildToolSchema } from '../types/tool.js';
|
|
3
|
-
import {
|
|
3
|
+
import { outputFields } from '../types/outputFields.js';
|
|
4
4
|
const updateWatchingSchema = buildToolSchema((t) => ({
|
|
5
5
|
watchId: z.number().describe(t('TOOL_UPDATE_WATCHING_WATCH_ID', 'Watch ID')),
|
|
6
6
|
note: z
|
|
@@ -12,7 +12,17 @@ export const updateWatchingTool = (backlog, { t }) => {
|
|
|
12
12
|
name: 'update_watching',
|
|
13
13
|
description: t('TOOL_UPDATE_WATCHING_DESCRIPTION', 'Updates an existing watch note'),
|
|
14
14
|
schema: z.object(updateWatchingSchema(t)),
|
|
15
|
-
|
|
15
|
+
returnsList: false,
|
|
16
|
+
outputFields: outputFields()([
|
|
17
|
+
'id',
|
|
18
|
+
'resourceAlreadyRead',
|
|
19
|
+
'note',
|
|
20
|
+
'type',
|
|
21
|
+
'issue',
|
|
22
|
+
'lastContentUpdated',
|
|
23
|
+
'created',
|
|
24
|
+
'updated',
|
|
25
|
+
]),
|
|
16
26
|
handler: async ({ watchId, note }) => backlog.patchWatchingListItem(watchId, note),
|
|
17
27
|
};
|
|
18
28
|
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import type { Entity } from 'backlog-js';
|
|
2
3
|
import { Backlog } from 'backlog-js';
|
|
3
4
|
import { ToolDefinition } from '../types/tool.js';
|
|
4
5
|
import { DescriptionHelper } from '../createDescriptionHelper.js';
|
|
5
|
-
import { WikiSchema } from '../types/zod/backlogOutputDefinition.js';
|
|
6
6
|
declare const updateWikiSchema: (t: DescriptionHelper["t"]) => {
|
|
7
7
|
wikiId: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
8
8
|
name: z.ZodOptional<z.ZodString>;
|
|
9
9
|
content: z.ZodOptional<z.ZodString>;
|
|
10
10
|
mailNotify: z.ZodOptional<z.ZodBoolean>;
|
|
11
11
|
};
|
|
12
|
-
export declare const updateWikiTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof updateWikiSchema>,
|
|
12
|
+
export declare const updateWikiTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof updateWikiSchema>, Entity.Wiki.Wiki>;
|
|
13
13
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { buildToolSchema } from '../types/tool.js';
|
|
3
|
-
import {
|
|
3
|
+
import { outputFields } from '../types/outputFields.js';
|
|
4
4
|
const updateWikiSchema = buildToolSchema((t) => ({
|
|
5
5
|
wikiId: z
|
|
6
6
|
.union([z.string(), z.number()])
|
|
@@ -23,7 +23,21 @@ export const updateWikiTool = (backlog, { t }) => {
|
|
|
23
23
|
name: 'update_wiki',
|
|
24
24
|
description: t('TOOL_UPDATE_WIKI_DESCRIPTION', 'Updates an existing wiki page'),
|
|
25
25
|
schema: z.object(updateWikiSchema(t)),
|
|
26
|
-
|
|
26
|
+
returnsList: false,
|
|
27
|
+
outputFields: outputFields()([
|
|
28
|
+
'id',
|
|
29
|
+
'projectId',
|
|
30
|
+
'name',
|
|
31
|
+
'content',
|
|
32
|
+
'tags',
|
|
33
|
+
'attachments',
|
|
34
|
+
'sharedFiles',
|
|
35
|
+
'stars',
|
|
36
|
+
'createdUser',
|
|
37
|
+
'created',
|
|
38
|
+
'updatedUser',
|
|
39
|
+
'updated',
|
|
40
|
+
]),
|
|
27
41
|
importantFields: ['id', 'name', 'content', 'updatedUser'],
|
|
28
42
|
handler: async ({ wikiId, name, content, mailNotify }) => {
|
|
29
43
|
const wikiIdNumber = typeof wikiId === 'string' ? parseInt(wikiId, 10) : wikiId;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The list of field names a tool's result carries.
|
|
3
|
+
*
|
|
4
|
+
* Only names are needed at runtime — `--optimize-response` publishes them as the
|
|
5
|
+
* enum of its `fields` parameter — and TypeScript types are erased, so the list
|
|
6
|
+
* has to be written out. What this adds is that writing it wrong does not
|
|
7
|
+
* compile: the names are checked against the `backlog-js` type in both
|
|
8
|
+
* directions, so a field that package gains, or one it never had, is a build
|
|
9
|
+
* error rather than a quiet difference.
|
|
10
|
+
*
|
|
11
|
+
* outputFields<Entity.Issue.Issue>()(['id', 'projectId', ...])
|
|
12
|
+
*
|
|
13
|
+
* Missing a name fails with the name in the message:
|
|
14
|
+
*
|
|
15
|
+
* Type '{ __outputFieldsMissing: "childIssueSummary"; }' is missing the
|
|
16
|
+
* following properties from type 'readonly (keyof Issue)[]'
|
|
17
|
+
*
|
|
18
|
+
* A name the type does not have fails with:
|
|
19
|
+
*
|
|
20
|
+
* Type '"nope"' is not assignable to type 'keyof Space'
|
|
21
|
+
*/
|
|
22
|
+
type Missing<T, K extends readonly PropertyKey[]> = Exclude<keyof T, K[number]>;
|
|
23
|
+
export declare function outputFields<T>(): <K extends readonly (keyof T)[]>(keys: K) => [Missing<T, K>] extends [never] ? readonly (keyof T)[] : {
|
|
24
|
+
__outputFieldsMissing: Missing<T, K>;
|
|
25
|
+
};
|
|
26
|
+
export {};
|
package/build/types/tool.d.ts
CHANGED
|
@@ -1,16 +1,32 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { DescriptionHelper } from '../createDescriptionHelper.js';
|
|
3
3
|
import { CallToolResult } from '@modelcontextprotocol/server';
|
|
4
|
-
export type ToolDefinition<Shape extends z.ZodRawShape,
|
|
4
|
+
export type ToolDefinition<Shape extends z.ZodRawShape, Result> = {
|
|
5
5
|
name: string;
|
|
6
6
|
description: string;
|
|
7
7
|
schema: z.ZodObject<Shape>;
|
|
8
|
-
|
|
8
|
+
outputFields: readonly (keyof Result)[];
|
|
9
9
|
handler: (input: z.infer<z.ZodObject<Shape>> & {
|
|
10
|
-
fields?: string;
|
|
10
|
+
fields?: string[];
|
|
11
11
|
organization?: string;
|
|
12
|
-
}) => Promise<
|
|
13
|
-
importantFields?: (keyof
|
|
12
|
+
}) => Promise<Result | Result[]>;
|
|
13
|
+
importantFields?: (keyof Result)[];
|
|
14
|
+
/**
|
|
15
|
+
* Whether the Backlog call behind this tool returns a list.
|
|
16
|
+
*
|
|
17
|
+
* `--optimize-response` only publishes its `fields` parameter on these. A list
|
|
18
|
+
* is the case where the response grows without bound — `get_issues` alone
|
|
19
|
+
* returns up to 100 issues — and where trimming it is worth the schema every
|
|
20
|
+
* client downloads. A tool that returns one record saves a few hundred bytes at
|
|
21
|
+
* best, against a cost paid on every session by everyone.
|
|
22
|
+
*
|
|
23
|
+
* Verifiable: it is true exactly for the tools whose `backlog-js` method is
|
|
24
|
+
* declared as `Promise<T[]>`.
|
|
25
|
+
*
|
|
26
|
+
* Required rather than optional so that a new tool has to answer the question.
|
|
27
|
+
* Left optional, forgetting it would silently mean "no field selection".
|
|
28
|
+
*/
|
|
29
|
+
returnsList: boolean;
|
|
14
30
|
};
|
|
15
31
|
export declare const buildToolSchema: <T extends z.ZodRawShape>(fn: (t: DescriptionHelper["t"]) => T) => (t: DescriptionHelper["t"]) => T;
|
|
16
32
|
export type DynamicToolDefinition<Shape extends z.ZodRawShape> = {
|
|
@@ -19,6 +35,3 @@ export type DynamicToolDefinition<Shape extends z.ZodRawShape> = {
|
|
|
19
35
|
schema: z.ZodObject<Shape>;
|
|
20
36
|
handler: (input: z.infer<z.ZodObject<Shape>>) => Promise<CallToolResult>;
|
|
21
37
|
};
|
|
22
|
-
export interface ToolRegistrar {
|
|
23
|
-
enableToolsetAndRefresh(toolset: string): Promise<string>;
|
|
24
|
-
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* The activity type ids the Backlog API accepts as a filter.
|
|
4
|
+
*
|
|
5
|
+
* All that is left of backlogOutputDefinition.ts. That file described API
|
|
6
|
+
* responses in parallel with the types backlog-js already ships; tools now take
|
|
7
|
+
* their field names from those types instead. This one is different: it is an
|
|
8
|
+
* input filter, and backlog-js has no enum for it.
|
|
9
|
+
*/
|
|
10
|
+
export declare const ActivityTypeSchema: z.ZodEnum<{
|
|
11
|
+
Undefined: number;
|
|
12
|
+
IssueCreated: number;
|
|
13
|
+
IssueUpdated: number;
|
|
14
|
+
IssueCommented: number;
|
|
15
|
+
IssueDeleted: number;
|
|
16
|
+
WikiCreated: number;
|
|
17
|
+
WikiUpdated: number;
|
|
18
|
+
WikiDeleted: number;
|
|
19
|
+
FileAdded: number;
|
|
20
|
+
FileUpdated: number;
|
|
21
|
+
FileDeleted: number;
|
|
22
|
+
SvnCommitted: number;
|
|
23
|
+
GitPushed: number;
|
|
24
|
+
GitRepositoryCreated: number;
|
|
25
|
+
IssueMultiUpdated: number;
|
|
26
|
+
ProjectUserAdded: number;
|
|
27
|
+
ProjectUserRemoved: number;
|
|
28
|
+
NotifyAdded: number;
|
|
29
|
+
PullRequestAdded: number;
|
|
30
|
+
PullRequestUpdated: number;
|
|
31
|
+
PullRequestCommented: number;
|
|
32
|
+
PullRequestMerged: number;
|
|
33
|
+
MilestoneCreated: number;
|
|
34
|
+
MilestoneUpdated: number;
|
|
35
|
+
MilestoneDeleted: number;
|
|
36
|
+
ProjectGroupAdded: number;
|
|
37
|
+
ProjectGroupDeleted: number;
|
|
38
|
+
}>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* The activity type ids the Backlog API accepts as a filter.
|
|
4
|
+
*
|
|
5
|
+
* All that is left of backlogOutputDefinition.ts. That file described API
|
|
6
|
+
* responses in parallel with the types backlog-js already ships; tools now take
|
|
7
|
+
* their field names from those types instead. This one is different: it is an
|
|
8
|
+
* input filter, and backlog-js has no enum for it.
|
|
9
|
+
*/
|
|
10
|
+
export const ActivityTypeSchema = z.nativeEnum({
|
|
11
|
+
Undefined: -1,
|
|
12
|
+
IssueCreated: 1,
|
|
13
|
+
IssueUpdated: 2,
|
|
14
|
+
IssueCommented: 3,
|
|
15
|
+
IssueDeleted: 4,
|
|
16
|
+
WikiCreated: 5,
|
|
17
|
+
WikiUpdated: 6,
|
|
18
|
+
WikiDeleted: 7,
|
|
19
|
+
FileAdded: 8,
|
|
20
|
+
FileUpdated: 9,
|
|
21
|
+
FileDeleted: 10,
|
|
22
|
+
SvnCommitted: 11,
|
|
23
|
+
GitPushed: 12,
|
|
24
|
+
GitRepositoryCreated: 13,
|
|
25
|
+
IssueMultiUpdated: 14,
|
|
26
|
+
ProjectUserAdded: 15,
|
|
27
|
+
ProjectUserRemoved: 16,
|
|
28
|
+
NotifyAdded: 17,
|
|
29
|
+
PullRequestAdded: 18,
|
|
30
|
+
PullRequestUpdated: 19,
|
|
31
|
+
PullRequestCommented: 20,
|
|
32
|
+
PullRequestMerged: 21,
|
|
33
|
+
MilestoneCreated: 22,
|
|
34
|
+
MilestoneUpdated: 23,
|
|
35
|
+
MilestoneDeleted: 24,
|
|
36
|
+
ProjectGroupAdded: 25,
|
|
37
|
+
ProjectGroupDeleted: 26,
|
|
38
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Describes the `fields` parameter that `--optimize-response` adds to a tool.
|
|
4
|
+
*
|
|
5
|
+
* The selectable names come straight from the tool's `outputFields`, so they are
|
|
6
|
+
* published as a JSON Schema enum rather than described in prose. That is the
|
|
7
|
+
* whole point of the shape: the enum *is* the documentation, an unknown name is
|
|
8
|
+
* rejected by schema validation instead of being silently dropped, and the text
|
|
9
|
+
* shrinks to one sentence per tool.
|
|
10
|
+
*
|
|
11
|
+
* Selection is one level deep. It used to accept a GraphQL selection set, parsed
|
|
12
|
+
* with the `graphql` package, which cost ~1 MB for one `parse` call and accepted
|
|
13
|
+
* far more of the grammar than was ever honoured — aliases, fragments, arguments
|
|
14
|
+
* and directives all parsed and were then quietly ignored, and descending into an
|
|
15
|
+
* array field returned `{}` and lost the data.
|
|
16
|
+
*/
|
|
17
|
+
export declare function fieldSelection(outputFields: readonly PropertyKey[], importantFields?: readonly PropertyKey[]): {
|
|
18
|
+
names: string[];
|
|
19
|
+
description: string;
|
|
20
|
+
} | undefined;
|
|
21
|
+
/** The `fields` parameter itself, or undefined when the tool has nothing to offer. */
|
|
22
|
+
export declare function fieldSelectionSchema(outputFields: readonly PropertyKey[], importantFields?: readonly PropertyKey[]): z.ZodOptional<z.ZodArray<z.ZodEnum<Record<string, string>>>> | undefined;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Describes the `fields` parameter that `--optimize-response` adds to a tool.
|
|
4
|
+
*
|
|
5
|
+
* The selectable names come straight from the tool's `outputFields`, so they are
|
|
6
|
+
* published as a JSON Schema enum rather than described in prose. That is the
|
|
7
|
+
* whole point of the shape: the enum *is* the documentation, an unknown name is
|
|
8
|
+
* rejected by schema validation instead of being silently dropped, and the text
|
|
9
|
+
* shrinks to one sentence per tool.
|
|
10
|
+
*
|
|
11
|
+
* Selection is one level deep. It used to accept a GraphQL selection set, parsed
|
|
12
|
+
* with the `graphql` package, which cost ~1 MB for one `parse` call and accepted
|
|
13
|
+
* far more of the grammar than was ever honoured — aliases, fragments, arguments
|
|
14
|
+
* and directives all parsed and were then quietly ignored, and descending into an
|
|
15
|
+
* array field returned `{}` and lost the data.
|
|
16
|
+
*/
|
|
17
|
+
export function fieldSelection(outputFields, importantFields = []) {
|
|
18
|
+
// `keyof T` admits numbers and symbols. Entity keys are all strings, but taking
|
|
19
|
+
// PropertyKey here keeps the caller from having to assert that.
|
|
20
|
+
const names = outputFields.map(String);
|
|
21
|
+
// `z.enum([])` is not constructible, and a tool with no known output fields has
|
|
22
|
+
// nothing to select from anyway.
|
|
23
|
+
if (names.length === 0)
|
|
24
|
+
return undefined;
|
|
25
|
+
const useful = importantFields.map(String).filter((f) => names.includes(f));
|
|
26
|
+
const description = useful.length > 0
|
|
27
|
+
? `Return only these fields of the result, to keep the response small. Most callers want: ${useful.join(', ')}.`
|
|
28
|
+
: 'Return only these fields of the result, to keep the response small.';
|
|
29
|
+
return { names, description };
|
|
30
|
+
}
|
|
31
|
+
/** The `fields` parameter itself, or undefined when the tool has nothing to offer. */
|
|
32
|
+
export function fieldSelectionSchema(outputFields, importantFields = []) {
|
|
33
|
+
const selection = fieldSelection(outputFields, importantFields);
|
|
34
|
+
if (!selection)
|
|
35
|
+
return undefined;
|
|
36
|
+
return z
|
|
37
|
+
.array(z.enum(selection.names))
|
|
38
|
+
.optional()
|
|
39
|
+
.describe(selection.description);
|
|
40
|
+
}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { Backlog } from 'backlog-js';
|
|
2
|
-
import { ToolsetGroup
|
|
2
|
+
import { ToolsetGroup } from '../types/toolsets.js';
|
|
3
3
|
import { DescriptionHelper } from '../createDescriptionHelper.js';
|
|
4
|
-
export declare function getToolset(group: ToolsetGroup, name: string): Toolset | undefined;
|
|
5
|
-
export declare function enableToolset(group: ToolsetGroup, name: string): string;
|
|
6
4
|
export declare const buildToolsetGroup: (backlog: Backlog, helper: DescriptionHelper, enabledToolsets: string[]) => ToolsetGroup;
|