veryfront 0.0.49 → 0.0.51

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 (493) hide show
  1. package/dist/ai/components.js +260 -56
  2. package/dist/ai/components.js.map +4 -4
  3. package/dist/ai/index.d.ts +1 -0
  4. package/dist/ai/index.js +12 -4
  5. package/dist/ai/index.js.map +2 -2
  6. package/dist/ai/primitives.js +55 -10
  7. package/dist/ai/primitives.js.map +3 -3
  8. package/dist/ai/react.js +140 -1
  9. package/dist/ai/react.js.map +3 -3
  10. package/dist/ai/workflow-react.js +458 -0
  11. package/dist/ai/workflow-react.js.map +7 -0
  12. package/dist/ai/workflow.js +5422 -0
  13. package/dist/ai/workflow.js.map +7 -0
  14. package/dist/cli.js +957 -215
  15. package/dist/components.js +12 -4
  16. package/dist/components.js.map +2 -2
  17. package/dist/config.js +12 -4
  18. package/dist/config.js.map +2 -2
  19. package/dist/data.js +12 -4
  20. package/dist/data.js.map +2 -2
  21. package/dist/index.js +12 -4
  22. package/dist/index.js.map +2 -2
  23. package/dist/integrations/_base/files/SETUP.md +667 -98
  24. package/dist/integrations/_base/files/app/api/integrations/status/route.ts +3 -3
  25. package/dist/integrations/_base/files/app/api/integrations/token-storage/route.ts +26 -0
  26. package/dist/integrations/_base/files/app/components/ServiceConnections.tsx +2 -1
  27. package/dist/integrations/_base/files/app/setup/page.tsx +869 -55
  28. package/dist/integrations/_base/files/lib/token-store-examples.ts +435 -0
  29. package/dist/integrations/_base/files/lib/token-store.ts +273 -23
  30. package/dist/integrations/airtable/connector.json +99 -0
  31. package/dist/integrations/airtable/files/ai/tools/create-record.ts +25 -0
  32. package/dist/integrations/airtable/files/ai/tools/get-base.ts +34 -0
  33. package/dist/integrations/airtable/files/ai/tools/get-record.ts +23 -0
  34. package/dist/integrations/airtable/files/ai/tools/list-bases.ts +19 -0
  35. package/dist/integrations/airtable/files/ai/tools/list-records.ts +47 -0
  36. package/dist/integrations/airtable/files/app/api/auth/airtable/callback/route.ts +11 -0
  37. package/dist/integrations/airtable/files/app/api/auth/airtable/route.ts +9 -0
  38. package/dist/integrations/airtable/files/lib/airtable-client.ts +244 -0
  39. package/dist/integrations/anthropic/README.md +181 -0
  40. package/dist/integrations/anthropic/connector.json +88 -0
  41. package/dist/integrations/anthropic/files/_env.example +4 -0
  42. package/dist/integrations/anthropic/files/ai/tools/get-organization.ts +36 -0
  43. package/dist/integrations/anthropic/files/ai/tools/get-usage.ts +100 -0
  44. package/dist/integrations/anthropic/files/ai/tools/list-api-keys.ts +64 -0
  45. package/dist/integrations/anthropic/files/ai/tools/list-members.ts +65 -0
  46. package/dist/integrations/anthropic/files/ai/tools/list-workspaces.ts +35 -0
  47. package/dist/integrations/anthropic/files/lib/anthropic-admin-client.ts +264 -0
  48. package/dist/integrations/asana/connector.json +85 -0
  49. package/dist/integrations/asana/files/_env.example +4 -0
  50. package/dist/integrations/asana/files/ai/tools/create-task.ts +34 -0
  51. package/dist/integrations/asana/files/ai/tools/get-task.ts +26 -0
  52. package/dist/integrations/asana/files/ai/tools/list-projects.ts +26 -0
  53. package/dist/integrations/asana/files/ai/tools/list-tasks.ts +50 -0
  54. package/dist/integrations/asana/files/ai/tools/update-task.ts +36 -0
  55. package/dist/integrations/asana/files/app/api/auth/asana/callback/route.ts +11 -0
  56. package/dist/integrations/asana/files/app/api/auth/asana/route.ts +7 -0
  57. package/dist/integrations/asana/files/lib/asana-client.ts +162 -0
  58. package/dist/integrations/aws/connector.json +72 -0
  59. package/dist/integrations/aws/files/_env.example +10 -0
  60. package/dist/integrations/aws/files/ai/tools/get-s3-object.ts +62 -0
  61. package/dist/integrations/aws/files/ai/tools/list-ec2-instances.ts +56 -0
  62. package/dist/integrations/aws/files/ai/tools/list-lambda-functions.ts +57 -0
  63. package/dist/integrations/aws/files/ai/tools/list-s3-buckets.ts +44 -0
  64. package/dist/integrations/aws/files/ai/tools/list-s3-objects.ts +58 -0
  65. package/dist/integrations/aws/files/lib/aws-client.ts +255 -0
  66. package/dist/integrations/bitbucket/connector.json +85 -0
  67. package/dist/integrations/bitbucket/files/_env.example +9 -0
  68. package/dist/integrations/bitbucket/files/ai/tools/create-pull-request.ts +83 -0
  69. package/dist/integrations/bitbucket/files/ai/tools/list-issues.ts +112 -0
  70. package/dist/integrations/bitbucket/files/ai/tools/list-pull-requests.ts +91 -0
  71. package/dist/integrations/bitbucket/files/ai/tools/list-repositories.ts +78 -0
  72. package/dist/integrations/bitbucket/files/app/api/auth/bitbucket/callback/route.ts +11 -0
  73. package/dist/integrations/bitbucket/files/app/api/auth/bitbucket/route.ts +9 -0
  74. package/dist/integrations/bitbucket/files/lib/bitbucket-client.ts +316 -0
  75. package/dist/integrations/box/connector.json +85 -0
  76. package/dist/integrations/box/files/_env.example +4 -0
  77. package/dist/integrations/box/files/ai/tools/create-folder.ts +28 -0
  78. package/dist/integrations/box/files/ai/tools/get-file.ts +29 -0
  79. package/dist/integrations/box/files/ai/tools/list-files.ts +33 -0
  80. package/dist/integrations/box/files/ai/tools/search-files.ts +35 -0
  81. package/dist/integrations/box/files/ai/tools/upload-file.ts +32 -0
  82. package/dist/integrations/box/files/app/api/auth/box/callback/route.ts +11 -0
  83. package/dist/integrations/box/files/app/api/auth/box/route.ts +7 -0
  84. package/dist/integrations/box/files/lib/box-client.ts +280 -0
  85. package/dist/integrations/calendar/files/app/api/auth/calendar/callback/route.ts +7 -110
  86. package/dist/integrations/calendar/files/app/api/auth/calendar/route.ts +5 -25
  87. package/dist/integrations/clickup/connector.json +85 -0
  88. package/dist/integrations/clickup/files/_env.example +4 -0
  89. package/dist/integrations/clickup/files/ai/tools/create-task.ts +64 -0
  90. package/dist/integrations/clickup/files/ai/tools/get-task.ts +59 -0
  91. package/dist/integrations/clickup/files/ai/tools/list-lists.ts +109 -0
  92. package/dist/integrations/clickup/files/ai/tools/list-tasks.ts +95 -0
  93. package/dist/integrations/clickup/files/ai/tools/update-task.ts +85 -0
  94. package/dist/integrations/clickup/files/app/api/auth/clickup/callback/route.ts +11 -0
  95. package/dist/integrations/clickup/files/app/api/auth/clickup/route.ts +7 -0
  96. package/dist/integrations/clickup/files/lib/clickup-client.ts +439 -0
  97. package/dist/integrations/confluence/README.md +246 -0
  98. package/dist/integrations/confluence/connector.json +104 -0
  99. package/dist/integrations/confluence/files/_env.example +4 -0
  100. package/dist/integrations/confluence/files/ai/tools/create-page.ts +43 -0
  101. package/dist/integrations/confluence/files/ai/tools/get-page.ts +30 -0
  102. package/dist/integrations/confluence/files/ai/tools/list-spaces.ts +31 -0
  103. package/dist/integrations/confluence/files/ai/tools/search-content.ts +38 -0
  104. package/dist/integrations/confluence/files/ai/tools/update-page.ts +45 -0
  105. package/dist/integrations/confluence/files/app/api/auth/confluence/callback/route.ts +11 -0
  106. package/dist/integrations/confluence/files/app/api/auth/confluence/route.ts +9 -0
  107. package/dist/integrations/confluence/files/lib/confluence-client.ts +281 -0
  108. package/dist/integrations/discord/connector.json +100 -0
  109. package/dist/integrations/discord/files/_env.example +12 -0
  110. package/dist/integrations/discord/files/ai/tools/get-messages.ts +55 -0
  111. package/dist/integrations/discord/files/ai/tools/get-user.ts +32 -0
  112. package/dist/integrations/discord/files/ai/tools/list-channels.ts +32 -0
  113. package/dist/integrations/discord/files/ai/tools/list-guilds.ts +24 -0
  114. package/dist/integrations/discord/files/ai/tools/send-message.ts +33 -0
  115. package/dist/integrations/discord/files/app/api/auth/discord/callback/route.ts +11 -0
  116. package/dist/integrations/discord/files/app/api/auth/discord/route.ts +9 -0
  117. package/dist/integrations/discord/files/lib/discord-client.ts +273 -0
  118. package/dist/integrations/docs-google/connector.json +101 -0
  119. package/dist/integrations/docs-google/files/_env.example +8 -0
  120. package/dist/integrations/docs-google/files/ai/tools/create-document.ts +46 -0
  121. package/dist/integrations/docs-google/files/ai/tools/get-document.ts +46 -0
  122. package/dist/integrations/docs-google/files/ai/tools/list-documents.ts +42 -0
  123. package/dist/integrations/docs-google/files/ai/tools/search-documents.ts +38 -0
  124. package/dist/integrations/docs-google/files/ai/tools/update-document.ts +131 -0
  125. package/dist/integrations/docs-google/files/app/api/auth/docs-google/callback/route.ts +11 -0
  126. package/dist/integrations/docs-google/files/app/api/auth/docs-google/route.ts +9 -0
  127. package/dist/integrations/docs-google/files/lib/docs-client.ts +582 -0
  128. package/dist/integrations/drive/connector.json +134 -0
  129. package/dist/integrations/drive/files/_env.example +9 -0
  130. package/dist/integrations/drive/files/ai/tools/create-folder.ts +47 -0
  131. package/dist/integrations/drive/files/ai/tools/get-file.ts +55 -0
  132. package/dist/integrations/drive/files/ai/tools/list-files.ts +78 -0
  133. package/dist/integrations/drive/files/ai/tools/search-files.ts +79 -0
  134. package/dist/integrations/drive/files/ai/tools/upload-file.ts +59 -0
  135. package/dist/integrations/drive/files/app/api/auth/drive/callback/route.ts +11 -0
  136. package/dist/integrations/drive/files/app/api/auth/drive/route.ts +9 -0
  137. package/dist/integrations/drive/files/lib/drive-client.ts +359 -0
  138. package/dist/integrations/dropbox/connector.json +107 -0
  139. package/dist/integrations/dropbox/files/_env.example +24 -0
  140. package/dist/integrations/dropbox/files/ai/tools/get-account.ts +58 -0
  141. package/dist/integrations/dropbox/files/ai/tools/get-file.ts +61 -0
  142. package/dist/integrations/dropbox/files/ai/tools/list-files.ts +56 -0
  143. package/dist/integrations/dropbox/files/ai/tools/search-files.ts +70 -0
  144. package/dist/integrations/dropbox/files/ai/tools/upload-file.ts +48 -0
  145. package/dist/integrations/dropbox/files/app/api/auth/dropbox/callback/route.ts +11 -0
  146. package/dist/integrations/dropbox/files/app/api/auth/dropbox/route.ts +9 -0
  147. package/dist/integrations/dropbox/files/lib/dropbox-client.ts +397 -0
  148. package/dist/integrations/figma/INTEGRATION_SUMMARY.md +436 -0
  149. package/dist/integrations/figma/README.md +287 -0
  150. package/dist/integrations/figma/connector.json +100 -0
  151. package/dist/integrations/figma/files/_env.example +5 -0
  152. package/dist/integrations/figma/files/ai/tools/get-comments.ts +72 -0
  153. package/dist/integrations/figma/files/ai/tools/get-file.ts +54 -0
  154. package/dist/integrations/figma/files/ai/tools/list-files.ts +39 -0
  155. package/dist/integrations/figma/files/ai/tools/list-projects.ts +69 -0
  156. package/dist/integrations/figma/files/ai/tools/post-comment.ts +54 -0
  157. package/dist/integrations/figma/files/app/api/auth/figma/callback/route.ts +11 -0
  158. package/dist/integrations/figma/files/app/api/auth/figma/route.ts +9 -0
  159. package/dist/integrations/figma/files/lib/figma-client.ts +355 -0
  160. package/dist/integrations/figma/files/lib/types.ts +503 -0
  161. package/dist/integrations/freshdesk/connector.json +85 -0
  162. package/dist/integrations/freshdesk/files/_env.example +4 -0
  163. package/dist/integrations/freshdesk/files/ai/tools/create-ticket.ts +60 -0
  164. package/dist/integrations/freshdesk/files/ai/tools/get-ticket.ts +46 -0
  165. package/dist/integrations/freshdesk/files/ai/tools/list-contacts.ts +37 -0
  166. package/dist/integrations/freshdesk/files/ai/tools/list-tickets.ts +59 -0
  167. package/dist/integrations/freshdesk/files/ai/tools/update-ticket.ts +61 -0
  168. package/dist/integrations/freshdesk/files/app/api/auth/freshdesk/callback/route.ts +11 -0
  169. package/dist/integrations/freshdesk/files/app/api/auth/freshdesk/route.ts +7 -0
  170. package/dist/integrations/freshdesk/files/lib/freshdesk-client.ts +178 -0
  171. package/dist/integrations/github/files/app/api/auth/github/callback/route.ts +6 -127
  172. package/dist/integrations/github/files/app/api/auth/github/route.ts +4 -24
  173. package/dist/integrations/gitlab/connector.json +100 -0
  174. package/dist/integrations/gitlab/files/_env.example +7 -0
  175. package/dist/integrations/gitlab/files/ai/tools/create-issue.ts +49 -0
  176. package/dist/integrations/gitlab/files/ai/tools/get-issue.ts +56 -0
  177. package/dist/integrations/gitlab/files/ai/tools/list-merge-requests.ts +75 -0
  178. package/dist/integrations/gitlab/files/ai/tools/list-projects.ts +51 -0
  179. package/dist/integrations/gitlab/files/ai/tools/search-issues.ts +67 -0
  180. package/dist/integrations/gitlab/files/app/api/auth/gitlab/callback/route.ts +11 -0
  181. package/dist/integrations/gitlab/files/app/api/auth/gitlab/route.ts +9 -0
  182. package/dist/integrations/gitlab/files/lib/gitlab-client.ts +366 -0
  183. package/dist/integrations/gmail/files/app/api/auth/gmail/callback/route.ts +7 -108
  184. package/dist/integrations/gmail/files/app/api/auth/gmail/route.ts +5 -23
  185. package/dist/integrations/gmail/files/lib/gmail-client.ts +16 -55
  186. package/dist/integrations/hubspot/connector.json +98 -0
  187. package/dist/integrations/hubspot/files/_env.example +5 -0
  188. package/dist/integrations/hubspot/files/ai/tools/create-contact.ts +41 -0
  189. package/dist/integrations/hubspot/files/ai/tools/create-deal.ts +41 -0
  190. package/dist/integrations/hubspot/files/ai/tools/get-contact.ts +39 -0
  191. package/dist/integrations/hubspot/files/ai/tools/list-contacts.ts +43 -0
  192. package/dist/integrations/hubspot/files/ai/tools/list-deals.ts +41 -0
  193. package/dist/integrations/hubspot/files/app/api/auth/hubspot/callback/route.ts +11 -0
  194. package/dist/integrations/hubspot/files/app/api/auth/hubspot/route.ts +9 -0
  195. package/dist/integrations/hubspot/files/lib/hubspot-client.ts +393 -0
  196. package/dist/integrations/intercom/connector.json +85 -0
  197. package/dist/integrations/intercom/files/_env.example +4 -0
  198. package/dist/integrations/intercom/files/ai/tools/get-contact.ts +35 -0
  199. package/dist/integrations/intercom/files/ai/tools/get-conversation.ts +55 -0
  200. package/dist/integrations/intercom/files/ai/tools/list-contacts.ts +35 -0
  201. package/dist/integrations/intercom/files/ai/tools/list-conversations.ts +49 -0
  202. package/dist/integrations/intercom/files/ai/tools/send-message.ts +34 -0
  203. package/dist/integrations/intercom/files/app/api/auth/intercom/callback/route.ts +11 -0
  204. package/dist/integrations/intercom/files/app/api/auth/intercom/route.ts +7 -0
  205. package/dist/integrations/intercom/files/lib/intercom-client.ts +308 -0
  206. package/dist/integrations/jira/connector.json +109 -0
  207. package/dist/integrations/jira/files/ai/tools/create-issue.ts +47 -0
  208. package/dist/integrations/jira/files/ai/tools/get-issue.ts +57 -0
  209. package/dist/integrations/jira/files/ai/tools/list-projects.ts +30 -0
  210. package/dist/integrations/jira/files/ai/tools/search-issues.ts +49 -0
  211. package/dist/integrations/jira/files/ai/tools/update-issue.ts +81 -0
  212. package/dist/integrations/jira/files/app/api/auth/jira/callback/route.ts +11 -0
  213. package/dist/integrations/jira/files/app/api/auth/jira/route.ts +9 -0
  214. package/dist/integrations/jira/files/lib/jira-client.ts +338 -0
  215. package/dist/integrations/linear/connector.json +100 -0
  216. package/dist/integrations/linear/files/_env.example +6 -0
  217. package/dist/integrations/linear/files/ai/tools/create-issue.ts +71 -0
  218. package/dist/integrations/linear/files/ai/tools/get-issue.ts +55 -0
  219. package/dist/integrations/linear/files/ai/tools/list-projects.ts +43 -0
  220. package/dist/integrations/linear/files/ai/tools/search-issues.ts +54 -0
  221. package/dist/integrations/linear/files/ai/tools/update-issue.ts +71 -0
  222. package/dist/integrations/linear/files/app/api/auth/linear/callback/route.ts +11 -0
  223. package/dist/integrations/linear/files/app/api/auth/linear/route.ts +9 -0
  224. package/dist/integrations/linear/files/lib/linear-client.ts +464 -0
  225. package/dist/integrations/mailchimp/connector.json +85 -0
  226. package/dist/integrations/mailchimp/files/_env.example +4 -0
  227. package/dist/integrations/mailchimp/files/ai/tools/get-campaign.ts +45 -0
  228. package/dist/integrations/mailchimp/files/ai/tools/get-list.ts +51 -0
  229. package/dist/integrations/mailchimp/files/ai/tools/list-campaigns.ts +46 -0
  230. package/dist/integrations/mailchimp/files/ai/tools/list-lists.ts +46 -0
  231. package/dist/integrations/mailchimp/files/ai/tools/list-members.ts +58 -0
  232. package/dist/integrations/mailchimp/files/app/api/auth/mailchimp/callback/route.ts +11 -0
  233. package/dist/integrations/mailchimp/files/app/api/auth/mailchimp/route.ts +7 -0
  234. package/dist/integrations/mailchimp/files/lib/mailchimp-client.ts +267 -0
  235. package/dist/integrations/mixpanel/connector.json +96 -0
  236. package/dist/integrations/mixpanel/files/_env.example +11 -0
  237. package/dist/integrations/mixpanel/files/ai/tools/get-funnel.ts +46 -0
  238. package/dist/integrations/mixpanel/files/ai/tools/get-retention.ts +64 -0
  239. package/dist/integrations/mixpanel/files/ai/tools/list-cohorts.ts +46 -0
  240. package/dist/integrations/mixpanel/files/ai/tools/query-events.ts +43 -0
  241. package/dist/integrations/mixpanel/files/ai/tools/track-event.ts +41 -0
  242. package/dist/integrations/mixpanel/files/lib/mixpanel-client.ts +319 -0
  243. package/dist/integrations/monday/connector.json +85 -0
  244. package/dist/integrations/monday/files/_env.example +4 -0
  245. package/dist/integrations/monday/files/ai/tools/create-item.ts +36 -0
  246. package/dist/integrations/monday/files/ai/tools/get-item.ts +31 -0
  247. package/dist/integrations/monday/files/ai/tools/list-boards.ts +29 -0
  248. package/dist/integrations/monday/files/ai/tools/list-items.ts +36 -0
  249. package/dist/integrations/monday/files/ai/tools/update-item.ts +36 -0
  250. package/dist/integrations/monday/files/app/api/auth/monday/callback/route.ts +11 -0
  251. package/dist/integrations/monday/files/app/api/auth/monday/route.ts +7 -0
  252. package/dist/integrations/monday/files/lib/monday-client.ts +329 -0
  253. package/dist/integrations/neon/connector.json +89 -0
  254. package/dist/integrations/neon/files/_env.example +6 -0
  255. package/dist/integrations/neon/files/ai/tools/describe-table.ts +38 -0
  256. package/dist/integrations/neon/files/ai/tools/list-branches.ts +35 -0
  257. package/dist/integrations/neon/files/ai/tools/list-projects.ts +31 -0
  258. package/dist/integrations/neon/files/ai/tools/list-tables.ts +49 -0
  259. package/dist/integrations/neon/files/ai/tools/query-database.ts +33 -0
  260. package/dist/integrations/neon/files/app/api/auth/neon/route.ts +51 -0
  261. package/dist/integrations/neon/files/lib/neon-client.ts +294 -0
  262. package/dist/integrations/notion/connector.json +87 -0
  263. package/dist/integrations/notion/files/_env.example +6 -0
  264. package/dist/integrations/notion/files/ai/tools/create-page.ts +32 -0
  265. package/dist/integrations/notion/files/ai/tools/query-database.ts +44 -0
  266. package/dist/integrations/notion/files/ai/tools/read-page.ts +34 -0
  267. package/dist/integrations/notion/files/ai/tools/search-notion.ts +51 -0
  268. package/dist/integrations/notion/files/app/api/auth/notion/callback/route.ts +11 -0
  269. package/dist/integrations/notion/files/app/api/auth/notion/route.ts +9 -0
  270. package/dist/integrations/notion/files/lib/notion-client.ts +218 -0
  271. package/dist/integrations/onedrive/connector.json +100 -0
  272. package/dist/integrations/onedrive/files/_env.example +23 -0
  273. package/dist/integrations/onedrive/files/ai/tools/download-file.ts +38 -0
  274. package/dist/integrations/onedrive/files/ai/tools/list-files.ts +63 -0
  275. package/dist/integrations/onedrive/files/ai/tools/search-files.ts +59 -0
  276. package/dist/integrations/onedrive/files/ai/tools/upload-file.ts +43 -0
  277. package/dist/integrations/onedrive/files/app/api/auth/onedrive/callback/route.ts +11 -0
  278. package/dist/integrations/onedrive/files/app/api/auth/onedrive/route.ts +9 -0
  279. package/dist/integrations/onedrive/files/lib/onedrive-client.ts +314 -0
  280. package/dist/integrations/outlook/README.md +308 -0
  281. package/dist/integrations/outlook/connector.json +98 -0
  282. package/dist/integrations/outlook/files/_env.example +8 -0
  283. package/dist/integrations/outlook/files/ai/tools/get-email.ts +47 -0
  284. package/dist/integrations/outlook/files/ai/tools/list-emails.ts +46 -0
  285. package/dist/integrations/outlook/files/ai/tools/list-folders.ts +22 -0
  286. package/dist/integrations/outlook/files/ai/tools/search-emails.ts +41 -0
  287. package/dist/integrations/outlook/files/ai/tools/send-email.ts +41 -0
  288. package/dist/integrations/outlook/files/app/api/auth/outlook/callback/route.ts +11 -0
  289. package/dist/integrations/outlook/files/app/api/auth/outlook/route.ts +9 -0
  290. package/dist/integrations/outlook/files/lib/outlook-client.ts +204 -0
  291. package/dist/integrations/pipedrive/connector.json +85 -0
  292. package/dist/integrations/pipedrive/files/_env.example +4 -0
  293. package/dist/integrations/pipedrive/files/ai/tools/create-deal.ts +44 -0
  294. package/dist/integrations/pipedrive/files/ai/tools/get-deal.ts +34 -0
  295. package/dist/integrations/pipedrive/files/ai/tools/list-deals.ts +40 -0
  296. package/dist/integrations/pipedrive/files/ai/tools/list-persons.ts +33 -0
  297. package/dist/integrations/pipedrive/files/ai/tools/update-deal.ts +46 -0
  298. package/dist/integrations/pipedrive/files/app/api/auth/pipedrive/callback/route.ts +11 -0
  299. package/dist/integrations/pipedrive/files/app/api/auth/pipedrive/route.ts +7 -0
  300. package/dist/integrations/pipedrive/files/lib/pipedrive-client.ts +259 -0
  301. package/dist/integrations/posthog/connector.json +84 -0
  302. package/dist/integrations/posthog/files/_env.example +6 -0
  303. package/dist/integrations/posthog/files/ai/tools/capture-event.ts +37 -0
  304. package/dist/integrations/posthog/files/ai/tools/get-trends.ts +44 -0
  305. package/dist/integrations/posthog/files/ai/tools/list-feature-flags.ts +38 -0
  306. package/dist/integrations/posthog/files/ai/tools/list-persons.ts +32 -0
  307. package/dist/integrations/posthog/files/lib/posthog-client.ts +286 -0
  308. package/dist/integrations/quickbooks/connector.json +85 -0
  309. package/dist/integrations/quickbooks/files/_env.example +4 -0
  310. package/dist/integrations/quickbooks/files/ai/tools/create-invoice.ts +48 -0
  311. package/dist/integrations/quickbooks/files/ai/tools/get-customer.ts +36 -0
  312. package/dist/integrations/quickbooks/files/ai/tools/get-invoice.ts +46 -0
  313. package/dist/integrations/quickbooks/files/ai/tools/list-customers.ts +37 -0
  314. package/dist/integrations/quickbooks/files/ai/tools/list-invoices.ts +40 -0
  315. package/dist/integrations/quickbooks/files/app/api/auth/quickbooks/callback/route.ts +11 -0
  316. package/dist/integrations/quickbooks/files/app/api/auth/quickbooks/route.ts +7 -0
  317. package/dist/integrations/quickbooks/files/lib/quickbooks-client.ts +252 -0
  318. package/dist/integrations/salesforce/connector.json +104 -0
  319. package/dist/integrations/salesforce/files/ai/tools/create-lead.ts +101 -0
  320. package/dist/integrations/salesforce/files/ai/tools/get-account.ts +53 -0
  321. package/dist/integrations/salesforce/files/ai/tools/list-accounts.ts +50 -0
  322. package/dist/integrations/salesforce/files/ai/tools/list-contacts.ts +54 -0
  323. package/dist/integrations/salesforce/files/ai/tools/list-opportunities.ts +55 -0
  324. package/dist/integrations/salesforce/files/app/api/auth/salesforce/callback/route.ts +11 -0
  325. package/dist/integrations/salesforce/files/app/api/auth/salesforce/route.ts +9 -0
  326. package/dist/integrations/salesforce/files/lib/salesforce-client.ts +539 -0
  327. package/dist/integrations/sentry/connector.json +84 -0
  328. package/dist/integrations/sentry/files/_env.example +6 -0
  329. package/dist/integrations/sentry/files/ai/tools/get-issue.ts +66 -0
  330. package/dist/integrations/sentry/files/ai/tools/list-issues.ts +57 -0
  331. package/dist/integrations/sentry/files/ai/tools/list-projects.ts +32 -0
  332. package/dist/integrations/sentry/files/ai/tools/resolve-issue.ts +28 -0
  333. package/dist/integrations/sentry/files/lib/sentry-client.ts +268 -0
  334. package/dist/integrations/servicenow/connector.json +66 -0
  335. package/dist/integrations/servicenow/files/_env.example +5 -0
  336. package/dist/integrations/servicenow/files/ai/tools/create-incident.ts +58 -0
  337. package/dist/integrations/servicenow/files/ai/tools/get-incident.ts +59 -0
  338. package/dist/integrations/servicenow/files/ai/tools/list-incidents.ts +72 -0
  339. package/dist/integrations/servicenow/files/ai/tools/search-knowledge.ts +48 -0
  340. package/dist/integrations/servicenow/files/ai/tools/update-incident.ts +60 -0
  341. package/dist/integrations/servicenow/files/app/api/auth/servicenow/callback/route.ts +89 -0
  342. package/dist/integrations/servicenow/files/app/api/auth/servicenow/route.ts +42 -0
  343. package/dist/integrations/servicenow/files/lib/servicenow-client.ts +239 -0
  344. package/dist/integrations/sharepoint/connector.json +99 -0
  345. package/dist/integrations/sharepoint/files/ai/tools/get-file.ts +93 -0
  346. package/dist/integrations/sharepoint/files/ai/tools/get-site.ts +51 -0
  347. package/dist/integrations/sharepoint/files/ai/tools/list-files.ts +63 -0
  348. package/dist/integrations/sharepoint/files/ai/tools/list-sites.ts +28 -0
  349. package/dist/integrations/sharepoint/files/ai/tools/upload-file.ts +72 -0
  350. package/dist/integrations/sharepoint/files/app/api/auth/sharepoint/callback/route.ts +11 -0
  351. package/dist/integrations/sharepoint/files/app/api/auth/sharepoint/route.ts +9 -0
  352. package/dist/integrations/sharepoint/files/lib/sharepoint-client.ts +420 -0
  353. package/dist/integrations/sheets/README.md +331 -0
  354. package/dist/integrations/sheets/connector.json +99 -0
  355. package/dist/integrations/sheets/files/_env.example +8 -0
  356. package/dist/integrations/sheets/files/ai/tools/create-spreadsheet.ts +85 -0
  357. package/dist/integrations/sheets/files/ai/tools/get-spreadsheet.ts +39 -0
  358. package/dist/integrations/sheets/files/ai/tools/list-spreadsheets.ts +41 -0
  359. package/dist/integrations/sheets/files/ai/tools/read-range.ts +35 -0
  360. package/dist/integrations/sheets/files/ai/tools/write-range.ts +51 -0
  361. package/dist/integrations/sheets/files/app/api/auth/sheets/callback/route.ts +11 -0
  362. package/dist/integrations/sheets/files/app/api/auth/sheets/route.ts +9 -0
  363. package/dist/integrations/sheets/files/lib/sheets-client.ts +425 -0
  364. package/dist/integrations/shopify/connector.json +99 -0
  365. package/dist/integrations/shopify/files/_env.example +5 -0
  366. package/dist/integrations/shopify/files/ai/tools/get-order.ts +49 -0
  367. package/dist/integrations/shopify/files/ai/tools/get-product.ts +39 -0
  368. package/dist/integrations/shopify/files/ai/tools/list-customers.ts +40 -0
  369. package/dist/integrations/shopify/files/ai/tools/list-orders.ts +52 -0
  370. package/dist/integrations/shopify/files/ai/tools/list-products.ts +39 -0
  371. package/dist/integrations/shopify/files/app/api/auth/shopify/callback/route.ts +11 -0
  372. package/dist/integrations/shopify/files/app/api/auth/shopify/route.ts +7 -0
  373. package/dist/integrations/shopify/files/lib/shopify-client.ts +198 -0
  374. package/dist/integrations/slack/files/app/api/auth/slack/callback/route.ts +6 -127
  375. package/dist/integrations/slack/files/app/api/auth/slack/route.ts +4 -24
  376. package/dist/integrations/snowflake/connector.json +151 -0
  377. package/dist/integrations/snowflake/files/_env.example +16 -0
  378. package/dist/integrations/snowflake/files/ai/tools/describe-table.ts +57 -0
  379. package/dist/integrations/snowflake/files/ai/tools/list-databases.ts +34 -0
  380. package/dist/integrations/snowflake/files/ai/tools/list-schemas.ts +40 -0
  381. package/dist/integrations/snowflake/files/ai/tools/list-tables.ts +49 -0
  382. package/dist/integrations/snowflake/files/ai/tools/run-query.ts +119 -0
  383. package/dist/integrations/snowflake/files/lib/snowflake-client.ts +389 -0
  384. package/dist/integrations/stripe/connector.json +97 -0
  385. package/dist/integrations/stripe/files/_env.example +6 -0
  386. package/dist/integrations/stripe/files/ai/tools/get-balance.ts +28 -0
  387. package/dist/integrations/stripe/files/ai/tools/get-customer.ts +26 -0
  388. package/dist/integrations/stripe/files/ai/tools/list-customers.ts +42 -0
  389. package/dist/integrations/stripe/files/ai/tools/list-payments.ts +45 -0
  390. package/dist/integrations/stripe/files/ai/tools/list-subscriptions.ts +67 -0
  391. package/dist/integrations/stripe/files/app/api/auth/stripe/route.ts +71 -0
  392. package/dist/integrations/stripe/files/lib/stripe-client.ts +376 -0
  393. package/dist/integrations/supabase/connector.json +101 -0
  394. package/dist/integrations/supabase/files/_env.example +6 -0
  395. package/dist/integrations/supabase/files/ai/tools/delete-row.ts +77 -0
  396. package/dist/integrations/supabase/files/ai/tools/insert-row.ts +35 -0
  397. package/dist/integrations/supabase/files/ai/tools/list-tables.ts +60 -0
  398. package/dist/integrations/supabase/files/ai/tools/query-table.ts +48 -0
  399. package/dist/integrations/supabase/files/ai/tools/update-row.ts +64 -0
  400. package/dist/integrations/supabase/files/app/api/auth/supabase/route.ts +91 -0
  401. package/dist/integrations/supabase/files/lib/supabase-client.ts +296 -0
  402. package/dist/integrations/teams/README.md +256 -0
  403. package/dist/integrations/teams/connector.json +99 -0
  404. package/dist/integrations/teams/files/ai/tools/get-messages.ts +55 -0
  405. package/dist/integrations/teams/files/ai/tools/list-channels.ts +28 -0
  406. package/dist/integrations/teams/files/ai/tools/list-chats.ts +41 -0
  407. package/dist/integrations/teams/files/ai/tools/list-teams.ts +27 -0
  408. package/dist/integrations/teams/files/ai/tools/send-message.ts +61 -0
  409. package/dist/integrations/teams/files/app/api/auth/teams/callback/route.ts +11 -0
  410. package/dist/integrations/teams/files/app/api/auth/teams/route.ts +9 -0
  411. package/dist/integrations/teams/files/lib/teams-client.ts +345 -0
  412. package/dist/integrations/trello/connector.json +85 -0
  413. package/dist/integrations/trello/files/_env.example +4 -0
  414. package/dist/integrations/trello/files/ai/tools/create-card.ts +54 -0
  415. package/dist/integrations/trello/files/ai/tools/get-card.ts +33 -0
  416. package/dist/integrations/trello/files/ai/tools/list-boards.ts +29 -0
  417. package/dist/integrations/trello/files/ai/tools/list-cards.ts +52 -0
  418. package/dist/integrations/trello/files/ai/tools/update-card.ts +65 -0
  419. package/dist/integrations/trello/files/app/api/auth/trello/callback/route.ts +11 -0
  420. package/dist/integrations/trello/files/app/api/auth/trello/route.ts +7 -0
  421. package/dist/integrations/trello/files/lib/trello-client.ts +202 -0
  422. package/dist/integrations/twilio/connector.json +146 -0
  423. package/dist/integrations/twilio/files/_env.example +14 -0
  424. package/dist/integrations/twilio/files/ai/tools/get-message.ts +58 -0
  425. package/dist/integrations/twilio/files/ai/tools/list-calls.ts +129 -0
  426. package/dist/integrations/twilio/files/ai/tools/list-messages.ts +97 -0
  427. package/dist/integrations/twilio/files/ai/tools/send-sms.ts +75 -0
  428. package/dist/integrations/twilio/files/ai/tools/send-whatsapp.ts +81 -0
  429. package/dist/integrations/twilio/files/lib/twilio-client.ts +375 -0
  430. package/dist/integrations/twitter/connector.json +87 -0
  431. package/dist/integrations/twitter/files/_env.example +6 -0
  432. package/dist/integrations/twitter/files/ai/tools/get-timeline.ts +59 -0
  433. package/dist/integrations/twitter/files/ai/tools/post-tweet.ts +49 -0
  434. package/dist/integrations/twitter/files/ai/tools/search-tweets.ts +71 -0
  435. package/dist/integrations/twitter/files/app/api/auth/twitter/callback/route.ts +11 -0
  436. package/dist/integrations/twitter/files/app/api/auth/twitter/route.ts +9 -0
  437. package/dist/integrations/twitter/files/lib/twitter-client.ts +236 -0
  438. package/dist/integrations/webex/connector.json +85 -0
  439. package/dist/integrations/webex/files/_env.example +4 -0
  440. package/dist/integrations/webex/files/ai/tools/create-meeting.ts +69 -0
  441. package/dist/integrations/webex/files/ai/tools/get-meeting.ts +31 -0
  442. package/dist/integrations/webex/files/ai/tools/list-meetings.ts +44 -0
  443. package/dist/integrations/webex/files/ai/tools/list-rooms.ts +35 -0
  444. package/dist/integrations/webex/files/ai/tools/send-message.ts +51 -0
  445. package/dist/integrations/webex/files/app/api/auth/webex/callback/route.ts +11 -0
  446. package/dist/integrations/webex/files/app/api/auth/webex/route.ts +7 -0
  447. package/dist/integrations/webex/files/lib/webex-client.ts +279 -0
  448. package/dist/integrations/xero/connector.json +85 -0
  449. package/dist/integrations/xero/files/_env.example +4 -0
  450. package/dist/integrations/xero/files/ai/tools/create-invoice.ts +65 -0
  451. package/dist/integrations/xero/files/ai/tools/get-contact.ts +40 -0
  452. package/dist/integrations/xero/files/ai/tools/get-invoice.ts +44 -0
  453. package/dist/integrations/xero/files/ai/tools/list-contacts.ts +54 -0
  454. package/dist/integrations/xero/files/ai/tools/list-invoices.ts +54 -0
  455. package/dist/integrations/xero/files/app/api/auth/xero/callback/route.ts +11 -0
  456. package/dist/integrations/xero/files/app/api/auth/xero/route.ts +7 -0
  457. package/dist/integrations/xero/files/lib/xero-client.ts +292 -0
  458. package/dist/integrations/zendesk/connector.json +61 -0
  459. package/dist/integrations/zendesk/files/_env.example +5 -0
  460. package/dist/integrations/zendesk/files/ai/tools/create-ticket.ts +82 -0
  461. package/dist/integrations/zendesk/files/ai/tools/get-ticket.ts +53 -0
  462. package/dist/integrations/zendesk/files/ai/tools/list-tickets.ts +60 -0
  463. package/dist/integrations/zendesk/files/ai/tools/search-tickets.ts +56 -0
  464. package/dist/integrations/zendesk/files/app/api/auth/zendesk/callback/route.ts +91 -0
  465. package/dist/integrations/zendesk/files/app/api/auth/zendesk/route.ts +41 -0
  466. package/dist/integrations/zendesk/files/lib/zendesk-client.ts +265 -0
  467. package/dist/integrations/zoom/connector.json +85 -0
  468. package/dist/integrations/zoom/files/_env.example +4 -0
  469. package/dist/integrations/zoom/files/ai/tools/create-meeting.ts +106 -0
  470. package/dist/integrations/zoom/files/ai/tools/delete-meeting.ts +32 -0
  471. package/dist/integrations/zoom/files/ai/tools/get-meeting.ts +44 -0
  472. package/dist/integrations/zoom/files/ai/tools/list-meetings.ts +47 -0
  473. package/dist/integrations/zoom/files/ai/tools/update-meeting.ts +111 -0
  474. package/dist/integrations/zoom/files/app/api/auth/zoom/callback/route.ts +11 -0
  475. package/dist/integrations/zoom/files/app/api/auth/zoom/route.ts +7 -0
  476. package/dist/integrations/zoom/files/lib/zoom-client.ts +228 -0
  477. package/dist/oauth/handlers.js +554 -0
  478. package/dist/oauth/handlers.js.map +7 -0
  479. package/dist/oauth/index.js +1157 -0
  480. package/dist/oauth/index.js.map +7 -0
  481. package/dist/oauth/providers.js +927 -0
  482. package/dist/oauth/providers.js.map +7 -0
  483. package/dist/oauth/token-store.js +82 -0
  484. package/dist/oauth/token-store.js.map +7 -0
  485. package/package.json +25 -1
  486. package/dist/integrations/calendar/files/lib/token-store.ts +0 -113
  487. package/dist/integrations/github/files/lib/token-store.ts +0 -113
  488. package/dist/integrations/gmail/files/lib/oauth.ts +0 -145
  489. package/dist/integrations/gmail/files/lib/token-store.ts +0 -113
  490. package/dist/integrations/slack/files/lib/oauth.ts +0 -145
  491. package/dist/integrations/slack/files/lib/token-store.ts +0 -113
  492. /package/dist/integrations/{calendar → docs-google}/files/lib/oauth.ts +0 -0
  493. /package/dist/integrations/{github → drive}/files/lib/oauth.ts +0 -0
