@athenaintel/react 0.28.1 → 0.30.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 (761) hide show
  1. package/README.md +418 -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/auth-denial.cjs.map +1 -0
  5. package/dist/agent-runtime/src/auth-denial.js.map +1 -0
  6. package/dist/agent-runtime/src/client-tool-bridge.cjs.map +1 -0
  7. package/dist/agent-runtime/src/client-tool-bridge.js.map +1 -0
  8. package/dist/agent-runtime/src/client-tools.cjs.map +1 -0
  9. package/dist/agent-runtime/src/client-tools.js.map +1 -0
  10. package/dist/agent-runtime/src/composer-markdown.cjs +124 -0
  11. package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -0
  12. package/dist/agent-runtime/src/composer-markdown.js +124 -0
  13. package/dist/agent-runtime/src/composer-markdown.js.map +1 -0
  14. package/dist/agent-runtime/src/conversation-index.cjs.map +1 -0
  15. package/dist/agent-runtime/src/conversation-index.js.map +1 -0
  16. package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.cjs +36 -0
  17. package/dist/agent-runtime/src/conversation-list.cjs.map +1 -0
  18. package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.js +36 -0
  19. package/dist/agent-runtime/src/conversation-list.js.map +1 -0
  20. package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.cjs +5 -3
  21. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -0
  22. package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.js +6 -4
  23. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -0
  24. package/dist/agent-runtime/src/edit-command.cjs.map +1 -0
  25. package/dist/agent-runtime/src/edit-command.js.map +1 -0
  26. package/dist/{packages/agent-runtime → agent-runtime}/src/errors.cjs +23 -0
  27. package/dist/agent-runtime/src/errors.cjs.map +1 -0
  28. package/dist/{packages/agent-runtime → agent-runtime}/src/errors.js +23 -0
  29. package/dist/agent-runtime/src/errors.js.map +1 -0
  30. package/dist/agent-runtime/src/execute-output.cjs +41 -0
  31. package/dist/agent-runtime/src/execute-output.cjs.map +1 -0
  32. package/dist/agent-runtime/src/execute-output.js +41 -0
  33. package/dist/agent-runtime/src/execute-output.js.map +1 -0
  34. package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.cjs +10 -2
  35. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -0
  36. package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.js +10 -2
  37. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -0
  38. package/dist/agent-runtime/src/github-wake-event.cjs.map +1 -0
  39. package/dist/agent-runtime/src/github-wake-event.js.map +1 -0
  40. package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.cjs +24 -1
  41. package/dist/agent-runtime/src/interrupts.cjs.map +1 -0
  42. package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.js +24 -1
  43. package/dist/agent-runtime/src/interrupts.js.map +1 -0
  44. package/dist/agent-runtime/src/message-author.cjs.map +1 -0
  45. package/dist/agent-runtime/src/message-author.js.map +1 -0
  46. package/dist/agent-runtime/src/message-window.cjs.map +1 -0
  47. package/dist/agent-runtime/src/message-window.js.map +1 -0
  48. package/dist/{packages/agent-runtime → agent-runtime}/src/messages.cjs +8 -4
  49. package/dist/agent-runtime/src/messages.cjs.map +1 -0
  50. package/dist/{packages/agent-runtime → agent-runtime}/src/messages.js +6 -2
  51. package/dist/agent-runtime/src/messages.js.map +1 -0
  52. package/dist/agent-runtime/src/model-context.cjs.map +1 -0
  53. package/dist/agent-runtime/src/model-context.js.map +1 -0
  54. package/dist/agent-runtime/src/optimistic-content.cjs.map +1 -0
  55. package/dist/agent-runtime/src/optimistic-content.js.map +1 -0
  56. package/dist/agent-runtime/src/protocol.cjs.map +1 -0
  57. package/dist/agent-runtime/src/protocol.js.map +1 -0
  58. package/dist/{packages/agent-runtime → agent-runtime}/src/queue.cjs +23 -2
  59. package/dist/agent-runtime/src/queue.cjs.map +1 -0
  60. package/dist/{packages/agent-runtime → agent-runtime}/src/queue.js +23 -2
  61. package/dist/agent-runtime/src/queue.js.map +1 -0
  62. package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.cjs +23 -13
  63. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -0
  64. package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.js +24 -14
  65. package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -0
  66. package/dist/agent-runtime/src/runtime-messages.cjs.map +1 -0
  67. package/dist/agent-runtime/src/runtime-messages.js.map +1 -0
  68. package/dist/agent-runtime/src/screen-point.cjs.map +1 -0
  69. package/dist/agent-runtime/src/screen-point.js.map +1 -0
  70. package/dist/agent-runtime/src/send-recovery.cjs.map +1 -0
  71. package/dist/agent-runtime/src/send-recovery.js.map +1 -0
  72. package/dist/agent-runtime/src/statewire-attach-observer.cjs.map +1 -0
  73. package/dist/agent-runtime/src/statewire-attach-observer.js.map +1 -0
  74. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.cjs +8 -0
  75. package/dist/agent-runtime/src/statewire-state.cjs.map +1 -0
  76. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.js +8 -0
  77. package/dist/agent-runtime/src/statewire-state.js.map +1 -0
  78. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.cjs +4 -0
  79. package/dist/agent-runtime/src/statewire-suspended.cjs.map +1 -0
  80. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.js +4 -0
  81. package/dist/agent-runtime/src/statewire-suspended.js.map +1 -0
  82. package/dist/agent-runtime/src/statewire-transport.cjs +43 -0
  83. package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -0
  84. package/dist/agent-runtime/src/statewire-transport.js +43 -0
  85. package/dist/agent-runtime/src/statewire-transport.js.map +1 -0
  86. package/dist/agent-runtime/src/streaming-markdown.cjs.map +1 -0
  87. package/dist/agent-runtime/src/streaming-markdown.js.map +1 -0
  88. package/dist/agent-runtime/src/subscription-wake-event.cjs +252 -0
  89. package/dist/agent-runtime/src/subscription-wake-event.cjs.map +1 -0
  90. package/dist/agent-runtime/src/subscription-wake-event.js +252 -0
  91. package/dist/agent-runtime/src/subscription-wake-event.js.map +1 -0
  92. package/dist/agent-runtime/src/thread-extras.cjs.map +1 -0
  93. package/dist/agent-runtime/src/thread-extras.js.map +1 -0
  94. package/dist/agent-runtime/src/thread-snapshot-cache.cjs.map +1 -0
  95. package/dist/agent-runtime/src/thread-snapshot-cache.js.map +1 -0
  96. package/dist/agent-runtime/src/thread-status.cjs.map +1 -0
  97. package/dist/agent-runtime/src/thread-status.js.map +1 -0
  98. package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.cjs +279 -3
  99. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -0
  100. package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.js +279 -3
  101. package/dist/agent-runtime/src/tool-metadata.js.map +1 -0
  102. package/dist/agent-runtime/src/tool-names.cjs +5 -0
  103. package/dist/agent-runtime/src/tool-names.cjs.map +1 -0
  104. package/dist/agent-runtime/src/tool-names.js +5 -0
  105. package/dist/agent-runtime/src/tool-names.js.map +1 -0
  106. package/dist/agent-runtime/src/tool-outputs.cjs.map +1 -0
  107. package/dist/agent-runtime/src/tool-outputs.js.map +1 -0
  108. package/dist/agent-runtime/src/tool-result.cjs.map +1 -0
  109. package/dist/agent-runtime/src/tool-result.js.map +1 -0
  110. package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.cjs +33 -22
  111. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -0
  112. package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.js +34 -23
  113. package/dist/agent-runtime/src/use-conversation-list.js.map +1 -0
  114. package/dist/agent-runtime/src/use-deep-agent-config.cjs.map +1 -0
  115. package/dist/agent-runtime/src/use-deep-agent-config.js.map +1 -0
  116. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.cjs +2 -0
  117. package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -0
  118. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.js +2 -0
  119. package/dist/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -0
  120. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -0
  121. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -0
  122. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.cjs +1 -0
  123. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -0
  124. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.js +2 -1
  125. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -0
  126. package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -0
  127. package/dist/agent-runtime/src/use-deep-agent-window-sync.js.map +1 -0
  128. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs +52 -0
  129. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs.map +1 -0
  130. package/dist/agent-runtime/src/use-historical-edit-attachments.js +52 -0
  131. package/dist/agent-runtime/src/use-historical-edit-attachments.js.map +1 -0
  132. package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.cjs +14 -0
  133. package/dist/agent-runtime/src/voice-presentation.cjs.map +1 -0
  134. package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.js +14 -0
  135. package/dist/agent-runtime/src/voice-presentation.js.map +1 -0
  136. package/dist/agent-runtime/src/voice-turn-grouping.cjs.map +1 -0
  137. package/dist/agent-runtime/src/voice-turn-grouping.js.map +1 -0
  138. package/dist/assets/AthenaAssetEmbed.cjs +8 -2
  139. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  140. package/dist/assets/AthenaAssetEmbed.d.ts +8 -0
  141. package/dist/assets/AthenaAssetEmbed.js +8 -2
  142. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  143. package/dist/assets/AthenaLayout.cjs +97 -31
  144. package/dist/assets/AthenaLayout.cjs.map +1 -1
  145. package/dist/assets/AthenaLayout.d.ts +13 -0
  146. package/dist/assets/AthenaLayout.js +98 -32
  147. package/dist/assets/AthenaLayout.js.map +1 -1
  148. package/dist/assets/asset-embed-messages.cjs.map +1 -1
  149. package/dist/assets/asset-embed-messages.d.ts +6 -0
  150. package/dist/assets/asset-embed-messages.js.map +1 -1
  151. package/dist/assets/asset-panel-store.cjs +68 -32
  152. package/dist/assets/asset-panel-store.cjs.map +1 -1
  153. package/dist/assets/asset-panel-store.d.ts +47 -1
  154. package/dist/assets/asset-panel-store.js +68 -32
  155. package/dist/assets/asset-panel-store.js.map +1 -1
  156. package/dist/assets/use-asset-embed.cjs +29 -8
  157. package/dist/assets/use-asset-embed.cjs.map +1 -1
  158. package/dist/assets/use-asset-embed.d.ts +7 -0
  159. package/dist/assets/use-asset-embed.js +29 -8
  160. package/dist/assets/use-asset-embed.js.map +1 -1
  161. package/dist/catalog/chat-pickers.cjs +152 -0
  162. package/dist/catalog/chat-pickers.cjs.map +1 -0
  163. package/dist/catalog/chat-pickers.d.ts +22 -0
  164. package/dist/catalog/chat-pickers.js +152 -0
  165. package/dist/catalog/chat-pickers.js.map +1 -0
  166. package/dist/catalog/runtime-catalog.cjs +181 -0
  167. package/dist/catalog/runtime-catalog.cjs.map +1 -0
  168. package/dist/catalog/runtime-catalog.d.ts +100 -0
  169. package/dist/catalog/runtime-catalog.js +181 -0
  170. package/dist/catalog/runtime-catalog.js.map +1 -0
  171. package/dist/chat/AthenaChat.cjs +86 -46
  172. package/dist/chat/AthenaChat.cjs.map +1 -1
  173. package/dist/chat/AthenaChat.d.ts +21 -4
  174. package/dist/chat/AthenaChat.js +88 -48
  175. package/dist/chat/AthenaChat.js.map +1 -1
  176. package/dist/chat/StatewireApprovalCard.cjs +38 -37
  177. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  178. package/dist/chat/StatewireApprovalCard.d.ts +2 -0
  179. package/dist/chat/StatewireApprovalCard.js +39 -38
  180. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  181. package/dist/chat/StatewireClientToolBridge.cjs +2 -2
  182. package/dist/chat/StatewireClientToolBridge.js +2 -2
  183. package/dist/chat/StatewireQueuedMessages.cjs +15 -12
  184. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  185. package/dist/chat/StatewireQueuedMessages.d.ts +22 -2
  186. package/dist/chat/StatewireQueuedMessages.js +15 -12
  187. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  188. package/dist/chat/StatewireRunRefusalNotice.cjs +48 -0
  189. package/dist/chat/StatewireRunRefusalNotice.cjs.map +1 -0
  190. package/dist/chat/StatewireRunRefusalNotice.d.ts +25 -0
  191. package/dist/chat/StatewireRunRefusalNotice.js +48 -0
  192. package/dist/chat/StatewireRunRefusalNotice.js.map +1 -0
  193. package/dist/chat/WaitingOnYouBanner.cjs +2 -2
  194. package/dist/chat/WaitingOnYouBanner.js +2 -2
  195. package/dist/chat/athena-citation-links.cjs +19 -15
  196. package/dist/chat/athena-citation-links.cjs.map +1 -1
  197. package/dist/chat/athena-citation-links.js +19 -15
  198. package/dist/chat/athena-citation-links.js.map +1 -1
  199. package/dist/chat/run-activity.cjs +9 -1
  200. package/dist/chat/run-activity.cjs.map +1 -1
  201. package/dist/chat/run-activity.d.ts +6 -0
  202. package/dist/chat/run-activity.js +10 -2
  203. package/dist/chat/run-activity.js.map +1 -1
  204. package/dist/chat/statewire-banners.cjs +30 -1
  205. package/dist/chat/statewire-banners.cjs.map +1 -1
  206. package/dist/chat/statewire-banners.d.ts +20 -1
  207. package/dist/chat/statewire-banners.js +32 -3
  208. package/dist/chat/statewire-banners.js.map +1 -1
  209. package/dist/chat/statewire-client-tools.cjs +1 -1
  210. package/dist/chat/statewire-client-tools.js +1 -1
  211. package/dist/chat/super-grouping/CollapsibleGroup.cjs +1 -1
  212. package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -1
  213. package/dist/chat/super-grouping/CollapsibleGroup.js +1 -1
  214. package/dist/chat/super-grouping/CollapsibleGroup.js.map +1 -1
  215. package/dist/chat/super-grouping/SuperGroupingCard.cjs +7 -5
  216. package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
  217. package/dist/chat/super-grouping/SuperGroupingCard.d.ts +8 -2
  218. package/dist/chat/super-grouping/SuperGroupingCard.js +7 -5
  219. package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
  220. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs +350 -0
  221. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs.map +1 -0
  222. package/dist/chat/super-grouping/SuperGroupingTranscript.d.ts +31 -0
  223. package/dist/chat/super-grouping/SuperGroupingTranscript.js +350 -0
  224. package/dist/chat/super-grouping/SuperGroupingTranscript.js.map +1 -0
  225. package/dist/chat/super-grouping/ToolTimeline.cjs +13 -2
  226. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  227. package/dist/chat/super-grouping/ToolTimeline.d.ts +10 -3
  228. package/dist/chat/super-grouping/ToolTimeline.js +13 -2
  229. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  230. package/dist/chat/super-grouping/activity-timeline.cjs +51 -26
  231. package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
  232. package/dist/chat/super-grouping/activity-timeline.d.ts +40 -8
  233. package/dist/chat/super-grouping/activity-timeline.js +52 -27
  234. package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
  235. package/dist/chat/super-grouping/index.cjs +12 -0
  236. package/dist/chat/super-grouping/index.cjs.map +1 -1
  237. package/dist/chat/super-grouping/index.d.ts +7 -2
  238. package/dist/chat/super-grouping/index.js +14 -2
  239. package/dist/chat/super-grouping/index.js.map +1 -1
  240. package/dist/chat/super-grouping/timeline-step.cjs +14 -5
  241. package/dist/chat/super-grouping/timeline-step.cjs.map +1 -1
  242. package/dist/chat/super-grouping/timeline-step.d.ts +10 -1
  243. package/dist/chat/super-grouping/timeline-step.js +15 -6
  244. package/dist/chat/super-grouping/timeline-step.js.map +1 -1
  245. package/dist/chat/super-grouping/turn-segments.cjs +82 -0
  246. package/dist/chat/super-grouping/turn-segments.cjs.map +1 -0
  247. package/dist/chat/super-grouping/turn-segments.d.ts +69 -0
  248. package/dist/chat/super-grouping/turn-segments.js +82 -0
  249. package/dist/chat/super-grouping/turn-segments.js.map +1 -0
  250. package/dist/chat/super-grouping/turn-timing.cjs +110 -0
  251. package/dist/chat/super-grouping/turn-timing.cjs.map +1 -0
  252. package/dist/chat/super-grouping/turn-timing.d.ts +52 -0
  253. package/dist/chat/super-grouping/turn-timing.js +110 -0
  254. package/dist/chat/super-grouping/turn-timing.js.map +1 -0
  255. package/dist/chat/tiptap-text.cjs +1 -1
  256. package/dist/chat/tiptap-text.js +1 -1
  257. package/dist/chat/use-athena-run-live.cjs +1 -1
  258. package/dist/chat/use-athena-run-live.js +1 -1
  259. package/dist/chat/use-statewire-approval-request.cjs +73 -4
  260. package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
  261. package/dist/chat/use-statewire-approval-request.js +74 -5
  262. package/dist/chat/use-statewire-approval-request.js.map +1 -1
  263. package/dist/chat-ui/composer/composer-message.cjs +284 -0
  264. package/dist/chat-ui/composer/composer-message.cjs.map +1 -0
  265. package/dist/chat-ui/composer/composer-message.d.ts +152 -0
  266. package/dist/chat-ui/composer/composer-message.js +284 -0
  267. package/dist/chat-ui/composer/composer-message.js.map +1 -0
  268. package/dist/chat-ui/composer/tiptap-composer.cjs +57 -11
  269. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  270. package/dist/chat-ui/composer/tiptap-composer.d.ts +34 -6
  271. package/dist/chat-ui/composer/tiptap-composer.js +57 -11
  272. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  273. package/dist/chat-ui/index.cjs +4 -1
  274. package/dist/chat-ui/index.cjs.map +1 -1
  275. package/dist/chat-ui/index.d.ts +3 -2
  276. package/dist/chat-ui/index.js +5 -2
  277. package/dist/chat-ui/index.js.map +1 -1
  278. package/dist/chat-ui/mentions/mention-chip.cjs +3 -2
  279. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  280. package/dist/chat-ui/mentions/mention-chip.js +4 -3
  281. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  282. package/dist/chat-ui/mentions/mention-extension.cjs +8 -2
  283. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
  284. package/dist/chat-ui/mentions/mention-extension.js +8 -2
  285. package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
  286. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +3 -1
  287. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -1
  288. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js +3 -1
  289. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js.map +1 -1
  290. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +65 -19
  291. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  292. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +15 -0
  293. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +67 -21
  294. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  295. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +4 -2
  296. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  297. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +2 -1
  298. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +5 -3
  299. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  300. package/dist/chat-ui/messages/message-components.cjs +30 -10
  301. package/dist/chat-ui/messages/message-components.cjs.map +1 -1
  302. package/dist/chat-ui/messages/message-components.d.ts +21 -1
  303. package/dist/chat-ui/messages/message-components.js +30 -10
  304. package/dist/chat-ui/messages/message-components.js.map +1 -1
  305. package/dist/chat-ui/messages/runtime-message.cjs +1 -1
  306. package/dist/chat-ui/messages/runtime-message.js +1 -1
  307. package/dist/chat-ui/messages/statewire-continue-run.cjs +5 -5
  308. package/dist/chat-ui/messages/statewire-continue-run.js +5 -5
  309. package/dist/chat-ui/messages/user-edit-composer.cjs +1 -1
  310. package/dist/chat-ui/messages/user-edit-composer.js +1 -1
  311. package/dist/chat-ui/messages/wake-marker.cjs +39 -4
  312. package/dist/chat-ui/messages/wake-marker.cjs.map +1 -1
  313. package/dist/chat-ui/messages/wake-marker.d.ts +16 -5
  314. package/dist/chat-ui/messages/wake-marker.js +40 -5
  315. package/dist/chat-ui/messages/wake-marker.js.map +1 -1
  316. package/dist/chat-ui/rich-text/chat-message-body.cjs +12 -8
  317. package/dist/chat-ui/rich-text/chat-message-body.cjs.map +1 -1
  318. package/dist/chat-ui/rich-text/chat-message-body.d.ts +6 -1
  319. package/dist/chat-ui/rich-text/chat-message-body.js +13 -9
  320. package/dist/chat-ui/rich-text/chat-message-body.js.map +1 -1
  321. package/dist/chat-ui/rich-text/chat-text-schema.cjs +64 -6
  322. package/dist/chat-ui/rich-text/chat-text-schema.cjs.map +1 -1
  323. package/dist/chat-ui/rich-text/chat-text-schema.d.ts +5 -0
  324. package/dist/chat-ui/rich-text/chat-text-schema.js +66 -8
  325. package/dist/chat-ui/rich-text/chat-text-schema.js.map +1 -1
  326. package/dist/chat-ui/statewire.cjs +1 -1
  327. package/dist/chat-ui/statewire.d.ts +1 -1
  328. package/dist/chat-ui/statewire.js +1 -1
  329. package/dist/chat-ui/thread/statewire-history-edge.cjs +2 -2
  330. package/dist/chat-ui/thread/statewire-history-edge.js +2 -2
  331. package/dist/collab/client.cjs +218 -13
  332. package/dist/collab/client.cjs.map +1 -1
  333. package/dist/collab/client.d.ts +105 -2
  334. package/dist/collab/client.js +221 -17
  335. package/dist/collab/client.js.map +1 -1
  336. package/dist/collab/index.cjs +2 -0
  337. package/dist/collab/index.cjs.map +1 -1
  338. package/dist/collab/index.d.ts +1 -1
  339. package/dist/collab/index.js +3 -1
  340. package/dist/composer/AttachmentContext.cjs +38 -12
  341. package/dist/composer/AttachmentContext.cjs.map +1 -1
  342. package/dist/composer/AttachmentContext.d.ts +22 -1
  343. package/dist/composer/AttachmentContext.js +40 -14
  344. package/dist/composer/AttachmentContext.js.map +1 -1
  345. package/dist/composer/QuoteContext.cjs +80 -28
  346. package/dist/composer/QuoteContext.cjs.map +1 -1
  347. package/dist/composer/QuoteContext.d.ts +35 -6
  348. package/dist/composer/QuoteContext.js +82 -30
  349. package/dist/composer/QuoteContext.js.map +1 -1
  350. package/dist/composer/build-composed-message.cjs +27 -0
  351. package/dist/composer/build-composed-message.cjs.map +1 -1
  352. package/dist/composer/build-composed-message.d.ts +21 -0
  353. package/dist/composer/build-composed-message.js +28 -1
  354. package/dist/composer/build-composed-message.js.map +1 -1
  355. package/dist/composer/composer-handoff.cjs +13 -1
  356. package/dist/composer/composer-handoff.cjs.map +1 -1
  357. package/dist/composer/composer-handoff.d.ts +12 -0
  358. package/dist/composer/composer-handoff.js +15 -3
  359. package/dist/composer/composer-handoff.js.map +1 -1
  360. package/dist/composer/index.d.ts +6 -3
  361. package/dist/composer/useReadComposerDraft.cjs +16 -0
  362. package/dist/composer/useReadComposerDraft.cjs.map +1 -0
  363. package/dist/composer/useReadComposerDraft.d.ts +6 -0
  364. package/dist/composer/useReadComposerDraft.js +16 -0
  365. package/dist/composer/useReadComposerDraft.js.map +1 -0
  366. package/dist/diagnostics/errors.cjs +6 -0
  367. package/dist/diagnostics/errors.cjs.map +1 -1
  368. package/dist/diagnostics/errors.d.ts +6 -0
  369. package/dist/diagnostics/errors.js +6 -0
  370. package/dist/diagnostics/errors.js.map +1 -1
  371. package/dist/index.cjs +159 -7
  372. package/dist/index.cjs.map +1 -1
  373. package/dist/index.d.ts +53 -12
  374. package/dist/index.js +166 -14
  375. package/dist/index.js.map +1 -1
  376. package/dist/lib/owner-document.cjs +32 -0
  377. package/dist/lib/owner-document.cjs.map +1 -0
  378. package/dist/lib/owner-document.d.ts +17 -0
  379. package/dist/lib/owner-document.js +32 -0
  380. package/dist/lib/owner-document.js.map +1 -0
  381. package/dist/lib/portal-surface.cjs +55 -0
  382. package/dist/lib/portal-surface.cjs.map +1 -0
  383. package/dist/lib/portal-surface.d.ts +37 -0
  384. package/dist/lib/portal-surface.js +55 -0
  385. package/dist/lib/portal-surface.js.map +1 -0
  386. package/dist/lib/use-athena-rest-query.cjs +34 -0
  387. package/dist/lib/use-athena-rest-query.cjs.map +1 -0
  388. package/dist/lib/use-athena-rest-query.d.ts +31 -0
  389. package/dist/lib/use-athena-rest-query.js +34 -0
  390. package/dist/lib/use-athena-rest-query.js.map +1 -0
  391. package/dist/provider/AthenaProvider.cjs +36 -6
  392. package/dist/provider/AthenaProvider.cjs.map +1 -1
  393. package/dist/provider/AthenaProvider.d.ts +20 -1
  394. package/dist/provider/AthenaProvider.js +38 -8
  395. package/dist/provider/AthenaProvider.js.map +1 -1
  396. package/dist/provider/citation-links.d.ts +10 -2
  397. package/dist/{packages/react → react}/package.json.cjs +1 -1
  398. package/dist/{packages/react → react}/package.json.js +1 -1
  399. package/dist/runtime/statewire-lifecycle.cjs +15 -3
  400. package/dist/runtime/statewire-lifecycle.cjs.map +1 -1
  401. package/dist/runtime/statewire-lifecycle.d.ts +6 -0
  402. package/dist/runtime/statewire-lifecycle.js +15 -3
  403. package/dist/runtime/statewire-lifecycle.js.map +1 -1
  404. package/dist/runtime/useAthenaStatewireRuntime.cjs +11 -7
  405. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  406. package/dist/runtime/useAthenaStatewireRuntime.js +11 -7
  407. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  408. package/dist/search/useAthenaRepoSearch.cjs +5 -13
  409. package/dist/search/useAthenaRepoSearch.cjs.map +1 -1
  410. package/dist/search/useAthenaRepoSearch.d.ts +3 -3
  411. package/dist/search/useAthenaRepoSearch.js +6 -14
  412. package/dist/search/useAthenaRepoSearch.js.map +1 -1
  413. package/dist/sheet-range/a1.cjs +162 -0
  414. package/dist/sheet-range/a1.cjs.map +1 -0
  415. package/dist/sheet-range/a1.d.ts +91 -0
  416. package/dist/sheet-range/a1.js +162 -0
  417. package/dist/sheet-range/a1.js.map +1 -0
  418. package/dist/sheet-range/index.cjs +22 -0
  419. package/dist/sheet-range/index.cjs.map +1 -0
  420. package/dist/sheet-range/index.d.ts +12 -0
  421. package/dist/sheet-range/index.js +22 -0
  422. package/dist/sheet-range/index.js.map +1 -0
  423. package/dist/sheet-range/range-preview-table.cjs +75 -0
  424. package/dist/sheet-range/range-preview-table.cjs.map +1 -0
  425. package/dist/sheet-range/range-preview-table.d.ts +20 -0
  426. package/dist/sheet-range/range-preview-table.js +75 -0
  427. package/dist/sheet-range/range-preview-table.js.map +1 -0
  428. package/dist/sheet-range/range-preview.cjs +116 -0
  429. package/dist/sheet-range/range-preview.cjs.map +1 -0
  430. package/dist/sheet-range/range-preview.d.ts +67 -0
  431. package/dist/sheet-range/range-preview.js +116 -0
  432. package/dist/sheet-range/range-preview.js.map +1 -0
  433. package/dist/styles.css +1 -1
  434. package/dist/threads/Inbox.cjs +289 -0
  435. package/dist/threads/Inbox.cjs.map +1 -0
  436. package/dist/threads/Inbox.d.ts +46 -0
  437. package/dist/threads/Inbox.js +289 -0
  438. package/dist/threads/Inbox.js.map +1 -0
  439. package/dist/threads/SessionList.cjs +51 -126
  440. package/dist/threads/SessionList.cjs.map +1 -1
  441. package/dist/threads/SessionList.d.ts +26 -1
  442. package/dist/threads/SessionList.js +45 -120
  443. package/dist/threads/SessionList.js.map +1 -1
  444. package/dist/threads/SessionsPage.cjs +753 -0
  445. package/dist/threads/SessionsPage.cjs.map +1 -0
  446. package/dist/threads/SessionsPage.d.ts +35 -0
  447. package/dist/threads/SessionsPage.js +753 -0
  448. package/dist/threads/SessionsPage.js.map +1 -0
  449. package/dist/threads/api.cjs +21 -1
  450. package/dist/threads/api.cjs.map +1 -1
  451. package/dist/threads/api.d.ts +59 -0
  452. package/dist/threads/api.js +21 -1
  453. package/dist/threads/api.js.map +1 -1
  454. package/dist/threads/conversation-list-fetcher.cjs +9 -2
  455. package/dist/threads/conversation-list-fetcher.cjs.map +1 -1
  456. package/dist/threads/conversation-list-fetcher.d.ts +14 -1
  457. package/dist/threads/conversation-list-fetcher.js +9 -2
  458. package/dist/threads/conversation-list-fetcher.js.map +1 -1
  459. package/dist/threads/index.d.ts +2 -1
  460. package/dist/threads/pull-request-display.cjs +25 -0
  461. package/dist/threads/pull-request-display.cjs.map +1 -0
  462. package/dist/threads/pull-request-display.d.ts +15 -0
  463. package/dist/threads/pull-request-display.js +25 -0
  464. package/dist/threads/pull-request-display.js.map +1 -0
  465. package/dist/threads/session-list-model.cjs +16 -2
  466. package/dist/threads/session-list-model.cjs.map +1 -1
  467. package/dist/threads/session-list-model.d.ts +10 -0
  468. package/dist/threads/session-list-model.js +16 -2
  469. package/dist/threads/session-list-model.js.map +1 -1
  470. package/dist/threads/session-row-parts.cjs +152 -0
  471. package/dist/threads/session-row-parts.cjs.map +1 -0
  472. package/dist/threads/session-row-parts.d.ts +50 -0
  473. package/dist/threads/session-row-parts.js +152 -0
  474. package/dist/threads/session-row-parts.js.map +1 -0
  475. package/dist/threads/sessions-page-model.cjs +305 -0
  476. package/dist/threads/sessions-page-model.cjs.map +1 -0
  477. package/dist/threads/sessions-page-model.d.ts +86 -0
  478. package/dist/threads/sessions-page-model.js +305 -0
  479. package/dist/threads/sessions-page-model.js.map +1 -0
  480. package/dist/threads/sessions-page-storage.cjs +93 -0
  481. package/dist/threads/sessions-page-storage.cjs.map +1 -0
  482. package/dist/threads/sessions-page-storage.d.ts +23 -0
  483. package/dist/threads/sessions-page-storage.js +93 -0
  484. package/dist/threads/sessions-page-storage.js.map +1 -0
  485. package/dist/threads/sessions-query.cjs +235 -0
  486. package/dist/threads/sessions-query.cjs.map +1 -0
  487. package/dist/threads/sessions-query.d.ts +119 -0
  488. package/dist/threads/sessions-query.js +235 -0
  489. package/dist/threads/sessions-query.js.map +1 -0
  490. package/dist/threads/statewire-thread-list.cjs +133 -40
  491. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  492. package/dist/threads/statewire-thread-list.d.ts +83 -2
  493. package/dist/threads/statewire-thread-list.js +134 -41
  494. package/dist/threads/statewire-thread-list.js.map +1 -1
  495. package/dist/threads/use-athena-sessions.cjs +198 -0
  496. package/dist/threads/use-athena-sessions.cjs.map +1 -0
  497. package/dist/threads/use-athena-sessions.d.ts +81 -0
  498. package/dist/threads/use-athena-sessions.js +198 -0
  499. package/dist/threads/use-athena-sessions.js.map +1 -0
  500. package/dist/threads/use-rest-conversation-history.cjs +1 -1
  501. package/dist/threads/use-rest-conversation-history.js +1 -1
  502. package/dist/threads/use-statewire-conversation-history.cjs +1 -1
  503. package/dist/threads/use-statewire-conversation-history.d.ts +3 -0
  504. package/dist/threads/use-statewire-conversation-history.js +1 -1
  505. package/dist/threads/use-thread-read-state.cjs +73 -0
  506. package/dist/threads/use-thread-read-state.cjs.map +1 -0
  507. package/dist/threads/use-thread-read-state.d.ts +51 -0
  508. package/dist/threads/use-thread-read-state.js +73 -0
  509. package/dist/threads/use-thread-read-state.js.map +1 -0
  510. package/dist/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +1 -0
  511. package/dist/tiptap-markdown-table/src/markdown-table-serializer.js.map +1 -0
  512. package/dist/tools/auto-open-tools.cjs +2 -0
  513. package/dist/tools/auto-open-tools.cjs.map +1 -1
  514. package/dist/tools/auto-open-tools.js +2 -0
  515. package/dist/tools/auto-open-tools.js.map +1 -1
  516. package/dist/tools/file-tool-uis.cjs +18 -43
  517. package/dist/tools/file-tool-uis.cjs.map +1 -1
  518. package/dist/tools/file-tool-uis.d.ts +1 -2
  519. package/dist/tools/file-tool-uis.js +18 -42
  520. package/dist/tools/file-tool-uis.js.map +1 -1
  521. package/dist/tools/index.cjs +6 -2
  522. package/dist/tools/index.cjs.map +1 -1
  523. package/dist/tools/index.d.ts +1 -0
  524. package/dist/tools/index.js +6 -2
  525. package/dist/tools/index.js.map +1 -1
  526. package/dist/tools/misc-tool-uis.cjs +2 -2
  527. package/dist/tools/misc-tool-uis.js +2 -2
  528. package/dist/tools/primitives.cjs +1 -1
  529. package/dist/tools/primitives.js +1 -1
  530. package/dist/tools/read-asset-tool-ui.cjs +21 -70
  531. package/dist/tools/read-asset-tool-ui.cjs.map +1 -1
  532. package/dist/tools/read-asset-tool-ui.js +21 -70
  533. package/dist/tools/read-asset-tool-ui.js.map +1 -1
  534. package/dist/tools/step-text.cjs +21 -0
  535. package/dist/tools/step-text.cjs.map +1 -0
  536. package/dist/tools/step-text.d.ts +10 -0
  537. package/dist/tools/step-text.js +21 -0
  538. package/dist/tools/step-text.js.map +1 -0
  539. package/dist/tools/tool-fallback.cjs +24 -5
  540. package/dist/tools/tool-fallback.cjs.map +1 -1
  541. package/dist/tools/tool-fallback.d.ts +3 -1
  542. package/dist/tools/tool-fallback.js +24 -5
  543. package/dist/tools/tool-fallback.js.map +1 -1
  544. package/dist/tools/tool-summary.cjs +661 -0
  545. package/dist/tools/tool-summary.cjs.map +1 -0
  546. package/dist/tools/tool-summary.d.ts +99 -0
  547. package/dist/tools/tool-summary.js +661 -0
  548. package/dist/tools/tool-summary.js.map +1 -0
  549. package/dist/tools/tool-uis.cjs +37 -95
  550. package/dist/tools/tool-uis.cjs.map +1 -1
  551. package/dist/tools/tool-uis.js +37 -95
  552. package/dist/tools/tool-uis.js.map +1 -1
  553. package/dist/tools/voice-update-tool-ui.cjs +1 -1
  554. package/dist/tools/voice-update-tool-ui.js +1 -1
  555. package/dist/tools/write-todos-tool-ui.cjs +3 -2
  556. package/dist/tools/write-todos-tool-ui.cjs.map +1 -1
  557. package/dist/tools/write-todos-tool-ui.d.ts +5 -0
  558. package/dist/tools/write-todos-tool-ui.js +5 -4
  559. package/dist/tools/write-todos-tool-ui.js.map +1 -1
  560. package/dist/ui/popover.cjs +6 -6
  561. package/dist/ui/popover.cjs.map +1 -1
  562. package/dist/ui/popover.js +6 -6
  563. package/dist/ui/popover.js.map +1 -1
  564. package/dist/ui/tooltip.cjs +16 -2
  565. package/dist/ui/tooltip.cjs.map +1 -1
  566. package/dist/ui/tooltip.d.ts +1 -1
  567. package/dist/ui/tooltip.js +16 -2
  568. package/dist/ui/tooltip.js.map +1 -1
  569. package/dist/version.cjs +1 -1
  570. package/dist/version.js +1 -1
  571. package/dist/voice/use-athena-voice-session.cjs.map +1 -1
  572. package/dist/voice/use-athena-voice-session.d.ts +3 -3
  573. package/dist/voice/use-athena-voice-session.js.map +1 -1
  574. package/dist/workbench/SessionWorkbench.cjs +378 -0
  575. package/dist/workbench/SessionWorkbench.cjs.map +1 -0
  576. package/dist/workbench/SessionWorkbench.d.ts +30 -0
  577. package/dist/workbench/SessionWorkbench.js +378 -0
  578. package/dist/workbench/SessionWorkbench.js.map +1 -0
  579. package/dist/workbench/session-workbench-context.cjs +26 -0
  580. package/dist/workbench/session-workbench-context.cjs.map +1 -0
  581. package/dist/workbench/session-workbench-context.d.ts +55 -0
  582. package/dist/workbench/session-workbench-context.js +26 -0
  583. package/dist/workbench/session-workbench-context.js.map +1 -0
  584. package/dist/workbench/session-workbench-model.cjs +288 -0
  585. package/dist/workbench/session-workbench-model.cjs.map +1 -0
  586. package/dist/workbench/session-workbench-model.d.ts +168 -0
  587. package/dist/workbench/session-workbench-model.js +288 -0
  588. package/dist/workbench/session-workbench-model.js.map +1 -0
  589. package/dist/workbench/session-workbench-panes.cjs +580 -0
  590. package/dist/workbench/session-workbench-panes.cjs.map +1 -0
  591. package/dist/workbench/session-workbench-panes.d.ts +16 -0
  592. package/dist/workbench/session-workbench-panes.js +580 -0
  593. package/dist/workbench/session-workbench-panes.js.map +1 -0
  594. package/dist/workbench/session-workspace-api.cjs +157 -0
  595. package/dist/workbench/session-workspace-api.cjs.map +1 -0
  596. package/dist/workbench/session-workspace-api.d.ts +70 -0
  597. package/dist/workbench/session-workspace-api.js +157 -0
  598. package/dist/workbench/session-workspace-api.js.map +1 -0
  599. package/dist/workbench/use-session-workspace.cjs +100 -0
  600. package/dist/workbench/use-session-workspace.cjs.map +1 -0
  601. package/dist/workbench/use-session-workspace.d.ts +45 -0
  602. package/dist/workbench/use-session-workspace.js +100 -0
  603. package/dist/workbench/use-session-workspace.js.map +1 -0
  604. package/dist/workbench/workbench-layout-context.cjs +10 -0
  605. package/dist/workbench/workbench-layout-context.cjs.map +1 -0
  606. package/dist/workbench/workbench-layout-context.d.ts +17 -0
  607. package/dist/workbench/workbench-layout-context.js +10 -0
  608. package/dist/workbench/workbench-layout-context.js.map +1 -0
  609. package/package.json +20 -9
  610. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs +0 -77
  611. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs.map +0 -1
  612. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js +0 -77
  613. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js.map +0 -1
  614. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs +0 -181
  615. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs.map +0 -1
  616. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js +0 -181
  617. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js.map +0 -1
  618. package/dist/packages/agent-runtime/src/asset-attachment.cjs.map +0 -1
  619. package/dist/packages/agent-runtime/src/asset-attachment.js.map +0 -1
  620. package/dist/packages/agent-runtime/src/auth-denial.cjs.map +0 -1
  621. package/dist/packages/agent-runtime/src/auth-denial.js.map +0 -1
  622. package/dist/packages/agent-runtime/src/client-tool-bridge.cjs.map +0 -1
  623. package/dist/packages/agent-runtime/src/client-tool-bridge.js.map +0 -1
  624. package/dist/packages/agent-runtime/src/client-tools.cjs.map +0 -1
  625. package/dist/packages/agent-runtime/src/client-tools.js.map +0 -1
  626. package/dist/packages/agent-runtime/src/conversation-index.cjs.map +0 -1
  627. package/dist/packages/agent-runtime/src/conversation-index.js.map +0 -1
  628. package/dist/packages/agent-runtime/src/conversation-list.cjs.map +0 -1
  629. package/dist/packages/agent-runtime/src/conversation-list.js.map +0 -1
  630. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs.map +0 -1
  631. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js.map +0 -1
  632. package/dist/packages/agent-runtime/src/edit-command.cjs.map +0 -1
  633. package/dist/packages/agent-runtime/src/edit-command.js.map +0 -1
  634. package/dist/packages/agent-runtime/src/errors.cjs.map +0 -1
  635. package/dist/packages/agent-runtime/src/errors.js.map +0 -1
  636. package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs.map +0 -1
  637. package/dist/packages/agent-runtime/src/generated/runconfig-contract.js.map +0 -1
  638. package/dist/packages/agent-runtime/src/github-wake-event.cjs.map +0 -1
  639. package/dist/packages/agent-runtime/src/github-wake-event.js.map +0 -1
  640. package/dist/packages/agent-runtime/src/interrupts.cjs.map +0 -1
  641. package/dist/packages/agent-runtime/src/interrupts.js.map +0 -1
  642. package/dist/packages/agent-runtime/src/message-author.cjs.map +0 -1
  643. package/dist/packages/agent-runtime/src/message-author.js.map +0 -1
  644. package/dist/packages/agent-runtime/src/message-window.cjs.map +0 -1
  645. package/dist/packages/agent-runtime/src/message-window.js.map +0 -1
  646. package/dist/packages/agent-runtime/src/messages.cjs.map +0 -1
  647. package/dist/packages/agent-runtime/src/messages.js.map +0 -1
  648. package/dist/packages/agent-runtime/src/model-context.cjs.map +0 -1
  649. package/dist/packages/agent-runtime/src/model-context.js.map +0 -1
  650. package/dist/packages/agent-runtime/src/optimistic-content.cjs.map +0 -1
  651. package/dist/packages/agent-runtime/src/optimistic-content.js.map +0 -1
  652. package/dist/packages/agent-runtime/src/protocol.cjs.map +0 -1
  653. package/dist/packages/agent-runtime/src/protocol.js.map +0 -1
  654. package/dist/packages/agent-runtime/src/queue.cjs.map +0 -1
  655. package/dist/packages/agent-runtime/src/queue.js.map +0 -1
  656. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs.map +0 -1
  657. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js.map +0 -1
  658. package/dist/packages/agent-runtime/src/runtime-messages.cjs.map +0 -1
  659. package/dist/packages/agent-runtime/src/runtime-messages.js.map +0 -1
  660. package/dist/packages/agent-runtime/src/screen-point.cjs.map +0 -1
  661. package/dist/packages/agent-runtime/src/screen-point.js.map +0 -1
  662. package/dist/packages/agent-runtime/src/send-recovery.cjs.map +0 -1
  663. package/dist/packages/agent-runtime/src/send-recovery.js.map +0 -1
  664. package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs.map +0 -1
  665. package/dist/packages/agent-runtime/src/statewire-attach-observer.js.map +0 -1
  666. package/dist/packages/agent-runtime/src/statewire-state.cjs.map +0 -1
  667. package/dist/packages/agent-runtime/src/statewire-state.js.map +0 -1
  668. package/dist/packages/agent-runtime/src/statewire-suspended.cjs.map +0 -1
  669. package/dist/packages/agent-runtime/src/statewire-suspended.js.map +0 -1
  670. package/dist/packages/agent-runtime/src/statewire-transport.cjs +0 -11
  671. package/dist/packages/agent-runtime/src/statewire-transport.cjs.map +0 -1
  672. package/dist/packages/agent-runtime/src/statewire-transport.js +0 -11
  673. package/dist/packages/agent-runtime/src/statewire-transport.js.map +0 -1
  674. package/dist/packages/agent-runtime/src/streaming-markdown.cjs.map +0 -1
  675. package/dist/packages/agent-runtime/src/streaming-markdown.js.map +0 -1
  676. package/dist/packages/agent-runtime/src/thread-extras.cjs.map +0 -1
  677. package/dist/packages/agent-runtime/src/thread-extras.js.map +0 -1
  678. package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs.map +0 -1
  679. package/dist/packages/agent-runtime/src/thread-snapshot-cache.js.map +0 -1
  680. package/dist/packages/agent-runtime/src/thread-status.cjs.map +0 -1
  681. package/dist/packages/agent-runtime/src/thread-status.js.map +0 -1
  682. package/dist/packages/agent-runtime/src/tool-metadata.cjs.map +0 -1
  683. package/dist/packages/agent-runtime/src/tool-metadata.js.map +0 -1
  684. package/dist/packages/agent-runtime/src/tool-outputs.cjs.map +0 -1
  685. package/dist/packages/agent-runtime/src/tool-outputs.js.map +0 -1
  686. package/dist/packages/agent-runtime/src/tool-result.cjs.map +0 -1
  687. package/dist/packages/agent-runtime/src/tool-result.js.map +0 -1
  688. package/dist/packages/agent-runtime/src/use-conversation-list.cjs.map +0 -1
  689. package/dist/packages/agent-runtime/src/use-conversation-list.js.map +0 -1
  690. package/dist/packages/agent-runtime/src/use-deep-agent-config.cjs.map +0 -1
  691. package/dist/packages/agent-runtime/src/use-deep-agent-config.js.map +0 -1
  692. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +0 -1
  693. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js.map +0 -1
  694. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs.map +0 -1
  695. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js.map +0 -1
  696. package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs.map +0 -1
  697. package/dist/packages/agent-runtime/src/use-deep-agent-thread.js.map +0 -1
  698. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs.map +0 -1
  699. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js.map +0 -1
  700. package/dist/packages/agent-runtime/src/voice-presentation.cjs.map +0 -1
  701. package/dist/packages/agent-runtime/src/voice-presentation.js.map +0 -1
  702. package/dist/packages/agent-runtime/src/voice-turn-grouping.cjs.map +0 -1
  703. package/dist/packages/agent-runtime/src/voice-turn-grouping.js.map +0 -1
  704. package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +0 -1
  705. package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.js.map +0 -1
  706. /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.cjs +0 -0
  707. /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.js +0 -0
  708. /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.cjs +0 -0
  709. /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.js +0 -0
  710. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.cjs +0 -0
  711. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.js +0 -0
  712. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.cjs +0 -0
  713. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.js +0 -0
  714. /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.cjs +0 -0
  715. /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.js +0 -0
  716. /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.cjs +0 -0
  717. /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.js +0 -0
  718. /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.cjs +0 -0
  719. /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.js +0 -0
  720. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.cjs +0 -0
  721. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.js +0 -0
  722. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.cjs +0 -0
  723. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.js +0 -0
  724. /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.cjs +0 -0
  725. /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.js +0 -0
  726. /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.cjs +0 -0
  727. /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.js +0 -0
  728. /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.cjs +0 -0
  729. /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.js +0 -0
  730. /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.cjs +0 -0
  731. /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.js +0 -0
  732. /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.cjs +0 -0
  733. /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.js +0 -0
  734. /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.cjs +0 -0
  735. /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.js +0 -0
  736. /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.cjs +0 -0
  737. /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.js +0 -0
  738. /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.cjs +0 -0
  739. /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.js +0 -0
  740. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.cjs +0 -0
  741. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.js +0 -0
  742. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.cjs +0 -0
  743. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.js +0 -0
  744. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.cjs +0 -0
  745. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.js +0 -0
  746. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.cjs +0 -0
  747. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.js +0 -0
  748. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.cjs +0 -0
  749. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.js +0 -0
  750. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-config.cjs +0 -0
  751. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-config.js +0 -0
  752. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.cjs +0 -0
  753. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.js +0 -0
  754. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.cjs +0 -0
  755. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.js +0 -0
  756. /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.cjs +0 -0
  757. /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.js +0 -0
  758. /package/dist/{packages/react → react}/package.json.cjs.map +0 -0
  759. /package/dist/{packages/react → react}/package.json.js.map +0 -0
  760. /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.cjs +0 -0
  761. /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.js +0 -0
