@athenaintel/react 0.43.0 → 0.50.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 (746) hide show
  1. package/README.md +258 -8
  2. package/dist/agent-runtime/src/answer-label.cjs +137 -0
  3. package/dist/agent-runtime/src/answer-label.cjs.map +1 -0
  4. package/dist/agent-runtime/src/answer-label.d.ts +104 -0
  5. package/dist/agent-runtime/src/answer-label.js +137 -0
  6. package/dist/agent-runtime/src/answer-label.js.map +1 -0
  7. package/dist/agent-runtime/src/answer-rows.cjs +180 -0
  8. package/dist/agent-runtime/src/answer-rows.cjs.map +1 -0
  9. package/dist/agent-runtime/src/answer-rows.d.ts +86 -0
  10. package/dist/agent-runtime/src/answer-rows.js +180 -0
  11. package/dist/agent-runtime/src/answer-rows.js.map +1 -0
  12. package/dist/agent-runtime/src/call-recap.cjs +319 -0
  13. package/dist/agent-runtime/src/call-recap.cjs.map +1 -0
  14. package/dist/agent-runtime/src/call-recap.d.ts +142 -0
  15. package/dist/agent-runtime/src/call-recap.js +319 -0
  16. package/dist/agent-runtime/src/call-recap.js.map +1 -0
  17. package/dist/agent-runtime/src/chat-outbox-store.cjs +1 -0
  18. package/dist/agent-runtime/src/chat-outbox-store.cjs.map +1 -1
  19. package/dist/agent-runtime/src/chat-outbox-store.d.ts +7 -0
  20. package/dist/agent-runtime/src/chat-outbox-store.js +1 -0
  21. package/dist/agent-runtime/src/chat-outbox-store.js.map +1 -1
  22. package/dist/agent-runtime/src/chat-outbox.cjs +46 -5
  23. package/dist/agent-runtime/src/chat-outbox.cjs.map +1 -1
  24. package/dist/agent-runtime/src/chat-outbox.d.ts +29 -0
  25. package/dist/agent-runtime/src/chat-outbox.js +46 -5
  26. package/dist/agent-runtime/src/chat-outbox.js.map +1 -1
  27. package/dist/agent-runtime/src/client-tool-bridge.cjs +15 -15
  28. package/dist/agent-runtime/src/client-tool-bridge.cjs.map +1 -1
  29. package/dist/agent-runtime/src/conversation-index.cjs +8 -8
  30. package/dist/agent-runtime/src/conversation-index.cjs.map +1 -1
  31. package/dist/agent-runtime/src/conversation-index.d.ts +7 -0
  32. package/dist/agent-runtime/src/conversation-index.js.map +1 -1
  33. package/dist/agent-runtime/src/conversation-list.cjs +2 -1
  34. package/dist/agent-runtime/src/conversation-list.cjs.map +1 -1
  35. package/dist/agent-runtime/src/conversation-list.d.ts +19 -3
  36. package/dist/agent-runtime/src/conversation-list.js +2 -1
  37. package/dist/agent-runtime/src/conversation-list.js.map +1 -1
  38. package/dist/agent-runtime/src/decision-checks.cjs +207 -0
  39. package/dist/agent-runtime/src/decision-checks.cjs.map +1 -0
  40. package/dist/agent-runtime/src/decision-checks.d.ts +142 -0
  41. package/dist/agent-runtime/src/decision-checks.js +207 -0
  42. package/dist/agent-runtime/src/decision-checks.js.map +1 -0
  43. package/dist/agent-runtime/src/desktop-handoff.d.ts +12 -0
  44. package/dist/agent-runtime/src/errors.cjs +18 -0
  45. package/dist/agent-runtime/src/errors.cjs.map +1 -1
  46. package/dist/agent-runtime/src/errors.d.ts +7 -0
  47. package/dist/agent-runtime/src/errors.js +18 -0
  48. package/dist/agent-runtime/src/errors.js.map +1 -1
  49. package/dist/agent-runtime/src/generated/runconfig-contract.cjs +12 -0
  50. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
  51. package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +6 -6
  52. package/dist/agent-runtime/src/generated/runconfig-contract.js +12 -0
  53. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
  54. package/dist/agent-runtime/src/handoff-arrival.cjs +60 -0
  55. package/dist/agent-runtime/src/handoff-arrival.cjs.map +1 -0
  56. package/dist/agent-runtime/src/handoff-arrival.d.ts +46 -0
  57. package/dist/agent-runtime/src/handoff-arrival.js +60 -0
  58. package/dist/agent-runtime/src/handoff-arrival.js.map +1 -0
  59. package/dist/agent-runtime/src/index.d.ts +16 -9
  60. package/dist/agent-runtime/src/interrupts.cjs +71 -19
  61. package/dist/agent-runtime/src/interrupts.cjs.map +1 -1
  62. package/dist/agent-runtime/src/interrupts.d.ts +40 -3
  63. package/dist/agent-runtime/src/interrupts.js +56 -4
  64. package/dist/agent-runtime/src/interrupts.js.map +1 -1
  65. package/dist/agent-runtime/src/lane-history.cjs +8 -8
  66. package/dist/agent-runtime/src/lane-history.cjs.map +1 -1
  67. package/dist/agent-runtime/src/messages.cjs +43 -8
  68. package/dist/agent-runtime/src/messages.cjs.map +1 -1
  69. package/dist/agent-runtime/src/messages.d.ts +25 -3
  70. package/dist/agent-runtime/src/messages.js +43 -8
  71. package/dist/agent-runtime/src/messages.js.map +1 -1
  72. package/dist/agent-runtime/src/model-context.cjs +3 -2
  73. package/dist/agent-runtime/src/model-context.cjs.map +1 -1
  74. package/dist/agent-runtime/src/model-context.d.ts +6 -1
  75. package/dist/agent-runtime/src/model-context.js +3 -2
  76. package/dist/agent-runtime/src/model-context.js.map +1 -1
  77. package/dist/agent-runtime/src/offline-status.cjs +36 -0
  78. package/dist/agent-runtime/src/offline-status.cjs.map +1 -0
  79. package/dist/agent-runtime/src/offline-status.d.ts +118 -3
  80. package/dist/agent-runtime/src/offline-status.js +36 -0
  81. package/dist/agent-runtime/src/offline-status.js.map +1 -0
  82. package/dist/agent-runtime/src/queue.cjs +0 -9
  83. package/dist/agent-runtime/src/queue.cjs.map +1 -1
  84. package/dist/agent-runtime/src/queue.js +0 -9
  85. package/dist/agent-runtime/src/queue.js.map +1 -1
  86. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +9 -9
  87. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
  88. package/dist/agent-runtime/src/runtime-catalog.cjs +42 -0
  89. package/dist/agent-runtime/src/runtime-catalog.cjs.map +1 -0
  90. package/dist/agent-runtime/src/runtime-catalog.d.ts +35 -0
  91. package/dist/agent-runtime/src/runtime-catalog.js +42 -0
  92. package/dist/agent-runtime/src/runtime-catalog.js.map +1 -0
  93. package/dist/agent-runtime/src/runtime-messages.cjs.map +1 -1
  94. package/dist/agent-runtime/src/runtime-messages.d.ts +1 -1
  95. package/dist/agent-runtime/src/runtime-messages.js.map +1 -1
  96. package/dist/agent-runtime/src/runtime.d.ts +41 -0
  97. package/dist/agent-runtime/src/send-recovery.cjs +37 -3
  98. package/dist/agent-runtime/src/send-recovery.cjs.map +1 -1
  99. package/dist/agent-runtime/src/send-recovery.d.ts +19 -0
  100. package/dist/agent-runtime/src/send-recovery.js +37 -3
  101. package/dist/agent-runtime/src/send-recovery.js.map +1 -1
  102. package/dist/agent-runtime/src/statewire-suspended.cjs +3 -3
  103. package/dist/agent-runtime/src/statewire-suspended.cjs.map +1 -1
  104. package/dist/agent-runtime/src/subagents.cjs +32 -2
  105. package/dist/agent-runtime/src/subagents.cjs.map +1 -1
  106. package/dist/agent-runtime/src/subagents.d.ts +9 -0
  107. package/dist/agent-runtime/src/subagents.js +30 -0
  108. package/dist/agent-runtime/src/subagents.js.map +1 -1
  109. package/dist/agent-runtime/src/thread-driver.cjs +67 -0
  110. package/dist/agent-runtime/src/thread-driver.cjs.map +1 -0
  111. package/dist/agent-runtime/src/thread-driver.d.ts +49 -0
  112. package/dist/agent-runtime/src/thread-driver.js +67 -0
  113. package/dist/agent-runtime/src/thread-driver.js.map +1 -0
  114. package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +172 -0
  115. package/dist/agent-runtime/src/thread-handoff-protocol.d.ts +868 -0
  116. package/dist/agent-runtime/src/thread-handoff-qr.d.ts +11 -0
  117. package/dist/agent-runtime/src/thread-handoff.d.ts +3 -364
  118. package/dist/agent-runtime/src/thread-status.cjs +3 -3
  119. package/dist/agent-runtime/src/thread-status.cjs.map +1 -1
  120. package/dist/agent-runtime/src/tool-metadata.cjs +210 -25
  121. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
  122. package/dist/agent-runtime/src/tool-metadata.d.ts +12 -0
  123. package/dist/agent-runtime/src/tool-metadata.js +210 -25
  124. package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
  125. package/dist/agent-runtime/src/tool-names.cjs +2 -0
  126. package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
  127. package/dist/agent-runtime/src/tool-names.d.ts +2 -0
  128. package/dist/agent-runtime/src/tool-names.js +2 -0
  129. package/dist/agent-runtime/src/tool-names.js.map +1 -1
  130. package/dist/agent-runtime/src/types.d.ts +10 -2
  131. package/dist/agent-runtime/src/use-conversation-list.cjs +14 -13
  132. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
  133. package/dist/agent-runtime/src/use-conversation-list.d.ts +6 -0
  134. package/dist/agent-runtime/src/use-conversation-list.js +3 -2
  135. package/dist/agent-runtime/src/use-conversation-list.js.map +1 -1
  136. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +45 -20
  137. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
  138. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +10 -3
  139. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +27 -2
  140. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
  141. package/dist/agent-runtime/src/use-deep-agent-config.cjs +14 -14
  142. package/dist/agent-runtime/src/use-deep-agent-config.cjs.map +1 -1
  143. package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs +6 -6
  144. package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -1
  145. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +40 -22
  146. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
  147. package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +17 -0
  148. package/dist/agent-runtime/src/use-deep-agent-runtime.js +24 -6
  149. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
  150. package/dist/agent-runtime/src/use-deep-agent-thread.cjs +45 -45
  151. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
  152. package/dist/agent-runtime/src/use-deep-agent-voice.cjs +588 -130
  153. package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
  154. package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +162 -10
  155. package/dist/agent-runtime/src/use-deep-agent-voice.js +529 -71
  156. package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
  157. package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs +26 -26
  158. package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -1
  159. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs +4 -4
  160. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs.map +1 -1
  161. package/dist/agent-runtime/src/use-thread-handoff-flow.d.ts +34 -26
  162. package/dist/agent-runtime/src/voice-earcon.cjs +139 -0
  163. package/dist/agent-runtime/src/voice-earcon.cjs.map +1 -0
  164. package/dist/agent-runtime/src/voice-earcon.d.ts +38 -0
  165. package/dist/agent-runtime/src/voice-earcon.js +139 -0
  166. package/dist/agent-runtime/src/voice-earcon.js.map +1 -0
  167. package/dist/agent-runtime/src/voice-media.cjs +117 -0
  168. package/dist/agent-runtime/src/voice-media.cjs.map +1 -0
  169. package/dist/agent-runtime/src/voice-media.d.ts +63 -0
  170. package/dist/agent-runtime/src/voice-media.js +117 -0
  171. package/dist/agent-runtime/src/voice-media.js.map +1 -0
  172. package/dist/agent-runtime/src/voice-presentation.cjs +2 -0
  173. package/dist/agent-runtime/src/voice-presentation.cjs.map +1 -1
  174. package/dist/agent-runtime/src/voice-presentation.js +2 -0
  175. package/dist/agent-runtime/src/voice-presentation.js.map +1 -1
  176. package/dist/agent-runtime/src/voice-wire-types.d.ts +32 -0
  177. package/dist/assets/AssetPanel.cjs +11 -11
  178. package/dist/assets/AssetPanel.cjs.map +1 -1
  179. package/dist/assets/AthenaAssetEmbed.cjs +11 -9
  180. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  181. package/dist/assets/AthenaAssetEmbed.d.ts +18 -5
  182. package/dist/assets/AthenaAssetEmbed.js +4 -2
  183. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  184. package/dist/assets/AthenaLayout.cjs +16 -16
  185. package/dist/assets/AthenaLayout.cjs.map +1 -1
  186. package/dist/assets/use-asset-content.cjs +4 -4
  187. package/dist/assets/use-asset-content.cjs.map +1 -1
  188. package/dist/assets/use-asset-embed.cjs +14 -7
  189. package/dist/assets/use-asset-embed.cjs.map +1 -1
  190. package/dist/assets/use-asset-embed.d.ts +23 -6
  191. package/dist/assets/use-asset-embed.js +10 -3
  192. package/dist/assets/use-asset-embed.js.map +1 -1
  193. package/dist/auth/AthenaAuthContext.cjs +3 -3
  194. package/dist/auth/AthenaAuthContext.cjs.map +1 -1
  195. package/dist/auth/AthenaAuthProvider.cjs +8 -8
  196. package/dist/auth/AthenaAuthProvider.cjs.map +1 -1
  197. package/dist/auth/AthenaCredentialSourceContext.cjs +5 -5
  198. package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
  199. package/dist/auth/AthenaSSOProvider.cjs +14 -14
  200. package/dist/auth/AthenaSSOProvider.cjs.map +1 -1
  201. package/dist/auth/credential-source.cjs +26 -13
  202. package/dist/auth/credential-source.cjs.map +1 -1
  203. package/dist/auth/credential-source.d.ts +8 -0
  204. package/dist/auth/credential-source.js +26 -13
  205. package/dist/auth/credential-source.js.map +1 -1
  206. package/dist/catalog/agent-model-options.cjs +25 -17
  207. package/dist/catalog/agent-model-options.cjs.map +1 -1
  208. package/dist/catalog/agent-model-options.d.ts +38 -5
  209. package/dist/catalog/agent-model-options.js +25 -17
  210. package/dist/catalog/agent-model-options.js.map +1 -1
  211. package/dist/catalog/channel-refusal.cjs +36 -0
  212. package/dist/catalog/channel-refusal.cjs.map +1 -0
  213. package/dist/catalog/channel-refusal.d.ts +29 -0
  214. package/dist/catalog/channel-refusal.js +36 -0
  215. package/dist/catalog/channel-refusal.js.map +1 -0
  216. package/dist/catalog/chat-pickers.cjs +60 -24
  217. package/dist/catalog/chat-pickers.cjs.map +1 -1
  218. package/dist/catalog/chat-pickers.d.ts +12 -2
  219. package/dist/catalog/chat-pickers.js +56 -20
  220. package/dist/catalog/chat-pickers.js.map +1 -1
  221. package/dist/catalog/runtime-catalog.cjs +89 -23
  222. package/dist/catalog/runtime-catalog.cjs.map +1 -1
  223. package/dist/catalog/runtime-catalog.d.ts +8 -2
  224. package/dist/catalog/runtime-catalog.js +83 -17
  225. package/dist/catalog/runtime-catalog.js.map +1 -1
  226. package/dist/catalog/use-athena-chat-mode.cjs +12 -12
  227. package/dist/catalog/use-athena-chat-mode.cjs.map +1 -1
  228. package/dist/chat/AthenaChat.cjs +155 -67
  229. package/dist/chat/AthenaChat.cjs.map +1 -1
  230. package/dist/chat/AthenaChat.d.ts +42 -2
  231. package/dist/chat/AthenaChat.js +106 -18
  232. package/dist/chat/AthenaChat.js.map +1 -1
  233. package/dist/chat/AthenaChatErrorBoundary.cjs +3 -3
  234. package/dist/chat/AthenaChatErrorBoundary.cjs.map +1 -1
  235. package/dist/chat/DrivingOnChip.cjs +23 -0
  236. package/dist/chat/DrivingOnChip.cjs.map +1 -0
  237. package/dist/chat/DrivingOnChip.d.ts +17 -0
  238. package/dist/chat/DrivingOnChip.js +23 -0
  239. package/dist/chat/DrivingOnChip.js.map +1 -0
  240. package/dist/chat/StatewireApprovalCard.cjs +166 -37
  241. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  242. package/dist/chat/StatewireApprovalCard.d.ts +91 -2
  243. package/dist/chat/StatewireApprovalCard.js +156 -27
  244. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  245. package/dist/chat/StatewireClientToolBridge.cjs +2 -2
  246. package/dist/chat/StatewireClientToolBridge.cjs.map +1 -1
  247. package/dist/chat/StatewireQueuedMessages.cjs +81 -69
  248. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  249. package/dist/chat/StatewireQueuedMessages.d.ts +25 -13
  250. package/dist/chat/StatewireQueuedMessages.js +73 -61
  251. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  252. package/dist/chat/WaitingOnYouBanner.cjs +9 -5
  253. package/dist/chat/WaitingOnYouBanner.cjs.map +1 -1
  254. package/dist/chat/WaitingOnYouBanner.js +7 -3
  255. package/dist/chat/WaitingOnYouBanner.js.map +1 -1
  256. package/dist/chat/athena-chat-welcome.cjs +2 -2
  257. package/dist/chat/athena-chat-welcome.cjs.map +1 -1
  258. package/dist/chat/athena-citation-links.cjs +5 -5
  259. package/dist/chat/athena-citation-links.cjs.map +1 -1
  260. package/dist/chat/athena-composer-controls.cjs +26 -16
  261. package/dist/chat/athena-composer-controls.cjs.map +1 -1
  262. package/dist/chat/athena-composer-controls.d.ts +6 -0
  263. package/dist/chat/athena-composer-controls.js +26 -16
  264. package/dist/chat/athena-composer-controls.js.map +1 -1
  265. package/dist/chat/athena-turn-end-status.cjs +42 -0
  266. package/dist/chat/athena-turn-end-status.cjs.map +1 -0
  267. package/dist/chat/athena-turn-end-status.d.ts +24 -0
  268. package/dist/chat/athena-turn-end-status.js +42 -0
  269. package/dist/chat/athena-turn-end-status.js.map +1 -0
  270. package/dist/chat/browser-decision-check.cjs +131 -0
  271. package/dist/chat/browser-decision-check.cjs.map +1 -0
  272. package/dist/chat/browser-decision-check.d.ts +61 -0
  273. package/dist/chat/browser-decision-check.js +131 -0
  274. package/dist/chat/browser-decision-check.js.map +1 -0
  275. package/dist/chat/chat-outbox-rows.cjs +3 -3
  276. package/dist/chat/chat-outbox-rows.cjs.map +1 -1
  277. package/dist/chat/chat-voice-controls.cjs +96 -29
  278. package/dist/chat/chat-voice-controls.cjs.map +1 -1
  279. package/dist/chat/chat-voice-controls.d.ts +42 -3
  280. package/dist/chat/chat-voice-controls.js +92 -25
  281. package/dist/chat/chat-voice-controls.js.map +1 -1
  282. package/dist/chat/composer-keyboard-hint.cjs +5 -5
  283. package/dist/chat/composer-keyboard-hint.cjs.map +1 -1
  284. package/dist/chat/device-operation.cjs +29 -0
  285. package/dist/chat/device-operation.cjs.map +1 -0
  286. package/dist/chat/device-operation.d.ts +34 -0
  287. package/dist/chat/device-operation.js +29 -0
  288. package/dist/chat/device-operation.js.map +1 -0
  289. package/dist/chat/super-grouping/CollapsibleGroup.cjs +14 -14
  290. package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -1
  291. package/dist/chat/super-grouping/GroupedMessageParts.cjs +4 -4
  292. package/dist/chat/super-grouping/GroupedMessageParts.cjs.map +1 -1
  293. package/dist/chat/super-grouping/SuperGroupingCard.cjs +52 -36
  294. package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
  295. package/dist/chat/super-grouping/SuperGroupingCard.d.ts +19 -4
  296. package/dist/chat/super-grouping/SuperGroupingCard.js +29 -13
  297. package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
  298. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs +32 -32
  299. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs.map +1 -1
  300. package/dist/chat/super-grouping/SuperGroupingTranscript.js +3 -3
  301. package/dist/chat/super-grouping/SuperGroupingTranscript.js.map +1 -1
  302. package/dist/chat/super-grouping/ToolTimeline.cjs +73 -40
  303. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  304. package/dist/chat/super-grouping/ToolTimeline.d.ts +10 -2
  305. package/dist/chat/super-grouping/ToolTimeline.js +69 -36
  306. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  307. package/dist/chat/super-grouping/activity-timeline.cjs +47 -12
  308. package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
  309. package/dist/chat/super-grouping/activity-timeline.d.ts +21 -0
  310. package/dist/chat/super-grouping/activity-timeline.js +47 -12
  311. package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
  312. package/dist/chat/super-grouping/grouping-function.cjs +4 -0
  313. package/dist/chat/super-grouping/grouping-function.cjs.map +1 -1
  314. package/dist/chat/super-grouping/grouping-function.d.ts +7 -0
  315. package/dist/chat/super-grouping/grouping-function.js +5 -1
  316. package/dist/chat/super-grouping/grouping-function.js.map +1 -1
  317. package/dist/chat/super-grouping/index.cjs +6 -0
  318. package/dist/chat/super-grouping/index.cjs.map +1 -1
  319. package/dist/chat/super-grouping/index.d.ts +5 -2
  320. package/dist/chat/super-grouping/index.js +7 -1
  321. package/dist/chat/super-grouping/index.js.map +1 -1
  322. package/dist/chat/super-grouping/tool-part-placement.cjs +17 -0
  323. package/dist/chat/super-grouping/tool-part-placement.cjs.map +1 -0
  324. package/dist/chat/super-grouping/tool-part-placement.d.ts +22 -0
  325. package/dist/chat/super-grouping/tool-part-placement.js +17 -0
  326. package/dist/chat/super-grouping/tool-part-placement.js.map +1 -0
  327. package/dist/chat/thread-scroll-to-bottom.cjs +2 -2
  328. package/dist/chat/thread-scroll-to-bottom.cjs.map +1 -1
  329. package/dist/chat/thread-scroll-to-bottom.d.ts +10 -7
  330. package/dist/chat/thread-scroll-to-bottom.js +2 -2
  331. package/dist/chat/thread-scroll-to-bottom.js.map +1 -1
  332. package/dist/chat/tooltip-icon-button.cjs +2 -2
  333. package/dist/chat/tooltip-icon-button.cjs.map +1 -1
  334. package/dist/chat/use-athena-voice-live.cjs +11 -0
  335. package/dist/chat/use-athena-voice-live.cjs.map +1 -0
  336. package/dist/chat/use-athena-voice-live.d.ts +11 -0
  337. package/dist/chat/use-athena-voice-live.js +11 -0
  338. package/dist/chat/use-athena-voice-live.js.map +1 -0
  339. package/dist/chat/use-statewire-approval-request.cjs +56 -24
  340. package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
  341. package/dist/chat/use-statewire-approval-request.d.ts +33 -4
  342. package/dist/chat/use-statewire-approval-request.js +41 -9
  343. package/dist/chat/use-statewire-approval-request.js.map +1 -1
  344. package/dist/chat-ui/auth/sign-in-card.cjs +2 -2
  345. package/dist/chat-ui/auth/sign-in-card.cjs.map +1 -1
  346. package/dist/chat-ui/composer/tiptap-composer.cjs +138 -107
  347. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  348. package/dist/chat-ui/composer/tiptap-composer.d.ts +20 -4
  349. package/dist/chat-ui/composer/tiptap-composer.js +85 -54
  350. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  351. package/dist/chat-ui/header/conversation-history-panel.cjs +49 -23
  352. package/dist/chat-ui/header/conversation-history-panel.cjs.map +1 -1
  353. package/dist/chat-ui/header/conversation-history-panel.d.ts +12 -1
  354. package/dist/chat-ui/header/conversation-history-panel.js +38 -12
  355. package/dist/chat-ui/header/conversation-history-panel.js.map +1 -1
  356. package/dist/chat-ui/index.cjs +21 -0
  357. package/dist/chat-ui/index.cjs.map +1 -1
  358. package/dist/chat-ui/index.d.ts +8 -1
  359. package/dist/chat-ui/index.js +21 -0
  360. package/dist/chat-ui/index.js.map +1 -1
  361. package/dist/chat-ui/mentions/mention-chip.cjs +4 -4
  362. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  363. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs +10 -9
  364. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs.map +1 -1
  365. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js +3 -2
  366. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js.map +1 -1
  367. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +2 -2
  368. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -1
  369. package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs +29 -6
  370. package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs.map +1 -1
  371. package/dist/chat-ui/mentions/suggestions/components/menu-list.d.ts +7 -1
  372. package/dist/chat-ui/mentions/suggestions/components/menu-list.js +25 -2
  373. package/dist/chat-ui/mentions/suggestions/components/menu-list.js.map +1 -1
  374. package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs +2 -2
  375. package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs.map +1 -1
  376. package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs +2 -2
  377. package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs.map +1 -1
  378. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +3 -3
  379. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
  380. package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs +56 -2
  381. package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs.map +1 -1
  382. package/dist/chat-ui/mentions/suggestions/data/orchestrator.d.ts +12 -0
  383. package/dist/chat-ui/mentions/suggestions/data/orchestrator.js +56 -2
  384. package/dist/chat-ui/mentions/suggestions/data/orchestrator.js.map +1 -1
  385. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +24 -3
  386. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  387. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +7 -0
  388. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +24 -3
  389. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  390. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +35 -13
  391. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  392. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +15 -1
  393. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +28 -6
  394. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  395. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs +9 -6
  396. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs.map +1 -1
  397. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.d.ts +3 -0
  398. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js +5 -2
  399. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js.map +1 -1
  400. package/dist/chat-ui/mentions/use-account-workspace-id.cjs +45 -10
  401. package/dist/chat-ui/mentions/use-account-workspace-id.cjs.map +1 -1
  402. package/dist/chat-ui/mentions/use-account-workspace-id.d.ts +24 -1
  403. package/dist/chat-ui/mentions/use-account-workspace-id.js +46 -11
  404. package/dist/chat-ui/mentions/use-account-workspace-id.js.map +1 -1
  405. package/dist/chat-ui/mentions/use-member-avatar.cjs +4 -4
  406. package/dist/chat-ui/mentions/use-member-avatar.cjs.map +1 -1
  407. package/dist/chat-ui/mentions/use-mention-asset.cjs +3 -3
  408. package/dist/chat-ui/mentions/use-mention-asset.cjs.map +1 -1
  409. package/dist/chat-ui/messages/answer-label.cjs +42 -0
  410. package/dist/chat-ui/messages/answer-label.cjs.map +1 -0
  411. package/dist/chat-ui/messages/answer-label.d.ts +33 -0
  412. package/dist/chat-ui/messages/answer-label.js +42 -0
  413. package/dist/chat-ui/messages/answer-label.js.map +1 -0
  414. package/dist/chat-ui/messages/arrival-animation.cjs +13 -0
  415. package/dist/chat-ui/messages/arrival-animation.cjs.map +1 -0
  416. package/dist/chat-ui/messages/arrival-animation.d.ts +14 -0
  417. package/dist/chat-ui/messages/arrival-animation.js +13 -0
  418. package/dist/chat-ui/messages/arrival-animation.js.map +1 -0
  419. package/dist/chat-ui/messages/continue-pill.cjs +5 -5
  420. package/dist/chat-ui/messages/continue-pill.cjs.map +1 -1
  421. package/dist/chat-ui/messages/from-the-call-card.cjs +124 -0
  422. package/dist/chat-ui/messages/from-the-call-card.cjs.map +1 -0
  423. package/dist/chat-ui/messages/from-the-call-card.d.ts +17 -0
  424. package/dist/chat-ui/messages/from-the-call-card.js +124 -0
  425. package/dist/chat-ui/messages/from-the-call-card.js.map +1 -0
  426. package/dist/chat-ui/messages/handoff-arrival-divider.cjs +44 -0
  427. package/dist/chat-ui/messages/handoff-arrival-divider.cjs.map +1 -0
  428. package/dist/chat-ui/messages/handoff-arrival-divider.d.ts +17 -0
  429. package/dist/chat-ui/messages/handoff-arrival-divider.js +44 -0
  430. package/dist/chat-ui/messages/handoff-arrival-divider.js.map +1 -0
  431. package/dist/chat-ui/messages/message-actions-config.cjs +3 -3
  432. package/dist/chat-ui/messages/message-actions-config.cjs.map +1 -1
  433. package/dist/chat-ui/messages/message-components.cjs +8 -4
  434. package/dist/chat-ui/messages/message-components.cjs.map +1 -1
  435. package/dist/chat-ui/messages/message-components.js +5 -1
  436. package/dist/chat-ui/messages/message-components.js.map +1 -1
  437. package/dist/chat-ui/messages/message-images.cjs +66 -0
  438. package/dist/chat-ui/messages/message-images.cjs.map +1 -0
  439. package/dist/chat-ui/messages/message-images.d.ts +16 -0
  440. package/dist/chat-ui/messages/message-images.js +66 -0
  441. package/dist/chat-ui/messages/message-images.js.map +1 -0
  442. package/dist/chat-ui/messages/user-edit-composer.cjs +2 -2
  443. package/dist/chat-ui/messages/user-edit-composer.cjs.map +1 -1
  444. package/dist/chat-ui/messages/wake-marker.cjs +3 -3
  445. package/dist/chat-ui/messages/wake-marker.cjs.map +1 -1
  446. package/dist/chat-ui/rich-text/chat-link.cjs +3 -2
  447. package/dist/chat-ui/rich-text/chat-link.cjs.map +1 -1
  448. package/dist/chat-ui/rich-text/chat-link.d.ts +4 -0
  449. package/dist/chat-ui/rich-text/chat-link.js +4 -3
  450. package/dist/chat-ui/rich-text/chat-link.js.map +1 -1
  451. package/dist/chat-ui/rich-text/chat-message-body.cjs +9 -8
  452. package/dist/chat-ui/rich-text/chat-message-body.cjs.map +1 -1
  453. package/dist/chat-ui/rich-text/chat-message-body.d.ts +12 -0
  454. package/dist/chat-ui/rich-text/chat-message-body.js +2 -1
  455. package/dist/chat-ui/rich-text/chat-message-body.js.map +1 -1
  456. package/dist/chat-ui/rich-text/chat-node-views.cjs +6 -6
  457. package/dist/chat-ui/rich-text/chat-node-views.cjs.map +1 -1
  458. package/dist/chat-ui/rich-text/dom-output-spec.cjs +2 -2
  459. package/dist/chat-ui/rich-text/dom-output-spec.cjs.map +1 -1
  460. package/dist/chat-ui/statewire.cjs +3 -0
  461. package/dist/chat-ui/statewire.cjs.map +1 -1
  462. package/dist/chat-ui/statewire.d.ts +2 -1
  463. package/dist/chat-ui/statewire.js +3 -0
  464. package/dist/chat-ui/statewire.js.map +1 -1
  465. package/dist/chat-ui/thread/chat-thread-shell.cjs +45 -14
  466. package/dist/chat-ui/thread/chat-thread-shell.cjs.map +1 -1
  467. package/dist/chat-ui/thread/chat-thread-shell.d.ts +16 -2
  468. package/dist/chat-ui/thread/chat-thread-shell.js +37 -6
  469. package/dist/chat-ui/thread/chat-thread-shell.js.map +1 -1
  470. package/dist/chat-ui/thread/composer-send-or-stop.cjs +30 -20
  471. package/dist/chat-ui/thread/composer-send-or-stop.cjs.map +1 -1
  472. package/dist/chat-ui/thread/composer-send-or-stop.d.ts +8 -0
  473. package/dist/chat-ui/thread/composer-send-or-stop.js +29 -19
  474. package/dist/chat-ui/thread/composer-send-or-stop.js.map +1 -1
  475. package/dist/chat-ui/thread/statewire-history-edge.cjs +20 -21
  476. package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
  477. package/dist/chat-ui/thread/statewire-history-edge.js +3 -4
  478. package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
  479. package/dist/chat-ui/thread/thread-loading-overlay.cjs +5 -5
  480. package/dist/chat-ui/thread/thread-loading-overlay.cjs.map +1 -1
  481. package/dist/collab/client.cjs +52 -3
  482. package/dist/collab/client.cjs.map +1 -1
  483. package/dist/collab/client.d.ts +27 -0
  484. package/dist/collab/client.js +52 -3
  485. package/dist/collab/client.js.map +1 -1
  486. package/dist/collab/document-status.cjs +150 -0
  487. package/dist/collab/document-status.cjs.map +1 -0
  488. package/dist/collab/document-status.d.ts +68 -0
  489. package/dist/collab/document-status.js +150 -0
  490. package/dist/collab/document-status.js.map +1 -0
  491. package/dist/collab/index.cjs +7 -0
  492. package/dist/collab/index.cjs.map +1 -1
  493. package/dist/collab/index.d.ts +6 -1
  494. package/dist/collab/index.js +7 -0
  495. package/dist/collab/index.js.map +1 -1
  496. package/dist/collab/presence-react.cjs +11 -11
  497. package/dist/collab/presence-react.cjs.map +1 -1
  498. package/dist/collab/react.cjs +6 -6
  499. package/dist/collab/react.cjs.map +1 -1
  500. package/dist/composer/AttachmentContext.cjs +24 -11
  501. package/dist/composer/AttachmentContext.cjs.map +1 -1
  502. package/dist/composer/AttachmentContext.js +18 -5
  503. package/dist/composer/AttachmentContext.js.map +1 -1
  504. package/dist/composer/ComposerAttachmentPreview.cjs +78 -23
  505. package/dist/composer/ComposerAttachmentPreview.cjs.map +1 -1
  506. package/dist/composer/ComposerAttachmentPreview.d.ts +5 -3
  507. package/dist/composer/ComposerAttachmentPreview.js +79 -24
  508. package/dist/composer/ComposerAttachmentPreview.js.map +1 -1
  509. package/dist/composer/ComposerDropZone.cjs +7 -7
  510. package/dist/composer/ComposerDropZone.cjs.map +1 -1
  511. package/dist/composer/FileUploadButton.cjs +37 -22
  512. package/dist/composer/FileUploadButton.cjs.map +1 -1
  513. package/dist/composer/FileUploadButton.d.ts +6 -0
  514. package/dist/composer/FileUploadButton.js +34 -19
  515. package/dist/composer/FileUploadButton.js.map +1 -1
  516. package/dist/composer/QuoteContext.cjs +8 -8
  517. package/dist/composer/QuoteContext.cjs.map +1 -1
  518. package/dist/composer/composer-handoff.cjs +4 -4
  519. package/dist/composer/composer-handoff.cjs.map +1 -1
  520. package/dist/composer/index.d.ts +1 -1
  521. package/dist/composer/useAppendToComposer.cjs +4 -4
  522. package/dist/composer/useAppendToComposer.cjs.map +1 -1
  523. package/dist/composer/useAttachFiles.cjs +23 -6
  524. package/dist/composer/useAttachFiles.cjs.map +1 -1
  525. package/dist/composer/useAttachFiles.d.ts +15 -7
  526. package/dist/composer/useAttachFiles.js +22 -5
  527. package/dist/composer/useAttachFiles.js.map +1 -1
  528. package/dist/composer/useComposerAttachment.cjs +4 -4
  529. package/dist/composer/useComposerAttachment.cjs.map +1 -1
  530. package/dist/composer/useFileUpload.cjs +21 -16
  531. package/dist/composer/useFileUpload.cjs.map +1 -1
  532. package/dist/composer/useFileUpload.d.ts +12 -0
  533. package/dist/composer/useFileUpload.js +12 -7
  534. package/dist/composer/useFileUpload.js.map +1 -1
  535. package/dist/composer/useReadComposerDraft.cjs +27 -8
  536. package/dist/composer/useReadComposerDraft.cjs.map +1 -1
  537. package/dist/composer/useReadComposerDraft.d.ts +23 -1
  538. package/dist/composer/useReadComposerDraft.js +27 -8
  539. package/dist/composer/useReadComposerDraft.js.map +1 -1
  540. package/dist/composer/useSendMessage.cjs +4 -4
  541. package/dist/composer/useSendMessage.cjs.map +1 -1
  542. package/dist/diagnostics/useAthenaDiagnostics.cjs +4 -4
  543. package/dist/diagnostics/useAthenaDiagnostics.cjs.map +1 -1
  544. package/dist/dictation/audio-level-history.cjs +3 -3
  545. package/dist/dictation/audio-level-history.cjs.map +1 -1
  546. package/dist/dictation/dictation-controls.cjs +24 -20
  547. package/dist/dictation/dictation-controls.cjs.map +1 -1
  548. package/dist/dictation/dictation-controls.d.ts +6 -1
  549. package/dist/dictation/dictation-controls.js +24 -20
  550. package/dist/dictation/dictation-controls.js.map +1 -1
  551. package/dist/dictation/use-athena-dictation-engine.cjs +3 -3
  552. package/dist/dictation/use-athena-dictation-engine.cjs.map +1 -1
  553. package/dist/dictation/use-dictation.cjs +22 -22
  554. package/dist/dictation/use-dictation.cjs.map +1 -1
  555. package/dist/index.cjs +29 -2
  556. package/dist/index.cjs.map +1 -1
  557. package/dist/index.d.ts +18 -4
  558. package/dist/index.js +30 -3
  559. package/dist/index.js.map +1 -1
  560. package/dist/keryx-http/src/receive-only-socket.cjs +40 -0
  561. package/dist/keryx-http/src/receive-only-socket.cjs.map +1 -0
  562. package/dist/keryx-http/src/receive-only-socket.d.ts +27 -0
  563. package/dist/keryx-http/src/receive-only-socket.js +40 -0
  564. package/dist/keryx-http/src/receive-only-socket.js.map +1 -0
  565. package/dist/keryx-http/src/unconfirmed-update-attributions.cjs +190 -0
  566. package/dist/keryx-http/src/unconfirmed-update-attributions.cjs.map +1 -0
  567. package/dist/keryx-http/src/unconfirmed-update-attributions.d.ts +132 -0
  568. package/dist/keryx-http/src/unconfirmed-update-attributions.js +190 -0
  569. package/dist/keryx-http/src/unconfirmed-update-attributions.js.map +1 -0
  570. package/dist/keryx-http/src/update-attributions.cjs +141 -0
  571. package/dist/keryx-http/src/update-attributions.cjs.map +1 -0
  572. package/dist/keryx-http/src/update-attributions.d.ts +107 -0
  573. package/dist/keryx-http/src/update-attributions.js +141 -0
  574. package/dist/keryx-http/src/update-attributions.js.map +1 -0
  575. package/dist/lib/owner-document.cjs +6 -6
  576. package/dist/lib/owner-document.cjs.map +1 -1
  577. package/dist/lib/use-athena-rest-query.cjs +4 -4
  578. package/dist/lib/use-athena-rest-query.cjs.map +1 -1
  579. package/dist/lib/use-document-active.cjs +4 -4
  580. package/dist/lib/use-document-active.cjs.map +1 -1
  581. package/dist/lib/use-prefers-reduced-motion.cjs +2 -2
  582. package/dist/lib/use-prefers-reduced-motion.cjs.map +1 -1
  583. package/dist/offline/offline-history.cjs +7 -7
  584. package/dist/offline/offline-history.cjs.map +1 -1
  585. package/dist/provider/AthenaContext.cjs +3 -3
  586. package/dist/provider/AthenaContext.cjs.map +1 -1
  587. package/dist/provider/AthenaProvider.cjs +120 -79
  588. package/dist/provider/AthenaProvider.cjs.map +1 -1
  589. package/dist/provider/AthenaProvider.d.ts +11 -1
  590. package/dist/provider/AthenaProvider.js +44 -3
  591. package/dist/provider/AthenaProvider.js.map +1 -1
  592. package/dist/provider/PostHogProvider.cjs +2 -2
  593. package/dist/provider/PostHogProvider.cjs.map +1 -1
  594. package/dist/provider/agent-selection-context.cjs +2 -2
  595. package/dist/provider/agent-selection-context.cjs.map +1 -1
  596. package/dist/provider/chat-mode-context.cjs +2 -2
  597. package/dist/provider/chat-mode-context.cjs.map +1 -1
  598. package/dist/provider/session-persistence-context.cjs +10 -0
  599. package/dist/provider/session-persistence-context.cjs.map +1 -0
  600. package/dist/provider/session-persistence-context.d.ts +15 -0
  601. package/dist/provider/session-persistence-context.js +10 -0
  602. package/dist/provider/session-persistence-context.js.map +1 -0
  603. package/dist/provider/statewire-history-context.cjs +4 -4
  604. package/dist/provider/statewire-history-context.cjs.map +1 -1
  605. package/dist/provider/statewire-lifecycle-context.cjs +3 -3
  606. package/dist/provider/statewire-lifecycle-context.cjs.map +1 -1
  607. package/dist/provider/statewire-window-context.cjs +3 -3
  608. package/dist/provider/statewire-window-context.cjs.map +1 -1
  609. package/dist/provider/theme-style-context.cjs +3 -3
  610. package/dist/provider/theme-style-context.cjs.map +1 -1
  611. package/dist/react/package.json.cjs +1 -1
  612. package/dist/react/package.json.js +1 -1
  613. package/dist/runtime/StatewireThreadConfigLaneSync.cjs +10 -10
  614. package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
  615. package/dist/runtime/auth-refusal-restart.cjs +7 -7
  616. package/dist/runtime/auth-refusal-restart.cjs.map +1 -1
  617. package/dist/runtime/auth.cjs +13 -13
  618. package/dist/runtime/auth.cjs.map +1 -1
  619. package/dist/runtime/statewire-lifecycle.cjs +1 -0
  620. package/dist/runtime/statewire-lifecycle.cjs.map +1 -1
  621. package/dist/runtime/statewire-lifecycle.d.ts +3 -1
  622. package/dist/runtime/statewire-lifecycle.js +2 -1
  623. package/dist/runtime/statewire-lifecycle.js.map +1 -1
  624. package/dist/runtime/statewire-server-lane-context.cjs +2 -2
  625. package/dist/runtime/statewire-server-lane-context.cjs.map +1 -1
  626. package/dist/runtime/statewire-session-lane.cjs +4 -4
  627. package/dist/runtime/statewire-session-lane.cjs.map +1 -1
  628. package/dist/runtime/useAthenaStatewireRuntime.cjs +10 -8
  629. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  630. package/dist/runtime/useAthenaStatewireRuntime.d.ts +2 -0
  631. package/dist/runtime/useAthenaStatewireRuntime.js +2 -0
  632. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  633. package/dist/styles.css +1 -1
  634. package/dist/threads/Inbox.cjs +8 -8
  635. package/dist/threads/Inbox.cjs.map +1 -1
  636. package/dist/threads/SessionList.cjs +9 -9
  637. package/dist/threads/SessionList.cjs.map +1 -1
  638. package/dist/threads/SessionsPage.cjs +11 -11
  639. package/dist/threads/SessionsPage.cjs.map +1 -1
  640. package/dist/threads/api.cjs.map +1 -1
  641. package/dist/threads/api.d.ts +15 -0
  642. package/dist/threads/api.js.map +1 -1
  643. package/dist/threads/conversation-list-fetcher.cjs +13 -5
  644. package/dist/threads/conversation-list-fetcher.cjs.map +1 -1
  645. package/dist/threads/conversation-list-fetcher.d.ts +4 -1
  646. package/dist/threads/conversation-list-fetcher.js +13 -5
  647. package/dist/threads/conversation-list-fetcher.js.map +1 -1
  648. package/dist/threads/index-triggered-refresh.cjs +10 -10
  649. package/dist/threads/index-triggered-refresh.cjs.map +1 -1
  650. package/dist/threads/mark-viewed-thread-read.cjs +12 -12
  651. package/dist/threads/mark-viewed-thread-read.cjs.map +1 -1
  652. package/dist/threads/offline-session-list.cjs +3 -3
  653. package/dist/threads/offline-session-list.cjs.map +1 -1
  654. package/dist/threads/session-list-tab-share.cjs +5 -5
  655. package/dist/threads/session-list-tab-share.cjs.map +1 -1
  656. package/dist/threads/statewire-thread-list.cjs +79 -57
  657. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  658. package/dist/threads/statewire-thread-list.d.ts +20 -8
  659. package/dist/threads/statewire-thread-list.js +28 -6
  660. package/dist/threads/statewire-thread-list.js.map +1 -1
  661. package/dist/threads/thread-id-context.cjs +5 -5
  662. package/dist/threads/thread-id-context.cjs.map +1 -1
  663. package/dist/threads/use-athena-session-attention.cjs +2 -2
  664. package/dist/threads/use-athena-session-attention.cjs.map +1 -1
  665. package/dist/threads/use-athena-sessions.cjs +37 -15
  666. package/dist/threads/use-athena-sessions.cjs.map +1 -1
  667. package/dist/threads/use-athena-sessions.d.ts +10 -5
  668. package/dist/threads/use-athena-sessions.js +28 -6
  669. package/dist/threads/use-athena-sessions.js.map +1 -1
  670. package/dist/threads/use-athena-thread-model.cjs +3 -3
  671. package/dist/threads/use-athena-thread-model.cjs.map +1 -1
  672. package/dist/threads/use-rest-conversation-history.cjs +3 -3
  673. package/dist/threads/use-rest-conversation-history.cjs.map +1 -1
  674. package/dist/threads/use-rest-conversation-history.d.ts +1 -0
  675. package/dist/threads/use-statewire-conversation-history.cjs +8 -8
  676. package/dist/threads/use-statewire-conversation-history.cjs.map +1 -1
  677. package/dist/threads/use-thread-archive.cjs +9 -9
  678. package/dist/threads/use-thread-archive.cjs.map +1 -1
  679. package/dist/threads/use-thread-favorite.cjs +2 -2
  680. package/dist/threads/use-thread-favorite.cjs.map +1 -1
  681. package/dist/threads/use-thread-field-override.cjs +20 -20
  682. package/dist/threads/use-thread-field-override.cjs.map +1 -1
  683. package/dist/threads/use-thread-read-state.cjs +4 -4
  684. package/dist/threads/use-thread-read-state.cjs.map +1 -1
  685. package/dist/threads/use-thread-rename.cjs +2 -2
  686. package/dist/threads/use-thread-rename.cjs.map +1 -1
  687. package/dist/threads/useAthenaThreadManager.cjs +2 -2
  688. package/dist/threads/useAthenaThreadManager.cjs.map +1 -1
  689. package/dist/tools/NestedPtcMessages.cjs +6 -6
  690. package/dist/tools/NestedPtcMessages.cjs.map +1 -1
  691. package/dist/tools/append-document-tool-ui.cjs +7 -7
  692. package/dist/tools/append-document-tool-ui.cjs.map +1 -1
  693. package/dist/tools/file-tool-uis.cjs +2 -2
  694. package/dist/tools/file-tool-uis.cjs.map +1 -1
  695. package/dist/tools/misc-tool-uis.cjs +2 -2
  696. package/dist/tools/misc-tool-uis.cjs.map +1 -1
  697. package/dist/tools/primitives.cjs +6 -6
  698. package/dist/tools/primitives.cjs.map +1 -1
  699. package/dist/tools/read-asset-tool-ui.cjs +6 -6
  700. package/dist/tools/read-asset-tool-ui.cjs.map +1 -1
  701. package/dist/tools/subagent-task-tool-ui.cjs +21 -21
  702. package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
  703. package/dist/tools/test-recording-tool-uis.cjs +16 -16
  704. package/dist/tools/test-recording-tool-uis.cjs.map +1 -1
  705. package/dist/tools/todo-plan-store.cjs +4 -4
  706. package/dist/tools/todo-plan-store.cjs.map +1 -1
  707. package/dist/tools/tool-appearance.cjs +3 -3
  708. package/dist/tools/tool-appearance.cjs.map +1 -1
  709. package/dist/tools/tool-fallback.cjs +14 -14
  710. package/dist/tools/tool-fallback.cjs.map +1 -1
  711. package/dist/tools/tool-uis.cjs +74 -74
  712. package/dist/tools/tool-uis.cjs.map +1 -1
  713. package/dist/tools/use-elapsed-seconds.cjs +3 -3
  714. package/dist/tools/use-elapsed-seconds.cjs.map +1 -1
  715. package/dist/tools/write-todos-tool-ui.cjs +9 -9
  716. package/dist/tools/write-todos-tool-ui.cjs.map +1 -1
  717. package/dist/ui/image-viewer.cjs +382 -0
  718. package/dist/ui/image-viewer.cjs.map +1 -0
  719. package/dist/ui/image-viewer.d.ts +50 -0
  720. package/dist/ui/image-viewer.js +382 -0
  721. package/dist/ui/image-viewer.js.map +1 -0
  722. package/dist/voice/chat.cjs +6 -0
  723. package/dist/voice/chat.cjs.map +1 -1
  724. package/dist/voice/chat.d.ts +1 -1
  725. package/dist/voice/chat.js +8 -2
  726. package/dist/voice/livekit-join.cjs +52 -101
  727. package/dist/voice/livekit-join.cjs.map +1 -1
  728. package/dist/voice/livekit-join.d.ts +1 -6
  729. package/dist/voice/livekit-join.js +52 -101
  730. package/dist/voice/livekit-join.js.map +1 -1
  731. package/dist/voice/livekit.cjs.map +1 -1
  732. package/dist/voice/livekit.d.ts +11 -1
  733. package/dist/voice/livekit.js.map +1 -1
  734. package/dist/voice/use-athena-voice-session.cjs +34 -34
  735. package/dist/voice/use-athena-voice-session.cjs.map +1 -1
  736. package/dist/workbench/ComputerLiveDesktop.cjs +13 -13
  737. package/dist/workbench/ComputerLiveDesktop.cjs.map +1 -1
  738. package/dist/workbench/SessionWorkbench.cjs +22 -22
  739. package/dist/workbench/SessionWorkbench.cjs.map +1 -1
  740. package/dist/workbench/session-workbench-context.cjs +3 -3
  741. package/dist/workbench/session-workbench-context.cjs.map +1 -1
  742. package/dist/workbench/session-workbench-panes.cjs +8 -8
  743. package/dist/workbench/session-workbench-panes.cjs.map +1 -1
  744. package/dist/workbench/workbench-layout-context.cjs +3 -3
  745. package/dist/workbench/workbench-layout-context.cjs.map +1 -1
  746. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"misc-tool-uis.cjs","sources":["../../src/tools/misc-tool-uis.tsx"],"sourcesContent":["/**\n * Small dedicated cards for tools whose generic fallback rendering read\n * poorly: currently the pip installer (Olympus registers it; the SDK's own\n * registry includes it).\n */\nimport { PackageIcon } from \"lucide-react\";\nimport { memo } from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport {\n classifyToolResult,\n describePackage,\n isToolResultSuccess,\n} from \"@athenaintel/agent-runtime\";\nimport { ExpandableSection, normalizeResult, ToolCard } from \"./primitives\";\nimport { ToolFallback } from \"./tool-fallback\";\n\nconst InstallPackageToolUIImpl: ToolCallMessagePartComponent = (props) => {\n const { toolName, args, result, status } = props;\n // An install the user refused at the approval gate is neither installed\n // nor failed: the generic card owns the rejected treatment.\n if (classifyToolResult({ status, result }).state === \"rejected\") {\n return <ToolFallback {...props} icon={PackageIcon} />;\n }\n const typedArgs = (args ?? {}) as Record<string, unknown>;\n const packageName = describePackage(typedArgs);\n const isRunning = status?.type === \"running\";\n const isFailed =\n status?.type === \"incomplete\" || (status?.type === \"complete\" && !isToolResultSuccess(result));\n const data = normalizeResult(result);\n const detail =\n typeof result === \"string\" ? result : data ? JSON.stringify(data, null, 2) : null;\n\n return (\n <ToolCard\n icon={PackageIcon}\n status={isFailed && status?.type === \"complete\" ? \"incomplete\" : (status?.type ?? \"complete\")}\n title={\n isRunning\n ? \"Installing package...\"\n : isFailed\n ? \"Couldn't install package\"\n : \"Installed package\"\n }\n subtitle={packageName}\n toolName={toolName}\n error={status?.type === \"incomplete\" ? String(status.error ?? \"\") || undefined : undefined}\n args={typedArgs}\n result={result}\n >\n {!isRunning && detail ? (\n <ExpandableSection label=\"Show output\">\n <pre className=\"max-h-64 overflow-auto whitespace-pre-wrap break-all text-[11px] leading-snug text-muted-foreground\">\n {detail}\n </pre>\n </ExpandableSection>\n ) : null}\n </ToolCard>\n );\n};\n\nexport const InstallPackageToolUI = memo(\n InstallPackageToolUIImpl,\n) as unknown as ToolCallMessagePartComponent;\nInstallPackageToolUI.displayName = \"InstallPackageToolUI\";\n"],"names":["classifyToolResult","jsx","ToolFallback","PackageIcon","describePackage","isToolResultSuccess","normalizeResult","ToolCard","ExpandableSection","memo"],"mappings":";;;;;;;;;AAgBA,MAAM,2BAAyD,CAAC,UAAU;AACxE,QAAM,EAAE,UAAU,MAAM,QAAQ,WAAW;AAG3C,MAAIA,WAAAA,mBAAmB,EAAE,QAAQ,QAAQ,EAAE,UAAU,YAAY;AAC/D,WAAOC,2BAAAA,IAACC,aAAAA,cAAA,EAAc,GAAG,OAAO,MAAMC,YAAAA,aAAa;AAAA,EACrD;AACA,QAAM,YAAa,QAAQ,CAAA;AAC3B,QAAM,cAAcC,aAAAA,gBAAgB,SAAS;AAC7C,QAAM,aAAY,iCAAQ,UAAS;AACnC,QAAM,YACJ,iCAAQ,UAAS,iBAAiB,iCAAQ,UAAS,cAAc,CAACC,WAAAA,oBAAoB,MAAM;AAC9F,QAAM,OAAOC,WAAAA,gBAAgB,MAAM;AACnC,QAAM,SACJ,OAAO,WAAW,WAAW,SAAS,OAAO,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI;AAE/E,SACEL,2BAAAA;AAAAA,IAACM,WAAAA;AAAAA,IAAA;AAAA,MACC,MAAMJ,YAAAA;AAAAA,MACN,QAAQ,aAAY,iCAAQ,UAAS,aAAa,gBAAgB,iCAAQ,SAAQ;AAAA,MAClF,OACE,YACI,0BACA,WACE,6BACA;AAAA,MAER,UAAU;AAAA,MACV;AAAA,MACA,QAAO,iCAAQ,UAAS,eAAe,OAAO,OAAO,SAAS,EAAE,KAAK,SAAY;AAAA,MACjF,MAAM;AAAA,MACN;AAAA,MAEC,UAAA,CAAC,aAAa,SACbF,2BAAAA,IAACO,8BAAA,EAAkB,OAAM,eACvB,UAAAP,2BAAAA,IAAC,OAAA,EAAI,WAAU,uGACZ,UAAA,OAAA,CACH,GACF,IACE;AAAA,IAAA;AAAA,EAAA;AAGV;AAEO,MAAM,uBAAuBQ,MAAAA;AAAAA,EAClC;AACF;AACA,qBAAqB,cAAc;;"}