@@ -0,0 +1,146 @@
1
+ {
2
+ "name": "twilio",
3
+ "displayName": "Twilio",
4
+ "icon": "twilio.svg",
5
+ "description": "Send SMS, WhatsApp messages, make calls, and manage communications with Twilio",
6
+ "auth": {
7
+ "type": "api-key",
8
+ "keyName": "TWILIO_AUTH_TOKEN",
9
+ "headerName": "Authorization",
10
+ "headerPrefix": "Basic",
11
+ "requiredApis": [
12
+ {
13
+ "name": "Twilio API",
14
+ "enableUrl": "https://console.twilio.com/us1/develop/sms/overview"
15
+ }
16
+ ]
17
+ },
18
+ "envVars": [
19
+ {
20
+ "name": "TWILIO_ACCOUNT_SID",
21
+ "description": "Twilio Account SID (starts with AC)",
22
+ "required": true,
23
+ "sensitive": false,
24
+ "docsUrl": "https://console.twilio.com/"
25
+ },
26
+ {
27
+ "name": "TWILIO_AUTH_TOKEN",
28
+ "description": "Twilio Auth Token",
29
+ "required": true,
30
+ "sensitive": true,
31
+ "docsUrl": "https://console.twilio.com/"
32
+ },
33
+ {
34
+ "name": "TWILIO_PHONE_NUMBER",
35
+ "description": "Your Twilio phone number (E.164 format: +1234567890)",
36
+ "required": true,
37
+ "sensitive": false,
38
+ "docsUrl": "https://console.twilio.com/us1/develop/phone-numbers/manage/incoming"
39
+ }
40
+ ],
41
+ "tools": [
42
+ {
43
+ "id": "send-sms",
44
+ "name": "Send SMS",
45
+ "description": "Send an SMS text message to a phone number",
46
+ "requiresWrite": true
47
+ },
48
+ {
49
+ "id": "send-whatsapp",
50
+ "name": "Send WhatsApp Message",
51
+ "description": "Send a WhatsApp message to a phone number",
52
+ "requiresWrite": true
53
+ },
54
+ {
55
+ "id": "list-messages",
56
+ "name": "List Messages",
57
+ "description": "List recent SMS and WhatsApp messages",
58
+ "requiresWrite": false
59
+ },
60
+ {
61
+ "id": "get-message",
62
+ "name": "Get Message",
63
+ "description": "Get details about a specific message",
64
+ "requiresWrite": false
65
+ },
66
+ {
67
+ "id": "list-calls",
68
+ "name": "List Calls",
69
+ "description": "List recent phone calls",
70
+ "requiresWrite": false
71
+ }
72
+ ],
73
+ "prompts": [
74
+ {
75
+ "id": "send-notification",
76
+ "title": "Send SMS notification",
77
+ "prompt": "Help me send an SMS notification to a customer about their order status.",
78
+ "category": "communication",
79
+ "icon": "message"
80
+ },
81
+ {
82
+ "id": "check-messages",
83
+ "title": "Check recent messages",
84
+ "prompt": "Show me the most recent SMS and WhatsApp messages from the last 24 hours.",
85
+ "category": "communication",
86
+ "icon": "inbox"
87
+ },
88
+ {
89
+ "id": "call-summary",
90
+ "title": "Call summary",
91
+ "prompt": "Give me a summary of recent calls including duration and status.",
92
+ "category": "analytics",
93
+ "icon": "phone"
94
+ },
95
+ {
96
+ "id": "whatsapp-outreach",
97
+ "title": "WhatsApp outreach",
98
+ "prompt": "Help me draft and send a WhatsApp message for customer outreach.",
99
+ "category": "communication",
100
+ "icon": "message"
101
+ }
102
+ ],
103
+ "suggestedWith": ["slack", "gmail", "calendar"],
104
+ "setupGuide": {
105
+ "title": "Setting up Twilio Integration",
106
+ "steps": [
107
+ {
108
+ "title": "Create a Twilio Account",
109
+ "description": "Sign up for a free Twilio account at https://www.twilio.com/try-twilio",
110
+ "url": "https://www.twilio.com/try-twilio"
111
+ },
112
+ {
113
+ "title": "Get Your Account SID and Auth Token",
114
+ "description": "Navigate to the Twilio Console Dashboard. Your Account SID and Auth Token are displayed on the main dashboard page. Click the eye icon to reveal your Auth Token.",
115
+ "url": "https://console.twilio.com/"
116
+ },
117
+ {
118
+ "title": "Get a Phone Number",
119
+ "description": "Go to Phone Numbers > Manage > Buy a number. Select a phone number with SMS and Voice capabilities. Trial accounts come with one free phone number.",
120
+ "url": "https://console.twilio.com/us1/develop/phone-numbers/manage/search"
121
+ },
122
+ {
123
+ "title": "Set Up WhatsApp (Optional)",
124
+ "description": "To send WhatsApp messages, join the Twilio Sandbox for WhatsApp. Go to Messaging > Try it out > Send a WhatsApp message. Follow the instructions to connect your WhatsApp to the sandbox.",
125
+ "url": "https://console.twilio.com/us1/develop/sms/try-it-out/whatsapp-learn"
126
+ },
127
+ {
128
+ "title": "Add Environment Variables",
129
+ "description": "Add your Twilio credentials to your .env file:\n- TWILIO_ACCOUNT_SID=ACxxxxx\n- TWILIO_AUTH_TOKEN=your_auth_token\n- TWILIO_PHONE_NUMBER=+1234567890",
130
+ "url": null
131
+ },
132
+ {
133
+ "title": "Test the Integration",
134
+ "description": "Try sending a test SMS using the send-sms tool. For trial accounts, you can only send messages to verified phone numbers. Add your phone number at Phone Numbers > Manage > Verified Caller IDs.",
135
+ "url": "https://console.twilio.com/us1/develop/phone-numbers/manage/verified"
136
+ }
137
+ ],
138
+ "notes": [
139
+ "Trial accounts have limitations: you can only send messages to verified phone numbers",
140
+ "All trial messages will be prefixed with 'Sent from your Twilio trial account'",
141
+ "WhatsApp messages require recipients to first opt-in by messaging your sandbox number",
142
+ "Phone numbers must be in E.164 format: +[country code][number] (e.g., +14155552671)",
143
+ "Upgrade your account to remove trial restrictions and enable production features"
144
+ ]
145
+ }
146
+ }
@@ -0,0 +1,14 @@
1
+ # Twilio Integration
2
+ # Get your credentials at https://console.twilio.com/
3
+ # Trial account: Can only send to verified numbers, messages prefixed with trial notice
4
+ # Production account: Remove all restrictions by upgrading at https://console.twilio.com/billing
5
+
6
+ # Your Twilio Account SID (starts with AC)
7
+ TWILIO_ACCOUNT_SID=ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
8
+
9
+ # Your Twilio Auth Token (keep this secret!)
10
+ TWILIO_AUTH_TOKEN=your_auth_token_here
11
+
12
+ # Your Twilio phone number in E.164 format (e.g., +14155552671)
13
+ # Get one at: https://console.twilio.com/us1/develop/phone-numbers/manage/search
14
+ TWILIO_PHONE_NUMBER=+1234567890
@@ -0,0 +1,58 @@
1
+ import { tool } from "veryfront/ai";
2
+ import { z } from "zod";
3
+ import { getMessage } from "../../lib/twilio-client.ts";
4
+
5
+ export default tool({
6
+ id: "get-message",
7
+ description: "Get detailed information about a specific SMS or WhatsApp message by its SID (Message ID)",
8
+ inputSchema: z.object({
9
+ messageSid: z
10
+ .string()
11
+ .describe("The unique Twilio Message SID (starts with 'MM' or 'SM', e.g., MM1234567890abcdef)"),
12
+ }),
13
+ execute: async ({ messageSid }) => {
14
+ try {
15
+ const message = await getMessage(messageSid);
16
+
17
+ return {
18
+ success: true,
19
+ message: {
20
+ sid: message.sid,
21
+ accountSid: message.account_sid,
22
+ direction: message.direction,
23
+ from: message.from,
24
+ to: message.to,
25
+ body: message.body,
26
+ status: message.status,
27
+ dateSent: message.date_sent,
28
+ dateCreated: message.date_created,
29
+ dateUpdated: message.date_updated,
30
+ numSegments: message.num_segments,
31
+ numMedia: message.num_media,
32
+ price: message.price ? `${message.price} ${message.price_unit}` : null,
33
+ errorCode: message.error_code,
34
+ errorMessage: message.error_message,
35
+ uri: message.uri,
36
+ messagingServiceSid: message.messaging_service_sid,
37
+ },
38
+ summary: `Message ${message.sid}: ${message.direction} ${message.status} message from ${message.from} to ${message.to}`,
39
+ };
40
+ } catch (error) {
41
+ if (error instanceof Error) {
42
+ if (error.message.includes("not configured")) {
43
+ return {
44
+ error: "Twilio not configured. Please set TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, and TWILIO_PHONE_NUMBER.",
45
+ setupUrl: "https://console.twilio.com/",
46
+ };
47
+ }
48
+
49
+ if (error.message.includes("20404")) {
50
+ return {
51
+ error: `Message not found. The SID '${messageSid}' does not exist in your account.`,
52
+ };
53
+ }
54
+ }
55
+ throw error;
56
+ }
57
+ },
58
+ });
@@ -0,0 +1,129 @@
1
+ import { tool } from "veryfront/ai";
2
+ import { z } from "zod";
3
+ import { listCalls, formatPhoneNumber } from "../../lib/twilio-client.ts";
4
+
5
+ export default tool({
6
+ id: "list-calls",
7
+ description: "List recent phone calls from your Twilio account. Supports filtering by recipient, sender, status, and date.",
8
+ inputSchema: z.object({
9
+ to: z
10
+ .string()
11
+ .optional()
12
+ .describe("Filter by recipient phone number in E.164 format (e.g., +14155552671)"),
13
+ from: z
14
+ .string()
15
+ .optional()
16
+ .describe("Filter by sender phone number in E.164 format (e.g., +14155552671)"),
17
+ status: z
18
+ .enum([
19
+ "queued",
20
+ "ringing",
21
+ "in-progress",
22
+ "completed",
23
+ "busy",
24
+ "failed",
25
+ "no-answer",
26
+ "canceled",
27
+ ])
28
+ .optional()
29
+ .describe("Filter by call status"),
30
+ startTime: z
31
+ .string()
32
+ .optional()
33
+ .describe("Filter by start time in YYYY-MM-DD format (e.g., 2024-01-15)"),
34
+ limit: z
35
+ .number()
36
+ .min(1)
37
+ .max(100)
38
+ .optional()
39
+ .describe("Maximum number of calls to return (default: 20, max: 100)"),
40
+ }),
41
+ execute: async ({ to, from, status, startTime, limit }) => {
42
+ try {
43
+ const options: {
44
+ to?: string;
45
+ from?: string;
46
+ status?: "queued" | "ringing" | "in-progress" | "completed" | "busy" | "failed" | "no-answer" | "canceled";
47
+ startTime?: string;
48
+ limit?: number;
49
+ } = {};
50
+
51
+ if (to) {
52
+ options.to = formatPhoneNumber(to);
53
+ }
54
+
55
+ if (from) {
56
+ options.from = formatPhoneNumber(from);
57
+ }
58
+
59
+ if (status) {
60
+ options.status = status;
61
+ }
62
+
63
+ if (startTime) {
64
+ options.startTime = startTime;
65
+ }
66
+
67
+ if (limit) {
68
+ options.limit = limit;
69
+ }
70
+
71
+ const calls = await listCalls(options);
72
+
73
+ if (calls.length === 0) {
74
+ return {
75
+ success: true,
76
+ count: 0,
77
+ calls: [],
78
+ message: "No calls found matching the criteria.",
79
+ };
80
+ }
81
+
82
+ // Format calls for better readability
83
+ const formattedCalls = calls.map((call) => ({
84
+ sid: call.sid,
85
+ direction: call.direction,
86
+ from: call.from,
87
+ to: call.to,
88
+ status: call.status,
89
+ startTime: call.start_time,
90
+ endTime: call.end_time,
91
+ duration: call.duration ? `${call.duration} seconds` : null,
92
+ dateCreated: call.date_created,
93
+ dateUpdated: call.date_updated,
94
+ price: call.price ? `${call.price} ${call.price_unit}` : null,
95
+ answeredBy: call.answered_by,
96
+ }));
97
+
98
+ // Calculate statistics
99
+ const totalDuration = calls.reduce((sum, call) => {
100
+ return sum + (call.duration ? parseInt(call.duration, 10) : 0);
101
+ }, 0);
102
+
103
+ const statusCounts = calls.reduce((acc, call) => {
104
+ acc[call.status] = (acc[call.status] || 0) + 1;
105
+ return acc;
106
+ }, {} as Record<string, number>);
107
+
108
+ return {
109
+ success: true,
110
+ count: calls.length,
111
+ calls: formattedCalls,
112
+ statistics: {
113
+ totalCalls: calls.length,
114
+ totalDuration: `${totalDuration} seconds (${Math.round(totalDuration / 60)} minutes)`,
115
+ statusBreakdown: statusCounts,
116
+ },
117
+ message: `Found ${calls.length} call${calls.length === 1 ? "" : "s"}.`,
118
+ };
119
+ } catch (error) {
120
+ if (error instanceof Error && error.message.includes("not configured")) {
121
+ return {
122
+ error: "Twilio not configured. Please set TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, and TWILIO_PHONE_NUMBER.",
123
+ setupUrl: "https://console.twilio.com/",
124
+ };
125
+ }
126
+ throw error;
127
+ }
128
+ },
129
+ });
@@ -0,0 +1,97 @@
1
+ import { tool } from "veryfront/ai";
2
+ import { z } from "zod";
3
+ import { listMessages, formatPhoneNumber, formatDate } from "../../lib/twilio-client.ts";
4
+
5
+ export default tool({
6
+ id: "list-messages",
7
+ description: "List recent SMS and WhatsApp messages from your Twilio account. Supports filtering by recipient, sender, and date.",
8
+ inputSchema: z.object({
9
+ to: z
10
+ .string()
11
+ .optional()
12
+ .describe("Filter by recipient phone number in E.164 format (e.g., +14155552671)"),
13
+ from: z
14
+ .string()
15
+ .optional()
16
+ .describe("Filter by sender phone number in E.164 format (e.g., +14155552671)"),
17
+ dateSent: z
18
+ .string()
19
+ .optional()
20
+ .describe("Filter by date sent in YYYY-MM-DD format (e.g., 2024-01-15)"),
21
+ limit: z
22
+ .number()
23
+ .min(1)
24
+ .max(100)
25
+ .optional()
26
+ .describe("Maximum number of messages to return (default: 20, max: 100)"),
27
+ }),
28
+ execute: async ({ to, from, dateSent, limit }) => {
29
+ try {
30
+ const options: {
31
+ to?: string;
32
+ from?: string;
33
+ dateSent?: string;
34
+ limit?: number;
35
+ } = {};
36
+
37
+ if (to) {
38
+ options.to = formatPhoneNumber(to);
39
+ }
40
+
41
+ if (from) {
42
+ options.from = formatPhoneNumber(from);
43
+ }
44
+
45
+ if (dateSent) {
46
+ options.dateSent = dateSent;
47
+ }
48
+
49
+ if (limit) {
50
+ options.limit = limit;
51
+ }
52
+
53
+ const messages = await listMessages(options);
54
+
55
+ if (messages.length === 0) {
56
+ return {
57
+ success: true,
58
+ count: 0,
59
+ messages: [],
60
+ message: "No messages found matching the criteria.",
61
+ };
62
+ }
63
+
64
+ // Format messages for better readability
65
+ const formattedMessages = messages.map((msg) => ({
66
+ sid: msg.sid,
67
+ direction: msg.direction,
68
+ from: msg.from,
69
+ to: msg.to,
70
+ body: msg.body,
71
+ status: msg.status,
72
+ dateSent: msg.date_sent,
73
+ dateCreated: msg.date_created,
74
+ numSegments: msg.num_segments,
75
+ numMedia: msg.num_media,
76
+ price: msg.price ? `${msg.price} ${msg.price_unit}` : null,
77
+ errorCode: msg.error_code,
78
+ errorMessage: msg.error_message,
79
+ }));
80
+
81
+ return {
82
+ success: true,
83
+ count: messages.length,
84
+ messages: formattedMessages,
85
+ message: `Found ${messages.length} message${messages.length === 1 ? "" : "s"}.`,
86
+ };
87
+ } catch (error) {
88
+ if (error instanceof Error && error.message.includes("not configured")) {
89
+ return {
90
+ error: "Twilio not configured. Please set TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, and TWILIO_PHONE_NUMBER.",
91
+ setupUrl: "https://console.twilio.com/",
92
+ };
93
+ }
94
+ throw error;
95
+ }
96
+ },
97
+ });
@@ -0,0 +1,75 @@
1
+ import { tool } from "veryfront/ai";
2
+ import { z } from "zod";
3
+ import { sendSMS, formatPhoneNumber } from "../../lib/twilio-client.ts";
4
+
5
+ export default tool({
6
+ id: "send-sms",
7
+ description: "Send an SMS text message to a phone number using Twilio",
8
+ inputSchema: z.object({
9
+ to: z
10
+ .string()
11
+ .describe("Recipient phone number in E.164 format (e.g., +14155552671) or 10-digit US format"),
12
+ body: z
13
+ .string()
14
+ .min(1)
15
+ .max(1600)
16
+ .describe("Message text to send (max 1600 characters)"),
17
+ mediaUrl: z
18
+ .array(z.string().url())
19
+ .optional()
20
+ .describe("Optional array of media URLs to send as MMS (images, videos, etc.)"),
21
+ }),
22
+ execute: async ({ to, body, mediaUrl }) => {
23
+ try {
24
+ // Format phone number to E.164 if needed
25
+ const formattedPhone = formatPhoneNumber(to);
26
+
27
+ const message = await sendSMS(formattedPhone, body, {
28
+ mediaUrl,
29
+ });
30
+
31
+ return {
32
+ success: true,
33
+ messageSid: message.sid,
34
+ status: message.status,
35
+ to: message.to,
36
+ from: message.from,
37
+ body: message.body,
38
+ numSegments: message.num_segments,
39
+ price: message.price,
40
+ priceUnit: message.price_unit,
41
+ message: `SMS sent successfully to ${message.to}. Status: ${message.status}`,
42
+ };
43
+ } catch (error) {
44
+ if (error instanceof Error) {
45
+ // Check for common errors
46
+ if (error.message.includes("not configured")) {
47
+ return {
48
+ error: "Twilio not configured. Please set TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, and TWILIO_PHONE_NUMBER.",
49
+ setupUrl: "https://console.twilio.com/",
50
+ };
51
+ }
52
+
53
+ // Twilio API errors
54
+ if (error.message.includes("21211")) {
55
+ return {
56
+ error: `Invalid phone number: ${to}. Please use E.164 format (e.g., +14155552671).`,
57
+ };
58
+ }
59
+
60
+ if (error.message.includes("21608")) {
61
+ return {
62
+ error: `Unverified number. Trial accounts can only send to verified numbers. Verify at: https://console.twilio.com/us1/develop/phone-numbers/manage/verified`,
63
+ };
64
+ }
65
+
66
+ if (error.message.includes("21610")) {
67
+ return {
68
+ error: `Unverified 'To' number. This number must be verified before you can send messages to it during trial.`,
69
+ };
70
+ }
71
+ }
72
+ throw error;
73
+ }
74
+ },
75
+ });
@@ -0,0 +1,81 @@
1
+ import { tool } from "veryfront/ai";
2
+ import { z } from "zod";
3
+ import { sendWhatsApp, formatPhoneNumber } from "../../lib/twilio-client.ts";
4
+
5
+ export default tool({
6
+ id: "send-whatsapp",
7
+ description: "Send a WhatsApp message to a phone number using Twilio. Note: Recipients must have opted in to receive messages.",
8
+ inputSchema: z.object({
9
+ to: z
10
+ .string()
11
+ .describe("Recipient phone number in E.164 format (e.g., +14155552671). The 'whatsapp:' prefix is optional."),
12
+ body: z
13
+ .string()
14
+ .min(1)
15
+ .describe("Message text to send"),
16
+ mediaUrl: z
17
+ .array(z.string().url())
18
+ .optional()
19
+ .describe("Optional array of media URLs to send (images, videos, PDFs, etc.)"),
20
+ }),
21
+ execute: async ({ to, body, mediaUrl }) => {
22
+ try {
23
+ // Format phone number to E.164 if needed
24
+ const formattedPhone = formatPhoneNumber(to);
25
+
26
+ const message = await sendWhatsApp(formattedPhone, body, {
27
+ mediaUrl,
28
+ });
29
+
30
+ return {
31
+ success: true,
32
+ messageSid: message.sid,
33
+ status: message.status,
34
+ to: message.to,
35
+ from: message.from,
36
+ body: message.body,
37
+ numSegments: message.num_segments,
38
+ price: message.price,
39
+ priceUnit: message.price_unit,
40
+ message: `WhatsApp message sent successfully to ${message.to}. Status: ${message.status}`,
41
+ };
42
+ } catch (error) {
43
+ if (error instanceof Error) {
44
+ // Check for common errors
45
+ if (error.message.includes("not configured")) {
46
+ return {
47
+ error: "Twilio not configured. Please set TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, and TWILIO_PHONE_NUMBER.",
48
+ setupUrl: "https://console.twilio.com/",
49
+ };
50
+ }
51
+
52
+ // Twilio WhatsApp-specific errors
53
+ if (error.message.includes("63007")) {
54
+ return {
55
+ error: "Recipient has not opted in to receive WhatsApp messages. They must send a message to your WhatsApp sandbox first.",
56
+ sandboxUrl: "https://console.twilio.com/us1/develop/sms/try-it-out/whatsapp-learn",
57
+ };
58
+ }
59
+
60
+ if (error.message.includes("63016")) {
61
+ return {
62
+ error: "WhatsApp message failed: Recipient phone number is not a WhatsApp user.",
63
+ };
64
+ }
65
+
66
+ if (error.message.includes("63030")) {
67
+ return {
68
+ error: "Message body is required for WhatsApp messages unless media is included.",
69
+ };
70
+ }
71
+
72
+ if (error.message.includes("63003")) {
73
+ return {
74
+ error: "Message exceeds maximum allowed length for WhatsApp.",
75
+ };
76
+ }
77
+ }
78
+ throw error;
79
+ }
80
+ },
81
+ });