@athenaintel/react 0.28.1 → 0.32.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 (817) hide show
  1. package/README.md +479 -10
  2. package/dist/agent-runtime/src/asset-attachment.cjs.map +1 -0
  3. package/dist/agent-runtime/src/asset-attachment.js.map +1 -0
  4. package/dist/agent-runtime/src/athena-asset-drag.cjs +44 -0
  5. package/dist/agent-runtime/src/athena-asset-drag.cjs.map +1 -0
  6. package/dist/agent-runtime/src/athena-asset-drag.js +44 -0
  7. package/dist/agent-runtime/src/athena-asset-drag.js.map +1 -0
  8. package/dist/agent-runtime/src/auth-denial.cjs.map +1 -0
  9. package/dist/agent-runtime/src/auth-denial.js.map +1 -0
  10. package/dist/agent-runtime/src/client-tool-bridge.cjs.map +1 -0
  11. package/dist/agent-runtime/src/client-tool-bridge.js.map +1 -0
  12. package/dist/agent-runtime/src/client-tools.cjs.map +1 -0
  13. package/dist/agent-runtime/src/client-tools.js.map +1 -0
  14. package/dist/agent-runtime/src/composer-markdown.cjs +124 -0
  15. package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -0
  16. package/dist/agent-runtime/src/composer-markdown.js +124 -0
  17. package/dist/agent-runtime/src/composer-markdown.js.map +1 -0
  18. package/dist/agent-runtime/src/config-mutations.cjs +59 -0
  19. package/dist/agent-runtime/src/config-mutations.cjs.map +1 -0
  20. package/dist/agent-runtime/src/config-mutations.js +59 -0
  21. package/dist/agent-runtime/src/config-mutations.js.map +1 -0
  22. package/dist/agent-runtime/src/conversation-index.cjs.map +1 -0
  23. package/dist/agent-runtime/src/conversation-index.js.map +1 -0
  24. package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.cjs +36 -0
  25. package/dist/agent-runtime/src/conversation-list.cjs.map +1 -0
  26. package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.js +36 -0
  27. package/dist/agent-runtime/src/conversation-list.js.map +1 -0
  28. package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.cjs +5 -3
  29. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -0
  30. package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.js +6 -4
  31. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -0
  32. package/dist/agent-runtime/src/edit-command.cjs.map +1 -0
  33. package/dist/agent-runtime/src/edit-command.js.map +1 -0
  34. package/dist/{packages/agent-runtime → agent-runtime}/src/errors.cjs +23 -0
  35. package/dist/agent-runtime/src/errors.cjs.map +1 -0
  36. package/dist/{packages/agent-runtime → agent-runtime}/src/errors.js +23 -0
  37. package/dist/agent-runtime/src/errors.js.map +1 -0
  38. package/dist/agent-runtime/src/execute-output.cjs +41 -0
  39. package/dist/agent-runtime/src/execute-output.cjs.map +1 -0
  40. package/dist/agent-runtime/src/execute-output.js +41 -0
  41. package/dist/agent-runtime/src/execute-output.js.map +1 -0
  42. package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.cjs +16 -2
  43. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -0
  44. package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.js +16 -2
  45. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -0
  46. package/dist/agent-runtime/src/github-wake-event.cjs.map +1 -0
  47. package/dist/agent-runtime/src/github-wake-event.js.map +1 -0
  48. package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.cjs +24 -1
  49. package/dist/agent-runtime/src/interrupts.cjs.map +1 -0
  50. package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.js +24 -1
  51. package/dist/agent-runtime/src/interrupts.js.map +1 -0
  52. package/dist/agent-runtime/src/message-author.cjs.map +1 -0
  53. package/dist/agent-runtime/src/message-author.js.map +1 -0
  54. package/dist/agent-runtime/src/message-window.cjs.map +1 -0
  55. package/dist/agent-runtime/src/message-window.js.map +1 -0
  56. package/dist/{packages/agent-runtime → agent-runtime}/src/messages.cjs +8 -4
  57. package/dist/agent-runtime/src/messages.cjs.map +1 -0
  58. package/dist/{packages/agent-runtime → agent-runtime}/src/messages.js +6 -2
  59. package/dist/agent-runtime/src/messages.js.map +1 -0
  60. package/dist/agent-runtime/src/model-context.cjs.map +1 -0
  61. package/dist/agent-runtime/src/model-context.js.map +1 -0
  62. package/dist/agent-runtime/src/optimistic-content.cjs.map +1 -0
  63. package/dist/agent-runtime/src/optimistic-content.js.map +1 -0
  64. package/dist/agent-runtime/src/protocol.cjs.map +1 -0
  65. package/dist/agent-runtime/src/protocol.js.map +1 -0
  66. package/dist/{packages/agent-runtime → agent-runtime}/src/queue.cjs +23 -2
  67. package/dist/agent-runtime/src/queue.cjs.map +1 -0
  68. package/dist/{packages/agent-runtime → agent-runtime}/src/queue.js +23 -2
  69. package/dist/agent-runtime/src/queue.js.map +1 -0
  70. package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.cjs +71 -13
  71. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -0
  72. package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.js +73 -15
  73. package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -0
  74. package/dist/agent-runtime/src/runtime-messages.cjs.map +1 -0
  75. package/dist/agent-runtime/src/runtime-messages.js.map +1 -0
  76. package/dist/agent-runtime/src/screen-point.cjs.map +1 -0
  77. package/dist/agent-runtime/src/screen-point.js.map +1 -0
  78. package/dist/agent-runtime/src/send-recovery.cjs.map +1 -0
  79. package/dist/agent-runtime/src/send-recovery.js.map +1 -0
  80. package/dist/agent-runtime/src/statewire-attach-observer.cjs.map +1 -0
  81. package/dist/agent-runtime/src/statewire-attach-observer.js.map +1 -0
  82. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.cjs +8 -0
  83. package/dist/agent-runtime/src/statewire-state.cjs.map +1 -0
  84. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.js +8 -0
  85. package/dist/agent-runtime/src/statewire-state.js.map +1 -0
  86. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.cjs +4 -0
  87. package/dist/agent-runtime/src/statewire-suspended.cjs.map +1 -0
  88. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.js +4 -0
  89. package/dist/agent-runtime/src/statewire-suspended.js.map +1 -0
  90. package/dist/agent-runtime/src/statewire-transport.cjs +43 -0
  91. package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -0
  92. package/dist/agent-runtime/src/statewire-transport.js +43 -0
  93. package/dist/agent-runtime/src/statewire-transport.js.map +1 -0
  94. package/dist/agent-runtime/src/streaming-markdown.cjs.map +1 -0
  95. package/dist/agent-runtime/src/streaming-markdown.js.map +1 -0
  96. package/dist/agent-runtime/src/subscription-wake-event.cjs +252 -0
  97. package/dist/agent-runtime/src/subscription-wake-event.cjs.map +1 -0
  98. package/dist/agent-runtime/src/subscription-wake-event.js +252 -0
  99. package/dist/agent-runtime/src/subscription-wake-event.js.map +1 -0
  100. package/dist/agent-runtime/src/thread-extras.cjs.map +1 -0
  101. package/dist/agent-runtime/src/thread-extras.js.map +1 -0
  102. package/dist/agent-runtime/src/thread-snapshot-cache.cjs.map +1 -0
  103. package/dist/agent-runtime/src/thread-snapshot-cache.js.map +1 -0
  104. package/dist/agent-runtime/src/thread-status.cjs.map +1 -0
  105. package/dist/agent-runtime/src/thread-status.js.map +1 -0
  106. package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.cjs +304 -9
  107. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -0
  108. package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.js +304 -9
  109. package/dist/agent-runtime/src/tool-metadata.js.map +1 -0
  110. package/dist/agent-runtime/src/tool-names.cjs +5 -0
  111. package/dist/agent-runtime/src/tool-names.cjs.map +1 -0
  112. package/dist/agent-runtime/src/tool-names.js +5 -0
  113. package/dist/agent-runtime/src/tool-names.js.map +1 -0
  114. package/dist/agent-runtime/src/tool-outputs.cjs.map +1 -0
  115. package/dist/agent-runtime/src/tool-outputs.js.map +1 -0
  116. package/dist/agent-runtime/src/tool-result.cjs.map +1 -0
  117. package/dist/agent-runtime/src/tool-result.js.map +1 -0
  118. package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.cjs +33 -22
  119. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -0
  120. package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.js +34 -23
  121. package/dist/agent-runtime/src/use-conversation-list.js.map +1 -0
  122. package/dist/agent-runtime/src/use-deep-agent-config.cjs +129 -0
  123. package/dist/agent-runtime/src/use-deep-agent-config.cjs.map +1 -0
  124. package/dist/agent-runtime/src/use-deep-agent-config.js +129 -0
  125. package/dist/agent-runtime/src/use-deep-agent-config.js.map +1 -0
  126. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.cjs +2 -0
  127. package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -0
  128. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.js +2 -0
  129. package/dist/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -0
  130. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -0
  131. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -0
  132. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.cjs +1 -0
  133. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -0
  134. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.js +2 -1
  135. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -0
  136. package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -0
  137. package/dist/agent-runtime/src/use-deep-agent-window-sync.js.map +1 -0
  138. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs +52 -0
  139. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs.map +1 -0
  140. package/dist/agent-runtime/src/use-historical-edit-attachments.js +52 -0
  141. package/dist/agent-runtime/src/use-historical-edit-attachments.js.map +1 -0
  142. package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.cjs +14 -0
  143. package/dist/agent-runtime/src/voice-presentation.cjs.map +1 -0
  144. package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.js +14 -0
  145. package/dist/agent-runtime/src/voice-presentation.js.map +1 -0
  146. package/dist/agent-runtime/src/voice-turn-grouping.cjs.map +1 -0
  147. package/dist/agent-runtime/src/voice-turn-grouping.js.map +1 -0
  148. package/dist/assets/AthenaAssetEmbed.cjs +13 -2
  149. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  150. package/dist/assets/AthenaAssetEmbed.d.ts +10 -0
  151. package/dist/assets/AthenaAssetEmbed.js +14 -3
  152. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  153. package/dist/assets/AthenaLayout.cjs +97 -31
  154. package/dist/assets/AthenaLayout.cjs.map +1 -1
  155. package/dist/assets/AthenaLayout.d.ts +13 -0
  156. package/dist/assets/AthenaLayout.js +98 -32
  157. package/dist/assets/AthenaLayout.js.map +1 -1
  158. package/dist/assets/asset-embed-messages.cjs +6 -0
  159. package/dist/assets/asset-embed-messages.cjs.map +1 -1
  160. package/dist/assets/asset-embed-messages.d.ts +13 -0
  161. package/dist/assets/asset-embed-messages.js +6 -0
  162. package/dist/assets/asset-embed-messages.js.map +1 -1
  163. package/dist/assets/asset-panel-store.cjs +68 -32
  164. package/dist/assets/asset-panel-store.cjs.map +1 -1
  165. package/dist/assets/asset-panel-store.d.ts +47 -1
  166. package/dist/assets/asset-panel-store.js +68 -32
  167. package/dist/assets/asset-panel-store.js.map +1 -1
  168. package/dist/assets/use-asset-embed.cjs +29 -8
  169. package/dist/assets/use-asset-embed.cjs.map +1 -1
  170. package/dist/assets/use-asset-embed.d.ts +7 -0
  171. package/dist/assets/use-asset-embed.js +29 -8
  172. package/dist/assets/use-asset-embed.js.map +1 -1
  173. package/dist/catalog/chat-pickers.cjs +152 -0
  174. package/dist/catalog/chat-pickers.cjs.map +1 -0
  175. package/dist/catalog/chat-pickers.d.ts +22 -0
  176. package/dist/catalog/chat-pickers.js +152 -0
  177. package/dist/catalog/chat-pickers.js.map +1 -0
  178. package/dist/catalog/runtime-catalog.cjs +181 -0
  179. package/dist/catalog/runtime-catalog.cjs.map +1 -0
  180. package/dist/catalog/runtime-catalog.d.ts +100 -0
  181. package/dist/catalog/runtime-catalog.js +181 -0
  182. package/dist/catalog/runtime-catalog.js.map +1 -0
  183. package/dist/chat/AthenaChat.cjs +122 -67
  184. package/dist/chat/AthenaChat.cjs.map +1 -1
  185. package/dist/chat/AthenaChat.d.ts +21 -4
  186. package/dist/chat/AthenaChat.js +124 -69
  187. package/dist/chat/AthenaChat.js.map +1 -1
  188. package/dist/chat/StatewireApprovalCard.cjs +38 -37
  189. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  190. package/dist/chat/StatewireApprovalCard.d.ts +2 -0
  191. package/dist/chat/StatewireApprovalCard.js +39 -38
  192. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  193. package/dist/chat/StatewireClientToolBridge.cjs +2 -2
  194. package/dist/chat/StatewireClientToolBridge.js +2 -2
  195. package/dist/chat/StatewireQueuedMessages.cjs +15 -12
  196. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  197. package/dist/chat/StatewireQueuedMessages.d.ts +22 -2
  198. package/dist/chat/StatewireQueuedMessages.js +15 -12
  199. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  200. package/dist/chat/StatewireRunRefusalNotice.cjs +48 -0
  201. package/dist/chat/StatewireRunRefusalNotice.cjs.map +1 -0
  202. package/dist/chat/StatewireRunRefusalNotice.d.ts +25 -0
  203. package/dist/chat/StatewireRunRefusalNotice.js +48 -0
  204. package/dist/chat/StatewireRunRefusalNotice.js.map +1 -0
  205. package/dist/chat/WaitingOnYouBanner.cjs +2 -2
  206. package/dist/chat/WaitingOnYouBanner.js +2 -2
  207. package/dist/chat/athena-citation-links.cjs +19 -15
  208. package/dist/chat/athena-citation-links.cjs.map +1 -1
  209. package/dist/chat/athena-citation-links.js +19 -15
  210. package/dist/chat/athena-citation-links.js.map +1 -1
  211. package/dist/chat/run-activity.cjs +9 -1
  212. package/dist/chat/run-activity.cjs.map +1 -1
  213. package/dist/chat/run-activity.d.ts +6 -0
  214. package/dist/chat/run-activity.js +10 -2
  215. package/dist/chat/run-activity.js.map +1 -1
  216. package/dist/chat/statewire-banners.cjs +30 -1
  217. package/dist/chat/statewire-banners.cjs.map +1 -1
  218. package/dist/chat/statewire-banners.d.ts +20 -1
  219. package/dist/chat/statewire-banners.js +32 -3
  220. package/dist/chat/statewire-banners.js.map +1 -1
  221. package/dist/chat/statewire-client-tools.cjs +1 -1
  222. package/dist/chat/statewire-client-tools.js +1 -1
  223. package/dist/chat/super-grouping/CollapsibleGroup.cjs +1 -1
  224. package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -1
  225. package/dist/chat/super-grouping/CollapsibleGroup.js +1 -1
  226. package/dist/chat/super-grouping/CollapsibleGroup.js.map +1 -1
  227. package/dist/chat/super-grouping/SuperGroupingCard.cjs +38 -16
  228. package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
  229. package/dist/chat/super-grouping/SuperGroupingCard.d.ts +21 -4
  230. package/dist/chat/super-grouping/SuperGroupingCard.js +39 -17
  231. package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
  232. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs +377 -0
  233. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs.map +1 -0
  234. package/dist/chat/super-grouping/SuperGroupingTranscript.d.ts +31 -0
  235. package/dist/chat/super-grouping/SuperGroupingTranscript.js +377 -0
  236. package/dist/chat/super-grouping/SuperGroupingTranscript.js.map +1 -0
  237. package/dist/chat/super-grouping/ToolTimeline.cjs +13 -2
  238. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  239. package/dist/chat/super-grouping/ToolTimeline.d.ts +10 -3
  240. package/dist/chat/super-grouping/ToolTimeline.js +13 -2
  241. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  242. package/dist/chat/super-grouping/activity-timeline.cjs +69 -29
  243. package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
  244. package/dist/chat/super-grouping/activity-timeline.d.ts +60 -9
  245. package/dist/chat/super-grouping/activity-timeline.js +70 -30
  246. package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
  247. package/dist/chat/super-grouping/index.cjs +14 -0
  248. package/dist/chat/super-grouping/index.cjs.map +1 -1
  249. package/dist/chat/super-grouping/index.d.ts +7 -2
  250. package/dist/chat/super-grouping/index.js +16 -2
  251. package/dist/chat/super-grouping/index.js.map +1 -1
  252. package/dist/chat/super-grouping/timeline-step.cjs +14 -5
  253. package/dist/chat/super-grouping/timeline-step.cjs.map +1 -1
  254. package/dist/chat/super-grouping/timeline-step.d.ts +10 -1
  255. package/dist/chat/super-grouping/timeline-step.js +15 -6
  256. package/dist/chat/super-grouping/timeline-step.js.map +1 -1
  257. package/dist/chat/super-grouping/toolkit-map.cjs +1 -0
  258. package/dist/chat/super-grouping/toolkit-map.cjs.map +1 -1
  259. package/dist/chat/super-grouping/toolkit-map.js +1 -0
  260. package/dist/chat/super-grouping/toolkit-map.js.map +1 -1
  261. package/dist/chat/super-grouping/turn-segments.cjs +82 -0
  262. package/dist/chat/super-grouping/turn-segments.cjs.map +1 -0
  263. package/dist/chat/super-grouping/turn-segments.d.ts +69 -0
  264. package/dist/chat/super-grouping/turn-segments.js +82 -0
  265. package/dist/chat/super-grouping/turn-segments.js.map +1 -0
  266. package/dist/chat/super-grouping/turn-timing.cjs +110 -0
  267. package/dist/chat/super-grouping/turn-timing.cjs.map +1 -0
  268. package/dist/chat/super-grouping/turn-timing.d.ts +52 -0
  269. package/dist/chat/super-grouping/turn-timing.js +110 -0
  270. package/dist/chat/super-grouping/turn-timing.js.map +1 -0
  271. package/dist/chat/tiptap-text.cjs +1 -1
  272. package/dist/chat/tiptap-text.js +1 -1
  273. package/dist/chat/use-athena-run-live.cjs +1 -1
  274. package/dist/chat/use-athena-run-live.js +1 -1
  275. package/dist/chat/use-statewire-approval-request.cjs +73 -4
  276. package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
  277. package/dist/chat/use-statewire-approval-request.js +74 -5
  278. package/dist/chat/use-statewire-approval-request.js.map +1 -1
  279. package/dist/chat-ui/composer/composer-message.cjs +284 -0
  280. package/dist/chat-ui/composer/composer-message.cjs.map +1 -0
  281. package/dist/chat-ui/composer/composer-message.d.ts +152 -0
  282. package/dist/chat-ui/composer/composer-message.js +284 -0
  283. package/dist/chat-ui/composer/composer-message.js.map +1 -0
  284. package/dist/chat-ui/composer/tiptap-composer.cjs +97 -15
  285. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  286. package/dist/chat-ui/composer/tiptap-composer.d.ts +34 -6
  287. package/dist/chat-ui/composer/tiptap-composer.js +97 -15
  288. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  289. package/dist/chat-ui/index.cjs +4 -1
  290. package/dist/chat-ui/index.cjs.map +1 -1
  291. package/dist/chat-ui/index.d.ts +3 -2
  292. package/dist/chat-ui/index.js +5 -2
  293. package/dist/chat-ui/index.js.map +1 -1
  294. package/dist/chat-ui/mentions/mention-chip.cjs +31 -3
  295. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  296. package/dist/chat-ui/mentions/mention-chip.d.ts +2 -5
  297. package/dist/chat-ui/mentions/mention-chip.js +33 -5
  298. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  299. package/dist/chat-ui/mentions/mention-extension.cjs +9 -3
  300. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
  301. package/dist/chat-ui/mentions/mention-extension.js +9 -3
  302. package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
  303. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +3 -1
  304. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -1
  305. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js +3 -1
  306. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js.map +1 -1
  307. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +65 -19
  308. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  309. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +15 -0
  310. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +67 -21
  311. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  312. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +4 -2
  313. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  314. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +2 -1
  315. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +5 -3
  316. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  317. package/dist/chat-ui/mentions/use-account-workspace-id.cjs +61 -0
  318. package/dist/chat-ui/mentions/use-account-workspace-id.cjs.map +1 -0
  319. package/dist/chat-ui/mentions/use-account-workspace-id.d.ts +3 -0
  320. package/dist/chat-ui/mentions/use-account-workspace-id.js +61 -0
  321. package/dist/chat-ui/mentions/use-account-workspace-id.js.map +1 -0
  322. package/dist/chat-ui/mentions/use-member-avatar.cjs +75 -0
  323. package/dist/chat-ui/mentions/use-member-avatar.cjs.map +1 -0
  324. package/dist/chat-ui/mentions/use-member-avatar.d.ts +2 -0
  325. package/dist/chat-ui/mentions/use-member-avatar.js +75 -0
  326. package/dist/chat-ui/mentions/use-member-avatar.js.map +1 -0
  327. package/dist/chat-ui/messages/message-components.cjs +30 -10
  328. package/dist/chat-ui/messages/message-components.cjs.map +1 -1
  329. package/dist/chat-ui/messages/message-components.d.ts +21 -1
  330. package/dist/chat-ui/messages/message-components.js +30 -10
  331. package/dist/chat-ui/messages/message-components.js.map +1 -1
  332. package/dist/chat-ui/messages/runtime-message.cjs +1 -1
  333. package/dist/chat-ui/messages/runtime-message.js +1 -1
  334. package/dist/chat-ui/messages/statewire-continue-run.cjs +5 -5
  335. package/dist/chat-ui/messages/statewire-continue-run.js +5 -5
  336. package/dist/chat-ui/messages/user-edit-composer.cjs +1 -1
  337. package/dist/chat-ui/messages/user-edit-composer.js +1 -1
  338. package/dist/chat-ui/messages/wake-marker.cjs +39 -4
  339. package/dist/chat-ui/messages/wake-marker.cjs.map +1 -1
  340. package/dist/chat-ui/messages/wake-marker.d.ts +16 -5
  341. package/dist/chat-ui/messages/wake-marker.js +40 -5
  342. package/dist/chat-ui/messages/wake-marker.js.map +1 -1
  343. package/dist/chat-ui/rich-text/chat-message-body.cjs +12 -8
  344. package/dist/chat-ui/rich-text/chat-message-body.cjs.map +1 -1
  345. package/dist/chat-ui/rich-text/chat-message-body.d.ts +6 -1
  346. package/dist/chat-ui/rich-text/chat-message-body.js +13 -9
  347. package/dist/chat-ui/rich-text/chat-message-body.js.map +1 -1
  348. package/dist/chat-ui/rich-text/chat-text-schema.cjs +64 -6
  349. package/dist/chat-ui/rich-text/chat-text-schema.cjs.map +1 -1
  350. package/dist/chat-ui/rich-text/chat-text-schema.d.ts +5 -0
  351. package/dist/chat-ui/rich-text/chat-text-schema.js +66 -8
  352. package/dist/chat-ui/rich-text/chat-text-schema.js.map +1 -1
  353. package/dist/chat-ui/statewire.cjs +1 -1
  354. package/dist/chat-ui/statewire.d.ts +1 -1
  355. package/dist/chat-ui/statewire.js +1 -1
  356. package/dist/chat-ui/thread/statewire-history-edge.cjs +2 -2
  357. package/dist/chat-ui/thread/statewire-history-edge.js +2 -2
  358. package/dist/collab/client.cjs +282 -16
  359. package/dist/collab/client.cjs.map +1 -1
  360. package/dist/collab/client.d.ts +127 -2
  361. package/dist/collab/client.js +285 -20
  362. package/dist/collab/client.js.map +1 -1
  363. package/dist/collab/index.cjs +2 -0
  364. package/dist/collab/index.cjs.map +1 -1
  365. package/dist/collab/index.d.ts +1 -1
  366. package/dist/collab/index.js +3 -1
  367. package/dist/composer/AttachmentContext.cjs +38 -12
  368. package/dist/composer/AttachmentContext.cjs.map +1 -1
  369. package/dist/composer/AttachmentContext.d.ts +22 -1
  370. package/dist/composer/AttachmentContext.js +40 -14
  371. package/dist/composer/AttachmentContext.js.map +1 -1
  372. package/dist/composer/QuoteContext.cjs +80 -28
  373. package/dist/composer/QuoteContext.cjs.map +1 -1
  374. package/dist/composer/QuoteContext.d.ts +35 -6
  375. package/dist/composer/QuoteContext.js +82 -30
  376. package/dist/composer/QuoteContext.js.map +1 -1
  377. package/dist/composer/build-composed-message.cjs +27 -0
  378. package/dist/composer/build-composed-message.cjs.map +1 -1
  379. package/dist/composer/build-composed-message.d.ts +21 -0
  380. package/dist/composer/build-composed-message.js +28 -1
  381. package/dist/composer/build-composed-message.js.map +1 -1
  382. package/dist/composer/composer-handoff.cjs +13 -1
  383. package/dist/composer/composer-handoff.cjs.map +1 -1
  384. package/dist/composer/composer-handoff.d.ts +12 -0
  385. package/dist/composer/composer-handoff.js +15 -3
  386. package/dist/composer/composer-handoff.js.map +1 -1
  387. package/dist/composer/index.d.ts +6 -3
  388. package/dist/composer/useReadComposerDraft.cjs +16 -0
  389. package/dist/composer/useReadComposerDraft.cjs.map +1 -0
  390. package/dist/composer/useReadComposerDraft.d.ts +6 -0
  391. package/dist/composer/useReadComposerDraft.js +16 -0
  392. package/dist/composer/useReadComposerDraft.js.map +1 -0
  393. package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
  394. package/dist/diagnostics/athena-diagnostics.d.ts +3 -1
  395. package/dist/diagnostics/athena-diagnostics.js.map +1 -1
  396. package/dist/diagnostics/errors.cjs +6 -0
  397. package/dist/diagnostics/errors.cjs.map +1 -1
  398. package/dist/diagnostics/errors.d.ts +6 -0
  399. package/dist/diagnostics/errors.js +6 -0
  400. package/dist/diagnostics/errors.js.map +1 -1
  401. package/dist/index.cjs +163 -7
  402. package/dist/index.cjs.map +1 -1
  403. package/dist/index.d.ts +55 -12
  404. package/dist/index.js +170 -14
  405. package/dist/index.js.map +1 -1
  406. package/dist/lib/owner-document.cjs +32 -0
  407. package/dist/lib/owner-document.cjs.map +1 -0
  408. package/dist/lib/owner-document.d.ts +17 -0
  409. package/dist/lib/owner-document.js +32 -0
  410. package/dist/lib/owner-document.js.map +1 -0
  411. package/dist/lib/portal-surface.cjs +55 -0
  412. package/dist/lib/portal-surface.cjs.map +1 -0
  413. package/dist/lib/portal-surface.d.ts +37 -0
  414. package/dist/lib/portal-surface.js +55 -0
  415. package/dist/lib/portal-surface.js.map +1 -0
  416. package/dist/lib/use-athena-rest-query.cjs +34 -0
  417. package/dist/lib/use-athena-rest-query.cjs.map +1 -0
  418. package/dist/lib/use-athena-rest-query.d.ts +31 -0
  419. package/dist/lib/use-athena-rest-query.js +34 -0
  420. package/dist/lib/use-athena-rest-query.js.map +1 -0
  421. package/dist/provider/AthenaProvider.cjs +70 -10
  422. package/dist/provider/AthenaProvider.cjs.map +1 -1
  423. package/dist/provider/AthenaProvider.d.ts +27 -2
  424. package/dist/provider/AthenaProvider.js +74 -14
  425. package/dist/provider/AthenaProvider.js.map +1 -1
  426. package/dist/provider/citation-links.d.ts +10 -2
  427. package/dist/{packages/react → react}/package.json.cjs +1 -1
  428. package/dist/{packages/react → react}/package.json.js +1 -1
  429. package/dist/runtime/StatewireModelLaneSync.cjs +96 -0
  430. package/dist/runtime/StatewireModelLaneSync.cjs.map +1 -0
  431. package/dist/runtime/StatewireModelLaneSync.d.ts +45 -0
  432. package/dist/runtime/StatewireModelLaneSync.js +96 -0
  433. package/dist/runtime/StatewireModelLaneSync.js.map +1 -0
  434. package/dist/runtime/statewire-lifecycle.cjs +20 -5
  435. package/dist/runtime/statewire-lifecycle.cjs.map +1 -1
  436. package/dist/runtime/statewire-lifecycle.d.ts +11 -0
  437. package/dist/runtime/statewire-lifecycle.js +20 -5
  438. package/dist/runtime/statewire-lifecycle.js.map +1 -1
  439. package/dist/runtime/statewire-model-lane.cjs +28 -0
  440. package/dist/runtime/statewire-model-lane.cjs.map +1 -0
  441. package/dist/runtime/statewire-model-lane.d.ts +64 -0
  442. package/dist/runtime/statewire-model-lane.js +28 -0
  443. package/dist/runtime/statewire-model-lane.js.map +1 -0
  444. package/dist/runtime/statewire-run-config.cjs +16 -2
  445. package/dist/runtime/statewire-run-config.cjs.map +1 -1
  446. package/dist/runtime/statewire-run-config.d.ts +10 -0
  447. package/dist/runtime/statewire-run-config.js +16 -2
  448. package/dist/runtime/statewire-run-config.js.map +1 -1
  449. package/dist/runtime/statewire-server-lane-context.cjs +24 -0
  450. package/dist/runtime/statewire-server-lane-context.cjs.map +1 -0
  451. package/dist/runtime/statewire-server-lane-context.d.ts +30 -0
  452. package/dist/runtime/statewire-server-lane-context.js +24 -0
  453. package/dist/runtime/statewire-server-lane-context.js.map +1 -0
  454. package/dist/runtime/useAthenaStatewireRuntime.cjs +47 -23
  455. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  456. package/dist/runtime/useAthenaStatewireRuntime.d.ts +8 -1
  457. package/dist/runtime/useAthenaStatewireRuntime.js +48 -24
  458. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  459. package/dist/search/useAthenaRepoSearch.cjs +5 -13
  460. package/dist/search/useAthenaRepoSearch.cjs.map +1 -1
  461. package/dist/search/useAthenaRepoSearch.d.ts +3 -3
  462. package/dist/search/useAthenaRepoSearch.js +6 -14
  463. package/dist/search/useAthenaRepoSearch.js.map +1 -1
  464. package/dist/sheet-range/a1.cjs +162 -0
  465. package/dist/sheet-range/a1.cjs.map +1 -0
  466. package/dist/sheet-range/a1.d.ts +91 -0
  467. package/dist/sheet-range/a1.js +162 -0
  468. package/dist/sheet-range/a1.js.map +1 -0
  469. package/dist/sheet-range/index.cjs +22 -0
  470. package/dist/sheet-range/index.cjs.map +1 -0
  471. package/dist/sheet-range/index.d.ts +12 -0
  472. package/dist/sheet-range/index.js +22 -0
  473. package/dist/sheet-range/index.js.map +1 -0
  474. package/dist/sheet-range/range-preview-table.cjs +75 -0
  475. package/dist/sheet-range/range-preview-table.cjs.map +1 -0
  476. package/dist/sheet-range/range-preview-table.d.ts +20 -0
  477. package/dist/sheet-range/range-preview-table.js +75 -0
  478. package/dist/sheet-range/range-preview-table.js.map +1 -0
  479. package/dist/sheet-range/range-preview.cjs +116 -0
  480. package/dist/sheet-range/range-preview.cjs.map +1 -0
  481. package/dist/sheet-range/range-preview.d.ts +67 -0
  482. package/dist/sheet-range/range-preview.js +116 -0
  483. package/dist/sheet-range/range-preview.js.map +1 -0
  484. package/dist/styles.css +1 -1
  485. package/dist/threads/Inbox.cjs +289 -0
  486. package/dist/threads/Inbox.cjs.map +1 -0
  487. package/dist/threads/Inbox.d.ts +46 -0
  488. package/dist/threads/Inbox.js +289 -0
  489. package/dist/threads/Inbox.js.map +1 -0
  490. package/dist/threads/SessionList.cjs +51 -126
  491. package/dist/threads/SessionList.cjs.map +1 -1
  492. package/dist/threads/SessionList.d.ts +26 -1
  493. package/dist/threads/SessionList.js +45 -120
  494. package/dist/threads/SessionList.js.map +1 -1
  495. package/dist/threads/SessionsPage.cjs +753 -0
  496. package/dist/threads/SessionsPage.cjs.map +1 -0
  497. package/dist/threads/SessionsPage.d.ts +35 -0
  498. package/dist/threads/SessionsPage.js +753 -0
  499. package/dist/threads/SessionsPage.js.map +1 -0
  500. package/dist/threads/api.cjs +23 -2
  501. package/dist/threads/api.cjs.map +1 -1
  502. package/dist/threads/api.d.ts +60 -0
  503. package/dist/threads/api.js +23 -2
  504. package/dist/threads/api.js.map +1 -1
  505. package/dist/threads/conversation-list-fetcher.cjs +9 -2
  506. package/dist/threads/conversation-list-fetcher.cjs.map +1 -1
  507. package/dist/threads/conversation-list-fetcher.d.ts +14 -1
  508. package/dist/threads/conversation-list-fetcher.js +9 -2
  509. package/dist/threads/conversation-list-fetcher.js.map +1 -1
  510. package/dist/threads/index.d.ts +2 -1
  511. package/dist/threads/pull-request-display.cjs +25 -0
  512. package/dist/threads/pull-request-display.cjs.map +1 -0
  513. package/dist/threads/pull-request-display.d.ts +15 -0
  514. package/dist/threads/pull-request-display.js +25 -0
  515. package/dist/threads/pull-request-display.js.map +1 -0
  516. package/dist/threads/session-list-model.cjs +16 -2
  517. package/dist/threads/session-list-model.cjs.map +1 -1
  518. package/dist/threads/session-list-model.d.ts +10 -0
  519. package/dist/threads/session-list-model.js +16 -2
  520. package/dist/threads/session-list-model.js.map +1 -1
  521. package/dist/threads/session-row-parts.cjs +152 -0
  522. package/dist/threads/session-row-parts.cjs.map +1 -0
  523. package/dist/threads/session-row-parts.d.ts +50 -0
  524. package/dist/threads/session-row-parts.js +152 -0
  525. package/dist/threads/session-row-parts.js.map +1 -0
  526. package/dist/threads/sessions-page-model.cjs +305 -0
  527. package/dist/threads/sessions-page-model.cjs.map +1 -0
  528. package/dist/threads/sessions-page-model.d.ts +86 -0
  529. package/dist/threads/sessions-page-model.js +305 -0
  530. package/dist/threads/sessions-page-model.js.map +1 -0
  531. package/dist/threads/sessions-page-storage.cjs +93 -0
  532. package/dist/threads/sessions-page-storage.cjs.map +1 -0
  533. package/dist/threads/sessions-page-storage.d.ts +23 -0
  534. package/dist/threads/sessions-page-storage.js +93 -0
  535. package/dist/threads/sessions-page-storage.js.map +1 -0
  536. package/dist/threads/sessions-query.cjs +235 -0
  537. package/dist/threads/sessions-query.cjs.map +1 -0
  538. package/dist/threads/sessions-query.d.ts +119 -0
  539. package/dist/threads/sessions-query.js +235 -0
  540. package/dist/threads/sessions-query.js.map +1 -0
  541. package/dist/threads/statewire-thread-list.cjs +133 -40
  542. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  543. package/dist/threads/statewire-thread-list.d.ts +83 -2
  544. package/dist/threads/statewire-thread-list.js +134 -41
  545. package/dist/threads/statewire-thread-list.js.map +1 -1
  546. package/dist/threads/use-athena-sessions.cjs +198 -0
  547. package/dist/threads/use-athena-sessions.cjs.map +1 -0
  548. package/dist/threads/use-athena-sessions.d.ts +81 -0
  549. package/dist/threads/use-athena-sessions.js +198 -0
  550. package/dist/threads/use-athena-sessions.js.map +1 -0
  551. package/dist/threads/use-athena-thread-model.cjs +14 -0
  552. package/dist/threads/use-athena-thread-model.cjs.map +1 -0
  553. package/dist/threads/use-athena-thread-model.d.ts +22 -0
  554. package/dist/threads/use-athena-thread-model.js +14 -0
  555. package/dist/threads/use-athena-thread-model.js.map +1 -0
  556. package/dist/threads/use-rest-conversation-history.cjs +1 -1
  557. package/dist/threads/use-rest-conversation-history.js +1 -1
  558. package/dist/threads/use-statewire-conversation-history.cjs +1 -1
  559. package/dist/threads/use-statewire-conversation-history.d.ts +3 -0
  560. package/dist/threads/use-statewire-conversation-history.js +1 -1
  561. package/dist/threads/use-thread-read-state.cjs +73 -0
  562. package/dist/threads/use-thread-read-state.cjs.map +1 -0
  563. package/dist/threads/use-thread-read-state.d.ts +51 -0
  564. package/dist/threads/use-thread-read-state.js +73 -0
  565. package/dist/threads/use-thread-read-state.js.map +1 -0
  566. package/dist/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +1 -0
  567. package/dist/tiptap-markdown-table/src/markdown-table-serializer.js.map +1 -0
  568. package/dist/tools/auto-open-tools.cjs +2 -0
  569. package/dist/tools/auto-open-tools.cjs.map +1 -1
  570. package/dist/tools/auto-open-tools.js +2 -0
  571. package/dist/tools/auto-open-tools.js.map +1 -1
  572. package/dist/tools/file-tool-uis.cjs +18 -43
  573. package/dist/tools/file-tool-uis.cjs.map +1 -1
  574. package/dist/tools/file-tool-uis.d.ts +1 -2
  575. package/dist/tools/file-tool-uis.js +18 -42
  576. package/dist/tools/file-tool-uis.js.map +1 -1
  577. package/dist/tools/index.cjs +6 -2
  578. package/dist/tools/index.cjs.map +1 -1
  579. package/dist/tools/index.d.ts +1 -0
  580. package/dist/tools/index.js +6 -2
  581. package/dist/tools/index.js.map +1 -1
  582. package/dist/tools/misc-tool-uis.cjs +2 -2
  583. package/dist/tools/misc-tool-uis.js +2 -2
  584. package/dist/tools/primitives.cjs +1 -1
  585. package/dist/tools/primitives.js +1 -1
  586. package/dist/tools/read-asset-tool-ui.cjs +21 -70
  587. package/dist/tools/read-asset-tool-ui.cjs.map +1 -1
  588. package/dist/tools/read-asset-tool-ui.js +21 -70
  589. package/dist/tools/read-asset-tool-ui.js.map +1 -1
  590. package/dist/tools/step-text.cjs +21 -0
  591. package/dist/tools/step-text.cjs.map +1 -0
  592. package/dist/tools/step-text.d.ts +10 -0
  593. package/dist/tools/step-text.js +21 -0
  594. package/dist/tools/step-text.js.map +1 -0
  595. package/dist/tools/tool-fallback.cjs +24 -5
  596. package/dist/tools/tool-fallback.cjs.map +1 -1
  597. package/dist/tools/tool-fallback.d.ts +3 -1
  598. package/dist/tools/tool-fallback.js +24 -5
  599. package/dist/tools/tool-fallback.js.map +1 -1
  600. package/dist/tools/tool-summary.cjs +661 -0
  601. package/dist/tools/tool-summary.cjs.map +1 -0
  602. package/dist/tools/tool-summary.d.ts +99 -0
  603. package/dist/tools/tool-summary.js +661 -0
  604. package/dist/tools/tool-summary.js.map +1 -0
  605. package/dist/tools/tool-uis.cjs +37 -95
  606. package/dist/tools/tool-uis.cjs.map +1 -1
  607. package/dist/tools/tool-uis.js +37 -95
  608. package/dist/tools/tool-uis.js.map +1 -1
  609. package/dist/tools/voice-update-tool-ui.cjs +1 -1
  610. package/dist/tools/voice-update-tool-ui.js +1 -1
  611. package/dist/tools/write-todos-tool-ui.cjs +3 -2
  612. package/dist/tools/write-todos-tool-ui.cjs.map +1 -1
  613. package/dist/tools/write-todos-tool-ui.d.ts +5 -0
  614. package/dist/tools/write-todos-tool-ui.js +5 -4
  615. package/dist/tools/write-todos-tool-ui.js.map +1 -1
  616. package/dist/ui/popover.cjs +6 -6
  617. package/dist/ui/popover.cjs.map +1 -1
  618. package/dist/ui/popover.js +6 -6
  619. package/dist/ui/popover.js.map +1 -1
  620. package/dist/ui/tooltip.cjs +16 -2
  621. package/dist/ui/tooltip.cjs.map +1 -1
  622. package/dist/ui/tooltip.d.ts +1 -1
  623. package/dist/ui/tooltip.js +16 -2
  624. package/dist/ui/tooltip.js.map +1 -1
  625. package/dist/version.cjs +1 -1
  626. package/dist/version.js +1 -1
  627. package/dist/voice/use-athena-voice-session.cjs.map +1 -1
  628. package/dist/voice/use-athena-voice-session.d.ts +3 -3
  629. package/dist/voice/use-athena-voice-session.js.map +1 -1
  630. package/dist/workbench/SessionWorkbench.cjs +378 -0
  631. package/dist/workbench/SessionWorkbench.cjs.map +1 -0
  632. package/dist/workbench/SessionWorkbench.d.ts +30 -0
  633. package/dist/workbench/SessionWorkbench.js +378 -0
  634. package/dist/workbench/SessionWorkbench.js.map +1 -0
  635. package/dist/workbench/session-workbench-context.cjs +26 -0
  636. package/dist/workbench/session-workbench-context.cjs.map +1 -0
  637. package/dist/workbench/session-workbench-context.d.ts +55 -0
  638. package/dist/workbench/session-workbench-context.js +26 -0
  639. package/dist/workbench/session-workbench-context.js.map +1 -0
  640. package/dist/workbench/session-workbench-model.cjs +288 -0
  641. package/dist/workbench/session-workbench-model.cjs.map +1 -0
  642. package/dist/workbench/session-workbench-model.d.ts +168 -0
  643. package/dist/workbench/session-workbench-model.js +288 -0
  644. package/dist/workbench/session-workbench-model.js.map +1 -0
  645. package/dist/workbench/session-workbench-panes.cjs +580 -0
  646. package/dist/workbench/session-workbench-panes.cjs.map +1 -0
  647. package/dist/workbench/session-workbench-panes.d.ts +16 -0
  648. package/dist/workbench/session-workbench-panes.js +580 -0
  649. package/dist/workbench/session-workbench-panes.js.map +1 -0
  650. package/dist/workbench/session-workspace-api.cjs +157 -0
  651. package/dist/workbench/session-workspace-api.cjs.map +1 -0
  652. package/dist/workbench/session-workspace-api.d.ts +70 -0
  653. package/dist/workbench/session-workspace-api.js +157 -0
  654. package/dist/workbench/session-workspace-api.js.map +1 -0
  655. package/dist/workbench/use-session-workspace.cjs +100 -0
  656. package/dist/workbench/use-session-workspace.cjs.map +1 -0
  657. package/dist/workbench/use-session-workspace.d.ts +45 -0
  658. package/dist/workbench/use-session-workspace.js +100 -0
  659. package/dist/workbench/use-session-workspace.js.map +1 -0
  660. package/dist/workbench/workbench-layout-context.cjs +10 -0
  661. package/dist/workbench/workbench-layout-context.cjs.map +1 -0
  662. package/dist/workbench/workbench-layout-context.d.ts +17 -0
  663. package/dist/workbench/workbench-layout-context.js +10 -0
  664. package/dist/workbench/workbench-layout-context.js.map +1 -0
  665. package/package.json +21 -10
  666. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs +0 -77
  667. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs.map +0 -1
  668. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js +0 -77
  669. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js.map +0 -1
  670. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs +0 -181
  671. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs.map +0 -1
  672. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js +0 -181
  673. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js.map +0 -1
  674. package/dist/packages/agent-runtime/src/asset-attachment.cjs.map +0 -1
  675. package/dist/packages/agent-runtime/src/asset-attachment.js.map +0 -1
  676. package/dist/packages/agent-runtime/src/auth-denial.cjs.map +0 -1
  677. package/dist/packages/agent-runtime/src/auth-denial.js.map +0 -1
  678. package/dist/packages/agent-runtime/src/client-tool-bridge.cjs.map +0 -1
  679. package/dist/packages/agent-runtime/src/client-tool-bridge.js.map +0 -1
  680. package/dist/packages/agent-runtime/src/client-tools.cjs.map +0 -1
  681. package/dist/packages/agent-runtime/src/client-tools.js.map +0 -1
  682. package/dist/packages/agent-runtime/src/conversation-index.cjs.map +0 -1
  683. package/dist/packages/agent-runtime/src/conversation-index.js.map +0 -1
  684. package/dist/packages/agent-runtime/src/conversation-list.cjs.map +0 -1
  685. package/dist/packages/agent-runtime/src/conversation-list.js.map +0 -1
  686. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs.map +0 -1
  687. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js.map +0 -1
  688. package/dist/packages/agent-runtime/src/edit-command.cjs.map +0 -1
  689. package/dist/packages/agent-runtime/src/edit-command.js.map +0 -1
  690. package/dist/packages/agent-runtime/src/errors.cjs.map +0 -1
  691. package/dist/packages/agent-runtime/src/errors.js.map +0 -1
  692. package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs.map +0 -1
  693. package/dist/packages/agent-runtime/src/generated/runconfig-contract.js.map +0 -1
  694. package/dist/packages/agent-runtime/src/github-wake-event.cjs.map +0 -1
  695. package/dist/packages/agent-runtime/src/github-wake-event.js.map +0 -1
  696. package/dist/packages/agent-runtime/src/interrupts.cjs.map +0 -1
  697. package/dist/packages/agent-runtime/src/interrupts.js.map +0 -1
  698. package/dist/packages/agent-runtime/src/message-author.cjs.map +0 -1
  699. package/dist/packages/agent-runtime/src/message-author.js.map +0 -1
  700. package/dist/packages/agent-runtime/src/message-window.cjs.map +0 -1
  701. package/dist/packages/agent-runtime/src/message-window.js.map +0 -1
  702. package/dist/packages/agent-runtime/src/messages.cjs.map +0 -1
  703. package/dist/packages/agent-runtime/src/messages.js.map +0 -1
  704. package/dist/packages/agent-runtime/src/model-context.cjs.map +0 -1
  705. package/dist/packages/agent-runtime/src/model-context.js.map +0 -1
  706. package/dist/packages/agent-runtime/src/optimistic-content.cjs.map +0 -1
  707. package/dist/packages/agent-runtime/src/optimistic-content.js.map +0 -1
  708. package/dist/packages/agent-runtime/src/protocol.cjs.map +0 -1
  709. package/dist/packages/agent-runtime/src/protocol.js.map +0 -1
  710. package/dist/packages/agent-runtime/src/queue.cjs.map +0 -1
  711. package/dist/packages/agent-runtime/src/queue.js.map +0 -1
  712. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs.map +0 -1
  713. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js.map +0 -1
  714. package/dist/packages/agent-runtime/src/runtime-messages.cjs.map +0 -1
  715. package/dist/packages/agent-runtime/src/runtime-messages.js.map +0 -1
  716. package/dist/packages/agent-runtime/src/screen-point.cjs.map +0 -1
  717. package/dist/packages/agent-runtime/src/screen-point.js.map +0 -1
  718. package/dist/packages/agent-runtime/src/send-recovery.cjs.map +0 -1
  719. package/dist/packages/agent-runtime/src/send-recovery.js.map +0 -1
  720. package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs.map +0 -1
  721. package/dist/packages/agent-runtime/src/statewire-attach-observer.js.map +0 -1
  722. package/dist/packages/agent-runtime/src/statewire-state.cjs.map +0 -1
  723. package/dist/packages/agent-runtime/src/statewire-state.js.map +0 -1
  724. package/dist/packages/agent-runtime/src/statewire-suspended.cjs.map +0 -1
  725. package/dist/packages/agent-runtime/src/statewire-suspended.js.map +0 -1
  726. package/dist/packages/agent-runtime/src/statewire-transport.cjs +0 -11
  727. package/dist/packages/agent-runtime/src/statewire-transport.cjs.map +0 -1
  728. package/dist/packages/agent-runtime/src/statewire-transport.js +0 -11
  729. package/dist/packages/agent-runtime/src/statewire-transport.js.map +0 -1
  730. package/dist/packages/agent-runtime/src/streaming-markdown.cjs.map +0 -1
  731. package/dist/packages/agent-runtime/src/streaming-markdown.js.map +0 -1
  732. package/dist/packages/agent-runtime/src/thread-extras.cjs.map +0 -1
  733. package/dist/packages/agent-runtime/src/thread-extras.js.map +0 -1
  734. package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs.map +0 -1
  735. package/dist/packages/agent-runtime/src/thread-snapshot-cache.js.map +0 -1
  736. package/dist/packages/agent-runtime/src/thread-status.cjs.map +0 -1
  737. package/dist/packages/agent-runtime/src/thread-status.js.map +0 -1
  738. package/dist/packages/agent-runtime/src/tool-metadata.cjs.map +0 -1
  739. package/dist/packages/agent-runtime/src/tool-metadata.js.map +0 -1
  740. package/dist/packages/agent-runtime/src/tool-outputs.cjs.map +0 -1
  741. package/dist/packages/agent-runtime/src/tool-outputs.js.map +0 -1
  742. package/dist/packages/agent-runtime/src/tool-result.cjs.map +0 -1
  743. package/dist/packages/agent-runtime/src/tool-result.js.map +0 -1
  744. package/dist/packages/agent-runtime/src/use-conversation-list.cjs.map +0 -1
  745. package/dist/packages/agent-runtime/src/use-conversation-list.js.map +0 -1
  746. package/dist/packages/agent-runtime/src/use-deep-agent-config.cjs +0 -13
  747. package/dist/packages/agent-runtime/src/use-deep-agent-config.cjs.map +0 -1
  748. package/dist/packages/agent-runtime/src/use-deep-agent-config.js +0 -13
  749. package/dist/packages/agent-runtime/src/use-deep-agent-config.js.map +0 -1
  750. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +0 -1
  751. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js.map +0 -1
  752. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs.map +0 -1
  753. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js.map +0 -1
  754. package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs.map +0 -1
  755. package/dist/packages/agent-runtime/src/use-deep-agent-thread.js.map +0 -1
  756. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs.map +0 -1
  757. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js.map +0 -1
  758. package/dist/packages/agent-runtime/src/voice-presentation.cjs.map +0 -1
  759. package/dist/packages/agent-runtime/src/voice-presentation.js.map +0 -1
  760. package/dist/packages/agent-runtime/src/voice-turn-grouping.cjs.map +0 -1
  761. package/dist/packages/agent-runtime/src/voice-turn-grouping.js.map +0 -1
  762. package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +0 -1
  763. package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.js.map +0 -1
  764. /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.cjs +0 -0
  765. /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.js +0 -0
  766. /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.cjs +0 -0
  767. /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.js +0 -0
  768. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.cjs +0 -0
  769. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.js +0 -0
  770. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.cjs +0 -0
  771. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.js +0 -0
  772. /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.cjs +0 -0
  773. /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.js +0 -0
  774. /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.cjs +0 -0
  775. /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.js +0 -0
  776. /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.cjs +0 -0
  777. /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.js +0 -0
  778. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.cjs +0 -0
  779. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.js +0 -0
  780. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.cjs +0 -0
  781. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.js +0 -0
  782. /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.cjs +0 -0
  783. /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.js +0 -0
  784. /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.cjs +0 -0
  785. /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.js +0 -0
  786. /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.cjs +0 -0
  787. /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.js +0 -0
  788. /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.cjs +0 -0
  789. /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.js +0 -0
  790. /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.cjs +0 -0
  791. /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.js +0 -0
  792. /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.cjs +0 -0
  793. /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.js +0 -0
  794. /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.cjs +0 -0
  795. /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.js +0 -0
  796. /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.cjs +0 -0
  797. /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.js +0 -0
  798. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.cjs +0 -0
  799. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.js +0 -0
  800. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.cjs +0 -0
  801. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.js +0 -0
  802. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.cjs +0 -0
  803. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.js +0 -0
  804. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.cjs +0 -0
  805. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.js +0 -0
  806. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.cjs +0 -0
  807. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.js +0 -0
  808. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.cjs +0 -0
  809. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.js +0 -0
  810. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.cjs +0 -0
  811. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.js +0 -0
  812. /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.cjs +0 -0
  813. /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.js +0 -0
  814. /package/dist/{packages/react → react}/package.json.cjs.map +0 -0
  815. /package/dist/{packages/react → react}/package.json.js.map +0 -0
  816. /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.cjs +0 -0
  817. /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.js +0 -0
