runline 0.11.5 → 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 (253) 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/index.js +15 -0
  193. package/dist/plugins/shiftLabs/src/issues.js +74 -0
  194. package/dist/plugins/shiftLabs/src/pages.js +148 -0
  195. package/dist/plugins/shiftLabs/src/shared.js +69 -0
  196. package/dist/plugins/shopify/src/index.js +10 -0
  197. package/dist/plugins/signl4/src/index.js +2 -0
  198. package/dist/plugins/slack/src/index.js +38 -0
  199. package/dist/plugins/sms77/src/index.js +2 -0
  200. package/dist/plugins/splunk/src/index.js +16 -0
  201. package/dist/plugins/spotify/src/index.js +30 -0
  202. package/dist/plugins/stackby/src/index.js +4 -0
  203. package/dist/plugins/steel/src/browser.js +7 -0
  204. package/dist/plugins/steel/src/captchas.js +3 -0
  205. package/dist/plugins/steel/src/credentials.js +4 -0
  206. package/dist/plugins/steel/src/extensions.js +5 -0
  207. package/dist/plugins/steel/src/files.js +10 -0
  208. package/dist/plugins/steel/src/profiles.js +4 -0
  209. package/dist/plugins/steel/src/sessions.js +11 -0
  210. package/dist/plugins/storyblok/src/index.js +7 -0
  211. package/dist/plugins/strapi/src/index.js +5 -0
  212. package/dist/plugins/strava/src/index.js +6 -0
  213. package/dist/plugins/stripe/src/index.js +20 -0
  214. package/dist/plugins/supabase/src/index.js +5 -0
  215. package/dist/plugins/syncromsp/src/index.js +20 -0
  216. package/dist/plugins/tapfiliate/src/index.js +11 -0
  217. package/dist/plugins/telegram/src/index.js +21 -0
  218. package/dist/plugins/thehive/src/index.js +23 -0
  219. package/dist/plugins/thehiveProject/src/index.js +31 -0
  220. package/dist/plugins/todoist/src/index.js +31 -0
  221. package/dist/plugins/together/src/index.js +1 -0
  222. package/dist/plugins/travisci/src/index.js +5 -0
  223. package/dist/plugins/trello/src/index.js +37 -0
  224. package/dist/plugins/twake/src/index.js +1 -0
  225. package/dist/plugins/twilio/src/index.js +2 -0
  226. package/dist/plugins/twist/src/index.js +22 -0
  227. package/dist/plugins/twitter/src/index.js +8 -0
  228. package/dist/plugins/unleashedSoftware/src/index.js +3 -0
  229. package/dist/plugins/uplead/src/index.js +2 -0
  230. package/dist/plugins/uproc/src/index.js +1 -0
  231. package/dist/plugins/uptimerobot/src/index.js +22 -0
  232. package/dist/plugins/urlscanio/src/index.js +3 -0
  233. package/dist/plugins/vercel/src/account.js +1 -0
  234. package/dist/plugins/vercel/src/deployments.js +5 -0
  235. package/dist/plugins/vercel/src/env.js +4 -0
  236. package/dist/plugins/vercel/src/projects.js +2 -0
  237. package/dist/plugins/vercel/src/shared.js +1 -0
  238. package/dist/plugins/vero/src/index.js +6 -0
  239. package/dist/plugins/vonage/src/index.js +1 -0
  240. package/dist/plugins/wekan/src/index.js +24 -0
  241. package/dist/plugins/woocommerce/src/index.js +5 -0
  242. package/dist/plugins/wordpress/src/index.js +10 -0
  243. package/dist/plugins/xai/src/index.js +1 -0
  244. package/dist/plugins/xero/src/index.js +8 -0
  245. package/dist/plugins/yourls/src/index.js +3 -0
  246. package/dist/plugins/zammad/src/index.js +12 -0
  247. package/dist/plugins/zendesk/src/index.js +18 -0
  248. package/dist/plugins/zoho/src/index.js +6 -0
  249. package/dist/plugins/zoom/src/index.js +5 -0
  250. package/dist/plugins/zulip/src/index.js +15 -0
  251. package/dist/sdk.d.ts +2 -1
  252. package/dist/sdk.js +1 -0
  253. package/package.json +1 -1