@@ -4,6 +4,9 @@ const activityTimeline = require("./activity-timeline.cjs");
4
4
  const CollapsibleGroup = require("./CollapsibleGroup.cjs");
5
5
  const groupingFunction = require("./grouping-function.cjs");
6
6
  const SuperGroupingCard = require("./SuperGroupingCard.cjs");
7
+ const SuperGroupingTranscript = require("./SuperGroupingTranscript.cjs");
8
+ const turnSegments = require("./turn-segments.cjs");
9
+ const turnTiming = require("./turn-timing.cjs");
7
10
  const toolkitMap = require("./toolkit-map.cjs");
8
11
  exports.buildActivityTimeline = activityTimeline.buildActivityTimeline;
9
12
  exports.countActivityTools = activityTimeline.countActivityTools;
@@ -12,6 +15,8 @@ exports.getActivityItemLabel = activityTimeline.getActivityItemLabel;
12
15
  exports.getActivitySummary = activityTimeline.getActivitySummary;
13
16
  exports.getActivityToolState = activityTimeline.getActivityToolState;
14
17
  exports.getFinalText = activityTimeline.getFinalText;
18
+ exports.getReasoningLabel = activityTimeline.getReasoningLabel;
19
+ exports.isStreamingToolPlaceholder = activityTimeline.isStreamingToolPlaceholder;
15
20
  exports.resolveActivityPhase = activityTimeline.resolveActivityPhase;