@@ -3,6 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const lucideReact = require("lucide-react");
5
5
  const statewireLifecycleContext = require("../provider/statewire-lifecycle-context.cjs");
6
+ const errors = require("../agent-runtime/src/errors.cjs");
6
7
  const cnfast = require("cnfast");
7
8
  const ERROR_BANNER_TONE = {
8
9
  paywall: "border-violet-200 bg-violet-50 text-violet-900",
@@ -11,10 +12,35 @@ const ERROR_BANNER_TONE = {
11
12
  "read-only": "border-amber-200 bg-amber-50 text-amber-900",
12
13
  command: "border-red-200 bg-red-50 text-red-900"
13
14
  };
14
- const StatewireErrorBanner = () => {
15
+ function refusalOffersNewSession(code) {
16
+ return code === errors.COLLAB_AGENT_CHANNEL_SESSION_MISMATCH;
17
+ }
18
+ const StartNewSessionButton = ({
19
+ onClick,
20
+ className
21
+ }) => /* @__PURE__ */ jsxRuntime.jsxs(
22
+ "button",
23
+ {
24
+ type: "button",
25
+ onClick,
26
+ className: cnfast.cn(
27
+ "inline-flex shrink-0 items-center gap-1.5 rounded-md border border-current/20 bg-white/70 px-2 py-1 font-medium text-xs transition-colors hover:bg-white",
28
+ className
29
+ ),
30
+ children: [
31
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SquarePenIcon, { className: "size-3.5", "aria-hidden": true }),
32
+ "Start a new session"
33
+ ]
34
+ }
35
+ );
36
+ const StatewireErrorBanner = ({ onStartNewSession }) => {
15
37
  const lifecycle = statewireLifecycleContext.useAthenaStatewireLifecycle();
16
38
  if (!(lifecycle == null ? void 0 : lifecycle.error)) return null;
17
39
  const { error, dismissError } = lifecycle;
40
+ const startNewSession = onStartNewSession && refusalOffersNewSession(error.code) ? () => {
41
+ dismissError();
42
+ onStartNewSession();
43
+ } : null;
18
44
  return /* @__PURE__ */ jsxRuntime.jsxs(
19
45
  "div",
20
46
  {
@@ -28,6 +54,7 @@ const StatewireErrorBanner = () => {
28
54
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-semibold text-xs", children: error.title }),
29
55
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "pt-0.5 text-xs leading-snug opacity-80", children: error.message })
30
56
  ] }),
