runline 0.11.3 → 0.11.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/plugins/googleDocs/src/documents.js +91 -0
- package/dist/plugins/googleDocs/src/formatting.js +126 -0
- package/dist/plugins/googleDocs/src/images.js +66 -0
- package/dist/plugins/googleDocs/src/index.js +45 -1008
- package/dist/plugins/googleDocs/src/shared.js +110 -0
- package/dist/plugins/googleDocs/src/structure.js +392 -0
- package/dist/plugins/googleDocs/src/tables.js +390 -0
- package/dist/plugins/googleDocs/src/tabs.js +77 -0
- package/dist/plugins/googleDocs/src/text.js +313 -0
- package/dist/plugins/linear/src/attachments.js +36 -12
- package/dist/plugins/linear/src/comments.js +20 -8
- package/dist/plugins/linear/src/cycles.js +22 -8
- package/dist/plugins/linear/src/initiatives.js +59 -19
- package/dist/plugins/linear/src/issues.js +118 -40
- package/dist/plugins/linear/src/labels.js +31 -11
- package/dist/plugins/linear/src/organization.js +1 -1
- package/dist/plugins/linear/src/projects.js +171 -57
- package/dist/plugins/linear/src/shared.js +16 -5
- package/dist/plugins/linear/src/states.js +14 -6
- package/dist/plugins/linear/src/teams.js +35 -12
- package/dist/plugins/linear/src/users.js +7 -3
- package/dist/plugins/linear/src/views.js +29 -10
- package/dist/plugins/linear/src/webhooks.js +39 -13
- package/dist/plugins/salesforce/src/index.js +1 -1
- package/package.json +1 -1
|
@@ -1,29 +1,59 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
-
import {
|
|
2
|
+
import { assertIssueInScope, buildConnArgs, COMMENT_FIELDS, ensureScopeLabelsOnCreateOrReplace, forbidScopeLabelRemoval, gql, ISSUE_FIELDS, ISSUE_LITE, issueHasScope, key, LIST_INPUT_SCHEMA, mergeIssueScopeFilter, } from "./shared.js";
|
|
3
3
|
export function registerIssueActions(rl) {
|
|
4
4
|
rl.registerAction("issue.create", {
|
|
5
5
|
description: "Create an issue. teamId is required; title is required unless a template is applied.",
|
|
6
6
|
inputSchema: t.Object({
|
|
7
|
-
teamId: t.String({
|
|
7
|
+
teamId: t.String({
|
|
8
|
+
description: "The identifier of the team associated with the issue",
|
|
9
|
+
}),
|
|
8
10
|
title: t.String({ description: "The title of the issue" }),
|
|
9
11
|
description: t.Optional(t.String({ description: "The issue description in markdown format" })),
|
|
10
|
-
assigneeId: t.Optional(t.String({
|
|
11
|
-
|
|
12
|
+
assigneeId: t.Optional(t.String({
|
|
13
|
+
description: "The identifier of the user to assign the issue to",
|
|
14
|
+
})),
|
|
15
|
+
priority: t.Optional(t.Number({
|
|
16
|
+
description: "Priority. 0=No priority, 1=Urgent, 2=High, 3=Medium, 4=Low",
|
|
17
|
+
})),
|
|
12
18
|
stateId: t.Optional(t.String({ description: "The team workflow state of the issue" })),
|
|
13
|
-
labelIds: t.Optional(t.Array(t.Unknown(), {
|
|
14
|
-
|
|
19
|
+
labelIds: t.Optional(t.Array(t.Unknown(), {
|
|
20
|
+
description: "The identifiers of the issue labels associated with this ticket",
|
|
21
|
+
})),
|
|
22
|
+
parentId: t.Optional(t.String({
|
|
23
|
+
description: "The identifier of the parent issue. UUID or issue identifier (e.g., 'LIN-123')",
|
|
24
|
+
})),
|
|
15
25
|
projectId: t.Optional(t.String({ description: "The project associated with the issue" })),
|
|
16
|
-
projectMilestoneId: t.Optional(t.String({
|
|
26
|
+
projectMilestoneId: t.Optional(t.String({
|
|
27
|
+
description: "The project milestone associated with the issue",
|
|
28
|
+
})),
|
|
17
29
|
cycleId: t.Optional(t.String({ description: "The cycle associated with the issue" })),
|
|
18
|
-
estimate: t.Optional(t.Number({
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
30
|
+
estimate: t.Optional(t.Number({
|
|
31
|
+
description: "The estimated complexity of the issue (Int)",
|
|
32
|
+
})),
|
|
33
|
+
dueDate: t.Optional(t.String({
|
|
34
|
+
description: "The date at which the issue is due (TimelessDate, YYYY-MM-DD)",
|
|
35
|
+
})),
|
|
36
|
+
subscriberIds: t.Optional(t.Array(t.Unknown(), {
|
|
37
|
+
description: "The identifiers of the users subscribing to this ticket",
|
|
38
|
+
})),
|
|
39
|
+
templateId: t.Optional(t.String({
|
|
40
|
+
description: "The identifier of a template the issue should be created from",
|
|
41
|
+
})),
|
|
42
|
+
useDefaultTemplate: t.Optional(t.Boolean({
|
|
43
|
+
description: "Apply the team's default template based on the user's membership",
|
|
44
|
+
})),
|
|
45
|
+
sortOrder: t.Optional(t.Number({
|
|
46
|
+
description: "The position of the issue related to other issues (Float)",
|
|
47
|
+
})),
|
|
48
|
+
subIssueSortOrder: t.Optional(t.Number({
|
|
49
|
+
description: "The position of the issue in its parent's sub-issue list (Float)",
|
|
50
|
+
})),
|
|
51
|
+
releaseIds: t.Optional(t.Array(t.Unknown(), {
|
|
52
|
+
description: "The identifiers of the releases to associate with this issue",
|
|
53
|
+
})),
|
|
54
|
+
id: t.Optional(t.String({
|
|
55
|
+
description: "The identifier in UUID v4 format. If none is provided, the backend will generate one",
|
|
56
|
+
})),
|
|
27
57
|
}),
|
|
28
58
|
async execute(input, ctx) {
|
|
29
59
|
const fields = { ...input };
|
|
@@ -72,29 +102,65 @@ export function registerIssueActions(rl) {
|
|
|
72
102
|
rl.registerAction("issue.update", {
|
|
73
103
|
description: "Update an issue. All fields optional; only provided fields are updated.",
|
|
74
104
|
inputSchema: t.Object({
|
|
75
|
-
issueId: t.String({
|
|
105
|
+
issueId: t.String({
|
|
106
|
+
description: "The identifier of the issue to update",
|
|
107
|
+
}),
|
|
76
108
|
title: t.Optional(t.String({ description: "The issue title" })),
|
|
77
109
|
description: t.Optional(t.String({ description: "The issue description in markdown format" })),
|
|
78
|
-
assigneeId: t.Optional(t.String({
|
|
110
|
+
assigneeId: t.Optional(t.String({
|
|
111
|
+
description: "The identifier of the user to assign the issue to",
|
|
112
|
+
})),
|
|
79
113
|
stateId: t.Optional(t.String({ description: "The team workflow state of the issue" })),
|
|
80
|
-
priority: t.Optional(t.Number({
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
114
|
+
priority: t.Optional(t.Number({
|
|
115
|
+
description: "Priority. 0=No priority, 1=Urgent, 2=High, 3=Medium, 4=Low",
|
|
116
|
+
})),
|
|
117
|
+
labelIds: t.Optional(t.Array(t.Unknown(), {
|
|
118
|
+
description: "The identifiers of the issue labels associated with this ticket (replaces all)",
|
|
119
|
+
})),
|
|
120
|
+
addedLabelIds: t.Optional(t.Array(t.Unknown(), {
|
|
121
|
+
description: "The identifiers of issue labels to be added to this issue",
|
|
122
|
+
})),
|
|
123
|
+
removedLabelIds: t.Optional(t.Array(t.Unknown(), {
|
|
124
|
+
description: "The identifiers of issue labels to be removed from this issue",
|
|
125
|
+
})),
|
|
84
126
|
projectId: t.Optional(t.String({ description: "The project associated with the issue" })),
|
|
85
|
-
projectMilestoneId: t.Optional(t.String({
|
|
127
|
+
projectMilestoneId: t.Optional(t.String({
|
|
128
|
+
description: "The project milestone associated with the issue",
|
|
129
|
+
})),
|
|
86
130
|
cycleId: t.Optional(t.String({ description: "The cycle associated with the issue" })),
|
|
87
|
-
parentId: t.Optional(t.String({
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
131
|
+
parentId: t.Optional(t.String({
|
|
132
|
+
description: "The identifier of the parent issue. UUID or issue identifier (e.g., 'LIN-123')",
|
|
133
|
+
})),
|
|
134
|
+
teamId: t.Optional(t.String({
|
|
135
|
+
description: "The identifier of the team associated with the issue (move issue to a different team)",
|
|
136
|
+
})),
|
|
137
|
+
estimate: t.Optional(t.Number({
|
|
138
|
+
description: "The estimated complexity of the issue (Int)",
|
|
139
|
+
})),
|
|
140
|
+
dueDate: t.Optional(t.String({
|
|
141
|
+
description: "The date at which the issue is due (TimelessDate, YYYY-MM-DD)",
|
|
142
|
+
})),
|
|
143
|
+
subscriberIds: t.Optional(t.Array(t.Unknown(), {
|
|
144
|
+
description: "The identifiers of the users subscribing to this ticket",
|
|
145
|
+
})),
|
|
146
|
+
sortOrder: t.Optional(t.Number({
|
|
147
|
+
description: "The position of the issue related to other issues (Float)",
|
|
148
|
+
})),
|
|
149
|
+
subIssueSortOrder: t.Optional(t.Number({
|
|
150
|
+
description: "The position of the issue in its parent's sub-issue list (Float)",
|
|
151
|
+
})),
|
|
152
|
+
snoozedUntilAt: t.Optional(t.String({
|
|
153
|
+
description: "The time until which the issue will be snoozed in Triage view (DateTime)",
|
|
154
|
+
})),
|
|
155
|
+
releaseIds: t.Optional(t.Array(t.Unknown(), {
|
|
156
|
+
description: "The identifiers of the releases associated with this issue (replaces all)",
|
|
157
|
+
})),
|
|
158
|
+
addedReleaseIds: t.Optional(t.Array(t.Unknown(), {
|
|
159
|
+
description: "The identifiers of releases to be added to this issue",
|
|
160
|
+
})),
|
|
161
|
+
removedReleaseIds: t.Optional(t.Array(t.Unknown(), {
|
|
162
|
+
description: "The identifiers of releases to be removed from this issue",
|
|
163
|
+
})),
|
|
98
164
|
trashed: t.Optional(t.Boolean({ description: "Whether the issue has been trashed" })),
|
|
99
165
|
}),
|
|
100
166
|
async execute(input, ctx) {
|
|
@@ -148,10 +214,16 @@ export function registerIssueActions(rl) {
|
|
|
148
214
|
description: "Search issues by text query using full-text and vector search. Rate-limited to 30 req/min.",
|
|
149
215
|
inputSchema: t.Object({
|
|
150
216
|
term: t.String({ description: "Search string to look for" }),
|
|
151
|
-
limit: t.Optional(t.Number({
|
|
217
|
+
limit: t.Optional(t.Number({
|
|
218
|
+
description: "Max results (forward pagination, default 50)",
|
|
219
|
+
})),
|
|
152
220
|
filter: t.Optional(t.Object({}, { description: "Optional IssueFilter" })),
|
|
153
|
-
includeComments: t.Optional(t.Boolean({
|
|
154
|
-
|
|
221
|
+
includeComments: t.Optional(t.Boolean({
|
|
222
|
+
description: "Should associated comments be searched (default false)",
|
|
223
|
+
})),
|
|
224
|
+
includeArchived: t.Optional(t.Boolean({
|
|
225
|
+
description: "Should archived resources be included (default false)",
|
|
226
|
+
})),
|
|
155
227
|
teamId: t.Optional(t.String({ description: "UUID of a team to boost in search results" })),
|
|
156
228
|
orderBy: t.Optional(t.String({ description: "PaginationOrderBy: createdAt | updatedAt" })),
|
|
157
229
|
after: t.Optional(t.String({ description: "Cursor for forward pagination" })),
|
|
@@ -241,9 +313,15 @@ export function registerIssueActions(rl) {
|
|
|
241
313
|
rl.registerAction("issue.addLink", {
|
|
242
314
|
description: "Create a relation between two issues.",
|
|
243
315
|
inputSchema: t.Object({
|
|
244
|
-
issueId: t.String({
|
|
245
|
-
|
|
246
|
-
|
|
316
|
+
issueId: t.String({
|
|
317
|
+
description: "The identifier of the issue that is related to another issue. UUID or issue identifier (e.g., 'LIN-123')",
|
|
318
|
+
}),
|
|
319
|
+
relatedIssueId: t.String({
|
|
320
|
+
description: "The identifier of the related issue. UUID or issue identifier (e.g., 'LIN-123')",
|
|
321
|
+
}),
|
|
322
|
+
type: t.String({
|
|
323
|
+
description: "IssueRelationType: blocks | duplicate | related | similar",
|
|
324
|
+
}),
|
|
247
325
|
}),
|
|
248
326
|
async execute(input, ctx) {
|
|
249
327
|
const fields = input;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
-
import {
|
|
2
|
+
import { bindGetAction, bindListAction, gql, key, LABEL_FIELDS, requireUnscoped, } from "./shared.js";
|
|
3
3
|
export function registerLabelActions(rl) {
|
|
4
4
|
const listAction = bindListAction(rl);
|
|
5
5
|
const getAction = bindGetAction(rl);
|
|
@@ -9,14 +9,24 @@ export function registerLabelActions(rl) {
|
|
|
9
9
|
description: "Create a label. Omit teamId for a workspace-level label.",
|
|
10
10
|
inputSchema: t.Object({
|
|
11
11
|
name: t.String({ description: "The name of the label" }),
|
|
12
|
-
teamId: t.Optional(t.String({
|
|
12
|
+
teamId: t.Optional(t.String({
|
|
13
|
+
description: "The team associated with the label. If omitted, the label is workspace-scoped",
|
|
14
|
+
})),
|
|
13
15
|
color: t.Optional(t.String({ description: "The color of the label (hex)" })),
|
|
14
16
|
description: t.Optional(t.String({ description: "The description of the label" })),
|
|
15
|
-
parentId: t.Optional(t.String({
|
|
17
|
+
parentId: t.Optional(t.String({
|
|
18
|
+
description: "The identifier of the parent label (group label)",
|
|
19
|
+
})),
|
|
16
20
|
isGroup: t.Optional(t.Boolean({ description: "Whether the label is a group" })),
|
|
17
|
-
retiredAt: t.Optional(t.String({
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
retiredAt: t.Optional(t.String({
|
|
22
|
+
description: "The time at which the label was retired (DateTime). Set to null to restore a retired label",
|
|
23
|
+
})),
|
|
24
|
+
id: t.Optional(t.String({
|
|
25
|
+
description: "The identifier in UUID v4 format. If none is provided, the backend will generate one",
|
|
26
|
+
})),
|
|
27
|
+
replaceTeamLabels: t.Optional(t.Boolean({
|
|
28
|
+
description: "Replace all team-specific labels with the same name with this newly created workspace label (default false)",
|
|
29
|
+
})),
|
|
20
30
|
}),
|
|
21
31
|
async execute(input, ctx) {
|
|
22
32
|
requireUnscoped(ctx, "label.create");
|
|
@@ -34,8 +44,12 @@ export function registerLabelActions(rl) {
|
|
|
34
44
|
description: t.Optional(t.String({ description: "The description of the label" })),
|
|
35
45
|
parentId: t.Optional(t.String({ description: "The identifier of the parent label" })),
|
|
36
46
|
isGroup: t.Optional(t.Boolean({ description: "Whether the label is a group" })),
|
|
37
|
-
retiredAt: t.Optional(t.String({
|
|
38
|
-
|
|
47
|
+
retiredAt: t.Optional(t.String({
|
|
48
|
+
description: "The time at which the label was retired (DateTime). Set to null to restore a retired label",
|
|
49
|
+
})),
|
|
50
|
+
replaceTeamLabels: t.Optional(t.Boolean({
|
|
51
|
+
description: "Replace all team-specific labels with the same name with this updated workspace label (default false)",
|
|
52
|
+
})),
|
|
39
53
|
}),
|
|
40
54
|
async execute(input, ctx) {
|
|
41
55
|
requireUnscoped(ctx, "label.update");
|
|
@@ -46,7 +60,9 @@ export function registerLabelActions(rl) {
|
|
|
46
60
|
});
|
|
47
61
|
rl.registerAction("label.delete", {
|
|
48
62
|
description: "Delete a label.",
|
|
49
|
-
inputSchema: t.Object({
|
|
63
|
+
inputSchema: t.Object({
|
|
64
|
+
id: t.String({ description: "The identifier of the label to delete" }),
|
|
65
|
+
}),
|
|
50
66
|
async execute(input, ctx) {
|
|
51
67
|
requireUnscoped(ctx, "label.delete");
|
|
52
68
|
const data = await gql(key(ctx), `mutation($id: String!) { issueLabelDelete(id: $id) { success } }`, { id: input.id });
|
|
@@ -55,7 +71,9 @@ export function registerLabelActions(rl) {
|
|
|
55
71
|
});
|
|
56
72
|
rl.registerAction("label.retire", {
|
|
57
73
|
description: "Retire a label. Retired labels remain visible but cannot be applied to new issues.",
|
|
58
|
-
inputSchema: t.Object({
|
|
74
|
+
inputSchema: t.Object({
|
|
75
|
+
id: t.String({ description: "The identifier of the label to retire" }),
|
|
76
|
+
}),
|
|
59
77
|
async execute(input, ctx) {
|
|
60
78
|
requireUnscoped(ctx, "label.retire");
|
|
61
79
|
const data = await gql(key(ctx), `mutation($id: String!) { issueLabelRetire(id: $id) { success issueLabel { ${LABEL_FIELDS} } } }`, { id: input.id });
|
|
@@ -64,7 +82,9 @@ export function registerLabelActions(rl) {
|
|
|
64
82
|
});
|
|
65
83
|
rl.registerAction("label.restore", {
|
|
66
84
|
description: "Restore a previously retired label.",
|
|
67
|
-
inputSchema: t.Object({
|
|
85
|
+
inputSchema: t.Object({
|
|
86
|
+
id: t.String({ description: "The identifier of the label to restore" }),
|
|
87
|
+
}),
|
|
68
88
|
async execute(input, ctx) {
|
|
69
89
|
requireUnscoped(ctx, "label.restore");
|
|
70
90
|
const data = await gql(key(ctx), `mutation($id: String!) { issueLabelRestore(id: $id) { success issueLabel { ${LABEL_FIELDS} } } }`, { id: input.id });
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as t from "typebox";
|
|
2
|
-
import {
|
|
2
|
+
import { gql, key, ORG_FIELDS, requireUnscoped } from "./shared.js";
|
|
3
3
|
export function registerOrganizationActions(rl) {
|
|
4
4
|
rl.registerAction("org.get", {
|
|
5
5
|
description: "Get the authenticated workspace.",
|