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.
- package/README.md +1 -1
- 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
|
@@ -14,7 +14,10 @@ async function apiRequest(apiKey, method, endpoint, body, qs) {
|
|
|
14
14
|
Authorization: `Bearer ${apiKey}`,
|
|
15
15
|
},
|
|
16
16
|
};
|
|
17
|
-
if (body &&
|
|
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: {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
|
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
|
|
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: {
|
|
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 {
|
|
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: {
|
|
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, {
|
|
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 {
|
|
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: {
|
|
148
|
-
|
|
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
|
|
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: {
|
|
180
|
-
|
|
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: {
|
|
206
|
-
|
|
207
|
-
|
|
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: {
|
|
239
|
-
|
|
240
|
-
|
|
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
|
|
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: {
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
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: {
|
|
296
|
-
|
|
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: {
|
|
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: {
|
|
327
|
-
|
|
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: {
|
|
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: {
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
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: {
|
|
389
|
-
|
|
390
|
-
|
|
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: {
|
|
444
|
-
|
|
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: {
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
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
|
|
684
|
+
const fileId = createResponse.data
|
|
685
|
+
?.id;
|
|
494
686
|
// Push to session
|
|
495
|
-
await apiRequest(apiKey, "POST", `/sessions/${sessionId}/files`, {
|
|
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: {
|
|
512
|
-
|
|
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`, {
|
|
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: {
|
|
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: {
|
|
65
|
-
|
|
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: {
|
|
79
|
-
|
|
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;
|