57
+ startNewSession ? /* @__PURE__ */ jsxRuntime.jsx(StartNewSessionButton, { onClick: startNewSession }) : null,
31
58
  /* @__PURE__ */ jsxRuntime.jsx(
32
59
  "button",
33
60
  {
@@ -78,6 +105,8 @@ const StatewireConnectionBanner = () => {
78
105
  }
79
106
  );
80
107
  };
108
+ exports.StartNewSessionButton = StartNewSessionButton;
81
109
  exports.StatewireConnectionBanner = StatewireConnectionBanner;
82
110
  exports.StatewireErrorBanner = StatewireErrorBanner;
111
+ exports.refusalOffersNewSession = refusalOffersNewSession;
83
112
  //# sourceMappingURL=statewire-banners.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"statewire-banners.cjs","sources":["../../src/chat/statewire-banners.tsx"],"sourcesContent":["import { RefreshCwIcon, XIcon } from 'lucide-react';\nimport type { FC } from 'react';\nimport { useAthenaStatewireLifecycle } from '../provider/statewire-lifecycle-context';\nimport type { AthenaStatewireErrorNotice } from '../runtime/statewire-lifecycle';\nimport { cn } from '../lib/utils';\n\nconst ERROR_BANNER_TONE: Record<AthenaStatewireErrorNotice['kind'], string> = {\n paywall: 'border-violet-200 bg-violet-50 text-violet-900',\n // A refused send, not a broken chat: the thread is busy (out-of-band run)\n // or needs a new chat — amber, like the connection strip.\n 'read-only': 'border-amber-200 bg-amber-50 text-amber-900',\n command: 'border-red-200 bg-red-50 text-red-900',\n};\n\n/**\n * Dismissible transport-error banner: send rejections (including the\n * pre-cutover-thread dispatch fence's 409), paywall refusals, and command\n * failures that would otherwise vanish into the console after the composer\n * already cleared. Renders nothing outside `AthenaProvider`.\n */\nexport const StatewireErrorBanner: FC = () => {\n const lifecycle = useAthenaStatewireLifecycle();\n if (!lifecycle?.error) return null;\n const { error, dismissError } = lifecycle;\n\n return (\n <div\n role=\"alert\"\n className={cn(\n 'aui-statewire-error-banner flex w-full items-start gap-2 rounded-xl border px-3 py-2.5',\n ERROR_BANNER_TONE[error.kind],\n )}\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-semibold text-xs\">{error.title}</p>\n <p className=\"pt-0.5 text-xs leading-snug opacity-80\">{error.message}</p>\n </div>\n <button\n type=\"button\"\n aria-label=\"Dismiss chat error\"\n onClick={dismissError}\n className=\"shrink-0 rounded p-1 transition-colors hover:bg-black/5\"\n >\n <XIcon className=\"size-3.5\" />\n </button>\n </div>\n );\n};\n\n/**\n * Degraded-connection strip: shown only while the statewire channel is\n * degraded, with a manual reconnect affordance when the transport exposes one.\n */\nexport const StatewireConnectionBanner: FC = () => {\n const lifecycle = useAthenaStatewireLifecycle();\n const connection = lifecycle?.connection;\n if (!connection?.degraded) return null;\n const offline = connection.status === 'stopped';\n\n return (\n <div\n role=\"status\"\n className=\"aui-statewire-connection-banner flex w-full items-center gap-2 rounded-xl border border-amber-200 bg-amber-50 px-3 py-2 text-amber-800 text-xs\"\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'size-2 shrink-0 rounded-full',\n offline ? 'bg-red-500' : 'animate-pulse bg-amber-500',\n )}\n />\n <span className=\"min-w-0 flex-1\">\n {offline ? (connection.message ?? 'Chat is offline.') : 'Retrying chat connection…'}\n </span>\n {lifecycle?.reconnect ? (\n <button\n type=\"button\"\n aria-label=\"Reconnect chat\"\n onClick={lifecycle.reconnect}\n className=\"shrink-0 rounded-md border border-amber-300 bg-white px-2 py-1 font-medium transition-colors hover:bg-amber-100\"\n >\n <RefreshCwIcon className=\"size-3.5\" />\n </button>\n ) : null}\n </div>\n );\n};\n"],"names":["useAthenaStatewireLifecycle","jsxs","cn","jsx","XIcon","RefreshCwIcon"],"mappings":";;;;;;AAMA,MAAM,oBAAwE;AAAA,EAC5E,SAAS;AAAA;AAAA;AAAA,EAGT,aAAa;AAAA,EACb,SAAS;AACX;AAQO,MAAM,uBAA2B,MAAM;AAC5C,QAAM,YAAYA,0BAAAA,4BAAA;AAClB,MAAI,EAAC,uCAAW,OAAO,QAAO;AAC9B,QAAM,EAAE,OAAO,aAAA,IAAiB;AAEhC,SACEC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAWC,OAAAA;AAAAA,QACT;AAAA,QACA,kBAAkB,MAAM,IAAI;AAAA,MAAA;AAAA,MAG9B,UAAA;AAAA,QAAAD,2BAAAA,KAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,UAAAE,2BAAAA,IAAC,KAAA,EAAE,WAAU,yBAAyB,UAAA,MAAM,OAAM;AAAA,UAClDA,2BAAAA,IAAC,KAAA,EAAE,WAAU,0CAA0C,gBAAM,QAAA,CAAQ;AAAA,QAAA,GACvE;AAAA,QACAA,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAW;AAAA,YACX,SAAS;AAAA,YACT,WAAU;AAAA,YAEV,UAAAA,2BAAAA,IAACC,YAAAA,OAAA,EAAM,WAAU,WAAA,CAAW;AAAA,UAAA;AAAA,QAAA;AAAA,MAC9B;AAAA,IAAA;AAAA,EAAA;AAGN;AAMO,MAAM,4BAAgC,MAAM;AACjD,QAAM,YAAYJ,0BAAAA,4BAAA;AAClB,QAAM,aAAa,uCAAW;AAC9B,MAAI,EAAC,yCAAY,UAAU,QAAO;AAClC,QAAM,UAAU,WAAW,WAAW;AAEtC,SACEC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA,MAEV,UAAA;AAAA,QAAAE,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,eAAY;AAAA,YACZ,WAAWD,OAAAA;AAAAA,cACT;AAAA,cACA,UAAU,eAAe;AAAA,YAAA;AAAA,UAC3B;AAAA,QAAA;AAAA,QAEFC,2BAAAA,IAAC,UAAK,WAAU,kBACb,oBAAW,WAAW,WAAW,qBAAsB,4BAAA,CAC1D;AAAA,SACC,uCAAW,aACVA,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAW;AAAA,YACX,SAAS,UAAU;AAAA,YACnB,WAAU;AAAA,YAEV,UAAAA,2BAAAA,IAACE,YAAAA,eAAA,EAAc,WAAU,WAAA,CAAW;AAAA,UAAA;AAAA,QAAA,IAEpC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV;;;"}
