@athenaintel/react 0.19.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 (857) hide show
  1. package/README.md +97 -11
  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.js +171 -0
  58. package/dist/chat/StatewireApprovalCard.js.map +1 -0
  59. package/dist/chat/StatewireClientToolBridge.cjs +50 -0
  60. package/dist/chat/StatewireClientToolBridge.cjs.map +1 -0
  61. package/dist/chat/StatewireClientToolBridge.js +50 -0
  62. package/dist/chat/StatewireClientToolBridge.js.map +1 -0
  63. package/dist/chat/StatewireQueuedMessages.cjs +432 -0
  64. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -0
  65. package/dist/chat/StatewireQueuedMessages.d.ts +3 -4
  66. package/dist/chat/StatewireQueuedMessages.js +432 -0
  67. package/dist/chat/StatewireQueuedMessages.js.map +1 -0
  68. package/dist/chat/athena-citation-links.cjs +326 -0
  69. package/dist/chat/athena-citation-links.cjs.map +1 -0
  70. package/dist/chat/athena-citation-links.js +326 -0
  71. package/dist/chat/athena-citation-links.js.map +1 -0
  72. package/dist/chat/run-activity.cjs +28 -0
  73. package/dist/chat/run-activity.cjs.map +1 -0
  74. package/dist/chat/run-activity.js +28 -0
  75. package/dist/chat/run-activity.js.map +1 -0
  76. package/dist/chat/statewire-banners.cjs +83 -0
  77. package/dist/chat/statewire-banners.cjs.map +1 -0
  78. package/dist/chat/statewire-banners.js +83 -0
  79. package/dist/chat/statewire-banners.js.map +1 -0
  80. package/dist/chat/statewire-client-tools.cjs +73 -0
  81. package/dist/chat/statewire-client-tools.cjs.map +1 -0
  82. package/dist/chat/statewire-client-tools.js +73 -0
  83. package/dist/chat/statewire-client-tools.js.map +1 -0
  84. package/dist/chat/super-grouping/CollapsibleGroup.cjs +158 -0
  85. package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -0
  86. package/dist/chat/super-grouping/CollapsibleGroup.js +158 -0
  87. package/dist/chat/super-grouping/CollapsibleGroup.js.map +1 -0
  88. package/dist/chat/super-grouping/SuperGroupingCard.cjs +361 -0
  89. package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -0
  90. package/dist/chat/super-grouping/SuperGroupingCard.d.ts +4 -1
  91. package/dist/chat/super-grouping/SuperGroupingCard.js +361 -0
  92. package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -0
  93. package/dist/chat/super-grouping/activity-timeline.cjs +151 -0
  94. package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -0
  95. package/dist/chat/super-grouping/activity-timeline.d.ts +3 -3
  96. package/dist/chat/super-grouping/activity-timeline.js +151 -0
  97. package/dist/chat/super-grouping/activity-timeline.js.map +1 -0
  98. package/dist/chat/super-grouping/grouping-function.cjs +55 -0
  99. package/dist/chat/super-grouping/grouping-function.cjs.map +1 -0
  100. package/dist/chat/super-grouping/grouping-function.js +55 -0
  101. package/dist/chat/super-grouping/grouping-function.js.map +1 -0
  102. package/dist/chat/super-grouping/index.cjs +26 -0
  103. package/dist/chat/super-grouping/index.cjs.map +1 -0
  104. package/dist/chat/super-grouping/index.js +26 -0
  105. package/dist/chat/super-grouping/index.js.map +1 -0
  106. package/dist/chat/super-grouping/toolkit-map.cjs +96 -0
  107. package/dist/chat/super-grouping/toolkit-map.cjs.map +1 -0
  108. package/dist/chat/super-grouping/toolkit-map.js +96 -0
  109. package/dist/chat/super-grouping/toolkit-map.js.map +1 -0
  110. package/dist/chat/tiptap-text.cjs +101 -0
  111. package/dist/chat/tiptap-text.cjs.map +1 -0
  112. package/dist/chat/tiptap-text.js +101 -0
  113. package/dist/chat/tiptap-text.js.map +1 -0
  114. package/dist/chat/tooltip-icon-button.cjs +32 -0
  115. package/dist/chat/tooltip-icon-button.cjs.map +1 -0
  116. package/dist/chat/tooltip-icon-button.js +32 -0
  117. package/dist/chat/tooltip-icon-button.js.map +1 -0
  118. package/dist/chat/use-athena-run-live.cjs +23 -0
  119. package/dist/chat/use-athena-run-live.cjs.map +1 -0
  120. package/dist/chat/use-athena-run-live.d.ts +10 -0
  121. package/dist/chat/use-athena-run-live.js +23 -0
  122. package/dist/chat/use-athena-run-live.js.map +1 -0
  123. package/dist/chat/use-statewire-approval-request.cjs +46 -0
  124. package/dist/chat/use-statewire-approval-request.cjs.map +1 -0
  125. package/dist/chat/use-statewire-approval-request.js +46 -0
  126. package/dist/chat/use-statewire-approval-request.js.map +1 -0
  127. package/dist/chat-ui/auth/sign-in-card.cjs +128 -0
  128. package/dist/chat-ui/auth/sign-in-card.cjs.map +1 -0
  129. package/dist/chat-ui/auth/sign-in-card.js +128 -0
  130. package/dist/chat-ui/auth/sign-in-card.js.map +1 -0
  131. package/dist/chat-ui/composer/composer-action.cjs +11 -0
  132. package/dist/chat-ui/composer/composer-action.cjs.map +1 -0
  133. package/dist/chat-ui/composer/composer-action.d.ts +5 -8
  134. package/dist/chat-ui/composer/composer-action.js +11 -0
  135. package/dist/chat-ui/composer/composer-action.js.map +1 -0
  136. package/dist/chat-ui/composer/pending-attachment-uploads.cjs +25 -0
  137. package/dist/chat-ui/composer/pending-attachment-uploads.cjs.map +1 -0
  138. package/dist/chat-ui/composer/pending-attachment-uploads.js +25 -0
  139. package/dist/chat-ui/composer/pending-attachment-uploads.js.map +1 -0
  140. package/dist/chat-ui/composer/tiptap-composer.cjs +590 -0
  141. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -0
  142. package/dist/chat-ui/composer/tiptap-composer.d.ts +44 -7
  143. package/dist/chat-ui/composer/tiptap-composer.js +590 -0
  144. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -0
  145. package/dist/chat-ui/header/chat-header.cjs +33 -0
  146. package/dist/chat-ui/header/chat-header.cjs.map +1 -0
  147. package/dist/chat-ui/header/chat-header.js +33 -0
  148. package/dist/chat-ui/header/chat-header.js.map +1 -0
  149. package/dist/chat-ui/header/conversation-history-panel.cjs +369 -0
  150. package/dist/chat-ui/header/conversation-history-panel.cjs.map +1 -0
  151. package/dist/chat-ui/header/conversation-history-panel.js +369 -0
  152. package/dist/chat-ui/header/conversation-history-panel.js.map +1 -0
  153. package/dist/chat-ui/index.cjs +139 -0
  154. package/dist/chat-ui/index.cjs.map +1 -0
  155. package/dist/chat-ui/index.d.ts +4 -3
  156. package/dist/chat-ui/index.js +139 -0
  157. package/dist/chat-ui/index.js.map +1 -0
  158. package/dist/chat-ui/lib/asset-urls.cjs +18 -0
  159. package/dist/chat-ui/lib/asset-urls.cjs.map +1 -0
  160. package/dist/chat-ui/lib/asset-urls.js +18 -0
  161. package/dist/chat-ui/lib/asset-urls.js.map +1 -0
  162. package/dist/chat-ui/mentions/mention-chip.cjs +208 -0
  163. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -0
  164. package/dist/chat-ui/mentions/mention-chip.js +208 -0
  165. package/dist/chat-ui/mentions/mention-chip.js.map +1 -0
  166. package/dist/chat-ui/mentions/mention-extension.cjs +184 -0
  167. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -0
  168. package/dist/chat-ui/mentions/mention-extension.d.ts +24 -2
  169. package/dist/chat-ui/mentions/mention-extension.js +184 -0
  170. package/dist/chat-ui/mentions/mention-extension.js.map +1 -0
  171. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +35 -0
  172. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -0
  173. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +35 -0
  174. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -0
  175. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +95 -0
  176. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -0
  177. package/dist/chat-ui/mentions/suggestions/components/mention-icon.d.ts +5 -0
  178. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +95 -0
  179. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -0
  180. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs +116 -0
  181. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs.map +1 -0
  182. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js +116 -0
  183. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js.map +1 -0
  184. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +31 -0
  185. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -0
  186. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js +31 -0
  187. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js.map +1 -0
  188. package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.cjs +27 -0
  189. package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.cjs.map +1 -0
  190. package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.js +27 -0
  191. package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.js.map +1 -0
  192. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +62 -0
  193. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -0
  194. package/dist/chat-ui/mentions/suggestions/components/menu-item.js +62 -0
  195. package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -0
  196. package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs +63 -0
  197. package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs.map +1 -0
  198. package/dist/chat-ui/mentions/suggestions/components/menu-list.js +63 -0
  199. package/dist/chat-ui/mentions/suggestions/components/menu-list.js.map +1 -0
  200. package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.cjs +11 -0
  201. package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.cjs.map +1 -0
  202. package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.js +11 -0
  203. package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.js.map +1 -0
  204. package/dist/chat-ui/mentions/suggestions/components/menu-summary.cjs +33 -0
  205. package/dist/chat-ui/mentions/suggestions/components/menu-summary.cjs.map +1 -0
  206. package/dist/chat-ui/mentions/suggestions/components/menu-summary.js +33 -0
  207. package/dist/chat-ui/mentions/suggestions/components/menu-summary.js.map +1 -0
  208. package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs +58 -0
  209. package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs.map +1 -0
  210. package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.js +58 -0
  211. package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.js.map +1 -0
  212. package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs +81 -0
  213. package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs.map +1 -0
  214. package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.js +81 -0
  215. package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.js.map +1 -0
  216. package/dist/chat-ui/mentions/suggestions/components/utils.cjs +18 -0
  217. package/dist/chat-ui/mentions/suggestions/components/utils.cjs.map +1 -0
  218. package/dist/chat-ui/mentions/suggestions/components/utils.js +18 -0
  219. package/dist/chat-ui/mentions/suggestions/components/utils.js.map +1 -0
  220. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +123 -0
  221. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -0
  222. package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +10 -0
  223. package/dist/chat-ui/mentions/suggestions/data/api-client.js +123 -0
  224. package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -0
  225. package/dist/chat-ui/mentions/suggestions/data/item-cache.cjs +37 -0
  226. package/dist/chat-ui/mentions/suggestions/data/item-cache.cjs.map +1 -0
  227. package/dist/chat-ui/mentions/suggestions/data/item-cache.js +37 -0
  228. package/dist/chat-ui/mentions/suggestions/data/item-cache.js.map +1 -0
  229. package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs +134 -0
  230. package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs.map +1 -0
  231. package/dist/chat-ui/mentions/suggestions/data/orchestrator.js +134 -0
  232. package/dist/chat-ui/mentions/suggestions/data/orchestrator.js.map +1 -0
  233. package/dist/chat-ui/mentions/suggestions/data/scope-registry.cjs +91 -0
  234. package/dist/chat-ui/mentions/suggestions/data/scope-registry.cjs.map +1 -0
  235. package/dist/chat-ui/mentions/suggestions/data/scope-registry.js +91 -0
  236. package/dist/chat-ui/mentions/suggestions/data/scope-registry.js.map +1 -0
  237. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs +137 -0
  238. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs.map +1 -0
  239. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js +137 -0
  240. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js.map +1 -0
  241. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +375 -0
  242. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -0
  243. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +16 -1
  244. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +375 -0
  245. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -0
  246. package/dist/chat-ui/mentions/suggestions/data/types.cjs +9 -0
  247. package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -0
  248. package/dist/chat-ui/mentions/suggestions/data/types.d.ts +14 -0
  249. package/dist/chat-ui/mentions/suggestions/data/types.js +9 -0
  250. package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -0
  251. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +173 -0
  252. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -0
  253. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +14 -4
  254. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +173 -0
  255. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -0
  256. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs +45 -0
  257. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs.map +1 -0
  258. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js +45 -0
  259. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js.map +1 -0
  260. package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.cjs +43 -0
  261. package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.cjs.map +1 -0
  262. package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.js +43 -0
  263. package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.js.map +1 -0
  264. package/dist/chat-ui/mentions/suggestions/data/utils/match-query.cjs +14 -0
  265. package/dist/chat-ui/mentions/suggestions/data/utils/match-query.cjs.map +1 -0
  266. package/dist/chat-ui/mentions/suggestions/data/utils/match-query.js +14 -0
  267. package/dist/chat-ui/mentions/suggestions/data/utils/match-query.js.map +1 -0
  268. package/dist/chat-ui/mentions/suggestions/data/utils/score-match.cjs +48 -0
  269. package/dist/chat-ui/mentions/suggestions/data/utils/score-match.cjs.map +1 -0
  270. package/dist/chat-ui/mentions/suggestions/data/utils/score-match.js +48 -0
  271. package/dist/chat-ui/mentions/suggestions/data/utils/score-match.js.map +1 -0
  272. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +71 -0
  273. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -0
  274. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +71 -0
  275. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -0
  276. package/dist/chat-ui/messages/continue-pill.cjs +54 -0
  277. package/dist/chat-ui/messages/continue-pill.cjs.map +1 -0
  278. package/dist/chat-ui/messages/continue-pill.js +54 -0
  279. package/dist/chat-ui/messages/continue-pill.js.map +1 -0
  280. package/dist/chat-ui/messages/message-actions-config.cjs +12 -0
  281. package/dist/chat-ui/messages/message-actions-config.cjs.map +1 -0
  282. package/dist/chat-ui/messages/message-actions-config.js +12 -0
  283. package/dist/chat-ui/messages/message-actions-config.js.map +1 -0
  284. package/dist/chat-ui/messages/message-components.cjs +343 -0
  285. package/dist/chat-ui/messages/message-components.cjs.map +1 -0
  286. package/dist/chat-ui/messages/message-components.d.ts +13 -1
  287. package/dist/chat-ui/messages/message-components.js +343 -0
  288. package/dist/chat-ui/messages/message-components.js.map +1 -0
  289. package/dist/chat-ui/messages/running-indicator.cjs +49 -0
  290. package/dist/chat-ui/messages/running-indicator.cjs.map +1 -0
  291. package/dist/chat-ui/messages/running-indicator.js +49 -0
  292. package/dist/chat-ui/messages/running-indicator.js.map +1 -0
  293. package/dist/chat-ui/messages/runtime-message.cjs +65 -0
  294. package/dist/chat-ui/messages/runtime-message.cjs.map +1 -0
  295. package/dist/chat-ui/messages/runtime-message.js +65 -0
  296. package/dist/chat-ui/messages/runtime-message.js.map +1 -0
  297. package/dist/{statewire-continue-run-nE9VCKUh.cjs → chat-ui/messages/statewire-continue-run.cjs} +39 -16
  298. package/dist/chat-ui/messages/statewire-continue-run.cjs.map +1 -0
  299. package/dist/chat-ui/messages/statewire-continue-run.d.ts +5 -1
  300. package/dist/{statewire-continue-run-D34gS7_1.js → chat-ui/messages/statewire-continue-run.js} +29 -7
  301. package/dist/chat-ui/messages/statewire-continue-run.js.map +1 -0
  302. package/dist/chat-ui/messages/user-edit-composer.cjs +61 -0
  303. package/dist/chat-ui/messages/user-edit-composer.cjs.map +1 -0
  304. package/dist/chat-ui/messages/user-edit-composer.js +61 -0
  305. package/dist/chat-ui/messages/user-edit-composer.js.map +1 -0
  306. package/dist/chat-ui/messages/voice-delegation-card.cjs +51 -0
  307. package/dist/chat-ui/messages/voice-delegation-card.cjs.map +1 -0
  308. package/dist/chat-ui/messages/voice-delegation-card.d.ts +26 -0
  309. package/dist/chat-ui/messages/voice-delegation-card.js +51 -0
  310. package/dist/chat-ui/messages/voice-delegation-card.js.map +1 -0
  311. package/dist/chat-ui/statewire.cjs +39 -0
  312. package/dist/chat-ui/statewire.cjs.map +1 -0
  313. package/dist/chat-ui/statewire.js +39 -0
  314. package/dist/chat-ui/statewire.js.map +1 -0
  315. package/dist/chat-ui/thread/chat-composer-dock.cjs +37 -0
  316. package/dist/chat-ui/thread/chat-composer-dock.cjs.map +1 -0
  317. package/dist/chat-ui/thread/chat-composer-dock.js +37 -0
  318. package/dist/chat-ui/thread/chat-composer-dock.js.map +1 -0
  319. package/dist/chat-ui/thread/chat-thread-shell.cjs +102 -0
  320. package/dist/chat-ui/thread/chat-thread-shell.cjs.map +1 -0
  321. package/dist/chat-ui/thread/chat-thread-shell.js +102 -0
  322. package/dist/chat-ui/thread/chat-thread-shell.js.map +1 -0
  323. package/dist/chat-ui/thread/composer-send-or-stop.cjs +75 -0
  324. package/dist/chat-ui/thread/composer-send-or-stop.cjs.map +1 -0
  325. package/dist/chat-ui/thread/composer-send-or-stop.d.ts +0 -6
  326. package/dist/chat-ui/thread/composer-send-or-stop.js +75 -0
  327. package/dist/chat-ui/thread/composer-send-or-stop.js.map +1 -0
  328. package/dist/chat-ui/thread/statewire-history-edge.cjs +134 -0
  329. package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -0
  330. package/dist/chat-ui/thread/statewire-history-edge.js +134 -0
  331. package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -0
  332. package/dist/{collab.cjs → collab/client.cjs} +6 -166
  333. package/dist/collab/client.cjs.map +1 -0
  334. package/dist/{collab.js → collab/client.js} +5 -164
  335. package/dist/collab/client.js.map +1 -0
  336. package/dist/collab/close-policy.cjs +14 -0
  337. package/dist/collab/close-policy.cjs.map +1 -0
  338. package/dist/collab/close-policy.js +14 -0
  339. package/dist/collab/close-policy.js.map +1 -0
  340. package/dist/collab/index.cjs +17 -0
  341. package/dist/collab/index.cjs.map +1 -0
  342. package/dist/collab/index.js +17 -0
  343. package/dist/collab/index.js.map +1 -0
  344. package/dist/collab/mint.cjs +59 -0
  345. package/dist/collab/mint.cjs.map +1 -0
  346. package/dist/collab/mint.js +59 -0
  347. package/dist/collab/mint.js.map +1 -0
  348. package/dist/collab/react.cjs +58 -0
  349. package/dist/collab/react.cjs.map +1 -0
  350. package/dist/collab/react.js +58 -0
  351. package/dist/collab/react.js.map +1 -0
  352. package/dist/collab/shape.cjs +45 -0
  353. package/dist/collab/shape.cjs.map +1 -0
  354. package/dist/collab/shape.js +45 -0
  355. package/dist/collab/shape.js.map +1 -0
  356. package/dist/composer/AttachmentContext.cjs +40 -0
  357. package/dist/composer/AttachmentContext.cjs.map +1 -0
  358. package/dist/composer/AttachmentContext.js +40 -0
  359. package/dist/composer/AttachmentContext.js.map +1 -0
  360. package/dist/composer/ComposerAttachmentPreview.cjs +39 -0
  361. package/dist/composer/ComposerAttachmentPreview.cjs.map +1 -0
  362. package/dist/composer/ComposerAttachmentPreview.js +39 -0
  363. package/dist/composer/ComposerAttachmentPreview.js.map +1 -0
  364. package/dist/composer/ComposerDropZone.cjs +61 -0
  365. package/dist/composer/ComposerDropZone.cjs.map +1 -0
  366. package/dist/composer/ComposerDropZone.d.ts +1 -1
  367. package/dist/composer/ComposerDropZone.js +61 -0
  368. package/dist/composer/ComposerDropZone.js.map +1 -0
  369. package/dist/composer/ComposerQuotePreview.cjs +42 -0
  370. package/dist/composer/ComposerQuotePreview.cjs.map +1 -0
  371. package/dist/composer/ComposerQuotePreview.js +42 -0
  372. package/dist/composer/ComposerQuotePreview.js.map +1 -0
  373. package/dist/composer/FileUploadButton.cjs +65 -0
  374. package/dist/composer/FileUploadButton.cjs.map +1 -0
  375. package/dist/composer/FileUploadButton.d.ts +1 -1
  376. package/dist/composer/FileUploadButton.js +65 -0
  377. package/dist/composer/FileUploadButton.js.map +1 -0
  378. package/dist/composer/QuoteContext.cjs +68 -0
  379. package/dist/composer/QuoteContext.cjs.map +1 -0
  380. package/dist/composer/QuoteContext.js +68 -0
  381. package/dist/composer/QuoteContext.js.map +1 -0
  382. package/dist/composer/build-composed-message.cjs +25 -0
  383. package/dist/composer/build-composed-message.cjs.map +1 -0
  384. package/dist/composer/build-composed-message.js +25 -0
  385. package/dist/composer/build-composed-message.js.map +1 -0
  386. package/dist/composer/clipboard.cjs +62 -0
  387. package/dist/composer/clipboard.cjs.map +1 -0
  388. package/dist/composer/clipboard.d.ts +27 -3
  389. package/dist/composer/clipboard.js +62 -0
  390. package/dist/composer/clipboard.js.map +1 -0
  391. package/dist/composer/useAppendToComposer.cjs +21 -0
  392. package/dist/composer/useAppendToComposer.cjs.map +1 -0
  393. package/dist/composer/useAppendToComposer.js +21 -0
  394. package/dist/composer/useAppendToComposer.js.map +1 -0
  395. package/dist/composer/useAttachFiles.cjs +40 -0
  396. package/dist/composer/useAttachFiles.cjs.map +1 -0
  397. package/dist/composer/useAttachFiles.d.ts +24 -0
  398. package/dist/composer/useAttachFiles.js +40 -0
  399. package/dist/composer/useAttachFiles.js.map +1 -0
  400. package/dist/composer/useComposerAttachment.cjs +25 -0
  401. package/dist/composer/useComposerAttachment.cjs.map +1 -0
  402. package/dist/composer/useComposerAttachment.js +25 -0
  403. package/dist/composer/useComposerAttachment.js.map +1 -0
  404. package/dist/composer/useFileUpload.cjs +123 -0
  405. package/dist/composer/useFileUpload.cjs.map +1 -0
  406. package/dist/composer/useFileUpload.js +123 -0
  407. package/dist/composer/useFileUpload.js.map +1 -0
  408. package/dist/composer/useSendMessage.cjs +22 -0
  409. package/dist/composer/useSendMessage.cjs.map +1 -0
  410. package/dist/composer/useSendMessage.js +22 -0
  411. package/dist/composer/useSendMessage.js.map +1 -0
  412. package/dist/diagnostics/athena-diagnostics.cjs +329 -0
  413. package/dist/diagnostics/athena-diagnostics.cjs.map +1 -0
  414. package/dist/diagnostics/athena-diagnostics.js +329 -0
  415. package/dist/diagnostics/athena-diagnostics.js.map +1 -0
  416. package/dist/diagnostics/errors.cjs +89 -0
  417. package/dist/diagnostics/errors.cjs.map +1 -0
  418. package/dist/diagnostics/errors.js +89 -0
  419. package/dist/diagnostics/errors.js.map +1 -0
  420. package/dist/diagnostics/useAthenaDiagnostics.cjs +16 -0
  421. package/dist/diagnostics/useAthenaDiagnostics.cjs.map +1 -0
  422. package/dist/diagnostics/useAthenaDiagnostics.js +16 -0
  423. package/dist/diagnostics/useAthenaDiagnostics.js.map +1 -0
  424. package/dist/index.cjs +274 -27882
  425. package/dist/index.cjs.map +1 -1
  426. package/dist/index.d.ts +6 -4
  427. package/dist/index.js +161 -27759
  428. package/dist/index.js.map +1 -1
  429. package/dist/lib/athena-urls.cjs +194 -0
  430. package/dist/lib/athena-urls.cjs.map +1 -0
  431. package/dist/lib/athena-urls.d.ts +20 -5
  432. package/dist/lib/athena-urls.js +194 -0
  433. package/dist/lib/athena-urls.js.map +1 -0
  434. package/dist/lib/posthog/before-send.cjs +58 -0
  435. package/dist/lib/posthog/before-send.cjs.map +1 -0
  436. package/dist/lib/posthog/before-send.js +58 -0
  437. package/dist/lib/posthog/before-send.js.map +1 -0
  438. package/dist/lib/posthog/capture-gate.cjs +322 -0
  439. package/dist/lib/posthog/capture-gate.cjs.map +1 -0
  440. package/dist/lib/posthog/capture-gate.js +322 -0
  441. package/dist/lib/posthog/capture-gate.js.map +1 -0
  442. package/dist/lib/posthog/wrap-posthog-client.cjs +163 -0
  443. package/dist/lib/posthog/wrap-posthog-client.cjs.map +1 -0
  444. package/dist/lib/posthog/wrap-posthog-client.js +163 -0
  445. package/dist/lib/posthog/wrap-posthog-client.js.map +1 -0
  446. package/dist/lib/utils.cjs +12 -0
  447. package/dist/lib/utils.cjs.map +1 -0
  448. package/dist/lib/utils.js +9 -0
  449. package/dist/lib/utils.js.map +1 -0
  450. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs +77 -0
  451. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs.map +1 -0
  452. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js +77 -0
  453. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js.map +1 -0
  454. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs +181 -0
  455. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs.map +1 -0
  456. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js +181 -0
  457. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js.map +1 -0
  458. package/dist/packages/agent-runtime/src/asset-attachment.cjs +19 -0
  459. package/dist/packages/agent-runtime/src/asset-attachment.cjs.map +1 -0
  460. package/dist/packages/agent-runtime/src/asset-attachment.js +19 -0
  461. package/dist/packages/agent-runtime/src/asset-attachment.js.map +1 -0
  462. package/dist/packages/agent-runtime/src/auth-denial.cjs +28 -0
  463. package/dist/packages/agent-runtime/src/auth-denial.cjs.map +1 -0
  464. package/dist/packages/agent-runtime/src/auth-denial.js +28 -0
  465. package/dist/packages/agent-runtime/src/auth-denial.js.map +1 -0
  466. package/dist/packages/agent-runtime/src/client-tool-bridge.cjs +270 -0
  467. package/dist/packages/agent-runtime/src/client-tool-bridge.cjs.map +1 -0
  468. package/dist/packages/agent-runtime/src/client-tool-bridge.js +270 -0
  469. package/dist/packages/agent-runtime/src/client-tool-bridge.js.map +1 -0
  470. package/dist/packages/agent-runtime/src/client-tools.cjs +137 -0
  471. package/dist/packages/agent-runtime/src/client-tools.cjs.map +1 -0
  472. package/dist/packages/agent-runtime/src/client-tools.js +137 -0
  473. package/dist/packages/agent-runtime/src/client-tools.js.map +1 -0
  474. package/dist/packages/agent-runtime/src/conversation-index.cjs +80 -0
  475. package/dist/packages/agent-runtime/src/conversation-index.cjs.map +1 -0
  476. package/dist/packages/agent-runtime/src/conversation-index.js +80 -0
  477. package/dist/packages/agent-runtime/src/conversation-index.js.map +1 -0
  478. package/dist/packages/agent-runtime/src/conversation-list.cjs +86 -0
  479. package/dist/packages/agent-runtime/src/conversation-list.cjs.map +1 -0
  480. package/dist/packages/agent-runtime/src/conversation-list.js +86 -0
  481. package/dist/packages/agent-runtime/src/conversation-list.js.map +1 -0
  482. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs +55 -0
  483. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -0
  484. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js +55 -0
  485. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -0
  486. package/dist/packages/agent-runtime/src/edit-command.cjs +89 -0
  487. package/dist/packages/agent-runtime/src/edit-command.cjs.map +1 -0
  488. package/dist/packages/agent-runtime/src/edit-command.js +89 -0
  489. package/dist/packages/agent-runtime/src/edit-command.js.map +1 -0
  490. package/dist/packages/agent-runtime/src/errors.cjs +95 -0
  491. package/dist/packages/agent-runtime/src/errors.cjs.map +1 -0
  492. package/dist/packages/agent-runtime/src/errors.js +95 -0
  493. package/dist/packages/agent-runtime/src/errors.js.map +1 -0
  494. package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs +236 -0
  495. package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -0
  496. package/dist/packages/agent-runtime/src/generated/runconfig-contract.js +236 -0
  497. package/dist/packages/agent-runtime/src/generated/runconfig-contract.js.map +1 -0
  498. package/dist/packages/agent-runtime/src/interrupts.cjs +117 -0
  499. package/dist/packages/agent-runtime/src/interrupts.cjs.map +1 -0
  500. package/dist/packages/agent-runtime/src/interrupts.js +117 -0
  501. package/dist/packages/agent-runtime/src/interrupts.js.map +1 -0
  502. package/dist/packages/agent-runtime/src/message-author.cjs +31 -0
  503. package/dist/packages/agent-runtime/src/message-author.cjs.map +1 -0
  504. package/dist/packages/agent-runtime/src/message-author.js +31 -0
  505. package/dist/packages/agent-runtime/src/message-author.js.map +1 -0
  506. package/dist/packages/agent-runtime/src/message-window.cjs +85 -0
  507. package/dist/packages/agent-runtime/src/message-window.cjs.map +1 -0
  508. package/dist/packages/agent-runtime/src/message-window.js +85 -0
  509. package/dist/packages/agent-runtime/src/message-window.js.map +1 -0
  510. package/dist/packages/agent-runtime/src/messages.cjs +433 -0
  511. package/dist/packages/agent-runtime/src/messages.cjs.map +1 -0
  512. package/dist/packages/agent-runtime/src/messages.js +433 -0
  513. package/dist/packages/agent-runtime/src/messages.js.map +1 -0
  514. package/dist/packages/agent-runtime/src/model-context.cjs +13 -0
  515. package/dist/packages/agent-runtime/src/model-context.cjs.map +1 -0
  516. package/dist/packages/agent-runtime/src/model-context.js +13 -0
  517. package/dist/packages/agent-runtime/src/model-context.js.map +1 -0
  518. package/dist/packages/agent-runtime/src/optimistic-content.cjs +17 -0
  519. package/dist/packages/agent-runtime/src/optimistic-content.cjs.map +1 -0
  520. package/dist/packages/agent-runtime/src/optimistic-content.js +17 -0
  521. package/dist/packages/agent-runtime/src/optimistic-content.js.map +1 -0
  522. package/dist/packages/agent-runtime/src/protocol.cjs +33 -0
  523. package/dist/packages/agent-runtime/src/protocol.cjs.map +1 -0
  524. package/dist/packages/agent-runtime/src/protocol.js +33 -0
  525. package/dist/packages/agent-runtime/src/protocol.js.map +1 -0
  526. package/dist/packages/agent-runtime/src/queue.cjs +67 -0
  527. package/dist/packages/agent-runtime/src/queue.cjs.map +1 -0
  528. package/dist/packages/agent-runtime/src/queue.js +67 -0
  529. package/dist/packages/agent-runtime/src/queue.js.map +1 -0
  530. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs +47 -0
  531. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -0
  532. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js +47 -0
  533. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -0
  534. package/dist/packages/agent-runtime/src/runtime-messages.cjs +187 -0
  535. package/dist/packages/agent-runtime/src/runtime-messages.cjs.map +1 -0
  536. package/dist/packages/agent-runtime/src/runtime-messages.js +187 -0
  537. package/dist/packages/agent-runtime/src/runtime-messages.js.map +1 -0
  538. package/dist/packages/agent-runtime/src/send-recovery.cjs +128 -0
  539. package/dist/packages/agent-runtime/src/send-recovery.cjs.map +1 -0
  540. package/dist/packages/agent-runtime/src/send-recovery.js +128 -0
  541. package/dist/packages/agent-runtime/src/send-recovery.js.map +1 -0
  542. package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs +249 -0
  543. package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs.map +1 -0
  544. package/dist/packages/agent-runtime/src/statewire-attach-observer.js +249 -0
  545. package/dist/packages/agent-runtime/src/statewire-attach-observer.js.map +1 -0
  546. package/dist/packages/agent-runtime/src/statewire-state.cjs +16 -0
  547. package/dist/packages/agent-runtime/src/statewire-state.cjs.map +1 -0
  548. package/dist/packages/agent-runtime/src/statewire-state.js +16 -0
  549. package/dist/packages/agent-runtime/src/statewire-state.js.map +1 -0
  550. package/dist/packages/agent-runtime/src/statewire-suspended.cjs +41 -0
  551. package/dist/packages/agent-runtime/src/statewire-suspended.cjs.map +1 -0
  552. package/dist/packages/agent-runtime/src/statewire-suspended.js +41 -0
  553. package/dist/packages/agent-runtime/src/statewire-suspended.js.map +1 -0
  554. package/dist/packages/agent-runtime/src/statewire-transport.cjs +6 -0
  555. package/dist/packages/agent-runtime/src/statewire-transport.cjs.map +1 -0
  556. package/dist/packages/agent-runtime/src/statewire-transport.js +6 -0
  557. package/dist/packages/agent-runtime/src/statewire-transport.js.map +1 -0
  558. package/dist/packages/agent-runtime/src/streaming-markdown.cjs +214 -0
  559. package/dist/packages/agent-runtime/src/streaming-markdown.cjs.map +1 -0
  560. package/dist/packages/agent-runtime/src/streaming-markdown.js +214 -0
  561. package/dist/packages/agent-runtime/src/streaming-markdown.js.map +1 -0
  562. package/dist/packages/agent-runtime/src/thread-extras.cjs +38 -0
  563. package/dist/packages/agent-runtime/src/thread-extras.cjs.map +1 -0
  564. package/dist/packages/agent-runtime/src/thread-extras.js +38 -0
  565. package/dist/packages/agent-runtime/src/thread-extras.js.map +1 -0
  566. package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs +90 -0
  567. package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs.map +1 -0
  568. package/dist/packages/agent-runtime/src/thread-snapshot-cache.js +90 -0
  569. package/dist/packages/agent-runtime/src/thread-snapshot-cache.js.map +1 -0
  570. package/dist/packages/agent-runtime/src/thread-status.cjs +49 -0
  571. package/dist/packages/agent-runtime/src/thread-status.cjs.map +1 -0
  572. package/dist/packages/agent-runtime/src/thread-status.js +49 -0
  573. package/dist/packages/agent-runtime/src/thread-status.js.map +1 -0
  574. package/dist/packages/agent-runtime/src/tool-metadata.cjs +1802 -0
  575. package/dist/packages/agent-runtime/src/tool-metadata.cjs.map +1 -0
  576. package/dist/packages/agent-runtime/src/tool-metadata.js +1802 -0
  577. package/dist/packages/agent-runtime/src/tool-metadata.js.map +1 -0
  578. package/dist/packages/agent-runtime/src/tool-outputs.cjs +46 -0
  579. package/dist/packages/agent-runtime/src/tool-outputs.cjs.map +1 -0
  580. package/dist/packages/agent-runtime/src/tool-outputs.js +46 -0
  581. package/dist/packages/agent-runtime/src/tool-outputs.js.map +1 -0
  582. package/dist/packages/agent-runtime/src/tool-result.cjs +151 -0
  583. package/dist/packages/agent-runtime/src/tool-result.cjs.map +1 -0
  584. package/dist/packages/agent-runtime/src/tool-result.js +151 -0
  585. package/dist/packages/agent-runtime/src/tool-result.js.map +1 -0
  586. package/dist/packages/agent-runtime/src/use-conversation-list.cjs +139 -0
  587. package/dist/packages/agent-runtime/src/use-conversation-list.cjs.map +1 -0
  588. package/dist/packages/agent-runtime/src/use-conversation-list.js +139 -0
  589. package/dist/packages/agent-runtime/src/use-conversation-list.js.map +1 -0
  590. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs +28 -0
  591. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -0
  592. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js +28 -0
  593. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -0
  594. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs +138 -0
  595. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -0
  596. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js +138 -0
  597. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js.map +1 -0
  598. package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs +387 -0
  599. package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -0
  600. package/dist/packages/agent-runtime/src/use-deep-agent-thread.js +387 -0
  601. package/dist/packages/agent-runtime/src/use-deep-agent-thread.js.map +1 -0
  602. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs +133 -0
  603. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -0
  604. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js +133 -0
  605. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js.map +1 -0
  606. package/dist/packages/agent-runtime/src/voice-presentation.cjs +37 -0
  607. package/dist/packages/agent-runtime/src/voice-presentation.cjs.map +1 -0
  608. package/dist/packages/agent-runtime/src/voice-presentation.js +37 -0
  609. package/dist/packages/agent-runtime/src/voice-presentation.js.map +1 -0
  610. package/dist/packages/react/package.json.cjs +9 -0
  611. package/dist/packages/react/package.json.cjs.map +1 -0
  612. package/dist/packages/react/package.json.js +9 -0
  613. package/dist/packages/react/package.json.js.map +1 -0
  614. package/dist/{AthenaContext-B1QMhIP-.cjs → provider/AthenaContext.cjs} +5 -4
  615. package/dist/provider/AthenaContext.cjs.map +1 -0
  616. package/dist/{AthenaContext-MOslgOmE.js → provider/AthenaContext.js} +3 -3
  617. package/dist/provider/AthenaContext.js.map +1 -0
  618. package/dist/provider/AthenaProvider.cjs +403 -0
  619. package/dist/provider/AthenaProvider.cjs.map +1 -0
  620. package/dist/provider/AthenaProvider.js +403 -0
  621. package/dist/provider/AthenaProvider.js.map +1 -0
  622. package/dist/provider/PostHogProvider.cjs +81 -0
  623. package/dist/provider/PostHogProvider.cjs.map +1 -0
  624. package/dist/provider/PostHogProvider.js +59 -0
  625. package/dist/provider/PostHogProvider.js.map +1 -0
  626. package/dist/provider/config.d.ts +8 -7
  627. package/dist/provider/statewire-lifecycle-context.cjs +10 -0
  628. package/dist/provider/statewire-lifecycle-context.cjs.map +1 -0
  629. package/dist/provider/statewire-lifecycle-context.js +10 -0
  630. package/dist/provider/statewire-lifecycle-context.js.map +1 -0
  631. package/dist/provider/statewire-window-context.cjs +10 -0
  632. package/dist/provider/statewire-window-context.cjs.map +1 -0
  633. package/dist/provider/statewire-window-context.js +10 -0
  634. package/dist/provider/statewire-window-context.js.map +1 -0
  635. package/dist/runtime/auth.cjs +309 -0
  636. package/dist/runtime/auth.cjs.map +1 -0
  637. package/dist/runtime/auth.d.ts +19 -18
  638. package/dist/runtime/auth.js +309 -0
  639. package/dist/runtime/auth.js.map +1 -0
  640. package/dist/runtime/statewire-auth-headers.cjs +18 -0
  641. package/dist/runtime/statewire-auth-headers.cjs.map +1 -0
  642. package/dist/runtime/statewire-auth-headers.js +18 -0
  643. package/dist/runtime/statewire-auth-headers.js.map +1 -0
  644. package/dist/runtime/statewire-lifecycle.cjs +67 -0
  645. package/dist/runtime/statewire-lifecycle.cjs.map +1 -0
  646. package/dist/runtime/statewire-lifecycle.js +67 -0
  647. package/dist/runtime/statewire-lifecycle.js.map +1 -0
  648. package/dist/runtime/statewire-run-config.cjs +68 -0
  649. package/dist/runtime/statewire-run-config.cjs.map +1 -0
  650. package/dist/runtime/statewire-run-config.js +68 -0
  651. package/dist/runtime/statewire-run-config.js.map +1 -0
  652. package/dist/runtime/statewire-session-key.cjs +11 -0
  653. package/dist/runtime/statewire-session-key.cjs.map +1 -0
  654. package/dist/runtime/statewire-session-key.js +11 -0
  655. package/dist/runtime/statewire-session-key.js.map +1 -0
  656. package/dist/runtime/useAthenaStatewireRuntime.cjs +179 -0
  657. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -0
  658. package/dist/runtime/useAthenaStatewireRuntime.js +180 -0
  659. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -0
  660. package/dist/styles.css +1 -1
  661. package/dist/theme/index.cjs +182 -0
  662. package/dist/theme/index.cjs.map +1 -0
  663. package/dist/theme/index.js +182 -0
  664. package/dist/theme/index.js.map +1 -0
  665. package/dist/threads/ThreadList.cjs +55 -0
  666. package/dist/threads/ThreadList.cjs.map +1 -0
  667. package/dist/threads/ThreadList.js +55 -0
  668. package/dist/threads/ThreadList.js.map +1 -0
  669. package/dist/threads/api.cjs +208 -0
  670. package/dist/threads/api.cjs.map +1 -0
  671. package/dist/threads/api.js +208 -0
  672. package/dist/threads/api.js.map +1 -0
  673. package/dist/threads/conversation-list-fetcher.cjs +70 -0
  674. package/dist/threads/conversation-list-fetcher.cjs.map +1 -0
  675. package/dist/threads/conversation-list-fetcher.js +70 -0
  676. package/dist/threads/conversation-list-fetcher.js.map +1 -0
  677. package/dist/threads/mint-thread-id.cjs +7 -0
  678. package/dist/threads/mint-thread-id.cjs.map +1 -0
  679. package/dist/threads/mint-thread-id.js +7 -0
  680. package/dist/threads/mint-thread-id.js.map +1 -0
  681. package/dist/threads/statewire-thread-list.cjs +231 -0
  682. package/dist/threads/statewire-thread-list.cjs.map +1 -0
  683. package/dist/threads/statewire-thread-list.js +231 -0
  684. package/dist/threads/statewire-thread-list.js.map +1 -0
  685. package/dist/threads/thread-id-context.cjs +22 -0
  686. package/dist/threads/thread-id-context.cjs.map +1 -0
  687. package/dist/threads/thread-id-context.d.ts +9 -0
  688. package/dist/threads/thread-id-context.js +22 -0
  689. package/dist/threads/thread-id-context.js.map +1 -0
  690. package/dist/threads/title.cjs +95 -0
  691. package/dist/threads/title.cjs.map +1 -0
  692. package/dist/threads/title.js +95 -0
  693. package/dist/threads/title.js.map +1 -0
  694. package/dist/threads/use-rest-conversation-history.cjs +79 -0
  695. package/dist/threads/use-rest-conversation-history.cjs.map +1 -0
  696. package/dist/threads/use-rest-conversation-history.js +79 -0
  697. package/dist/threads/use-rest-conversation-history.js.map +1 -0
  698. package/dist/threads/use-statewire-conversation-history.cjs +243 -0
  699. package/dist/threads/use-statewire-conversation-history.cjs.map +1 -0
  700. package/dist/threads/use-statewire-conversation-history.js +243 -0
  701. package/dist/threads/use-statewire-conversation-history.js.map +1 -0
  702. package/dist/threads/useAthenaThreadManager.cjs +24 -0
  703. package/dist/threads/useAthenaThreadManager.cjs.map +1 -0
  704. package/dist/threads/useAthenaThreadManager.js +24 -0
  705. package/dist/threads/useAthenaThreadManager.js.map +1 -0
  706. package/dist/toolkits/index.cjs +279 -0
  707. package/dist/toolkits/index.cjs.map +1 -0
  708. package/dist/toolkits/index.js +279 -0
  709. package/dist/toolkits/index.js.map +1 -0
  710. package/dist/tools/NestedPtcMessages.cjs +46 -0
  711. package/dist/tools/NestedPtcMessages.cjs.map +1 -0
  712. package/dist/tools/NestedPtcMessages.js +46 -0
  713. package/dist/tools/NestedPtcMessages.js.map +1 -0
  714. package/dist/tools/append-document-tool-ui.cjs +145 -0
  715. package/dist/tools/append-document-tool-ui.cjs.map +1 -0
  716. package/dist/tools/append-document-tool-ui.js +145 -0
  717. package/dist/tools/append-document-tool-ui.js.map +1 -0
  718. package/dist/tools/asset-utils.cjs +16 -0
  719. package/dist/tools/asset-utils.cjs.map +1 -0
  720. package/dist/tools/asset-utils.js +16 -0
  721. package/dist/tools/asset-utils.js.map +1 -0
  722. package/dist/tools/auto-open-tools.cjs +121 -0
  723. package/dist/tools/auto-open-tools.cjs.map +1 -0
  724. package/dist/tools/auto-open-tools.js +121 -0
  725. package/dist/tools/auto-open-tools.js.map +1 -0
  726. package/dist/tools/file-tool-uis.cjs +108 -0
  727. package/dist/tools/file-tool-uis.cjs.map +1 -0
  728. package/dist/tools/file-tool-uis.js +108 -0
  729. package/dist/tools/file-tool-uis.js.map +1 -0
  730. package/dist/tools/index.cjs +56 -0
  731. package/dist/tools/index.cjs.map +1 -0
  732. package/dist/tools/index.d.ts +1 -0
  733. package/dist/tools/index.js +56 -0
  734. package/dist/tools/index.js.map +1 -0
  735. package/dist/tools/misc-tool-uis.cjs +54 -0
  736. package/dist/tools/misc-tool-uis.cjs.map +1 -0
  737. package/dist/{misc-tool-uis-gAiQw0Yl.js → tools/misc-tool-uis.js} +17 -7
  738. package/dist/tools/misc-tool-uis.js.map +1 -0
  739. package/dist/tools/primitives.cjs +166 -0
  740. package/dist/tools/primitives.cjs.map +1 -0
  741. package/dist/tools/primitives.js +166 -0
  742. package/dist/tools/primitives.js.map +1 -0
  743. package/dist/tools/read-asset-tool-ui.cjs +284 -0
  744. package/dist/tools/read-asset-tool-ui.cjs.map +1 -0
  745. package/dist/tools/read-asset-tool-ui.js +284 -0
  746. package/dist/tools/read-asset-tool-ui.js.map +1 -0
  747. package/dist/tools/todo-plan-store.cjs +88 -0
  748. package/dist/tools/todo-plan-store.cjs.map +1 -0
  749. package/dist/tools/todo-plan-store.js +88 -0
  750. package/dist/tools/todo-plan-store.js.map +1 -0
  751. package/dist/tools/tool-fallback.cjs +667 -0
  752. package/dist/tools/tool-fallback.cjs.map +1 -0
  753. package/dist/tools/tool-fallback.js +667 -0
  754. package/dist/tools/tool-fallback.js.map +1 -0
  755. package/dist/tools/tool-icons.cjs +61 -0
  756. package/dist/tools/tool-icons.cjs.map +1 -0
  757. package/dist/tools/tool-icons.js +61 -0
  758. package/dist/tools/tool-icons.js.map +1 -0
  759. package/dist/tools/tool-uis.cjs +3049 -0
  760. package/dist/tools/tool-uis.cjs.map +1 -0
  761. package/dist/tools/tool-uis.js +3049 -0
  762. package/dist/tools/tool-uis.js.map +1 -0
  763. package/dist/tools/voice-update-tool-ui.cjs +89 -0
  764. package/dist/tools/voice-update-tool-ui.cjs.map +1 -0
  765. package/dist/tools/voice-update-tool-ui.d.ts +27 -0
  766. package/dist/tools/voice-update-tool-ui.js +89 -0
  767. package/dist/tools/voice-update-tool-ui.js.map +1 -0
  768. package/dist/tools/write-todos-tool-ui.cjs +270 -0
  769. package/dist/tools/write-todos-tool-ui.cjs.map +1 -0
  770. package/dist/tools/write-todos-tool-ui.js +270 -0
  771. package/dist/tools/write-todos-tool-ui.js.map +1 -0
  772. package/dist/ui/button.cjs +57 -0
  773. package/dist/ui/button.cjs.map +1 -0
  774. package/dist/ui/button.js +57 -0
  775. package/dist/ui/button.js.map +1 -0
  776. package/dist/ui/collapsible.cjs +17 -0
  777. package/dist/ui/collapsible.cjs.map +1 -0
  778. package/dist/ui/collapsible.js +17 -0
  779. package/dist/ui/collapsible.js.map +1 -0
  780. package/dist/ui/tooltip.cjs +48 -0
  781. package/dist/ui/tooltip.cjs.map +1 -0
  782. package/dist/ui/tooltip.js +48 -0
  783. package/dist/ui/tooltip.js.map +1 -0
  784. package/dist/version.cjs +6 -0
  785. package/dist/version.cjs.map +1 -0
  786. package/dist/version.js +6 -0
  787. package/dist/version.js.map +1 -0
  788. package/package.json +18 -20
  789. package/dist/AthenaAuthContext-B3AwLA5Z.cjs.map +0 -1
  790. package/dist/AthenaAuthContext-DQsdayH2.js.map +0 -1
  791. package/dist/AthenaContext-B1QMhIP-.cjs.map +0 -1
  792. package/dist/AthenaContext-MOslgOmE.js.map +0 -1
  793. package/dist/SuperGroupingCard-BsWbHyV_.js +0 -795
  794. package/dist/SuperGroupingCard-BsWbHyV_.js.map +0 -1
  795. package/dist/SuperGroupingCard-CRRFUgjN.cjs +0 -794
  796. package/dist/SuperGroupingCard-CRRFUgjN.cjs.map +0 -1
  797. package/dist/auth.cjs.map +0 -1
  798. package/dist/auth.js.map +0 -1
  799. package/dist/chat/ComposerEditorContext.d.ts +0 -36
  800. package/dist/chat/tiptap-composer.d.ts +0 -7
  801. package/dist/chat-ui-statewire.cjs +0 -25
  802. package/dist/chat-ui-statewire.cjs.map +0 -1
  803. package/dist/chat-ui-statewire.js +0 -25
  804. package/dist/chat-ui-statewire.js.map +0 -1
  805. package/dist/chat-ui.cjs +0 -2484
  806. package/dist/chat-ui.cjs.map +0 -1
  807. package/dist/chat-ui.js +0 -2486
  808. package/dist/chat-ui.js.map +0 -1
  809. package/dist/collab.cjs.map +0 -1
  810. package/dist/collab.js.map +0 -1
  811. package/dist/mentions/composer-keybinds.d.ts +0 -5
  812. package/dist/mentions/mention-extension.d.ts +0 -6
  813. package/dist/mentions/mention-icons.d.ts +0 -4
  814. package/dist/mentions/mention-node-view.d.ts +0 -2
  815. package/dist/mentions/mention-suggestion-list.d.ts +0 -14
  816. package/dist/mentions/mention-suggestion-popup.d.ts +0 -15
  817. package/dist/mentions/mention-suggestions-extension.d.ts +0 -11
  818. package/dist/mentions/mention-types.d.ts +0 -21
  819. package/dist/mentions/mention-utils.d.ts +0 -23
  820. package/dist/mentions/use-mention-suggestions.d.ts +0 -29
  821. package/dist/misc-tool-uis-B2e0Okkn.cjs +0 -43
  822. package/dist/misc-tool-uis-B2e0Okkn.cjs.map +0 -1
  823. package/dist/misc-tool-uis-gAiQw0Yl.js.map +0 -1
  824. package/dist/statewire-continue-run-D34gS7_1.js.map +0 -1
  825. package/dist/statewire-continue-run-nE9VCKUh.cjs.map +0 -1
  826. package/dist/statewire-history-edge-C8uyTEjX.cjs +0 -1711
  827. package/dist/statewire-history-edge-C8uyTEjX.cjs.map +0 -1
  828. package/dist/statewire-history-edge-CPohUKMt.js +0 -1712
  829. package/dist/statewire-history-edge-CPohUKMt.js.map +0 -1
  830. package/dist/super-grouping.cjs +0 -22
  831. package/dist/super-grouping.cjs.map +0 -1
  832. package/dist/super-grouping.js +0 -22
  833. package/dist/super-grouping.js.map +0 -1
  834. package/dist/tool-fallback-DkQ3DLkn.js +0 -4281
  835. package/dist/tool-fallback-DkQ3DLkn.js.map +0 -1
  836. package/dist/tool-fallback-kfhpJQZa.cjs +0 -4297
  837. package/dist/tool-fallback-kfhpJQZa.cjs.map +0 -1
  838. package/dist/tools.cjs +0 -41
  839. package/dist/tools.cjs.map +0 -1
  840. package/dist/tools.js +0 -41
  841. package/dist/tools.js.map +0 -1
  842. package/dist/trash-2-B5OaNAL7.cjs +0 -5096
  843. package/dist/trash-2-B5OaNAL7.cjs.map +0 -1
  844. package/dist/trash-2-CCwSURL-.js +0 -5081
  845. package/dist/trash-2-CCwSURL-.js.map +0 -1
  846. package/dist/use-rest-conversation-history-Cm8qMRxp.cjs +0 -32397
  847. package/dist/use-rest-conversation-history-Cm8qMRxp.cjs.map +0 -1
  848. package/dist/use-rest-conversation-history-veDZS-oL.js +0 -32361
  849. package/dist/use-rest-conversation-history-veDZS-oL.js.map +0 -1
  850. package/dist/wrench-BEf72cyP.cjs +0 -417
  851. package/dist/wrench-BEf72cyP.cjs.map +0 -1
  852. package/dist/wrench-CbrOlVYm.js +0 -418
  853. package/dist/wrench-CbrOlVYm.js.map +0 -1
  854. package/dist/x-Dfd2NzK0.cjs +0 -42
  855. package/dist/x-Dfd2NzK0.cjs.map +0 -1
  856. package/dist/x-_DntAa_a.js +0 -43
  857. package/dist/x-_DntAa_a.js.map +0 -1
