@commandable/integration-data 0.0.5 → 0.0.7

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 (387) hide show
  1. package/dist/credentials-index.d.ts.map +1 -1
  2. package/dist/credentials-index.js +183 -0
  3. package/dist/credentials-index.js.map +1 -1
  4. package/dist/index.d.ts +2 -2
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +1 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/loader.d.ts +33 -0
  9. package/dist/loader.d.ts.map +1 -1
  10. package/dist/loader.js +36 -4
  11. package/dist/loader.js.map +1 -1
  12. package/integrations/__tests__/liveHarness.ts +16 -3
  13. package/integrations/airtable/.env.test +9 -0
  14. package/integrations/airtable/.env.test.example +11 -0
  15. package/integrations/airtable/README.md +27 -0
  16. package/integrations/airtable/__tests__/get_handlers.test.ts +43 -5
  17. package/integrations/confluence/.env.test +25 -0
  18. package/integrations/confluence/.env.test.example +36 -0
  19. package/integrations/confluence/README.md +28 -0
  20. package/integrations/confluence/__tests__/get_handlers.test.ts +121 -0
  21. package/integrations/confluence/__tests__/usage_parity.test.ts +14 -0
  22. package/integrations/confluence/__tests__/write_handlers.test.ts +131 -0
  23. package/integrations/confluence/credentials.json +39 -0
  24. package/integrations/confluence/credentials_hint.md +4 -0
  25. package/integrations/confluence/credentials_hint_api_token.md +9 -0
  26. package/integrations/confluence/credentials_hint_oauth_token.md +8 -0
  27. package/integrations/confluence/handlers/add_comment.js +19 -0
  28. package/integrations/confluence/handlers/add_label.js +16 -0
  29. package/integrations/confluence/handlers/create_page.js +22 -0
  30. package/integrations/confluence/handlers/delete_page.js +17 -0
  31. package/integrations/confluence/handlers/get_comments.js +33 -0
  32. package/integrations/confluence/handlers/get_page_children.js +30 -0
  33. package/integrations/confluence/handlers/get_space.js +22 -0
  34. package/integrations/confluence/handlers/list_spaces.js +39 -0
  35. package/integrations/confluence/handlers/read_page.js +49 -0
  36. package/integrations/confluence/handlers/search_pages.js +42 -0
  37. package/integrations/confluence/handlers/update_page.js +42 -0
  38. package/integrations/confluence/manifest.json +85 -0
  39. package/integrations/confluence/prompt.md +55 -0
  40. package/integrations/confluence/schemas/add_comment.json +22 -0
  41. package/integrations/confluence/schemas/add_label.json +19 -0
  42. package/integrations/confluence/schemas/create_page.json +33 -0
  43. package/integrations/confluence/schemas/delete_page.json +23 -0
  44. package/integrations/confluence/schemas/empty.json +6 -0
  45. package/integrations/confluence/schemas/get_comments.json +24 -0
  46. package/integrations/confluence/schemas/get_page_children.json +28 -0
  47. package/integrations/confluence/schemas/get_space.json +18 -0
  48. package/integrations/confluence/schemas/list_spaces.json +36 -0
  49. package/integrations/confluence/schemas/read_page.json +28 -0
  50. package/integrations/confluence/schemas/search_pages.json +26 -0
  51. package/integrations/confluence/schemas/update_page.json +31 -0
  52. package/integrations/github/.env.test +16 -0
  53. package/integrations/github/.env.test.example +17 -0
  54. package/integrations/github/README.md +75 -0
  55. package/integrations/github/__tests__/get_handlers.test.ts +207 -12
  56. package/integrations/github/__tests__/write_handlers.test.ts +323 -55
  57. package/integrations/github/handlers/create_commit.js +10 -2
  58. package/integrations/github/handlers/create_file.js +46 -0
  59. package/integrations/github/handlers/create_pull_request_review.js +10 -0
  60. package/integrations/github/handlers/create_release.js +14 -0
  61. package/integrations/github/handlers/delete_branch.js +8 -0
  62. package/integrations/github/handlers/delete_file.js +22 -0
  63. package/integrations/github/handlers/edit_file.js +52 -0
  64. package/integrations/github/handlers/edit_files.js +107 -0
  65. package/integrations/github/handlers/fork_repo.js +10 -0
  66. package/integrations/github/handlers/get_commit.js +8 -0
  67. package/integrations/github/handlers/get_file_contents.js +21 -0
  68. package/integrations/github/handlers/get_job_logs.js +6 -0
  69. package/integrations/github/handlers/get_latest_release.js +4 -0
  70. package/integrations/github/handlers/get_me.js +4 -0
  71. package/integrations/github/handlers/get_pull_request.js +4 -0
  72. package/integrations/github/handlers/get_pull_request_diff.js +8 -0
  73. package/integrations/github/handlers/get_repo_tree.js +12 -0
  74. package/integrations/github/handlers/get_workflow_run.js +4 -0
  75. package/integrations/github/handlers/list_branches.js +6 -1
  76. package/integrations/github/handlers/list_commits.js +5 -6
  77. package/integrations/github/handlers/list_issue_comments.js +8 -0
  78. package/integrations/github/handlers/list_issues.js +5 -6
  79. package/integrations/github/handlers/list_labels.js +8 -0
  80. package/integrations/github/handlers/list_pull_request_comments.js +8 -0
  81. package/integrations/github/handlers/list_pull_request_files.js +8 -0
  82. package/integrations/github/handlers/list_pull_requests.js +7 -2
  83. package/integrations/github/handlers/list_releases.js +8 -0
  84. package/integrations/github/handlers/list_tags.js +8 -0
  85. package/integrations/github/handlers/list_workflow_runs.js +11 -0
  86. package/integrations/github/handlers/request_pull_request_reviewers.js +10 -0
  87. package/integrations/github/handlers/search_code.js +8 -0
  88. package/integrations/github/handlers/search_issues.js +8 -0
  89. package/integrations/github/handlers/search_pull_requests.js +8 -0
  90. package/integrations/github/handlers/search_repos.js +10 -0
  91. package/integrations/github/handlers/update_pull_request.js +13 -0
  92. package/integrations/github/manifest.json +86 -21
  93. package/integrations/github/prompt.md +36 -0
  94. package/integrations/github/schemas/create_file.json +13 -0
  95. package/integrations/github/schemas/create_pull_request_review.json +17 -0
  96. package/integrations/github/schemas/create_release.json +16 -0
  97. package/integrations/github/schemas/delete_branch.json +10 -0
  98. package/integrations/github/schemas/delete_file.json +13 -0
  99. package/integrations/github/schemas/edit_file.json +26 -0
  100. package/integrations/github/schemas/edit_files.json +39 -0
  101. package/integrations/github/schemas/fork_repo.json +11 -0
  102. package/integrations/github/schemas/get_commit.json +12 -0
  103. package/integrations/github/schemas/get_file_contents.json +11 -0
  104. package/integrations/github/schemas/get_job_logs.json +10 -0
  105. package/integrations/github/schemas/get_pull_request.json +10 -0
  106. package/integrations/github/schemas/get_pull_request_diff.json +10 -0
  107. package/integrations/github/schemas/get_repo_tree.json +12 -0
  108. package/integrations/github/schemas/get_workflow_run.json +10 -0
  109. package/integrations/github/schemas/list_branches.json +12 -0
  110. package/integrations/github/schemas/list_commits.json +5 -3
  111. package/integrations/github/schemas/list_issue_comments.json +12 -0
  112. package/integrations/github/schemas/list_issues.json +4 -2
  113. package/integrations/github/schemas/list_labels.json +11 -0
  114. package/integrations/github/schemas/list_pull_request_comments.json +12 -0
  115. package/integrations/github/schemas/list_pull_request_files.json +12 -0
  116. package/integrations/github/schemas/list_pull_requests.json +7 -1
  117. package/integrations/github/schemas/list_releases.json +11 -0
  118. package/integrations/github/schemas/list_tags.json +11 -0
  119. package/integrations/github/schemas/list_workflow_runs.json +18 -0
  120. package/integrations/github/schemas/request_pull_request_reviewers.json +20 -0
  121. package/integrations/github/schemas/search_code.json +10 -0
  122. package/integrations/github/schemas/search_issues.json +10 -0
  123. package/integrations/github/schemas/search_pull_requests.json +10 -0
  124. package/integrations/github/schemas/search_repos.json +12 -0
  125. package/integrations/github/schemas/update_pull_request.json +15 -0
  126. package/integrations/google-calendar/.env.test.example +11 -0
  127. package/integrations/google-calendar/README.md +41 -0
  128. package/integrations/google-calendar/__tests__/write_and_admin_handlers.test.ts +7 -20
  129. package/integrations/google-calendar/handlers/get_event.js +5 -1
  130. package/integrations/google-calendar/handlers/list_events.js +2 -0
  131. package/integrations/google-calendar/manifest.json +27 -18
  132. package/integrations/google-calendar/prompt.md +68 -0
  133. package/integrations/google-calendar/schemas/id_calendar_event.json +4 -2
  134. package/integrations/google-calendar/schemas/list_events.json +10 -8
  135. package/integrations/google-docs/README.md +30 -0
  136. package/integrations/google-docs/__tests__/get_handlers.test.ts +4 -19
  137. package/integrations/google-docs/__tests__/write_handlers.test.ts +31 -48
  138. package/integrations/google-docs/handlers/read_document.js +189 -0
  139. package/integrations/google-docs/manifest.json +16 -31
  140. package/integrations/google-docs/prompt.md +49 -0
  141. package/integrations/google-docs/schemas/{get_document_text.json → read_document.json} +5 -2
  142. package/integrations/google-docs/todo.md +18 -0
  143. package/integrations/google-drive/README.md +26 -0
  144. package/integrations/google-drive/__tests__/handlers.test.ts +43 -0
  145. package/integrations/google-drive/__tests__/usage_parity.test.ts +9 -0
  146. package/integrations/google-drive/handlers/get_file.js +2 -4
  147. package/integrations/google-drive/handlers/get_file_content.js +41 -0
  148. package/integrations/google-drive/handlers/list_files.js +15 -0
  149. package/integrations/google-drive/handlers/search_files.js +20 -0
  150. package/integrations/google-drive/handlers/share_file.js +20 -0
  151. package/integrations/google-drive/manifest.json +37 -10
  152. package/integrations/google-drive/prompt.md +59 -0
  153. package/integrations/google-drive/schemas/get_file.json +2 -2
  154. package/integrations/google-drive/schemas/get_file_content.json +11 -0
  155. package/integrations/google-drive/schemas/list_files.json +12 -0
  156. package/integrations/google-drive/schemas/search_files.json +14 -0
  157. package/integrations/google-drive/schemas/share_file.json +23 -0
  158. package/integrations/google-gmail/.env.test.example +11 -0
  159. package/integrations/google-gmail/README.md +49 -0
  160. package/integrations/google-gmail/__tests__/get_handlers.test.ts +134 -0
  161. package/integrations/google-gmail/__tests__/usage_parity.test.ts +9 -0
  162. package/integrations/google-gmail/__tests__/write_and_admin_handlers.test.ts +211 -0
  163. package/integrations/google-gmail/credentials.json +57 -0
  164. package/integrations/google-gmail/credentials_hint_oauth_token.md +8 -0
  165. package/integrations/google-gmail/credentials_hint_service_account.md +10 -0
  166. package/integrations/google-gmail/handlers/create_draft_email.js +27 -0
  167. package/integrations/google-gmail/handlers/create_label.js +12 -0
  168. package/integrations/google-gmail/handlers/delete_draft.js +13 -0
  169. package/integrations/google-gmail/handlers/delete_label.js +13 -0
  170. package/integrations/google-gmail/handlers/delete_message.js +13 -0
  171. package/integrations/google-gmail/handlers/delete_thread.js +13 -0
  172. package/integrations/google-gmail/handlers/get_draft.js +6 -0
  173. package/integrations/google-gmail/handlers/get_label.js +6 -0
  174. package/integrations/google-gmail/handlers/get_message.js +14 -0
  175. package/integrations/google-gmail/handlers/get_profile.js +5 -0
  176. package/integrations/google-gmail/handlers/get_thread.js +14 -0
  177. package/integrations/google-gmail/handlers/list_drafts.js +15 -0
  178. package/integrations/google-gmail/handlers/list_labels.js +5 -0
  179. package/integrations/google-gmail/handlers/list_messages.js +19 -0
  180. package/integrations/google-gmail/handlers/list_threads.js +19 -0
  181. package/integrations/google-gmail/handlers/modify_message.js +11 -0
  182. package/integrations/google-gmail/handlers/modify_thread.js +11 -0
  183. package/integrations/google-gmail/handlers/read_email.js +56 -0
  184. package/integrations/google-gmail/handlers/send_draft.js +15 -0
  185. package/integrations/google-gmail/handlers/send_email.js +22 -0
  186. package/integrations/google-gmail/handlers/trash_message.js +6 -0
  187. package/integrations/google-gmail/handlers/trash_thread.js +6 -0
  188. package/integrations/google-gmail/handlers/untrash_message.js +6 -0
  189. package/integrations/google-gmail/handlers/untrash_thread.js +6 -0
  190. package/integrations/google-gmail/handlers/update_label.js +15 -0
  191. package/integrations/google-gmail/manifest.json +44 -0
  192. package/integrations/google-gmail/prompt.md +52 -0
  193. package/integrations/google-gmail/schemas/create_draft_email.json +16 -0
  194. package/integrations/google-gmail/schemas/create_label.json +26 -0
  195. package/integrations/google-gmail/schemas/get_message.json +20 -0
  196. package/integrations/{google-docs/schemas/get_document_structured.json → google-gmail/schemas/get_profile.json} +4 -2
  197. package/integrations/google-gmail/schemas/get_thread.json +20 -0
  198. package/integrations/google-gmail/schemas/id_draft.json +16 -0
  199. package/integrations/google-gmail/schemas/id_label.json +16 -0
  200. package/integrations/google-gmail/schemas/id_message.json +16 -0
  201. package/integrations/google-gmail/schemas/id_thread.json +16 -0
  202. package/integrations/google-gmail/schemas/list_drafts.json +30 -0
  203. package/integrations/{google-sheet/schemas/get_developer_metadata.json → google-gmail/schemas/list_labels.json} +4 -3
  204. package/integrations/google-gmail/schemas/list_messages.json +35 -0
  205. package/integrations/google-gmail/schemas/list_threads.json +35 -0
  206. package/integrations/google-gmail/schemas/modify_message.json +24 -0
  207. package/integrations/google-gmail/schemas/modify_thread.json +24 -0
  208. package/integrations/google-gmail/schemas/read_email.json +10 -0
  209. package/integrations/google-gmail/schemas/send_draft.json +29 -0
  210. package/integrations/google-gmail/schemas/send_email.json +17 -0
  211. package/integrations/google-gmail/schemas/update_label.json +33 -0
  212. package/integrations/google-sheet/README.md +27 -0
  213. package/integrations/google-sheet/__tests__/get_handlers.test.ts +6 -52
  214. package/integrations/google-sheet/__tests__/write_handlers.test.ts +0 -20
  215. package/integrations/google-sheet/handlers/get_spreadsheet.js +2 -0
  216. package/integrations/google-sheet/handlers/read_sheet.js +75 -0
  217. package/integrations/google-sheet/manifest.json +13 -62
  218. package/integrations/google-sheet/prompt.md +49 -0
  219. package/integrations/google-sheet/schemas/get_spreadsheet.json +5 -4
  220. package/integrations/google-sheet/schemas/read_sheet.json +21 -0
  221. package/integrations/google-slides/README.md +28 -0
  222. package/integrations/google-slides/__tests__/get_handlers.test.ts +12 -9
  223. package/integrations/google-slides/handlers/read_presentation.js +51 -0
  224. package/integrations/google-slides/manifest.json +13 -13
  225. package/integrations/google-slides/prompt.md +56 -0
  226. package/integrations/hubspot/.env.test.example +20 -0
  227. package/integrations/hubspot/README.md +48 -0
  228. package/integrations/hubspot/__tests__/get_handlers.test.ts +151 -0
  229. package/integrations/hubspot/__tests__/usage_parity.test.ts +10 -0
  230. package/integrations/hubspot/__tests__/write_handlers.test.ts +244 -0
  231. package/integrations/hubspot/credentials.json +48 -0
  232. package/integrations/hubspot/credentials_hint.md +20 -0
  233. package/integrations/hubspot/credentials_hint_oauth_token.md +16 -0
  234. package/integrations/hubspot/handlers/archive_company.js +13 -0
  235. package/integrations/hubspot/handlers/archive_contact.js +13 -0
  236. package/integrations/hubspot/handlers/archive_deal.js +13 -0
  237. package/integrations/hubspot/handlers/archive_ticket.js +13 -0
  238. package/integrations/hubspot/handlers/create_association.js +18 -0
  239. package/integrations/hubspot/handlers/create_company.js +13 -0
  240. package/integrations/hubspot/handlers/create_contact.js +14 -0
  241. package/integrations/hubspot/handlers/create_deal.js +16 -0
  242. package/integrations/hubspot/handlers/create_note.js +44 -0
  243. package/integrations/hubspot/handlers/create_task.js +48 -0
  244. package/integrations/hubspot/handlers/create_ticket.js +15 -0
  245. package/integrations/hubspot/handlers/get_associations.js +14 -0
  246. package/integrations/hubspot/handlers/get_company.js +18 -0
  247. package/integrations/hubspot/handlers/get_contact.js +18 -0
  248. package/integrations/hubspot/handlers/get_deal.js +18 -0
  249. package/integrations/hubspot/handlers/get_ticket.js +20 -0
  250. package/integrations/hubspot/handlers/list_owners.js +12 -0
  251. package/integrations/hubspot/handlers/list_pipelines.js +5 -0
  252. package/integrations/hubspot/handlers/list_properties.js +11 -0
  253. package/integrations/hubspot/handlers/remove_association.js +22 -0
  254. package/integrations/hubspot/handlers/search_companies.js +43 -0
  255. package/integrations/hubspot/handlers/search_contacts.js +43 -0
  256. package/integrations/hubspot/handlers/search_deals.js +43 -0
  257. package/integrations/hubspot/handlers/search_notes.js +43 -0
  258. package/integrations/hubspot/handlers/search_tasks.js +43 -0
  259. package/integrations/hubspot/handlers/search_tickets.js +43 -0
  260. package/integrations/hubspot/handlers/update_company.js +13 -0
  261. package/integrations/hubspot/handlers/update_contact.js +14 -0
  262. package/integrations/hubspot/handlers/update_deal.js +16 -0
  263. package/integrations/hubspot/handlers/update_task.js +17 -0
  264. package/integrations/hubspot/handlers/update_ticket.js +15 -0
  265. package/integrations/hubspot/manifest.json +230 -0
  266. package/integrations/hubspot/prompt.md +69 -0
  267. package/integrations/hubspot/schemas/archive_company.json +13 -0
  268. package/integrations/hubspot/schemas/archive_contact.json +13 -0
  269. package/integrations/hubspot/schemas/archive_deal.json +9 -0
  270. package/integrations/hubspot/schemas/archive_ticket.json +9 -0
  271. package/integrations/hubspot/schemas/create_association.json +24 -0
  272. package/integrations/hubspot/schemas/create_company.json +14 -0
  273. package/integrations/hubspot/schemas/create_contact.json +15 -0
  274. package/integrations/hubspot/schemas/create_deal.json +20 -0
  275. package/integrations/hubspot/schemas/create_note.json +37 -0
  276. package/integrations/hubspot/schemas/create_task.json +51 -0
  277. package/integrations/hubspot/schemas/create_ticket.json +16 -0
  278. package/integrations/hubspot/schemas/empty.json +6 -0
  279. package/integrations/hubspot/schemas/get_associations.json +30 -0
  280. package/integrations/hubspot/schemas/get_company.json +27 -0
  281. package/integrations/hubspot/schemas/get_contact.json +27 -0
  282. package/integrations/hubspot/schemas/get_deal.json +20 -0
  283. package/integrations/hubspot/schemas/get_ticket.json +20 -0
  284. package/integrations/hubspot/schemas/list_owners.json +25 -0
  285. package/integrations/hubspot/schemas/list_pipelines.json +13 -0
  286. package/integrations/hubspot/schemas/list_properties.json +17 -0
  287. package/integrations/hubspot/schemas/remove_association.json +24 -0
  288. package/integrations/hubspot/schemas/search_companies.json +56 -0
  289. package/integrations/hubspot/schemas/search_contacts.json +56 -0
  290. package/integrations/hubspot/schemas/search_deals.json +43 -0
  291. package/integrations/hubspot/schemas/search_notes.json +43 -0
  292. package/integrations/hubspot/schemas/search_tasks.json +43 -0
  293. package/integrations/hubspot/schemas/search_tickets.json +43 -0
  294. package/integrations/hubspot/schemas/update_company.json +20 -0
  295. package/integrations/hubspot/schemas/update_contact.json +21 -0
  296. package/integrations/hubspot/schemas/update_deal.json +19 -0
  297. package/integrations/hubspot/schemas/update_task.json +31 -0
  298. package/integrations/hubspot/schemas/update_ticket.json +18 -0
  299. package/integrations/jira/.env.test +46 -0
  300. package/integrations/jira/.env.test.example +41 -0
  301. package/integrations/jira/README.md +46 -0
  302. package/integrations/jira/__tests__/get_handlers.test.ts +193 -0
  303. package/integrations/jira/__tests__/usage_parity.test.ts +14 -0
  304. package/integrations/jira/__tests__/write_handlers.test.ts +157 -0
  305. package/integrations/jira/credentials.json +39 -0
  306. package/integrations/jira/credentials_hint.md +4 -0
  307. package/integrations/jira/credentials_hint_api_token.md +6 -0
  308. package/integrations/jira/credentials_hint_oauth_token.md +6 -0
  309. package/integrations/jira/handlers/add_comment.js +9 -0
  310. package/integrations/jira/handlers/assign_issue.js +11 -0
  311. package/integrations/jira/handlers/create_issue.js +37 -0
  312. package/integrations/jira/handlers/create_sprint.js +19 -0
  313. package/integrations/jira/handlers/delete_issue.js +10 -0
  314. package/integrations/jira/handlers/get_backlog_issues.js +13 -0
  315. package/integrations/jira/handlers/get_board.js +6 -0
  316. package/integrations/jira/handlers/get_issue.js +63 -0
  317. package/integrations/jira/handlers/get_issue_comments.js +31 -0
  318. package/integrations/jira/handlers/get_myself.js +14 -0
  319. package/integrations/jira/handlers/get_project.js +28 -0
  320. package/integrations/jira/handlers/get_sprint.js +5 -0
  321. package/integrations/jira/handlers/get_sprint_issues.js +13 -0
  322. package/integrations/jira/handlers/get_transitions.js +23 -0
  323. package/integrations/jira/handlers/list_boards.js +34 -0
  324. package/integrations/jira/handlers/list_projects.js +29 -0
  325. package/integrations/jira/handlers/list_sprints.js +29 -0
  326. package/integrations/jira/handlers/move_issues_to_sprint.js +11 -0
  327. package/integrations/jira/handlers/search_issues.js +43 -0
  328. package/integrations/jira/handlers/search_users.js +21 -0
  329. package/integrations/jira/handlers/transition_issue.js +44 -0
  330. package/integrations/jira/handlers/update_issue.js +40 -0
  331. package/integrations/jira/handlers/update_sprint.js +20 -0
  332. package/integrations/jira/manifest.json +204 -0
  333. package/integrations/jira/prompt.md +80 -0
  334. package/integrations/jira/schemas/add_comment.json +16 -0
  335. package/integrations/jira/schemas/assign_issue.json +16 -0
  336. package/integrations/jira/schemas/create_issue.json +49 -0
  337. package/integrations/jira/schemas/create_sprint.json +29 -0
  338. package/integrations/jira/schemas/delete_issue.json +12 -0
  339. package/integrations/jira/schemas/empty.json +6 -0
  340. package/integrations/jira/schemas/get_backlog_issues.json +33 -0
  341. package/integrations/jira/schemas/get_board.json +13 -0
  342. package/integrations/jira/schemas/get_issue.json +23 -0
  343. package/integrations/jira/schemas/get_issue_comments.json +23 -0
  344. package/integrations/jira/schemas/get_project.json +17 -0
  345. package/integrations/jira/schemas/get_sprint.json +13 -0
  346. package/integrations/jira/schemas/get_sprint_issues.json +33 -0
  347. package/integrations/jira/schemas/get_transitions.json +12 -0
  348. package/integrations/jira/schemas/list_boards.json +27 -0
  349. package/integrations/jira/schemas/list_projects.json +22 -0
  350. package/integrations/jira/schemas/list_sprints.json +29 -0
  351. package/integrations/jira/schemas/move_issues_to_sprint.json +19 -0
  352. package/integrations/jira/schemas/search_issues.json +28 -0
  353. package/integrations/jira/schemas/search_users.json +18 -0
  354. package/integrations/jira/schemas/transition_issue.json +38 -0
  355. package/integrations/jira/schemas/update_issue.json +47 -0
  356. package/integrations/jira/schemas/update_sprint.json +33 -0
  357. package/integrations/new_integration_prompt.md +177 -2
  358. package/integrations/notion/.env.test +10 -0
  359. package/integrations/notion/.env.test.example +13 -0
  360. package/integrations/notion/README.md +42 -0
  361. package/integrations/notion/manifest.json +64 -35
  362. package/integrations/trello/.env.test +6 -0
  363. package/integrations/trello/.env.test.example +9 -0
  364. package/integrations/trello/README.md +50 -0
  365. package/package.json +7 -3
  366. package/integrations/google-calendar/handlers/update_event.js +0 -5
  367. package/integrations/google-calendar/schemas/update_event.json +0 -10
  368. package/integrations/google-docs/handlers/get_document.js +0 -12
  369. package/integrations/google-docs/handlers/get_document_structured.js +0 -6
  370. package/integrations/google-docs/handlers/get_document_text.js +0 -17
  371. package/integrations/google-docs/schemas/get_document.json +0 -11
  372. package/integrations/google-sheet/handlers/batch_clear_values_by_data_filter.js +0 -6
  373. package/integrations/google-sheet/handlers/batch_get_values.js +0 -16
  374. package/integrations/google-sheet/handlers/batch_update_values_by_data_filter.js +0 -16
  375. package/integrations/google-sheet/handlers/get_developer_metadata.js +0 -6
  376. package/integrations/google-sheet/handlers/get_spreadsheet_by_data_filter.js +0 -10
  377. package/integrations/google-sheet/handlers/get_values.js +0 -14
  378. package/integrations/google-sheet/handlers/get_values_by_data_filter.js +0 -14
  379. package/integrations/google-sheet/handlers/search_developer_metadata.js +0 -7
  380. package/integrations/google-sheet/schemas/batch_clear_values_by_data_filter.json +0 -10
  381. package/integrations/google-sheet/schemas/batch_get_values.json +0 -13
  382. package/integrations/google-sheet/schemas/batch_update_values_by_data_filter.json +0 -25
  383. package/integrations/google-sheet/schemas/get_spreadsheet_by_data_filter.json +0 -11
  384. package/integrations/google-sheet/schemas/get_values.json +0 -13
  385. package/integrations/google-sheet/schemas/get_values_by_data_filter.json +0 -17
  386. package/integrations/google-sheet/schemas/search_developer_metadata.json +0 -14
  387. package/integrations/google-slides/handlers/get_presentation.js +0 -6
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "required": ["labelId"],
5
+ "properties": {
6
+ "userId": {
7
+ "type": "string",
8
+ "description": "User email address or 'me'. Defaults to 'me'."
9
+ },
10
+ "labelId": {
11
+ "type": "string",
12
+ "description": "Gmail label ID."
13
+ }
14
+ },
15
+ "additionalProperties": false
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "required": ["messageId"],
5
+ "properties": {
6
+ "userId": {
7
+ "type": "string",
8
+ "description": "User email address or 'me'. Defaults to 'me'."
9
+ },
10
+ "messageId": {
11
+ "type": "string",
12
+ "description": "Gmail message ID."
13
+ }
14
+ },
15
+ "additionalProperties": false
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "required": ["threadId"],
5
+ "properties": {
6
+ "userId": {
7
+ "type": "string",
8
+ "description": "User email address or 'me'. Defaults to 'me'."
9
+ },
10
+ "threadId": {
11
+ "type": "string",
12
+ "description": "Gmail thread ID."
13
+ }
14
+ },
15
+ "additionalProperties": false
16
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "userId": {
6
+ "type": "string",
7
+ "description": "User email address or 'me'. Defaults to 'me'."
8
+ },
9
+ "q": {
10
+ "type": "string",
11
+ "description": "Gmail search query to filter drafts. Supports the same operators as list_messages: 'subject:keyword', 'to:user@example.com', etc."
12
+ },
13
+ "maxResults": {
14
+ "type": "integer",
15
+ "minimum": 1,
16
+ "maximum": 500,
17
+ "default": 20,
18
+ "description": "Maximum number of drafts to return. Defaults to 20. Use pageToken from the response for the next page."
19
+ },
20
+ "pageToken": {
21
+ "type": "string",
22
+ "description": "Page token from a previous list_drafts response. Pass this to retrieve the next page."
23
+ },
24
+ "includeSpamTrash": {
25
+ "type": "boolean",
26
+ "description": "Include drafts from SPAM and TRASH in results. Defaults to false."
27
+ }
28
+ },
29
+ "additionalProperties": false
30
+ }
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "type": "object",
4
- "required": ["spreadsheetId", "metadataId"],
5
4
  "properties": {
6
- "spreadsheetId": { "type": "string" },
7
- "metadataId": { "type": "integer" }
5
+ "userId": {
6
+ "type": "string",
7
+ "description": "User email address or the special value 'me'. Defaults to 'me'."
8
+ }
8
9
  },