1
+ {"version":3,"file":"statewire-banners.cjs","sources":["../../src/chat/statewire-banners.tsx"],"sourcesContent":["import { COLLAB_AGENT_CHANNEL_SESSION_MISMATCH } from '@athenaintel/agent-runtime';\nimport { RefreshCwIcon, SquarePenIcon, XIcon } from 'lucide-react';\nimport type { FC } from 'react';\nimport { useAthenaStatewireLifecycle } from '../provider/statewire-lifecycle-context';\nimport type { AthenaStatewireErrorNotice } from '../runtime/statewire-lifecycle';\nimport { cn } from '../lib/utils';\n\nconst ERROR_BANNER_TONE: Record<AthenaStatewireErrorNotice['kind'], string> = {\n paywall: 'border-violet-200 bg-violet-50 text-violet-900',\n // A refused send, not a broken chat: the thread is busy (out-of-band run)\n // or needs a new chat — amber, like the connection strip.\n 'read-only': 'border-amber-200 bg-amber-50 text-amber-900',\n command: 'border-red-200 bg-red-50 text-red-900',\n};\n\n/**\n * Whether a refusal's way on is a new session: the session keeps the\n * collab-agent channel (the app's mode) it started on, so a send in the other\n * mode can only go to a new one.\n */\nexport function refusalOffersNewSession(code: string | null | undefined): boolean {\n return code === COLLAB_AGENT_CHANNEL_SESSION_MISMATCH;\n}\n\n/** The \"Start a new session\" action a refusal notice offers. */\nexport const StartNewSessionButton: FC<{ onClick: () => void; className?: string }> = ({\n onClick,\n className,\n}) => (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n 'inline-flex shrink-0 items-center gap-1.5 rounded-md border border-current/20 bg-white/70 px-2 py-1 font-medium text-xs transition-colors hover:bg-white',\n className,\n )}\n >\n <SquarePenIcon className=\"size-3.5\" aria-hidden />\n Start a new session\n </button>\n);\n\nexport interface StatewireErrorBannerProps {\n /**\n * Starts a new session — offered when the refusal's way on is one (a send in\n * another mode than the session's). `AthenaChat` passes the thread list's\n * `newThread`; without it the banner offers no action.\n */\n onStartNewSession?: () => void;\n}\n\n/**\n * Dismissible transport-error banner: send rejections (including the\n * pre-cutover-thread dispatch fence's 409), paywall refusals, and command\n * failures that would otherwise vanish into the console after the composer\n * already cleared. Renders nothing outside `AthenaProvider`.\n */\nexport const StatewireErrorBanner: FC<StatewireErrorBannerProps> = ({ onStartNewSession }) => {\n const lifecycle = useAthenaStatewireLifecycle();\n if (!lifecycle?.error) return null;\n const { error, dismissError } = lifecycle;\n const startNewSession =\n onStartNewSession && refusalOffersNewSession(error.code)\n ? () => {\n dismissError();\n onStartNewSession();\n }\n : null;\n\n return (\n <div\n role=\"alert\"\n className={cn(\n 'aui-statewire-error-banner flex w-full items-start gap-2 rounded-xl border px-3 py-2.5',\n ERROR_BANNER_TONE[error.kind],\n )}\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-semibold text-xs\">{error.title}</p>\n <p className=\"pt-0.5 text-xs leading-snug opacity-80\">{error.message}</p>\n </div>\n {startNewSession ? <StartNewSessionButton onClick={startNewSession} /> : null}\n <button\n type=\"button\"\n aria-label=\"Dismiss chat error\"\n onClick={dismissError}\n className=\"shrink-0 rounded p-1 transition-colors hover:bg-black/5\"\n >\n <XIcon className=\"size-3.5\" />\n </button>\n </div>\n );\n};\n\n/**\n * Degraded-connection strip: shown only while the statewire channel is\n * degraded, with a manual reconnect affordance when the transport exposes one.\n */\nexport const StatewireConnectionBanner: FC = () => {\n const lifecycle = useAthenaStatewireLifecycle();\n const connection = lifecycle?.connection;\n if (!connection?.degraded) return null;\n const offline = connection.status === 'stopped';\n\n return (\n <div\n role=\"status\"\n className=\"aui-statewire-connection-banner flex w-full items-center gap-2 rounded-xl border border-amber-200 bg-amber-50 px-3 py-2 text-amber-800 text-xs\"\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'size-2 shrink-0 rounded-full',\n offline ? 'bg-red-500' : 'animate-pulse bg-amber-500',\n )}\n />\n <span className=\"min-w-0 flex-1\">\n {offline ? (connection.message ?? 'Chat is offline.') : 'Retrying chat connection…'}\n </span>\n {lifecycle?.reconnect ? (\n <button\n type=\"button\"\n aria-label=\"Reconnect chat\"\n onClick={lifecycle.reconnect}\n className=\"shrink-0 rounded-md border border-amber-300 bg-white px-2 py-1 font-medium transition-colors hover:bg-amber-100\"\n >\n <RefreshCwIcon className=\"size-3.5\" />\n </button>\n ) : null}\n </div>\n );\n};\n"],"names":["COLLAB_AGENT_CHANNEL_SESSION_MISMATCH","jsxs","cn","jsx","SquarePenIcon","useAthenaStatewireLifecycle","XIcon","RefreshCwIcon"],"mappings":";;;;;;;AAOA,MAAM,oBAAwE;AAAA,EAC5E,SAAS;AAAA;AAAA;AAAA,EAGT,aAAa;AAAA,EACb,SAAS;AACX;AAOO,SAAS,wBAAwB,MAA0C;AAChF,SAAO,SAASA,OAAAA;AAClB;AAGO,MAAM,wBAAyE,CAAC;AAAA,EACrF;AAAA,EACA;AACF,MACEC,2BAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL;AAAA,IACA,WAAWC,OAAAA;AAAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,IAGF,UAAA;AAAA,MAAAC,2BAAAA,IAACC,YAAAA,eAAA,EAAc,WAAU,YAAW,eAAW,MAAC;AAAA,MAAE;AAAA,IAAA;AAAA,EAAA;AAEpD;AAkBK,MAAM,uBAAsD,CAAC,EAAE,wBAAwB;AAC5F,QAAM,YAAYC,0BAAAA,4BAAA;AAClB,MAAI,EAAC,uCAAW,OAAO,QAAO;AAC9B,QAAM,EAAE,OAAO,aAAA,IAAiB;AAChC,QAAM,kBACJ,qBAAqB,wBAAwB,MAAM,IAAI,IACnD,MAAM;AACJ,iBAAA;AACA,sBAAA;AAAA,EACF,IACA;AAEN,SACEJ,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAWC,OAAAA;AAAAA,QACT;AAAA,QACA,kBAAkB,MAAM,IAAI;AAAA,MAAA;AAAA,MAG9B,UAAA;AAAA,QAAAD,2BAAAA,KAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,UAAAE,2BAAAA,IAAC,KAAA,EAAE,WAAU,yBAAyB,UAAA,MAAM,OAAM;AAAA,UAClDA,2BAAAA,IAAC,KAAA,EAAE,WAAU,0CAA0C,gBAAM,QAAA,CAAQ;AAAA,QAAA,GACvE;AAAA,QACC,kBAAkBA,2BAAAA,IAAC,uBAAA,EAAsB,SAAS,iBAAiB,IAAK;AAAA,QACzEA,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAW;AAAA,YACX,SAAS;AAAA,YACT,WAAU;AAAA,YAEV,UAAAA,2BAAAA,IAACG,YAAAA,OAAA,EAAM,WAAU,WAAA,CAAW;AAAA,UAAA;AAAA,QAAA;AAAA,MAC9B;AAAA,IAAA;AAAA,EAAA;AAGN;AAMO,MAAM,4BAAgC,MAAM;AACjD,QAAM,YAAYD,0BAAAA,4BAAA;AAClB,QAAM,aAAa,uCAAW;AAC9B,MAAI,EAAC,yCAAY,UAAU,QAAO;AAClC,QAAM,UAAU,WAAW,WAAW;AAEtC,SACEJ,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA,MAEV,UAAA;AAAA,QAAAE,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,eAAY;AAAA,YACZ,WAAWD,OAAAA;AAAAA,cACT;AAAA,cACA,UAAU,eAAe;AAAA,YAAA;AAAA,UAC3B;AAAA,QAAA;AAAA,QAEFC,2BAAAA,IAAC,UAAK,WAAU,kBACb,oBAAW,WAAW,WAAW,qBAAsB,4BAAA,CAC1D;AAAA,SACC,uCAAW,aACVA,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAW;AAAA,YACX,SAAS,UAAU;AAAA,YACnB,WAAU;AAAA,YAEV,UAAAA,2BAAAA,IAACI,YAAAA,eAAA,EAAc,WAAU,WAAA,CAAW;AAAA,UAAA;AAAA,QAAA,IAEpC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV;;;;;"}
@@ -1,11 +1,30 @@
1
1
  import type { FC } from 'react';
