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 { buildLocation, compact, extractDocumentId, hexToRgbF, location, runBatchUpdate, } from "./shared.js";
1
+ import * as t from "typebox";
2
+ import { buildLocation, compact, DocumentInput, extractDocumentId, HexColor, hexToRgbF, LOCATION_REQUIREMENT, LocationInput, location, PositivePoints, runBatchUpdate, SegmentInput, STRICT_OBJECT, TableLocationInput, } from "./shared.js";
3
+ const PositiveSpan = t.Integer({ minimum: 1 });
2
4
  function tableStartLocation(p) {
3
5
  return location(p.tableStartIndex, p.segmentId, p.tabId);
4
6
  }
@@ -14,16 +16,14 @@ function point(value) {
14
16
  }
15
17
  export function registerTablesActions(rl) {
16
18
  rl.registerAction("document.insertTable", {
19
+ access: "write",
17
20
  description: "Insert an empty table with the given dimensions.",
18
- inputSchema: {
19
- document: { type: "string", required: true },
20
- rows: { type: "number", required: true },
21
- columns: { type: "number", required: true },
22
- locationKind: { type: "string", required: false },
23
- index: { type: "number", required: false },
24
- segmentId: { type: "string", required: false },
25
- tabId: { type: "string", required: false },
26
- },
21
+ inputSchema: t.Object({
22
+ ...DocumentInput,
23
+ rows: PositiveSpan,
24
+ columns: PositiveSpan,
25
+ ...LocationInput,
26
+ }, { ...STRICT_OBJECT, anyOf: LOCATION_REQUIREMENT }),
27
27
  async execute(input, ctx) {
28
28
  const p = (input ?? {});
29
29
  const documentId = extractDocumentId(p.document);
@@ -38,24 +38,13 @@ export function registerTablesActions(rl) {
38
38
  },
39
39
  });
40
40
  rl.registerAction("document.insertTableRow", {
41
+ access: "write",
41
42
  description: "Insert a table row above or below a cell in an existing table.",
42
- inputSchema: {
43
- document: { type: "string", required: true },
44
- tableStartIndex: {
45
- type: "number",
46
- required: true,
47
- description: "Document index where the table begins",
48
- },
49
- rowIndex: { type: "number", required: true },
50
- columnIndex: { type: "number", required: true },
51
- insertBelow: {
52
- type: "boolean",
53
- required: false,
54
- description: "default: false (insert above)",
55
- },
56
- segmentId: { type: "string", required: false },
57
- tabId: { type: "string", required: false },
58
- },
43
+ inputSchema: t.Object({
44
+ ...DocumentInput,
45
+ ...TableLocationInput,
46
+ insertBelow: t.Optional(t.Boolean()),
47
+ }, STRICT_OBJECT),
59
48
  async execute(input, ctx) {
60
49
  const p = (input ?? {});
61
50
  const documentId = extractDocumentId(p.document);
@@ -68,15 +57,9 @@ export function registerTablesActions(rl) {
68
57
  },
69
58
  });
70
59
  rl.registerAction("document.deleteTableRow", {
60
+ access: "write",
71
61
  description: "Delete a specific row from a table.",
72
- inputSchema: {
73
- document: { type: "string", required: true },
74
- tableStartIndex: { type: "number", required: true },
75
- rowIndex: { type: "number", required: true },
76
- columnIndex: { type: "number", required: true },
77
- segmentId: { type: "string", required: false },
78
- tabId: { type: "string", required: false },
79
- },
62
+ inputSchema: t.Object({ ...DocumentInput, ...TableLocationInput }, STRICT_OBJECT),
80
63
  async execute(input, ctx) {
81
64
  const p = (input ?? {});
82
65
  const documentId = extractDocumentId(p.document);
@@ -88,20 +71,13 @@ export function registerTablesActions(rl) {
88
71
  },
89
72
  });
90
73
  rl.registerAction("document.insertTableColumn", {
74
+ access: "write",
91
75
  description: "Insert a column left or right of a cell.",
92
- inputSchema: {
93
- document: { type: "string", required: true },
94
- tableStartIndex: { type: "number", required: true },
95
- rowIndex: { type: "number", required: true },
96
- columnIndex: { type: "number", required: true },
97
- insertRight: {
98
- type: "boolean",
99
- required: false,
100
- description: "default: false (insert left)",
101
- },
102
- segmentId: { type: "string", required: false },
103
- tabId: { type: "string", required: false },
104
- },
76
+ inputSchema: t.Object({
77
+ ...DocumentInput,
78
+ ...TableLocationInput,
79
+ insertRight: t.Optional(t.Boolean()),
80
+ }, STRICT_OBJECT),
105
81
  async execute(input, ctx) {
106
82
  const p = (input ?? {});
107
83
  const documentId = extractDocumentId(p.document);
@@ -114,15 +90,9 @@ export function registerTablesActions(rl) {
114
90
  },
115
91
  });
116
92
  rl.registerAction("document.deleteTableColumn", {
93
+ access: "write",
117
94
  description: "Delete a specific column from a table.",
118
- inputSchema: {
119
- document: { type: "string", required: true },
120
- tableStartIndex: { type: "number", required: true },
121
- rowIndex: { type: "number", required: true },
122
- columnIndex: { type: "number", required: true },
123
- segmentId: { type: "string", required: false },
124
- tabId: { type: "string", required: false },
125
- },
95
+ inputSchema: t.Object({ ...DocumentInput, ...TableLocationInput }, STRICT_OBJECT),
126
96
  async execute(input, ctx) {
127
97
  const p = (input ?? {});
128
98
  const documentId = extractDocumentId(p.document);
@@ -134,31 +104,30 @@ export function registerTablesActions(rl) {
134
104
  },
135
105
  });
136
106
  rl.registerAction("document.updateTableCellStyle", {
107
+ access: "write",
137
108
  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
- inputSchema: {
139
- document: { type: "string", required: true },
140
- tableStartIndex: {
141
- type: "number",
142
- required: true,
143
- description: "The startIndex of the table element.",
144
- },
145
- rowIndex: { type: "number", required: true },
146
- columnIndex: { type: "number", required: true },
147
- rowSpan: { type: "number", required: false, default: 1 },
148
- columnSpan: { type: "number", required: false, default: 1 },
149
- backgroundColorHex: { type: "string", required: false },
150
- paddingLeftPt: { type: "number", required: false },
151
- paddingRightPt: { type: "number", required: false },
152
- paddingTopPt: { type: "number", required: false },
153
- paddingBottomPt: { type: "number", required: false },
154
- contentAlignment: {
155
- type: "string",
156
- required: false,
157
- description: "TOP | MIDDLE | BOTTOM",
158
- },
159
- segmentId: { type: "string", required: false },
160
- tabId: { type: "string", required: false },
161
- },
109
+ inputSchema: t.Object({
110
+ ...DocumentInput,
111
+ ...TableLocationInput,
112
+ rowSpan: t.Optional(PositiveSpan),
113
+ columnSpan: t.Optional(PositiveSpan),
114
+ backgroundColorHex: t.Optional(HexColor),
115
+ paddingLeftPt: t.Optional(PositivePoints),
116
+ paddingRightPt: t.Optional(PositivePoints),
117
+ paddingTopPt: t.Optional(PositivePoints),
118
+ paddingBottomPt: t.Optional(PositivePoints),
119
+ contentAlignment: t.Optional(t.Union([t.Literal("TOP"), t.Literal("MIDDLE"), t.Literal("BOTTOM")])),
120
+ }, {
121
+ ...STRICT_OBJECT,
122
+ anyOf: [
123
+ { required: ["backgroundColorHex"] },
124
+ { required: ["paddingLeftPt"] },
125
+ { required: ["paddingRightPt"] },
126
+ { required: ["paddingTopPt"] },
127
+ { required: ["paddingBottomPt"] },
128
+ { required: ["contentAlignment"] },
129
+ ],
130
+ }),
162
131
  async execute(input, ctx) {
163
132
  const p = (input ?? {});
164
133
  const documentId = extractDocumentId(p.document);
@@ -214,17 +183,14 @@ export function registerTablesActions(rl) {
214
183
  },
215
184
  });
216
185
  rl.registerAction("document.mergeTableCells", {
186
+ access: "write",
217
187
  description: "Merge a contiguous block of cells in a table.",
218
- inputSchema: {
219
- document: { type: "string", required: true },
220
- tableStartIndex: { type: "number", required: true },
221
- rowIndex: { type: "number", required: true },
222
- columnIndex: { type: "number", required: true },
223
- rowSpan: { type: "number", required: true },
224
- columnSpan: { type: "number", required: true },
225
- segmentId: { type: "string", required: false },
226
- tabId: { type: "string", required: false },
227
- },
188
+ inputSchema: t.Object({
189
+ ...DocumentInput,
190
+ ...TableLocationInput,
191
+ rowSpan: PositiveSpan,
192
+ columnSpan: PositiveSpan,
193
+ }, STRICT_OBJECT),
228
194
  async execute(input, ctx) {
229
195
  const p = (input ?? {});
230
196
  const documentId = extractDocumentId(p.document);
@@ -246,17 +212,14 @@ export function registerTablesActions(rl) {
246
212
  },
247
213
  });
248
214
  rl.registerAction("document.unmergeTableCells", {
215
+ access: "write",
249
216
  description: "Unmerge a previously merged block of cells.",
250
- inputSchema: {
251
- document: { type: "string", required: true },
252
- tableStartIndex: { type: "number", required: true },
253
- rowIndex: { type: "number", required: true },
254
- columnIndex: { type: "number", required: true },
255
- rowSpan: { type: "number", required: true },
256
- columnSpan: { type: "number", required: true },
257
- segmentId: { type: "string", required: false },
258
- tabId: { type: "string", required: false },
259
- },
217
+ inputSchema: t.Object({
218
+ ...DocumentInput,
219
+ ...TableLocationInput,
220
+ rowSpan: PositiveSpan,
221
+ columnSpan: PositiveSpan,
222
+ }, STRICT_OBJECT),
260
223
  async execute(input, ctx) {
261
224
  const p = (input ?? {});
262
225
  const documentId = extractDocumentId(p.document);
@@ -278,33 +241,28 @@ export function registerTablesActions(rl) {
278
241
  },
279
242
  });
280
243
  rl.registerAction("document.updateTableColumnProperties", {
244
+ access: "write",
281
245
  description: "Update table column properties such as width for selected columns or all columns.",
282
- inputSchema: {
283
- document: { type: "string", required: true },
284
- tableStartIndex: { type: "number", required: true },
285
- columnIndices: {
286
- type: "array",
287
- required: false,
288
- description: "Zero-based column indices. Omit to update all columns.",
289
- },
290
- widthPt: {
291
- type: "number",
292
- required: false,
293
- description: "Column width in points.",
294
- },
295
- widthType: {
296
- type: "string",
297
- required: false,
298
- description: "WIDTH_TYPE_UNSPECIFIED | EVENLY_DISTRIBUTED | FIXED_WIDTH. Defaults to FIXED_WIDTH when widthPt is provided.",
299
- },
300
- fields: {
301
- type: "string",
302
- required: false,
303
- description: "Field mask. Defaults to fields implied by supplied properties.",
304
- },
305
- segmentId: { type: "string", required: false },
306
- tabId: { type: "string", required: false },
307
- },
246
+ inputSchema: t.Object({
247
+ ...DocumentInput,
248
+ tableStartIndex: t.Integer({ minimum: 0 }),
249
+ columnIndices: t.Optional(t.Array(t.Integer({ minimum: 0 }), { minItems: 1 })),
250
+ widthPt: t.Optional(PositivePoints),
251
+ widthType: t.Optional(t.Union([
252
+ t.Literal("WIDTH_TYPE_UNSPECIFIED"),
253
+ t.Literal("EVENLY_DISTRIBUTED"),
254
+ t.Literal("FIXED_WIDTH"),
255
+ ])),
256
+ fields: t.Optional(t.String({ minLength: 1 })),
257
+ ...SegmentInput,
258
+ }, {
259
+ ...STRICT_OBJECT,
260
+ anyOf: [
261
+ { required: ["widthPt"] },
262
+ { required: ["widthType"] },
263
+ { required: ["fields"] },
264
+ ],
265
+ }),
308
266
  async execute(input, ctx) {
309
267
  const p = (input ?? {});
310
268
  const documentId = extractDocumentId(p.document);
@@ -333,24 +291,19 @@ export function registerTablesActions(rl) {
333
291
  },
334
292
  });
335
293
  rl.registerAction("document.updateTableRowStyle", {
294
+ access: "write",
336
295
  description: "Update table row style such as minimum row height for selected rows or all rows.",
337
- inputSchema: {
338
- document: { type: "string", required: true },
339
- tableStartIndex: { type: "number", required: true },
340
- rowIndices: {
341
- type: "array",
342
- required: false,
343
- description: "Zero-based row indices. Omit to update all rows.",
344
- },
345
- minRowHeightPt: { type: "number", required: false },
346
- fields: {
347
- type: "string",
348
- required: false,
349
- description: "Field mask. Defaults to fields implied by supplied properties.",
350
- },
351
- segmentId: { type: "string", required: false },
352
- tabId: { type: "string", required: false },
353
- },
296
+ inputSchema: t.Object({
297
+ ...DocumentInput,
298
+ tableStartIndex: t.Integer({ minimum: 0 }),
299
+ rowIndices: t.Optional(t.Array(t.Integer({ minimum: 0 }), { minItems: 1 })),
300
+ minRowHeightPt: t.Optional(PositivePoints),
301
+ fields: t.Optional(t.String({ minLength: 1 })),
302
+ ...SegmentInput,
303
+ }, {
304
+ ...STRICT_OBJECT,
305
+ anyOf: [{ required: ["minRowHeightPt"] }, { required: ["fields"] }],
306
+ }),
354
307
  async execute(input, ctx) {
355
308
  const p = (input ?? {});
356
309
  const documentId = extractDocumentId(p.document);
@@ -374,18 +327,14 @@ export function registerTablesActions(rl) {
374
327
  },
375
328
  });
376
329
  rl.registerAction("document.pinTableHeaderRows", {
330
+ access: "write",
377
331
  description: "Pin or unpin header rows in a table.",
378
- inputSchema: {
379
- document: { type: "string", required: true },
380
- tableStartIndex: { type: "number", required: true },
381
- pinnedHeaderRowsCount: {
382
- type: "number",
383
- required: true,
384
- description: "Use 0 to unpin all header rows.",
385
- },
386
- segmentId: { type: "string", required: false },
387
- tabId: { type: "string", required: false },
388
- },
332
+ inputSchema: t.Object({
333
+ ...DocumentInput,
334
+ tableStartIndex: t.Integer({ minimum: 0 }),
335
+ pinnedHeaderRowsCount: t.Integer({ minimum: 0 }),
336
+ ...SegmentInput,
337
+ }, STRICT_OBJECT),
389
338
  async execute(input, ctx) {
390
339
  const p = (input ?? {});
391
340
  const documentId = extractDocumentId(p.document);
@@ -1,4 +1,5 @@
1
- import { compact, extractDocumentId, runBatchUpdate } from "./shared.js";
1
+ import * as t from "typebox";
2
+ import { compact, DocumentInput, extractDocumentId, runBatchUpdate, STRICT_OBJECT, } from "./shared.js";
2
3
  function tabProperties(p) {
3
4
  return compact({
4
5
  tabId: p.tabId,
@@ -9,13 +10,14 @@ function tabProperties(p) {
9
10
  }
10
11
  export function registerTabActions(rl) {
11
12
  rl.registerAction("document.addDocumentTab", {
13
+ access: "write",
12
14
  description: "Add a Google Docs document tab, optionally at an index or under a parent tab.",
13
- inputSchema: {
14
- document: { type: "string", required: true },
15
- title: { type: "string", required: false },
16
- index: { type: "number", required: false },
17
- parentTabId: { type: "string", required: false },
18
- },
15
+ inputSchema: t.Object({
16
+ ...DocumentInput,
17
+ title: t.Optional(t.String({ minLength: 1 })),
18
+ index: t.Optional(t.Integer({ minimum: 0 })),
19
+ parentTabId: t.Optional(t.String({ minLength: 1 })),
20
+ }, STRICT_OBJECT),
19
21
  async execute(input, ctx) {
20
22
  const p = (input ?? {});
21
23
  const documentId = extractDocumentId(p.document);
@@ -25,11 +27,9 @@ export function registerTabActions(rl) {
25
27
  },
26
28
  });
27
29
  rl.registerAction("document.deleteTab", {
30
+ access: "write",
28
31
  description: "Delete a Google Docs document tab by tab ID. Child tabs are deleted too.",
29
- inputSchema: {
30
- document: { type: "string", required: true },
31
- tabId: { type: "string", required: true },
32
- },
32
+ inputSchema: t.Object({ ...DocumentInput, tabId: t.String({ minLength: 1 }) }, STRICT_OBJECT),
33
33
  async execute(input, ctx) {
34
34
  const p = (input ?? {});
35
35
  const documentId = extractDocumentId(p.document);
@@ -39,19 +39,23 @@ export function registerTabActions(rl) {
39
39
  },
40
40
  });
41
41
  rl.registerAction("document.updateDocumentTabProperties", {
42
+ access: "write",
42
43
  description: "Update Google Docs tab properties such as title, index, or parent tab.",
43
- inputSchema: {
44
- document: { type: "string", required: true },
45
- tabId: { type: "string", required: true },
46
- title: { type: "string", required: false },
47
- index: { type: "number", required: false },
48
- parentTabId: { type: "string", required: false },
49
- fields: {
50
- type: "string",
51
- required: false,
52
- description: "Field mask. Defaults to fields implied by supplied properties.",
53
- },
54
- },
44
+ inputSchema: t.Object({
45
+ ...DocumentInput,
46
+ tabId: t.String({ minLength: 1 }),
47
+ title: t.Optional(t.String({ minLength: 1 })),
48
+ index: t.Optional(t.Integer({ minimum: 0 })),
49
+ parentTabId: t.Optional(t.String({ minLength: 1 })),
50
+ fields: t.Optional(t.String({ minLength: 1 })),
51
+ }, {
52
+ ...STRICT_OBJECT,
53
+ anyOf: [
54
+ { required: ["title"] },
55
+ { required: ["index"] },
56
+ { required: ["parentTabId"] },
57
+ ],
58
+ }),
55
59
  async execute(input, ctx) {
56
60
  const p = (input ?? {});
57
61
  const documentId = extractDocumentId(p.document);