runline 0.11.6 → 0.12.0

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 (251) hide show
  1. package/dist/commands/actions.js +3 -1
  2. package/dist/core/engine.js +3 -0
  3. package/dist/index.d.ts +1 -1
  4. package/dist/plugin/api.d.ts +2 -1
  5. package/dist/plugin/types.d.ts +2 -0
  6. package/dist/plugins/actionNetwork/src/index.js +23 -0
  7. package/dist/plugins/activeCampaign/src/index.js +48 -0
  8. package/dist/plugins/adalo/src/index.js +5 -0
  9. package/dist/plugins/affinity/src/index.js +16 -0
  10. package/dist/plugins/agileCrm/src/index.js +15 -0
  11. package/dist/plugins/airtable/src/index.js +10 -0
  12. package/dist/plugins/airtop/src/index.js +24 -0
  13. package/dist/plugins/apiTemplateIo/src/index.js +4 -0
  14. package/dist/plugins/asana/src/index.js +22 -0
  15. package/dist/plugins/autopilot/src/index.js +11 -0
  16. package/dist/plugins/bambooHr/src/index.js +11 -0
  17. package/dist/plugins/bannerbear/src/index.js +4 -0
  18. package/dist/plugins/baserow/src/index.js +8 -0
  19. package/dist/plugins/beeminder/src/index.js +18 -0
  20. package/dist/plugins/bitly/src/index.js +3 -0
  21. package/dist/plugins/bitwarden/src/index.js +19 -0
  22. package/dist/plugins/box/src/index.js +11 -0
  23. package/dist/plugins/brandfetch/src/index.js +5 -0
  24. package/dist/plugins/brevo/src/index.js +15 -0
  25. package/dist/plugins/bubble/src/index.js +5 -0
  26. package/dist/plugins/chargebee/src/index.js +5 -0
  27. package/dist/plugins/circleci/src/index.js +3 -0
  28. package/dist/plugins/ciscoWebex/src/index.js +10 -0
  29. package/dist/plugins/clearbit/src/index.js +3 -0
  30. package/dist/plugins/clickup/src/index.js +61 -0
  31. package/dist/plugins/clockify/src/index.js +25 -0
  32. package/dist/plugins/cloudflare/src/index.js +4 -0
  33. package/dist/plugins/cockpit/src/index.js +5 -0
  34. package/dist/plugins/coda/src/index.js +18 -0
  35. package/dist/plugins/coingecko/src/index.js +10 -0
  36. package/dist/plugins/contentful/src/index.js +7 -0
  37. package/dist/plugins/convertkit/src/index.js +16 -0
  38. package/dist/plugins/copper/src/index.js +7 -0
  39. package/dist/plugins/cortex/src/index.js +4 -0
  40. package/dist/plugins/currents/src/index.js +22 -0
  41. package/dist/plugins/customerIo/src/index.js +9 -0
  42. package/dist/plugins/databricks/src/index.js +34 -0
  43. package/dist/plugins/deepl/src/index.js +2 -0
  44. package/dist/plugins/demio/src/index.js +4 -0
  45. package/dist/plugins/dhl/src/index.js +1 -0
  46. package/dist/plugins/discord/src/index.js +13 -0
  47. package/dist/plugins/discourse/src/index.js +16 -0
  48. package/dist/plugins/disqus/src/index.js +4 -0
  49. package/dist/plugins/docker/src/index.js +5 -0
  50. package/dist/plugins/drift/src/index.js +5 -0
  51. package/dist/plugins/dropbox/src/index.js +9 -0
  52. package/dist/plugins/dropcontact/src/index.js +2 -0
  53. package/dist/plugins/egoi/src/index.js +4 -0
  54. package/dist/plugins/elasticsearch/src/index.js +9 -0
  55. package/dist/plugins/emelia/src/index.js +9 -0
  56. package/dist/plugins/erpnext/src/index.js +5 -0
  57. package/dist/plugins/facebookGraph/src/index.js +1 -0
  58. package/dist/plugins/freshdesk/src/index.js +10 -0
  59. package/dist/plugins/freshservice/src/index.js +7 -0
  60. package/dist/plugins/freshworksCrm/src/index.js +7 -0
  61. package/dist/plugins/getresponse/src/index.js +5 -0
  62. package/dist/plugins/ghost/src/index.js +5 -0
  63. package/dist/plugins/github/src/index.js +37 -0
  64. package/dist/plugins/gitlab/src/index.js +17 -0
  65. package/dist/plugins/gmail/src/index.js +32 -0
  66. package/dist/plugins/gong/src/index.js +4 -0
  67. package/dist/plugins/googleAppsScript/src/index.js +10 -0
  68. package/dist/plugins/googleCalendar/src/index.js +22 -0
  69. package/dist/plugins/googleContacts/src/index.js +10 -0
  70. package/dist/plugins/googleDocs/src/documents.js +4 -0
  71. package/dist/plugins/googleDocs/src/formatting.js +2 -0
  72. package/dist/plugins/googleDocs/src/images.js +2 -0
  73. package/dist/plugins/googleDocs/src/structure.js +13 -0
  74. package/dist/plugins/googleDocs/src/tables.js +11 -0
  75. package/dist/plugins/googleDocs/src/tabs.js +3 -0
  76. package/dist/plugins/googleDocs/src/text.js +9 -0
  77. package/dist/plugins/googleDrive/src/index.js +47 -0
  78. package/dist/plugins/googleImage/src/index.js +1 -0
  79. package/dist/plugins/googleSheets/src/index.js +23 -0
  80. package/dist/plugins/googleSlides/src/index.js +7 -0
  81. package/dist/plugins/googleTasks/src/index.js +12 -0
  82. package/dist/plugins/gotify/src/index.js +3 -0
  83. package/dist/plugins/gotowebinar/src/index.js +20 -0
  84. package/dist/plugins/grafana/src/index.js +17 -0
  85. package/dist/plugins/graphql/src/index.js +2 -0
  86. package/dist/plugins/grist/src/index.js +4 -0
  87. package/dist/plugins/hackernews/src/index.js +6 -0
  88. package/dist/plugins/halopsa/src/index.js +5 -0
  89. package/dist/plugins/harvest/src/index.js +14 -0
  90. package/dist/plugins/helpscout/src/index.js +13 -0
  91. package/dist/plugins/highlevel/src/index.js +17 -0
  92. package/dist/plugins/homeAssistant/src/index.js +13 -0
  93. package/dist/plugins/hubspot/src/index.js +14 -0
  94. package/dist/plugins/humanticAi/src/index.js +3 -0
  95. package/dist/plugins/hunter/src/index.js +3 -0
  96. package/dist/plugins/intercom/src/index.js +10 -0
  97. package/dist/plugins/iterable/src/index.js +6 -0
  98. package/dist/plugins/jenkins/src/index.js +11 -0
  99. package/dist/plugins/jira/src/index.js +16 -0
  100. package/dist/plugins/keap/src/index.js +28 -0
  101. package/dist/plugins/kobotoolbox/src/index.js +17 -0
  102. package/dist/plugins/lemlist/src/index.js +15 -0
  103. package/dist/plugins/linear/src/attachments.js +6 -0
  104. package/dist/plugins/linear/src/comments.js +5 -0
  105. package/dist/plugins/linear/src/cycles.js +2 -0
  106. package/dist/plugins/linear/src/initiatives.js +5 -0
  107. package/dist/plugins/linear/src/issues.js +14 -0
  108. package/dist/plugins/linear/src/labels.js +5 -0
  109. package/dist/plugins/linear/src/organization.js +1 -0
  110. package/dist/plugins/linear/src/projects.js +11 -0
  111. package/dist/plugins/linear/src/shared.js +2 -0
  112. package/dist/plugins/linear/src/states.js +2 -0
  113. package/dist/plugins/linear/src/teams.js +3 -0
  114. package/dist/plugins/linear/src/users.js +2 -0
  115. package/dist/plugins/linear/src/views.js +4 -0
  116. package/dist/plugins/linear/src/webhooks.js +4 -0
  117. package/dist/plugins/lingvanex/src/index.js +1 -0
  118. package/dist/plugins/linkedin/src/index.js +1 -0
  119. package/dist/plugins/lonescale/src/index.js +4 -0
  120. package/dist/plugins/magento/src/index.js +15 -0
  121. package/dist/plugins/mailcheck/src/index.js +1 -0
  122. package/dist/plugins/mailchimp/src/index.js +14 -0
  123. package/dist/plugins/mailerlite/src/index.js +4 -0
  124. package/dist/plugins/mailgun/src/index.js +1 -0
  125. package/dist/plugins/mailjet/src/index.js +3 -0
  126. package/dist/plugins/mandrill/src/index.js +2 -0
  127. package/dist/plugins/marketstack/src/index.js +3 -0
  128. package/dist/plugins/matrix/src/index.js +10 -0
  129. package/dist/plugins/mattermost/src/index.js +19 -0
  130. package/dist/plugins/mautic/src/index.js +20 -0
  131. package/dist/plugins/medium/src/index.js +3 -0
  132. package/dist/plugins/messagebird/src/index.js +2 -0
  133. package/dist/plugins/metabase/src/index.js +10 -0
  134. package/dist/plugins/microsoftCalendar/src/index.js +2 -0
  135. package/dist/plugins/microsoftFiles/src/index.js +5 -0
  136. package/dist/plugins/microsoftMail/src/index.js +4 -0
  137. package/dist/plugins/misp/src/index.js +44 -0
  138. package/dist/plugins/mocean/src/index.js +2 -0
  139. package/dist/plugins/monday/src/index.js +18 -0
  140. package/dist/plugins/monicaCrm/src/index.js +5 -0
  141. package/dist/plugins/msg91/src/index.js +1 -0
  142. package/dist/plugins/nasa/src/index.js +7 -0
  143. package/dist/plugins/netlify/src/index.js +7 -0
  144. package/dist/plugins/netscalerAdc/src/index.js +3 -0
  145. package/dist/plugins/nextcloud/src/index.js +13 -0
  146. package/dist/plugins/nocodb/src/index.js +5 -0
  147. package/dist/plugins/node/src/index.js +38 -0
  148. package/dist/plugins/notion/src/index.js +14 -0
  149. package/dist/plugins/npm/src/index.js +5 -0
  150. package/dist/plugins/odoo/src/index.js +6 -0
  151. package/dist/plugins/okta/src/index.js +5 -0
  152. package/dist/plugins/oneSimpleApi/src/index.js +10 -0
  153. package/dist/plugins/onfleet/src/index.js +24 -0
  154. package/dist/plugins/openThesaurus/src/index.js +1 -0
  155. package/dist/plugins/openai/src/index.js +1 -0
  156. package/dist/plugins/openweathermap/src/index.js +2 -0
  157. package/dist/plugins/oura/src/index.js +2 -0
  158. package/dist/plugins/paddle/src/index.js +9 -0
  159. package/dist/plugins/pagerduty/src/index.js +9 -0
  160. package/dist/plugins/parallel/src/index.js +1 -0
  161. package/dist/plugins/paypal/src/index.js +4 -0
  162. package/dist/plugins/peekalink/src/index.js +2 -0
  163. package/dist/plugins/phantombuster/src/index.js +5 -0
  164. package/dist/plugins/philipsHue/src/index.js +4 -0
  165. package/dist/plugins/pipedrive/src/index.js +14 -0
  166. package/dist/plugins/plivo/src/index.js +3 -0
  167. package/dist/plugins/postbin/src/index.js +6 -0
  168. package/dist/plugins/posthog/src/index.js +5 -0
  169. package/dist/plugins/profitwell/src/index.js +2 -0
  170. package/dist/plugins/pushbullet/src/index.js +4 -0
  171. package/dist/plugins/pushcut/src/index.js +1 -0
  172. package/dist/plugins/pushover/src/index.js +1 -0
  173. package/dist/plugins/quickbase/src/index.js +8 -0
  174. package/dist/plugins/quickbooks/src/index.js +5 -0
  175. package/dist/plugins/quickchart/src/index.js +1 -0
  176. package/dist/plugins/raindrop/src/index.js +13 -0
  177. package/dist/plugins/recraft/src/index.js +1 -0
  178. package/dist/plugins/reddit/src/index.js +10 -0
  179. package/dist/plugins/replicate/src/index.js +1 -0
  180. package/dist/plugins/rocketchat/src/index.js +1 -0
  181. package/dist/plugins/rundeck/src/index.js +2 -0
  182. package/dist/plugins/salesforce/src/metadata.js +4 -0
  183. package/dist/plugins/salesforce/src/query.js +5 -0
  184. package/dist/plugins/salesforce/src/sobjects.js +12 -0
  185. package/dist/plugins/salesmate/src/index.js +5 -0
  186. package/dist/plugins/securityScorecard/src/index.js +14 -0
  187. package/dist/plugins/segment/src/index.js +4 -0
  188. package/dist/plugins/sendgrid/src/index.js +10 -0
  189. package/dist/plugins/sendy/src/index.js +6 -0
  190. package/dist/plugins/sentry/src/index.js +24 -0
  191. package/dist/plugins/servicenow/src/index.js +10 -0
  192. package/dist/plugins/shiftLabs/src/issues.js +4 -0
  193. package/dist/plugins/shiftLabs/src/pages.js +10 -0
  194. package/dist/plugins/shopify/src/index.js +10 -0
  195. package/dist/plugins/signl4/src/index.js +2 -0
  196. package/dist/plugins/slack/src/index.js +38 -0
  197. package/dist/plugins/sms77/src/index.js +2 -0
  198. package/dist/plugins/splunk/src/index.js +16 -0
  199. package/dist/plugins/spotify/src/index.js +30 -0
  200. package/dist/plugins/stackby/src/index.js +4 -0
  201. package/dist/plugins/steel/src/browser.js +7 -0
  202. package/dist/plugins/steel/src/captchas.js +3 -0
  203. package/dist/plugins/steel/src/credentials.js +4 -0
  204. package/dist/plugins/steel/src/extensions.js +5 -0
  205. package/dist/plugins/steel/src/files.js +10 -0
  206. package/dist/plugins/steel/src/profiles.js +4 -0
  207. package/dist/plugins/steel/src/sessions.js +11 -0
  208. package/dist/plugins/storyblok/src/index.js +7 -0
  209. package/dist/plugins/strapi/src/index.js +5 -0
  210. package/dist/plugins/strava/src/index.js +6 -0
  211. package/dist/plugins/stripe/src/index.js +20 -0
  212. package/dist/plugins/supabase/src/index.js +5 -0
  213. package/dist/plugins/syncromsp/src/index.js +20 -0
  214. package/dist/plugins/tapfiliate/src/index.js +11 -0
  215. package/dist/plugins/telegram/src/index.js +21 -0
  216. package/dist/plugins/thehive/src/index.js +23 -0
  217. package/dist/plugins/thehiveProject/src/index.js +31 -0
  218. package/dist/plugins/todoist/src/index.js +31 -0
  219. package/dist/plugins/together/src/index.js +1 -0
  220. package/dist/plugins/travisci/src/index.js +5 -0
  221. package/dist/plugins/trello/src/index.js +37 -0
  222. package/dist/plugins/twake/src/index.js +1 -0
  223. package/dist/plugins/twilio/src/index.js +2 -0
  224. package/dist/plugins/twist/src/index.js +22 -0
  225. package/dist/plugins/twitter/src/index.js +8 -0
  226. package/dist/plugins/unleashedSoftware/src/index.js +3 -0
  227. package/dist/plugins/uplead/src/index.js +2 -0
  228. package/dist/plugins/uproc/src/index.js +1 -0
  229. package/dist/plugins/uptimerobot/src/index.js +22 -0
  230. package/dist/plugins/urlscanio/src/index.js +3 -0
  231. package/dist/plugins/vercel/src/account.js +1 -0
  232. package/dist/plugins/vercel/src/deployments.js +5 -0
  233. package/dist/plugins/vercel/src/env.js +4 -0
  234. package/dist/plugins/vercel/src/projects.js +2 -0
  235. package/dist/plugins/vercel/src/shared.js +1 -0
  236. package/dist/plugins/vero/src/index.js +6 -0
  237. package/dist/plugins/vonage/src/index.js +1 -0
  238. package/dist/plugins/wekan/src/index.js +24 -0
  239. package/dist/plugins/woocommerce/src/index.js +5 -0
  240. package/dist/plugins/wordpress/src/index.js +10 -0
  241. package/dist/plugins/xai/src/index.js +1 -0
  242. package/dist/plugins/xero/src/index.js +8 -0
  243. package/dist/plugins/yourls/src/index.js +3 -0
  244. package/dist/plugins/zammad/src/index.js +12 -0
  245. package/dist/plugins/zendesk/src/index.js +18 -0
  246. package/dist/plugins/zoho/src/index.js +6 -0
  247. package/dist/plugins/zoom/src/index.js +5 -0
  248. package/dist/plugins/zulip/src/index.js +15 -0
  249. package/dist/sdk.d.ts +2 -1
  250. package/dist/sdk.js +1 -0
  251. package/package.json +1 -1
