backlog-mcp-server 0.16.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.
Files changed (157) hide show
  1. package/README.ja.md +15 -32
  2. package/README.md +20 -32
  3. package/build/auth/oauthRoutes.js +53 -1
  4. package/build/createBacklogMcpServer.d.ts +4 -6
  5. package/build/createBacklogMcpServer.js +4 -12
  6. package/build/handlers/builders/composeToolHandler.d.ts +1 -1
  7. package/build/handlers/builders/composeToolHandler.js +15 -9
  8. package/build/handlers/transformers/wrapWithFieldPicking.d.ts +14 -1
  9. package/build/handlers/transformers/wrapWithFieldPicking.js +30 -36
  10. package/build/index.js +30 -16
  11. package/build/lib.d.ts +1 -1
  12. package/build/loadDescriptionOverrides.d.ts +0 -13
  13. package/build/loadDescriptionOverrides.js +73 -11
  14. package/build/reportUnknownOverrideKeys.d.ts +22 -0
  15. package/build/reportUnknownOverrideKeys.js +42 -0
  16. package/build/tools/addDocument.d.ts +2 -2
  17. package/build/tools/addDocument.js +17 -2
  18. package/build/tools/addIssue.d.ts +2 -2
  19. package/build/tools/addIssue.js +32 -2
  20. package/build/tools/addIssueComment.d.ts +2 -2
  21. package/build/tools/addIssueComment.js +14 -2
  22. package/build/tools/addProject.d.ts +2 -2
  23. package/build/tools/addProject.js +22 -2
  24. package/build/tools/addPullRequest.d.ts +2 -2
  25. package/build/tools/addPullRequest.js +26 -2
  26. package/build/tools/addPullRequestComment.d.ts +2 -2
  27. package/build/tools/addPullRequestComment.js +12 -2
  28. package/build/tools/addRelatedIssue.d.ts +2 -2
  29. package/build/tools/addRelatedIssue.js +33 -2
  30. package/build/tools/addVersionMilestone.d.ts +2 -2
  31. package/build/tools/addVersionMilestone.js +12 -2
  32. package/build/tools/addWatching.d.ts +2 -2
  33. package/build/tools/addWatching.js +12 -2
  34. package/build/tools/addWiki.d.ts +2 -2
  35. package/build/tools/addWiki.js +16 -2
  36. package/build/tools/countIssues.d.ts +2 -2
  37. package/build/tools/countIssues.js +3 -2
  38. package/build/tools/deleteIssue.d.ts +2 -2
  39. package/build/tools/deleteIssue.js +32 -2
  40. package/build/tools/deleteProject.d.ts +2 -2
  41. package/build/tools/deleteProject.js +22 -2
  42. package/build/tools/deleteVersion.d.ts +2 -2
  43. package/build/tools/deleteVersion.js +12 -2
  44. package/build/tools/deleteWatching.d.ts +2 -2
  45. package/build/tools/deleteWatching.js +12 -2
  46. package/build/tools/getCategories.d.ts +2 -2
  47. package/build/tools/getCategories.js +8 -2
  48. package/build/tools/getCustomFields.d.ts +2 -2
  49. package/build/tools/getCustomFields.js +22 -2
  50. package/build/tools/getDocument.d.ts +2 -2
  51. package/build/tools/getDocument.js +17 -2
  52. package/build/tools/getDocumentTree.d.ts +2 -2
  53. package/build/tools/getDocumentTree.js +7 -2
  54. package/build/tools/getDocuments.d.ts +2 -2
  55. package/build/tools/getDocuments.js +17 -2
  56. package/build/tools/getGitRepositories.d.ts +2 -2
  57. package/build/tools/getGitRepositories.js +17 -2
  58. package/build/tools/getGitRepository.d.ts +2 -2
  59. package/build/tools/getGitRepository.js +17 -2
  60. package/build/tools/getIssue.d.ts +2 -2
  61. package/build/tools/getIssue.js +32 -2
  62. package/build/tools/getIssueComments.d.ts +2 -2
  63. package/build/tools/getIssueComments.js +14 -2
  64. package/build/tools/getIssueTypes.d.ts +2 -2
  65. package/build/tools/getIssueTypes.js +11 -2
  66. package/build/tools/getIssues.d.ts +10 -10
  67. package/build/tools/getIssues.js +32 -2
  68. package/build/tools/getMyself.d.ts +2 -2
  69. package/build/tools/getMyself.js +11 -2
  70. package/build/tools/getNotifications.d.ts +2 -2
  71. package/build/tools/getNotifications.js +15 -2
  72. package/build/tools/getNotificationsCount.d.ts +2 -2
  73. package/build/tools/getNotificationsCount.js +5 -2
  74. package/build/tools/getPriorities.d.ts +2 -2
  75. package/build/tools/getPriorities.js +3 -2
  76. package/build/tools/getProject.d.ts +2 -2
  77. package/build/tools/getProject.js +22 -2
  78. package/build/tools/getProjectList.d.ts +2 -2
  79. package/build/tools/getProjectList.js +22 -2
  80. package/build/tools/getProjectUsers.d.ts +2 -2
  81. package/build/tools/getProjectUsers.js +11 -2
  82. package/build/tools/getPullRequest.d.ts +2 -2
  83. package/build/tools/getPullRequest.js +26 -2
  84. package/build/tools/getPullRequestComments.d.ts +2 -2
  85. package/build/tools/getPullRequestComments.js +12 -2
  86. package/build/tools/getPullRequests.d.ts +2 -2
  87. package/build/tools/getPullRequests.js +26 -2
  88. package/build/tools/getPullRequestsCount.d.ts +2 -2
  89. package/build/tools/getPullRequestsCount.js +5 -2
  90. package/build/tools/getRelatedIssues.d.ts +2 -2
  91. package/build/tools/getRelatedIssues.js +33 -2
  92. package/build/tools/getResolutions.d.ts +2 -2
  93. package/build/tools/getResolutions.js +3 -2
  94. package/build/tools/getSpace.d.ts +2 -2
  95. package/build/tools/getSpace.js +13 -2
  96. package/build/tools/getSpaceActivities.d.ts +2 -2
  97. package/build/tools/getSpaceActivities.js +12 -2
  98. package/build/tools/getUserRecentUpdates.d.ts +2 -2
  99. package/build/tools/getUserRecentUpdates.js +12 -2
  100. package/build/tools/getUserStarsCount.d.ts +2 -2
  101. package/build/tools/getUserStarsCount.js +3 -2
  102. package/build/tools/getUsers.d.ts +2 -2
  103. package/build/tools/getUsers.js +11 -2
  104. package/build/tools/getVersionMilestoneList.d.ts +2 -2
  105. package/build/tools/getVersionMilestoneList.js +12 -2
  106. package/build/tools/getWatchingListCount.d.ts +2 -2
  107. package/build/tools/getWatchingListCount.js +5 -2
  108. package/build/tools/getWatchingListItems.d.ts +2 -2
  109. package/build/tools/getWatchingListItems.js +12 -2
  110. package/build/tools/getWiki.d.ts +2 -2
  111. package/build/tools/getWiki.js +16 -2
  112. package/build/tools/getWikiPages.d.ts +2 -2
  113. package/build/tools/getWikiPages.js +12 -2
  114. package/build/tools/getWikisCount.d.ts +2 -2
  115. package/build/tools/getWikisCount.js +3 -2
  116. package/build/tools/markNotificationAsRead.d.ts +6 -1
  117. package/build/tools/markNotificationAsRead.js +6 -1
  118. package/build/tools/markWatchingAsRead.d.ts +6 -1
  119. package/build/tools/markWatchingAsRead.js +6 -1
  120. package/build/tools/removeRelatedIssue.d.ts +2 -2
  121. package/build/tools/removeRelatedIssue.js +33 -2
  122. package/build/tools/resetUnreadNotificationCount.d.ts +2 -2
  123. package/build/tools/resetUnreadNotificationCount.js +5 -2
  124. package/build/tools/updateIssue.d.ts +2 -2
  125. package/build/tools/updateIssue.js +32 -2
  126. package/build/tools/updateIssueComment.d.ts +2 -2
  127. package/build/tools/updateIssueComment.js +14 -2
  128. package/build/tools/updateProject.d.ts +2 -2
  129. package/build/tools/updateProject.js +22 -2
  130. package/build/tools/updatePullRequest.d.ts +2 -2
  131. package/build/tools/updatePullRequest.js +26 -2
  132. package/build/tools/updatePullRequestComment.d.ts +2 -2
  133. package/build/tools/updatePullRequestComment.js +12 -2
  134. package/build/tools/updateVersionMilestone.d.ts +2 -2
  135. package/build/tools/updateVersionMilestone.js +12 -2
  136. package/build/tools/updateWatching.d.ts +2 -2
  137. package/build/tools/updateWatching.js +12 -2
  138. package/build/tools/updateWiki.d.ts +2 -2
  139. package/build/tools/updateWiki.js +16 -2
  140. package/build/types/outputFields.d.ts +26 -0
  141. package/build/types/outputFields.js +3 -0
  142. package/build/types/tool.d.ts +21 -8
  143. package/build/types/zod/activityType.d.ts +38 -0
  144. package/build/types/zod/activityType.js +38 -0
  145. package/build/utils/fieldSelection.d.ts +22 -0
  146. package/build/utils/fieldSelection.js +40 -0
  147. package/build/utils/toolsetUtils.d.ts +1 -3
  148. package/build/utils/toolsetUtils.js +0 -12
  149. package/package.json +4 -4
  150. package/build/tools/dynamicTools/toolsets.d.ts +0 -15
  151. package/build/tools/dynamicTools/toolsets.js +0 -103
  152. package/build/types/zod/backlogOutputDefinition.d.ts +0 -3334
  153. package/build/types/zod/backlogOutputDefinition.js +0 -483
  154. package/build/utils/generateFieldsDescription.d.ts +0 -5
  155. package/build/utils/generateFieldsDescription.js +0 -50
  156. package/build/utils/toolRegistrar.d.ts +0 -5
  157. package/build/utils/toolRegistrar.js +0 -12
