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
@@ -12,6 +12,7 @@ function point(value) {
12
12
  }
13
13
  export function registerStructureActions(rl) {
14
14
  rl.registerAction("document.insertPageBreak", {
15
+ access: "write",
15
16
  description: "Insert a page break at an index or at the end of a segment.",
16
17
  inputSchema: {
17
18
  document: { type: "string", required: true },
@@ -30,6 +31,7 @@ export function registerStructureActions(rl) {
30
31
  },
31
32
  });
32
33
  rl.registerAction("document.createNamedRange", {
34
+ access: "write",
33
35
  description: "Create a named range over a span of text (useful for later programmatic edits).",
34
36
  inputSchema: {
35
37
  document: { type: "string", required: true },
@@ -51,6 +53,7 @@ export function registerStructureActions(rl) {
51
53
  },
52
54
  });
53
55
  rl.registerAction("document.deleteNamedRange", {
56
+ access: "write",
54
57
  description: "Delete named range(s). Pass one of `namedRangeId` or `name`; the latter deletes every range sharing that name.",
55
58
  inputSchema: {
56
59
  document: { type: "string", required: true },
@@ -77,6 +80,7 @@ export function registerStructureActions(rl) {
77
80
  },
78
81
  });
79
82
  rl.registerAction("document.createHeader", {
83
+ access: "write",
80
84
  description: "Create a DEFAULT header attached to a SectionBreak.",
81
85
  inputSchema: {
82
86
  document: { type: "string", required: true },
@@ -106,6 +110,7 @@ export function registerStructureActions(rl) {
106
110
  },
107
111
  });
108
112
  rl.registerAction("document.deleteHeader", {
113
+ access: "write",
109
114
  description: "Delete a header by ID.",
110
115
  inputSchema: {
111
116
  document: { type: "string", required: true },
@@ -120,6 +125,7 @@ export function registerStructureActions(rl) {
120
125
  },
121
126
  });
122
127
  rl.registerAction("document.createFooter", {
128
+ access: "write",
123
129
  description: "Create a DEFAULT footer attached to a SectionBreak.",
124
130
  inputSchema: {
125
131
  document: { type: "string", required: true },
@@ -149,6 +155,7 @@ export function registerStructureActions(rl) {
149
155
  },
150
156
  });
151
157
  rl.registerAction("document.deleteFooter", {
158
+ access: "write",
152
159
  description: "Delete a footer by ID.",
153
160
  inputSchema: {
154
161
  document: { type: "string", required: true },
@@ -163,6 +170,7 @@ export function registerStructureActions(rl) {
163
170
  },
164
171
  });
165
172
  rl.registerAction("document.deletePositionedObject", {
173
+ access: "write",
166
174
  description: "Delete a positioned object (inline image, floating image, etc.) by its objectId.",
167
175
  inputSchema: {
168
176
  document: { type: "string", required: true },
@@ -181,6 +189,7 @@ export function registerStructureActions(rl) {
181
189
  },
182
190
  });
183
191
  rl.registerAction("document.createFootnote", {
192
+ access: "write",
184
193
  description: "Create a footnote reference at a location or at the end of the document body.",
185
194
  inputSchema: {
186
195
  document: { type: "string", required: true },
@@ -203,6 +212,7 @@ export function registerStructureActions(rl) {
203
212
  },
204
213
  });
205
214
  rl.registerAction("document.replaceNamedRangeContent", {
215
+ access: "write",
206
216
  description: "Replace the content of a named range by ID or name with text.",
207
217
  inputSchema: {
208
218
  document: { type: "string", required: true },
@@ -234,6 +244,7 @@ export function registerStructureActions(rl) {
234
244
  },
235
245
  });
236
246
  rl.registerAction("document.updateSectionStyle", {
247
+ access: "write",
237
248
  description: "Update section style over a range, such as margins or column properties.",
238
249
  inputSchema: {
239
250
  document: { type: "string", required: true },
@@ -303,6 +314,7 @@ export function registerStructureActions(rl) {
303
314
  },
304
315
  });
305
316
  rl.registerAction("document.insertSectionBreak", {
317
+ access: "write",
306
318
  description: "Insert a section break at the given location.",
307
319
  inputSchema: {
308
320
  document: { type: "string", required: true },
@@ -329,6 +341,7 @@ export function registerStructureActions(rl) {
329
341
  },
330
342
  });
331
343
  rl.registerAction("document.updateDocumentStyle", {
344
+ access: "write",
332
345
  description: "Update document-level style (page size, margins, page numbers, default direction).",
333
346
  inputSchema: {
334
347
  document: { type: "string", required: true },
@@ -14,6 +14,7 @@ function point(value) {
14
14
  }
15
15
  export function registerTablesActions(rl) {
16
16
  rl.registerAction("document.insertTable", {
17
+ access: "write",
17
18
  description: "Insert an empty table with the given dimensions.",
18
19
  inputSchema: {
19
20
  document: { type: "string", required: true },
@@ -38,6 +39,7 @@ export function registerTablesActions(rl) {
38
39
  },
39
40
  });
40
41
  rl.registerAction("document.insertTableRow", {
42
+ access: "write",
41
43
  description: "Insert a table row above or below a cell in an existing table.",
42
44
  inputSchema: {
43
45
  document: { type: "string", required: true },
@@ -68,6 +70,7 @@ export function registerTablesActions(rl) {
68
70
  },
69
71
  });
70
72
  rl.registerAction("document.deleteTableRow", {
73
+ access: "write",
71
74
  description: "Delete a specific row from a table.",
72
75
  inputSchema: {
73
76
  document: { type: "string", required: true },
@@ -88,6 +91,7 @@ export function registerTablesActions(rl) {
88
91
  },
89
92
  });
90
93
  rl.registerAction("document.insertTableColumn", {
94
+ access: "write",
91
95
  description: "Insert a column left or right of a cell.",
92
96
  inputSchema: {
93
97
  document: { type: "string", required: true },
@@ -114,6 +118,7 @@ export function registerTablesActions(rl) {
114
118
  },
115
119
  });
116
120
  rl.registerAction("document.deleteTableColumn", {
121
+ access: "write",
117
122
  description: "Delete a specific column from a table.",
118
123
  inputSchema: {
119
124
  document: { type: "string", required: true },
@@ -134,6 +139,7 @@ export function registerTablesActions(rl) {
134
139
  },
135
140
  });
136
141
  rl.registerAction("document.updateTableCellStyle", {
142
+ access: "write",
137
143
  description: "Apply table-cell styling (background color, borders, padding) to a contiguous span of cells. Pass either a single cell via `tableStartLocation+rowIndex+columnIndex`, or a range via `tableStartLocation+rowSpan+columnSpan`.",
138
144
  inputSchema: {
139
145
  document: { type: "string", required: true },
@@ -214,6 +220,7 @@ export function registerTablesActions(rl) {
214
220
  },
215
221
  });
216
222
  rl.registerAction("document.mergeTableCells", {
223
+ access: "write",
217
224
  description: "Merge a contiguous block of cells in a table.",
218
225
  inputSchema: {
219
226
  document: { type: "string", required: true },
@@ -246,6 +253,7 @@ export function registerTablesActions(rl) {
246
253
  },
247
254
  });
248
255
  rl.registerAction("document.unmergeTableCells", {
256
+ access: "write",
249
257
  description: "Unmerge a previously merged block of cells.",
250
258
  inputSchema: {
251
259
  document: { type: "string", required: true },
@@ -278,6 +286,7 @@ export function registerTablesActions(rl) {
278
286
  },
279
287
  });
280
288
  rl.registerAction("document.updateTableColumnProperties", {
289
+ access: "write",
281
290
  description: "Update table column properties such as width for selected columns or all columns.",
282
291
  inputSchema: {
283
292
  document: { type: "string", required: true },
@@ -333,6 +342,7 @@ export function registerTablesActions(rl) {
333
342
  },
334
343
  });
335
344
  rl.registerAction("document.updateTableRowStyle", {
345
+ access: "write",
336
346
  description: "Update table row style such as minimum row height for selected rows or all rows.",
337
347
  inputSchema: {
338
348
  document: { type: "string", required: true },
@@ -374,6 +384,7 @@ export function registerTablesActions(rl) {
374
384
  },
375
385
  });
376
386
  rl.registerAction("document.pinTableHeaderRows", {
387
+ access: "write",
377
388
  description: "Pin or unpin header rows in a table.",
378
389
  inputSchema: {
379
390
  document: { type: "string", required: true },
@@ -9,6 +9,7 @@ function tabProperties(p) {
9
9
  }
10
10
  export function registerTabActions(rl) {
11
11
  rl.registerAction("document.addDocumentTab", {
12
+ access: "write",
12
13
  description: "Add a Google Docs document tab, optionally at an index or under a parent tab.",
13
14
  inputSchema: {
14
15
  document: { type: "string", required: true },
@@ -25,6 +26,7 @@ export function registerTabActions(rl) {
25
26
  },
26
27
  });
27
28
  rl.registerAction("document.deleteTab", {
29
+ access: "write",
28
30
  description: "Delete a Google Docs document tab by tab ID. Child tabs are deleted too.",
29
31
  inputSchema: {
30
32
  document: { type: "string", required: true },
@@ -39,6 +41,7 @@ export function registerTabActions(rl) {
39
41
  },
40
42
  });
41
43
  rl.registerAction("document.updateDocumentTabProperties", {
44
+ access: "write",
42
45
  description: "Update Google Docs tab properties such as title, index, or parent tab.",
43
46
  inputSchema: {
44
47
  document: { type: "string", required: true },
@@ -9,6 +9,7 @@ function range(p) {
9
9
  }
10
10
  export function registerTextActions(rl) {
11
11
  rl.registerAction("document.insertText", {
12
+ access: "write",
12
13
  description: "Insert text at a specific index, or at the end of a segment (body/header/footer/footnote).",
13
14
  inputSchema: {
14
15
  document: { type: "string", required: true },
@@ -41,6 +42,7 @@ export function registerTextActions(rl) {
41
42
  },
42
43
  });
43
44
  rl.registerAction("document.replaceAllText", {
45
+ access: "write",
44
46
  description: "Replace every occurrence of a text string throughout the document.",
45
47
  inputSchema: {
46
48
  document: { type: "string", required: true },
@@ -73,6 +75,7 @@ export function registerTextActions(rl) {
73
75
  },
74
76
  });
75
77
  rl.registerAction("document.deleteContentRange", {
78
+ access: "write",
76
79
  description: "Delete text between two indices in a segment.",
77
80
  inputSchema: {
78
81
  document: { type: "string", required: true },
@@ -90,6 +93,7 @@ export function registerTextActions(rl) {
90
93
  },
91
94
  });
92
95
  rl.registerAction("document.createParagraphBullets", {
96
+ access: "write",
93
97
  description: "Apply a bullet preset to paragraphs spanning a range. Presets: BULLET_DISC_CIRCLE_SQUARE, BULLET_DIAMONDX_ARROW3D_SQUARE, BULLET_CHECKBOX, NUMBERED_DECIMAL_ALPHA_ROMAN, NUMBERED_DECIMAL_NESTED, etc.",
94
98
  inputSchema: {
95
99
  document: { type: "string", required: true },
@@ -111,6 +115,7 @@ export function registerTextActions(rl) {
111
115
  },
112
116
  });
113
117
  rl.registerAction("document.deleteParagraphBullets", {
118
+ access: "write",
114
119
  description: "Remove bullets from paragraphs in a range.",
115
120
  inputSchema: {
116
121
  document: { type: "string", required: true },
@@ -128,6 +133,7 @@ export function registerTextActions(rl) {
128
133
  },
129
134
  });
130
135
  rl.registerAction("document.insertPerson", {
136
+ access: "write",
131
137
  description: "Insert a smart chip person mention at a location or at the end of a segment.",
132
138
  inputSchema: {
133
139
  document: { type: "string", required: true },
@@ -158,6 +164,7 @@ export function registerTextActions(rl) {
158
164
  },
159
165
  });
160
166
  rl.registerAction("document.insertRichLink", {
167
+ access: "write",
161
168
  description: "Insert a rich link smart chip at a location or at the end of a segment.",
162
169
  inputSchema: {
163
170
  document: { type: "string", required: true },
@@ -188,6 +195,7 @@ export function registerTextActions(rl) {
188
195
  },
189
196
  });
190
197
  rl.registerAction("document.insertDate", {
198
+ access: "write",
191
199
  description: "Insert a date smart chip at a location or at the end of a segment.",
192
200
  inputSchema: {
193
201
  document: { type: "string", required: true },
@@ -220,6 +228,7 @@ export function registerTextActions(rl) {
220
228
  },
221
229
  });
222
230
  rl.registerAction("document.updateTextStyle", {
231
+ access: "write",
223
232
  description: "Apply text styling (bold, italic, underline, color, fontSize, fontFamily, link) to a range. Pass `fields` listing which TextStyle properties were set.",
224
233
  inputSchema: {
225
234
  document: { type: "string", required: true },
@@ -435,6 +435,7 @@ export default function googleDrive(rl) {
435
435
  });
436
436
  // ── File ──────────────────────────────────────────────
437
437
  rl.registerAction("file.upload", {
438
+ access: "write",
438
439
  description: "Upload a file to Drive. Supply one of contentBase64 / contentPath / content. Uses multipart for small files, resumable (2 MiB chunks) for large streamed paths.",
439
440
  inputSchema: {
440
441
  name: { type: "string", required: false, description: "File name in Drive" },
@@ -496,6 +497,7 @@ export default function googleDrive(rl) {
496
497
  },
497
498
  });
498
499
  rl.registerAction("file.createFromText", {
500
+ access: "write",
499
501
  description: "Create a text file from inline content. Set convertToGoogleDocument=true to convert to a Google Doc.",
500
502
  inputSchema: {
501
503
  name: { type: "string", required: false, description: 'Default: "Untitled"' },
@@ -569,6 +571,7 @@ export default function googleDrive(rl) {
569
571
  },
570
572
  });
571
573
  rl.registerAction("file.download", {
574
+ access: "write",
572
575
  description: "Download a file. Google-native docs are exported to the chosen format; regular files are downloaded as-is. Returns base64 by default, or writes to disk when savePath is set.",
573
576
  inputSchema: {
574
577
  fileId: { type: "string", required: true },
@@ -633,6 +636,7 @@ export default function googleDrive(rl) {
633
636
  },
634
637
  });
635
638
  rl.registerAction("file.copy", {
639
+ access: "write",
636
640
  description: "Copy a file",
637
641
  inputSchema: {
638
642
  fileId: { type: "string", required: true },
@@ -663,6 +667,7 @@ export default function googleDrive(rl) {
663
667
  },
664
668
  });
665
669
  rl.registerAction("file.move", {
670
+ access: "write",
666
671
  description: "Move a file to another folder. Resolves current parents and swaps them in a single PATCH.",
667
672
  inputSchema: {
668
673
  fileId: { type: "string", required: true },
@@ -682,6 +687,7 @@ export default function googleDrive(rl) {
682
687
  },
683
688
  });
684
689
  rl.registerAction("file.update", {
690
+ access: "write",
685
691
  description: "Patch file metadata and/or replace its bytes. Supply content{Base64,Path} to update bytes.",
686
692
  inputSchema: {
687
693
  fileId: { type: "string", required: true },
@@ -801,6 +807,7 @@ export default function googleDrive(rl) {
801
807
  },
802
808
  });
803
809
  rl.registerAction("file.delete", {
810
+ access: "write",
804
811
  description: "Delete a file. Moves to trash by default; pass deletePermanently=true to erase.",
805
812
  inputSchema: {
806
813
  fileId: { type: "string", required: true },
@@ -820,6 +827,7 @@ export default function googleDrive(rl) {
820
827
  },
821
828
  });
822
829
  rl.registerAction("file.get", {
830
+ access: "read",
823
831
  description: "Get file metadata",
824
832
  inputSchema: {
825
833
  fileId: { type: "string", required: true },
@@ -831,6 +839,7 @@ export default function googleDrive(rl) {
831
839
  },
832
840
  });
833
841
  rl.registerAction("file.share", {
842
+ access: "write",
834
843
  description: "Add a permission to a file. Create one permission per call; list the existing permissions via file.listPermissions.",
835
844
  inputSchema: {
836
845
  fileId: { type: "string", required: true },
@@ -880,6 +889,7 @@ export default function googleDrive(rl) {
880
889
  },
881
890
  });
882
891
  rl.registerAction("file.listPermissions", {
892
+ access: "read",
883
893
  description: "List permissions on a file",
884
894
  inputSchema: {
885
895
  fileId: { type: "string", required: true },
@@ -895,6 +905,7 @@ export default function googleDrive(rl) {
895
905
  },
896
906
  });
897
907
  rl.registerAction("file.deletePermission", {
908
+ access: "write",
898
909
  description: "Revoke a permission on a file",
899
910
  inputSchema: {
900
911
  fileId: { type: "string", required: true },
@@ -908,6 +919,7 @@ export default function googleDrive(rl) {
908
919
  });
909
920
  // ── Folder ────────────────────────────────────────────
910
921
  rl.registerAction("folder.create", {
922
+ access: "write",
911
923
  description: "Create a folder",
912
924
  inputSchema: {
913
925
  name: { type: "string", required: false, description: 'Default: "Untitled"' },
@@ -933,6 +945,7 @@ export default function googleDrive(rl) {
933
945
  },
934
946
  });
935
947
  rl.registerAction("folder.delete", {
948
+ access: "write",
936
949
  description: "Delete a folder. Moves to trash by default; pass deletePermanently=true to erase.",
937
950
  inputSchema: {
938
951
  folderId: { type: "string", required: true },
@@ -952,6 +965,7 @@ export default function googleDrive(rl) {
952
965
  },
953
966
  });
954
967
  rl.registerAction("folder.share", {
968
+ access: "write",
955
969
  description: "Add a permission to a folder (same shape as file.share)",
956
970
  inputSchema: {
957
971
  folderId: { type: "string", required: true },
@@ -991,6 +1005,7 @@ export default function googleDrive(rl) {
991
1005
  });
992
1006
  // ── File / folder search ──────────────────────────────
993
1007
  rl.registerAction("fileFolder.search", {
1008
+ access: "read",
994
1009
  description: "Search files and folders. `query` is passed directly; `name` wraps it as `name contains '…'`. Combine with folderId/driveId/whatToSearch/fileTypes filters.",
995
1010
  inputSchema: {
996
1011
  name: {
@@ -1079,6 +1094,7 @@ export default function googleDrive(rl) {
1079
1094
  });
1080
1095
  // ── Shared drive ──────────────────────────────────────
1081
1096
  rl.registerAction("drive.create", {
1097
+ access: "write",
1082
1098
  description: "Create a shared drive. requestId is generated automatically.",
1083
1099
  inputSchema: {
1084
1100
  name: { type: "string", required: true },
@@ -1098,6 +1114,7 @@ export default function googleDrive(rl) {
1098
1114
  },
1099
1115
  });
1100
1116
  rl.registerAction("drive.get", {
1117
+ access: "read",
1101
1118
  description: "Get a shared drive",
1102
1119
  inputSchema: {
1103
1120
  driveId: { type: "string", required: true },
@@ -1112,6 +1129,7 @@ export default function googleDrive(rl) {
1112
1129
  },
1113
1130
  });
1114
1131
  rl.registerAction("drive.list", {
1132
+ access: "read",
1115
1133
  description: "List shared drives",
1116
1134
  inputSchema: {
1117
1135
  q: { type: "string", required: false, description: "Shared-drive search syntax" },
@@ -1138,6 +1156,7 @@ export default function googleDrive(rl) {
1138
1156
  },
1139
1157
  });
1140
1158
  rl.registerAction("drive.update", {
1159
+ access: "write",
1141
1160
  description: "Patch a shared drive",
1142
1161
  inputSchema: {
1143
1162
  driveId: { type: "string", required: true },
@@ -1156,6 +1175,7 @@ export default function googleDrive(rl) {
1156
1175
  },
1157
1176
  });
1158
1177
  rl.registerAction("drive.delete", {
1178
+ access: "write",
1159
1179
  description: "Delete a shared drive",
1160
1180
  inputSchema: { driveId: { type: "string", required: true } },
1161
1181
  async execute(input, ctx) {
@@ -1180,6 +1200,7 @@ export default function googleDrive(rl) {
1180
1200
  "author(displayName,emailAddress),action,content,htmlContent";
1181
1201
  const REPLY_LIST_FIELDS = `kind,nextPageToken,replies(${REPLY_FIELDS})`;
1182
1202
  rl.registerAction("comment.list", {
1203
+ access: "read",
1183
1204
  description: "List all comments on a Drive file, including each comment's replies. Returns an array sorted by Drive's default (most recent first).",
1184
1205
  inputSchema: {
1185
1206
  fileId: { type: "string", required: true },
@@ -1222,6 +1243,7 @@ export default function googleDrive(rl) {
1222
1243
  },
1223
1244
  });
1224
1245
  rl.registerAction("comment.get", {
1246
+ access: "read",
1225
1247
  description: "Fetch a single comment (with its replies) by ID.",
1226
1248
  inputSchema: {
1227
1249
  fileId: { type: "string", required: true },
@@ -1234,6 +1256,7 @@ export default function googleDrive(rl) {
1234
1256
  },
1235
1257
  });
1236
1258
  rl.registerAction("comment.create", {
1259
+ access: "write",
1237
1260
  description: "Create a new top-level comment on a file. Pass quotedFileContent.value (and optionally mimeType) to anchor the comment to a specific snippet.",
1238
1261
  inputSchema: {
1239
1262
  fileId: { type: "string", required: true },
@@ -1253,6 +1276,7 @@ export default function googleDrive(rl) {
1253
1276
  },
1254
1277
  });
1255
1278
  rl.registerAction("comment.update", {
1279
+ access: "write",
1256
1280
  description: "Edit the content of an existing comment. Caller must be the author or have edit rights.",
1257
1281
  inputSchema: {
1258
1282
  fileId: { type: "string", required: true },
@@ -1265,6 +1289,7 @@ export default function googleDrive(rl) {
1265
1289
  },
1266
1290
  });
1267
1291
  rl.registerAction("comment.delete", {
1292
+ access: "write",
1268
1293
  description: "Soft-delete a comment.",
1269
1294
  inputSchema: {
1270
1295
  fileId: { type: "string", required: true },
@@ -1277,6 +1302,7 @@ export default function googleDrive(rl) {
1277
1302
  },
1278
1303
  });
1279
1304
  rl.registerAction("comment.resolve", {
1305
+ access: "write",
1280
1306
  description: "Resolve a comment thread by posting a resolution reply. `resolved` on a Comment is computed from replies; this is the canonical way to mark a thread done.",
1281
1307
  inputSchema: {
1282
1308
  fileId: { type: "string", required: true },
@@ -1293,6 +1319,7 @@ export default function googleDrive(rl) {
1293
1319
  },
1294
1320
  });
1295
1321
  rl.registerAction("comment.reopen", {
1322
+ access: "write",
1296
1323
  description: "Re-open a previously resolved comment by posting a reopen reply.",
1297
1324
  inputSchema: {
1298
1325
  fileId: { type: "string", required: true },
@@ -1305,6 +1332,7 @@ export default function googleDrive(rl) {
1305
1332
  },
1306
1333
  });
1307
1334
  rl.registerAction("reply.list", {
1335
+ access: "read",
1308
1336
  description: "List replies on a specific comment.",
1309
1337
  inputSchema: {
1310
1338
  fileId: { type: "string", required: true },
@@ -1333,6 +1361,7 @@ export default function googleDrive(rl) {
1333
1361
  },
1334
1362
  });
1335
1363
  rl.registerAction("reply.create", {
1364
+ access: "write",
1336
1365
  description: "Post a reply to a comment. Pass action: 'resolve' | 'reopen' to also flip the comment state.",
1337
1366
  inputSchema: {
1338
1367
  fileId: { type: "string", required: true },
@@ -1353,6 +1382,7 @@ export default function googleDrive(rl) {
1353
1382
  },
1354
1383
  });
1355
1384
  rl.registerAction("reply.update", {
1385
+ access: "write",
1356
1386
  description: "Edit the content of a reply.",
1357
1387
  inputSchema: {
1358
1388
  fileId: { type: "string", required: true },
@@ -1366,6 +1396,7 @@ export default function googleDrive(rl) {
1366
1396
  },
1367
1397
  });
1368
1398
  rl.registerAction("reply.delete", {
1399
+ access: "write",
1369
1400
  description: "Soft-delete a reply.",
1370
1401
  inputSchema: {
1371
1402
  fileId: { type: "string", required: true },
@@ -1397,6 +1428,7 @@ export default function googleDrive(rl) {
1397
1428
  "published,publishAuto,publishedOutsideDomain,publishedLink";
1398
1429
  const REVISION_LIST_FIELDS = `kind,nextPageToken,revisions(${REVISION_FIELDS})`;
1399
1430
  rl.registerAction("revision.list", {
1431
+ access: "read",
1400
1432
  description: "List every revision Drive retains for a file, oldest first. For Office files the per-revision bytes are what `revision.download` returns.",
1401
1433
  inputSchema: {
1402
1434
  fileId: { type: "string", required: true },
@@ -1423,6 +1455,7 @@ export default function googleDrive(rl) {
1423
1455
  },
1424
1456
  });
1425
1457
  rl.registerAction("revision.get", {
1458
+ access: "read",
1426
1459
  description: "Fetch metadata for a single revision.",
1427
1460
  inputSchema: {
1428
1461
  fileId: { type: "string", required: true },
@@ -1434,6 +1467,7 @@ export default function googleDrive(rl) {
1434
1467
  },
1435
1468
  });
1436
1469
  rl.registerAction("revision.download", {
1470
+ access: "write",
1437
1471
  description: "Download the bytes of a specific revision. Pass savePath to write to disk and get back the path; otherwise returns { contentBase64, mimeType, size }. This is the recovery path when an in-place file.update has overwritten in-document comments on an Office file.",
1438
1472
  inputSchema: {
1439
1473
  fileId: { type: "string", required: true },
@@ -1473,6 +1507,7 @@ export default function googleDrive(rl) {
1473
1507
  },
1474
1508
  });
1475
1509
  rl.registerAction("revision.update", {
1510
+ access: "write",
1476
1511
  description: "Patch revision metadata. The most useful flag is keepForever — without it Drive can garbage-collect revisions after 30 days / 100 versions on Office files. Set keepForever=true on the head revision before any risky file.update so prior bytes are guaranteed recoverable.",
1477
1512
  inputSchema: {
1478
1513
  fileId: { type: "string", required: true },
@@ -1501,6 +1536,7 @@ export default function googleDrive(rl) {
1501
1536
  },
1502
1537
  });
1503
1538
  rl.registerAction("revision.delete", {
1539
+ access: "write",
1504
1540
  description: "Permanently delete a revision (head revision cannot be deleted).",
1505
1541
  inputSchema: {
1506
1542
  fileId: { type: "string", required: true },
@@ -1513,6 +1549,7 @@ export default function googleDrive(rl) {
1513
1549
  },
1514
1550
  });
1515
1551
  rl.registerAction("revision.restore", {
1552
+ access: "write",
1516
1553
  description: "Restore an older revision as the head of the file. Downloads the revision bytes and re-uploads them via multipart so the head moves to that content. Drive's REST API has no native restore endpoint for binary files; this performs the equivalent in two calls. Returns the new head file resource.",
1517
1554
  inputSchema: {
1518
1555
  fileId: { type: "string", required: true },
@@ -1565,6 +1602,7 @@ export default function googleDrive(rl) {
1565
1602
  // per file. With them, a sensor can wake on any file change in the user's
1566
1603
  // corpus or in a specific shared drive.
1567
1604
  rl.registerAction("changes.getStartPageToken", {
1605
+ access: "read",
1568
1606
  description: "Get the current Drive change-feed start page token. Use as the seed `pageToken` for the first `changes.list` call.",
1569
1607
  inputSchema: {
1570
1608
  driveId: { type: "string", required: false, description: "Shared-drive id; omit for the user's My Drive corpus." },
@@ -1579,6 +1617,7 @@ export default function googleDrive(rl) {
1579
1617
  },
1580
1618
  });
1581
1619
  rl.registerAction("changes.list", {
1620
+ access: "read",
1582
1621
  description: "List changes to files and Shared Drives since the given `pageToken`. Returns `{ changes, newStartPageToken, nextPageToken? }`. Drive does not surface comment-level changes here — use this for file metadata/content changes; pair with comments.list for review activity.",
1583
1622
  inputSchema: {
1584
1623
  pageToken: { type: "string", required: true, description: "Token from `changes.getStartPageToken` or a prior `nextPageToken`." },
@@ -1608,6 +1647,7 @@ export default function googleDrive(rl) {
1608
1647
  },
1609
1648
  });
1610
1649
  rl.registerAction("changes.watch", {
1650
+ access: "write",
1611
1651
  description: "Subscribe to push notifications on the change feed. Drive will POST to `address` whenever a change in this corpus is recorded. Returns a channel resource; pair with `channels.stop` (`changes.stop`) when done.",
1612
1652
  inputSchema: {
1613
1653
  pageToken: { type: "string", required: true },
@@ -1639,6 +1679,7 @@ export default function googleDrive(rl) {
1639
1679
  },
1640
1680
  });
1641
1681
  rl.registerAction("changes.stop", {
1682
+ access: "write",
1642
1683
  description: "Stop a previously-subscribed change channel. Pass the same `channelId` and `resourceId` returned by `changes.watch`.",
1643
1684
  inputSchema: {
1644
1685
  channelId: { type: "string", required: true },
@@ -1657,6 +1698,7 @@ export default function googleDrive(rl) {
1657
1698
  // commenter to writer (or expire a permission) without re-sharing, you
1658
1699
  // need the PATCH endpoint.
1659
1700
  rl.registerAction("permission.update", {
1701
+ access: "write",
1660
1702
  description: "Patch an existing file/folder permission. Use to change the role on an existing share, set an expiration time, or transfer ownership.",
1661
1703
  inputSchema: {
1662
1704
  fileId: { type: "string", required: true },
@@ -1695,6 +1737,7 @@ export default function googleDrive(rl) {
1695
1737
  // owner can resolve (accept and grant, or deny). These actions let the
1696
1738
  // agent triage and resolve those requests programmatically.
1697
1739
  rl.registerAction("accessProposal.list", {
1740
+ access: "read",
1698
1741
  description: "List access proposals (Request-access entries) on a file.",
1699
1742
  inputSchema: {
1700
1743
  fileId: { type: "string", required: true },
@@ -1714,6 +1757,7 @@ export default function googleDrive(rl) {
1714
1757
  },
1715
1758
  });
1716
1759
  rl.registerAction("accessProposal.resolve", {
1760
+ access: "write",
1717
1761
  description: "Resolve an access proposal. `action` is one of 'ACCEPT' or 'DENY'. When accepting, pass `role` (default 'reader') to grant.",
1718
1762
  inputSchema: {
1719
1763
  fileId: { type: "string", required: true },
@@ -1738,6 +1782,7 @@ export default function googleDrive(rl) {
1738
1782
  });
1739
1783
  // ─── About ───────────────────────────────────────────────────────
1740
1784
  rl.registerAction("about.get", {
1785
+ access: "read",
1741
1786
  description: "Current user info: storage quota, export formats, max upload size, importable mime types. Useful for healthchecks and conversion planning.",
1742
1787
  inputSchema: {
1743
1788
  fields: { type: "string", required: false },
@@ -1752,6 +1797,7 @@ export default function googleDrive(rl) {
1752
1797
  });
1753
1798
  // ─── File export (ergonomic wrapper) ────────────────────────────
1754
1799
  rl.registerAction("file.export", {
1800
+ access: "write",
1755
1801
  description: "Export a Google-native file (Doc/Sheet/Slide/Drawing/Form) to a non-native mimeType. Wrapper around the export endpoint; pass `savePath` to write to disk and get the path back, otherwise returns base64.",
1756
1802
  inputSchema: {
1757
1803
  fileId: { type: "string", required: true },
@@ -1782,6 +1828,7 @@ export default function googleDrive(rl) {
1782
1828
  });
1783
1829
  // ─── Raw file.list ──────────────────────────────────────────────
1784
1830
  rl.registerAction("file.list", {
1831
+ access: "read",
1785
1832
  description: "Raw Drive `files.list`. Pass Drive search-syntax `q` and any combination of corpora / driveId / spaces / orderBy. `fileFolder.search` is the friendlier wrapper; reach for `file.list` only when you need the unwrapped surface.",
1786
1833
  inputSchema: {
1787
1834
  q: { type: "string", required: false },
@@ -33,6 +33,7 @@ export default function googleImage(rl) {
33
33
  },
34
34
  });
35
35
  rl.registerAction("image.create", {
36
+ access: "write",
36
37
  description: "Generate an image with Google's Gemini image models (Nano Banana / Imagen). Writes the image(s) to disk and returns their file `path`s — not base64. Deliver each image to the user with send_file using its `path`.",
37
38
  inputSchema: {
38
39
  prompt: {