@athenaintel/react 0.20.0 → 0.21.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 (347) hide show
  1. package/README.md +74 -0
  2. package/dist/assets/use-asset-embed.cjs +8 -0
  3. package/dist/assets/use-asset-embed.cjs.map +1 -1
  4. package/dist/assets/use-asset-embed.js +8 -0
  5. package/dist/assets/use-asset-embed.js.map +1 -1
  6. package/dist/chat/StatewireApprovalCard.cjs +22 -4
  7. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  8. package/dist/chat/StatewireApprovalCard.d.ts +14 -0
  9. package/dist/chat/StatewireApprovalCard.js +23 -5
  10. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  11. package/dist/chat/StatewireClientToolBridge.cjs +2 -1
  12. package/dist/chat/StatewireClientToolBridge.cjs.map +1 -1
  13. package/dist/chat/StatewireClientToolBridge.js +2 -1
  14. package/dist/chat/StatewireClientToolBridge.js.map +1 -1
  15. package/dist/chat/StatewireQueuedMessages.cjs +2 -1
  16. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  17. package/dist/chat/StatewireQueuedMessages.js +2 -1
  18. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  19. package/dist/chat/athena-citation-links.cjs +17 -1
  20. package/dist/chat/athena-citation-links.cjs.map +1 -1
  21. package/dist/chat/athena-citation-links.js +17 -1
  22. package/dist/chat/athena-citation-links.js.map +1 -1
  23. package/dist/chat/statewire-client-tools.cjs +2 -1
  24. package/dist/chat/statewire-client-tools.cjs.map +1 -1
  25. package/dist/chat/statewire-client-tools.js +2 -1
  26. package/dist/chat/statewire-client-tools.js.map +1 -1
  27. package/dist/chat/super-grouping/SuperGroupingCard.cjs +69 -187
  28. package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
  29. package/dist/chat/super-grouping/SuperGroupingCard.d.ts +10 -6
  30. package/dist/chat/super-grouping/SuperGroupingCard.js +73 -191
  31. package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
  32. package/dist/chat/super-grouping/ToolTimeline.cjs +131 -0
  33. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -0
  34. package/dist/chat/super-grouping/ToolTimeline.d.ts +16 -0
  35. package/dist/chat/super-grouping/ToolTimeline.js +131 -0
  36. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -0
  37. package/dist/chat/super-grouping/activity-timeline.cjs +14 -8
  38. package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
  39. package/dist/chat/super-grouping/activity-timeline.d.ts +3 -0
  40. package/dist/chat/super-grouping/activity-timeline.js +14 -8
  41. package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
  42. package/dist/chat/super-grouping/timeline-step.cjs +65 -0
  43. package/dist/chat/super-grouping/timeline-step.cjs.map +1 -0
  44. package/dist/chat/super-grouping/timeline-step.d.ts +17 -0
  45. package/dist/chat/super-grouping/timeline-step.js +65 -0
  46. package/dist/chat/super-grouping/timeline-step.js.map +1 -0
  47. package/dist/chat/tiptap-text.cjs +8 -8
  48. package/dist/chat/tiptap-text.cjs.map +1 -1
  49. package/dist/chat/use-athena-run-live.cjs +2 -1
  50. package/dist/chat/use-athena-run-live.cjs.map +1 -1
  51. package/dist/chat/use-athena-run-live.js +2 -1
  52. package/dist/chat/use-athena-run-live.js.map +1 -1
  53. package/dist/chat/use-statewire-approval-request.cjs +7 -2
  54. package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
  55. package/dist/chat/use-statewire-approval-request.d.ts +12 -2
  56. package/dist/chat/use-statewire-approval-request.js +8 -3
  57. package/dist/chat/use-statewire-approval-request.js.map +1 -1
  58. package/dist/chat-ui/composer/tiptap-composer.cjs +24 -65
  59. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  60. package/dist/chat-ui/composer/tiptap-composer.js +24 -65
  61. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  62. package/dist/chat-ui/index.cjs +2 -1
  63. package/dist/chat-ui/index.cjs.map +1 -1
  64. package/dist/chat-ui/index.js +2 -1
  65. package/dist/chat-ui/index.js.map +1 -1
  66. package/dist/chat-ui/mentions/mention-chip.cjs +49 -4
  67. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  68. package/dist/chat-ui/mentions/mention-chip.d.ts +11 -0
  69. package/dist/chat-ui/mentions/mention-chip.js +50 -5
  70. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  71. package/dist/chat-ui/mentions/mention-extension.cjs +18 -6
  72. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
  73. package/dist/chat-ui/mentions/mention-extension.d.ts +2 -0
  74. package/dist/chat-ui/mentions/mention-extension.js +18 -6
  75. package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
  76. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs +1 -1
  77. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs.map +1 -1
  78. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js +1 -1
  79. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js.map +1 -1
  80. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +9 -6
  81. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -1
  82. package/dist/chat-ui/mentions/suggestions/components/menu-item.d.ts +2 -2
  83. package/dist/chat-ui/mentions/suggestions/components/menu-item.js +10 -7
  84. package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -1
  85. package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs +2 -2
  86. package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs.map +1 -1
  87. package/dist/chat-ui/mentions/suggestions/components/menu-list.d.ts +2 -2
  88. package/dist/chat-ui/mentions/suggestions/components/menu-list.js +2 -2
  89. package/dist/chat-ui/mentions/suggestions/components/menu-list.js.map +1 -1
  90. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +2 -1
  91. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
  92. package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +3 -2
  93. package/dist/chat-ui/mentions/suggestions/data/api-client.js +2 -1
  94. package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -1
  95. package/dist/chat-ui/messages/message-components.cjs +6 -29
  96. package/dist/chat-ui/messages/message-components.cjs.map +1 -1
  97. package/dist/chat-ui/messages/message-components.d.ts +1 -13
  98. package/dist/chat-ui/messages/message-components.js +8 -31
  99. package/dist/chat-ui/messages/message-components.js.map +1 -1
  100. package/dist/chat-ui/messages/runtime-message.cjs +3 -2
  101. package/dist/chat-ui/messages/runtime-message.cjs.map +1 -1
  102. package/dist/chat-ui/messages/runtime-message.js +3 -2
  103. package/dist/chat-ui/messages/runtime-message.js.map +1 -1
  104. package/dist/chat-ui/messages/statewire-continue-run.cjs +23 -8
  105. package/dist/chat-ui/messages/statewire-continue-run.cjs.map +1 -1
  106. package/dist/chat-ui/messages/statewire-continue-run.d.ts +14 -4
  107. package/dist/chat-ui/messages/statewire-continue-run.js +23 -8
  108. package/dist/chat-ui/messages/statewire-continue-run.js.map +1 -1
  109. package/dist/chat-ui/messages/user-edit-composer.cjs +2 -1
  110. package/dist/chat-ui/messages/user-edit-composer.cjs.map +1 -1
  111. package/dist/chat-ui/messages/user-edit-composer.js +2 -1
  112. package/dist/chat-ui/messages/user-edit-composer.js.map +1 -1
  113. package/dist/chat-ui/rich-text/chat-message-body.cjs +76 -0
  114. package/dist/chat-ui/rich-text/chat-message-body.cjs.map +1 -0
  115. package/dist/chat-ui/rich-text/chat-message-body.d.ts +5 -0
  116. package/dist/chat-ui/rich-text/chat-message-body.js +76 -0
  117. package/dist/chat-ui/rich-text/chat-message-body.js.map +1 -0
  118. package/dist/chat-ui/rich-text/chat-node-views.cjs +51 -0
  119. package/dist/chat-ui/rich-text/chat-node-views.cjs.map +1 -0
  120. package/dist/chat-ui/rich-text/chat-node-views.d.ts +13 -0
  121. package/dist/chat-ui/rich-text/chat-node-views.js +51 -0
  122. package/dist/chat-ui/rich-text/chat-node-views.js.map +1 -0
  123. package/dist/chat-ui/rich-text/chat-text-schema.cjs +70 -0
  124. package/dist/chat-ui/rich-text/chat-text-schema.cjs.map +1 -0
  125. package/dist/chat-ui/rich-text/chat-text-schema.d.ts +7 -0
  126. package/dist/chat-ui/rich-text/chat-text-schema.js +70 -0
  127. package/dist/chat-ui/rich-text/chat-text-schema.js.map +1 -0
  128. package/dist/chat-ui/rich-text/dom-output-spec.cjs +83 -0
  129. package/dist/chat-ui/rich-text/dom-output-spec.cjs.map +1 -0
  130. package/dist/chat-ui/rich-text/dom-output-spec.d.ts +11 -0
  131. package/dist/chat-ui/rich-text/dom-output-spec.js +83 -0
  132. package/dist/chat-ui/rich-text/dom-output-spec.js.map +1 -0
  133. package/dist/chat-ui/statewire.cjs +2 -1
  134. package/dist/chat-ui/statewire.cjs.map +1 -1
  135. package/dist/chat-ui/statewire.js +2 -1
  136. package/dist/chat-ui/statewire.js.map +1 -1
  137. package/dist/chat-ui/thread/statewire-history-edge.cjs +2 -1
  138. package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
  139. package/dist/chat-ui/thread/statewire-history-edge.js +2 -1
  140. package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
  141. package/dist/index.cjs +2 -1
  142. package/dist/index.cjs.map +1 -1
  143. package/dist/index.js +2 -1
  144. package/dist/index.js.map +1 -1
  145. package/dist/node_modules/qrcode-generator/dist/qrcode.cjs +32 -0
  146. package/dist/node_modules/qrcode-generator/dist/qrcode.cjs.map +1 -0
  147. package/dist/node_modules/qrcode-generator/dist/qrcode.js +31 -0
  148. package/dist/node_modules/qrcode-generator/dist/qrcode.js.map +1 -0
  149. package/dist/node_modules/zod/v4/classic/errors.cjs +44 -0
  150. package/dist/node_modules/zod/v4/classic/errors.cjs.map +1 -0
  151. package/dist/node_modules/zod/v4/classic/errors.js +44 -0
  152. package/dist/node_modules/zod/v4/classic/errors.js.map +1 -0
  153. package/dist/node_modules/zod/v4/classic/iso.cjs +43 -0
  154. package/dist/node_modules/zod/v4/classic/iso.cjs.map +1 -0
  155. package/dist/node_modules/zod/v4/classic/iso.js +43 -0
  156. package/dist/node_modules/zod/v4/classic/iso.js.map +1 -0
  157. package/dist/node_modules/zod/v4/classic/parse.cjs +29 -0
  158. package/dist/node_modules/zod/v4/classic/parse.cjs.map +1 -0
  159. package/dist/node_modules/zod/v4/classic/parse.js +29 -0
  160. package/dist/node_modules/zod/v4/classic/parse.js.map +1 -0
  161. package/dist/node_modules/zod/v4/classic/schemas.cjs +871 -0
  162. package/dist/node_modules/zod/v4/classic/schemas.cjs.map +1 -0
  163. package/dist/node_modules/zod/v4/classic/schemas.js +871 -0
  164. package/dist/node_modules/zod/v4/classic/schemas.js.map +1 -0
  165. package/dist/node_modules/zod/v4/core/api.cjs +570 -0
  166. package/dist/node_modules/zod/v4/core/api.cjs.map +1 -0
  167. package/dist/node_modules/zod/v4/core/api.js +570 -0
  168. package/dist/node_modules/zod/v4/core/api.js.map +1 -0
  169. package/dist/node_modules/zod/v4/core/checks.cjs +411 -0
  170. package/dist/node_modules/zod/v4/core/checks.cjs.map +1 -0
  171. package/dist/node_modules/zod/v4/core/checks.js +411 -0
  172. package/dist/node_modules/zod/v4/core/checks.js.map +1 -0
  173. package/dist/node_modules/zod/v4/core/core.cjs +77 -0
  174. package/dist/node_modules/zod/v4/core/core.cjs.map +1 -0
  175. package/dist/node_modules/zod/v4/core/core.js +77 -0
  176. package/dist/node_modules/zod/v4/core/core.js.map +1 -0
  177. package/dist/node_modules/zod/v4/core/doc.cjs +38 -0
  178. package/dist/node_modules/zod/v4/core/doc.cjs.map +1 -0
  179. package/dist/node_modules/zod/v4/core/doc.js +38 -0
  180. package/dist/node_modules/zod/v4/core/doc.js.map +1 -0
  181. package/dist/node_modules/zod/v4/core/errors.cjs +76 -0
  182. package/dist/node_modules/zod/v4/core/errors.cjs.map +1 -0
  183. package/dist/node_modules/zod/v4/core/errors.js +76 -0
  184. package/dist/node_modules/zod/v4/core/errors.js.map +1 -0
  185. package/dist/node_modules/zod/v4/core/json-schema-processors.cjs +312 -0
  186. package/dist/node_modules/zod/v4/core/json-schema-processors.cjs.map +1 -0
  187. package/dist/node_modules/zod/v4/core/json-schema-processors.js +312 -0
  188. package/dist/node_modules/zod/v4/core/json-schema-processors.js.map +1 -0
  189. package/dist/node_modules/zod/v4/core/parse.cjs +96 -0
  190. package/dist/node_modules/zod/v4/core/parse.cjs.map +1 -0
  191. package/dist/node_modules/zod/v4/core/parse.js +96 -0
  192. package/dist/node_modules/zod/v4/core/parse.js.map +1 -0
  193. package/dist/node_modules/zod/v4/core/regexes.cjs +86 -0
  194. package/dist/node_modules/zod/v4/core/regexes.cjs.map +1 -0
  195. package/dist/node_modules/zod/v4/core/regexes.js +86 -0
  196. package/dist/node_modules/zod/v4/core/regexes.js.map +1 -0
  197. package/dist/node_modules/zod/v4/core/registries.cjs +52 -0
  198. package/dist/node_modules/zod/v4/core/registries.cjs.map +1 -0
  199. package/dist/node_modules/zod/v4/core/registries.js +52 -0
  200. package/dist/node_modules/zod/v4/core/registries.js.map +1 -0
  201. package/dist/node_modules/zod/v4/core/schemas.cjs +1412 -0
  202. package/dist/node_modules/zod/v4/core/schemas.cjs.map +1 -0
  203. package/dist/node_modules/zod/v4/core/schemas.js +1413 -0
  204. package/dist/node_modules/zod/v4/core/schemas.js.map +1 -0
  205. package/dist/node_modules/zod/v4/core/to-json-schema.cjs +370 -0
  206. package/dist/node_modules/zod/v4/core/to-json-schema.cjs.map +1 -0
  207. package/dist/node_modules/zod/v4/core/to-json-schema.js +370 -0
  208. package/dist/node_modules/zod/v4/core/to-json-schema.js.map +1 -0
  209. package/dist/node_modules/zod/v4/core/util.cjs +444 -0
  210. package/dist/node_modules/zod/v4/core/util.cjs.map +1 -0
  211. package/dist/node_modules/zod/v4/core/util.js +444 -0
  212. package/dist/node_modules/zod/v4/core/util.js.map +1 -0
  213. package/dist/node_modules/zod/v4/core/versions.cjs +9 -0
  214. package/dist/node_modules/zod/v4/core/versions.cjs.map +1 -0
  215. package/dist/node_modules/zod/v4/core/versions.js +9 -0
  216. package/dist/node_modules/zod/v4/core/versions.js.map +1 -0
  217. package/dist/packages/agent-runtime/src/client-tool-bridge.cjs +7 -1
  218. package/dist/packages/agent-runtime/src/client-tool-bridge.cjs.map +1 -1
  219. package/dist/packages/agent-runtime/src/client-tool-bridge.js +7 -1
  220. package/dist/packages/agent-runtime/src/client-tool-bridge.js.map +1 -1
  221. package/dist/packages/agent-runtime/src/conversation-list.cjs +4 -0
  222. package/dist/packages/agent-runtime/src/conversation-list.cjs.map +1 -1
  223. package/dist/packages/agent-runtime/src/conversation-list.js +4 -0
  224. package/dist/packages/agent-runtime/src/conversation-list.js.map +1 -1
  225. package/dist/packages/agent-runtime/src/edit-command.cjs.map +1 -1
  226. package/dist/packages/agent-runtime/src/edit-command.js.map +1 -1
  227. package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs +2 -0
  228. package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
  229. package/dist/packages/agent-runtime/src/generated/runconfig-contract.js +2 -0
  230. package/dist/packages/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
  231. package/dist/packages/agent-runtime/src/interrupts.cjs +31 -7
  232. package/dist/packages/agent-runtime/src/interrupts.cjs.map +1 -1
  233. package/dist/packages/agent-runtime/src/interrupts.js +31 -7
  234. package/dist/packages/agent-runtime/src/interrupts.js.map +1 -1
  235. package/dist/packages/agent-runtime/src/messages.cjs +35 -5
  236. package/dist/packages/agent-runtime/src/messages.cjs.map +1 -1
  237. package/dist/packages/agent-runtime/src/messages.js +35 -5
  238. package/dist/packages/agent-runtime/src/messages.js.map +1 -1
  239. package/dist/packages/agent-runtime/src/protocol.cjs +4 -6
  240. package/dist/packages/agent-runtime/src/protocol.cjs.map +1 -1
  241. package/dist/packages/agent-runtime/src/protocol.js +4 -6
  242. package/dist/packages/agent-runtime/src/protocol.js.map +1 -1
  243. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs +296 -14
  244. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
  245. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js +293 -11
  246. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -1
  247. package/dist/packages/agent-runtime/src/screen-point.cjs +68 -0
  248. package/dist/packages/agent-runtime/src/screen-point.cjs.map +1 -0
  249. package/dist/packages/agent-runtime/src/screen-point.js +68 -0
  250. package/dist/packages/agent-runtime/src/screen-point.js.map +1 -0
  251. package/dist/packages/agent-runtime/src/statewire-transport.cjs +6 -1
  252. package/dist/packages/agent-runtime/src/statewire-transport.cjs.map +1 -1
  253. package/dist/packages/agent-runtime/src/statewire-transport.js +6 -1
  254. package/dist/packages/agent-runtime/src/statewire-transport.js.map +1 -1
  255. package/dist/packages/agent-runtime/src/thread-handoff.cjs +85 -0
  256. package/dist/packages/agent-runtime/src/thread-handoff.cjs.map +1 -0
  257. package/dist/packages/agent-runtime/src/thread-handoff.js +85 -0
  258. package/dist/packages/agent-runtime/src/thread-handoff.js.map +1 -0
  259. package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs +1 -1
  260. package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs.map +1 -1
  261. package/dist/packages/agent-runtime/src/thread-snapshot-cache.js +1 -1
  262. package/dist/packages/agent-runtime/src/thread-snapshot-cache.js.map +1 -1
  263. package/dist/packages/agent-runtime/src/tool-metadata.cjs +0 -8
  264. package/dist/packages/agent-runtime/src/tool-metadata.cjs.map +1 -1
  265. package/dist/packages/agent-runtime/src/tool-metadata.js +0 -8
  266. package/dist/packages/agent-runtime/src/tool-metadata.js.map +1 -1
  267. package/dist/packages/agent-runtime/src/use-deep-agent-config.cjs +14 -0
  268. package/dist/packages/agent-runtime/src/use-deep-agent-config.cjs.map +1 -0
  269. package/dist/packages/agent-runtime/src/use-deep-agent-config.js +14 -0
  270. package/dist/packages/agent-runtime/src/use-deep-agent-config.js.map +1 -0
  271. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs +21 -5
  272. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -1
  273. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js +21 -5
  274. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -1
  275. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs +13 -3
  276. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
  277. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js +14 -4
  278. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
  279. package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs +35 -15
  280. package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
  281. package/dist/packages/agent-runtime/src/use-deep-agent-thread.js +35 -15
  282. package/dist/packages/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
  283. package/dist/packages/agent-runtime/src/voice-presentation.cjs.map +1 -1
  284. package/dist/packages/agent-runtime/src/voice-presentation.js.map +1 -1
  285. package/dist/packages/react/package.json.cjs +1 -1
  286. package/dist/packages/react/package.json.js +1 -1
  287. package/dist/provider/AthenaProvider.cjs +2 -1
  288. package/dist/provider/AthenaProvider.cjs.map +1 -1
  289. package/dist/provider/AthenaProvider.js +2 -1
  290. package/dist/provider/AthenaProvider.js.map +1 -1
  291. package/dist/runtime/statewire-lifecycle.cjs +2 -1
  292. package/dist/runtime/statewire-lifecycle.cjs.map +1 -1
  293. package/dist/runtime/statewire-lifecycle.js +2 -1
  294. package/dist/runtime/statewire-lifecycle.js.map +1 -1
  295. package/dist/runtime/useAthenaStatewireRuntime.cjs +2 -1
  296. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  297. package/dist/runtime/useAthenaStatewireRuntime.js +2 -1
  298. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  299. package/dist/styles.css +1 -1
  300. package/dist/threads/conversation-list-fetcher.cjs +4 -0
  301. package/dist/threads/conversation-list-fetcher.cjs.map +1 -1
  302. package/dist/threads/conversation-list-fetcher.js +4 -0
  303. package/dist/threads/conversation-list-fetcher.js.map +1 -1
  304. package/dist/threads/statewire-thread-list.cjs +2 -1
  305. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  306. package/dist/threads/statewire-thread-list.js +2 -1
  307. package/dist/threads/statewire-thread-list.js.map +1 -1
  308. package/dist/threads/use-rest-conversation-history.cjs +2 -1
  309. package/dist/threads/use-rest-conversation-history.cjs.map +1 -1
  310. package/dist/threads/use-rest-conversation-history.js +2 -1
  311. package/dist/threads/use-rest-conversation-history.js.map +1 -1
  312. package/dist/threads/use-statewire-conversation-history.cjs +2 -1
  313. package/dist/threads/use-statewire-conversation-history.cjs.map +1 -1
  314. package/dist/threads/use-statewire-conversation-history.d.ts +1 -0
  315. package/dist/threads/use-statewire-conversation-history.js +2 -1
  316. package/dist/threads/use-statewire-conversation-history.js.map +1 -1
  317. package/dist/tools/index.cjs +2 -1
  318. package/dist/tools/index.cjs.map +1 -1
  319. package/dist/tools/index.js +2 -1
  320. package/dist/tools/index.js.map +1 -1
  321. package/dist/tools/misc-tool-uis.cjs +2 -1
  322. package/dist/tools/misc-tool-uis.cjs.map +1 -1
  323. package/dist/tools/misc-tool-uis.js +2 -1
  324. package/dist/tools/misc-tool-uis.js.map +1 -1
  325. package/dist/tools/primitives.cjs +2 -1
  326. package/dist/tools/primitives.cjs.map +1 -1
  327. package/dist/tools/primitives.js +2 -1
  328. package/dist/tools/primitives.js.map +1 -1
  329. package/dist/tools/tool-fallback.cjs +2 -1
  330. package/dist/tools/tool-fallback.cjs.map +1 -1
  331. package/dist/tools/tool-fallback.js +2 -1
  332. package/dist/tools/tool-fallback.js.map +1 -1
  333. package/dist/tools/voice-update-tool-ui.cjs +2 -1
  334. package/dist/tools/voice-update-tool-ui.cjs.map +1 -1
  335. package/dist/tools/voice-update-tool-ui.js +2 -1
  336. package/dist/tools/voice-update-tool-ui.js.map +1 -1
  337. package/dist/voice/index.cjs +6 -0
  338. package/dist/voice/index.cjs.map +1 -0
  339. package/dist/voice/index.d.ts +2 -0
  340. package/dist/voice/index.js +6 -0
  341. package/dist/voice/index.js.map +1 -0
  342. package/dist/voice/use-athena-voice-session.cjs +315 -0
  343. package/dist/voice/use-athena-voice-session.cjs.map +1 -0
  344. package/dist/voice/use-athena-voice-session.d.ts +145 -0
  345. package/dist/voice/use-athena-voice-session.js +315 -0
  346. package/dist/voice/use-athena-voice-session.js.map +1 -0
  347. package/package.json +17 -3
