runline 0.2.0 → 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 (190) hide show
  1. package/README.md +1 -1
  2. package/dist/plugins/actionNetwork/src/index.js +118 -25
  3. package/dist/plugins/activeCampaign/src/index.js +184 -38
  4. package/dist/plugins/adalo/src/index.js +40 -8
  5. package/dist/plugins/affinity/src/index.js +100 -20
  6. package/dist/plugins/agileCrm/src/index.js +115 -27
  7. package/dist/plugins/airtable/src/index.js +94 -19
  8. package/dist/plugins/airtop/src/index.js +266 -62
  9. package/dist/plugins/apiTemplateIo/src/index.js +25 -5
  10. package/dist/plugins/asana/src/index.js +195 -41
  11. package/dist/plugins/autopilot/src/index.js +39 -8
  12. package/dist/plugins/bambooHr/src/index.js +109 -22
  13. package/dist/plugins/bannerbear/src/index.js +36 -8
  14. package/dist/plugins/baserow/src/index.js +35 -7
  15. package/dist/plugins/beeminder/src/index.js +198 -40
  16. package/dist/plugins/bitly/src/index.js +46 -10
  17. package/dist/plugins/bitwarden/src/index.js +167 -36
  18. package/dist/plugins/box/src/index.js +172 -37
  19. package/dist/plugins/brandfetch/src/index.js +5 -1
  20. package/dist/plugins/brevo/src/index.js +136 -29
  21. package/dist/plugins/bubble/src/index.js +76 -17
  22. package/dist/plugins/chargebee/src/index.js +35 -7
  23. package/dist/plugins/circleci/src/index.js +50 -10
  24. package/dist/plugins/ciscoWebex/src/index.js +131 -27
  25. package/dist/plugins/clearbit/src/index.js +76 -17
  26. package/dist/plugins/clickup/src/index.js +500 -107
  27. package/dist/plugins/clockify/src/index.js +229 -47
  28. package/dist/plugins/cloudflare/src/index.js +28 -6
  29. package/dist/plugins/cockpit/src/index.js +54 -12
  30. package/dist/plugins/coda/src/index.js +81 -19
  31. package/dist/plugins/coingecko/src/index.js +157 -33
  32. package/dist/plugins/contentful/src/index.js +85 -17
  33. package/dist/plugins/convertkit/src/index.js +74 -18
  34. package/dist/plugins/copper/src/index.js +59 -11
  35. package/dist/plugins/cortex/src/index.js +55 -13
  36. package/dist/plugins/currents/src/index.js +310 -71
  37. package/dist/plugins/customerIo/src/index.js +112 -23
  38. package/dist/plugins/databricks/src/index.js +549 -115
  39. package/dist/plugins/deepl/src/index.js +26 -6
  40. package/dist/plugins/demio/src/index.js +56 -11
  41. package/dist/plugins/dhl/src/index.js +16 -3
  42. package/dist/plugins/discord/src/index.js +141 -31
  43. package/dist/plugins/discourse/src/index.js +136 -31
  44. package/dist/plugins/disqus/src/index.js +96 -20
  45. package/dist/plugins/docker/src/index.js +20 -4
  46. package/dist/plugins/drift/src/index.js +19 -5
  47. package/dist/plugins/dropbox/src/index.js +139 -30
  48. package/dist/plugins/dropcontact/src/index.js +21 -4
  49. package/dist/plugins/egoi/src/index.js +61 -15
  50. package/dist/plugins/elasticsearch/src/index.js +59 -13
  51. package/dist/plugins/emelia/src/index.js +95 -19
  52. package/dist/plugins/erpnext/src/index.js +74 -15
  53. package/dist/plugins/facebookGraph/src/index.js +52 -11
  54. package/dist/plugins/freshdesk/src/index.js +220 -48
  55. package/dist/plugins/freshservice/src/index.js +39 -9
  56. package/dist/plugins/freshworksCrm/src/index.js +58 -12
  57. package/dist/plugins/getresponse/src/index.js +87 -18
  58. package/dist/plugins/ghost/src/index.js +114 -26
  59. package/dist/plugins/github/src/index.js +483 -109
  60. package/dist/plugins/gitlab/src/index.js +193 -45
  61. package/dist/plugins/gong/src/index.js +68 -14
  62. package/dist/plugins/gotify/src/index.js +43 -9
  63. package/dist/plugins/gotowebinar/src/index.js +233 -47
  64. package/dist/plugins/grafana/src/index.js +92 -21
  65. package/dist/plugins/graphql/src/index.js +38 -8
  66. package/dist/plugins/grist/src/index.js +52 -10
  67. package/dist/plugins/hackernews/src/index.js +32 -6
  68. package/dist/plugins/halopsa/src/index.js +131 -26
  69. package/dist/plugins/harvest/src/index.js +182 -42
  70. package/dist/plugins/helpscout/src/index.js +153 -31
  71. package/dist/plugins/highlevel/src/index.js +291 -58
  72. package/dist/plugins/homeAssistant/src/index.js +124 -26
  73. package/dist/plugins/hubspot/src/index.js +163 -29
  74. package/dist/plugins/humanticAi/src/index.js +54 -5
  75. package/dist/plugins/hunter/src/index.js +21 -4
  76. package/dist/plugins/intercom/src/index.js +95 -20
  77. package/dist/plugins/iterable/src/index.js +96 -20
  78. package/dist/plugins/jenkins/src/index.js +75 -17
  79. package/dist/plugins/jira/src/index.js +193 -43
  80. package/dist/plugins/keap/src/index.js +222 -56
  81. package/dist/plugins/kobotoolbox/src/index.js +113 -25
  82. package/dist/plugins/lemlist/src/index.js +79 -18
  83. package/dist/plugins/linear/src/index.js +86 -19
  84. package/dist/plugins/lingvanex/src/index.js +38 -8
  85. package/dist/plugins/linkedin/src/index.js +37 -8
  86. package/dist/plugins/lonescale/src/index.js +41 -9
  87. package/dist/plugins/magento/src/index.js +98 -27
  88. package/dist/plugins/mailcheck/src/index.js +11 -2
  89. package/dist/plugins/mailchimp/src/index.js +193 -42
  90. package/dist/plugins/mailerlite/src/index.js +61 -12
  91. package/dist/plugins/mailgun/src/index.js +39 -7
  92. package/dist/plugins/mailjet/src/index.js +141 -30
  93. package/dist/plugins/mandrill/src/index.js +67 -14
  94. package/dist/plugins/marketstack/src/index.js +56 -10
  95. package/dist/plugins/matrix/src/index.js +97 -20
  96. package/dist/plugins/mattermost/src/index.js +124 -26
  97. package/dist/plugins/mautic/src/index.js +129 -26
  98. package/dist/plugins/medium/src/index.js +64 -13
  99. package/dist/plugins/messagebird/src/index.js +80 -15
  100. package/dist/plugins/metabase/src/index.js +57 -12
  101. package/dist/plugins/misp/src/index.js +135 -33
  102. package/dist/plugins/mocean/src/index.js +33 -7
  103. package/dist/plugins/monday/src/index.js +97 -23
  104. package/dist/plugins/monicaCrm/src/index.js +112 -23
  105. package/dist/plugins/msg91/src/index.js +11 -2
  106. package/dist/plugins/nasa/src/index.js +108 -21
  107. package/dist/plugins/netlify/src/index.js +28 -6
  108. package/dist/plugins/netscalerAdc/src/index.js +144 -29
  109. package/dist/plugins/nextcloud/src/index.js +103 -20
  110. package/dist/plugins/nocodb/src/index.js +57 -11
  111. package/dist/plugins/notion/src/index.js +148 -37
  112. package/dist/plugins/npm/src/index.js +59 -12
  113. package/dist/plugins/odoo/src/index.js +102 -20
  114. package/dist/plugins/okta/src/index.js +50 -10
  115. package/dist/plugins/oneSimpleApi/src/index.js +84 -17
  116. package/dist/plugins/onfleet/src/index.js +139 -32
  117. package/dist/plugins/openThesaurus/src/index.js +46 -9
  118. package/dist/plugins/openweathermap/src/index.js +31 -6
  119. package/dist/plugins/oura/src/index.js +36 -7
  120. package/dist/plugins/paddle/src/index.js +80 -17
  121. package/dist/plugins/pagerduty/src/index.js +53 -12
  122. package/dist/plugins/paypal/src/index.js +51 -11
  123. package/dist/plugins/peekalink/src/index.js +12 -3
  124. package/dist/plugins/phantombuster/src/index.js +39 -8
  125. package/dist/plugins/philipsHue/src/index.js +64 -13
  126. package/dist/plugins/pipedrive/src/index.js +167 -45
  127. package/dist/plugins/plivo/src/index.js +43 -8
  128. package/dist/plugins/postbin/src/index.js +9 -2
  129. package/dist/plugins/posthog/src/index.js +50 -13
  130. package/dist/plugins/profitwell/src/index.js +24 -5
  131. package/dist/plugins/pushbullet/src/index.js +45 -9
  132. package/dist/plugins/pushcut/src/index.js +31 -6
  133. package/dist/plugins/pushover/src/index.js +51 -10
  134. package/dist/plugins/quickbase/src/index.js +66 -13
  135. package/dist/plugins/quickbooks/src/index.js +86 -19
  136. package/dist/plugins/quickchart/src/index.js +35 -7
  137. package/dist/plugins/raindrop/src/index.js +54 -13
  138. package/dist/plugins/reddit/src/index.js +73 -18
  139. package/dist/plugins/rocketchat/src/index.js +47 -9
  140. package/dist/plugins/rundeck/src/index.js +26 -5
  141. package/dist/plugins/salesforce/src/index.js +161 -31
  142. package/dist/plugins/salesmate/src/index.js +75 -16
  143. package/dist/plugins/securityScorecard/src/index.js +73 -15
  144. package/dist/plugins/segment/src/index.js +21 -4
  145. package/dist/plugins/sendgrid/src/index.js +102 -24
  146. package/dist/plugins/sendy/src/index.js +54 -11
  147. package/dist/plugins/sentry/src/index.js +174 -34
  148. package/dist/plugins/servicenow/src/index.js +120 -27
  149. package/dist/plugins/shopify/src/index.js +53 -12
  150. package/dist/plugins/signl4/src/index.js +16 -3
  151. package/dist/plugins/slack/src/index.js +407 -105
  152. package/dist/plugins/sms77/src/index.js +26 -5
  153. package/dist/plugins/splunk/src/index.js +186 -45
  154. package/dist/plugins/spotify/src/index.js +265 -66
  155. package/dist/plugins/stackby/src/index.js +18 -6
  156. package/dist/plugins/storyblok/src/index.js +57 -11
  157. package/dist/plugins/strapi/src/index.js +63 -12
  158. package/dist/plugins/strava/src/index.js +58 -13
  159. package/dist/plugins/stripe/src/index.js +143 -30
  160. package/dist/plugins/supabase/src/index.js +49 -10
  161. package/dist/plugins/syncromsp/src/index.js +245 -67
  162. package/dist/plugins/tapfiliate/src/index.js +57 -14
  163. package/dist/plugins/telegram/src/index.js +202 -39
  164. package/dist/plugins/thehive/src/index.js +271 -66
  165. package/dist/plugins/thehiveProject/src/index.js +457 -89
  166. package/dist/plugins/todoist/src/index.js +326 -77
  167. package/dist/plugins/travisci/src/index.js +35 -8
  168. package/dist/plugins/trello/src/index.js +204 -46
  169. package/dist/plugins/twake/src/index.js +10 -2
  170. package/dist/plugins/twilio/src/index.js +56 -11
  171. package/dist/plugins/twist/src/index.js +241 -48
  172. package/dist/plugins/twitter/src/index.js +128 -30
  173. package/dist/plugins/unleashedSoftware/src/index.js +30 -6
  174. package/dist/plugins/uplead/src/index.js +9 -2
  175. package/dist/plugins/uproc/src/index.js +31 -6
  176. package/dist/plugins/uptimerobot/src/index.js +119 -25
  177. package/dist/plugins/urlscanio/src/index.js +25 -6
  178. package/dist/plugins/vero/src/index.js +68 -13
  179. package/dist/plugins/vonage/src/index.js +32 -6
  180. package/dist/plugins/wekan/src/index.js +297 -52
  181. package/dist/plugins/woocommerce/src/index.js +57 -12
  182. package/dist/plugins/wordpress/src/index.js +94 -18
  183. package/dist/plugins/xero/src/index.js +79 -13
  184. package/dist/plugins/yourls/src/index.js +33 -6
  185. package/dist/plugins/zammad/src/index.js +139 -36
  186. package/dist/plugins/zendesk/src/index.js +201 -48
  187. package/dist/plugins/zoho/src/index.js +88 -21
  188. package/dist/plugins/zoom/src/index.js +41 -7
  189. package/dist/plugins/zulip/src/index.js +101 -20
  190. package/package.json +1 -1
