runline 0.11.6 → 0.13.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 (256) 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/_shared/googleSchemas.js +23 -0
  7. package/dist/plugins/actionNetwork/src/index.js +23 -0
  8. package/dist/plugins/activeCampaign/src/index.js +48 -0
  9. package/dist/plugins/adalo/src/index.js +5 -0
  10. package/dist/plugins/affinity/src/index.js +16 -0
  11. package/dist/plugins/agileCrm/src/index.js +15 -0
  12. package/dist/plugins/airtable/src/index.js +10 -0
  13. package/dist/plugins/airtop/src/index.js +24 -0
  14. package/dist/plugins/apiTemplateIo/src/index.js +4 -0
  15. package/dist/plugins/asana/src/index.js +22 -0
  16. package/dist/plugins/autopilot/src/index.js +11 -0
  17. package/dist/plugins/bambooHr/src/index.js +11 -0
  18. package/dist/plugins/bannerbear/src/index.js +4 -0
  19. package/dist/plugins/baserow/src/index.js +8 -0
  20. package/dist/plugins/beeminder/src/index.js +18 -0
  21. package/dist/plugins/bitly/src/index.js +3 -0
  22. package/dist/plugins/bitwarden/src/index.js +19 -0
  23. package/dist/plugins/box/src/index.js +11 -0
  24. package/dist/plugins/brandfetch/src/index.js +5 -0
  25. package/dist/plugins/brevo/src/index.js +15 -0
  26. package/dist/plugins/bubble/src/index.js +5 -0
  27. package/dist/plugins/chargebee/src/index.js +5 -0
  28. package/dist/plugins/circleci/src/index.js +3 -0
  29. package/dist/plugins/ciscoWebex/src/index.js +10 -0
  30. package/dist/plugins/clearbit/src/index.js +3 -0
  31. package/dist/plugins/clickup/src/index.js +61 -0
  32. package/dist/plugins/clockify/src/index.js +25 -0
  33. package/dist/plugins/cloudflare/src/index.js +4 -0
  34. package/dist/plugins/cockpit/src/index.js +5 -0
  35. package/dist/plugins/coda/src/index.js +18 -0
  36. package/dist/plugins/coingecko/src/index.js +10 -0
  37. package/dist/plugins/contentful/src/index.js +7 -0
  38. package/dist/plugins/convertkit/src/index.js +16 -0
  39. package/dist/plugins/copper/src/index.js +7 -0
  40. package/dist/plugins/cortex/src/index.js +4 -0
  41. package/dist/plugins/currents/src/index.js +22 -0
  42. package/dist/plugins/customerIo/src/index.js +9 -0
  43. package/dist/plugins/databricks/src/index.js +34 -0
  44. package/dist/plugins/deepl/src/index.js +2 -0
  45. package/dist/plugins/demio/src/index.js +4 -0
  46. package/dist/plugins/dhl/src/index.js +1 -0
  47. package/dist/plugins/discord/src/index.js +13 -0
  48. package/dist/plugins/discourse/src/index.js +16 -0
  49. package/dist/plugins/disqus/src/index.js +4 -0
  50. package/dist/plugins/docker/src/index.js +5 -0
  51. package/dist/plugins/drift/src/index.js +5 -0
  52. package/dist/plugins/dropbox/src/index.js +9 -0
  53. package/dist/plugins/dropcontact/src/index.js +2 -0
  54. package/dist/plugins/egoi/src/index.js +4 -0
  55. package/dist/plugins/elasticsearch/src/index.js +9 -0
  56. package/dist/plugins/emelia/src/index.js +9 -0
  57. package/dist/plugins/erpnext/src/index.js +5 -0
  58. package/dist/plugins/facebookGraph/src/index.js +1 -0
  59. package/dist/plugins/freshdesk/src/index.js +10 -0
  60. package/dist/plugins/freshservice/src/index.js +7 -0
  61. package/dist/plugins/freshworksCrm/src/index.js +7 -0
  62. package/dist/plugins/getresponse/src/index.js +5 -0
  63. package/dist/plugins/ghost/src/index.js +5 -0
  64. package/dist/plugins/github/src/index.js +37 -0
  65. package/dist/plugins/gitlab/src/index.js +17 -0
  66. package/dist/plugins/gmail/src/index.js +200 -184
  67. package/dist/plugins/gong/src/index.js +4 -0
  68. package/dist/plugins/googleAppsScript/src/index.js +98 -43
  69. package/dist/plugins/googleCalendar/src/index.js +329 -250
  70. package/dist/plugins/googleContacts/src/index.js +144 -145
  71. package/dist/plugins/googleDocs/src/documents.js +31 -38
  72. package/dist/plugins/googleDocs/src/formatting.js +51 -47
  73. package/dist/plugins/googleDocs/src/images.js +23 -26
  74. package/dist/plugins/googleDocs/src/shared.js +55 -0
  75. package/dist/plugins/googleDocs/src/structure.js +111 -123
  76. package/dist/plugins/googleDocs/src/tables.js +103 -154
  77. package/dist/plugins/googleDocs/src/tabs.js +27 -23
  78. package/dist/plugins/googleDocs/src/text.js +106 -136
  79. package/dist/plugins/googleDrive/src/index.js +461 -408
  80. package/dist/plugins/googleImage/src/index.js +14 -16
  81. package/dist/plugins/googleSheets/src/index.js +527 -339
  82. package/dist/plugins/googleSlides/src/index.js +92 -72
  83. package/dist/plugins/googleTasks/src/index.js +94 -92
  84. package/dist/plugins/gotify/src/index.js +3 -0
  85. package/dist/plugins/gotowebinar/src/index.js +20 -0
  86. package/dist/plugins/grafana/src/index.js +17 -0
  87. package/dist/plugins/graphql/src/index.js +2 -0
  88. package/dist/plugins/grist/src/index.js +4 -0
  89. package/dist/plugins/hackernews/src/index.js +6 -0
  90. package/dist/plugins/halopsa/src/index.js +5 -0
  91. package/dist/plugins/harvest/src/index.js +14 -0
  92. package/dist/plugins/helpscout/src/index.js +13 -0
  93. package/dist/plugins/highlevel/src/index.js +17 -0
  94. package/dist/plugins/homeAssistant/src/index.js +13 -0
  95. package/dist/plugins/hubspot/src/index.js +14 -0
  96. package/dist/plugins/humanticAi/src/index.js +3 -0
  97. package/dist/plugins/hunter/src/index.js +3 -0
  98. package/dist/plugins/intercom/src/index.js +10 -0
  99. package/dist/plugins/iterable/src/index.js +6 -0
  100. package/dist/plugins/jenkins/src/index.js +11 -0
  101. package/dist/plugins/jira/src/index.js +16 -0
  102. package/dist/plugins/keap/src/index.js +28 -0
  103. package/dist/plugins/kobotoolbox/src/index.js +17 -0
  104. package/dist/plugins/lemlist/src/index.js +15 -0
  105. package/dist/plugins/linear/src/attachments.js +6 -0
  106. package/dist/plugins/linear/src/comments.js +5 -0
  107. package/dist/plugins/linear/src/cycles.js +2 -0
  108. package/dist/plugins/linear/src/initiatives.js +5 -0
  109. package/dist/plugins/linear/src/issues.js +14 -0
  110. package/dist/plugins/linear/src/labels.js +5 -0
  111. package/dist/plugins/linear/src/organization.js +1 -0
  112. package/dist/plugins/linear/src/projects.js +11 -0
  113. package/dist/plugins/linear/src/shared.js +2 -0
  114. package/dist/plugins/linear/src/states.js +2 -0
  115. package/dist/plugins/linear/src/teams.js +3 -0
  116. package/dist/plugins/linear/src/users.js +2 -0
  117. package/dist/plugins/linear/src/views.js +4 -0
  118. package/dist/plugins/linear/src/webhooks.js +4 -0
  119. package/dist/plugins/lingvanex/src/index.js +1 -0
  120. package/dist/plugins/linkedin/src/index.js +1 -0
  121. package/dist/plugins/lonescale/src/index.js +4 -0
  122. package/dist/plugins/magento/src/index.js +15 -0
  123. package/dist/plugins/mailcheck/src/index.js +1 -0
  124. package/dist/plugins/mailchimp/src/index.js +14 -0
  125. package/dist/plugins/mailerlite/src/index.js +4 -0
  126. package/dist/plugins/mailgun/src/index.js +1 -0
  127. package/dist/plugins/mailjet/src/index.js +3 -0
  128. package/dist/plugins/mandrill/src/index.js +2 -0
  129. package/dist/plugins/marketstack/src/index.js +3 -0
  130. package/dist/plugins/matrix/src/index.js +10 -0
  131. package/dist/plugins/mattermost/src/index.js +19 -0
  132. package/dist/plugins/mautic/src/index.js +20 -0
  133. package/dist/plugins/medium/src/index.js +3 -0
  134. package/dist/plugins/messagebird/src/index.js +2 -0
  135. package/dist/plugins/metabase/src/index.js +10 -0
  136. package/dist/plugins/microsoftCalendar/src/index.js +2 -0
  137. package/dist/plugins/microsoftFiles/src/index.js +5 -0
  138. package/dist/plugins/microsoftMail/src/index.js +4 -0
  139. package/dist/plugins/misp/src/index.js +44 -0
  140. package/dist/plugins/mocean/src/index.js +2 -0
  141. package/dist/plugins/monday/src/index.js +18 -0
  142. package/dist/plugins/monicaCrm/src/index.js +5 -0
  143. package/dist/plugins/msg91/src/index.js +1 -0
  144. package/dist/plugins/nasa/src/index.js +7 -0
  145. package/dist/plugins/netlify/src/index.js +7 -0
  146. package/dist/plugins/netscalerAdc/src/index.js +3 -0
  147. package/dist/plugins/nextcloud/src/index.js +13 -0
  148. package/dist/plugins/nocodb/src/index.js +5 -0
  149. package/dist/plugins/node/src/index.js +38 -0
  150. package/dist/plugins/notion/src/index.js +14 -0
  151. package/dist/plugins/npm/src/index.js +5 -0
  152. package/dist/plugins/odoo/src/index.js +6 -0
  153. package/dist/plugins/okta/src/index.js +5 -0
  154. package/dist/plugins/oneSimpleApi/src/index.js +10 -0
  155. package/dist/plugins/onfleet/src/index.js +24 -0
  156. package/dist/plugins/openThesaurus/src/index.js +1 -0
  157. package/dist/plugins/openai/src/index.js +1 -0
  158. package/dist/plugins/openweathermap/src/index.js +2 -0
  159. package/dist/plugins/oura/src/index.js +2 -0
  160. package/dist/plugins/paddle/src/index.js +9 -0
  161. package/dist/plugins/pagerduty/src/index.js +9 -0
  162. package/dist/plugins/parallel/src/index.js +1 -0
  163. package/dist/plugins/paypal/src/index.js +4 -0
  164. package/dist/plugins/peekalink/src/index.js +2 -0
  165. package/dist/plugins/phantombuster/src/index.js +5 -0
  166. package/dist/plugins/philipsHue/src/index.js +4 -0
  167. package/dist/plugins/pipedrive/src/index.js +14 -0
  168. package/dist/plugins/plivo/src/index.js +3 -0
  169. package/dist/plugins/postbin/src/index.js +6 -0
  170. package/dist/plugins/posthog/src/index.js +5 -0
  171. package/dist/plugins/profitwell/src/index.js +2 -0
  172. package/dist/plugins/pushbullet/src/index.js +4 -0
  173. package/dist/plugins/pushcut/src/index.js +1 -0
  174. package/dist/plugins/pushover/src/index.js +1 -0
  175. package/dist/plugins/quickbase/src/index.js +8 -0
  176. package/dist/plugins/quickbooks/src/index.js +5 -0
  177. package/dist/plugins/quickchart/src/index.js +1 -0
  178. package/dist/plugins/raindrop/src/index.js +13 -0
  179. package/dist/plugins/recraft/src/index.js +1 -0
  180. package/dist/plugins/reddit/src/index.js +10 -0
  181. package/dist/plugins/replicate/src/index.js +1 -0
  182. package/dist/plugins/rocketchat/src/index.js +1 -0
  183. package/dist/plugins/rundeck/src/index.js +2 -0
  184. package/dist/plugins/salesforce/src/metadata.js +4 -0
  185. package/dist/plugins/salesforce/src/query.js +5 -0
  186. package/dist/plugins/salesforce/src/sobjects.js +12 -0
  187. package/dist/plugins/salesmate/src/index.js +5 -0
  188. package/dist/plugins/securityScorecard/src/index.js +14 -0
  189. package/dist/plugins/segment/src/index.js +4 -0
  190. package/dist/plugins/sendgrid/src/index.js +10 -0
  191. package/dist/plugins/sendy/src/index.js +6 -0
  192. package/dist/plugins/sentry/src/index.js +24 -0
  193. package/dist/plugins/servicenow/src/index.js +10 -0
  194. package/dist/plugins/shiftLabs/src/index.js +6 -0
  195. package/dist/plugins/shiftLabs/src/issues.js +4 -0
  196. package/dist/plugins/shiftLabs/src/pages.js +10 -0
  197. package/dist/plugins/shiftLabs/src/shared.js +2 -0
  198. package/dist/plugins/shiftLabs/src/transcription.js +203 -0
  199. package/dist/plugins/shopify/src/index.js +10 -0
  200. package/dist/plugins/signl4/src/index.js +2 -0
  201. package/dist/plugins/slack/src/index.js +38 -0
  202. package/dist/plugins/sms77/src/index.js +2 -0
  203. package/dist/plugins/splunk/src/index.js +16 -0
  204. package/dist/plugins/spotify/src/index.js +30 -0
  205. package/dist/plugins/stackby/src/index.js +4 -0
  206. package/dist/plugins/steel/src/browser.js +7 -0
  207. package/dist/plugins/steel/src/captchas.js +3 -0
  208. package/dist/plugins/steel/src/credentials.js +4 -0
  209. package/dist/plugins/steel/src/extensions.js +5 -0
  210. package/dist/plugins/steel/src/files.js +10 -0
  211. package/dist/plugins/steel/src/profiles.js +4 -0
  212. package/dist/plugins/steel/src/sessions.js +11 -0
  213. package/dist/plugins/storyblok/src/index.js +7 -0
  214. package/dist/plugins/strapi/src/index.js +5 -0
  215. package/dist/plugins/strava/src/index.js +6 -0
  216. package/dist/plugins/stripe/src/index.js +20 -0
  217. package/dist/plugins/supabase/src/index.js +5 -0
  218. package/dist/plugins/syncromsp/src/index.js +20 -0
  219. package/dist/plugins/tapfiliate/src/index.js +11 -0
  220. package/dist/plugins/telegram/src/index.js +21 -0
  221. package/dist/plugins/thehive/src/index.js +23 -0
  222. package/dist/plugins/thehiveProject/src/index.js +31 -0
  223. package/dist/plugins/todoist/src/index.js +31 -0
  224. package/dist/plugins/together/src/index.js +1 -0
  225. package/dist/plugins/travisci/src/index.js +5 -0
  226. package/dist/plugins/trello/src/index.js +37 -0
  227. package/dist/plugins/twake/src/index.js +1 -0
  228. package/dist/plugins/twilio/src/index.js +2 -0
  229. package/dist/plugins/twist/src/index.js +22 -0
  230. package/dist/plugins/twitter/src/index.js +8 -0
  231. package/dist/plugins/unleashedSoftware/src/index.js +3 -0
  232. package/dist/plugins/uplead/src/index.js +2 -0
  233. package/dist/plugins/uproc/src/index.js +1 -0
  234. package/dist/plugins/uptimerobot/src/index.js +22 -0
  235. package/dist/plugins/urlscanio/src/index.js +3 -0
  236. package/dist/plugins/vercel/src/account.js +1 -0
  237. package/dist/plugins/vercel/src/deployments.js +5 -0
  238. package/dist/plugins/vercel/src/env.js +4 -0
  239. package/dist/plugins/vercel/src/projects.js +2 -0
  240. package/dist/plugins/vercel/src/shared.js +1 -0
  241. package/dist/plugins/vero/src/index.js +6 -0
  242. package/dist/plugins/vonage/src/index.js +1 -0
  243. package/dist/plugins/wekan/src/index.js +24 -0
  244. package/dist/plugins/woocommerce/src/index.js +5 -0
  245. package/dist/plugins/wordpress/src/index.js +10 -0
  246. package/dist/plugins/xai/src/index.js +1 -0
  247. package/dist/plugins/xero/src/index.js +8 -0
  248. package/dist/plugins/yourls/src/index.js +3 -0
  249. package/dist/plugins/zammad/src/index.js +12 -0
  250. package/dist/plugins/zendesk/src/index.js +18 -0
  251. package/dist/plugins/zoho/src/index.js +6 -0
  252. package/dist/plugins/zoom/src/index.js +5 -0
  253. package/dist/plugins/zulip/src/index.js +15 -0
  254. package/dist/sdk.d.ts +2 -1
  255. package/dist/sdk.js +1 -0
  256. package/package.json +1 -1