9
10
  "additionalProperties": false
10
11
  }
@@ -0,0 +1,35 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "userId": {
6
+ "type": "string",
7
+ "description": "User email address or 'me'. Defaults to 'me'."
8
+ },
9
+ "q": {
10
+ "type": "string",
11
+ "description": "Gmail search query. Supported operators: 'is:unread', 'is:read', 'from:user@example.com', 'to:user@example.com', 'subject:keyword', 'has:attachment', 'label:INBOX', 'after:2024/01/01', 'before:2024/12/31', 'newer_than:7d', 'older_than:1y', 'in:sent', 'in:drafts'. Combine operators with spaces (implicit AND) or use OR/NOT."
12
+ },
13
+ "labelIds": {
14
+ "type": "array",
15
+ "description": "Filter to messages with all of these label IDs applied. Common IDs: 'INBOX', 'UNREAD', 'STARRED', 'SENT', 'DRAFT', 'SPAM', 'TRASH'. Use list_labels for custom label IDs.",
16
+ "items": { "type": "string" }
17
+ },
18
+ "maxResults": {
19
+ "type": "integer",
20
+ "minimum": 1,
21
+ "maximum": 500,
22
+ "default": 20,
23
+ "description": "Maximum number of messages to return. Defaults to 20. Use pageToken from the response for the next page of results."
24
+ },
25
+ "pageToken": {
26
+ "type": "string",
27
+ "description": "Page token from a previous list_messages response. Pass this to retrieve the next page."
28
+ },
29
+ "includeSpamTrash": {
30
+ "type": "boolean",
31
+ "description": "Include messages from SPAM and TRASH in results. Defaults to false."
32
+ }
33
+ },
34
+ "additionalProperties": false
35
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "userId": {
6
+ "type": "string",
7
+ "description": "User email address or 'me'. Defaults to 'me'."
8
+ },
9
+ "q": {
10
+ "type": "string",
11
+ "description": "Gmail search query. Supported operators: 'is:unread', 'from:user@example.com', 'to:user@example.com', 'subject:keyword', 'has:attachment', 'after:2024/01/01', 'newer_than:7d', 'label:INBOX'. Same syntax as list_messages."
12
+ },
13
+ "labelIds": {
14
+ "type": "array",
15
+ "description": "Filter to threads where all messages have these label IDs. Common IDs: 'INBOX', 'UNREAD', 'STARRED', 'SENT'. Use list_labels for custom label IDs.",
16
+ "items": { "type": "string" }
17
+ },
18
+ "maxResults": {
19
+ "type": "integer",
20
+ "minimum": 1,
21
+ "maximum": 500,
22
+ "default": 20,
23
+ "description": "Maximum number of threads to return. Defaults to 20. Use pageToken from the response for the next page of results."
24
+ },
25
+ "pageToken": {
26
+ "type": "string",
27
+ "description": "Page token from a previous list_threads response. Pass this to retrieve the next page."
28
+ },
29
+ "includeSpamTrash": {
30
+ "type": "boolean",
31
+ "description": "Include threads from SPAM and TRASH in results. Defaults to false."
32
+ }
33
+ },
34
+ "additionalProperties": false
35
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "required": ["messageId"],
5
+ "properties": {
6
+ "userId": { "type": "string", "description": "User email address or 'me'. Defaults to 'me'." },
7
+ "messageId": { "type": "string", "description": "Gmail message ID." },
8
+ "addLabelIds": {
9
+ "type": "array",
10
+ "items": { "type": "string" },
11
+ "description": "Label IDs to add."
12
+ },
13
+ "removeLabelIds": {
14
+ "type": "array",
15
+ "items": { "type": "string" },
16
+ "description": "Label IDs to remove."
17
+ }
18
+ },
19
+ "anyOf": [
20
+ { "required": ["addLabelIds"] },
21
+ { "required": ["removeLabelIds"] }
22
+ ],
23
+ "additionalProperties": false
24
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "required": ["threadId"],
5
+ "properties": {
6
+ "userId": { "type": "string", "description": "User email address or 'me'. Defaults to 'me'." },
7
+ "threadId": { "type": "string", "description": "Gmail thread ID." },
8
+ "addLabelIds": {
9
+ "type": "array",
10
+ "items": { "type": "string" },
11
+ "description": "Label IDs to add."
12
+ },
13
+ "removeLabelIds": {
14
+ "type": "array",
15
+ "items": { "type": "string" },
16
+ "description": "Label IDs to remove."
17
+ }
18
+ },
19
+ "anyOf": [
20
+ { "required": ["addLabelIds"] },
21
+ { "required": ["removeLabelIds"] }
22
+ ],
23
+ "additionalProperties": false
24
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "required": ["messageId"],
5
+ "properties": {
6
+ "userId": { "type": "string", "description": "User email or 'me'. Defaults to 'me'." },
7
+ "messageId": { "type": "string", "description": "Gmail message ID. Obtain from list_messages or search results." }
8
+ },
9
+ "additionalProperties": false
10
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "properties": {
5
+ "userId": { "type": "string", "description": "User email address or 'me'. Defaults to 'me'." },
6
+ "draftId": {
7
+ "type": "string",
8
+ "description": "Draft ID to send."
9
+ },
10
+ "raw": {
11
+ "type": "string",
12
+ "description": "Optional base64url encoded RFC822 message string for one-off send."
13
+ },
14
+ "threadId": {
15
+ "type": "string",
16
+ "description": "Optional existing thread ID when sending a one-off draft payload."
17
+ },
18
+ "labelIds": {
19
+ "type": "array",
20
+ "items": { "type": "string" },
21
+ "description": "Optional label IDs when sending a one-off draft payload."
22
+ }
23
+ },
24
+ "anyOf": [
25
+ { "required": ["draftId"] },
26
+ { "required": ["raw"] }
27
+ ],
28
+ "additionalProperties": false
29
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "required": ["to", "subject", "body"],
5
+ "properties": {
6
+ "userId": { "type": "string", "description": "User email or 'me'. Defaults to 'me'." },
7
+ "to": { "type": "string", "description": "Recipient email address. Use comma-separated values for multiple recipients (e.g. 'alice@example.com, bob@example.com')." },
8
+ "cc": { "type": "string", "description": "CC recipients, comma-separated." },
9
+ "bcc": { "type": "string", "description": "BCC recipients, comma-separated." },
10
+ "subject": { "type": "string", "description": "Email subject line." },
11
+ "body": { "type": "string", "description": "Plain text email body. Required unless htmlBody is provided." },
12
+ "htmlBody": { "type": "string", "description": "HTML email body. If provided, takes precedence over body and the email is sent as text/html." },
13
+ "replyToMessageId": { "type": "string", "description": "Message ID of the email being replied to. Sets the In-Reply-To header for proper threading. Use with threadId." },
14
+ "threadId": { "type": "string", "description": "Thread ID to add this message to. Required when replying so the reply appears in the same conversation." }
15
+ },
16
+ "additionalProperties": false
17
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "required": ["labelId"],
5
+ "properties": {
6
+ "userId": { "type": "string", "description": "User email address or 'me'. Defaults to 'me'." },
7
+ "labelId": { "type": "string", "description": "Gmail label ID." },
8
+ "name": { "type": "string", "description": "Label display name." },
9
+ "messageListVisibility": {
10
+ "type": "string",
11
+ "enum": ["show", "hide"]
12
+ },
13
+ "labelListVisibility": {
14
+ "type": "string",
15
+ "enum": ["labelShow", "labelShowIfUnread", "labelHide"]
16
+ },
17
+ "color": {
18
+ "type": "object",
19
+ "properties": {
20
+ "textColor": { "type": "string", "description": "Hex color, e.g. #000000" },
21
+ "backgroundColor": { "type": "string", "description": "Hex color, e.g. #ffffff" }
22
+ },
23
+ "additionalProperties": false
24
+ }
25
+ },
26
+ "anyOf": [
27
+ { "required": ["name"] },
28
+ { "required": ["messageListVisibility"] },
29
+ { "required": ["labelListVisibility"] },
30
+ { "required": ["color"] }
31
+ ],
32
+ "additionalProperties": false
33
+ }
@@ -0,0 +1,27 @@
1
+ # Google Sheets
2
+
3
+ **10 tools**
4
+
5
+ ![Google Sheets tests](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/theomccabe/771bd329f303087690c522afa1baa6f3/raw/test-google-sheet.json)
6
+
7
+ ## Credential variants
8
+
9
+ | Variant | Label |
10
+ |---|---|
11
+ | `service_account` | Service Account (recommended) _(default)_ |
12
+ | `oauth_token` | OAuth Access Token (short-lived) |
13
+
14
+ ## Tools
15
+
16
+ | Tool | Scope | Description |
17
+ |---|---|---|
18
+ | `get_spreadsheet` | read | Retrieve spreadsheet metadata including all sheet names, IDs, and properties. Set include… |
19
+ | `read_sheet` | read | Read cell values from a sheet range and return as a Markdown table with A1 column headers… |
20
+ | `create_spreadsheet` | write | Create a new Google Spreadsheet. Accepts a full spreadsheet resource body, allowing you t… |
21
+ | `update_values` | write | Write values to a specific A1 range, replacing existing content. Use valueInputOption='US… |
22
+ | `append_values` | write | Append rows of values after the last row of existing data in a range. Useful for adding n… |
23
+ | `batch_update_values` | write | Write values to multiple A1 ranges in a single API call. More efficient than calling upda… |
24
+ | `clear_values` | write | Clear all values (but not formatting) in the specified A1 range. The cells remain but the… |
25
+ | `batch_clear_values` | write | Clear values from multiple A1 ranges in a single API call. More efficient than calling cl… |
26
+ | `batch_update` | write | Send a spreadsheets.batchUpdate request for structural changes such as addSheet, deleteSh… |
27
+ | `copy_to_spreadsheet` | write | Copy a specific sheet (tab) from one spreadsheet to another. Provide the source spreadshe… |
@@ -63,60 +63,14 @@ suite('google-sheet read handlers (live)', () => {
63
63
  expect(result?.spreadsheetId || result?.sheets).toBeTruthy()
64
64
  }, 30000)