@@ -71,6 +71,7 @@ export default function splunk(rl) {
71
71
  });
72
72
  // ── Search Jobs ─────────────────────────────────────
73
73
  rl.registerAction("search.create", {
74
+ access: "write",
74
75
  description: "Create a search job",
75
76
  inputSchema: {
76
77
  search: { type: "string", required: true, description: "SPL query" },
@@ -107,6 +108,7 @@ export default function splunk(rl) {
107
108
  },
108
109
  });
109
110
  rl.registerAction("search.get", {
111
+ access: "read",
110
112
  description: "Get a search job by ID",
111
113
  inputSchema: { searchJobId: { type: "string", required: true } },
112
114
  async execute(input, ctx) {
@@ -115,6 +117,7 @@ export default function splunk(rl) {
115
117
  },
116
118
  });
117
119
  rl.registerAction("search.list", {
120
+ access: "read",
118
121
  description: "List search jobs",
119
122
  inputSchema: {
120
123
  limit: { type: "number", required: false },
@@ -137,6 +140,7 @@ export default function splunk(rl) {
137
140
  },
138
141
  });
139
142
  rl.registerAction("search.delete", {
143
+ access: "write",
140
144
  description: "Delete a search job",
141
145
  inputSchema: { searchJobId: { type: "string", required: true } },
142
146
  async execute(input, ctx) {
@@ -146,6 +150,7 @@ export default function splunk(rl) {
146
150
  },
147
151
  });
148
152
  rl.registerAction("search.getResults", {
153
+ access: "read",
149
154
  description: "Get results of a search job",
150
155
  inputSchema: {
151
156
  searchJobId: { type: "string", required: true },
@@ -176,6 +181,7 @@ export default function splunk(rl) {
176
181
  });
177
182
  // ── Alerts ──────────────────────────────────────────
178
183
  rl.registerAction("alert.getMetrics", {
184
+ access: "read",
179
185
  description: "Get metric alerts",
180
186
  inputSchema: {},
181
187
  async execute(_input, ctx) {
@@ -184,6 +190,7 @@ export default function splunk(rl) {
184
190
  },
185
191
  });
186
192
  rl.registerAction("alert.getFired", {
193
+ access: "read",
187
194
  description: "Get fired alerts report",
188
195
  inputSchema: {},
189
196
  async execute(_input, ctx) {
@@ -193,6 +200,7 @@ export default function splunk(rl) {
193
200
  });
194
201
  // ── Reports (Saved Searches) ────────────────────────
195
202
  rl.registerAction("report.create", {
203
+ access: "write",
196
204
  description: "Create a saved search / report from a search job",
197
205
  inputSchema: {
198
206
  name: { type: "string", required: true },
@@ -223,6 +231,7 @@ export default function splunk(rl) {
223
231
  },
224
232
  });
225
233
  rl.registerAction("report.get", {
234
+ access: "read",
226
235
  description: "Get a saved search / report",
227
236
  inputSchema: { reportId: { type: "string", required: true } },
228
237
  async execute(input, ctx) {
@@ -231,6 +240,7 @@ export default function splunk(rl) {
231
240
  },
232
241
  });
233
242
  rl.registerAction("report.list", {
243
+ access: "read",
234
244
  description: "List saved searches / reports",
235
245
  inputSchema: { limit: { type: "number", required: false } },
236
246
  async execute(input, ctx) {
@@ -245,6 +255,7 @@ export default function splunk(rl) {
245
255
  },
246
256
  });
247
257
  rl.registerAction("report.delete", {
258
+ access: "write",
248
259
  description: "Delete a saved search / report",
249
260
  inputSchema: { reportId: { type: "string", required: true } },
250
261
  async execute(input, ctx) {
@@ -255,6 +266,7 @@ export default function splunk(rl) {
255
266
  });
256
267
  // ── Users ───────────────────────────────────────────
257
268
  rl.registerAction("user.create", {
269
+ access: "write",
258
270
  description: "Create a Splunk user",
259
271
  inputSchema: {
260
272
  name: { type: "string", required: true, description: "Login name" },
@@ -283,6 +295,7 @@ export default function splunk(rl) {
283
295
  },
284
296
  });
285
297
  rl.registerAction("user.get", {
298
+ access: "read",
286
299
  description: "Get a user",
287
300
  inputSchema: {
288
301
  userId: { type: "string", required: true, description: "Username" },
@@ -293,6 +306,7 @@ export default function splunk(rl) {
293
306
  },
294
307
  });
295
308
  rl.registerAction("user.list", {
309
+ access: "read",
296
310
  description: "List users",
297
311
  inputSchema: { limit: { type: "number", required: false } },
298
312
  async execute(input, ctx) {
@@ -307,6 +321,7 @@ export default function splunk(rl) {
307
321
  },
308
322
  });
309
323
  rl.registerAction("user.update", {
324
+ access: "write",
310
325
  description: "Update a user",
311
326
  inputSchema: {
312
327
  userId: { type: "string", required: true, description: "Username" },
@@ -335,6 +350,7 @@ export default function splunk(rl) {
335
350
  },
336
351
  });
337
352
  rl.registerAction("user.delete", {
353
+ access: "write",
338
354
  description: "Delete a user",
339
355
  inputSchema: {
340
356
  userId: { type: "string", required: true, description: "Username" },
@@ -41,6 +41,7 @@ export default function spotify(rl) {
41
41
  const t = (ctx) => ctx.connection.config.accessToken;
42
42
  // ── Player ──────────────────────────────────────────
43
43
  rl.registerAction("player.pause", {
44
+ access: "write",
44
45
  description: "Pause playback",
45
46
  inputSchema: {},
46
47
  async execute(_i, ctx) {
@@ -48,6 +49,7 @@ export default function spotify(rl) {
48
49
  },
49
50
  });
50
51
  rl.registerAction("player.resume", {
52
+ access: "write",
51
53
  description: "Resume playback",
52
54
  inputSchema: {},
53
55
  async execute(_i, ctx) {
@@ -55,6 +57,7 @@ export default function spotify(rl) {
55
57
  },
56
58
  });
57
59
  rl.registerAction("player.next", {
60
+ access: "write",
58
61
  description: "Skip to next track",
59
62
  inputSchema: {},
60
63
  async execute(_i, ctx) {
@@ -62,6 +65,7 @@ export default function spotify(rl) {
62
65
  },
63
66
  });
64
67
  rl.registerAction("player.previous", {
68
+ access: "write",
65
69
  description: "Skip to previous track",
66
70
  inputSchema: {},
67
71
  async execute(_i, ctx) {
@@ -69,6 +73,7 @@ export default function spotify(rl) {
69
73
  },
70
74
  });
71
75
  rl.registerAction("player.currentlyPlaying", {
76
+ access: "read",
72
77
  description: "Get currently playing track",
73
78
  inputSchema: {},
74
79
  async execute(_i, ctx) {
@@ -76,6 +81,7 @@ export default function spotify(rl) {
76
81
  },
77
82
  });
78
83
  rl.registerAction("player.recentlyPlayed", {
84
+ access: "read",
79
85
  description: "Get recently played tracks",
80
86
  inputSchema: { limit: { type: "number", required: false } },
81
87
  async execute(input, ctx) {
@@ -87,6 +93,7 @@ export default function spotify(rl) {
87
93
  },
88
94
  });
89
95
  rl.registerAction("player.addToQueue", {
96
+ access: "write",
90
97
  description: "Add a track to the queue",
91
98
  inputSchema: {
92
99
  uri: { type: "string", required: true, description: "Track URI or ID" },
@@ -98,6 +105,7 @@ export default function spotify(rl) {
98
105
  },
99
106
  });
100
107
  rl.registerAction("player.setVolume", {
108
+ access: "write",
101
109
  description: "Set playback volume",
102
110
  inputSchema: {
103
111
  volumePercent: { type: "number", required: true, description: "0-100" },
@@ -109,6 +117,7 @@ export default function spotify(rl) {
109
117
  },
110
118
  });
111
119
  rl.registerAction("player.startMusic", {
120
+ access: "write",
112
121
  description: "Start playing an album, artist, or playlist",
113
122
  inputSchema: {
114
123
  contextUri: {
@@ -125,6 +134,7 @@ export default function spotify(rl) {
125
134
  });
126
135
  // ── Album ───────────────────────────────────────────
127
136
  rl.registerAction("album.get", {
137
+ access: "read",
128
138
  description: "Get an album",
129
139
  inputSchema: { id: { type: "string", required: true } },
130
140
  async execute(input, ctx) {
@@ -132,6 +142,7 @@ export default function spotify(rl) {
132
142
  },
133
143
  });
134
144
  rl.registerAction("album.getTracks", {
145
+ access: "read",
135
146
  description: "Get an album's tracks",
136
147
  inputSchema: {
137
148
  id: { type: "string", required: true },
@@ -147,6 +158,7 @@ export default function spotify(rl) {
147
158
  },
148
159
  });
149
160
  rl.registerAction("album.getNewReleases", {
161
+ access: "read",
150
162
  description: "Get new album releases",
151
163
  inputSchema: {
152
164
  limit: { type: "number", required: false },
@@ -164,6 +176,7 @@ export default function spotify(rl) {
164
176
  },
165
177
  });
166
178
  rl.registerAction("album.search", {
179
+ access: "read",
167
180
  description: "Search albums",
168
181
  inputSchema: {
169
182
  query: { type: "string", required: true },
@@ -182,6 +195,7 @@ export default function spotify(rl) {
182
195
  });
183
196
  // ── Artist ──────────────────────────────────────────
184
197
  rl.registerAction("artist.get", {
198
+ access: "read",
185
199
  description: "Get an artist",
186
200
  inputSchema: { id: { type: "string", required: true } },
187
201
  async execute(input, ctx) {
@@ -189,6 +203,7 @@ export default function spotify(rl) {
189
203
  },
190
204
  });
191
205
  rl.registerAction("artist.getAlbums", {
206
+ access: "read",
192
207
  description: "Get an artist's albums",
193
208
  inputSchema: {
194
209
  id: { type: "string", required: true },
@@ -204,6 +219,7 @@ export default function spotify(rl) {
204
219
  },
205
220
  });
206
221
  rl.registerAction("artist.getRelatedArtists", {
222
+ access: "read",
207
223
  description: "Get related artists",
208
224
  inputSchema: { id: { type: "string", required: true } },
209
225
  async execute(input, ctx) {
@@ -212,6 +228,7 @@ export default function spotify(rl) {
212
228
  },
213
229
  });
214
230
  rl.registerAction("artist.getTopTracks", {
231
+ access: "read",
215
232
  description: "Get an artist's top tracks",
216
233
  inputSchema: {
217
234
  id: { type: "string", required: true },
@@ -224,6 +241,7 @@ export default function spotify(rl) {
224
241
  },
225
242
  });
226
243
  rl.registerAction("artist.search", {
244
+ access: "read",
227
245
  description: "Search artists",
228
246
  inputSchema: {
229
247
  query: { type: "string", required: true },
@@ -242,6 +260,7 @@ export default function spotify(rl) {
242
260
  });
243
261
  // ── Playlist ────────────────────────────────────────
244
262
  rl.registerAction("playlist.get", {
263
+ access: "read",
245
264
  description: "Get a playlist",
246
265
  inputSchema: { id: { type: "string", required: true } },
247
266
  async execute(input, ctx) {
@@ -249,6 +268,7 @@ export default function spotify(rl) {
249
268
  },
250
269
  });
251
270
  rl.registerAction("playlist.getTracks", {
271
+ access: "read",
252
272
  description: "Get a playlist's tracks",
253
273
  inputSchema: {
254
274
  id: { type: "string", required: true },
@@ -264,6 +284,7 @@ export default function spotify(rl) {
264
284
  },
265
285
  });
266
286
  rl.registerAction("playlist.create", {
287
+ access: "write",
267
288
  description: "Create a playlist",
268
289
  inputSchema: {
269
290
  name: { type: "string", required: true },
@@ -275,6 +296,7 @@ export default function spotify(rl) {
275
296
  },
276
297
  });
277
298
  rl.registerAction("playlist.addTrack", {
299
+ access: "write",
278
300
  description: "Add a track to a playlist",
279
301
  inputSchema: {
280
302
  id: { type: "string", required: true },
@@ -290,6 +312,7 @@ export default function spotify(rl) {
290
312
  },
291
313
  });
292
314
  rl.registerAction("playlist.removeTrack", {
315
+ access: "write",
293
316
  description: "Remove a track from a playlist",
294
317
  inputSchema: {
295
318
  id: { type: "string", required: true },
@@ -301,6 +324,7 @@ export default function spotify(rl) {
301
324
  },
302
325
  });
303
326
  rl.registerAction("playlist.listMine", {
327
+ access: "read",
304
328
  description: "Get the current user's playlists",
305
329
  inputSchema: { limit: { type: "number", required: false } },
306
330
  async execute(input, ctx) {
@@ -312,6 +336,7 @@ export default function spotify(rl) {
312
336
  },
313
337
  });
314
338
  rl.registerAction("playlist.search", {
339
+ access: "read",
315
340
  description: "Search playlists",
316
341
  inputSchema: {
317
342
  query: { type: "string", required: true },
@@ -330,6 +355,7 @@ export default function spotify(rl) {
330
355
  });
331
356
  // ── Track ───────────────────────────────────────────
332
357
  rl.registerAction("track.get", {
358
+ access: "read",
333
359
  description: "Get a track",
334
360
  inputSchema: { id: { type: "string", required: true } },
335
361
  async execute(input, ctx) {
@@ -337,6 +363,7 @@ export default function spotify(rl) {
337
363
  },
338
364
  });
339
365
  rl.registerAction("track.getAudioFeatures", {
366
+ access: "read",
340
367
  description: "Get audio features for a track",
341
368
  inputSchema: { id: { type: "string", required: true } },
342
369
  async execute(input, ctx) {
@@ -344,6 +371,7 @@ export default function spotify(rl) {
344
371
  },
345
372
  });
346
373
  rl.registerAction("track.search", {
374
+ access: "read",
347
375
  description: "Search tracks",
348
376
  inputSchema: {
349
377
  query: { type: "string", required: true },
@@ -362,6 +390,7 @@ export default function spotify(rl) {
362
390
  });
363
391
  // ── Library ─────────────────────────────────────────
364
392
  rl.registerAction("library.getLikedTracks", {
393
+ access: "read",
365
394
  description: "Get liked tracks",
366
395
  inputSchema: { limit: { type: "number", required: false } },
367
396
  async execute(input, ctx) {
@@ -374,6 +403,7 @@ export default function spotify(rl) {
374
403
  });
375
404
  // ── My Data ─────────────────────────────────────────
376
405
  rl.registerAction("myData.getFollowingArtists", {
406
+ access: "read",
377
407
  description: "Get followed artists",
378
408
  inputSchema: { limit: { type: "number", required: false } },
379
409
  async execute(input, ctx) {
@@ -31,6 +31,7 @@ export default function stackby(rl) {
31
31
  });
32
32
  const key = (ctx) => ctx.connection.config.apiKey;
33
33
  rl.registerAction("row.read", {
34
+ access: "read",
34
35
  description: "Read a row by ID",
35
36
  inputSchema: {
36
37
  stackId: { type: "string", required: true },
@@ -44,6 +45,7 @@ export default function stackby(rl) {
44
45
  },
45
46
  });
46
47
  rl.registerAction("row.list", {
48
+ access: "read",
47
49
  description: "List rows from a table",
48
50
  inputSchema: {
49
51
  stackId: { type: "string", required: true },
@@ -63,6 +65,7 @@ export default function stackby(rl) {
63
65
  },
64
66
  });
65
67
  rl.registerAction("row.append", {
68
+ access: "write",
66
69
  description: "Append rows to a table",
67
70
  inputSchema: {
68
71
  stackId: { type: "string", required: true },
@@ -80,6 +83,7 @@ export default function stackby(rl) {
80
83
  },
81
84
  });
82
85
  rl.registerAction("row.delete", {
86
+ access: "write",
83
87
  description: "Delete a row by ID",
84
88
  inputSchema: {
85
89
  stackId: { type: "string", required: true },
@@ -83,26 +83,31 @@ async function connectMiniCdp(cdpUrl) {
83
83
  }
84
84
  export function registerBrowserActions(rl) {
85
85
  rl.registerAction("scrape", {
86
+ access: "write",
86
87
  description: "One-shot Steel scrape. Loads a URL and returns requested formats such as markdown, html, cleaned_html, or readability.",
87
88
  inputSchema: t.Object(SCRAPE_SCHEMA),
88
89
  execute: scrape,
89
90
  });
90
91
  rl.registerAction("browser.scrape", {
92
+ access: "write",
91
93
  description: "Backward-compatible alias for scrape.",
92
94
  inputSchema: t.Object(SCRAPE_SCHEMA),
93
95
  execute: scrape,
94
96
  });
95
97
  rl.registerAction("screenshot", {
98
+ access: "write",
96
99
  description: "One-shot Steel screenshot. Returns a hosted PNG URL.",
97
100
  inputSchema: t.Object(SCREENSHOT_SCHEMA),
98
101
  execute: screenshot,
99
102
  });
100
103
  rl.registerAction("browser.screenshot", {
104
+ access: "write",
101
105
  description: "Backward-compatible alias for screenshot.",
102
106
  inputSchema: t.Object(SCREENSHOT_SCHEMA),
103
107
  execute: screenshot,
104
108
  });
105
109
  rl.registerAction("browser.extract", {
110
+ access: "write",
106
111
  description: "Fetch a page through Steel scrape and return selected content fields. Use selectors with browser.run for DOM-specific extraction.",
107
112
  inputSchema: t.Object({
108
113
  url: t.String({ description: "URL to scrape" }),
@@ -116,6 +121,7 @@ export function registerBrowserActions(rl) {
116
121
  },
117
122
  });
118
123
  rl.registerAction("pdf", {
124
+ access: "write",
119
125
  description: "One-shot Steel PDF capture. Returns a hosted PDF URL.",
120
126
  inputSchema: t.Object({
121
127
  url: t.String({ description: "URL to render as PDF" }),
@@ -127,6 +133,7 @@ export function registerBrowserActions(rl) {
127
133
  },
128
134
  });
129
135
  rl.registerAction("browser.run", {
136
+ access: "write",
130
137
  description: "Create a Steel session, connect with Playwright over CDP, run an async JavaScript script, then release by default. The script receives { page, browser, context, session }. Requires the host app to have playwright installed.",
131
138
  inputSchema: t.Object({
132
139
  script: t.String({ description: "Async JavaScript body. Example: await page.goto('https://example.com'); return { title: await page.title() };" }),
@@ -2,16 +2,19 @@ import * as t from "typebox";
2
2
  import { api, compactRecord } from "./shared.js";
3
3
  export function registerCaptchaActions(rl) {
4
4
  rl.registerAction("captcha.status", {
5
+ access: "read",
5
6
  description: "Get CAPTCHA detection/solving status for a Steel session.",
6
7
  inputSchema: t.Object({ sessionId: t.String() }),
7
8
  async execute(input, ctx) { return api(ctx, `/v1/sessions/${encodeURIComponent(input.sessionId)}/captchas/status`); },
8
9
  });
9
10
  rl.registerAction("captcha.solve", {
11
+ access: "write",
10
12
  description: "Trigger CAPTCHA solving for all detected CAPTCHAs or a specific task/url/page.",
11
13
  inputSchema: t.Object({ sessionId: t.String(), taskId: t.Optional(t.String()), url: t.Optional(t.String()), pageId: t.Optional(t.String()) }),
12
14
  async execute(input, ctx) { const { sessionId, ...body } = input; return api(ctx, `/v1/sessions/${encodeURIComponent(String(sessionId))}/captchas/solve`, { method: "POST", body: compactRecord(body) }); },
13
15
  });
14
16
  rl.registerAction("captcha.solveImage", {
17
+ access: "write",
15
18
  description: "Solve an image CAPTCHA by XPath selectors.",
16
19
  inputSchema: t.Object({ sessionId: t.String(), imageXPath: t.String(), inputXPath: t.String(), url: t.Optional(t.String()) }),
17
20
  async execute(input, ctx) { const { sessionId, ...body } = input; return api(ctx, `/v1/sessions/${encodeURIComponent(String(sessionId))}/captchas/solve-image`, { method: "POST", body: compactRecord(body) }); },
@@ -6,6 +6,7 @@ const CREDENTIAL_KEY_SCHEMA = {
6
6
  };
7
7
  export function registerCredentialActions(rl) {
8
8
  rl.registerAction("credential.list", {
9
+ access: "read",
9
10
  description: "List Steel credentials. Filter by origin and/or namespace.",
10
11
  inputSchema: t.Object({ namespace: t.Optional(t.String()), origin: t.Optional(t.String()) }),
11
12
  async execute(input, ctx) {
@@ -13,6 +14,7 @@ export function registerCredentialActions(rl) {
13
14
  },
14
15
  });
15
16
  rl.registerAction("credential.create", {
17
+ access: "write",
16
18
  description: "Create a Steel credential for an origin/namespace. Value may include username, password, and totpSecret.",
17
19
  inputSchema: t.Object({ ...CREDENTIAL_KEY_SCHEMA, value: t.Any({ description: "Credential payload" }) }),
18
20
  async execute(input, ctx) {
@@ -20,6 +22,7 @@ export function registerCredentialActions(rl) {
20
22
  },
21
23
  });
22
24
  rl.registerAction("credential.get", {
25
+ access: "read",
23
26
  description: "Retrieve credential metadata by origin and optional namespace.",
24
27
  inputSchema: t.Object(CREDENTIAL_KEY_SCHEMA),
25
28
  async execute(input, ctx) {
@@ -29,6 +32,7 @@ export function registerCredentialActions(rl) {
29
32
  },
30
33
  });
31
34
  rl.registerAction("credential.delete", {
35
+ access: "write",
32
36
  description: "Delete a Steel credential by origin and optional namespace.",
33
37
  inputSchema: t.Object(CREDENTIAL_KEY_SCHEMA),
34
38
  async execute(input, ctx) {
@@ -8,6 +8,7 @@ function extensionForm(input) {
8
8
  }
9
9
  export function registerExtensionActions(rl) {
10
10
  rl.registerAction("extension.list", {
11
+ access: "read",
11
12
  description: "List Steel Chrome extensions installed for the organization.",
12
13
  inputSchema: t.Object({}),
13
14
  async execute(_input, ctx) {
@@ -15,6 +16,7 @@ export function registerExtensionActions(rl) {
15
16
  },
16
17
  });
17
18
  rl.registerAction("extension.upload", {
19
+ access: "write",
18
20
  description: "Upload an extension from a Chrome Web Store URL. Raw zip/crx uploads should use the API directly.",
19
21
  inputSchema: t.Object({ url: t.String() }),
20
22
  async execute(input, ctx) {
@@ -22,6 +24,7 @@ export function registerExtensionActions(rl) {
22
24
  },
23
25
  });
24
26
  rl.registerAction("extension.update", {
27
+ access: "write",
25
28
  description: "Update an extension from a Chrome Web Store URL.",
26
29
  inputSchema: t.Object({ id: t.String(), url: t.String() }),
27
30
  async execute(input, ctx) {
@@ -30,6 +33,7 @@ export function registerExtensionActions(rl) {
30
33
  },
31
34
  });
32
35
  rl.registerAction("extension.delete", {
36
+ access: "write",
33
37
  description: "Delete an extension by ID.",
34
38
  inputSchema: t.Object({ id: t.String() }),
35
39
  async execute(input, ctx) {
@@ -37,6 +41,7 @@ export function registerExtensionActions(rl) {
37
41
  },
38
42
  });
39
43
  rl.registerAction("extension.deleteAll", {
44
+ access: "write",
40
45
  description: "Delete all organization extensions.",
41
46
  inputSchema: t.Object({}),
42
47
  async execute(_input, ctx) {
@@ -21,6 +21,7 @@ function encodeFilePath(path) {
21
21
  }
22
22
  export function registerFileActions(rl) {
23
23
  rl.registerAction("file.list", {
24
+ access: "read",
24
25
  description: "List global Steel files.",
25
26
  inputSchema: t.Object({}),
26
27
  async execute(_input, ctx) {
@@ -28,6 +29,7 @@ export function registerFileActions(rl) {
28
29
  },
29
30
  });
30
31
  rl.registerAction("file.upload", {
32
+ access: "write",
31
33
  description: "Upload a global file from a URL or existing path reference.",
32
34
  inputSchema: t.Object(fileSchema()),
33
35
  async execute(input, ctx) {
@@ -35,6 +37,7 @@ export function registerFileActions(rl) {
35
37
  },
36
38
  });
37
39
  rl.registerAction("file.download", {
40
+ access: "read",
38
41
  description: "Download/read a global file by path. Binary files are returned as text by fetch when possible; use the URL/API directly for raw bytes.",
39
42
  inputSchema: t.Object({ path: t.String() }),
40
43
  async execute(input, ctx) {
@@ -42,6 +45,7 @@ export function registerFileActions(rl) {
42
45
  },
43
46
  });
44
47
  rl.registerAction("file.delete", {
48
+ access: "write",
45
49
  description: "Delete a global Steel file by path.",
46
50
  inputSchema: t.Object({ path: t.String() }),
47
51
  async execute(input, ctx) {
@@ -49,6 +53,7 @@ export function registerFileActions(rl) {
49
53
  },
50
54
  });
51
55
  rl.registerAction("sessionFile.list", {
56
+ access: "read",
52
57
  description: "List files in a Steel session filesystem.",
53
58
  inputSchema: t.Object({ sessionId: t.String() }),
54
59
  async execute(input, ctx) {
@@ -56,6 +61,7 @@ export function registerFileActions(rl) {
56
61
  },
57
62
  });
58
63
  rl.registerAction("sessionFile.upload", {
64
+ access: "write",
59
65
  description: "Upload/copy a URL or global file into a session filesystem.",
60
66
  inputSchema: t.Object({ sessionId: t.String(), ...fileSchema() }),
61
67
  async execute(input, ctx) {
@@ -64,6 +70,7 @@ export function registerFileActions(rl) {
64
70
  },
65
71
  });
66
72
  rl.registerAction("sessionFile.download", {
73
+ access: "read",
67
74
  description: "Download/read a session file by path.",
68
75
  inputSchema: t.Object({ sessionId: t.String(), path: t.String() }),
69
76
  async execute(input, ctx) {
@@ -72,6 +79,7 @@ export function registerFileActions(rl) {
72
79
  },
73
80
  });
74
81
  rl.registerAction("sessionFile.downloadArchive", {
82
+ access: "read",
75
83
  description: "Download/read the zip archive of all files in a session.",
76
84
  inputSchema: t.Object({ sessionId: t.String() }),
77
85
  async execute(input, ctx) {
@@ -79,6 +87,7 @@ export function registerFileActions(rl) {
79
87
  },
80
88
  });
81
89
  rl.registerAction("sessionFile.delete", {
90
+ access: "write",
82
91
  description: "Delete a file from a session filesystem.",
83
92
  inputSchema: t.Object({ sessionId: t.String(), path: t.String() }),
84
93
  async execute(input, ctx) {
@@ -87,6 +96,7 @@ export function registerFileActions(rl) {
87
96
  },
88
97
  });
89
98
  rl.registerAction("sessionFile.deleteAll", {
99
+ access: "write",
90
100
  description: "Delete all files in a session filesystem.",
91
101
  inputSchema: t.Object({ sessionId: t.String() }),
92
102
  async execute(input, ctx) {
@@ -11,6 +11,7 @@ function profileForm(input) {
11
11
  }
12
12
  export function registerProfileActions(rl) {
13
13
  rl.registerAction("profile.list", {
14
+ access: "read",
14
15
  description: "List Steel browser profiles.",
15
16
  inputSchema: t.Object({}),
16
17
  async execute(_input, ctx) {
@@ -18,6 +19,7 @@ export function registerProfileActions(rl) {
18
19
  },
19
20
  });
20
21
  rl.registerAction("profile.get", {
22
+ access: "read",
21
23
  description: "Get a Steel profile by ID.",
22
24
  inputSchema: t.Object({ id: t.String() }),
23
25
  async execute(input, ctx) {
@@ -25,6 +27,7 @@ export function registerProfileActions(rl) {
25
27
  },
26
28
  });
27
29
  rl.registerAction("profile.create", {
30
+ access: "write",
28
31
  description: "Create an empty persisted Steel profile by opening and releasing a short-lived session with persistProfile=true. For userDataDir archive imports, use the Steel API directly.",
29
32
  inputSchema: t.Object({
30
33
  timeout: t.Optional(t.Number({ description: "Temporary session timeout in milliseconds" })),
@@ -45,6 +48,7 @@ export function registerProfileActions(rl) {
45
48
  },
46
49
  });
47
50
  rl.registerAction("profile.update", {
51
+ access: "write",
48
52
  description: "Update profile metadata/settings used by later sessions.",
49
53
  inputSchema: t.Object({ id: t.String(), userAgent: t.Optional(t.String()), proxy: t.Optional(t.Any()), metadata: t.Optional(t.Any()) }),
50
54
  async execute(input, ctx) {