16
21
  exports.CollapsibleGroup = CollapsibleGroup.CollapsibleGroup;
17
22
  exports.DEFAULT_TOOLKIT_THEME = CollapsibleGroup.DEFAULT_TOOLKIT_THEME;
@@ -22,5 +27,12 @@ exports.SuperGroupingCard = SuperGroupingCard.SuperGroupingCard;
22
27
  exports.SuperGroupingFinalText = SuperGroupingCard.SuperGroupingFinalText;
23
28
  exports.resetRememberedExpansionsForTests = SuperGroupingCard.resetRememberedExpansionsForTests;
24
29
  exports.useActivityExpansion = SuperGroupingCard.useActivityExpansion;
30
+ exports.SuperGroupingTranscript = SuperGroupingTranscript.SuperGroupingTranscript;
31
+ exports.scopeGroupingToSegment = turnSegments.scopeGroupingToSegment;
32
+ exports.splitTurnSegments = turnSegments.splitTurnSegments;
33
+ exports.summarizeSegment = turnSegments.summarizeSegment;
34
+ exports.formatWorkDuration = turnTiming.formatWorkDuration;
35
+ exports.readTurnTiming = turnTiming.readTurnTiming;
36
+ exports.workedDurationMs = turnTiming.workedDurationMs;
25
37
  exports.defaultGetToolGroupKey = toolkitMap.defaultGetToolGroupKey;
