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
@@ -40,7 +40,7 @@ function cn(...classes) {
40
40
  }
41
41
 
42
42
  // src/ai/react/components/chat.tsx
43
- import * as React6 from "react";
43
+ import * as React7 from "react";
44
44
 
45
45
  // src/ai/react/primitives/chat-container.tsx
46
46
  import * as React from "react";
@@ -128,7 +128,7 @@ MessageContent.displayName = "MessageContent";
128
128
 
129
129
  // src/ai/react/primitives/input-box.tsx
130
130
  import * as React3 from "react";
131
- import { jsx as jsx3 } from "react/jsx-runtime";
131
+ import { jsx as jsx3, jsxs } from "react/jsx-runtime";
132
132
  var InputBox = React3.forwardRef(({ className, value, onChange, onSubmit, multiline, ...props }, ref) => {
133
133
  const handleKeyDown = (e) => {
134
134
  if (e.key === "Enter" && !e.shiftKey && onSubmit) {
@@ -167,19 +167,64 @@ var InputBox = React3.forwardRef(({ className, value, onChange, onSubmit, multil
167
167
  );
168
168
  });
169
169
  InputBox.displayName = "InputBox";
170
- var SubmitButton = React3.forwardRef(({ className, isLoading, disabled, children, ...props }, ref) => {
170
+ var SubmitIcon = () => /* @__PURE__ */ jsx3("svg", { className: "w-4 h-4", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx3("path", { d: "M2.01 21L23 12 2.01 3 2 10l15 2-15 2z" }) });
171
+ var StopIcon = () => /* @__PURE__ */ jsx3("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx3("rect", { x: "4", y: "4", width: "16", height: "16", rx: "2" }) });
172
+ var VoiceIcon = () => /* @__PURE__ */ jsxs(
173
+ "svg",
174
+ {
175
+ width: "16",
176
+ height: "16",
177
+ viewBox: "0 0 24 24",
178
+ fill: "none",
179
+ stroke: "currentColor",
180
+ strokeWidth: "2",
181
+ strokeLinecap: "round",
182
+ strokeLinejoin: "round",
183
+ children: [
184
+ /* @__PURE__ */ jsx3("path", { d: "M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z" }),
185
+ /* @__PURE__ */ jsx3("path", { d: "M19 10v2a7 7 0 0 1-14 0v-2" }),
186
+ /* @__PURE__ */ jsx3("line", { x1: "12", x2: "12", y1: "19", y2: "22" })
187
+ ]
188
+ }
189
+ );
190
+ var SubmitButton = React3.forwardRef(({ className, isLoading, hasInput, onStop, onVoice, icons, disabled, children, ...props }, ref) => {
191
+ const showStop = isLoading;
192
+ const showVoice = !isLoading && !hasInput && onVoice;
193
+ const handleClick = (e) => {
194
+ if (showStop && onStop) {
195
+ e.preventDefault();
196
+ onStop();
197
+ } else if (showVoice && onVoice) {
198
+ e.preventDefault();
199
+ onVoice();
200
+ }
201
+ };
202
+ let icon;
203
+ let ariaLabel;
204
+ if (showStop) {
205
+ icon = icons?.stop || /* @__PURE__ */ jsx3(StopIcon, {});
206
+ ariaLabel = "Stop generating";
207
+ } else if (showVoice) {
208
+ icon = icons?.voice || /* @__PURE__ */ jsx3(VoiceIcon, {});
209
+ ariaLabel = "Voice input";
210
+ } else {
211
+ icon = icons?.submit || /* @__PURE__ */ jsx3(SubmitIcon, {});
212
+ ariaLabel = "Send message";
213
+ }
171
214
  return /* @__PURE__ */ jsx3(
172
215
  "button",
173
216
  {
174
217
  ref,
175
- type: "submit",
218
+ type: showStop || showVoice ? "button" : "submit",
176
219
  className,
177
- disabled: disabled || isLoading,
220
+ disabled: disabled && !showStop,
221
+ onClick: handleClick,
178
222
  "data-submit-button": "",
223
+ "data-state": showStop ? "stop" : showVoice ? "voice" : "submit",
179
224
  "data-loading": isLoading,
180
- "aria-label": "Submit message",
225
+ "aria-label": ariaLabel,
181
226
  ...props,
182
- children: children || "Send"
227
+ children: children || icon
183
228
  }
184
229
  );
185
230
  });
@@ -270,9 +315,9 @@ function formatStatus(status) {
270
315
 
271
316
  // src/ai/react/primitives/tool-primitives.tsx
272
317
  import * as React5 from "react";
273
- import { jsx as jsx5, jsxs } from "react/jsx-runtime";
318
+ import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
274
319
  var ToolInvocation = React5.forwardRef(({ className, name, args, status, children, ...props }, ref) => {
275
- return /* @__PURE__ */ jsxs(
320
+ return /* @__PURE__ */ jsxs2(
276
321
  "div",
277
322
  {
278
323
  ref,
@@ -282,9 +327,9 @@ var ToolInvocation = React5.forwardRef(({ className, name, args, status, childre
282
327
  "data-status": status,
283
328
  ...props,
284
329
  children: [
285
- /* @__PURE__ */ jsxs("div", { "data-tool-header": "", children: [
330
+ /* @__PURE__ */ jsxs2("div", { "data-tool-header": "", children: [
286
331
  /* @__PURE__ */ jsx5("span", { "data-tool-name": "", children: name }),
287
- status && /* @__PURE__ */ jsxs("span", { "data-tool-status": "", children: [
332
+ status && /* @__PURE__ */ jsxs2("span", { "data-tool-status": "", children: [
288
333
  "(",
289
334
  status,
290
335
  ")"
@@ -340,9 +385,147 @@ var ToolList = React5.forwardRef(
340
385
  );
341
386
  ToolList.displayName = "ToolList";
342
387
 
388
+ // src/ai/react/hooks/use-voice-input.ts
389
+ import * as React6 from "react";
390
+ function useVoiceInput(options = {}) {
391
+ const {
392
+ language,
393
+ continuous = false,
394
+ interimResults = true,
395
+ onTranscript,
396
+ onError,
397
+ onStart,
398
+ onEnd
399
+ } = options;
400
+ const [isListening, setIsListening] = React6.useState(false);
401
+ const [transcript, setTranscript] = React6.useState("");
402
+ const [error, setError] = React6.useState(null);
403
+ const recognitionRef = React6.useRef(null);
404
+ const isSupported = React6.useMemo(() => {
405
+ if (typeof globalThis === "undefined")
406
+ return false;
407
+ const g = globalThis;
408
+ return !!(g.SpeechRecognition || g.webkitSpeechRecognition);
409
+ }, []);
410
+ React6.useEffect(() => {
411
+ if (!isSupported)
412
+ return;
413
+ const g = globalThis;
414
+ const SpeechRecognitionAPI = g.SpeechRecognition || g.webkitSpeechRecognition;
415
+ if (!SpeechRecognitionAPI)
416
+ return;
417
+ const recognition = new SpeechRecognitionAPI();
418
+ recognition.continuous = continuous;
419
+ recognition.interimResults = interimResults;
420
+ if (language) {
421
+ recognition.lang = language;
422
+ }
423
+ recognition.onresult = (event) => {
424
+ let finalTranscript = "";
425
+ let interimTranscript = "";
426
+ for (let i = event.resultIndex; i < event.results.length; i++) {
427
+ const result = event.results[i];
428
+ if (!result || !result[0])
429
+ continue;
430
+ if (result.isFinal) {
431
+ finalTranscript += result[0].transcript;
432
+ } else {
433
+ interimTranscript += result[0].transcript;
434
+ }
435
+ }
436
+ const currentTranscript = finalTranscript || interimTranscript;
437
+ setTranscript(currentTranscript);
438
+ if (onTranscript) {
439
+ onTranscript(currentTranscript, !!finalTranscript);
440
+ }
441
+ };
442
+ recognition.onerror = (event) => {
443
+ const errorMessage = getErrorMessage(event.error);
444
+ setError(errorMessage);
445
+ setIsListening(false);
446
+ if (onError) {
447
+ onError(errorMessage);
448
+ }
449
+ };
450
+ recognition.onstart = () => {
451
+ setIsListening(true);
452
+ setError(null);
453
+ if (onStart) {
454
+ onStart();
455
+ }
456
+ };
457
+ recognition.onend = () => {
458
+ setIsListening(false);
459
+ if (onEnd) {
460
+ onEnd();
461
+ }
462
+ };
463
+ recognitionRef.current = recognition;
464
+ return () => {
465
+ recognition.abort();
466
+ };
467
+ }, [isSupported, language, continuous, interimResults, onTranscript, onError, onStart, onEnd]);
468
+ const start = React6.useCallback(() => {
469
+ if (!recognitionRef.current || isListening)
470
+ return;
471
+ setTranscript("");
472
+ setError(null);
473
+ try {
474
+ recognitionRef.current.start();
475
+ } catch {
476
+ console.warn("Speech recognition already started");
477
+ }
478
+ }, [isListening]);
479
+ const stop = React6.useCallback(() => {
480
+ if (!recognitionRef.current || !isListening)
481
+ return;
482
+ recognitionRef.current.stop();
483
+ }, [isListening]);
484
+ const toggle = React6.useCallback(() => {
485
+ if (isListening) {
486
+ stop();
487
+ } else {
488
+ start();
489
+ }
490
+ }, [isListening, start, stop]);
491
+ const clear = React6.useCallback(() => {
492
+ setTranscript("");
493
+ }, []);
494
+ return {
495
+ isSupported,
496
+ isListening,
497
+ transcript,
498
+ start,
499
+ stop,
500
+ toggle,
501
+ clear,
502
+ error
503
+ };
504
+ }
505
+ function getErrorMessage(error) {
506
+ switch (error) {
507
+ case "no-speech":
508
+ return "No speech detected. Please try again.";
509
+ case "audio-capture":
510
+ return "No microphone found. Please check your device.";
511
+ case "not-allowed":
512
+ return "Microphone permission denied. Please allow access.";
513
+ case "network":
514
+ return "Network error. Please check your connection.";
515
+ case "aborted":
516
+ return "Speech recognition was aborted.";
517
+ case "language-not-supported":
518
+ return "Language not supported.";
519
+ case "service-not-allowed":
520
+ return "Speech recognition service not allowed.";
521
+ default:
522
+ return `Speech recognition error: ${error}`;
523
+ }
524
+ }
525
+
343
526
  // src/ai/react/components/chat.tsx
344
- import { jsx as jsx6, jsxs as jsxs2 } from "react/jsx-runtime";
345
- var Chat = React6.forwardRef(
527
+ import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
528
+ var Chat = React7.forwardRef(
346
529
  ({
347
530
  messages,
348
531
  input,
@@ -350,6 +533,10 @@ var Chat = React6.forwardRef(
350
533
  handleInputChange,
351
534
  onSubmit,
352
535
  handleSubmit,
536
+ stop,
537
+ enableVoice = false,
538
+ onVoice,
539
+ setInput,
353
540
  isLoading,
354
541
  error,
355
542
  placeholder = "Type a message...",
@@ -361,23 +548,38 @@ var Chat = React6.forwardRef(
361
548
  multiline = false
362
549
  }, ref) => {
363
550
  const theme = mergeThemes(defaultChatTheme, userTheme);
364
- const messagesEndRef = React6.useRef(null);
551
+ const messagesEndRef = React7.useRef(null);
365
552
  const inputChangeHandler = onChange || handleInputChange || (() => {
366
553
  });
367
554
  const submitHandler = onSubmit || handleSubmit;
368
- React6.useEffect(() => {
555
+ const voice = useVoiceInput({
556
+ onTranscript: (transcript, isFinal) => {
557
+ if (setInput && isFinal) {
558
+ setInput(transcript);
559
+ }
560
+ }
561
+ });
562
+ const voiceHandler = React7.useMemo(() => {
563
+ if (onVoice)
564
+ return onVoice;
565
+ if (enableVoice && voice.isSupported && setInput) {
566
+ return voice.toggle;
567
+ }
568
+ return void 0;
569
+ }, [onVoice, enableVoice, voice.isSupported, voice.toggle, setInput]);
570
+ React7.useEffect(() => {
369
571
  messagesEndRef.current?.scrollIntoView({ behavior: "smooth" });
370
572
  }, [messages]);
371
- return /* @__PURE__ */ jsxs2(
573
+ return /* @__PURE__ */ jsxs3(
372
574
  ChatContainer,
373
575
  {
374
576
  ref,
375
577
  className: cn(theme.container, className),
376
578
  style: { maxHeight },
377
579
  children: [
378
- /* @__PURE__ */ jsx6(MessageList, { className: "flex-1 min-h-0 overflow-y-auto", children: /* @__PURE__ */ jsxs2("div", { className: "max-w-2xl mx-auto px-4 py-4 space-y-2", children: [
580
+ /* @__PURE__ */ jsx6(MessageList, { className: "flex-1 min-h-0 overflow-y-auto", children: /* @__PURE__ */ jsxs3("div", { className: "max-w-2xl mx-auto px-4 py-4 space-y-2", children: [
379
581
  messages.map(
380
- (msg) => renderMessage ? /* @__PURE__ */ jsx6(React6.Fragment, { children: renderMessage(msg) }, msg.id) : /* @__PURE__ */ jsx6(
582
+ (msg) => renderMessage ? /* @__PURE__ */ jsx6(React7.Fragment, { children: renderMessage(msg) }, msg.id) : /* @__PURE__ */ jsx6(
381
583
  MessageItem,
382
584
  {
383
585
  role: msg.role,
@@ -390,7 +592,7 @@ var Chat = React6.forwardRef(
390
592
  msg.id
391
593
  )
392
594
  ),
393
- isLoading && /* @__PURE__ */ jsx6("div", { className: "flex justify-start", children: /* @__PURE__ */ jsx6("div", { className: "bg-neutral-100 dark:bg-neutral-800 rounded-[20px] rounded-bl-[4px] px-4 py-3", children: /* @__PURE__ */ jsxs2("div", { className: "flex gap-1.5 items-center", children: [
595
+ isLoading && /* @__PURE__ */ jsx6("div", { className: "flex justify-start", children: /* @__PURE__ */ jsx6("div", { className: "bg-neutral-100 dark:bg-neutral-800 rounded-[20px] rounded-bl-[4px] px-4 py-3", children: /* @__PURE__ */ jsxs3("div", { className: "flex gap-1.5 items-center", children: [
394
596
  /* @__PURE__ */ jsx6("span", { className: cn(theme.loading) }),
395
597
  /* @__PURE__ */ jsx6("span", { className: cn(theme.loading), style: { animationDelay: "0.15s" } }),
396
598
  /* @__PURE__ */ jsx6("span", { className: cn(theme.loading), style: { animationDelay: "0.3s" } })
@@ -403,14 +605,14 @@ var Chat = React6.forwardRef(
403
605
  {
404
606
  onSubmit: submitHandler,
405
607
  className: "max-w-2xl mx-auto px-4 py-3",
406
- children: /* @__PURE__ */ jsxs2("div", { className: "flex gap-2 items-center", children: [
608
+ children: /* @__PURE__ */ jsxs3("div", { className: "flex gap-2 items-center", children: [
407
609
  /* @__PURE__ */ jsx6(
408
610
  InputBox,
409
611
  {
410
- value: input,
612
+ value: voice.isListening ? voice.transcript || input : input,
411
613
  onChange: inputChangeHandler,
412
- placeholder,
413
- disabled: isLoading,
614
+ placeholder: voice.isListening ? "Listening..." : placeholder,
615
+ disabled: isLoading || voice.isListening,
414
616
  multiline,
415
617
  className: theme.input
416
618
  }
@@ -418,10 +620,12 @@ var Chat = React6.forwardRef(
418
620
  /* @__PURE__ */ jsx6(
419
621
  SubmitButton,
420
622
  {
421
- isLoading,
422
- disabled: !input.trim() || isLoading,
423
- className: theme.button,
424
- children: /* @__PURE__ */ jsx6("svg", { className: "w-4 h-4", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsx6("path", { d: "M2.01 21L23 12 2.01 3 2 10l15 2-15 2z" }) })
623
+ isLoading: isLoading || voice.isListening,
624
+ hasInput: !!input.trim(),
625
+ onStop: voice.isListening ? voice.stop : stop,
626
+ onVoice: voiceHandler,
627
+ disabled: !input.trim(),
628
+ className: theme.button
425
629
  }
426
630
  )
427
631
  ] })
@@ -433,7 +637,7 @@ var Chat = React6.forwardRef(
433
637
  }
434
638
  );
435
639
  Chat.displayName = "Chat";
436
- var ChatHeader = React6.forwardRef(({ className, children, ...props }, ref) => {
640
+ var ChatHeader = React7.forwardRef(({ className, children, ...props }, ref) => {
437
641
  return /* @__PURE__ */ jsx6(
438
642
  "div",
439
643
  {
@@ -450,7 +654,7 @@ var ChatHeader = React6.forwardRef(({ className, children, ...props }, ref) => {
450
654
  ChatHeader.displayName = "ChatHeader";
451
655
  var ChatMessages = MessageList;
452
656
  ChatMessages.displayName = "ChatMessages";
453
- var ChatInput = React6.forwardRef(({ className, ...props }, ref) => {
657
+ var ChatInput = React7.forwardRef(({ className, ...props }, ref) => {
454
658
  return /* @__PURE__ */ jsx6("div", { className: "border-t border-gray-200 dark:border-gray-800 p-4", children: /* @__PURE__ */ jsx6("div", { className: "flex gap-2", children: /* @__PURE__ */ jsx6(
455
659
  InputBox,
456
660
  {
@@ -461,7 +665,7 @@ var ChatInput = React6.forwardRef(({ className, ...props }, ref) => {
461
665
  ) }) });
462
666
  });
463
667
  ChatInput.displayName = "ChatInput";
464
- var ChatFooter = React6.forwardRef(({ className, children, ...props }, ref) => {
668
+ var ChatFooter = React7.forwardRef(({ className, children, ...props }, ref) => {
465
669
  return /* @__PURE__ */ jsx6(
466
670
  "div",
467
671
  {
@@ -484,9 +688,9 @@ var ChatComponents = Object.assign(Chat, {
484
688
  });
485
689
 
486
690
  // src/ai/react/components/agent-card.tsx
487
- import * as React7 from "react";
488
- import { jsx as jsx7, jsxs as jsxs3 } from "react/jsx-runtime";
489
- var AgentCard = React7.forwardRef(
691
+ import * as React8 from "react";
692
+ import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
693
+ var AgentCard = React8.forwardRef(
490
694
  ({
491
695
  messages,
492
696
  toolCalls = [],
@@ -497,7 +701,7 @@ var AgentCard = React7.forwardRef(
497
701
  renderTool
498
702
  }, ref) => {
499
703
  const theme = mergeThemes(defaultAgentTheme, userTheme);
500
- return /* @__PURE__ */ jsxs3(AgentContainer, { ref, className: cn(theme.container, className), children: [
704
+ return /* @__PURE__ */ jsxs4(AgentContainer, { ref, className: cn(theme.container, className), children: [
501
705
  /* @__PURE__ */ jsx7(
502
706
  AgentStatus,
503
707
  {
@@ -505,18 +709,18 @@ var AgentCard = React7.forwardRef(
505
709
  className: cn(theme.status, getStatusColor(status))
506
710
  }
507
711
  ),
508
- thinking && /* @__PURE__ */ jsxs3(ThinkingIndicator, { className: theme.thinking, children: [
712
+ thinking && /* @__PURE__ */ jsxs4(ThinkingIndicator, { className: theme.thinking, children: [
509
713
  /* @__PURE__ */ jsx7("span", { className: "font-semibold", children: "Thinking:" }),
510
714
  thinking
511
715
  ] }),
512
- toolCalls.length > 0 && /* @__PURE__ */ jsxs3("div", { className: "space-y-3", children: [
716
+ toolCalls.length > 0 && /* @__PURE__ */ jsxs4("div", { className: "space-y-3", children: [
513
717
  /* @__PURE__ */ jsx7("h3", { className: "text-sm font-semibold text-neutral-700 dark:text-neutral-300", children: "Tool Calls" }),
514
718
  /* @__PURE__ */ jsx7(
515
719
  ToolList,
516
720
  {
517
721
  toolCalls,
518
722
  className: "space-y-3",
519
- renderTool: renderTool || ((tool) => /* @__PURE__ */ jsxs3(
723
+ renderTool: renderTool || ((tool) => /* @__PURE__ */ jsxs4(
520
724
  ToolInvocation,
521
725
  {
522
726
  name: tool.name,
@@ -525,7 +729,7 @@ var AgentCard = React7.forwardRef(
525
729
  className: theme.tool,
526
730
  children: [
527
731
  tool.result !== void 0 && /* @__PURE__ */ jsx7(ToolResult, { result: tool.result, className: theme.toolResult }),
528
- tool.error && /* @__PURE__ */ jsxs3("div", { className: "mt-2 p-3 bg-red-50 dark:bg-red-900/20 text-red-900 dark:text-red-100 rounded-xl text-sm border border-red-200 dark:border-red-800", children: [
732
+ tool.error && /* @__PURE__ */ jsxs4("div", { className: "mt-2 p-3 bg-red-50 dark:bg-red-900/20 text-red-900 dark:text-red-100 rounded-xl text-sm border border-red-200 dark:border-red-800", children: [
529
733
  "Error: ",
530
734
  tool.error
531
735
  ] })
@@ -535,18 +739,18 @@ var AgentCard = React7.forwardRef(
535
739
  }
536
740
  )
537
741
  ] }),
538
- messages && messages.length > 0 && /* @__PURE__ */ jsxs3("div", { className: "space-y-3", children: [
742
+ messages && messages.length > 0 && /* @__PURE__ */ jsxs4("div", { className: "space-y-3", children: [
539
743
  /* @__PURE__ */ jsx7("h3", { className: "text-sm font-semibold text-neutral-700 dark:text-neutral-300", children: "Messages" }),
540
- /* @__PURE__ */ jsx7("div", { className: "space-y-2 max-h-96 overflow-y-auto", children: messages.map((msg) => /* @__PURE__ */ jsxs3(
744
+ /* @__PURE__ */ jsx7("div", { className: "space-y-2 max-h-96 overflow-y-auto", children: messages.map((msg) => /* @__PURE__ */ jsxs4(
541
745
  "div",
542
746
  {
543
747
  className: "text-sm p-3 rounded-xl bg-neutral-50 dark:bg-neutral-800",
544
748
  children: [
545
- /* @__PURE__ */ jsxs3("span", { className: "font-semibold capitalize text-neutral-900 dark:text-neutral-100", children: [
749
+ /* @__PURE__ */ jsxs4("span", { className: "font-semibold capitalize text-neutral-900 dark:text-neutral-100", children: [
546
750
  msg.role,
547
751
  ":"
548
752
  ] }),
549
- /* @__PURE__ */ jsxs3("span", { className: "text-neutral-600 dark:text-neutral-400 ml-1", children: [
753
+ /* @__PURE__ */ jsxs4("span", { className: "text-neutral-600 dark:text-neutral-400 ml-1", children: [
550
754
  msg.content.substring(0, 200),
551
755
  "..."
552
756
  ] })
@@ -579,9 +783,9 @@ function getStatusColor(status) {
579
783
  }
580
784
 
581
785
  // src/ai/react/components/message.tsx
582
- import * as React8 from "react";
583
- import { jsx as jsx8, jsxs as jsxs4 } from "react/jsx-runtime";
584
- var Message = React8.forwardRef(
786
+ import * as React9 from "react";
787
+ import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
788
+ var Message = React9.forwardRef(
585
789
  ({ message, className, theme: userTheme, showRole = false, showTimestamp = false }, ref) => {
586
790
  const theme = mergeThemes(defaultChatTheme, userTheme);
587
791
  return /* @__PURE__ */ jsx8(
@@ -594,7 +798,7 @@ var Message = React8.forwardRef(
594
798
  message.role === "user" ? "justify-end" : "justify-start",
595
799
  className
596
800
  ),
597
- children: /* @__PURE__ */ jsxs4("div", { className: theme.message?.[message.role] || theme.message?.assistant, children: [
801
+ children: /* @__PURE__ */ jsxs5("div", { className: theme.message?.[message.role] || theme.message?.assistant, children: [
598
802
  showRole && /* @__PURE__ */ jsx8(MessageRole, { className: "block text-xs font-semibold mb-1 opacity-75 uppercase", children: message.role }),
599
803
  /* @__PURE__ */ jsx8(MessageContent, { children: message.content }),
600
804
  showTimestamp && message.timestamp && /* @__PURE__ */ jsx8("div", { className: "text-xs opacity-60 mt-1", children: new Date(message.timestamp).toLocaleTimeString() })
@@ -604,7 +808,7 @@ var Message = React8.forwardRef(
604
808
  }
605
809
  );
606
810
  Message.displayName = "Message";
607
- var StreamingMessage = React8.forwardRef(({ content, showCursor = true, className, theme: userTheme }, ref) => {
811
+ var StreamingMessage = React9.forwardRef(({ content, showCursor = true, className, theme: userTheme }, ref) => {
608
812
  const theme = mergeThemes(defaultChatTheme, userTheme);
609
813
  return /* @__PURE__ */ jsx8(
610
814
  MessageItem,
@@ -612,7 +816,7 @@ var StreamingMessage = React8.forwardRef(({ content, showCursor = true, classNam
612
816
  ref,
613
817
  role: "assistant",
614
818
  className: cn("flex justify-start", className),
615
- children: /* @__PURE__ */ jsx8("div", { className: theme.message?.assistant, children: /* @__PURE__ */ jsxs4(MessageContent, { children: [
819
+ children: /* @__PURE__ */ jsx8("div", { className: theme.message?.assistant, children: /* @__PURE__ */ jsxs5(MessageContent, { children: [
616
820
  content,
617
821
  showCursor && /* @__PURE__ */ jsx8("span", { className: "inline-block w-1 h-4 bg-current ml-1 animate-pulse" })
618
822
  ] }) })
@@ -622,9 +826,9 @@ var StreamingMessage = React8.forwardRef(({ content, showCursor = true, classNam
622
826
  StreamingMessage.displayName = "StreamingMessage";
623
827
 
624
828
  // src/ai/react/components/error-boundary.tsx
625
- import * as React9 from "react";
626
- import { jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
627
- var AIErrorBoundary = class extends React9.Component {
829
+ import * as React10 from "react";
830
+ import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
831
+ var AIErrorBoundary = class extends React10.Component {
628
832
  constructor(props) {
629
833
  super(props);
630
834
  this.reset = () => {
@@ -654,7 +858,7 @@ var AIErrorBoundary = class extends React9.Component {
654
858
  {
655
859
  className: "border border-red-200 dark:border-red-800 bg-red-50 dark:bg-red-900/20 rounded-2xl p-6",
656
860
  role: "alert",
657
- children: /* @__PURE__ */ jsxs5("div", { className: "flex items-start gap-4", children: [
861
+ children: /* @__PURE__ */ jsxs6("div", { className: "flex items-start gap-4", children: [
658
862
  /* @__PURE__ */ jsx9("div", { className: "w-10 h-10 rounded-full bg-red-100 dark:bg-red-900/40 flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsx9(
659
863
  "svg",
660
864
  {
@@ -673,7 +877,7 @@ var AIErrorBoundary = class extends React9.Component {
673
877
  )
674
878
  }
675
879
  ) }),
676
- /* @__PURE__ */ jsxs5("div", { className: "flex-1 min-w-0", children: [
880
+ /* @__PURE__ */ jsxs6("div", { className: "flex-1 min-w-0", children: [
677
881
  /* @__PURE__ */ jsx9("h3", { className: "text-base font-semibold text-red-900 dark:text-red-100", children: this.props.errorMessage || "An error occurred in the AI component" }),
678
882
  /* @__PURE__ */ jsx9("p", { className: "mt-1.5 text-sm text-red-700 dark:text-red-300 leading-relaxed", children: this.state.error.message }),
679
883
  /* @__PURE__ */ jsx9(
@@ -694,12 +898,12 @@ var AIErrorBoundary = class extends React9.Component {
694
898
  }
695
899
  };
696
900
  function useAIErrorHandler() {
697
- const [error, setError] = React9.useState(null);
698
- const handleError = React9.useCallback((error2) => {
901
+ const [error, setError] = React10.useState(null);
902
+ const handleError = React10.useCallback((error2) => {
699
903
  console.error("[useAIErrorHandler] Error:", error2);
700
904
  setError(error2);
701
905
  }, []);
702
- const clearError = React9.useCallback(() => {
906
+ const clearError = React10.useCallback(() => {
703
907
  setError(null);
704
908
  }, []);
705
909
  return {