2
+ /**
3
+ * Whether a refusal's way on is a new session: the session keeps the
4
+ * collab-agent channel (the app's mode) it started on, so a send in the other
5
+ * mode can only go to a new one.
6
+ */
7
+ export declare function refusalOffersNewSession(code: string | null | undefined): boolean;
8
+ /** The "Start a new session" action a refusal notice offers. */
9
+ export declare const StartNewSessionButton: FC<{
10
+ onClick: () => void;
11
+ className?: string;
12
+ }>;
13
+ export interface StatewireErrorBannerProps {
14
+ /**
15
+ * Starts a new session — offered when the refusal's way on is one (a send in
16
+ * another mode than the session's). `AthenaChat` passes the thread list's
17
+ * `newThread`; without it the banner offers no action.
18
+ */
19
+ onStartNewSession?: () => void;
20
+ }
2
21
  /**
3
22
  * Dismissible transport-error banner: send rejections (including the
4
23
  * pre-cutover-thread dispatch fence's 409), paywall refusals, and command
5
24
  * failures that would otherwise vanish into the console after the composer
6
25
  * already cleared. Renders nothing outside `AthenaProvider`.
7
26
  */
8
- export declare const StatewireErrorBanner: FC;
27
+ export declare const StatewireErrorBanner: FC<StatewireErrorBannerProps>;
9
28
  /**
10
29
  * Degraded-connection strip: shown only while the statewire channel is
11
30
  * degraded, with a manual reconnect affordance when the transport exposes one.
@@ -1,6 +1,7 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
- import { RefreshCwIcon, XIcon } from "lucide-react";
2
+ import { RefreshCwIcon, XIcon, SquarePenIcon } from "lucide-react";
3
3
  import { useAthenaStatewireLifecycle } from "../provider/statewire-lifecycle-context.js";
4
+ import { COLLAB_AGENT_CHANNEL_SESSION_MISMATCH } from "../agent-runtime/src/errors.js";
4
5
  import { cn } from "cnfast";
5
6
  const ERROR_BANNER_TONE = {
6
7
  paywall: "border-violet-200 bg-violet-50 text-violet-900",
@@ -9,10 +10,35 @@ const ERROR_BANNER_TONE = {
9
10
  "read-only": "border-amber-200 bg-amber-50 text-amber-900",
10
11
  command: "border-red-200 bg-red-50 text-red-900"
11
12
  };
12
- const StatewireErrorBanner = () => {
13
+ function refusalOffersNewSession(code) {
14
+ return code === COLLAB_AGENT_CHANNEL_SESSION_MISMATCH;
15
+ }
16
+ const StartNewSessionButton = ({
17
+ onClick,
18
+ className
19
+ }) => /* @__PURE__ */ jsxs(
20
+ "button",
21
+ {
22
+ type: "button",
23
+ onClick,
24
+ className: cn(
25
+ "inline-flex shrink-0 items-center gap-1.5 rounded-md border border-current/20 bg-white/70 px-2 py-1 font-medium text-xs transition-colors hover:bg-white",
26
+ className
27
+ ),
28
+ children: [
29
+ /* @__PURE__ */ jsx(SquarePenIcon, { className: "size-3.5", "aria-hidden": true }),
30
+ "Start a new session"
31
+ ]
32
+ }
33
+ );
34
+ const StatewireErrorBanner = ({ onStartNewSession }) => {
13
35
  const lifecycle = useAthenaStatewireLifecycle();
14
36
  if (!(lifecycle == null ? void 0 : lifecycle.error)) return null;
15
37
  const { error, dismissError } = lifecycle;
38
+ const startNewSession = onStartNewSession && refusalOffersNewSession(error.code) ? () => {
39
+ dismissError();
40
+ onStartNewSession();
41
+ } : null;
16
42
  return /* @__PURE__ */ jsxs(
17
43
  "div",
18
44
  {
@@ -26,6 +52,7 @@ const StatewireErrorBanner = () => {
26
52
  /* @__PURE__ */ jsx("p", { className: "font-semibold text-xs", children: error.title }),
27
53
  /* @__PURE__ */ jsx("p", { className: "pt-0.5 text-xs leading-snug opacity-80", children: error.message })
28
54
  ] }),
55
+ startNewSession ? /* @__PURE__ */ jsx(StartNewSessionButton, { onClick: startNewSession }) : null,
29
56
  /* @__PURE__ */ jsx(
30
57
  "button",
31
58
  {
@@ -77,7 +104,9 @@ const StatewireConnectionBanner = () => {
77
104
  );
78
105
  };
79
106
  export {
107
+ StartNewSessionButton,
80
108
  StatewireConnectionBanner,
81
- StatewireErrorBanner
109
+ StatewireErrorBanner,
110
+ refusalOffersNewSession
82
111
  };
83
112
  //# sourceMappingURL=statewire-banners.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"statewire-banners.js","sources":["../../src/chat/statewire-banners.tsx"],"sourcesContent":["import { RefreshCwIcon, XIcon } from 'lucide-react';\nimport type { FC } from 'react';\nimport { useAthenaStatewireLifecycle } from '../provider/statewire-lifecycle-context';\nimport type { AthenaStatewireErrorNotice } from '../runtime/statewire-lifecycle';\nimport { cn } from '../lib/utils';\n\nconst ERROR_BANNER_TONE: Record<AthenaStatewireErrorNotice['kind'], string> = {\n paywall: 'border-violet-200 bg-violet-50 text-violet-900',\n // A refused send, not a broken chat: the thread is busy (out-of-band run)\n // or needs a new chat — amber, like the connection strip.\n 'read-only': 'border-amber-200 bg-amber-50 text-amber-900',\n command: 'border-red-200 bg-red-50 text-red-900',\n};\n\n/**\n * Dismissible transport-error banner: send rejections (including the\n * pre-cutover-thread dispatch fence's 409), paywall refusals, and command\n * failures that would otherwise vanish into the console after the composer\n * already cleared. Renders nothing outside `AthenaProvider`.\n */\nexport const StatewireErrorBanner: FC = () => {\n const lifecycle = useAthenaStatewireLifecycle();\n if (!lifecycle?.error) return null;\n const { error, dismissError } = lifecycle;\n\n return (\n <div\n role=\"alert\"\n className={cn(\n 'aui-statewire-error-banner flex w-full items-start gap-2 rounded-xl border px-3 py-2.5',\n ERROR_BANNER_TONE[error.kind],\n )}\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-semibold text-xs\">{error.title}</p>\n <p className=\"pt-0.5 text-xs leading-snug opacity-80\">{error.message}</p>\n </div>\n <button\n type=\"button\"\n aria-label=\"Dismiss chat error\"\n onClick={dismissError}\n className=\"shrink-0 rounded p-1 transition-colors hover:bg-black/5\"\n >\n <XIcon className=\"size-3.5\" />\n </button>\n </div>\n );\n};\n\n/**\n * Degraded-connection strip: shown only while the statewire channel is\n * degraded, with a manual reconnect affordance when the transport exposes one.\n */\nexport const StatewireConnectionBanner: FC = () => {\n const lifecycle = useAthenaStatewireLifecycle();\n const connection = lifecycle?.connection;\n if (!connection?.degraded) return null;\n const offline = connection.status === 'stopped';\n\n return (\n <div\n role=\"status\"\n className=\"aui-statewire-connection-banner flex w-full items-center gap-2 rounded-xl border border-amber-200 bg-amber-50 px-3 py-2 text-amber-800 text-xs\"\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'size-2 shrink-0 rounded-full',\n offline ? 'bg-red-500' : 'animate-pulse bg-amber-500',\n )}\n />\n <span className=\"min-w-0 flex-1\">\n {offline ? (connection.message ?? 'Chat is offline.') : 'Retrying chat connection…'}\n </span>\n {lifecycle?.reconnect ? (\n <button\n type=\"button\"\n aria-label=\"Reconnect chat\"\n onClick={lifecycle.reconnect}\n className=\"shrink-0 rounded-md border border-amber-300 bg-white px-2 py-1 font-medium transition-colors hover:bg-amber-100\"\n >\n <RefreshCwIcon className=\"size-3.5\" />\n </button>\n ) : null}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;AAMA,MAAM,oBAAwE;AAAA,EAC5E,SAAS;AAAA;AAAA;AAAA,EAGT,aAAa;AAAA,EACb,SAAS;AACX;AAQO,MAAM,uBAA2B,MAAM;AAC5C,QAAM,YAAY,4BAAA;AAClB,MAAI,EAAC,uCAAW,OAAO,QAAO;AAC9B,QAAM,EAAE,OAAO,aAAA,IAAiB;AAEhC,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAW;AAAA,QACT;AAAA,QACA,kBAAkB,MAAM,IAAI;AAAA,MAAA;AAAA,MAG9B,UAAA;AAAA,QAAA,qBAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,UAAA,oBAAC,KAAA,EAAE,WAAU,yBAAyB,UAAA,MAAM,OAAM;AAAA,UAClD,oBAAC,KAAA,EAAE,WAAU,0CAA0C,gBAAM,QAAA,CAAQ;AAAA,QAAA,GACvE;AAAA,QACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAW;AAAA,YACX,SAAS;AAAA,YACT,WAAU;AAAA,YAEV,UAAA,oBAAC,OAAA,EAAM,WAAU,WAAA,CAAW;AAAA,UAAA;AAAA,QAAA;AAAA,MAC9B;AAAA,IAAA;AAAA,EAAA;AAGN;AAMO,MAAM,4BAAgC,MAAM;AACjD,QAAM,YAAY,4BAAA;AAClB,QAAM,aAAa,uCAAW;AAC9B,MAAI,EAAC,yCAAY,UAAU,QAAO;AAClC,QAAM,UAAU,WAAW,WAAW;AAEtC,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA,MAEV,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,eAAY;AAAA,YACZ,WAAW;AAAA,cACT;AAAA,cACA,UAAU,eAAe;AAAA,YAAA;AAAA,UAC3B;AAAA,QAAA;AAAA,QAEF,oBAAC,UAAK,WAAU,kBACb,oBAAW,WAAW,WAAW,qBAAsB,4BAAA,CAC1D;AAAA,SACC,uCAAW,aACV;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAW;AAAA,YACX,SAAS,UAAU;AAAA,YACnB,WAAU;AAAA,YAEV,UAAA,oBAAC,eAAA,EAAc,WAAU,WAAA,CAAW;AAAA,UAAA;AAAA,QAAA,IAEpC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV;"}
1
+ {"version":3,"file":"statewire-banners.js","sources":["../../src/chat/statewire-banners.tsx"],"sourcesContent":["import { COLLAB_AGENT_CHANNEL_SESSION_MISMATCH } from '@athenaintel/agent-runtime';\nimport { RefreshCwIcon, SquarePenIcon, XIcon } from 'lucide-react';\nimport type { FC } from 'react';\nimport { useAthenaStatewireLifecycle } from '../provider/statewire-lifecycle-context';\nimport type { AthenaStatewireErrorNotice } from '../runtime/statewire-lifecycle';\nimport { cn } from '../lib/utils';\n\nconst ERROR_BANNER_TONE: Record<AthenaStatewireErrorNotice['kind'], string> = {\n paywall: 'border-violet-200 bg-violet-50 text-violet-900',\n // A refused send, not a broken chat: the thread is busy (out-of-band run)\n // or needs a new chat — amber, like the connection strip.\n 'read-only': 'border-amber-200 bg-amber-50 text-amber-900',\n command: 'border-red-200 bg-red-50 text-red-900',\n};\n\n/**\n * Whether a refusal's way on is a new session: the session keeps the\n * collab-agent channel (the app's mode) it started on, so a send in the other\n * mode can only go to a new one.\n */\nexport function refusalOffersNewSession(code: string | null | undefined): boolean {\n return code === COLLAB_AGENT_CHANNEL_SESSION_MISMATCH;\n}\n\n/** The \"Start a new session\" action a refusal notice offers. */\nexport const StartNewSessionButton: FC<{ onClick: () => void; className?: string }> = ({\n onClick,\n className,\n}) => (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(\n 'inline-flex shrink-0 items-center gap-1.5 rounded-md border border-current/20 bg-white/70 px-2 py-1 font-medium text-xs transition-colors hover:bg-white',\n className,\n )}\n >\n <SquarePenIcon className=\"size-3.5\" aria-hidden />\n Start a new session\n </button>\n);\n\nexport interface StatewireErrorBannerProps {\n /**\n * Starts a new session — offered when the refusal's way on is one (a send in\n * another mode than the session's). `AthenaChat` passes the thread list's\n * `newThread`; without it the banner offers no action.\n */\n onStartNewSession?: () => void;\n}\n\n/**\n * Dismissible transport-error banner: send rejections (including the\n * pre-cutover-thread dispatch fence's 409), paywall refusals, and command\n * failures that would otherwise vanish into the console after the composer\n * already cleared. Renders nothing outside `AthenaProvider`.\n */\nexport const StatewireErrorBanner: FC<StatewireErrorBannerProps> = ({ onStartNewSession }) => {\n const lifecycle = useAthenaStatewireLifecycle();\n if (!lifecycle?.error) return null;\n const { error, dismissError } = lifecycle;\n const startNewSession =\n onStartNewSession && refusalOffersNewSession(error.code)\n ? () => {\n dismissError();\n onStartNewSession();\n }\n : null;\n\n return (\n <div\n role=\"alert\"\n className={cn(\n 'aui-statewire-error-banner flex w-full items-start gap-2 rounded-xl border px-3 py-2.5',\n ERROR_BANNER_TONE[error.kind],\n )}\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"font-semibold text-xs\">{error.title}</p>\n <p className=\"pt-0.5 text-xs leading-snug opacity-80\">{error.message}</p>\n </div>\n {startNewSession ? <StartNewSessionButton onClick={startNewSession} /> : null}\n <button\n type=\"button\"\n aria-label=\"Dismiss chat error\"\n onClick={dismissError}\n className=\"shrink-0 rounded p-1 transition-colors hover:bg-black/5\"\n >\n <XIcon className=\"size-3.5\" />\n </button>\n </div>\n );\n};\n\n/**\n * Degraded-connection strip: shown only while the statewire channel is\n * degraded, with a manual reconnect affordance when the transport exposes one.\n */\nexport const StatewireConnectionBanner: FC = () => {\n const lifecycle = useAthenaStatewireLifecycle();\n const connection = lifecycle?.connection;\n if (!connection?.degraded) return null;\n const offline = connection.status === 'stopped';\n\n return (\n <div\n role=\"status\"\n className=\"aui-statewire-connection-banner flex w-full items-center gap-2 rounded-xl border border-amber-200 bg-amber-50 px-3 py-2 text-amber-800 text-xs\"\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'size-2 shrink-0 rounded-full',\n offline ? 'bg-red-500' : 'animate-pulse bg-amber-500',\n )}\n />\n <span className=\"min-w-0 flex-1\">\n {offline ? (connection.message ?? 'Chat is offline.') : 'Retrying chat connection…'}\n </span>\n {lifecycle?.reconnect ? (\n <button\n type=\"button\"\n aria-label=\"Reconnect chat\"\n onClick={lifecycle.reconnect}\n className=\"shrink-0 rounded-md border border-amber-300 bg-white px-2 py-1 font-medium transition-colors hover:bg-amber-100\"\n >\n <RefreshCwIcon className=\"size-3.5\" />\n </button>\n ) : null}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;AAOA,MAAM,oBAAwE;AAAA,EAC5E,SAAS;AAAA;AAAA;AAAA,EAGT,aAAa;AAAA,EACb,SAAS;AACX;AAOO,SAAS,wBAAwB,MAA0C;AAChF,SAAO,SAAS;AAClB;AAGO,MAAM,wBAAyE,CAAC;AAAA,EACrF;AAAA,EACA;AACF,MACE;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,IAGF,UAAA;AAAA,MAAA,oBAAC,eAAA,EAAc,WAAU,YAAW,eAAW,MAAC;AAAA,MAAE;AAAA,IAAA;AAAA,EAAA;AAEpD;AAkBK,MAAM,uBAAsD,CAAC,EAAE,wBAAwB;AAC5F,QAAM,YAAY,4BAAA;AAClB,MAAI,EAAC,uCAAW,OAAO,QAAO;AAC9B,QAAM,EAAE,OAAO,aAAA,IAAiB;AAChC,QAAM,kBACJ,qBAAqB,wBAAwB,MAAM,IAAI,IACnD,MAAM;AACJ,iBAAA;AACA,sBAAA;AAAA,EACF,IACA;AAEN,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAW;AAAA,QACT;AAAA,QACA,kBAAkB,MAAM,IAAI;AAAA,MAAA;AAAA,MAG9B,UAAA;AAAA,QAAA,qBAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,UAAA,oBAAC,KAAA,EAAE,WAAU,yBAAyB,UAAA,MAAM,OAAM;AAAA,UAClD,oBAAC,KAAA,EAAE,WAAU,0CAA0C,gBAAM,QAAA,CAAQ;AAAA,QAAA,GACvE;AAAA,QACC,kBAAkB,oBAAC,uBAAA,EAAsB,SAAS,iBAAiB,IAAK;AAAA,QACzE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAW;AAAA,YACX,SAAS;AAAA,YACT,WAAU;AAAA,YAEV,UAAA,oBAAC,OAAA,EAAM,WAAU,WAAA,CAAW;AAAA,UAAA;AAAA,QAAA;AAAA,MAC9B;AAAA,IAAA;AAAA,EAAA;AAGN;AAMO,MAAM,4BAAgC,MAAM;AACjD,QAAM,YAAY,4BAAA;AAClB,QAAM,aAAa,uCAAW;AAC9B,MAAI,EAAC,yCAAY,UAAU,QAAO;AAClC,QAAM,UAAU,WAAW,WAAW;AAEtC,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA,MAEV,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,eAAY;AAAA,YACZ,WAAW;AAAA,cACT;AAAA,cACA,UAAU,eAAe;AAAA,YAAA;AAAA,UAC3B;AAAA,QAAA;AAAA,QAEF,oBAAC,UAAK,WAAU,kBACb,oBAAW,WAAW,WAAW,qBAAsB,4BAAA,CAC1D;AAAA,SACC,uCAAW,aACV;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,cAAW;AAAA,YACX,SAAS,UAAU;AAAA,YACnB,WAAU;AAAA,YAEV,UAAA,oBAAC,eAAA,EAAc,WAAU,WAAA,CAAW;AAAA,UAAA;AAAA,QAAA,IAEpC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const athenaDiagnostics = require("../diagnostics/athena-diagnostics.cjs");
4
4
  const assistantStream = require("assistant-stream");
5
- const clientTools = require("../packages/agent-runtime/src/client-tools.cjs");
5
+ const clientTools = require("../agent-runtime/src/client-tools.cjs");
6
6
  function hasCallableExecute(entry) {
7
7
  return !!entry && typeof entry === "object" && typeof entry.execute === "function";
8
8
  }
@@ -1,6 +1,6 @@
1
1
  import { athenaDiagnostics } from "../diagnostics/athena-diagnostics.js";
2
2
  import { toJSONSchema, ToolResponse } from "assistant-stream";
3
- import { clientToolRunConfigEntries } from "../packages/agent-runtime/src/client-tools.js";
3
+ import { clientToolRunConfigEntries } from "../agent-runtime/src/client-tools.js";
4
4
  function hasCallableExecute(entry) {
5
5
  return !!entry && typeof entry === "object" && typeof entry.execute === "function";
6
6
  }
@@ -144,7 +144,7 @@ const CollapsibleGroup = ({
144
144
  open ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
145
145
  ),
146
146
  style: { borderColor: `${theme.color}33` },
147
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2 px-5 py-4", children }) })
147
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-2 px-5 py-4", children }) })
148
148
  }
149
149
  )
150
150
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"CollapsibleGroup.cjs","sources":["../../../src/chat/super-grouping/CollapsibleGroup.tsx"],"sourcesContent":["import { useAuiState } from '@assistant-ui/react';\nimport { ChevronDown, ChevronUp } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { createContext, useContext, useId, useMemo, useState } from 'react';\nimport { cn } from '../../lib/utils';\nimport { createToolBasedGroupingFunction, type GroupingFunction } from './grouping-function';\nimport { defaultGetToolGroupKey } from './toolkit-map';\n\n/**\n * Per-toolkit theme: the brand color that tints the group header, and an\n * optional icon URL a host serves (Olympus ships toolkit SVGs; the SDK does\n * not bundle images, so it tints only).\n */\nexport type ToolkitTheme = {\n /** Hex brand color for this toolkit. */\n color: string;\n /** Absolute or root-relative URL of the toolkit icon, when the host has one. */\n icon?: string;\n};\n\n/** Brand colors keyed by toolkit display name — the group keys the grouping function emits. */\nexport const TOOLKIT_THEMES: Record<string, ToolkitTheme> = {\n Web: { color: '#7BCCFA' },\n Document: { color: '#4586F9' },\n 'Document (Word)': { color: '#4586F9' },\n Notebook: { color: '#FFAB00' },\n Python: { color: '#00A76F' },\n Spreadsheet: { color: '#00A76F' },\n Email: { color: '#B584FF' },\n AOP: { color: '#336DFF' },\n App: { color: '#7336F5' },\n Presentation: { color: '#F56B36' },\n 'User Interface': { color: '#7336F5' },\n Canvas: { color: '#002542' },\n Computer: { color: '#3E0042' },\n Database: { color: '#7336F5' },\n 'Chrome Browser': { color: '#4285F4' },\n};\n\nexport const DEFAULT_TOOLKIT_THEME: ToolkitTheme = { color: '#919EAB' };\n\nconst DEFAULT_GROUPING = createToolBasedGroupingFunction(defaultGetToolGroupKey);\n\n/**\n * The grouping in force for the message being rendered. `SuperGroupingCard`\n * provides it so each `CollapsibleGroup` can tell whether it is the last\n * grouped block (the one that opens by default while the run is live) without\n * being handed the function as a prop through `Unstable_PartsGrouped`.\n */\nconst SuperGroupingContext = createContext<{ groupingFunction: GroupingFunction } | null>(null);\n\nexport const SuperGroupingProvider = SuperGroupingContext.Provider;\n\nexport interface CollapsibleGroupProps {\n /** Group key from the grouping function (toolkit display name); `undefined` for ungrouped parts. */\n groupKey: string | undefined;\n /** Indices of the parts belonging to this group. */\n indices: number[];\n children?: ReactNode;\n /** Host toolkit themes (colors, icons), merged over the built-in colors. */\n themes?: Record<string, ToolkitTheme>;\n /**\n * Keep the group open regardless of the run state — a host rule such as\n * \"an unsubmitted email draft stays visible\". The user's own toggle still\n * wins once used.\n */\n forceOpen?: boolean;\n /**\n * Do not open the live group by default (screenshot-heavy browser-control\n * runs hold hundreds of actions); the user can still expand it.\n */\n compactWhileRunning?: boolean;\n /** Extra header controls, rendered as siblings of the toggle (never nested buttons). */\n headerActions?: ReactNode;\n /** The grouping used to find the last grouped block; defaults to the card's, then the SDK's. */\n groupingFunction?: GroupingFunction;\n className?: string;\n}\n\n/**\n * Per-toolkit collapsible block inside the grouped details panel — \"Using\n * Spreadsheet Toolkit · 4 tool calls\" — used by the SDK, Olympus, and the\n * Chrome extension. The last grouped block opens by default while the message\n * is running and settles closed; the user's toggle is remembered for the\n * mounted block.\n *\n * Selector discipline: one raw `s.message.content` read; every per-group\n * derivation (grouping, counts) runs in `useMemo` off it, so the grouping\n * pass happens once per content change instead of once per selector pass.\n */\nexport const CollapsibleGroup = ({\n groupKey,\n indices,\n children,\n themes,\n forceOpen = false,\n compactWhileRunning = false,\n headerActions,\n groupingFunction,\n className,\n}: CollapsibleGroupProps) => {\n const panelId = useId();\n const isMessageRunning = useAuiState((s) => s.message.status?.type === 'running');\n const messageContent = useAuiState((s) =>\n s.message.role === 'assistant' ? s.message.content : undefined,\n );\n const contextGrouping = useContext(SuperGroupingContext)?.groupingFunction;\n const grouping = groupingFunction ?? contextGrouping ?? DEFAULT_GROUPING;\n\n const lastIndex = indices.at(-1);\n const isLastGroup = useMemo(() => {\n if (!messageContent) return false;\n const lastGroup = grouping(messageContent)\n .filter((group) => group.indices.length > 1)\n .at(-1);\n return lastGroup?.indices.at(-1) === lastIndex;\n }, [messageContent, grouping, lastIndex]);\n\n const toolCallCount = useMemo(\n () =>\n messageContent\n ? indices.reduce(\n (count, index) => (messageContent[index]?.type === 'tool-call' ? count + 1 : count),\n 0,\n )\n : 0,\n [messageContent, indices],\n );\n\n const theme = useMemo<ToolkitTheme>(\n () => (groupKey ? { ...TOOLKIT_THEMES, ...themes }[groupKey] ?? DEFAULT_TOOLKIT_THEME : DEFAULT_TOOLKIT_THEME),\n [groupKey, themes],\n );\n\n const [userOpened, setOpen] = useState<boolean>();\n const autoOpen = isLastGroup && isMessageRunning && !compactWhileRunning;\n const open = userOpened ?? (autoOpen || forceOpen);\n\n if (!groupKey || indices.length <= 1) return <>{children}</>;\n\n const toggle = () => setOpen(!open);\n\n return (\n <div\n data-slot=\"collapsible-group\"\n data-group-key={groupKey}\n className={cn('my-4 rounded-2xl border shadow-sm', className)}\n style={{\n borderColor: `${theme.color}33`,\n background: `linear-gradient(to right, ${theme.color}0d, transparent, ${theme.color}0d)`,\n }}\n >\n <div className=\"flex w-full items-center rounded-2xl\">\n <button\n type=\"button\"\n onClick={toggle}\n aria-expanded={open}\n aria-controls={panelId}\n className=\"flex min-w-0 flex-1 items-center justify-between gap-3 rounded-2xl px-5 py-3 text-left transition-colors hover:bg-black/5 dark:hover:bg-white/5\"\n >\n <span className=\"flex min-w-0 items-center gap-3 text-foreground/90\">\n {theme.icon ? (\n <img src={theme.icon} alt=\"\" aria-hidden=\"true\" className=\"size-5 shrink-0\" />\n ) : (\n <span\n className=\"inline-block size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: theme.color }}\n aria-hidden=\"true\"\n />\n )}\n <span className=\"truncate text-sm font-semibold\">\n {isMessageRunning ? 'Using ' : 'Used '}\n {groupKey} Toolkit\n </span>\n </span>\n <span className=\"shrink-0 text-xs font-medium text-muted-foreground\">\n {toolCallCount} tool {toolCallCount === 1 ? 'call' : 'calls'}\n </span>\n </button>\n <div className=\"flex shrink-0 items-center gap-1 pr-3 pl-1\">\n {headerActions}\n <button\n type=\"button\"\n onClick={toggle}\n aria-label={open ? 'Collapse toolkit group' : 'Expand toolkit group'}\n aria-expanded={open}\n aria-controls={panelId}\n className=\"flex items-center justify-center rounded-md p-1 text-muted-foreground transition-colors hover:bg-black/5 dark:hover:bg-white/5\"\n >\n {open ? <ChevronUp size={16} /> : <ChevronDown size={16} />}\n </button>\n </div>\n </div>\n\n <div\n id={panelId}\n className={cn(\n 'grid overflow-hidden border-t transition-[grid-template-rows] duration-200 ease-in-out motion-reduce:transition-none',\n open ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]',\n )}\n style={{ borderColor: `${theme.color}33` }}\n >\n <div className=\"overflow-hidden\">\n <div className=\"space-y-2 px-5 py-4\">{children}</div>\n </div>\n </div>\n </div>\n );\n};\n"],"names":["createToolBasedGroupingFunction","defaultGetToolGroupKey","createContext","groupingFunction","useId","useAuiState","_a","useContext","useMemo","useState","jsxs","cn","jsx","ChevronUp","ChevronDown"],"mappings":"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"}
1
+ {"version":3,"file":"CollapsibleGroup.cjs","sources":["../../../src/chat/super-grouping/CollapsibleGroup.tsx"],"sourcesContent":["import { useAuiState } from '@assistant-ui/react';\nimport { ChevronDown, ChevronUp } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { createContext, useContext, useId, useMemo, useState } from 'react';\nimport { cn } from '../../lib/utils';\nimport { createToolBasedGroupingFunction, type GroupingFunction } from './grouping-function';\nimport { defaultGetToolGroupKey } from './toolkit-map';\n\n/**\n * Per-toolkit theme: the brand color that tints the group header, and an\n * optional icon URL a host serves (Olympus ships toolkit SVGs; the SDK does\n * not bundle images, so it tints only).\n */\nexport type ToolkitTheme = {\n /** Hex brand color for this toolkit. */\n color: string;\n /** Absolute or root-relative URL of the toolkit icon, when the host has one. */\n icon?: string;\n};\n\n/** Brand colors keyed by toolkit display name — the group keys the grouping function emits. */\nexport const TOOLKIT_THEMES: Record<string, ToolkitTheme> = {\n Web: { color: '#7BCCFA' },\n Document: { color: '#4586F9' },\n 'Document (Word)': { color: '#4586F9' },\n Notebook: { color: '#FFAB00' },\n Python: { color: '#00A76F' },\n Spreadsheet: { color: '#00A76F' },\n Email: { color: '#B584FF' },\n AOP: { color: '#336DFF' },\n App: { color: '#7336F5' },\n Presentation: { color: '#F56B36' },\n 'User Interface': { color: '#7336F5' },\n Canvas: { color: '#002542' },\n Computer: { color: '#3E0042' },\n Database: { color: '#7336F5' },\n 'Chrome Browser': { color: '#4285F4' },\n};\n\nexport const DEFAULT_TOOLKIT_THEME: ToolkitTheme = { color: '#919EAB' };\n\nconst DEFAULT_GROUPING = createToolBasedGroupingFunction(defaultGetToolGroupKey);\n\n/**\n * The grouping in force for the message being rendered. `SuperGroupingCard`\n * provides it so each `CollapsibleGroup` can tell whether it is the last\n * grouped block (the one that opens by default while the run is live) without\n * being handed the function as a prop through `Unstable_PartsGrouped`.\n */\nconst SuperGroupingContext = createContext<{ groupingFunction: GroupingFunction } | null>(null);\n\nexport const SuperGroupingProvider = SuperGroupingContext.Provider;\n\nexport interface CollapsibleGroupProps {\n /** Group key from the grouping function (toolkit display name); `undefined` for ungrouped parts. */\n groupKey: string | undefined;\n /** Indices of the parts belonging to this group. */\n indices: number[];\n children?: ReactNode;\n /** Host toolkit themes (colors, icons), merged over the built-in colors. */\n themes?: Record<string, ToolkitTheme>;\n /**\n * Keep the group open regardless of the run state — a host rule such as\n * \"an unsubmitted email draft stays visible\". The user's own toggle still\n * wins once used.\n */\n forceOpen?: boolean;\n /**\n * Do not open the live group by default (screenshot-heavy browser-control\n * runs hold hundreds of actions); the user can still expand it.\n */\n compactWhileRunning?: boolean;\n /** Extra header controls, rendered as siblings of the toggle (never nested buttons). */\n headerActions?: ReactNode;\n /** The grouping used to find the last grouped block; defaults to the card's, then the SDK's. */\n groupingFunction?: GroupingFunction;\n className?: string;\n}\n\n/**\n * Per-toolkit collapsible block inside the grouped details panel — \"Using\n * Spreadsheet Toolkit · 4 tool calls\" — used by the SDK, Olympus, and the\n * Chrome extension. The last grouped block opens by default while the message\n * is running and settles closed; the user's toggle is remembered for the\n * mounted block.\n *\n * Selector discipline: one raw `s.message.content` read; every per-group\n * derivation (grouping, counts) runs in `useMemo` off it, so the grouping\n * pass happens once per content change instead of once per selector pass.\n */\nexport const CollapsibleGroup = ({\n groupKey,\n indices,\n children,\n themes,\n forceOpen = false,\n compactWhileRunning = false,\n headerActions,\n groupingFunction,\n className,\n}: CollapsibleGroupProps) => {\n const panelId = useId();\n const isMessageRunning = useAuiState((s) => s.message.status?.type === 'running');\n const messageContent = useAuiState((s) =>\n s.message.role === 'assistant' ? s.message.content : undefined,\n );\n const contextGrouping = useContext(SuperGroupingContext)?.groupingFunction;\n const grouping = groupingFunction ?? contextGrouping ?? DEFAULT_GROUPING;\n\n const lastIndex = indices.at(-1);\n const isLastGroup = useMemo(() => {\n if (!messageContent) return false;\n const lastGroup = grouping(messageContent)\n .filter((group) => group.indices.length > 1)\n .at(-1);\n return lastGroup?.indices.at(-1) === lastIndex;\n }, [messageContent, grouping, lastIndex]);\n\n const toolCallCount = useMemo(\n () =>\n messageContent\n ? indices.reduce(\n (count, index) => (messageContent[index]?.type === 'tool-call' ? count + 1 : count),\n 0,\n )\n : 0,\n [messageContent, indices],\n );\n\n const theme = useMemo<ToolkitTheme>(\n () => (groupKey ? { ...TOOLKIT_THEMES, ...themes }[groupKey] ?? DEFAULT_TOOLKIT_THEME : DEFAULT_TOOLKIT_THEME),\n [groupKey, themes],\n );\n\n const [userOpened, setOpen] = useState<boolean>();\n const autoOpen = isLastGroup && isMessageRunning && !compactWhileRunning;\n const open = userOpened ?? (autoOpen || forceOpen);\n\n if (!groupKey || indices.length <= 1) return <>{children}</>;\n\n const toggle = () => setOpen(!open);\n\n return (\n <div\n data-slot=\"collapsible-group\"\n data-group-key={groupKey}\n className={cn('my-4 rounded-2xl border shadow-sm', className)}\n style={{\n borderColor: `${theme.color}33`,\n background: `linear-gradient(to right, ${theme.color}0d, transparent, ${theme.color}0d)`,\n }}\n >\n <div className=\"flex w-full items-center rounded-2xl\">\n <button\n type=\"button\"\n onClick={toggle}\n aria-expanded={open}\n aria-controls={panelId}\n className=\"flex min-w-0 flex-1 items-center justify-between gap-3 rounded-2xl px-5 py-3 text-left transition-colors hover:bg-black/5 dark:hover:bg-white/5\"\n >\n <span className=\"flex min-w-0 items-center gap-3 text-foreground/90\">\n {theme.icon ? (\n <img src={theme.icon} alt=\"\" aria-hidden=\"true\" className=\"size-5 shrink-0\" />\n ) : (\n <span\n className=\"inline-block size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: theme.color }}\n aria-hidden=\"true\"\n />\n )}\n <span className=\"truncate text-sm font-semibold\">\n {isMessageRunning ? 'Using ' : 'Used '}\n {groupKey} Toolkit\n </span>\n </span>\n <span className=\"shrink-0 text-xs font-medium text-muted-foreground\">\n {toolCallCount} tool {toolCallCount === 1 ? 'call' : 'calls'}\n </span>\n </button>\n <div className=\"flex shrink-0 items-center gap-1 pr-3 pl-1\">\n {headerActions}\n <button\n type=\"button\"\n onClick={toggle}\n aria-label={open ? 'Collapse toolkit group' : 'Expand toolkit group'}\n aria-expanded={open}\n aria-controls={panelId}\n className=\"flex items-center justify-center rounded-md p-1 text-muted-foreground transition-colors hover:bg-black/5 dark:hover:bg-white/5\"\n >\n {open ? <ChevronUp size={16} /> : <ChevronDown size={16} />}\n </button>\n </div>\n </div>\n\n <div\n id={panelId}\n className={cn(\n 'grid overflow-hidden border-t transition-[grid-template-rows] duration-200 ease-in-out motion-reduce:transition-none',\n open ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]',\n )}\n style={{ borderColor: `${theme.color}33` }}\n >\n <div className=\"overflow-hidden\">\n <div className=\"flex flex-col gap-2 px-5 py-4\">{children}</div>\n </div>\n </div>\n </div>\n );\n};\n"],"names":["createToolBasedGroupingFunction","defaultGetToolGroupKey","createContext","groupingFunction","useId","useAuiState","_a","useContext","useMemo","useState","jsxs","cn","jsx","ChevronUp","ChevronDown"],"mappings":"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"}
@@ -142,7 +142,7 @@ const CollapsibleGroup = ({
142
142
  open ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
143
143
  ),
144
144
  style: { borderColor: `${theme.color}33` },
145
- children: /* @__PURE__ */ jsx("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: "space-y-2 px-5 py-4", children }) })
145
+ children: /* @__PURE__ */ jsx("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2 px-5 py-4", children }) })
146
146
  }