@@ -8,6 +8,8 @@ const toolFallback = require("../../tools/tool-fallback.cjs");
8
8
  const activityTimeline = require("./activity-timeline.cjs");
9
9
  const CollapsibleGroup = require("./CollapsibleGroup.cjs");
10
10
  const groupingFunction = require("./grouping-function.cjs");
11
+ const ToolTimeline = require("./ToolTimeline.cjs");
12
+ const timelineStep = require("./timeline-step.cjs");
11
13
  const toolkitMap = require("./toolkit-map.cjs");
12
14
  const cnfast = require("cnfast");
13
15
  const DEFAULT_MAX_VISIBLE_STEPS = 3;
@@ -61,66 +63,6 @@ function useActivityExpansion({
61
63
  };
62
64
  return { expanded, toggleExpanded };
63
65
  }
64
- function PulsingDots() {
65
- return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-[3px]", "aria-hidden": "true", children: [
66
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-[5px] rounded-full bg-foreground/80 animate-[aui-sg-pulse-dot_1.4s_ease-in-out_infinite]" }),
67
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-[5px] rounded-full bg-foreground/80 animate-[aui-sg-pulse-dot_1.4s_ease-in-out_0.2s_infinite]" }),
68
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-[5px] rounded-full bg-foreground/80 animate-[aui-sg-pulse-dot_1.4s_ease-in-out_0.4s_infinite]" }),
69
- /* @__PURE__ */ jsxRuntime.jsx("style", { children: `
70
- @keyframes aui-sg-pulse-dot {
71
- 0%, 80%, 100% { opacity: 0.2; transform: scale(0.8); }
72
- 40% { opacity: 1; transform: scale(1); }
73
- }
74
- @keyframes aui-sg-shimmer-bar {
75
- 0% { transform: translateX(-100%); }
76
- 100% { transform: translateX(400%); }
77
- }
78
- ` })
79
- ] });
80
- }
81
- function StepIcon({ item }) {
82
- if (item.kind === "reasoning") {
83
- return /* @__PURE__ */ jsxRuntime.jsx(
84
- lucideReact.Brain,
85
- {
86
- "aria-hidden": "true",
87
- className: cnfast.cn(
88
- "mt-[1px] size-3.5 shrink-0",
89
- item.state === "running" ? "text-blue-500 motion-safe:animate-pulse" : "text-muted-foreground"
90
- )
91
- }
92
- );
93
- }
94
- switch (item.state) {
95
- case "complete":
96
- return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { "aria-hidden": "true", className: "mt-[1px] size-3.5 shrink-0 text-emerald-500" });
97
- case "rejected":
98
- return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { "aria-hidden": "true", className: "mt-[1px] size-3.5 shrink-0 text-muted-foreground" });
99
- case "cancelled":
100
- return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Circle, { "aria-hidden": "true", className: "mt-[1px] size-3.5 shrink-0 text-muted-foreground" });
101
- case "error":
102
- return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, { "aria-hidden": "true", className: "mt-[1px] size-3.5 shrink-0 text-destructive" });
103
- case "waiting":
104
- return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Circle, { "aria-hidden": "true", className: "mt-[1px] size-3.5 shrink-0 text-amber-500" });
105
- case "paused":
106
- return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pause, { "aria-hidden": "true", className: "mt-[1px] size-3.5 shrink-0 text-amber-600" });
107
- case "running":
108
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex size-3.5 shrink-0 items-center justify-center", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-1.5 rounded-full bg-blue-500 motion-safe:animate-pulse" }) });
109
- }
110
- }
111
- function SummaryIcon({ timeline }) {
112
- const tools = timeline.filter((item) => item.kind === "tool");
113
- if (tools.some((item) => item.state === "error" || item.state === "rejected")) {
114
- return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { "aria-hidden": "true", className: "size-3.5 shrink-0 text-muted-foreground" });
115
- }
116
- if (tools.some((item) => item.state === "cancelled")) {
117
- return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Circle, { "aria-hidden": "true", className: "size-3.5 shrink-0 text-muted-foreground" });
118
- }
119
- if (tools.some((item) => item.state === "paused")) {
120
- return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pause, { "aria-hidden": "true", className: "size-3.5 shrink-0 text-amber-600" });
121
- }
122
- return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { "aria-hidden": "true", className: "size-3.5 shrink-0 text-emerald-500" });
123
- }
124
66
  const SuperGroupingCard = react.memo(function SuperGroupingCard2({
125
67
  toolUIs,
126
68
  ToolFallback: ToolFallbackComponent = toolFallback.ToolFallback,
@@ -135,6 +77,7 @@ const SuperGroupingCard = react.memo(function SuperGroupingCard2({
135
77
  resolveToolDisplayName,
136
78
  expansionKey: expansionKeyProp,
137
79
  expandWhileWaiting = false,
80
+ mountDetails = false,
138
81
  maxVisibleSteps = DEFAULT_MAX_VISIBLE_STEPS,
139
82
  summaryDetails,
140
83
  renderHeaderActions,
@@ -167,7 +110,15 @@ const SuperGroupingCard = react.memo(function SuperGroupingCard2({
167
110
  const generatedId = react.useId().replace(/[^A-Za-z0-9_-]/g, "");
168
111
  const detailsPanelId = `aui-sg-details-${generatedId}`;
169
112
  const statusId = `aui-sg-status-${generatedId}`;
170
- const primaryDisclosureRef = react.useRef(null);
113
+ const { expanded: detailsExpanded, toggleExpanded: toggleDetails } = useActivityExpansion({
114
+ expansionKey: `${expansionKeyProp ?? messageId}:details`,
115
+ phase,
116
+ expandWhileWaiting
117
+ });
118
+ const steps = react.useMemo(
119
+ () => timeline.map((item, index) => timelineStep.toTimelineStep({ item, index, resolveToolDisplayName })),
120
+ [timeline, resolveToolDisplayName]
121
+ );
171
122
  const grouping = react.useMemo(
172
123
  () => activityTimeline.excludeFinalTextFromGroups(groupingFunction$1 ?? groupingFunction.createToolBasedGroupingFunction(getToolGroupKey)),
173
124
  [groupingFunction$1, getToolGroupKey]
@@ -175,7 +126,10 @@ const SuperGroupingCard = react.memo(function SuperGroupingCard2({
175
126
  const groupingContext = react.useMemo(() => ({ groupingFunction: grouping }), [grouping]);
176
127
  const components = react.useMemo(
177
128
  () => ({
178
- tools: { ...toolUIs ? { by_name: toolUIs } : {}, Fallback: ToolFallbackComponent },
129
+ tools: {
130
+ ...toolUIs ? { by_name: toolUIs } : {},
131
+ Fallback: ToolFallbackComponent
132
+ },
179
133
  Text: TextComponent,
180
134
  ...ReasoningComponent ? { Reasoning: ReasoningComponent } : {},
181
135
  Group: GroupComponent
@@ -185,150 +139,78 @@ const SuperGroupingCard = react.memo(function SuperGroupingCard2({
185
139
  const isActive = phase === "running" || phase === "waiting";
186
140
  const hasActivity = timeline.length > 0 || phase !== "complete";
187
141
  if (!hasActivity) return null;
188
- const detailsMounted = isActive || expanded;
189
- const visibleItems = timeline.slice(-Math.max(1, maxVisibleSteps));
190
- const hiddenCount = timeline.length - visibleItems.length;
191
- const latestStatus = phase === "waiting" ? "Waiting for your input" : phase === "error" ? "Something went wrong" : timeline.length > 0 ? activityTimeline.getActivityItemLabel(timeline[timeline.length - 1], resolveToolDisplayName) : "Planning approach";
192
- const summary = [activityTimeline.getActivitySummary(timeline), ...summaryDetails ?? []].join(" · ");
193
- const headerActions = renderHeaderActions == null ? void 0 : renderHeaderActions({ phase, messageContent });
194
- const runningMeta = isActive ? renderRunningMeta == null ? void 0 : renderRunningMeta({ phase }) : null;
195
- const hideDetails = () => {
196
- toggleExpanded();
197
- queueMicrotask(() => {
198
- var _a;
199
- return (_a = primaryDisclosureRef.current) == null ? void 0 : _a.focus();
200
- });
201
- };
142
+ const detailsMounted = isActive || mountDetails || expanded && detailsExpanded;
143
+ const activeSteps = steps.filter((step) => step.state === "running");
144
+ const currentStep = activeSteps.at(-1);
145
+ const latestStatus = phase === "waiting" ? "Waiting for you" : phase === "error" ? (messageStatus == null ? void 0 : messageStatus.type) === "incomplete" && messageStatus.reason === "cancelled" ? "Run stopped" : "Something went wrong" : phase === "running" ? currentStep ? [
146
+ currentStep.verb,
147
+ currentStep.chip,
148
+ activeSteps.length > 1 ? `${activeSteps.length} in progress` : null
149
+ ].filter(Boolean).join(" · ") : steps.length > 0 ? "Preparing response" : "Thinking" : activityTimeline.getActivitySummary(timeline);
150
+ const label = [latestStatus, ...isActive ? [] : summaryDetails ?? []].join(" · ");
202
151
  return /* @__PURE__ */ jsxRuntime.jsxs(
203
152
  "section",
204
153
  {
205
154
  "data-slot": "super-grouping-card",
206
155
  "data-phase": phase,
207
156
  "data-tool-count": toolCount,
208
- className: cnfast.cn(
209
- "my-3 min-w-0 overflow-hidden rounded-2xl border transition-colors duration-200",
210
- phase === "error" ? "border-destructive/30 bg-destructive/5" : phase === "waiting" ? "border-amber-200 bg-amber-50/40 dark:border-amber-500/30 dark:bg-amber-500/10" : "border-border/60 bg-muted/10",
211
- className,
212
- classNames == null ? void 0 : classNames.root
213
- ),
157
+ className: cnfast.cn("my-3 min-w-0", className, classNames == null ? void 0 : classNames.root),
214
158
  "aria-busy": phase === "running" ? "true" : "false",
215
159
  "aria-describedby": statusId,
216
160
  children: [
217
- phase === "complete" ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full items-center", children: [
218
- /* @__PURE__ */ jsxRuntime.jsxs(
219
- "button",
220
- {
221
- ref: primaryDisclosureRef,
222
- type: "button",
223
- onClick: toggleExpanded,
224
- "aria-expanded": expanded,
225
- "aria-controls": detailsPanelId,
226
- className: "flex min-w-0 flex-1 items-center gap-2 px-4 py-3 text-left transition-colors hover:bg-muted/30 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",
227
- children: [
228
- /* @__PURE__ */ jsxRuntime.jsx(SummaryIcon, { timeline }),
229
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 flex-1 truncate text-[12px] text-muted-foreground", children: summary })
230
- ]
231
- }
232
- ),
233
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-1 pr-3 pl-1", children: [
234
- headerActions,
235
- /* @__PURE__ */ jsxRuntime.jsx(
236
- "button",
237
- {
238
- type: "button",
239
- onClick: toggleExpanded,
240
- "aria-label": expanded ? "Hide run details" : "Show run details",
241
- "aria-expanded": expanded,
242
- "aria-controls": detailsPanelId,
243
- className: "flex items-center justify-center rounded-md p-1 text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground",
244
- children: expanded ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "size-3.5" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "size-3.5" })
245
- }
246
- )
247
- ] })
248
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
249
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center justify-between gap-2 px-4 pt-4 pb-2", children: [
250
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
251
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "truncate text-[13px] font-semibold text-foreground", children: phase === "error" ? "Something went wrong" : phase === "waiting" ? "Waiting for you" : "Athena is working" }),
252
- phase === "running" ? /* @__PURE__ */ jsxRuntime.jsx(PulsingDots, {}) : null
253
- ] }),
254
- headerActions ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex shrink-0 items-center gap-1", children: headerActions }) : null
255
- ] }),
256
- runningMeta ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 pb-1", children: runningMeta }) : null,
257
- phase === "running" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 pb-1", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-[2px] w-full overflow-hidden rounded-full bg-muted/40", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-full w-1/3 rounded-full bg-gradient-to-r from-blue-400 to-indigo-400 animate-[aui-sg-shimmer-bar_1.5s_ease-in-out_infinite] motion-reduce:animate-none" }) }) }) : null,
258
- visibleItems.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("ul", { className: "space-y-1 px-4 pt-1.5 pb-1", "aria-label": "Work status updates", children: [
259
- hiddenCount > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "pl-[22px] text-[11px] text-muted-foreground/70", children: [
260
- hiddenCount,
261
- " earlier ",
262
- hiddenCount === 1 ? "step" : "steps"
263
- ] }) : null,
264
- visibleItems.map((item, index) => /* @__PURE__ */ jsxRuntime.jsxs(
265
- "li",
266
- {
267
- className: "flex min-w-0 items-start gap-2 text-[12px]",
268
- children: [
269
- /* @__PURE__ */ jsxRuntime.jsx(StepIcon, { item }),
270
- item.kind === "reasoning" ? item.text.trim() ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "line-clamp-2 min-w-0 flex-1 italic leading-relaxed text-muted-foreground", children: item.text }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shimmer min-w-0 flex-1 leading-relaxed text-muted-foreground", children: "Thinking…" }) : /* @__PURE__ */ jsxRuntime.jsx(
271
- "span",
272
- {
273
- className: cnfast.cn(
274
- "min-w-0 flex-1 truncate leading-relaxed",
275
- item.state === "complete" ? "text-muted-foreground/70" : "text-foreground/80"
276
- ),
277
- children: activityTimeline.getActivityItemLabel(item, resolveToolDisplayName)
278
- }
279
- )
280
- ]
281
- },
282
- `${item.kind}-${hiddenCount + index}`
283
- ))
284
- ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 pt-1 pb-2", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shimmer text-[12px] text-muted-foreground", children: "Planning approach..." }) }),
285
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 pb-3 pt-0.5", children: /* @__PURE__ */ jsxRuntime.jsxs(
286
- "button",
287
- {
288
- ref: primaryDisclosureRef,
289
- type: "button",
290
- onClick: toggleExpanded,
291
- "aria-expanded": expanded,
292
- "aria-controls": detailsPanelId,
293
- className: "flex items-center gap-1 rounded px-1 py-0.5 text-[11px] font-medium text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
294
- children: [
295
- expanded ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "size-3" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "size-3" }),
296
- expanded ? "Hide details" : "Show details"
297
- ]
298
- }
299
- ) })
300
- ] }),
301
- /* @__PURE__ */ jsxRuntime.jsx("output", { id: statusId, "aria-live": "polite", "aria-atomic": "true", className: "sr-only", children: latestStatus }),
302
- detailsMounted ? /* @__PURE__ */ jsxRuntime.jsxs(
303
- "div",
161
+ /* @__PURE__ */ jsxRuntime.jsx(
162
+ ToolTimeline.ToolTimeline,
304
163
  {
305
- id: detailsPanelId,
306
- role: "region",
307
- "aria-label": "Run details",
308
- hidden: !expanded,
309
- className: cnfast.cn(
310
- "space-y-2 overflow-hidden border-t border-border/60 bg-background/80 px-4 py-4",
311
- classNames == null ? void 0 : classNames.details
312
- ),
313
- children: [
314
- /* @__PURE__ */ jsxRuntime.jsx(CollapsibleGroup.SuperGroupingProvider, { value: groupingContext, children: /* @__PURE__ */ jsxRuntime.jsx(react$1.MessagePrimitive.Unstable_PartsGrouped, { groupingFunction: grouping, components }) }),
164
+ steps,
165
+ open: expanded,
166
+ onOpenChange: toggleExpanded,
167
+ label,
168
+ phase,
169
+ maxVisibleSteps,
170
+ keepMounted: isActive || mountDetails,
171
+ actions: renderHeaderActions == null ? void 0 : renderHeaderActions({ phase, messageContent }),
172
+ meta: isActive ? renderRunningMeta == null ? void 0 : renderRunningMeta({ phase }) : null,
173
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 pl-5", children: [
315
174
  /* @__PURE__ */ jsxRuntime.jsxs(
316
175
  "button",
317
176
  {
318
177
  type: "button",
319
- onClick: hideDetails,
178
+ onClick: toggleDetails,
179
+ "aria-expanded": detailsExpanded,
320
180
  "aria-controls": detailsPanelId,
321
- "aria-expanded": "true",
322
- className: "mx-auto mt-3 flex items-center gap-1 rounded-md px-3 py-1.5 text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
181
+ className: "flex items-center gap-1.5 rounded py-1 text-xs text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
323
182
  children: [
324
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUp, { className: "size-3" }),
325
- "Hide details"
183
+ /* @__PURE__ */ jsxRuntime.jsx(
184
+ lucideReact.ChevronRight,
185
+ {
186
+ "aria-hidden": "true",
187
+ className: cnfast.cn(
188
+ "size-3 transition-transform motion-reduce:transition-none",
189
+ detailsExpanded && "rotate-90"
190
+ )
191
+ }
192
+ ),
193
+ detailsExpanded ? "Hide tool details" : "Show tool details"
326
194
  ]
327
195
  }
328
- )
329
- ]
196
+ ),
197
+ detailsMounted ? /* @__PURE__ */ jsxRuntime.jsx(
198
+ "section",
199
+ {
200
+ id: detailsPanelId,
201
+ "aria-label": "Run details",
202
+ hidden: !expanded || !detailsExpanded,
203
+ className: cnfast.cn(
204
+ "min-w-0 space-y-2 overflow-hidden border-l border-border/60 py-2 pl-3",
205
+ classNames == null ? void 0 : classNames.details
206
+ ),
207
+ children: /* @__PURE__ */ jsxRuntime.jsx(CollapsibleGroup.SuperGroupingProvider, { value: groupingContext, children: /* @__PURE__ */ jsxRuntime.jsx(react$1.MessagePrimitive.Unstable_PartsGrouped, { groupingFunction: grouping, components }) })
208
+ }
209
+ ) : null
210
+ ] })
330
211
  }
