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,46 @@
1
- import { buildLocation, compact, extractDocumentId, hexToRgbF, runBatchUpdate, } from "./shared.js";
1
+ import * as t from "typebox";
2
+ import { buildLocation, compact, DocumentInput, extractDocumentId, HexColor, hexToRgbF, LOCATION_REQUIREMENT, LocationInput, PositivePoints, RangeInput, runBatchUpdate, STRICT_OBJECT, } from "./shared.js";
3
+ const PersonProperties = t.Object({ email: t.String({ minLength: 1 }) }, STRICT_OBJECT);
4
+ const RichLinkProperties = t.Object({
5
+ uri: t.String({ minLength: 1 }),
6
+ mimeType: t.Optional(t.String({ minLength: 1 })),
7
+ title: t.Optional(t.String({ minLength: 1 })),
8
+ }, STRICT_OBJECT);
9
+ const DateElementProperties = t.Object({
10
+ timestamp: t.Optional(t.String({ minLength: 1 })),
11
+ timeZoneId: t.Optional(t.String({ minLength: 1 })),
12
+ locale: t.Optional(t.String({ minLength: 1 })),
13
+ dateFormat: t.Optional(t.Union([
14
+ t.Literal("DATE_FORMAT_UNSPECIFIED"),
15
+ t.Literal("DATE_FORMAT_MONTH_DAY_ABBREVIATED"),
16
+ t.Literal("DATE_FORMAT_MONTH_DAY_FULL"),
17
+ t.Literal("DATE_FORMAT_MONTH_DAY_YEAR_ABBREVIATED"),
18
+ t.Literal("DATE_FORMAT_ISO8601"),
19
+ ])),
20
+ timeFormat: t.Optional(t.Union([
21
+ t.Literal("TIME_FORMAT_UNSPECIFIED"),
22
+ t.Literal("TIME_FORMAT_DISABLED"),
23
+ t.Literal("TIME_FORMAT_HOUR_MINUTE"),
24
+ t.Literal("TIME_FORMAT_HOUR_MINUTE_TIMEZONE"),
25
+ ])),
26
+ }, STRICT_OBJECT);
27
+ const BulletPreset = t.Union([
28
+ t.Literal("BULLET_DISC_CIRCLE_SQUARE"),
29
+ t.Literal("BULLET_DIAMONDX_ARROW3D_SQUARE"),
30
+ t.Literal("BULLET_CHECKBOX"),
31
+ t.Literal("BULLET_ARROW_DIAMOND_DISC"),
32
+ t.Literal("BULLET_STAR_CIRCLE_SQUARE"),
33
+ t.Literal("BULLET_ARROW3D_CIRCLE_SQUARE"),
34
+ t.Literal("BULLET_LEFTTRIANGLE_DIAMOND_DISC"),
35
+ t.Literal("BULLET_DIAMONDX_HOLLOWDIAMOND_SQUARE"),
36
+ t.Literal("BULLET_DIAMOND_CIRCLE_SQUARE"),
37
+ t.Literal("NUMBERED_DECIMAL_ALPHA_ROMAN"),
38
+ t.Literal("NUMBERED_DECIMAL_ALPHA_ROMAN_PARENS"),
39
+ t.Literal("NUMBERED_DECIMAL_NESTED"),
40
+ t.Literal("NUMBERED_UPPERALPHA_ALPHA_ROMAN"),
41
+ t.Literal("NUMBERED_UPPERROMAN_UPPERALPHA_DECIMAL"),
42
+ t.Literal("NUMBERED_ZERODECIMAL_ALPHA_ROMAN"),
43
+ ]);
2
44
  function range(p) {
3
45
  return compact({
4
46
  segmentId: p.segmentId && p.segmentId !== "body" ? p.segmentId : "",
@@ -9,27 +51,9 @@ function range(p) {
9
51
  }
10
52
  export function registerTextActions(rl) {
11
53
  rl.registerAction("document.insertText", {
54
+ access: "write",
12
55
  description: "Insert text at a specific index, or at the end of a segment (body/header/footer/footnote).",
13
- inputSchema: {
14
- document: { type: "string", required: true },
15
- text: { type: "string", required: true },
16
- locationKind: {
17
- type: "string",
18
- required: false,
19
- description: "location (default; requires index) | endOfSegmentLocation",
20
- },
21
- index: {
22
- type: "number",
23
- required: false,
24
- description: "Required for locationKind=location",
25
- },
26
- segmentId: {
27
- type: "string",
28
- required: false,
29
- description: 'Segment ID, or "body" / empty for the main body',
30
- },
31
- tabId: { type: "string", required: false },
32
- },
56
+ inputSchema: t.Object({ ...DocumentInput, text: t.String(), ...LocationInput }, { ...STRICT_OBJECT, anyOf: LOCATION_REQUIREMENT }),
33
57
  async execute(input, ctx) {
34
58
  const p = (input ?? {});
35
59
  const documentId = extractDocumentId(p.document);
@@ -41,19 +65,16 @@ export function registerTextActions(rl) {
41
65
  },
42
66
  });
43
67
  rl.registerAction("document.replaceAllText", {
68
+ access: "write",
44
69
  description: "Replace every occurrence of a text string throughout the document.",
45
- inputSchema: {
46
- document: { type: "string", required: true },
47
- findText: { type: "string", required: true },
48
- replaceText: { type: "string", required: true },
49
- matchCase: { type: "boolean", required: false },
50
- searchByRegex: { type: "boolean", required: false },
51
- tabIds: {
52
- type: "array",
53
- required: false,
54
- description: "Optional tab IDs for tabsCriteria.",
55
- },
56
- },
70
+ inputSchema: t.Object({
71
+ ...DocumentInput,
72
+ findText: t.String({ minLength: 1 }),
73
+ replaceText: t.String(),
74
+ matchCase: t.Optional(t.Boolean()),
75
+ searchByRegex: t.Optional(t.Boolean()),
76
+ tabIds: t.Optional(t.Array(t.String({ minLength: 1 }), { minItems: 1 })),
77
+ }, STRICT_OBJECT),
57
78
  async execute(input, ctx) {
58
79
  const p = (input ?? {});
59
80
  const documentId = extractDocumentId(p.document);
@@ -73,14 +94,9 @@ export function registerTextActions(rl) {
73
94
  },
74
95
  });
75
96
  rl.registerAction("document.deleteContentRange", {
97
+ access: "write",
76
98
  description: "Delete text between two indices in a segment.",
77
- inputSchema: {
78
- document: { type: "string", required: true },
79
- startIndex: { type: "number", required: true },
80
- endIndex: { type: "number", required: true },
81
- segmentId: { type: "string", required: false },
82
- tabId: { type: "string", required: false },
83
- },
99
+ inputSchema: t.Object({ ...DocumentInput, ...RangeInput }, STRICT_OBJECT),
84
100
  async execute(input, ctx) {
85
101
  const p = (input ?? {});
86
102
  const documentId = extractDocumentId(p.document);
@@ -90,15 +106,9 @@ export function registerTextActions(rl) {
90
106
  },
91
107
  });
92
108
  rl.registerAction("document.createParagraphBullets", {
109
+ access: "write",
93
110
  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
- inputSchema: {
95
- document: { type: "string", required: true },
96
- bulletPreset: { type: "string", required: true },
97
- startIndex: { type: "number", required: true },
98
- endIndex: { type: "number", required: true },
99
- segmentId: { type: "string", required: false },
100
- tabId: { type: "string", required: false },
101
- },
111
+ inputSchema: t.Object({ ...DocumentInput, bulletPreset: BulletPreset, ...RangeInput }, STRICT_OBJECT),
102
112
  async execute(input, ctx) {
103
113
  const p = (input ?? {});
104
114
  const documentId = extractDocumentId(p.document);
@@ -111,14 +121,9 @@ export function registerTextActions(rl) {
111
121
  },
112
122
  });
113
123
  rl.registerAction("document.deleteParagraphBullets", {
124
+ access: "write",
114
125
  description: "Remove bullets from paragraphs in a range.",
115
- inputSchema: {
116
- document: { type: "string", required: true },
117
- startIndex: { type: "number", required: true },
118
- endIndex: { type: "number", required: true },
119
- segmentId: { type: "string", required: false },
120
- tabId: { type: "string", required: false },
121
- },
126
+ inputSchema: t.Object({ ...DocumentInput, ...RangeInput }, STRICT_OBJECT),
122
127
  async execute(input, ctx) {
123
128
  const p = (input ?? {});
124
129
  const documentId = extractDocumentId(p.document);
@@ -128,23 +133,13 @@ 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
- inputSchema: {
133
- document: { type: "string", required: true },
134
- personProperties: {
135
- type: "object",
136
- required: true,
137
- description: "Docs API PersonProperties object.",
138
- },
139
- locationKind: {
140
- type: "string",
141
- required: false,
142
- description: "location (default; requires index) | endOfSegmentLocation",
143
- },
144
- index: { type: "number", required: false },
145
- segmentId: { type: "string", required: false },
146
- tabId: { type: "string", required: false },
147
- },
138
+ inputSchema: t.Object({
139
+ ...DocumentInput,
140
+ personProperties: PersonProperties,
141
+ ...LocationInput,
142
+ }, { ...STRICT_OBJECT, anyOf: LOCATION_REQUIREMENT }),
148
143
  async execute(input, ctx) {
149
144
  const p = (input ?? {});
150
145
  const documentId = extractDocumentId(p.document);
@@ -158,23 +153,13 @@ export function registerTextActions(rl) {
158
153
  },
159
154
  });
160
155
  rl.registerAction("document.insertRichLink", {
156
+ access: "write",
161
157
  description: "Insert a rich link smart chip at a location or at the end of a segment.",
162
- inputSchema: {
163
- document: { type: "string", required: true },
164
- richLinkProperties: {
165
- type: "object",
166
- required: true,
167
- description: "Docs API RichLinkProperties object.",
168
- },
169
- locationKind: {
170
- type: "string",
171
- required: false,
172
- description: "location (default; requires index) | endOfSegmentLocation",
173
- },
174
- index: { type: "number", required: false },
175
- segmentId: { type: "string", required: false },
176
- tabId: { type: "string", required: false },
177
- },
158
+ inputSchema: t.Object({
159
+ ...DocumentInput,
160
+ richLinkProperties: RichLinkProperties,
161
+ ...LocationInput,
162
+ }, { ...STRICT_OBJECT, anyOf: LOCATION_REQUIREMENT }),
178
163
  async execute(input, ctx) {
179
164
  const p = (input ?? {});
180
165
  const documentId = extractDocumentId(p.document);
@@ -188,23 +173,13 @@ export function registerTextActions(rl) {
188
173
  },
189
174
  });
190
175
  rl.registerAction("document.insertDate", {
176
+ access: "write",
191
177
  description: "Insert a date smart chip at a location or at the end of a segment.",
192
- inputSchema: {
193
- document: { type: "string", required: true },
194
- dateElementProperties: {
195
- type: "object",
196
- required: false,
197
- description: "Optional Docs API DateElementProperties object.",
198
- },
199
- locationKind: {
200
- type: "string",
201
- required: false,
202
- description: "location (default; requires index) | endOfSegmentLocation",
203
- },
204
- index: { type: "number", required: false },
205
- segmentId: { type: "string", required: false },
206
- tabId: { type: "string", required: false },
207
- },
178
+ inputSchema: t.Object({
179
+ ...DocumentInput,
180
+ dateElementProperties: t.Optional(DateElementProperties),
181
+ ...LocationInput,
182
+ }, { ...STRICT_OBJECT, anyOf: LOCATION_REQUIREMENT }),
208
183
  async execute(input, ctx) {
209
184
  const p = (input ?? {});
210
185
  const documentId = extractDocumentId(p.document);
@@ -220,39 +195,34 @@ export function registerTextActions(rl) {
220
195
  },
221
196
  });
222
197
  rl.registerAction("document.updateTextStyle", {
223
- description: "Apply text styling (bold, italic, underline, color, fontSize, fontFamily, link) to a range. Pass `fields` listing which TextStyle properties were set.",
224
- inputSchema: {
225
- document: { type: "string", required: true },
226
- startIndex: { type: "number", required: true },
227
- endIndex: { type: "number", required: true },
228
- bold: { type: "boolean", required: false },
229
- italic: { type: "boolean", required: false },
230
- underline: { type: "boolean", required: false },
231
- strikethrough: { type: "boolean", required: false },
232
- fontSizePt: {
233
- type: "number",
234
- required: false,
235
- description: "Font size in points.",
236
- },
237
- fontFamily: { type: "string", required: false },
238
- foregroundColorHex: {
239
- type: "string",
240
- required: false,
241
- description: "Hex color, e.g. #1A73E8",
242
- },
243
- backgroundColorHex: { type: "string", required: false },
244
- link: {
245
- type: "string",
246
- required: false,
247
- description: "URL for the linked range.",
248
- },
249
- segmentId: {
250
- type: "string",
251
- required: false,
252
- description: "Header/footer/footnote id; omit for the body.",
253
- },
254
- tabId: { type: "string", required: false },
255
- },
198
+ access: "write",
199
+ description: "Apply text styling (bold, italic, underline, color, font size, font family, or link) to a range.",
200
+ inputSchema: t.Object({
201
+ ...DocumentInput,
202
+ ...RangeInput,
203
+ bold: t.Optional(t.Boolean()),
204
+ italic: t.Optional(t.Boolean()),
205
+ underline: t.Optional(t.Boolean()),
206
+ strikethrough: t.Optional(t.Boolean()),
207
+ fontSizePt: t.Optional(PositivePoints),
208
+ fontFamily: t.Optional(t.String({ minLength: 1 })),
209
+ foregroundColorHex: t.Optional(HexColor),
210
+ backgroundColorHex: t.Optional(HexColor),
211
+ link: t.Optional(t.String({ minLength: 1 })),
212
+ }, {
213
+ ...STRICT_OBJECT,
214
+ anyOf: [
215
+ { required: ["bold"] },
216
+ { required: ["italic"] },
217
+ { required: ["underline"] },
218
+ { required: ["strikethrough"] },
219
+ { required: ["fontSizePt"] },
220
+ { required: ["fontFamily"] },
221
+ { required: ["foregroundColorHex"] },
222
+ { required: ["backgroundColorHex"] },
223
+ { required: ["link"] },
224
+ ],
225
+ }),
256
226
  async execute(input, ctx) {
257
227
  const p = (input ?? {});
258
228
  const documentId = extractDocumentId(p.document);