@qelos/aidev 0.5.2 → 0.5.3
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/.aidev/assets/86c8yjxrr/9ea11c36-311c-4022-889c-1bb0915122dc.jpg-40e6939e3b68e864260f7ae7e85bd623_exif.jpg +0 -0
- package/.env.aidev.example +92 -92
- package/CONTRIBUTING.md +78 -78
- package/LICENSE +21 -21
- package/README.md +735 -735
- package/dist/autoCompress.d.ts +54 -0
- package/dist/autoCompress.d.ts.map +1 -0
- package/dist/autoCompress.js +300 -0
- package/dist/autoCompress.js.map +1 -0
- package/dist/cli.js +0 -0
- package/dist/commands/help.js +80 -80
- package/dist/commands/init.js +105 -105
- package/dist/commands/run.js +146 -146
- package/dist/github.js +27 -27
- package/dist/providers/linear.d.ts +4 -1
- package/dist/providers/linear.d.ts.map +1 -1
- package/dist/providers/linear.js +141 -77
- package/dist/providers/linear.js.map +1 -1
- package/dist/providers/monday.js +39 -39
- package/package.json +51 -51
- package/scripts/run-tests.cjs +18 -18
|
@@ -2,12 +2,15 @@ import { Task, Comment, Config, CreateTaskParams, CreateTaskResult } from '../ty
|
|
|
2
2
|
import { TaskProvider } from './base';
|
|
3
3
|
export declare class LinearProvider implements TaskProvider {
|
|
4
4
|
private apiKey;
|
|
5
|
-
private
|
|
5
|
+
private teamIdInput;
|
|
6
|
+
private resolvedTeamId;
|
|
6
7
|
private label;
|
|
7
8
|
private pendingStatus;
|
|
8
9
|
private inReviewStatus;
|
|
9
10
|
constructor(config: Config);
|
|
10
11
|
private graphql;
|
|
12
|
+
private resolveTeamId;
|
|
13
|
+
private resolveLabelIds;
|
|
11
14
|
private fetchWorkflowStateIds;
|
|
12
15
|
fetchTasks(): Promise<Task[]>;
|
|
13
16
|
fetchTasksByStatus(statuses: string[]): Promise<Task[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../src/providers/linear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../src/providers/linear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AA0BtC,qBAAa,cAAe,YAAW,YAAY;IACjD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAS;gBAEnB,MAAM,EAAE,MAAM;YAQZ,OAAO;YAwBP,aAAa;YAyBb,eAAe;YAyBf,qBAAqB;IAwB7B,UAAU,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAyD7B,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAMvD,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YA4CvC,cAAc;IA2BtB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB3D,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAqCtE"}
|
package/dist/providers/linear.js
CHANGED
|
@@ -4,10 +4,16 @@ exports.LinearProvider = void 0;
|
|
|
4
4
|
const logger_1 = require("../logger");
|
|
5
5
|
const LINEAR_GRAPHQL = 'https://api.linear.app/graphql';
|
|
6
6
|
const SKIP_STATE_TYPES = new Set(['completed', 'canceled']);
|
|
7
|
+
const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
8
|
+
function formatLinearError(e) {
|
|
9
|
+
const detail = e.extensions?.userPresentableMessage;
|
|
10
|
+
return detail ? `${e.message} (${detail})` : e.message;
|
|
11
|
+
}
|
|
7
12
|
class LinearProvider {
|
|
8
13
|
constructor(config) {
|
|
14
|
+
this.resolvedTeamId = null;
|
|
9
15
|
this.apiKey = config.linearApiKey;
|
|
10
|
-
this.
|
|
16
|
+
this.teamIdInput = config.linearTeamId;
|
|
11
17
|
this.label = config.linearLabel;
|
|
12
18
|
this.pendingStatus = config.linearPendingStatus || 'Backlog';
|
|
13
19
|
this.inReviewStatus = config.linearInReviewStatus || 'In Review';
|
|
@@ -23,30 +29,79 @@ class LinearProvider {
|
|
|
23
29
|
});
|
|
24
30
|
const raw = (await res.json());
|
|
25
31
|
if (!res.ok) {
|
|
26
|
-
const msg = raw.errors?.map(
|
|
32
|
+
const msg = raw.errors?.map(formatLinearError).join('; ') || res.statusText;
|
|
27
33
|
throw new Error(`Linear API error ${res.status}: ${msg}`);
|
|
28
34
|
}
|
|
29
35
|
if (raw.errors?.length) {
|
|
30
|
-
throw new Error(`Linear GraphQL errors: ${raw.errors.map(
|
|
36
|
+
throw new Error(`Linear GraphQL errors: ${raw.errors.map(formatLinearError).join('; ')}`);
|
|
31
37
|
}
|
|
32
38
|
if (raw.data === undefined) {
|
|
33
39
|
throw new Error('Linear API returned no data');
|
|
34
40
|
}
|
|
35
41
|
return raw.data;
|
|
36
42
|
}
|
|
37
|
-
async
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
async resolveTeamId() {
|
|
44
|
+
if (this.resolvedTeamId)
|
|
45
|
+
return this.resolvedTeamId;
|
|
46
|
+
if (!this.teamIdInput) {
|
|
47
|
+
throw new Error('Linear: LINEAR_TEAM_ID is not set');
|
|
48
|
+
}
|
|
49
|
+
if (UUID_REGEX.test(this.teamIdInput)) {
|
|
50
|
+
this.resolvedTeamId = this.teamIdInput;
|
|
51
|
+
return this.resolvedTeamId;
|
|
52
|
+
}
|
|
53
|
+
// Linear's team(id) accepts UUID or team key (e.g. "ENG", "JAC")
|
|
54
|
+
const query = `
|
|
55
|
+
query Team($id: String!) {
|
|
56
|
+
team(id: $id) { id }
|
|
57
|
+
}
|
|
58
|
+
`;
|
|
59
|
+
const data = await this.graphql(query, { id: this.teamIdInput });
|
|
60
|
+
if (!data.team?.id) {
|
|
61
|
+
throw new Error(`Linear: could not resolve LINEAR_TEAM_ID "${this.teamIdInput}". Set it to the team UUID or team key.`);
|
|
62
|
+
}
|
|
63
|
+
this.resolvedTeamId = data.team.id;
|
|
64
|
+
return this.resolvedTeamId;
|
|
65
|
+
}
|
|
66
|
+
async resolveLabelIds(teamId, names) {
|
|
67
|
+
if (!names.length)
|
|
68
|
+
return { ids: [], missing: [] };
|
|
69
|
+
const query = `
|
|
70
|
+
query Labels($filter: IssueLabelFilter) {
|
|
71
|
+
issueLabels(filter: $filter, first: 250) {
|
|
72
|
+
nodes { id name }
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
`;
|
|
76
|
+
const data = await this.graphql(query, { filter: { team: { id: { eq: teamId } } } });
|
|
77
|
+
const byName = new Map();
|
|
78
|
+
for (const node of data.issueLabels.nodes)
|
|
79
|
+
byName.set(node.name.toLowerCase(), node.id);
|
|
80
|
+
const ids = [];
|
|
81
|
+
const missing = [];
|
|
82
|
+
for (const name of names) {
|
|
83
|
+
const id = byName.get(name.toLowerCase());
|
|
84
|
+
if (id)
|
|
85
|
+
ids.push(id);
|
|
86
|
+
else
|
|
87
|
+
missing.push(name);
|
|
46
88
|
}
|
|
47
|
-
|
|
89
|
+
return { ids, missing };
|
|
90
|
+
}
|
|
91
|
+
async fetchWorkflowStateIds() {
|
|
92
|
+
const query = `
|
|
93
|
+
query WorkflowStates($filter: WorkflowStateFilter) {
|
|
94
|
+
workflowStates(filter: $filter) {
|
|
95
|
+
nodes {
|
|
96
|
+
id
|
|
97
|
+
name
|
|
98
|
+
type
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
48
102
|
`;
|
|
49
|
-
const
|
|
103
|
+
const teamId = await this.resolveTeamId();
|
|
104
|
+
const data = await this.graphql(query, { filter: { team: { id: { eq: teamId } } } });
|
|
50
105
|
const byName = new Map();
|
|
51
106
|
for (const node of data.workflowStates.nodes) {
|
|
52
107
|
byName.set(node.name.toLowerCase(), node.id);
|
|
@@ -54,29 +109,30 @@ class LinearProvider {
|
|
|
54
109
|
return byName;
|
|
55
110
|
}
|
|
56
111
|
async fetchTasks() {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
112
|
+
const teamId = await this.resolveTeamId();
|
|
113
|
+
logger_1.logger.debug(`Fetching Linear issues for team ${teamId} with label "${this.label}"`);
|
|
114
|
+
const query = `
|
|
115
|
+
query Issues($filter: IssueFilter) {
|
|
116
|
+
issues(filter: $filter, first: 100) {
|
|
117
|
+
nodes {
|
|
118
|
+
id
|
|
119
|
+
identifier
|
|
120
|
+
title
|
|
121
|
+
description
|
|
122
|
+
url
|
|
123
|
+
state { id name type }
|
|
124
|
+
priority
|
|
125
|
+
labels { nodes { name } }
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
73
129
|
`;
|
|
74
130
|
const filter = {
|
|
75
|
-
team: { id: { eq:
|
|
131
|
+
team: { id: { eq: teamId } },
|
|
76
132
|
state: { type: { nin: ['completed', 'canceled'] } },
|
|
77
133
|
};
|
|
78
134
|
if (this.label && this.label !== '*') {
|
|
79
|
-
filter.labels = { name: { eq: this.label } };
|
|
135
|
+
filter.labels = { some: { name: { eq: this.label } } };
|
|
80
136
|
}
|
|
81
137
|
const data = await this.graphql(query, { filter });
|
|
82
138
|
const skipTypes = new Set(SKIP_STATE_TYPES);
|
|
@@ -100,13 +156,13 @@ class LinearProvider {
|
|
|
100
156
|
async postComment(taskId, text) {
|
|
101
157
|
logger_1.logger.debug(`Posting comment to Linear issue ${taskId}`);
|
|
102
158
|
const issueId = await this.resolveIssueId(taskId);
|
|
103
|
-
const mutation = `
|
|
104
|
-
mutation CreateComment($input: CommentCreateInput!) {
|
|
105
|
-
commentCreate(input: $input) {
|
|
106
|
-
success
|
|
107
|
-
comment { id }
|
|
108
|
-
}
|
|
109
|
-
}
|
|
159
|
+
const mutation = `
|
|
160
|
+
mutation CreateComment($input: CommentCreateInput!) {
|
|
161
|
+
commentCreate(input: $input) {
|
|
162
|
+
success
|
|
163
|
+
comment { id }
|
|
164
|
+
}
|
|
165
|
+
}
|
|
110
166
|
`;
|
|
111
167
|
await this.graphql(mutation, {
|
|
112
168
|
input: { issueId, body: text },
|
|
@@ -115,19 +171,19 @@ class LinearProvider {
|
|
|
115
171
|
async getComments(taskId) {
|
|
116
172
|
logger_1.logger.debug(`Fetching comments for Linear issue ${taskId}`);
|
|
117
173
|
const issueId = await this.resolveIssueId(taskId);
|
|
118
|
-
const query = `
|
|
119
|
-
query IssueComments($id: String!) {
|
|
120
|
-
issue(id: $id) {
|
|
121
|
-
comments {
|
|
122
|
-
nodes {
|
|
123
|
-
id
|
|
124
|
-
body
|
|
125
|
-
user { name id }
|
|
126
|
-
createdAt
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
174
|
+
const query = `
|
|
175
|
+
query IssueComments($id: String!) {
|
|
176
|
+
issue(id: $id) {
|
|
177
|
+
comments {
|
|
178
|
+
nodes {
|
|
179
|
+
id
|
|
180
|
+
body
|
|
181
|
+
user { name id }
|
|
182
|
+
createdAt
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
131
187
|
`;
|
|
132
188
|
const data = await this.graphql(query, { id: issueId });
|
|
133
189
|
const nodes = data.issue?.comments?.nodes ?? [];
|
|
@@ -142,12 +198,12 @@ class LinearProvider {
|
|
|
142
198
|
}
|
|
143
199
|
async resolveIssueId(identifier) {
|
|
144
200
|
if (/^[A-Z]+-\d+$/i.test(identifier)) {
|
|
145
|
-
const query = `
|
|
146
|
-
query IssueByIdentifier($filter: IssueFilter) {
|
|
147
|
-
issues(filter: $filter, first: 1) {
|
|
148
|
-
nodes { id }
|
|
149
|
-
}
|
|
150
|
-
}
|
|
201
|
+
const query = `
|
|
202
|
+
query IssueByIdentifier($filter: IssueFilter) {
|
|
203
|
+
issues(filter: $filter, first: 1) {
|
|
204
|
+
nodes { id }
|
|
205
|
+
}
|
|
206
|
+
}
|
|
151
207
|
`;
|
|
152
208
|
const data = await this.graphql(query, {
|
|
153
209
|
filter: { identifier: { eq: identifier } },
|
|
@@ -156,12 +212,12 @@ class LinearProvider {
|
|
|
156
212
|
if (id)
|
|
157
213
|
return id;
|
|
158
214
|
}
|
|
159
|
-
const byIdQuery = `
|
|
160
|
-
query Issue($id: String!) {
|
|
161
|
-
issue(id: $id) {
|
|
162
|
-
id
|
|
163
|
-
}
|
|
164
|
-
}
|
|
215
|
+
const byIdQuery = `
|
|
216
|
+
query Issue($id: String!) {
|
|
217
|
+
issue(id: $id) {
|
|
218
|
+
id
|
|
219
|
+
}
|
|
220
|
+
}
|
|
165
221
|
`;
|
|
166
222
|
const byId = await this.graphql(byIdQuery, { id: identifier });
|
|
167
223
|
if (byId.issue?.id)
|
|
@@ -178,12 +234,12 @@ class LinearProvider {
|
|
|
178
234
|
throw new Error(`Linear: no workflow state matching "${status}". Available: ${names}`);
|
|
179
235
|
}
|
|
180
236
|
const issueId = await this.resolveIssueId(taskId);
|
|
181
|
-
const mutation = `
|
|
182
|
-
mutation IssueUpdate($id: String!, $input: IssueUpdateInput!) {
|
|
183
|
-
issueUpdate(id: $id, input: $input) {
|
|
184
|
-
success
|
|
185
|
-
}
|
|
186
|
-
}
|
|
237
|
+
const mutation = `
|
|
238
|
+
mutation IssueUpdate($id: String!, $input: IssueUpdateInput!) {
|
|
239
|
+
issueUpdate(id: $id, input: $input) {
|
|
240
|
+
success
|
|
241
|
+
}
|
|
242
|
+
}
|
|
187
243
|
`;
|
|
188
244
|
await this.graphql(mutation, {
|
|
189
245
|
id: issueId,
|
|
@@ -191,22 +247,30 @@ class LinearProvider {
|
|
|
191
247
|
});
|
|
192
248
|
}
|
|
193
249
|
async createTask(params) {
|
|
194
|
-
const
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
issue { id identifier url }
|
|
250
|
+
const teamId = await this.resolveTeamId();
|
|
251
|
+
const { ids: labelIds, missing } = await this.resolveLabelIds(teamId, params.tags || []);
|
|
252
|
+
if (missing.length) {
|
|
253
|
+
logger_1.logger.warn(`Linear: skipping unknown labels (create them in Linear first): ${missing.join(', ')}`);
|
|
199
254
|
}
|
|
200
|
-
|
|
255
|
+
const mutation = `
|
|
256
|
+
mutation IssueCreate($input: IssueCreateInput!) {
|
|
257
|
+
issueCreate(input: $input) {
|
|
258
|
+
success
|
|
259
|
+
issue { id identifier url }
|
|
260
|
+
}
|
|
261
|
+
}
|
|
201
262
|
`;
|
|
202
263
|
const input = {
|
|
203
|
-
teamId
|
|
264
|
+
teamId,
|
|
204
265
|
title: params.title,
|
|
205
266
|
description: params.description || undefined,
|
|
206
267
|
};
|
|
207
268
|
if (params.priority !== undefined) {
|
|
208
269
|
input.priority = params.priority;
|
|
209
270
|
}
|
|
271
|
+
if (labelIds.length) {
|
|
272
|
+
input.labelIds = labelIds;
|
|
273
|
+
}
|
|
210
274
|
const data = await this.graphql(mutation, { input });
|
|
211
275
|
const issue = data.issueCreate?.issue;
|
|
212
276
|
if (!issue) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../../src/providers/linear.ts"],"names":[],"mappings":";;;AAEA,sCAAmC;AAEnC,MAAM,cAAc,GAAG,gCAAgC,CAAC;AACxD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../../src/providers/linear.ts"],"names":[],"mappings":"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"}
|
package/dist/providers/monday.js
CHANGED
|
@@ -53,21 +53,21 @@ class MondayProvider {
|
|
|
53
53
|
}
|
|
54
54
|
async fetchTasks() {
|
|
55
55
|
logger_1.logger.debug(`Fetching items from Monday board ${this.boardId}`);
|
|
56
|
-
const query = `
|
|
57
|
-
query ($boardId: ID!, $limit: Int!) {
|
|
58
|
-
boards(ids: [$boardId]) {
|
|
59
|
-
items_page(limit: $limit) {
|
|
60
|
-
cursor
|
|
61
|
-
items {
|
|
62
|
-
id
|
|
63
|
-
name
|
|
64
|
-
url
|
|
65
|
-
description { description }
|
|
66
|
-
column_values { id value text }
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
56
|
+
const query = `
|
|
57
|
+
query ($boardId: ID!, $limit: Int!) {
|
|
58
|
+
boards(ids: [$boardId]) {
|
|
59
|
+
items_page(limit: $limit) {
|
|
60
|
+
cursor
|
|
61
|
+
items {
|
|
62
|
+
id
|
|
63
|
+
name
|
|
64
|
+
url
|
|
65
|
+
description { description }
|
|
66
|
+
column_values { id value text }
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
71
|
`;
|
|
72
72
|
const data = await this.graphql(query, {
|
|
73
73
|
boardId: this.boardId,
|
|
@@ -102,10 +102,10 @@ class MondayProvider {
|
|
|
102
102
|
}
|
|
103
103
|
async postComment(taskId, text) {
|
|
104
104
|
logger_1.logger.debug(`Posting update to Monday item ${taskId}`);
|
|
105
|
-
const mutation = `
|
|
106
|
-
mutation ($itemId: ID!, $body: String!) {
|
|
107
|
-
create_update(item_id: $itemId, body: $body) { id }
|
|
108
|
-
}
|
|
105
|
+
const mutation = `
|
|
106
|
+
mutation ($itemId: ID!, $body: String!) {
|
|
107
|
+
create_update(item_id: $itemId, body: $body) { id }
|
|
108
|
+
}
|
|
109
109
|
`;
|
|
110
110
|
await this.graphql(mutation, {
|
|
111
111
|
itemId: taskId,
|
|
@@ -114,18 +114,18 @@ class MondayProvider {
|
|
|
114
114
|
}
|
|
115
115
|
async getComments(taskId) {
|
|
116
116
|
logger_1.logger.debug(`Fetching updates for Monday item ${taskId}`);
|
|
117
|
-
const query = `
|
|
118
|
-
query ($itemId: ID!) {
|
|
119
|
-
items(ids: [$itemId]) {
|
|
120
|
-
updates(limit: 100) {
|
|
121
|
-
id
|
|
122
|
-
text_body
|
|
123
|
-
body
|
|
124
|
-
created_at
|
|
125
|
-
creator { id name }
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
117
|
+
const query = `
|
|
118
|
+
query ($itemId: ID!) {
|
|
119
|
+
items(ids: [$itemId]) {
|
|
120
|
+
updates(limit: 100) {
|
|
121
|
+
id
|
|
122
|
+
text_body
|
|
123
|
+
body
|
|
124
|
+
created_at
|
|
125
|
+
creator { id name }
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
129
|
`;
|
|
130
130
|
const data = await this.graphql(query, { itemId: taskId });
|
|
131
131
|
const item = data.items?.[0];
|
|
@@ -142,10 +142,10 @@ class MondayProvider {
|
|
|
142
142
|
}
|
|
143
143
|
async updateStatus(taskId, status) {
|
|
144
144
|
logger_1.logger.debug(`Updating Monday item ${taskId} status to "${status}"`);
|
|
145
|
-
const mutation = `
|
|
146
|
-
mutation ($boardId: ID!, $itemId: ID!, $columnId: String!, $value: String!) {
|
|
147
|
-
change_column_value(board_id: $boardId, item_id: $itemId, column_id: $columnId, value: $value) { id }
|
|
148
|
-
}
|
|
145
|
+
const mutation = `
|
|
146
|
+
mutation ($boardId: ID!, $itemId: ID!, $columnId: String!, $value: String!) {
|
|
147
|
+
change_column_value(board_id: $boardId, item_id: $itemId, column_id: $columnId, value: $value) { id }
|
|
148
|
+
}
|
|
149
149
|
`;
|
|
150
150
|
const value = JSON.stringify({ label: status });
|
|
151
151
|
await this.graphql(mutation, {
|
|
@@ -157,10 +157,10 @@ class MondayProvider {
|
|
|
157
157
|
}
|
|
158
158
|
async createTask(params) {
|
|
159
159
|
const groupId = this.groupId || 'topics';
|
|
160
|
-
const mutation = `
|
|
161
|
-
mutation ($boardId: ID!, $groupId: String!, $itemName: String!, $columnValues: JSON) {
|
|
162
|
-
create_item(board_id: $boardId, group_id: $groupId, item_name: $itemName, column_values: $columnValues) { id }
|
|
163
|
-
}
|
|
160
|
+
const mutation = `
|
|
161
|
+
mutation ($boardId: ID!, $groupId: String!, $itemName: String!, $columnValues: JSON) {
|
|
162
|
+
create_item(board_id: $boardId, group_id: $groupId, item_name: $itemName, column_values: $columnValues) { id }
|
|
163
|
+
}
|
|
164
164
|
`;
|
|
165
165
|
const columnValues = {};
|
|
166
166
|
if (this.statusColumnId) {
|
package/package.json
CHANGED
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@qelos/aidev",
|
|
3
|
-
"version": "0.5.
|
|
4
|
-
"description": "AI-powered task executor — polls ClickUp (and more) to implement tasks with Claude, Cursor, Windsurf, or Antigravity",
|
|
5
|
-
"type": "commonjs",
|
|
6
|
-
"bin": {
|
|
7
|
-
"aidev": "dist/cli.js"
|
|
8
|
-
},
|
|
9
|
-
"main": "./dist/cli.js",
|
|
10
|
-
"engines": {
|
|
11
|
-
"node": ">=22.0.0"
|
|
12
|
-
},
|
|
13
|
-
"scripts": {
|
|
14
|
-
"build": "tsc && node -e \"if(process.platform!=='win32')require('node:fs').chmodSync('dist/cli.js',0o755)\"",
|
|
15
|
-
"dev": "tsx src/cli.ts",
|
|
16
|
-
"test": "node scripts/run-tests.cjs",
|
|
17
|
-
"prepublishOnly": "npm run build"
|
|
18
|
-
},
|
|
19
|
-
"keywords": [
|
|
20
|
-
"ai",
|
|
21
|
-
"cli",
|
|
22
|
-
"clickup",
|
|
23
|
-
"claude",
|
|
24
|
-
"cursor",
|
|
25
|
-
"automation"
|
|
26
|
-
],
|
|
27
|
-
"author": "",
|
|
28
|
-
"license": "MIT",
|
|
29
|
-
"repository": {
|
|
30
|
-
"type": "git",
|
|
31
|
-
"url": "git+https://github.com/qelos-io/aidev.git"
|
|
32
|
-
},
|
|
33
|
-
"bugs": {
|
|
34
|
-
"url": "https://github.com/qelos-io/aidev/issues"
|
|
35
|
-
},
|
|
36
|
-
"homepage": "https://github.com/qelos-io/aidev#readme",
|
|
37
|
-
"publishConfig": {
|
|
38
|
-
"access": "public"
|
|
39
|
-
},
|
|
40
|
-
"dependencies": {
|
|
41
|
-
"chalk": "^4.1.2",
|
|
42
|
-
"commander": "^12.0.0",
|
|
43
|
-
"dotenv": "^16.4.0",
|
|
44
|
-
"jiti": "^2.6.1"
|
|
45
|
-
},
|
|
46
|
-
"devDependencies": {
|
|
47
|
-
"@types/node": "^22.0.0",
|
|
48
|
-
"tsx": "^4.0.0",
|
|
49
|
-
"typescript": "^5.0.0"
|
|
50
|
-
}
|
|
51
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@qelos/aidev",
|
|
3
|
+
"version": "0.5.3",
|
|
4
|
+
"description": "AI-powered task executor — polls ClickUp (and more) to implement tasks with Claude, Cursor, Windsurf, or Antigravity",
|
|
5
|
+
"type": "commonjs",
|
|
6
|
+
"bin": {
|
|
7
|
+
"aidev": "dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/cli.js",
|
|
10
|
+
"engines": {
|
|
11
|
+
"node": ">=22.0.0"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc && node -e \"if(process.platform!=='win32')require('node:fs').chmodSync('dist/cli.js',0o755)\"",
|
|
15
|
+
"dev": "tsx src/cli.ts",
|
|
16
|
+
"test": "node scripts/run-tests.cjs",
|
|
17
|
+
"prepublishOnly": "npm run build"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"ai",
|
|
21
|
+
"cli",
|
|
22
|
+
"clickup",
|
|
23
|
+
"claude",
|
|
24
|
+
"cursor",
|
|
25
|
+
"automation"
|
|
26
|
+
],
|
|
27
|
+
"author": "",
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "git+https://github.com/qelos-io/aidev.git"
|
|
32
|
+
},
|
|
33
|
+
"bugs": {
|
|
34
|
+
"url": "https://github.com/qelos-io/aidev/issues"
|
|
35
|
+
},
|
|
36
|
+
"homepage": "https://github.com/qelos-io/aidev#readme",
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"chalk": "^4.1.2",
|
|
42
|
+
"commander": "^12.0.0",
|
|
43
|
+
"dotenv": "^16.4.0",
|
|
44
|
+
"jiti": "^2.6.1"
|
|
45
|
+
},
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@types/node": "^22.0.0",
|
|
48
|
+
"tsx": "^4.0.0",
|
|
49
|
+
"typescript": "^5.0.0"
|
|
50
|
+
}
|
|
51
|
+
}
|
package/scripts/run-tests.cjs
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const { spawnSync } = require('node:child_process');
|
|
4
|
-
const { globSync } = require('node:fs');
|
|
5
|
-
const path = require('node:path');
|
|
6
|
-
|
|
7
|
-
const root = path.join(__dirname, '..');
|
|
8
|
-
const files = globSync('src/__tests__/**/*.test.ts', { cwd: root }).sort();
|
|
9
|
-
if (files.length === 0) {
|
|
10
|
-
console.error('No test files found under src/__tests__');
|
|
11
|
-
process.exit(1);
|
|
12
|
-
}
|
|
13
|
-
const abs = files.map((f) => path.join(root, f));
|
|
14
|
-
const r = spawnSync(process.execPath, ['--require', 'tsx/cjs', '--test', ...abs], {
|
|
15
|
-
cwd: root,
|
|
16
|
-
stdio: 'inherit',
|
|
17
|
-
});
|
|
18
|
-
process.exit(r.status === null ? 1 : r.status);
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { spawnSync } = require('node:child_process');
|
|
4
|
+
const { globSync } = require('node:fs');
|
|
5
|
+
const path = require('node:path');
|
|
6
|
+
|
|
7
|
+
const root = path.join(__dirname, '..');
|
|
8
|
+
const files = globSync('src/__tests__/**/*.test.ts', { cwd: root }).sort();
|
|
9
|
+
if (files.length === 0) {
|
|
10
|
+
console.error('No test files found under src/__tests__');
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
const abs = files.map((f) => path.join(root, f));
|
|
14
|
+
const r = spawnSync(process.execPath, ['--require', 'tsx/cjs', '--test', ...abs], {
|
|
15
|
+
cwd: root,
|
|
16
|
+
stdio: 'inherit',
|
|
17
|
+
});
|
|
18
|
+
process.exit(r.status === null ? 1 : r.status);
|