@@ -14,7 +14,10 @@ async function apiRequest(apiKey, method, endpoint, body, qs) {
14
14
  Authorization: `Bearer ${apiKey}`,
15
15
  },
16
16
  };
17
- if (body && Object.keys(body).length > 0 && method !== "GET" && method !== "DELETE") {
17
+ if (body &&
18
+ Object.keys(body).length > 0 &&
19
+ method !== "GET" &&
20
+ method !== "DELETE") {
18
21
  opts.body = JSON.stringify(body);
19
22
  }
20
23
  const res = await fetch(url.toString(), opts);
@@ -57,20 +60,50 @@ export default function airtop(rl) {
57
60
  rl.registerAction("session.create", {
58
61
  description: "Create a new browser session and wait until it's running",
59
62
  inputSchema: {
60
- profileName: { type: "string", required: false, description: "Browser profile name" },
61
- timeoutMinutes: { type: "number", required: false, description: "Idle timeout in minutes (default 10)" },
62
- proxy: { type: "boolean", required: false, description: "Enable Airtop proxy" },
63
- proxyCountry: { type: "string", required: false, description: "Proxy country code (e.g. US)" },
64
- record: { type: "boolean", required: false, description: "Record the session" },
65
- solveCaptcha: { type: "boolean", required: false, description: "Auto-solve captchas" },
66
- saveProfileOnTermination: { type: "boolean", required: false, description: "Save profile when session ends" },
63
+ profileName: {
64
+ type: "string",
65
+ required: false,
66
+ description: "Browser profile name",
67
+ },
68
+ timeoutMinutes: {
69
+ type: "number",
70
+ required: false,
71
+ description: "Idle timeout in minutes (default 10)",
72
+ },
73
+ proxy: {
74
+ type: "boolean",
75
+ required: false,
76
+ description: "Enable Airtop proxy",
77
+ },
78
+ proxyCountry: {
79
+ type: "string",
80
+ required: false,
81
+ description: "Proxy country code (e.g. US)",
82
+ },
83
+ record: {
84
+ type: "boolean",
85
+ required: false,
86
+ description: "Record the session",
87
+ },
88
+ solveCaptcha: {
89
+ type: "boolean",
90
+ required: false,
91
+ description: "Auto-solve captchas",
92
+ },
93
+ saveProfileOnTermination: {
94
+ type: "boolean",
95
+ required: false,
96
+ description: "Save profile when session ends",
97
+ },
67
98
  },
68
99
  async execute(input, ctx) {
69
100
  const { profileName, timeoutMinutes = 10, proxy, proxyCountry, record, solveCaptcha, saveProfileOnTermination, } = (input ?? {});
70
101
  const apiKey = getKey(ctx);
71
102
  let proxyConfig = false;
72
103
  if (proxy) {
73
- proxyConfig = proxyCountry ? { country: proxyCountry, sticky: true } : true;
104
+ proxyConfig = proxyCountry
105
+ ? { country: proxyCountry, sticky: true }
106
+ : true;
74
107
  }
75
108
  const body = {
76
109
  configuration: {
@@ -82,7 +115,8 @@ export default function airtop(rl) {
82
115
  },
83
116
  };
84
117
  const response = (await apiRequest(apiKey, "POST", "/sessions", body));
85
- const sessionId = response.data?.id;
118
+ const sessionId = response.data
119
+ ?.id;
86
120
  if (!sessionId)
87
121
  throw new Error("Failed to create session");
88
122
  // Poll until running
@@ -108,19 +142,31 @@ export default function airtop(rl) {
108
142
  description: "Save a browser profile on session termination",
109
143
  inputSchema: {
110
144
  sessionId: { type: "string", required: true, description: "Session ID" },
111
- profileName: { type: "string", required: true, description: "Profile name to save" },
145
+ profileName: {
146
+ type: "string",
147
+ required: true,
148
+ description: "Profile name to save",
149
+ },
112
150
  },
113
151
  async execute(input, ctx) {
114
152
  const { sessionId, profileName } = input;
115
153
  const response = await apiRequest(getKey(ctx), "PUT", `/sessions/${sessionId}/save-profile-on-termination/${profileName}`);
116
- return { sessionId, profileName, ...response };
154
+ return {
155
+ sessionId,
156
+ profileName,
157
+ ...response,
158
+ };
117
159
  },
118
160
  });
119
161
  rl.registerAction("session.waitForDownload", {
120
162
  description: "Wait for a file download to become available in a session",
121
163
  inputSchema: {
122
164
  sessionId: { type: "string", required: true, description: "Session ID" },
123
- timeoutSeconds: { type: "number", required: false, description: "Timeout in seconds (default 30)" },
165
+ timeoutSeconds: {
166
+ type: "number",
167
+ required: false,
168
+ description: "Timeout in seconds (default 30)",
169
+ },
124
170
  },
125
171
  async execute(input, ctx) {
126
172
  const { sessionId, timeoutSeconds = 30 } = input;
@@ -129,11 +175,17 @@ export default function airtop(rl) {
129
175
  const apiKey = getKey(ctx);
130
176
  const start = Date.now();
131
177
  while (Date.now() - start < timeoutSeconds * 1000) {
132
- const data = (await apiRequest(apiKey, "GET", "/files", undefined, { sessionIds: sessionId }));
178
+ const data = (await apiRequest(apiKey, "GET", "/files", undefined, {
179
+ sessionIds: sessionId,
180
+ }));
133
181
  const files = data.data?.files ?? [];
134
182
  const available = files.find((f) => f.status === "available");
135
183
  if (available)
136
- return { sessionId, fileId: available.id, downloadUrl: available.downloadUrl };
184
+ return {
185
+ sessionId,
186
+ fileId: available.id,
187
+ downloadUrl: available.downloadUrl,
188
+ };
137
189
  await new Promise((r) => setTimeout(r, 1000));
138
190
  }
139
191
  throw new Error("Timeout waiting for download");
@@ -144,8 +196,16 @@ export default function airtop(rl) {
144
196
  description: "Create a new browser window in a session",
145
197
  inputSchema: {
146
198
  sessionId: { type: "string", required: true, description: "Session ID" },
147
- url: { type: "string", required: false, description: "Initial URL to load (default: google.com)" },
148
- waitUntil: { type: "string", required: false, description: "Wait event: load, domContentLoaded, complete, noWait" },
199
+ url: {
200
+ type: "string",
201
+ required: false,
202
+ description: "Initial URL to load (default: google.com)",
203
+ },
204
+ waitUntil: {
205
+ type: "string",
206
+ required: false,
207
+ description: "Wait event: load, domContentLoaded, complete, noWait",
208
+ },
149
209
  },
150
210
  async execute(input, ctx) {
151
211
  const { sessionId, url, waitUntil } = input;
@@ -155,7 +215,8 @@ export default function airtop(rl) {
155
215
  if (waitUntil)
156
216
  body.waitUntil = waitUntil;
157
217
  const response = (await apiRequest(getKey(ctx), "POST", `/sessions/${sessionId}/windows`, body));
158
- const windowId = response.data?.windowId;
218
+ const windowId = response.data
219
+ ?.windowId;
159
220
  return { sessionId, windowId, ...response };
160
221
  },
161
222
  });
@@ -176,8 +237,16 @@ export default function airtop(rl) {
176
237
  inputSchema: {
177
238
  sessionId: { type: "string", required: true, description: "Session ID" },
178
239
  windowId: { type: "string", required: true, description: "Window ID" },
179
- url: { type: "string", required: true, description: "URL to navigate to" },
180
- waitUntil: { type: "string", required: false, description: "Wait event: load, domContentLoaded, complete, noWait" },
240
+ url: {
241
+ type: "string",
242
+ required: true,
243
+ description: "URL to navigate to",
244
+ },
245
+ waitUntil: {
246
+ type: "string",
247
+ required: false,
248
+ description: "Wait event: load, domContentLoaded, complete, noWait",
249
+ },
181
250
  },
182
251
  async execute(input, ctx) {
183
252
  const { sessionId, windowId, url, waitUntil } = input;
@@ -202,12 +271,24 @@ export default function airtop(rl) {
202
271
  inputSchema: {
203
272
  sessionId: { type: "string", required: true, description: "Session ID" },
204
273
  windowId: { type: "string", required: true, description: "Window ID" },
205
- includeNavigationBar: { type: "boolean", required: false, description: "Show nav bar in live view" },
206
- screenResolution: { type: "string", required: false, description: "Screen resolution (e.g. 1280x720)" },
207
- disableResize: { type: "boolean", required: false, description: "Disable window resize" },
274
+ includeNavigationBar: {
275
+ type: "boolean",
276
+ required: false,
277
+ description: "Show nav bar in live view",
278
+ },
279
+ screenResolution: {
280
+ type: "string",
281
+ required: false,
282
+ description: "Screen resolution (e.g. 1280x720)",
283
+ },
284
+ disableResize: {
285
+ type: "boolean",
286
+ required: false,
287
+ description: "Disable window resize",
288
+ },
208
289
  },
209
290
  async execute(input, ctx) {
210
- const { sessionId, windowId, includeNavigationBar, screenResolution, disableResize } = input;
291
+ const { sessionId, windowId, includeNavigationBar, screenResolution, disableResize, } = input;
211
292
  const qs = {};
212
293
  if (includeNavigationBar)
213
294
  qs.includeNavigationBar = true;
@@ -235,17 +316,31 @@ export default function airtop(rl) {
235
316
  inputSchema: {
236
317
  sessionId: { type: "string", required: true, description: "Session ID" },
237
318
  windowId: { type: "string", required: true, description: "Window ID" },
238
- prompt: { type: "string", required: true, description: "Natural language prompt to query the page" },
239
- outputSchema: { type: "string", required: false, description: "JSON schema for structured output" },
240
- includeVisualAnalysis: { type: "boolean", required: false, description: "Analyze page visually" },
319
+ prompt: {
320
+ type: "string",
321
+ required: true,
322
+ description: "Natural language prompt to query the page",
323
+ },
324
+ outputSchema: {
325
+ type: "string",
326
+ required: false,
327
+ description: "JSON schema for structured output",
328
+ },
329
+ includeVisualAnalysis: {
330
+ type: "boolean",
331
+ required: false,
332
+ description: "Analyze page visually",
333
+ },
241
334
  },
242
335
  async execute(input, ctx) {
243
- const { sessionId, windowId, prompt, outputSchema, includeVisualAnalysis } = input;
336
+ const { sessionId, windowId, prompt, outputSchema, includeVisualAnalysis, } = input;
244
337
  const body = {
245
338
  prompt,
246
339
  configuration: {
247
340
  experimental: {
248
- includeVisualAnalysis: includeVisualAnalysis ? "enabled" : "disabled",
341
+ includeVisualAnalysis: includeVisualAnalysis
342
+ ? "enabled"
343
+ : "disabled",
249
344
  },
250
345
  ...(outputSchema ? { outputSchema } : {}),
251
346
  },
@@ -269,13 +364,29 @@ export default function airtop(rl) {
269
364
  inputSchema: {
270
365
  sessionId: { type: "string", required: true, description: "Session ID" },
271
366
  windowId: { type: "string", required: true, description: "Window ID" },
272
- prompt: { type: "string", required: true, description: "Prompt describing what to extract" },
273
- outputSchema: { type: "string", required: false, description: "JSON schema for structured output" },
274
- paginationMode: { type: "string", required: false, description: "auto, paginated, or infinite-scroll" },
275
- interactionMode: { type: "string", required: false, description: "auto, accurate, or cost-efficient" },
367
+ prompt: {
368
+ type: "string",
369
+ required: true,
370
+ description: "Prompt describing what to extract",
371
+ },
372
+ outputSchema: {
373
+ type: "string",
374
+ required: false,
375
+ description: "JSON schema for structured output",
376
+ },
377
+ paginationMode: {
378
+ type: "string",
379
+ required: false,
380
+ description: "auto, paginated, or infinite-scroll",
381
+ },
382
+ interactionMode: {
383
+ type: "string",
384
+ required: false,
385
+ description: "auto, accurate, or cost-efficient",
386
+ },
276
387
  },
277
388
  async execute(input, ctx) {
278
- const { sessionId, windowId, prompt, outputSchema, paginationMode, interactionMode } = input;
389
+ const { sessionId, windowId, prompt, outputSchema, paginationMode, interactionMode, } = input;
279
390
  const configuration = {};
280
391
  if (outputSchema)
281
392
  configuration.outputSchema = outputSchema;
@@ -292,11 +403,19 @@ export default function airtop(rl) {
292
403
  inputSchema: {
293
404
  sessionId: { type: "string", required: true, description: "Session ID" },
294
405
  windowId: { type: "string", required: true, description: "Window ID" },
295
- elementDescription: { type: "string", required: true, description: "Natural language description of the element to click" },
296
- clickType: { type: "string", required: false, description: "click, doubleClick, or rightClick (default: click)" },
406
+ elementDescription: {
407
+ type: "string",
408
+ required: true,
409
+ description: "Natural language description of the element to click",
410
+ },
411
+ clickType: {
412
+ type: "string",
413
+ required: false,
414
+ description: "click, doubleClick, or rightClick (default: click)",
415
+ },
297
416
  },
298
417
  async execute(input, ctx) {
299
- const { sessionId, windowId, elementDescription, clickType = "click" } = input;
418
+ const { sessionId, windowId, elementDescription, clickType = "click", } = input;
300
419
  return apiRequest(getKey(ctx), "POST", `/sessions/${sessionId}/windows/${windowId}/click`, {
301
420
  elementDescription,
302
421
  configuration: { clickType },
@@ -308,7 +427,11 @@ export default function airtop(rl) {
308
427
  inputSchema: {
309
428
  sessionId: { type: "string", required: true, description: "Session ID" },
310
429
  windowId: { type: "string", required: true, description: "Window ID" },
311
- elementDescription: { type: "string", required: true, description: "Natural language description of the element to hover" },
430
+ elementDescription: {
431
+ type: "string",
432
+ required: true,
433
+ description: "Natural language description of the element to hover",
434
+ },
312
435
  },
313
436
  async execute(input, ctx) {
314
437
  const { sessionId, windowId, elementDescription } = input;
@@ -323,8 +446,16 @@ export default function airtop(rl) {
323
446
  sessionId: { type: "string", required: true, description: "Session ID" },
324
447
  windowId: { type: "string", required: true, description: "Window ID" },
325
448
  text: { type: "string", required: true, description: "Text to type" },
326
- elementDescription: { type: "string", required: false, description: "Element to type into" },
327
- pressEnterKey: { type: "boolean", required: false, description: "Press Enter after typing" },
449
+ elementDescription: {
450
+ type: "string",
451
+ required: false,
452
+ description: "Element to type into",
453
+ },
454
+ pressEnterKey: {
455
+ type: "boolean",
456
+ required: false,
457
+ description: "Press Enter after typing",
458
+ },
328
459
  },
329
460
  async execute(input, ctx) {
330
461
  const { sessionId, windowId, text, elementDescription, pressEnterKey } = input;
@@ -341,7 +472,11 @@ export default function airtop(rl) {
341
472
  inputSchema: {
342
473
  sessionId: { type: "string", required: true, description: "Session ID" },
343
474
  windowId: { type: "string", required: true, description: "Window ID" },
344
- formData: { type: "string", required: true, description: "Form data in natural language (e.g. 'Name: John, Email: john@example.com')" },
475
+ formData: {
476
+ type: "string",
477
+ required: true,
478
+ description: "Form data in natural language (e.g. 'Name: John, Email: john@example.com')",
479
+ },
345
480
  },
346
481
  async execute(input, ctx) {
347
482
  const { sessionId, windowId, formData } = input;
@@ -361,13 +496,29 @@ export default function airtop(rl) {
361
496
  inputSchema: {
362
497
  sessionId: { type: "string", required: true, description: "Session ID" },
363
498
  windowId: { type: "string", required: true, description: "Window ID" },
364
- scrollToElement: { type: "string", required: false, description: "Natural language description of element to scroll to (automatic mode)" },
365
- scrollToEdge: { type: "object", required: false, description: "{ xAxis?: 'left'|'right', yAxis?: 'top'|'bottom' }" },
366
- scrollBy: { type: "object", required: false, description: "{ xAxis?: '100px'|'50%', yAxis?: '200px'|'-100px' }" },
367
- scrollWithin: { type: "string", required: false, description: "Natural language description of scrollable area" },
499
+ scrollToElement: {
500
+ type: "string",
501
+ required: false,
502
+ description: "Natural language description of element to scroll to (automatic mode)",
503
+ },
504
+ scrollToEdge: {
505
+ type: "object",
506
+ required: false,
507
+ description: "{ xAxis?: 'left'|'right', yAxis?: 'top'|'bottom' }",
508
+ },
509
+ scrollBy: {
510
+ type: "object",
511
+ required: false,
512
+ description: "{ xAxis?: '100px'|'50%', yAxis?: '200px'|'-100px' }",
513
+ },
514
+ scrollWithin: {
515
+ type: "string",
516
+ required: false,
517
+ description: "Natural language description of scrollable area",
518
+ },
368
519
  },
369
520
  async execute(input, ctx) {
370
- const { sessionId, windowId, scrollToElement, scrollToEdge, scrollBy, scrollWithin } = input;
521
+ const { sessionId, windowId, scrollToElement, scrollToEdge, scrollBy, scrollWithin, } = input;
371
522
  const body = {};
372
523
  if (scrollToElement)
373
524
  body.scrollToElement = scrollToElement;
@@ -385,12 +536,24 @@ export default function airtop(rl) {
385
536
  description: "Run an Airtop agent and optionally wait for completion",
386
537
  inputSchema: {
387
538
  agentId: { type: "string", required: true, description: "Agent ID" },
388
- parameters: { type: "object", required: false, description: "Agent input parameters" },
389
- awaitExecution: { type: "boolean", required: false, description: "Wait for agent to complete (default: true)" },
390
- timeoutSeconds: { type: "number", required: false, description: "Timeout in seconds (default: 600)" },
539
+ parameters: {
540
+ type: "object",
541
+ required: false,
542
+ description: "Agent input parameters",
543
+ },
544
+ awaitExecution: {
545
+ type: "boolean",
546
+ required: false,
547
+ description: "Wait for agent to complete (default: true)",
548
+ },
549
+ timeoutSeconds: {
550
+ type: "number",
551
+ required: false,
552
+ description: "Timeout in seconds (default: 600)",
553
+ },
391
554
  },
392
555
  async execute(input, ctx) {
393
- const { agentId, parameters, awaitExecution = true, timeoutSeconds = 600 } = input;
556
+ const { agentId, parameters, awaitExecution = true, timeoutSeconds = 600, } = input;
394
557
  const apiKey = getKey(ctx);
395
558
  const HOOKS_BASE = "https://api.airtop.ai/api/hooks";
396
559
  // Get agent details for webhook ID
@@ -440,8 +603,16 @@ export default function airtop(rl) {
440
603
  rl.registerAction("file.list", {
441
604
  description: "List files, optionally filtered by session",
442
605
  inputSchema: {
443
- sessionIds: { type: "string", required: false, description: "Comma-separated session IDs to filter by" },
444
- limit: { type: "number", required: false, description: "Max results to return" },
606
+ sessionIds: {
607
+ type: "string",
608
+ required: false,
609
+ description: "Comma-separated session IDs to filter by",
610
+ },
611
+ limit: {
612
+ type: "number",
613
+ required: false,
614
+ description: "Max results to return",
615
+ },
445
616
  },
446
617
  async execute(input, ctx) {
447
618
  const { sessionIds, limit } = (input ?? {});
@@ -469,11 +640,31 @@ export default function airtop(rl) {
469
640
  inputSchema: {
470
641
  sessionId: { type: "string", required: true, description: "Session ID" },
471
642
  windowId: { type: "string", required: true, description: "Window ID" },
472
- fileName: { type: "string", required: true, description: "File name (must be unique per session)" },
473
- url: { type: "string", required: true, description: "URL to fetch the file from" },
474
- fileType: { type: "string", required: false, description: "File type: customer_upload, browser_download, screenshot, video" },
475
- triggerFileInput: { type: "boolean", required: false, description: "Trigger file input dialog (default: true)" },
476
- elementDescription: { type: "string", required: false, description: "Description of file input element" },
643
+ fileName: {
644
+ type: "string",
645
+ required: true,
646
+ description: "File name (must be unique per session)",
647
+ },
648
+ url: {
649
+ type: "string",
650
+ required: true,
651
+ description: "URL to fetch the file from",
652
+ },
653
+ fileType: {
654
+ type: "string",
655
+ required: false,
656
+ description: "File type: customer_upload, browser_download, screenshot, video",
657
+ },
658
+ triggerFileInput: {
659
+ type: "boolean",
660
+ required: false,
661
+ description: "Trigger file input dialog (default: true)",
662
+ },
663
+ elementDescription: {
664
+ type: "string",
665
+ required: false,
666
+ description: "Description of file input element",
667
+ },
477
668
  },
478
669
  async execute(input, ctx) {
479
670
  const { sessionId, windowId, fileName, url, fileType = "customer_upload", triggerFileInput: triggerInput = true, elementDescription, } = input;
@@ -490,9 +681,12 @@ export default function airtop(rl) {
490
681
  fileType,
491
682
  content: base64,
492
683
  }));
493
- const fileId = createResponse.data?.id;
684
+ const fileId = createResponse.data
685
+ ?.id;
494
686
  // Push to session
495
- await apiRequest(apiKey, "POST", `/sessions/${sessionId}/files`, { fileId });
687
+ await apiRequest(apiKey, "POST", `/sessions/${sessionId}/files`, {
688
+ fileId,
689
+ });
496
690
  // Trigger file input if needed
497
691
  if (triggerInput) {
498
692
  const body = { fileId };
@@ -508,14 +702,24 @@ export default function airtop(rl) {
508
702
  inputSchema: {
509
703
  sessionId: { type: "string", required: true, description: "Session ID" },
510
704
  windowId: { type: "string", required: true, description: "Window ID" },
511
- fileId: { type: "string", required: true, description: "File ID to load" },
512
- elementDescription: { type: "string", required: false, description: "Description of file input element" },
705
+ fileId: {
706
+ type: "string",
707
+ required: true,
708
+ description: "File ID to load",
709
+ },
710
+ elementDescription: {
711
+ type: "string",
712
+ required: false,
713
+ description: "Description of file input element",
714
+ },
513
715
  },
514
716
  async execute(input, ctx) {
515
717
  const { sessionId, windowId, fileId, elementDescription } = input;
516
718
  const apiKey = getKey(ctx);
517
719
  // Push to session
518
- await apiRequest(apiKey, "POST", `/sessions/${sessionId}/files`, { fileId });
720
+ await apiRequest(apiKey, "POST", `/sessions/${sessionId}/files`, {
721
+ fileId,
722
+ });
519
723
  // Trigger file input
520
724
  const body = { fileId };
521
725
  if (elementDescription)
@@ -47,7 +47,11 @@ export default function apiTemplateIo(rl) {
47
47
  rl.registerAction("template.list", {
48
48
  description: "List all templates",
49
49
  inputSchema: {
50
- format: { type: "string", required: false, description: "Filter by format: JPEG, PNG, or PDF" },
50
+ format: {
51
+ type: "string",
52
+ required: false,
53
+ description: "Filter by format: JPEG, PNG, or PDF",
54
+ },
51
55
  },
52
56
  async execute(input, ctx) {
53
57
  const { format } = (input ?? {});
@@ -61,8 +65,16 @@ export default function apiTemplateIo(rl) {
61
65
  rl.registerAction("image.create", {
62
66
  description: "Create an image from a template",
63
67
  inputSchema: {
64
- templateId: { type: "string", required: true, description: "Image template ID" },
65
- overrides: { type: "array", required: false, description: "Array of override objects with template field values" },
68
+ templateId: {
69
+ type: "string",
70
+ required: true,
71
+ description: "Image template ID",
72
+ },
73
+ overrides: {
74
+ type: "array",
75
+ required: false,
76
+ description: "Array of override objects with template field values",
77
+ },
66
78
  },
67
79
  async execute(input, ctx) {
68
80
  const { templateId, overrides } = input;
@@ -75,8 +87,16 @@ export default function apiTemplateIo(rl) {
75
87
  rl.registerAction("pdf.create", {
76
88
  description: "Create a PDF from a template",
77
89
  inputSchema: {
78
- templateId: { type: "string", required: true, description: "PDF template ID" },
79
- properties: { type: "object", required: true, description: "Template properties as key-value pairs" },
90
+ templateId: {
91
+ type: "string",
92
+ required: true,
93
+ description: "PDF template ID",
94
+ },
95
+ properties: {
96
+ type: "object",
97
+ required: true,
98
+ description: "Template properties as key-value pairs",
99
+ },
80
100
  },
81
101
  async execute(input, ctx) {
82
102
  const { templateId, properties } = input;