@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
@@ -0,0 +1,75 @@
1
+ import { useContext, useState, useEffect } from "react";
2
+ import { MentionAuthCtx, fetchGraphQL, WORKSPACE_MEMBERS_QUERY } from "./suggestions/data/api-client.js";
3
+ const MEMBER_AVATAR_TTL_MS = 5 * 60 * 1e3;
4
+ const memberAvatarRequests = /* @__PURE__ */ new Map();
5
+ function loadMemberAvatars(auth) {
6
+ const workspaceId = auth.workspaceId;
7
+ if (!workspaceId) return Promise.resolve(/* @__PURE__ */ new Map());
8
+ const cacheKey = `${auth.backendUrl}|${workspaceId}`;
9
+ const cached = memberAvatarRequests.get(cacheKey);
10
+ if (cached && (cached.fetchedAt === null || Date.now() - cached.fetchedAt < MEMBER_AVATAR_TTL_MS)) {
11
+ return cached.request;
12
+ }
13
+ const entry = {
14
+ request: Promise.resolve(/* @__PURE__ */ new Map()),
15
+ fetchedAt: null
16
+ };
17
+ const request = fetchGraphQL(
18
+ auth,
19
+ WORKSPACE_MEMBERS_QUERY,
20
+ { workspaceId }
21
+ ).then((data) => {
22
+ var _a;
23
+ const avatars = /* @__PURE__ */ new Map();
24
+ for (const member of data.getUsersInWorkspace ?? []) {
25
+ const email = (_a = member.email) == null ? void 0 : _a.trim().toLowerCase();
26
+ if (email && member.avatarUrl != null) {
27
+ avatars.set(email, member.avatarUrl);
28
+ }
29
+ }
30
+ entry.fetchedAt = Date.now();
31
+ return avatars;
32
+ }).catch((error) => {
33
+ if (memberAvatarRequests.get(cacheKey) === entry) {
34
+ memberAvatarRequests.delete(cacheKey);
35
+ }
36
+ throw error;
37
+ });
38
+ entry.request = request;
39
+ memberAvatarRequests.set(cacheKey, entry);
40
+ return request;
41
+ }
42
+ function useMemberAvatarUrl(email) {
43
+ const auth = useContext(MentionAuthCtx);
44
+ const normalizedEmail = email == null ? void 0 : email.trim().toLowerCase();
45
+ const cacheKey = (auth == null ? void 0 : auth.workspaceId) && `${auth.backendUrl}|${auth.workspaceId}`;
46
+ const [resolvedAvatar, setResolvedAvatar] = useState();
47
+ useEffect(() => {
48
+ if (!auth || !cacheKey || !normalizedEmail) {
49
+ setResolvedAvatar(void 0);
50
+ return;
51
+ }
52
+ let cancelled = false;
53
+ loadMemberAvatars(auth).then(
54
+ (avatars) => {
55
+ if (!cancelled) {
56
+ setResolvedAvatar({ cacheKey, url: avatars.get(normalizedEmail) });
57
+ }
58
+ },
59
+ () => {
60
+ if (!cancelled) setResolvedAvatar({ cacheKey, url: void 0 });
61
+ }
62
+ );
63
+ return () => {
64
+ cancelled = true;
65
+ };
66
+ }, [auth, cacheKey, normalizedEmail]);
67
+ if (!cacheKey || !resolvedAvatar || resolvedAvatar.cacheKey !== cacheKey) {
68
+ return void 0;
69
+ }
70
+ return resolvedAvatar.url;
71
+ }
72
+ export {
73
+ useMemberAvatarUrl
74
+ };
75
+ //# sourceMappingURL=use-member-avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-member-avatar.js","sources":["../../../src/chat-ui/mentions/use-member-avatar.ts"],"sourcesContent":["import { useContext, useEffect, useState } from \"react\";\nimport {\n fetchGraphQL,\n MentionAuthCtx,\n WORKSPACE_MEMBERS_QUERY,\n} from \"./suggestions/data/api-client\";\nimport type { MentionAuthContext } from \"./suggestions/data/api-client\";\n\ntype WorkspaceMemberAvatar = {\n email?: string | null;\n avatarUrl?: string | null;\n};\n\ntype WorkspaceMembersResponse = {\n getUsersInWorkspace?: WorkspaceMemberAvatar[] | null;\n};\n\nconst MEMBER_AVATAR_TTL_MS = 5 * 60 * 1000;\n\ntype MemberAvatarCacheEntry = {\n request: Promise<Map<string, string>>;\n fetchedAt: number | null;\n};\n\nconst memberAvatarRequests = new Map<string, MemberAvatarCacheEntry>();\n\nfunction loadMemberAvatars(\n auth: MentionAuthContext,\n): Promise<Map<string, string>> {\n const workspaceId = auth.workspaceId;\n if (!workspaceId) return Promise.resolve(new Map());\n\n const cacheKey = `${auth.backendUrl}|${workspaceId}`;\n const cached = memberAvatarRequests.get(cacheKey);\n if (cached && (cached.fetchedAt === null || Date.now() - cached.fetchedAt < MEMBER_AVATAR_TTL_MS)) {\n return cached.request;\n }\n\n const entry: MemberAvatarCacheEntry = {\n request: Promise.resolve(new Map<string, string>()),\n fetchedAt: null,\n };\n const request = fetchGraphQL<WorkspaceMembersResponse>(\n auth,\n WORKSPACE_MEMBERS_QUERY,\n { workspaceId },\n )\n .then((data) => {\n const avatars = new Map<string, string>();\n for (const member of data.getUsersInWorkspace ?? []) {\n const email = member.email?.trim().toLowerCase();\n if (email && member.avatarUrl != null) {\n avatars.set(email, member.avatarUrl);\n }\n }\n entry.fetchedAt = Date.now();\n return avatars;\n })\n .catch((error: unknown) => {\n if (memberAvatarRequests.get(cacheKey) === entry) {\n memberAvatarRequests.delete(cacheKey);\n }\n throw error;\n });\n\n entry.request = request;\n memberAvatarRequests.set(cacheKey, entry);\n return request;\n}\n\nexport function useMemberAvatarUrl(\n email: string | undefined,\n): string | undefined {\n const auth = useContext(MentionAuthCtx);\n const normalizedEmail = email?.trim().toLowerCase();\n const cacheKey =\n auth?.workspaceId && `${auth.backendUrl}|${auth.workspaceId}`;\n const [resolvedAvatar, setResolvedAvatar] = useState<{\n cacheKey: string;\n url: string | undefined;\n }>();\n\n useEffect(() => {\n if (!auth || !cacheKey || !normalizedEmail) {\n setResolvedAvatar(undefined);\n return;\n }\n\n let cancelled = false;\n loadMemberAvatars(auth).then(\n (avatars) => {\n if (!cancelled) {\n setResolvedAvatar({ cacheKey, url: avatars.get(normalizedEmail) });\n }\n },\n () => {\n if (!cancelled) setResolvedAvatar({ cacheKey, url: undefined });\n },\n );\n\n return () => {\n cancelled = true;\n };\n }, [auth, cacheKey, normalizedEmail]);\n\n if (!cacheKey || !resolvedAvatar || resolvedAvatar.cacheKey !== cacheKey) {\n return undefined;\n }\n return resolvedAvatar.url;\n}\n\nexport function resetMemberAvatarsForTests(): void {\n memberAvatarRequests.clear();\n}\n"],"names":[],"mappings":";;AAiBA,MAAM,uBAAuB,IAAI,KAAK;AAOtC,MAAM,2CAA2B,IAAA;AAEjC,SAAS,kBACP,MAC8B;AAC9B,QAAM,cAAc,KAAK;AACzB,MAAI,CAAC,YAAa,QAAO,QAAQ,QAAQ,oBAAI,KAAK;AAElD,QAAM,WAAW,GAAG,KAAK,UAAU,IAAI,WAAW;AAClD,QAAM,SAAS,qBAAqB,IAAI,QAAQ;AAChD,MAAI,WAAW,OAAO,cAAc,QAAQ,KAAK,IAAA,IAAQ,OAAO,YAAY,uBAAuB;AACjG,WAAO,OAAO;AAAA,EAChB;AAEA,QAAM,QAAgC;AAAA,IACpC,SAAS,QAAQ,QAAQ,oBAAI,KAAqB;AAAA,IAClD,WAAW;AAAA,EAAA;AAEb,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA,EAAE,YAAA;AAAA,EAAY,EAEb,KAAK,CAAC,SAAS;;AACd,UAAM,8BAAc,IAAA;AACpB,eAAW,UAAU,KAAK,uBAAuB,CAAA,GAAI;AACnD,YAAM,SAAQ,YAAO,UAAP,mBAAc,OAAO;AACnC,UAAI,SAAS,OAAO,aAAa,MAAM;AACrC,gBAAQ,IAAI,OAAO,OAAO,SAAS;AAAA,MACrC;AAAA,IACF;AACA,UAAM,YAAY,KAAK,IAAA;AACvB,WAAO;AAAA,EACT,CAAC,EACA,MAAM,CAAC,UAAmB;AACzB,QAAI,qBAAqB,IAAI,QAAQ,MAAM,OAAO;AAChD,2BAAqB,OAAO,QAAQ;AAAA,IACtC;AACA,UAAM;AAAA,EACR,CAAC;AAEH,QAAM,UAAU;AAChB,uBAAqB,IAAI,UAAU,KAAK;AACxC,SAAO;AACT;AAEO,SAAS,mBACd,OACoB;AACpB,QAAM,OAAO,WAAW,cAAc;AACtC,QAAM,kBAAkB,+BAAO,OAAO;AACtC,QAAM,YACJ,6BAAM,gBAAe,GAAG,KAAK,UAAU,IAAI,KAAK,WAAW;AAC7D,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAA;AAK5C,YAAU,MAAM;AACd,QAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,iBAAiB;AAC1C,wBAAkB,MAAS;AAC3B;AAAA,IACF;AAEA,QAAI,YAAY;AAChB,sBAAkB,IAAI,EAAE;AAAA,MACtB,CAAC,YAAY;AACX,YAAI,CAAC,WAAW;AACd,4BAAkB,EAAE,UAAU,KAAK,QAAQ,IAAI,eAAe,GAAG;AAAA,QACnE;AAAA,MACF;AAAA,MACA,MAAM;AACJ,YAAI,CAAC,UAAW,mBAAkB,EAAE,UAAU,KAAK,QAAW;AAAA,MAChE;AAAA,IAAA;AAGF,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,MAAM,UAAU,eAAe,CAAC;AAEpC,MAAI,CAAC,YAAY,CAAC,kBAAkB,eAAe,aAAa,UAAU;AACxE,WAAO;AAAA,EACT;AACA,SAAO,eAAe;AACxB;"}
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("@assistant-ui/react");
5
- require("@assistant-ui/react-markdown/styles/dot.css");
6
5
  const lucideReact = require("lucide-react");
7
6
  const react$1 = require("react");
8
7
  const useAthenaRunLive = require("../../chat/use-athena-run-live.cjs");
@@ -13,10 +12,12 @@ const runningIndicator = require("./running-indicator.cjs");
13
12
  const voiceDelegationCard = require("./voice-delegation-card.cjs");
14
13
  const wakeMarker = require("./wake-marker.cjs");
15
14
  const threadChrome = require("./thread-chrome.cjs");
16
- const streamingMarkdown = require("../../packages/agent-runtime/src/streaming-markdown.cjs");
17
- const githubWakeEvent = require("../../packages/agent-runtime/src/github-wake-event.cjs");
18
- const voicePresentation = require("../../packages/agent-runtime/src/voice-presentation.cjs");
19
- const runtimeMessages = require("../../packages/agent-runtime/src/runtime-messages.cjs");
15
+ const streamingMarkdown = require("../../agent-runtime/src/streaming-markdown.cjs");
16
+ const githubWakeEvent = require("../../agent-runtime/src/github-wake-event.cjs");
17
+ const subscriptionWakeEvent = require("../../agent-runtime/src/subscription-wake-event.cjs");
18
+ const voicePresentation = require("../../agent-runtime/src/voice-presentation.cjs");
19
+ const composerMarkdown = require("../../agent-runtime/src/composer-markdown.cjs");
20
+ const runtimeMessages = require("../../agent-runtime/src/runtime-messages.cjs");
20
21
  const cnfast = require("cnfast");
