@opentabs-dev/opentabs-plugin-linear 0.0.82 → 0.0.84

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 (163) hide show
  1. package/dist/adapter.iife.js +1766 -77
  2. package/dist/adapter.iife.js.map +4 -4
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +92 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/tools/add-issue-label.d.ts +28 -0
  7. package/dist/tools/add-issue-label.d.ts.map +1 -0
  8. package/dist/tools/add-issue-label.js +56 -0
  9. package/dist/tools/add-issue-label.js.map +1 -0
  10. package/dist/tools/add-issue-subscriber.d.ts +8 -0
  11. package/dist/tools/add-issue-subscriber.d.ts.map +1 -0
  12. package/dist/tools/add-issue-subscriber.js +29 -0
  13. package/dist/tools/add-issue-subscriber.js.map +1 -0
  14. package/dist/tools/batch-update-issues.d.ts +35 -0
  15. package/dist/tools/batch-update-issues.d.ts.map +1 -0
  16. package/dist/tools/batch-update-issues.js +86 -0
  17. package/dist/tools/batch-update-issues.js.map +1 -0
  18. package/dist/tools/create-attachment.d.ts +19 -0
  19. package/dist/tools/create-attachment.d.ts.map +1 -0
  20. package/dist/tools/create-attachment.js +45 -0
  21. package/dist/tools/create-attachment.js.map +1 -0
  22. package/dist/tools/create-document.d.ts +21 -0
  23. package/dist/tools/create-document.d.ts.map +1 -0
  24. package/dist/tools/create-document.js +46 -0
  25. package/dist/tools/create-document.js.map +1 -0
  26. package/dist/tools/create-initiative.d.ts +26 -0
  27. package/dist/tools/create-initiative.d.ts.map +1 -0
  28. package/dist/tools/create-initiative.js +50 -0
  29. package/dist/tools/create-initiative.js.map +1 -0
  30. package/dist/tools/create-issue-relation.d.ts +18 -0
  31. package/dist/tools/create-issue-relation.d.ts.map +1 -0
  32. package/dist/tools/create-issue-relation.js +53 -0
  33. package/dist/tools/create-issue-relation.js.map +1 -0
  34. package/dist/tools/create-milestone.d.ts +16 -0
  35. package/dist/tools/create-milestone.d.ts.map +1 -0
  36. package/dist/tools/create-milestone.js +45 -0
  37. package/dist/tools/create-milestone.js.map +1 -0
  38. package/dist/tools/create-project-update.d.ts +20 -0
  39. package/dist/tools/create-project-update.d.ts.map +1 -0
  40. package/dist/tools/create-project-update.js +37 -0
  41. package/dist/tools/create-project-update.js.map +1 -0
  42. package/dist/tools/delete-attachment.d.ts +7 -0
  43. package/dist/tools/delete-attachment.d.ts.map +1 -0
  44. package/dist/tools/delete-attachment.js +28 -0
  45. package/dist/tools/delete-attachment.js.map +1 -0
  46. package/dist/tools/delete-comment.d.ts +7 -0
  47. package/dist/tools/delete-comment.d.ts.map +1 -0
  48. package/dist/tools/delete-comment.js +28 -0
  49. package/dist/tools/delete-comment.js.map +1 -0
  50. package/dist/tools/delete-issue-relation.d.ts +7 -0
  51. package/dist/tools/delete-issue-relation.d.ts.map +1 -0
  52. package/dist/tools/delete-issue-relation.js +28 -0
  53. package/dist/tools/delete-issue-relation.js.map +1 -0
  54. package/dist/tools/delete-label.d.ts +7 -0
  55. package/dist/tools/delete-label.d.ts.map +1 -0
  56. package/dist/tools/delete-label.js +28 -0
  57. package/dist/tools/delete-label.js.map +1 -0
  58. package/dist/tools/delete-project-update.d.ts +7 -0
  59. package/dist/tools/delete-project-update.d.ts.map +1 -0
  60. package/dist/tools/delete-project-update.js +28 -0
  61. package/dist/tools/delete-project-update.js.map +1 -0
  62. package/dist/tools/get-attachment.d.ts +16 -0
  63. package/dist/tools/get-attachment.d.ts.map +1 -0
  64. package/dist/tools/get-attachment.js +30 -0
  65. package/dist/tools/get-attachment.js.map +1 -0
  66. package/dist/tools/get-cycle.d.ts +15 -0
  67. package/dist/tools/get-cycle.d.ts.map +1 -0
  68. package/dist/tools/get-cycle.js +29 -0
  69. package/dist/tools/get-cycle.js.map +1 -0
  70. package/dist/tools/get-document.d.ts +18 -0
  71. package/dist/tools/get-document.d.ts.map +1 -0
  72. package/dist/tools/get-document.js +31 -0
  73. package/dist/tools/get-document.js.map +1 -0
  74. package/dist/tools/get-initiative.d.ts +30 -0
  75. package/dist/tools/get-initiative.d.ts.map +1 -0
  76. package/dist/tools/get-initiative.js +42 -0
  77. package/dist/tools/get-initiative.js.map +1 -0
  78. package/dist/tools/get-milestone.d.ts +13 -0
  79. package/dist/tools/get-milestone.d.ts.map +1 -0
  80. package/dist/tools/get-milestone.js +29 -0
  81. package/dist/tools/get-milestone.js.map +1 -0
  82. package/dist/tools/get-team.d.ts +12 -0
  83. package/dist/tools/get-team.d.ts.map +1 -0
  84. package/dist/tools/get-team.js +29 -0
  85. package/dist/tools/get-team.js.map +1 -0
  86. package/dist/tools/get-user.d.ts +14 -0
  87. package/dist/tools/get-user.d.ts.map +1 -0
  88. package/dist/tools/get-user.js +29 -0
  89. package/dist/tools/get-user.js.map +1 -0
  90. package/dist/tools/list-attachments.d.ts +22 -0
  91. package/dist/tools/list-attachments.d.ts.map +1 -0
  92. package/dist/tools/list-attachments.js +46 -0
  93. package/dist/tools/list-attachments.js.map +1 -0
  94. package/dist/tools/list-documents.d.ts +24 -0
  95. package/dist/tools/list-documents.d.ts.map +1 -0
  96. package/dist/tools/list-documents.js +49 -0
  97. package/dist/tools/list-documents.js.map +1 -0
  98. package/dist/tools/list-initiatives.d.ts +28 -0
  99. package/dist/tools/list-initiatives.d.ts.map +1 -0
  100. package/dist/tools/list-initiatives.js +48 -0
  101. package/dist/tools/list-initiatives.js.map +1 -0
  102. package/dist/tools/list-issue-history.d.ts +23 -0
  103. package/dist/tools/list-issue-history.d.ts.map +1 -0
  104. package/dist/tools/list-issue-history.js +52 -0
  105. package/dist/tools/list-issue-history.js.map +1 -0
  106. package/dist/tools/list-milestones.d.ts +13 -0
  107. package/dist/tools/list-milestones.d.ts.map +1 -0
  108. package/dist/tools/list-milestones.js +35 -0
  109. package/dist/tools/list-milestones.js.map +1 -0
  110. package/dist/tools/list-project-labels.d.ts +14 -0
  111. package/dist/tools/list-project-labels.d.ts.map +1 -0
  112. package/dist/tools/list-project-labels.js +36 -0
  113. package/dist/tools/list-project-labels.js.map +1 -0
  114. package/dist/tools/list-project-updates.d.ts +20 -0
  115. package/dist/tools/list-project-updates.d.ts.map +1 -0
  116. package/dist/tools/list-project-updates.js +46 -0
  117. package/dist/tools/list-project-updates.js.map +1 -0
  118. package/dist/tools/list-sub-issues.d.ts +33 -0
  119. package/dist/tools/list-sub-issues.d.ts.map +1 -0
  120. package/dist/tools/list-sub-issues.js +53 -0
  121. package/dist/tools/list-sub-issues.js.map +1 -0
  122. package/dist/tools/list-team-members.d.ts +20 -0
  123. package/dist/tools/list-team-members.d.ts.map +1 -0
  124. package/dist/tools/list-team-members.js +45 -0
  125. package/dist/tools/list-team-members.js.map +1 -0
  126. package/dist/tools/move-issue-to-project.d.ts +28 -0
  127. package/dist/tools/move-issue-to-project.d.ts.map +1 -0
  128. package/dist/tools/move-issue-to-project.js +43 -0
  129. package/dist/tools/move-issue-to-project.js.map +1 -0
  130. package/dist/tools/remove-issue-label.d.ts +28 -0
  131. package/dist/tools/remove-issue-label.d.ts.map +1 -0
  132. package/dist/tools/remove-issue-label.js +56 -0
  133. package/dist/tools/remove-issue-label.js.map +1 -0
  134. package/dist/tools/remove-issue-subscriber.d.ts +8 -0
  135. package/dist/tools/remove-issue-subscriber.d.ts.map +1 -0
  136. package/dist/tools/remove-issue-subscriber.js +29 -0
  137. package/dist/tools/remove-issue-subscriber.js.map +1 -0
  138. package/dist/tools/schemas.d.ts +207 -0
  139. package/dist/tools/schemas.d.ts.map +1 -1
  140. package/dist/tools/schemas.js +120 -0
  141. package/dist/tools/schemas.js.map +1 -1
  142. package/dist/tools/set-issue-cycle.d.ts +28 -0
  143. package/dist/tools/set-issue-cycle.d.ts.map +1 -0
  144. package/dist/tools/set-issue-cycle.js +43 -0
  145. package/dist/tools/set-issue-cycle.js.map +1 -0
  146. package/dist/tools/update-document.d.ts +22 -0
  147. package/dist/tools/update-document.d.ts.map +1 -0
  148. package/dist/tools/update-document.js +47 -0
  149. package/dist/tools/update-document.js.map +1 -0
  150. package/dist/tools/update-initiative.d.ts +27 -0
  151. package/dist/tools/update-initiative.d.ts.map +1 -0
  152. package/dist/tools/update-initiative.js +51 -0
  153. package/dist/tools/update-initiative.js.map +1 -0
  154. package/dist/tools/update-label.d.ts +17 -0
  155. package/dist/tools/update-label.d.ts.map +1 -0
  156. package/dist/tools/update-label.js +43 -0
  157. package/dist/tools/update-label.js.map +1 -0
  158. package/dist/tools/update-milestone.d.ts +16 -0
  159. package/dist/tools/update-milestone.d.ts.map +1 -0
  160. package/dist/tools/update-milestone.js +44 -0
  161. package/dist/tools/update-milestone.js.map +1 -0
  162. package/dist/tools.json +4044 -577
  163. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-issue-history.js","sourceRoot":"","sources":["../../src/tools/list-issue-history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErF,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;IACzC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,oBAAoB;IACjC,WAAW,EAAE,iGAAiG;IAC9G,OAAO,EAAE,2BAA2B;IACpC,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;QACjG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;KACpF,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACxE,UAAU,EAAE,gBAAgB,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KACnF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAE/C,MAAM,IAAI,GAAG,MAAM,OAAO,CAQxB;;;;;;;;;;;;;;;;QAgBE,EACF,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAC3D,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAClC,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAA0C,CAAC,CAAC;YAC3F,UAAU,EAAE;gBACV,aAAa,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,IAAI,KAAK;gBACpD,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE;aAC7C;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { z } from 'zod';
