@enrichlayer/el-linear 1.9.0 → 1.15.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 (135) hide show
  1. package/README.md +139 -10
  2. package/claude-skills/linear-operations/SKILL.md +41 -1
  3. package/dist/auth/linear-credential.d.ts +27 -0
  4. package/dist/auth/linear-credential.js +1 -0
  5. package/dist/auth/oauth-app-config.d.ts +4 -3
  6. package/dist/auth/oauth-app-config.js +13 -2
  7. package/dist/auth/oauth-callback.d.ts +2 -3
  8. package/dist/auth/oauth-callback.js +2 -2
  9. package/dist/auth/oauth-client.d.ts +8 -2
  10. package/dist/auth/oauth-client.js +26 -0
  11. package/dist/auth/oauth-fs.d.ts +2 -1
  12. package/dist/auth/oauth-headless.d.ts +2 -1
  13. package/dist/auth/oauth-storage.d.ts +5 -1
  14. package/dist/auth/oauth-storage.js +1 -1
  15. package/dist/auth/oauth-token.d.ts +4 -3
  16. package/dist/auth/oauth-token.js +16 -4
  17. package/dist/auth/token-resolver.d.ts +14 -5
  18. package/dist/auth/token-resolver.js +6 -1
  19. package/dist/commands/attachments.js +2 -1
  20. package/dist/commands/batch.js +18 -21
  21. package/dist/commands/comments.js +22 -33
  22. package/dist/commands/config.js +178 -5
  23. package/dist/commands/cycles.js +2 -1
  24. package/dist/commands/documents.js +2 -1
  25. package/dist/commands/graphql.js +4 -6
  26. package/dist/commands/init/aliases.js +1 -1
  27. package/dist/commands/init/defaults.d.ts +2 -1
  28. package/dist/commands/init/index.js +45 -35
  29. package/dist/commands/init/oauth.d.ts +4 -1
  30. package/dist/commands/init/oauth.js +22 -4
  31. package/dist/commands/init/shared.d.ts +24 -2
  32. package/dist/commands/init/shared.js +35 -4
  33. package/dist/commands/init/token.d.ts +3 -3
  34. package/dist/commands/init/token.js +5 -24
  35. package/dist/commands/init/workspace.d.ts +2 -1
  36. package/dist/commands/init/workspace.js +1 -1
  37. package/dist/commands/introspect.d.ts +27 -0
  38. package/dist/commands/introspect.js +178 -0
  39. package/dist/commands/issue-id.js +1 -3
  40. package/dist/commands/issues/branch.js +9 -1
  41. package/dist/commands/issues/description.js +2 -6
  42. package/dist/commands/issues/link-references.d.ts +21 -0
  43. package/dist/commands/issues/link-references.js +171 -0
  44. package/dist/commands/issues/relations.d.ts +44 -0
  45. package/dist/commands/issues/relations.js +132 -0
  46. package/dist/commands/issues.js +269 -309
  47. package/dist/commands/labels.js +15 -24
  48. package/dist/commands/profile.js +1 -0
  49. package/dist/commands/project-milestones.js +13 -20
  50. package/dist/commands/projects.d.ts +2 -0
  51. package/dist/commands/projects.js +157 -44
  52. package/dist/commands/read-shortcut.d.ts +1 -1
  53. package/dist/commands/read-shortcut.js +28 -8
  54. package/dist/commands/refs.js +75 -8
  55. package/dist/commands/releases.js +26 -30
  56. package/dist/commands/search.js +49 -33
  57. package/dist/commands/teams.js +2 -1
  58. package/dist/commands/templates.js +9 -14
  59. package/dist/commands/users.js +5 -2
  60. package/dist/config/config.d.ts +99 -1
  61. package/dist/config/config.js +264 -52
  62. package/dist/config/error-enrichment.d.ts +62 -0
  63. package/dist/config/error-enrichment.js +417 -0
  64. package/dist/config/issue-validation.d.ts +37 -0
  65. package/dist/config/issue-validation.js +63 -1
  66. package/dist/config/paths.d.ts +2 -8
  67. package/dist/config/paths.js +4 -2
  68. package/dist/config/resolver.d.ts +8 -1
  69. package/dist/config/resolver.js +11 -5
  70. package/dist/main.js +13 -1
  71. package/dist/queries/attachments-types.d.ts +30 -0
  72. package/dist/queries/attachments-types.js +5 -0
  73. package/dist/queries/comments-types.d.ts +55 -0
  74. package/dist/queries/comments-types.js +5 -0
  75. package/dist/queries/common.d.ts +2 -2
  76. package/dist/queries/common.js +8 -0
  77. package/dist/queries/documents-types.d.ts +62 -0
  78. package/dist/queries/documents-types.js +9 -0
  79. package/dist/queries/introspect-types.d.ts +58 -0
  80. package/dist/queries/introspect-types.js +10 -0
  81. package/dist/queries/issues-types.d.ts +481 -0
  82. package/dist/queries/issues-types.js +23 -0
  83. package/dist/queries/issues.d.ts +51 -10
  84. package/dist/queries/issues.js +147 -5
  85. package/dist/queries/labels-types.d.ts +65 -0
  86. package/dist/queries/labels-types.js +5 -0
  87. package/dist/queries/project-milestones-types.d.ts +92 -0
  88. package/dist/queries/project-milestones-types.js +10 -0
  89. package/dist/queries/project-milestones.d.ts +1 -1
  90. package/dist/queries/projects-types.d.ts +76 -0
  91. package/dist/queries/projects-types.js +5 -0
  92. package/dist/queries/projects.d.ts +2 -0
  93. package/dist/queries/projects.js +22 -0
  94. package/dist/queries/releases-types.d.ts +85 -0
  95. package/dist/queries/releases-types.js +5 -0
  96. package/dist/queries/search-types.d.ts +102 -0
  97. package/dist/queries/search-types.js +6 -0
  98. package/dist/queries/templates-types.d.ts +62 -0
  99. package/dist/queries/templates-types.js +9 -0
  100. package/dist/types/linear.d.ts +21 -3
  101. package/dist/utils/auto-link-references.d.ts +3 -3
  102. package/dist/utils/auto-link-references.js +30 -34
  103. package/dist/utils/extract-field.d.ts +19 -0
  104. package/dist/utils/extract-field.js +99 -0
  105. package/dist/utils/file-service.d.ts +6 -13
  106. package/dist/utils/file-service.js +0 -2
  107. package/dist/utils/formatters/summary.js +6 -1
  108. package/dist/utils/graphql-attachments-service.js +6 -9
  109. package/dist/utils/graphql-documents-service.js +19 -25
  110. package/dist/utils/graphql-issues-service.d.ts +112 -46
  111. package/dist/utils/graphql-issues-service.js +398 -206
  112. package/dist/utils/graphql-service.d.ts +10 -12
  113. package/dist/utils/graphql-service.js +0 -3
  114. package/dist/utils/issue-reference-extractor.d.ts +7 -0
  115. package/dist/utils/issue-reference-extractor.js +5 -3
  116. package/dist/utils/issues-service-bootstrap.d.ts +28 -0
  117. package/dist/utils/issues-service-bootstrap.js +27 -0
  118. package/dist/utils/linear-service.d.ts +21 -14
  119. package/dist/utils/linear-service.js +73 -11
  120. package/dist/utils/markdown-prosemirror.js +12 -12
  121. package/dist/utils/mention-resolver.js +1 -1
  122. package/dist/utils/output.d.ts +82 -2
  123. package/dist/utils/output.js +76 -11
  124. package/dist/utils/project-slug.d.ts +21 -0
  125. package/dist/utils/project-slug.js +45 -0
  126. package/dist/utils/protected-ranges.d.ts +14 -0
  127. package/dist/utils/protected-ranges.js +88 -2
  128. package/dist/utils/sanitize-for-log.d.ts +24 -0
  129. package/dist/utils/sanitize-for-log.js +38 -0
  130. package/dist/utils/table-formatter.js +24 -0
  131. package/dist/utils/validators.d.ts +7 -2
  132. package/dist/utils/validators.js +6 -0
  133. package/dist/utils/workspace-url.d.ts +5 -1
  134. package/dist/utils/workspace-url.js +53 -7
  135. package/package.json +2 -2