21
22
  const BranchPicker = () => /* @__PURE__ */ jsxRuntime.jsxs(
22
23
  react.BranchPickerPrimitive.Root,
@@ -65,6 +66,22 @@ const MarkdownText = () => {
65
66
  const text = isRunning ? streamingMarkdown.hideUnterminatedMarkdownLink(revealed.text) : revealed.text;
66
67
  return /* @__PURE__ */ jsxRuntime.jsx(chatMessageBody.ChatMessageBody, { text, isRunning });
67
68
  };
69
+ const UserMessageText = ({ text }) => {
70
+ const composerMarkdown$1 = react.useAuiState(
71
+ (s) => {
72
+ var _a, _b;
73
+ return (_b = (_a = s.message.metadata) == null ? void 0 : _a.custom) == null ? void 0 : _b[composerMarkdown.DEEP_AGENT_COMPOSER_MARKDOWN_KEY];
74
+ }
75
+ );
76
+ const shown = react$1.useMemo(
77
+ () => composerMarkdown.readDeepAgentComposerMarkdown({
78
+ metadata: { [composerMarkdown.DEEP_AGENT_COMPOSER_MARKDOWN_KEY]: composerMarkdown$1 },
79
+ text
80
+ }) ?? text,
81
+ [composerMarkdown$1, text]
82
+ );
83
+ return /* @__PURE__ */ jsxRuntime.jsx(chatMessageBody.ChatMessageBody, { text: shown, typed: true });
84
+ };
68
85
  const UserActionBar = () => /* @__PURE__ */ jsxRuntime.jsxs(
69
86
  react.ActionBarPrimitive.Root,
70
87
  {
@@ -81,10 +98,12 @@ const UserActionBar = () => /* @__PURE__ */ jsxRuntime.jsxs(
81
98
  }
82
99
  );
83
100
  const UserMessage = () => {
84
- const isWake = react.useAuiState((s) => {
85
- var _a;
86
- return githubWakeEvent.isGithubWakeMessage((_a = s.message.metadata) == null ? void 0 : _a.custom);
87
- });
101
+ const isWake = react.useAuiState(
102
+ (s) => {
103
+ var _a, _b;
104
+ return githubWakeEvent.isGithubWakeMessage((_a = s.message.metadata) == null ? void 0 : _a.custom) || subscriptionWakeEvent.isSubscriptionWakeMessage((_b = s.message.metadata) == null ? void 0 : _b.custom);
105
+ }
106
+ );
88
107
  const isVoiceDelegation = react.useAuiState(
89
108
  (s) => {
90
109
  var _a;
@@ -103,7 +122,7 @@ const UserMessage = () => {
103
122
  "data-message-role": "user",
104
123
  className: "group/user-message mb-3 flex justify-end",
105
124
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 max-w-[85%] flex-col items-end gap-1", children: [
106
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 max-w-full rounded-2xl rounded-br-md bg-muted px-3.5 py-2 text-sm text-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(react.MessagePrimitive.Content, { components: { Text: MarkdownText } }) }),
125
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 max-w-full rounded-2xl rounded-br-md bg-muted px-3.5 py-2 text-sm text-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(react.MessagePrimitive.Content, { components: { Text: UserMessageText } }) }),
107
126
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-6 items-center gap-1", children: [
108
127
  /* @__PURE__ */ jsxRuntime.jsx(BranchPicker, {}),
109
128
  /* @__PURE__ */ jsxRuntime.jsx(UserActionBar, {})
@@ -275,5 +294,6 @@ exports.ComposerStopButton = ComposerStopButton;
275
294
  exports.MarkdownText = MarkdownText;
276
295
  exports.THREAD_SCROLL_TO_BOTTOM_CLASS = THREAD_SCROLL_TO_BOTTOM_CLASS;
277
296
  exports.UserMessage = UserMessage;
297
+ exports.UserMessageText = UserMessageText;
278
298
  exports.createAssistantMessage = createAssistantMessage;
279
299
  //# sourceMappingURL=message-components.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"message-components.cjs","sources":["../../../src/chat-ui/messages/message-components.tsx"],"sourcesContent":["import {\n ActionBarPrimitive,\n AuiIf,\n BranchPickerPrimitive,\n MessagePrimitive,\n useAuiState,\n useMessagePartText,\n useSmooth,\n type ToolCallMessagePartComponent,\n} from \"@assistant-ui/react\";\nimport {\n hideUnterminatedMarkdownLink,\n isGithubWakeMessage,\n isVoiceDelegationMessage,\n readRuntimeMessageFromSourceMessages,\n readSoleRuntimeMessageKind,\n} from \"@athenaintel/agent-runtime\";\nimport \"@assistant-ui/react-markdown/styles/dot.css\";\nimport {\n ArrowUpIcon,\n CheckIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n CopyIcon,\n ListPlusIcon,\n PencilIcon,\n RefreshCwIcon,\n} from \"lucide-react\";\nimport {\n type FC,\n type ReactNode,\n useMemo,\n} from \"react\";\nimport { useAthenaRunLive } from \"../../chat/use-athena-run-live\";\nimport type { ComposerAction } from \"../composer/composer-action\";\nimport { cn } from \"../../lib/utils\";\nimport { ChatMessageBody } from \"../rich-text/chat-message-body\";\nimport { useMessageActionsReadOnly } from \"./message-actions-config\";\nimport { RuntimeMessageCard } from \"./runtime-message\";\nimport { hasVisibleContent } from \"./running-indicator\";\nimport { VoiceDelegationMessage } from \"./voice-delegation-card\";\nimport { WakeMarkerMessage } from \"./wake-marker\";\nimport { SmallIconButton } from \"./thread-chrome\";\n\nexport {\n IconButton,\n SmallIconButton,\n THREAD_HEADER_ACTIONS_CLASS,\n THREAD_HEADER_CLASS,\n THREAD_HEADER_ICON_CLASS,\n THREAD_HEADER_PILL_CLASS,\n THREAD_PANEL_CLASS,\n} from \"./thread-chrome\";\n\nexport const BranchPicker: FC = () => (\n <BranchPickerPrimitive.Root\n hideWhenSingleBranch\n className=\"inline-flex items-center gap-0.5 text-xs text-muted-foreground\"\n data-testid=\"chat-branch-picker\"\n >\n <BranchPickerPrimitive.Previous asChild>\n <SmallIconButton\n tooltip=\"Previous branch\"\n data-testid=\"chat-branch-previous\"\n >\n <ChevronLeftIcon className=\"size-3\" />\n </SmallIconButton>\n </BranchPickerPrimitive.Previous>\n <span className=\"font-medium\" data-testid=\"chat-branch-count\">\n <BranchPickerPrimitive.Number /> / <BranchPickerPrimitive.Count />\n </span>\n <BranchPickerPrimitive.Next asChild>\n <SmallIconButton tooltip=\"Next branch\" data-testid=\"chat-branch-next\">\n <ChevronRightIcon className=\"size-3\" />\n </SmallIconButton>\n </BranchPickerPrimitive.Next>\n </BranchPickerPrimitive.Root>\n);\n\nconst CopyActionButton: FC = () => (\n <ActionBarPrimitive.Copy asChild>\n <SmallIconButton tooltip=\"Copy\">\n <AuiIf condition={(state) => state.message.isCopied}>\n <CheckIcon className=\"size-3\" />\n </AuiIf>\n <AuiIf condition={(state) => !state.message.isCopied}>\n <CopyIcon className=\"size-3\" />\n </AuiIf>\n </SmallIconButton>\n </ActionBarPrimitive.Copy>\n);\n\n/**\n * The edit primitive does not check the runtime's edit capability itself —\n * clicking it on a runtime without one throws inside onPress, where no error\n * boundary can catch it — so the button must gate on the capability and, to\n * match the rewind semantics of `run/edit`, stay hidden while a run is live.\n * The read-only context covers threads the capability flags cannot: a host's\n * static `edit: true` still applies to fenced legacy conversations.\n */\nconst EditActionButton: FC = () => {\n const allowEdit = useAuiState((s) => s.thread.capabilities.edit);\n const isRunning = useAthenaRunLive();\n const readOnly = useMessageActionsReadOnly();\n if (!allowEdit || isRunning || readOnly) return null;\n return (\n <ActionBarPrimitive.Edit asChild>\n <SmallIconButton tooltip=\"Edit\" data-testid=\"chat-message-edit\">\n <PencilIcon className=\"size-3\" />\n </SmallIconButton>\n </ActionBarPrimitive.Edit>\n );\n};\n\n/** Regenerate dispatches `run/reload`, so it hides on read-only threads too. */\nconst RegenerateActionButton: FC = () => {\n const readOnly = useMessageActionsReadOnly();\n if (readOnly) return null;\n return (\n <ActionBarPrimitive.Reload asChild>\n <SmallIconButton tooltip=\"Regenerate\">\n <RefreshCwIcon className=\"size-3\" />\n </SmallIconButton>\n </ActionBarPrimitive.Reload>\n );\n};\n\n/**\n * Reveal-on-demand treatment for action bars: invisible and click-through\n * until the surrounding named group is hovered or a control inside receives\n * keyboard focus. The `focus-within` escape hatch is what keeps the hidden\n * controls reachable for keyboard users.\n */\nexport const ACTION_BAR_REVEAL_CLASS =\n \"pointer-events-none opacity-0 transition-opacity focus-within:pointer-events-auto focus-within:opacity-100\";\n\n/** Shared chat body; the reveal holds incomplete links until their URL is complete. */\nexport const MarkdownText: FC = () => {\n const revealed = useSmooth(useMessagePartText(), true);\n const isRunning = revealed.status.type === \"running\";\n const text = isRunning ? hideUnterminatedMarkdownLink(revealed.text) : revealed.text;\n return <ChatMessageBody text={text} isRunning={isRunning} />;\n};\n\nconst UserActionBar: FC = () => (\n <ActionBarPrimitive.Root\n autohide=\"never\"\n className={cn(\n \"flex min-h-6 items-center gap-0.5\",\n ACTION_BAR_REVEAL_CLASS,\n \"group-hover/user-message:pointer-events-auto group-hover/user-message:opacity-100\",\n )}\n >\n <CopyActionButton />\n <EditActionButton />\n </ActionBarPrimitive.Root>\n);\n\nexport const UserMessage: FC = () => {\n // A GitHub wake turn is an event, not words the user typed: it renders as\n // the compact wake marker instead of a bubble quoting the injected text.\n const isWake = useAuiState((s) => isGithubWakeMessage(s.message.metadata?.custom));\n // A voice delegation's anchor is the ask the live voice model handed to the\n // thread, not words the user typed: it renders as the shared voice-task\n // card on every host instead of a second user bubble under the spoken turn.\n const isVoiceDelegation = useAuiState((s) =>\n isVoiceDelegationMessage({ messageId: s.message.id, custom: s.message.metadata?.custom }),\n );\n if (isWake) {\n return (\n <MessagePrimitive.Root data-message-role=\"user\" className=\"mb-3\">\n <WakeMarkerMessage />\n </MessagePrimitive.Root>\n );\n }\n if (isVoiceDelegation) {\n return (\n <MessagePrimitive.Root data-message-role=\"user\" className=\"mb-3\">\n <VoiceDelegationMessage />\n </MessagePrimitive.Root>\n );\n }\n return (\n <MessagePrimitive.Root\n data-message-role=\"user\"\n className=\"group/user-message mb-3 flex justify-end\"\n >\n <div className=\"flex min-w-0 max-w-[85%] flex-col items-end gap-1\">\n <div className=\"min-w-0 max-w-full rounded-2xl rounded-br-md bg-muted px-3.5 py-2 text-sm text-foreground\">\n <MessagePrimitive.Content components={{ Text: MarkdownText }} />\n </div>\n <div className=\"flex min-h-6 items-center gap-1\">\n <BranchPicker />\n <UserActionBar />\n </div>\n </div>\n </MessagePrimitive.Root>\n );\n};\n\nexport interface CreateAssistantMessageOptions {\n /** Host-registered card for tools without a dedicated UI. */\n toolFallback: ToolCallMessagePartComponent;\n /** Extra action-bar controls appended after copy/regenerate. */\n extraActions?: ReactNode;\n /**\n * Renders the message body. Hosts that group content into activity\n * timelines supply their own; the default renders markdown and tool cards.\n */\n content?: FC;\n /**\n * Inline affordance rendered inside a runtime-ending card (e.g. a Continue\n * button). Hosts without one leave it unset.\n */\n runtimeMessageAction?: ReactNode;\n}\n\n/**\n * Builds the assistant bubble. Call this once per host (memoized on its\n * inputs) so the returned component identity stays stable across renders.\n */\nexport function createAssistantMessage({\n toolFallback,\n extraActions,\n content: Content,\n runtimeMessageAction,\n}: CreateAssistantMessageOptions): FC {\n const AssistantActionBar: FC = () => {\n // The latest reply keeps its actions visible; older replies reveal them\n // on hover so a long transcript is not a wall of icon rows.\n const isLast = useAuiState((s) => s.message.isLast);\n return (\n <ActionBarPrimitive.Root\n autohide=\"never\"\n className={cn(\n \"mt-1 flex min-h-6 items-center gap-0.5\",\n !isLast && [\n ACTION_BAR_REVEAL_CLASS,\n \"group-hover/assistant-message:pointer-events-auto group-hover/assistant-message:opacity-100\",\n ],\n )}\n >\n <CopyActionButton />\n <RegenerateActionButton />\n {extraActions}\n </ActionBarPrimitive.Root>\n );\n };\n\n // A run-lifecycle marker or handoff summary is a system event, not\n // assistant speech. When it owns the whole row, render the status card in\n // place of the bubble; when it is chunked in with the assistant's own work\n // (or is a handoff whose text IS the closing summary), keep the body and\n // frame it with the card above.\n const RuntimeEnding: FC<{ placement: \"row\" | \"banner\" }> = ({ placement }) => {\n // Select the message (a stable store reference) and derive from it: the\n // reader allocates a fresh object per call, and `useAuiState` compares\n // snapshots with `Object.is`, so selecting the reader's result directly\n // would re-render on every store update and trip React's update-depth\n // guard.\n const message = useAuiState((s) => s.message);\n const runtime = useMemo(() => readRuntimeMessageFromSourceMessages(message), [message]);\n if (!runtime || runtime.silent) return null;\n if (placement === \"row\" && !runtime.isSoleSourceMessage) return null;\n if (placement === \"banner\" && runtime.isSoleSourceMessage && runtime.kind !== \"handoff\") {\n return null;\n }\n return <RuntimeMessageCard message={runtime} action={runtimeMessageAction} />;\n };\n\n const AssistantMessage: FC = () => {\n // An assistant row exists before its first token streams; showing\n // copy/regenerate against nothing looks broken, so wait for content.\n const showActions = useAuiState((state) =>\n hasVisibleContent(state.message.content),\n );\n // Primitive selector: the reader builds a fresh object per call.\n const soleRuntimeKind = useAuiState((s) => readSoleRuntimeMessageKind(s.message));\n const soleRuntimeSilent = useAuiState(\n (s) => readRuntimeMessageFromSourceMessages(s.message)?.silent === true,\n );\n\n if (soleRuntimeKind && soleRuntimeKind !== \"handoff\") {\n if (soleRuntimeSilent) return null;\n return (\n <MessagePrimitive.Root\n data-message-role=\"assistant\"\n className=\"group group/assistant-message mb-3\"\n >\n <div className=\"max-w-[95%]\">\n <RuntimeEnding placement=\"row\" />\n </div>\n </MessagePrimitive.Root>\n );\n }\n\n return (\n <MessagePrimitive.Root\n data-message-role=\"assistant\"\n className=\"group group/assistant-message mb-3\"\n >\n <div className=\"max-w-[95%]\">\n <RuntimeEnding placement=\"banner\" />\n {Content ? (\n <Content />\n ) : (\n <MessagePrimitive.Content\n components={{\n Text: MarkdownText,\n tools: { Fallback: toolFallback },\n }}\n />\n )}\n {showActions ? (\n <div className=\"flex min-h-6 items-center gap-1\">\n <BranchPicker />\n <AssistantActionBar />\n </div>\n ) : null}\n </div>\n </MessagePrimitive.Root>\n );\n };\n\n return AssistantMessage;\n}\n\n/** Composer chrome: the dock around the composer, its surface and its rows. */\nexport const COMPOSER_DOCK_CLASS = \"bg-background px-2.5 pb-2 pt-1.5\";\nexport const COMPOSER_SURFACE_CLASS =\n \"relative flex flex-col gap-1 rounded-xl border border-neutral-200 bg-white shadow-[0_2px_10px_rgba(54,45,33,0.08)]\";\nexport const COMPOSER_EDITOR_ROW_CLASS = \"px-2.5 pt-1\";\nexport const COMPOSER_TOOLBAR_CLASS =\n \"flex items-center gap-1 border-t border-neutral-100 px-2 py-1.5\";\n/**\n * Paper composer chrome (`ChatComposerDock appearance=\"paper\"`): a card-toned\n * surface with a larger radius, a focus-within ring, a drag-over tint keyed\n * off `data-drag-active`, and a bottom rail — the chrome the SDK's\n * `AthenaChat` thread renders. Hosts on the default chrome above are\n * untouched. The dock carries no padding of its own; the paper host's footer\n * spaces it. The radius and border colour also bind to the `--composer-radius`\n * / `--composer-border` theme variables in `styles.css`.\n */\nexport const COMPOSER_PAPER_DOCK_CLASS = \"aui-composer-dock\";\nexport const COMPOSER_PAPER_SURFACE_CLASS =\n \"aui-composer-root relative flex w-full flex-col rounded-[1.375rem] border border-border bg-card p-2.5 text-card-foreground shadow-[0_1px_2px_rgba(0,0,0,0.04)] outline-none transition-shadow duration-150 focus-within:shadow-[0_8px_24px_-14px_rgba(0,0,0,0.25)] focus-within:ring-2 focus-within:ring-ring/40 data-[drag-active=true]:bg-primary/5 data-[drag-active=true]:ring-2 data-[drag-active=true]:ring-primary/40\";\nexport const COMPOSER_PAPER_EDITOR_ROW_CLASS = \"px-0.5\";\nexport const COMPOSER_PAPER_TOOLBAR_CLASS =\n \"aui-composer-action-wrapper relative flex items-center justify-between gap-1 pt-1\";\nexport const THREAD_SCROLL_TO_BOTTOM_CLASS =\n \"inline-flex items-center justify-center rounded-full border bg-background/80 p-1 shadow-sm backdrop-blur transition-opacity hover:bg-accent disabled:invisible\";\n\nconst ComposerStopIcon: FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"size-4\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n >\n <rect width=\"10\" height=\"10\" x=\"3\" y=\"3\" rx=\"2\" />\n </svg>\n);\n\nexport interface ComposerStopButtonProps {\n onStop: () => void;\n disabled?: boolean;\n title?: string;\n}\n\nexport interface ComposerSendButtonProps {\n action: Extract<ComposerAction, \"send\" | \"queue\">;\n onSend: () => void;\n disabled?: boolean;\n title?: string;\n}\n\n/** Stop control shown while a run is in flight and there is nothing queued. */\nexport const ComposerStopButton: FC<ComposerStopButtonProps> = ({\n onStop,\n disabled = false,\n title = \"Stop generation\",\n}) => (\n <button\n type=\"button\"\n onClick={onStop}\n disabled={disabled}\n title={title}\n className={cn(\n \"inline-flex size-8 shrink-0 items-center justify-center rounded-lg bg-foreground text-background shadow-sm transition-colors hover:bg-foreground/80\",\n disabled && \"cursor-not-allowed opacity-60\",\n )}\n >\n <ComposerStopIcon />\n </button>\n);\n/** Send control, which becomes a queue control while a run is in flight. */\nexport const ComposerSendButton: FC<ComposerSendButtonProps> = ({\n action,\n onSend,\n disabled = false,\n title,\n}) => (\n <button\n type=\"button\"\n onClick={onSend}\n disabled={disabled}\n title={title ?? (action === \"queue\" ? \"Queue message\" : \"Send\")}\n className={cn(\n \"inline-flex size-8 shrink-0 items-center justify-center rounded-full shadow-sm transition-colors\",\n disabled\n ? \"cursor-not-allowed bg-muted text-muted-foreground opacity-60\"\n : \"bg-foreground text-background hover:bg-foreground/80\",\n )}\n >\n {action === \"queue\" ? (\n <ListPlusIcon className=\"size-4\" />\n ) : (\n <ArrowUpIcon className=\"size-4\" />\n )}\n </button>\n);\n"],"names":["jsxs","BranchPickerPrimitive","jsx","SmallIconButton","ChevronLeftIcon","ChevronRightIcon","ActionBarPrimitive","AuiIf","CheckIcon","CopyIcon","useAuiState","useAthenaRunLive","useMessageActionsReadOnly","PencilIcon","RefreshCwIcon","useSmooth","useMessagePartText","hideUnterminatedMarkdownLink","ChatMessageBody","cn","isGithubWakeMessage","isVoiceDelegationMessage","MessagePrimitive","WakeMarkerMessage","VoiceDelegationMessage","useMemo","readRuntimeMessageFromSourceMessages","RuntimeMessageCard","hasVisibleContent","readSoleRuntimeMessageKind","ListPlusIcon","ArrowUpIcon"],"mappings":"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"}
1
+ {"version":3,"file":"message-components.cjs","sources":["../../../src/chat-ui/messages/message-components.tsx"],"sourcesContent":["import {\n ActionBarPrimitive,\n AuiIf,\n BranchPickerPrimitive,\n MessagePrimitive,\n useAuiState,\n useMessagePartText,\n useSmooth,\n type ToolCallMessagePartComponent,\n} from \"@assistant-ui/react\";\nimport {\n DEEP_AGENT_COMPOSER_MARKDOWN_KEY,\n hideUnterminatedMarkdownLink,\n isGithubWakeMessage,\n isSubscriptionWakeMessage,\n isVoiceDelegationMessage,\n readDeepAgentComposerMarkdown,\n readRuntimeMessageFromSourceMessages,\n readSoleRuntimeMessageKind,\n} from \"@athenaintel/agent-runtime\";\nimport {\n ArrowUpIcon,\n CheckIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n CopyIcon,\n ListPlusIcon,\n PencilIcon,\n RefreshCwIcon,\n} from \"lucide-react\";\nimport {\n type FC,\n type ReactNode,\n useMemo,\n} from \"react\";\nimport { useAthenaRunLive } from \"../../chat/use-athena-run-live\";\nimport type { ComposerAction } from \"../composer/composer-action\";\nimport { cn } from \"../../lib/utils\";\nimport { ChatMessageBody } from \"../rich-text/chat-message-body\";\nimport { useMessageActionsReadOnly } from \"./message-actions-config\";\nimport { RuntimeMessageCard } from \"./runtime-message\";\nimport { hasVisibleContent } from \"./running-indicator\";\nimport { VoiceDelegationMessage } from \"./voice-delegation-card\";\nimport { WakeMarkerMessage } from \"./wake-marker\";\nimport { SmallIconButton } from \"./thread-chrome\";\n\nexport {\n IconButton,\n SmallIconButton,\n THREAD_HEADER_ACTIONS_CLASS,\n THREAD_HEADER_CLASS,\n THREAD_HEADER_ICON_CLASS,\n THREAD_HEADER_PILL_CLASS,\n THREAD_PANEL_CLASS,\n} from \"./thread-chrome\";\n\nexport const BranchPicker: FC = () => (\n <BranchPickerPrimitive.Root\n hideWhenSingleBranch\n className=\"inline-flex items-center gap-0.5 text-xs text-muted-foreground\"\n data-testid=\"chat-branch-picker\"\n >\n <BranchPickerPrimitive.Previous asChild>\n <SmallIconButton\n tooltip=\"Previous branch\"\n data-testid=\"chat-branch-previous\"\n >\n <ChevronLeftIcon className=\"size-3\" />\n </SmallIconButton>\n </BranchPickerPrimitive.Previous>\n <span className=\"font-medium\" data-testid=\"chat-branch-count\">\n <BranchPickerPrimitive.Number /> / <BranchPickerPrimitive.Count />\n </span>\n <BranchPickerPrimitive.Next asChild>\n <SmallIconButton tooltip=\"Next branch\" data-testid=\"chat-branch-next\">\n <ChevronRightIcon className=\"size-3\" />\n </SmallIconButton>\n </BranchPickerPrimitive.Next>\n </BranchPickerPrimitive.Root>\n);\n\nconst CopyActionButton: FC = () => (\n <ActionBarPrimitive.Copy asChild>\n <SmallIconButton tooltip=\"Copy\">\n <AuiIf condition={(state) => state.message.isCopied}>\n <CheckIcon className=\"size-3\" />\n </AuiIf>\n <AuiIf condition={(state) => !state.message.isCopied}>\n <CopyIcon className=\"size-3\" />\n </AuiIf>\n </SmallIconButton>\n </ActionBarPrimitive.Copy>\n);\n\n/**\n * The edit primitive does not check the runtime's edit capability itself —\n * clicking it on a runtime without one throws inside onPress, where no error\n * boundary can catch it — so the button must gate on the capability and, to\n * match the rewind semantics of `run/edit`, stay hidden while a run is live.\n * The read-only context covers threads the capability flags cannot: a host's\n * static `edit: true` still applies to fenced legacy conversations.\n */\nconst EditActionButton: FC = () => {\n const allowEdit = useAuiState((s) => s.thread.capabilities.edit);\n const isRunning = useAthenaRunLive();\n const readOnly = useMessageActionsReadOnly();\n if (!allowEdit || isRunning || readOnly) return null;\n return (\n <ActionBarPrimitive.Edit asChild>\n <SmallIconButton tooltip=\"Edit\" data-testid=\"chat-message-edit\">\n <PencilIcon className=\"size-3\" />\n </SmallIconButton>\n </ActionBarPrimitive.Edit>\n );\n};\n\n/** Regenerate dispatches `run/reload`, so it hides on read-only threads too. */\nconst RegenerateActionButton: FC = () => {\n const readOnly = useMessageActionsReadOnly();\n if (readOnly) return null;\n return (\n <ActionBarPrimitive.Reload asChild>\n <SmallIconButton tooltip=\"Regenerate\">\n <RefreshCwIcon className=\"size-3\" />\n </SmallIconButton>\n </ActionBarPrimitive.Reload>\n );\n};\n\n/**\n * Reveal-on-demand treatment for action bars: invisible and click-through\n * until the surrounding named group is hovered or a control inside receives\n * keyboard focus. The `focus-within` escape hatch is what keeps the hidden\n * controls reachable for keyboard users.\n */\nexport const ACTION_BAR_REVEAL_CLASS =\n \"pointer-events-none opacity-0 transition-opacity focus-within:pointer-events-auto focus-within:opacity-100\";\n\n/** Shared chat body; the reveal holds incomplete links until their URL is complete. */\nexport const MarkdownText: FC = () => {\n const revealed = useSmooth(useMessagePartText(), true);\n const isRunning = revealed.status.type === \"running\";\n const text = isRunning ? hideUnterminatedMarkdownLink(revealed.text) : revealed.text;\n return <ChatMessageBody text={text} isRunning={isRunning} />;\n};\n\n/**\n * A user message's text, shown as it was typed.\n *\n * A composer sends plain text exactly as typed, because the model reads it\n * literally, so the text alone no longer says which characters are\n * formatting: read as Markdown, `List<T>` loses `<T>`, `obj.__init__` shows a\n * bold \"init\" and `a\\\\b` one backslash. A composer send therefore carries the\n * draft it was serialized from (`metadata.composer_markdown`, only when the\n * two differ), and this renders that draft when it is a draft of the\n * message's own text (`readDeepAgentComposerMarkdown`), formatting and\n * mention chips included. Any other text — no draft, or one of other words —\n * renders with the typed reading (`ChatMessageBody typed`), which leaves raw\n * HTML and underscore emphasis as the characters they were typed with, so\n * `List<T>`, `obj.__init__` and `a\\b` show as typed there too.\n *\n * Copy copies the message text, which is the text as sent, and Edit opens it\n * in a plain-text box, so neither reads the draft.\n */\nexport const UserMessageText: FC<{ text: string }> = ({ text }) => {\n const composerMarkdown: unknown = useAuiState(\n (s) => s.message.metadata?.custom?.[DEEP_AGENT_COMPOSER_MARKDOWN_KEY],\n );\n const shown = useMemo(\n () =>\n readDeepAgentComposerMarkdown({\n metadata: { [DEEP_AGENT_COMPOSER_MARKDOWN_KEY]: composerMarkdown },\n text,\n }) ?? text,\n [composerMarkdown, text],\n );\n return <ChatMessageBody text={shown} typed />;\n};\n\nconst UserActionBar: FC = () => (\n <ActionBarPrimitive.Root\n autohide=\"never\"\n className={cn(\n \"flex min-h-6 items-center gap-0.5\",\n ACTION_BAR_REVEAL_CLASS,\n \"group-hover/user-message:pointer-events-auto group-hover/user-message:opacity-100\",\n )}\n >\n <CopyActionButton />\n <EditActionButton />\n </ActionBarPrimitive.Root>\n);\n\nexport const UserMessage: FC = () => {\n // A GitHub wake or a subscription's delivery is an event, not words the\n // user typed: it renders as the compact wake marker instead of a bubble\n // quoting the injected text.\n const isWake = useAuiState(\n (s) =>\n isGithubWakeMessage(s.message.metadata?.custom) ||\n isSubscriptionWakeMessage(s.message.metadata?.custom),\n );\n // A voice delegation's anchor is the ask the live voice model handed to the\n // thread, not words the user typed: it renders as the shared voice-task\n // card on every host instead of a second user bubble under the spoken turn.\n const isVoiceDelegation = useAuiState((s) =>\n isVoiceDelegationMessage({ messageId: s.message.id, custom: s.message.metadata?.custom }),\n );\n if (isWake) {\n return (\n <MessagePrimitive.Root data-message-role=\"user\" className=\"mb-3\">\n <WakeMarkerMessage />\n </MessagePrimitive.Root>\n );\n }\n if (isVoiceDelegation) {\n return (\n <MessagePrimitive.Root data-message-role=\"user\" className=\"mb-3\">\n <VoiceDelegationMessage />\n </MessagePrimitive.Root>\n );\n }\n return (\n <MessagePrimitive.Root\n data-message-role=\"user\"\n className=\"group/user-message mb-3 flex justify-end\"\n >\n <div className=\"flex min-w-0 max-w-[85%] flex-col items-end gap-1\">\n <div className=\"min-w-0 max-w-full rounded-2xl rounded-br-md bg-muted px-3.5 py-2 text-sm text-foreground\">\n <MessagePrimitive.Content components={{ Text: UserMessageText }} />\n </div>\n <div className=\"flex min-h-6 items-center gap-1\">\n <BranchPicker />\n <UserActionBar />\n </div>\n </div>\n </MessagePrimitive.Root>\n );\n};\n\nexport interface CreateAssistantMessageOptions {\n /** Host-registered card for tools without a dedicated UI. */\n toolFallback: ToolCallMessagePartComponent;\n /** Extra action-bar controls appended after copy/regenerate. */\n extraActions?: ReactNode;\n /**\n * Renders the message body. Hosts that group content into activity\n * timelines supply their own; the default renders markdown and tool cards.\n */\n content?: FC;\n /**\n * Inline affordance rendered inside a runtime-ending card (e.g. a Continue\n * button). Hosts without one leave it unset.\n */\n runtimeMessageAction?: ReactNode;\n}\n\n/**\n * Builds the assistant bubble. Call this once per host (memoized on its\n * inputs) so the returned component identity stays stable across renders.\n */\nexport function createAssistantMessage({\n toolFallback,\n extraActions,\n content: Content,\n runtimeMessageAction,\n}: CreateAssistantMessageOptions): FC {\n const AssistantActionBar: FC = () => {\n // The latest reply keeps its actions visible; older replies reveal them\n // on hover so a long transcript is not a wall of icon rows.\n const isLast = useAuiState((s) => s.message.isLast);\n return (\n <ActionBarPrimitive.Root\n autohide=\"never\"\n className={cn(\n \"mt-1 flex min-h-6 items-center gap-0.5\",\n !isLast && [\n ACTION_BAR_REVEAL_CLASS,\n \"group-hover/assistant-message:pointer-events-auto group-hover/assistant-message:opacity-100\",\n ],\n )}\n >\n <CopyActionButton />\n <RegenerateActionButton />\n {extraActions}\n </ActionBarPrimitive.Root>\n );\n };\n\n // A run-lifecycle marker or handoff summary is a system event, not\n // assistant speech. When it owns the whole row, render the status card in\n // place of the bubble; when it is chunked in with the assistant's own work\n // (or is a handoff whose text IS the closing summary), keep the body and\n // frame it with the card above.\n const RuntimeEnding: FC<{ placement: \"row\" | \"banner\" }> = ({ placement }) => {\n // Select the message (a stable store reference) and derive from it: the\n // reader allocates a fresh object per call, and `useAuiState` compares\n // snapshots with `Object.is`, so selecting the reader's result directly\n // would re-render on every store update and trip React's update-depth\n // guard.\n const message = useAuiState((s) => s.message);\n const runtime = useMemo(() => readRuntimeMessageFromSourceMessages(message), [message]);\n if (!runtime || runtime.silent) return null;\n if (placement === \"row\" && !runtime.isSoleSourceMessage) return null;\n if (placement === \"banner\" && runtime.isSoleSourceMessage && runtime.kind !== \"handoff\") {\n return null;\n }\n return <RuntimeMessageCard message={runtime} action={runtimeMessageAction} />;\n };\n\n const AssistantMessage: FC = () => {\n // An assistant row exists before its first token streams; showing\n // copy/regenerate against nothing looks broken, so wait for content.\n const showActions = useAuiState((state) =>\n hasVisibleContent(state.message.content),\n );\n // Primitive selector: the reader builds a fresh object per call.\n const soleRuntimeKind = useAuiState((s) => readSoleRuntimeMessageKind(s.message));\n const soleRuntimeSilent = useAuiState(\n (s) => readRuntimeMessageFromSourceMessages(s.message)?.silent === true,\n );\n\n if (soleRuntimeKind && soleRuntimeKind !== \"handoff\") {\n if (soleRuntimeSilent) return null;\n return (\n <MessagePrimitive.Root\n data-message-role=\"assistant\"\n className=\"group group/assistant-message mb-3\"\n >\n <div className=\"max-w-[95%]\">\n <RuntimeEnding placement=\"row\" />\n </div>\n </MessagePrimitive.Root>\n );\n }\n\n return (\n <MessagePrimitive.Root\n data-message-role=\"assistant\"\n className=\"group group/assistant-message mb-3\"\n >\n <div className=\"max-w-[95%]\">\n <RuntimeEnding placement=\"banner\" />\n {Content ? (\n <Content />\n ) : (\n <MessagePrimitive.Content\n components={{\n Text: MarkdownText,\n tools: { Fallback: toolFallback },\n }}\n />\n )}\n {showActions ? (\n <div className=\"flex min-h-6 items-center gap-1\">\n <BranchPicker />\n <AssistantActionBar />\n </div>\n ) : null}\n </div>\n </MessagePrimitive.Root>\n );\n };\n\n return AssistantMessage;\n}\n\n/** Composer chrome: the dock around the composer, its surface and its rows. */\nexport const COMPOSER_DOCK_CLASS = \"bg-background px-2.5 pb-2 pt-1.5\";\nexport const COMPOSER_SURFACE_CLASS =\n \"relative flex flex-col gap-1 rounded-xl border border-neutral-200 bg-white shadow-[0_2px_10px_rgba(54,45,33,0.08)]\";\nexport const COMPOSER_EDITOR_ROW_CLASS = \"px-2.5 pt-1\";\nexport const COMPOSER_TOOLBAR_CLASS =\n \"flex items-center gap-1 border-t border-neutral-100 px-2 py-1.5\";\n/**\n * Paper composer chrome (`ChatComposerDock appearance=\"paper\"`): a card-toned\n * surface with a larger radius, a focus-within ring, a drag-over tint keyed\n * off `data-drag-active`, and a bottom rail — the chrome the SDK's\n * `AthenaChat` thread renders. Hosts on the default chrome above are\n * untouched. The dock carries no padding of its own; the paper host's footer\n * spaces it. The radius and border colour also bind to the `--composer-radius`\n * / `--composer-border` theme variables in `styles.css`.\n */\nexport const COMPOSER_PAPER_DOCK_CLASS = \"aui-composer-dock\";\nexport const COMPOSER_PAPER_SURFACE_CLASS =\n \"aui-composer-root relative flex w-full flex-col rounded-[1.375rem] border border-border bg-card p-2.5 text-card-foreground shadow-[0_1px_2px_rgba(0,0,0,0.04)] outline-none transition-shadow duration-150 focus-within:shadow-[0_8px_24px_-14px_rgba(0,0,0,0.25)] focus-within:ring-2 focus-within:ring-ring/40 data-[drag-active=true]:bg-primary/5 data-[drag-active=true]:ring-2 data-[drag-active=true]:ring-primary/40\";\nexport const COMPOSER_PAPER_EDITOR_ROW_CLASS = \"px-0.5\";\nexport const COMPOSER_PAPER_TOOLBAR_CLASS =\n \"aui-composer-action-wrapper relative flex items-center justify-between gap-1 pt-1\";\nexport const THREAD_SCROLL_TO_BOTTOM_CLASS =\n \"inline-flex items-center justify-center rounded-full border bg-background/80 p-1 shadow-sm backdrop-blur transition-opacity hover:bg-accent disabled:invisible\";\n\nconst ComposerStopIcon: FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"size-4\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n >\n <rect width=\"10\" height=\"10\" x=\"3\" y=\"3\" rx=\"2\" />\n </svg>\n);\n\nexport interface ComposerStopButtonProps {\n onStop: () => void;\n disabled?: boolean;\n title?: string;\n}\n\nexport interface ComposerSendButtonProps {\n action: Extract<ComposerAction, \"send\" | \"queue\">;\n onSend: () => void;\n disabled?: boolean;\n title?: string;\n}\n\n/** Stop control shown while a run is in flight and there is nothing queued. */\nexport const ComposerStopButton: FC<ComposerStopButtonProps> = ({\n onStop,\n disabled = false,\n title = \"Stop generation\",\n}) => (\n <button\n type=\"button\"\n onClick={onStop}\n disabled={disabled}\n title={title}\n className={cn(\n \"inline-flex size-8 shrink-0 items-center justify-center rounded-lg bg-foreground text-background shadow-sm transition-colors hover:bg-foreground/80\",\n disabled && \"cursor-not-allowed opacity-60\",\n )}\n >\n <ComposerStopIcon />\n </button>\n);\n/** Send control, which becomes a queue control while a run is in flight. */\nexport const ComposerSendButton: FC<ComposerSendButtonProps> = ({\n action,\n onSend,\n disabled = false,\n title,\n}) => (\n <button\n type=\"button\"\n onClick={onSend}\n disabled={disabled}\n title={title ?? (action === \"queue\" ? \"Queue message\" : \"Send\")}\n className={cn(\n \"inline-flex size-8 shrink-0 items-center justify-center rounded-full shadow-sm transition-colors\",\n disabled\n ? \"cursor-not-allowed bg-muted text-muted-foreground opacity-60\"\n : \"bg-foreground text-background hover:bg-foreground/80\",\n )}\n >\n {action === \"queue\" ? (\n <ListPlusIcon className=\"size-4\" />\n ) : (\n <ArrowUpIcon className=\"size-4\" />\n )}\n </button>\n);\n"],"names":["jsxs","BranchPickerPrimitive","jsx","SmallIconButton","ChevronLeftIcon","ChevronRightIcon","ActionBarPrimitive","AuiIf","CheckIcon","CopyIcon","useAuiState","useAthenaRunLive","useMessageActionsReadOnly","PencilIcon","RefreshCwIcon","useSmooth","useMessagePartText","hideUnterminatedMarkdownLink","ChatMessageBody","composerMarkdown","DEEP_AGENT_COMPOSER_MARKDOWN_KEY","useMemo","readDeepAgentComposerMarkdown","cn","isGithubWakeMessage","isSubscriptionWakeMessage","isVoiceDelegationMessage","MessagePrimitive","WakeMarkerMessage","VoiceDelegationMessage","readRuntimeMessageFromSourceMessages","RuntimeMessageCard","hasVisibleContent","readSoleRuntimeMessageKind","ListPlusIcon","ArrowUpIcon"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAwDO,MAAM,eAAmB,MAC9BA,2BAAAA;AAAAA,EAACC,MAAAA,sBAAsB;AAAA,EAAtB;AAAA,IACC,sBAAoB;AAAA,IACpB,WAAU;AAAA,IACV,eAAY;AAAA,IAEZ,UAAA;AAAA,MAAAC,2BAAAA,IAACD,MAAAA,sBAAsB,UAAtB,EAA+B,SAAO,MACrC,UAAAC,2BAAAA;AAAAA,QAACC,aAAAA;AAAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,eAAY;AAAA,UAEZ,UAAAD,2BAAAA,IAACE,YAAAA,iBAAA,EAAgB,WAAU,SAAA,CAAS;AAAA,QAAA;AAAA,MAAA,GAExC;AAAA,MACAJ,2BAAAA,KAAC,QAAA,EAAK,WAAU,eAAc,eAAY,qBACxC,UAAA;AAAA,QAAAE,+BAACD,MAAAA,sBAAsB,QAAtB,EAA6B;AAAA,QAAE;AAAA,QAAGC,+BAACD,MAAAA,sBAAsB,OAAtB,CAAA,CAA4B;AAAA,MAAA,GAClE;AAAA,qCACCA,MAAAA,sBAAsB,MAAtB,EAA2B,SAAO,MACjC,UAAAC,2BAAAA,IAACC,aAAAA,iBAAA,EAAgB,SAAQ,eAAc,eAAY,oBACjD,UAAAD,+BAACG,YAAAA,oBAAiB,WAAU,UAAS,GACvC,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AACF;AAGF,MAAM,mBAAuB,MAC3BH,2BAAAA,IAACI,MAAAA,mBAAmB,MAAnB,EAAwB,SAAO,MAC9B,UAAAN,2BAAAA,KAACG,aAAAA,iBAAA,EAAgB,SAAQ,QACvB,UAAA;AAAA,EAAAD,2BAAAA,IAACK,MAAAA,OAAA,EAAM,WAAW,CAAC,UAAU,MAAM,QAAQ,UACzC,UAAAL,2BAAAA,IAACM,YAAAA,WAAA,EAAU,WAAU,SAAA,CAAS,GAChC;AAAA,EACAN,2BAAAA,IAACK,MAAAA,OAAA,EAAM,WAAW,CAAC,UAAU,CAAC,MAAM,QAAQ,UAC1C,UAAAL,2BAAAA,IAACO,YAAAA,UAAA,EAAS,WAAU,UAAS,EAAA,CAC/B;AAAA,EAAA,CACF,EAAA,CACF;AAWF,MAAM,mBAAuB,MAAM;AACjC,QAAM,YAAYC,MAAAA,YAAY,CAAC,MAAM,EAAE,OAAO,aAAa,IAAI;AAC/D,QAAM,YAAYC,iBAAAA,iBAAA;AAClB,QAAM,WAAWC,qBAAAA,0BAAA;AACjB,MAAI,CAAC,aAAa,aAAa,SAAU,QAAO;AAChD,wCACGN,yBAAmB,MAAnB,EAAwB,SAAO,MAC9B,UAAAJ,2BAAAA,IAACC,aAAAA,iBAAA,EAAgB,SAAQ,QAAO,eAAY,qBAC1C,UAAAD,+BAACW,YAAAA,cAAW,WAAU,SAAA,CAAS,GACjC,GACF;AAEJ;AAGA,MAAM,yBAA6B,MAAM;AACvC,QAAM,WAAWD,qBAAAA,0BAAA;AACjB,MAAI,SAAU,QAAO;AACrB,SACEV,2BAAAA,IAACI,MAAAA,mBAAmB,QAAnB,EAA0B,SAAO,MAChC,UAAAJ,2BAAAA,IAACC,8BAAA,EAAgB,SAAQ,cACvB,UAAAD,2BAAAA,IAACY,YAAAA,eAAA,EAAc,WAAU,SAAA,CAAS,GACpC,GACF;AAEJ;AAQO,MAAM,0BACX;AAGK,MAAM,eAAmB,MAAM;AACpC,QAAM,WAAWC,MAAAA,UAAUC,MAAAA,mBAAA,GAAsB,IAAI;AACrD,QAAM,YAAY,SAAS,OAAO,SAAS;AAC3C,QAAM,OAAO,YAAYC,kBAAAA,6BAA6B,SAAS,IAAI,IAAI,SAAS;AAChF,SAAOf,2BAAAA,IAACgB,gBAAAA,iBAAA,EAAgB,MAAY,UAAA,CAAsB;AAC5D;AAoBO,MAAM,kBAAwC,CAAC,EAAE,WAAW;AACjE,QAAMC,qBAA4BT,MAAAA;AAAAA,IAChC,CAAC,MAAA;;AAAM,2BAAE,QAAQ,aAAV,mBAAoB,WAApB,mBAA6BU,iBAAAA;AAAAA;AAAAA,EAAgC;AAEtE,QAAM,QAAQC,QAAAA;AAAAA,IACZ,MACEC,+CAA8B;AAAA,MAC5B,UAAU,EAAE,CAACF,iBAAAA,gCAAgC,GAAGD,mBAAA;AAAA,MAChD;AAAA,IAAA,CACD,KAAK;AAAA,IACR,CAACA,oBAAkB,IAAI;AAAA,EAAA;AAEzB,SAAOjB,2BAAAA,IAACgB,gBAAAA,iBAAA,EAAgB,MAAM,OAAO,OAAK,MAAC;AAC7C;AAEA,MAAM,gBAAoB,MACxBlB,2BAAAA;AAAAA,EAACM,MAAAA,mBAAmB;AAAA,EAAnB;AAAA,IACC,UAAS;AAAA,IACT,WAAWiB,OAAAA;AAAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAGF,UAAA;AAAA,MAAArB,2BAAAA,IAAC,kBAAA,EAAiB;AAAA,qCACjB,kBAAA,CAAA,CAAiB;AAAA,IAAA;AAAA,EAAA;AACpB;AAGK,MAAM,cAAkB,MAAM;AAInC,QAAM,SAASQ,MAAAA;AAAAA,IACb,CAAC,MAAA;;AACCc,6BAAAA,qBAAoB,OAAE,QAAQ,aAAV,mBAAoB,MAAM,KAC9CC,iDAA0B,OAAE,QAAQ,aAAV,mBAAoB,MAAM;AAAA;AAAA,EAAA;AAKxD,QAAM,oBAAoBf,MAAAA;AAAAA,IAAY,CAAC,MAAA;;AACrCgB,+BAAAA,yBAAyB,EAAE,WAAW,EAAE,QAAQ,IAAI,SAAQ,OAAE,QAAQ,aAAV,mBAAoB,QAAQ;AAAA;AAAA,EAAA;AAE1F,MAAI,QAAQ;AACV,WACExB,2BAAAA,IAACyB,MAAAA,iBAAiB,MAAjB,EAAsB,qBAAkB,QAAO,WAAU,QACxD,UAAAzB,2BAAAA,IAAC0B,WAAAA,mBAAA,CAAA,CAAkB,EAAA,CACrB;AAAA,EAEJ;AACA,MAAI,mBAAmB;AACrB,WACE1B,2BAAAA,IAACyB,MAAAA,iBAAiB,MAAjB,EAAsB,qBAAkB,QAAO,WAAU,QACxD,UAAAzB,2BAAAA,IAAC2B,oBAAAA,wBAAA,CAAA,CAAuB,EAAA,CAC1B;AAAA,EAEJ;AACA,SACE3B,2BAAAA;AAAAA,IAACyB,MAAAA,iBAAiB;AAAA,IAAjB;AAAA,MACC,qBAAkB;AAAA,MAClB,WAAU;AAAA,MAEV,UAAA3B,2BAAAA,KAAC,OAAA,EAAI,WAAU,qDACb,UAAA;AAAA,QAAAE,2BAAAA,IAAC,OAAA,EAAI,WAAU,6FACb,UAAAA,2BAAAA,IAACyB,MAAAA,iBAAiB,SAAjB,EAAyB,YAAY,EAAE,MAAM,gBAAA,EAAgB,CAAG,EAAA,CACnE;AAAA,QACA3B,2BAAAA,KAAC,OAAA,EAAI,WAAU,mCACb,UAAA;AAAA,UAAAE,2BAAAA,IAAC,cAAA,EAAa;AAAA,yCACb,eAAA,CAAA,CAAc;AAAA,QAAA,EAAA,CACjB;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAuBO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AACF,GAAsC;AACpC,QAAM,qBAAyB,MAAM;AAGnC,UAAM,SAASQ,MAAAA,YAAY,CAAC,MAAM,EAAE,QAAQ,MAAM;AAClD,WACEV,2BAAAA;AAAAA,MAACM,MAAAA,mBAAmB;AAAA,MAAnB;AAAA,QACC,UAAS;AAAA,QACT,WAAWiB,OAAAA;AAAAA,UACT;AAAA,UACA,CAAC,UAAU;AAAA,YACT;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAAA,QAGF,UAAA;AAAA,UAAArB,2BAAAA,IAAC,kBAAA,EAAiB;AAAA,yCACjB,wBAAA,EAAuB;AAAA,UACvB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AAOA,QAAM,gBAAqD,CAAC,EAAE,gBAAgB;AAM5E,UAAM,UAAUQ,MAAAA,YAAY,CAAC,MAAM,EAAE,OAAO;AAC5C,UAAM,UAAUW,QAAAA,QAAQ,MAAMS,gBAAAA,qCAAqC,OAAO,GAAG,CAAC,OAAO,CAAC;AACtF,QAAI,CAAC,WAAW,QAAQ,OAAQ,QAAO;AACvC,QAAI,cAAc,SAAS,CAAC,QAAQ,oBAAqB,QAAO;AAChE,QAAI,cAAc,YAAY,QAAQ,uBAAuB,QAAQ,SAAS,WAAW;AACvF,aAAO;AAAA,IACT;AACA,WAAO5B,2BAAAA,IAAC6B,eAAAA,oBAAA,EAAmB,SAAS,SAAS,QAAQ,sBAAsB;AAAA,EAC7E;AAEA,QAAM,mBAAuB,MAAM;AAGjC,UAAM,cAAcrB,MAAAA;AAAAA,MAAY,CAAC,UAC/BsB,iBAAAA,kBAAkB,MAAM,QAAQ,OAAO;AAAA,IAAA;AAGzC,UAAM,kBAAkBtB,MAAAA,YAAY,CAAC,MAAMuB,gBAAAA,2BAA2B,EAAE,OAAO,CAAC;AAChF,UAAM,oBAAoBvB,MAAAA;AAAAA,MACxB,CAAC,MAAA;;AAAMoB,sCAAAA,qCAAqC,EAAE,OAAO,MAA9CA,mBAAiD,YAAW;AAAA;AAAA,IAAA;AAGrE,QAAI,mBAAmB,oBAAoB,WAAW;AACpD,UAAI,kBAAmB,QAAO;AAC9B,aACE5B,2BAAAA;AAAAA,QAACyB,MAAAA,iBAAiB;AAAA,QAAjB;AAAA,UACC,qBAAkB;AAAA,UAClB,WAAU;AAAA,UAEV,UAAAzB,2BAAAA,IAAC,SAAI,WAAU,eACb,yCAAC,eAAA,EAAc,WAAU,OAAM,EAAA,CACjC;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN;AAEA,WACEA,2BAAAA;AAAAA,MAACyB,MAAAA,iBAAiB;AAAA,MAAjB;AAAA,QACC,qBAAkB;AAAA,QAClB,WAAU;AAAA,QAEV,UAAA3B,2BAAAA,KAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,UAAAE,2BAAAA,IAAC,eAAA,EAAc,WAAU,SAAA,CAAS;AAAA,UACjC,UACCA,2BAAAA,IAAC,SAAA,CAAA,CAAQ,IAETA,2BAAAA;AAAAA,YAACyB,MAAAA,iBAAiB;AAAA,YAAjB;AAAA,cACC,YAAY;AAAA,gBACV,MAAM;AAAA,gBACN,OAAO,EAAE,UAAU,aAAA;AAAA,cAAa;AAAA,YAClC;AAAA,UAAA;AAAA,UAGH,cACC3B,2BAAAA,KAAC,OAAA,EAAI,WAAU,mCACb,UAAA;AAAA,YAAAE,2BAAAA,IAAC,cAAA,EAAa;AAAA,2CACb,oBAAA,CAAA,CAAmB;AAAA,UAAA,EAAA,CACtB,IACE;AAAA,QAAA,EAAA,CACN;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AAEA,SAAO;AACT;AAGO,MAAM,sBAAsB;AAC5B,MAAM,yBACX;AACK,MAAM,4BAA4B;AAClC,MAAM,yBACX;AAUK,MAAM,4BAA4B;AAClC,MAAM,+BACX;AACK,MAAM,kCAAkC;AACxC,MAAM,+BACX;AACK,MAAM,gCACX;AAEF,MAAM,mBAAuB,MAC3BA,2BAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAY;AAAA,IACZ,WAAU;AAAA,IACV,SAAQ;AAAA,IACR,MAAK;AAAA,IAEL,UAAAA,2BAAAA,IAAC,QAAA,EAAK,OAAM,MAAK,QAAO,MAAK,GAAE,KAAI,GAAE,KAAI,IAAG,IAAA,CAAI;AAAA,EAAA;AAClD;AAiBK,MAAM,qBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA,WAAW;AAAA,EACX,QAAQ;AACV,MACEA,2BAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA,WAAWqB,OAAAA;AAAAA,MACT;AAAA,MACA,YAAY;AAAA,IAAA;AAAA,IAGd,yCAAC,kBAAA,CAAA,CAAiB;AAAA,EAAA;AACpB;AAGK,MAAM,qBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AACF,MACErB,2BAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA,OAAO,UAAU,WAAW,UAAU,kBAAkB;AAAA,IACxD,WAAWqB,OAAAA;AAAAA,MACT;AAAA,MACA,WACI,iEACA;AAAA,IAAA;AAAA,IAGL,UAAA,WAAW,UACVrB,2BAAAA,IAACgC,YAAAA,cAAA,EAAa,WAAU,UAAS,IAEjChC,2BAAAA,IAACiC,YAAAA,aAAA,EAAY,WAAU,SAAA,CAAS;AAAA,EAAA;AAEpC;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,5 +1,4 @@
1
1
  import { type ToolCallMessagePartComponent } from "@assistant-ui/react";
2
- import "@assistant-ui/react-markdown/styles/dot.css";
3
2
  import { type FC, type ReactNode } from "react";
4
3
  import type { ComposerAction } from "../composer/composer-action";
5
4
  export { IconButton, SmallIconButton, THREAD_HEADER_ACTIONS_CLASS, THREAD_HEADER_CLASS, THREAD_HEADER_ICON_CLASS, THREAD_HEADER_PILL_CLASS, THREAD_PANEL_CLASS, } from "./thread-chrome";
@@ -13,6 +12,27 @@ export declare const BranchPicker: FC;
13
12
  export declare const ACTION_BAR_REVEAL_CLASS = "pointer-events-none opacity-0 transition-opacity focus-within:pointer-events-auto focus-within:opacity-100";
14
13
  /** Shared chat body; the reveal holds incomplete links until their URL is complete. */
15
14
  export declare const MarkdownText: FC;
15
+ /**
16
+ * A user message's text, shown as it was typed.
17
+ *
18
+ * A composer sends plain text exactly as typed, because the model reads it
19
+ * literally, so the text alone no longer says which characters are
20
+ * formatting: read as Markdown, `List<T>` loses `<T>`, `obj.__init__` shows a
21
+ * bold "init" and `a\\b` one backslash. A composer send therefore carries the
22
+ * draft it was serialized from (`metadata.composer_markdown`, only when the
23
+ * two differ), and this renders that draft when it is a draft of the
24
+ * message's own text (`readDeepAgentComposerMarkdown`), formatting and
25
+ * mention chips included. Any other text — no draft, or one of other words —
26
+ * renders with the typed reading (`ChatMessageBody typed`), which leaves raw
27
+ * HTML and underscore emphasis as the characters they were typed with, so
28
+ * `List<T>`, `obj.__init__` and `a\b` show as typed there too.
29
+ *
30
+ * Copy copies the message text, which is the text as sent, and Edit opens it
31
+ * in a plain-text box, so neither reads the draft.
32
+ */
33
+ export declare const UserMessageText: FC<{
34
+ text: string;
35
+ }>;
16
36
  export declare const UserMessage: FC;
17
37
  export interface CreateAssistantMessageOptions {
18
38
  /** Host-registered card for tools without a dedicated UI. */
@@ -1,6 +1,5 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { BranchPickerPrimitive, useSmooth, useMessagePartText, useAuiState, MessagePrimitive, ActionBarPrimitive, AuiIf } from "@assistant-ui/react";
3
- import "@assistant-ui/react-markdown/styles/dot.css";
4
3
  import { ChevronLeftIcon, ChevronRightIcon, ListPlusIcon, ArrowUpIcon, CheckIcon, CopyIcon, PencilIcon, RefreshCwIcon } from "lucide-react";
5
4
  import { useMemo } from "react";
6
5
  import { useAthenaRunLive } from "../../chat/use-athena-run-live.js";
@@ -12,10 +11,12 @@ import { VoiceDelegationMessage } from "./voice-delegation-card.js";
12
11
  import { WakeMarkerMessage } from "./wake-marker.js";
13
12
  import { SmallIconButton } from "./thread-chrome.js";
14
13
  import { IconButton, THREAD_HEADER_ACTIONS_CLASS, THREAD_HEADER_CLASS, THREAD_HEADER_ICON_CLASS, THREAD_HEADER_PILL_CLASS, THREAD_PANEL_CLASS } from "./thread-chrome.js";
15
- import { hideUnterminatedMarkdownLink } from "../../packages/agent-runtime/src/streaming-markdown.js";
16
- import { isGithubWakeMessage } from "../../packages/agent-runtime/src/github-wake-event.js";
17
- import { isVoiceDelegationMessage } from "../../packages/agent-runtime/src/voice-presentation.js";
18
- import { readSoleRuntimeMessageKind, readRuntimeMessageFromSourceMessages } from "../../packages/agent-runtime/src/runtime-messages.js";
14
+ import { hideUnterminatedMarkdownLink } from "../../agent-runtime/src/streaming-markdown.js";
15
+ import { isGithubWakeMessage } from "../../agent-runtime/src/github-wake-event.js";
16
+ import { isSubscriptionWakeMessage } from "../../agent-runtime/src/subscription-wake-event.js";
17
+ import { isVoiceDelegationMessage } from "../../agent-runtime/src/voice-presentation.js";
18
+ import { DEEP_AGENT_COMPOSER_MARKDOWN_KEY, readDeepAgentComposerMarkdown } from "../../agent-runtime/src/composer-markdown.js";
19
+ import { readSoleRuntimeMessageKind, readRuntimeMessageFromSourceMessages } from "../../agent-runtime/src/runtime-messages.js";
19
20
  import { cn } from "cnfast";
20
21
  const BranchPicker = () => /* @__PURE__ */ jsxs(
21
22
  BranchPickerPrimitive.Root,
@@ -64,6 +65,22 @@ const MarkdownText = () => {
64
65
  const text = isRunning ? hideUnterminatedMarkdownLink(revealed.text) : revealed.text;
65
66
  return /* @__PURE__ */ jsx(ChatMessageBody, { text, isRunning });
66
67
  };
68
+ const UserMessageText = ({ text }) => {
69
+ const composerMarkdown = useAuiState(
70
+ (s) => {
71
+ var _a, _b;
72
+ return (_b = (_a = s.message.metadata) == null ? void 0 : _a.custom) == null ? void 0 : _b[DEEP_AGENT_COMPOSER_MARKDOWN_KEY];
73
+ }
74
+ );
75
+ const shown = useMemo(
76
+ () => readDeepAgentComposerMarkdown({
77
+ metadata: { [DEEP_AGENT_COMPOSER_MARKDOWN_KEY]: composerMarkdown },
78
+ text
79
+ }) ?? text,
80
+ [composerMarkdown, text]
81
+ );
82
+ return /* @__PURE__ */ jsx(ChatMessageBody, { text: shown, typed: true });
83
+ };
67
84
  const UserActionBar = () => /* @__PURE__ */ jsxs(
68
85
  ActionBarPrimitive.Root,
69
86
  {
@@ -80,10 +97,12 @@ const UserActionBar = () => /* @__PURE__ */ jsxs(
80
97
  }
81
98
  );
82
99
  const UserMessage = () => {
83
- const isWake = useAuiState((s) => {
84
- var _a;
85
- return isGithubWakeMessage((_a = s.message.metadata) == null ? void 0 : _a.custom);
86
- });
100
+ const isWake = useAuiState(
101
+ (s) => {
102
+ var _a, _b;
103
+ return isGithubWakeMessage((_a = s.message.metadata) == null ? void 0 : _a.custom) || isSubscriptionWakeMessage((_b = s.message.metadata) == null ? void 0 : _b.custom);
104
+ }
105
+ );
87
106
  const isVoiceDelegation = useAuiState(
88
107
  (s) => {
89
108
  var _a;
@@ -102,7 +121,7 @@ const UserMessage = () => {
102
121
  "data-message-role": "user",
103
122
  className: "group/user-message mb-3 flex justify-end",
104
123
  children: /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 max-w-[85%] flex-col items-end gap-1", children: [
105
- /* @__PURE__ */ jsx("div", { className: "min-w-0 max-w-full rounded-2xl rounded-br-md bg-muted px-3.5 py-2 text-sm text-foreground", children: /* @__PURE__ */ jsx(MessagePrimitive.Content, { components: { Text: MarkdownText } }) }),
124
+ /* @__PURE__ */ jsx("div", { className: "min-w-0 max-w-full rounded-2xl rounded-br-md bg-muted px-3.5 py-2 text-sm text-foreground", children: /* @__PURE__ */ jsx(MessagePrimitive.Content, { components: { Text: UserMessageText } }) }),
106
125
  /* @__PURE__ */ jsxs("div", { className: "flex min-h-6 items-center gap-1", children: [
107
126
  /* @__PURE__ */ jsx(BranchPicker, {}),
108
127
  /* @__PURE__ */ jsx(UserActionBar, {})
@@ -275,6 +294,7 @@ export {
275
294
  THREAD_PANEL_CLASS,
276
295
  THREAD_SCROLL_TO_BOTTOM_CLASS,
277
296
  UserMessage,
297
+ UserMessageText,
278
298
  createAssistantMessage
279
299
  };
280
300
  //# sourceMappingURL=message-components.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"message-components.js","sources":["../../../src/chat-ui/messages/message-components.tsx"],"sourcesContent":["import {\n ActionBarPrimitive,\n AuiIf,\n BranchPickerPrimitive,\n MessagePrimitive,\n useAuiState,\n useMessagePartText,\n useSmooth,\n type ToolCallMessagePartComponent,\n} from \"@assistant-ui/react\";\nimport {\n hideUnterminatedMarkdownLink,\n isGithubWakeMessage,\n isVoiceDelegationMessage,\n readRuntimeMessageFromSourceMessages,\n readSoleRuntimeMessageKind,\n} from \"@athenaintel/agent-runtime\";\nimport \"@assistant-ui/react-markdown/styles/dot.css\";\nimport {\n ArrowUpIcon,\n CheckIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n CopyIcon,\n ListPlusIcon,\n PencilIcon,\n RefreshCwIcon,\n} from \"lucide-react\";\nimport {\n type FC,\n type ReactNode,\n useMemo,\n} from \"react\";\nimport { useAthenaRunLive } from \"../../chat/use-athena-run-live\";\nimport type { ComposerAction } from \"../composer/composer-action\";\nimport { cn } from \"../../lib/utils\";\nimport { ChatMessageBody } from \"../rich-text/chat-message-body\";\nimport { useMessageActionsReadOnly } from \"./message-actions-config\";\nimport { RuntimeMessageCard } from \"./runtime-message\";\nimport { hasVisibleContent } from \"./running-indicator\";\nimport { VoiceDelegationMessage } from \"./voice-delegation-card\";\nimport { WakeMarkerMessage } from \"./wake-marker\";\nimport { SmallIconButton } from \"./thread-chrome\";\n\nexport {\n IconButton,\n SmallIconButton,\n THREAD_HEADER_ACTIONS_CLASS,\n THREAD_HEADER_CLASS,\n THREAD_HEADER_ICON_CLASS,\n THREAD_HEADER_PILL_CLASS,\n THREAD_PANEL_CLASS,\n} from \"./thread-chrome\";\n\nexport const BranchPicker: FC = () => (\n <BranchPickerPrimitive.Root\n hideWhenSingleBranch\n className=\"inline-flex items-center gap-0.5 text-xs text-muted-foreground\"\n data-testid=\"chat-branch-picker\"\n >\n <BranchPickerPrimitive.Previous asChild>\n <SmallIconButton\n tooltip=\"Previous branch\"\n data-testid=\"chat-branch-previous\"\n >\n <ChevronLeftIcon className=\"size-3\" />\n </SmallIconButton>\n </BranchPickerPrimitive.Previous>\n <span className=\"font-medium\" data-testid=\"chat-branch-count\">\n <BranchPickerPrimitive.Number /> / <BranchPickerPrimitive.Count />\n </span>\n <BranchPickerPrimitive.Next asChild>\n <SmallIconButton tooltip=\"Next branch\" data-testid=\"chat-branch-next\">\n <ChevronRightIcon className=\"size-3\" />\n </SmallIconButton>\n </BranchPickerPrimitive.Next>\n </BranchPickerPrimitive.Root>\n);\n\nconst CopyActionButton: FC = () => (\n <ActionBarPrimitive.Copy asChild>\n <SmallIconButton tooltip=\"Copy\">\n <AuiIf condition={(state) => state.message.isCopied}>\n <CheckIcon className=\"size-3\" />\n </AuiIf>\n <AuiIf condition={(state) => !state.message.isCopied}>\n <CopyIcon className=\"size-3\" />\n </AuiIf>\n </SmallIconButton>\n </ActionBarPrimitive.Copy>\n);\n\n/**\n * The edit primitive does not check the runtime's edit capability itself —\n * clicking it on a runtime without one throws inside onPress, where no error\n * boundary can catch it — so the button must gate on the capability and, to\n * match the rewind semantics of `run/edit`, stay hidden while a run is live.\n * The read-only context covers threads the capability flags cannot: a host's\n * static `edit: true` still applies to fenced legacy conversations.\n */\nconst EditActionButton: FC = () => {\n const allowEdit = useAuiState((s) => s.thread.capabilities.edit);\n const isRunning = useAthenaRunLive();\n const readOnly = useMessageActionsReadOnly();\n if (!allowEdit || isRunning || readOnly) return null;\n return (\n <ActionBarPrimitive.Edit asChild>\n <SmallIconButton tooltip=\"Edit\" data-testid=\"chat-message-edit\">\n <PencilIcon className=\"size-3\" />\n </SmallIconButton>\n </ActionBarPrimitive.Edit>\n );\n};\n\n/** Regenerate dispatches `run/reload`, so it hides on read-only threads too. */\nconst RegenerateActionButton: FC = () => {\n const readOnly = useMessageActionsReadOnly();\n if (readOnly) return null;\n return (\n <ActionBarPrimitive.Reload asChild>\n <SmallIconButton tooltip=\"Regenerate\">\n <RefreshCwIcon className=\"size-3\" />\n </SmallIconButton>\n </ActionBarPrimitive.Reload>\n );\n};\n\n/**\n * Reveal-on-demand treatment for action bars: invisible and click-through\n * until the surrounding named group is hovered or a control inside receives\n * keyboard focus. The `focus-within` escape hatch is what keeps the hidden\n * controls reachable for keyboard users.\n */\nexport const ACTION_BAR_REVEAL_CLASS =\n \"pointer-events-none opacity-0 transition-opacity focus-within:pointer-events-auto focus-within:opacity-100\";\n\n/** Shared chat body; the reveal holds incomplete links until their URL is complete. */\nexport const MarkdownText: FC = () => {\n const revealed = useSmooth(useMessagePartText(), true);\n const isRunning = revealed.status.type === \"running\";\n const text = isRunning ? hideUnterminatedMarkdownLink(revealed.text) : revealed.text;\n return <ChatMessageBody text={text} isRunning={isRunning} />;\n};\n\nconst UserActionBar: FC = () => (\n <ActionBarPrimitive.Root\n autohide=\"never\"\n className={cn(\n \"flex min-h-6 items-center gap-0.5\",\n ACTION_BAR_REVEAL_CLASS,\n \"group-hover/user-message:pointer-events-auto group-hover/user-message:opacity-100\",\n )}\n >\n <CopyActionButton />\n <EditActionButton />\n </ActionBarPrimitive.Root>\n);\n\nexport const UserMessage: FC = () => {\n // A GitHub wake turn is an event, not words the user typed: it renders as\n // the compact wake marker instead of a bubble quoting the injected text.\n const isWake = useAuiState((s) => isGithubWakeMessage(s.message.metadata?.custom));\n // A voice delegation's anchor is the ask the live voice model handed to the\n // thread, not words the user typed: it renders as the shared voice-task\n // card on every host instead of a second user bubble under the spoken turn.\n const isVoiceDelegation = useAuiState((s) =>\n isVoiceDelegationMessage({ messageId: s.message.id, custom: s.message.metadata?.custom }),\n );\n if (isWake) {\n return (\n <MessagePrimitive.Root data-message-role=\"user\" className=\"mb-3\">\n <WakeMarkerMessage />\n </MessagePrimitive.Root>\n );\n }\n if (isVoiceDelegation) {\n return (\n <MessagePrimitive.Root data-message-role=\"user\" className=\"mb-3\">\n <VoiceDelegationMessage />\n </MessagePrimitive.Root>\n );\n }\n return (\n <MessagePrimitive.Root\n data-message-role=\"user\"\n className=\"group/user-message mb-3 flex justify-end\"\n >\n <div className=\"flex min-w-0 max-w-[85%] flex-col items-end gap-1\">\n <div className=\"min-w-0 max-w-full rounded-2xl rounded-br-md bg-muted px-3.5 py-2 text-sm text-foreground\">\n <MessagePrimitive.Content components={{ Text: MarkdownText }} />\n </div>\n <div className=\"flex min-h-6 items-center gap-1\">\n <BranchPicker />\n <UserActionBar />\n </div>\n </div>\n </MessagePrimitive.Root>\n );\n};\n\nexport interface CreateAssistantMessageOptions {\n /** Host-registered card for tools without a dedicated UI. */\n toolFallback: ToolCallMessagePartComponent;\n /** Extra action-bar controls appended after copy/regenerate. */\n extraActions?: ReactNode;\n /**\n * Renders the message body. Hosts that group content into activity\n * timelines supply their own; the default renders markdown and tool cards.\n */\n content?: FC;\n /**\n * Inline affordance rendered inside a runtime-ending card (e.g. a Continue\n * button). Hosts without one leave it unset.\n */\n runtimeMessageAction?: ReactNode;\n}\n\n/**\n * Builds the assistant bubble. Call this once per host (memoized on its\n * inputs) so the returned component identity stays stable across renders.\n */\nexport function createAssistantMessage({\n toolFallback,\n extraActions,\n content: Content,\n runtimeMessageAction,\n}: CreateAssistantMessageOptions): FC {\n const AssistantActionBar: FC = () => {\n // The latest reply keeps its actions visible; older replies reveal them\n // on hover so a long transcript is not a wall of icon rows.\n const isLast = useAuiState((s) => s.message.isLast);\n return (\n <ActionBarPrimitive.Root\n autohide=\"never\"\n className={cn(\n \"mt-1 flex min-h-6 items-center gap-0.5\",\n !isLast && [\n ACTION_BAR_REVEAL_CLASS,\n \"group-hover/assistant-message:pointer-events-auto group-hover/assistant-message:opacity-100\",\n ],\n )}\n >\n <CopyActionButton />\n <RegenerateActionButton />\n {extraActions}\n </ActionBarPrimitive.Root>\n );\n };\n\n // A run-lifecycle marker or handoff summary is a system event, not\n // assistant speech. When it owns the whole row, render the status card in\n // place of the bubble; when it is chunked in with the assistant's own work\n // (or is a handoff whose text IS the closing summary), keep the body and\n // frame it with the card above.\n const RuntimeEnding: FC<{ placement: \"row\" | \"banner\" }> = ({ placement }) => {\n // Select the message (a stable store reference) and derive from it: the\n // reader allocates a fresh object per call, and `useAuiState` compares\n // snapshots with `Object.is`, so selecting the reader's result directly\n // would re-render on every store update and trip React's update-depth\n // guard.\n const message = useAuiState((s) => s.message);\n const runtime = useMemo(() => readRuntimeMessageFromSourceMessages(message), [message]);\n if (!runtime || runtime.silent) return null;\n if (placement === \"row\" && !runtime.isSoleSourceMessage) return null;\n if (placement === \"banner\" && runtime.isSoleSourceMessage && runtime.kind !== \"handoff\") {\n return null;\n }\n return <RuntimeMessageCard message={runtime} action={runtimeMessageAction} />;\n };\n\n const AssistantMessage: FC = () => {\n // An assistant row exists before its first token streams; showing\n // copy/regenerate against nothing looks broken, so wait for content.\n const showActions = useAuiState((state) =>\n hasVisibleContent(state.message.content),\n );\n // Primitive selector: the reader builds a fresh object per call.\n const soleRuntimeKind = useAuiState((s) => readSoleRuntimeMessageKind(s.message));\n const soleRuntimeSilent = useAuiState(\n (s) => readRuntimeMessageFromSourceMessages(s.message)?.silent === true,\n );\n\n if (soleRuntimeKind && soleRuntimeKind !== \"handoff\") {\n if (soleRuntimeSilent) return null;\n return (\n <MessagePrimitive.Root\n data-message-role=\"assistant\"\n className=\"group group/assistant-message mb-3\"\n >\n <div className=\"max-w-[95%]\">\n <RuntimeEnding placement=\"row\" />\n </div>\n </MessagePrimitive.Root>\n );\n }\n\n return (\n <MessagePrimitive.Root\n data-message-role=\"assistant\"\n className=\"group group/assistant-message mb-3\"\n >\n <div className=\"max-w-[95%]\">\n <RuntimeEnding placement=\"banner\" />\n {Content ? (\n <Content />\n ) : (\n <MessagePrimitive.Content\n components={{\n Text: MarkdownText,\n tools: { Fallback: toolFallback },\n }}\n />\n )}\n {showActions ? (\n <div className=\"flex min-h-6 items-center gap-1\">\n <BranchPicker />\n <AssistantActionBar />\n </div>\n ) : null}\n </div>\n </MessagePrimitive.Root>\n );\n };\n\n return AssistantMessage;\n}\n\n/** Composer chrome: the dock around the composer, its surface and its rows. */\nexport const COMPOSER_DOCK_CLASS = \"bg-background px-2.5 pb-2 pt-1.5\";\nexport const COMPOSER_SURFACE_CLASS =\n \"relative flex flex-col gap-1 rounded-xl border border-neutral-200 bg-white shadow-[0_2px_10px_rgba(54,45,33,0.08)]\";\nexport const COMPOSER_EDITOR_ROW_CLASS = \"px-2.5 pt-1\";\nexport const COMPOSER_TOOLBAR_CLASS =\n \"flex items-center gap-1 border-t border-neutral-100 px-2 py-1.5\";\n/**\n * Paper composer chrome (`ChatComposerDock appearance=\"paper\"`): a card-toned\n * surface with a larger radius, a focus-within ring, a drag-over tint keyed\n * off `data-drag-active`, and a bottom rail — the chrome the SDK's\n * `AthenaChat` thread renders. Hosts on the default chrome above are\n * untouched. The dock carries no padding of its own; the paper host's footer\n * spaces it. The radius and border colour also bind to the `--composer-radius`\n * / `--composer-border` theme variables in `styles.css`.\n */\nexport const COMPOSER_PAPER_DOCK_CLASS = \"aui-composer-dock\";\nexport const COMPOSER_PAPER_SURFACE_CLASS =\n \"aui-composer-root relative flex w-full flex-col rounded-[1.375rem] border border-border bg-card p-2.5 text-card-foreground shadow-[0_1px_2px_rgba(0,0,0,0.04)] outline-none transition-shadow duration-150 focus-within:shadow-[0_8px_24px_-14px_rgba(0,0,0,0.25)] focus-within:ring-2 focus-within:ring-ring/40 data-[drag-active=true]:bg-primary/5 data-[drag-active=true]:ring-2 data-[drag-active=true]:ring-primary/40\";\nexport const COMPOSER_PAPER_EDITOR_ROW_CLASS = \"px-0.5\";\nexport const COMPOSER_PAPER_TOOLBAR_CLASS =\n \"aui-composer-action-wrapper relative flex items-center justify-between gap-1 pt-1\";\nexport const THREAD_SCROLL_TO_BOTTOM_CLASS =\n \"inline-flex items-center justify-center rounded-full border bg-background/80 p-1 shadow-sm backdrop-blur transition-opacity hover:bg-accent disabled:invisible\";\n\nconst ComposerStopIcon: FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"size-4\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n >\n <rect width=\"10\" height=\"10\" x=\"3\" y=\"3\" rx=\"2\" />\n </svg>\n);\n\nexport interface ComposerStopButtonProps {\n onStop: () => void;\n disabled?: boolean;\n title?: string;\n}\n\nexport interface ComposerSendButtonProps {\n action: Extract<ComposerAction, \"send\" | \"queue\">;\n onSend: () => void;\n disabled?: boolean;\n title?: string;\n}\n\n/** Stop control shown while a run is in flight and there is nothing queued. */\nexport const ComposerStopButton: FC<ComposerStopButtonProps> = ({\n onStop,\n disabled = false,\n title = \"Stop generation\",\n}) => (\n <button\n type=\"button\"\n onClick={onStop}\n disabled={disabled}\n title={title}\n className={cn(\n \"inline-flex size-8 shrink-0 items-center justify-center rounded-lg bg-foreground text-background shadow-sm transition-colors hover:bg-foreground/80\",\n disabled && \"cursor-not-allowed opacity-60\",\n )}\n >\n <ComposerStopIcon />\n </button>\n);\n/** Send control, which becomes a queue control while a run is in flight. */\nexport const ComposerSendButton: FC<ComposerSendButtonProps> = ({\n action,\n onSend,\n disabled = false,\n title,\n}) => (\n <button\n type=\"button\"\n onClick={onSend}\n disabled={disabled}\n title={title ?? (action === \"queue\" ? \"Queue message\" : \"Send\")}\n className={cn(\n \"inline-flex size-8 shrink-0 items-center justify-center rounded-full shadow-sm transition-colors\",\n disabled\n ? \"cursor-not-allowed bg-muted text-muted-foreground opacity-60\"\n : \"bg-foreground text-background hover:bg-foreground/80\",\n )}\n >\n {action === \"queue\" ? (\n <ListPlusIcon className=\"size-4\" />\n ) : (\n <ArrowUpIcon className=\"size-4\" />\n )}\n </button>\n);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"message-components.js","sources":["../../../src/chat-ui/messages/message-components.tsx"],"sourcesContent":["import {\n ActionBarPrimitive,\n AuiIf,\n BranchPickerPrimitive,\n MessagePrimitive,\n useAuiState,\n useMessagePartText,\n useSmooth,\n type ToolCallMessagePartComponent,\n} from \"@assistant-ui/react\";\nimport {\n DEEP_AGENT_COMPOSER_MARKDOWN_KEY,\n hideUnterminatedMarkdownLink,\n isGithubWakeMessage,\n isSubscriptionWakeMessage,\n isVoiceDelegationMessage,\n readDeepAgentComposerMarkdown,\n readRuntimeMessageFromSourceMessages,\n readSoleRuntimeMessageKind,\n} from \"@athenaintel/agent-runtime\";\nimport {\n ArrowUpIcon,\n CheckIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n CopyIcon,\n ListPlusIcon,\n PencilIcon,\n RefreshCwIcon,\n} from \"lucide-react\";\nimport {\n type FC,\n type ReactNode,\n useMemo,\n} from \"react\";\nimport { useAthenaRunLive } from \"../../chat/use-athena-run-live\";\nimport type { ComposerAction } from \"../composer/composer-action\";\nimport { cn } from \"../../lib/utils\";\nimport { ChatMessageBody } from \"../rich-text/chat-message-body\";\nimport { useMessageActionsReadOnly } from \"./message-actions-config\";\nimport { RuntimeMessageCard } from \"./runtime-message\";\nimport { hasVisibleContent } from \"./running-indicator\";\nimport { VoiceDelegationMessage } from \"./voice-delegation-card\";\nimport { WakeMarkerMessage } from \"./wake-marker\";\nimport { SmallIconButton } from \"./thread-chrome\";\n\nexport {\n IconButton,\n SmallIconButton,\n THREAD_HEADER_ACTIONS_CLASS,\n THREAD_HEADER_CLASS,\n THREAD_HEADER_ICON_CLASS,\n THREAD_HEADER_PILL_CLASS,\n THREAD_PANEL_CLASS,\n} from \"./thread-chrome\";\n\nexport const BranchPicker: FC = () => (\n <BranchPickerPrimitive.Root\n hideWhenSingleBranch\n className=\"inline-flex items-center gap-0.5 text-xs text-muted-foreground\"\n data-testid=\"chat-branch-picker\"\n >\n <BranchPickerPrimitive.Previous asChild>\n <SmallIconButton\n tooltip=\"Previous branch\"\n data-testid=\"chat-branch-previous\"\n >\n <ChevronLeftIcon className=\"size-3\" />\n </SmallIconButton>\n </BranchPickerPrimitive.Previous>\n <span className=\"font-medium\" data-testid=\"chat-branch-count\">\n <BranchPickerPrimitive.Number /> / <BranchPickerPrimitive.Count />\n </span>\n <BranchPickerPrimitive.Next asChild>\n <SmallIconButton tooltip=\"Next branch\" data-testid=\"chat-branch-next\">\n <ChevronRightIcon className=\"size-3\" />\n </SmallIconButton>\n </BranchPickerPrimitive.Next>\n </BranchPickerPrimitive.Root>\n);\n\nconst CopyActionButton: FC = () => (\n <ActionBarPrimitive.Copy asChild>\n <SmallIconButton tooltip=\"Copy\">\n <AuiIf condition={(state) => state.message.isCopied}>\n <CheckIcon className=\"size-3\" />\n </AuiIf>\n <AuiIf condition={(state) => !state.message.isCopied}>\n <CopyIcon className=\"size-3\" />\n </AuiIf>\n </SmallIconButton>\n </ActionBarPrimitive.Copy>\n);\n\n/**\n * The edit primitive does not check the runtime's edit capability itself —\n * clicking it on a runtime without one throws inside onPress, where no error\n * boundary can catch it — so the button must gate on the capability and, to\n * match the rewind semantics of `run/edit`, stay hidden while a run is live.\n * The read-only context covers threads the capability flags cannot: a host's\n * static `edit: true` still applies to fenced legacy conversations.\n */\nconst EditActionButton: FC = () => {\n const allowEdit = useAuiState((s) => s.thread.capabilities.edit);\n const isRunning = useAthenaRunLive();\n const readOnly = useMessageActionsReadOnly();\n if (!allowEdit || isRunning || readOnly) return null;\n return (\n <ActionBarPrimitive.Edit asChild>\n <SmallIconButton tooltip=\"Edit\" data-testid=\"chat-message-edit\">\n <PencilIcon className=\"size-3\" />\n </SmallIconButton>\n </ActionBarPrimitive.Edit>\n );\n};\n\n/** Regenerate dispatches `run/reload`, so it hides on read-only threads too. */\nconst RegenerateActionButton: FC = () => {\n const readOnly = useMessageActionsReadOnly();\n if (readOnly) return null;\n return (\n <ActionBarPrimitive.Reload asChild>\n <SmallIconButton tooltip=\"Regenerate\">\n <RefreshCwIcon className=\"size-3\" />\n </SmallIconButton>\n </ActionBarPrimitive.Reload>\n );\n};\n\n/**\n * Reveal-on-demand treatment for action bars: invisible and click-through\n * until the surrounding named group is hovered or a control inside receives\n * keyboard focus. The `focus-within` escape hatch is what keeps the hidden\n * controls reachable for keyboard users.\n */\nexport const ACTION_BAR_REVEAL_CLASS =\n \"pointer-events-none opacity-0 transition-opacity focus-within:pointer-events-auto focus-within:opacity-100\";\n\n/** Shared chat body; the reveal holds incomplete links until their URL is complete. */\nexport const MarkdownText: FC = () => {\n const revealed = useSmooth(useMessagePartText(), true);\n const isRunning = revealed.status.type === \"running\";\n const text = isRunning ? hideUnterminatedMarkdownLink(revealed.text) : revealed.text;\n return <ChatMessageBody text={text} isRunning={isRunning} />;\n};\n\n/**\n * A user message's text, shown as it was typed.\n *\n * A composer sends plain text exactly as typed, because the model reads it\n * literally, so the text alone no longer says which characters are\n * formatting: read as Markdown, `List<T>` loses `<T>`, `obj.__init__` shows a\n * bold \"init\" and `a\\\\b` one backslash. A composer send therefore carries the\n * draft it was serialized from (`metadata.composer_markdown`, only when the\n * two differ), and this renders that draft when it is a draft of the\n * message's own text (`readDeepAgentComposerMarkdown`), formatting and\n * mention chips included. Any other text — no draft, or one of other words —\n * renders with the typed reading (`ChatMessageBody typed`), which leaves raw\n * HTML and underscore emphasis as the characters they were typed with, so\n * `List<T>`, `obj.__init__` and `a\\b` show as typed there too.\n *\n * Copy copies the message text, which is the text as sent, and Edit opens it\n * in a plain-text box, so neither reads the draft.\n */\nexport const UserMessageText: FC<{ text: string }> = ({ text }) => {\n const composerMarkdown: unknown = useAuiState(\n (s) => s.message.metadata?.custom?.[DEEP_AGENT_COMPOSER_MARKDOWN_KEY],\n );\n const shown = useMemo(\n () =>\n readDeepAgentComposerMarkdown({\n metadata: { [DEEP_AGENT_COMPOSER_MARKDOWN_KEY]: composerMarkdown },\n text,\n }) ?? text,\n [composerMarkdown, text],\n );\n return <ChatMessageBody text={shown} typed />;\n};\n\nconst UserActionBar: FC = () => (\n <ActionBarPrimitive.Root\n autohide=\"never\"\n className={cn(\n \"flex min-h-6 items-center gap-0.5\",\n ACTION_BAR_REVEAL_CLASS,\n \"group-hover/user-message:pointer-events-auto group-hover/user-message:opacity-100\",\n )}\n >\n <CopyActionButton />\n <EditActionButton />\n </ActionBarPrimitive.Root>\n);\n\nexport const UserMessage: FC = () => {\n // A GitHub wake or a subscription's delivery is an event, not words the\n // user typed: it renders as the compact wake marker instead of a bubble\n // quoting the injected text.\n const isWake = useAuiState(\n (s) =>\n isGithubWakeMessage(s.message.metadata?.custom) ||\n isSubscriptionWakeMessage(s.message.metadata?.custom),\n );\n // A voice delegation's anchor is the ask the live voice model handed to the\n // thread, not words the user typed: it renders as the shared voice-task\n // card on every host instead of a second user bubble under the spoken turn.\n const isVoiceDelegation = useAuiState((s) =>\n isVoiceDelegationMessage({ messageId: s.message.id, custom: s.message.metadata?.custom }),\n );\n if (isWake) {\n return (\n <MessagePrimitive.Root data-message-role=\"user\" className=\"mb-3\">\n <WakeMarkerMessage />\n </MessagePrimitive.Root>\n );\n }\n if (isVoiceDelegation) {\n return (\n <MessagePrimitive.Root data-message-role=\"user\" className=\"mb-3\">\n <VoiceDelegationMessage />\n </MessagePrimitive.Root>\n );\n }\n return (\n <MessagePrimitive.Root\n data-message-role=\"user\"\n className=\"group/user-message mb-3 flex justify-end\"\n >\n <div className=\"flex min-w-0 max-w-[85%] flex-col items-end gap-1\">\n <div className=\"min-w-0 max-w-full rounded-2xl rounded-br-md bg-muted px-3.5 py-2 text-sm text-foreground\">\n <MessagePrimitive.Content components={{ Text: UserMessageText }} />\n </div>\n <div className=\"flex min-h-6 items-center gap-1\">\n <BranchPicker />\n <UserActionBar />\n </div>\n </div>\n </MessagePrimitive.Root>\n );\n};\n\nexport interface CreateAssistantMessageOptions {\n /** Host-registered card for tools without a dedicated UI. */\n toolFallback: ToolCallMessagePartComponent;\n /** Extra action-bar controls appended after copy/regenerate. */\n extraActions?: ReactNode;\n /**\n * Renders the message body. Hosts that group content into activity\n * timelines supply their own; the default renders markdown and tool cards.\n */\n content?: FC;\n /**\n * Inline affordance rendered inside a runtime-ending card (e.g. a Continue\n * button). Hosts without one leave it unset.\n */\n runtimeMessageAction?: ReactNode;\n}\n\n/**\n * Builds the assistant bubble. Call this once per host (memoized on its\n * inputs) so the returned component identity stays stable across renders.\n */\nexport function createAssistantMessage({\n toolFallback,\n extraActions,\n content: Content,\n runtimeMessageAction,\n}: CreateAssistantMessageOptions): FC {\n const AssistantActionBar: FC = () => {\n // The latest reply keeps its actions visible; older replies reveal them\n // on hover so a long transcript is not a wall of icon rows.\n const isLast = useAuiState((s) => s.message.isLast);\n return (\n <ActionBarPrimitive.Root\n autohide=\"never\"\n className={cn(\n \"mt-1 flex min-h-6 items-center gap-0.5\",\n !isLast && [\n ACTION_BAR_REVEAL_CLASS,\n \"group-hover/assistant-message:pointer-events-auto group-hover/assistant-message:opacity-100\",\n ],\n )}\n >\n <CopyActionButton />\n <RegenerateActionButton />\n {extraActions}\n </ActionBarPrimitive.Root>\n );\n };\n\n // A run-lifecycle marker or handoff summary is a system event, not\n // assistant speech. When it owns the whole row, render the status card in\n // place of the bubble; when it is chunked in with the assistant's own work\n // (or is a handoff whose text IS the closing summary), keep the body and\n // frame it with the card above.\n const RuntimeEnding: FC<{ placement: \"row\" | \"banner\" }> = ({ placement }) => {\n // Select the message (a stable store reference) and derive from it: the\n // reader allocates a fresh object per call, and `useAuiState` compares\n // snapshots with `Object.is`, so selecting the reader's result directly\n // would re-render on every store update and trip React's update-depth\n // guard.\n const message = useAuiState((s) => s.message);\n const runtime = useMemo(() => readRuntimeMessageFromSourceMessages(message), [message]);\n if (!runtime || runtime.silent) return null;\n if (placement === \"row\" && !runtime.isSoleSourceMessage) return null;\n if (placement === \"banner\" && runtime.isSoleSourceMessage && runtime.kind !== \"handoff\") {\n return null;\n }\n return <RuntimeMessageCard message={runtime} action={runtimeMessageAction} />;\n };\n\n const AssistantMessage: FC = () => {\n // An assistant row exists before its first token streams; showing\n // copy/regenerate against nothing looks broken, so wait for content.\n const showActions = useAuiState((state) =>\n hasVisibleContent(state.message.content),\n );\n // Primitive selector: the reader builds a fresh object per call.\n const soleRuntimeKind = useAuiState((s) => readSoleRuntimeMessageKind(s.message));\n const soleRuntimeSilent = useAuiState(\n (s) => readRuntimeMessageFromSourceMessages(s.message)?.silent === true,\n );\n\n if (soleRuntimeKind && soleRuntimeKind !== \"handoff\") {\n if (soleRuntimeSilent) return null;\n return (\n <MessagePrimitive.Root\n data-message-role=\"assistant\"\n className=\"group group/assistant-message mb-3\"\n >\n <div className=\"max-w-[95%]\">\n <RuntimeEnding placement=\"row\" />\n </div>\n </MessagePrimitive.Root>\n );\n }\n\n return (\n <MessagePrimitive.Root\n data-message-role=\"assistant\"\n className=\"group group/assistant-message mb-3\"\n >\n <div className=\"max-w-[95%]\">\n <RuntimeEnding placement=\"banner\" />\n {Content ? (\n <Content />\n ) : (\n <MessagePrimitive.Content\n components={{\n Text: MarkdownText,\n tools: { Fallback: toolFallback },\n }}\n />\n )}\n {showActions ? (\n <div className=\"flex min-h-6 items-center gap-1\">\n <BranchPicker />\n <AssistantActionBar />\n </div>\n ) : null}\n </div>\n </MessagePrimitive.Root>\n );\n };\n\n return AssistantMessage;\n}\n\n/** Composer chrome: the dock around the composer, its surface and its rows. */\nexport const COMPOSER_DOCK_CLASS = \"bg-background px-2.5 pb-2 pt-1.5\";\nexport const COMPOSER_SURFACE_CLASS =\n \"relative flex flex-col gap-1 rounded-xl border border-neutral-200 bg-white shadow-[0_2px_10px_rgba(54,45,33,0.08)]\";\nexport const COMPOSER_EDITOR_ROW_CLASS = \"px-2.5 pt-1\";\nexport const COMPOSER_TOOLBAR_CLASS =\n \"flex items-center gap-1 border-t border-neutral-100 px-2 py-1.5\";\n/**\n * Paper composer chrome (`ChatComposerDock appearance=\"paper\"`): a card-toned\n * surface with a larger radius, a focus-within ring, a drag-over tint keyed\n * off `data-drag-active`, and a bottom rail — the chrome the SDK's\n * `AthenaChat` thread renders. Hosts on the default chrome above are\n * untouched. The dock carries no padding of its own; the paper host's footer\n * spaces it. The radius and border colour also bind to the `--composer-radius`\n * / `--composer-border` theme variables in `styles.css`.\n */\nexport const COMPOSER_PAPER_DOCK_CLASS = \"aui-composer-dock\";\nexport const COMPOSER_PAPER_SURFACE_CLASS =\n \"aui-composer-root relative flex w-full flex-col rounded-[1.375rem] border border-border bg-card p-2.5 text-card-foreground shadow-[0_1px_2px_rgba(0,0,0,0.04)] outline-none transition-shadow duration-150 focus-within:shadow-[0_8px_24px_-14px_rgba(0,0,0,0.25)] focus-within:ring-2 focus-within:ring-ring/40 data-[drag-active=true]:bg-primary/5 data-[drag-active=true]:ring-2 data-[drag-active=true]:ring-primary/40\";\nexport const COMPOSER_PAPER_EDITOR_ROW_CLASS = \"px-0.5\";\nexport const COMPOSER_PAPER_TOOLBAR_CLASS =\n \"aui-composer-action-wrapper relative flex items-center justify-between gap-1 pt-1\";\nexport const THREAD_SCROLL_TO_BOTTOM_CLASS =\n \"inline-flex items-center justify-center rounded-full border bg-background/80 p-1 shadow-sm backdrop-blur transition-opacity hover:bg-accent disabled:invisible\";\n\nconst ComposerStopIcon: FC = () => (\n <svg\n aria-hidden=\"true\"\n className=\"size-4\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n >\n <rect width=\"10\" height=\"10\" x=\"3\" y=\"3\" rx=\"2\" />\n </svg>\n);\n\nexport interface ComposerStopButtonProps {\n onStop: () => void;\n disabled?: boolean;\n title?: string;\n}\n\nexport interface ComposerSendButtonProps {\n action: Extract<ComposerAction, \"send\" | \"queue\">;\n onSend: () => void;\n disabled?: boolean;\n title?: string;\n}\n\n/** Stop control shown while a run is in flight and there is nothing queued. */\nexport const ComposerStopButton: FC<ComposerStopButtonProps> = ({\n onStop,\n disabled = false,\n title = \"Stop generation\",\n}) => (\n <button\n type=\"button\"\n onClick={onStop}\n disabled={disabled}\n title={title}\n className={cn(\n \"inline-flex size-8 shrink-0 items-center justify-center rounded-lg bg-foreground text-background shadow-sm transition-colors hover:bg-foreground/80\",\n disabled && \"cursor-not-allowed opacity-60\",\n )}\n >\n <ComposerStopIcon />\n </button>\n);\n/** Send control, which becomes a queue control while a run is in flight. */\nexport const ComposerSendButton: FC<ComposerSendButtonProps> = ({\n action,\n onSend,\n disabled = false,\n title,\n}) => (\n <button\n type=\"button\"\n onClick={onSend}\n disabled={disabled}\n title={title ?? (action === \"queue\" ? \"Queue message\" : \"Send\")}\n className={cn(\n \"inline-flex size-8 shrink-0 items-center justify-center rounded-full shadow-sm transition-colors\",\n disabled\n ? \"cursor-not-allowed bg-muted text-muted-foreground opacity-60\"\n : \"bg-foreground text-background hover:bg-foreground/80\",\n )}\n >\n {action === \"queue\" ? (\n <ListPlusIcon className=\"size-4\" />\n ) : (\n <ArrowUpIcon className=\"size-4\" />\n )}\n </button>\n);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAwDO,MAAM,eAAmB,MAC9B;AAAA,EAAC,sBAAsB;AAAA,EAAtB;AAAA,IACC,sBAAoB;AAAA,IACpB,WAAU;AAAA,IACV,eAAY;AAAA,IAEZ,UAAA;AAAA,MAAA,oBAAC,sBAAsB,UAAtB,EAA+B,SAAO,MACrC,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,eAAY;AAAA,UAEZ,UAAA,oBAAC,iBAAA,EAAgB,WAAU,SAAA,CAAS;AAAA,QAAA;AAAA,MAAA,GAExC;AAAA,MACA,qBAAC,QAAA,EAAK,WAAU,eAAc,eAAY,qBACxC,UAAA;AAAA,QAAA,oBAAC,sBAAsB,QAAtB,EAA6B;AAAA,QAAE;AAAA,QAAG,oBAAC,sBAAsB,OAAtB,CAAA,CAA4B;AAAA,MAAA,GAClE;AAAA,0BACC,sBAAsB,MAAtB,EAA2B,SAAO,MACjC,UAAA,oBAAC,iBAAA,EAAgB,SAAQ,eAAc,eAAY,oBACjD,UAAA,oBAAC,oBAAiB,WAAU,UAAS,GACvC,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AACF;AAGF,MAAM,mBAAuB,MAC3B,oBAAC,mBAAmB,MAAnB,EAAwB,SAAO,MAC9B,UAAA,qBAAC,iBAAA,EAAgB,SAAQ,QACvB,UAAA;AAAA,EAAA,oBAAC,OAAA,EAAM,WAAW,CAAC,UAAU,MAAM,QAAQ,UACzC,UAAA,oBAAC,WAAA,EAAU,WAAU,SAAA,CAAS,GAChC;AAAA,EACA,oBAAC,OAAA,EAAM,WAAW,CAAC,UAAU,CAAC,MAAM,QAAQ,UAC1C,UAAA,oBAAC,UAAA,EAAS,WAAU,UAAS,EAAA,CAC/B;AAAA,EAAA,CACF,EAAA,CACF;AAWF,MAAM,mBAAuB,MAAM;AACjC,QAAM,YAAY,YAAY,CAAC,MAAM,EAAE,OAAO,aAAa,IAAI;AAC/D,QAAM,YAAY,iBAAA;AAClB,QAAM,WAAW,0BAAA;AACjB,MAAI,CAAC,aAAa,aAAa,SAAU,QAAO;AAChD,6BACG,mBAAmB,MAAnB,EAAwB,SAAO,MAC9B,UAAA,oBAAC,iBAAA,EAAgB,SAAQ,QAAO,eAAY,qBAC1C,UAAA,oBAAC,cAAW,WAAU,SAAA,CAAS,GACjC,GACF;AAEJ;AAGA,MAAM,yBAA6B,MAAM;AACvC,QAAM,WAAW,0BAAA;AACjB,MAAI,SAAU,QAAO;AACrB,SACE,oBAAC,mBAAmB,QAAnB,EAA0B,SAAO,MAChC,UAAA,oBAAC,iBAAA,EAAgB,SAAQ,cACvB,UAAA,oBAAC,eAAA,EAAc,WAAU,SAAA,CAAS,GACpC,GACF;AAEJ;AAQO,MAAM,0BACX;AAGK,MAAM,eAAmB,MAAM;AACpC,QAAM,WAAW,UAAU,mBAAA,GAAsB,IAAI;AACrD,QAAM,YAAY,SAAS,OAAO,SAAS;AAC3C,QAAM,OAAO,YAAY,6BAA6B,SAAS,IAAI,IAAI,SAAS;AAChF,SAAO,oBAAC,iBAAA,EAAgB,MAAY,UAAA,CAAsB;AAC5D;AAoBO,MAAM,kBAAwC,CAAC,EAAE,WAAW;AACjE,QAAM,mBAA4B;AAAA,IAChC,CAAC,MAAA;;AAAM,2BAAE,QAAQ,aAAV,mBAAoB,WAApB,mBAA6B;AAAA;AAAA,EAAgC;AAEtE,QAAM,QAAQ;AAAA,IACZ,MACE,8BAA8B;AAAA,MAC5B,UAAU,EAAE,CAAC,gCAAgC,GAAG,iBAAA;AAAA,MAChD;AAAA,IAAA,CACD,KAAK;AAAA,IACR,CAAC,kBAAkB,IAAI;AAAA,EAAA;AAEzB,SAAO,oBAAC,iBAAA,EAAgB,MAAM,OAAO,OAAK,MAAC;AAC7C;AAEA,MAAM,gBAAoB,MACxB;AAAA,EAAC,mBAAmB;AAAA,EAAnB;AAAA,IACC,UAAS;AAAA,IACT,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAGF,UAAA;AAAA,MAAA,oBAAC,kBAAA,EAAiB;AAAA,0BACjB,kBAAA,CAAA,CAAiB;AAAA,IAAA;AAAA,EAAA;AACpB;AAGK,MAAM,cAAkB,MAAM;AAInC,QAAM,SAAS;AAAA,IACb,CAAC,MAAA;;AACC,kCAAoB,OAAE,QAAQ,aAAV,mBAAoB,MAAM,KAC9C,2BAA0B,OAAE,QAAQ,aAAV,mBAAoB,MAAM;AAAA;AAAA,EAAA;AAKxD,QAAM,oBAAoB;AAAA,IAAY,CAAC,MAAA;;AACrC,sCAAyB,EAAE,WAAW,EAAE,QAAQ,IAAI,SAAQ,OAAE,QAAQ,aAAV,mBAAoB,QAAQ;AAAA;AAAA,EAAA;AAE1F,MAAI,QAAQ;AACV,WACE,oBAAC,iBAAiB,MAAjB,EAAsB,qBAAkB,QAAO,WAAU,QACxD,UAAA,oBAAC,mBAAA,CAAA,CAAkB,EAAA,CACrB;AAAA,EAEJ;AACA,MAAI,mBAAmB;AACrB,WACE,oBAAC,iBAAiB,MAAjB,EAAsB,qBAAkB,QAAO,WAAU,QACxD,UAAA,oBAAC,wBAAA,CAAA,CAAuB,EAAA,CAC1B;AAAA,EAEJ;AACA,SACE;AAAA,IAAC,iBAAiB;AAAA,IAAjB;AAAA,MACC,qBAAkB;AAAA,MAClB,WAAU;AAAA,MAEV,UAAA,qBAAC,OAAA,EAAI,WAAU,qDACb,UAAA;AAAA,QAAA,oBAAC,OAAA,EAAI,WAAU,6FACb,UAAA,oBAAC,iBAAiB,SAAjB,EAAyB,YAAY,EAAE,MAAM,gBAAA,EAAgB,CAAG,EAAA,CACnE;AAAA,QACA,qBAAC,OAAA,EAAI,WAAU,mCACb,UAAA;AAAA,UAAA,oBAAC,cAAA,EAAa;AAAA,8BACb,eAAA,CAAA,CAAc;AAAA,QAAA,EAAA,CACjB;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAuBO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT;AACF,GAAsC;AACpC,QAAM,qBAAyB,MAAM;AAGnC,UAAM,SAAS,YAAY,CAAC,MAAM,EAAE,QAAQ,MAAM;AAClD,WACE;AAAA,MAAC,mBAAmB;AAAA,MAAnB;AAAA,QACC,UAAS;AAAA,QACT,WAAW;AAAA,UACT;AAAA,UACA,CAAC,UAAU;AAAA,YACT;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAAA,QAGF,UAAA;AAAA,UAAA,oBAAC,kBAAA,EAAiB;AAAA,8BACjB,wBAAA,EAAuB;AAAA,UACvB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AAOA,QAAM,gBAAqD,CAAC,EAAE,gBAAgB;AAM5E,UAAM,UAAU,YAAY,CAAC,MAAM,EAAE,OAAO;AAC5C,UAAM,UAAU,QAAQ,MAAM,qCAAqC,OAAO,GAAG,CAAC,OAAO,CAAC;AACtF,QAAI,CAAC,WAAW,QAAQ,OAAQ,QAAO;AACvC,QAAI,cAAc,SAAS,CAAC,QAAQ,oBAAqB,QAAO;AAChE,QAAI,cAAc,YAAY,QAAQ,uBAAuB,QAAQ,SAAS,WAAW;AACvF,aAAO;AAAA,IACT;AACA,WAAO,oBAAC,oBAAA,EAAmB,SAAS,SAAS,QAAQ,sBAAsB;AAAA,EAC7E;AAEA,QAAM,mBAAuB,MAAM;AAGjC,UAAM,cAAc;AAAA,MAAY,CAAC,UAC/B,kBAAkB,MAAM,QAAQ,OAAO;AAAA,IAAA;AAGzC,UAAM,kBAAkB,YAAY,CAAC,MAAM,2BAA2B,EAAE,OAAO,CAAC;AAChF,UAAM,oBAAoB;AAAA,MACxB,CAAC,MAAA;;AAAM,2DAAqC,EAAE,OAAO,MAA9C,mBAAiD,YAAW;AAAA;AAAA,IAAA;AAGrE,QAAI,mBAAmB,oBAAoB,WAAW;AACpD,UAAI,kBAAmB,QAAO;AAC9B,aACE;AAAA,QAAC,iBAAiB;AAAA,QAAjB;AAAA,UACC,qBAAkB;AAAA,UAClB,WAAU;AAAA,UAEV,UAAA,oBAAC,SAAI,WAAU,eACb,8BAAC,eAAA,EAAc,WAAU,OAAM,EAAA,CACjC;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN;AAEA,WACE;AAAA,MAAC,iBAAiB;AAAA,MAAjB;AAAA,QACC,qBAAkB;AAAA,QAClB,WAAU;AAAA,QAEV,UAAA,qBAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,UAAA,oBAAC,eAAA,EAAc,WAAU,SAAA,CAAS;AAAA,UACjC,UACC,oBAAC,SAAA,CAAA,CAAQ,IAET;AAAA,YAAC,iBAAiB;AAAA,YAAjB;AAAA,cACC,YAAY;AAAA,gBACV,MAAM;AAAA,gBACN,OAAO,EAAE,UAAU,aAAA;AAAA,cAAa;AAAA,YAClC;AAAA,UAAA;AAAA,UAGH,cACC,qBAAC,OAAA,EAAI,WAAU,mCACb,UAAA;AAAA,YAAA,oBAAC,cAAA,EAAa;AAAA,gCACb,oBAAA,CAAA,CAAmB;AAAA,UAAA,EAAA,CACtB,IACE;AAAA,QAAA,EAAA,CACN;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AAEA,SAAO;AACT;AAGO,MAAM,sBAAsB;AAC5B,MAAM,yBACX;AACK,MAAM,4BAA4B;AAClC,MAAM,yBACX;AAUK,MAAM,4BAA4B;AAClC,MAAM,+BACX;AACK,MAAM,kCAAkC;AACxC,MAAM,+BACX;AACK,MAAM,gCACX;AAEF,MAAM,mBAAuB,MAC3B;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAY;AAAA,IACZ,WAAU;AAAA,IACV,SAAQ;AAAA,IACR,MAAK;AAAA,IAEL,UAAA,oBAAC,QAAA,EAAK,OAAM,MAAK,QAAO,MAAK,GAAE,KAAI,GAAE,KAAI,IAAG,IAAA,CAAI;AAAA,EAAA;AAClD;AAiBK,MAAM,qBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA,WAAW;AAAA,EACX,QAAQ;AACV,MACE;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA,YAAY;AAAA,IAAA;AAAA,IAGd,8BAAC,kBAAA,CAAA,CAAiB;AAAA,EAAA;AACpB;AAGK,MAAM,qBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AACF,MACE;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA,OAAO,UAAU,WAAW,UAAU,kBAAkB;AAAA,IACxD,WAAW;AAAA,MACT;AAAA,MACA,WACI,iEACA;AAAA,IAAA;AAAA,IAGL,UAAA,WAAW,UACV,oBAAC,cAAA,EAAa,WAAU,UAAS,IAEjC,oBAAC,aAAA,EAAY,WAAU,SAAA,CAAS;AAAA,EAAA;AAEpC;"}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const lucideReact = require("lucide-react");
5
- const runtimeMessages = require("../../packages/agent-runtime/src/runtime-messages.cjs");
5
+ const runtimeMessages = require("../../agent-runtime/src/runtime-messages.cjs");
6
6
  const cnfast = require("cnfast");
7
7
  const SEVERITY_CLASS = {
8
8
  info: "border-border bg-muted/40 text-muted-foreground",
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import { AlertTriangleIcon, OctagonXIcon, PauseIcon, SquareIcon } from "lucide-react";
3
- import { runtimeMessageMarkerText } from "../../packages/agent-runtime/src/runtime-messages.js";
3
+ import { runtimeMessageMarkerText } from "../../agent-runtime/src/runtime-messages.js";
4
4
  import { cn } from "cnfast";
5
5
  const SEVERITY_CLASS = {
6
6
  info: "border-border bg-muted/40 text-muted-foreground",
@@ -5,11 +5,11 @@ const react = require("@assistant-ui/react");
5
5
  const reactStatewire = require("@assistant-ui/react-statewire");
6
6
  const continuePill = require("./continue-pill.cjs");
7
7
  const runtimeMessage = require("./runtime-message.cjs");
8
- const messages = require("../../packages/agent-runtime/src/messages.cjs");
9
- const threadExtras = require("../../packages/agent-runtime/src/thread-extras.cjs");
10
- const threadStatus = require("../../packages/agent-runtime/src/thread-status.cjs");
11
- const errors = require("../../packages/agent-runtime/src/errors.cjs");
12
- const runtimeMessages = require("../../packages/agent-runtime/src/runtime-messages.cjs");
8
+ const messages = require("../../agent-runtime/src/messages.cjs");
9
+ const threadExtras = require("../../agent-runtime/src/thread-extras.cjs");
10
+ const threadStatus = require("../../agent-runtime/src/thread-status.cjs");
11
+ const errors = require("../../agent-runtime/src/errors.cjs");
12
+ const runtimeMessages = require("../../agent-runtime/src/runtime-messages.cjs");
13
13
  const cnfast = require("cnfast");
14
14
  function notifyContinue(onContinue, context) {
15
15
  try {
@@ -3,11 +3,11 @@ import { useAuiState } from "@assistant-ui/react";
3
3
  import { useStatewireRuns, useStatewireSendCommand } from "@assistant-ui/react-statewire";
4
4
  import { ContinuePill } from "./continue-pill.js";
5
5
  import { RuntimeMessageCard } from "./runtime-message.js";
6
- import { readRunMarkerFromSourceMessages, ATHENA_RUN_MARKER_CANCELLED, ATHENA_RUN_MARKER_FAILED } from "../../packages/agent-runtime/src/messages.js";
7
- import { hasStatewireThreadExtras } from "../../packages/agent-runtime/src/thread-extras.js";
8
- import { useDeepAgentThreadStatus } from "../../packages/agent-runtime/src/thread-status.js";
9
- import { readRetryableRunRefusal } from "../../packages/agent-runtime/src/errors.js";
10
- import { readRuntimeMessageFromSourceMessages } from "../../packages/agent-runtime/src/runtime-messages.js";
6
+ import { readRunMarkerFromSourceMessages, ATHENA_RUN_MARKER_CANCELLED, ATHENA_RUN_MARKER_FAILED } from "../../agent-runtime/src/messages.js";
7
+ import { hasStatewireThreadExtras } from "../../agent-runtime/src/thread-extras.js";
8
+ import { useDeepAgentThreadStatus } from "../../agent-runtime/src/thread-status.js";
9
+ import { readRetryableRunRefusal } from "../../agent-runtime/src/errors.js";
10
+ import { readRuntimeMessageFromSourceMessages } from "../../agent-runtime/src/runtime-messages.js";
11
11
  import { cn } from "cnfast";
12
12
  function notifyContinue(onContinue, context) {
13
13
  try {
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("@assistant-ui/react");
5
- const useDeepAgentEditSubmit = require("../../packages/agent-runtime/src/use-deep-agent-edit-submit.cjs");
5
+ const useDeepAgentEditSubmit = require("../../agent-runtime/src/use-deep-agent-edit-submit.cjs");
6
6
  const UserEditComposer = () => {
7
7
  const submit = useDeepAgentEditSubmit.useDeepAgentMessageEditSubmit();
8
8
  const isEmpty = react.useAuiState((s) => s.message.composer.isEmpty);
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { useAuiState, ComposerPrimitive } from "@assistant-ui/react";
3
- import { useDeepAgentMessageEditSubmit } from "../../packages/agent-runtime/src/use-deep-agent-edit-submit.js";
3
+ import { useDeepAgentMessageEditSubmit } from "../../agent-runtime/src/use-deep-agent-edit-submit.js";
4
4
  const UserEditComposer = () => {
5
5
  const submit = useDeepAgentMessageEditSubmit();
6
6
  const isEmpty = useAuiState((s) => s.message.composer.isEmpty);