@athenaintel/react 0.18.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (848) hide show
  1. package/README.md +195 -7
  2. package/dist/assets/AssetPanel.cjs +277 -0
  3. package/dist/assets/AssetPanel.cjs.map +1 -0
  4. package/dist/assets/AssetPanel.js +277 -0
  5. package/dist/assets/AssetPanel.js.map +1 -0
  6. package/dist/assets/AthenaAssetEmbed.cjs +151 -0
  7. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -0
  8. package/dist/assets/AthenaAssetEmbed.js +151 -0
  9. package/dist/assets/AthenaAssetEmbed.js.map +1 -0
  10. package/dist/assets/AthenaLayout.cjs +69 -0
  11. package/dist/assets/AthenaLayout.cjs.map +1 -0
  12. package/dist/assets/AthenaLayout.js +69 -0
  13. package/dist/assets/AthenaLayout.js.map +1 -0
  14. package/dist/assets/asset-embed-messages.cjs +39 -0
  15. package/dist/assets/asset-embed-messages.cjs.map +1 -0
  16. package/dist/assets/asset-embed-messages.js +39 -0
  17. package/dist/assets/asset-embed-messages.js.map +1 -0
  18. package/dist/assets/asset-panel-store.cjs +124 -0
  19. package/dist/assets/asset-panel-store.cjs.map +1 -0
  20. package/dist/assets/asset-panel-store.js +124 -0
  21. package/dist/assets/asset-panel-store.js.map +1 -0
  22. package/dist/assets/asset-panel-url.cjs +40 -0
  23. package/dist/assets/asset-panel-url.cjs.map +1 -0
  24. package/dist/assets/asset-panel-url.js +40 -0
  25. package/dist/assets/asset-panel-url.js.map +1 -0
  26. package/dist/assets/use-asset-embed.cjs +362 -0
  27. package/dist/assets/use-asset-embed.cjs.map +1 -0
  28. package/dist/assets/use-asset-embed.js +362 -0
  29. package/dist/assets/use-asset-embed.js.map +1 -0
  30. package/dist/{AthenaAuthContext-B3AwLA5Z.cjs → auth/AthenaAuthContext.cjs} +5 -4
  31. package/dist/auth/AthenaAuthContext.cjs.map +1 -0
  32. package/dist/{AthenaAuthContext-DQsdayH2.js → auth/AthenaAuthContext.js} +3 -3
  33. package/dist/auth/AthenaAuthContext.js.map +1 -0
  34. package/dist/auth/AthenaAuthProvider.cjs +141 -0
  35. package/dist/auth/AthenaAuthProvider.cjs.map +1 -0
  36. package/dist/auth/AthenaAuthProvider.js +141 -0
  37. package/dist/auth/AthenaAuthProvider.js.map +1 -0
  38. package/dist/{auth.cjs → auth/AthenaSSOProvider.cjs} +14 -151
  39. package/dist/auth/AthenaSSOProvider.cjs.map +1 -0
  40. package/dist/{auth.js → auth/AthenaSSOProvider.js} +4 -142
  41. package/dist/auth/AthenaSSOProvider.js.map +1 -0
  42. package/dist/auth/index.cjs +10 -0
  43. package/dist/auth/index.cjs.map +1 -0
  44. package/dist/auth/index.js +10 -0
  45. package/dist/auth/index.js.map +1 -0
  46. package/dist/chat/AthenaChat.cjs +753 -0
  47. package/dist/chat/AthenaChat.cjs.map +1 -0
  48. package/dist/chat/AthenaChat.d.ts +3 -2
  49. package/dist/chat/AthenaChat.js +753 -0
  50. package/dist/chat/AthenaChat.js.map +1 -0
  51. package/dist/chat/AthenaChatErrorBoundary.cjs +53 -0
  52. package/dist/chat/AthenaChatErrorBoundary.cjs.map +1 -0
  53. package/dist/chat/AthenaChatErrorBoundary.js +53 -0
  54. package/dist/chat/AthenaChatErrorBoundary.js.map +1 -0
  55. package/dist/chat/StatewireApprovalCard.cjs +171 -0
  56. package/dist/chat/StatewireApprovalCard.cjs.map +1 -0
  57. package/dist/chat/StatewireApprovalCard.d.ts +59 -2
  58. package/dist/chat/StatewireApprovalCard.js +171 -0
  59. package/dist/chat/StatewireApprovalCard.js.map +1 -0
  60. package/dist/chat/StatewireClientToolBridge.cjs +50 -0
  61. package/dist/chat/StatewireClientToolBridge.cjs.map +1 -0
  62. package/dist/chat/StatewireClientToolBridge.d.ts +3 -3
  63. package/dist/chat/StatewireClientToolBridge.js +50 -0
  64. package/dist/chat/StatewireClientToolBridge.js.map +1 -0
  65. package/dist/chat/StatewireQueuedMessages.cjs +432 -0
  66. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -0
  67. package/dist/chat/StatewireQueuedMessages.d.ts +104 -6
  68. package/dist/chat/StatewireQueuedMessages.js +432 -0
  69. package/dist/chat/StatewireQueuedMessages.js.map +1 -0
  70. package/dist/chat/athena-citation-links.cjs +326 -0
  71. package/dist/chat/athena-citation-links.cjs.map +1 -0
  72. package/dist/chat/athena-citation-links.js +326 -0
  73. package/dist/chat/athena-citation-links.js.map +1 -0
  74. package/dist/chat/run-activity.cjs +28 -0
  75. package/dist/chat/run-activity.cjs.map +1 -0
  76. package/dist/chat/run-activity.js +28 -0
  77. package/dist/chat/run-activity.js.map +1 -0
  78. package/dist/chat/statewire-approval.d.ts +1 -1
  79. package/dist/chat/statewire-banners.cjs +83 -0
  80. package/dist/chat/statewire-banners.cjs.map +1 -0
  81. package/dist/chat/statewire-banners.js +83 -0
  82. package/dist/chat/statewire-banners.js.map +1 -0
  83. package/dist/chat/statewire-client-tools.cjs +73 -0
  84. package/dist/chat/statewire-client-tools.cjs.map +1 -0
  85. package/dist/chat/statewire-client-tools.d.ts +15 -21
  86. package/dist/chat/statewire-client-tools.js +73 -0
  87. package/dist/chat/statewire-client-tools.js.map +1 -0
  88. package/dist/chat/super-grouping/CollapsibleGroup.cjs +158 -0
  89. package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -0
  90. package/dist/chat/super-grouping/CollapsibleGroup.d.ts +52 -11
  91. package/dist/chat/super-grouping/CollapsibleGroup.js +158 -0
  92. package/dist/chat/super-grouping/CollapsibleGroup.js.map +1 -0
  93. package/dist/chat/super-grouping/SuperGroupingCard.cjs +361 -0
  94. package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -0
  95. package/dist/chat/super-grouping/SuperGroupingCard.d.ts +81 -21
  96. package/dist/chat/super-grouping/SuperGroupingCard.js +361 -0
  97. package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -0
  98. package/dist/chat/super-grouping/activity-timeline.cjs +151 -0
  99. package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -0
  100. package/dist/chat/super-grouping/activity-timeline.d.ts +91 -0
  101. package/dist/chat/super-grouping/activity-timeline.js +151 -0
  102. package/dist/chat/super-grouping/activity-timeline.js.map +1 -0
  103. package/dist/chat/super-grouping/grouping-function.cjs +55 -0
  104. package/dist/chat/super-grouping/grouping-function.cjs.map +1 -0
  105. package/dist/chat/super-grouping/grouping-function.d.ts +13 -10
  106. package/dist/chat/super-grouping/grouping-function.js +55 -0
  107. package/dist/chat/super-grouping/grouping-function.js.map +1 -0
  108. package/dist/chat/super-grouping/index.cjs +26 -0
  109. package/dist/chat/super-grouping/index.cjs.map +1 -0
  110. package/dist/chat/super-grouping/index.d.ts +12 -0
  111. package/dist/chat/super-grouping/index.js +26 -0
  112. package/dist/chat/super-grouping/index.js.map +1 -0
  113. package/dist/chat/super-grouping/toolkit-map.cjs +96 -0
  114. package/dist/chat/super-grouping/toolkit-map.cjs.map +1 -0
  115. package/dist/chat/super-grouping/toolkit-map.d.ts +8 -1
  116. package/dist/chat/super-grouping/toolkit-map.js +96 -0
  117. package/dist/chat/super-grouping/toolkit-map.js.map +1 -0
  118. package/dist/chat/tiptap-text.cjs +101 -0
  119. package/dist/chat/tiptap-text.cjs.map +1 -0
  120. package/dist/chat/tiptap-text.js +101 -0
  121. package/dist/chat/tiptap-text.js.map +1 -0
  122. package/dist/chat/tooltip-icon-button.cjs +32 -0
  123. package/dist/chat/tooltip-icon-button.cjs.map +1 -0
  124. package/dist/chat/tooltip-icon-button.js +32 -0
  125. package/dist/chat/tooltip-icon-button.js.map +1 -0
  126. package/dist/chat/use-athena-run-live.cjs +23 -0
  127. package/dist/chat/use-athena-run-live.cjs.map +1 -0
  128. package/dist/chat/use-athena-run-live.d.ts +10 -0
  129. package/dist/chat/use-athena-run-live.js +23 -0
  130. package/dist/chat/use-athena-run-live.js.map +1 -0
  131. package/dist/chat/use-statewire-approval-request.cjs +46 -0
  132. package/dist/chat/use-statewire-approval-request.cjs.map +1 -0
  133. package/dist/chat/use-statewire-approval-request.d.ts +44 -0
  134. package/dist/chat/use-statewire-approval-request.js +46 -0
  135. package/dist/chat/use-statewire-approval-request.js.map +1 -0
  136. package/dist/chat-ui/auth/sign-in-card.cjs +128 -0
  137. package/dist/chat-ui/auth/sign-in-card.cjs.map +1 -0
  138. package/dist/chat-ui/auth/sign-in-card.js +128 -0
  139. package/dist/chat-ui/auth/sign-in-card.js.map +1 -0
  140. package/dist/chat-ui/composer/composer-action.cjs +11 -0
  141. package/dist/chat-ui/composer/composer-action.cjs.map +1 -0
  142. package/dist/chat-ui/composer/composer-action.d.ts +5 -8
  143. package/dist/chat-ui/composer/composer-action.js +11 -0
  144. package/dist/chat-ui/composer/composer-action.js.map +1 -0
  145. package/dist/chat-ui/composer/pending-attachment-uploads.cjs +25 -0
  146. package/dist/chat-ui/composer/pending-attachment-uploads.cjs.map +1 -0
  147. package/dist/chat-ui/composer/pending-attachment-uploads.js +25 -0
  148. package/dist/chat-ui/composer/pending-attachment-uploads.js.map +1 -0
  149. package/dist/chat-ui/composer/tiptap-composer.cjs +590 -0
  150. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -0
  151. package/dist/chat-ui/composer/tiptap-composer.d.ts +44 -7
  152. package/dist/chat-ui/composer/tiptap-composer.js +590 -0
  153. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -0
  154. package/dist/chat-ui/header/chat-header.cjs +33 -0
  155. package/dist/chat-ui/header/chat-header.cjs.map +1 -0
  156. package/dist/chat-ui/header/chat-header.js +33 -0
  157. package/dist/chat-ui/header/chat-header.js.map +1 -0
  158. package/dist/chat-ui/header/conversation-history-panel.cjs +369 -0
  159. package/dist/chat-ui/header/conversation-history-panel.cjs.map +1 -0
  160. package/dist/chat-ui/header/conversation-history-panel.d.ts +11 -1
  161. package/dist/chat-ui/header/conversation-history-panel.js +369 -0
  162. package/dist/chat-ui/header/conversation-history-panel.js.map +1 -0
  163. package/dist/chat-ui/index.cjs +139 -0
  164. package/dist/chat-ui/index.cjs.map +1 -0
  165. package/dist/chat-ui/index.d.ts +11 -4
  166. package/dist/chat-ui/index.js +139 -0
  167. package/dist/chat-ui/index.js.map +1 -0
  168. package/dist/chat-ui/lib/asset-urls.cjs +18 -0
  169. package/dist/chat-ui/lib/asset-urls.cjs.map +1 -0
  170. package/dist/chat-ui/lib/asset-urls.js +18 -0
  171. package/dist/chat-ui/lib/asset-urls.js.map +1 -0
  172. package/dist/chat-ui/mentions/mention-chip.cjs +208 -0
  173. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -0
  174. package/dist/chat-ui/mentions/mention-chip.js +208 -0
  175. package/dist/chat-ui/mentions/mention-chip.js.map +1 -0
  176. package/dist/chat-ui/mentions/mention-extension.cjs +184 -0
  177. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -0
  178. package/dist/chat-ui/mentions/mention-extension.d.ts +24 -2
  179. package/dist/chat-ui/mentions/mention-extension.js +184 -0
  180. package/dist/chat-ui/mentions/mention-extension.js.map +1 -0
  181. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +35 -0
  182. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -0
  183. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +35 -0
  184. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -0
  185. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +95 -0
  186. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -0
  187. package/dist/chat-ui/mentions/suggestions/components/mention-icon.d.ts +5 -0
  188. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +95 -0
  189. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -0
  190. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs +116 -0
  191. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs.map +1 -0
  192. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js +116 -0
  193. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js.map +1 -0
  194. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +31 -0
  195. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -0
  196. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js +31 -0
  197. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js.map +1 -0
  198. package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.cjs +27 -0
  199. package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.cjs.map +1 -0
  200. package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.js +27 -0
  201. package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.js.map +1 -0
  202. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +62 -0
  203. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -0
  204. package/dist/chat-ui/mentions/suggestions/components/menu-item.js +62 -0
  205. package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -0
  206. package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs +63 -0
  207. package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs.map +1 -0
  208. package/dist/chat-ui/mentions/suggestions/components/menu-list.js +63 -0
  209. package/dist/chat-ui/mentions/suggestions/components/menu-list.js.map +1 -0
  210. package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.cjs +11 -0
  211. package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.cjs.map +1 -0
  212. package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.js +11 -0
  213. package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.js.map +1 -0
  214. package/dist/chat-ui/mentions/suggestions/components/menu-summary.cjs +33 -0
  215. package/dist/chat-ui/mentions/suggestions/components/menu-summary.cjs.map +1 -0
  216. package/dist/chat-ui/mentions/suggestions/components/menu-summary.js +33 -0
  217. package/dist/chat-ui/mentions/suggestions/components/menu-summary.js.map +1 -0
  218. package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs +58 -0
  219. package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs.map +1 -0
  220. package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.js +58 -0
  221. package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.js.map +1 -0
  222. package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs +81 -0
  223. package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs.map +1 -0
  224. package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.js +81 -0
  225. package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.js.map +1 -0
  226. package/dist/chat-ui/mentions/suggestions/components/utils.cjs +18 -0
  227. package/dist/chat-ui/mentions/suggestions/components/utils.cjs.map +1 -0
  228. package/dist/chat-ui/mentions/suggestions/components/utils.js +18 -0
  229. package/dist/chat-ui/mentions/suggestions/components/utils.js.map +1 -0
  230. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +123 -0
  231. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -0
  232. package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +10 -0
  233. package/dist/chat-ui/mentions/suggestions/data/api-client.js +123 -0
  234. package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -0
  235. package/dist/chat-ui/mentions/suggestions/data/item-cache.cjs +37 -0
  236. package/dist/chat-ui/mentions/suggestions/data/item-cache.cjs.map +1 -0
  237. package/dist/chat-ui/mentions/suggestions/data/item-cache.js +37 -0
  238. package/dist/chat-ui/mentions/suggestions/data/item-cache.js.map +1 -0
  239. package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs +134 -0
  240. package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs.map +1 -0
  241. package/dist/chat-ui/mentions/suggestions/data/orchestrator.js +134 -0
  242. package/dist/chat-ui/mentions/suggestions/data/orchestrator.js.map +1 -0
  243. package/dist/chat-ui/mentions/suggestions/data/scope-registry.cjs +91 -0
  244. package/dist/chat-ui/mentions/suggestions/data/scope-registry.cjs.map +1 -0
  245. package/dist/chat-ui/mentions/suggestions/data/scope-registry.js +91 -0
  246. package/dist/chat-ui/mentions/suggestions/data/scope-registry.js.map +1 -0
  247. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs +137 -0
  248. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs.map +1 -0
  249. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js +137 -0
  250. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js.map +1 -0
  251. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +375 -0
  252. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -0
  253. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +16 -1
  254. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +375 -0
  255. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -0
  256. package/dist/chat-ui/mentions/suggestions/data/types.cjs +9 -0
  257. package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -0
  258. package/dist/chat-ui/mentions/suggestions/data/types.d.ts +14 -0
  259. package/dist/chat-ui/mentions/suggestions/data/types.js +9 -0
  260. package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -0
  261. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +173 -0
  262. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -0
  263. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +14 -4
  264. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +173 -0
  265. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -0
  266. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs +45 -0
  267. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs.map +1 -0
  268. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js +45 -0
  269. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js.map +1 -0
  270. package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.cjs +43 -0
  271. package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.cjs.map +1 -0
  272. package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.js +43 -0
  273. package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.js.map +1 -0
  274. package/dist/chat-ui/mentions/suggestions/data/utils/match-query.cjs +14 -0
  275. package/dist/chat-ui/mentions/suggestions/data/utils/match-query.cjs.map +1 -0
  276. package/dist/chat-ui/mentions/suggestions/data/utils/match-query.js +14 -0
  277. package/dist/chat-ui/mentions/suggestions/data/utils/match-query.js.map +1 -0
  278. package/dist/chat-ui/mentions/suggestions/data/utils/score-match.cjs +48 -0
  279. package/dist/chat-ui/mentions/suggestions/data/utils/score-match.cjs.map +1 -0
  280. package/dist/chat-ui/mentions/suggestions/data/utils/score-match.js +48 -0
  281. package/dist/chat-ui/mentions/suggestions/data/utils/score-match.js.map +1 -0
  282. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +71 -0
  283. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -0
  284. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +71 -0
  285. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -0
  286. package/dist/chat-ui/mentions/suggestions/shims.d.ts +0 -4
  287. package/dist/chat-ui/messages/continue-pill.cjs +54 -0
  288. package/dist/chat-ui/messages/continue-pill.cjs.map +1 -0
  289. package/dist/chat-ui/messages/continue-pill.js +54 -0
  290. package/dist/chat-ui/messages/continue-pill.js.map +1 -0
  291. package/dist/chat-ui/messages/message-actions-config.cjs +12 -0
  292. package/dist/chat-ui/messages/message-actions-config.cjs.map +1 -0
  293. package/dist/chat-ui/messages/message-actions-config.js +12 -0
  294. package/dist/chat-ui/messages/message-actions-config.js.map +1 -0
  295. package/dist/chat-ui/messages/message-components.cjs +343 -0
  296. package/dist/chat-ui/messages/message-components.cjs.map +1 -0
  297. package/dist/chat-ui/messages/message-components.d.ts +13 -1
  298. package/dist/chat-ui/messages/message-components.js +343 -0
  299. package/dist/chat-ui/messages/message-components.js.map +1 -0
  300. package/dist/chat-ui/messages/running-indicator.cjs +49 -0
  301. package/dist/chat-ui/messages/running-indicator.cjs.map +1 -0
  302. package/dist/chat-ui/messages/running-indicator.js +49 -0
  303. package/dist/chat-ui/messages/running-indicator.js.map +1 -0
  304. package/dist/chat-ui/messages/runtime-message.cjs +65 -0
  305. package/dist/chat-ui/messages/runtime-message.cjs.map +1 -0
  306. package/dist/chat-ui/messages/runtime-message.d.ts +2 -3
  307. package/dist/chat-ui/messages/runtime-message.js +65 -0
  308. package/dist/chat-ui/messages/runtime-message.js.map +1 -0
  309. package/dist/chat-ui/messages/statewire-continue-run.cjs +154 -0
  310. package/dist/chat-ui/messages/statewire-continue-run.cjs.map +1 -0
  311. package/dist/chat-ui/messages/statewire-continue-run.d.ts +52 -7
  312. package/dist/chat-ui/messages/statewire-continue-run.js +154 -0
  313. package/dist/chat-ui/messages/statewire-continue-run.js.map +1 -0
  314. package/dist/chat-ui/messages/user-edit-composer.cjs +61 -0
  315. package/dist/chat-ui/messages/user-edit-composer.cjs.map +1 -0
  316. package/dist/chat-ui/messages/user-edit-composer.d.ts +5 -2
  317. package/dist/chat-ui/messages/user-edit-composer.js +61 -0
  318. package/dist/chat-ui/messages/user-edit-composer.js.map +1 -0
  319. package/dist/chat-ui/messages/voice-delegation-card.cjs +51 -0
  320. package/dist/chat-ui/messages/voice-delegation-card.cjs.map +1 -0
  321. package/dist/chat-ui/messages/voice-delegation-card.d.ts +26 -0
  322. package/dist/chat-ui/messages/voice-delegation-card.js +51 -0
  323. package/dist/chat-ui/messages/voice-delegation-card.js.map +1 -0
  324. package/dist/chat-ui/statewire.cjs +39 -0
  325. package/dist/chat-ui/statewire.cjs.map +1 -0
  326. package/dist/chat-ui/statewire.d.ts +19 -0
  327. package/dist/chat-ui/statewire.js +39 -0
  328. package/dist/chat-ui/statewire.js.map +1 -0
  329. package/dist/chat-ui/thread/chat-composer-dock.cjs +37 -0
  330. package/dist/chat-ui/thread/chat-composer-dock.cjs.map +1 -0
  331. package/dist/chat-ui/thread/chat-composer-dock.js +37 -0
  332. package/dist/chat-ui/thread/chat-composer-dock.js.map +1 -0
  333. package/dist/chat-ui/thread/chat-thread-shell.cjs +102 -0
  334. package/dist/chat-ui/thread/chat-thread-shell.cjs.map +1 -0
  335. package/dist/chat-ui/thread/chat-thread-shell.d.ts +7 -1
  336. package/dist/chat-ui/thread/chat-thread-shell.js +102 -0
  337. package/dist/chat-ui/thread/chat-thread-shell.js.map +1 -0
  338. package/dist/chat-ui/thread/composer-send-or-stop.cjs +75 -0
  339. package/dist/chat-ui/thread/composer-send-or-stop.cjs.map +1 -0
  340. package/dist/chat-ui/thread/composer-send-or-stop.d.ts +0 -6
  341. package/dist/chat-ui/thread/composer-send-or-stop.js +75 -0
  342. package/dist/chat-ui/thread/composer-send-or-stop.js.map +1 -0
  343. package/dist/chat-ui/thread/statewire-history-edge.cjs +134 -0
  344. package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -0
  345. package/dist/chat-ui/thread/statewire-history-edge.d.ts +52 -0
  346. package/dist/chat-ui/thread/statewire-history-edge.js +134 -0
  347. package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -0
  348. package/dist/{collab.cjs → collab/client.cjs} +6 -166
  349. package/dist/collab/client.cjs.map +1 -0
  350. package/dist/{collab.js → collab/client.js} +5 -164
  351. package/dist/collab/client.js.map +1 -0
  352. package/dist/collab/close-policy.cjs +14 -0
  353. package/dist/collab/close-policy.cjs.map +1 -0
  354. package/dist/collab/close-policy.js +14 -0
  355. package/dist/collab/close-policy.js.map +1 -0
  356. package/dist/collab/index.cjs +17 -0
  357. package/dist/collab/index.cjs.map +1 -0
  358. package/dist/collab/index.js +17 -0
  359. package/dist/collab/index.js.map +1 -0
  360. package/dist/collab/mint.cjs +59 -0
  361. package/dist/collab/mint.cjs.map +1 -0
  362. package/dist/collab/mint.js +59 -0
  363. package/dist/collab/mint.js.map +1 -0
  364. package/dist/collab/react.cjs +58 -0
  365. package/dist/collab/react.cjs.map +1 -0
  366. package/dist/collab/react.js +58 -0
  367. package/dist/collab/react.js.map +1 -0
  368. package/dist/collab/shape.cjs +45 -0
  369. package/dist/collab/shape.cjs.map +1 -0
  370. package/dist/collab/shape.js +45 -0
  371. package/dist/collab/shape.js.map +1 -0
  372. package/dist/composer/AttachmentContext.cjs +40 -0
  373. package/dist/composer/AttachmentContext.cjs.map +1 -0
  374. package/dist/composer/AttachmentContext.js +40 -0
  375. package/dist/composer/AttachmentContext.js.map +1 -0
  376. package/dist/composer/ComposerAttachmentPreview.cjs +39 -0
  377. package/dist/composer/ComposerAttachmentPreview.cjs.map +1 -0
  378. package/dist/composer/ComposerAttachmentPreview.js +39 -0
  379. package/dist/composer/ComposerAttachmentPreview.js.map +1 -0
  380. package/dist/composer/ComposerDropZone.cjs +61 -0
  381. package/dist/composer/ComposerDropZone.cjs.map +1 -0
  382. package/dist/composer/ComposerDropZone.d.ts +1 -1
  383. package/dist/composer/ComposerDropZone.js +61 -0
  384. package/dist/composer/ComposerDropZone.js.map +1 -0
  385. package/dist/composer/ComposerQuotePreview.cjs +42 -0
  386. package/dist/composer/ComposerQuotePreview.cjs.map +1 -0
  387. package/dist/composer/ComposerQuotePreview.js +42 -0
  388. package/dist/composer/ComposerQuotePreview.js.map +1 -0
  389. package/dist/composer/FileUploadButton.cjs +65 -0
  390. package/dist/composer/FileUploadButton.cjs.map +1 -0
  391. package/dist/composer/FileUploadButton.d.ts +1 -1
  392. package/dist/composer/FileUploadButton.js +65 -0
  393. package/dist/composer/FileUploadButton.js.map +1 -0
  394. package/dist/composer/QuoteContext.cjs +68 -0
  395. package/dist/composer/QuoteContext.cjs.map +1 -0
  396. package/dist/composer/QuoteContext.js +68 -0
  397. package/dist/composer/QuoteContext.js.map +1 -0
  398. package/dist/composer/build-composed-message.cjs +25 -0
  399. package/dist/composer/build-composed-message.cjs.map +1 -0
  400. package/dist/composer/build-composed-message.js +25 -0
  401. package/dist/composer/build-composed-message.js.map +1 -0
  402. package/dist/composer/clipboard.cjs +62 -0
  403. package/dist/composer/clipboard.cjs.map +1 -0
  404. package/dist/composer/clipboard.d.ts +27 -3
  405. package/dist/composer/clipboard.js +62 -0
  406. package/dist/composer/clipboard.js.map +1 -0
  407. package/dist/composer/useAppendToComposer.cjs +21 -0
  408. package/dist/composer/useAppendToComposer.cjs.map +1 -0
  409. package/dist/composer/useAppendToComposer.js +21 -0
  410. package/dist/composer/useAppendToComposer.js.map +1 -0
  411. package/dist/composer/useAttachFiles.cjs +40 -0
  412. package/dist/composer/useAttachFiles.cjs.map +1 -0
  413. package/dist/composer/useAttachFiles.d.ts +24 -0
  414. package/dist/composer/useAttachFiles.js +40 -0
  415. package/dist/composer/useAttachFiles.js.map +1 -0
  416. package/dist/composer/useComposerAttachment.cjs +25 -0
  417. package/dist/composer/useComposerAttachment.cjs.map +1 -0
  418. package/dist/composer/useComposerAttachment.js +25 -0
  419. package/dist/composer/useComposerAttachment.js.map +1 -0
  420. package/dist/composer/useFileUpload.cjs +123 -0
  421. package/dist/composer/useFileUpload.cjs.map +1 -0
  422. package/dist/composer/useFileUpload.js +123 -0
  423. package/dist/composer/useFileUpload.js.map +1 -0
  424. package/dist/composer/useSendMessage.cjs +22 -0
  425. package/dist/composer/useSendMessage.cjs.map +1 -0
  426. package/dist/composer/useSendMessage.js +22 -0
  427. package/dist/composer/useSendMessage.js.map +1 -0
  428. package/dist/diagnostics/athena-diagnostics.cjs +329 -0
  429. package/dist/diagnostics/athena-diagnostics.cjs.map +1 -0
  430. package/dist/diagnostics/athena-diagnostics.d.ts +1 -1
  431. package/dist/diagnostics/athena-diagnostics.js +329 -0
  432. package/dist/diagnostics/athena-diagnostics.js.map +1 -0
  433. package/dist/diagnostics/errors.cjs +89 -0
  434. package/dist/diagnostics/errors.cjs.map +1 -0
  435. package/dist/diagnostics/errors.d.ts +4 -0
  436. package/dist/diagnostics/errors.js +89 -0
  437. package/dist/diagnostics/errors.js.map +1 -0
  438. package/dist/diagnostics/useAthenaDiagnostics.cjs +16 -0
  439. package/dist/diagnostics/useAthenaDiagnostics.cjs.map +1 -0
  440. package/dist/diagnostics/useAthenaDiagnostics.js +16 -0
  441. package/dist/diagnostics/useAthenaDiagnostics.js.map +1 -0
  442. package/dist/index.cjs +283 -30852
  443. package/dist/index.cjs.map +1 -1
  444. package/dist/index.d.ts +27 -10
  445. package/dist/index.js +155 -30711
  446. package/dist/index.js.map +1 -1
  447. package/dist/lib/athena-urls.cjs +194 -0
  448. package/dist/lib/athena-urls.cjs.map +1 -0
  449. package/dist/lib/athena-urls.d.ts +20 -5
  450. package/dist/lib/athena-urls.js +194 -0
  451. package/dist/lib/athena-urls.js.map +1 -0
  452. package/dist/lib/posthog/before-send.cjs +58 -0
  453. package/dist/lib/posthog/before-send.cjs.map +1 -0
  454. package/dist/lib/posthog/before-send.js +58 -0
  455. package/dist/lib/posthog/before-send.js.map +1 -0
  456. package/dist/lib/posthog/capture-gate.cjs +322 -0
  457. package/dist/lib/posthog/capture-gate.cjs.map +1 -0
  458. package/dist/lib/posthog/capture-gate.js +322 -0
  459. package/dist/lib/posthog/capture-gate.js.map +1 -0
  460. package/dist/lib/posthog/wrap-posthog-client.cjs +163 -0
  461. package/dist/lib/posthog/wrap-posthog-client.cjs.map +1 -0
  462. package/dist/lib/posthog/wrap-posthog-client.js +163 -0
  463. package/dist/lib/posthog/wrap-posthog-client.js.map +1 -0
  464. package/dist/lib/utils.cjs +12 -0
  465. package/dist/lib/utils.cjs.map +1 -0
  466. package/dist/lib/utils.js +9 -0
  467. package/dist/lib/utils.js.map +1 -0
  468. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs +77 -0
  469. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs.map +1 -0
  470. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js +77 -0
  471. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js.map +1 -0
  472. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs +181 -0
  473. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs.map +1 -0
  474. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js +181 -0
  475. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js.map +1 -0
  476. package/dist/packages/agent-runtime/src/asset-attachment.cjs +19 -0
  477. package/dist/packages/agent-runtime/src/asset-attachment.cjs.map +1 -0
  478. package/dist/packages/agent-runtime/src/asset-attachment.js +19 -0
  479. package/dist/packages/agent-runtime/src/asset-attachment.js.map +1 -0
  480. package/dist/packages/agent-runtime/src/auth-denial.cjs +28 -0
  481. package/dist/packages/agent-runtime/src/auth-denial.cjs.map +1 -0
  482. package/dist/packages/agent-runtime/src/auth-denial.js +28 -0
  483. package/dist/packages/agent-runtime/src/auth-denial.js.map +1 -0
  484. package/dist/packages/agent-runtime/src/client-tool-bridge.cjs +270 -0
  485. package/dist/packages/agent-runtime/src/client-tool-bridge.cjs.map +1 -0
  486. package/dist/packages/agent-runtime/src/client-tool-bridge.js +270 -0
  487. package/dist/packages/agent-runtime/src/client-tool-bridge.js.map +1 -0
  488. package/dist/packages/agent-runtime/src/client-tools.cjs +137 -0
  489. package/dist/packages/agent-runtime/src/client-tools.cjs.map +1 -0
  490. package/dist/packages/agent-runtime/src/client-tools.js +137 -0
  491. package/dist/packages/agent-runtime/src/client-tools.js.map +1 -0
  492. package/dist/packages/agent-runtime/src/conversation-index.cjs +80 -0
  493. package/dist/packages/agent-runtime/src/conversation-index.cjs.map +1 -0
  494. package/dist/packages/agent-runtime/src/conversation-index.js +80 -0
  495. package/dist/packages/agent-runtime/src/conversation-index.js.map +1 -0
  496. package/dist/packages/agent-runtime/src/conversation-list.cjs +86 -0
  497. package/dist/packages/agent-runtime/src/conversation-list.cjs.map +1 -0
  498. package/dist/packages/agent-runtime/src/conversation-list.js +86 -0
  499. package/dist/packages/agent-runtime/src/conversation-list.js.map +1 -0
  500. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs +55 -0
  501. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -0
  502. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js +55 -0
  503. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -0
  504. package/dist/packages/agent-runtime/src/edit-command.cjs +89 -0
  505. package/dist/packages/agent-runtime/src/edit-command.cjs.map +1 -0
  506. package/dist/packages/agent-runtime/src/edit-command.js +89 -0
  507. package/dist/packages/agent-runtime/src/edit-command.js.map +1 -0
  508. package/dist/packages/agent-runtime/src/errors.cjs +95 -0
  509. package/dist/packages/agent-runtime/src/errors.cjs.map +1 -0
  510. package/dist/packages/agent-runtime/src/errors.js +95 -0
  511. package/dist/packages/agent-runtime/src/errors.js.map +1 -0
  512. package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs +236 -0
  513. package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -0
  514. package/dist/packages/agent-runtime/src/generated/runconfig-contract.js +236 -0
  515. package/dist/packages/agent-runtime/src/generated/runconfig-contract.js.map +1 -0
  516. package/dist/packages/agent-runtime/src/interrupts.cjs +117 -0
  517. package/dist/packages/agent-runtime/src/interrupts.cjs.map +1 -0
  518. package/dist/packages/agent-runtime/src/interrupts.js +117 -0
  519. package/dist/packages/agent-runtime/src/interrupts.js.map +1 -0
  520. package/dist/packages/agent-runtime/src/message-author.cjs +31 -0
  521. package/dist/packages/agent-runtime/src/message-author.cjs.map +1 -0
  522. package/dist/packages/agent-runtime/src/message-author.js +31 -0
  523. package/dist/packages/agent-runtime/src/message-author.js.map +1 -0
  524. package/dist/packages/agent-runtime/src/message-window.cjs +85 -0
  525. package/dist/packages/agent-runtime/src/message-window.cjs.map +1 -0
  526. package/dist/packages/agent-runtime/src/message-window.js +85 -0
  527. package/dist/packages/agent-runtime/src/message-window.js.map +1 -0
  528. package/dist/packages/agent-runtime/src/messages.cjs +433 -0
  529. package/dist/packages/agent-runtime/src/messages.cjs.map +1 -0
  530. package/dist/packages/agent-runtime/src/messages.js +433 -0
  531. package/dist/packages/agent-runtime/src/messages.js.map +1 -0
  532. package/dist/packages/agent-runtime/src/model-context.cjs +13 -0
  533. package/dist/packages/agent-runtime/src/model-context.cjs.map +1 -0
  534. package/dist/packages/agent-runtime/src/model-context.js +13 -0
  535. package/dist/packages/agent-runtime/src/model-context.js.map +1 -0
  536. package/dist/packages/agent-runtime/src/optimistic-content.cjs +17 -0
  537. package/dist/packages/agent-runtime/src/optimistic-content.cjs.map +1 -0
  538. package/dist/packages/agent-runtime/src/optimistic-content.js +17 -0
  539. package/dist/packages/agent-runtime/src/optimistic-content.js.map +1 -0
  540. package/dist/packages/agent-runtime/src/protocol.cjs +33 -0
  541. package/dist/packages/agent-runtime/src/protocol.cjs.map +1 -0
  542. package/dist/packages/agent-runtime/src/protocol.js +33 -0
  543. package/dist/packages/agent-runtime/src/protocol.js.map +1 -0
  544. package/dist/packages/agent-runtime/src/queue.cjs +67 -0
  545. package/dist/packages/agent-runtime/src/queue.cjs.map +1 -0
  546. package/dist/packages/agent-runtime/src/queue.js +67 -0
  547. package/dist/packages/agent-runtime/src/queue.js.map +1 -0
  548. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs +47 -0
  549. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -0
  550. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js +47 -0
  551. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -0
  552. package/dist/packages/agent-runtime/src/runtime-messages.cjs +187 -0
  553. package/dist/packages/agent-runtime/src/runtime-messages.cjs.map +1 -0
  554. package/dist/packages/agent-runtime/src/runtime-messages.js +187 -0
  555. package/dist/packages/agent-runtime/src/runtime-messages.js.map +1 -0
  556. package/dist/packages/agent-runtime/src/send-recovery.cjs +128 -0
  557. package/dist/packages/agent-runtime/src/send-recovery.cjs.map +1 -0
  558. package/dist/packages/agent-runtime/src/send-recovery.js +128 -0
  559. package/dist/packages/agent-runtime/src/send-recovery.js.map +1 -0
  560. package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs +249 -0
  561. package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs.map +1 -0
  562. package/dist/packages/agent-runtime/src/statewire-attach-observer.js +249 -0
  563. package/dist/packages/agent-runtime/src/statewire-attach-observer.js.map +1 -0
  564. package/dist/packages/agent-runtime/src/statewire-state.cjs +16 -0
  565. package/dist/packages/agent-runtime/src/statewire-state.cjs.map +1 -0
  566. package/dist/packages/agent-runtime/src/statewire-state.js +16 -0
  567. package/dist/packages/agent-runtime/src/statewire-state.js.map +1 -0
  568. package/dist/packages/agent-runtime/src/statewire-suspended.cjs +41 -0
  569. package/dist/packages/agent-runtime/src/statewire-suspended.cjs.map +1 -0
  570. package/dist/packages/agent-runtime/src/statewire-suspended.js +41 -0
  571. package/dist/packages/agent-runtime/src/statewire-suspended.js.map +1 -0
  572. package/dist/packages/agent-runtime/src/statewire-transport.cjs +6 -0
  573. package/dist/packages/agent-runtime/src/statewire-transport.cjs.map +1 -0
  574. package/dist/packages/agent-runtime/src/statewire-transport.js +6 -0
  575. package/dist/packages/agent-runtime/src/statewire-transport.js.map +1 -0
  576. package/dist/packages/agent-runtime/src/streaming-markdown.cjs +214 -0
  577. package/dist/packages/agent-runtime/src/streaming-markdown.cjs.map +1 -0
  578. package/dist/packages/agent-runtime/src/streaming-markdown.js +214 -0
  579. package/dist/packages/agent-runtime/src/streaming-markdown.js.map +1 -0
  580. package/dist/packages/agent-runtime/src/thread-extras.cjs +38 -0
  581. package/dist/packages/agent-runtime/src/thread-extras.cjs.map +1 -0
  582. package/dist/packages/agent-runtime/src/thread-extras.js +38 -0
  583. package/dist/packages/agent-runtime/src/thread-extras.js.map +1 -0
  584. package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs +90 -0
  585. package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs.map +1 -0
  586. package/dist/packages/agent-runtime/src/thread-snapshot-cache.js +90 -0
  587. package/dist/packages/agent-runtime/src/thread-snapshot-cache.js.map +1 -0
  588. package/dist/packages/agent-runtime/src/thread-status.cjs +49 -0
  589. package/dist/packages/agent-runtime/src/thread-status.cjs.map +1 -0
  590. package/dist/packages/agent-runtime/src/thread-status.js +49 -0
  591. package/dist/packages/agent-runtime/src/thread-status.js.map +1 -0
  592. package/dist/packages/agent-runtime/src/tool-metadata.cjs +1802 -0
  593. package/dist/packages/agent-runtime/src/tool-metadata.cjs.map +1 -0
  594. package/dist/packages/agent-runtime/src/tool-metadata.js +1802 -0
  595. package/dist/packages/agent-runtime/src/tool-metadata.js.map +1 -0
  596. package/dist/packages/agent-runtime/src/tool-outputs.cjs +46 -0
  597. package/dist/packages/agent-runtime/src/tool-outputs.cjs.map +1 -0
  598. package/dist/packages/agent-runtime/src/tool-outputs.js +46 -0
  599. package/dist/packages/agent-runtime/src/tool-outputs.js.map +1 -0
  600. package/dist/packages/agent-runtime/src/tool-result.cjs +151 -0
  601. package/dist/packages/agent-runtime/src/tool-result.cjs.map +1 -0
  602. package/dist/packages/agent-runtime/src/tool-result.js +151 -0
  603. package/dist/packages/agent-runtime/src/tool-result.js.map +1 -0
  604. package/dist/packages/agent-runtime/src/use-conversation-list.cjs +139 -0
  605. package/dist/packages/agent-runtime/src/use-conversation-list.cjs.map +1 -0
  606. package/dist/packages/agent-runtime/src/use-conversation-list.js +139 -0
  607. package/dist/packages/agent-runtime/src/use-conversation-list.js.map +1 -0
  608. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs +28 -0
  609. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -0
  610. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js +28 -0
  611. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -0
  612. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs +138 -0
  613. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -0
  614. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js +138 -0
  615. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js.map +1 -0
  616. package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs +387 -0
  617. package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -0
  618. package/dist/packages/agent-runtime/src/use-deep-agent-thread.js +387 -0
  619. package/dist/packages/agent-runtime/src/use-deep-agent-thread.js.map +1 -0
  620. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs +133 -0
  621. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -0
  622. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js +133 -0
  623. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js.map +1 -0
  624. package/dist/packages/agent-runtime/src/voice-presentation.cjs +37 -0
  625. package/dist/packages/agent-runtime/src/voice-presentation.cjs.map +1 -0
  626. package/dist/packages/agent-runtime/src/voice-presentation.js +37 -0
  627. package/dist/packages/agent-runtime/src/voice-presentation.js.map +1 -0
  628. package/dist/packages/react/package.json.cjs +9 -0
  629. package/dist/packages/react/package.json.cjs.map +1 -0
  630. package/dist/packages/react/package.json.js +9 -0
  631. package/dist/packages/react/package.json.js.map +1 -0
  632. package/dist/{AthenaContext-B1QMhIP-.cjs → provider/AthenaContext.cjs} +5 -4
  633. package/dist/provider/AthenaContext.cjs.map +1 -0
  634. package/dist/{AthenaContext-MOslgOmE.js → provider/AthenaContext.js} +3 -3
  635. package/dist/provider/AthenaContext.js.map +1 -0
  636. package/dist/provider/AthenaProvider.cjs +403 -0
  637. package/dist/provider/AthenaProvider.cjs.map +1 -0
  638. package/dist/provider/AthenaProvider.d.ts +4 -2
  639. package/dist/provider/AthenaProvider.js +403 -0
  640. package/dist/provider/AthenaProvider.js.map +1 -0
  641. package/dist/provider/PostHogProvider.cjs +81 -0
  642. package/dist/provider/PostHogProvider.cjs.map +1 -0
  643. package/dist/provider/PostHogProvider.js +59 -0
  644. package/dist/provider/PostHogProvider.js.map +1 -0
  645. package/dist/provider/config.d.ts +17 -9
  646. package/dist/provider/statewire-lifecycle-context.cjs +10 -0
  647. package/dist/provider/statewire-lifecycle-context.cjs.map +1 -0
  648. package/dist/provider/statewire-lifecycle-context.js +10 -0
  649. package/dist/provider/statewire-lifecycle-context.js.map +1 -0
  650. package/dist/provider/statewire-window-context.cjs +10 -0
  651. package/dist/provider/statewire-window-context.cjs.map +1 -0
  652. package/dist/provider/statewire-window-context.d.ts +12 -0
  653. package/dist/provider/statewire-window-context.js +10 -0
  654. package/dist/provider/statewire-window-context.js.map +1 -0
  655. package/dist/runtime/auth.cjs +309 -0
  656. package/dist/runtime/auth.cjs.map +1 -0
  657. package/dist/runtime/auth.d.ts +19 -18
  658. package/dist/runtime/auth.js +309 -0
  659. package/dist/runtime/auth.js.map +1 -0
  660. package/dist/runtime/statewire-auth-headers.cjs +18 -0
  661. package/dist/runtime/statewire-auth-headers.cjs.map +1 -0
  662. package/dist/runtime/statewire-auth-headers.d.ts +38 -0
  663. package/dist/runtime/statewire-auth-headers.js +18 -0
  664. package/dist/runtime/statewire-auth-headers.js.map +1 -0
  665. package/dist/runtime/statewire-lifecycle.cjs +67 -0
  666. package/dist/runtime/statewire-lifecycle.cjs.map +1 -0
  667. package/dist/runtime/statewire-lifecycle.d.ts +25 -0
  668. package/dist/runtime/statewire-lifecycle.js +67 -0
  669. package/dist/runtime/statewire-lifecycle.js.map +1 -0
  670. package/dist/runtime/statewire-run-config.cjs +68 -0
  671. package/dist/runtime/statewire-run-config.cjs.map +1 -0
  672. package/dist/runtime/statewire-run-config.js +68 -0
  673. package/dist/runtime/statewire-run-config.js.map +1 -0
  674. package/dist/runtime/statewire-session-key.cjs +11 -0
  675. package/dist/runtime/statewire-session-key.cjs.map +1 -0
  676. package/dist/runtime/statewire-session-key.d.ts +13 -0
  677. package/dist/runtime/statewire-session-key.js +11 -0
  678. package/dist/runtime/statewire-session-key.js.map +1 -0
  679. package/dist/runtime/useAthenaStatewireRuntime.cjs +179 -0
  680. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -0
  681. package/dist/runtime/useAthenaStatewireRuntime.d.ts +36 -5
  682. package/dist/runtime/useAthenaStatewireRuntime.js +180 -0
  683. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -0
  684. package/dist/styles.css +1 -1
  685. package/dist/theme/index.cjs +182 -0
  686. package/dist/theme/index.cjs.map +1 -0
  687. package/dist/theme/index.js +182 -0
  688. package/dist/theme/index.js.map +1 -0
  689. package/dist/threads/ThreadList.cjs +55 -0
  690. package/dist/threads/ThreadList.cjs.map +1 -0
  691. package/dist/threads/ThreadList.js +55 -0
  692. package/dist/threads/ThreadList.js.map +1 -0
  693. package/dist/threads/api.cjs +208 -0
  694. package/dist/threads/api.cjs.map +1 -0
  695. package/dist/threads/api.js +208 -0
  696. package/dist/threads/api.js.map +1 -0
  697. package/dist/threads/conversation-list-fetcher.cjs +70 -0
  698. package/dist/threads/conversation-list-fetcher.cjs.map +1 -0
  699. package/dist/threads/conversation-list-fetcher.js +70 -0
  700. package/dist/threads/conversation-list-fetcher.js.map +1 -0
  701. package/dist/threads/mint-thread-id.cjs +7 -0
  702. package/dist/threads/mint-thread-id.cjs.map +1 -0
  703. package/dist/threads/mint-thread-id.d.ts +8 -0
  704. package/dist/threads/mint-thread-id.js +7 -0
  705. package/dist/threads/mint-thread-id.js.map +1 -0
  706. package/dist/threads/statewire-thread-list.cjs +231 -0
  707. package/dist/threads/statewire-thread-list.cjs.map +1 -0
  708. package/dist/threads/statewire-thread-list.d.ts +20 -4
  709. package/dist/threads/statewire-thread-list.js +231 -0
  710. package/dist/threads/statewire-thread-list.js.map +1 -0
  711. package/dist/threads/thread-id-context.cjs +22 -0
  712. package/dist/threads/thread-id-context.cjs.map +1 -0
  713. package/dist/threads/thread-id-context.d.ts +9 -0
  714. package/dist/threads/thread-id-context.js +22 -0
  715. package/dist/threads/thread-id-context.js.map +1 -0
  716. package/dist/threads/title.cjs +95 -0
  717. package/dist/threads/title.cjs.map +1 -0
  718. package/dist/threads/title.js +95 -0
  719. package/dist/threads/title.js.map +1 -0
  720. package/dist/threads/use-rest-conversation-history.cjs +79 -0
  721. package/dist/threads/use-rest-conversation-history.cjs.map +1 -0
  722. package/dist/threads/use-rest-conversation-history.js +79 -0
  723. package/dist/threads/use-rest-conversation-history.js.map +1 -0
  724. package/dist/threads/use-statewire-conversation-history.cjs +243 -0
  725. package/dist/threads/use-statewire-conversation-history.cjs.map +1 -0
  726. package/dist/threads/use-statewire-conversation-history.js +243 -0
  727. package/dist/threads/use-statewire-conversation-history.js.map +1 -0
  728. package/dist/threads/useAthenaThreadManager.cjs +24 -0
  729. package/dist/threads/useAthenaThreadManager.cjs.map +1 -0
  730. package/dist/threads/useAthenaThreadManager.js +24 -0
  731. package/dist/threads/useAthenaThreadManager.js.map +1 -0
  732. package/dist/toolkits/index.cjs +279 -0
  733. package/dist/toolkits/index.cjs.map +1 -0
  734. package/dist/toolkits/index.js +279 -0
  735. package/dist/toolkits/index.js.map +1 -0
  736. package/dist/tools/NestedPtcMessages.cjs +46 -0
  737. package/dist/tools/NestedPtcMessages.cjs.map +1 -0
  738. package/dist/tools/NestedPtcMessages.js +46 -0
  739. package/dist/tools/NestedPtcMessages.js.map +1 -0
  740. package/dist/tools/append-document-tool-ui.cjs +145 -0
  741. package/dist/tools/append-document-tool-ui.cjs.map +1 -0
  742. package/dist/tools/append-document-tool-ui.js +145 -0
  743. package/dist/tools/append-document-tool-ui.js.map +1 -0
  744. package/dist/tools/asset-utils.cjs +16 -0
  745. package/dist/tools/asset-utils.cjs.map +1 -0
  746. package/dist/tools/asset-utils.js +16 -0
  747. package/dist/tools/asset-utils.js.map +1 -0
  748. package/dist/tools/auto-open-tools.cjs +121 -0
  749. package/dist/tools/auto-open-tools.cjs.map +1 -0
  750. package/dist/tools/auto-open-tools.js +121 -0
  751. package/dist/tools/auto-open-tools.js.map +1 -0
  752. package/dist/tools/file-tool-uis.cjs +108 -0
  753. package/dist/tools/file-tool-uis.cjs.map +1 -0
  754. package/dist/tools/file-tool-uis.js +108 -0
  755. package/dist/tools/file-tool-uis.js.map +1 -0
  756. package/dist/tools/index.cjs +56 -0
  757. package/dist/tools/index.cjs.map +1 -0
  758. package/dist/tools/index.d.ts +15 -0
  759. package/dist/tools/index.js +56 -0
  760. package/dist/tools/index.js.map +1 -0
  761. package/dist/tools/misc-tool-uis.cjs +54 -0
  762. package/dist/tools/misc-tool-uis.cjs.map +1 -0
  763. package/dist/tools/misc-tool-uis.d.ts +2 -0
  764. package/dist/tools/misc-tool-uis.js +54 -0
  765. package/dist/tools/misc-tool-uis.js.map +1 -0
  766. package/dist/tools/primitives.cjs +166 -0
  767. package/dist/tools/primitives.cjs.map +1 -0
  768. package/dist/tools/primitives.d.ts +41 -0
  769. package/dist/tools/primitives.js +166 -0
  770. package/dist/tools/primitives.js.map +1 -0
  771. package/dist/tools/read-asset-tool-ui.cjs +284 -0
  772. package/dist/tools/read-asset-tool-ui.cjs.map +1 -0
  773. package/dist/tools/read-asset-tool-ui.js +284 -0
  774. package/dist/tools/read-asset-tool-ui.js.map +1 -0
  775. package/dist/tools/todo-plan-store.cjs +88 -0
  776. package/dist/tools/todo-plan-store.cjs.map +1 -0
  777. package/dist/tools/todo-plan-store.js +88 -0
  778. package/dist/tools/todo-plan-store.js.map +1 -0
  779. package/dist/tools/tool-fallback.cjs +667 -0
  780. package/dist/tools/tool-fallback.cjs.map +1 -0
  781. package/dist/tools/tool-fallback.d.ts +78 -6
  782. package/dist/tools/tool-fallback.js +667 -0
  783. package/dist/tools/tool-fallback.js.map +1 -0
  784. package/dist/tools/tool-icons.cjs +61 -0
  785. package/dist/tools/tool-icons.cjs.map +1 -0
  786. package/dist/tools/tool-icons.d.ts +10 -0
  787. package/dist/tools/tool-icons.js +61 -0
  788. package/dist/tools/tool-icons.js.map +1 -0
  789. package/dist/tools/tool-uis.cjs +3049 -0
  790. package/dist/tools/tool-uis.cjs.map +1 -0
  791. package/dist/tools/tool-uis.d.ts +1 -23
  792. package/dist/tools/tool-uis.js +3049 -0
  793. package/dist/tools/tool-uis.js.map +1 -0
  794. package/dist/tools/voice-update-tool-ui.cjs +89 -0
  795. package/dist/tools/voice-update-tool-ui.cjs.map +1 -0
  796. package/dist/tools/voice-update-tool-ui.d.ts +27 -0
  797. package/dist/tools/voice-update-tool-ui.js +89 -0
  798. package/dist/tools/voice-update-tool-ui.js.map +1 -0
  799. package/dist/tools/write-todos-tool-ui.cjs +270 -0
  800. package/dist/tools/write-todos-tool-ui.cjs.map +1 -0
  801. package/dist/tools/write-todos-tool-ui.js +270 -0
  802. package/dist/tools/write-todos-tool-ui.js.map +1 -0
  803. package/dist/ui/button.cjs +57 -0
  804. package/dist/ui/button.cjs.map +1 -0
  805. package/dist/ui/button.js +57 -0
  806. package/dist/ui/button.js.map +1 -0
  807. package/dist/ui/collapsible.cjs +17 -0
  808. package/dist/ui/collapsible.cjs.map +1 -0
  809. package/dist/ui/collapsible.js +17 -0
  810. package/dist/ui/collapsible.js.map +1 -0
  811. package/dist/ui/tooltip.cjs +48 -0
  812. package/dist/ui/tooltip.cjs.map +1 -0
  813. package/dist/ui/tooltip.js +48 -0
  814. package/dist/ui/tooltip.js.map +1 -0
  815. package/dist/version.cjs +6 -0
  816. package/dist/version.cjs.map +1 -0
  817. package/dist/version.js +6 -0
  818. package/dist/version.js.map +1 -0
  819. package/package.json +35 -19
  820. package/dist/AthenaAuthContext-B3AwLA5Z.cjs.map +0 -1
  821. package/dist/AthenaAuthContext-DQsdayH2.js.map +0 -1
  822. package/dist/AthenaContext-B1QMhIP-.cjs.map +0 -1
  823. package/dist/AthenaContext-MOslgOmE.js.map +0 -1
  824. package/dist/auth.cjs.map +0 -1
  825. package/dist/auth.js.map +0 -1
  826. package/dist/chat/ComposerEditorContext.d.ts +0 -36
  827. package/dist/chat/super-grouping/tool-status-labels.d.ts +0 -1
  828. package/dist/chat/tiptap-composer.d.ts +0 -7
  829. package/dist/chat-ui.cjs +0 -2667
  830. package/dist/chat-ui.cjs.map +0 -1
  831. package/dist/chat-ui.js +0 -2668
  832. package/dist/chat-ui.js.map +0 -1
  833. package/dist/collab.cjs.map +0 -1
  834. package/dist/collab.js.map +0 -1
  835. package/dist/mentions/composer-keybinds.d.ts +0 -5
  836. package/dist/mentions/mention-extension.d.ts +0 -6
  837. package/dist/mentions/mention-icons.d.ts +0 -4
  838. package/dist/mentions/mention-node-view.d.ts +0 -2
  839. package/dist/mentions/mention-suggestion-list.d.ts +0 -14
  840. package/dist/mentions/mention-suggestion-popup.d.ts +0 -15
  841. package/dist/mentions/mention-suggestions-extension.d.ts +0 -11
  842. package/dist/mentions/mention-types.d.ts +0 -21
  843. package/dist/mentions/mention-utils.d.ts +0 -23
  844. package/dist/mentions/use-mention-suggestions.d.ts +0 -29
  845. package/dist/use-rest-conversation-history-Bs5qn5G3.js +0 -37322
  846. package/dist/use-rest-conversation-history-Bs5qn5G3.js.map +0 -1
  847. package/dist/use-rest-conversation-history-Dm0rdQgT.cjs +0 -37358
  848. package/dist/use-rest-conversation-history-Dm0rdQgT.cjs.map +0 -1