147
147
  )
148
148
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"CollapsibleGroup.js","sources":["../../../src/chat/super-grouping/CollapsibleGroup.tsx"],"sourcesContent":["import { useAuiState } from '@assistant-ui/react';\nimport { ChevronDown, ChevronUp } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { createContext, useContext, useId, useMemo, useState } from 'react';\nimport { cn } from '../../lib/utils';\nimport { createToolBasedGroupingFunction, type GroupingFunction } from './grouping-function';\nimport { defaultGetToolGroupKey } from './toolkit-map';\n\n/**\n * Per-toolkit theme: the brand color that tints the group header, and an\n * optional icon URL a host serves (Olympus ships toolkit SVGs; the SDK does\n * not bundle images, so it tints only).\n */\nexport type ToolkitTheme = {\n /** Hex brand color for this toolkit. */\n color: string;\n /** Absolute or root-relative URL of the toolkit icon, when the host has one. */\n icon?: string;\n};\n\n/** Brand colors keyed by toolkit display name — the group keys the grouping function emits. */\nexport const TOOLKIT_THEMES: Record<string, ToolkitTheme> = {\n Web: { color: '#7BCCFA' },\n Document: { color: '#4586F9' },\n 'Document (Word)': { color: '#4586F9' },\n Notebook: { color: '#FFAB00' },\n Python: { color: '#00A76F' },\n Spreadsheet: { color: '#00A76F' },\n Email: { color: '#B584FF' },\n AOP: { color: '#336DFF' },\n App: { color: '#7336F5' },\n Presentation: { color: '#F56B36' },\n 'User Interface': { color: '#7336F5' },\n Canvas: { color: '#002542' },\n Computer: { color: '#3E0042' },\n Database: { color: '#7336F5' },\n 'Chrome Browser': { color: '#4285F4' },\n};\n\nexport const DEFAULT_TOOLKIT_THEME: ToolkitTheme = { color: '#919EAB' };\n\nconst DEFAULT_GROUPING = createToolBasedGroupingFunction(defaultGetToolGroupKey);\n\n/**\n * The grouping in force for the message being rendered. `SuperGroupingCard`\n * provides it so each `CollapsibleGroup` can tell whether it is the last\n * grouped block (the one that opens by default while the run is live) without\n * being handed the function as a prop through `Unstable_PartsGrouped`.\n */\nconst SuperGroupingContext = createContext<{ groupingFunction: GroupingFunction } | null>(null);\n\nexport const SuperGroupingProvider = SuperGroupingContext.Provider;\n\nexport interface CollapsibleGroupProps {\n /** Group key from the grouping function (toolkit display name); `undefined` for ungrouped parts. */\n groupKey: string | undefined;\n /** Indices of the parts belonging to this group. */\n indices: number[];\n children?: ReactNode;\n /** Host toolkit themes (colors, icons), merged over the built-in colors. */\n themes?: Record<string, ToolkitTheme>;\n /**\n * Keep the group open regardless of the run state — a host rule such as\n * \"an unsubmitted email draft stays visible\". The user's own toggle still\n * wins once used.\n */\n forceOpen?: boolean;\n /**\n * Do not open the live group by default (screenshot-heavy browser-control\n * runs hold hundreds of actions); the user can still expand it.\n */\n compactWhileRunning?: boolean;\n /** Extra header controls, rendered as siblings of the toggle (never nested buttons). */\n headerActions?: ReactNode;\n /** The grouping used to find the last grouped block; defaults to the card's, then the SDK's. */\n groupingFunction?: GroupingFunction;\n className?: string;\n}\n\n/**\n * Per-toolkit collapsible block inside the grouped details panel — \"Using\n * Spreadsheet Toolkit · 4 tool calls\" — used by the SDK, Olympus, and the\n * Chrome extension. The last grouped block opens by default while the message\n * is running and settles closed; the user's toggle is remembered for the\n * mounted block.\n *\n * Selector discipline: one raw `s.message.content` read; every per-group\n * derivation (grouping, counts) runs in `useMemo` off it, so the grouping\n * pass happens once per content change instead of once per selector pass.\n */\nexport const CollapsibleGroup = ({\n groupKey,\n indices,\n children,\n themes,\n forceOpen = false,\n compactWhileRunning = false,\n headerActions,\n groupingFunction,\n className,\n}: CollapsibleGroupProps) => {\n const panelId = useId();\n const isMessageRunning = useAuiState((s) => s.message.status?.type === 'running');\n const messageContent = useAuiState((s) =>\n s.message.role === 'assistant' ? s.message.content : undefined,\n );\n const contextGrouping = useContext(SuperGroupingContext)?.groupingFunction;\n const grouping = groupingFunction ?? contextGrouping ?? DEFAULT_GROUPING;\n\n const lastIndex = indices.at(-1);\n const isLastGroup = useMemo(() => {\n if (!messageContent) return false;\n const lastGroup = grouping(messageContent)\n .filter((group) => group.indices.length > 1)\n .at(-1);\n return lastGroup?.indices.at(-1) === lastIndex;\n }, [messageContent, grouping, lastIndex]);\n\n const toolCallCount = useMemo(\n () =>\n messageContent\n ? indices.reduce(\n (count, index) => (messageContent[index]?.type === 'tool-call' ? count + 1 : count),\n 0,\n )\n : 0,\n [messageContent, indices],\n );\n\n const theme = useMemo<ToolkitTheme>(\n () => (groupKey ? { ...TOOLKIT_THEMES, ...themes }[groupKey] ?? DEFAULT_TOOLKIT_THEME : DEFAULT_TOOLKIT_THEME),\n [groupKey, themes],\n );\n\n const [userOpened, setOpen] = useState<boolean>();\n const autoOpen = isLastGroup && isMessageRunning && !compactWhileRunning;\n const open = userOpened ?? (autoOpen || forceOpen);\n\n if (!groupKey || indices.length <= 1) return <>{children}</>;\n\n const toggle = () => setOpen(!open);\n\n return (\n <div\n data-slot=\"collapsible-group\"\n data-group-key={groupKey}\n className={cn('my-4 rounded-2xl border shadow-sm', className)}\n style={{\n borderColor: `${theme.color}33`,\n background: `linear-gradient(to right, ${theme.color}0d, transparent, ${theme.color}0d)`,\n }}\n >\n <div className=\"flex w-full items-center rounded-2xl\">\n <button\n type=\"button\"\n onClick={toggle}\n aria-expanded={open}\n aria-controls={panelId}\n className=\"flex min-w-0 flex-1 items-center justify-between gap-3 rounded-2xl px-5 py-3 text-left transition-colors hover:bg-black/5 dark:hover:bg-white/5\"\n >\n <span className=\"flex min-w-0 items-center gap-3 text-foreground/90\">\n {theme.icon ? (\n <img src={theme.icon} alt=\"\" aria-hidden=\"true\" className=\"size-5 shrink-0\" />\n ) : (\n <span\n className=\"inline-block size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: theme.color }}\n aria-hidden=\"true\"\n />\n )}\n <span className=\"truncate text-sm font-semibold\">\n {isMessageRunning ? 'Using ' : 'Used '}\n {groupKey} Toolkit\n </span>\n </span>\n <span className=\"shrink-0 text-xs font-medium text-muted-foreground\">\n {toolCallCount} tool {toolCallCount === 1 ? 'call' : 'calls'}\n </span>\n </button>\n <div className=\"flex shrink-0 items-center gap-1 pr-3 pl-1\">\n {headerActions}\n <button\n type=\"button\"\n onClick={toggle}\n aria-label={open ? 'Collapse toolkit group' : 'Expand toolkit group'}\n aria-expanded={open}\n aria-controls={panelId}\n className=\"flex items-center justify-center rounded-md p-1 text-muted-foreground transition-colors hover:bg-black/5 dark:hover:bg-white/5\"\n >\n {open ? <ChevronUp size={16} /> : <ChevronDown size={16} />}\n </button>\n </div>\n </div>\n\n <div\n id={panelId}\n className={cn(\n 'grid overflow-hidden border-t transition-[grid-template-rows] duration-200 ease-in-out motion-reduce:transition-none',\n open ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]',\n )}\n style={{ borderColor: `${theme.color}33` }}\n >\n <div className=\"overflow-hidden\">\n <div className=\"space-y-2 px-5 py-4\">{children}</div>\n </div>\n </div>\n </div>\n );\n};\n"],"names":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"CollapsibleGroup.js","sources":["../../../src/chat/super-grouping/CollapsibleGroup.tsx"],"sourcesContent":["import { useAuiState } from '@assistant-ui/react';\nimport { ChevronDown, ChevronUp } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { createContext, useContext, useId, useMemo, useState } from 'react';\nimport { cn } from '../../lib/utils';\nimport { createToolBasedGroupingFunction, type GroupingFunction } from './grouping-function';\nimport { defaultGetToolGroupKey } from './toolkit-map';\n\n/**\n * Per-toolkit theme: the brand color that tints the group header, and an\n * optional icon URL a host serves (Olympus ships toolkit SVGs; the SDK does\n * not bundle images, so it tints only).\n */\nexport type ToolkitTheme = {\n /** Hex brand color for this toolkit. */\n color: string;\n /** Absolute or root-relative URL of the toolkit icon, when the host has one. */\n icon?: string;\n};\n\n/** Brand colors keyed by toolkit display name — the group keys the grouping function emits. */\nexport const TOOLKIT_THEMES: Record<string, ToolkitTheme> = {\n Web: { color: '#7BCCFA' },\n Document: { color: '#4586F9' },\n 'Document (Word)': { color: '#4586F9' },\n Notebook: { color: '#FFAB00' },\n Python: { color: '#00A76F' },\n Spreadsheet: { color: '#00A76F' },\n Email: { color: '#B584FF' },\n AOP: { color: '#336DFF' },\n App: { color: '#7336F5' },\n Presentation: { color: '#F56B36' },\n 'User Interface': { color: '#7336F5' },\n Canvas: { color: '#002542' },\n Computer: { color: '#3E0042' },\n Database: { color: '#7336F5' },\n 'Chrome Browser': { color: '#4285F4' },\n};\n\nexport const DEFAULT_TOOLKIT_THEME: ToolkitTheme = { color: '#919EAB' };\n\nconst DEFAULT_GROUPING = createToolBasedGroupingFunction(defaultGetToolGroupKey);\n\n/**\n * The grouping in force for the message being rendered. `SuperGroupingCard`\n * provides it so each `CollapsibleGroup` can tell whether it is the last\n * grouped block (the one that opens by default while the run is live) without\n * being handed the function as a prop through `Unstable_PartsGrouped`.\n */\nconst SuperGroupingContext = createContext<{ groupingFunction: GroupingFunction } | null>(null);\n\nexport const SuperGroupingProvider = SuperGroupingContext.Provider;\n\nexport interface CollapsibleGroupProps {\n /** Group key from the grouping function (toolkit display name); `undefined` for ungrouped parts. */\n groupKey: string | undefined;\n /** Indices of the parts belonging to this group. */\n indices: number[];\n children?: ReactNode;\n /** Host toolkit themes (colors, icons), merged over the built-in colors. */\n themes?: Record<string, ToolkitTheme>;\n /**\n * Keep the group open regardless of the run state — a host rule such as\n * \"an unsubmitted email draft stays visible\". The user's own toggle still\n * wins once used.\n */\n forceOpen?: boolean;\n /**\n * Do not open the live group by default (screenshot-heavy browser-control\n * runs hold hundreds of actions); the user can still expand it.\n */\n compactWhileRunning?: boolean;\n /** Extra header controls, rendered as siblings of the toggle (never nested buttons). */\n headerActions?: ReactNode;\n /** The grouping used to find the last grouped block; defaults to the card's, then the SDK's. */\n groupingFunction?: GroupingFunction;\n className?: string;\n}\n\n/**\n * Per-toolkit collapsible block inside the grouped details panel — \"Using\n * Spreadsheet Toolkit · 4 tool calls\" — used by the SDK, Olympus, and the\n * Chrome extension. The last grouped block opens by default while the message\n * is running and settles closed; the user's toggle is remembered for the\n * mounted block.\n *\n * Selector discipline: one raw `s.message.content` read; every per-group\n * derivation (grouping, counts) runs in `useMemo` off it, so the grouping\n * pass happens once per content change instead of once per selector pass.\n */\nexport const CollapsibleGroup = ({\n groupKey,\n indices,\n children,\n themes,\n forceOpen = false,\n compactWhileRunning = false,\n headerActions,\n groupingFunction,\n className,\n}: CollapsibleGroupProps) => {\n const panelId = useId();\n const isMessageRunning = useAuiState((s) => s.message.status?.type === 'running');\n const messageContent = useAuiState((s) =>\n s.message.role === 'assistant' ? s.message.content : undefined,\n );\n const contextGrouping = useContext(SuperGroupingContext)?.groupingFunction;\n const grouping = groupingFunction ?? contextGrouping ?? DEFAULT_GROUPING;\n\n const lastIndex = indices.at(-1);\n const isLastGroup = useMemo(() => {\n if (!messageContent) return false;\n const lastGroup = grouping(messageContent)\n .filter((group) => group.indices.length > 1)\n .at(-1);\n return lastGroup?.indices.at(-1) === lastIndex;\n }, [messageContent, grouping, lastIndex]);\n\n const toolCallCount = useMemo(\n () =>\n messageContent\n ? indices.reduce(\n (count, index) => (messageContent[index]?.type === 'tool-call' ? count + 1 : count),\n 0,\n )\n : 0,\n [messageContent, indices],\n );\n\n const theme = useMemo<ToolkitTheme>(\n () => (groupKey ? { ...TOOLKIT_THEMES, ...themes }[groupKey] ?? DEFAULT_TOOLKIT_THEME : DEFAULT_TOOLKIT_THEME),\n [groupKey, themes],\n );\n\n const [userOpened, setOpen] = useState<boolean>();\n const autoOpen = isLastGroup && isMessageRunning && !compactWhileRunning;\n const open = userOpened ?? (autoOpen || forceOpen);\n\n if (!groupKey || indices.length <= 1) return <>{children}</>;\n\n const toggle = () => setOpen(!open);\n\n return (\n <div\n data-slot=\"collapsible-group\"\n data-group-key={groupKey}\n className={cn('my-4 rounded-2xl border shadow-sm', className)}\n style={{\n borderColor: `${theme.color}33`,\n background: `linear-gradient(to right, ${theme.color}0d, transparent, ${theme.color}0d)`,\n }}\n >\n <div className=\"flex w-full items-center rounded-2xl\">\n <button\n type=\"button\"\n onClick={toggle}\n aria-expanded={open}\n aria-controls={panelId}\n className=\"flex min-w-0 flex-1 items-center justify-between gap-3 rounded-2xl px-5 py-3 text-left transition-colors hover:bg-black/5 dark:hover:bg-white/5\"\n >\n <span className=\"flex min-w-0 items-center gap-3 text-foreground/90\">\n {theme.icon ? (\n <img src={theme.icon} alt=\"\" aria-hidden=\"true\" className=\"size-5 shrink-0\" />\n ) : (\n <span\n className=\"inline-block size-2 shrink-0 rounded-full\"\n style={{ backgroundColor: theme.color }}\n aria-hidden=\"true\"\n />\n )}\n <span className=\"truncate text-sm font-semibold\">\n {isMessageRunning ? 'Using ' : 'Used '}\n {groupKey} Toolkit\n </span>\n </span>\n <span className=\"shrink-0 text-xs font-medium text-muted-foreground\">\n {toolCallCount} tool {toolCallCount === 1 ? 'call' : 'calls'}\n </span>\n </button>\n <div className=\"flex shrink-0 items-center gap-1 pr-3 pl-1\">\n {headerActions}\n <button\n type=\"button\"\n onClick={toggle}\n aria-label={open ? 'Collapse toolkit group' : 'Expand toolkit group'}\n aria-expanded={open}\n aria-controls={panelId}\n className=\"flex items-center justify-center rounded-md p-1 text-muted-foreground transition-colors hover:bg-black/5 dark:hover:bg-white/5\"\n >\n {open ? <ChevronUp size={16} /> : <ChevronDown size={16} />}\n </button>\n </div>\n </div>\n\n <div\n id={panelId}\n className={cn(\n 'grid overflow-hidden border-t transition-[grid-template-rows] duration-200 ease-in-out motion-reduce:transition-none',\n open ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]',\n )}\n style={{ borderColor: `${theme.color}33` }}\n >\n <div className=\"overflow-hidden\">\n <div className=\"flex flex-col gap-2 px-5 py-4\">{children}</div>\n </div>\n </div>\n </div>\n );\n};\n"],"names":["_a"],"mappings":"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"}
@@ -5,17 +5,21 @@ const react$1 = require("@assistant-ui/react");
5
5
  const lucideReact = require("lucide-react");