@@ -1,6 +1,11 @@
1
1
  import { z } from 'zod';
2
2
  import { Backlog } from 'backlog-js';
3
3
  import { ToolDefinition } from '../types/tool.js';
4
+ /** This tool reports its own outcome; the Backlog call returns nothing. */
5
+ type MarkNotificationAsReadResult = {
6
+ success: boolean;
7
+ message: string;
8
+ };
4
9
  import { DescriptionHelper } from '../createDescriptionHelper.js';
5
10
  declare const markNotificationAsReadSchema: (t: DescriptionHelper["t"]) => {
6
11
  id: z.ZodNumber;
@@ -9,5 +14,5 @@ export declare const MarkNotificationAsReadResultSchema: z.ZodObject<{
9
14
  success: z.ZodBoolean;
10
15
  message: z.ZodString;
11
16
  }, z.core.$strip>;
12
- export declare const markNotificationAsReadTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof markNotificationAsReadSchema>, (typeof MarkNotificationAsReadResultSchema)["shape"]>;
17
+ export declare const markNotificationAsReadTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof markNotificationAsReadSchema>, MarkNotificationAsReadResult>;
13
18
  export {};
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { buildToolSchema } from '../types/tool.js';
3
+ import { outputFields } from '../types/outputFields.js';
3
4
  const markNotificationAsReadSchema = buildToolSchema((t) => ({
4
5
  id: z
5
6
  .number()
@@ -14,7 +15,11 @@ export const markNotificationAsReadTool = (backlog, { t }) => {
14
15
  name: 'mark_notification_as_read',
15
16
  description: t('TOOL_MARK_NOTIFICATION_AS_READ_DESCRIPTION', 'Mark a notification as read'),
16
17
  schema: z.object(markNotificationAsReadSchema(t)),
17
- outputSchema: MarkNotificationAsReadResultSchema,
18
+ returnsList: false,
19
+ outputFields: outputFields()([
20
+ 'success',
21
+ 'message',
22
+ ]),
18
23
  handler: async ({ id }) => {
19
24
  await backlog.markAsReadNotification(id);
20
25
  return {
@@ -1,6 +1,11 @@
1
1
  import { z } from 'zod';
2
2
  import { Backlog } from 'backlog-js';
3
3
  import { ToolDefinition } from '../types/tool.js';
4
+ /** This tool reports its own outcome; the Backlog call returns nothing. */
5
+ type MarkWatchingAsReadResult = {
6
+ success: boolean;
7
+ message: string;
8
+ };
4
9
  import { DescriptionHelper } from '../createDescriptionHelper.js';
5
10
  declare const markWatchingAsReadSchema: (t: DescriptionHelper["t"]) => {
6
11
  watchId: z.ZodNumber;
@@ -9,5 +14,5 @@ export declare const MarkWatchingAsReadResultSchema: z.ZodObject<{
9
14
  success: z.ZodBoolean;
10
15
  message: z.ZodString;
11
16
  }, z.core.$strip>;
12
- export declare const markWatchingAsReadTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof markWatchingAsReadSchema>, (typeof MarkWatchingAsReadResultSchema)["shape"]>;
17
+ export declare const markWatchingAsReadTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof markWatchingAsReadSchema>, MarkWatchingAsReadResult>;
13
18
  export {};
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { buildToolSchema } from '../types/tool.js';
3
+ import { outputFields } from '../types/outputFields.js';
3
4
  const markWatchingAsReadSchema = buildToolSchema((t) => ({
4
5
  watchId: z
5
6
  .number()
@@ -14,7 +15,11 @@ export const markWatchingAsReadTool = (backlog, { t }) => {
14
15
  name: 'mark_watching_as_read',
15
16
  description: t('TOOL_MARK_WATCHING_AS_READ_DESCRIPTION', 'Mark a watch as read'),
16
17
  schema: z.object(markWatchingAsReadSchema(t)),
17
- outputSchema: MarkWatchingAsReadResultSchema,
18
+ returnsList: false,
19
+ outputFields: outputFields()([
20
+ 'success',
21
+ 'message',
22
+ ]),
18
23
  handler: async ({ watchId }) => {
19
24
  await backlog.resetWatchingListItemAsRead(watchId);
20
25
  return {
@@ -1,12 +1,12 @@
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 { RelatedIssueSchema } from '../types/zod/backlogOutputDefinition.js';
6
6
  declare const removeRelatedIssueSchema: (t: DescriptionHelper["t"]) => {
7
7
  issueId: z.ZodOptional<z.ZodNumber>;
8
8
  issueKey: z.ZodOptional<z.ZodString>;
9
9
  relatedIssueId: z.ZodNumber;
10
10
  };
11
- export declare const removeRelatedIssueTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof removeRelatedIssueSchema>, (typeof RelatedIssueSchema)["shape"]>;
11
+ export declare const removeRelatedIssueTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof removeRelatedIssueSchema>, Entity.Issue.RelatedIssue>;
12
12
  export {};
@@ -1,6 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { buildToolSchema } from '../types/tool.js';
3
- import { RelatedIssueSchema } from '../types/zod/backlogOutputDefinition.js';
3
+ import { outputFields } from '../types/outputFields.js';
4
4
  import { resolveIdOrKey } from '../utils/resolveIdOrKey.js';
5
5
  const removeRelatedIssueSchema = buildToolSchema((t) => ({
6
6
  issueId: z
@@ -20,7 +20,38 @@ export const removeRelatedIssueTool = (backlog, { t }) => {
20
20
  name: 'remove_related_issue',
21
21
  description: t('TOOL_REMOVE_RELATED_ISSUE_DESCRIPTION', 'Removes the relation between an issue and a related issue'),
22
22
  schema: z.object(removeRelatedIssueSchema(t)),
23
- outputSchema: RelatedIssueSchema,
23
+ returnsList: false,
24
+ outputFields: outputFields()([
25
+ 'id',
26
+ 'projectId',
27
+ 'issueKey',
28
+ 'keyId',
29
+ 'issueType',
30
+ 'summary',
31
+ 'description',
32
+ 'resolution',
33
+ 'priority',
34
+ 'status',
35
+ 'assignee',
36
+ 'category',
37
+ 'versions',
38
+ 'milestone',
39
+ 'startDate',
40
+ 'dueDate',
41
+ 'estimatedHours',
42
+ 'actualHours',
43
+ 'parentIssueId',
44
+ 'createdUser',
45
+ 'created',
46
+ 'updatedUser',
47
+ 'updated',
48
+ 'customFields',
49
+ 'attachments',
50
+ 'sharedFiles',
51
+ 'stars',
52
+ 'childIssueSummary',
53
+ 'type',
54
+ ]),
24
55
  handler: async ({ issueId, issueKey, relatedIssueId }) => {
25
56
  const result = resolveIdOrKey('issue', { id: issueId, key: issueKey }, t);
26
57
  if (!result.ok) {
@@ -1,7 +1,7 @@
1
+ import type { Entity } from 'backlog-js';
1
2
  import { Backlog } from 'backlog-js';
2
3
  import { ToolDefinition } from '../types/tool.js';
3
4
  import { DescriptionHelper } from '../createDescriptionHelper.js';
4
- import { NotificationCountSchema } from '../types/zod/backlogOutputDefinition.js';
5
5
  declare const resetUnreadNotificationCountSchema: (t: DescriptionHelper["t"]) => {};
6
- export declare const resetUnreadNotificationCountTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof resetUnreadNotificationCountSchema>, (typeof NotificationCountSchema)["shape"]>;
6
+ export declare const resetUnreadNotificationCountTool: (backlog: Backlog, { t }: DescriptionHelper) => ToolDefinition<ReturnType<typeof resetUnreadNotificationCountSchema>, Entity.Notification.NotificationCount>;
7
7
  export {};
@@ -1,13 +1,16 @@
1
1
  import { z } from 'zod';
2
2
  import { buildToolSchema } from '../types/tool.js';
3
- import { NotificationCountSchema } from '../types/zod/backlogOutputDefinition.js';
3
+ import { outputFields } from '../types/outputFields.js';
4
4
  const resetUnreadNotificationCountSchema = buildToolSchema((_t) => ({}));
5
5
  export const resetUnreadNotificationCountTool = (backlog, { t }) => {
6
6
  return {
7
7
  name: 'reset_unread_notification_count',
8
8
  description: t('TOOL_RESET_UNREAD_NOTIFICATION_COUNT_DESCRIPTION', 'Reset unread notification count'),
9
9
  schema: z.object(resetUnreadNotificationCountSchema(t)),
10
- outputSchema: NotificationCountSchema,
10
+ returnsList: false,
11
+ outputFields: outputFields()([
12
+ 'count',
13
+ ]),
11
14
  handler: async () => backlog.resetNotificationsMarkAsRead(),
12
15
  };
13
16
  };
@@ -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>, (typeof IssueSchema)["shape"]>;
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 { IssueSchema } from '../types/zod/backlogOutputDefinition.js';
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
- outputSchema: IssueSchema,
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>, (typeof IssueCommentSchema)["shape"]>;
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 { IssueCommentSchema } from '../types/zod/backlogOutputDefinition.js';
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
- outputSchema: IssueCommentSchema,
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>, (typeof ProjectSchema)["shape"]>;
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 { ProjectSchema } from '../types/zod/backlogOutputDefinition.js';
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
- outputSchema: ProjectSchema,
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>, (typeof PullRequestSchema)["shape"]>;
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 { PullRequestSchema } from '../types/zod/backlogOutputDefinition.js';
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
- outputSchema: PullRequestSchema,
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>, (typeof PullRequestCommentSchema)["shape"]>;
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 { PullRequestCommentSchema } from '../types/zod/backlogOutputDefinition.js';
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
- outputSchema: PullRequestCommentSchema,
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>, (typeof VersionSchema)["shape"]>;
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 { VersionSchema } from '../types/zod/backlogOutputDefinition.js';
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
- outputSchema: VersionSchema,
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>, (typeof WatchingListItemSchema)["shape"]>;
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 { WatchingListItemSchema } from '../types/zod/backlogOutputDefinition.js';
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
- outputSchema: WatchingListItemSchema,
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>, (typeof WikiSchema)["shape"]>;
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 { WikiSchema } from '../types/zod/backlogOutputDefinition.js';
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
- outputSchema: WikiSchema,
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 {};
@@ -0,0 +1,3 @@
1
+ export function outputFields() {
2
+ return (keys) => keys;
3
+ }