@@ -0,0 +1,284 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { memo, useState, useMemo } from "react";
3
+ import { LoaderIcon, AlertCircleIcon, BookOpenIcon, CheckCircle2Icon, FileTextIcon, ChevronDownIcon } from "lucide-react";
4
+ import { getAssetInfo, tryParseJson } from "./asset-utils.js";
5
+ import { cn } from "cnfast";
6
+ function normalizeResult(result) {
7
+ if (typeof result === "string") return tryParseJson(result) ?? result;
8
+ if (typeof result === "object" && result !== null) {
9
+ const obj = result;
10
+ if (typeof obj.result === "string")
11
+ return tryParseJson(obj.result) ?? obj.result;
12
+ return obj;
13
+ }
14
+ return result;
15
+ }
16
+ function isErrorResult(resultText) {
17
+ return resultText.startsWith("Error reading asset") || resultText.startsWith("Error:");
18
+ }
19
+ function isReadAssetResultItem(value) {
20
+ if (!value || typeof value !== "object") return false;
21
+ const item = value;
22
+ return typeof item.asset_id === "string" || typeof item.format === "string" || typeof item.content === "string" || typeof item.success === "boolean" || typeof item.error === "string";
23
+ }
24
+ function getResultItems(value) {
25
+ if (Array.isArray(value)) return value.filter(isReadAssetResultItem);
26
+ if (isReadAssetResultItem(value)) return [value];
27
+ return [];
28
+ }
29
+ function getResultAssetIds(items) {
30
+ return items.map((item) => {
31
+ var _a;
32
+ return (_a = item.asset_id) == null ? void 0 : _a.split("?")[0];
33
+ }).filter((assetId) => !!assetId);
34
+ }
35
+ function getReviewedText(items) {
36
+ const textParts = items.filter(
37
+ (item) => item.success !== false && typeof item.content === "string" && item.content
38
+ ).map((item) => item.content);
39
+ return textParts.length > 0 ? textParts.join("\n\n---\n\n") : null;
40
+ }
41
+ function getErrorText(items) {
42
+ const firstError = items.find((item) => item.success === false && item.error);
43
+ return (firstError == null ? void 0 : firstError.error) ?? null;
44
+ }
45
+ function isWorkbookFormat(value) {
46
+ if (!value || typeof value !== "object") return false;
47
+ const obj = value;
48
+ if (!obj.workbook || typeof obj.workbook !== "object") return false;
49
+ const workbook = obj.workbook;
50
+ return Array.isArray(workbook.sheets);
51
+ }
52
+ function parseA1Range(range) {
53
+ const match = range.match(/^([A-Z]+)(\d+)(?::([A-Z]+)(\d+))?$/i);
54
+ if (!match) return null;
55
+ const colToNumber = (letters) => letters.toUpperCase().split("").reduce((acc, char) => acc * 26 + (char.charCodeAt(0) - 64), 0);
56
+ return {
57
+ startCol: colToNumber(match[1]),
58
+ startRow: Number.parseInt(match[2], 10),
59
+ endCol: match[3] ? colToNumber(match[3]) : colToNumber(match[1]),
60
+ endRow: match[4] ? Number.parseInt(match[4], 10) : Number.parseInt(match[2], 10)
61
+ };
62
+ }
63
+ function numberToColumn(index) {
64
+ let n = index;
65
+ let output = "";
66
+ while (n > 0) {
67
+ const remainder = (n - 1) % 26;
68
+ output = String.fromCharCode(65 + remainder) + output;
69
+ n = Math.floor((n - 1) / 26);
70
+ }
71
+ return output;
72
+ }
73
+ function formatCellValue(value) {
74
+ if (value === null || value === void 0) return "";
75
+ if (Array.isArray(value)) return String(value[0] ?? "");
76
+ return String(value);
77
+ }
78
+ function WorkbookPreview({ workbook }) {
79
+ return /* @__PURE__ */ jsx("div", { className: "space-y-3", children: workbook.workbook.sheets.map((sheet) => {
80
+ const parsedRange = parseA1Range(sheet.dimension);
81
+ if (!parsedRange) return null;
82
+ const maxRows = Math.min(
83
+ parsedRange.endRow - parsedRange.startRow + 1,
84
+ 12
85
+ );
86
+ const maxCols = Math.min(
87
+ parsedRange.endCol - parsedRange.startCol + 1,
88
+ 8
89
+ );
90
+ const header = [
91
+ "",
92
+ ...Array.from(
93
+ { length: maxCols },
94
+ (_, idx) => numberToColumn(parsedRange.startCol + idx)
95
+ )
96
+ ];
97
+ const dataRows = [];
98
+ for (let row = 0; row < maxRows; row++) {
99
+ const rowNumber = parsedRange.startRow + row;
100
+ const values = [String(rowNumber)];
101
+ for (let col = 0; col < maxCols; col++) {
102
+ const colLabel = numberToColumn(parsedRange.startCol + col);
103
+ values.push(
104
+ formatCellValue(sheet.cells[`${colLabel}${rowNumber}`])
105
+ );
106
+ }
107
+ dataRows.push(values);
108
+ }
109
+ return /* @__PURE__ */ jsxs("div", { children: [
110
+ /* @__PURE__ */ jsx("p", { className: "mb-1 text-xs font-semibold text-muted-foreground", children: sheet.sheetName }),
111
+ /* @__PURE__ */ jsx("div", { className: "overflow-x-auto rounded-md border", children: /* @__PURE__ */ jsx("table", { className: "w-full border-collapse text-[11px]", children: /* @__PURE__ */ jsxs("tbody", { children: [
112
+ /* @__PURE__ */ jsx("tr", { children: header.map((cell, i) => /* @__PURE__ */ jsx(
113
+ "th",
114
+ {
115
+ className: "border bg-muted px-2 py-1 text-left font-medium text-muted-foreground",
116
+ children: cell
117
+ },
118
+ i
119
+ )) }),
120
+ dataRows.map((row, rowIdx) => /* @__PURE__ */ jsx("tr", { children: row.map(
121
+ (cell, cellIdx) => cellIdx === 0 ? /* @__PURE__ */ jsx(
122
+ "th",
123
+ {
124
+ className: "border bg-muted px-2 py-1 text-left font-medium text-muted-foreground",
125
+ children: cell
126
+ },
127
+ cellIdx
128
+ ) : /* @__PURE__ */ jsx("td", { className: "border px-2 py-1", children: cell }, cellIdx)
129
+ ) }, rowIdx))
130
+ ] }) }) }),
131
+ /* @__PURE__ */ jsxs("p", { className: "mt-1 text-[10px] text-muted-foreground", children: [
132
+ "Showing preview from ",
133
+ sheet.dimension
134
+ ] })
135
+ ] }, sheet.sheetName);
136
+ }) });
137
+ }
138
+ function TextContentPreview({ text }) {
139
+ const lines = text.split("\n");
140
+ const previewLines = lines.slice(0, 20);
141
+ const hasMore = lines.length > 20;
142
+ return /* @__PURE__ */ jsxs("pre", { className: "whitespace-pre-wrap break-words text-[12px] leading-[1.6] text-muted-foreground", children: [
143
+ previewLines.join("\n"),
144
+ hasMore && /* @__PURE__ */ jsx("span", { className: "text-muted-foreground/70", children: `
145
+ ... ${lines.length - 20} more lines` })
146
+ ] });
147
+ }
148
+ const ReadAssetToolUIImpl = ({
149
+ args,
150
+ result,
151
+ status,
152
+ isError: isToolError
153
+ }) => {
154
+ var _a;
155
+ const [expanded, setExpanded] = useState(false);
156
+ const typedArgs = args;
157
+ const assetIds = (typedArgs == null ? void 0 : typedArgs.asset_ids) ?? [];
158
+ const firstAssetId = assetIds[0] ?? "";
159
+ const assetCount = assetIds.length;
160
+ const normalizedResult = useMemo(() => normalizeResult(result), [result]);
161
+ const resultItems = useMemo(
162
+ () => getResultItems(normalizedResult),
163
+ [normalizedResult]
164
+ );
165
+ const isRunning = (status == null ? void 0 : status.type) === "running";
166
+ const isComplete = (status == null ? void 0 : status.type) === "complete";
167
+ const isIncomplete = (status == null ? void 0 : status.type) === "incomplete";
168
+ const reviewedText = useMemo(
169
+ () => getReviewedText(resultItems),
170
+ [resultItems]
171
+ );
172
+ const resultText = typeof normalizedResult === "string" ? normalizedResult : reviewedText;
173
+ const workbookData = isWorkbookFormat(normalizedResult) ? normalizedResult : null;
174
+ const failedItems = resultItems.filter((item) => item.success === false);
175
+ const allFailed = resultItems.length > 0 && failedItems.length === resultItems.length;
176
+ const hasPartialIssues = failedItems.length > 0 && !allFailed;
177
+ const resultError = getErrorText(resultItems);
178
+ const hasError = isToolError || isIncomplete || allFailed || resultText != null && isErrorResult(resultText);
179
+ const resultAssetIds = getResultAssetIds(resultItems);
180
+ const resolvedAssetCount = Math.max(assetCount, new Set(resultAssetIds).size);
181
+ const primaryAsset = getAssetInfo(firstAssetId || resultAssetIds[0] || "");
182
+ const resultTitle = (_a = resultItems.find((item) => item.title)) == null ? void 0 : _a.title;
183
+ const isOpaqueId = (label) => /^asset_[0-9a-f-]{8,}/i.test(label);
184
+ const primaryLabel = resultTitle ?? (isOpaqueId(primaryAsset.name) ? "1 document" : primaryAsset.name);
185
+ const sourceList = resolvedAssetCount > 1 ? resultItems.filter((item) => typeof item.title === "string" && item.title !== "").map((item, index) => ({
186
+ key: item.asset_id ?? `${index}-${item.title}`,
187
+ label: item.title,
188
+ failed: item.success === false
189
+ })) : [];
190
+ const assetLabel = resolvedAssetCount > 1 ? `${resolvedAssetCount} documents` : primaryLabel;
191
+ const statusTitle = isRunning ? "Reviewing asset content" : hasError ? "Asset content review failed" : hasPartialIssues ? "Asset content reviewed with issues" : "Asset content review complete";
192
+ const badge = hasPartialIssues ? `${failedItems.length} ${failedItems.length === 1 ? "issue" : "issues"}` : resolvedAssetCount > 1 ? `${resolvedAssetCount} sources` : workbookData ? "Workbook review" : "Content review";
193
+ const hasContent = (isComplete || isIncomplete) && (resultText || workbookData);
194
+ const errorMessage = (status == null ? void 0 : status.type) === "incomplete" ? String(status.error ?? "Content review failed") : resultError ?? (hasError && resultText ? resultText : null);
195
+ return /* @__PURE__ */ jsxs("div", { className: "my-1.5 w-full overflow-hidden rounded-xl border bg-background shadow-sm", children: [
196
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 px-4 py-3", children: [
197
+ /* @__PURE__ */ jsx(
198
+ "div",
199
+ {
200
+ className: cn(
201
+ "flex size-9 shrink-0 items-center justify-center rounded-lg",
202
+ isRunning && "bg-blue-50 text-blue-600",
203
+ isComplete && !hasError && "bg-emerald-50 text-emerald-600",
204
+ isComplete && hasError && "bg-red-50 text-red-500",
205
+ isIncomplete && "bg-red-50 text-red-500",
206
+ !isRunning && !isComplete && !isIncomplete && "bg-muted text-muted-foreground"
207
+ ),
208
+ children: isRunning ? /* @__PURE__ */ jsx(LoaderIcon, { className: "size-4 animate-spin" }) : hasError || isIncomplete ? /* @__PURE__ */ jsx(AlertCircleIcon, { className: "size-4" }) : /* @__PURE__ */ jsx(BookOpenIcon, { className: "size-4" })
209
+ }
210
+ ),
211
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
212
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
213
+ /* @__PURE__ */ jsx("span", { className: "text-[13px] font-semibold", children: statusTitle }),
214
+ isComplete && !hasError && /* @__PURE__ */ jsx(CheckCircle2Icon, { className: "size-3.5 text-emerald-500" }),
215
+ /* @__PURE__ */ jsx("span", { className: "rounded-full border border-border/60 bg-muted/50 px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground", children: badge })
216
+ ] }),
217
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
218
+ /* @__PURE__ */ jsx(FileTextIcon, { className: "size-4" }),
219
+ /* @__PURE__ */ jsxs("span", { className: "truncate text-[12px] text-muted-foreground", children: [
220
+ "Source: ",
221
+ assetLabel
222
+ ] })
223
+ ] })
224
+ ] }),
225
+ isRunning && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
226
+ /* @__PURE__ */ jsx("div", { className: "h-1.5 w-12 animate-pulse rounded-full bg-blue-100" }),
227
+ /* @__PURE__ */ jsx("div", { className: "h-1.5 w-8 animate-pulse rounded-full bg-blue-100" })
228
+ ] })
229
+ ] }),
230
+ sourceList.length > 1 && /* @__PURE__ */ jsxs("ul", { className: "border-t px-4 py-2", children: [
231
+ sourceList.slice(0, 8).map((source) => /* @__PURE__ */ jsxs(
232
+ "li",
233
+ {
234
+ className: "flex items-center gap-2 py-0.5 text-[12px] text-muted-foreground",
235
+ children: [
236
+ source.failed ? /* @__PURE__ */ jsx(AlertCircleIcon, { className: "size-3.5 shrink-0 text-red-400" }) : /* @__PURE__ */ jsx(CheckCircle2Icon, { className: "size-3.5 shrink-0 text-emerald-500" }),
237
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", children: source.label })
238
+ ]
239
+ },
240
+ source.key
241
+ )),
242
+ sourceList.length > 8 && /* @__PURE__ */ jsxs("li", { className: "py-0.5 text-[11px] text-muted-foreground/70", children: [
243
+ "and ",
244
+ sourceList.length - 8,
245
+ " more"
246
+ ] })
247
+ ] }),
248
+ hasError && errorMessage && /* @__PURE__ */ jsx("div", { className: "border-t bg-red-50/50 px-4 py-2.5", children: /* @__PURE__ */ jsx("p", { className: "text-[12px] leading-relaxed text-red-600", children: errorMessage }) }),
249
+ hasContent && !hasError && /* @__PURE__ */ jsxs("div", { className: "border-t", children: [
250
+ /* @__PURE__ */ jsxs(
251
+ "button",
252
+ {
253
+ type: "button",
254
+ onClick: () => setExpanded(!expanded),
255
+ className: "flex w-full items-center gap-2 px-4 py-2 text-left text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/50",
256
+ children: [
257
+ /* @__PURE__ */ jsx(
258
+ ChevronDownIcon,
259
+ {
260
+ className: cn(
261
+ "size-3.5 shrink-0 transition-transform duration-200",
262
+ !expanded && "-rotate-90"
263
+ )
264
+ }
265
+ ),
266
+ /* @__PURE__ */ jsx("span", { children: expanded ? "Hide reviewed content" : "Show reviewed content" })
267
+ ]
268
+ }
269
+ ),
270
+ expanded && /* @__PURE__ */ jsxs("div", { className: "max-h-80 overflow-y-auto border-t bg-muted/30 px-4 py-3", children: [
271
+ /* @__PURE__ */ jsx("div", { className: "mb-2 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground", children: "Reviewed content" }),
272
+ workbookData ? /* @__PURE__ */ jsx(WorkbookPreview, { workbook: workbookData }) : resultText ? /* @__PURE__ */ jsx(TextContentPreview, { text: resultText }) : null
273
+ ] })
274
+ ] })
275
+ ] });
276
+ };
277
+ const ReadAssetToolUI = memo(
278
+ ReadAssetToolUIImpl
279
+ );
280
+ ReadAssetToolUI.displayName = "ReadAssetToolUI";
281
+ export {
282
+ ReadAssetToolUI
283
+ };
284
+ //# sourceMappingURL=read-asset-tool-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-asset-tool-ui.js","sources":["../../src/tools/read-asset-tool-ui.tsx"],"sourcesContent":["import { memo, useMemo, useState } from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport {\n CheckCircle2Icon,\n ChevronDownIcon,\n FileTextIcon,\n LoaderIcon,\n AlertCircleIcon,\n BookOpenIcon,\n} from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { getAssetInfo, tryParseJson } from \"./asset-utils\";\n\nfunction normalizeResult(result: unknown): unknown {\n if (typeof result === \"string\") return tryParseJson(result) ?? result;\n if (typeof result === \"object\" && result !== null) {\n const obj = result as Record<string, unknown>;\n if (typeof obj.result === \"string\")\n return tryParseJson(obj.result) ?? obj.result;\n return obj;\n }\n return result;\n}\n\nfunction isErrorResult(resultText: string): boolean {\n return (\n resultText.startsWith(\"Error reading asset\") ||\n resultText.startsWith(\"Error:\")\n );\n}\n\ninterface ReadAssetResultItem {\n asset_id?: string;\n format?: string;\n content?: string;\n success?: boolean;\n error?: string;\n title?: string;\n}\n\nfunction isReadAssetResultItem(value: unknown): value is ReadAssetResultItem {\n if (!value || typeof value !== \"object\") return false;\n const item = value as Record<string, unknown>;\n return (\n typeof item.asset_id === \"string\" ||\n typeof item.format === \"string\" ||\n typeof item.content === \"string\" ||\n typeof item.success === \"boolean\" ||\n typeof item.error === \"string\"\n );\n}\n\nfunction getResultItems(value: unknown): ReadAssetResultItem[] {\n if (Array.isArray(value)) return value.filter(isReadAssetResultItem);\n if (isReadAssetResultItem(value)) return [value];\n return [];\n}\n\nfunction getResultAssetIds(items: ReadAssetResultItem[]): string[] {\n return items\n .map((item) => item.asset_id?.split(\"?\")[0])\n .filter((assetId): assetId is string => !!assetId);\n}\n\nfunction getReviewedText(items: ReadAssetResultItem[]): string | null {\n const textParts = items\n .filter(\n (item) =>\n item.success !== false &&\n typeof item.content === \"string\" &&\n item.content,\n )\n .map((item) => item.content as string);\n return textParts.length > 0 ? textParts.join(\"\\n\\n---\\n\\n\") : null;\n}\n\nfunction getErrorText(items: ReadAssetResultItem[]): string | null {\n const firstError = items.find((item) => item.success === false && item.error);\n return firstError?.error ?? null;\n}\n\n// --- Workbook preview ---\n\ntype WorkbookCellValue =\n | string\n | number\n | boolean\n | null\n | [string, unknown]\n | [string, unknown, string];\n\ninterface WorkbookSheet {\n sheetName: string;\n dimension: string;\n cells: Record<string, WorkbookCellValue>;\n}\n\ninterface WorkbookFormat {\n workbook: {\n sheets: WorkbookSheet[];\n };\n}\n\nfunction isWorkbookFormat(value: unknown): value is WorkbookFormat {\n if (!value || typeof value !== \"object\") return false;\n const obj = value as Record<string, unknown>;\n if (!obj.workbook || typeof obj.workbook !== \"object\") return false;\n const workbook = obj.workbook as Record<string, unknown>;\n return Array.isArray(workbook.sheets);\n}\n\nfunction parseA1Range(range: string) {\n const match = range.match(/^([A-Z]+)(\\d+)(?::([A-Z]+)(\\d+))?$/i);\n if (!match) return null;\n const colToNumber = (letters: string) =>\n letters\n .toUpperCase()\n .split(\"\")\n .reduce((acc, char) => acc * 26 + (char.charCodeAt(0) - 64), 0);\n return {\n startCol: colToNumber(match[1]),\n startRow: Number.parseInt(match[2], 10),\n endCol: match[3] ? colToNumber(match[3]) : colToNumber(match[1]),\n endRow: match[4]\n ? Number.parseInt(match[4], 10)\n : Number.parseInt(match[2], 10),\n };\n}\n\nfunction numberToColumn(index: number): string {\n let n = index;\n let output = \"\";\n while (n > 0) {\n const remainder = (n - 1) % 26;\n output = String.fromCharCode(65 + remainder) + output;\n n = Math.floor((n - 1) / 26);\n }\n return output;\n}\n\nfunction formatCellValue(value: WorkbookCellValue): string {\n if (value === null || value === undefined) return \"\";\n if (Array.isArray(value)) return String(value[0] ?? \"\");\n return String(value);\n}\n\nfunction WorkbookPreview({ workbook }: { workbook: WorkbookFormat }) {\n return (\n <div className=\"space-y-3\">\n {workbook.workbook.sheets.map((sheet) => {\n const parsedRange = parseA1Range(sheet.dimension);\n if (!parsedRange) return null;\n\n const maxRows = Math.min(\n parsedRange.endRow - parsedRange.startRow + 1,\n 12,\n );\n const maxCols = Math.min(\n parsedRange.endCol - parsedRange.startCol + 1,\n 8,\n );\n const header = [\n \"\",\n ...Array.from({ length: maxCols }, (_, idx) =>\n numberToColumn(parsedRange.startCol + idx),\n ),\n ];\n const dataRows: string[][] = [];\n for (let row = 0; row < maxRows; row++) {\n const rowNumber = parsedRange.startRow + row;\n const values = [String(rowNumber)];\n for (let col = 0; col < maxCols; col++) {\n const colLabel = numberToColumn(parsedRange.startCol + col);\n values.push(\n formatCellValue(sheet.cells[`${colLabel}${rowNumber}`]),\n );\n }\n dataRows.push(values);\n }\n\n return (\n <div key={sheet.sheetName}>\n <p className=\"mb-1 text-xs font-semibold text-muted-foreground\">\n {sheet.sheetName}\n </p>\n <div className=\"overflow-x-auto rounded-md border\">\n <table className=\"w-full border-collapse text-[11px]\">\n <tbody>\n <tr>\n {header.map((cell, i) => (\n <th\n key={i}\n className=\"border bg-muted px-2 py-1 text-left font-medium text-muted-foreground\"\n >\n {cell}\n </th>\n ))}\n </tr>\n {dataRows.map((row, rowIdx) => (\n <tr key={rowIdx}>\n {row.map((cell, cellIdx) =>\n cellIdx === 0 ? (\n <th\n key={cellIdx}\n className=\"border bg-muted px-2 py-1 text-left font-medium text-muted-foreground\"\n >\n {cell}\n </th>\n ) : (\n <td key={cellIdx} className=\"border px-2 py-1\">\n {cell}\n </td>\n ),\n )}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n <p className=\"mt-1 text-[10px] text-muted-foreground\">\n Showing preview from {sheet.dimension}\n </p>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction TextContentPreview({ text }: { text: string }) {\n const lines = text.split(\"\\n\");\n const previewLines = lines.slice(0, 20);\n const hasMore = lines.length > 20;\n\n return (\n <pre className=\"whitespace-pre-wrap break-words text-[12px] leading-[1.6] text-muted-foreground\">\n {previewLines.join(\"\\n\")}\n {hasMore && (\n <span className=\"text-muted-foreground/70\">{`\\n... ${lines.length - 20} more lines`}</span>\n )}\n </pre>\n );\n}\n\n// --- Main component ---\n\nconst ReadAssetToolUIImpl: ToolCallMessagePartComponent = ({\n args,\n result,\n status,\n isError: isToolError,\n}) => {\n const [expanded, setExpanded] = useState(false);\n\n const typedArgs = args as Record<string, unknown> | undefined;\n const assetIds = (typedArgs?.asset_ids as string[]) ?? [];\n const firstAssetId = assetIds[0] ?? \"\";\n const assetCount = assetIds.length;\n\n const normalizedResult = useMemo(() => normalizeResult(result), [result]);\n const resultItems = useMemo(\n () => getResultItems(normalizedResult),\n [normalizedResult],\n );\n\n const isRunning = status?.type === \"running\";\n const isComplete = status?.type === \"complete\";\n const isIncomplete = status?.type === \"incomplete\";\n\n const reviewedText = useMemo(\n () => getReviewedText(resultItems),\n [resultItems],\n );\n const resultText =\n typeof normalizedResult === \"string\" ? normalizedResult : reviewedText;\n const workbookData = isWorkbookFormat(normalizedResult)\n ? normalizedResult\n : null;\n const failedItems = resultItems.filter((item) => item.success === false);\n const allFailed =\n resultItems.length > 0 && failedItems.length === resultItems.length;\n const hasPartialIssues = failedItems.length > 0 && !allFailed;\n const resultError = getErrorText(resultItems);\n const hasError =\n isToolError ||\n isIncomplete ||\n allFailed ||\n (resultText != null && isErrorResult(resultText));\n\n const resultAssetIds = getResultAssetIds(resultItems);\n const resolvedAssetCount = Math.max(assetCount, new Set(resultAssetIds).size);\n const primaryAsset = getAssetInfo(firstAssetId || resultAssetIds[0] || \"\");\n // Prefer human titles over raw asset ids — an `asset_<uuid>` label reads as\n // garble to non-technical users. Multi-reads get a per-source checklist of\n // titles below the header; when the runtime offloaded the result (no titles\n // survive, only ids), fall back to a plain count rather than a uuid.\n const resultTitle = resultItems.find((item) => item.title)?.title;\n const isOpaqueId = (label: string) => /^asset_[0-9a-f-]{8,}/i.test(label);\n const primaryLabel =\n resultTitle ??\n (isOpaqueId(primaryAsset.name) ? \"1 document\" : primaryAsset.name);\n const sourceList =\n resolvedAssetCount > 1\n ? resultItems\n .filter((item) => typeof item.title === \"string\" && item.title !== \"\")\n .map((item, index) => ({\n key: item.asset_id ?? `${index}-${item.title}`,\n label: item.title as string,\n failed: item.success === false,\n }))\n : [];\n const assetLabel =\n resolvedAssetCount > 1\n ? `${resolvedAssetCount} documents`\n : primaryLabel;\n const statusTitle = isRunning\n ? \"Reviewing asset content\"\n : hasError\n ? \"Asset content review failed\"\n : hasPartialIssues\n ? \"Asset content reviewed with issues\"\n : \"Asset content review complete\";\n const badge = hasPartialIssues\n ? `${failedItems.length} ${failedItems.length === 1 ? \"issue\" : \"issues\"}`\n : resolvedAssetCount > 1\n ? `${resolvedAssetCount} sources`\n : workbookData\n ? \"Workbook review\"\n : \"Content review\";\n\n const hasContent =\n (isComplete || isIncomplete) && (resultText || workbookData);\n const errorMessage =\n status?.type === \"incomplete\"\n ? String(status.error ?? \"Content review failed\")\n : (resultError ?? (hasError && resultText ? resultText : null));\n\n return (\n <div className=\"my-1.5 w-full overflow-hidden rounded-xl border bg-background shadow-sm\">\n {/* Header */}\n <div className=\"flex items-center gap-3 px-4 py-3\">\n <div\n className={cn(\n \"flex size-9 shrink-0 items-center justify-center rounded-lg\",\n isRunning && \"bg-blue-50 text-blue-600\",\n isComplete && !hasError && \"bg-emerald-50 text-emerald-600\",\n isComplete && hasError && \"bg-red-50 text-red-500\",\n isIncomplete && \"bg-red-50 text-red-500\",\n !isRunning &&\n !isComplete &&\n !isIncomplete &&\n \"bg-muted text-muted-foreground\",\n )}\n >\n {isRunning ? (\n <LoaderIcon className=\"size-4 animate-spin\" />\n ) : hasError || isIncomplete ? (\n <AlertCircleIcon className=\"size-4\" />\n ) : (\n <BookOpenIcon className=\"size-4\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[13px] font-semibold\">{statusTitle}</span>\n {isComplete && !hasError && (\n <CheckCircle2Icon className=\"size-3.5 text-emerald-500\" />\n )}\n <span className=\"rounded-full border border-border/60 bg-muted/50 px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {badge}\n </span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <FileTextIcon className=\"size-4\" />\n <span className=\"truncate text-[12px] text-muted-foreground\">\n Source: {assetLabel}\n </span>\n </div>\n </div>\n\n {/* Loading shimmer for streaming */}\n {isRunning && (\n <div className=\"flex items-center gap-1.5\">\n <div className=\"h-1.5 w-12 animate-pulse rounded-full bg-blue-100\" />\n <div className=\"h-1.5 w-8 animate-pulse rounded-full bg-blue-100\" />\n </div>\n )}\n </div>\n\n {/* Per-source checklist — actual titles with checkmarks (multi-read only;\n offloaded results carry no titles, so the header count stands alone) */}\n {sourceList.length > 1 && (\n <ul className=\"border-t px-4 py-2\">\n {sourceList.slice(0, 8).map((source) => (\n <li\n key={source.key}\n className=\"flex items-center gap-2 py-0.5 text-[12px] text-muted-foreground\"\n >\n {source.failed ? (\n <AlertCircleIcon className=\"size-3.5 shrink-0 text-red-400\" />\n ) : (\n <CheckCircle2Icon className=\"size-3.5 shrink-0 text-emerald-500\" />\n )}\n <span className=\"min-w-0 truncate\">{source.label}</span>\n </li>\n ))}\n {sourceList.length > 8 && (\n <li className=\"py-0.5 text-[11px] text-muted-foreground/70\">\n and {sourceList.length - 8} more\n </li>\n )}\n </ul>\n )}\n\n {/* Error message */}\n {hasError && errorMessage && (\n <div className=\"border-t bg-red-50/50 px-4 py-2.5\">\n <p className=\"text-[12px] leading-relaxed text-red-600\">\n {errorMessage}\n </p>\n </div>\n )}\n\n {/* Content preview (non-error) */}\n {hasContent && !hasError && (\n <div className=\"border-t\">\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className=\"flex w-full items-center gap-2 px-4 py-2 text-left text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/50\"\n >\n <ChevronDownIcon\n className={cn(\n \"size-3.5 shrink-0 transition-transform duration-200\",\n !expanded && \"-rotate-90\",\n )}\n />\n <span>\n {expanded ? \"Hide reviewed content\" : \"Show reviewed content\"}\n </span>\n </button>\n\n {expanded && (\n <div className=\"max-h-80 overflow-y-auto border-t bg-muted/30 px-4 py-3\">\n <div className=\"mb-2 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Reviewed content\n </div>\n {workbookData ? (\n <WorkbookPreview workbook={workbookData} />\n ) : resultText ? (\n <TextContentPreview text={resultText} />\n ) : null}\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport const ReadAssetToolUI = memo(\n ReadAssetToolUIImpl,\n) as unknown as ToolCallMessagePartComponent;\n\nReadAssetToolUI.displayName = \"ReadAssetToolUI\";\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const react = require("react");
4
+ const threadIdContext = require("../threads/thread-id-context.cjs");
5
+ const DEFAULT_SCOPE = "default";
6
+ let nextSeq = 1;
7
+ const scopes = /* @__PURE__ */ new Map();
8
+ const listeners = /* @__PURE__ */ new Set();
9
+ let version = 0;
10
+ function emit() {
11
+ version++;
12
+ for (const listener of listeners) listener();
13
+ }
14
+ function scopeEntries(scope) {
15
+ let entries = scopes.get(scope);
16
+ if (!entries) {
17
+ entries = /* @__PURE__ */ new Map();
18
+ scopes.set(scope, entries);
19
+ }
20
+ return entries;
21
+ }
22
+ function allocatePlanSeq() {
23
+ return nextSeq++;
24
+ }
25
+ function registerPlanCard(scope, seq, plan, isWriting) {
26
+ scopeEntries(scope).set(seq, { seq, plan, isWriting });
27
+ emit();
28
+ }
29
+ function updatePlanCard(scope, seq, plan, isWriting) {
30
+ var _a;
31
+ const entry = (_a = scopes.get(scope)) == null ? void 0 : _a.get(seq);
32
+ if (!entry) return;
33
+ entry.plan = plan;
34
+ entry.isWriting = isWriting;
35
+ emit();
36
+ }
37
+ function unregisterPlanCard(scope, seq) {
38
+ const entries = scopes.get(scope);
39
+ if (!entries) return;
40
+ if (entries.delete(seq)) {
41
+ if (entries.size === 0) scopes.delete(scope);
42
+ emit();
43
+ }
44
+ }
45
+ function latestPlanSeq(scope) {
46
+ const entries = scopes.get(scope);
47
+ if (!entries) return null;
48
+ let latest = null;
49
+ for (const seq of entries.keys()) {
50
+ if (latest === null || seq > latest) latest = seq;
51
+ }
52
+ return latest;
53
+ }
54
+ function latestPlanEntry(scope) {
55
+ var _a;
56
+ const seq = latestPlanSeq(scope);
57
+ return seq === null ? null : ((_a = scopes.get(scope)) == null ? void 0 : _a.get(seq)) ?? null;
58
+ }
59
+ function subscribe(listener) {
60
+ listeners.add(listener);
61
+ return () => {
62
+ listeners.delete(listener);
63
+ };
64
+ }
65
+ const getVersion = () => version;
66
+ function usePlanScope() {
67
+ return react.useContext(threadIdContext.AthenaThreadIdContext) ?? DEFAULT_SCOPE;
68
+ }
69
+ function useIsLatestPlanCard(scope, seq) {
70
+ react.useSyncExternalStore(subscribe, getVersion, getVersion);
71
+ const latest = latestPlanSeq(scope);
72
+ return latest === null || latest === seq;
73
+ }
74
+ function useLatestTodoPlan() {
75
+ const scope = usePlanScope();
76
+ react.useSyncExternalStore(subscribe, getVersion, getVersion);
77
+ const entry = latestPlanEntry(scope);
78
+ return entry ? { plan: entry.plan, isWriting: entry.isWriting } : null;
79
+ }
80
+ exports.allocatePlanSeq = allocatePlanSeq;
81
+ exports.latestPlanSeq = latestPlanSeq;
82
+ exports.registerPlanCard = registerPlanCard;
83
+ exports.unregisterPlanCard = unregisterPlanCard;
84
+ exports.updatePlanCard = updatePlanCard;
85
+ exports.useIsLatestPlanCard = useIsLatestPlanCard;
86
+ exports.useLatestTodoPlan = useLatestTodoPlan;
87
+ exports.usePlanScope = usePlanScope;
88
+ //# sourceMappingURL=todo-plan-store.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo-plan-store.cjs","sources":["../../src/tools/todo-plan-store.ts"],"sourcesContent":["/**\n * Live registry of mounted `write_todos` cards — the newest one wins.\n *\n * A run updates its plan by calling `write_todos` repeatedly, and every call\n * renders its own card, so a conversation stacks \"Plan in progress / Plan\n * complete\" cards that all describe the same plan. The registry tracks the\n * mounted cards in mount order (the thread renders messages top-down, so the\n * newest call mounts last); {@link WriteTodosToolUI} renders the full card\n * only for the newest instance and nothing for superseded ones.\n *\n * Scoped by thread id (from `AthenaThreadIdContext`): a page hosting several\n * chats ranks each conversation's cards separately, so one chat's plan never\n * suppresses another's. Two views of the SAME thread share a scope, which is\n * the correct behavior — they show the same plan.\n *\n * Instance-scoped sequence numbers, not callId-scoped: reopening a thread\n * mounts fresh instances with fresh sequence numbers, so \"newest\" always\n * resolves within what is currently on screen.\n *\n * Hosts that want a pinned plan strip instead of the inline card should\n * register {@link HiddenWriteTodosToolUI} (which feeds this registry and\n * renders nothing) and read {@link useLatestTodoPlan}.\n */\nimport { useContext, useSyncExternalStore } from \"react\";\nimport { AthenaThreadIdContext } from \"../threads/thread-id-context\";\nimport type { TodoPlan } from \"./write-todos-tool-ui\";\n\ninterface PlanEntry {\n seq: number;\n plan: TodoPlan;\n isWriting: boolean;\n}\n\nconst DEFAULT_SCOPE = \"default\";\n\nlet nextSeq = 1;\nconst scopes = new Map<string, Map<number, PlanEntry>>();\nconst listeners = new Set<() => void>();\nlet version = 0;\n\nfunction emit(): void {\n version++;\n for (const listener of listeners) listener();\n}\n\nfunction scopeEntries(scope: string): Map<number, PlanEntry> {\n let entries = scopes.get(scope);\n if (!entries) {\n entries = new Map();\n scopes.set(scope, entries);\n }\n return entries;\n}\n\n/** Allocate a mount-ordered sequence number (pure counter — safe to discard). */\nexport function allocatePlanSeq(): number {\n return nextSeq++;\n}\n\nexport function registerPlanCard(\n scope: string,\n seq: number,\n plan: TodoPlan,\n isWriting: boolean,\n): void {\n scopeEntries(scope).set(seq, { seq, plan, isWriting });\n emit();\n}\n\nexport function updatePlanCard(\n scope: string,\n seq: number,\n plan: TodoPlan,\n isWriting: boolean,\n): void {\n const entry = scopes.get(scope)?.get(seq);\n if (!entry) return;\n entry.plan = plan;\n entry.isWriting = isWriting;\n emit();\n}\n\nexport function unregisterPlanCard(scope: string, seq: number): void {\n const entries = scopes.get(scope);\n if (!entries) return;\n if (entries.delete(seq)) {\n if (entries.size === 0) scopes.delete(scope);\n emit();\n }\n}\n\nexport function latestPlanSeq(scope: string): number | null {\n const entries = scopes.get(scope);\n if (!entries) return null;\n let latest: number | null = null;\n for (const seq of entries.keys()) {\n if (latest === null || seq > latest) latest = seq;\n }\n return latest;\n}\n\nfunction latestPlanEntry(scope: string): PlanEntry | null {\n const seq = latestPlanSeq(scope);\n return seq === null ? null : (scopes.get(scope)?.get(seq) ?? null);\n}\n\nfunction subscribe(listener: () => void): () => void {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\nconst getVersion = () => version;\n\n/** The plan scope for the calling component's chat (its thread id). */\nexport function usePlanScope(): string {\n return useContext(AthenaThreadIdContext) ?? DEFAULT_SCOPE;\n}\n\n/**\n * Whether the card with this sequence number is the newest mounted plan card\n * in its scope. On the server (and before client effects have registered any\n * card) every card reports latest, so static renders still show the plan.\n */\nexport function useIsLatestPlanCard(scope: string, seq: number): boolean {\n const currentVersion = useSyncExternalStore(subscribe, getVersion, getVersion);\n void currentVersion; // subscription tick — the value itself is not meaningful\n const latest = latestPlanSeq(scope);\n return latest === null || latest === seq;\n}\n\nexport interface LatestTodoPlan {\n plan: TodoPlan;\n /** True while the newest plan card's tool call is still streaming. */\n isWriting: boolean;\n}\n\n/**\n * The newest mounted plan for the calling chat, for hosts building their own\n * pinned plan UI. Pair with `toolUIs={{ write_todos: HiddenWriteTodosToolUI }}`\n * — that component keeps feeding this registry while rendering nothing inline\n * (a bare `() => null` override would starve it).\n */\nexport function useLatestTodoPlan(): LatestTodoPlan | null {\n const scope = usePlanScope();\n const currentVersion = useSyncExternalStore(subscribe, getVersion, getVersion);\n void currentVersion;\n const entry = latestPlanEntry(scope);\n return entry ? { plan: entry.plan, isWriting: entry.isWriting } : null;\n}\n\n/** Test-only: reset module state between cases. */\nexport function resetTodoPlanStoreForTests(): void {\n nextSeq = 1;\n scopes.clear();\n version = 0;\n}\n"],"names":["useContext","AthenaThreadIdContext","useSyncExternalStore"],"mappings":";;;;AAiCA,MAAM,gBAAgB;AAEtB,IAAI,UAAU;AACd,MAAM,6BAAa,IAAA;AACnB,MAAM,gCAAgB,IAAA;AACtB,IAAI,UAAU;AAEd,SAAS,OAAa;AACpB;AACA,aAAW,YAAY,UAAW,UAAA;AACpC;AAEA,SAAS,aAAa,OAAuC;AAC3D,MAAI,UAAU,OAAO,IAAI,KAAK;AAC9B,MAAI,CAAC,SAAS;AACZ,kCAAc,IAAA;AACd,WAAO,IAAI,OAAO,OAAO;AAAA,EAC3B;AACA,SAAO;AACT;AAGO,SAAS,kBAA0B;AACxC,SAAO;AACT;AAEO,SAAS,iBACd,OACA,KACA,MACA,WACM;AACN,eAAa,KAAK,EAAE,IAAI,KAAK,EAAE,KAAK,MAAM,WAAW;AACrD,OAAA;AACF;AAEO,SAAS,eACd,OACA,KACA,MACA,WACM;;AACN,QAAM,SAAQ,YAAO,IAAI,KAAK,MAAhB,mBAAmB,IAAI;AACrC,MAAI,CAAC,MAAO;AACZ,QAAM,OAAO;AACb,QAAM,YAAY;AAClB,OAAA;AACF;AAEO,SAAS,mBAAmB,OAAe,KAAmB;AACnE,QAAM,UAAU,OAAO,IAAI,KAAK;AAChC,MAAI,CAAC,QAAS;AACd,MAAI,QAAQ,OAAO,GAAG,GAAG;AACvB,QAAI,QAAQ,SAAS,EAAG,QAAO,OAAO,KAAK;AAC3C,SAAA;AAAA,EACF;AACF;AAEO,SAAS,cAAc,OAA8B;AAC1D,QAAM,UAAU,OAAO,IAAI,KAAK;AAChC,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,SAAwB;AAC5B,aAAW,OAAO,QAAQ,QAAQ;AAChC,QAAI,WAAW,QAAQ,MAAM,OAAQ,UAAS;AAAA,EAChD;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,OAAiC;;AACxD,QAAM,MAAM,cAAc,KAAK;AAC/B,SAAO,QAAQ,OAAO,SAAQ,YAAO,IAAI,KAAK,MAAhB,mBAAmB,IAAI,SAAQ;AAC/D;AAEA,SAAS,UAAU,UAAkC;AACnD,YAAU,IAAI,QAAQ;AACtB,SAAO,MAAM;AACX,cAAU,OAAO,QAAQ;AAAA,EAC3B;AACF;AAEA,MAAM,aAAa,MAAM;AAGlB,SAAS,eAAuB;AACrC,SAAOA,MAAAA,WAAWC,gBAAAA,qBAAqB,KAAK;AAC9C;AAOO,SAAS,oBAAoB,OAAe,KAAsB;AAChDC,6BAAqB,WAAW,YAAY,UAAU;AAE7E,QAAM,SAAS,cAAc,KAAK;AAClC,SAAO,WAAW,QAAQ,WAAW;AACvC;AAcO,SAAS,oBAA2C;AACzD,QAAM,QAAQ,aAAA;AACSA,6BAAqB,WAAW,YAAY,UAAU;AAE7E,QAAM,QAAQ,gBAAgB,KAAK;AACnC,SAAO,QAAQ,EAAE,MAAM,MAAM,MAAM,WAAW,MAAM,cAAc;AACpE;;;;;;;;;"}
@@ -0,0 +1,88 @@
1
+ import { useSyncExternalStore, useContext } from "react";
2
+ import { AthenaThreadIdContext } from "../threads/thread-id-context.js";
3
+ const DEFAULT_SCOPE = "default";
4
+ let nextSeq = 1;
5
+ const scopes = /* @__PURE__ */ new Map();
6
+ const listeners = /* @__PURE__ */ new Set();
7
+ let version = 0;
8
+ function emit() {
9
+ version++;
10
+ for (const listener of listeners) listener();
11
+ }
12
+ function scopeEntries(scope) {
13
+ let entries = scopes.get(scope);
14
+ if (!entries) {
15
+ entries = /* @__PURE__ */ new Map();
16
+ scopes.set(scope, entries);
17
+ }
18
+ return entries;
19
+ }
20
+ function allocatePlanSeq() {
21
+ return nextSeq++;
22
+ }
23
+ function registerPlanCard(scope, seq, plan, isWriting) {
24
+ scopeEntries(scope).set(seq, { seq, plan, isWriting });
25
+ emit();
26
+ }
27
+ function updatePlanCard(scope, seq, plan, isWriting) {
28
+ var _a;
29
+ const entry = (_a = scopes.get(scope)) == null ? void 0 : _a.get(seq);
30
+ if (!entry) return;
31
+ entry.plan = plan;
32
+ entry.isWriting = isWriting;
33
+ emit();
34
+ }
35
+ function unregisterPlanCard(scope, seq) {
36
+ const entries = scopes.get(scope);
37
+ if (!entries) return;
38
+ if (entries.delete(seq)) {
39
+ if (entries.size === 0) scopes.delete(scope);
40
+ emit();
41
+ }
42
+ }
43
+ function latestPlanSeq(scope) {
44
+ const entries = scopes.get(scope);
45
+ if (!entries) return null;
46
+ let latest = null;
47
+ for (const seq of entries.keys()) {
48
+ if (latest === null || seq > latest) latest = seq;
49
+ }
50
+ return latest;
51
+ }
52
+ function latestPlanEntry(scope) {
53
+ var _a;
54
+ const seq = latestPlanSeq(scope);
55
+ return seq === null ? null : ((_a = scopes.get(scope)) == null ? void 0 : _a.get(seq)) ?? null;
56
+ }
57
+ function subscribe(listener) {
58
+ listeners.add(listener);
59
+ return () => {
60
+ listeners.delete(listener);
61
+ };
62
+ }
63
+ const getVersion = () => version;
64
+ function usePlanScope() {
65
+ return useContext(AthenaThreadIdContext) ?? DEFAULT_SCOPE;
66
+ }
67
+ function useIsLatestPlanCard(scope, seq) {
68
+ useSyncExternalStore(subscribe, getVersion, getVersion);
69
+ const latest = latestPlanSeq(scope);
70
+ return latest === null || latest === seq;
71
+ }
72
+ function useLatestTodoPlan() {
73
+ const scope = usePlanScope();
74
+ useSyncExternalStore(subscribe, getVersion, getVersion);
75
+ const entry = latestPlanEntry(scope);
76
+ return entry ? { plan: entry.plan, isWriting: entry.isWriting } : null;
77
+ }
78
+ export {
79
+ allocatePlanSeq,
80
+ latestPlanSeq,
81
+ registerPlanCard,
82
+ unregisterPlanCard,
83
+ updatePlanCard,
84
+ useIsLatestPlanCard,
85
+ useLatestTodoPlan,
86
+ usePlanScope
87
+ };
88
+ //# sourceMappingURL=todo-plan-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo-plan-store.js","sources":["../../src/tools/todo-plan-store.ts"],"sourcesContent":["/**\n * Live registry of mounted `write_todos` cards — the newest one wins.\n *\n * A run updates its plan by calling `write_todos` repeatedly, and every call\n * renders its own card, so a conversation stacks \"Plan in progress / Plan\n * complete\" cards that all describe the same plan. The registry tracks the\n * mounted cards in mount order (the thread renders messages top-down, so the\n * newest call mounts last); {@link WriteTodosToolUI} renders the full card\n * only for the newest instance and nothing for superseded ones.\n *\n * Scoped by thread id (from `AthenaThreadIdContext`): a page hosting several\n * chats ranks each conversation's cards separately, so one chat's plan never\n * suppresses another's. Two views of the SAME thread share a scope, which is\n * the correct behavior — they show the same plan.\n *\n * Instance-scoped sequence numbers, not callId-scoped: reopening a thread\n * mounts fresh instances with fresh sequence numbers, so \"newest\" always\n * resolves within what is currently on screen.\n *\n * Hosts that want a pinned plan strip instead of the inline card should\n * register {@link HiddenWriteTodosToolUI} (which feeds this registry and\n * renders nothing) and read {@link useLatestTodoPlan}.\n */\nimport { useContext, useSyncExternalStore } from \"react\";\nimport { AthenaThreadIdContext } from \"../threads/thread-id-context\";\nimport type { TodoPlan } from \"./write-todos-tool-ui\";\n\ninterface PlanEntry {\n seq: number;\n plan: TodoPlan;\n isWriting: boolean;\n}\n\nconst DEFAULT_SCOPE = \"default\";\n\nlet nextSeq = 1;\nconst scopes = new Map<string, Map<number, PlanEntry>>();\nconst listeners = new Set<() => void>();\nlet version = 0;\n\nfunction emit(): void {\n version++;\n for (const listener of listeners) listener();\n}\n\nfunction scopeEntries(scope: string): Map<number, PlanEntry> {\n let entries = scopes.get(scope);\n if (!entries) {\n entries = new Map();\n scopes.set(scope, entries);\n }\n return entries;\n}\n\n/** Allocate a mount-ordered sequence number (pure counter — safe to discard). */\nexport function allocatePlanSeq(): number {\n return nextSeq++;\n}\n\nexport function registerPlanCard(\n scope: string,\n seq: number,\n plan: TodoPlan,\n isWriting: boolean,\n): void {\n scopeEntries(scope).set(seq, { seq, plan, isWriting });\n emit();\n}\n\nexport function updatePlanCard(\n scope: string,\n seq: number,\n plan: TodoPlan,\n isWriting: boolean,\n): void {\n const entry = scopes.get(scope)?.get(seq);\n if (!entry) return;\n entry.plan = plan;\n entry.isWriting = isWriting;\n emit();\n}\n\nexport function unregisterPlanCard(scope: string, seq: number): void {\n const entries = scopes.get(scope);\n if (!entries) return;\n if (entries.delete(seq)) {\n if (entries.size === 0) scopes.delete(scope);\n emit();\n }\n}\n\nexport function latestPlanSeq(scope: string): number | null {\n const entries = scopes.get(scope);\n if (!entries) return null;\n let latest: number | null = null;\n for (const seq of entries.keys()) {\n if (latest === null || seq > latest) latest = seq;\n }\n return latest;\n}\n\nfunction latestPlanEntry(scope: string): PlanEntry | null {\n const seq = latestPlanSeq(scope);\n return seq === null ? null : (scopes.get(scope)?.get(seq) ?? null);\n}\n\nfunction subscribe(listener: () => void): () => void {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\nconst getVersion = () => version;\n\n/** The plan scope for the calling component's chat (its thread id). */\nexport function usePlanScope(): string {\n return useContext(AthenaThreadIdContext) ?? DEFAULT_SCOPE;\n}\n\n/**\n * Whether the card with this sequence number is the newest mounted plan card\n * in its scope. On the server (and before client effects have registered any\n * card) every card reports latest, so static renders still show the plan.\n */\nexport function useIsLatestPlanCard(scope: string, seq: number): boolean {\n const currentVersion = useSyncExternalStore(subscribe, getVersion, getVersion);\n void currentVersion; // subscription tick — the value itself is not meaningful\n const latest = latestPlanSeq(scope);\n return latest === null || latest === seq;\n}\n\nexport interface LatestTodoPlan {\n plan: TodoPlan;\n /** True while the newest plan card's tool call is still streaming. */\n isWriting: boolean;\n}\n\n/**\n * The newest mounted plan for the calling chat, for hosts building their own\n * pinned plan UI. Pair with `toolUIs={{ write_todos: HiddenWriteTodosToolUI }}`\n * — that component keeps feeding this registry while rendering nothing inline\n * (a bare `() => null` override would starve it).\n */\nexport function useLatestTodoPlan(): LatestTodoPlan | null {\n const scope = usePlanScope();\n const currentVersion = useSyncExternalStore(subscribe, getVersion, getVersion);\n void currentVersion;\n const entry = latestPlanEntry(scope);\n return entry ? { plan: entry.plan, isWriting: entry.isWriting } : null;\n}\n\n/** Test-only: reset module state between cases. */\nexport function resetTodoPlanStoreForTests(): void {\n nextSeq = 1;\n scopes.clear();\n version = 0;\n}\n"],"names":[],"mappings":";;AAiCA,MAAM,gBAAgB;AAEtB,IAAI,UAAU;AACd,MAAM,6BAAa,IAAA;AACnB,MAAM,gCAAgB,IAAA;AACtB,IAAI,UAAU;AAEd,SAAS,OAAa;AACpB;AACA,aAAW,YAAY,UAAW,UAAA;AACpC;AAEA,SAAS,aAAa,OAAuC;AAC3D,MAAI,UAAU,OAAO,IAAI,KAAK;AAC9B,MAAI,CAAC,SAAS;AACZ,kCAAc,IAAA;AACd,WAAO,IAAI,OAAO,OAAO;AAAA,EAC3B;AACA,SAAO;AACT;AAGO,SAAS,kBAA0B;AACxC,SAAO;AACT;AAEO,SAAS,iBACd,OACA,KACA,MACA,WACM;AACN,eAAa,KAAK,EAAE,IAAI,KAAK,EAAE,KAAK,MAAM,WAAW;AACrD,OAAA;AACF;AAEO,SAAS,eACd,OACA,KACA,MACA,WACM;;AACN,QAAM,SAAQ,YAAO,IAAI,KAAK,MAAhB,mBAAmB,IAAI;AACrC,MAAI,CAAC,MAAO;AACZ,QAAM,OAAO;AACb,QAAM,YAAY;AAClB,OAAA;AACF;AAEO,SAAS,mBAAmB,OAAe,KAAmB;AACnE,QAAM,UAAU,OAAO,IAAI,KAAK;AAChC,MAAI,CAAC,QAAS;AACd,MAAI,QAAQ,OAAO,GAAG,GAAG;AACvB,QAAI,QAAQ,SAAS,EAAG,QAAO,OAAO,KAAK;AAC3C,SAAA;AAAA,EACF;AACF;AAEO,SAAS,cAAc,OAA8B;AAC1D,QAAM,UAAU,OAAO,IAAI,KAAK;AAChC,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,SAAwB;AAC5B,aAAW,OAAO,QAAQ,QAAQ;AAChC,QAAI,WAAW,QAAQ,MAAM,OAAQ,UAAS;AAAA,EAChD;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,OAAiC;;AACxD,QAAM,MAAM,cAAc,KAAK;AAC/B,SAAO,QAAQ,OAAO,SAAQ,YAAO,IAAI,KAAK,MAAhB,mBAAmB,IAAI,SAAQ;AAC/D;AAEA,SAAS,UAAU,UAAkC;AACnD,YAAU,IAAI,QAAQ;AACtB,SAAO,MAAM;AACX,cAAU,OAAO,QAAQ;AAAA,EAC3B;AACF;AAEA,MAAM,aAAa,MAAM;AAGlB,SAAS,eAAuB;AACrC,SAAO,WAAW,qBAAqB,KAAK;AAC9C;AAOO,SAAS,oBAAoB,OAAe,KAAsB;AAChD,uBAAqB,WAAW,YAAY,UAAU;AAE7E,QAAM,SAAS,cAAc,KAAK;AAClC,SAAO,WAAW,QAAQ,WAAW;AACvC;AAcO,SAAS,oBAA2C;AACzD,QAAM,QAAQ,aAAA;AACS,uBAAqB,WAAW,YAAY,UAAU;AAE7E,QAAM,QAAQ,gBAAgB,KAAK;AACnC,SAAO,QAAQ,EAAE,MAAM,MAAM,MAAM,WAAW,MAAM,cAAc;AACpE;"}