6
6
  const react = require("react");
7
7
  const toolFallback = require("../../tools/tool-fallback.cjs");
8
+ const toolSummary = require("../../tools/tool-summary.cjs");
8
9
  const activityTimeline = require("./activity-timeline.cjs");
9
10
  const CollapsibleGroup = require("./CollapsibleGroup.cjs");
10
11
  const groupingFunction = require("./grouping-function.cjs");
11
12
  const ToolTimeline = require("./ToolTimeline.cjs");
12
13
  const timelineStep = require("./timeline-step.cjs");
13
14
  const toolkitMap = require("./toolkit-map.cjs");
15
+ const toolMetadata = require("../../agent-runtime/src/tool-metadata.cjs");
14
16
  const cnfast = require("cnfast");
15
17
  const DEFAULT_MAX_VISIBLE_STEPS = 3;
16
18
  const MAX_REMEMBERED_EXPANSIONS = 200;
17
19
  const EMPTY_TIMELINE = [];
18
20
  const EMPTY_CONTENT = [];
21
+ const RUNNING_STATUS = { type: "running" };
22
+ const COMPLETE_STATUS = { type: "complete" };
19
23
  const rememberedExpansions = /* @__PURE__ */ new Map();
20
24
  function rememberExpansion(key, expanded) {
21
25
  rememberedExpansions.delete(key);
@@ -73,6 +77,7 @@ const SuperGroupingCard = react.memo(function SuperGroupingCard2({
73
77
  groupingFunction: groupingFunction$1,
74
78
  waitingTools,
75
79
  passThroughTools,
80
+ isInlineTool = toolMetadata.isInlineTool,
76
81
  waitingForInput = false,
77
82
  resolveToolDisplayName,
78
83
  expansionKey: expansionKeyProp,
@@ -115,14 +120,28 @@ const SuperGroupingCard = react.memo(function SuperGroupingCard2({
115
120
  phase,
116
121
  expandWhileWaiting
117
122
  });
123
+ const assetTitles = react.useMemo(() => toolSummary.collectAssetTitles(messageContent), [messageContent]);
118
124
  const steps = react.useMemo(
119
- () => timeline.map((item, index) => timelineStep.toTimelineStep({ item, index, resolveToolDisplayName })),
120
- [timeline, resolveToolDisplayName]
125
+ () => timeline.map((item, index) => timelineStep.toTimelineStep({ item, index, resolveToolDisplayName, assetTitles })),
126
+ [timeline, resolveToolDisplayName, assetTitles]
121
127
  );
128
+ const inlineParts = react.useMemo(() => {
129
+ const parts = [];
130
+ messageContent.forEach((part, index) => {
131
+ if (part.type === "tool-call" && isInlineTool(part.toolName)) {
132
+ parts.push({ index, key: part.toolCallId });
133
+ }
134
+ });
135
+ return parts;
136
+ }, [messageContent, isInlineTool]);
122
137
  const grouping = react.useMemo(
123
- () => activityTimeline.excludeFinalTextFromGroups(groupingFunction$1 ?? groupingFunction.createToolBasedGroupingFunction(getToolGroupKey)),
124
- [groupingFunction$1, getToolGroupKey]
138
+ () => activityTimeline.excludePartsFromGroups(
139
+ activityTimeline.excludeFinalTextFromGroups(groupingFunction$1 ?? groupingFunction.createToolBasedGroupingFunction(getToolGroupKey)),
140
+ (part) => part.type === "tool-call" && part.toolName !== void 0 && isInlineTool(part.toolName)
141
+ ),
142
+ [groupingFunction$1, getToolGroupKey, isInlineTool]
125
143
  );
144
+ const hasDetails = react.useMemo(() => grouping(messageContent).length > 0, [grouping, messageContent]);
126
145
  const groupingContext = react.useMemo(() => ({ groupingFunction: grouping }), [grouping]);
127
146
  const components = react.useMemo(
128
147
  () => ({
@@ -169,8 +188,8 @@ const SuperGroupingCard = react.memo(function SuperGroupingCard2({
169
188
  maxVisibleSteps,
170
189
  keepMounted: isActive || mountDetails,
171
190
  actions: renderHeaderActions == null ? void 0 : renderHeaderActions({ phase, messageContent }),
172
- meta: isActive ? renderRunningMeta == null ? void 0 : renderRunningMeta({ phase }) : null,
173
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 pl-5", children: [
191
+ meta: phase === "running" ? renderRunningMeta == null ? void 0 : renderRunningMeta({ phase }) : null,
192
+ children: hasDetails ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 pl-5", children: [
174
193
  /* @__PURE__ */ jsxRuntime.jsxs(
175
194
  "button",
176
195
  {
@@ -201,15 +220,16 @@ const SuperGroupingCard = react.memo(function SuperGroupingCard2({
201
220
  "aria-label": "Run details",
202
221
  hidden: !expanded || !detailsExpanded,
203
222
  className: cnfast.cn(
204
- "min-w-0 space-y-2 overflow-hidden border-l border-border/60 py-2 pl-3",
223
+ "min-w-0 overflow-hidden border-l border-border/60 py-2 pl-3",
205
224
  classNames == null ? void 0 : classNames.details
206
225
  ),
207
- children: /* @__PURE__ */ jsxRuntime.jsx(CollapsibleGroup.SuperGroupingProvider, { value: groupingContext, children: /* @__PURE__ */ jsxRuntime.jsx(react$1.MessagePrimitive.Unstable_PartsGrouped, { groupingFunction: grouping, components }) })
226
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cnfast.cn("flex flex-col gap-2", classNames == null ? void 0 : classNames.detailsParts), children: /* @__PURE__ */ jsxRuntime.jsx(CollapsibleGroup.SuperGroupingProvider, { value: groupingContext, children: /* @__PURE__ */ jsxRuntime.jsx(react$1.MessagePrimitive.Unstable_PartsGrouped, { groupingFunction: grouping, components }) }) })
208
227
  }
209
228
  ) : null
210
- ] })
229
+ ] }) : null
211
230
  }
212
231
  ),
232
+ inlineParts.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "super-grouping-inline-tools", className: "mt-2 flex min-w-0 flex-col gap-2", children: inlineParts.map(({ index, key }) => /* @__PURE__ */ jsxRuntime.jsx(react$1.MessagePrimitive.PartByIndex, { index, components }, key)) }) : null,
213
233
  /* @__PURE__ */ jsxRuntime.jsx("output", { id: statusId, "aria-live": "polite", "aria-atomic": "true", className: "sr-only", children: phase === "waiting" ? "Waiting for your input" : latestStatus })
214
234
  ]
215
235
  }