@@ -1,4 +1,6 @@
1
+ import * as t from "typebox";
1
2
  import { googleAccessToken } from "../../_shared/googleAuth.js";
3
+ import { Id, NonEmptyString, PositiveInteger, stringEnum, } from "../../_shared/googleSchemas.js";
2
4
  const SCRIPT_API = "https://script.googleapis.com/v1";
3
5
  const DRIVE_API = "https://www.googleapis.com/drive/v3";
4
6
  const SCOPES = [
@@ -7,6 +9,30 @@ const SCOPES = [
7
9
  "https://www.googleapis.com/auth/script.processes",
8
10
  "https://www.googleapis.com/auth/drive.metadata.readonly",
9
11
  ];
12
+ const scriptFileTypeSchema = stringEnum(["SERVER_JS", "HTML", "JSON"]);
13
+ const jsonValueSchema = t.Unsafe({
14
+ $defs: {
15
+ value: {
16
+ anyOf: [
17
+ { type: "null" },
18
+ { type: "string" },
19
+ { type: "number" },
20
+ { type: "boolean" },
21
+ { type: "array", items: { $ref: "#/$defs/value" } },
22
+ {
23
+ type: "object",
24
+ additionalProperties: { $ref: "#/$defs/value" },
25
+ },
26
+ ],
27
+ },
28
+ },
29
+ $ref: "#/$defs/value",
30
+ });
31
+ const scriptFileSchema = t.Object({
32
+ name: NonEmptyString,
33
+ type: scriptFileTypeSchema,
34
+ source: t.String(),
35
+ }, { additionalProperties: false });
10
36
  function accessToken(ctx) {
11
37
  return googleAccessToken(ctx, "googleAppsScript", SCOPES);
12
38
  }
@@ -46,11 +72,16 @@ export default function googleAppsScript(rl) {
46
72
  serviceAccountSubject: { type: "string", required: false, description: "User to impersonate (domain-wide delegation)", env: "GOOGLE_APPS_SCRIPT_SERVICE_ACCOUNT_SUBJECT" },
47
73
  });
