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.
Files changed (189) hide show
  1. package/dist/plugins/actionNetwork/src/index.js +118 -25
  2. package/dist/plugins/activeCampaign/src/index.js +184 -38
  3. package/dist/plugins/adalo/src/index.js +40 -8
  4. package/dist/plugins/affinity/src/index.js +100 -20
  5. package/dist/plugins/agileCrm/src/index.js +115 -27
  6. package/dist/plugins/airtable/src/index.js +94 -19
  7. package/dist/plugins/airtop/src/index.js +266 -62
  8. package/dist/plugins/apiTemplateIo/src/index.js +25 -5
  9. package/dist/plugins/asana/src/index.js +195 -41
  10. package/dist/plugins/autopilot/src/index.js +39 -8
  11. package/dist/plugins/bambooHr/src/index.js +109 -22
  12. package/dist/plugins/bannerbear/src/index.js +36 -8
  13. package/dist/plugins/baserow/src/index.js +35 -7
  14. package/dist/plugins/beeminder/src/index.js +198 -40
  15. package/dist/plugins/bitly/src/index.js +46 -10
  16. package/dist/plugins/bitwarden/src/index.js +167 -36
  17. package/dist/plugins/box/src/index.js +172 -37
  18. package/dist/plugins/brandfetch/src/index.js +5 -1
  19. package/dist/plugins/brevo/src/index.js +136 -29
  20. package/dist/plugins/bubble/src/index.js +76 -17
  21. package/dist/plugins/chargebee/src/index.js +35 -7
  22. package/dist/plugins/circleci/src/index.js +50 -10
  23. package/dist/plugins/ciscoWebex/src/index.js +131 -27
  24. package/dist/plugins/clearbit/src/index.js +76 -17
  25. package/dist/plugins/clickup/src/index.js +500 -107
  26. package/dist/plugins/clockify/src/index.js +229 -47
  27. package/dist/plugins/cloudflare/src/index.js +28 -6
  28. package/dist/plugins/cockpit/src/index.js +54 -12
  29. package/dist/plugins/coda/src/index.js +81 -19
  30. package/dist/plugins/coingecko/src/index.js +157 -33
  31. package/dist/plugins/contentful/src/index.js +85 -17
  32. package/dist/plugins/convertkit/src/index.js +74 -18
  33. package/dist/plugins/copper/src/index.js +59 -11
  34. package/dist/plugins/cortex/src/index.js +55 -13
  35. package/dist/plugins/currents/src/index.js +310 -71
  36. package/dist/plugins/customerIo/src/index.js +112 -23
  37. package/dist/plugins/databricks/src/index.js +549 -115
  38. package/dist/plugins/deepl/src/index.js +26 -6
  39. package/dist/plugins/demio/src/index.js +56 -11
  40. package/dist/plugins/dhl/src/index.js +16 -3
  41. package/dist/plugins/discord/src/index.js +141 -31
  42. package/dist/plugins/discourse/src/index.js +136 -31
  43. package/dist/plugins/disqus/src/index.js +96 -20
  44. package/dist/plugins/docker/src/index.js +20 -4
  45. package/dist/plugins/drift/src/index.js +19 -5
  46. package/dist/plugins/dropbox/src/index.js +139 -30
  47. package/dist/plugins/dropcontact/src/index.js +21 -4
  48. package/dist/plugins/egoi/src/index.js +61 -15
  49. package/dist/plugins/elasticsearch/src/index.js +59 -13
  50. package/dist/plugins/emelia/src/index.js +95 -19
  51. package/dist/plugins/erpnext/src/index.js +74 -15
  52. package/dist/plugins/facebookGraph/src/index.js +52 -11
  53. package/dist/plugins/freshdesk/src/index.js +220 -48
  54. package/dist/plugins/freshservice/src/index.js +39 -9
  55. package/dist/plugins/freshworksCrm/src/index.js +58 -12
  56. package/dist/plugins/getresponse/src/index.js +87 -18
  57. package/dist/plugins/ghost/src/index.js +114 -26
  58. package/dist/plugins/github/src/index.js +483 -109
  59. package/dist/plugins/gitlab/src/index.js +193 -45
  60. package/dist/plugins/gong/src/index.js +68 -14
  61. package/dist/plugins/gotify/src/index.js +43 -9
  62. package/dist/plugins/gotowebinar/src/index.js +233 -47
  63. package/dist/plugins/grafana/src/index.js +92 -21
  64. package/dist/plugins/graphql/src/index.js +38 -8
  65. package/dist/plugins/grist/src/index.js +52 -10
  66. package/dist/plugins/hackernews/src/index.js +32 -6
  67. package/dist/plugins/halopsa/src/index.js +131 -26
  68. package/dist/plugins/harvest/src/index.js +182 -42
  69. package/dist/plugins/helpscout/src/index.js +153 -31
  70. package/dist/plugins/highlevel/src/index.js +291 -58
  71. package/dist/plugins/homeAssistant/src/index.js +124 -26
  72. package/dist/plugins/hubspot/src/index.js +163 -29
  73. package/dist/plugins/humanticAi/src/index.js +54 -5
  74. package/dist/plugins/hunter/src/index.js +21 -4
  75. package/dist/plugins/intercom/src/index.js +95 -20
  76. package/dist/plugins/iterable/src/index.js +96 -20
  77. package/dist/plugins/jenkins/src/index.js +75 -17
  78. package/dist/plugins/jira/src/index.js +193 -43
  79. package/dist/plugins/keap/src/index.js +222 -56
  80. package/dist/plugins/kobotoolbox/src/index.js +113 -25
  81. package/dist/plugins/lemlist/src/index.js +79 -18
  82. package/dist/plugins/linear/src/index.js +86 -19
  83. package/dist/plugins/lingvanex/src/index.js +38 -8
  84. package/dist/plugins/linkedin/src/index.js +37 -8
  85. package/dist/plugins/lonescale/src/index.js +41 -9
  86. package/dist/plugins/magento/src/index.js +98 -27
  87. package/dist/plugins/mailcheck/src/index.js +11 -2
  88. package/dist/plugins/mailchimp/src/index.js +193 -42
  89. package/dist/plugins/mailerlite/src/index.js +61 -12
  90. package/dist/plugins/mailgun/src/index.js +39 -7
  91. package/dist/plugins/mailjet/src/index.js +141 -30
  92. package/dist/plugins/mandrill/src/index.js +67 -14
  93. package/dist/plugins/marketstack/src/index.js +56 -10
  94. package/dist/plugins/matrix/src/index.js +97 -20
  95. package/dist/plugins/mattermost/src/index.js +124 -26
  96. package/dist/plugins/mautic/src/index.js +129 -26
  97. package/dist/plugins/medium/src/index.js +64 -13
  98. package/dist/plugins/messagebird/src/index.js +80 -15
  99. package/dist/plugins/metabase/src/index.js +57 -12
  100. package/dist/plugins/misp/src/index.js +135 -33
  101. package/dist/plugins/mocean/src/index.js +33 -7
  102. package/dist/plugins/monday/src/index.js +97 -23
  103. package/dist/plugins/monicaCrm/src/index.js +112 -23
  104. package/dist/plugins/msg91/src/index.js +11 -2
  105. package/dist/plugins/nasa/src/index.js +108 -21
  106. package/dist/plugins/netlify/src/index.js +28 -6
  107. package/dist/plugins/netscalerAdc/src/index.js +144 -29
  108. package/dist/plugins/nextcloud/src/index.js +103 -20
  109. package/dist/plugins/nocodb/src/index.js +57 -11
  110. package/dist/plugins/notion/src/index.js +148 -37
  111. package/dist/plugins/npm/src/index.js +59 -12
  112. package/dist/plugins/odoo/src/index.js +102 -20
  113. package/dist/plugins/okta/src/index.js +50 -10
  114. package/dist/plugins/oneSimpleApi/src/index.js +84 -17
  115. package/dist/plugins/onfleet/src/index.js +139 -32
  116. package/dist/plugins/openThesaurus/src/index.js +46 -9
  117. package/dist/plugins/openweathermap/src/index.js +31 -6
  118. package/dist/plugins/oura/src/index.js +36 -7
  119. package/dist/plugins/paddle/src/index.js +80 -17
  120. package/dist/plugins/pagerduty/src/index.js +53 -12
  121. package/dist/plugins/paypal/src/index.js +51 -11
  122. package/dist/plugins/peekalink/src/index.js +12 -3
  123. package/dist/plugins/phantombuster/src/index.js +39 -8
  124. package/dist/plugins/philipsHue/src/index.js +64 -13
  125. package/dist/plugins/pipedrive/src/index.js +167 -45
  126. package/dist/plugins/plivo/src/index.js +43 -8
  127. package/dist/plugins/postbin/src/index.js +9 -2
  128. package/dist/plugins/posthog/src/index.js +50 -13
  129. package/dist/plugins/profitwell/src/index.js +24 -5
  130. package/dist/plugins/pushbullet/src/index.js +45 -9
  131. package/dist/plugins/pushcut/src/index.js +31 -6
  132. package/dist/plugins/pushover/src/index.js +51 -10
  133. package/dist/plugins/quickbase/src/index.js +66 -13
  134. package/dist/plugins/quickbooks/src/index.js +86 -19
  135. package/dist/plugins/quickchart/src/index.js +35 -7
  136. package/dist/plugins/raindrop/src/index.js +54 -13
  137. package/dist/plugins/reddit/src/index.js +73 -18
  138. package/dist/plugins/rocketchat/src/index.js +47 -9
  139. package/dist/plugins/rundeck/src/index.js +26 -5
  140. package/dist/plugins/salesforce/src/index.js +161 -31
  141. package/dist/plugins/salesmate/src/index.js +75 -16
  142. package/dist/plugins/securityScorecard/src/index.js +73 -15
  143. package/dist/plugins/segment/src/index.js +21 -4
  144. package/dist/plugins/sendgrid/src/index.js +102 -24
  145. package/dist/plugins/sendy/src/index.js +54 -11
  146. package/dist/plugins/sentry/src/index.js +174 -34
  147. package/dist/plugins/servicenow/src/index.js +120 -27
  148. package/dist/plugins/shopify/src/index.js +53 -12
  149. package/dist/plugins/signl4/src/index.js +16 -3
  150. package/dist/plugins/slack/src/index.js +407 -105
  151. package/dist/plugins/sms77/src/index.js +26 -5
  152. package/dist/plugins/splunk/src/index.js +186 -45
  153. package/dist/plugins/spotify/src/index.js +265 -66
  154. package/dist/plugins/stackby/src/index.js +18 -6
  155. package/dist/plugins/storyblok/src/index.js +57 -11
  156. package/dist/plugins/strapi/src/index.js +63 -12
  157. package/dist/plugins/strava/src/index.js +58 -13
  158. package/dist/plugins/stripe/src/index.js +143 -30
  159. package/dist/plugins/supabase/src/index.js +49 -10
  160. package/dist/plugins/syncromsp/src/index.js +245 -67
  161. package/dist/plugins/tapfiliate/src/index.js +57 -14
  162. package/dist/plugins/telegram/src/index.js +202 -39
  163. package/dist/plugins/thehive/src/index.js +271 -66
  164. package/dist/plugins/thehiveProject/src/index.js +457 -89
  165. package/dist/plugins/todoist/src/index.js +326 -77
  166. package/dist/plugins/travisci/src/index.js +35 -8
  167. package/dist/plugins/trello/src/index.js +204 -46
  168. package/dist/plugins/twake/src/index.js +10 -2
  169. package/dist/plugins/twilio/src/index.js +56 -11
  170. package/dist/plugins/twist/src/index.js +241 -48
  171. package/dist/plugins/twitter/src/index.js +128 -30
  172. package/dist/plugins/unleashedSoftware/src/index.js +30 -6
  173. package/dist/plugins/uplead/src/index.js +9 -2
  174. package/dist/plugins/uproc/src/index.js +31 -6
  175. package/dist/plugins/uptimerobot/src/index.js +119 -25
  176. package/dist/plugins/urlscanio/src/index.js +25 -6
  177. package/dist/plugins/vero/src/index.js +68 -13
  178. package/dist/plugins/vonage/src/index.js +32 -6
  179. package/dist/plugins/wekan/src/index.js +297 -52
  180. package/dist/plugins/woocommerce/src/index.js +57 -12
  181. package/dist/plugins/wordpress/src/index.js +94 -18
  182. package/dist/plugins/xero/src/index.js +79 -13
  183. package/dist/plugins/yourls/src/index.js +33 -6
  184. package/dist/plugins/zammad/src/index.js +139 -36
  185. package/dist/plugins/zendesk/src/index.js +201 -48
  186. package/dist/plugins/zoho/src/index.js +88 -21
  187. package/dist/plugins/zoom/src/index.js +41 -7
  188. package/dist/plugins/zulip/src/index.js +101 -20
  189. 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 && Object.keys(body).length > 0 && method !== "GET" && method !== "DELETE") {
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 && typeof response === "object" && "data" in 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: { type: "string", required: true, description: "Type: skip, quarantine, or tag" },
62
- matcherType: { type: "string", required: true, description: "Matcher: titleContains, titleEquals, specContains, specEquals, signature" },
63
- matcherValue: { type: "string", required: true, description: "Value to match against" },
64
- tags: { type: "array", required: false, description: "Tags to apply (for tag action type)" },
65
- description: { type: "string", required: false, description: "Description" },
66
- expiresAfter: { type: "string", required: false, description: "Expiration date (ISO 8601)" },
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", titleEquals: "title",
72
- specContains: "file", specEquals: "file",
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", titleEquals: "eq",
77
- specContains: "inc", specEquals: "eq",
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: [{ type: typeMap[matcherType], op: opMap[matcherType], value: matcherValue }],
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: { actionId: { type: "string", required: true, description: "Action ID" } },
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: { type: "string", required: false, description: "Search by name" },
110
- status: { type: "array", required: false, description: "Filter by status: active, disabled, archived, expired" },
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: { type: "string", required: false, description: "New description" },
128
- expiresAfter: { type: "string", required: false, description: "Expiration date" },
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: { actionId: { type: "string", required: true, description: "Action ID" } },
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: { actionId: { type: "string", required: true, description: "Action ID" } },
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: { actionId: { type: "string", required: true, description: "Action ID" } },
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: { instanceId: { type: "string", required: true, description: "Instance ID" } },
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: { projectId: { type: "string", required: true, description: "Project ID" } },
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: { limit: { type: "number", required: false, description: "Max results" } },
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: { type: "string", required: true, description: "Start date (ISO 8601)" },
189
- dateEnd: { type: "string", required: true, description: "End date (ISO 8601)" },
190
- resolution: { type: "string", required: false, description: "Resolution: 1h, 1d (default), 1w" },
191
- branches: { type: "array", required: false, description: "Filter by branches" },
192
- authors: { type: "array", required: false, description: "Filter by authors" },
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 = { date_start: dateStart, date_end: dateEnd };
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: { runId: { type: "string", required: true, description: "Run ID" } },
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: { type: "number", required: false, description: "Max results (default: 10, max: 50)" },
222
- search: { type: "string", required: false, description: "Search by ciBuildId or commit message" },
223
- status: { type: "array", required: false, description: "Filter by status" },
224
- completionState: { type: "array", required: false, description: "Filter by completion state" },
225
- branches: { type: "array", required: false, description: "Filter by branches" },
226
- authors: { type: "array", required: false, description: "Filter by authors" },
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: { type: "string", required: false, description: "Filter by branch" },
260
- ciBuildId: { type: "string", required: false, description: "Filter by CI build ID" },
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: { runId: { type: "string", required: true, description: "Run ID" } },
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: { type: "string", required: true, description: "GitHub Actions workflow run ID" },
286
- githubRunAttempt: { type: "number", required: true, description: "Workflow attempt number" },
287
- projectId: { type: "string", required: false, description: "Limit to specific project" },
288
- ciBuildId: { type: "string", required: false, description: "Limit to specific CI build" },
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: { type: "array", required: true, description: "Array of machine identifiers to reset" },
300
- isBatchedOr8n: { type: "boolean", required: false, description: "Enable batched orchestration" },
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: { runId: { type: "string", required: true, description: "Run ID" } },
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: { type: "string", required: true, description: "Full spec file path" },
324
- testTitle: { type: "string", required: true, description: "Test title (use ' > ' for nested describes)" },
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: { type: "string", required: true, description: "Start date (ISO 8601)" },
336
- dateEnd: { type: "string", required: true, description: "End date (ISO 8601)" },
337
- limit: { type: "number", required: false, description: "Max results (default: 50)" },
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: { type: "string", required: false, description: "Sort direction: asc or desc" },
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 = { date_start: dateStart, date_end: dateEnd };
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: { type: "string", required: true, description: "Start date (ISO 8601)" },
359
- dateEnd: { type: "string", required: true, description: "End date (ISO 8601)" },
360
- limit: { type: "number", required: false, description: "Max results (default: 50)" },
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: { type: "string", required: false, description: "Sort direction: asc or desc" },
363
- title: { type: "string", required: false, description: "Filter by test title" },
364
- spec: { type: "string", required: false, description: "Filter by spec file" },
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 = { date_start: dateStart, date_end: dateEnd };
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: { type: "string", required: true, description: "Test signature" },
387
- dateStart: { type: "string", required: true, description: "Start date (ISO 8601)" },
388
- dateEnd: { type: "string", required: true, description: "End date (ISO 8601)" },
389
- limit: { type: "number", required: false, description: "Max results (default: 10, max: 100)" },
390
- status: { type: "array", required: false, description: "Filter by status: passed, failed, pending, skipped" },
391
- branches: { type: "array", required: false, description: "Filter by branches" },
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 = { date_start: dateStart, date_end: dateEnd };
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)