@@ -225,16 +245,18 @@ const SuperGroupingFinalText = react.memo(function SuperGroupingFinalText2({
225
245
  var _a;
226
246
  return (_a = s.message.status) == null ? void 0 : _a.type;
227
247
  });
228
- const finalText = react.useMemo(() => activityTimeline.getFinalText(messageContent), [messageContent]);
229
- if (!finalText) return null;
230
- return /* @__PURE__ */ jsxRuntime.jsx(
248
+ const parts = react.useMemo(() => activityTimeline.getFinalTextParts(messageContent), [messageContent]);
249
+ if (parts.length === 0) return null;
250
+ const running = statusType === "running" || statusType === "requires-action";
251
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "super-grouping-final-text", className: "flex min-w-0 flex-col gap-1.5", children: parts.map((part, position) => /* @__PURE__ */ jsxRuntime.jsx(
231
252
  TextComponent,
232
253
  {
233
254
  type: "text",
234
- text: finalText,
235
- status: statusType === "running" || statusType === "requires-action" ? { type: "running" } : { type: "complete" }
236
- }
237
- );
255
+ text: part.text,
256
+ status: running && position === parts.length - 1 ? RUNNING_STATUS : COMPLETE_STATUS
257
+ },
258
+ part.index
259
+ )) });
238
260
  });
239
261
  exports.SuperGroupingCard = SuperGroupingCard;
240
262
  exports.SuperGroupingFinalText = SuperGroupingFinalText;