65
65
 
66
- it('get_values returns a value range', async () => {
66
+ it('read_sheet returns markdown with A1 coordinates', async () => {
67
67
  if (!spreadsheetId)
68
68
  return expect(true).toBe(true)
69
- const handler = sheets.read('get_values')
69
+ const handler = sheets.read('read_sheet')
70
70
  const range = sheetTitle ? `${sheetTitle}!A1:B5` : 'A1:B5'
71
- const result = await handler({ spreadsheetId, range })
72
- expect(result?.range || result?.values).toBeTruthy()
73
- }, 30000)
74
-
75
- it('batch_get_values returns multiple ranges', async () => {
76
- if (!spreadsheetId)
77
- return expect(true).toBe(true)
78
- const handler = sheets.read('batch_get_values')
79
- const aTitle = sheetTitle || 'Sheet1'
80
- const result = await handler({ spreadsheetId, ranges: [`${aTitle}!A1:A3`, `${aTitle}!B1:B3`] })
81
- expect(Array.isArray(result?.valueRanges)).toBe(true)
82
- }, 30000)
83
-
84
- it('get_spreadsheet_by_data_filter returns metadata', async () => {
85
- if (!spreadsheetId)
86
- return expect(true).toBe(true)
87
- const handler = sheets.read('get_spreadsheet_by_data_filter')
88
- const aTitle = sheetTitle || 'Sheet1'
89
- const result = await handler({ spreadsheetId, dataFilters: [{ a1Range: `${aTitle}!A1:A1` }] })
90
- expect(result?.spreadsheetId || result?.sheets).toBeTruthy()
91
- }, 30000)
92
-
93
- it('get_values_by_data_filter returns values', async () => {
94
- if (!spreadsheetId)
95
- return expect(true).toBe(true)
96
- const handler = sheets.read('get_values_by_data_filter')
97
- const aTitle = sheetTitle || 'Sheet1'
98
- const result = await handler({ spreadsheetId, dataFilters: [{ a1Range: `${aTitle}!A1:B2` }] })
99
- expect(Array.isArray(result?.valueRanges)).toBe(true)
100
- }, 30000)
101
-
102
- it('search_developer_metadata returns results or empty', async () => {
103
- if (!spreadsheetId)
104
- return expect(true).toBe(true)
105
- const handler = sheets.read('search_developer_metadata')
106
- const result = await handler({ spreadsheetId, dataFilters: [{ developerMetadataLookup: { visibility: 'DOCUMENT' } }] })
107
- expect(result !== undefined).toBe(true)
108
- }, 30000)
109
-
110
- it('get_developer_metadata retrieves by id when available', async () => {
111
- if (!spreadsheetId)
112
- return expect(true).toBe(true)
113
- const search = sheets.read('search_developer_metadata')
114
- const list = await search({ spreadsheetId, dataFilters: [{ developerMetadataLookup: { visibility: 'DOCUMENT' } }] })
115
- const first = list?.matchedDeveloperMetadata?.[0]?.developerMetadata || list?.developerMetadata?.[0]
116
- if (!first?.metadataId)
117
- return expect(true).toBe(true)
118
- const getdm = sheets.read('get_developer_metadata')
119
- const got = await getdm({ spreadsheetId, metadataId: first.metadataId })
120
- expect(got?.metadataId).toBe(first.metadataId)
71
+ const result = await handler({ spreadsheetId, range, valueRenderOption: 'FORMATTED_VALUE' })
72
+ expect(result?.range).toBeTruthy()
73
+ expect(typeof result?.markdown).toBe('string')
74
+ expect(result?.columnCount >= 1).toBe(true)
121
75
  }, 30000)
122
76
  })