26
38
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,12 +1,17 @@
1
1
  /**
2
2
  * `@athenaintel/react/super-grouping` — the grouped ("conversational") view of
3
3
  * an assistant turn: the activity card, its per-toolkit collapsible blocks,
4
- * the timeline derivation behind them, and the tool-based grouping function.
4
+ * the timeline derivation behind them, the tool-based grouping function, and
5
+ * the transcript layout (the agent's sentences in order with the work between
6
+ * them folded, under a "Working for …" header).
5
7
  * A lean entry so hosts with their own thread (Olympus, the Chrome extension)
6
8
  * mount it from source without the SDK's composer stack.
7
9
  */
8
- export { type ActivityItem, type ActivityPhase, type ActivityTimelineOptions, type ActivityToolState, buildActivityTimeline, countActivityTools, excludeFinalTextFromGroups, type FinalTextPart, getActivityItemLabel, getActivitySummary, getActivityToolState, getFinalText, resolveActivityPhase, } from './activity-timeline';
10
+ export { type ActivityItem, type ActivityPhase, type ActivityTimelineOptions, type ActivityToolState, buildActivityTimeline, countActivityTools, excludeFinalTextFromGroups, type FinalTextPart, getActivityItemLabel, getActivitySummary, getReasoningLabel, getActivityToolState, isStreamingToolPlaceholder, getFinalText, resolveActivityPhase, } from './activity-timeline';
9
11
  export { CollapsibleGroup, type CollapsibleGroupProps, DEFAULT_TOOLKIT_THEME, SuperGroupingProvider, TOOLKIT_THEMES, type ToolkitTheme, } from './CollapsibleGroup';
10
12
  export { createToolBasedGroupingFunction, type GroupablePart, type GroupingFunction, type MessagePartGroup, } from './grouping-function';
11
13
  export { resetRememberedExpansionsForTests, SuperGroupingCard, type SuperGroupingCardProps, SuperGroupingFinalText, useActivityExpansion, } from './SuperGroupingCard';
14
+ export { SuperGroupingTranscript, type SuperGroupingTranscriptProps } from './SuperGroupingTranscript';
15
+ export { scopeGroupingToSegment, type SegmentablePart, type SegmentSummary, splitTurnSegments, summarizeSegment, type TurnSegment, } from './turn-segments';
16
+ export { formatWorkDuration, readTurnTiming, type TurnTiming, type TurnTimingSources, workedDurationMs, } from './turn-timing';
12
17
  export { defaultGetToolGroupKey, type GetToolGroupKey, type ToolGroupKeyOptions } from './toolkit-map';
@@ -1,7 +1,10 @@
1
- import { buildActivityTimeline, countActivityTools, excludeFinalTextFromGroups, getActivityItemLabel, getActivitySummary, getActivityToolState, getFinalText, resolveActivityPhase } from "./activity-timeline.js";
1
+ import { buildActivityTimeline, countActivityTools, excludeFinalTextFromGroups, getActivityItemLabel, getActivitySummary, getActivityToolState, getFinalText, getReasoningLabel, isStreamingToolPlaceholder, resolveActivityPhase } from "./activity-timeline.js";
2
2
  import { CollapsibleGroup, DEFAULT_TOOLKIT_THEME, SuperGroupingProvider, TOOLKIT_THEMES } from "./CollapsibleGroup.js";
3
3
  import { createToolBasedGroupingFunction } from "./grouping-function.js";
4
4
  import { SuperGroupingCard, SuperGroupingFinalText, resetRememberedExpansionsForTests, useActivityExpansion } from "./SuperGroupingCard.js";
5
+ import { SuperGroupingTranscript } from "./SuperGroupingTranscript.js";
6
+ import { scopeGroupingToSegment, splitTurnSegments, summarizeSegment } from "./turn-segments.js";
7
+ import { formatWorkDuration, readTurnTiming, workedDurationMs } from "./turn-timing.js";
5
8
  import { defaultGetToolGroupKey } from "./toolkit-map.js";