@@ -52,6 +52,7 @@ export default function lemlist(rl) {
52
52
  const key = (ctx) => ctx.connection.config.apiKey;
53
53
  // ── Activity ────────────────────────────────────────
54
54
  rl.registerAction("activity.list", {
55
+ access: "read",
55
56
  description: "List activities",
56
57
  inputSchema: {
57
58
  limit: { type: "number", required: false, description: "Max results" },
@@ -89,6 +90,7 @@ export default function lemlist(rl) {
89
90
  });
90
91
  // ── Campaign ────────────────────────────────────────
91
92
  rl.registerAction("campaign.list", {
93
+ access: "read",
92
94
  description: "List campaigns",
93
95
  inputSchema: {
94
96
  limit: { type: "number", required: false },
@@ -103,6 +105,7 @@ export default function lemlist(rl) {
103
105
  },
104
106
  });
105
107
  rl.registerAction("campaign.getStats", {
108
+ access: "read",
106
109
  description: "Get campaign statistics",
107
110
  inputSchema: {
108
111
  campaignId: { type: "string", required: true },
@@ -129,6 +132,7 @@ export default function lemlist(rl) {
129
132
  });
130
133
  // ── Lead ────────────────────────────────────────────
131
134
  rl.registerAction("lead.create", {
135
+ access: "write",
132
136
  description: "Add a lead to a campaign",
133
137
  inputSchema: {
134
138
  campaignId: { type: "string", required: true },
@@ -165,6 +169,7 @@ export default function lemlist(rl) {
165
169
  },
166
170
  });
167
171
  rl.registerAction("lead.get", {
172
+ access: "read",
168
173
  description: "Get a lead by email",
169
174
  inputSchema: { email: { type: "string", required: true } },
170
175
  async execute(input, ctx) {
@@ -172,6 +177,7 @@ export default function lemlist(rl) {
172
177
  },
173
178
  });
174
179
  rl.registerAction("lead.delete", {
180
+ access: "write",
175
181
  description: "Remove a lead from a campaign (keeps lead in unsubscribe list)",
176
182
  inputSchema: {
177
183
  campaignId: { type: "string", required: true },
@@ -183,6 +189,7 @@ export default function lemlist(rl) {
183
189
  },
184
190
  });
185
191
  rl.registerAction("lead.unsubscribe", {
192
+ access: "write",
186
193
  description: "Unsubscribe a lead from a campaign",
187
194
  inputSchema: {
188
195
  campaignId: { type: "string", required: true },
@@ -195,12 +202,14 @@ export default function lemlist(rl) {
195
202
  });
196
203
  // ── Team ────────────────────────────────────────────
197
204
  rl.registerAction("team.get", {
205
+ access: "read",
198
206
  description: "Get team information",
199
207
  async execute(_input, ctx) {
200
208
  return apiRequest(key(ctx), "GET", "/team");
201
209
  },
202
210
  });
203
211
  rl.registerAction("team.getCredits", {
212
+ access: "read",
204
213
  description: "Get team credits",
205
214
  async execute(_input, ctx) {
206
215
  return apiRequest(key(ctx), "GET", "/team/credits");
@@ -208,6 +217,7 @@ export default function lemlist(rl) {
208
217
  });
209
218
  // ── Unsubscribe ─────────────────────────────────────
210
219
  rl.registerAction("unsubscribe.add", {
220
+ access: "write",
211
221
  description: "Add an email to the unsubscribe list",
212
222
  inputSchema: { email: { type: "string", required: true } },
213
223
  async execute(input, ctx) {
@@ -215,6 +225,7 @@ export default function lemlist(rl) {
215
225
  },
216
226
  });
217
227
  rl.registerAction("unsubscribe.delete", {
228
+ access: "write",
218
229
  description: "Remove an email from the unsubscribe list",
219
230
  inputSchema: { email: { type: "string", required: true } },
220
231
  async execute(input, ctx) {
@@ -222,6 +233,7 @@ export default function lemlist(rl) {
222
233
  },
223
234
  });
224
235
  rl.registerAction("unsubscribe.list", {
236
+ access: "read",
225
237
  description: "List all unsubscribed emails",
226
238
  inputSchema: { limit: { type: "number", required: false } },
227
239
  async execute(input, ctx) {
@@ -235,6 +247,7 @@ export default function lemlist(rl) {
235
247
  });
236
248
  // ── Enrichment ──────────────────────────────────────
237
249
  rl.registerAction("enrich.get", {
250
+ access: "read",
238
251
  description: "Get an enrichment result by ID",
239
252
  inputSchema: { enrichId: { type: "string", required: true } },
240
253
  async execute(input, ctx) {
@@ -242,6 +255,7 @@ export default function lemlist(rl) {
242
255
  },
243
256
  });
244
257
  rl.registerAction("enrich.lead", {
258
+ access: "write",
245
259
  description: "Enrich a lead by ID",
246
260
  inputSchema: {
247
261
  leadId: { type: "string", required: true },
@@ -261,6 +275,7 @@ export default function lemlist(rl) {
261
275
  },
262
276
  });
263
277
  rl.registerAction("enrich.person", {
278
+ access: "write",
264
279
  description: "Enrich a person (without existing lead)",
265
280
  inputSchema: {
266
281
  findEmail: { type: "boolean", required: true },
@@ -2,6 +2,7 @@ import * as t from "typebox";
2
2
  import { ATTACHMENT_FIELDS, assertAttachmentInScope, assertIssueInScope, gql, key, requireUnscoped, } from "./shared.js";
3
3
  export function registerAttachmentActions(rl) {
4
4
  rl.registerAction("attachment.list", {
5
+ access: "read",
5
6
  description: "List issue attachments. Disabled for scoped Linear connections.",
6
7
  inputSchema: t.Object({ limit: t.Optional(t.Number()) }),
7
8
  async execute(input, ctx) {
@@ -12,6 +13,7 @@ export function registerAttachmentActions(rl) {
12
13
  },
13
14
  });
14
15
  rl.registerAction("attachment.get", {
16
+ access: "read",
15
17
  description: "Get an attachment by ID.",
16
18
  inputSchema: t.Object({ id: t.String() }),
17
19
  async execute(input, ctx) {
@@ -22,6 +24,7 @@ export function registerAttachmentActions(rl) {
22
24
  },
23
25
  });
24
26
  rl.registerAction("attachment.create", {
27
+ access: "write",
25
28
  description: "Create an attachment on an issue.",
26
29
  inputSchema: t.Object({
27
30
  issueId: t.String({
@@ -54,6 +57,7 @@ export function registerAttachmentActions(rl) {
54
57
  },
55
58
  });
56
59
  rl.registerAction("attachment.update", {
60
+ access: "write",
57
61
  description: "Update an attachment. title is required.",
58
62
  inputSchema: t.Object({
59
63
  id: t.String({
@@ -74,6 +78,7 @@ export function registerAttachmentActions(rl) {
74
78
  },
75
79
  });
76
80
  rl.registerAction("attachment.linkURL", {
81
+ access: "write",
77
82
  description: "Link any URL to an issue. If a workspace integration matches the URL (Zendesk, GitHub, Slack, etc.) a rich attachment is created; otherwise a basic one.",
78
83
  inputSchema: t.Object({
79
84
  issueId: t.String({
@@ -95,6 +100,7 @@ export function registerAttachmentActions(rl) {
95
100
  },
96
101
  });
97
102
  rl.registerAction("attachment.delete", {
103
+ access: "write",
98
104
  description: "Delete an attachment.",
99
105
  inputSchema: t.Object({
100
106
  id: t.String({
@@ -2,6 +2,7 @@ import * as t from "typebox";
2
2
  import { assertCommentInScope, assertIssueInScope, COMMENT_FIELDS, gql, key, requireUnscoped, } from "./shared.js";
3
3
  export function registerCommentActions(rl) {
4
4
  rl.registerAction("issue.addComment", {
5
+ access: "write",
5
6
  description: "Add a comment to an issue. Pass parentId to nest as a reply.",
6
7
  inputSchema: t.Object({
7
8
  issueId: t.String({
@@ -26,6 +27,7 @@ export function registerCommentActions(rl) {
26
27
  },
27
28
  });
28
29
  rl.registerAction("comment.list", {
30
+ access: "read",
29
31
  description: "List comments. Pass issueId (UUID or identifier like 'LIN-123') to list one issue's comments; without it, lists workspace-wide (unscoped connections only).",
30
32
  inputSchema: t.Object({
31
33
  issueId: t.Optional(t.String({
@@ -46,6 +48,7 @@ export function registerCommentActions(rl) {
46
48
  },
47
49
  });
48
50
  rl.registerAction("comment.get", {
51
+ access: "read",
49
52
  description: "Get a comment by ID.",
50
53
  inputSchema: t.Object({ id: t.String() }),
51
54
  async execute(input, ctx) {
@@ -56,6 +59,7 @@ export function registerCommentActions(rl) {
56
59
  },
57
60
  });
58
61
  rl.registerAction("comment.update", {
62
+ access: "write",
59
63
  description: "Update a comment.",
60
64
  inputSchema: t.Object({
61
65
  id: t.String({ description: "The identifier of the comment to update" }),
@@ -72,6 +76,7 @@ export function registerCommentActions(rl) {
72
76
  },
73
77
  });
74
78
  rl.registerAction("comment.delete", {
79
+ access: "write",
75
80
  description: "Delete a comment.",
76
81
  inputSchema: t.Object({ id: t.String() }),
77
82
  async execute(input, ctx) {
@@ -6,6 +6,7 @@ export function registerCycleActions(rl) {
6
6
  listAction("cycle.list", "List cycles. Use filter for isActive/isNext/isPrevious.", "cycles", "CycleFilter", CYCLE_FIELDS);
7
7
  getAction("cycle.get", "Get a cycle by ID.", "cycle", CYCLE_FIELDS);
8
8
  rl.registerAction("cycle.create", {
9
+ access: "write",
9
10
  description: "Create a cycle for a team.",
10
11
  inputSchema: t.Object({
11
12
  teamId: t.String({ description: "The team to associate the cycle with" }),
@@ -31,6 +32,7 @@ export function registerCycleActions(rl) {
31
32
  },
32
33
  });
33
34
  rl.registerAction("cycle.update", {
35
+ access: "write",
34
36
  description: "Update a cycle.",
35
37
  inputSchema: t.Object({
36
38
  id: t.String({ description: "The identifier of the cycle to update" }),
@@ -6,6 +6,7 @@ export function registerInitiativeActions(rl) {
6
6
  listAction("initiative.list", "List initiatives.", "initiatives", "InitiativeFilter", INITIATIVE_FIELDS);
7
7
  getAction("initiative.get", "Get an initiative by ID or slug.", "initiative", INITIATIVE_FIELDS);
8
8
  rl.registerAction("initiative.create", {
9
+ access: "write",
9
10
  description: "Create an initiative. Status: Planned | Active | Completed.",
10
11
  inputSchema: t.Object({
11
12
  name: t.String({ description: "The name of the initiative" }),
@@ -39,6 +40,7 @@ export function registerInitiativeActions(rl) {
39
40
  },
40
41
  });
41
42
  rl.registerAction("initiative.update", {
43
+ access: "write",
42
44
  description: "Update an initiative.",
43
45
  inputSchema: t.Object({
44
46
  id: t.String({
@@ -76,6 +78,7 @@ export function registerInitiativeActions(rl) {
76
78
  },
77
79
  });
78
80
  rl.registerAction("initiative.delete", {
81
+ access: "write",
79
82
  description: "Trash an initiative.",
80
83
  inputSchema: t.Object({
81
84
  id: t.String({
@@ -89,6 +92,7 @@ export function registerInitiativeActions(rl) {
89
92
  },
90
93
  });
91
94
  rl.registerAction("initiative.addProject", {
95
+ access: "write",
92
96
  description: "Associate a project with an initiative. Use this action for project-to-initiative linking; project.update does not accept initiativeId. Verify with initiative.get or the returned initiative.projects list.",
93
97
  inputSchema: t.Object({
94
98
  initiativeId: t.String({
@@ -109,6 +113,7 @@ export function registerInitiativeActions(rl) {
109
113
  },
110
114
  });
111
115
  rl.registerAction("initiative.removeProject", {
116
+ access: "write",
112
117
  description: "Remove a project from an initiative. Pass the link id returned by initiative.addProject, then verify with initiative.get.",
113
118
  inputSchema: t.Object({
114
119
  id: t.String({
@@ -2,6 +2,7 @@ import * as t from "typebox";
2
2
  import { assertIssueInScope, buildConnArgs, COMMENT_FIELDS, ensureScopeLabelsOnCreateOrReplace, forbidScopeLabelRemoval, gql, ISSUE_FIELDS, ISSUE_LITE, issueHasScope, key, LIST_INPUT_SCHEMA, mergeIssueScopeFilter, } from "./shared.js";
3
3
  export function registerIssueActions(rl) {
4
4
  rl.registerAction("issue.create", {
5
+ access: "write",
5
6
  description: "Create an issue. teamId is required; title is required unless a template is applied.",
6
7
  inputSchema: t.Object({
7
8
  teamId: t.String({
@@ -63,6 +64,7 @@ export function registerIssueActions(rl) {
63
64
  },
64
65
  });
65
66
  rl.registerAction("issue.get", {
67
+ access: "read",
66
68
  description: "Get an issue by ID or identifier (e.g. 'THE-154')",
67
69
  inputSchema: t.Object({
68
70
  issueId: t.String({
@@ -78,6 +80,7 @@ export function registerIssueActions(rl) {
78
80
  },
79
81
  });
80
82
  rl.registerAction("issue.list", {
83
+ access: "read",
81
84
  description: "List issues. Pass `filter` for state/label/project/etc. Default hides archived.",
82
85
  inputSchema: t.Object({
83
86
  ...LIST_INPUT_SCHEMA,
@@ -100,6 +103,7 @@ export function registerIssueActions(rl) {
100
103
  },
101
104
  });
102
105
  rl.registerAction("issue.update", {
106
+ access: "write",
103
107
  description: "Update an issue. All fields optional; only provided fields are updated.",
104
108
  inputSchema: t.Object({
105
109
  issueId: t.String({
@@ -175,6 +179,7 @@ export function registerIssueActions(rl) {
175
179
  },
176
180
  });
177
181
  rl.registerAction("issue.delete", {
182
+ access: "write",
178
183
  description: "Trash (soft-delete) an issue. Pass permanentlyDelete=true to bypass 30d grace period (admin only).",
179
184
  inputSchema: t.Object({
180
185
  issueId: t.String(),
@@ -188,6 +193,7 @@ export function registerIssueActions(rl) {
188
193
  },
189
194
  });
190
195
  rl.registerAction("issue.archive", {
196
+ access: "write",
191
197
  description: "Archive an issue.",
192
198
  inputSchema: t.Object({
193
199
  issueId: t.String(),
@@ -201,6 +207,7 @@ export function registerIssueActions(rl) {
201
207
  },
202
208
  });
203
209
  rl.registerAction("issue.unarchive", {
210
+ access: "write",
204
211
  description: "Unarchive an issue.",
205
212
  inputSchema: t.Object({ issueId: t.String() }),
206
213
  async execute(input, ctx) {
@@ -211,6 +218,7 @@ export function registerIssueActions(rl) {
211
218
  },
212
219
  });
213
220
  rl.registerAction("issue.search", {
221
+ access: "read",
214
222
  description: "Search issues by text query using full-text and vector search. Rate-limited to 30 req/min.",
215
223
  inputSchema: t.Object({
216
224
  term: t.String({ description: "Search string to look for" }),
@@ -252,6 +260,7 @@ export function registerIssueActions(rl) {
252
260
  },
253
261
  });
254
262
  rl.registerAction("issue.addLabel", {
263
+ access: "write",
255
264
  description: "Add a single label to an issue.",
256
265
  inputSchema: t.Object({
257
266
  issueId: t.String(),
@@ -265,6 +274,7 @@ export function registerIssueActions(rl) {
265
274
  },
266
275
  });
267
276
  rl.registerAction("issue.removeLabel", {
277
+ access: "write",
268
278
  description: "Remove a single label from an issue.",
269
279
  inputSchema: t.Object({
270
280
  issueId: t.String(),
@@ -279,6 +289,7 @@ export function registerIssueActions(rl) {
279
289
  },
280
290
  });
281
291
  rl.registerAction("issue.subscribe", {
292
+ access: "write",
282
293
  description: "Subscribe a user to issue notifications (defaults to current user).",
283
294
  inputSchema: t.Object({
284
295
  issueId: t.String(),
@@ -295,6 +306,7 @@ export function registerIssueActions(rl) {
295
306
  },
296
307
  });
297
308
  rl.registerAction("issue.unsubscribe", {
309
+ access: "write",
298
310
  description: "Unsubscribe a user from issue notifications (defaults to current user).",
299
311
  inputSchema: t.Object({
300
312
  issueId: t.String(),
@@ -311,6 +323,7 @@ export function registerIssueActions(rl) {
311
323
  },
312
324
  });
313
325
  rl.registerAction("issue.addLink", {
326
+ access: "write",
314
327
  description: "Create a relation between two issues.",
315
328
  inputSchema: t.Object({
316
329
  issueId: t.String({
@@ -332,6 +345,7 @@ export function registerIssueActions(rl) {
332
345
  },
333
346
  });
334
347
  rl.registerAction("issue.listComments", {
348
+ access: "read",
335
349
  description: "List comments on an issue.",
336
350
  inputSchema: t.Object({
337
351
  issueId: t.String(),
@@ -6,6 +6,7 @@ export function registerLabelActions(rl) {
6
6
  listAction("label.list", "List labels (workspace + team-scoped).", "issueLabels", "IssueLabelFilter", LABEL_FIELDS);
7
7
  getAction("label.get", "Get a label by ID.", "issueLabel", LABEL_FIELDS);
8
8
  rl.registerAction("label.create", {
9
+ access: "write",
9
10
  description: "Create a label. Omit teamId for a workspace-level label.",
10
11
  inputSchema: t.Object({
11
12
  name: t.String({ description: "The name of the label" }),
@@ -36,6 +37,7 @@ export function registerLabelActions(rl) {
36
37
  },
37
38
  });
38
39
  rl.registerAction("label.update", {
40
+ access: "write",
39
41
  description: "Update a label.",
40
42
  inputSchema: t.Object({
41
43
  id: t.String({ description: "The identifier of the label to update" }),
@@ -59,6 +61,7 @@ export function registerLabelActions(rl) {
59
61
  },
60
62
  });
61
63
  rl.registerAction("label.delete", {
64
+ access: "write",
62
65
  description: "Delete a label.",
63
66
  inputSchema: t.Object({
64
67
  id: t.String({ description: "The identifier of the label to delete" }),
@@ -70,6 +73,7 @@ export function registerLabelActions(rl) {
70
73
  },
71
74
  });
72
75
  rl.registerAction("label.retire", {
76
+ access: "write",
73
77
  description: "Retire a label. Retired labels remain visible but cannot be applied to new issues.",
74
78
  inputSchema: t.Object({
75
79
  id: t.String({ description: "The identifier of the label to retire" }),
@@ -81,6 +85,7 @@ export function registerLabelActions(rl) {
81
85
  },
82
86
  });
83
87
  rl.registerAction("label.restore", {
88
+ access: "write",
84
89
  description: "Restore a previously retired label.",
85
90
  inputSchema: t.Object({
86
91
  id: t.String({ description: "The identifier of the label to restore" }),
@@ -2,6 +2,7 @@ import * as t from "typebox";
2
2
  import { gql, key, ORG_FIELDS, requireUnscoped } from "./shared.js";
3
3
  export function registerOrganizationActions(rl) {
4
4
  rl.registerAction("org.get", {
5
+ access: "read",
5
6
  description: "Get the authenticated workspace.",
6
7
  inputSchema: t.Object({}),
7
8
  async execute(_input, ctx) {
@@ -6,6 +6,7 @@ export function registerProjectActions(rl) {
6
6
  listAction("project.list", "List projects.", "projects", "ProjectFilter", PROJECT_FIELDS);
7
7
  getAction("project.get", "Get a project by ID or slug.", "project", PROJECT_FIELDS);
8
8
  rl.registerAction("project.create", {
9
+ access: "write",
9
10
  description: "Create a project. teamIds is required.",
10
11
  inputSchema: t.Object({
11
12
  name: t.String({ description: "The name of the project" }),
@@ -66,6 +67,7 @@ export function registerProjectActions(rl) {
66
67
  },
67
68
  });
68
69
  rl.registerAction("project.update", {
70
+ access: "write",
69
71
  description: "Update a project.",
70
72
  inputSchema: t.Object({
71
73
  id: t.String({
@@ -123,6 +125,7 @@ export function registerProjectActions(rl) {
123
125
  },
124
126
  });
125
127
  rl.registerAction("project.delete", {
128
+ access: "write",
126
129
  description: "Trash (soft-delete) a project. Restorable via project.unarchive.",
127
130
  inputSchema: t.Object({
128
131
  id: t.String({ description: "The identifier of the project to delete" }),
@@ -134,6 +137,7 @@ export function registerProjectActions(rl) {
134
137
  },
135
138
  });
136
139
  rl.registerAction("project.unarchive", {
140
+ access: "write",
137
141
  description: "Restore a previously trashed or archived project.",
138
142
  inputSchema: t.Object({
139
143
  id: t.String({
@@ -147,6 +151,7 @@ export function registerProjectActions(rl) {
147
151
  },
148
152
  });
149
153
  rl.registerAction("project.search", {
154
+ access: "read",
150
155
  description: "Search projects by text. Rate-limited to 30 req/min.",
151
156
  inputSchema: t.Object({
152
157
  term: t.String({ description: "Search string to look for" }),
@@ -179,6 +184,7 @@ export function registerProjectActions(rl) {
179
184
  listAction("milestone.list", "List project milestones.", "projectMilestones", "ProjectMilestoneFilter", MILESTONE_FIELDS);
180
185
  getAction("milestone.get", "Get a project milestone by ID.", "projectMilestone", MILESTONE_FIELDS);
181
186
  rl.registerAction("milestone.create", {
187
+ access: "write",
182
188
  description: "Create a project milestone.",
183
189
  inputSchema: t.Object({
184
190
  projectId: t.String({
@@ -206,6 +212,7 @@ export function registerProjectActions(rl) {
206
212
  },
207
213
  });
208
214
  rl.registerAction("milestone.update", {
215
+ access: "write",
209
216
  description: "Update a project milestone.",
210
217
  inputSchema: t.Object({
211
218
  id: t.String({
@@ -234,6 +241,7 @@ export function registerProjectActions(rl) {
234
241
  },
235
242
  });
236
243
  rl.registerAction("milestone.delete", {
244
+ access: "write",
237
245
  description: "Delete a project milestone.",
238
246
  inputSchema: t.Object({
239
247
  id: t.String({
@@ -249,6 +257,7 @@ export function registerProjectActions(rl) {
249
257
  // Project updates
250
258
  listAction("projectUpdate.list", "List project updates.", "projectUpdates", "ProjectUpdateFilter", PROJECT_UPDATE_FIELDS);
251
259
  rl.registerAction("projectUpdate.create", {
260
+ access: "write",
252
261
  description: "Post a status update on a project.",
253
262
  inputSchema: t.Object({
254
263
  projectId: t.String({
@@ -275,6 +284,7 @@ export function registerProjectActions(rl) {
275
284
  },
276
285
  });
277
286
  rl.registerAction("projectUpdate.update", {
287
+ access: "write",
278
288
  description: "Update a project status update.",
279
289
  inputSchema: t.Object({
280
290
  id: t.String({
@@ -299,6 +309,7 @@ export function registerProjectActions(rl) {
299
309
  },
300
310
  });
301
311
  rl.registerAction("projectUpdate.archive", {
312
+ access: "write",
302
313
  description: "Archive a project status update.",
303
314
  inputSchema: t.Object({
304
315
  id: t.String({
@@ -218,6 +218,7 @@ function requireRootFieldAvailable(ctx, action, rootField) {
218
218
  }
219
219
  export function registerListAction(rl, name, description, rootField, filterTypeName, selection) {
220
220
  rl.registerAction(name, {
221
+ access: "read",
221
222
  description,
222
223
  inputSchema: t.Object(LIST_INPUT_SCHEMA),
223
224
  async execute(input, ctx) {
@@ -232,6 +233,7 @@ export function registerListAction(rl, name, description, rootField, filterTypeN
232
233
  }
233
234
  export function registerGetAction(rl, name, description, rootField, selection) {
234
235
  rl.registerAction(name, {
236
+ access: "read",
235
237
  description,
236
238
  inputSchema: t.Object({
237
239
  id: t.String({ description: "Identifier or slug" }),
@@ -6,6 +6,7 @@ export function registerStateActions(rl) {
6
6
  listAction("state.list", "List workflow states. Filter by team for team-scoped states.", "workflowStates", "WorkflowStateFilter", STATE_FIELDS);
7
7
  getAction("state.get", "Get a workflow state by ID.", "workflowState", STATE_FIELDS);
8
8
  rl.registerAction("state.create", {
9
+ access: "write",
9
10
  description: "Create a workflow state in a team.",
10
11
  inputSchema: t.Object({
11
12
  teamId: t.String({ description: "The team associated with the state" }),
@@ -30,6 +31,7 @@ export function registerStateActions(rl) {
30
31
  },
31
32
  });
32
33
  rl.registerAction("state.update", {
34
+ access: "write",
33
35
  description: "Update a workflow state. Type cannot be changed after creation.",
34
36
  inputSchema: t.Object({
35
37
  id: t.String({ description: "The identifier of the state to update" }),
@@ -6,6 +6,7 @@ export function registerTeamActions(rl) {
6
6
  listAction("team.list", "List teams whose issues you can access.", "teams", "TeamFilter", TEAM_FIELDS);
7
7
  getAction("team.get", "Get a team by ID or key.", "team", TEAM_FIELDS);
8
8
  rl.registerAction("team.create", {
9
+ access: "write",
9
10
  description: "Create a team. Most settings have sensible defaults.",
10
11
  inputSchema: t.Object({
11
12
  name: t.String({ description: "The name of the team" }),
@@ -49,6 +50,7 @@ export function registerTeamActions(rl) {
49
50
  },
50
51
  });
51
52
  rl.registerAction("team.update", {
53
+ access: "write",
52
54
  description: "Update a team. Requires team owner or workspace admin permissions.",
53
55
  inputSchema: t.Object({
54
56
  id: t.String({ description: "The identifier of the team to update" }),
@@ -83,6 +85,7 @@ export function registerTeamActions(rl) {
83
85
  },
84
86
  });
85
87
  rl.registerAction("team.members", {
88
+ access: "read",
86
89
  description: "List members of a team.",
87
90
  inputSchema: t.Object({
88
91
  teamId: t.String({ description: "The identifier of the team" }),
@@ -6,6 +6,7 @@ export function registerUserActions(rl) {
6
6
  listAction("user.list", "List users in the workspace.", "users", "UserFilter", USER_FIELDS);
7
7
  getAction("user.get", "Get a user by ID. Use 'me' to reference the authenticated user.", "user", USER_FIELDS);
8
8
  rl.registerAction("user.me", {
9
+ access: "read",
9
10
  description: "Get the authenticated user.",
10
11
  inputSchema: t.Object({}),
11
12
  async execute(_input, ctx) {
@@ -14,6 +15,7 @@ export function registerUserActions(rl) {
14
15
  },
15
16
  });
16
17
  rl.registerAction("user.update", {
18
+ access: "write",
17
19
  description: "Update a user. Use id='me' to update the authenticated user.",
18
20
  inputSchema: t.Object({
19
21
  id: t.String({
@@ -6,6 +6,7 @@ export function registerViewActions(rl) {
6
6
  const getAction = bindGetAction(rl);
7
7
  function customViewConnectionAction(name, description, connectionField, filterTypeName, selection, includeSubTeamsDescription) {
8
8
  rl.registerAction(name, {
9
+ access: "read",
9
10
  description,
10
11
  inputSchema: t.Object({
11
12
  viewId: t.String({ description: "The custom view ID or slug" }),
@@ -44,6 +45,7 @@ export function registerViewActions(rl) {
44
45
  listAction("view.list", "List custom views accessible to the user, including personal and shared workspace views. Linear excludes views scoped to a specific project or initiative from this root query.", "customViews", "CustomViewFilter", CUSTOM_VIEW_FIELDS);
45
46
  getAction("view.get", "Get a custom view by ID or slug.", "customView", CUSTOM_VIEW_FIELDS);
46
47
  rl.registerAction("view.create", {
48
+ access: "write",
47
49
  description: "Create a custom view. Set filterData for issue views; projectFilterData, initiativeFilterData, or feedItemFilterData for other view types. Read matches back with view.issues/projects/initiatives/updates.",
48
50
  inputSchema: t.Object({
49
51
  name: t.String({ description: "The name of the custom view" }),
@@ -74,6 +76,7 @@ export function registerViewActions(rl) {
74
76
  },
75
77
  });
76
78
  rl.registerAction("view.update", {
79
+ access: "write",
77
80
  description: "Update a custom view. All fields optional; only provided fields are updated.",
78
81
  inputSchema: t.Object({
79
82
  id: t.String({
@@ -105,6 +108,7 @@ export function registerViewActions(rl) {
105
108
  },
106
109
  });
107
110
  rl.registerAction("view.delete", {
111
+ access: "write",
108
112
  description: "Delete a custom view.",
109
113
  inputSchema: t.Object({
110
114
  id: t.String({
@@ -6,6 +6,7 @@ export function registerWebhookActions(rl) {
6
6
  listAction("webhook.list", "List webhooks for the current workspace.", "webhooks", null, WEBHOOK_FIELDS);
7
7
  getAction("webhook.get", "Get a webhook by ID.", "webhook", WEBHOOK_FIELDS);
8
8
  rl.registerAction("webhook.create", {
9
+ access: "write",
9
10
  description: "Create a webhook. resourceTypes example: ['Issue','Comment','Project'].",
10
11
  inputSchema: t.Object({
11
12
  url: t.String({
@@ -38,6 +39,7 @@ export function registerWebhookActions(rl) {
38
39
  },
39
40
  });
40
41
  rl.registerAction("webhook.update", {
42
+ access: "write",
41
43
  description: "Update a webhook. teamId and allPublicTeams cannot be changed after creation.",
42
44
  inputSchema: t.Object({
43
45
  id: t.String({ description: "The identifier of the webhook to update" }),
@@ -61,6 +63,7 @@ export function registerWebhookActions(rl) {
61
63
  },
62
64
  });
63
65
  rl.registerAction("webhook.delete", {
66
+ access: "write",
64
67
  description: "Delete a webhook.",
65
68
  inputSchema: t.Object({
66
69
  id: t.String({ description: "The identifier of the webhook to delete" }),
@@ -72,6 +75,7 @@ export function registerWebhookActions(rl) {
72
75
  },
73
76
  });
74
77
  rl.registerAction("webhook.rotateSecret", {
78
+ access: "write",
75
79
  description: "Rotate a webhook's signing secret. Returns the new secret.",
76
80
  inputSchema: t.Object({
77
81
  id: t.String({
@@ -10,6 +10,7 @@ export default function lingvanex(rl) {
10
10
  },
11
11
  });
12
12
  rl.registerAction("translate", {
13
+ access: "write",
13
14
  description: "Translate text",
14
15
  inputSchema: {
15
16
  text: {
@@ -41,6 +41,7 @@ export default function linkedin(rl) {
41
41
  });
42
42
  const tok = (ctx) => ctx.connection.config.accessToken;
43
43
  rl.registerAction("post.create", {
44
+ access: "write",
44
45
  description: "Create a post on LinkedIn. Supports text-only, article shares, and text with commentary. Image uploads require binary data and are not supported in this plugin.",
45
46
  inputSchema: {
46
47
  postAs: {