331
- ) : null
212
+ ),
213
+ /* @__PURE__ */ jsxRuntime.jsx("output", { id: statusId, "aria-live": "polite", "aria-atomic": "true", className: "sr-only", children: phase === "waiting" ? "Waiting for your input" : latestStatus })
332
214
  ]
333
215
  }
334
216
  );
@@ -1 +1 @@
1
- {"version":3,"file":"SuperGroupingCard.cjs","sources":["../../../src/chat/super-grouping/SuperGroupingCard.tsx"],"sourcesContent":["'use client';\n\nimport type {\n ReasoningMessagePartComponent,\n TextMessagePartComponent,\n ThreadAssistantMessagePart,\n ToolCallMessagePartComponent,\n ToolCallMessagePartProps,\n} from '@assistant-ui/react';\nimport { MessagePrimitive, useAuiState } from '@assistant-ui/react';\nimport {\n AlertCircle,\n Brain,\n Check,\n ChevronDown,\n ChevronRight,\n ChevronUp,\n Circle,\n Pause,\n X,\n} from 'lucide-react';\nimport {\n type ComponentType,\n memo,\n type ReactNode,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { cn } from '../../lib/utils';\nimport { ToolFallback } from '../../tools/tool-fallback';\nimport {\n type ActivityItem,\n type ActivityPhase,\n buildActivityTimeline,\n countActivityTools,\n excludeFinalTextFromGroups,\n getActivityItemLabel,\n getActivitySummary,\n getFinalText,\n resolveActivityPhase,\n} from './activity-timeline';\nimport { CollapsibleGroup, type CollapsibleGroupProps, SuperGroupingProvider } from './CollapsibleGroup';\nimport { createToolBasedGroupingFunction, type GroupingFunction } from './grouping-function';\nimport { defaultGetToolGroupKey, type GetToolGroupKey } from './toolkit-map';\n\nconst DEFAULT_MAX_VISIBLE_STEPS = 3;\nconst MAX_REMEMBERED_EXPANSIONS = 200;\nconst EMPTY_TIMELINE: ActivityItem[] = [];\nconst EMPTY_CONTENT: readonly ThreadAssistantMessagePart[] = [];\n\n// ─── Disclosure memory ─────────────────────────────────────────────────\n\n/**\n * Session-local memory of which cards the user opened, keyed by the host's\n * expansion key (the message id by default; the Chrome extension keys by\n * thread + position so a streaming message keeps its choice when it receives\n * its stable id). Bounded so a long session cannot grow it without limit.\n */\nconst rememberedExpansions = new Map<string, boolean>();\n\nfunction rememberExpansion(key: string, expanded: boolean): void {\n rememberedExpansions.delete(key);\n rememberedExpansions.set(key, expanded);\n while (rememberedExpansions.size > MAX_REMEMBERED_EXPANSIONS) {\n const oldestKey = rememberedExpansions.keys().next().value;\n if (oldestKey === undefined) break;\n rememberedExpansions.delete(oldestKey);\n }\n}\n\nexport function resetRememberedExpansionsForTests(): void {\n rememberedExpansions.clear();\n}\n\n/**\n * The details disclosure: remembered per expansion key, and — when the host\n * opts in — opened once when the turn starts waiting on the person, so the\n * approval controls inside the details are visible without a click.\n */\nexport function useActivityExpansion({\n expansionKey,\n phase,\n expandWhileWaiting = false,\n}: {\n expansionKey: string;\n phase: ActivityPhase;\n expandWhileWaiting?: boolean;\n}) {\n const [userExpanded, setUserExpanded] = useState<boolean | undefined>(() =>\n rememberedExpansions.get(expansionKey),\n );\n const [waitingAutoExpanded, setWaitingAutoExpanded] = useState(false);\n const previousRef = useRef({ expansionKey, phase });\n\n useEffect(() => {\n setUserExpanded(rememberedExpansions.get(expansionKey));\n setWaitingAutoExpanded(false);\n }, [expansionKey]);\n\n useEffect(() => {\n const previous = previousRef.current;\n if (expandWhileWaiting && previous.expansionKey === expansionKey) {\n if (previous.phase !== 'waiting' && phase === 'waiting') {\n setWaitingAutoExpanded(true);\n } else if (previous.phase === 'waiting' && phase !== 'waiting') {\n setWaitingAutoExpanded(false);\n }\n }\n previousRef.current = { expansionKey, phase };\n }, [expansionKey, phase, expandWhileWaiting]);\n\n const expanded =\n waitingAutoExpanded || (userExpanded ?? (expandWhileWaiting && phase === 'waiting'));\n const toggleExpanded = () => {\n const next = !expanded;\n setWaitingAutoExpanded(false);\n rememberExpansion(expansionKey, next);\n setUserExpanded(next);\n };\n\n return { expanded, toggleExpanded };\n}\n\n// ─── Pieces ────────────────────────────────────────────────────────────\n\nfunction PulsingDots() {\n return (\n <span className=\"inline-flex items-center gap-[3px]\" aria-hidden=\"true\">\n <span className=\"size-[5px] rounded-full bg-foreground/80 animate-[aui-sg-pulse-dot_1.4s_ease-in-out_infinite]\" />\n <span className=\"size-[5px] rounded-full bg-foreground/80 animate-[aui-sg-pulse-dot_1.4s_ease-in-out_0.2s_infinite]\" />\n <span className=\"size-[5px] rounded-full bg-foreground/80 animate-[aui-sg-pulse-dot_1.4s_ease-in-out_0.4s_infinite]\" />\n <style>{`\n @keyframes aui-sg-pulse-dot {\n 0%, 80%, 100% { opacity: 0.2; transform: scale(0.8); }\n 40% { opacity: 1; transform: scale(1); }\n }\n @keyframes aui-sg-shimmer-bar {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(400%); }\n }\n `}</style>\n </span>\n );\n}\n\nfunction StepIcon({ item }: { item: ActivityItem }) {\n if (item.kind === 'reasoning') {\n return (\n <Brain\n aria-hidden=\"true\"\n className={cn(\n 'mt-[1px] size-3.5 shrink-0',\n item.state === 'running' ? 'text-blue-500 motion-safe:animate-pulse' : 'text-muted-foreground',\n )}\n />\n );\n }\n switch (item.state) {\n case 'complete':\n return <Check aria-hidden=\"true\" className=\"mt-[1px] size-3.5 shrink-0 text-emerald-500\" />;\n case 'rejected':\n return <X aria-hidden=\"true\" className=\"mt-[1px] size-3.5 shrink-0 text-muted-foreground\" />;\n case 'cancelled':\n return <Circle aria-hidden=\"true\" className=\"mt-[1px] size-3.5 shrink-0 text-muted-foreground\" />;\n case 'error':\n return <AlertCircle aria-hidden=\"true\" className=\"mt-[1px] size-3.5 shrink-0 text-destructive\" />;\n case 'waiting':\n return <Circle aria-hidden=\"true\" className=\"mt-[1px] size-3.5 shrink-0 text-amber-500\" />;\n case 'paused':\n return <Pause aria-hidden=\"true\" className=\"mt-[1px] size-3.5 shrink-0 text-amber-600\" />;\n case 'running':\n return (\n <span className=\"flex size-3.5 shrink-0 items-center justify-center\" aria-hidden=\"true\">\n <span className=\"size-1.5 rounded-full bg-blue-500 motion-safe:animate-pulse\" />\n </span>\n );\n }\n}\n\nfunction SummaryIcon({ timeline }: { timeline: readonly ActivityItem[] }) {\n const tools = timeline.filter((item) => item.kind === 'tool');\n if (tools.some((item) => item.state === 'error' || item.state === 'rejected')) {\n return <X aria-hidden=\"true\" className=\"size-3.5 shrink-0 text-muted-foreground\" />;\n }\n if (tools.some((item) => item.state === 'cancelled')) {\n return <Circle aria-hidden=\"true\" className=\"size-3.5 shrink-0 text-muted-foreground\" />;\n }\n if (tools.some((item) => item.state === 'paused')) {\n return <Pause aria-hidden=\"true\" className=\"size-3.5 shrink-0 text-amber-600\" />;\n }\n return <Check aria-hidden=\"true\" className=\"size-3.5 shrink-0 text-emerald-500\" />;\n}\n\n// ─── Card ──────────────────────────────────────────────────────────────\n\nexport interface SuperGroupingCardProps {\n /** Tool UIs to render inside the details panel, by tool name (registered tool UIs still apply). */\n toolUIs?: Record<string, ToolCallMessagePartComponent>;\n /** Fallback for tools without a UI; the SDK's `ToolFallback` by default. */\n ToolFallback?: ComponentType<ToolCallMessagePartProps>;\n /** Text renderer for the details panel. */\n TextComponent: TextMessagePartComponent;\n /** Reasoning renderer for the details panel. */\n ReasoningComponent?: ReasoningMessagePartComponent;\n /** Per-toolkit block inside the details panel; the SDK's `CollapsibleGroup` by default. */\n GroupComponent?: ComponentType<CollapsibleGroupProps>;\n /** Toolkit lookup driving the per-toolkit sub-grouping; the SDK's static map by default. */\n getToolGroupKey?: GetToolGroupKey;\n /** A complete grouping function, when the host builds its own (overrides `getToolGroupKey`). */\n groupingFunction?: GroupingFunction;\n /** Tools whose unresolved call means the turn is waiting on the person (see `buildActivityTimeline`). */\n waitingTools?: ReadonlySet<string>;\n /** Tools whose result is a relayed application payload (see `buildActivityTimeline`). */\n passThroughTools?: ReadonlySet<string>;\n /**\n * Host assertion that the turn is waiting on the person. The SDK derives waiting\n * from `requires-action` and waiting tools itself; no in-repo host passes this.\n */\n waitingForInput?: boolean;\n /** Names tools the shared registry has no entry for (Olympus's tool catalog). */\n resolveToolDisplayName?: (toolName: string) => string | undefined;\n /** Key the disclosure choice is remembered under; the message id by default. */\n expansionKey?: string;\n /** Open the details once when the turn starts waiting on the person. */\n expandWhileWaiting?: boolean;\n /** How many latest steps the live list shows before folding the rest into \"N earlier steps\". */\n maxVisibleSteps?: number;\n /** Extra segments after the collapsed summary (\"1m 23s\", \"12.4k tokens\"), joined with \" · \". */\n summaryDetails?: readonly string[];\n /** Header controls beside the title (a stop button while running, a changes button once done). */\n renderHeaderActions?: (context: {\n phase: ActivityPhase;\n messageContent: readonly ThreadAssistantMessagePart[];\n }) => ReactNode;\n /** A line under the header while the turn is live (an elapsed timer). */\n renderRunningMeta?: (context: { phase: ActivityPhase }) => ReactNode;\n className?: string;\n classNames?: { root?: string; details?: string };\n}\n\n/**\n * The grouped (\"conversational\") view of an assistant turn: one \"Athena is\n * working\" card while the turn runs, listing its latest steps; a collapsed\n * \"Used N tools\" summary once it ends, with the full tool cards behind a\n * details disclosure. The answer itself renders below the card\n * (`SuperGroupingFinalText`). Shared by the SDK's `AthenaChat`, Olympus, and\n * the Chrome extension, which supply their own text/tool renderers and the\n * host-specific controls through the slots.\n *\n * The details panel stays mounted (visually hidden) while the turn is live so\n * the tool UIs inside run their effects — an asset-streaming card's follow\n * mode must not wait for \"Show details\".\n *\n * Selector discipline: raw reads only (`message.content`, `message.status`,\n * `message.id`); every derivation runs in `useMemo` — a selector that returned\n * a fresh array would tear through `useSyncExternalStore`.\n */\nexport const SuperGroupingCard = memo(function SuperGroupingCard({\n toolUIs,\n ToolFallback: ToolFallbackComponent = ToolFallback,\n TextComponent,\n ReasoningComponent,\n GroupComponent = CollapsibleGroup,\n getToolGroupKey = defaultGetToolGroupKey,\n groupingFunction,\n waitingTools,\n passThroughTools,\n waitingForInput = false,\n resolveToolDisplayName,\n expansionKey: expansionKeyProp,\n expandWhileWaiting = false,\n maxVisibleSteps = DEFAULT_MAX_VISIBLE_STEPS,\n summaryDetails,\n renderHeaderActions,\n renderRunningMeta,\n className,\n classNames,\n}: SuperGroupingCardProps) {\n const messageId = useAuiState((s) => s.message.id);\n const messageContent = useAuiState((s) =>\n s.message.role === 'assistant' ? s.message.content : EMPTY_CONTENT,\n );\n const messageStatus = useAuiState((s) => s.message.status);\n\n const timeline = useMemo(() => {\n const items = buildActivityTimeline(messageContent, messageStatus, {\n waitingTools,\n passThroughTools,\n });\n return items.length > 0 ? items : EMPTY_TIMELINE;\n }, [messageContent, messageStatus, waitingTools, passThroughTools]);\n const phase = useMemo(\n () => resolveActivityPhase(messageStatus, timeline, { waitingForInput }),\n [messageStatus, timeline, waitingForInput],\n );\n const toolCount = countActivityTools(timeline);\n\n const { expanded, toggleExpanded } = useActivityExpansion({\n expansionKey: expansionKeyProp ?? messageId,\n phase,\n expandWhileWaiting,\n });\n const generatedId = useId().replace(/[^A-Za-z0-9_-]/g, '');\n const detailsPanelId = `aui-sg-details-${generatedId}`;\n const statusId = `aui-sg-status-${generatedId}`;\n const primaryDisclosureRef = useRef<HTMLButtonElement>(null);\n\n const grouping = useMemo(\n () => excludeFinalTextFromGroups(groupingFunction ?? createToolBasedGroupingFunction(getToolGroupKey)),\n [groupingFunction, getToolGroupKey],\n );\n const groupingContext = useMemo(() => ({ groupingFunction: grouping }), [grouping]);\n const components = useMemo(\n () => ({\n tools: { ...(toolUIs ? { by_name: toolUIs } : {}), Fallback: ToolFallbackComponent },\n Text: TextComponent,\n ...(ReasoningComponent ? { Reasoning: ReasoningComponent } : {}),\n Group: GroupComponent,\n }),\n [toolUIs, ToolFallbackComponent, TextComponent, ReasoningComponent, GroupComponent],\n );\n\n const isActive = phase === 'running' || phase === 'waiting';\n const hasActivity = timeline.length > 0 || phase !== 'complete';\n if (!hasActivity) return null;\n\n const detailsMounted = isActive || expanded;\n const visibleItems = timeline.slice(-Math.max(1, maxVisibleSteps));\n const hiddenCount = timeline.length - visibleItems.length;\n const latestStatus =\n phase === 'waiting'\n ? 'Waiting for your input'\n : phase === 'error'\n ? 'Something went wrong'\n : timeline.length > 0\n ? getActivityItemLabel(timeline[timeline.length - 1], resolveToolDisplayName)\n : 'Planning approach';\n const summary = [getActivitySummary(timeline), ...(summaryDetails ?? [])].join(' · ');\n const headerActions = renderHeaderActions?.({ phase, messageContent });\n const runningMeta = isActive ? renderRunningMeta?.({ phase }) : null;\n\n const hideDetails = () => {\n toggleExpanded();\n queueMicrotask(() => primaryDisclosureRef.current?.focus());\n };\n\n return (\n <section\n data-slot=\"super-grouping-card\"\n data-phase={phase}\n data-tool-count={toolCount}\n className={cn(\n 'my-3 min-w-0 overflow-hidden rounded-2xl border transition-colors duration-200',\n phase === 'error'\n ? 'border-destructive/30 bg-destructive/5'\n : phase === 'waiting'\n ? 'border-amber-200 bg-amber-50/40 dark:border-amber-500/30 dark:bg-amber-500/10'\n : 'border-border/60 bg-muted/10',\n className,\n classNames?.root,\n )}\n aria-busy={phase === 'running' ? 'true' : 'false'}\n aria-describedby={statusId}\n >\n {phase === 'complete' ? (\n <div className=\"flex w-full items-center\">\n <button\n ref={primaryDisclosureRef}\n type=\"button\"\n onClick={toggleExpanded}\n aria-expanded={expanded}\n aria-controls={detailsPanelId}\n className=\"flex min-w-0 flex-1 items-center gap-2 px-4 py-3 text-left transition-colors hover:bg-muted/30 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring\"\n >\n <SummaryIcon timeline={timeline} />\n <span className=\"min-w-0 flex-1 truncate text-[12px] text-muted-foreground\">{summary}</span>\n </button>\n <div className=\"flex shrink-0 items-center gap-1 pr-3 pl-1\">\n {headerActions}\n <button\n type=\"button\"\n onClick={toggleExpanded}\n aria-label={expanded ? 'Hide run details' : 'Show run details'}\n aria-expanded={expanded}\n aria-controls={detailsPanelId}\n className=\"flex items-center justify-center rounded-md p-1 text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground\"\n >\n {expanded ? <ChevronDown className=\"size-3.5\" /> : <ChevronRight className=\"size-3.5\" />}\n </button>\n </div>\n </div>\n ) : (\n <>\n <div className=\"flex min-w-0 items-center justify-between gap-2 px-4 pt-4 pb-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <h3 className=\"truncate text-[13px] font-semibold text-foreground\">\n {phase === 'error'\n ? 'Something went wrong'\n : phase === 'waiting'\n ? 'Waiting for you'\n : 'Athena is working'}\n </h3>\n {phase === 'running' ? <PulsingDots /> : null}\n </div>\n {headerActions ? (\n <div className=\"flex shrink-0 items-center gap-1\">{headerActions}</div>\n ) : null}\n </div>\n\n {runningMeta ? <div className=\"px-4 pb-1\">{runningMeta}</div> : null}\n\n {phase === 'running' ? (\n <div className=\"px-4 pb-1\">\n <div className=\"h-[2px] w-full overflow-hidden rounded-full bg-muted/40\">\n <div className=\"h-full w-1/3 rounded-full bg-gradient-to-r from-blue-400 to-indigo-400 animate-[aui-sg-shimmer-bar_1.5s_ease-in-out_infinite] motion-reduce:animate-none\" />\n </div>\n </div>\n ) : null}\n\n {visibleItems.length > 0 ? (\n <ul className=\"space-y-1 px-4 pt-1.5 pb-1\" aria-label=\"Work status updates\">\n {hiddenCount > 0 ? (\n <li className=\"pl-[22px] text-[11px] text-muted-foreground/70\">\n {hiddenCount} earlier {hiddenCount === 1 ? 'step' : 'steps'}\n </li>\n ) : null}\n {visibleItems.map((item, index) => (\n <li\n key={`${item.kind}-${hiddenCount + index}`}\n className=\"flex min-w-0 items-start gap-2 text-[12px]\"\n >\n <StepIcon item={item} />\n {item.kind === 'reasoning' ? (\n item.text.trim() ? (\n <span className=\"line-clamp-2 min-w-0 flex-1 italic leading-relaxed text-muted-foreground\">\n {item.text}\n </span>\n ) : (\n <span className=\"shimmer min-w-0 flex-1 leading-relaxed text-muted-foreground\">\n Thinking…\n </span>\n )\n ) : (\n <span\n className={cn(\n 'min-w-0 flex-1 truncate leading-relaxed',\n item.state === 'complete' ? 'text-muted-foreground/70' : 'text-foreground/80',\n )}\n >\n {getActivityItemLabel(item, resolveToolDisplayName)}\n </span>\n )}\n </li>\n ))}\n </ul>\n ) : (\n <div className=\"px-4 pt-1 pb-2\">\n <span className=\"shimmer text-[12px] text-muted-foreground\">Planning approach...</span>\n </div>\n )}\n\n <div className=\"px-4 pb-3 pt-0.5\">\n <button\n ref={primaryDisclosureRef}\n type=\"button\"\n onClick={toggleExpanded}\n aria-expanded={expanded}\n aria-controls={detailsPanelId}\n className=\"flex items-center gap-1 rounded px-1 py-0.5 text-[11px] font-medium text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n {expanded ? <ChevronDown className=\"size-3\" /> : <ChevronRight className=\"size-3\" />}\n {expanded ? 'Hide details' : 'Show details'}\n </button>\n </div>\n </>\n )}\n\n <output id={statusId} aria-live=\"polite\" aria-atomic=\"true\" className=\"sr-only\">\n {latestStatus}\n </output>\n\n {detailsMounted ? (\n <div\n id={detailsPanelId}\n role=\"region\"\n aria-label=\"Run details\"\n hidden={!expanded}\n className={cn(\n 'space-y-2 overflow-hidden border-t border-border/60 bg-background/80 px-4 py-4',\n classNames?.details,\n )}\n >\n <SuperGroupingProvider value={groupingContext}>\n <MessagePrimitive.Unstable_PartsGrouped groupingFunction={grouping} components={components} />\n </SuperGroupingProvider>\n <button\n type=\"button\"\n onClick={hideDetails}\n aria-controls={detailsPanelId}\n aria-expanded=\"true\"\n className=\"mx-auto mt-3 flex items-center gap-1 rounded-md px-3 py-1.5 text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <ChevronUp className=\"size-3\" />\n Hide details\n </button>\n </div>\n ) : null}\n </section>\n );\n});\n\n/**\n * The turn's visible answer, rendered below the card: the text after the last\n * tool call (all of it when the turn called no tools), streaming while the\n * turn is live so the person reads the answer as it arrives.\n */\nexport const SuperGroupingFinalText = memo(function SuperGroupingFinalText({\n TextComponent,\n}: {\n TextComponent: TextMessagePartComponent;\n}) {\n const messageContent = useAuiState((s) =>\n s.message.role === 'assistant' ? s.message.content : EMPTY_CONTENT,\n );\n const statusType = useAuiState((s) => s.message.status?.type);\n const finalText = useMemo(() => getFinalText(messageContent), [messageContent]);\n\n if (!finalText) return null;\n return (\n <TextComponent\n type=\"text\"\n text={finalText}\n status={\n statusType === 'running' || statusType === 'requires-action'\n ? { type: 'running' }\n : { type: 'complete' }\n }\n />\n );\n});\n"],"names":["useState","useRef","useEffect","jsxs","jsx","Brain","cn","Check","X","Circle","AlertCircle","Pause","memo","SuperGroupingCard","ToolFallback","CollapsibleGroup","defaultGetToolGroupKey","groupingFunction","useAuiState","useMemo","buildActivityTimeline","resolveActivityPhase","countActivityTools","useId","excludeFinalTextFromGroups","createToolBasedGroupingFunction","getActivityItemLabel","getActivitySummary","ChevronDown","ChevronRight","Fragment","SuperGroupingProvider","MessagePrimitive","ChevronUp","SuperGroupingFinalText","getFinalText"],"mappings":"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"}
1
+ {"version":3,"file":"SuperGroupingCard.cjs","sources":["../../../src/chat/super-grouping/SuperGroupingCard.tsx"],"sourcesContent":["'use client';\n\nimport type {\n ReasoningMessagePartComponent,\n TextMessagePartComponent,\n ThreadAssistantMessagePart,\n ToolCallMessagePartComponent,\n ToolCallMessagePartProps,\n} from '@assistant-ui/react';\nimport { MessagePrimitive, useAuiState } from '@assistant-ui/react';\nimport { ChevronRight } from 'lucide-react';\nimport { type ComponentType, memo, type ReactNode, useEffect, useId, useMemo, useRef, useState } from 'react';\nimport { cn } from '../../lib/utils';\nimport { ToolFallback } from '../../tools/tool-fallback';\nimport {\n type ActivityItem,\n type ActivityPhase,\n buildActivityTimeline,\n countActivityTools,\n excludeFinalTextFromGroups,\n getActivitySummary,\n getFinalText,\n resolveActivityPhase,\n} from './activity-timeline';\nimport { CollapsibleGroup, type CollapsibleGroupProps, SuperGroupingProvider } from './CollapsibleGroup';\nimport { createToolBasedGroupingFunction, type GroupingFunction } from './grouping-function';\nimport { ToolTimeline } from './ToolTimeline';\nimport { toTimelineStep } from './timeline-step';\nimport { defaultGetToolGroupKey, type GetToolGroupKey } from './toolkit-map';\n\nconst DEFAULT_MAX_VISIBLE_STEPS = 3;\nconst MAX_REMEMBERED_EXPANSIONS = 200;\nconst EMPTY_TIMELINE: ActivityItem[] = [];\nconst EMPTY_CONTENT: readonly ThreadAssistantMessagePart[] = [];\n\n// ─── Disclosure memory ─────────────────────────────────────────────────\n\n/**\n * Session-local memory of which cards the user opened, keyed by the host's\n * expansion key (the message id by default; the Chrome extension keys by\n * thread + position so a streaming message keeps its choice when it receives\n * its stable id). Bounded so a long session cannot grow it without limit.\n */\nconst rememberedExpansions = new Map<string, boolean>();\n\nfunction rememberExpansion(key: string, expanded: boolean): void {\n rememberedExpansions.delete(key);\n rememberedExpansions.set(key, expanded);\n while (rememberedExpansions.size > MAX_REMEMBERED_EXPANSIONS) {\n const oldestKey = rememberedExpansions.keys().next().value;\n if (oldestKey === undefined) break;\n rememberedExpansions.delete(oldestKey);\n }\n}\n\nexport function resetRememberedExpansionsForTests(): void {\n rememberedExpansions.clear();\n}\n\n/**\n * The details disclosure: remembered per expansion key, and — when the host\n * opts in — opened once when the turn starts waiting on the person, so the\n * approval controls inside the details are visible without a click.\n */\nexport function useActivityExpansion({\n expansionKey,\n phase,\n expandWhileWaiting = false,\n}: {\n expansionKey: string;\n phase: ActivityPhase;\n expandWhileWaiting?: boolean;\n}) {\n const [userExpanded, setUserExpanded] = useState<boolean | undefined>(() =>\n rememberedExpansions.get(expansionKey),\n );\n const [waitingAutoExpanded, setWaitingAutoExpanded] = useState(false);\n const previousRef = useRef({ expansionKey, phase });\n\n useEffect(() => {\n setUserExpanded(rememberedExpansions.get(expansionKey));\n setWaitingAutoExpanded(false);\n }, [expansionKey]);\n\n useEffect(() => {\n const previous = previousRef.current;\n if (expandWhileWaiting && previous.expansionKey === expansionKey) {\n if (previous.phase !== 'waiting' && phase === 'waiting') {\n setWaitingAutoExpanded(true);\n } else if (previous.phase === 'waiting' && phase !== 'waiting') {\n setWaitingAutoExpanded(false);\n }\n }\n previousRef.current = { expansionKey, phase };\n }, [expansionKey, phase, expandWhileWaiting]);\n\n const expanded = waitingAutoExpanded || (userExpanded ?? (expandWhileWaiting && phase === 'waiting'));\n const toggleExpanded = () => {\n const next = !expanded;\n setWaitingAutoExpanded(false);\n rememberExpansion(expansionKey, next);\n setUserExpanded(next);\n };\n\n return { expanded, toggleExpanded };\n}\n\n// ─── Card ──────────────────────────────────────────────────────────────\n\nexport interface SuperGroupingCardProps {\n /** Tool UIs to render inside the details panel, by tool name (registered tool UIs still apply). */\n toolUIs?: Record<string, ToolCallMessagePartComponent>;\n /** Fallback for tools without a UI; the SDK's `ToolFallback` by default. */\n ToolFallback?: ComponentType<ToolCallMessagePartProps>;\n /** Text renderer for the details panel. */\n TextComponent: TextMessagePartComponent;\n /** Reasoning renderer for the details panel. */\n ReasoningComponent?: ReasoningMessagePartComponent;\n /** Per-toolkit block inside the details panel; the SDK's `CollapsibleGroup` by default. */\n GroupComponent?: ComponentType<CollapsibleGroupProps>;\n /** Toolkit lookup driving the per-toolkit sub-grouping; the SDK's static map by default. */\n getToolGroupKey?: GetToolGroupKey;\n /** A complete grouping function, when the host builds its own (overrides `getToolGroupKey`). */\n groupingFunction?: GroupingFunction;\n /** Tools whose unresolved call means the turn is waiting on the person (see `buildActivityTimeline`). */\n waitingTools?: ReadonlySet<string>;\n /** Tools whose result is a relayed application payload (see `buildActivityTimeline`). */\n passThroughTools?: ReadonlySet<string>;\n /**\n * Host assertion that the turn is waiting on the person. The SDK derives waiting\n * from `requires-action` and waiting tools itself; no in-repo host passes this.\n */\n waitingForInput?: boolean;\n /** Names tools the shared registry has no entry for (Olympus's tool catalog). */\n resolveToolDisplayName?: (toolName: string) => string | undefined;\n /** Key the disclosure choice is remembered under; the message id by default. */\n expansionKey?: string;\n /** Open the details once when the turn starts waiting on the person. */\n expandWhileWaiting?: boolean;\n /**\n * Keep the details panel mounted (hidden) while collapsed, so a host that\n * needs to find content inside it (a deep link into the run's steps) can.\n */\n mountDetails?: boolean;\n /** Latest steps shown when expanded; unresolved parallel calls always remain visible. */\n maxVisibleSteps?: number;\n /** Extra segments after the collapsed summary (\"1m 23s\", \"12.4k tokens\"), joined with \" · \". */\n summaryDetails?: readonly string[];\n /** Header controls beside the title (a stop button while running, a changes button once done). */\n renderHeaderActions?: (context: {\n phase: ActivityPhase;\n messageContent: readonly ThreadAssistantMessagePart[];\n }) => ReactNode;\n /** A line under the header while the turn is live (an elapsed timer). */\n renderRunningMeta?: (context: { phase: ActivityPhase }) => ReactNode;\n className?: string;\n classNames?: { root?: string; details?: string };\n}\n\n/**\n * The grouped (\"conversational\") view of an assistant turn: a compact current\n * action, an expandable tool timeline, and the original interactive tool UIs\n * behind a separate details disclosure. The answer itself renders below the card\n * (`SuperGroupingFinalText`). Shared by the SDK's `AthenaChat`, Olympus, and\n * the Chrome extension, which supply their own text/tool renderers and the\n * host-specific controls through the slots.\n *\n * The details panel stays mounted (visually hidden) while the turn is live so\n * the tool UIs inside run their effects — an asset-streaming card's follow\n * mode must not wait for \"Show details\".\n *\n * Selector discipline: raw reads only (`message.content`, `message.status`,\n * `message.id`); every derivation runs in `useMemo` — a selector that returned\n * a fresh array would tear through `useSyncExternalStore`.\n */\nexport const SuperGroupingCard = memo(function SuperGroupingCard({\n toolUIs,\n ToolFallback: ToolFallbackComponent = ToolFallback,\n TextComponent,\n ReasoningComponent,\n GroupComponent = CollapsibleGroup,\n getToolGroupKey = defaultGetToolGroupKey,\n groupingFunction,\n waitingTools,\n passThroughTools,\n waitingForInput = false,\n resolveToolDisplayName,\n expansionKey: expansionKeyProp,\n expandWhileWaiting = false,\n mountDetails = false,\n maxVisibleSteps = DEFAULT_MAX_VISIBLE_STEPS,\n summaryDetails,\n renderHeaderActions,\n renderRunningMeta,\n className,\n classNames,\n}: SuperGroupingCardProps) {\n const messageId = useAuiState((s) => s.message.id);\n const messageContent = useAuiState((s) =>\n s.message.role === 'assistant' ? s.message.content : EMPTY_CONTENT,\n );\n const messageStatus = useAuiState((s) => s.message.status);\n\n const timeline = useMemo(() => {\n const items = buildActivityTimeline(messageContent, messageStatus, {\n waitingTools,\n passThroughTools,\n });\n return items.length > 0 ? items : EMPTY_TIMELINE;\n }, [messageContent, messageStatus, waitingTools, passThroughTools]);\n const phase = useMemo(\n () => resolveActivityPhase(messageStatus, timeline, { waitingForInput }),\n [messageStatus, timeline, waitingForInput],\n );\n const toolCount = countActivityTools(timeline);\n\n const { expanded, toggleExpanded } = useActivityExpansion({\n expansionKey: expansionKeyProp ?? messageId,\n phase,\n expandWhileWaiting,\n });\n const generatedId = useId().replace(/[^A-Za-z0-9_-]/g, '');\n const detailsPanelId = `aui-sg-details-${generatedId}`;\n const statusId = `aui-sg-status-${generatedId}`;\n const { expanded: detailsExpanded, toggleExpanded: toggleDetails } = useActivityExpansion({\n expansionKey: `${expansionKeyProp ?? messageId}:details`,\n phase,\n expandWhileWaiting,\n });\n const steps = useMemo(\n () => timeline.map((item, index) => toTimelineStep({ item, index, resolveToolDisplayName })),\n [timeline, resolveToolDisplayName],\n );\n\n const grouping = useMemo(\n () => excludeFinalTextFromGroups(groupingFunction ?? createToolBasedGroupingFunction(getToolGroupKey)),\n [groupingFunction, getToolGroupKey],\n );\n const groupingContext = useMemo(() => ({ groupingFunction: grouping }), [grouping]);\n const components = useMemo(\n () => ({\n tools: {\n ...(toolUIs ? { by_name: toolUIs } : {}),\n Fallback: ToolFallbackComponent,\n },\n Text: TextComponent,\n ...(ReasoningComponent ? { Reasoning: ReasoningComponent } : {}),\n Group: GroupComponent,\n }),\n [toolUIs, ToolFallbackComponent, TextComponent, ReasoningComponent, GroupComponent],\n );\n\n const isActive = phase === 'running' || phase === 'waiting';\n const hasActivity = timeline.length > 0 || phase !== 'complete';\n if (!hasActivity) return null;\n\n // Tool UIs perform live subscriptions and asset-follow effects. Collapsing\n // either disclosure must only hide them while active or targeted by a deep link.\n const detailsMounted = isActive || mountDetails || (expanded && detailsExpanded);\n const activeSteps = steps.filter((step) => step.state === 'running');\n const currentStep = activeSteps.at(-1);\n const latestStatus =\n phase === 'waiting'\n ? 'Waiting for you'\n : phase === 'error'\n ? messageStatus?.type === 'incomplete' && messageStatus.reason === 'cancelled'\n ? 'Run stopped'\n : 'Something went wrong'\n : phase === 'running'\n ? currentStep\n ? [\n currentStep.verb,\n currentStep.chip,\n activeSteps.length > 1 ? `${activeSteps.length} in progress` : null,\n ]\n .filter(Boolean)\n .join(' · ')\n : steps.length > 0\n ? 'Preparing response'\n : 'Thinking'\n : getActivitySummary(timeline);\n const label = [latestStatus, ...(isActive ? [] : (summaryDetails ?? []))].join(' · ');\n\n return (\n <section\n data-slot=\"super-grouping-card\"\n data-phase={phase}\n data-tool-count={toolCount}\n className={cn('my-3 min-w-0', className, classNames?.root)}\n aria-busy={phase === 'running' ? 'true' : 'false'}\n aria-describedby={statusId}\n >\n <ToolTimeline\n steps={steps}\n open={expanded}\n onOpenChange={toggleExpanded}\n label={label}\n phase={phase}\n maxVisibleSteps={maxVisibleSteps}\n keepMounted={isActive || mountDetails}\n actions={renderHeaderActions?.({ phase, messageContent })}\n meta={isActive ? renderRunningMeta?.({ phase }) : null}\n >\n <div className=\"min-w-0 pl-5\">\n <button\n type=\"button\"\n onClick={toggleDetails}\n aria-expanded={detailsExpanded}\n aria-controls={detailsPanelId}\n className=\"flex items-center gap-1.5 rounded py-1 text-xs text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <ChevronRight\n aria-hidden=\"true\"\n className={cn(\n 'size-3 transition-transform motion-reduce:transition-none',\n detailsExpanded && 'rotate-90',\n )}\n />\n {detailsExpanded ? 'Hide tool details' : 'Show tool details'}\n </button>\n {detailsMounted ? (\n <section\n id={detailsPanelId}\n aria-label=\"Run details\"\n hidden={!expanded || !detailsExpanded}\n className={cn(\n 'min-w-0 space-y-2 overflow-hidden border-l border-border/60 py-2 pl-3',\n classNames?.details,\n )}\n >\n <SuperGroupingProvider value={groupingContext}>\n <MessagePrimitive.Unstable_PartsGrouped groupingFunction={grouping} components={components} />\n </SuperGroupingProvider>\n </section>\n ) : null}\n </div>\n </ToolTimeline>\n <output id={statusId} aria-live=\"polite\" aria-atomic=\"true\" className=\"sr-only\">\n {phase === 'waiting' ? 'Waiting for your input' : latestStatus}\n </output>\n </section>\n );\n});\n\n/**\n * The turn's visible answer, rendered below the card: the text after the last\n * tool call (all of it when the turn called no tools), streaming while the\n * turn is live so the person reads the answer as it arrives.\n */\nexport const SuperGroupingFinalText = memo(function SuperGroupingFinalText({\n TextComponent,\n}: {\n TextComponent: TextMessagePartComponent;\n}) {\n const messageContent = useAuiState((s) =>\n s.message.role === 'assistant' ? s.message.content : EMPTY_CONTENT,\n );\n const statusType = useAuiState((s) => s.message.status?.type);\n const finalText = useMemo(() => getFinalText(messageContent), [messageContent]);\n\n if (!finalText) return null;\n return (\n <TextComponent\n type=\"text\"\n text={finalText}\n status={\n statusType === 'running' || statusType === 'requires-action'\n ? { type: 'running' }\n : { type: 'complete' }\n }\n />\n );\n});\n"],"names":["useState","useRef","useEffect","memo","SuperGroupingCard","ToolFallback","CollapsibleGroup","defaultGetToolGroupKey","groupingFunction","useAuiState","useMemo","buildActivityTimeline","resolveActivityPhase","countActivityTools","useId","toTimelineStep","excludeFinalTextFromGroups","createToolBasedGroupingFunction","getActivitySummary","jsxs","cn","jsx","ToolTimeline","ChevronRight","SuperGroupingProvider","MessagePrimitive","SuperGroupingFinalText","getFinalText"],"mappings":"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"}
@@ -48,7 +48,12 @@ export interface SuperGroupingCardProps {
48
48
  expansionKey?: string;
49
49
  /** Open the details once when the turn starts waiting on the person. */
50
50
  expandWhileWaiting?: boolean;
51
- /** How many latest steps the live list shows before folding the rest into "N earlier steps". */
51
+ /**
52
+ * Keep the details panel mounted (hidden) while collapsed, so a host that
53
+ * needs to find content inside it (a deep link into the run's steps) can.
54
+ */
55
+ mountDetails?: boolean;
56
+ /** Latest steps shown when expanded; unresolved parallel calls always remain visible. */
52
57
  maxVisibleSteps?: number;
53
58
  /** Extra segments after the collapsed summary ("1m 23s", "12.4k tokens"), joined with " · ". */
54
59
  summaryDetails?: readonly string[];
@@ -68,10 +73,9 @@ export interface SuperGroupingCardProps {
68
73
  };
69
74
  }
