runline 0.2.1 → 0.2.2
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/actionNetwork/src/index.js +118 -25
- package/dist/plugins/activeCampaign/src/index.js +184 -38
- package/dist/plugins/adalo/src/index.js +40 -8
- package/dist/plugins/affinity/src/index.js +100 -20
- package/dist/plugins/agileCrm/src/index.js +115 -27
- package/dist/plugins/airtable/src/index.js +94 -19
- package/dist/plugins/airtop/src/index.js +266 -62
- package/dist/plugins/apiTemplateIo/src/index.js +25 -5
- package/dist/plugins/asana/src/index.js +195 -41
- package/dist/plugins/autopilot/src/index.js +39 -8
- package/dist/plugins/bambooHr/src/index.js +109 -22
- package/dist/plugins/bannerbear/src/index.js +36 -8
- package/dist/plugins/baserow/src/index.js +35 -7
- package/dist/plugins/beeminder/src/index.js +198 -40
- package/dist/plugins/bitly/src/index.js +46 -10
- package/dist/plugins/bitwarden/src/index.js +167 -36
- package/dist/plugins/box/src/index.js +172 -37
- package/dist/plugins/brandfetch/src/index.js +5 -1
- package/dist/plugins/brevo/src/index.js +136 -29
- package/dist/plugins/bubble/src/index.js +76 -17
- package/dist/plugins/chargebee/src/index.js +35 -7
- package/dist/plugins/circleci/src/index.js +50 -10
- package/dist/plugins/ciscoWebex/src/index.js +131 -27
- package/dist/plugins/clearbit/src/index.js +76 -17
- package/dist/plugins/clickup/src/index.js +500 -107
- package/dist/plugins/clockify/src/index.js +229 -47
- package/dist/plugins/cloudflare/src/index.js +28 -6
- package/dist/plugins/cockpit/src/index.js +54 -12
- package/dist/plugins/coda/src/index.js +81 -19
- package/dist/plugins/coingecko/src/index.js +157 -33
- package/dist/plugins/contentful/src/index.js +85 -17
- package/dist/plugins/convertkit/src/index.js +74 -18
- package/dist/plugins/copper/src/index.js +59 -11
- package/dist/plugins/cortex/src/index.js +55 -13
- package/dist/plugins/currents/src/index.js +310 -71
- package/dist/plugins/customerIo/src/index.js +112 -23
- package/dist/plugins/databricks/src/index.js +549 -115
- package/dist/plugins/deepl/src/index.js +26 -6
- package/dist/plugins/demio/src/index.js +56 -11
- package/dist/plugins/dhl/src/index.js +16 -3
- package/dist/plugins/discord/src/index.js +141 -31
- package/dist/plugins/discourse/src/index.js +136 -31
- package/dist/plugins/disqus/src/index.js +96 -20
- package/dist/plugins/docker/src/index.js +20 -4
- package/dist/plugins/drift/src/index.js +19 -5
- package/dist/plugins/dropbox/src/index.js +139 -30
- package/dist/plugins/dropcontact/src/index.js +21 -4
- package/dist/plugins/egoi/src/index.js +61 -15
- package/dist/plugins/elasticsearch/src/index.js +59 -13
- package/dist/plugins/emelia/src/index.js +95 -19
- package/dist/plugins/erpnext/src/index.js +74 -15
- package/dist/plugins/facebookGraph/src/index.js +52 -11
- package/dist/plugins/freshdesk/src/index.js +220 -48
- package/dist/plugins/freshservice/src/index.js +39 -9
- package/dist/plugins/freshworksCrm/src/index.js +58 -12
- package/dist/plugins/getresponse/src/index.js +87 -18
- package/dist/plugins/ghost/src/index.js +114 -26
- package/dist/plugins/github/src/index.js +483 -109
- package/dist/plugins/gitlab/src/index.js +193 -45
- package/dist/plugins/gong/src/index.js +68 -14
- package/dist/plugins/gotify/src/index.js +43 -9
- package/dist/plugins/gotowebinar/src/index.js +233 -47
- package/dist/plugins/grafana/src/index.js +92 -21
- package/dist/plugins/graphql/src/index.js +38 -8
- package/dist/plugins/grist/src/index.js +52 -10
- package/dist/plugins/hackernews/src/index.js +32 -6
- package/dist/plugins/halopsa/src/index.js +131 -26
- package/dist/plugins/harvest/src/index.js +182 -42
- package/dist/plugins/helpscout/src/index.js +153 -31
- package/dist/plugins/highlevel/src/index.js +291 -58
- package/dist/plugins/homeAssistant/src/index.js +124 -26
- package/dist/plugins/hubspot/src/index.js +163 -29
- package/dist/plugins/humanticAi/src/index.js +54 -5
- package/dist/plugins/hunter/src/index.js +21 -4
- package/dist/plugins/intercom/src/index.js +95 -20
- package/dist/plugins/iterable/src/index.js +96 -20
- package/dist/plugins/jenkins/src/index.js +75 -17
- package/dist/plugins/jira/src/index.js +193 -43
- package/dist/plugins/keap/src/index.js +222 -56
- package/dist/plugins/kobotoolbox/src/index.js +113 -25
- package/dist/plugins/lemlist/src/index.js +79 -18
- package/dist/plugins/linear/src/index.js +86 -19
- package/dist/plugins/lingvanex/src/index.js +38 -8
- package/dist/plugins/linkedin/src/index.js +37 -8
- package/dist/plugins/lonescale/src/index.js +41 -9
- package/dist/plugins/magento/src/index.js +98 -27
- package/dist/plugins/mailcheck/src/index.js +11 -2
- package/dist/plugins/mailchimp/src/index.js +193 -42
- package/dist/plugins/mailerlite/src/index.js +61 -12
- package/dist/plugins/mailgun/src/index.js +39 -7
- package/dist/plugins/mailjet/src/index.js +141 -30
- package/dist/plugins/mandrill/src/index.js +67 -14
- package/dist/plugins/marketstack/src/index.js +56 -10
- package/dist/plugins/matrix/src/index.js +97 -20
- package/dist/plugins/mattermost/src/index.js +124 -26
- package/dist/plugins/mautic/src/index.js +129 -26
- package/dist/plugins/medium/src/index.js +64 -13
- package/dist/plugins/messagebird/src/index.js +80 -15
- package/dist/plugins/metabase/src/index.js +57 -12
- package/dist/plugins/misp/src/index.js +135 -33
- package/dist/plugins/mocean/src/index.js +33 -7
- package/dist/plugins/monday/src/index.js +97 -23
- package/dist/plugins/monicaCrm/src/index.js +112 -23
- package/dist/plugins/msg91/src/index.js +11 -2
- package/dist/plugins/nasa/src/index.js +108 -21
- package/dist/plugins/netlify/src/index.js +28 -6
- package/dist/plugins/netscalerAdc/src/index.js +144 -29
- package/dist/plugins/nextcloud/src/index.js +103 -20
- package/dist/plugins/nocodb/src/index.js +57 -11
- package/dist/plugins/notion/src/index.js +148 -37
- package/dist/plugins/npm/src/index.js +59 -12
- package/dist/plugins/odoo/src/index.js +102 -20
- package/dist/plugins/okta/src/index.js +50 -10
- package/dist/plugins/oneSimpleApi/src/index.js +84 -17
- package/dist/plugins/onfleet/src/index.js +139 -32
- package/dist/plugins/openThesaurus/src/index.js +46 -9
- package/dist/plugins/openweathermap/src/index.js +31 -6
- package/dist/plugins/oura/src/index.js +36 -7
- package/dist/plugins/paddle/src/index.js +80 -17
- package/dist/plugins/pagerduty/src/index.js +53 -12
- package/dist/plugins/paypal/src/index.js +51 -11
- package/dist/plugins/peekalink/src/index.js +12 -3
- package/dist/plugins/phantombuster/src/index.js +39 -8
- package/dist/plugins/philipsHue/src/index.js +64 -13
- package/dist/plugins/pipedrive/src/index.js +167 -45
- package/dist/plugins/plivo/src/index.js +43 -8
- package/dist/plugins/postbin/src/index.js +9 -2
- package/dist/plugins/posthog/src/index.js +50 -13
- package/dist/plugins/profitwell/src/index.js +24 -5
- package/dist/plugins/pushbullet/src/index.js +45 -9
- package/dist/plugins/pushcut/src/index.js +31 -6
- package/dist/plugins/pushover/src/index.js +51 -10
- package/dist/plugins/quickbase/src/index.js +66 -13
- package/dist/plugins/quickbooks/src/index.js +86 -19
- package/dist/plugins/quickchart/src/index.js +35 -7
- package/dist/plugins/raindrop/src/index.js +54 -13
- package/dist/plugins/reddit/src/index.js +73 -18
- package/dist/plugins/rocketchat/src/index.js +47 -9
- package/dist/plugins/rundeck/src/index.js +26 -5
- package/dist/plugins/salesforce/src/index.js +161 -31
- package/dist/plugins/salesmate/src/index.js +75 -16
- package/dist/plugins/securityScorecard/src/index.js +73 -15
- package/dist/plugins/segment/src/index.js +21 -4
- package/dist/plugins/sendgrid/src/index.js +102 -24
- package/dist/plugins/sendy/src/index.js +54 -11
- package/dist/plugins/sentry/src/index.js +174 -34
- package/dist/plugins/servicenow/src/index.js +120 -27
- package/dist/plugins/shopify/src/index.js +53 -12
- package/dist/plugins/signl4/src/index.js +16 -3
- package/dist/plugins/slack/src/index.js +407 -105
- package/dist/plugins/sms77/src/index.js +26 -5
- package/dist/plugins/splunk/src/index.js +186 -45
- package/dist/plugins/spotify/src/index.js +265 -66
- package/dist/plugins/stackby/src/index.js +18 -6
- package/dist/plugins/storyblok/src/index.js +57 -11
- package/dist/plugins/strapi/src/index.js +63 -12
- package/dist/plugins/strava/src/index.js +58 -13
- package/dist/plugins/stripe/src/index.js +143 -30
- package/dist/plugins/supabase/src/index.js +49 -10
- package/dist/plugins/syncromsp/src/index.js +245 -67
- package/dist/plugins/tapfiliate/src/index.js +57 -14
- package/dist/plugins/telegram/src/index.js +202 -39
- package/dist/plugins/thehive/src/index.js +271 -66
- package/dist/plugins/thehiveProject/src/index.js +457 -89
- package/dist/plugins/todoist/src/index.js +326 -77
- package/dist/plugins/travisci/src/index.js +35 -8
- package/dist/plugins/trello/src/index.js +204 -46
- package/dist/plugins/twake/src/index.js +10 -2
- package/dist/plugins/twilio/src/index.js +56 -11
- package/dist/plugins/twist/src/index.js +241 -48
- package/dist/plugins/twitter/src/index.js +128 -30
- package/dist/plugins/unleashedSoftware/src/index.js +30 -6
- package/dist/plugins/uplead/src/index.js +9 -2
- package/dist/plugins/uproc/src/index.js +31 -6
- package/dist/plugins/uptimerobot/src/index.js +119 -25
- package/dist/plugins/urlscanio/src/index.js +25 -6
- package/dist/plugins/vero/src/index.js +68 -13
- package/dist/plugins/vonage/src/index.js +32 -6
- package/dist/plugins/wekan/src/index.js +297 -52
- package/dist/plugins/woocommerce/src/index.js +57 -12
- package/dist/plugins/wordpress/src/index.js +94 -18
- package/dist/plugins/xero/src/index.js +79 -13
- package/dist/plugins/yourls/src/index.js +33 -6
- package/dist/plugins/zammad/src/index.js +139 -36
- package/dist/plugins/zendesk/src/index.js +201 -48
- package/dist/plugins/zoho/src/index.js +88 -21
- package/dist/plugins/zoom/src/index.js +41 -7
- package/dist/plugins/zulip/src/index.js +101 -20
- package/package.json +1 -1
|
@@ -22,7 +22,10 @@ async function apiRequest(apiKey, method, endpoint, body, qs) {
|
|
|
22
22
|
Authorization: `Bearer ${apiKey}`,
|
|
23
23
|
},
|
|
24
24
|
};
|
|
25
|
-
if (body &&
|
|
25
|
+
if (body &&
|
|
26
|
+
Object.keys(body).length > 0 &&
|
|
27
|
+
method !== "GET" &&
|
|
28
|
+
method !== "DELETE") {
|
|
26
29
|
opts.body = JSON.stringify(body);
|
|
27
30
|
}
|
|
28
31
|
const res = await fetch(url.toString(), opts);
|
|
@@ -33,7 +36,9 @@ async function apiRequest(apiKey, method, endpoint, body, qs) {
|
|
|
33
36
|
return res.json();
|
|
34
37
|
}
|
|
35
38
|
function unwrapData(response) {
|
|
36
|
-
if (response &&
|
|
39
|
+
if (response &&
|
|
40
|
+
typeof response === "object" &&
|
|
41
|
+
"data" in response) {
|
|
37
42
|
return response.data;
|
|
38
43
|
}
|
|
39
44
|
return response;
|
|
@@ -58,23 +63,51 @@ export default function currents(rl) {
|
|
|
58
63
|
inputSchema: {
|
|
59
64
|
projectId: { type: "string", required: true, description: "Project ID" },
|
|
60
65
|
name: { type: "string", required: true, description: "Action name" },
|
|
61
|
-
actionType: {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
actionType: {
|
|
67
|
+
type: "string",
|
|
68
|
+
required: true,
|
|
69
|
+
description: "Type: skip, quarantine, or tag",
|
|
70
|
+
},
|
|
71
|
+
matcherType: {
|
|
72
|
+
type: "string",
|
|
73
|
+
required: true,
|
|
74
|
+
description: "Matcher: titleContains, titleEquals, specContains, specEquals, signature",
|
|
75
|
+
},
|
|
76
|
+
matcherValue: {
|
|
77
|
+
type: "string",
|
|
78
|
+
required: true,
|
|
79
|
+
description: "Value to match against",
|
|
80
|
+
},
|
|
81
|
+
tags: {
|
|
82
|
+
type: "array",
|
|
83
|
+
required: false,
|
|
84
|
+
description: "Tags to apply (for tag action type)",
|
|
85
|
+
},
|
|
86
|
+
description: {
|
|
87
|
+
type: "string",
|
|
88
|
+
required: false,
|
|
89
|
+
description: "Description",
|
|
90
|
+
},
|
|
91
|
+
expiresAfter: {
|
|
92
|
+
type: "string",
|
|
93
|
+
required: false,
|
|
94
|
+
description: "Expiration date (ISO 8601)",
|
|
95
|
+
},
|
|
67
96
|
},
|
|
68
97
|
async execute(input, ctx) {
|
|
69
|
-
const { projectId, name, actionType, matcherType, matcherValue, tags, description: desc, expiresAfter } = input;
|
|
98
|
+
const { projectId, name, actionType, matcherType, matcherValue, tags, description: desc, expiresAfter, } = input;
|
|
70
99
|
const typeMap = {
|
|
71
|
-
titleContains: "title",
|
|
72
|
-
|
|
100
|
+
titleContains: "title",
|
|
101
|
+
titleEquals: "title",
|
|
102
|
+
specContains: "file",
|
|
103
|
+
specEquals: "file",
|
|
73
104
|
signature: "testId",
|
|
74
105
|
};
|
|
75
106
|
const opMap = {
|
|
76
|
-
titleContains: "inc",
|
|
77
|
-
|
|
107
|
+
titleContains: "inc",
|
|
108
|
+
titleEquals: "eq",
|
|
109
|
+
specContains: "inc",
|
|
110
|
+
specEquals: "eq",
|
|
78
111
|
signature: "eq",
|
|
79
112
|
};
|
|
80
113
|
const action = actionType === "tag" && tags
|
|
@@ -85,7 +118,13 @@ export default function currents(rl) {
|
|
|
85
118
|
action,
|
|
86
119
|
matcher: {
|
|
87
120
|
op: "AND",
|
|
88
|
-
cond: [
|
|
121
|
+
cond: [
|
|
122
|
+
{
|
|
123
|
+
type: typeMap[matcherType],
|
|
124
|
+
op: opMap[matcherType],
|
|
125
|
+
value: matcherValue,
|
|
126
|
+
},
|
|
127
|
+
],
|
|
89
128
|
},
|
|
90
129
|
};
|
|
91
130
|
if (desc)
|
|
@@ -97,7 +136,9 @@ export default function currents(rl) {
|
|
|
97
136
|
});
|
|
98
137
|
rl.registerAction("action.get", {
|
|
99
138
|
description: "Get an action by ID",
|
|
100
|
-
inputSchema: {
|
|
139
|
+
inputSchema: {
|
|
140
|
+
actionId: { type: "string", required: true, description: "Action ID" },
|
|
141
|
+
},
|
|
101
142
|
async execute(input, ctx) {
|
|
102
143
|
return unwrapData(await apiRequest(getKey(ctx), "GET", `/actions/${input.actionId}`));
|
|
103
144
|
},
|
|
@@ -106,8 +147,16 @@ export default function currents(rl) {
|
|
|
106
147
|
description: "List actions for a project",
|
|
107
148
|
inputSchema: {
|
|
108
149
|
projectId: { type: "string", required: true, description: "Project ID" },
|
|
109
|
-
search: {
|
|
110
|
-
|
|
150
|
+
search: {
|
|
151
|
+
type: "string",
|
|
152
|
+
required: false,
|
|
153
|
+
description: "Search by name",
|
|
154
|
+
},
|
|
155
|
+
status: {
|
|
156
|
+
type: "array",
|
|
157
|
+
required: false,
|
|
158
|
+
description: "Filter by status: active, disabled, archived, expired",
|
|
159
|
+
},
|
|
111
160
|
},
|
|
112
161
|
async execute(input, ctx) {
|
|
113
162
|
const { projectId, search, status } = (input ?? {});
|
|
@@ -124,8 +173,16 @@ export default function currents(rl) {
|
|
|
124
173
|
inputSchema: {
|
|
125
174
|
actionId: { type: "string", required: true, description: "Action ID" },
|
|
126
175
|
name: { type: "string", required: false, description: "New name" },
|
|
127
|
-
description: {
|
|
128
|
-
|
|
176
|
+
description: {
|
|
177
|
+
type: "string",
|
|
178
|
+
required: false,
|
|
179
|
+
description: "New description",
|
|
180
|
+
},
|
|
181
|
+
expiresAfter: {
|
|
182
|
+
type: "string",
|
|
183
|
+
required: false,
|
|
184
|
+
description: "Expiration date",
|
|
185
|
+
},
|
|
129
186
|
},
|
|
130
187
|
async execute(input, ctx) {
|
|
131
188
|
const { actionId, ...body } = input;
|
|
@@ -134,21 +191,27 @@ export default function currents(rl) {
|
|
|
134
191
|
});
|
|
135
192
|
rl.registerAction("action.enable", {
|
|
136
193
|
description: "Enable a disabled action",
|
|
137
|
-
inputSchema: {
|
|
194
|
+
inputSchema: {
|
|
195
|
+
actionId: { type: "string", required: true, description: "Action ID" },
|
|
196
|
+
},
|
|
138
197
|
async execute(input, ctx) {
|
|
139
198
|
return apiRequest(getKey(ctx), "PUT", `/actions/${input.actionId}/enable`);
|
|
140
199
|
},
|
|
141
200
|
});
|
|
142
201
|
rl.registerAction("action.disable", {
|
|
143
202
|
description: "Disable an active action",
|
|
144
|
-
inputSchema: {
|
|
203
|
+
inputSchema: {
|
|
204
|
+
actionId: { type: "string", required: true, description: "Action ID" },
|
|
205
|
+
},
|
|
145
206
|
async execute(input, ctx) {
|
|
146
207
|
return apiRequest(getKey(ctx), "PUT", `/actions/${input.actionId}/disable`);
|
|
147
208
|
},
|
|
148
209
|
});
|
|
149
210
|
rl.registerAction("action.delete", {
|
|
150
211
|
description: "Archive (soft delete) an action",
|
|
151
|
-
inputSchema: {
|
|
212
|
+
inputSchema: {
|
|
213
|
+
actionId: { type: "string", required: true, description: "Action ID" },
|
|
214
|
+
},
|
|
152
215
|
async execute(input, ctx) {
|
|
153
216
|
await apiRequest(getKey(ctx), "DELETE", `/actions/${input.actionId}`);
|
|
154
217
|
return { success: true };
|
|
@@ -157,7 +220,13 @@ export default function currents(rl) {
|
|
|
157
220
|
// ── Instance ────────────────────────────────────────
|
|
158
221
|
rl.registerAction("instance.get", {
|
|
159
222
|
description: "Get a spec file execution instance with full test results",
|
|
160
|
-
inputSchema: {
|
|
223
|
+
inputSchema: {
|
|
224
|
+
instanceId: {
|
|
225
|
+
type: "string",
|
|
226
|
+
required: true,
|
|
227
|
+
description: "Instance ID",
|
|
228
|
+
},
|
|
229
|
+
},
|
|
161
230
|
async execute(input, ctx) {
|
|
162
231
|
return unwrapData(await apiRequest(getKey(ctx), "GET", `/instances/${input.instanceId}`));
|
|
163
232
|
},
|
|
@@ -165,14 +234,18 @@ export default function currents(rl) {
|
|
|
165
234
|
// ── Project ─────────────────────────────────────────
|
|
166
235
|
rl.registerAction("project.get", {
|
|
167
236
|
description: "Get a project by ID",
|
|
168
|
-
inputSchema: {
|
|
237
|
+
inputSchema: {
|
|
238
|
+
projectId: { type: "string", required: true, description: "Project ID" },
|
|
239
|
+
},
|
|
169
240
|
async execute(input, ctx) {
|
|
170
241
|
return apiRequest(getKey(ctx), "GET", `/projects/${input.projectId}`);
|
|
171
242
|
},
|
|
172
243
|
});
|
|
173
244
|
rl.registerAction("project.list", {
|
|
174
245
|
description: "List projects",
|
|
175
|
-
inputSchema: {
|
|
246
|
+
inputSchema: {
|
|
247
|
+
limit: { type: "number", required: false, description: "Max results" },
|
|
248
|
+
},
|
|
176
249
|
async execute(input, ctx) {
|
|
177
250
|
const qs = {};
|
|
178
251
|
const { limit } = (input ?? {});
|
|
@@ -185,16 +258,39 @@ export default function currents(rl) {
|
|
|
185
258
|
description: "Get project insights and metrics",
|
|
186
259
|
inputSchema: {
|
|
187
260
|
projectId: { type: "string", required: true, description: "Project ID" },
|
|
188
|
-
dateStart: {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
261
|
+
dateStart: {
|
|
262
|
+
type: "string",
|
|
263
|
+
required: true,
|
|
264
|
+
description: "Start date (ISO 8601)",
|
|
265
|
+
},
|
|
266
|
+
dateEnd: {
|
|
267
|
+
type: "string",
|
|
268
|
+
required: true,
|
|
269
|
+
description: "End date (ISO 8601)",
|
|
270
|
+
},
|
|
271
|
+
resolution: {
|
|
272
|
+
type: "string",
|
|
273
|
+
required: false,
|
|
274
|
+
description: "Resolution: 1h, 1d (default), 1w",
|
|
275
|
+
},
|
|
276
|
+
branches: {
|
|
277
|
+
type: "array",
|
|
278
|
+
required: false,
|
|
279
|
+
description: "Filter by branches",
|
|
280
|
+
},
|
|
281
|
+
authors: {
|
|
282
|
+
type: "array",
|
|
283
|
+
required: false,
|
|
284
|
+
description: "Filter by authors",
|
|
285
|
+
},
|
|
193
286
|
tags: { type: "array", required: false, description: "Filter by tags" },
|
|
194
287
|
},
|
|
195
288
|
async execute(input, ctx) {
|
|
196
|
-
const { projectId, dateStart, dateEnd, resolution, branches, authors, tags } = input;
|
|
197
|
-
const qs = {
|
|
289
|
+
const { projectId, dateStart, dateEnd, resolution, branches, authors, tags, } = input;
|
|
290
|
+
const qs = {
|
|
291
|
+
date_start: dateStart,
|
|
292
|
+
date_end: dateEnd,
|
|
293
|
+
};
|
|
198
294
|
if (resolution)
|
|
199
295
|
qs.resolution = resolution;
|
|
200
296
|
if (branches)
|
|
@@ -209,7 +305,9 @@ export default function currents(rl) {
|
|
|
209
305
|
// ── Run ─────────────────────────────────────────────
|
|
210
306
|
rl.registerAction("run.get", {
|
|
211
307
|
description: "Get a run by ID",
|
|
212
|
-
inputSchema: {
|
|
308
|
+
inputSchema: {
|
|
309
|
+
runId: { type: "string", required: true, description: "Run ID" },
|
|
310
|
+
},
|
|
213
311
|
async execute(input, ctx) {
|
|
214
312
|
return unwrapData(await apiRequest(getKey(ctx), "GET", `/runs/${input.runId}`));
|
|
215
313
|
},
|
|
@@ -218,18 +316,42 @@ export default function currents(rl) {
|
|
|
218
316
|
description: "List runs for a project",
|
|
219
317
|
inputSchema: {
|
|
220
318
|
projectId: { type: "string", required: true, description: "Project ID" },
|
|
221
|
-
limit: {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
319
|
+
limit: {
|
|
320
|
+
type: "number",
|
|
321
|
+
required: false,
|
|
322
|
+
description: "Max results (default: 10, max: 50)",
|
|
323
|
+
},
|
|
324
|
+
search: {
|
|
325
|
+
type: "string",
|
|
326
|
+
required: false,
|
|
327
|
+
description: "Search by ciBuildId or commit message",
|
|
328
|
+
},
|
|
329
|
+
status: {
|
|
330
|
+
type: "array",
|
|
331
|
+
required: false,
|
|
332
|
+
description: "Filter by status",
|
|
333
|
+
},
|
|
334
|
+
completionState: {
|
|
335
|
+
type: "array",
|
|
336
|
+
required: false,
|
|
337
|
+
description: "Filter by completion state",
|
|
338
|
+
},
|
|
339
|
+
branches: {
|
|
340
|
+
type: "array",
|
|
341
|
+
required: false,
|
|
342
|
+
description: "Filter by branches",
|
|
343
|
+
},
|
|
344
|
+
authors: {
|
|
345
|
+
type: "array",
|
|
346
|
+
required: false,
|
|
347
|
+
description: "Filter by authors",
|
|
348
|
+
},
|
|
227
349
|
tags: { type: "array", required: false, description: "Filter by tags" },
|
|
228
350
|
dateStart: { type: "string", required: false, description: "Start date" },
|
|
229
351
|
dateEnd: { type: "string", required: false, description: "End date" },
|
|
230
352
|
},
|
|
231
353
|
async execute(input, ctx) {
|
|
232
|
-
const { projectId, limit, search, status, completionState, branches, authors, tags, dateStart, dateEnd } = (input ?? {});
|
|
354
|
+
const { projectId, limit, search, status, completionState, branches, authors, tags, dateStart, dateEnd, } = (input ?? {});
|
|
233
355
|
const qs = {};
|
|
234
356
|
if (limit)
|
|
235
357
|
qs.limit = limit;
|
|
@@ -256,8 +378,16 @@ export default function currents(rl) {
|
|
|
256
378
|
description: "Find a run by project and filters",
|
|
257
379
|
inputSchema: {
|
|
258
380
|
projectId: { type: "string", required: true, description: "Project ID" },
|
|
259
|
-
branch: {
|
|
260
|
-
|
|
381
|
+
branch: {
|
|
382
|
+
type: "string",
|
|
383
|
+
required: false,
|
|
384
|
+
description: "Filter by branch",
|
|
385
|
+
},
|
|
386
|
+
ciBuildId: {
|
|
387
|
+
type: "string",
|
|
388
|
+
required: false,
|
|
389
|
+
description: "Filter by CI build ID",
|
|
390
|
+
},
|
|
261
391
|
tags: { type: "array", required: false, description: "Filter by tags" },
|
|
262
392
|
},
|
|
263
393
|
async execute(input, ctx) {
|
|
@@ -274,7 +404,9 @@ export default function currents(rl) {
|
|
|
274
404
|
});
|
|
275
405
|
rl.registerAction("run.cancel", {
|
|
276
406
|
description: "Cancel a run in progress",
|
|
277
|
-
inputSchema: {
|
|
407
|
+
inputSchema: {
|
|
408
|
+
runId: { type: "string", required: true, description: "Run ID" },
|
|
409
|
+
},
|
|
278
410
|
async execute(input, ctx) {
|
|
279
411
|
return apiRequest(getKey(ctx), "PUT", `/runs/${input.runId}/cancel`);
|
|
280
412
|
},
|
|
@@ -282,10 +414,26 @@ export default function currents(rl) {
|
|
|
282
414
|
rl.registerAction("run.cancelGithub", {
|
|
283
415
|
description: "Cancel a run by GitHub Actions workflow run ID",
|
|
284
416
|
inputSchema: {
|
|
285
|
-
githubRunId: {
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
417
|
+
githubRunId: {
|
|
418
|
+
type: "string",
|
|
419
|
+
required: true,
|
|
420
|
+
description: "GitHub Actions workflow run ID",
|
|
421
|
+
},
|
|
422
|
+
githubRunAttempt: {
|
|
423
|
+
type: "number",
|
|
424
|
+
required: true,
|
|
425
|
+
description: "Workflow attempt number",
|
|
426
|
+
},
|
|
427
|
+
projectId: {
|
|
428
|
+
type: "string",
|
|
429
|
+
required: false,
|
|
430
|
+
description: "Limit to specific project",
|
|
431
|
+
},
|
|
432
|
+
ciBuildId: {
|
|
433
|
+
type: "string",
|
|
434
|
+
required: false,
|
|
435
|
+
description: "Limit to specific CI build",
|
|
436
|
+
},
|
|
289
437
|
},
|
|
290
438
|
async execute(input, ctx) {
|
|
291
439
|
const body = input;
|
|
@@ -296,8 +444,16 @@ export default function currents(rl) {
|
|
|
296
444
|
description: "Reset failed specs for re-execution on specified machines",
|
|
297
445
|
inputSchema: {
|
|
298
446
|
runId: { type: "string", required: true, description: "Run ID" },
|
|
299
|
-
machineIds: {
|
|
300
|
-
|
|
447
|
+
machineIds: {
|
|
448
|
+
type: "array",
|
|
449
|
+
required: true,
|
|
450
|
+
description: "Array of machine identifiers to reset",
|
|
451
|
+
},
|
|
452
|
+
isBatchedOr8n: {
|
|
453
|
+
type: "boolean",
|
|
454
|
+
required: false,
|
|
455
|
+
description: "Enable batched orchestration",
|
|
456
|
+
},
|
|
301
457
|
},
|
|
302
458
|
async execute(input, ctx) {
|
|
303
459
|
const { runId, machineIds, isBatchedOr8n } = input;
|
|
@@ -309,7 +465,9 @@ export default function currents(rl) {
|
|
|
309
465
|
});
|
|
310
466
|
rl.registerAction("run.delete", {
|
|
311
467
|
description: "Delete a run and all associated data",
|
|
312
|
-
inputSchema: {
|
|
468
|
+
inputSchema: {
|
|
469
|
+
runId: { type: "string", required: true, description: "Run ID" },
|
|
470
|
+
},
|
|
313
471
|
async execute(input, ctx) {
|
|
314
472
|
await apiRequest(getKey(ctx), "DELETE", `/runs/${input.runId}`);
|
|
315
473
|
return { success: true };
|
|
@@ -320,8 +478,16 @@ export default function currents(rl) {
|
|
|
320
478
|
description: "Generate a unique test signature",
|
|
321
479
|
inputSchema: {
|
|
322
480
|
projectId: { type: "string", required: true, description: "Project ID" },
|
|
323
|
-
specFilePath: {
|
|
324
|
-
|
|
481
|
+
specFilePath: {
|
|
482
|
+
type: "string",
|
|
483
|
+
required: true,
|
|
484
|
+
description: "Full spec file path",
|
|
485
|
+
},
|
|
486
|
+
testTitle: {
|
|
487
|
+
type: "string",
|
|
488
|
+
required: true,
|
|
489
|
+
description: "Test title (use ' > ' for nested describes)",
|
|
490
|
+
},
|
|
325
491
|
},
|
|
326
492
|
async execute(input, ctx) {
|
|
327
493
|
return unwrapData(await apiRequest(getKey(ctx), "POST", "/signature/test", input));
|
|
@@ -332,15 +498,34 @@ export default function currents(rl) {
|
|
|
332
498
|
description: "Get aggregated spec file metrics for a project",
|
|
333
499
|
inputSchema: {
|
|
334
500
|
projectId: { type: "string", required: true, description: "Project ID" },
|
|
335
|
-
dateStart: {
|
|
336
|
-
|
|
337
|
-
|
|
501
|
+
dateStart: {
|
|
502
|
+
type: "string",
|
|
503
|
+
required: true,
|
|
504
|
+
description: "Start date (ISO 8601)",
|
|
505
|
+
},
|
|
506
|
+
dateEnd: {
|
|
507
|
+
type: "string",
|
|
508
|
+
required: true,
|
|
509
|
+
description: "End date (ISO 8601)",
|
|
510
|
+
},
|
|
511
|
+
limit: {
|
|
512
|
+
type: "number",
|
|
513
|
+
required: false,
|
|
514
|
+
description: "Max results (default: 50)",
|
|
515
|
+
},
|
|
338
516
|
order: { type: "string", required: false, description: "Order by field" },
|
|
339
|
-
dir: {
|
|
517
|
+
dir: {
|
|
518
|
+
type: "string",
|
|
519
|
+
required: false,
|
|
520
|
+
description: "Sort direction: asc or desc",
|
|
521
|
+
},
|
|
340
522
|
},
|
|
341
523
|
async execute(input, ctx) {
|
|
342
524
|
const { projectId, dateStart, dateEnd, limit, order, dir } = input;
|
|
343
|
-
const qs = {
|
|
525
|
+
const qs = {
|
|
526
|
+
date_start: dateStart,
|
|
527
|
+
date_end: dateEnd,
|
|
528
|
+
};
|
|
344
529
|
if (limit)
|
|
345
530
|
qs.limit = limit;
|
|
346
531
|
if (order)
|
|
@@ -355,17 +540,44 @@ export default function currents(rl) {
|
|
|
355
540
|
description: "Get aggregated test metrics for a project",
|
|
356
541
|
inputSchema: {
|
|
357
542
|
projectId: { type: "string", required: true, description: "Project ID" },
|
|
358
|
-
dateStart: {
|
|
359
|
-
|
|
360
|
-
|
|
543
|
+
dateStart: {
|
|
544
|
+
type: "string",
|
|
545
|
+
required: true,
|
|
546
|
+
description: "Start date (ISO 8601)",
|
|
547
|
+
},
|
|
548
|
+
dateEnd: {
|
|
549
|
+
type: "string",
|
|
550
|
+
required: true,
|
|
551
|
+
description: "End date (ISO 8601)",
|
|
552
|
+
},
|
|
553
|
+
limit: {
|
|
554
|
+
type: "number",
|
|
555
|
+
required: false,
|
|
556
|
+
description: "Max results (default: 50)",
|
|
557
|
+
},
|
|
361
558
|
order: { type: "string", required: false, description: "Order by field" },
|
|
362
|
-
dir: {
|
|
363
|
-
|
|
364
|
-
|
|
559
|
+
dir: {
|
|
560
|
+
type: "string",
|
|
561
|
+
required: false,
|
|
562
|
+
description: "Sort direction: asc or desc",
|
|
563
|
+
},
|
|
564
|
+
title: {
|
|
565
|
+
type: "string",
|
|
566
|
+
required: false,
|
|
567
|
+
description: "Filter by test title",
|
|
568
|
+
},
|
|
569
|
+
spec: {
|
|
570
|
+
type: "string",
|
|
571
|
+
required: false,
|
|
572
|
+
description: "Filter by spec file",
|
|
573
|
+
},
|
|
365
574
|
},
|
|
366
575
|
async execute(input, ctx) {
|
|
367
576
|
const { projectId, dateStart, dateEnd, limit, order, dir, title, spec } = (input ?? {});
|
|
368
|
-
const qs = {
|
|
577
|
+
const qs = {
|
|
578
|
+
date_start: dateStart,
|
|
579
|
+
date_end: dateEnd,
|
|
580
|
+
};
|
|
369
581
|
if (limit)
|
|
370
582
|
qs.limit = limit;
|
|
371
583
|
if (order)
|
|
@@ -383,16 +595,43 @@ export default function currents(rl) {
|
|
|
383
595
|
rl.registerAction("testResult.list", {
|
|
384
596
|
description: "Get historical test execution results for a test signature",
|
|
385
597
|
inputSchema: {
|
|
386
|
-
signature: {
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
598
|
+
signature: {
|
|
599
|
+
type: "string",
|
|
600
|
+
required: true,
|
|
601
|
+
description: "Test signature",
|
|
602
|
+
},
|
|
603
|
+
dateStart: {
|
|
604
|
+
type: "string",
|
|
605
|
+
required: true,
|
|
606
|
+
description: "Start date (ISO 8601)",
|
|
607
|
+
},
|
|
608
|
+
dateEnd: {
|
|
609
|
+
type: "string",
|
|
610
|
+
required: true,
|
|
611
|
+
description: "End date (ISO 8601)",
|
|
612
|
+
},
|
|
613
|
+
limit: {
|
|
614
|
+
type: "number",
|
|
615
|
+
required: false,
|
|
616
|
+
description: "Max results (default: 10, max: 100)",
|
|
617
|
+
},
|
|
618
|
+
status: {
|
|
619
|
+
type: "array",
|
|
620
|
+
required: false,
|
|
621
|
+
description: "Filter by status: passed, failed, pending, skipped",
|
|
622
|
+
},
|
|
623
|
+
branches: {
|
|
624
|
+
type: "array",
|
|
625
|
+
required: false,
|
|
626
|
+
description: "Filter by branches",
|
|
627
|
+
},
|
|
392
628
|
},
|
|
393
629
|
async execute(input, ctx) {
|
|
394
630
|
const { signature, dateStart, dateEnd, limit, status, branches } = input;
|
|
395
|
-
const qs = {
|
|
631
|
+
const qs = {
|
|
632
|
+
date_start: dateStart,
|
|
633
|
+
date_end: dateEnd,
|
|
634
|
+
};
|
|
396
635
|
if (limit)
|
|
397
636
|
qs.limit = limit;
|
|
398
637
|
if (status)
|