@enrichlayer/el-linear 1.2.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 (151) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +219 -0
  3. package/claude-skills/linear-operations/SKILL.md +315 -0
  4. package/claude-skills/linear-operations/evals/evals.json +46 -0
  5. package/dist/commands/attachments.d.ts +2 -0
  6. package/dist/commands/attachments.js +57 -0
  7. package/dist/commands/batch.d.ts +2 -0
  8. package/dist/commands/batch.js +309 -0
  9. package/dist/commands/comments.d.ts +2 -0
  10. package/dist/commands/comments.js +272 -0
  11. package/dist/commands/config.d.ts +2 -0
  12. package/dist/commands/config.js +15 -0
  13. package/dist/commands/cycles.d.ts +2 -0
  14. package/dist/commands/cycles.js +63 -0
  15. package/dist/commands/documents.d.ts +2 -0
  16. package/dist/commands/documents.js +175 -0
  17. package/dist/commands/embeds.d.ts +2 -0
  18. package/dist/commands/embeds.js +65 -0
  19. package/dist/commands/gdoc.d.ts +2 -0
  20. package/dist/commands/gdoc.js +37 -0
  21. package/dist/commands/graphql.d.ts +2 -0
  22. package/dist/commands/graphql.js +70 -0
  23. package/dist/commands/init/aliases.d.ts +109 -0
  24. package/dist/commands/init/aliases.js +569 -0
  25. package/dist/commands/init/defaults.d.ts +25 -0
  26. package/dist/commands/init/defaults.js +112 -0
  27. package/dist/commands/init/index.d.ts +18 -0
  28. package/dist/commands/init/index.js +182 -0
  29. package/dist/commands/init/shared.d.ts +88 -0
  30. package/dist/commands/init/shared.js +164 -0
  31. package/dist/commands/init/token.d.ts +50 -0
  32. package/dist/commands/init/token.js +141 -0
  33. package/dist/commands/init/workspace.d.ts +20 -0
  34. package/dist/commands/init/workspace.js +80 -0
  35. package/dist/commands/issue-id.d.ts +28 -0
  36. package/dist/commands/issue-id.js +81 -0
  37. package/dist/commands/issues.d.ts +2 -0
  38. package/dist/commands/issues.js +1145 -0
  39. package/dist/commands/labels.d.ts +2 -0
  40. package/dist/commands/labels.js +100 -0
  41. package/dist/commands/project-milestones.d.ts +2 -0
  42. package/dist/commands/project-milestones.js +143 -0
  43. package/dist/commands/projects.d.ts +2 -0
  44. package/dist/commands/projects.js +336 -0
  45. package/dist/commands/read-shortcut.d.ts +6 -0
  46. package/dist/commands/read-shortcut.js +69 -0
  47. package/dist/commands/releases.d.ts +2 -0
  48. package/dist/commands/releases.js +142 -0
  49. package/dist/commands/search.d.ts +2 -0
  50. package/dist/commands/search.js +171 -0
  51. package/dist/commands/teams.d.ts +2 -0
  52. package/dist/commands/teams.js +19 -0
  53. package/dist/commands/templates.d.ts +2 -0
  54. package/dist/commands/templates.js +58 -0
  55. package/dist/commands/users.d.ts +2 -0
  56. package/dist/commands/users.js +17 -0
  57. package/dist/config/config.d.ts +43 -0
  58. package/dist/config/config.js +81 -0
  59. package/dist/config/issue-validation.d.ts +39 -0
  60. package/dist/config/issue-validation.js +264 -0
  61. package/dist/config/paths.d.ts +20 -0
  62. package/dist/config/paths.js +22 -0
  63. package/dist/config/resolver.d.ts +25 -0
  64. package/dist/config/resolver.js +183 -0
  65. package/dist/config/status-defaults.d.ts +13 -0
  66. package/dist/config/status-defaults.js +20 -0
  67. package/dist/config/term-enforcer.d.ts +31 -0
  68. package/dist/config/term-enforcer.js +69 -0
  69. package/dist/main.d.ts +2 -0
  70. package/dist/main.js +76 -0
  71. package/dist/queries/attachments.d.ts +3 -0
  72. package/dist/queries/attachments.js +35 -0
  73. package/dist/queries/comments.d.ts +3 -0
  74. package/dist/queries/comments.js +64 -0
  75. package/dist/queries/common.d.ts +2 -0
  76. package/dist/queries/common.js +109 -0
  77. package/dist/queries/cycles.d.ts +2 -0
  78. package/dist/queries/cycles.js +40 -0
  79. package/dist/queries/documents.d.ts +5 -0
  80. package/dist/queries/documents.js +67 -0
  81. package/dist/queries/introspect.d.ts +2 -0
  82. package/dist/queries/introspect.js +24 -0
  83. package/dist/queries/issues.d.ts +23 -0
  84. package/dist/queries/issues.js +380 -0
  85. package/dist/queries/labels.d.ts +4 -0
  86. package/dist/queries/labels.js +53 -0
  87. package/dist/queries/project-milestones.d.ts +6 -0
  88. package/dist/queries/project-milestones.js +125 -0
  89. package/dist/queries/projects.d.ts +7 -0
  90. package/dist/queries/projects.js +104 -0
  91. package/dist/queries/releases.d.ts +4 -0
  92. package/dist/queries/releases.js +85 -0
  93. package/dist/queries/search.d.ts +1 -0
  94. package/dist/queries/search.js +35 -0
  95. package/dist/queries/templates.d.ts +2 -0
  96. package/dist/queries/templates.js +30 -0
  97. package/dist/types/linear.d.ts +217 -0
  98. package/dist/types/linear.js +6 -0
  99. package/dist/utils/auth.d.ts +4 -0
  100. package/dist/utils/auth.js +23 -0
  101. package/dist/utils/auto-link-references.d.ts +47 -0
  102. package/dist/utils/auto-link-references.js +188 -0
  103. package/dist/utils/date-format.d.ts +4 -0
  104. package/dist/utils/date-format.js +8 -0
  105. package/dist/utils/download-uploads.d.ts +7 -0
  106. package/dist/utils/download-uploads.js +88 -0
  107. package/dist/utils/embed-parser.d.ts +8 -0
  108. package/dist/utils/embed-parser.js +54 -0
  109. package/dist/utils/error-messages.d.ts +4 -0
  110. package/dist/utils/error-messages.js +17 -0
  111. package/dist/utils/file-service.d.ts +13 -0
  112. package/dist/utils/file-service.js +239 -0
  113. package/dist/utils/gdoc-parser.d.ts +45 -0
  114. package/dist/utils/gdoc-parser.js +107 -0
  115. package/dist/utils/graphql-attachments-service.d.ts +12 -0
  116. package/dist/utils/graphql-attachments-service.js +46 -0
  117. package/dist/utils/graphql-documents-service.d.ts +18 -0
  118. package/dist/utils/graphql-documents-service.js +97 -0
  119. package/dist/utils/graphql-issues-service.d.ts +49 -0
  120. package/dist/utils/graphql-issues-service.js +925 -0
  121. package/dist/utils/graphql-service.d.ts +8 -0
  122. package/dist/utils/graphql-service.js +35 -0
  123. package/dist/utils/identifier-parser.d.ts +7 -0
  124. package/dist/utils/identifier-parser.js +20 -0
  125. package/dist/utils/issue-reference-extractor.d.ts +18 -0
  126. package/dist/utils/issue-reference-extractor.js +95 -0
  127. package/dist/utils/issue-reference-wrapper.d.ts +12 -0
  128. package/dist/utils/issue-reference-wrapper.js +91 -0
  129. package/dist/utils/linear-service.d.ts +26 -0
  130. package/dist/utils/linear-service.js +442 -0
  131. package/dist/utils/logger.d.ts +4 -0
  132. package/dist/utils/logger.js +8 -0
  133. package/dist/utils/markdown-prosemirror.d.ts +24 -0
  134. package/dist/utils/markdown-prosemirror.js +325 -0
  135. package/dist/utils/mention-resolver.d.ts +31 -0
  136. package/dist/utils/mention-resolver.js +234 -0
  137. package/dist/utils/output.d.ts +7 -0
  138. package/dist/utils/output.js +125 -0
  139. package/dist/utils/table-formatter.d.ts +4 -0
  140. package/dist/utils/table-formatter.js +249 -0
  141. package/dist/utils/usage.d.ts +2 -0
  142. package/dist/utils/usage.js +24 -0
  143. package/dist/utils/uuid.d.ts +2 -0
  144. package/dist/utils/uuid.js +8 -0
  145. package/dist/utils/validate-references.d.ts +10 -0
  146. package/dist/utils/validate-references.js +33 -0
  147. package/dist/utils/validators.d.ts +7 -0
  148. package/dist/utils/validators.js +71 -0
  149. package/dist/utils/workspace-url.d.ts +4 -0
  150. package/dist/utils/workspace-url.js +44 -0
  151. package/package.json +71 -0