1
+ {"version":3,"file":"misc-tool-uis.cjs","sources":["../../src/tools/misc-tool-uis.tsx"],"sourcesContent":["/**\n * Small dedicated cards for tools whose generic fallback rendering read\n * poorly: currently the pip installer (Olympus registers it; the SDK's own\n * registry includes it).\n */\nimport { PackageIcon } from \"lucide-react\";\nimport { memo } from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport {\n classifyToolResult,\n describePackage,\n isToolResultSuccess,\n} from \"@athenaintel/agent-runtime\";\nimport { ExpandableSection, normalizeResult, ToolCard } from \"./primitives\";\nimport { ToolFallback } from \"./tool-fallback\";\n\nconst InstallPackageToolUIImpl: ToolCallMessagePartComponent = (props) => {\n const { toolName, args, result, status } = props;\n // An install the user refused at the approval gate is neither installed\n // nor failed: the generic card owns the rejected treatment.\n if (classifyToolResult({ status, result }).state === \"rejected\") {\n return <ToolFallback {...props} icon={PackageIcon} />;\n }\n const typedArgs = (args ?? {}) as Record<string, unknown>;\n const packageName = describePackage(typedArgs);\n const isRunning = status?.type === \"running\";\n const isFailed =\n status?.type === \"incomplete\" || (status?.type === \"complete\" && !isToolResultSuccess(result));\n const data = normalizeResult(result);\n const detail =\n typeof result === \"string\" ? result : data ? JSON.stringify(data, null, 2) : null;\n\n return (\n <ToolCard\n icon={PackageIcon}\n status={isFailed && status?.type === \"complete\" ? \"incomplete\" : (status?.type ?? \"complete\")}\n title={\n isRunning\n ? \"Installing package...\"\n : isFailed\n ? \"Couldn't install package\"\n : \"Installed package\"\n }\n subtitle={packageName}\n toolName={toolName}\n error={status?.type === \"incomplete\" ? String(status.error ?? \"\") || undefined : undefined}\n args={typedArgs}\n result={result}\n >\n {!isRunning && detail ? (\n <ExpandableSection label=\"Show output\">\n <pre className=\"max-h-64 overflow-auto whitespace-pre-wrap break-all text-[11px] leading-snug text-muted-foreground\">\n {detail}\n </pre>\n </ExpandableSection>\n ) : null}\n </ToolCard>\n );\n};\n\nexport const InstallPackageToolUI = memo(\n InstallPackageToolUIImpl,\n) as unknown as ToolCallMessagePartComponent;\nInstallPackageToolUI.displayName = \"InstallPackageToolUI\";\n"],"names":["classifyToolResult","jsx","ToolFallback","PackageIcon","describePackage","isToolResultSuccess","normalizeResult","ToolCard","ExpandableSection","memo"],"mappings":";;;;;;;;;AAgBA,MAAM,2BAAyD,CAAC,UAAU;AACxE,QAAM,EAAE,UAAU,MAAM,QAAQ,WAAW;AAG3C,MAAIA,WAAAA,mBAAmB,EAAE,QAAQ,QAAQ,EAAE,UAAU,YAAY;AAC/D,WAAOC,2BAAAA,IAACC,aAAAA,cAAA,EAAc,GAAG,OAAO,MAAMC,YAAAA,aAAa;AAAA,EACrD;AACA,QAAM,YAAa,QAAQ,CAAA;AAC3B,QAAM,cAAcC,aAAAA,gBAAgB,SAAS;AAC7C,QAAM,aAAY,iCAAQ,UAAS;AACnC,QAAM,YACJ,iCAAQ,UAAS,iBAAiB,iCAAQ,UAAS,cAAc,CAACC,WAAAA,oBAAoB,MAAM;AAC9F,QAAM,OAAOC,WAAAA,gBAAgB,MAAM;AACnC,QAAM,SACJ,OAAO,WAAW,WAAW,SAAS,OAAO,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI;AAE/E,SACEL,2BAAAA;AAAAA,IAACM,WAAAA;AAAAA,IAAA;AAAA,MACC,MAAMJ,YAAAA;AAAAA,MACN,QAAQ,aAAY,iCAAQ,UAAS,aAAa,gBAAgB,iCAAQ,SAAQ;AAAA,MAClF,OACE,YACI,0BACA,WACE,6BACA;AAAA,MAER,UAAU;AAAA,MACV;AAAA,MACA,QAAO,iCAAQ,UAAS,eAAe,OAAO,OAAO,SAAS,EAAE,KAAK,SAAY;AAAA,MACjF,MAAM;AAAA,MACN;AAAA,MAEC,UAAA,CAAC,aAAa,SACbF,2BAAAA,IAACO,8BAAA,EAAkB,OAAM,eACvB,UAAAP,2BAAAA,IAAC,OAAA,EAAI,WAAU,uGACZ,UAAA,OAAA,CACH,GACF,IACE;AAAA,IAAA;AAAA,EAAA;AAGV;AAEO,MAAM,uBAAuBQ,WAAAA;AAAAA,EAClC;AACF;AACA,qBAAqB,cAAc;;"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
- const react = require("react");
4
+ const require$$0 = require("react");
5
5
  const lucideReact = require("lucide-react");
6
6
  const toolAppearance = require("./tool-appearance.cjs");
7
7
  const toolMetadata = require("../agent-runtime/src/tool-metadata.cjs");
@@ -29,7 +29,7 @@ function truncate(text, max) {
29
29
  }
30
30
  function ToolCard(props) {
31
31
  var _a;
32
- const ThreadToolCard = (_a = react.useContext(toolAppearance.ToolAppearanceContext)) == null ? void 0 : _a.ToolCard;
32
+ const ThreadToolCard = (_a = require$$0.useContext(toolAppearance.ToolAppearanceContext)) == null ? void 0 : _a.ToolCard;
33
33
  if (ThreadToolCard) return /* @__PURE__ */ jsxRuntime.jsx(ThreadToolCard, { ...props });
34
34
  return /* @__PURE__ */ jsxRuntime.jsx(ToolCardBox, { ...props });
35
35
  }
@@ -88,8 +88,8 @@ function CopyToolSpecButton({
88
88
  result,
89
89
  className
90
90
  }) {
91
- const [copied, setCopied] = react.useState(false);
92
- const handleCopy = react.useCallback(() => {
91
+ const [copied, setCopied] = require$$0.useState(false);
92
+ const handleCopy = require$$0.useCallback(() => {
93
93
  const spec = { tool_name: toolName };
94
94
  if (args) spec.arguments = args;
95
95
  else if (argsText) spec.arguments = tryParseJson(argsText) ?? argsText;
@@ -132,8 +132,8 @@ function ExpandableSection({
132
132
  defaultOpen = false
133
133
  }) {
134
134
  var _a;
135
- const [expanded, setExpanded] = react.useState(defaultOpen);
136
- const appearance = ((_a = react.useContext(toolAppearance.ToolAppearanceContext)) == null ? void 0 : _a.appearance) ?? "card";
135
+ const [expanded, setExpanded] = require$$0.useState(defaultOpen);
136
+ const appearance = ((_a = require$$0.useContext(toolAppearance.ToolAppearanceContext)) == null ? void 0 : _a.appearance) ?? "card";
137
137
  if (appearance === "thread") {
138
138
  const heading = sectionHeading(label);
139
139
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "tool-section", className: "flex flex-col gap-1.5 px-3", children: [
@@ -1 +1 @@
1
- {"version":3,"file":"primitives.cjs","sources":["../../src/tools/primitives.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * The shared building blocks every SDK tool card is made of — the card shell\n * (`ToolCard`), the collapsible details section, and the result/text helpers.\n * Kept apart from the tool UI registry so a tool UI module can use them\n * without importing the registry that imports it back.\n */\nimport {\n useCallback,\n useContext,\n useState,\n type ElementType,\n type ReactNode,\n} from \"react\";\nimport { formatToolName } from \"@athenaintel/agent-runtime\";\nimport {\n AlertCircleIcon,\n CheckCircle2Icon,\n ChevronDownIcon,\n ClipboardCopyIcon,\n LoaderIcon,\n} from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { ToolAppearanceContext } from \"./tool-appearance\";\n\nexport { formatToolName };\n\n/** Parse JSON text into a record, or `null` when it is not one. */\nexport function tryParseJson(text: string): Record<string, unknown> | null {\n try {\n const parsed: unknown = JSON.parse(text);\n return typeof parsed === \"object\" && parsed !== null\n ? (parsed as Record<string, unknown>)\n : null;\n } catch {\n return null;\n }\n}\n\n/** Parse a tool result (handles nested `.result`, string-encoded JSON) into a record. */\nexport function normalizeResult(result: unknown): Record<string, unknown> | null {\n if (!result) return null;\n if (typeof result === \"string\") return tryParseJson(result);\n if (typeof result === \"object\") {\n const obj = result as Record<string, unknown>;\n if (typeof obj.result === \"string\") return tryParseJson(obj.result) ?? obj;\n return obj;\n }\n return null;\n}\n\n/** Truncate a string with an ellipsis. */\nexport function truncate(text: string, max: number): string {\n return text.length > max ? `${text.slice(0, max)}...` : text;\n}\n\nexport type ToolStatus = \"running\" | \"complete\" | \"incomplete\" | \"requires-action\";\n\nexport interface ToolCardProps {\n icon: ElementType;\n status: ToolStatus;\n title: string;\n subtitle?: string;\n toolName?: string;\n badge?: string;\n error?: string | null;\n children?: ReactNode;\n args?: Record<string, unknown>;\n result?: unknown;\n}\n\n/**\n * The card shell every dedicated tool UI is built on. Under a thread\n * appearance provider it renders through the provider's row renderer (the\n * `ToolFallback` shell), so a dedicated UI and a generic fallback share one\n * anatomy there; with no provider it is the boxed card below, unchanged.\n */\nexport function ToolCard(props: ToolCardProps) {\n const ThreadToolCard = useContext(ToolAppearanceContext)?.ToolCard;\n if (ThreadToolCard) return <ThreadToolCard {...props} />;\n return <ToolCardBox {...props} />;\n}\n\nfunction ToolCardBox({\n icon: Icon,\n status,\n title,\n subtitle,\n toolName,\n badge,\n error,\n children,\n args,\n result,\n}: ToolCardProps) {\n const isRunning = status === \"running\";\n const isComplete = status === \"complete\";\n const isError = status === \"incomplete\";\n\n return (\n <div className=\"my-3 w-full overflow-hidden rounded-xl border border-border/60 bg-background shadow-sm\">\n <div className=\"flex items-center gap-3 px-4 py-3\">\n <div\n className={cn(\n \"flex size-8 shrink-0 items-center justify-center rounded-lg\",\n isRunning && \"bg-blue-50 text-blue-600\",\n isComplete && \"bg-emerald-50 text-emerald-600\",\n isError && \"bg-destructive/10 text-destructive\",\n )}\n >\n {isRunning ? (\n <LoaderIcon className=\"size-4 animate-spin\" />\n ) : isError ? (\n <AlertCircleIcon className=\"size-4\" />\n ) : (\n <Icon className=\"size-4\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[13px] font-medium text-foreground\">\n {title}\n </span>\n {isComplete && !error && (\n <CheckCircle2Icon className=\"size-3.5 text-emerald-500\" />\n )}\n </div>\n {subtitle && (\n <p className=\"truncate text-[12px] text-muted-foreground\">\n {subtitle}\n </p>\n )}\n </div>\n {toolName && (\n <span className=\"shrink-0 rounded-md bg-muted/60 px-1.5 py-0.5 text-[10px] font-mono text-muted-foreground\">\n {formatToolName(toolName)}\n </span>\n )}\n {badge && (\n <span className=\"shrink-0 rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {badge}\n </span>\n )}\n {isRunning && (\n <div className=\"flex items-center gap-1.5\">\n <div className=\"h-1.5 w-10 animate-pulse rounded-full bg-blue-100\" />\n <div className=\"h-1.5 w-6 animate-pulse rounded-full bg-blue-100\" />\n </div>\n )}\n </div>\n\n {error && (\n <div className=\"border-t border-border/40 bg-destructive/10 px-4 py-2.5\">\n <p className=\"text-[12px] leading-relaxed text-destructive\">\n {error}\n </p>\n </div>\n )}\n\n {children}\n\n {/* Copy tool spec — subtle button at the bottom of every tool card */}\n {toolName && isComplete && (\n <CopyToolSpecButton toolName={toolName} args={args} result={result} />\n )}\n </div>\n );\n}\n\n/** Copies `{ tool_name, arguments, result }` as JSON — the tool spec a support ticket needs. */\nexport function CopyToolSpecButton({\n toolName,\n args,\n argsText,\n result,\n className,\n}: {\n toolName: string;\n args?: Record<string, unknown>;\n argsText?: string;\n result?: unknown;\n className?: string;\n}) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(() => {\n const spec: Record<string, unknown> = { tool_name: toolName };\n if (args) spec.arguments = args;\n else if (argsText) spec.arguments = tryParseJson(argsText) ?? argsText;\n if (result !== undefined) {\n if (typeof result === \"string\") {\n const parsed = tryParseJson(result);\n spec.result = parsed ?? result;\n } else {\n spec.result = result;\n }\n }\n navigator.clipboard.writeText(JSON.stringify(spec, null, 2)).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }, [toolName, args, argsText, result]);\n\n return (\n <div className={cn(\"flex justify-end px-3 pb-1.5\", className)}>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] text-muted-foreground/40 transition-colors hover:bg-muted/50 hover:text-muted-foreground\"\n title=\"Copy tool name, arguments, and result as JSON\"\n >\n <ClipboardCopyIcon className=\"size-2.5\" />\n {copied ? \"Copied!\" : toolName}\n </button>\n </div>\n );\n}\n\n/** \"Show search results\" → \"Search results\": the static heading a section gets once the row's disclosure is the only toggle. */\nfunction sectionHeading(label: string | undefined): string | null {\n if (!label) return null;\n const heading = label.replace(/^show\\s+/i, \"\").trim();\n if (!heading) return null;\n return heading.charAt(0).toUpperCase() + heading.slice(1);\n}\n\nexport function ExpandableSection({\n label,\n children,\n defaultOpen = false,\n}: {\n label?: string;\n children: ReactNode;\n defaultOpen?: boolean;\n}) {\n const [expanded, setExpanded] = useState(defaultOpen);\n const appearance = useContext(ToolAppearanceContext)?.appearance ?? \"card\";\n\n // Inside the thread row the card's own disclosure is the one toggle; a\n // second nested \"Show details\" would make a reader click twice.\n if (appearance === \"thread\") {\n const heading = sectionHeading(label);\n return (\n <div data-slot=\"tool-section\" className=\"flex flex-col gap-1.5 px-3\">\n {heading ? (\n <p className=\"text-xs font-medium text-muted-foreground\">{heading}</p>\n ) : null}\n <div className=\"max-h-72 overflow-y-auto\">{children}</div>\n </div>\n );\n }\n\n return (\n <div className=\"border-t border-border/40\">\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className=\"flex w-full items-center gap-2 px-4 py-2 text-left text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/30\"\n >\n <ChevronDownIcon\n className={cn(\n \"size-3.5 shrink-0 transition-transform duration-200\",\n !expanded && \"-rotate-90\",\n )}\n />\n <span>{expanded ? \"Hide details\" : (label ?? \"Show details\")}</span>\n </button>\n {expanded && (\n <div className=\"max-h-72 overflow-y-auto border-t border-border/40 bg-muted/10 px-4 py-3\">\n {children}\n </div>\n )}\n </div>\n );\n}\n"],"names":["useContext","ToolAppearanceContext","jsx","jsxs","cn","LoaderIcon","AlertCircleIcon","CheckCircle2Icon","formatToolName","useState","useCallback","ClipboardCopyIcon","ChevronDownIcon"],"mappings":"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"}
1
+ {"version":3,"file":"primitives.cjs","sources":["../../src/tools/primitives.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * The shared building blocks every SDK tool card is made of — the card shell\n * (`ToolCard`), the collapsible details section, and the result/text helpers.\n * Kept apart from the tool UI registry so a tool UI module can use them\n * without importing the registry that imports it back.\n */\nimport {\n useCallback,\n useContext,\n useState,\n type ElementType,\n type ReactNode,\n} from \"react\";\nimport { formatToolName } from \"@athenaintel/agent-runtime\";\nimport {\n AlertCircleIcon,\n CheckCircle2Icon,\n ChevronDownIcon,\n ClipboardCopyIcon,\n LoaderIcon,\n} from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { ToolAppearanceContext } from \"./tool-appearance\";\n\nexport { formatToolName };\n\n/** Parse JSON text into a record, or `null` when it is not one. */\nexport function tryParseJson(text: string): Record<string, unknown> | null {\n try {\n const parsed: unknown = JSON.parse(text);\n return typeof parsed === \"object\" && parsed !== null\n ? (parsed as Record<string, unknown>)\n : null;\n } catch {\n return null;\n }\n}\n\n/** Parse a tool result (handles nested `.result`, string-encoded JSON) into a record. */\nexport function normalizeResult(result: unknown): Record<string, unknown> | null {\n if (!result) return null;\n if (typeof result === \"string\") return tryParseJson(result);\n if (typeof result === \"object\") {\n const obj = result as Record<string, unknown>;\n if (typeof obj.result === \"string\") return tryParseJson(obj.result) ?? obj;\n return obj;\n }\n return null;\n}\n\n/** Truncate a string with an ellipsis. */\nexport function truncate(text: string, max: number): string {\n return text.length > max ? `${text.slice(0, max)}...` : text;\n}\n\nexport type ToolStatus = \"running\" | \"complete\" | \"incomplete\" | \"requires-action\";\n\nexport interface ToolCardProps {\n icon: ElementType;\n status: ToolStatus;\n title: string;\n subtitle?: string;\n toolName?: string;\n badge?: string;\n error?: string | null;\n children?: ReactNode;\n args?: Record<string, unknown>;\n result?: unknown;\n}\n\n/**\n * The card shell every dedicated tool UI is built on. Under a thread\n * appearance provider it renders through the provider's row renderer (the\n * `ToolFallback` shell), so a dedicated UI and a generic fallback share one\n * anatomy there; with no provider it is the boxed card below, unchanged.\n */\nexport function ToolCard(props: ToolCardProps) {\n const ThreadToolCard = useContext(ToolAppearanceContext)?.ToolCard;\n if (ThreadToolCard) return <ThreadToolCard {...props} />;\n return <ToolCardBox {...props} />;\n}\n\nfunction ToolCardBox({\n icon: Icon,\n status,\n title,\n subtitle,\n toolName,\n badge,\n error,\n children,\n args,\n result,\n}: ToolCardProps) {\n const isRunning = status === \"running\";\n const isComplete = status === \"complete\";\n const isError = status === \"incomplete\";\n\n return (\n <div className=\"my-3 w-full overflow-hidden rounded-xl border border-border/60 bg-background shadow-sm\">\n <div className=\"flex items-center gap-3 px-4 py-3\">\n <div\n className={cn(\n \"flex size-8 shrink-0 items-center justify-center rounded-lg\",\n isRunning && \"bg-blue-50 text-blue-600\",\n isComplete && \"bg-emerald-50 text-emerald-600\",\n isError && \"bg-destructive/10 text-destructive\",\n )}\n >\n {isRunning ? (\n <LoaderIcon className=\"size-4 animate-spin\" />\n ) : isError ? (\n <AlertCircleIcon className=\"size-4\" />\n ) : (\n <Icon className=\"size-4\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[13px] font-medium text-foreground\">\n {title}\n </span>\n {isComplete && !error && (\n <CheckCircle2Icon className=\"size-3.5 text-emerald-500\" />\n )}\n </div>\n {subtitle && (\n <p className=\"truncate text-[12px] text-muted-foreground\">\n {subtitle}\n </p>\n )}\n </div>\n {toolName && (\n <span className=\"shrink-0 rounded-md bg-muted/60 px-1.5 py-0.5 text-[10px] font-mono text-muted-foreground\">\n {formatToolName(toolName)}\n </span>\n )}\n {badge && (\n <span className=\"shrink-0 rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {badge}\n </span>\n )}\n {isRunning && (\n <div className=\"flex items-center gap-1.5\">\n <div className=\"h-1.5 w-10 animate-pulse rounded-full bg-blue-100\" />\n <div className=\"h-1.5 w-6 animate-pulse rounded-full bg-blue-100\" />\n </div>\n )}\n </div>\n\n {error && (\n <div className=\"border-t border-border/40 bg-destructive/10 px-4 py-2.5\">\n <p className=\"text-[12px] leading-relaxed text-destructive\">\n {error}\n </p>\n </div>\n )}\n\n {children}\n\n {/* Copy tool spec — subtle button at the bottom of every tool card */}\n {toolName && isComplete && (\n <CopyToolSpecButton toolName={toolName} args={args} result={result} />\n )}\n </div>\n );\n}\n\n/** Copies `{ tool_name, arguments, result }` as JSON — the tool spec a support ticket needs. */\nexport function CopyToolSpecButton({\n toolName,\n args,\n argsText,\n result,\n className,\n}: {\n toolName: string;\n args?: Record<string, unknown>;\n argsText?: string;\n result?: unknown;\n className?: string;\n}) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(() => {\n const spec: Record<string, unknown> = { tool_name: toolName };\n if (args) spec.arguments = args;\n else if (argsText) spec.arguments = tryParseJson(argsText) ?? argsText;\n if (result !== undefined) {\n if (typeof result === \"string\") {\n const parsed = tryParseJson(result);\n spec.result = parsed ?? result;\n } else {\n spec.result = result;\n }\n }\n navigator.clipboard.writeText(JSON.stringify(spec, null, 2)).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }, [toolName, args, argsText, result]);\n\n return (\n <div className={cn(\"flex justify-end px-3 pb-1.5\", className)}>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] text-muted-foreground/40 transition-colors hover:bg-muted/50 hover:text-muted-foreground\"\n title=\"Copy tool name, arguments, and result as JSON\"\n >\n <ClipboardCopyIcon className=\"size-2.5\" />\n {copied ? \"Copied!\" : toolName}\n </button>\n </div>\n );\n}\n\n/** \"Show search results\" → \"Search results\": the static heading a section gets once the row's disclosure is the only toggle. */\nfunction sectionHeading(label: string | undefined): string | null {\n if (!label) return null;\n const heading = label.replace(/^show\\s+/i, \"\").trim();\n if (!heading) return null;\n return heading.charAt(0).toUpperCase() + heading.slice(1);\n}\n\nexport function ExpandableSection({\n label,\n children,\n defaultOpen = false,\n}: {\n label?: string;\n children: ReactNode;\n defaultOpen?: boolean;\n}) {\n const [expanded, setExpanded] = useState(defaultOpen);\n const appearance = useContext(ToolAppearanceContext)?.appearance ?? \"card\";\n\n // Inside the thread row the card's own disclosure is the one toggle; a\n // second nested \"Show details\" would make a reader click twice.\n if (appearance === \"thread\") {\n const heading = sectionHeading(label);\n return (\n <div data-slot=\"tool-section\" className=\"flex flex-col gap-1.5 px-3\">\n {heading ? (\n <p className=\"text-xs font-medium text-muted-foreground\">{heading}</p>\n ) : null}\n <div className=\"max-h-72 overflow-y-auto\">{children}</div>\n </div>\n );\n }\n\n return (\n <div className=\"border-t border-border/40\">\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className=\"flex w-full items-center gap-2 px-4 py-2 text-left text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/30\"\n >\n <ChevronDownIcon\n className={cn(\n \"size-3.5 shrink-0 transition-transform duration-200\",\n !expanded && \"-rotate-90\",\n )}\n />\n <span>{expanded ? \"Hide details\" : (label ?? \"Show details\")}</span>\n </button>\n {expanded && (\n <div className=\"max-h-72 overflow-y-auto border-t border-border/40 bg-muted/10 px-4 py-3\">\n {children}\n </div>\n )}\n </div>\n );\n}\n"],"names":["useContext","ToolAppearanceContext","jsx","jsxs","cn","LoaderIcon","AlertCircleIcon","CheckCircle2Icon","formatToolName","useState","useCallback","ClipboardCopyIcon","ChevronDownIcon"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
- const react = require("react");
4
+ const require$$0 = require("react");
5
5
  const lucideReact = require("lucide-react");
6
6
  const rangePreview = require("../sheet-range/range-preview.cjs");
7
7
  const rangePreviewTable = require("../sheet-range/range-preview-table.cjs");
@@ -105,20 +105,20 @@ const ReadAssetToolUIImpl = ({
105
105
  isError: isToolError
106
106
  }) => {
107
107
  var _a;
108
- const [expanded, setExpanded] = react.useState(false);
108
+ const [expanded, setExpanded] = require$$0.useState(false);
109
109
  const typedArgs = args;
110
110
  const assetIds = (typedArgs == null ? void 0 : typedArgs.asset_ids) ?? [];
111
111
  const firstAssetId = assetIds[0] ?? "";
112
112
  const assetCount = assetIds.length;
113
- const normalizedResult = react.useMemo(() => normalizeResult(result), [result]);
114
- const resultItems = react.useMemo(
113
+ const normalizedResult = require$$0.useMemo(() => normalizeResult(result), [result]);
114
+ const resultItems = require$$0.useMemo(
115
115
  () => getResultItems(normalizedResult),
116
116
  [normalizedResult]
117
117
  );
118
118
  const isRunning = (status == null ? void 0 : status.type) === "running";
119
119
  const isComplete = (status == null ? void 0 : status.type) === "complete";
120
120
  const isIncomplete = (status == null ? void 0 : status.type) === "incomplete";
121
- const reviewedText = react.useMemo(
121
+ const reviewedText = require$$0.useMemo(
122
122
  () => getReviewedText(resultItems),
123
123
  [resultItems]
124
124
  );
@@ -227,7 +227,7 @@ const ReadAssetToolUIImpl = ({
227
227
  ] })
228
228
  ] });
229
229
  };
230
- const ReadAssetToolUI = react.memo(
230
+ const ReadAssetToolUI = require$$0.memo(
231
231
  ReadAssetToolUIImpl
232
232
  );
233
233
  ReadAssetToolUI.displayName = "ReadAssetToolUI";
@@ -1 +1 @@
1
- {"version":3,"file":"read-asset-tool-ui.cjs","sources":["../../src/tools/read-asset-tool-ui.tsx"],"sourcesContent":["import { memo, useMemo, useState } from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport {\n CheckCircle2Icon,\n ChevronDownIcon,\n FileTextIcon,\n LoaderIcon,\n AlertCircleIcon,\n BookOpenIcon,\n} from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { rangePreviewFromCellMap } from \"../sheet-range/range-preview\";\nimport { RangePreviewTable } from \"../sheet-range/range-preview-table\";\nimport { getAssetInfo, tryParseJson } from \"./asset-utils\";\n\nfunction normalizeResult(result: unknown): unknown {\n if (typeof result === \"string\") return tryParseJson(result) ?? result;\n if (typeof result === \"object\" && result !== null) {\n const obj = result as Record<string, unknown>;\n if (typeof obj.result === \"string\")\n return tryParseJson(obj.result) ?? obj.result;\n return obj;\n }\n return result;\n}\n\nfunction isErrorResult(resultText: string): boolean {\n return (\n resultText.startsWith(\"Error reading asset\") ||\n resultText.startsWith(\"Error:\")\n );\n}\n\ninterface ReadAssetResultItem {\n asset_id?: string;\n format?: string;\n content?: string;\n success?: boolean;\n error?: string;\n title?: string;\n}\n\nfunction isReadAssetResultItem(value: unknown): value is ReadAssetResultItem {\n if (!value || typeof value !== \"object\") return false;\n const item = value as Record<string, unknown>;\n return (\n typeof item.asset_id === \"string\" ||\n typeof item.format === \"string\" ||\n typeof item.content === \"string\" ||\n typeof item.success === \"boolean\" ||\n typeof item.error === \"string\"\n );\n}\n\nfunction getResultItems(value: unknown): ReadAssetResultItem[] {\n if (Array.isArray(value)) return value.filter(isReadAssetResultItem);\n if (isReadAssetResultItem(value)) return [value];\n return [];\n}\n\nfunction getResultAssetIds(items: ReadAssetResultItem[]): string[] {\n return items\n .map((item) => item.asset_id?.split(\"?\")[0])\n .filter((assetId): assetId is string => !!assetId);\n}\n\nfunction getReviewedText(items: ReadAssetResultItem[]): string | null {\n const textParts = items\n .filter(\n (item) =>\n item.success !== false &&\n typeof item.content === \"string\" &&\n item.content,\n )\n .map((item) => item.content as string);\n return textParts.length > 0 ? textParts.join(\"\\n\\n---\\n\\n\") : null;\n}\n\nfunction getErrorText(items: ReadAssetResultItem[]): string | null {\n const firstError = items.find((item) => item.success === false && item.error);\n return firstError?.error ?? null;\n}\n\n// --- Workbook preview ---\n\ntype WorkbookCellValue =\n | string\n | number\n | boolean\n | null\n | [string, unknown]\n | [string, unknown, string];\n\ninterface WorkbookSheet {\n sheetName: string;\n dimension: string;\n cells: Record<string, WorkbookCellValue>;\n}\n\ninterface WorkbookFormat {\n workbook: {\n sheets: WorkbookSheet[];\n };\n}\n\nfunction isWorkbookFormat(value: unknown): value is WorkbookFormat {\n if (!value || typeof value !== \"object\") return false;\n const obj = value as Record<string, unknown>;\n if (!obj.workbook || typeof obj.workbook !== \"object\") return false;\n const workbook = obj.workbook as Record<string, unknown>;\n return Array.isArray(workbook.sheets);\n}\n\nfunction formatCellValue(value: WorkbookCellValue | undefined): string {\n if (value === null || value === undefined) return \"\";\n if (Array.isArray(value)) return String(value[0] ?? \"\");\n return String(value);\n}\n\n// A glance at each sheet, not the whole of it: the card's body is short.\nconst WORKBOOK_PREVIEW_MAX_ROWS = 12;\nconst WORKBOOK_PREVIEW_MAX_COLUMNS = 8;\n\nfunction WorkbookPreview({ workbook }: { workbook: WorkbookFormat }) {\n return (\n <div className=\"space-y-3\">\n {workbook.workbook.sheets.map((sheet) => {\n const preview = rangePreviewFromCellMap({\n range: sheet.dimension,\n cells: sheet.cells ?? {},\n formatCell: formatCellValue,\n maxRows: WORKBOOK_PREVIEW_MAX_ROWS,\n maxColumns: WORKBOOK_PREVIEW_MAX_COLUMNS,\n });\n if (!preview) return null;\n\n return (\n <div key={sheet.sheetName}>\n <p className=\"mb-1 text-xs font-semibold text-muted-foreground\">\n {sheet.sheetName}\n </p>\n <RangePreviewTable\n preview={preview}\n maxRows={WORKBOOK_PREVIEW_MAX_ROWS}\n maxColumns={WORKBOOK_PREVIEW_MAX_COLUMNS}\n caption={`${sheet.sheetName} ${sheet.dimension}`}\n />\n <p className=\"mt-1 text-[10px] text-muted-foreground\">\n Showing preview from {sheet.dimension}\n </p>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction TextContentPreview({ text }: { text: string }) {\n const lines = text.split(\"\\n\");\n const previewLines = lines.slice(0, 20);\n const hasMore = lines.length > 20;\n\n return (\n <pre className=\"whitespace-pre-wrap break-words text-[12px] leading-[1.6] text-muted-foreground\">\n {previewLines.join(\"\\n\")}\n {hasMore && (\n <span className=\"text-muted-foreground/70\">{`\\n... ${lines.length - 20} more lines`}</span>\n )}\n </pre>\n );\n}\n\n// --- Main component ---\n\nconst ReadAssetToolUIImpl: ToolCallMessagePartComponent = ({\n args,\n result,\n status,\n isError: isToolError,\n}) => {\n const [expanded, setExpanded] = useState(false);\n\n const typedArgs = args as Record<string, unknown> | undefined;\n const assetIds = (typedArgs?.asset_ids as string[]) ?? [];\n const firstAssetId = assetIds[0] ?? \"\";\n const assetCount = assetIds.length;\n\n const normalizedResult = useMemo(() => normalizeResult(result), [result]);\n const resultItems = useMemo(\n () => getResultItems(normalizedResult),\n [normalizedResult],\n );\n\n const isRunning = status?.type === \"running\";\n const isComplete = status?.type === \"complete\";\n const isIncomplete = status?.type === \"incomplete\";\n\n const reviewedText = useMemo(\n () => getReviewedText(resultItems),\n [resultItems],\n );\n const resultText =\n typeof normalizedResult === \"string\" ? normalizedResult : reviewedText;\n const workbookData = isWorkbookFormat(normalizedResult)\n ? normalizedResult\n : null;\n const failedItems = resultItems.filter((item) => item.success === false);\n const allFailed =\n resultItems.length > 0 && failedItems.length === resultItems.length;\n const hasPartialIssues = failedItems.length > 0 && !allFailed;\n const resultError = getErrorText(resultItems);\n const hasError =\n isToolError ||\n isIncomplete ||\n allFailed ||\n (resultText != null && isErrorResult(resultText));\n\n const resultAssetIds = getResultAssetIds(resultItems);\n const resolvedAssetCount = Math.max(assetCount, new Set(resultAssetIds).size);\n const primaryAsset = getAssetInfo(firstAssetId || resultAssetIds[0] || \"\");\n // Prefer human titles over raw asset ids — an `asset_<uuid>` label reads as\n // garble to non-technical users. Multi-reads get a per-source checklist of\n // titles below the header; when the runtime offloaded the result (no titles\n // survive, only ids), fall back to a plain count rather than a uuid.\n const resultTitle = resultItems.find((item) => item.title)?.title;\n const isOpaqueId = (label: string) => /^asset_[0-9a-f-]{8,}/i.test(label);\n const primaryLabel =\n resultTitle ??\n (isOpaqueId(primaryAsset.name) ? \"1 document\" : primaryAsset.name);\n const sourceList =\n resolvedAssetCount > 1\n ? resultItems\n .filter((item) => typeof item.title === \"string\" && item.title !== \"\")\n .map((item, index) => ({\n key: item.asset_id ?? `${index}-${item.title}`,\n label: item.title as string,\n failed: item.success === false,\n }))\n : [];\n const assetLabel =\n resolvedAssetCount > 1\n ? `${resolvedAssetCount} documents`\n : primaryLabel;\n const statusTitle = isRunning\n ? \"Reviewing asset content\"\n : hasError\n ? \"Asset content review failed\"\n : hasPartialIssues\n ? \"Asset content reviewed with issues\"\n : \"Asset content review complete\";\n const badge = hasPartialIssues\n ? `${failedItems.length} ${failedItems.length === 1 ? \"issue\" : \"issues\"}`\n : resolvedAssetCount > 1\n ? `${resolvedAssetCount} sources`\n : workbookData\n ? \"Workbook review\"\n : \"Content review\";\n\n const hasContent =\n (isComplete || isIncomplete) && (resultText || workbookData);\n const errorMessage =\n status?.type === \"incomplete\"\n ? String(status.error ?? \"Content review failed\")\n : (resultError ?? (hasError && resultText ? resultText : null));\n\n return (\n <div className=\"my-1.5 w-full overflow-hidden rounded-xl border bg-background shadow-sm\">\n {/* Header */}\n <div className=\"flex items-center gap-3 px-4 py-3\">\n <div\n className={cn(\n \"flex size-9 shrink-0 items-center justify-center rounded-lg\",\n isRunning && \"bg-blue-50 text-blue-600\",\n isComplete && !hasError && \"bg-emerald-50 text-emerald-600\",\n isComplete && hasError && \"bg-red-50 text-red-500\",\n isIncomplete && \"bg-red-50 text-red-500\",\n !isRunning &&\n !isComplete &&\n !isIncomplete &&\n \"bg-muted text-muted-foreground\",\n )}\n >\n {isRunning ? (\n <LoaderIcon className=\"size-4 animate-spin\" />\n ) : hasError || isIncomplete ? (\n <AlertCircleIcon className=\"size-4\" />\n ) : (\n <BookOpenIcon className=\"size-4\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[13px] font-semibold\">{statusTitle}</span>\n {isComplete && !hasError && (\n <CheckCircle2Icon className=\"size-3.5 text-emerald-500\" />\n )}\n <span className=\"rounded-full border border-border/60 bg-muted/50 px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {badge}\n </span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <FileTextIcon className=\"size-4\" />\n <span className=\"truncate text-[12px] text-muted-foreground\">\n Source: {assetLabel}\n </span>\n </div>\n </div>\n\n {/* Loading shimmer for streaming */}\n {isRunning && (\n <div className=\"flex items-center gap-1.5\">\n <div className=\"h-1.5 w-12 animate-pulse rounded-full bg-blue-100\" />\n <div className=\"h-1.5 w-8 animate-pulse rounded-full bg-blue-100\" />\n </div>\n )}\n </div>\n\n {/* Per-source checklist — actual titles with checkmarks (multi-read only;\n offloaded results carry no titles, so the header count stands alone) */}\n {sourceList.length > 1 && (\n <ul className=\"border-t px-4 py-2\">\n {sourceList.slice(0, 8).map((source) => (\n <li\n key={source.key}\n className=\"flex items-center gap-2 py-0.5 text-[12px] text-muted-foreground\"\n >\n {source.failed ? (\n <AlertCircleIcon className=\"size-3.5 shrink-0 text-red-400\" />\n ) : (\n <CheckCircle2Icon className=\"size-3.5 shrink-0 text-emerald-500\" />\n )}\n <span className=\"min-w-0 truncate\">{source.label}</span>\n </li>\n ))}\n {sourceList.length > 8 && (\n <li className=\"py-0.5 text-[11px] text-muted-foreground/70\">\n and {sourceList.length - 8} more\n </li>\n )}\n </ul>\n )}\n\n {/* Error message */}\n {hasError && errorMessage && (\n <div className=\"border-t bg-red-50/50 px-4 py-2.5\">\n <p className=\"text-[12px] leading-relaxed text-red-600\">\n {errorMessage}\n </p>\n </div>\n )}\n\n {/* Content preview (non-error) */}\n {hasContent && !hasError && (\n <div className=\"border-t\">\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className=\"flex w-full items-center gap-2 px-4 py-2 text-left text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/50\"\n >\n <ChevronDownIcon\n className={cn(\n \"size-3.5 shrink-0 transition-transform duration-200\",\n !expanded && \"-rotate-90\",\n )}\n />\n <span>\n {expanded ? \"Hide reviewed content\" : \"Show reviewed content\"}\n </span>\n </button>\n\n {expanded && (\n <div className=\"max-h-80 overflow-y-auto border-t bg-muted/30 px-4 py-3\">\n <div className=\"mb-2 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Reviewed content\n </div>\n {workbookData ? (\n <WorkbookPreview workbook={workbookData} />\n ) : resultText ? (\n <TextContentPreview text={resultText} />\n ) : null}\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport const ReadAssetToolUI = memo(\n ReadAssetToolUIImpl,\n) as unknown as ToolCallMessagePartComponent;\n\nReadAssetToolUI.displayName = \"ReadAssetToolUI\";\n"],"names":["tryParseJson","jsx","rangePreviewFromCellMap","RangePreviewTable","jsxs","useState","useMemo","getAssetInfo","cn","LoaderIcon","AlertCircleIcon","BookOpenIcon","CheckCircle2Icon","FileTextIcon","ChevronDownIcon","memo"],"mappings":"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"}
1
+ {"version":3,"file":"read-asset-tool-ui.cjs","sources":["../../src/tools/read-asset-tool-ui.tsx"],"sourcesContent":["import { memo, useMemo, useState } from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport {\n CheckCircle2Icon,\n ChevronDownIcon,\n FileTextIcon,\n LoaderIcon,\n AlertCircleIcon,\n BookOpenIcon,\n} from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { rangePreviewFromCellMap } from \"../sheet-range/range-preview\";\nimport { RangePreviewTable } from \"../sheet-range/range-preview-table\";\nimport { getAssetInfo, tryParseJson } from \"./asset-utils\";\n\nfunction normalizeResult(result: unknown): unknown {\n if (typeof result === \"string\") return tryParseJson(result) ?? result;\n if (typeof result === \"object\" && result !== null) {\n const obj = result as Record<string, unknown>;\n if (typeof obj.result === \"string\")\n return tryParseJson(obj.result) ?? obj.result;\n return obj;\n }\n return result;\n}\n\nfunction isErrorResult(resultText: string): boolean {\n return (\n resultText.startsWith(\"Error reading asset\") ||\n resultText.startsWith(\"Error:\")\n );\n}\n\ninterface ReadAssetResultItem {\n asset_id?: string;\n format?: string;\n content?: string;\n success?: boolean;\n error?: string;\n title?: string;\n}\n\nfunction isReadAssetResultItem(value: unknown): value is ReadAssetResultItem {\n if (!value || typeof value !== \"object\") return false;\n const item = value as Record<string, unknown>;\n return (\n typeof item.asset_id === \"string\" ||\n typeof item.format === \"string\" ||\n typeof item.content === \"string\" ||\n typeof item.success === \"boolean\" ||\n typeof item.error === \"string\"\n );\n}\n\nfunction getResultItems(value: unknown): ReadAssetResultItem[] {\n if (Array.isArray(value)) return value.filter(isReadAssetResultItem);\n if (isReadAssetResultItem(value)) return [value];\n return [];\n}\n\nfunction getResultAssetIds(items: ReadAssetResultItem[]): string[] {\n return items\n .map((item) => item.asset_id?.split(\"?\")[0])\n .filter((assetId): assetId is string => !!assetId);\n}\n\nfunction getReviewedText(items: ReadAssetResultItem[]): string | null {\n const textParts = items\n .filter(\n (item) =>\n item.success !== false &&\n typeof item.content === \"string\" &&\n item.content,\n )\n .map((item) => item.content as string);\n return textParts.length > 0 ? textParts.join(\"\\n\\n---\\n\\n\") : null;\n}\n\nfunction getErrorText(items: ReadAssetResultItem[]): string | null {\n const firstError = items.find((item) => item.success === false && item.error);\n return firstError?.error ?? null;\n}\n\n// --- Workbook preview ---\n\ntype WorkbookCellValue =\n | string\n | number\n | boolean\n | null\n | [string, unknown]\n | [string, unknown, string];\n\ninterface WorkbookSheet {\n sheetName: string;\n dimension: string;\n cells: Record<string, WorkbookCellValue>;\n}\n\ninterface WorkbookFormat {\n workbook: {\n sheets: WorkbookSheet[];\n };\n}\n\nfunction isWorkbookFormat(value: unknown): value is WorkbookFormat {\n if (!value || typeof value !== \"object\") return false;\n const obj = value as Record<string, unknown>;\n if (!obj.workbook || typeof obj.workbook !== \"object\") return false;\n const workbook = obj.workbook as Record<string, unknown>;\n return Array.isArray(workbook.sheets);\n}\n\nfunction formatCellValue(value: WorkbookCellValue | undefined): string {\n if (value === null || value === undefined) return \"\";\n if (Array.isArray(value)) return String(value[0] ?? \"\");\n return String(value);\n}\n\n// A glance at each sheet, not the whole of it: the card's body is short.\nconst WORKBOOK_PREVIEW_MAX_ROWS = 12;\nconst WORKBOOK_PREVIEW_MAX_COLUMNS = 8;\n\nfunction WorkbookPreview({ workbook }: { workbook: WorkbookFormat }) {\n return (\n <div className=\"space-y-3\">\n {workbook.workbook.sheets.map((sheet) => {\n const preview = rangePreviewFromCellMap({\n range: sheet.dimension,\n cells: sheet.cells ?? {},\n formatCell: formatCellValue,\n maxRows: WORKBOOK_PREVIEW_MAX_ROWS,\n maxColumns: WORKBOOK_PREVIEW_MAX_COLUMNS,\n });\n if (!preview) return null;\n\n return (\n <div key={sheet.sheetName}>\n <p className=\"mb-1 text-xs font-semibold text-muted-foreground\">\n {sheet.sheetName}\n </p>\n <RangePreviewTable\n preview={preview}\n maxRows={WORKBOOK_PREVIEW_MAX_ROWS}\n maxColumns={WORKBOOK_PREVIEW_MAX_COLUMNS}\n caption={`${sheet.sheetName} ${sheet.dimension}`}\n />\n <p className=\"mt-1 text-[10px] text-muted-foreground\">\n Showing preview from {sheet.dimension}\n </p>\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction TextContentPreview({ text }: { text: string }) {\n const lines = text.split(\"\\n\");\n const previewLines = lines.slice(0, 20);\n const hasMore = lines.length > 20;\n\n return (\n <pre className=\"whitespace-pre-wrap break-words text-[12px] leading-[1.6] text-muted-foreground\">\n {previewLines.join(\"\\n\")}\n {hasMore && (\n <span className=\"text-muted-foreground/70\">{`\\n... ${lines.length - 20} more lines`}</span>\n )}\n </pre>\n );\n}\n\n// --- Main component ---\n\nconst ReadAssetToolUIImpl: ToolCallMessagePartComponent = ({\n args,\n result,\n status,\n isError: isToolError,\n}) => {\n const [expanded, setExpanded] = useState(false);\n\n const typedArgs = args as Record<string, unknown> | undefined;\n const assetIds = (typedArgs?.asset_ids as string[]) ?? [];\n const firstAssetId = assetIds[0] ?? \"\";\n const assetCount = assetIds.length;\n\n const normalizedResult = useMemo(() => normalizeResult(result), [result]);\n const resultItems = useMemo(\n () => getResultItems(normalizedResult),\n [normalizedResult],\n );\n\n const isRunning = status?.type === \"running\";\n const isComplete = status?.type === \"complete\";\n const isIncomplete = status?.type === \"incomplete\";\n\n const reviewedText = useMemo(\n () => getReviewedText(resultItems),\n [resultItems],\n );\n const resultText =\n typeof normalizedResult === \"string\" ? normalizedResult : reviewedText;\n const workbookData = isWorkbookFormat(normalizedResult)\n ? normalizedResult\n : null;\n const failedItems = resultItems.filter((item) => item.success === false);\n const allFailed =\n resultItems.length > 0 && failedItems.length === resultItems.length;\n const hasPartialIssues = failedItems.length > 0 && !allFailed;\n const resultError = getErrorText(resultItems);\n const hasError =\n isToolError ||\n isIncomplete ||\n allFailed ||\n (resultText != null && isErrorResult(resultText));\n\n const resultAssetIds = getResultAssetIds(resultItems);\n const resolvedAssetCount = Math.max(assetCount, new Set(resultAssetIds).size);\n const primaryAsset = getAssetInfo(firstAssetId || resultAssetIds[0] || \"\");\n // Prefer human titles over raw asset ids — an `asset_<uuid>` label reads as\n // garble to non-technical users. Multi-reads get a per-source checklist of\n // titles below the header; when the runtime offloaded the result (no titles\n // survive, only ids), fall back to a plain count rather than a uuid.\n const resultTitle = resultItems.find((item) => item.title)?.title;\n const isOpaqueId = (label: string) => /^asset_[0-9a-f-]{8,}/i.test(label);\n const primaryLabel =\n resultTitle ??\n (isOpaqueId(primaryAsset.name) ? \"1 document\" : primaryAsset.name);\n const sourceList =\n resolvedAssetCount > 1\n ? resultItems\n .filter((item) => typeof item.title === \"string\" && item.title !== \"\")\n .map((item, index) => ({\n key: item.asset_id ?? `${index}-${item.title}`,\n label: item.title as string,\n failed: item.success === false,\n }))\n : [];\n const assetLabel =\n resolvedAssetCount > 1\n ? `${resolvedAssetCount} documents`\n : primaryLabel;\n const statusTitle = isRunning\n ? \"Reviewing asset content\"\n : hasError\n ? \"Asset content review failed\"\n : hasPartialIssues\n ? \"Asset content reviewed with issues\"\n : \"Asset content review complete\";\n const badge = hasPartialIssues\n ? `${failedItems.length} ${failedItems.length === 1 ? \"issue\" : \"issues\"}`\n : resolvedAssetCount > 1\n ? `${resolvedAssetCount} sources`\n : workbookData\n ? \"Workbook review\"\n : \"Content review\";\n\n const hasContent =\n (isComplete || isIncomplete) && (resultText || workbookData);\n const errorMessage =\n status?.type === \"incomplete\"\n ? String(status.error ?? \"Content review failed\")\n : (resultError ?? (hasError && resultText ? resultText : null));\n\n return (\n <div className=\"my-1.5 w-full overflow-hidden rounded-xl border bg-background shadow-sm\">\n {/* Header */}\n <div className=\"flex items-center gap-3 px-4 py-3\">\n <div\n className={cn(\n \"flex size-9 shrink-0 items-center justify-center rounded-lg\",\n isRunning && \"bg-blue-50 text-blue-600\",\n isComplete && !hasError && \"bg-emerald-50 text-emerald-600\",\n isComplete && hasError && \"bg-red-50 text-red-500\",\n isIncomplete && \"bg-red-50 text-red-500\",\n !isRunning &&\n !isComplete &&\n !isIncomplete &&\n \"bg-muted text-muted-foreground\",\n )}\n >\n {isRunning ? (\n <LoaderIcon className=\"size-4 animate-spin\" />\n ) : hasError || isIncomplete ? (\n <AlertCircleIcon className=\"size-4\" />\n ) : (\n <BookOpenIcon className=\"size-4\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[13px] font-semibold\">{statusTitle}</span>\n {isComplete && !hasError && (\n <CheckCircle2Icon className=\"size-3.5 text-emerald-500\" />\n )}\n <span className=\"rounded-full border border-border/60 bg-muted/50 px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {badge}\n </span>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <FileTextIcon className=\"size-4\" />\n <span className=\"truncate text-[12px] text-muted-foreground\">\n Source: {assetLabel}\n </span>\n </div>\n </div>\n\n {/* Loading shimmer for streaming */}\n {isRunning && (\n <div className=\"flex items-center gap-1.5\">\n <div className=\"h-1.5 w-12 animate-pulse rounded-full bg-blue-100\" />\n <div className=\"h-1.5 w-8 animate-pulse rounded-full bg-blue-100\" />\n </div>\n )}\n </div>\n\n {/* Per-source checklist — actual titles with checkmarks (multi-read only;\n offloaded results carry no titles, so the header count stands alone) */}\n {sourceList.length > 1 && (\n <ul className=\"border-t px-4 py-2\">\n {sourceList.slice(0, 8).map((source) => (\n <li\n key={source.key}\n className=\"flex items-center gap-2 py-0.5 text-[12px] text-muted-foreground\"\n >\n {source.failed ? (\n <AlertCircleIcon className=\"size-3.5 shrink-0 text-red-400\" />\n ) : (\n <CheckCircle2Icon className=\"size-3.5 shrink-0 text-emerald-500\" />\n )}\n <span className=\"min-w-0 truncate\">{source.label}</span>\n </li>\n ))}\n {sourceList.length > 8 && (\n <li className=\"py-0.5 text-[11px] text-muted-foreground/70\">\n and {sourceList.length - 8} more\n </li>\n )}\n </ul>\n )}\n\n {/* Error message */}\n {hasError && errorMessage && (\n <div className=\"border-t bg-red-50/50 px-4 py-2.5\">\n <p className=\"text-[12px] leading-relaxed text-red-600\">\n {errorMessage}\n </p>\n </div>\n )}\n\n {/* Content preview (non-error) */}\n {hasContent && !hasError && (\n <div className=\"border-t\">\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className=\"flex w-full items-center gap-2 px-4 py-2 text-left text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/50\"\n >\n <ChevronDownIcon\n className={cn(\n \"size-3.5 shrink-0 transition-transform duration-200\",\n !expanded && \"-rotate-90\",\n )}\n />\n <span>\n {expanded ? \"Hide reviewed content\" : \"Show reviewed content\"}\n </span>\n </button>\n\n {expanded && (\n <div className=\"max-h-80 overflow-y-auto border-t bg-muted/30 px-4 py-3\">\n <div className=\"mb-2 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground\">\n Reviewed content\n </div>\n {workbookData ? (\n <WorkbookPreview workbook={workbookData} />\n ) : resultText ? (\n <TextContentPreview text={resultText} />\n ) : null}\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport const ReadAssetToolUI = memo(\n ReadAssetToolUIImpl,\n) as unknown as ToolCallMessagePartComponent;\n\nReadAssetToolUI.displayName = \"ReadAssetToolUI\";\n"],"names":["tryParseJson","jsx","rangePreviewFromCellMap","RangePreviewTable","jsxs","useState","useMemo","getAssetInfo","cn","LoaderIcon","AlertCircleIcon","BookOpenIcon","CheckCircle2Icon","FileTextIcon","ChevronDownIcon","memo"],"mappings":";;;;;;;;;AAeA,SAAS,gBAAgB,QAA0B;AACjD,MAAI,OAAO,WAAW,SAAU,QAAOA,WAAAA,aAAa,MAAM,KAAK;AAC/D,MAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD,UAAM,MAAM;AACZ,QAAI,OAAO,IAAI,WAAW;AACxB,aAAOA,WAAAA,aAAa,IAAI,MAAM,KAAK,IAAI;AACzC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,cAAc,YAA6B;AAClD,SACE,WAAW,WAAW,qBAAqB,KAC3C,WAAW,WAAW,QAAQ;AAElC;AAWA,SAAS,sBAAsB,OAA8C;AAC3E,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,QAAM,OAAO;AACb,SACE,OAAO,KAAK,aAAa,YACzB,OAAO,KAAK,WAAW,YACvB,OAAO,KAAK,YAAY,YACxB,OAAO,KAAK,YAAY,aACxB,OAAO,KAAK,UAAU;AAE1B;AAEA,SAAS,eAAe,OAAuC;AAC7D,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM,OAAO,qBAAqB;AACnE,MAAI,sBAAsB,KAAK,EAAG,QAAO,CAAC,KAAK;AAC/C,SAAO,CAAA;AACT;AAEA,SAAS,kBAAkB,OAAwC;AACjE,SAAO,MACJ,IAAI,CAAC,SAAA;;AAAS,sBAAK,aAAL,mBAAe,MAAM,KAAK;AAAA,GAAE,EAC1C,OAAO,CAAC,YAA+B,CAAC,CAAC,OAAO;AACrD;AAEA,SAAS,gBAAgB,OAA6C;AACpE,QAAM,YAAY,MACf;AAAA,IACC,CAAC,SACC,KAAK,YAAY,SACjB,OAAO,KAAK,YAAY,YACxB,KAAK;AAAA,EAAA,EAER,IAAI,CAAC,SAAS,KAAK,OAAiB;AACvC,SAAO,UAAU,SAAS,IAAI,UAAU,KAAK,aAAa,IAAI;AAChE;AAEA,SAAS,aAAa,OAA6C;AACjE,QAAM,aAAa,MAAM,KAAK,CAAC,SAAS,KAAK,YAAY,SAAS,KAAK,KAAK;AAC5E,UAAO,yCAAY,UAAS;AAC9B;AAwBA,SAAS,iBAAiB,OAAyC;AACjE,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,QAAM,MAAM;AACZ,MAAI,CAAC,IAAI,YAAY,OAAO,IAAI,aAAa,SAAU,QAAO;AAC9D,QAAM,WAAW,IAAI;AACrB,SAAO,MAAM,QAAQ,SAAS,MAAM;AACtC;AAEA,SAAS,gBAAgB,OAA8C;AACrE,MAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,MAAI,MAAM,QAAQ,KAAK,UAAU,OAAO,MAAM,CAAC,KAAK,EAAE;AACtD,SAAO,OAAO,KAAK;AACrB;AAGA,MAAM,4BAA4B;AAClC,MAAM,+BAA+B;AAErC,SAAS,gBAAgB,EAAE,YAA0C;AACnE,SACEC,+BAAC,SAAI,WAAU,aACZ,mBAAS,SAAS,OAAO,IAAI,CAAC,UAAU;AACvC,UAAM,UAAUC,aAAAA,wBAAwB;AAAA,MACtC,OAAO,MAAM;AAAA,MACb,OAAO,MAAM,SAAS,CAAA;AAAA,MACtB,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,YAAY;AAAA,IAAA,CACb;AACD,QAAI,CAAC,QAAS,QAAO;AAErB,2CACG,OAAA,EACC,UAAA;AAAA,MAAAD,2BAAAA,IAAC,KAAA,EAAE,WAAU,oDACV,UAAA,MAAM,WACT;AAAA,MACAA,2BAAAA;AAAAA,QAACE,kBAAAA;AAAAA,QAAA;AAAA,UACC;AAAA,UACA,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,SAAS,GAAG,MAAM,SAAS,IAAI,MAAM,SAAS;AAAA,QAAA;AAAA,MAAA;AAAA,MAEhDC,2BAAAA,KAAC,KAAA,EAAE,WAAU,0CAAyC,UAAA;AAAA,QAAA;AAAA,QAC9B,MAAM;AAAA,MAAA,EAAA,CAC9B;AAAA,IAAA,EAAA,GAZQ,MAAM,SAahB;AAAA,EAEJ,CAAC,EAAA,CACH;AAEJ;AAEA,SAAS,mBAAmB,EAAE,QAA0B;AACtD,QAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,QAAM,eAAe,MAAM,MAAM,GAAG,EAAE;AACtC,QAAM,UAAU,MAAM,SAAS;AAE/B,SACEA,2BAAAA,KAAC,OAAA,EAAI,WAAU,mFACZ,UAAA;AAAA,IAAA,aAAa,KAAK,IAAI;AAAA,IACtB,WACCH,2BAAAA,IAAC,QAAA,EAAK,WAAU,4BAA4B,UAAA;AAAA,MAAS,MAAM,SAAS,EAAE,cAAA,CAAc;AAAA,EAAA,GAExF;AAEJ;AAIA,MAAM,sBAAoD,CAAC;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AACX,MAAM;;AACJ,QAAM,CAAC,UAAU,WAAW,IAAII,WAAAA,SAAS,KAAK;AAE9C,QAAM,YAAY;AAClB,QAAM,YAAY,uCAAW,cAA0B,CAAA;AACvD,QAAM,eAAe,SAAS,CAAC,KAAK;AACpC,QAAM,aAAa,SAAS;AAE5B,QAAM,mBAAmBC,WAAAA,QAAQ,MAAM,gBAAgB,MAAM,GAAG,CAAC,MAAM,CAAC;AACxE,QAAM,cAAcA,WAAAA;AAAAA,IAClB,MAAM,eAAe,gBAAgB;AAAA,IACrC,CAAC,gBAAgB;AAAA,EAAA;AAGnB,QAAM,aAAY,iCAAQ,UAAS;AACnC,QAAM,cAAa,iCAAQ,UAAS;AACpC,QAAM,gBAAe,iCAAQ,UAAS;AAEtC,QAAM,eAAeA,WAAAA;AAAAA,IACnB,MAAM,gBAAgB,WAAW;AAAA,IACjC,CAAC,WAAW;AAAA,EAAA;AAEd,QAAM,aACJ,OAAO,qBAAqB,WAAW,mBAAmB;AAC5D,QAAM,eAAe,iBAAiB,gBAAgB,IAClD,mBACA;AACJ,QAAM,cAAc,YAAY,OAAO,CAAC,SAAS,KAAK,YAAY,KAAK;AACvE,QAAM,YACJ,YAAY,SAAS,KAAK,YAAY,WAAW,YAAY;AAC/D,QAAM,mBAAmB,YAAY,SAAS,KAAK,CAAC;AACpD,QAAM,cAAc,aAAa,WAAW;AAC5C,QAAM,WACJ,eACA,gBACA,aACC,cAAc,QAAQ,cAAc,UAAU;AAEjD,QAAM,iBAAiB,kBAAkB,WAAW;AACpD,QAAM,qBAAqB,KAAK,IAAI,YAAY,IAAI,IAAI,cAAc,EAAE,IAAI;AAC5E,QAAM,eAAeC,WAAAA,aAAa,gBAAgB,eAAe,CAAC,KAAK,EAAE;AAKzE,QAAM,eAAc,iBAAY,KAAK,CAAC,SAAS,KAAK,KAAK,MAArC,mBAAwC;AAC5D,QAAM,aAAa,CAAC,UAAkB,wBAAwB,KAAK,KAAK;AACxE,QAAM,eACJ,gBACC,WAAW,aAAa,IAAI,IAAI,eAAe,aAAa;AAC/D,QAAM,aACJ,qBAAqB,IACjB,YACG,OAAO,CAAC,SAAS,OAAO,KAAK,UAAU,YAAY,KAAK,UAAU,EAAE,EACpE,IAAI,CAAC,MAAM,WAAW;AAAA,IACrB,KAAK,KAAK,YAAY,GAAG,KAAK,IAAI,KAAK,KAAK;AAAA,IAC5C,OAAO,KAAK;AAAA,IACZ,QAAQ,KAAK,YAAY;AAAA,EAAA,EACzB,IACJ,CAAA;AACN,QAAM,aACJ,qBAAqB,IACjB,GAAG,kBAAkB,eACrB;AACN,QAAM,cAAc,YAChB,4BACA,WACE,gCACA,mBACE,uCACA;AACR,QAAM,QAAQ,mBACV,GAAG,YAAY,MAAM,IAAI,YAAY,WAAW,IAAI,UAAU,QAAQ,KACtE,qBAAqB,IACnB,GAAG,kBAAkB,aACrB,eACE,oBACA;AAER,QAAM,cACH,cAAc,kBAAkB,cAAc;AACjD,QAAM,gBACJ,iCAAQ,UAAS,eACb,OAAO,OAAO,SAAS,uBAAuB,IAC7C,gBAAgB,YAAY,aAAa,aAAa;AAE7D,SACEH,2BAAAA,KAAC,OAAA,EAAI,WAAU,2EAEb,UAAA;AAAA,IAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,MAAAH,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWO,OAAAA;AAAAA,YACT;AAAA,YACA,aAAa;AAAA,YACb,cAAc,CAAC,YAAY;AAAA,YAC3B,cAAc,YAAY;AAAA,YAC1B,gBAAgB;AAAA,YAChB,CAAC,aACC,CAAC,cACD,CAAC,gBACD;AAAA,UAAA;AAAA,UAGH,sBACCP,2BAAAA,IAACQ,YAAAA,YAAA,EAAW,WAAU,sBAAA,CAAsB,IAC1C,YAAY,eACdR,2BAAAA,IAACS,6BAAA,EAAgB,WAAU,SAAA,CAAS,IAEpCT,2BAAAA,IAACU,YAAAA,cAAA,EAAa,WAAU,SAAA,CAAS;AAAA,QAAA;AAAA,MAAA;AAAA,MAGrCP,2BAAAA,KAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,QAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,UAAAH,2BAAAA,IAAC,QAAA,EAAK,WAAU,6BAA6B,UAAA,aAAY;AAAA,UACxD,cAAc,CAAC,YACdA,2BAAAA,IAACW,YAAAA,kBAAA,EAAiB,WAAU,6BAA4B;AAAA,UAE1DX,2BAAAA,IAAC,QAAA,EAAK,WAAU,sIACb,UAAA,MAAA,CACH;AAAA,QAAA,GACF;AAAA,QACAG,2BAAAA,KAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,UAAAH,2BAAAA,IAACY,YAAAA,cAAA,EAAa,WAAU,SAAA,CAAS;AAAA,UACjCT,2BAAAA,KAAC,QAAA,EAAK,WAAU,8CAA6C,UAAA;AAAA,YAAA;AAAA,YAClD;AAAA,UAAA,EAAA,CACX;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,GACF;AAAA,MAGC,aACCA,2BAAAA,KAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,QAAAH,2BAAAA,IAAC,OAAA,EAAI,WAAU,oDAAA,CAAoD;AAAA,QACnEA,2BAAAA,IAAC,OAAA,EAAI,WAAU,mDAAA,CAAmD;AAAA,MAAA,EAAA,CACpE;AAAA,IAAA,GAEJ;AAAA,IAIC,WAAW,SAAS,KACnBG,2BAAAA,KAAC,MAAA,EAAG,WAAU,sBACX,UAAA;AAAA,MAAA,WAAW,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,WAC3BA,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAU;AAAA,UAET,UAAA;AAAA,YAAA,OAAO,wCACLM,YAAAA,iBAAA,EAAgB,WAAU,kCAAiC,IAE5DT,2BAAAA,IAACW,YAAAA,kBAAA,EAAiB,WAAU,qCAAA,CAAqC;AAAA,YAEnEX,2BAAAA,IAAC,QAAA,EAAK,WAAU,oBAAoB,iBAAO,MAAA,CAAM;AAAA,UAAA;AAAA,QAAA;AAAA,QAR5C,OAAO;AAAA,MAAA,CAUf;AAAA,MACA,WAAW,SAAS,KACnBG,2BAAAA,KAAC,MAAA,EAAG,WAAU,+CAA8C,UAAA;AAAA,QAAA;AAAA,QACrD,WAAW,SAAS;AAAA,QAAE;AAAA,MAAA,EAAA,CAC7B;AAAA,IAAA,GAEJ;AAAA,IAID,YAAY,gBACXH,2BAAAA,IAAC,OAAA,EAAI,WAAU,qCACb,UAAAA,2BAAAA,IAAC,KAAA,EAAE,WAAU,4CACV,UAAA,aAAA,CACH,GACF;AAAA,IAID,cAAc,CAAC,YACdG,2BAAAA,KAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,MAAAA,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAM,YAAY,CAAC,QAAQ;AAAA,UACpC,WAAU;AAAA,UAEV,UAAA;AAAA,YAAAH,2BAAAA;AAAAA,cAACa,YAAAA;AAAAA,cAAA;AAAA,gBACC,WAAWN,OAAAA;AAAAA,kBACT;AAAA,kBACA,CAAC,YAAY;AAAA,gBAAA;AAAA,cACf;AAAA,YAAA;AAAA,YAEFP,2BAAAA,IAAC,QAAA,EACE,UAAA,WAAW,0BAA0B,wBAAA,CACxC;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGD,YACCG,2BAAAA,KAAC,OAAA,EAAI,WAAU,2DACb,UAAA;AAAA,QAAAH,2BAAAA,IAAC,OAAA,EAAI,WAAU,gFAA+E,UAAA,oBAE9F;AAAA,QACC,eACCA,2BAAAA,IAAC,iBAAA,EAAgB,UAAU,aAAA,CAAc,IACvC,aACFA,2BAAAA,IAAC,oBAAA,EAAmB,MAAM,WAAA,CAAY,IACpC;AAAA,MAAA,EAAA,CACN;AAAA,IAAA,EAAA,CAEJ;AAAA,EAAA,GAEJ;AAEJ;AAEO,MAAM,kBAAkBc,WAAAA;AAAAA,EAC7B;AACF;AAEA,gBAAgB,cAAc;;"}
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
- const react$1 = require("@assistant-ui/react");
4
+ const react = require("@assistant-ui/react");
5
5
  const reactQuery = require("@tanstack/react-query");
6
6
  const lucideReact = require("lucide-react");
7
- const react = require("react");
7
+ const require$$0 = require("react");
8
8
  const useStatewireApprovalRequest = require("../chat/use-statewire-approval-request.cjs");
9
9
  const messageTime = require("../chat/message-time.cjs");
10
10
  const turnTiming = require("../chat/super-grouping/turn-timing.cjs");
@@ -129,7 +129,7 @@ function laneStepsNote({
129
129
  return arrivesLater ? `Showing the latest steps. ${leftOff} earlier ${leftOff === 1 ? "step arrives" : "steps arrive"} when this subagent finishes.` : `Showing the latest ${shown} of ${stepsLabel(total)}.`;
130
130
  }
131
131
  function useInReadOnlyThread() {
132
- return react$1.useAuiState((s) => {
132
+ return react.useAuiState((s) => {
133
133
  var _a;
134
134
  const thread = (_a = s.optional) == null ? void 0 : _a.thread;
135
135
  return thread !== void 0 && !threadExtras.hasStatewireThreadExtras(thread.extras);
@@ -162,8 +162,8 @@ function LaneStatusGlyph({ phase }) {
162
162
  );
163
163
  }
164
164
  function useRunningElapsedMs(running, startMs) {
165
- const [clock, setClock] = react.useState(null);
166
- react.useEffect(() => {
165
+ const [clock, setClock] = require$$0.useState(null);
166
+ require$$0.useEffect(() => {
167
167
  if (!running) {
168
168
  setClock(null);
169
169
  return void 0;
@@ -176,27 +176,27 @@ function useRunningElapsedMs(running, startMs) {
176
176
  if (!running || clock === null) return null;
177
177
  return Math.max(0, clock.now - (startMs ?? clock.seenAt));
178
178
  }
179
- const LaneStepComponentsContext = react.createContext(null);
179
+ const LaneStepComponentsContext = require$$0.createContext(null);
180
180
  const EmptyStepPart = () => null;
181
181
  const LaneStep = () => {
182
- const role = react$1.useAuiState((s) => s.message.role);
183
- const components = react.useContext(LaneStepComponentsContext);
182
+ const role = react.useAuiState((s) => s.message.role);
183
+ const components = require$$0.useContext(LaneStepComponentsContext);
184
184
  if (role !== "assistant") return null;
185
- return /* @__PURE__ */ jsxRuntime.jsx(react$1.MessagePrimitive.Parts, { components: { Empty: EmptyStepPart, ...components } });
185
+ return /* @__PURE__ */ jsxRuntime.jsx(react.MessagePrimitive.Parts, { components: { Empty: EmptyStepPart, ...components } });
186
186
  };
187
187
  const LANE_ROW_COMPONENTS = { Message: LaneStep };
188
188
  const ROW_KEY_SEPARATOR = "\0";
189
189
  function LaneRows() {
190
- const joinedKeys = react$1.useAuiState(
190
+ const joinedKeys = react.useAuiState(
191
191
  (s) => s.thread.messages.map((message) => messages.deepAgentRowKey(message)).join(ROW_KEY_SEPARATOR)
192
192
  );
193
- const rowKeys = react.useMemo(
193
+ const rowKeys = require$$0.useMemo(
194
194
  () => joinedKeys === "" ? [] : joinedKeys.split(ROW_KEY_SEPARATOR),
195
195
  [joinedKeys]
196
196
  );
197
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: rowKeys.map((key, index) => /* @__PURE__ */ jsxRuntime.jsx(react$1.ThreadPrimitive.MessageByIndex, { index, components: LANE_ROW_COMPONENTS }, key)) });
197
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: rowKeys.map((key, index) => /* @__PURE__ */ jsxRuntime.jsx(react.ThreadPrimitive.MessageByIndex, { index, components: LANE_ROW_COMPONENTS }, key)) });
198
198
  }
199
- class LaneStepsBoundary extends react.Component {
199
+ class LaneStepsBoundary extends require$$0.Component {
200
200
  constructor(props) {
201
201
  super(props);
202
202
  this.state = { failed: false };
@@ -243,7 +243,7 @@ function LaneSteps({ lane, phase, result, partMessages }) {
243
243
  total: (_a = source == null ? void 0 : source.truncated) == null ? void 0 : _a.messages,
244
244
  finished: ((_b = source == null ? void 0 : source.truncated) == null ? void 0 : _b.finished) === true
245
245
  });
246
- const [convertLane] = react.useState(() => subagentTranscripts.createSubagentLaneConversion());
246
+ const [convertLane] = require$$0.useState(() => subagentTranscripts.createSubagentLaneConversion());
247
247
  const report = lane.status === "complete" && (source == null ? void 0 : source.messageId) !== void 0 ? lane.output : void 0;
248
248
  const messages2 = (source === void 0 ? void 0 : convertLane(subagentTranscripts.withLaneReport(history.steps, report), running)) ?? partMessages ?? NO_MESSAGES;
249
249
  const components = NestedPtcMessages.useNestedPtcComponents(toolFallback.ToolFallback);
@@ -282,7 +282,7 @@ function LaneSteps({ lane, phase, result, partMessages }) {
282
282
  ]
283
283
  }
284
284
  ) : null,
285
- messages2.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(LaneStepsBoundary, { name: lane.name, children: /* @__PURE__ */ jsxRuntime.jsx(LaneStepComponentsContext.Provider, { value: components, children: /* @__PURE__ */ jsxRuntime.jsx(react$1.ReadonlyThreadProvider, { messages: messages2, children: /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "subagent-step-rows", className: "flex min-w-0 flex-col gap-1", children: /* @__PURE__ */ jsxRuntime.jsx(LaneRows, {}) }) }) }) }) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: emptyText }),
285
+ messages2.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(LaneStepsBoundary, { name: lane.name, children: /* @__PURE__ */ jsxRuntime.jsx(LaneStepComponentsContext.Provider, { value: components, children: /* @__PURE__ */ jsxRuntime.jsx(react.ReadonlyThreadProvider, { messages: messages2, children: /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "subagent-step-rows", className: "flex min-w-0 flex-col gap-1", children: /* @__PURE__ */ jsxRuntime.jsx(LaneRows, {}) }) }) }) }) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: emptyText }),
286
286
  closing ? /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "subagent-result", className: "flex min-w-0 flex-col gap-0.5", children: [
287
287
  /* @__PURE__ */ jsxRuntime.jsx(
288
288
  "p",
@@ -325,8 +325,8 @@ function laneMeta({
325
325
  function SubagentTaskCard({ toolCallId, args, status, artifact, messages: messages2 }) {
326
326
  const appearance = toolAppearance.useToolAppearance();
327
327
  const isThread = appearance === "thread";
328
- const readLane = react$1.useAuiState((s) => subagents.taskSubagentsOfTurn(s.message).get(toolCallId));
329
- const lane = react.useMemo(
328
+ const readLane = react.useAuiState((s) => subagents.taskSubagentsOfTurn(s.message).get(toolCallId));
329
+ const lane = require$$0.useMemo(
330
330
  () => readLane ?? laneFromArgs(toolCallId, args),
331
331
  [readLane, toolCallId, args]
332
332
  );
@@ -335,12 +335,12 @@ function SubagentTaskCard({ toolCallId, args, status, artifact, messages: messag
335
335
  const gatedCall = awaitingApproval ? subagents.subagentToolCallAwaitingApproval({ lane, toolCallIds: waitingToolCallIds }) : void 0;
336
336
  const phase = subagentLanePhase({ status: lane.status, partStatus: status, awaitingApproval });
337
337
  const running = phase === "running";
338
- const delegatedAt = react$1.useAuiState(
339
- (s) => running ? laneDelegatedAtMs({ sources: react$1.getExternalStoreMessages(s.message), toolCallId }) : null
338
+ const delegatedAt = react.useAuiState(
339
+ (s) => running ? laneDelegatedAtMs({ sources: react.getExternalStoreMessages(s.message), toolCallId }) : null
340
340
  );
341
341
  const runningElapsed = useRunningElapsedMs(running, delegatedAt);
342
342
  const elapsedMs = running ? runningElapsed : isSettledSubagentLanePhase(phase) ? finishedLaneDurationMs(artifact) : null;
343
- const step = react.useMemo(() => running ? latestLaneStep(lane.messages) : null, [running, lane.messages]);
343
+ const step = require$$0.useMemo(() => running ? latestLaneStep(lane.messages) : null, [running, lane.messages]);
344
344
  const hasSteps = lane.messageCount > 0 || (lane.omittedMessageCount ?? 0) > 0;
345
345
  const typeLabel = subagentTypeLabel(lane.name);
346
346
  const title = lane.description.trim() || typeLabel;
@@ -476,7 +476,7 @@ function SubagentDelegationRow({ args, result, isError, status }) {
476
476
  );
477
477
  }
478
478
  const SubagentTaskToolUIImpl = (props) => useInReadOnlyThread() ? /* @__PURE__ */ jsxRuntime.jsx(SubagentDelegationRow, { ...props }) : /* @__PURE__ */ jsxRuntime.jsx(SubagentTaskCard, { ...props });
479
- const SubagentTaskToolUI = react.memo(
479
+ const SubagentTaskToolUI = require$$0.memo(
480
480
  SubagentTaskToolUIImpl
481
481
  );
482
482
  SubagentTaskToolUI.displayName = "SubagentTaskToolUI";