@@ -110,17 +110,6 @@ suite('google-sheet write handlers (live)', () => {
110
110
  expect(res?.totalUpdatedCells >= 0 || res?.spreadsheetId).toBeTruthy()
111
111
  }, 60000)
112
112
 
113
- it('batch_update_values_by_data_filter updates via filters', async () => {
114
- if (!ctx.spreadsheetId)
115
- return expect(true).toBe(true)
116
- const aTitle = sheetTitle || 'Sheet1'
117
- const batch_update_values_by_data_filter = sheets.write('batch_update_values_by_data_filter')
118
- const res = await batch_update_values_by_data_filter({ spreadsheetId: ctx.spreadsheetId, data: [
119
- { dataFilter: { a1Range: `${aTitle}!D1:D1` }, values: [[`CmdTestDF ${Date.now()}`]] },
120
- ], valueInputOption: 'USER_ENTERED' })
121
- expect(res?.totalUpdatedCells >= 0 || res?.spreadsheetId).toBeTruthy()
122
- }, 60000)
123
-
124
113
  it('batch_clear_values clears multiple ranges', async () => {
125
114
  if (!ctx.spreadsheetId)
126
115
  return expect(true).toBe(true)
@@ -130,15 +119,6 @@ suite('google-sheet write handlers (live)', () => {
130
119
  expect(Boolean(res?.spreadsheetId) || Array.isArray(res?.clearedRanges)).toBe(true)
131
120
  }, 60000)
132
121
 
133
- it('batch_clear_values_by_data_filter clears via filters', async () => {
134
- if (!ctx.spreadsheetId)
135
- return expect(true).toBe(true)
136
- const aTitle = sheetTitle || 'Sheet1'
137
- const batch_clear_values_by_data_filter = sheets.write('batch_clear_values_by_data_filter')
138
- const res = await batch_clear_values_by_data_filter({ spreadsheetId: ctx.spreadsheetId, dataFilters: [{ a1Range: `${aTitle}!E1:E2` }] })
139
- expect(Boolean(res?.spreadsheetId) || Array.isArray(res?.clearedRanges)).toBe(true)
140
- }, 60000)
141
-
142
122
  it('batch_update handles a trivial request (no-op findReplace)', async () => {
143
123
  if (!ctx.spreadsheetId)
144
124
  return expect(true).toBe(true)
@@ -5,6 +5,8 @@ async (input) => {
5
5
  params.set('includeGridData', String(includeGridData))
6
6
  if (Array.isArray(ranges))
7
7
  ranges.forEach(r => params.append('ranges', String(r)))
8
+ if (input.fields)
9
+ params.set('fields', input.fields)
8
10
  const qs = params.toString()
9
11
  const path = `/spreadsheets/${encodeURIComponent(spreadsheetId)}${qs ? `?${qs}` : ''}`
10
12
  const res = await integration.fetch(path)
@@ -0,0 +1,75 @@
1
+ async (input) => {
2
+ const toColumnName = (index) => {
3
+ let n = index + 1
4
+ let out = ''
5
+ while (n > 0) {
6
+ const rem = (n - 1) % 26
7
+ out = String.fromCharCode(65 + rem) + out
8
+ n = Math.floor((n - 1) / 26)
9
+ }
10
+ return out
11
+ }
12
+
13
+ const columnNameToIndex = (name) => {
14
+ let value = 0
15
+ for (const ch of name.toUpperCase()) {
16
+ const code = ch.charCodeAt(0)
17
+ if (code < 65 || code > 90) continue
18
+ value = value * 26 + (code - 64)
19
+ }
20
+ return Math.max(0, value - 1)
21
+ }
22
+
23
+ const parseResolvedRange = (resolvedRange) => {
24
+ // Examples: "Sheet1!A1:D5", "Sheet1!B:B", "Sheet1!2:9"
25
+ const a1 = String(resolvedRange || '').split('!')[1] || ''
26
+ const [start = 'A1'] = a1.split(':')
27
+ const letters = (start.match(/[A-Za-z]+/) || ['A'])[0]
28
+ const rowDigits = (start.match(/\d+/) || ['1'])[0]
29
+ return {
30
+ startColumn: columnNameToIndex(letters),
31
+ startRow: Math.max(1, parseInt(rowDigits, 10) || 1),
32
+ }
33
+ }
34
+
35
+ const escapeCell = (value) =>
36
+ String(value ?? '')
37
+ .replace(/\|/g, '\\|')
38
+ .replace(/\r?\n/g, '<br>')
39
+
40
+ const spreadsheetId = input.spreadsheetId
41
+ const range = input.range || 'A1:Z1000'
42
+ const params = new URLSearchParams()
43
+ if (input.valueRenderOption) params.set('valueRenderOption', input.valueRenderOption)
44
+
45
+ const qs = params.toString()
46
+ const path = `/spreadsheets/${encodeURIComponent(spreadsheetId)}/values/${encodeURIComponent(range)}${qs ? `?${qs}` : ''}`
47
+ const res = await integration.fetch(path)
48
+ const payload = await res.json()
49
+
50
+ const values = Array.isArray(payload?.values) ? payload.values : []
51
+ const resolvedRange = payload?.range || range
52
+ const { startColumn, startRow } = parseResolvedRange(resolvedRange)
53
+
54
+ const width = Math.max(1, ...values.map((row) => (Array.isArray(row) ? row.length : 0)))
55
+ const headerCells = Array.from({ length: width }, (_, i) => toColumnName(startColumn + i))
56
+ const lines = [
57
+ `| | ${headerCells.join(' | ')} |`,
58
+ `|---|${Array(width).fill('---').join('|')}|`,
59
+ ]
60
+
61
+ for (let i = 0; i < values.length; i += 1) {
62
+ const row = Array.isArray(values[i]) ? values[i] : []
63
+ const padded = [...row, ...Array(width - row.length).fill('')]
64
+ const escaped = padded.map((cell) => escapeCell(cell))
65
+ lines.push(`| ${startRow + i} | ${escaped.join(' | ')} |`)
66
+ }
67
+
68
+ return {
69
+ spreadsheetId,
70
+ range: resolvedRange,
71
+ rowCount: values.length,
72
+ columnCount: width,
73
+ markdown: lines.join('\n'),
74
+ }
75
+ }