70
75
  /**
71
- * The grouped ("conversational") view of an assistant turn: one "Athena is
72
- * working" card while the turn runs, listing its latest steps; a collapsed
73
- * "Used N tools" summary once it ends, with the full tool cards behind a
74
- * details disclosure. The answer itself renders below the card
76
+ * The grouped ("conversational") view of an assistant turn: a compact current
77
+ * action, an expandable tool timeline, and the original interactive tool UIs
78
+ * behind a separate details disclosure. The answer itself renders below the card
75
79
  * (`SuperGroupingFinalText`). Shared by the SDK's `AthenaChat`, Olympus, and
76
80
  * the Chrome extension, which supply their own text/tool renderers and the
77
81
  * host-specific controls through the slots.
@@ -84,7 +88,7 @@ export interface SuperGroupingCardProps {
84
88
  * `message.id`); every derivation runs in `useMemo` — a selector that returned
85
89
  * a fresh array would tear through `useSyncExternalStore`.
86
90
  */
87
- export declare const SuperGroupingCard: import("react").MemoExoticComponent<({ toolUIs, ToolFallback: ToolFallbackComponent, TextComponent, ReasoningComponent, GroupComponent, getToolGroupKey, groupingFunction, waitingTools, passThroughTools, waitingForInput, resolveToolDisplayName, expansionKey: expansionKeyProp, expandWhileWaiting, maxVisibleSteps, summaryDetails, renderHeaderActions, renderRunningMeta, className, classNames, }: SuperGroupingCardProps) => import("react/jsx-runtime").JSX.Element | null>;
91
+ export declare const SuperGroupingCard: import("react").MemoExoticComponent<({ toolUIs, ToolFallback: ToolFallbackComponent, TextComponent, ReasoningComponent, GroupComponent, getToolGroupKey, groupingFunction, waitingTools, passThroughTools, waitingForInput, resolveToolDisplayName, expansionKey: expansionKeyProp, expandWhileWaiting, mountDetails, maxVisibleSteps, summaryDetails, renderHeaderActions, renderRunningMeta, className, classNames, }: SuperGroupingCardProps) => import("react/jsx-runtime").JSX.Element | null>;
88
92
  /**
89
93
  * The turn's visible answer, rendered below the card: the text after the last
90
94
  * tool call (all of it when the turn called no tools), streaming while the