6
9
  export {
7
10
  CollapsibleGroup,
@@ -9,18 +12,27 @@ export {
9
12
  SuperGroupingCard,
10
13
  SuperGroupingFinalText,
11
14
  SuperGroupingProvider,
15
+ SuperGroupingTranscript,
12
16
  TOOLKIT_THEMES,
13
17
  buildActivityTimeline,
14
18
  countActivityTools,
15
19
  createToolBasedGroupingFunction,
16
20
  defaultGetToolGroupKey,
17
21
  excludeFinalTextFromGroups,
22
+ formatWorkDuration,
18
23
  getActivityItemLabel,
19
24
  getActivitySummary,
20
25
  getActivityToolState,
21
26
  getFinalText,
27
+ getReasoningLabel,
28
+ isStreamingToolPlaceholder,
29
+ readTurnTiming,
22
30
  resetRememberedExpansionsForTests,
23
31
  resolveActivityPhase,
24
- useActivityExpansion
32
+ scopeGroupingToSegment,
33
+ splitTurnSegments,
34
+ summarizeSegment,
35
+ useActivityExpansion,
36
+ workedDurationMs
25
37
  };
26
38
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -29,14 +29,23 @@ function pageTarget(value) {
29
29
  function toTimelineStep({
30
30
  item,
31
31
  index,
32
- resolveToolDisplayName
32
+ resolveToolDisplayName,
33
+ assetTitles
33
34
  }) {
35
+ const id = item.id ?? `${item.kind}-${index}`;
36
+ if (item.kind !== "tool") {
37
+ return { id, verb: activityTimeline.getReasoningLabel(item.text, item.state), state: item.state, kind: item.kind };
38
+ }
39
+ const summary = activityTimeline.summarizeActivityTool(item, resolveToolDisplayName, assetTitles);
34
40
  const step = {
35
- id: item.id ?? `${item.kind}-${index}`,
36
- verb: activityTimeline.getActivityItemLabel(item, resolveToolDisplayName),
37
- state: item.state
41
+ id,
42
+ verb: summary.label,
43
+ ...summary.code ? { code: summary.code } : {},
44
+ ...summary.detail ? { detail: summary.detail } : {},
45
+ ...summary.meta ? { chip: summary.meta } : {},
46
+ state: item.state,
47
+ kind: item.kind
38
48
  };
39
- if (item.kind !== "tool") return step;
40
49
  const args = item.args;
41
50
  if (!args || !item.toolName.startsWith("chrome_")) return step;
42
51
  const tabId = args.tabId ?? args.tab_id;
@@ -1 +1 @@
1
- {"version":3,"file":"timeline-step.cjs","sources":["../../../src/chat/super-grouping/timeline-step.ts"],"sourcesContent":["import { type ActivityItem, getActivityItemLabel } from './activity-timeline';\n\nexport interface TimelineStep {\n id: string;\n verb: string;\n chip?: string;\n state: ActivityItem['state'];\n}\n\nconst COMPUTER_ACTIONS: Record<string, readonly [string, string]> = {\n screenshot: ['Taking screenshot', 'Took screenshot'],\n left_click: ['Clicking', 'Clicked'],\n right_click: ['Right-clicking', 'Right-clicked'],\n double_click: ['Double-clicking', 'Double-clicked'],\n triple_click: ['Triple-clicking', 'Triple-clicked'],\n type: ['Typing', 'Typed'],\n key: ['Pressing keys', 'Pressed keys'],\n scroll: ['Scrolling', 'Scrolled'],\n scroll_to: ['Scrolling to element', 'Scrolled to element'],\n zoom: ['Zooming', 'Zoomed'],\n hover: ['Hovering', 'Hovered'],\n left_click_drag: ['Dragging', 'Dragged'],\n wait: ['Waiting', 'Waited'],\n};\n\n/** Keep credentials, query strings, fragments, and typed input out of summary chips. */\nfunction pageTarget(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n try {\n const url = new URL(value);\n if (url.protocol !== 'http:' && url.protocol !== 'https:') return undefined;\n return url.hostname;\n } catch {\n return undefined;\n }\n}\n\nexport function toTimelineStep({\n item,\n index,\n resolveToolDisplayName,\n}: {\n item: ActivityItem;\n index: number;\n resolveToolDisplayName?: (toolName: string) => string | undefined;\n}): TimelineStep {\n const step: TimelineStep = {\n id: item.id ?? `${item.kind}-${index}`,\n verb: getActivityItemLabel(item, resolveToolDisplayName),\n state: item.state,\n };\n if (item.kind !== 'tool') return step;\n const args = item.args;\n if (!args || !item.toolName.startsWith('chrome_')) return step;\n\n const tabId = args.tabId ?? args.tab_id;\n step.chip = pageTarget(args.url) ?? (typeof tabId === 'number' ? `Tab ${tabId}` : undefined);\n // Only successful/live actions get action-specific tense. Failure, rejection,\n // cancellation and approval copy continues to come from the shared classifier.\n if (item.state !== 'running' && item.state !== 'complete') return step;\n if (item.toolName === 'chrome_computer' && typeof args.action === 'string') {\n const action = COMPUTER_ACTIONS[args.action];\n if (action) step.verb = action[item.state === 'running' ? 0 : 1];\n } else if (item.toolName === 'chrome_navigate') {\n step.verb = item.state === 'running' ? 'Navigating to' : 'Navigated to';\n } else if (item.toolName === 'chrome_batch' && Array.isArray(args.steps)) {\n const count = args.steps.length;\n step.verb = item.state === 'running' ? 'Running Chrome actions' : 'Completed Chrome actions';\n step.chip = `${count} ${count === 1 ? 'action' : 'actions'}`;\n }\n return step;\n}\n\n/** Every unresolved parallel call stays visible even when older settled steps fold away. */\nexport function visibleTimelineSteps({ steps, limit }: { steps: readonly TimelineStep[]; limit: number }) {\n const safeLimit = Number.isFinite(limit) ? Math.max(1, Math.floor(limit)) : 3;\n return steps.filter(\n (step, index) =>\n index >= steps.length - safeLimit || step.state === 'running' || step.state === 'waiting',\n );\n}\n"],"names":["getActivityItemLabel"],"mappings":";;;AASA,MAAM,mBAA8D;AAAA,EAClE,YAAY,CAAC,qBAAqB,iBAAiB;AAAA,EACnD,YAAY,CAAC,YAAY,SAAS;AAAA,EAClC,aAAa,CAAC,kBAAkB,eAAe;AAAA,EAC/C,cAAc,CAAC,mBAAmB,gBAAgB;AAAA,EAClD,cAAc,CAAC,mBAAmB,gBAAgB;AAAA,EAClD,MAAM,CAAC,UAAU,OAAO;AAAA,EACxB,KAAK,CAAC,iBAAiB,cAAc;AAAA,EACrC,QAAQ,CAAC,aAAa,UAAU;AAAA,EAChC,WAAW,CAAC,wBAAwB,qBAAqB;AAAA,EACzD,MAAM,CAAC,WAAW,QAAQ;AAAA,EAC1B,OAAO,CAAC,YAAY,SAAS;AAAA,EAC7B,iBAAiB,CAAC,YAAY,SAAS;AAAA,EACvC,MAAM,CAAC,WAAW,QAAQ;AAC5B;AAGA,SAAS,WAAW,OAAoC;AACtD,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,KAAK;AACzB,QAAI,IAAI,aAAa,WAAW,IAAI,aAAa,SAAU,QAAO;AAClE,WAAO,IAAI;AAAA,EACb,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AACF,GAIiB;AACf,QAAM,OAAqB;AAAA,IACzB,IAAI,KAAK,MAAM,GAAG,KAAK,IAAI,IAAI,KAAK;AAAA,IACpC,MAAMA,iBAAAA,qBAAqB,MAAM,sBAAsB;AAAA,IACvD,OAAO,KAAK;AAAA,EAAA;AAEd,MAAI,KAAK,SAAS,OAAQ,QAAO;AACjC,QAAM,OAAO,KAAK;AAClB,MAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,WAAW,SAAS,EAAG,QAAO;AAE1D,QAAM,QAAQ,KAAK,SAAS,KAAK;AACjC,OAAK,OAAO,WAAW,KAAK,GAAG,MAAM,OAAO,UAAU,WAAW,OAAO,KAAK,KAAK;AAGlF,MAAI,KAAK,UAAU,aAAa,KAAK,UAAU,WAAY,QAAO;AAClE,MAAI,KAAK,aAAa,qBAAqB,OAAO,KAAK,WAAW,UAAU;AAC1E,UAAM,SAAS,iBAAiB,KAAK,MAAM;AAC3C,QAAI,aAAa,OAAO,OAAO,KAAK,UAAU,YAAY,IAAI,CAAC;AAAA,EACjE,WAAW,KAAK,aAAa,mBAAmB;AAC9C,SAAK,OAAO,KAAK,UAAU,YAAY,kBAAkB;AAAA,EAC3D,WAAW,KAAK,aAAa,kBAAkB,MAAM,QAAQ,KAAK,KAAK,GAAG;AACxE,UAAM,QAAQ,KAAK,MAAM;AACzB,SAAK,OAAO,KAAK,UAAU,YAAY,2BAA2B;AAClE,SAAK,OAAO,GAAG,KAAK,IAAI,UAAU,IAAI,WAAW,SAAS;AAAA,EAC5D;AACA,SAAO;AACT;AAGO,SAAS,qBAAqB,EAAE,OAAO,SAA4D;AACxG,QAAM,YAAY,OAAO,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC,IAAI;AAC5E,SAAO,MAAM;AAAA,IACX,CAAC,MAAM,UACL,SAAS,MAAM,SAAS,aAAa,KAAK,UAAU,aAAa,KAAK,UAAU;AAAA,EAAA;AAEtF;;;"}
1
+ {"version":3,"file":"timeline-step.cjs","sources":["../../../src/chat/super-grouping/timeline-step.ts"],"sourcesContent":["import { type ActivityItem, getReasoningLabel, summarizeActivityTool } from './activity-timeline';\n\nexport interface TimelineStep {\n id: string;\n /** The row's line (\"Ran git status\"); `code` marks the literal part of it. */\n verb: string;\n /** The span of `verb` that is literal code (a command, a file name, a pattern). */\n code?: string;\n /** Longer form for the row's tooltip (the full path, the whole command line). */\n detail?: string;\n /** A short chip after the line (\"+4 −1\", \"on jevin-box\", \"Tab 7\"). */\n chip?: string;\n state: ActivityItem['state'];\n kind: ActivityItem['kind'];\n}\n\nconst COMPUTER_ACTIONS: Record<string, readonly [string, string]> = {\n screenshot: ['Taking screenshot', 'Took screenshot'],\n left_click: ['Clicking', 'Clicked'],\n right_click: ['Right-clicking', 'Right-clicked'],\n double_click: ['Double-clicking', 'Double-clicked'],\n triple_click: ['Triple-clicking', 'Triple-clicked'],\n type: ['Typing', 'Typed'],\n key: ['Pressing keys', 'Pressed keys'],\n scroll: ['Scrolling', 'Scrolled'],\n scroll_to: ['Scrolling to element', 'Scrolled to element'],\n zoom: ['Zooming', 'Zoomed'],\n hover: ['Hovering', 'Hovered'],\n left_click_drag: ['Dragging', 'Dragged'],\n wait: ['Waiting', 'Waited'],\n};\n\n/** Keep credentials, query strings, fragments, and typed input out of summary chips. */\nfunction pageTarget(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n try {\n const url = new URL(value);\n if (url.protocol !== 'http:' && url.protocol !== 'https:') return undefined;\n return url.hostname;\n } catch {\n return undefined;\n }\n}\n\nexport function toTimelineStep({\n item,\n index,\n resolveToolDisplayName,\n assetTitles,\n}: {\n item: ActivityItem;\n index: number;\n resolveToolDisplayName?: (toolName: string) => string | undefined;\n /** Titles for asset ids earlier results in the turn named (see `collectAssetTitles`). */\n assetTitles?: ReadonlyMap<string, string>;\n}): TimelineStep {\n const id = item.id ?? `${item.kind}-${index}`;\n if (item.kind !== 'tool') {\n return { id, verb: getReasoningLabel(item.text, item.state), state: item.state, kind: item.kind };\n }\n const summary = summarizeActivityTool(item, resolveToolDisplayName, assetTitles);\n const step: TimelineStep = {\n id,\n verb: summary.label,\n ...(summary.code ? { code: summary.code } : {}),\n ...(summary.detail ? { detail: summary.detail } : {}),\n ...(summary.meta ? { chip: summary.meta } : {}),\n state: item.state,\n kind: item.kind,\n };\n const args = item.args;\n if (!args || !item.toolName.startsWith('chrome_')) return step;\n\n const tabId = args.tabId ?? args.tab_id;\n step.chip = pageTarget(args.url) ?? (typeof tabId === 'number' ? `Tab ${tabId}` : undefined);\n // Only successful/live actions get action-specific tense. Failure, rejection,\n // cancellation and approval copy continues to come from the shared classifier.\n if (item.state !== 'running' && item.state !== 'complete') return step;\n if (item.toolName === 'chrome_computer' && typeof args.action === 'string') {\n const action = COMPUTER_ACTIONS[args.action];\n if (action) step.verb = action[item.state === 'running' ? 0 : 1];\n } else if (item.toolName === 'chrome_navigate') {\n step.verb = item.state === 'running' ? 'Navigating to' : 'Navigated to';\n } else if (item.toolName === 'chrome_batch' && Array.isArray(args.steps)) {\n const count = args.steps.length;\n step.verb = item.state === 'running' ? 'Running Chrome actions' : 'Completed Chrome actions';\n step.chip = `${count} ${count === 1 ? 'action' : 'actions'}`;\n }\n return step;\n}\n\n/** Every unresolved parallel call stays visible even when older settled steps fold away. */\nexport function visibleTimelineSteps({ steps, limit }: { steps: readonly TimelineStep[]; limit: number }) {\n const safeLimit = Number.isFinite(limit) ? Math.max(1, Math.floor(limit)) : 3;\n return steps.filter(\n (step, index) =>\n index >= steps.length - safeLimit || step.state === 'running' || step.state === 'waiting',\n );\n}\n"],"names":["getReasoningLabel","summarizeActivityTool"],"mappings":"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"}
@@ -1,14 +1,23 @@
1
1
  import { type ActivityItem } from './activity-timeline';
2
2
  export interface TimelineStep {
3
3
  id: string;
4
+ /** The row's line ("Ran git status"); `code` marks the literal part of it. */
4
5
  verb: string;
6
+ /** The span of `verb` that is literal code (a command, a file name, a pattern). */
7
+ code?: string;
8
+ /** Longer form for the row's tooltip (the full path, the whole command line). */
9
+ detail?: string;
10
+ /** A short chip after the line ("+4 −1", "on jevin-box", "Tab 7"). */
5
11
  chip?: string;
6
12
  state: ActivityItem['state'];
13
+ kind: ActivityItem['kind'];
7
14
  }
8
- export declare function toTimelineStep({ item, index, resolveToolDisplayName, }: {
15
+ export declare function toTimelineStep({ item, index, resolveToolDisplayName, assetTitles, }: {
9
16
  item: ActivityItem;
10
17
  index: number;
11
18
  resolveToolDisplayName?: (toolName: string) => string | undefined;
19
+ /** Titles for asset ids earlier results in the turn named (see `collectAssetTitles`). */
20
+ assetTitles?: ReadonlyMap<string, string>;
12
21
  }): TimelineStep;
13
22
  /** Every unresolved parallel call stays visible even when older settled steps fold away. */
14
23
  export declare function visibleTimelineSteps({ steps, limit }: {
@@ -1,4 +1,4 @@
1
- import { getActivityItemLabel } from "./activity-timeline.js";
1
+ import { getReasoningLabel, summarizeActivityTool } from "./activity-timeline.js";
2
2
  const COMPUTER_ACTIONS = {
3
3
  screenshot: ["Taking screenshot", "Took screenshot"],
4
4
  left_click: ["Clicking", "Clicked"],
@@ -27,14 +27,23 @@ function pageTarget(value) {
27
27
  function toTimelineStep({
28
28
  item,
29
29
  index,
30
- resolveToolDisplayName
30
+ resolveToolDisplayName,
31
+ assetTitles
31
32
  }) {
33
+ const id = item.id ?? `${item.kind}-${index}`;
34
+ if (item.kind !== "tool") {
35
+ return { id, verb: getReasoningLabel(item.text, item.state), state: item.state, kind: item.kind };
36
+ }
37
+ const summary = summarizeActivityTool(item, resolveToolDisplayName, assetTitles);
32
38
  const step = {
33
- id: item.id ?? `${item.kind}-${index}`,
34
- verb: getActivityItemLabel(item, resolveToolDisplayName),
35
- state: item.state
39
+ id,
40
+ verb: summary.label,
41
+ ...summary.code ? { code: summary.code } : {},
42
+ ...summary.detail ? { detail: summary.detail } : {},
43
+ ...summary.meta ? { chip: summary.meta } : {},
44
+ state: item.state,
45
+ kind: item.kind
36
46
  };
37
- if (item.kind !== "tool") return step;
38
47
  const args = item.args;
39
48
  if (!args || !item.toolName.startsWith("chrome_")) return step;
40
49
  const tabId = args.tabId ?? args.tab_id;
@@ -1 +1 @@
1
- {"version":3,"file":"timeline-step.js","sources":["../../../src/chat/super-grouping/timeline-step.ts"],"sourcesContent":["import { type ActivityItem, getActivityItemLabel } from './activity-timeline';\n\nexport interface TimelineStep {\n id: string;\n verb: string;\n chip?: string;\n state: ActivityItem['state'];\n}\n\nconst COMPUTER_ACTIONS: Record<string, readonly [string, string]> = {\n screenshot: ['Taking screenshot', 'Took screenshot'],\n left_click: ['Clicking', 'Clicked'],\n right_click: ['Right-clicking', 'Right-clicked'],\n double_click: ['Double-clicking', 'Double-clicked'],\n triple_click: ['Triple-clicking', 'Triple-clicked'],\n type: ['Typing', 'Typed'],\n key: ['Pressing keys', 'Pressed keys'],\n scroll: ['Scrolling', 'Scrolled'],\n scroll_to: ['Scrolling to element', 'Scrolled to element'],\n zoom: ['Zooming', 'Zoomed'],\n hover: ['Hovering', 'Hovered'],\n left_click_drag: ['Dragging', 'Dragged'],\n wait: ['Waiting', 'Waited'],\n};\n\n/** Keep credentials, query strings, fragments, and typed input out of summary chips. */\nfunction pageTarget(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n try {\n const url = new URL(value);\n if (url.protocol !== 'http:' && url.protocol !== 'https:') return undefined;\n return url.hostname;\n } catch {\n return undefined;\n }\n}\n\nexport function toTimelineStep({\n item,\n index,\n resolveToolDisplayName,\n}: {\n item: ActivityItem;\n index: number;\n resolveToolDisplayName?: (toolName: string) => string | undefined;\n}): TimelineStep {\n const step: TimelineStep = {\n id: item.id ?? `${item.kind}-${index}`,\n verb: getActivityItemLabel(item, resolveToolDisplayName),\n state: item.state,\n };\n if (item.kind !== 'tool') return step;\n const args = item.args;\n if (!args || !item.toolName.startsWith('chrome_')) return step;\n\n const tabId = args.tabId ?? args.tab_id;\n step.chip = pageTarget(args.url) ?? (typeof tabId === 'number' ? `Tab ${tabId}` : undefined);\n // Only successful/live actions get action-specific tense. Failure, rejection,\n // cancellation and approval copy continues to come from the shared classifier.\n if (item.state !== 'running' && item.state !== 'complete') return step;\n if (item.toolName === 'chrome_computer' && typeof args.action === 'string') {\n const action = COMPUTER_ACTIONS[args.action];\n if (action) step.verb = action[item.state === 'running' ? 0 : 1];\n } else if (item.toolName === 'chrome_navigate') {\n step.verb = item.state === 'running' ? 'Navigating to' : 'Navigated to';\n } else if (item.toolName === 'chrome_batch' && Array.isArray(args.steps)) {\n const count = args.steps.length;\n step.verb = item.state === 'running' ? 'Running Chrome actions' : 'Completed Chrome actions';\n step.chip = `${count} ${count === 1 ? 'action' : 'actions'}`;\n }\n return step;\n}\n\n/** Every unresolved parallel call stays visible even when older settled steps fold away. */\nexport function visibleTimelineSteps({ steps, limit }: { steps: readonly TimelineStep[]; limit: number }) {\n const safeLimit = Number.isFinite(limit) ? Math.max(1, Math.floor(limit)) : 3;\n return steps.filter(\n (step, index) =>\n index >= steps.length - safeLimit || step.state === 'running' || step.state === 'waiting',\n );\n}\n"],"names":[],"mappings":";AASA,MAAM,mBAA8D;AAAA,EAClE,YAAY,CAAC,qBAAqB,iBAAiB;AAAA,EACnD,YAAY,CAAC,YAAY,SAAS;AAAA,EAClC,aAAa,CAAC,kBAAkB,eAAe;AAAA,EAC/C,cAAc,CAAC,mBAAmB,gBAAgB;AAAA,EAClD,cAAc,CAAC,mBAAmB,gBAAgB;AAAA,EAClD,MAAM,CAAC,UAAU,OAAO;AAAA,EACxB,KAAK,CAAC,iBAAiB,cAAc;AAAA,EACrC,QAAQ,CAAC,aAAa,UAAU;AAAA,EAChC,WAAW,CAAC,wBAAwB,qBAAqB;AAAA,EACzD,MAAM,CAAC,WAAW,QAAQ;AAAA,EAC1B,OAAO,CAAC,YAAY,SAAS;AAAA,EAC7B,iBAAiB,CAAC,YAAY,SAAS;AAAA,EACvC,MAAM,CAAC,WAAW,QAAQ;AAC5B;AAGA,SAAS,WAAW,OAAoC;AACtD,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,KAAK;AACzB,QAAI,IAAI,aAAa,WAAW,IAAI,aAAa,SAAU,QAAO;AAClE,WAAO,IAAI;AAAA,EACb,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AACF,GAIiB;AACf,QAAM,OAAqB;AAAA,IACzB,IAAI,KAAK,MAAM,GAAG,KAAK,IAAI,IAAI,KAAK;AAAA,IACpC,MAAM,qBAAqB,MAAM,sBAAsB;AAAA,IACvD,OAAO,KAAK;AAAA,EAAA;AAEd,MAAI,KAAK,SAAS,OAAQ,QAAO;AACjC,QAAM,OAAO,KAAK;AAClB,MAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,WAAW,SAAS,EAAG,QAAO;AAE1D,QAAM,QAAQ,KAAK,SAAS,KAAK;AACjC,OAAK,OAAO,WAAW,KAAK,GAAG,MAAM,OAAO,UAAU,WAAW,OAAO,KAAK,KAAK;AAGlF,MAAI,KAAK,UAAU,aAAa,KAAK,UAAU,WAAY,QAAO;AAClE,MAAI,KAAK,aAAa,qBAAqB,OAAO,KAAK,WAAW,UAAU;AAC1E,UAAM,SAAS,iBAAiB,KAAK,MAAM;AAC3C,QAAI,aAAa,OAAO,OAAO,KAAK,UAAU,YAAY,IAAI,CAAC;AAAA,EACjE,WAAW,KAAK,aAAa,mBAAmB;AAC9C,SAAK,OAAO,KAAK,UAAU,YAAY,kBAAkB;AAAA,EAC3D,WAAW,KAAK,aAAa,kBAAkB,MAAM,QAAQ,KAAK,KAAK,GAAG;AACxE,UAAM,QAAQ,KAAK,MAAM;AACzB,SAAK,OAAO,KAAK,UAAU,YAAY,2BAA2B;AAClE,SAAK,OAAO,GAAG,KAAK,IAAI,UAAU,IAAI,WAAW,SAAS;AAAA,EAC5D;AACA,SAAO;AACT;AAGO,SAAS,qBAAqB,EAAE,OAAO,SAA4D;AACxG,QAAM,YAAY,OAAO,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC,IAAI;AAC5E,SAAO,MAAM;AAAA,IACX,CAAC,MAAM,UACL,SAAS,MAAM,SAAS,aAAa,KAAK,UAAU,aAAa,KAAK,UAAU;AAAA,EAAA;AAEtF;"}
1
+ {"version":3,"file":"timeline-step.js","sources":["../../../src/chat/super-grouping/timeline-step.ts"],"sourcesContent":["import { type ActivityItem, getReasoningLabel, summarizeActivityTool } from './activity-timeline';\n\nexport interface TimelineStep {\n id: string;\n /** The row's line (\"Ran git status\"); `code` marks the literal part of it. */\n verb: string;\n /** The span of `verb` that is literal code (a command, a file name, a pattern). */\n code?: string;\n /** Longer form for the row's tooltip (the full path, the whole command line). */\n detail?: string;\n /** A short chip after the line (\"+4 −1\", \"on jevin-box\", \"Tab 7\"). */\n chip?: string;\n state: ActivityItem['state'];\n kind: ActivityItem['kind'];\n}\n\nconst COMPUTER_ACTIONS: Record<string, readonly [string, string]> = {\n screenshot: ['Taking screenshot', 'Took screenshot'],\n left_click: ['Clicking', 'Clicked'],\n right_click: ['Right-clicking', 'Right-clicked'],\n double_click: ['Double-clicking', 'Double-clicked'],\n triple_click: ['Triple-clicking', 'Triple-clicked'],\n type: ['Typing', 'Typed'],\n key: ['Pressing keys', 'Pressed keys'],\n scroll: ['Scrolling', 'Scrolled'],\n scroll_to: ['Scrolling to element', 'Scrolled to element'],\n zoom: ['Zooming', 'Zoomed'],\n hover: ['Hovering', 'Hovered'],\n left_click_drag: ['Dragging', 'Dragged'],\n wait: ['Waiting', 'Waited'],\n};\n\n/** Keep credentials, query strings, fragments, and typed input out of summary chips. */\nfunction pageTarget(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n try {\n const url = new URL(value);\n if (url.protocol !== 'http:' && url.protocol !== 'https:') return undefined;\n return url.hostname;\n } catch {\n return undefined;\n }\n}\n\nexport function toTimelineStep({\n item,\n index,\n resolveToolDisplayName,\n assetTitles,\n}: {\n item: ActivityItem;\n index: number;\n resolveToolDisplayName?: (toolName: string) => string | undefined;\n /** Titles for asset ids earlier results in the turn named (see `collectAssetTitles`). */\n assetTitles?: ReadonlyMap<string, string>;\n}): TimelineStep {\n const id = item.id ?? `${item.kind}-${index}`;\n if (item.kind !== 'tool') {\n return { id, verb: getReasoningLabel(item.text, item.state), state: item.state, kind: item.kind };\n }\n const summary = summarizeActivityTool(item, resolveToolDisplayName, assetTitles);\n const step: TimelineStep = {\n id,\n verb: summary.label,\n ...(summary.code ? { code: summary.code } : {}),\n ...(summary.detail ? { detail: summary.detail } : {}),\n ...(summary.meta ? { chip: summary.meta } : {}),\n state: item.state,\n kind: item.kind,\n };\n const args = item.args;\n if (!args || !item.toolName.startsWith('chrome_')) return step;\n\n const tabId = args.tabId ?? args.tab_id;\n step.chip = pageTarget(args.url) ?? (typeof tabId === 'number' ? `Tab ${tabId}` : undefined);\n // Only successful/live actions get action-specific tense. Failure, rejection,\n // cancellation and approval copy continues to come from the shared classifier.\n if (item.state !== 'running' && item.state !== 'complete') return step;\n if (item.toolName === 'chrome_computer' && typeof args.action === 'string') {\n const action = COMPUTER_ACTIONS[args.action];\n if (action) step.verb = action[item.state === 'running' ? 0 : 1];\n } else if (item.toolName === 'chrome_navigate') {\n step.verb = item.state === 'running' ? 'Navigating to' : 'Navigated to';\n } else if (item.toolName === 'chrome_batch' && Array.isArray(args.steps)) {\n const count = args.steps.length;\n step.verb = item.state === 'running' ? 'Running Chrome actions' : 'Completed Chrome actions';\n step.chip = `${count} ${count === 1 ? 'action' : 'actions'}`;\n }\n return step;\n}\n\n/** Every unresolved parallel call stays visible even when older settled steps fold away. */\nexport function visibleTimelineSteps({ steps, limit }: { steps: readonly TimelineStep[]; limit: number }) {\n const safeLimit = Number.isFinite(limit) ? Math.max(1, Math.floor(limit)) : 3;\n return steps.filter(\n (step, index) =>\n index >= steps.length - safeLimit || step.state === 'running' || step.state === 'waiting',\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ function lastToolCallIndex(content) {
4
+ var _a;
5
+ for (let index = content.length - 1; index >= 0; index -= 1) {
6
+ if (((_a = content[index]) == null ? void 0 : _a.type) === "tool-call") return index;
7
+ }
8
+ return -1;
9
+ }
10
+ function splitTurnSegments(content) {
11
+ if (!(content == null ? void 0 : content.length)) return [];
12
+ const answerStart = lastToolCallIndex(content) + 1;
13
+ const segments = [];
14
+ let lastActivity = null;
15
+ for (let index = 0; index < content.length; index += 1) {
16
+ const part = content[index];
17
+ if (!part) continue;
18
+ if (part.type === "text") {
19
+ if (index >= answerStart) continue;
20
+ const text = typeof part.text === "string" ? part.text : "";
21
+ if (text.trim() === "") continue;
22
+ segments.push({ kind: "prose", key: `prose-${index}`, partIndex: index, text });
23
+ continue;
24
+ }
25
+ const previous = segments.at(-1);
26
+ if (index < answerStart && (previous == null ? void 0 : previous.kind) === "activity") {
27
+ previous.partIndices.push(index);
28
+ continue;
29
+ }
30
+ if (index >= answerStart && lastActivity) {
31
+ lastActivity.partIndices.push(index);
32
+ continue;
33
+ }
34
+ lastActivity = { kind: "activity", key: `activity-${index}`, partIndices: [index] };
35
+ segments.push(lastActivity);
36
+ }
37
+ return segments;
38
+ }
39
+ function scopeGroupingToSegment(grouping, partIndices) {
40
+ const indices = new Set(partIndices);
41
+ return (parts) => grouping(parts).map((group) => ({
42
+ ...group,
43
+ indices: group.indices.filter((index) => {
44
+ var _a;
45
+ return indices.has(index) && ((_a = parts[index]) == null ? void 0 : _a.type) !== "text";
46
+ })
47
+ })).filter((group) => group.indices.length > 0);
48
+ }
49
+ function summarizeSegment(steps) {
50
+ const toolSteps = steps.filter((step) => step.kind === "tool");
51
+ const running = steps.filter((step) => step.state === "running");
52
+ const waiting = steps.find((step) => step.state === "waiting");
53
+ if (waiting) {
54
+ return { step: waiting, label: waiting.verb, meta: void 0, phase: "waiting" };
55
+ }
56
+ if (running.length > 0) {
57
+ const current = running.at(-1);
58
+ const doneTools = toolSteps.filter((step) => step.state !== "running").length;
59
+ return {
60
+ step: current,
61
+ label: (current == null ? void 0 : current.verb) ?? "Working",
62
+ meta: running.length > 1 ? `${running.length} in progress` : doneTools > 0 ? `${doneTools} done` : void 0,
63
+ phase: "running"
64
+ };
65
+ }
66
+ const primary = toolSteps.at(-1) ?? steps.at(-1);
67
+ const earlierFailures = toolSteps.filter((step) => step !== primary && step.state === "error").length;
68
+ const meta = [
69
+ toolSteps.length > 1 ? `+${toolSteps.length - 1} more` : null,
70
+ earlierFailures > 0 ? `${earlierFailures} failed` : null
71
+ ].filter(Boolean).join(" · ");
72
+ return {
73
+ step: primary,
74
+ label: (primary == null ? void 0 : primary.verb) ?? "Thought through the next step",
75
+ meta: meta || void 0,
76
+ phase: (primary == null ? void 0 : primary.state) === "error" ? "error" : "complete"
77
+ };
78
+ }
79
+ exports.scopeGroupingToSegment = scopeGroupingToSegment;
80
+ exports.splitTurnSegments = splitTurnSegments;
81
+ exports.summarizeSegment = summarizeSegment;
82
+ //# sourceMappingURL=turn-segments.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-segments.cjs","sources":["../../../src/chat/super-grouping/turn-segments.ts"],"sourcesContent":["/**\n * The grouped transcript's layout of one assistant turn: the agent's own\n * sentences in the order it wrote them, with the work between them (tool calls\n * and reasoning) folded into collapsed activity segments. Pure functions over\n * assistant-ui message parts; `SuperGroupingTranscript` renders them.\n *\n * Text is never folded away. The text after the final tool call is the turn's\n * answer and renders below the transcript (`SuperGroupingFinalText`, the same\n * read `getFinalText` makes), so it is left out of the segments here: every\n * text part renders exactly once, either as prose here or as the answer there.\n */\nimport type { ActivityItem, ActivityPhase } from './activity-timeline';\nimport type { GroupingFunction } from './grouping-function';\nimport type { TimelineStep } from './timeline-step';\n\n/** The part shape segmentation needs; assistant-ui's `ThreadAssistantMessagePart` satisfies it. */\nexport type SegmentablePart = { readonly type: string; readonly text?: string };\n\nexport type TurnSegment =\n | {\n kind: 'prose';\n /** Stable across streaming: parts only ever append. */\n key: string;\n partIndex: number;\n text: string;\n }\n | {\n kind: 'activity';\n key: string;\n /** The tool-call, reasoning and other non-text parts this segment folds, in order. */\n partIndices: number[];\n };\n\nfunction lastToolCallIndex(content: readonly SegmentablePart[]): number {\n for (let index = content.length - 1; index >= 0; index -= 1) {\n if (content[index]?.type === 'tool-call') return index;\n }\n return -1;\n}\n\n/**\n * Split a turn into prose and activity segments.\n *\n * - Before the last tool call, each non-blank text part is a prose segment and\n * every run of other parts between them is one activity segment.\n * - After the last tool call, text is the answer (left to the final-text\n * renderer), and any other part — a thought streaming before the next\n * sentence — joins the last activity segment, so it reads as part of the\n * work that led to the answer.\n */\nexport function splitTurnSegments(content: readonly SegmentablePart[] | undefined): TurnSegment[] {\n if (!content?.length) return [];\n const answerStart = lastToolCallIndex(content) + 1;\n const segments: TurnSegment[] = [];\n let lastActivity: Extract<TurnSegment, { kind: 'activity' }> | null = null;\n\n for (let index = 0; index < content.length; index += 1) {\n const part = content[index];\n if (!part) continue;\n if (part.type === 'text') {\n if (index >= answerStart) continue;\n const text = typeof part.text === 'string' ? part.text : '';\n if (text.trim() === '') continue;\n segments.push({ kind: 'prose', key: `prose-${index}`, partIndex: index, text });\n continue;\n }\n const previous = segments.at(-1);\n if (index < answerStart && previous?.kind === 'activity') {\n previous.partIndices.push(index);\n continue;\n }\n if (index >= answerStart && lastActivity) {\n lastActivity.partIndices.push(index);\n continue;\n }\n lastActivity = { kind: 'activity', key: `activity-${index}`, partIndices: [index] };\n segments.push(lastActivity);\n }\n return segments;\n}\n\n/** The timeline items whose parts a segment folds, in stream order. */\nexport function segmentItems(\n segment: Extract<TurnSegment, { kind: 'activity' }>,\n timeline: readonly ActivityItem[],\n): ActivityItem[] {\n const indices = new Set(segment.partIndices);\n return timeline.filter((item) => item.partIndex !== undefined && indices.has(item.partIndex));\n}\n\n/**\n * The details-panel grouping for one segment: the host's grouping restricted\n * to the segment's parts, with every text part dropped (prose renders in the\n * transcript, the answer below it) and any group left empty removed.\n */\nexport function scopeGroupingToSegment(\n grouping: GroupingFunction,\n partIndices: readonly number[],\n): GroupingFunction {\n const indices = new Set(partIndices);\n return (parts) =>\n grouping(parts)\n .map((group) => ({\n ...group,\n indices: group.indices.filter((index) => indices.has(index) && parts[index]?.type !== 'text'),\n }))\n .filter((group) => group.indices.length > 0);\n}\n\nexport interface SegmentSummary {\n /** The collapsed row's line: the step in progress, else the segment's last tool step. */\n step: TimelineStep | undefined;\n /** \"Waiting for your input\" when a step waits on the person. */\n label: string;\n /** \"+2 more\" / \"2 in progress\" beside the line. */\n meta: string | undefined;\n phase: ActivityPhase;\n}\n\n/**\n * What a collapsed activity segment says: the step in progress while one runs\n * (\"Running git fetch\", with \"2 done\" or \"2 in progress\" for parallel calls), the step\n * waiting on the person, else the last tool step it took (\"Ran git log -1\",\n * \"+2 more\", and how many earlier steps failed). The row reads as failed only\n * when that last step did. A segment that only thought reads as its thought.\n */\nexport function summarizeSegment(steps: readonly TimelineStep[]): SegmentSummary {\n const toolSteps = steps.filter((step) => step.kind === 'tool');\n const running = steps.filter((step) => step.state === 'running');\n const waiting = steps.find((step) => step.state === 'waiting');\n\n if (waiting) {\n return { step: waiting, label: waiting.verb, meta: undefined, phase: 'waiting' };\n }\n if (running.length > 0) {\n const current = running.at(-1);\n const doneTools = toolSteps.filter((step) => step.state !== 'running').length;\n return {\n step: current,\n label: current?.verb ?? 'Working',\n meta:\n running.length > 1\n ? `${running.length} in progress`\n : doneTools > 0\n ? `${doneTools} done`\n : undefined,\n phase: 'running',\n };\n }\n const primary = toolSteps.at(-1) ?? steps.at(-1);\n const earlierFailures = toolSteps.filter((step) => step !== primary && step.state === 'error').length;\n const meta = [\n toolSteps.length > 1 ? `+${toolSteps.length - 1} more` : null,\n earlierFailures > 0 ? `${earlierFailures} failed` : null,\n ]\n .filter(Boolean)\n .join(' · ');\n return {\n step: primary,\n label: primary?.verb ?? 'Thought through the next step',\n meta: meta || undefined,\n phase: primary?.state === 'error' ? 'error' : 'complete',\n };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * The grouped transcript's layout of one assistant turn: the agent's own
3
+ * sentences in the order it wrote them, with the work between them (tool calls
4
+ * and reasoning) folded into collapsed activity segments. Pure functions over
5
+ * assistant-ui message parts; `SuperGroupingTranscript` renders them.
6
+ *
7
+ * Text is never folded away. The text after the final tool call is the turn's
8
+ * answer and renders below the transcript (`SuperGroupingFinalText`, the same
9
+ * read `getFinalText` makes), so it is left out of the segments here: every
10
+ * text part renders exactly once, either as prose here or as the answer there.
11
+ */
12
+ import type { ActivityItem, ActivityPhase } from './activity-timeline';
13
+ import type { GroupingFunction } from './grouping-function';
14
+ import type { TimelineStep } from './timeline-step';
15
+ /** The part shape segmentation needs; assistant-ui's `ThreadAssistantMessagePart` satisfies it. */
16
+ export type SegmentablePart = {
17
+ readonly type: string;
18
+ readonly text?: string;
19
+ };
20
+ export type TurnSegment = {
21
+ kind: 'prose';
22
+ /** Stable across streaming: parts only ever append. */
23
+ key: string;
24
+ partIndex: number;
25
+ text: string;
26
+ } | {
27
+ kind: 'activity';
28
+ key: string;
29
+ /** The tool-call, reasoning and other non-text parts this segment folds, in order. */
30
+ partIndices: number[];
31
+ };
32
+ /**
33
+ * Split a turn into prose and activity segments.
34
+ *
35
+ * - Before the last tool call, each non-blank text part is a prose segment and
36
+ * every run of other parts between them is one activity segment.
37
+ * - After the last tool call, text is the answer (left to the final-text
38
+ * renderer), and any other part — a thought streaming before the next
39
+ * sentence — joins the last activity segment, so it reads as part of the
40
+ * work that led to the answer.
41
+ */
42
+ export declare function splitTurnSegments(content: readonly SegmentablePart[] | undefined): TurnSegment[];
43
+ /** The timeline items whose parts a segment folds, in stream order. */
44
+ export declare function segmentItems(segment: Extract<TurnSegment, {
45
+ kind: 'activity';
46
+ }>, timeline: readonly ActivityItem[]): ActivityItem[];
47
+ /**
48
+ * The details-panel grouping for one segment: the host's grouping restricted
49
+ * to the segment's parts, with every text part dropped (prose renders in the
50
+ * transcript, the answer below it) and any group left empty removed.
51
+ */
52
+ export declare function scopeGroupingToSegment(grouping: GroupingFunction, partIndices: readonly number[]): GroupingFunction;
53
+ export interface SegmentSummary {
54
+ /** The collapsed row's line: the step in progress, else the segment's last tool step. */
55
+ step: TimelineStep | undefined;
56
+ /** "Waiting for your input" when a step waits on the person. */
57
+ label: string;
58
+ /** "+2 more" / "2 in progress" beside the line. */
59
+ meta: string | undefined;
60
+ phase: ActivityPhase;
61
+ }
62
+ /**
63
+ * What a collapsed activity segment says: the step in progress while one runs
64
+ * ("Running git fetch", with "2 done" or "2 in progress" for parallel calls), the step
65
+ * waiting on the person, else the last tool step it took ("Ran git log -1",
66
+ * "+2 more", and how many earlier steps failed). The row reads as failed only
67
+ * when that last step did. A segment that only thought reads as its thought.
68
+ */
69
+ export declare function summarizeSegment(steps: readonly TimelineStep[]): SegmentSummary;
@@ -0,0 +1,82 @@
1
+ function lastToolCallIndex(content) {
2
+ var _a;
3
+ for (let index = content.length - 1; index >= 0; index -= 1) {
4
+ if (((_a = content[index]) == null ? void 0 : _a.type) === "tool-call") return index;
5
+ }
6
+ return -1;
7
+ }
8
+ function splitTurnSegments(content) {
9
+ if (!(content == null ? void 0 : content.length)) return [];
10
+ const answerStart = lastToolCallIndex(content) + 1;
11
+ const segments = [];
12
+ let lastActivity = null;
13
+ for (let index = 0; index < content.length; index += 1) {
14
+ const part = content[index];
15
+ if (!part) continue;
16
+ if (part.type === "text") {
17
+ if (index >= answerStart) continue;
18
+ const text = typeof part.text === "string" ? part.text : "";
19
+ if (text.trim() === "") continue;
20
+ segments.push({ kind: "prose", key: `prose-${index}`, partIndex: index, text });
21
+ continue;
22
+ }
23
+ const previous = segments.at(-1);
24
+ if (index < answerStart && (previous == null ? void 0 : previous.kind) === "activity") {
25
+ previous.partIndices.push(index);
26
+ continue;
27
+ }
28
+ if (index >= answerStart && lastActivity) {
29
+ lastActivity.partIndices.push(index);
30
+ continue;
31
+ }
32
+ lastActivity = { kind: "activity", key: `activity-${index}`, partIndices: [index] };
33
+ segments.push(lastActivity);
34
+ }
35
+ return segments;
36
+ }
37
+ function scopeGroupingToSegment(grouping, partIndices) {
38
+ const indices = new Set(partIndices);
39
+ return (parts) => grouping(parts).map((group) => ({
40
+ ...group,
41
+ indices: group.indices.filter((index) => {
42
+ var _a;
43
+ return indices.has(index) && ((_a = parts[index]) == null ? void 0 : _a.type) !== "text";
44
+ })
45
+ })).filter((group) => group.indices.length > 0);
46
+ }
47
+ function summarizeSegment(steps) {
48
+ const toolSteps = steps.filter((step) => step.kind === "tool");
49
+ const running = steps.filter((step) => step.state === "running");
50
+ const waiting = steps.find((step) => step.state === "waiting");
51
+ if (waiting) {
52
+ return { step: waiting, label: waiting.verb, meta: void 0, phase: "waiting" };
53
+ }
54
+ if (running.length > 0) {
55
+ const current = running.at(-1);
56
+ const doneTools = toolSteps.filter((step) => step.state !== "running").length;
57
+ return {
58
+ step: current,
59
+ label: (current == null ? void 0 : current.verb) ?? "Working",
60
+ meta: running.length > 1 ? `${running.length} in progress` : doneTools > 0 ? `${doneTools} done` : void 0,
61
+ phase: "running"
62
+ };
63
+ }
64
+ const primary = toolSteps.at(-1) ?? steps.at(-1);
65
+ const earlierFailures = toolSteps.filter((step) => step !== primary && step.state === "error").length;
66
+ const meta = [
67
+ toolSteps.length > 1 ? `+${toolSteps.length - 1} more` : null,
68
+ earlierFailures > 0 ? `${earlierFailures} failed` : null
69
+ ].filter(Boolean).join(" · ");
70
+ return {
71
+ step: primary,
72
+ label: (primary == null ? void 0 : primary.verb) ?? "Thought through the next step",
73
+ meta: meta || void 0,
74
+ phase: (primary == null ? void 0 : primary.state) === "error" ? "error" : "complete"
75
+ };
76
+ }
77
+ export {
78
+ scopeGroupingToSegment,
79
+ splitTurnSegments,
80
+ summarizeSegment
81
+ };
82
+ //# sourceMappingURL=turn-segments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-segments.js","sources":["../../../src/chat/super-grouping/turn-segments.ts"],"sourcesContent":["/**\n * The grouped transcript's layout of one assistant turn: the agent's own\n * sentences in the order it wrote them, with the work between them (tool calls\n * and reasoning) folded into collapsed activity segments. Pure functions over\n * assistant-ui message parts; `SuperGroupingTranscript` renders them.\n *\n * Text is never folded away. The text after the final tool call is the turn's\n * answer and renders below the transcript (`SuperGroupingFinalText`, the same\n * read `getFinalText` makes), so it is left out of the segments here: every\n * text part renders exactly once, either as prose here or as the answer there.\n */\nimport type { ActivityItem, ActivityPhase } from './activity-timeline';\nimport type { GroupingFunction } from './grouping-function';\nimport type { TimelineStep } from './timeline-step';\n\n/** The part shape segmentation needs; assistant-ui's `ThreadAssistantMessagePart` satisfies it. */\nexport type SegmentablePart = { readonly type: string; readonly text?: string };\n\nexport type TurnSegment =\n | {\n kind: 'prose';\n /** Stable across streaming: parts only ever append. */\n key: string;\n partIndex: number;\n text: string;\n }\n | {\n kind: 'activity';\n key: string;\n /** The tool-call, reasoning and other non-text parts this segment folds, in order. */\n partIndices: number[];\n };\n\nfunction lastToolCallIndex(content: readonly SegmentablePart[]): number {\n for (let index = content.length - 1; index >= 0; index -= 1) {\n if (content[index]?.type === 'tool-call') return index;\n }\n return -1;\n}\n\n/**\n * Split a turn into prose and activity segments.\n *\n * - Before the last tool call, each non-blank text part is a prose segment and\n * every run of other parts between them is one activity segment.\n * - After the last tool call, text is the answer (left to the final-text\n * renderer), and any other part — a thought streaming before the next\n * sentence — joins the last activity segment, so it reads as part of the\n * work that led to the answer.\n */\nexport function splitTurnSegments(content: readonly SegmentablePart[] | undefined): TurnSegment[] {\n if (!content?.length) return [];\n const answerStart = lastToolCallIndex(content) + 1;\n const segments: TurnSegment[] = [];\n let lastActivity: Extract<TurnSegment, { kind: 'activity' }> | null = null;\n\n for (let index = 0; index < content.length; index += 1) {\n const part = content[index];\n if (!part) continue;\n if (part.type === 'text') {\n if (index >= answerStart) continue;\n const text = typeof part.text === 'string' ? part.text : '';\n if (text.trim() === '') continue;\n segments.push({ kind: 'prose', key: `prose-${index}`, partIndex: index, text });\n continue;\n }\n const previous = segments.at(-1);\n if (index < answerStart && previous?.kind === 'activity') {\n previous.partIndices.push(index);\n continue;\n }\n if (index >= answerStart && lastActivity) {\n lastActivity.partIndices.push(index);\n continue;\n }\n lastActivity = { kind: 'activity', key: `activity-${index}`, partIndices: [index] };\n segments.push(lastActivity);\n }\n return segments;\n}\n\n/** The timeline items whose parts a segment folds, in stream order. */\nexport function segmentItems(\n segment: Extract<TurnSegment, { kind: 'activity' }>,\n timeline: readonly ActivityItem[],\n): ActivityItem[] {\n const indices = new Set(segment.partIndices);\n return timeline.filter((item) => item.partIndex !== undefined && indices.has(item.partIndex));\n}\n\n/**\n * The details-panel grouping for one segment: the host's grouping restricted\n * to the segment's parts, with every text part dropped (prose renders in the\n * transcript, the answer below it) and any group left empty removed.\n */\nexport function scopeGroupingToSegment(\n grouping: GroupingFunction,\n partIndices: readonly number[],\n): GroupingFunction {\n const indices = new Set(partIndices);\n return (parts) =>\n grouping(parts)\n .map((group) => ({\n ...group,\n indices: group.indices.filter((index) => indices.has(index) && parts[index]?.type !== 'text'),\n }))\n .filter((group) => group.indices.length > 0);\n}\n\nexport interface SegmentSummary {\n /** The collapsed row's line: the step in progress, else the segment's last tool step. */\n step: TimelineStep | undefined;\n /** \"Waiting for your input\" when a step waits on the person. */\n label: string;\n /** \"+2 more\" / \"2 in progress\" beside the line. */\n meta: string | undefined;\n phase: ActivityPhase;\n}\n\n/**\n * What a collapsed activity segment says: the step in progress while one runs\n * (\"Running git fetch\", with \"2 done\" or \"2 in progress\" for parallel calls), the step\n * waiting on the person, else the last tool step it took (\"Ran git log -1\",\n * \"+2 more\", and how many earlier steps failed). The row reads as failed only\n * when that last step did. A segment that only thought reads as its thought.\n */\nexport function summarizeSegment(steps: readonly TimelineStep[]): SegmentSummary {\n const toolSteps = steps.filter((step) => step.kind === 'tool');\n const running = steps.filter((step) => step.state === 'running');\n const waiting = steps.find((step) => step.state === 'waiting');\n\n if (waiting) {\n return { step: waiting, label: waiting.verb, meta: undefined, phase: 'waiting' };\n }\n if (running.length > 0) {\n const current = running.at(-1);\n const doneTools = toolSteps.filter((step) => step.state !== 'running').length;\n return {\n step: current,\n label: current?.verb ?? 'Working',\n meta:\n running.length > 1\n ? `${running.length} in progress`\n : doneTools > 0\n ? `${doneTools} done`\n : undefined,\n phase: 'running',\n };\n }\n const primary = toolSteps.at(-1) ?? steps.at(-1);\n const earlierFailures = toolSteps.filter((step) => step !== primary && step.state === 'error').length;\n const meta = [\n toolSteps.length > 1 ? `+${toolSteps.length - 1} more` : null,\n earlierFailures > 0 ? `${earlierFailures} failed` : null,\n ]\n .filter(Boolean)\n .join(' · ');\n return {\n step: primary,\n label: primary?.verb ?? 'Thought through the next step',\n meta: meta || undefined,\n phase: primary?.state === 'error' ? 'error' : 'complete',\n };\n}\n"],"names":[],"mappings":"AAiCA,SAAS,kBAAkB,SAA6C;AAAxE;AACE,WAAS,QAAQ,QAAQ,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AAC3D,UAAI,aAAQ,KAAK,MAAb,mBAAgB,UAAS,YAAa,QAAO;AAAA,EACnD;AACA,SAAO;AACT;AAYO,SAAS,kBAAkB,SAAgE;AAChG,MAAI,EAAC,mCAAS,QAAQ,QAAO,CAAA;AAC7B,QAAM,cAAc,kBAAkB,OAAO,IAAI;AACjD,QAAM,WAA0B,CAAA;AAChC,MAAI,eAAkE;AAEtE,WAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS,GAAG;AACtD,UAAM,OAAO,QAAQ,KAAK;AAC1B,QAAI,CAAC,KAAM;AACX,QAAI,KAAK,SAAS,QAAQ;AACxB,UAAI,SAAS,YAAa;AAC1B,YAAM,OAAO,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AACzD,UAAI,KAAK,KAAA,MAAW,GAAI;AACxB,eAAS,KAAK,EAAE,MAAM,SAAS,KAAK,SAAS,KAAK,IAAI,WAAW,OAAO,KAAA,CAAM;AAC9E;AAAA,IACF;AACA,UAAM,WAAW,SAAS,GAAG,EAAE;AAC/B,QAAI,QAAQ,gBAAe,qCAAU,UAAS,YAAY;AACxD,eAAS,YAAY,KAAK,KAAK;AAC/B;AAAA,IACF;AACA,QAAI,SAAS,eAAe,cAAc;AACxC,mBAAa,YAAY,KAAK,KAAK;AACnC;AAAA,IACF;AACA,mBAAe,EAAE,MAAM,YAAY,KAAK,YAAY,KAAK,IAAI,aAAa,CAAC,KAAK,EAAA;AAChF,aAAS,KAAK,YAAY;AAAA,EAC5B;AACA,SAAO;AACT;AAgBO,SAAS,uBACd,UACA,aACkB;AAClB,QAAM,UAAU,IAAI,IAAI,WAAW;AACnC,SAAO,CAAC,UACN,SAAS,KAAK,EACX,IAAI,CAAC,WAAW;AAAA,IACf,GAAG;AAAA,IACH,SAAS,MAAM,QAAQ,OAAO,CAAC,UAAA;AAvEvC;AAuEiD,qBAAQ,IAAI,KAAK,OAAK,WAAM,KAAK,MAAX,mBAAc,UAAS;AAAA,KAAM;AAAA,EAAA,EAC5F,EACD,OAAO,CAAC,UAAU,MAAM,QAAQ,SAAS,CAAC;AACjD;AAmBO,SAAS,iBAAiB,OAAgD;AAC/E,QAAM,YAAY,MAAM,OAAO,CAAC,SAAS,KAAK,SAAS,MAAM;AAC7D,QAAM,UAAU,MAAM,OAAO,CAAC,SAAS,KAAK,UAAU,SAAS;AAC/D,QAAM,UAAU,MAAM,KAAK,CAAC,SAAS,KAAK,UAAU,SAAS;AAE7D,MAAI,SAAS;AACX,WAAO,EAAE,MAAM,SAAS,OAAO,QAAQ,MAAM,MAAM,QAAW,OAAO,UAAA;AAAA,EACvE;AACA,MAAI,QAAQ,SAAS,GAAG;AACtB,UAAM,UAAU,QAAQ,GAAG,EAAE;AAC7B,UAAM,YAAY,UAAU,OAAO,CAAC,SAAS,KAAK,UAAU,SAAS,EAAE;AACvE,WAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAO,mCAAS,SAAQ;AAAA,MACxB,MACE,QAAQ,SAAS,IACb,GAAG,QAAQ,MAAM,iBACjB,YAAY,IACV,GAAG,SAAS,UACZ;AAAA,MACR,OAAO;AAAA,IAAA;AAAA,EAEX;AACA,QAAM,UAAU,UAAU,GAAG,EAAE,KAAK,MAAM,GAAG,EAAE;AAC/C,QAAM,kBAAkB,UAAU,OAAO,CAAC,SAAS,SAAS,WAAW,KAAK,UAAU,OAAO,EAAE;AAC/F,QAAM,OAAO;AAAA,IACX,UAAU,SAAS,IAAI,IAAI,UAAU,SAAS,CAAC,UAAU;AAAA,IACzD,kBAAkB,IAAI,GAAG,eAAe,YAAY;AAAA,EAAA,EAEnD,OAAO,OAAO,EACd,KAAK,KAAK;AACb,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAO,mCAAS,SAAQ;AAAA,IACxB,MAAM,QAAQ;AAAA,IACd,QAAO,mCAAS,WAAU,UAAU,UAAU;AAAA,EAAA;AAElD;"}