package/dist/main.js ADDED
@@ -0,0 +1,76 @@
1
+ #!/usr/bin/env node
2
+ import { program } from "commander";
3
+ import { setupAttachmentsCommands } from "./commands/attachments.js";
4
+ import { setupBatchCommands } from "./commands/batch.js";
5
+ import { setupCommentsCommands } from "./commands/comments.js";
6
+ import { setupConfigCommands } from "./commands/config.js";
7
+ import { setupCyclesCommands } from "./commands/cycles.js";
8
+ import { setupDocumentsCommands } from "./commands/documents.js";
9
+ import { setupEmbedsCommands } from "./commands/embeds.js";
10
+ import { setupGdocCommands } from "./commands/gdoc.js";
11
+ import { setupGraphQLCommands } from "./commands/graphql.js";
12
+ import { setupInitCommands } from "./commands/init/index.js";
13
+ import { setupIssueIdCommand } from "./commands/issue-id.js";
14
+ import { setupIssuesCommands } from "./commands/issues.js";
15
+ import { setupLabelsCommands } from "./commands/labels.js";
16
+ import { setupProjectMilestonesCommands } from "./commands/project-milestones.js";
17
+ import { setupProjectsCommands } from "./commands/projects.js";
18
+ import { setupReadShortcut } from "./commands/read-shortcut.js";
19
+ import { setupReleasesCommands } from "./commands/releases.js";
20
+ import { setupSearchCommands } from "./commands/search.js";
21
+ import { setupTeamsCommands } from "./commands/teams.js";
22
+ import { setupTemplatesCommands } from "./commands/templates.js";
23
+ import { setupUsersCommands } from "./commands/users.js";
24
+ import { setFieldsFilter, setJqFilter, setRawMode } from "./utils/output.js";
25
+ import { outputUsageInfo } from "./utils/usage.js";
26
+ import { splitList } from "./utils/validators.js";
27
+ program
28
+ .name("el-linear")
29
+ .description("A pragmatic CLI for Linear.app — deterministic resolution, structured validation, GraphQL escape hatch.")
30
+ .version("1.2.0")
31
+ .option("--api-token <token>", "Linear API token")
32
+ .option("--json", "output as JSON (default, accepted for compatibility)")
33
+ .option("--raw", "strip { data, meta } wrapper from list output — emit the array directly")
34
+ .option("--jq <filter>", "apply a jq filter to the JSON output")
35
+ .option("--fields <fields>", "filter output to specific fields (comma-separated)");
36
+ program.hook("preAction", (_thisCommand, actionCommand) => {
37
+ const rootOpts = actionCommand.optsWithGlobals();
38
+ if (rootOpts.raw) {
39
+ setRawMode(true);
40
+ }
41
+ if (rootOpts.jq) {
42
+ setJqFilter(rootOpts.jq);
43
+ }
44
+ if (rootOpts.fields) {
45
+ setFieldsFilter(splitList(rootOpts.fields));
46
+ }
47
+ });
48
+ program.action(() => {
49
+ program.help();
50
+ });
51
+ setupAttachmentsCommands(program);
52
+ setupBatchCommands(program);
53
+ setupSearchCommands(program);
54
+ setupIssuesCommands(program);
55
+ setupIssueIdCommand(program);
56
+ setupCommentsCommands(program);
57
+ setupLabelsCommands(program);
58
+ setupReleasesCommands(program);
59
+ setupProjectsCommands(program);
60
+ setupCyclesCommands(program);
61
+ setupProjectMilestonesCommands(program);
62
+ setupEmbedsCommands(program);
63
+ setupTeamsCommands(program);
64
+ setupTemplatesCommands(program);
65
+ setupUsersCommands(program);
66
+ setupDocumentsCommands(program);
67
+ setupGdocCommands(program);
68
+ setupGraphQLCommands(program);
69
+ setupConfigCommands(program);
70
+ setupInitCommands(program);
71
+ setupReadShortcut(program);
72
+ program
73
+ .command("usage")
74
+ .description("show usage info for *all* commands")
75
+ .action(() => outputUsageInfo(program));
76
+ program.parse();
@@ -0,0 +1,3 @@
1
+ export declare const CREATE_ATTACHMENT_MUTATION = "\n mutation AttachmentCreate($input: AttachmentCreateInput!) {\n attachmentCreate(input: $input) {\n success\n attachment {\n \n id\n title\n url\n createdAt\n updatedAt\n\n }\n }\n }\n";
2
+ export declare const DELETE_ATTACHMENT_MUTATION = "\n mutation AttachmentDelete($id: String!) {\n attachmentDelete(id: $id) {\n success\n }\n }\n";
3
+ export declare const LIST_ATTACHMENTS_QUERY = "\n query ListAttachments($issueId: String!) {\n issue(id: $issueId) {\n attachments {\n nodes {\n \n id\n title\n url\n createdAt\n updatedAt\n\n }\n }\n }\n }\n";
@@ -0,0 +1,35 @@
1
+ const ATTACHMENT_FRAGMENT = `
2
+ id
3
+ title
4
+ url
5
+ createdAt
6
+ updatedAt
7
+ `;
8
+ export const CREATE_ATTACHMENT_MUTATION = `
9
+ mutation AttachmentCreate($input: AttachmentCreateInput!) {
10
+ attachmentCreate(input: $input) {
11
+ success
12
+ attachment {
13
+ ${ATTACHMENT_FRAGMENT}
14
+ }
15
+ }
16
+ }
17
+ `;
18
+ export const DELETE_ATTACHMENT_MUTATION = `
19
+ mutation AttachmentDelete($id: String!) {
20
+ attachmentDelete(id: $id) {
21
+ success
22
+ }
23
+ }
24
+ `;
25
+ export const LIST_ATTACHMENTS_QUERY = `
26
+ query ListAttachments($issueId: String!) {
27
+ issue(id: $issueId) {
28
+ attachments {
29
+ nodes {
30
+ ${ATTACHMENT_FRAGMENT}
31
+ }
32
+ }
33
+ }
34
+ }
35
+ `;
@@ -0,0 +1,3 @@
1
+ export declare const LIST_COMMENTS_QUERY = "\n query ListComments($issueId: String!, $first: Int) {\n issue(id: $issueId) {\n id\n identifier\n comments(first: $first, orderBy: createdAt) {\n nodes {\n id\n body\n createdAt\n updatedAt\n user {\n id\n name\n displayName\n url\n }\n }\n }\n }\n }\n";
2
+ export declare const CREATE_COMMENT_MUTATION = "\n mutation CreateComment($input: CommentCreateInput!) {\n commentCreate(input: $input) {\n success\n comment {\n id\n body\n createdAt\n updatedAt\n user {\n id\n name\n displayName\n url\n }\n }\n }\n }\n";
3
+ export declare const UPDATE_COMMENT_MUTATION = "\n mutation UpdateComment($id: String!, $input: CommentUpdateInput!) {\n commentUpdate(id: $id, input: $input) {\n success\n comment {\n id\n body\n createdAt\n updatedAt\n user {\n id\n name\n displayName\n url\n }\n issue {\n id\n identifier\n }\n }\n }\n }\n";
@@ -0,0 +1,64 @@
1
+ export const LIST_COMMENTS_QUERY = `
2
+ query ListComments($issueId: String!, $first: Int) {
3
+ issue(id: $issueId) {
4
+ id
5
+ identifier
6
+ comments(first: $first, orderBy: createdAt) {
7
+ nodes {
8
+ id
9
+ body
10
+ createdAt
11
+ updatedAt
12
+ user {
13
+ id
14
+ name
15
+ displayName
16
+ url
17
+ }
18
+ }
19
+ }
20
+ }
21
+ }
22
+ `;
23
+ export const CREATE_COMMENT_MUTATION = `
24
+ mutation CreateComment($input: CommentCreateInput!) {
25
+ commentCreate(input: $input) {
26
+ success
27
+ comment {
28
+ id
29
+ body
30
+ createdAt
31
+ updatedAt
32
+ user {
33
+ id
34
+ name
35
+ displayName
36
+ url
37
+ }
38
+ }
39
+ }
40
+ }
41
+ `;
42
+ export const UPDATE_COMMENT_MUTATION = `
43
+ mutation UpdateComment($id: String!, $input: CommentUpdateInput!) {
44
+ commentUpdate(id: $id, input: $input) {
45
+ success
46
+ comment {
47
+ id
48
+ body
49
+ createdAt
50
+ updatedAt
51
+ user {
52
+ id
53
+ name
54
+ displayName
55
+ url
56
+ }
57
+ issue {
58
+ id
59
+ identifier
60
+ }
61
+ }
62
+ }
63
+ }
64
+ `;
@@ -0,0 +1,2 @@
1
+ export declare const COMPLETE_ISSUE_FRAGMENT = "\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";
2
+ export declare const COMPLETE_ISSUE_WITH_COMMENTS_FRAGMENT = "\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";
@@ -0,0 +1,109 @@
1
+ const ISSUE_CORE_FIELDS = `
2
+ id
3
+ identifier
4
+ title
5
+ description
6
+ summary { content generationStatus }
7
+ branchName
8
+ priority
9
+ estimate
10
+ dueDate
11
+ url
12
+ createdAt
13
+ updatedAt
14
+ `;
15
+ const ISSUE_STATE_FRAGMENT = `
16
+ state {
17
+ id
18
+ name
19
+ }
20
+ `;
21
+ const ISSUE_ASSIGNEE_FRAGMENT = `
22
+ assignee {
23
+ id
24
+ name
25
+ url
26
+ }
27
+ `;
28
+ const ISSUE_TEAM_FRAGMENT = `
29
+ team {
30
+ id
31
+ key
32
+ name
33
+ }
34
+ `;
35
+ const ISSUE_PROJECT_FRAGMENT = `
36
+ project {
37
+ id
38
+ name
39
+ }
40
+ `;
41
+ const ISSUE_LABELS_FRAGMENT = `
42
+ labels {
43
+ nodes {
44
+ id
45
+ name
46
+ }
47
+ }
48
+ `;
49
+ const ISSUE_CYCLE_FRAGMENT = `
50
+ cycle {
51
+ id
52
+ name
53
+ number
54
+ }
55
+ `;
56
+ const ISSUE_PROJECT_MILESTONE_FRAGMENT = `
57
+ projectMilestone {
58
+ id
59
+ name
60
+ targetDate
61
+ }
62
+ `;
63
+ const ISSUE_COMMENTS_FRAGMENT = `
64
+ comments {
65
+ nodes {
66
+ id
67
+ body
68
+ createdAt
69
+ updatedAt
70
+ user {
71
+ id
72
+ name
73
+ url
74
+ }
75
+ }
76
+ }
77
+ `;
78
+ const ISSUE_PARENT_FRAGMENT = `
79
+ parent {
80
+ id
81
+ identifier
82
+ title
83
+ }
84
+ `;
85
+ const ISSUE_CHILDREN_FRAGMENT = `
86
+ children {
87
+ nodes {
88
+ id
89
+ identifier
90
+ title
91
+ }
92
+ }
93
+ `;
94
+ export const COMPLETE_ISSUE_FRAGMENT = `
95
+ ${ISSUE_CORE_FIELDS}
96
+ ${ISSUE_STATE_FRAGMENT}
97
+ ${ISSUE_ASSIGNEE_FRAGMENT}
98
+ ${ISSUE_TEAM_FRAGMENT}
99
+ ${ISSUE_PROJECT_FRAGMENT}
100
+ ${ISSUE_LABELS_FRAGMENT}
101
+ ${ISSUE_CYCLE_FRAGMENT}
102
+ ${ISSUE_PROJECT_MILESTONE_FRAGMENT}
103
+ ${ISSUE_PARENT_FRAGMENT}
104
+ ${ISSUE_CHILDREN_FRAGMENT}
105
+ `;
106
+ export const COMPLETE_ISSUE_WITH_COMMENTS_FRAGMENT = `
107
+ ${COMPLETE_ISSUE_FRAGMENT}
108
+ ${ISSUE_COMMENTS_FRAGMENT}
109
+ `;
@@ -0,0 +1,2 @@
1
+ export declare const FIND_CYCLE_SCOPED_QUERY = "\n query FindCycleScoped($name: String!, $teamId: ID!) {\n cycles(\n filter: {\n and: [\n { name: { eq: $name } }\n { team: { id: { eq: $teamId } } }\n ]\n }\n first: 10\n ) {\n nodes {\n id\n name\n number\n startsAt\n isActive\n isNext\n isPrevious\n team { id key }\n }\n }\n }\n";
2
+ export declare const FIND_CYCLE_GLOBAL_QUERY = "\n query FindCycleGlobal($name: String!) {\n cycles(filter: { name: { eq: $name } }, first: 10) {\n nodes {\n id\n name\n number\n startsAt\n isActive\n isNext\n isPrevious\n team { id key }\n }\n }\n }\n";
@@ -0,0 +1,40 @@
1
+ export const FIND_CYCLE_SCOPED_QUERY = `
2
+ query FindCycleScoped($name: String!, $teamId: ID!) {
3
+ cycles(
4
+ filter: {
5
+ and: [
6
+ { name: { eq: $name } }
7
+ { team: { id: { eq: $teamId } } }
8
+ ]
9
+ }
10
+ first: 10
11
+ ) {
12
+ nodes {
13
+ id
14
+ name
15
+ number
16
+ startsAt
17
+ isActive
18
+ isNext
19
+ isPrevious
20
+ team { id key }
21
+ }
22
+ }
23
+ }
24
+ `;
25
+ export const FIND_CYCLE_GLOBAL_QUERY = `
26
+ query FindCycleGlobal($name: String!) {
27
+ cycles(filter: { name: { eq: $name } }, first: 10) {
28
+ nodes {
29
+ id
30
+ name
31
+ number
32
+ startsAt
33
+ isActive
34
+ isNext
35
+ isPrevious
36
+ team { id key }
37
+ }
38
+ }
39
+ }
40
+ `;
@@ -0,0 +1,5 @@
1
+ export declare const CREATE_DOCUMENT_MUTATION = "\n mutation DocumentCreate($input: DocumentCreateInput!) {\n documentCreate(input: $input) {\n success\n document {\n \n id\n title\n content\n slugId\n url\n icon\n color\n createdAt\n updatedAt\n creator {\n id\n name\n }\n project {\n id\n name\n }\n issue {\n id\n identifier\n title\n }\n\n }\n }\n }\n";
2
+ export declare const UPDATE_DOCUMENT_MUTATION = "\n mutation DocumentUpdate($id: String!, $input: DocumentUpdateInput!) {\n documentUpdate(id: $id, input: $input) {\n success\n document {\n \n id\n title\n content\n slugId\n url\n icon\n color\n createdAt\n updatedAt\n creator {\n id\n name\n }\n project {\n id\n name\n }\n issue {\n id\n identifier\n title\n }\n\n }\n }\n }\n";
3
+ export declare const GET_DOCUMENT_QUERY = "\n query GetDocument($id: String!) {\n document(id: $id) {\n \n id\n title\n content\n slugId\n url\n icon\n color\n createdAt\n updatedAt\n creator {\n id\n name\n }\n project {\n id\n name\n }\n issue {\n id\n identifier\n title\n }\n\n }\n }\n";
4
+ export declare const LIST_DOCUMENTS_QUERY = "\n query ListDocuments($first: Int!, $filter: DocumentFilter) {\n documents(first: $first, filter: $filter) {\n nodes {\n \n id\n title\n content\n slugId\n url\n icon\n color\n createdAt\n updatedAt\n creator {\n id\n name\n }\n project {\n id\n name\n }\n issue {\n id\n identifier\n title\n }\n\n }\n }\n }\n";
5
+ export declare const DELETE_DOCUMENT_MUTATION = "\n mutation DocumentDelete($id: String!) {\n documentDelete(id: $id) {\n success\n }\n }\n";
@@ -0,0 +1,67 @@
1
+ const DOCUMENT_FRAGMENT = `
2
+ id
3
+ title
4
+ content
5
+ slugId
6
+ url
7
+ icon
8
+ color
9
+ createdAt
10
+ updatedAt
11
+ creator {
12
+ id
13
+ name
14
+ }
15
+ project {
16
+ id
17
+ name
18
+ }
19
+ issue {
20
+ id
21
+ identifier
22
+ title
23
+ }
24
+ `;
25
+ export const CREATE_DOCUMENT_MUTATION = `
26
+ mutation DocumentCreate($input: DocumentCreateInput!) {
27
+ documentCreate(input: $input) {
28
+ success
29
+ document {
30
+ ${DOCUMENT_FRAGMENT}
31
+ }
32
+ }
33
+ }
34
+ `;
35
+ export const UPDATE_DOCUMENT_MUTATION = `
36
+ mutation DocumentUpdate($id: String!, $input: DocumentUpdateInput!) {
37
+ documentUpdate(id: $id, input: $input) {
38
+ success
39
+ document {
40
+ ${DOCUMENT_FRAGMENT}
41
+ }
42
+ }
43
+ }
44
+ `;
45
+ export const GET_DOCUMENT_QUERY = `
46
+ query GetDocument($id: String!) {
47
+ document(id: $id) {
48
+ ${DOCUMENT_FRAGMENT}
49
+ }
50
+ }
51
+ `;
52
+ export const LIST_DOCUMENTS_QUERY = `
53
+ query ListDocuments($first: Int!, $filter: DocumentFilter) {
54
+ documents(first: $first, filter: $filter) {
55
+ nodes {
56
+ ${DOCUMENT_FRAGMENT}
57
+ }
58
+ }
59
+ }
60
+ `;
61
+ export const DELETE_DOCUMENT_MUTATION = `
62
+ mutation DocumentDelete($id: String!) {
63
+ documentDelete(id: $id) {
64
+ success
65
+ }
66
+ }
67
+ `;
@@ -0,0 +1,2 @@
1
+ export declare const INTROSPECT_TYPE_QUERY = "\n query ($typeName: String!) {\n __type(name: $typeName) {\n name\n kind\n description\n fields {\n name\n description\n type { name kind ofType { name kind ofType { name } } }\n args { name type { name kind ofType { name } } }\n }\n enumValues { name description }\n inputFields { name type { name kind ofType { name kind ofType { name } } } }\n }\n }\n";
2
+ export declare const INTROSPECT_ROOT_QUERY = "\n query {\n __type(name: \"Query\") {\n fields { name description args { name type { name kind ofType { name } } } }\n }\n }\n";
@@ -0,0 +1,24 @@
1
+ export const INTROSPECT_TYPE_QUERY = `
2
+ query ($typeName: String!) {
3
+ __type(name: $typeName) {
4
+ name
5
+ kind
6
+ description
7
+ fields {
8
+ name
9
+ description
10
+ type { name kind ofType { name kind ofType { name } } }
11
+ args { name type { name kind ofType { name } } }
12
+ }
13
+ enumValues { name description }
14
+ inputFields { name type { name kind ofType { name kind ofType { name } } } }
15
+ }
16
+ }
17
+ `;
18
+ export const INTROSPECT_ROOT_QUERY = `
19
+ query {
20
+ __type(name: "Query") {
21
+ fields { name description args { name type { name kind ofType { name } } } }
22
+ }
23
+ }
24
+ `;
@@ -0,0 +1,23 @@
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";
11
+ /**
12
+ * Build a label-resolution query filtered by names (case-insensitive).
13
+ * Uses `or` + `eqIgnoreCase` since Linear's `in` filter may be case-sensitive.
14
+ */
15
+ export declare function buildResolveLabelsByNameQuery(labelNames: string[]): {
16
+ query: string;
17
+ variables: Record<string, string>;
18
+ };
19
+ 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
+ export declare const GET_ISSUE_TEAM_QUERY = "\n query GetIssueTeam($issueId: String!) {\n issue(id: $issueId) {\n team { id }\n }\n }\n";
21
+ 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
+ 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
+ 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";