@@ -0,0 +1,481 @@
1
+ /**
2
+ * Typed response shapes for the GraphQL queries in `./issues.ts`.
3
+ *
4
+ * Pre-fix, every consumer used `GraphQLResponseData` (a recursive
5
+ * `Record<string, unknown>`) and re-cast every field with `as
6
+ * string` / `as GraphQLResponseData`. A renamed Linear field would
7
+ * silently produce `undefined` at runtime; transformers had no
8
+ * compile-time check that they were reading the fields the queries
9
+ * actually requested.
10
+ *
11
+ * These interfaces mirror the shape of `COMPLETE_ISSUE_FRAGMENT` /
12
+ * `COMPLETE_ISSUE_WITH_COMMENTS_FRAGMENT` (defined in
13
+ * `./common.ts`) so the transformer can consume a typed node and
14
+ * the compiler catches drift between query and consumer.
15
+ *
16
+ * Pattern for adding new types: define a `Foo` node interface +
17
+ * a `GetFooResponse` (or list-shape) wrapper. Co-locate them in
18
+ * this file or a sibling `*-types.ts` so they live next to the
19
+ * query string.
20
+ *
21
+ * Refs ALL-937.
22
+ */
23
+ import type { LinearPriority } from "../types/linear.js";
24
+ /** A reference to a related entity — id + display fields. */
25
+ interface IdNameRef {
26
+ id: string;
27
+ name: string;
28
+ }
29
+ interface IdKeyNameRef {
30
+ id: string;
31
+ key: string;
32
+ name: string;
33
+ }
34
+ interface IdIdentifierTitleRef {
35
+ id: string;
36
+ identifier: string;
37
+ title: string;
38
+ }
39
+ interface AssigneeNode {
40
+ id: string;
41
+ name: string;
42
+ url?: string;
43
+ }
44
+ /**
45
+ * Comment shape as embedded inside `COMPLETE_ISSUE_WITH_COMMENTS_FRAGMENT`
46
+ * (i.e. comments fetched as part of an issue query). Distinct from
47
+ * `comments-types.ts:CommentResourceNode`, which is the shape returned by
48
+ * the standalone comment queries (`LIST_COMMENTS_QUERY`,
49
+ * `CREATE_COMMENT_MUTATION`, `UPDATE_COMMENT_MUTATION`). The two have
50
+ * incompatible `user` shapes — this one allows `null` and uses the
51
+ * issue-page \"assignee\"-style fields, while the standalone resource
52
+ * shape always populates `user` and includes the comment-author-only
53
+ * `CommentUserRef` fields (DEV-4068 T2).
54
+ */
55
+ export interface IssueCommentNode {
56
+ id: string;
57
+ body: string;
58
+ createdAt: string;
59
+ updatedAt: string;
60
+ user: AssigneeNode | null;
61
+ }
62
+ interface CycleNode {
63
+ id: string;
64
+ name: string | null;
65
+ number: number;
66
+ }
67
+ interface ProjectMilestoneNode {
68
+ id: string;
69
+ name: string;
70
+ targetDate: string | null;
71
+ }
72
+ /**
73
+ * Linear's documented generation states for issue summaries. If Linear
74
+ * adds a new state in the future the runtime API would deserialize the
75
+ * new string verbatim — TypeScript wouldn't catch the divergence, but
76
+ * the typical `=== "completed"` check keeps working safely. Widen the
77
+ * union here when Linear documents a new state.
78
+ */
79
+ type IssueSummaryGenerationStatus = "completed" | "pending" | "failed";
80
+ interface IssueSummary {
81
+ content: unknown;
82
+ generationStatus: IssueSummaryGenerationStatus;
83
+ }
84
+ /**
85
+ * Mirrors `COMPLETE_ISSUE_FRAGMENT` from `src/queries/common.ts`.
86
+ * The transformer in `graphql-issues-service.ts` reads these
87
+ * fields. Keep the shapes in lock-step — if you add a field to
88
+ * the fragment, add it here.
89
+ */
90
+ export interface IssueNode {
91
+ id: string;
92
+ identifier: string;
93
+ title: string;
94
+ description: string | null;
95
+ summary: IssueSummary | null;
96
+ branchName: string;
97
+ priority: LinearPriority;
98
+ estimate: number | null;
99
+ dueDate: string | null;
100
+ url: string;
101
+ createdAt: string;
102
+ updatedAt: string;
103
+ state: IdNameRef | null;
104
+ assignee: AssigneeNode | null;
105
+ delegate: AssigneeNode | null;
106
+ team: IdKeyNameRef | null;
107
+ project: IdNameRef | null;
108
+ labels: {
109
+ nodes: IdNameRef[];
110
+ };
111
+ cycle: CycleNode | null;
112
+ projectMilestone: ProjectMilestoneNode | null;
113
+ parent: IdIdentifierTitleRef | null;
114
+ children: {
115
+ nodes: IdIdentifierTitleRef[];
116
+ };
117
+ }
118
+ /**
119
+ * Mirrors `COMPLETE_ISSUE_WITH_COMMENTS_FRAGMENT` — same as
120
+ * `IssueNode` but with the comments connection materialized.
121
+ */
122
+ export interface IssueWithCommentsNode extends IssueNode {
123
+ comments: {
124
+ nodes: IssueCommentNode[];
125
+ };
126
+ }
127
+ /** Response shape for `GET_ISSUE_BY_ID_QUERY`. */
128
+ export interface GetIssueByIdResponse {
129
+ issue: IssueWithCommentsNode | null;
130
+ }
131
+ /** Response shape for `GET_ISSUE_BY_IDENTIFIER_QUERY`. */
132
+ export interface GetIssueByIdentifierResponse {
133
+ issues: {
134
+ nodes: IssueWithCommentsNode[];
135
+ };
136
+ }
137
+ /** Response shape for `GET_ISSUES_QUERY`. */
138
+ export interface GetIssuesResponse {
139
+ issues: {
140
+ nodes: IssueNode[];
141
+ };
142
+ }
143
+ /** Response shape for `SEARCH_ISSUES_QUERY` (full-text). */
144
+ export interface SearchIssuesResponse {
145
+ searchIssues: {
146
+ nodes: IssueNode[];
147
+ };
148
+ }
149
+ /** Response shape for `CREATE_ISSUE_MUTATION`. */
150
+ export interface CreateIssueResponse {
151
+ issueCreate: {
152
+ success: boolean;
153
+ issue: IssueNode | null;
154
+ };
155
+ }
156
+ /** Response shape for `UPDATE_ISSUE_MUTATION`. */
157
+ export interface UpdateIssueResponse {
158
+ issueUpdate: {
159
+ success: boolean;
160
+ issue: IssueNode | null;
161
+ };
162
+ }
163
+ export interface IssueArchiveEntity {
164
+ id: string;
165
+ }
166
+ interface IssueArchivePayload {
167
+ success: boolean;
168
+ lastSyncId: number;
169
+ entity: IssueArchiveEntity | null;
170
+ }
171
+ /** Response shape for `ARCHIVE_ISSUE_MUTATION`. */
172
+ export interface ArchiveIssueResponse {
173
+ issueArchive: IssueArchivePayload;
174
+ }
175
+ /** Response shape for `DELETE_ISSUE_MUTATION`. */
176
+ export interface DeleteIssueResponse {
177
+ issueDelete: IssueArchivePayload;
178
+ }
179
+ /** Response shape for `GET_ISSUE_TEAM_QUERY`. */
180
+ export interface GetIssueTeamResponse {
181
+ issue: {
182
+ team: {
183
+ id: string;
184
+ } | null;
185
+ } | null;
186
+ }
187
+ type WorkflowStateType = "triage" | "backlog" | "unstarted" | "started" | "completed" | "canceled";
188
+ export interface IssueStartContextResponse {
189
+ issue: {
190
+ id: string;
191
+ identifier: string;
192
+ state: {
193
+ id: string;
194
+ name: string;
195
+ type: WorkflowStateType;
196
+ } | null;
197
+ team: {
198
+ id: string;
199
+ key: string;
200
+ name: string;
201
+ } | null;
202
+ delegate: AssigneeNode | null;
203
+ } | null;
204
+ }
205
+ export interface TeamStartedStatusesResponse {
206
+ team: {
207
+ states: {
208
+ nodes: {
209
+ id: string;
210
+ name: string;
211
+ position: number;
212
+ }[];
213
+ };
214
+ } | null;
215
+ }
216
+ /**
217
+ * Issue summary returned by `GET_ISSUE_RELATIONS_QUERY` on the
218
+ * `relatedIssue` / `issue` peer of each relation. Smaller than
219
+ * `IssueNode` — just enough to display a sidebar entry.
220
+ */
221
+ export interface RelationPeerNode {
222
+ id: string;
223
+ identifier: string;
224
+ title: string;
225
+ state: {
226
+ id: string;
227
+ name: string;
228
+ } | null;
229
+ priority: LinearPriority | null;
230
+ assignee: {
231
+ id: string;
232
+ name: string;
233
+ } | null;
234
+ team: {
235
+ id: string;
236
+ key: string;
237
+ name: string;
238
+ } | null;
239
+ }
240
+ export interface RelationOutgoingNode {
241
+ id: string;
242
+ type: string;
243
+ relatedIssue: RelationPeerNode | null;
244
+ }
245
+ export interface RelationIncomingNode {
246
+ id: string;
247
+ type: string;
248
+ issue: RelationPeerNode | null;
249
+ }
250
+ export interface BatchResolveProjectMilestoneRef {
251
+ id: string;
252
+ name: string;
253
+ }
254
+ interface BatchResolveProjectNode {
255
+ id: string;
256
+ name: string;
257
+ /** Present on `BATCH_RESOLVE_FOR_CREATE_QUERY`. */
258
+ teams?: {
259
+ nodes: {
260
+ id: string;
261
+ key: string;
262
+ }[];
263
+ };
264
+ /** Present on `BATCH_RESOLVE_FOR_CREATE_QUERY` and `BATCH_RESOLVE_FOR_UPDATE_QUERY`. */
265
+ projectMilestones?: {
266
+ nodes: BatchResolveProjectMilestoneRef[];
267
+ };
268
+ }
269
+ export interface BatchResolveLabelNode {
270
+ id: string;
271
+ name: string;
272
+ isGroup: boolean;
273
+ team: {
274
+ id: string;
275
+ } | null;
276
+ }
277
+ interface BatchResolveIssueForUpdate {
278
+ id: string;
279
+ identifier: string;
280
+ team: {
281
+ id: string;
282
+ key: string;
283
+ } | null;
284
+ labels: {
285
+ nodes: {
286
+ id: string;
287
+ name: string;
288
+ }[];
289
+ };
290
+ project: {
291
+ id: string;
292
+ projectMilestones: {
293
+ nodes: BatchResolveProjectMilestoneRef[];
294
+ };
295
+ } | null;
296
+ }
297
+ export interface BatchResolveForCreateResponse {
298
+ teams: {
299
+ nodes: {
300
+ id: string;
301
+ key: string;
302
+ name: string;
303
+ }[];
304
+ };
305
+ projectsByName?: {
306
+ nodes: BatchResolveProjectNode[];
307
+ };
308
+ projectsById?: {
309
+ nodes: BatchResolveProjectNode[];
310
+ };
311
+ milestones?: {
312
+ nodes: BatchResolveProjectMilestoneRef[];
313
+ };
314
+ parentIssues: {
315
+ nodes: {
316
+ id: string;
317
+ identifier: string;
318
+ }[];
319
+ };
320
+ }
321
+ export interface BatchResolveForSearchResponse {
322
+ delegates?: {
323
+ nodes: {
324
+ id: string;
325
+ name: string;
326
+ email: string;
327
+ }[];
328
+ };
329
+ teams: {
330
+ nodes: {
331
+ id: string;
332
+ key: string;
333
+ name: string;
334
+ }[];
335
+ };
336
+ projects?: {
337
+ nodes: BatchResolveProjectNode[];
338
+ };
339
+ users: {
340
+ nodes: {
341
+ id: string;
342
+ name: string;
343
+ email: string;
344
+ }[];
345
+ };
346
+ }
347
+ export interface BatchResolveForUpdateResponse {
348
+ projectsByName?: {
349
+ nodes: BatchResolveProjectNode[];
350
+ };
351
+ projectsById?: {
352
+ nodes: BatchResolveProjectNode[];
353
+ };
354
+ milestones?: {
355
+ nodes: BatchResolveProjectMilestoneRef[];
356
+ };
357
+ issues: {
358
+ nodes: BatchResolveIssueForUpdate[];
359
+ };
360
+ }
361
+ export interface ResolveLabelsByNameResponse {
362
+ labels: {
363
+ nodes: BatchResolveLabelNode[];
364
+ };
365
+ }
366
+ /**
367
+ * Merged blob threaded through the field-resolution helpers. All
368
+ * fields are optional because the helpers don't know which batch
369
+ * query produced the result — they read only what they need.
370
+ */
371
+ export interface BatchResolveResult {
372
+ teams?: {
373
+ nodes: {
374
+ id: string;
375
+ key: string;
376
+ name: string;
377
+ }[];
378
+ };
379
+ projects?: {
380
+ nodes: BatchResolveProjectNode[];
381
+ };
382
+ milestones?: {
383
+ nodes: BatchResolveProjectMilestoneRef[];
384
+ };
385
+ parentIssues?: {
386
+ nodes: {
387
+ id: string;
388
+ identifier: string;
389
+ }[];
390
+ };
391
+ users?: {
392
+ nodes: {
393
+ id: string;
394
+ name: string;
395
+ email: string;
396
+ }[];
397
+ };
398
+ delegates?: {
399
+ nodes: {
400
+ id: string;
401
+ name: string;
402
+ email: string;
403
+ }[];
404
+ };
405
+ issues?: {
406
+ nodes: BatchResolveIssueForUpdate[];
407
+ };
408
+ labels?: {
409
+ nodes: BatchResolveLabelNode[];
410
+ };
411
+ }
412
+ /** Response shape for `GET_ISSUE_RELATIONS_QUERY`. */
413
+ export interface GetIssueRelationsResponse {
414
+ issue: {
415
+ id: string;
416
+ identifier: string;
417
+ title: string;
418
+ description: string | null;
419
+ relations: {
420
+ nodes: RelationOutgoingNode[];
421
+ };
422
+ inverseRelations: {
423
+ nodes: RelationIncomingNode[];
424
+ };
425
+ } | null;
426
+ }
427
+ /**
428
+ * Response shape for `ISSUE_RELATION_CREATE_MUTATION`. The relation
429
+ * carries both `issue` and `relatedIssue` peers because the caller
430
+ * decides which side to display based on `reverse`.
431
+ */
432
+ export interface IssueRelationCreateResponse {
433
+ issueRelationCreate: {
434
+ success: boolean;
435
+ issueRelation: {
436
+ id: string;
437
+ type: string;
438
+ issue: {
439
+ id: string;
440
+ identifier: string;
441
+ title: string;
442
+ };
443
+ relatedIssue: {
444
+ id: string;
445
+ identifier: string;
446
+ title: string;
447
+ };
448
+ } | null;
449
+ };
450
+ }
451
+ /** Response shape for `SCAN_ISSUES_QUERY`. */
452
+ export interface ScanIssuesResponse {
453
+ issues: {
454
+ nodes: {
455
+ id: string;
456
+ identifier: string;
457
+ description: string | null;
458
+ }[];
459
+ };
460
+ }
461
+ interface IssueStateSpanNode {
462
+ state: {
463
+ id: string;
464
+ name: string;
465
+ type: string;
466
+ };
467
+ startedAt: string;
468
+ endedAt: string | null;
469
+ }
470
+ /** Response shape for `GET_ISSUE_STATE_HISTORY_QUERY`. */
471
+ export interface GetIssueStateHistoryResponse {
472
+ issue: {
473
+ id: string;
474
+ identifier: string;
475
+ title: string;
476
+ stateHistory: {
477
+ nodes: IssueStateSpanNode[];
478
+ };
479
+ } | null;
480
+ }
481
+ export {};
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Typed response shapes for the GraphQL queries in `./issues.ts`.
3
+ *
4
+ * Pre-fix, every consumer used `GraphQLResponseData` (a recursive
5
+ * `Record<string, unknown>`) and re-cast every field with `as
6
+ * string` / `as GraphQLResponseData`. A renamed Linear field would
7
+ * silently produce `undefined` at runtime; transformers had no
8
+ * compile-time check that they were reading the fields the queries
9
+ * actually requested.
10
+ *
11
+ * These interfaces mirror the shape of `COMPLETE_ISSUE_FRAGMENT` /
12
+ * `COMPLETE_ISSUE_WITH_COMMENTS_FRAGMENT` (defined in
13
+ * `./common.ts`) so the transformer can consume a typed node and
14
+ * the compiler catches drift between query and consumer.
15
+ *
16
+ * Pattern for adding new types: define a `Foo` node interface +
17
+ * a `GetFooResponse` (or list-shape) wrapper. Co-locate them in
18
+ * this file or a sibling `*-types.ts` so they live next to the
19
+ * query string.
20
+ *
21
+ * Refs ALL-937.
22
+ */
23
+ export {};
@@ -1,13 +1,52 @@
1
- export declare const GET_ISSUES_QUERY = "\n query GetIssues($first: Int!, $orderBy: PaginationOrderBy) {\n issues(\n first: $first\n orderBy: $orderBy\n filter: {\n state: { type: { neq: \"completed\" } }\n }\n ) {\n nodes {\n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n }\n }\n }\n";
2
- export declare const SEARCH_ISSUES_QUERY = "\n query SearchIssues($term: String!, $first: Int!) {\n searchIssues(term: $term, first: $first, includeArchived: false) {\n nodes {\n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n }\n }\n }\n";
3
- export declare const FILTERED_SEARCH_ISSUES_QUERY = "\n query FilteredSearchIssues(\n $first: Int!\n $filter: IssueFilter\n $orderBy: PaginationOrderBy\n ) {\n issues(\n first: $first\n filter: $filter\n orderBy: $orderBy\n includeArchived: false\n ) {\n nodes {\n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n }\n }\n }\n";
4
- export declare const BATCH_RESOLVE_FOR_SEARCH_QUERY = "\n query BatchResolveForSearch(\n $teamKey: String\n $teamName: String\n $projectName: String\n $assigneeEmail: String\n ) {\n teams(\n filter: {\n or: [\n { key: { eq: $teamKey } }\n { name: { eqIgnoreCase: $teamName } }\n ]\n }\n first: 1\n ) {\n nodes {\n id\n key\n name\n }\n }\n\n projects(filter: { name: { eqIgnoreCase: $projectName } }, first: 1) {\n nodes {\n id\n name\n }\n }\n\n users(filter: { email: { eq: $assigneeEmail } }, first: 1) {\n nodes {\n id\n name\n email\n }\n }\n }\n";
5
- export declare const GET_ISSUE_BY_ID_QUERY = "\n query GetIssue($id: String!) {\n issue(id: $id) {\n \n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n \n comments {\n nodes {\n id\n body\n createdAt\n updatedAt\n user {\n id\n name\n url\n }\n }\n }\n\n\n }\n }\n";
6
- export declare const GET_ISSUE_BY_IDENTIFIER_QUERY = "\n query GetIssueByIdentifier($teamKey: String!, $number: Float!) {\n issues(\n filter: {\n team: { key: { eq: $teamKey } }\n number: { eq: $number }\n }\n first: 1\n ) {\n nodes {\n \n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n \n comments {\n nodes {\n id\n body\n createdAt\n updatedAt\n user {\n id\n name\n url\n }\n }\n }\n\n\n }\n }\n }\n";
7
- export declare const BATCH_RESOLVE_FOR_UPDATE_QUERY = "\n query BatchResolveForUpdate(\n $projectName: String\n $teamKey: String\n $issueNumber: Float\n $milestoneName: String\n ) {\n projects(filter: { name: { eqIgnoreCase: $projectName } }, first: 1) {\n nodes {\n id\n name\n projectMilestones {\n nodes {\n id\n name\n }\n }\n }\n }\n\n milestones: projectMilestones(\n filter: { name: { eq: $milestoneName } }\n first: 1\n ) {\n nodes {\n id\n name\n }\n }\n\n issues(\n filter: {\n and: [\n { team: { key: { eq: $teamKey } } }\n { number: { eq: $issueNumber } }\n ]\n }\n first: 1\n ) {\n nodes {\n id\n identifier\n team {\n id\n key\n }\n labels {\n nodes {\n id\n name\n }\n }\n project {\n id\n projectMilestones {\n nodes {\n id\n name\n }\n }\n }\n }\n }\n }\n";
8
- export declare const CREATE_ISSUE_MUTATION = "\n mutation CreateIssue($input: IssueCreateInput!) {\n issueCreate(input: $input) {\n success\n issue {\n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n }\n }\n }\n";
9
- export declare const UPDATE_ISSUE_MUTATION = "\n mutation UpdateIssue($id: String!, $input: IssueUpdateInput!) {\n issueUpdate(id: $id, input: $input) {\n success\n issue {\n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n }\n }\n }\n";
10
- export declare const BATCH_RESOLVE_FOR_CREATE_QUERY = "\n query BatchResolveForCreate(\n $teamKey: String\n $teamName: String\n $projectName: String\n $parentTeamKey: String\n $parentIssueNumber: Float\n $milestoneName: String\n ) {\n teams(\n filter: {\n or: [\n { key: { eq: $teamKey } }\n { name: { eqIgnoreCase: $teamName } }\n ]\n }\n first: 1\n ) {\n nodes {\n id\n key\n name\n }\n }\n\n projects(filter: { name: { eqIgnoreCase: $projectName } }, first: 1) {\n nodes {\n id\n name\n teams {\n nodes { id key }\n }\n projectMilestones {\n nodes { id name }\n }\n }\n }\n\n milestones: projectMilestones(\n filter: { name: { eq: $milestoneName } }\n first: 1\n ) {\n nodes {\n id\n name\n }\n }\n\n parentIssues: issues(\n filter: {\n and: [\n { team: { key: { eq: $parentTeamKey } } }\n { number: { eq: $parentIssueNumber } }\n ]\n }\n first: 1\n ) {\n nodes {\n id\n identifier\n }\n }\n }\n";
1
+ export declare const GET_ISSUES_QUERY = "\n query GetIssues($first: Int!, $orderBy: PaginationOrderBy) {\n issues(\n first: $first\n orderBy: $orderBy\n filter: {\n state: { type: { neq: \"completed\" } }\n }\n ) {\n nodes {\n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n delegate {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n }\n }\n }\n";
2
+ export declare const SEARCH_ISSUES_QUERY = "\n query SearchIssues($term: String!, $first: Int!) {\n searchIssues(term: $term, first: $first, includeArchived: false) {\n nodes {\n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n delegate {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n }\n }\n }\n";
3
+ export declare const FILTERED_SEARCH_ISSUES_QUERY = "\n query FilteredSearchIssues(\n $first: Int!\n $filter: IssueFilter\n $orderBy: PaginationOrderBy\n ) {\n issues(\n first: $first\n filter: $filter\n orderBy: $orderBy\n includeArchived: false\n ) {\n nodes {\n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n delegate {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n }\n }\n }\n";
4
+ /**
5
+ * Batch-resolves a search's team/project/assignee/delegate filter inputs.
6
+ *
7
+ * The `projects` block is `@include`-gated: Linear treats a null filter
8
+ * comparator as "no filter", so an always-on block with an unset
9
+ * `$projectName` would fetch an arbitrary project. (Search resolves a UUID
10
+ * `--project` directly without consulting this block, so only the
11
+ * name-resolution arm is needed here.)
12
+ */
13
+ export declare const BATCH_RESOLVE_FOR_SEARCH_QUERY = "\n query BatchResolveForSearch(\n $teamKey: String\n $teamName: String\n $projectName: String\n $hasProjectName: Boolean = false\n $assigneeEmail: String\n $delegateEmail: String\n ) {\n teams(\n filter: {\n or: [\n { key: { eq: $teamKey } }\n { name: { eqIgnoreCase: $teamName } }\n ]\n }\n first: 1\n ) {\n nodes {\n id\n key\n name\n }\n }\n\n projects(\n filter: { name: { eqIgnoreCase: $projectName } }\n first: 1\n ) @include(if: $hasProjectName) {\n nodes {\n id\n name\n }\n }\n\n users(filter: { email: { eq: $assigneeEmail } }, first: 1) {\n nodes {\n id\n name\n email\n }\n }\n\n delegates: users(filter: { email: { eq: $delegateEmail } }, first: 1) {\n nodes {\n id\n name\n email\n }\n }\n }\n";
14
+ export declare const GET_ISSUE_BY_ID_QUERY = "\n query GetIssue($id: String!) {\n issue(id: $id) {\n \n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n delegate {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n \n comments {\n nodes {\n id\n body\n createdAt\n updatedAt\n user {\n id\n name\n url\n }\n }\n }\n\n\n }\n }\n";
15
+ export declare const GET_ISSUE_BY_IDENTIFIER_QUERY = "\n query GetIssueByIdentifier($teamKey: String!, $number: Float!) {\n issues(\n filter: {\n team: { key: { eq: $teamKey } }\n number: { eq: $number }\n }\n first: 1\n ) {\n nodes {\n \n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n delegate {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n \n comments {\n nodes {\n id\n body\n createdAt\n updatedAt\n user {\n id\n name\n url\n }\n }\n }\n\n\n }\n }\n }\n";
16
+ /**
17
+ * Batch-resolves an update's project/milestone/issue inputs.
18
+ *
19
+ * The project and milestone blocks are `@include`-gated for the same
20
+ * reason as `BATCH_RESOLVE_FOR_CREATE_QUERY`: a null filter comparator is
21
+ * a no-op that returns an arbitrary record. A UUID `--project` is resolved
22
+ * by `id` (`projectsById`) so its milestones are still fetched for
23
+ * `--project-milestone` name resolution; a name uses `projectsByName`.
24
+ */
25
+ export declare const BATCH_RESOLVE_FOR_UPDATE_QUERY = "\n query BatchResolveForUpdate(\n $projectName: String\n $projectId: ID\n $hasProjectName: Boolean = false\n $hasProjectId: Boolean = false\n $teamKey: String\n $issueNumber: Float\n $milestoneName: String\n $hasMilestoneName: Boolean = false\n ) {\n projectsByName: projects(\n filter: { name: { eqIgnoreCase: $projectName } }\n first: 1\n ) @include(if: $hasProjectName) {\n nodes {\n id\n name\n projectMilestones {\n nodes {\n id\n name\n }\n }\n }\n }\n\n projectsById: projects(\n filter: { id: { eq: $projectId } }\n first: 1\n ) @include(if: $hasProjectId) {\n nodes {\n id\n name\n projectMilestones {\n nodes {\n id\n name\n }\n }\n }\n }\n\n milestones: projectMilestones(\n filter: { name: { eq: $milestoneName } }\n first: 1\n ) @include(if: $hasMilestoneName) {\n nodes {\n id\n name\n }\n }\n\n issues(\n filter: {\n and: [\n { team: { key: { eq: $teamKey } } }\n { number: { eq: $issueNumber } }\n ]\n }\n first: 1\n ) {\n nodes {\n id\n identifier\n team {\n id\n key\n }\n labels {\n nodes {\n id\n name\n }\n }\n project {\n id\n projectMilestones {\n nodes {\n id\n name\n }\n }\n }\n }\n }\n }\n";
26
+ export declare const CREATE_ISSUE_MUTATION = "\n mutation CreateIssue($input: IssueCreateInput!) {\n issueCreate(input: $input) {\n success\n issue {\n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n delegate {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n }\n }\n }\n";
27
+ export declare const UPDATE_ISSUE_MUTATION = "\n mutation UpdateIssue($id: String!, $input: IssueUpdateInput!) {\n issueUpdate(id: $id, input: $input) {\n success\n issue {\n \n \n id\n identifier\n title\n description\n summary { content generationStatus }\n branchName\n priority\n estimate\n dueDate\n url\n createdAt\n updatedAt\n\n \n state {\n id\n name\n }\n\n \n assignee {\n id\n name\n url\n }\n\n \n delegate {\n id\n name\n url\n }\n\n \n team {\n id\n key\n name\n }\n\n \n project {\n id\n name\n }\n\n \n labels {\n nodes {\n id\n name\n }\n }\n\n \n cycle {\n id\n name\n number\n }\n\n \n projectMilestone {\n id\n name\n targetDate\n }\n\n \n parent {\n id\n identifier\n title\n }\n\n \n children {\n nodes {\n id\n identifier\n title\n }\n }\n\n\n }\n }\n }\n";
28
+ export declare const ARCHIVE_ISSUE_MUTATION = "\n mutation ArchiveIssue($id: String!) {\n issueArchive(id: $id) {\n success\n lastSyncId\n entity {\n id\n }\n }\n }\n";
29
+ export declare const DELETE_ISSUE_MUTATION = "\n mutation DeleteIssue($id: String!, $permanentlyDelete: Boolean) {\n issueDelete(id: $id, permanentlyDelete: $permanentlyDelete) {\n success\n lastSyncId\n entity {\n id\n }\n }\n }\n";
30
+ /**
31
+ * Batch-resolves a create's team/project/milestone/parent inputs in one
32
+ * round-trip.
33
+ *
34
+ * The project and milestone blocks are gated behind `@include` directives
35
+ * rather than left always-on. Linear treats a null filter comparator
36
+ * (`{ name: { eqIgnoreCase: null } }`) as "no filter" — so an always-on
37
+ * `projects` block with an unset `$projectName` returns an *arbitrary*
38
+ * project, which the caller would then mistake for the user's project
39
+ * (e.g. auto-switching the team to that unrelated project's team). The
40
+ * `has*` booleans ensure a block is fetched only when its input exists.
41
+ *
42
+ * A UUID `--project` is resolved by `id` (`projectsById`) so its team
43
+ * associations are still fetched for team-project validation; a name is
44
+ * resolved by `name` (`projectsByName`). The two are mutually exclusive,
45
+ * but GraphQL forbids two same-aliased fields with differing arguments,
46
+ * so they carry distinct aliases and the service folds whichever ran
47
+ * into `resolveResult.projects`.
48
+ */
49
+ export declare const BATCH_RESOLVE_FOR_CREATE_QUERY = "\n query BatchResolveForCreate(\n $teamKey: String\n $teamName: String\n $projectName: String\n $projectId: ID\n $hasProjectName: Boolean = false\n $hasProjectId: Boolean = false\n $parentTeamKey: String\n $parentIssueNumber: Float\n $milestoneName: String\n $hasMilestoneName: Boolean = false\n ) {\n teams(\n filter: {\n or: [\n { key: { eq: $teamKey } }\n { name: { eqIgnoreCase: $teamName } }\n ]\n }\n first: 1\n ) {\n nodes {\n id\n key\n name\n }\n }\n\n projectsByName: projects(\n filter: { name: { eqIgnoreCase: $projectName } }\n first: 1\n ) @include(if: $hasProjectName) {\n nodes {\n id\n name\n teams {\n nodes { id key }\n }\n projectMilestones {\n nodes { id name }\n }\n }\n }\n\n projectsById: projects(\n filter: { id: { eq: $projectId } }\n first: 1\n ) @include(if: $hasProjectId) {\n nodes {\n id\n name\n teams {\n nodes { id key }\n }\n projectMilestones {\n nodes { id name }\n }\n }\n }\n\n milestones: projectMilestones(\n filter: { name: { eq: $milestoneName } }\n first: 1\n ) @include(if: $hasMilestoneName) {\n nodes {\n id\n name\n }\n }\n\n parentIssues: issues(\n filter: {\n and: [\n { team: { key: { eq: $parentTeamKey } } }\n { number: { eq: $parentIssueNumber } }\n ]\n }\n first: 1\n ) {\n nodes {\n id\n identifier\n }\n }\n }\n";
11
50
  /**
12
51
  * Build a label-resolution query filtered by names (case-insensitive).
13
52
  * Uses `or` + `eqIgnoreCase` since Linear's `in` filter may be case-sensitive.
@@ -18,6 +57,8 @@ export declare function buildResolveLabelsByNameQuery(labelNames: string[]): {
18
57
  };
19
58
  export declare const GET_ISSUE_STATE_HISTORY_QUERY = "\n query GetIssueStateHistory($id: String!) {\n issue(id: $id) {\n id\n identifier\n title\n stateHistory {\n nodes {\n state { id name type }\n startedAt\n endedAt\n }\n }\n }\n }\n";
20
59
  export declare const GET_ISSUE_TEAM_QUERY = "\n query GetIssueTeam($issueId: String!) {\n issue(id: $issueId) {\n team { id }\n }\n }\n";
60
+ export declare const GET_ISSUE_START_CONTEXT_QUERY = "\n query GetIssueStartContext($id: String!) {\n issue(id: $id) {\n id\n identifier\n state { id name type }\n team { id key name }\n delegate { id name url }\n }\n }\n";
61
+ export declare const TEAM_STARTED_STATUSES_QUERY = "\n query TeamStartedStatuses($teamId: String!) {\n team(id: $teamId) {\n states(filter: { type: { eq: \"started\" } }) {\n nodes {\n id\n name\n position\n }\n }\n }\n }\n";
21
62
  export declare const ISSUE_RELATION_CREATE_MUTATION = "\n mutation IssueRelationCreate($input: IssueRelationCreateInput!) {\n issueRelationCreate(input: $input) {\n success\n issueRelation {\n id\n type\n issue {\n id\n identifier\n title\n }\n relatedIssue {\n id\n identifier\n title\n }\n }\n }\n }\n";
22
63
  export declare const GET_ISSUE_RELATIONS_QUERY = "\n query GetIssueRelations($id: String!) {\n issue(id: $id) {\n id\n identifier\n title\n description\n relations {\n nodes {\n id\n type\n relatedIssue {\n id\n identifier\n title\n state { id name }\n priority\n assignee { id name }\n team { id key name }\n }\n }\n }\n inverseRelations {\n nodes {\n id\n type\n issue {\n id\n identifier\n title\n state { id name }\n priority\n assignee { id name }\n team { id key name }\n }\n }\n }\n }\n }\n";
23
64
  export declare const SCAN_ISSUES_QUERY = "\n query ScanIssues($filter: IssueFilter, $first: Int) {\n issues(filter: $filter, first: $first, orderBy: updatedAt) {\n nodes { id identifier description }\n }\n }\n";