48
74
  rl.registerAction("script.list", {
75
+ access: "read",
49
76
  description: "List Apps Script projects in Drive (standalone scripts; bound scripts live inside their container and don't appear here).",
50
- inputSchema: {
51
- query: { type: "string", required: false, description: "Case-insensitive name substring filter." },
52
- pageSize: { type: "number", required: false, description: "Max results (default 50)." },
53
- },
77
+ inputSchema: t.Object({
78
+ query: t.Optional(t.String({ description: "Case-insensitive name substring filter." })),
79
+ pageSize: t.Optional(t.Integer({
80
+ minimum: 1,
81
+ maximum: 1000,
82
+ description: "Max results (default 50).",
83
+ })),
84
+ }, { additionalProperties: false }),
54
85
  async execute(input, ctx) {
55
86
  const params = new URLSearchParams({
56
87
  q: "mimeType='application/vnd.google-apps.script' and trashed=false",
@@ -68,19 +99,24 @@ export default function googleAppsScript(rl) {
68
99
  },
69
100
  });
70
101
  rl.registerAction("project.getContent", {
102
+ access: "read",
71
103
  description: "Get all files of an Apps Script project (name, type, source).",
72
- inputSchema: { scriptId: { type: "string", required: true } },
104
+ inputSchema: t.Object({ scriptId: Id }, { additionalProperties: false }),
73
105
  async execute(input, ctx) {
74
106
  const res = await call(ctx, "GET", `${SCRIPT_API}/projects/${input.scriptId}/content`);
75
107
  return { scriptId: input.scriptId, files: res.files ?? [] };
76
108
  },
77
109
  });
78
110
  rl.registerAction("project.readFile", {
111
+ access: "read",
79
112
  description: "Read one file's source from a project.",
80
- inputSchema: {
81
- scriptId: { type: "string", required: true },
82
- name: { type: "string", required: true, description: "File name without extension (e.g. 'Code', 'appsscript')." },
83
- },
113
+ inputSchema: t.Object({
114
+ scriptId: Id,
115
+ name: t.String({
116
+ minLength: 1,
117
+ description: "File name without extension (e.g. 'Code', 'appsscript').",
118
+ }),
119
+ }, { additionalProperties: false }),
84
120
  async execute(input, ctx) {
85
121
  const res = await call(ctx, "GET", `${SCRIPT_API}/projects/${input.scriptId}/content`);
86
122
  const file = (res.files ?? []).find((f) => f.name === input.name);
@@ -90,13 +126,14 @@ export default function googleAppsScript(rl) {
90
126
  },
91
127
  });
92
128
  rl.registerAction("file.edit", {
129
+ access: "write",
93
130
  description: "Replace (or add) a single file's source, leaving other files untouched. Read-modify-write — the safe way to change code.",
94
- inputSchema: {
95
- scriptId: { type: "string", required: true },
96
- name: { type: "string", required: true },
97
- source: { type: "string", required: true },
98
- type: { type: "string", required: false, description: "SERVER_JS (default), HTML, or JSON (for appsscript)." },
99
- },
131
+ inputSchema: t.Object({
132
+ scriptId: Id,
133
+ name: NonEmptyString,
134
+ source: t.String(),
135
+ type: t.Optional(stringEnum(["SERVER_JS", "HTML", "JSON"])),
136
+ }, { additionalProperties: false }),
100
137
  async execute(input, ctx) {
101
138
  const cur = await call(ctx, "GET", `${SCRIPT_API}/projects/${input.scriptId}/content`);
102
139
  const files = cur.files ?? [];
@@ -112,22 +149,34 @@ export default function googleAppsScript(rl) {
112
149
  },
113
150
  });
114
151
  rl.registerAction("project.updateContent", {
152
+ access: "write",
115
153
  description: "Replace the entire project file set. files = [{name, type, source}], must include the appsscript JSON manifest. Prefer file.edit for single changes.",
116
- inputSchema: {
117
- scriptId: { type: "string", required: true },
118
- files: { type: "array", required: true, description: "[{name, type: SERVER_JS|HTML|JSON, source}]" },
119
- },
154
+ inputSchema: t.Object({
155
+ scriptId: Id,
156
+ files: t.Array(scriptFileSchema, {
157
+ minItems: 1,
158
+ contains: t.Object({
159
+ name: t.Literal("appsscript"),
160
+ type: t.Literal("JSON"),
161
+ }),
162
+ description: "Complete project files, including the appsscript JSON manifest",
163
+ }),
164
+ }, { additionalProperties: false }),
120
165
  async execute(input, ctx) {
121
166
  const res = await call(ctx, "PUT", `${SCRIPT_API}/projects/${input.scriptId}/content`, { files: input.files });
122
167
  return { scriptId: input.scriptId, fileCount: (res.files ?? []).length };
123
168
  },
124
169
  });
125
170
  rl.registerAction("project.create", {
171
+ access: "write",
126
172
  description: "Create a new Apps Script project. Pass parentId (a Drive file id, e.g. a Sheet) to bind it to that container.",
127
- inputSchema: {
128
- title: { type: "string", required: true },
129
- parentId: { type: "string", required: false, description: "Container Drive file id for a bound script." },
130
- },
173
+ inputSchema: t.Object({
174
+ title: NonEmptyString,
175
+ parentId: t.Optional(t.String({
176
+ minLength: 1,
177
+ description: "Container Drive file id for a bound script.",
178
+ })),
179
+ }, { additionalProperties: false }),
131
180
  async execute(input, ctx) {
132
181
  const payload = { title: input.title };
133
182
  if (input.parentId)
@@ -137,24 +186,26 @@ export default function googleAppsScript(rl) {
137
186
  },
138
187
  });
139
188
  rl.registerAction("version.create", {
189
+ access: "write",
140
190
  description: "Create an immutable version of the project (needed before deploying).",
141
- inputSchema: {
142
- scriptId: { type: "string", required: true },
143
- description: { type: "string", required: false },
144
- },
191
+ inputSchema: t.Object({
192
+ scriptId: Id,
193
+ description: t.Optional(t.String()),
194
+ }, { additionalProperties: false }),
145
195
  async execute(input, ctx) {
146
196
  const res = await call(ctx, "POST", `${SCRIPT_API}/projects/${input.scriptId}/versions`, { description: input.description || "" });
147
197
  return { scriptId: input.scriptId, versionNumber: res.versionNumber, description: res.description };
148
198
  },
149
199
  });
150
200
  rl.registerAction("deployment.create", {
201
+ access: "write",
151
202
  description: "Deploy a version. For function.run, deploy with an API-executable manifest (executionApi access).",
152
- inputSchema: {
153
- scriptId: { type: "string", required: true },
154
- versionNumber: { type: "number", required: true },
155
- description: { type: "string", required: false },
156
- manifestFileName: { type: "string", required: false, description: "Defaults to 'appsscript'." },
157
- },
203
+ inputSchema: t.Object({
204
+ scriptId: Id,
205
+ versionNumber: PositiveInteger,
206
+ description: t.Optional(t.String()),
207
+ manifestFileName: t.Optional(t.String({ minLength: 1, description: "Defaults to 'appsscript'." })),
208
+ }, { additionalProperties: false }),
158
209
  async execute(input, ctx) {
159
210
  const res = await call(ctx, "POST", `${SCRIPT_API}/projects/${input.scriptId}/deployments`, {
160
211
  versionNumber: input.versionNumber,
@@ -165,13 +216,16 @@ export default function googleAppsScript(rl) {
165
216
  },
166
217
  });
167
218
  rl.registerAction("function.run", {
219
+ access: "write",
168
220
  description: "Run a function via scripts.run. Requires the project linked to a standard GCP project, the Apps Script API enabled, and an API-executable deployment (or devMode for the owner).",
169
- inputSchema: {
170
- scriptId: { type: "string", required: true },
171
- functionName: { type: "string", required: true },
172
- parameters: { type: "array", required: false, description: "Positional args for the function." },
173
- devMode: { type: "boolean", required: false, description: "Run latest saved code (owner only). Default true." },
174
- },
221
+ inputSchema: t.Object({
222
+ scriptId: Id,
223
+ functionName: NonEmptyString,
224
+ parameters: t.Optional(t.Array(jsonValueSchema)),
225
+ devMode: t.Optional(t.Boolean({
226
+ description: "Run latest saved code (owner only). Default true.",
227
+ })),
228
+ }, { additionalProperties: false }),
175
229
  async execute(input, ctx) {
176
230
  const res = await call(ctx, "POST", `${SCRIPT_API}/scripts/${input.scriptId}:run`, {
177
231
  function: input.functionName,
@@ -186,11 +240,12 @@ export default function googleAppsScript(rl) {
186
240
  },
187
241
  });
188
242
  rl.registerAction("process.list", {
243
+ access: "read",
189
244
  description: "Recent executions for a project (status, function, times) — a log view.",
190
- inputSchema: {
191
- scriptId: { type: "string", required: true },
192
- pageSize: { type: "number", required: false, description: "Default 20." },
193
- },
245
+ inputSchema: t.Object({
246
+ scriptId: Id,
247
+ pageSize: t.Optional(t.Integer({ minimum: 1, maximum: 50, description: "Default 20." })),
248
+ }, { additionalProperties: false }),
194
249
  async execute(input, ctx) {
195
250
  const params = new URLSearchParams({
196
251
  "userProcessFilter.scriptId": input.scriptId,