2
+ export declare const listMilestones: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ project_id: z.ZodString;
4
+ }, z.core.$strip>, z.ZodObject<{
5
+ milestones: z.ZodArray<z.ZodObject<{
6
+ id: z.ZodString;
7
+ name: z.ZodString;
8
+ description: z.ZodString;
9
+ target_date: z.ZodString;
10
+ sort_order: z.ZodNumber;
11
+ }, z.core.$strip>>;
12
+ }, z.core.$strip>>;
13
+ //# sourceMappingURL=list-milestones.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-milestones.d.ts","sourceRoot":"","sources":["../../src/tools/list-milestones.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,cAAc;;;;;;;;;;kBAyCzB,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { graphql } from '../linear-api.js';
2
+ import { ToolError, defineTool } from '@opentabs-dev/plugin-sdk';
3
+ import { z } from 'zod';
4
+ import { mapMilestone, milestoneSchema } from './schemas.js';
5
+ export const listMilestones = defineTool({
6
+ name: 'list_milestones',
7
+ displayName: 'List Milestones',
8
+ description: 'List milestones for a Linear project.',
9
+ summary: 'List project milestones',
10
+ icon: 'milestone',
11
+ group: 'Projects',
12
+ input: z.object({
13
+ project_id: z.string().describe('Project UUID to list milestones for'),
14
+ }),
15
+ output: z.object({
16
+ milestones: z.array(milestoneSchema).describe('List of milestones in the project'),
17
+ }),
18
+ handle: async (params) => {
19
+ const data = await graphql(`query ListMilestones($id: String!) {
20
+ project(id: $id) {
21
+ projectMilestones {
22
+ nodes {
23
+ id name description targetDate sortOrder
24
+ }
25
+ }
26
+ }
27
+ }`, { id: params.project_id });
28
+ if (!data.project)
29
+ throw ToolError.notFound('Project not found');
30
+ return {
31
+ milestones: (data.project.projectMilestones?.nodes ?? []).map(n => mapMilestone(n)),
32
+ };
33
+ },
34
+ });
35
+ //# sourceMappingURL=list-milestones.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-milestones.js","sourceRoot":"","sources":["../../src/tools/list-milestones.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE7D,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;IACvC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,iBAAiB;IAC9B,WAAW,EAAE,uCAAuC;IACpD,OAAO,EAAE,yBAAyB;IAClC,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KACvE,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;KACnF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,OAAO,CAOxB;;;;;;;;QAQE,EACF,EAAE,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,CAC1B,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;QAEjE,OAAO;YACL,UAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAChE,YAAY,CAAC,CAAuC,CAAC,CACtD;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ export declare const listProjectLabels: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ project_id: z.ZodString;
4
+ }, z.core.$strip>, z.ZodObject<{
5
+ labels: z.ZodArray<z.ZodObject<{
6
+ id: z.ZodString;
7
+ name: z.ZodString;
8
+ color: z.ZodString;
9
+ description: z.ZodString;
10
+ is_group: z.ZodBoolean;
11
+ parent_name: z.ZodString;
12
+ }, z.core.$strip>>;
13
+ }, z.core.$strip>>;
14
+ //# sourceMappingURL=list-project-labels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-project-labels.d.ts","sourceRoot":"","sources":["../../src/tools/list-project-labels.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;kBAwC5B,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { graphql } from '../linear-api.js';
2
+ import { ToolError, defineTool } from '@opentabs-dev/plugin-sdk';
3
+ import { z } from 'zod';
4
+ import { labelSchema, mapLabel } from './schemas.js';
5
+ export const listProjectLabels = defineTool({
6
+ name: 'list_project_labels',
7
+ displayName: 'List Project Labels',
8
+ description: 'List labels applied to a specific Linear project.',
9
+ summary: 'List labels on a project',
10
+ icon: 'tag',
11
+ group: 'Projects',
12
+ input: z.object({
13
+ project_id: z.string().describe('Project UUID to list labels for'),
14
+ }),
15
+ output: z.object({
16
+ labels: z.array(labelSchema).describe('List of labels on the project'),
17
+ }),
18
+ handle: async (params) => {
19
+ const data = await graphql(`query ListProjectLabels($id: String!) {
20
+ project(id: $id) {
21
+ labels {
22
+ nodes {
23
+ id name color description isGroup
24
+ parent { name }
25
+ }
26
+ }
27
+ }
28
+ }`, { id: params.project_id });
29
+ if (!data.project)
30
+ throw ToolError.notFound('Project not found');
31
+ return {
32
+ labels: (data.project.labels?.nodes ?? []).map(n => mapLabel(n)),
33
+ };
34
+ },
35
+ });
36
+ //# sourceMappingURL=list-project-labels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-project-labels.js","sourceRoot":"","sources":["../../src/tools/list-project-labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;IAC1C,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,qBAAqB;IAClC,WAAW,EAAE,mDAAmD;IAChE,OAAO,EAAE,0BAA0B;IACnC,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;KACnE,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KACvE,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,OAAO,CAOxB;;;;;;;;;QASE,EACF,EAAE,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,CAC1B,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;QAEjE,OAAO;YACL,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAmC,CAAC,CAAC;SACnG,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ export declare const listProjectUpdates: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ project_id: z.ZodString;
4
+ limit: z.ZodOptional<z.ZodNumber>;
5
+ after: z.ZodOptional<z.ZodString>;
6
+ }, z.core.$strip>, z.ZodObject<{
7
+ updates: z.ZodArray<z.ZodObject<{
8
+ id: z.ZodString;
9
+ body: z.ZodString;
10
+ health: z.ZodString;
11
+ user_name: z.ZodString;
12
+ created_at: z.ZodString;
13
+ updated_at: z.ZodString;
14
+ }, z.core.$strip>>;
15
+ pagination: z.ZodObject<{
16
+ has_next_page: z.ZodBoolean;
17
+ end_cursor: z.ZodString;
18
+ }, z.core.$strip>;
19
+ }, z.core.$strip>>;
20
+ //# sourceMappingURL=list-project-updates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-project-updates.d.ts","sourceRoot":"","sources":["../../src/tools/list-project-updates.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;kBAmD7B,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { graphql } from '../linear-api.js';
2
+ import { ToolError, defineTool } from '@opentabs-dev/plugin-sdk';
3
+ import { z } from 'zod';
4
+ import { mapStatusUpdate, paginationSchema, statusUpdateSchema } from './schemas.js';
5
+ export const listProjectUpdates = defineTool({
6
+ name: 'list_project_updates',
7
+ displayName: 'List Project Updates',
8
+ description: 'List status updates (health reports) for a Linear project.',
9
+ summary: 'List project status updates',
10
+ icon: 'activity',
11
+ group: 'Projects',
12
+ input: z.object({
13
+ project_id: z.string().describe('Project UUID to list updates for'),
14
+ limit: z.number().optional().describe('Maximum number of results to return (default 25, max 50)'),
15
+ after: z.string().optional().describe('Pagination cursor from a previous response'),
16
+ }),
17
+ output: z.object({
18
+ updates: z.array(statusUpdateSchema).describe('List of status updates'),
19
+ pagination: paginationSchema.describe('Pagination info for fetching more results'),
20
+ }),
21
+ handle: async (params) => {
22
+ const limit = Math.min(params.limit ?? 25, 50);
23
+ const data = await graphql(`query ListProjectUpdates($id: String!, $first: Int, $after: String) {
24
+ project(id: $id) {
25
+ projectUpdates(first: $first, after: $after) {
26
+ nodes {
27
+ id body health createdAt updatedAt
28
+ user { name displayName }
29
+ }
30
+ pageInfo { hasNextPage endCursor }
31
+ }
32
+ }
33
+ }`, { id: params.project_id, first: limit, after: params.after });
34
+ if (!data.project)
35
+ throw ToolError.notFound('Project not found');
36
+ const result = data.project.projectUpdates;
37
+ return {
38
+ updates: result.nodes.map(n => mapStatusUpdate(n)),
39
+ pagination: {
40
+ has_next_page: result.pageInfo?.hasNextPage ?? false,
41
+ end_cursor: result.pageInfo?.endCursor ?? '',
42
+ },
43
+ };
44
+ },
45
+ });
46
+ //# sourceMappingURL=list-project-updates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-project-updates.js","sourceRoot":"","sources":["../../src/tools/list-project-updates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAErF,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;IAC3C,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,sBAAsB;IACnC,WAAW,EAAE,4DAA4D;IACzE,OAAO,EAAE,6BAA6B;IACtC,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QACnE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;QACjG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;KACpF,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACvE,UAAU,EAAE,gBAAgB,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KACnF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAE/C,MAAM,IAAI,GAAG,MAAM,OAAO,CAQxB;;;;;;;;;;QAUE,EACF,EAAE,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAC7D,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;QAC3C,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAA0C,CAAC,CAAC;YAC3F,UAAU,EAAE;gBACV,aAAa,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,IAAI,KAAK;gBACpD,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE;aAC7C;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { z } from 'zod';
2
+ export declare const listSubIssues: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ issue_id: z.ZodString;
4
+ limit: z.ZodOptional<z.ZodNumber>;
5
+ after: z.ZodOptional<z.ZodString>;
6
+ }, z.core.$strip>, z.ZodObject<{
7
+ sub_issues: z.ZodArray<z.ZodObject<{
8
+ id: z.ZodString;
9
+ identifier: z.ZodString;
10
+ title: z.ZodString;
11
+ description: z.ZodString;
12
+ priority: z.ZodNumber;
13
+ priority_label: z.ZodString;
14
+ state_name: z.ZodString;
15
+ state_type: z.ZodString;
16
+ assignee_name: z.ZodString;
17
+ team_key: z.ZodString;
18
+ team_name: z.ZodString;
19
+ label_names: z.ZodArray<z.ZodString>;
20
+ project_name: z.ZodString;
21
+ cycle_number: z.ZodNumber;
22
+ due_date: z.ZodString;
23
+ estimate: z.ZodNumber;
24
+ url: z.ZodString;
25
+ created_at: z.ZodString;
26
+ updated_at: z.ZodString;
27
+ }, z.core.$strip>>;
28
+ pagination: z.ZodObject<{
29
+ has_next_page: z.ZodBoolean;
30
+ end_cursor: z.ZodString;
31
+ }, z.core.$strip>;
32
+ }, z.core.$strip>>;
33
+ //# sourceMappingURL=list-sub-issues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-sub-issues.d.ts","sourceRoot":"","sources":["../../src/tools/list-sub-issues.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAgDxB,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { graphql } from '../linear-api.js';
2
+ import { ToolError, defineTool } from '@opentabs-dev/plugin-sdk';
3
+ import { z } from 'zod';
4
+ import { issueSchema, mapIssue, paginationSchema } from './schemas.js';
5
+ const ISSUE_FIELDS = `
6
+ id identifier title description priority priorityLabel url
7
+ createdAt updatedAt dueDate estimate
8
+ state { name type }
9
+ assignee { name displayName }
10
+ team { key name }
11
+ labels { nodes { name } }
12
+ project { name }
13
+ cycle { number }
14
+ `;
15
+ export const listSubIssues = defineTool({
16
+ name: 'list_sub_issues',
17
+ displayName: 'List Sub-Issues',
18
+ description: 'List child/sub-issues of a parent Linear issue.',
19
+ summary: 'List sub-issues of an issue',
20
+ icon: 'list-tree',
21
+ group: 'Issues',
22
+ input: z.object({
23
+ issue_id: z.string().describe('Parent issue UUID to list sub-issues for'),
24
+ limit: z.number().optional().describe('Maximum number of results to return (default 25, max 50)'),
25
+ after: z.string().optional().describe('Pagination cursor from a previous response'),
26
+ }),
27
+ output: z.object({
28
+ sub_issues: z.array(issueSchema).describe('List of sub-issues'),
29
+ pagination: paginationSchema.describe('Pagination info for fetching more results'),
30
+ }),
31
+ handle: async (params) => {
32
+ const limit = Math.min(params.limit ?? 25, 50);
33
+ const data = await graphql(`query ListSubIssues($id: String!, $first: Int, $after: String) {
34
+ issue(id: $id) {
35
+ children(first: $first, after: $after) {
36
+ nodes { ${ISSUE_FIELDS} }
37
+ pageInfo { hasNextPage endCursor }
38
+ }
39
+ }
40
+ }`, { id: params.issue_id, first: limit, after: params.after });
41
+ if (!data.issue)
42
+ throw ToolError.notFound('Issue not found');
43
+ const result = data.issue.children;
44
+ return {
45
+ sub_issues: result.nodes.map(n => mapIssue(n)),
46
+ pagination: {
47
+ has_next_page: result.pageInfo?.hasNextPage ?? false,
48
+ end_cursor: result.pageInfo?.endCursor ?? '',
49
+ },
50
+ };
51
+ },
52
+ });
53
+ //# sourceMappingURL=list-sub-issues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-sub-issues.js","sourceRoot":"","sources":["../../src/tools/list-sub-issues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEvE,MAAM,YAAY,GAAG;;;;;;;;;CASpB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;IACtC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,iBAAiB;IAC9B,WAAW,EAAE,iDAAiD;IAC9D,OAAO,EAAE,6BAA6B;IACtC,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACzE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;QACjG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;KACpF,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC/D,UAAU,EAAE,gBAAgB,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KACnF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAE/C,MAAM,IAAI,GAAG,MAAM,OAAO,CAQxB;;;sBAGgB,YAAY;;;;QAI1B,EACF,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAC3D,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QACnC,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAmC,CAAC,CAAC;YAChF,UAAU,EAAE;gBACV,aAAa,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,IAAI,KAAK;gBACpD,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE;aAC7C;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ export declare const listTeamMembers: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ team_id: z.ZodString;
4
+ limit: z.ZodOptional<z.ZodNumber>;
5
+ after: z.ZodOptional<z.ZodString>;
6
+ }, z.core.$strip>, z.ZodObject<{
7
+ members: z.ZodArray<z.ZodObject<{
8
+ id: z.ZodString;
9
+ name: z.ZodString;
10
+ email: z.ZodString;
11
+ display_name: z.ZodString;
12
+ active: z.ZodBoolean;
13
+ admin: z.ZodBoolean;
14
+ }, z.core.$strip>>;
15
+ pagination: z.ZodObject<{
16
+ has_next_page: z.ZodBoolean;
17
+ end_cursor: z.ZodString;
18
+ }, z.core.$strip>;
19
+ }, z.core.$strip>>;
20
+ //# sourceMappingURL=list-team-members.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-team-members.d.ts","sourceRoot":"","sources":["../../src/tools/list-team-members.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;kBAkD1B,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { graphql } from '../linear-api.js';
2
+ import { ToolError, defineTool } from '@opentabs-dev/plugin-sdk';
3
+ import { z } from 'zod';
4
+ import { mapUser, paginationSchema, userSchema } from './schemas.js';
5
+ export const listTeamMembers = defineTool({
6
+ name: 'list_team_members',
7
+ displayName: 'List Team Members',
8
+ description: 'List members of a specific Linear team.',
9
+ summary: 'List members of a team',
10
+ icon: 'users',
11
+ group: 'Teams & Users',
12
+ input: z.object({
13
+ team_id: z.string().describe('Team UUID to list members for'),
14
+ limit: z.number().optional().describe('Maximum number of results to return (default 50, max 100)'),
15
+ after: z.string().optional().describe('Pagination cursor from a previous response'),
16
+ }),
17
+ output: z.object({
18
+ members: z.array(userSchema).describe('List of team members'),
19
+ pagination: paginationSchema.describe('Pagination info for fetching more results'),
20
+ }),
21
+ handle: async (params) => {
22
+ const limit = Math.min(params.limit ?? 50, 100);
23
+ const data = await graphql(`query ListTeamMembers($id: String!, $first: Int, $after: String) {
24
+ team(id: $id) {
25
+ members(first: $first, after: $after) {
26
+ nodes {
27
+ id name email displayName active admin
28
+ }
29
+ pageInfo { hasNextPage endCursor }
30
+ }
31
+ }
32
+ }`, { id: params.team_id, first: limit, after: params.after });
33
+ if (!data.team)
34
+ throw ToolError.notFound('Team not found');
35
+ const result = data.team.members;
36
+ return {
37
+ members: result.nodes.map(n => mapUser(n)),
38
+ pagination: {
39
+ has_next_page: result.pageInfo?.hasNextPage ?? false,
40
+ end_cursor: result.pageInfo?.endCursor ?? '',
41
+ },
42
+ };
43
+ },
44
+ });
45
+ //# sourceMappingURL=list-team-members.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-team-members.js","sourceRoot":"","sources":["../../src/tools/list-team-members.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAErE,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;IACxC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,mBAAmB;IAChC,WAAW,EAAE,yCAAyC;IACtD,OAAO,EAAE,wBAAwB;IACjC,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,eAAe;IACtB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAC7D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;QAClG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;KACpF,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAC7D,UAAU,EAAE,gBAAgB,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KACnF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QAEhD,MAAM,IAAI,GAAG,MAAM,OAAO,CAQxB;;;;;;;;;QASE,EACF,EAAE,EAAE,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAC1D,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,MAAM,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QACjC,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAkC,CAAC,CAAC;YAC3E,UAAU,EAAE;gBACV,aAAa,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,IAAI,KAAK;gBACpD,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE;aAC7C;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { z } from 'zod';
2
+ export declare const moveIssueToProject: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ issue_id: z.ZodString;
4
+ project_id: z.ZodString;
5
+ }, z.core.$strip>, z.ZodObject<{
6
+ issue: z.ZodObject<{
7
+ id: z.ZodString;
8
+ identifier: z.ZodString;
9
+ title: z.ZodString;
10
+ description: z.ZodString;
11
+ priority: z.ZodNumber;
12
+ priority_label: z.ZodString;
13
+ state_name: z.ZodString;
14
+ state_type: z.ZodString;
15
+ assignee_name: z.ZodString;
16
+ team_key: z.ZodString;
17
+ team_name: z.ZodString;
18
+ label_names: z.ZodArray<z.ZodString>;
19
+ project_name: z.ZodString;
20
+ cycle_number: z.ZodNumber;
21
+ due_date: z.ZodString;
22
+ estimate: z.ZodNumber;
23
+ url: z.ZodString;
24
+ created_at: z.ZodString;
25
+ updated_at: z.ZodString;
26
+ }, z.core.$strip>;
27
+ }, z.core.$strip>>;
28
+ //# sourceMappingURL=move-issue-to-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move-issue-to-project.d.ts","sourceRoot":"","sources":["../../src/tools/move-issue-to-project.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;kBA6C7B,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { graphql } from '../linear-api.js';
2
+ import { ToolError, defineTool } from '@opentabs-dev/plugin-sdk';
3
+ import { z } from 'zod';
4
+ import { issueSchema, mapIssue } from './schemas.js';
5
+ export const moveIssueToProject = defineTool({
6
+ name: 'move_issue_to_project',
7
+ displayName: 'Move Issue to Project',
8
+ description: 'Move an issue to a different project. Use list_projects to find project IDs. Pass an empty string to remove from the current project.',
9
+ summary: 'Move an issue between projects',
10
+ icon: 'folder-input',
11
+ group: 'Issues',
12
+ input: z.object({
13
+ issue_id: z.string().describe('Issue UUID to move'),
14
+ project_id: z.string().describe('Target project UUID, or empty string to remove from project'),
15
+ }),
16
+ output: z.object({
17
+ issue: issueSchema.describe('The updated issue'),
18
+ }),
19
+ handle: async (params) => {
20
+ const input = {
21
+ projectId: params.project_id || null,
22
+ };
23
+ const data = await graphql(`mutation MoveIssueToProject($id: String!, $input: IssueUpdateInput!) {
24
+ issueUpdate(id: $id, input: $input) {
25
+ success
26
+ issue {
27
+ id identifier title description priority priorityLabel url
28
+ createdAt updatedAt dueDate estimate
29
+ state { name type }
30
+ assignee { name displayName }
31
+ team { key name }
32
+ labels { nodes { name } }
33
+ project { name }
34
+ cycle { number }
35
+ }
36
+ }
37
+ }`, { id: params.issue_id, input });
38
+ if (!data.issueUpdate?.issue)
39
+ throw ToolError.internal('Failed to move issue — no issue returned');
40
+ return { issue: mapIssue(data.issueUpdate.issue) };
41
+ },
42
+ });
43
+ //# sourceMappingURL=move-issue-to-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move-issue-to-project.js","sourceRoot":"","sources":["../../src/tools/move-issue-to-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;IAC3C,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,uBAAuB;IACpC,WAAW,EACT,uIAAuI;IACzI,OAAO,EAAE,gCAAgC;IACzC,IAAI,EAAE,cAAc;IACpB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACnD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;KAC/F,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KACjD,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,KAAK,GAA4B;YACrC,SAAS,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI;SACrC,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,OAAO,CAGxB;;;;;;;;;;;;;;QAcE,EACF,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,CAC/B,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK;YAAE,MAAM,SAAS,CAAC,QAAQ,CAAC,0CAA0C,CAAC,CAAC;QAEnG,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAuC,CAAC,EAAE,CAAC;IACvF,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { z } from 'zod';
2
+ export declare const removeIssueLabel: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ issue_id: z.ZodString;
4
+ label_id: z.ZodString;
5
+ }, z.core.$strip>, z.ZodObject<{
6
+ issue: z.ZodObject<{
7
+ id: z.ZodString;
8
+ identifier: z.ZodString;
9
+ title: z.ZodString;
10
+ description: z.ZodString;
11
+ priority: z.ZodNumber;
12
+ priority_label: z.ZodString;
13
+ state_name: z.ZodString;
14
+ state_type: z.ZodString;
15
+ assignee_name: z.ZodString;
16
+ team_key: z.ZodString;
17
+ team_name: z.ZodString;
18
+ label_names: z.ZodArray<z.ZodString>;
19
+ project_name: z.ZodString;
20
+ cycle_number: z.ZodNumber;
21
+ due_date: z.ZodString;
22
+ estimate: z.ZodNumber;
23
+ url: z.ZodString;
24
+ created_at: z.ZodString;
25
+ updated_at: z.ZodString;
26
+ }, z.core.$strip>;
27
+ }, z.core.$strip>>;
28
+ //# sourceMappingURL=remove-issue-label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-issue-label.d.ts","sourceRoot":"","sources":["../../src/tools/remove-issue-label.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;kBA0D3B,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { graphql } from '../linear-api.js';
2
+ import { ToolError, defineTool } from '@opentabs-dev/plugin-sdk';
3
+ import { z } from 'zod';
4
+ import { issueSchema, mapIssue } from './schemas.js';
5
+ const ISSUE_FIELDS = `
6
+ id identifier title description priority priorityLabel url
7
+ createdAt updatedAt dueDate estimate
8
+ state { name type }
9
+ assignee { name displayName }
10
+ team { key name }
11
+ labels { nodes { id name } }
12
+ project { name }
13
+ cycle { number }
14
+ `;
15
+ export const removeIssueLabel = defineTool({
16
+ name: 'remove_issue_label',
17
+ displayName: 'Remove Issue Label',
18
+ description: 'Remove a label from an issue without affecting other labels. Unlike update_issue which replaces all labels, this removes only the specified one.',
19
+ summary: 'Remove a label from an issue',
20
+ icon: 'tag',
21
+ group: 'Issues',
22
+ input: z.object({
23
+ issue_id: z.string().describe('Issue UUID to remove the label from'),
24
+ label_id: z.string().describe('Label UUID to remove (use list_labels to find label IDs)'),
25
+ }),
26
+ output: z.object({
27
+ issue: issueSchema.describe('The updated issue with the label removed'),
28
+ }),
29
+ handle: async (params) => {
30
+ // Fetch current label IDs
31
+ const current = await graphql(`query GetIssueLabels($id: String!) {
32
+ issue(id: $id) {
33
+ labels { nodes { id } }
34
+ }
35
+ }`, { id: params.issue_id });
36
+ if (!current.issue)
37
+ throw ToolError.notFound('Issue not found');
38
+ const existingIds = (current.issue.labels?.nodes ?? []).map(l => l.id);
39
+ const labelIds = existingIds.filter(id => id !== params.label_id);
40
+ if (labelIds.length === existingIds.length) {
41
+ // Label was not present — just return the issue
42
+ const data = await graphql(`query GetIssue($id: String!) { issue(id: $id) { ${ISSUE_FIELDS} } }`, { id: params.issue_id });
43
+ return { issue: mapIssue(data.issue) };
44
+ }
45
+ const data = await graphql(`mutation RemoveIssueLabel($id: String!, $input: IssueUpdateInput!) {
46
+ issueUpdate(id: $id, input: $input) {
47
+ success
48
+ issue { ${ISSUE_FIELDS} }
49
+ }
50
+ }`, { id: params.issue_id, input: { labelIds } });
51
+ if (!data.issueUpdate?.issue)
52
+ throw ToolError.internal('Failed to remove label — no issue returned');
53
+ return { issue: mapIssue(data.issueUpdate.issue) };
54
+ },
55
+ });
56
+ //# sourceMappingURL=remove-issue-label.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-issue-label.js","sourceRoot":"","sources":["../../src/tools/remove-issue-label.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,YAAY,GAAG;;;;;;;;;CASpB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;IACzC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,oBAAoB;IACjC,WAAW,EACT,kJAAkJ;IACpJ,OAAO,EAAE,8BAA8B;IACvC,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QACpE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;KAC1F,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC,0CAA0C,CAAC;KACxE,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,0BAA0B;QAC1B,MAAM,OAAO,GAAG,MAAM,OAAO,CAG3B;;;;QAIE,EACF,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,CACxB,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,MAAM,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QAEhE,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC;QAElE,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;YAC3C,gDAAgD;YAChD,MAAM,IAAI,GAAG,MAAM,OAAO,CACxB,mDAAmD,YAAY,MAAM,EACrE,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,CACxB,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAuC,CAAC,EAAE,CAAC;QAC3E,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,OAAO,CAGxB;;;oBAGc,YAAY;;QAExB,EACF,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,CAC7C,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK;YAAE,MAAM,SAAS,CAAC,QAAQ,CAAC,4CAA4C,CAAC,CAAC;QAErG,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAuC,CAAC,EAAE,CAAC;IACvF,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { z } from 'zod';
2
+ export declare const removeIssueSubscriber: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ issue_id: z.ZodString;
4
+ subscriber_id: z.ZodString;
5
+ }, z.core.$strip>, z.ZodObject<{
6
+ success: z.ZodBoolean;
7
+ }, z.core.$strip>>;
8
+ //# sourceMappingURL=remove-issue-subscriber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-issue-subscriber.d.ts","sourceRoot":"","sources":["../../src/tools/remove-issue-subscriber.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,qBAAqB;;;;;kBA8BhC,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { graphql } from '../linear-api.js';
2
+ import { ToolError, defineTool } from '@opentabs-dev/plugin-sdk';
3
+ import { z } from 'zod';
4
+ export const removeIssueSubscriber = defineTool({
5
+ name: 'remove_issue_subscriber',
6
+ displayName: 'Remove Issue Subscriber',
7
+ description: 'Unsubscribe a user from notifications for a Linear issue.',
8
+ summary: 'Unsubscribe a user from an issue',
9
+ icon: 'bell-minus',
10
+ group: 'Issues',
11
+ input: z.object({
12
+ issue_id: z.string().describe('Issue UUID to unsubscribe from'),
13
+ subscriber_id: z.string().describe('User UUID to unsubscribe'),
14
+ }),
15
+ output: z.object({
16
+ success: z.boolean().describe('Whether the unsubscription was successful'),
17
+ }),
18
+ handle: async (params) => {
19
+ const data = await graphql(`mutation RemoveIssueSubscriber($id: String!, $userId: String!) {
20
+ issueUnsubscribe(id: $id, userId: $userId) {
21
+ success
22
+ }
23
+ }`, { id: params.issue_id, userId: params.subscriber_id });
24
+ if (!data.issueUnsubscribe)
25
+ throw ToolError.internal('Failed to unsubscribe — no response');
26
+ return { success: data.issueUnsubscribe.success };
27
+ },
28
+ });
29
+ //# sourceMappingURL=remove-issue-subscriber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-issue-subscriber.js","sourceRoot":"","sources":["../../src/tools/remove-issue-subscriber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;IAC9C,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EAAE,yBAAyB;IACtC,WAAW,EAAE,2DAA2D;IACxE,OAAO,EAAE,kCAAkC;IAC3C,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC/D,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAC/D,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KAC3E,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,OAAO,CAGxB;;;;QAIE,EACF,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE,CACtD,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE,MAAM,SAAS,CAAC,QAAQ,CAAC,qCAAqC,CAAC,CAAC;QAE5F,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;IACpD,CAAC;CACF,CAAC,CAAC"}