@@ -0,0 +1,25 @@
1
+ import { buildAttachmentMarkdownWithAppUrl } from "./AttachmentContext.js";
2
+ function buildComposedMessage(opts) {
3
+ var _a;
4
+ const parts = [];
5
+ if (opts.attachments && opts.attachments.length > 0) {
6
+ const attachmentMd = buildAttachmentMarkdownWithAppUrl({
7
+ attachments: opts.attachments,
8
+ appUrl: opts.appUrl
9
+ });
10
+ if (attachmentMd) parts.push(attachmentMd);
11
+ }
12
+ if (opts.quote) {
13
+ const quotedLines = opts.quote.text.split("\n").map((l) => `> ${l}`).join("\n");
14
+ const sourceLabel = opts.quote.sourceTitle ? `From "${opts.quote.sourceTitle}"` : opts.quote.sourceRole === "assistant" ? "Quoting assistant" : "Quoting";
15
+ parts.push(`${sourceLabel}:
16
+ ${quotedLines}`);
17
+ }
18
+ const trimmed = (_a = opts.userText) == null ? void 0 : _a.trim();
19
+ if (trimmed) parts.push(trimmed);
20
+ return parts.join("\n\n");
21
+ }
22
+ export {
23
+ buildComposedMessage
24
+ };
25
+ //# sourceMappingURL=build-composed-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-composed-message.js","sources":["../../src/composer/build-composed-message.ts"],"sourcesContent":["import type { UploadedAsset } from './useFileUpload';\nimport type { QuoteData } from './QuoteContext';\nimport { buildAttachmentMarkdownWithAppUrl } from './AttachmentContext';\n\n/**\n * Assembles a composed message from attachments, a quote, and user text.\n * Used by both the TipTap Enter-key submit and the send-button click handler\n * to avoid duplicating the message-assembly logic.\n *\n * Returns an empty string if all inputs are empty.\n */\nexport function buildComposedMessage(opts: {\n attachments?: UploadedAsset[];\n quote?: QuoteData | null;\n userText?: string;\n appUrl?: string;\n}): string {\n const parts: string[] = [];\n\n if (opts.attachments && opts.attachments.length > 0) {\n const attachmentMd = buildAttachmentMarkdownWithAppUrl({\n attachments: opts.attachments,\n appUrl: opts.appUrl,\n });\n if (attachmentMd) parts.push(attachmentMd);\n }\n\n if (opts.quote) {\n const quotedLines = opts.quote.text.split('\\n').map((l) => `> ${l}`).join('\\n');\n const sourceLabel = opts.quote.sourceTitle\n ? `From \"${opts.quote.sourceTitle}\"`\n : opts.quote.sourceRole === 'assistant'\n ? 'Quoting assistant'\n : 'Quoting';\n parts.push(`${sourceLabel}:\\n${quotedLines}`);\n }\n\n const trimmed = opts.userText?.trim();\n if (trimmed) parts.push(trimmed);\n\n return parts.join('\\n\\n');\n}\n"],"names":[],"mappings":";AAWO,SAAS,qBAAqB,MAK1B;;AACT,QAAM,QAAkB,CAAA;AAExB,MAAI,KAAK,eAAe,KAAK,YAAY,SAAS,GAAG;AACnD,UAAM,eAAe,kCAAkC;AAAA,MACrD,aAAa,KAAK;AAAA,MAClB,QAAQ,KAAK;AAAA,IAAA,CACd;AACD,QAAI,aAAc,OAAM,KAAK,YAAY;AAAA,EAC3C;AAEA,MAAI,KAAK,OAAO;AACd,UAAM,cAAc,KAAK,MAAM,KAAK,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,EAAE,KAAK,IAAI;AAC9E,UAAM,cAAc,KAAK,MAAM,cAC3B,SAAS,KAAK,MAAM,WAAW,MAC/B,KAAK,MAAM,eAAe,cACxB,sBACA;AACN,UAAM,KAAK,GAAG,WAAW;AAAA,EAAM,WAAW,EAAE;AAAA,EAC9C;AAEA,QAAM,WAAU,UAAK,aAAL,mBAAe;AAC/B,MAAI,QAAS,OAAM,KAAK,OAAO;AAE/B,SAAO,MAAM,KAAK,MAAM;AAC1B;"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const IMAGE_EXTENSION_BY_MIME_TYPE = {
4
+ "image/avif": "avif",
5
+ "image/bmp": "bmp",
6
+ "image/gif": "gif",
7
+ "image/heic": "heic",
8
+ "image/jpeg": "jpg",
9
+ "image/png": "png",
10
+ "image/svg+xml": "svg",
11
+ "image/tiff": "tiff",
12
+ "image/webp": "webp"
13
+ };
14
+ const IMAGE_FILE_NAME = /^[^\s\\/]+\.(?:png|jpe?g|gif|webp|svg|bmp|tiff?|heic|avif)$/i;
15
+ function clipboardHasMeaningfulText({
16
+ clipboardData,
17
+ pastedFileNames = []
18
+ }) {
19
+ const types = Array.from(clipboardData.types ?? []);
20
+ if (typeof clipboardData.getData !== "function") return false;
21
+ if (types.includes("text/plain")) {
22
+ const plainText = clipboardData.getData("text/plain").trim();
23
+ const isFileName = pastedFileNames.includes(plainText) || IMAGE_FILE_NAME.test(plainText);
24
+ if (plainText.length > 0 && !isFileName) {
25
+ return true;
26
+ }
27
+ }
28
+ if (types.includes("text/html")) {
29
+ const html = clipboardData.getData("text/html");
30
+ const textContent = html.replace(/<[^>]*>/g, "").trim();
31
+ if (textContent.length > 0) {
32
+ return true;
33
+ }
34
+ }
35
+ return false;
36
+ }
37
+ function extractPastedImages({
38
+ clipboardData
39
+ }) {
40
+ const stamp = Date.now();
41
+ const images = [];
42
+ for (const item of Array.from(clipboardData.items ?? [])) {
43
+ if (!item.type.startsWith("image/")) continue;
44
+ const blob = item.getAsFile();
45
+ if (!blob) continue;
46
+ const originalName = blob.name || "";
47
+ const ordinal = images.length === 0 ? "" : `-${images.length + 1}`;
48
+ const extension = IMAGE_EXTENSION_BY_MIME_TYPE[item.type] ?? item.type.slice("image/".length).replace(/[^a-z0-9]/gi, "");
49
+ images.push({
50
+ file: new File(
51
+ [blob, new Blob([])],
52
+ `pasted-image-${stamp}${ordinal}.${extension || "png"}`,
53
+ { type: item.type }
54
+ ),
55
+ originalName
56
+ });
57
+ }
58
+ return images;
59
+ }
60
+ exports.clipboardHasMeaningfulText = clipboardHasMeaningfulText;
61
+ exports.extractPastedImages = extractPastedImages;
62
+ //# sourceMappingURL=clipboard.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard.cjs","sources":["../../src/composer/clipboard.ts"],"sourcesContent":["const IMAGE_EXTENSION_BY_MIME_TYPE: Record<string, string> = {\n 'image/avif': 'avif',\n 'image/bmp': 'bmp',\n 'image/gif': 'gif',\n 'image/heic': 'heic',\n 'image/jpeg': 'jpg',\n 'image/png': 'png',\n 'image/svg+xml': 'svg',\n 'image/tiff': 'tiff',\n 'image/webp': 'webp',\n};\n\n/** A lone image file name — what Finder and Explorer put in `text/plain` beside a copied image file. */\nconst IMAGE_FILE_NAME = /^[^\\s\\\\/]+\\.(?:png|jpe?g|gif|webp|svg|bmp|tiff?|heic|avif)$/i;\n\n/**\n * Whether a clipboard carries text the user meant to paste: non-blank\n * `text/plain`, or `text/html` with text content once tags are stripped. An\n * Excel, Sheets or Word copy puts the cells' text beside a bitmap of them —\n * the text is the payload and the image is incidental; a copied web image\n * carries only an `<img>` tag, which has no text content; a copied image\n * *file* carries its own name in `text/plain` (Finder, Explorer), which is\n * not content either — pass the pasted files' names so it is recognized.\n * Tolerates the partial `DataTransfer` shapes test environments hand out.\n */\nexport function clipboardHasMeaningfulText({\n clipboardData,\n pastedFileNames = [],\n}: {\n clipboardData: DataTransfer;\n pastedFileNames?: readonly string[];\n}): boolean {\n const types = Array.from(clipboardData.types ?? []);\n if (typeof clipboardData.getData !== 'function') return false;\n\n if (types.includes('text/plain')) {\n const plainText = clipboardData.getData('text/plain').trim();\n const isFileName =\n pastedFileNames.includes(plainText) || IMAGE_FILE_NAME.test(plainText);\n if (plainText.length > 0 && !isFileName) {\n return true;\n }\n }\n\n if (types.includes('text/html')) {\n const html = clipboardData.getData('text/html');\n const textContent = html.replace(/<[^>]*>/g, '').trim();\n if (textContent.length > 0) {\n return true;\n }\n }\n\n return false;\n}\n\nexport interface PastedImage {\n /** The file as the composer attaches it: renamed so the asset gets a useful, unique title. */\n file: File;\n /** The name the clipboard carried — a copied file's own name, or the browser's bitmap default. */\n originalName: string;\n}\n\n/**\n * The image files of a paste, from the clipboard's items. Each is renamed\n * `pasted-image-<stamp>.<ext>` (the second and later of one paste get a\n * `-2`, `-3`, … suffix) with the extension taken from the MIME type, so a\n * pasted bitmap becomes an asset titled by the paste rather than the\n * browser's `image.png` default.\n */\nexport function extractPastedImages({\n clipboardData,\n}: {\n clipboardData: DataTransfer;\n}): PastedImage[] {\n const stamp = Date.now();\n const images: PastedImage[] = [];\n for (const item of Array.from(clipboardData.items ?? [])) {\n if (!item.type.startsWith('image/')) continue;\n const blob = item.getAsFile();\n if (!blob) continue;\n const originalName = blob.name || '';\n const ordinal = images.length === 0 ? '' : `-${images.length + 1}`;\n const extension =\n IMAGE_EXTENSION_BY_MIME_TYPE[item.type] ??\n item.type.slice('image/'.length).replace(/[^a-z0-9]/gi, '');\n // Two parts on purpose: a File built from a single File part shares that\n // part's name handle in some runtimes (Bun 1.3), so the rename would\n // either be lost or applied to the clipboard's file as well.\n images.push({\n file: new File(\n [blob, new Blob([])],\n `pasted-image-${stamp}${ordinal}.${extension || 'png'}`,\n { type: item.type },\n ),\n originalName,\n });\n }\n return images;\n}\n"],"names":[],"mappings":";;AAAA,MAAM,+BAAuD;AAAA,EAC3D,cAAc;AAAA,EACd,aAAa;AAAA,EACb,aAAa;AAAA,EACb,cAAc;AAAA,EACd,cAAc;AAAA,EACd,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,cAAc;AAChB;AAGA,MAAM,kBAAkB;AAYjB,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA,kBAAkB,CAAA;AACpB,GAGY;AACV,QAAM,QAAQ,MAAM,KAAK,cAAc,SAAS,CAAA,CAAE;AAClD,MAAI,OAAO,cAAc,YAAY,WAAY,QAAO;AAExD,MAAI,MAAM,SAAS,YAAY,GAAG;AAChC,UAAM,YAAY,cAAc,QAAQ,YAAY,EAAE,KAAA;AACtD,UAAM,aACJ,gBAAgB,SAAS,SAAS,KAAK,gBAAgB,KAAK,SAAS;AACvE,QAAI,UAAU,SAAS,KAAK,CAAC,YAAY;AACvC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,WAAW,GAAG;AAC/B,UAAM,OAAO,cAAc,QAAQ,WAAW;AAC9C,UAAM,cAAc,KAAK,QAAQ,YAAY,EAAE,EAAE,KAAA;AACjD,QAAI,YAAY,SAAS,GAAG;AAC1B,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAgBO,SAAS,oBAAoB;AAAA,EAClC;AACF,GAEkB;AAChB,QAAM,QAAQ,KAAK,IAAA;AACnB,QAAM,SAAwB,CAAA;AAC9B,aAAW,QAAQ,MAAM,KAAK,cAAc,SAAS,CAAA,CAAE,GAAG;AACxD,QAAI,CAAC,KAAK,KAAK,WAAW,QAAQ,EAAG;AACrC,UAAM,OAAO,KAAK,UAAA;AAClB,QAAI,CAAC,KAAM;AACX,UAAM,eAAe,KAAK,QAAQ;AAClC,UAAM,UAAU,OAAO,WAAW,IAAI,KAAK,IAAI,OAAO,SAAS,CAAC;AAChE,UAAM,YACJ,6BAA6B,KAAK,IAAI,KACtC,KAAK,KAAK,MAAM,SAAS,MAAM,EAAE,QAAQ,eAAe,EAAE;AAI5D,WAAO,KAAK;AAAA,MACV,MAAM,IAAI;AAAA,QACR,CAAC,MAAM,IAAI,KAAK,CAAA,CAAE,CAAC;AAAA,QACnB,gBAAgB,KAAK,GAAG,OAAO,IAAI,aAAa,KAAK;AAAA,QACrD,EAAE,MAAM,KAAK,KAAA;AAAA,MAAK;AAAA,MAEpB;AAAA,IAAA,CACD;AAAA,EACH;AACA,SAAO;AACT;;;"}
@@ -1,6 +1,30 @@
1
- export declare function shouldPrioritizeTextOverImage({ clipboardData, }: {
1
+ /**
2
+ * Whether a clipboard carries text the user meant to paste: non-blank
3
+ * `text/plain`, or `text/html` with text content once tags are stripped. An
4
+ * Excel, Sheets or Word copy puts the cells' text beside a bitmap of them —
5
+ * the text is the payload and the image is incidental; a copied web image
6
+ * carries only an `<img>` tag, which has no text content; a copied image
7
+ * *file* carries its own name in `text/plain` (Finder, Explorer), which is
8
+ * not content either — pass the pasted files' names so it is recognized.
9
+ * Tolerates the partial `DataTransfer` shapes test environments hand out.
10
+ */
11
+ export declare function clipboardHasMeaningfulText({ clipboardData, pastedFileNames, }: {
2
12
  clipboardData: DataTransfer;
13
+ pastedFileNames?: readonly string[];
3
14
  }): boolean;
4
- export declare function getClipboardImageFiles({ clipboardData, }: {
15
+ export interface PastedImage {
16
+ /** The file as the composer attaches it: renamed so the asset gets a useful, unique title. */
17
+ file: File;
18
+ /** The name the clipboard carried — a copied file's own name, or the browser's bitmap default. */
19
+ originalName: string;
20
+ }
21
+ /**
22
+ * The image files of a paste, from the clipboard's items. Each is renamed
23
+ * `pasted-image-<stamp>.<ext>` (the second and later of one paste get a
24
+ * `-2`, `-3`, … suffix) with the extension taken from the MIME type, so a
25
+ * pasted bitmap becomes an asset titled by the paste rather than the
26
+ * browser's `image.png` default.
27
+ */
28
+ export declare function extractPastedImages({ clipboardData, }: {
5
29
  clipboardData: DataTransfer;
6
- }): File[];
30
+ }): PastedImage[];
@@ -0,0 +1,62 @@
1
+ const IMAGE_EXTENSION_BY_MIME_TYPE = {
2
+ "image/avif": "avif",
3
+ "image/bmp": "bmp",
4
+ "image/gif": "gif",
5
+ "image/heic": "heic",
6
+ "image/jpeg": "jpg",
7
+ "image/png": "png",
8
+ "image/svg+xml": "svg",
9
+ "image/tiff": "tiff",
10
+ "image/webp": "webp"
11
+ };
12
+ const IMAGE_FILE_NAME = /^[^\s\\/]+\.(?:png|jpe?g|gif|webp|svg|bmp|tiff?|heic|avif)$/i;
13
+ function clipboardHasMeaningfulText({
14
+ clipboardData,
15
+ pastedFileNames = []
16
+ }) {
17
+ const types = Array.from(clipboardData.types ?? []);
18
+ if (typeof clipboardData.getData !== "function") return false;
19
+ if (types.includes("text/plain")) {
20
+ const plainText = clipboardData.getData("text/plain").trim();
21
+ const isFileName = pastedFileNames.includes(plainText) || IMAGE_FILE_NAME.test(plainText);
22
+ if (plainText.length > 0 && !isFileName) {
23
+ return true;
24
+ }
25
+ }
26
+ if (types.includes("text/html")) {
27
+ const html = clipboardData.getData("text/html");
28
+ const textContent = html.replace(/<[^>]*>/g, "").trim();
29
+ if (textContent.length > 0) {
30
+ return true;
31
+ }
32
+ }
33
+ return false;
34
+ }
35
+ function extractPastedImages({
36
+ clipboardData
37
+ }) {
38
+ const stamp = Date.now();
39
+ const images = [];
40
+ for (const item of Array.from(clipboardData.items ?? [])) {
41
+ if (!item.type.startsWith("image/")) continue;
42
+ const blob = item.getAsFile();
43
+ if (!blob) continue;
44
+ const originalName = blob.name || "";
45
+ const ordinal = images.length === 0 ? "" : `-${images.length + 1}`;
46
+ const extension = IMAGE_EXTENSION_BY_MIME_TYPE[item.type] ?? item.type.slice("image/".length).replace(/[^a-z0-9]/gi, "");
47
+ images.push({
48
+ file: new File(
49
+ [blob, new Blob([])],
50
+ `pasted-image-${stamp}${ordinal}.${extension || "png"}`,
51
+ { type: item.type }
52
+ ),
53
+ originalName
54
+ });
55
+ }
56
+ return images;
57
+ }
58
+ export {
59
+ clipboardHasMeaningfulText,
60
+ extractPastedImages
61
+ };
62
+ //# sourceMappingURL=clipboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard.js","sources":["../../src/composer/clipboard.ts"],"sourcesContent":["const IMAGE_EXTENSION_BY_MIME_TYPE: Record<string, string> = {\n 'image/avif': 'avif',\n 'image/bmp': 'bmp',\n 'image/gif': 'gif',\n 'image/heic': 'heic',\n 'image/jpeg': 'jpg',\n 'image/png': 'png',\n 'image/svg+xml': 'svg',\n 'image/tiff': 'tiff',\n 'image/webp': 'webp',\n};\n\n/** A lone image file name — what Finder and Explorer put in `text/plain` beside a copied image file. */\nconst IMAGE_FILE_NAME = /^[^\\s\\\\/]+\\.(?:png|jpe?g|gif|webp|svg|bmp|tiff?|heic|avif)$/i;\n\n/**\n * Whether a clipboard carries text the user meant to paste: non-blank\n * `text/plain`, or `text/html` with text content once tags are stripped. An\n * Excel, Sheets or Word copy puts the cells' text beside a bitmap of them —\n * the text is the payload and the image is incidental; a copied web image\n * carries only an `<img>` tag, which has no text content; a copied image\n * *file* carries its own name in `text/plain` (Finder, Explorer), which is\n * not content either — pass the pasted files' names so it is recognized.\n * Tolerates the partial `DataTransfer` shapes test environments hand out.\n */\nexport function clipboardHasMeaningfulText({\n clipboardData,\n pastedFileNames = [],\n}: {\n clipboardData: DataTransfer;\n pastedFileNames?: readonly string[];\n}): boolean {\n const types = Array.from(clipboardData.types ?? []);\n if (typeof clipboardData.getData !== 'function') return false;\n\n if (types.includes('text/plain')) {\n const plainText = clipboardData.getData('text/plain').trim();\n const isFileName =\n pastedFileNames.includes(plainText) || IMAGE_FILE_NAME.test(plainText);\n if (plainText.length > 0 && !isFileName) {\n return true;\n }\n }\n\n if (types.includes('text/html')) {\n const html = clipboardData.getData('text/html');\n const textContent = html.replace(/<[^>]*>/g, '').trim();\n if (textContent.length > 0) {\n return true;\n }\n }\n\n return false;\n}\n\nexport interface PastedImage {\n /** The file as the composer attaches it: renamed so the asset gets a useful, unique title. */\n file: File;\n /** The name the clipboard carried — a copied file's own name, or the browser's bitmap default. */\n originalName: string;\n}\n\n/**\n * The image files of a paste, from the clipboard's items. Each is renamed\n * `pasted-image-<stamp>.<ext>` (the second and later of one paste get a\n * `-2`, `-3`, … suffix) with the extension taken from the MIME type, so a\n * pasted bitmap becomes an asset titled by the paste rather than the\n * browser's `image.png` default.\n */\nexport function extractPastedImages({\n clipboardData,\n}: {\n clipboardData: DataTransfer;\n}): PastedImage[] {\n const stamp = Date.now();\n const images: PastedImage[] = [];\n for (const item of Array.from(clipboardData.items ?? [])) {\n if (!item.type.startsWith('image/')) continue;\n const blob = item.getAsFile();\n if (!blob) continue;\n const originalName = blob.name || '';\n const ordinal = images.length === 0 ? '' : `-${images.length + 1}`;\n const extension =\n IMAGE_EXTENSION_BY_MIME_TYPE[item.type] ??\n item.type.slice('image/'.length).replace(/[^a-z0-9]/gi, '');\n // Two parts on purpose: a File built from a single File part shares that\n // part's name handle in some runtimes (Bun 1.3), so the rename would\n // either be lost or applied to the clipboard's file as well.\n images.push({\n file: new File(\n [blob, new Blob([])],\n `pasted-image-${stamp}${ordinal}.${extension || 'png'}`,\n { type: item.type },\n ),\n originalName,\n });\n }\n return images;\n}\n"],"names":[],"mappings":"AAAA,MAAM,+BAAuD;AAAA,EAC3D,cAAc;AAAA,EACd,aAAa;AAAA,EACb,aAAa;AAAA,EACb,cAAc;AAAA,EACd,cAAc;AAAA,EACd,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,cAAc;AAChB;AAGA,MAAM,kBAAkB;AAYjB,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA,kBAAkB,CAAA;AACpB,GAGY;AACV,QAAM,QAAQ,MAAM,KAAK,cAAc,SAAS,CAAA,CAAE;AAClD,MAAI,OAAO,cAAc,YAAY,WAAY,QAAO;AAExD,MAAI,MAAM,SAAS,YAAY,GAAG;AAChC,UAAM,YAAY,cAAc,QAAQ,YAAY,EAAE,KAAA;AACtD,UAAM,aACJ,gBAAgB,SAAS,SAAS,KAAK,gBAAgB,KAAK,SAAS;AACvE,QAAI,UAAU,SAAS,KAAK,CAAC,YAAY;AACvC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,MAAM,SAAS,WAAW,GAAG;AAC/B,UAAM,OAAO,cAAc,QAAQ,WAAW;AAC9C,UAAM,cAAc,KAAK,QAAQ,YAAY,EAAE,EAAE,KAAA;AACjD,QAAI,YAAY,SAAS,GAAG;AAC1B,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAgBO,SAAS,oBAAoB;AAAA,EAClC;AACF,GAEkB;AAChB,QAAM,QAAQ,KAAK,IAAA;AACnB,QAAM,SAAwB,CAAA;AAC9B,aAAW,QAAQ,MAAM,KAAK,cAAc,SAAS,CAAA,CAAE,GAAG;AACxD,QAAI,CAAC,KAAK,KAAK,WAAW,QAAQ,EAAG;AACrC,UAAM,OAAO,KAAK,UAAA;AAClB,QAAI,CAAC,KAAM;AACX,UAAM,eAAe,KAAK,QAAQ;AAClC,UAAM,UAAU,OAAO,WAAW,IAAI,KAAK,IAAI,OAAO,SAAS,CAAC;AAChE,UAAM,YACJ,6BAA6B,KAAK,IAAI,KACtC,KAAK,KAAK,MAAM,SAAS,MAAM,EAAE,QAAQ,eAAe,EAAE;AAI5D,WAAO,KAAK;AAAA,MACV,MAAM,IAAI;AAAA,QACR,CAAC,MAAM,IAAI,KAAK,CAAA,CAAE,CAAC;AAAA,QACnB,gBAAgB,KAAK,GAAG,OAAO,IAAI,aAAa,KAAK;AAAA,QACrD,EAAE,MAAM,KAAK,KAAA;AAAA,MAAK;AAAA,MAEpB;AAAA,IAAA,CACD;AAAA,EACH;AACA,SAAO;AACT;"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const react$1 = require("react");
4
+ const react = require("@assistant-ui/react");
5
+ function useAppendToComposer() {
6
+ const aui = react.useAui();
7
+ return react$1.useCallback(
8
+ (text, opts) => {
9
+ if (opts == null ? void 0 : opts.replace) {
10
+ aui.composer.setText(text);
11
+ } else {
12
+ const current = aui.composer.getState().text;
13
+ aui.composer.setText(current ? `${current}
14
+ ${text}` : text);
15
+ }
16
+ },
17
+ [aui]
18
+ );
19
+ }
20
+ exports.useAppendToComposer = useAppendToComposer;
21
+ //# sourceMappingURL=useAppendToComposer.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAppendToComposer.cjs","sources":["../../src/composer/useAppendToComposer.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useAui } from '@assistant-ui/react';\n\n/**\n * Hook to programmatically append text to the composer without sending it.\n *\n * Use `useSendMessage()` for workflow shortcuts or other UI that should\n * immediately submit a prompt.\n *\n * Usage:\n * const append = useAppendToComposer();\n * append(\"some text to add\");\n * append(\"quoted text\", { replace: true }); // replaces existing text\n */\nexport function useAppendToComposer() {\n const aui = useAui();\n\n return useCallback(\n (text: string, opts?: { replace?: boolean }) => {\n if (opts?.replace) {\n aui.composer.setText(text);\n } else {\n const current = aui.composer.getState().text;\n aui.composer.setText(current ? `${current}\\n${text}` : text);\n }\n },\n [aui],\n );\n}\n"],"names":["useAui","useCallback"],"mappings":";;;;AAcO,SAAS,sBAAsB;AACpC,QAAM,MAAMA,MAAAA,OAAA;AAEZ,SAAOC,QAAAA;AAAAA,IACL,CAAC,MAAc,SAAiC;AAC9C,UAAI,6BAAM,SAAS;AACjB,YAAI,SAAS,QAAQ,IAAI;AAAA,MAC3B,OAAO;AACL,cAAM,UAAU,IAAI,SAAS,SAAA,EAAW;AACxC,YAAI,SAAS,QAAQ,UAAU,GAAG,OAAO;AAAA,EAAK,IAAI,KAAK,IAAI;AAAA,MAC7D;AAAA,IACF;AAAA,IACA,CAAC,GAAG;AAAA,EAAA;AAER;;"}
@@ -0,0 +1,21 @@
1
+ import { useCallback } from "react";
2
+ import { useAui } from "@assistant-ui/react";
3
+ function useAppendToComposer() {
4
+ const aui = useAui();
5
+ return useCallback(
6
+ (text, opts) => {
7
+ if (opts == null ? void 0 : opts.replace) {
8
+ aui.composer.setText(text);
9
+ } else {
10
+ const current = aui.composer.getState().text;
11
+ aui.composer.setText(current ? `${current}
12
+ ${text}` : text);
13
+ }
14
+ },
15
+ [aui]
16
+ );
17
+ }
18
+ export {
19
+ useAppendToComposer
20
+ };
21
+ //# sourceMappingURL=useAppendToComposer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAppendToComposer.js","sources":["../../src/composer/useAppendToComposer.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useAui } from '@assistant-ui/react';\n\n/**\n * Hook to programmatically append text to the composer without sending it.\n *\n * Use `useSendMessage()` for workflow shortcuts or other UI that should\n * immediately submit a prompt.\n *\n * Usage:\n * const append = useAppendToComposer();\n * append(\"some text to add\");\n * append(\"quoted text\", { replace: true }); // replaces existing text\n */\nexport function useAppendToComposer() {\n const aui = useAui();\n\n return useCallback(\n (text: string, opts?: { replace?: boolean }) => {\n if (opts?.replace) {\n aui.composer.setText(text);\n } else {\n const current = aui.composer.getState().text;\n aui.composer.setText(current ? `${current}\\n${text}` : text);\n }\n },\n [aui],\n );\n}\n"],"names":[],"mappings":";;AAcO,SAAS,sBAAsB;AACpC,QAAM,MAAM,OAAA;AAEZ,SAAO;AAAA,IACL,CAAC,MAAc,SAAiC;AAC9C,UAAI,6BAAM,SAAS;AACjB,YAAI,SAAS,QAAQ,IAAI;AAAA,MAC3B,OAAO;AACL,cAAM,UAAU,IAAI,SAAS,SAAA,EAAW;AACxC,YAAI,SAAS,QAAQ,UAAU,GAAG,OAAO;AAAA,EAAK,IAAI,KAAK,IAAI;AAAA,MAC7D;AAAA,IACF;AAAA,IACA,CAAC,GAAG;AAAA,EAAA;AAER;"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const react = require("react");
4
+ const athenaDiagnostics = require("../diagnostics/athena-diagnostics.cjs");
5
+ const AttachmentContext = require("./AttachmentContext.cjs");
6
+ const useFileUpload = require("./useFileUpload.cjs");
7
+ const ATTACH_FAILURE_MESSAGE = {
8
+ paperclip: "Failed to attach the selected files",
9
+ drop: "Failed to attach the dropped files",
10
+ paste: "Failed to attach the pasted images"
11
+ };
12
+ function useAttachFiles() {
13
+ const { upload, isUploading, error, clearError } = useFileUpload.useFileUpload();
14
+ const { addAttachments, setIsUploading } = AttachmentContext.useAttachments();
15
+ const attachFiles = react.useCallback(
16
+ async (files, source) => {
17
+ if (files.length === 0) return [];
18
+ setIsUploading(true);
19
+ try {
20
+ const assets = await upload([...files]);
21
+ if (assets.length > 0) addAttachments(assets);
22
+ return assets;
23
+ } catch (error2) {
24
+ athenaDiagnostics.athenaDiagnostics.error(
25
+ "composer.attachment.error",
26
+ error2,
27
+ { code: "attachment_failed", message: ATTACH_FAILURE_MESSAGE[source] },
28
+ { source, count: files.length }
29
+ );
30
+ return [];
31
+ } finally {
32
+ setIsUploading(false);
33
+ }
34
+ },
35
+ [addAttachments, setIsUploading, upload]
36
+ );
37
+ return { attachFiles, isUploading, error, clearError };
38
+ }
39
+ exports.useAttachFiles = useAttachFiles;
40
+ //# sourceMappingURL=useAttachFiles.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAttachFiles.cjs","sources":["../../src/composer/useAttachFiles.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { athenaDiagnostics } from '../diagnostics/athena-diagnostics';\nimport { useAttachments } from './AttachmentContext';\nimport { useFileUpload, type UploadedAsset } from './useFileUpload';\n\n/** Which intake the files came through — carried on the diagnostics event. */\nexport type AttachFilesSource = 'paperclip' | 'drop' | 'paste';\n\nconst ATTACH_FAILURE_MESSAGE: Record<AttachFilesSource, string> = {\n paperclip: 'Failed to attach the selected files',\n drop: 'Failed to attach the dropped files',\n paste: 'Failed to attach the pasted images',\n};\n\nexport interface UseAttachFilesReturn {\n /**\n * Upload files as Athena assets and add them to the attachment pills.\n * Resolves to the assets attached; a failed upload resolves to `[]` after\n * recording `composer.attachment.error` on the diagnostics bus (and in\n * `error`).\n */\n attachFiles: (files: readonly File[], source: AttachFilesSource) => Promise<UploadedAsset[]>;\n /** This intake's own upload in flight. */\n isUploading: boolean;\n /** Last failure of this intake, for its own affordance. */\n error: string | null;\n clearError: () => void;\n}\n\n/**\n * The one intake path for the attachment pills: the paperclip, the drop zone\n * and the composer's paste all upload through here, so a failure reaches the\n * diagnostics bus the same way and the shared `isUploading` flag — which\n * parks every submit path — is set for exactly the upload's duration.\n */\nexport function useAttachFiles(): UseAttachFilesReturn {\n const { upload, isUploading, error, clearError } = useFileUpload();\n const { addAttachments, setIsUploading } = useAttachments();\n\n const attachFiles = useCallback(\n async (files: readonly File[], source: AttachFilesSource): Promise<UploadedAsset[]> => {\n if (files.length === 0) return [];\n setIsUploading(true);\n try {\n const assets = await upload([...files]);\n if (assets.length > 0) addAttachments(assets);\n return assets;\n } catch (error) {\n athenaDiagnostics.error(\n 'composer.attachment.error',\n error,\n { code: 'attachment_failed', message: ATTACH_FAILURE_MESSAGE[source] },\n { source, count: files.length },\n );\n return [];\n } finally {\n setIsUploading(false);\n }\n },\n [addAttachments, setIsUploading, upload],\n );\n\n return { attachFiles, isUploading, error, clearError };\n}\n"],"names":["useFileUpload","useAttachments","useCallback","error","athenaDiagnostics"],"mappings":";;;;;;AAQA,MAAM,yBAA4D;AAAA,EAChE,WAAW;AAAA,EACX,MAAM;AAAA,EACN,OAAO;AACT;AAuBO,SAAS,iBAAuC;AACrD,QAAM,EAAE,QAAQ,aAAa,OAAO,WAAA,IAAeA,cAAAA,cAAA;AACnD,QAAM,EAAE,gBAAgB,eAAA,IAAmBC,iCAAA;AAE3C,QAAM,cAAcC,MAAAA;AAAAA,IAClB,OAAO,OAAwB,WAAwD;AACrF,UAAI,MAAM,WAAW,EAAG,QAAO,CAAA;AAC/B,qBAAe,IAAI;AACnB,UAAI;AACF,cAAM,SAAS,MAAM,OAAO,CAAC,GAAG,KAAK,CAAC;AACtC,YAAI,OAAO,SAAS,EAAG,gBAAe,MAAM;AAC5C,eAAO;AAAA,MACT,SAASC,QAAO;AACdC,0BAAAA,kBAAkB;AAAA,UAChB;AAAA,UACAD;AAAAA,UACA,EAAE,MAAM,qBAAqB,SAAS,uBAAuB,MAAM,EAAA;AAAA,UACnE,EAAE,QAAQ,OAAO,MAAM,OAAA;AAAA,QAAO;AAEhC,eAAO,CAAA;AAAA,MACT,UAAA;AACE,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,IACA,CAAC,gBAAgB,gBAAgB,MAAM;AAAA,EAAA;AAGzC,SAAO,EAAE,aAAa,aAAa,OAAO,WAAA;AAC5C;;"}
@@ -0,0 +1,24 @@
1
+ import { type UploadedAsset } from './useFileUpload';
2
+ /** Which intake the files came through — carried on the diagnostics event. */
3
+ export type AttachFilesSource = 'paperclip' | 'drop' | 'paste';
4
+ export interface UseAttachFilesReturn {
5
+ /**
6
+ * Upload files as Athena assets and add them to the attachment pills.
7
+ * Resolves to the assets attached; a failed upload resolves to `[]` after
8
+ * recording `composer.attachment.error` on the diagnostics bus (and in
9
+ * `error`).
10
+ */
11
+ attachFiles: (files: readonly File[], source: AttachFilesSource) => Promise<UploadedAsset[]>;
12
+ /** This intake's own upload in flight. */
13
+ isUploading: boolean;
14
+ /** Last failure of this intake, for its own affordance. */
15
+ error: string | null;
16
+ clearError: () => void;
17
+ }
18
+ /**
19
+ * The one intake path for the attachment pills: the paperclip, the drop zone
20
+ * and the composer's paste all upload through here, so a failure reaches the
21
+ * diagnostics bus the same way and the shared `isUploading` flag — which
22
+ * parks every submit path — is set for exactly the upload's duration.
23
+ */
24
+ export declare function useAttachFiles(): UseAttachFilesReturn;
@@ -0,0 +1,40 @@
1
+ import { useCallback } from "react";
2
+ import { athenaDiagnostics } from "../diagnostics/athena-diagnostics.js";
3
+ import { useAttachments } from "./AttachmentContext.js";
4
+ import { useFileUpload } from "./useFileUpload.js";
5
+ const ATTACH_FAILURE_MESSAGE = {
6
+ paperclip: "Failed to attach the selected files",
7
+ drop: "Failed to attach the dropped files",
8
+ paste: "Failed to attach the pasted images"
9
+ };
10
+ function useAttachFiles() {
11
+ const { upload, isUploading, error, clearError } = useFileUpload();
12
+ const { addAttachments, setIsUploading } = useAttachments();
13
+ const attachFiles = useCallback(
14
+ async (files, source) => {
15
+ if (files.length === 0) return [];
16
+ setIsUploading(true);
17
+ try {
18
+ const assets = await upload([...files]);
19
+ if (assets.length > 0) addAttachments(assets);
20
+ return assets;
21
+ } catch (error2) {
22
+ athenaDiagnostics.error(
23
+ "composer.attachment.error",
24
+ error2,
25
+ { code: "attachment_failed", message: ATTACH_FAILURE_MESSAGE[source] },
26
+ { source, count: files.length }
27
+ );
28
+ return [];
29
+ } finally {
30
+ setIsUploading(false);
31
+ }
32
+ },
33
+ [addAttachments, setIsUploading, upload]
34
+ );
35
+ return { attachFiles, isUploading, error, clearError };
36
+ }
37
+ export {
38
+ useAttachFiles
39
+ };
40
+ //# sourceMappingURL=useAttachFiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAttachFiles.js","sources":["../../src/composer/useAttachFiles.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { athenaDiagnostics } from '../diagnostics/athena-diagnostics';\nimport { useAttachments } from './AttachmentContext';\nimport { useFileUpload, type UploadedAsset } from './useFileUpload';\n\n/** Which intake the files came through — carried on the diagnostics event. */\nexport type AttachFilesSource = 'paperclip' | 'drop' | 'paste';\n\nconst ATTACH_FAILURE_MESSAGE: Record<AttachFilesSource, string> = {\n paperclip: 'Failed to attach the selected files',\n drop: 'Failed to attach the dropped files',\n paste: 'Failed to attach the pasted images',\n};\n\nexport interface UseAttachFilesReturn {\n /**\n * Upload files as Athena assets and add them to the attachment pills.\n * Resolves to the assets attached; a failed upload resolves to `[]` after\n * recording `composer.attachment.error` on the diagnostics bus (and in\n * `error`).\n */\n attachFiles: (files: readonly File[], source: AttachFilesSource) => Promise<UploadedAsset[]>;\n /** This intake's own upload in flight. */\n isUploading: boolean;\n /** Last failure of this intake, for its own affordance. */\n error: string | null;\n clearError: () => void;\n}\n\n/**\n * The one intake path for the attachment pills: the paperclip, the drop zone\n * and the composer's paste all upload through here, so a failure reaches the\n * diagnostics bus the same way and the shared `isUploading` flag — which\n * parks every submit path — is set for exactly the upload's duration.\n */\nexport function useAttachFiles(): UseAttachFilesReturn {\n const { upload, isUploading, error, clearError } = useFileUpload();\n const { addAttachments, setIsUploading } = useAttachments();\n\n const attachFiles = useCallback(\n async (files: readonly File[], source: AttachFilesSource): Promise<UploadedAsset[]> => {\n if (files.length === 0) return [];\n setIsUploading(true);\n try {\n const assets = await upload([...files]);\n if (assets.length > 0) addAttachments(assets);\n return assets;\n } catch (error) {\n athenaDiagnostics.error(\n 'composer.attachment.error',\n error,\n { code: 'attachment_failed', message: ATTACH_FAILURE_MESSAGE[source] },\n { source, count: files.length },\n );\n return [];\n } finally {\n setIsUploading(false);\n }\n },\n [addAttachments, setIsUploading, upload],\n );\n\n return { attachFiles, isUploading, error, clearError };\n}\n"],"names":["error"],"mappings":";;;;AAQA,MAAM,yBAA4D;AAAA,EAChE,WAAW;AAAA,EACX,MAAM;AAAA,EACN,OAAO;AACT;AAuBO,SAAS,iBAAuC;AACrD,QAAM,EAAE,QAAQ,aAAa,OAAO,WAAA,IAAe,cAAA;AACnD,QAAM,EAAE,gBAAgB,eAAA,IAAmB,eAAA;AAE3C,QAAM,cAAc;AAAA,IAClB,OAAO,OAAwB,WAAwD;AACrF,UAAI,MAAM,WAAW,EAAG,QAAO,CAAA;AAC/B,qBAAe,IAAI;AACnB,UAAI;AACF,cAAM,SAAS,MAAM,OAAO,CAAC,GAAG,KAAK,CAAC;AACtC,YAAI,OAAO,SAAS,EAAG,gBAAe,MAAM;AAC5C,eAAO;AAAA,MACT,SAASA,QAAO;AACd,0BAAkB;AAAA,UAChB;AAAA,UACAA;AAAAA,UACA,EAAE,MAAM,qBAAqB,SAAS,uBAAuB,MAAM,EAAA;AAAA,UACnE,EAAE,QAAQ,OAAO,MAAM,OAAA;AAAA,QAAO;AAEhC,eAAO,CAAA;AAAA,MACT,UAAA;AACE,uBAAe,KAAK;AAAA,MACtB;AAAA,IACF;AAAA,IACA,CAAC,gBAAgB,gBAAgB,MAAM;AAAA,EAAA;AAGzC,SAAO,EAAE,aAAa,aAAa,OAAO,WAAA;AAC5C;"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const react$1 = require("react");
4
+ const react = require("@assistant-ui/react");
5
+ function useComposerAttachment() {
6
+ const aui = react.useAui();
7
+ const addFile = react$1.useCallback(
8
+ (file) => {
9
+ aui.composer.addAttachment(file);
10
+ },
11
+ [aui]
12
+ );
13
+ const addContent = react$1.useCallback(
14
+ (name, content) => {
15
+ aui.composer.addAttachment({ name, content });
16
+ },
17
+ [aui]
18
+ );
19
+ const clear = react$1.useCallback(() => {
20
+ aui.composer.clearAttachments();
21
+ }, [aui]);
22
+ return { addFile, addContent, clear };
23
+ }
24
+ exports.useComposerAttachment = useComposerAttachment;
25
+ //# sourceMappingURL=useComposerAttachment.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useComposerAttachment.cjs","sources":["../../src/composer/useComposerAttachment.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useAui } from '@assistant-ui/react';\n\n/**\n * Hook for programmatic composer file attachment control.\n *\n * Usage:\n * const { addFile, addContent, clear } = useComposerAttachment();\n * addFile(fileObject);\n * addContent(\"data.csv\", \"col1,col2\\n1,2\");\n * clear();\n */\nexport function useComposerAttachment() {\n const aui = useAui();\n\n const addFile = useCallback(\n (file: File) => {\n aui.composer.addAttachment(file);\n },\n [aui],\n );\n\n const addContent = useCallback(\n (name: string, content: string) => {\n aui.composer.addAttachment({ name, content } as unknown as File);\n },\n [aui],\n );\n\n const clear = useCallback(() => {\n aui.composer.clearAttachments();\n }, [aui]);\n\n return { addFile, addContent, clear };\n}\n"],"names":["useAui","useCallback"],"mappings":";;;;AAYO,SAAS,wBAAwB;AACtC,QAAM,MAAMA,MAAAA,OAAA;AAEZ,QAAM,UAAUC,QAAAA;AAAAA,IACd,CAAC,SAAe;AACd,UAAI,SAAS,cAAc,IAAI;AAAA,IACjC;AAAA,IACA,CAAC,GAAG;AAAA,EAAA;AAGN,QAAM,aAAaA,QAAAA;AAAAA,IACjB,CAAC,MAAc,YAAoB;AACjC,UAAI,SAAS,cAAc,EAAE,MAAM,SAA4B;AAAA,IACjE;AAAA,IACA,CAAC,GAAG;AAAA,EAAA;AAGN,QAAM,QAAQA,QAAAA,YAAY,MAAM;AAC9B,QAAI,SAAS,iBAAA;AAAA,EACf,GAAG,CAAC,GAAG,CAAC;AAER,SAAO,EAAE,SAAS,YAAY,MAAA;AAChC;;"}
@@ -0,0 +1,25 @@
1
+ import { useCallback } from "react";
2
+ import { useAui } from "@assistant-ui/react";
3
+ function useComposerAttachment() {
4
+ const aui = useAui();
5
+ const addFile = useCallback(
6
+ (file) => {
7
+ aui.composer.addAttachment(file);
8
+ },
9
+ [aui]
10
+ );
11
+ const addContent = useCallback(
12
+ (name, content) => {
13
+ aui.composer.addAttachment({ name, content });
14
+ },
15
+ [aui]
16
+ );
17
+ const clear = useCallback(() => {
18
+ aui.composer.clearAttachments();
19
+ }, [aui]);
20
+ return { addFile, addContent, clear };
21
+ }
22
+ export {
23
+ useComposerAttachment
24
+ };
25
+ //# sourceMappingURL=useComposerAttachment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useComposerAttachment.js","sources":["../../src/composer/useComposerAttachment.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useAui } from '@assistant-ui/react';\n\n/**\n * Hook for programmatic composer file attachment control.\n *\n * Usage:\n * const { addFile, addContent, clear } = useComposerAttachment();\n * addFile(fileObject);\n * addContent(\"data.csv\", \"col1,col2\\n1,2\");\n * clear();\n */\nexport function useComposerAttachment() {\n const aui = useAui();\n\n const addFile = useCallback(\n (file: File) => {\n aui.composer.addAttachment(file);\n },\n [aui],\n );\n\n const addContent = useCallback(\n (name: string, content: string) => {\n aui.composer.addAttachment({ name, content } as unknown as File);\n },\n [aui],\n );\n\n const clear = useCallback(() => {\n aui.composer.clearAttachments();\n }, [aui]);\n\n return { addFile, addContent, clear };\n}\n"],"names":[],"mappings":";;AAYO,SAAS,wBAAwB;AACtC,QAAM,MAAM,OAAA;AAEZ,QAAM,UAAU;AAAA,IACd,CAAC,SAAe;AACd,UAAI,SAAS,cAAc,IAAI;AAAA,IACjC;AAAA,IACA,CAAC,GAAG;AAAA,EAAA;AAGN,QAAM,aAAa;AAAA,IACjB,CAAC,MAAc,YAAoB;AACjC,UAAI,SAAS,cAAc,EAAE,MAAM,SAA4B;AAAA,IACjE;AAAA,IACA,CAAC,GAAG;AAAA,EAAA;AAGN,QAAM,QAAQ,YAAY,MAAM;AAC9B,QAAI,SAAS,iBAAA;AAAA,EACf,GAAG,CAAC,GAAG,CAAC;AAER,SAAO,EAAE,SAAS,YAAY,MAAA;AAChC;"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const react = require("react");
4
+ const AthenaContext = require("../provider/AthenaContext.cjs");
5
+ const MAX_FILE_SIZE = 5 * 1024 * 1024 * 1024;
6
+ function useFileUpload() {
7
+ const config = AthenaContext.useAthenaConfig();
8
+ const configRef = react.useRef(config);
9
+ configRef.current = config;
10
+ const { backendUrl, apiKey } = config;
11
+ const [isUploading, setIsUploading] = react.useState(false);
12
+ const [progress, setProgress] = react.useState(null);
13
+ const [error, setError] = react.useState(null);
14
+ const xhrRef = react.useRef(null);
15
+ react.useEffect(() => {
16
+ return () => {
17
+ var _a;
18
+ (_a = xhrRef.current) == null ? void 0 : _a.abort();
19
+ };
20
+ }, []);
21
+ const clearError = react.useCallback(() => setError(null), []);
22
+ const upload = react.useCallback(
23
+ async (files) => {
24
+ var _a;
25
+ if (files.length === 0) return [];
26
+ for (const file of files) {
27
+ if (file.size > MAX_FILE_SIZE) {
28
+ const msg = `File "${file.name}" exceeds the maximum size of 5 GB.`;
29
+ setError(msg);
30
+ throw new Error(msg);
31
+ }
32
+ }
33
+ setIsUploading(true);
34
+ setError(null);
35
+ setProgress({ current: 0, total: files.length, fileName: ((_a = files[0]) == null ? void 0 : _a.name) ?? "", percent: 0 });
36
+ try {
37
+ const formData = new FormData();
38
+ for (const file of files) {
39
+ formData.append("files", file, file.name);
40
+ }
41
+ const baseUrl = backendUrl.replace(/\/api\/assistant-ui\/?$/, "");
42
+ const uploadUrl = `${baseUrl}/api/upload/`;
43
+ const currentToken = configRef.current.token;
44
+ const headers = {};
45
+ if (currentToken) {
46
+ headers["Authorization"] = `Bearer ${currentToken}`;
47
+ } else if (apiKey) {
48
+ headers["X-API-KEY"] = apiKey;
49
+ }
50
+ const xhr = new XMLHttpRequest();
51
+ xhrRef.current = xhr;
52
+ const result = await new Promise((resolve, reject) => {
53
+ xhr.upload.addEventListener("progress", (e) => {
54
+ var _a2;
55
+ if (e.lengthComputable) {
56
+ const percent = e.loaded / e.total;
57
+ const fileIndex = Math.min(
58
+ Math.floor(percent * files.length),
59
+ files.length - 1
60
+ );
61
+ setProgress({
62
+ current: fileIndex + 1,
63
+ total: files.length,
64
+ fileName: ((_a2 = files[fileIndex]) == null ? void 0 : _a2.name) ?? "",
65
+ percent
66
+ });
67
+ }
68
+ });
69
+ xhr.addEventListener("load", () => {
70
+ if (xhr.status >= 200 && xhr.status < 300) {
71
+ try {
72
+ const data = JSON.parse(xhr.responseText);
73
+ const assets = (data.success ?? []).map((a) => ({
74
+ id: a.id,
75
+ title: a.title ?? a.file_name,
76
+ fileName: a.file_name,
77
+ fileSize: a.file_size,
78
+ mediaType: a.media_type
79
+ }));
80
+ resolve({ success: assets, errors: data.errors ?? [] });
81
+ } catch {
82
+ reject(new Error("Failed to parse upload response"));
83
+ }
84
+ } else if (xhr.status === 401 || xhr.status === 403) {
85
+ reject(new Error("Authentication failed. Check your API key or token."));
86
+ } else {
87
+ reject(new Error(`Upload failed with status ${xhr.status}`));
88
+ }
89
+ });
90
+ xhr.addEventListener("error", () => reject(new Error("Network error during upload")));
91
+ xhr.addEventListener("abort", () => reject(new Error("Upload was cancelled")));
92
+ xhr.open("POST", uploadUrl);
93
+ for (const [key, value] of Object.entries(headers)) {
94
+ xhr.setRequestHeader(key, value);
95
+ }
96
+ xhr.withCredentials = !currentToken && !apiKey;
97
+ xhr.send(formData);
98
+ });
99
+ if (result.errors.length > 0) {
100
+ const errMsg = result.errors.map((e) => `${e.file.filename}: ${e.error}`).join("; ");
101
+ if (result.success.length === 0) {
102
+ setError(errMsg);
103
+ throw new Error(errMsg);
104
+ }
105
+ setError(errMsg);
106
+ }
107
+ return result.success;
108
+ } catch (err) {
109
+ const msg = err instanceof Error ? err.message : "Upload failed";
110
+ setError(msg);
111
+ throw err;
112
+ } finally {
113
+ xhrRef.current = null;
114
+ setIsUploading(false);
115
+ setProgress(null);
116
+ }
117
+ },
118
+ [backendUrl, apiKey]
119
+ );
120
+ return { upload, isUploading, progress, error, clearError };
121
+ }
122
+ exports.useFileUpload = useFileUpload;
123
+ //# sourceMappingURL=useFileUpload.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFileUpload.cjs","sources":["../../src/composer/useFileUpload.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useAthenaConfig } from '../provider/AthenaContext';\n\nexport interface UploadedAsset {\n id: string;\n title: string;\n fileName: string;\n fileSize: number;\n mediaType: string;\n}\n\nexport interface UploadProgress {\n current: number;\n total: number;\n fileName: string;\n /** 0–1 normalized progress for the current file */\n percent: number;\n}\n\nexport interface UseFileUploadReturn {\n /** Upload one or more files to Athena. Returns the created asset(s). */\n upload: (files: File[]) => Promise<UploadedAsset[]>;\n /** Whether an upload is currently in progress. */\n isUploading: boolean;\n /** Upload progress info (null when idle). */\n progress: UploadProgress | null;\n /** Last upload error (null when no error). */\n error: string | null;\n /** Clear the error state. */\n clearError: () => void;\n}\n\nconst MAX_FILE_SIZE = 5 * 1024 * 1024 * 1024; // 5 GB\n\n/**\n * Hook for uploading files to the Athena platform via the Athena upload endpoint.\n * Files become Athena assets (documents, spreadsheets, PDFs, images, etc.).\n *\n * Usage:\n * const { upload, isUploading, progress, error } = useFileUpload();\n * const assets = await upload(fileList);\n */\nexport function useFileUpload(): UseFileUploadReturn {\n const config = useAthenaConfig();\n // Keep config in a ref so upload() always reads the latest token at call\n // time. AthenaConfig's token is a getter that returns the current value\n // from PropelAuth, and reading via the ref avoids capturing stale\n // destructured values in the useCallback closure.\n const configRef = useRef(config);\n configRef.current = config;\n const { backendUrl, apiKey } = config;\n const [isUploading, setIsUploading] = useState(false);\n const [progress, setProgress] = useState<UploadProgress | null>(null);\n const [error, setError] = useState<string | null>(null);\n const xhrRef = useRef<XMLHttpRequest | null>(null);\n\n // Abort any in-flight upload when the component unmounts\n useEffect(() => {\n return () => {\n xhrRef.current?.abort();\n };\n }, []);\n\n const clearError = useCallback(() => setError(null), []);\n\n const upload = useCallback(\n async (files: File[]): Promise<UploadedAsset[]> => {\n if (files.length === 0) return [];\n\n // Validate file sizes\n for (const file of files) {\n if (file.size > MAX_FILE_SIZE) {\n const msg = `File \"${file.name}\" exceeds the maximum size of 5 GB.`;\n setError(msg);\n throw new Error(msg);\n }\n }\n\n setIsUploading(true);\n setError(null);\n setProgress({ current: 0, total: files.length, fileName: files[0]?.name ?? '', percent: 0 });\n\n try {\n const formData = new FormData();\n for (const file of files) {\n formData.append('files', file, file.name);\n }\n\n // Derive the upload URL from the configured Athena backend URL.\n // If backendUrl points at a nested Athena endpoint, trim it back to the API base first.\n const baseUrl = backendUrl.replace(/\\/api\\/assistant-ui\\/?$/, '');\n const uploadUrl = `${baseUrl}/api/upload/`;\n\n // Read the current token at call time so rotated tokens are picked up.\n const currentToken = configRef.current.token;\n const headers: Record<string, string> = {};\n if (currentToken) {\n headers['Authorization'] = `Bearer ${currentToken}`;\n } else if (apiKey) {\n headers['X-API-KEY'] = apiKey;\n }\n\n const xhr = new XMLHttpRequest();\n xhrRef.current = xhr;\n\n const result = await new Promise<{ success: UploadedAsset[]; errors: Array<{ file: { filename: string }; error: string }> }>((resolve, reject) => {\n xhr.upload.addEventListener('progress', (e) => {\n if (e.lengthComputable) {\n const percent = e.loaded / e.total;\n // Estimate which file we're on based on progress\n const fileIndex = Math.min(\n Math.floor(percent * files.length),\n files.length - 1,\n );\n setProgress({\n current: fileIndex + 1,\n total: files.length,\n fileName: files[fileIndex]?.name ?? '',\n percent,\n });\n }\n });\n\n xhr.addEventListener('load', () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n try {\n const data = JSON.parse(xhr.responseText);\n const assets: UploadedAsset[] = (data.success ?? []).map((a: Record<string, unknown>) => ({\n id: a.id as string,\n title: (a.title ?? a.file_name) as string,\n fileName: a.file_name as string,\n fileSize: a.file_size as number,\n mediaType: a.media_type as string,\n }));\n resolve({ success: assets, errors: data.errors ?? [] });\n } catch {\n reject(new Error('Failed to parse upload response'));\n }\n } else if (xhr.status === 401 || xhr.status === 403) {\n reject(new Error('Authentication failed. Check your API key or token.'));\n } else {\n reject(new Error(`Upload failed with status ${xhr.status}`));\n }\n });\n\n xhr.addEventListener('error', () => reject(new Error('Network error during upload')));\n xhr.addEventListener('abort', () => reject(new Error('Upload was cancelled')));\n\n xhr.open('POST', uploadUrl);\n for (const [key, value] of Object.entries(headers)) {\n xhr.setRequestHeader(key, value);\n }\n xhr.withCredentials = !currentToken && !apiKey;\n xhr.send(formData);\n });\n\n if (result.errors.length > 0) {\n const errMsg = result.errors.map((e) => `${e.file.filename}: ${e.error}`).join('; ');\n if (result.success.length === 0) {\n setError(errMsg);\n throw new Error(errMsg);\n }\n // Partial success — set error but still return successful uploads\n setError(errMsg);\n }\n\n return result.success;\n } catch (err) {\n const msg = err instanceof Error ? err.message : 'Upload failed';\n setError(msg);\n throw err;\n } finally {\n xhrRef.current = null;\n setIsUploading(false);\n setProgress(null);\n }\n },\n [backendUrl, apiKey],\n );\n\n return { upload, isUploading, progress, error, clearError };\n}\n"],"names":["useAthenaConfig","useRef","useState","useEffect","useCallback","_a"],"mappings":";;;;AAgCA,MAAM,gBAAgB,IAAI,OAAO,OAAO;AAUjC,SAAS,gBAAqC;AACnD,QAAM,SAASA,cAAAA,gBAAA;AAKf,QAAM,YAAYC,MAAAA,OAAO,MAAM;AAC/B,YAAU,UAAU;AACpB,QAAM,EAAE,YAAY,OAAA,IAAW;AAC/B,QAAM,CAAC,aAAa,cAAc,IAAIC,MAAAA,SAAS,KAAK;AACpD,QAAM,CAAC,UAAU,WAAW,IAAIA,MAAAA,SAAgC,IAAI;AACpE,QAAM,CAAC,OAAO,QAAQ,IAAIA,MAAAA,SAAwB,IAAI;AACtD,QAAM,SAASD,MAAAA,OAA8B,IAAI;AAGjDE,QAAAA,UAAU,MAAM;AACd,WAAO,MAAM;;AACX,mBAAO,YAAP,mBAAgB;AAAA,IAClB;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,QAAM,aAAaC,MAAAA,YAAY,MAAM,SAAS,IAAI,GAAG,CAAA,CAAE;AAEvD,QAAM,SAASA,MAAAA;AAAAA,IACb,OAAO,UAA4C;;AACjD,UAAI,MAAM,WAAW,EAAG,QAAO,CAAA;AAG/B,iBAAW,QAAQ,OAAO;AACxB,YAAI,KAAK,OAAO,eAAe;AAC7B,gBAAM,MAAM,SAAS,KAAK,IAAI;AAC9B,mBAAS,GAAG;AACZ,gBAAM,IAAI,MAAM,GAAG;AAAA,QACrB;AAAA,MACF;AAEA,qBAAe,IAAI;AACnB,eAAS,IAAI;AACb,kBAAY,EAAE,SAAS,GAAG,OAAO,MAAM,QAAQ,YAAU,WAAM,CAAC,MAAP,mBAAU,SAAQ,IAAI,SAAS,GAAG;AAE3F,UAAI;AACF,cAAM,WAAW,IAAI,SAAA;AACrB,mBAAW,QAAQ,OAAO;AACxB,mBAAS,OAAO,SAAS,MAAM,KAAK,IAAI;AAAA,QAC1C;AAIA,cAAM,UAAU,WAAW,QAAQ,2BAA2B,EAAE;AAChE,cAAM,YAAY,GAAG,OAAO;AAG5B,cAAM,eAAe,UAAU,QAAQ;AACvC,cAAM,UAAkC,CAAA;AACxC,YAAI,cAAc;AAChB,kBAAQ,eAAe,IAAI,UAAU,YAAY;AAAA,QACnD,WAAW,QAAQ;AACjB,kBAAQ,WAAW,IAAI;AAAA,QACzB;AAEA,cAAM,MAAM,IAAI,eAAA;AAChB,eAAO,UAAU;AAEjB,cAAM,SAAS,MAAM,IAAI,QAAoG,CAAC,SAAS,WAAW;AAChJ,cAAI,OAAO,iBAAiB,YAAY,CAAC,MAAM;;AAC7C,gBAAI,EAAE,kBAAkB;AACtB,oBAAM,UAAU,EAAE,SAAS,EAAE;AAE7B,oBAAM,YAAY,KAAK;AAAA,gBACrB,KAAK,MAAM,UAAU,MAAM,MAAM;AAAA,gBACjC,MAAM,SAAS;AAAA,cAAA;AAEjB,0BAAY;AAAA,gBACV,SAAS,YAAY;AAAA,gBACrB,OAAO,MAAM;AAAA,gBACb,YAAUC,MAAA,MAAM,SAAS,MAAf,gBAAAA,IAAkB,SAAQ;AAAA,gBACpC;AAAA,cAAA,CACD;AAAA,YACH;AAAA,UACF,CAAC;AAED,cAAI,iBAAiB,QAAQ,MAAM;AACjC,gBAAI,IAAI,UAAU,OAAO,IAAI,SAAS,KAAK;AACzC,kBAAI;AACF,sBAAM,OAAO,KAAK,MAAM,IAAI,YAAY;AACxC,sBAAM,UAA2B,KAAK,WAAW,CAAA,GAAI,IAAI,CAAC,OAAgC;AAAA,kBACxF,IAAI,EAAE;AAAA,kBACN,OAAQ,EAAE,SAAS,EAAE;AAAA,kBACrB,UAAU,EAAE;AAAA,kBACZ,UAAU,EAAE;AAAA,kBACZ,WAAW,EAAE;AAAA,gBAAA,EACb;AACF,wBAAQ,EAAE,SAAS,QAAQ,QAAQ,KAAK,UAAU,CAAA,GAAI;AAAA,cACxD,QAAQ;AACN,uBAAO,IAAI,MAAM,iCAAiC,CAAC;AAAA,cACrD;AAAA,YACF,WAAW,IAAI,WAAW,OAAO,IAAI,WAAW,KAAK;AACnD,qBAAO,IAAI,MAAM,qDAAqD,CAAC;AAAA,YACzE,OAAO;AACL,qBAAO,IAAI,MAAM,6BAA6B,IAAI,MAAM,EAAE,CAAC;AAAA,YAC7D;AAAA,UACF,CAAC;AAED,cAAI,iBAAiB,SAAS,MAAM,OAAO,IAAI,MAAM,6BAA6B,CAAC,CAAC;AACpF,cAAI,iBAAiB,SAAS,MAAM,OAAO,IAAI,MAAM,sBAAsB,CAAC,CAAC;AAE7E,cAAI,KAAK,QAAQ,SAAS;AAC1B,qBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,gBAAI,iBAAiB,KAAK,KAAK;AAAA,UACjC;AACA,cAAI,kBAAkB,CAAC,gBAAgB,CAAC;AACxC,cAAI,KAAK,QAAQ;AAAA,QACnB,CAAC;AAED,YAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,gBAAM,SAAS,OAAO,OAAO,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,QAAQ,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,IAAI;AACnF,cAAI,OAAO,QAAQ,WAAW,GAAG;AAC/B,qBAAS,MAAM;AACf,kBAAM,IAAI,MAAM,MAAM;AAAA,UACxB;AAEA,mBAAS,MAAM;AAAA,QACjB;AAEA,eAAO,OAAO;AAAA,MAChB,SAAS,KAAK;AACZ,cAAM,MAAM,eAAe,QAAQ,IAAI,UAAU;AACjD,iBAAS,GAAG;AACZ,cAAM;AAAA,MACR,UAAA;AACE,eAAO,UAAU;AACjB,uBAAe,KAAK;AACpB,oBAAY,IAAI;AAAA,MAClB;AAAA,IACF;AAAA,IACA,CAAC,YAAY,MAAM;AAAA,EAAA;AAGrB,SAAO,EAAE,QAAQ,aAAa,UAAU,OAAO,WAAA;AACjD;;"}