@athenaintel/react 0.42.2 → 0.48.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 (685) hide show
  1. package/README.md +225 -3
  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/client-tool-bridge.cjs +15 -15
  13. package/dist/agent-runtime/src/client-tool-bridge.cjs.map +1 -1
  14. package/dist/agent-runtime/src/conversation-index.cjs +8 -8
  15. package/dist/agent-runtime/src/conversation-index.cjs.map +1 -1
  16. package/dist/agent-runtime/src/conversation-list-groups.d.ts +74 -0
  17. package/dist/agent-runtime/src/decision-checks.cjs +207 -0
  18. package/dist/agent-runtime/src/decision-checks.cjs.map +1 -0
  19. package/dist/agent-runtime/src/decision-checks.d.ts +142 -0
  20. package/dist/agent-runtime/src/decision-checks.js +207 -0
  21. package/dist/agent-runtime/src/decision-checks.js.map +1 -0
  22. package/dist/agent-runtime/src/desktop-handoff.d.ts +12 -0
  23. package/dist/agent-runtime/src/errors.cjs +18 -0
  24. package/dist/agent-runtime/src/errors.cjs.map +1 -1
  25. package/dist/agent-runtime/src/errors.d.ts +7 -0
  26. package/dist/agent-runtime/src/errors.js +18 -0
  27. package/dist/agent-runtime/src/errors.js.map +1 -1
  28. package/dist/agent-runtime/src/generated/runconfig-contract.cjs +12 -0
  29. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
  30. package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +6 -6
  31. package/dist/agent-runtime/src/generated/runconfig-contract.js +12 -0
  32. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
  33. package/dist/agent-runtime/src/handoff-arrival.cjs +60 -0
  34. package/dist/agent-runtime/src/handoff-arrival.cjs.map +1 -0
  35. package/dist/agent-runtime/src/handoff-arrival.d.ts +46 -0
  36. package/dist/agent-runtime/src/handoff-arrival.js +60 -0
  37. package/dist/agent-runtime/src/handoff-arrival.js.map +1 -0
  38. package/dist/agent-runtime/src/index.d.ts +15 -8
  39. package/dist/agent-runtime/src/interrupts.cjs +43 -18
  40. package/dist/agent-runtime/src/interrupts.cjs.map +1 -1
  41. package/dist/agent-runtime/src/interrupts.d.ts +19 -2
  42. package/dist/agent-runtime/src/interrupts.js +28 -3
  43. package/dist/agent-runtime/src/interrupts.js.map +1 -1
  44. package/dist/agent-runtime/src/lane-history.cjs +8 -8
  45. package/dist/agent-runtime/src/lane-history.cjs.map +1 -1
  46. package/dist/agent-runtime/src/messages.cjs +43 -8
  47. package/dist/agent-runtime/src/messages.cjs.map +1 -1
  48. package/dist/agent-runtime/src/messages.d.ts +25 -3
  49. package/dist/agent-runtime/src/messages.js +43 -8
  50. package/dist/agent-runtime/src/messages.js.map +1 -1
  51. package/dist/agent-runtime/src/offline-status.cjs +36 -0
  52. package/dist/agent-runtime/src/offline-status.cjs.map +1 -0
  53. package/dist/agent-runtime/src/offline-status.d.ts +118 -3
  54. package/dist/agent-runtime/src/offline-status.js +36 -0
  55. package/dist/agent-runtime/src/offline-status.js.map +1 -0
  56. package/dist/agent-runtime/src/queue.cjs +0 -9
  57. package/dist/agent-runtime/src/queue.cjs.map +1 -1
  58. package/dist/agent-runtime/src/queue.js +0 -9
  59. package/dist/agent-runtime/src/queue.js.map +1 -1
  60. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +9 -9
  61. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
  62. package/dist/agent-runtime/src/runtime-catalog.cjs +42 -0
  63. package/dist/agent-runtime/src/runtime-catalog.cjs.map +1 -0
  64. package/dist/agent-runtime/src/runtime-catalog.d.ts +35 -0
  65. package/dist/agent-runtime/src/runtime-catalog.js +42 -0
  66. package/dist/agent-runtime/src/runtime-catalog.js.map +1 -0
  67. package/dist/agent-runtime/src/runtime-messages.cjs.map +1 -1
  68. package/dist/agent-runtime/src/runtime-messages.d.ts +1 -1
  69. package/dist/agent-runtime/src/runtime-messages.js.map +1 -1
  70. package/dist/agent-runtime/src/runtime.d.ts +40 -0
  71. package/dist/agent-runtime/src/statewire-suspended.cjs +3 -3
  72. package/dist/agent-runtime/src/statewire-suspended.cjs.map +1 -1
  73. package/dist/agent-runtime/src/subagents.cjs +32 -2
  74. package/dist/agent-runtime/src/subagents.cjs.map +1 -1
  75. package/dist/agent-runtime/src/subagents.d.ts +9 -0
  76. package/dist/agent-runtime/src/subagents.js +30 -0
  77. package/dist/agent-runtime/src/subagents.js.map +1 -1
  78. package/dist/agent-runtime/src/thread-driver.cjs +67 -0
  79. package/dist/agent-runtime/src/thread-driver.cjs.map +1 -0
  80. package/dist/agent-runtime/src/thread-driver.d.ts +49 -0
  81. package/dist/agent-runtime/src/thread-driver.js +67 -0
  82. package/dist/agent-runtime/src/thread-driver.js.map +1 -0
  83. package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +172 -0
  84. package/dist/agent-runtime/src/thread-handoff-protocol.d.ts +756 -0
  85. package/dist/agent-runtime/src/thread-handoff-qr.d.ts +11 -0
  86. package/dist/agent-runtime/src/thread-handoff.d.ts +3 -364
  87. package/dist/agent-runtime/src/thread-status.cjs +3 -3
  88. package/dist/agent-runtime/src/thread-status.cjs.map +1 -1
  89. package/dist/agent-runtime/src/tool-metadata.cjs +210 -33
  90. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
  91. package/dist/agent-runtime/src/tool-metadata.d.ts +12 -0
  92. package/dist/agent-runtime/src/tool-metadata.js +210 -33
  93. package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
  94. package/dist/agent-runtime/src/tool-names.cjs +2 -0
  95. package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
  96. package/dist/agent-runtime/src/tool-names.d.ts +2 -0
  97. package/dist/agent-runtime/src/tool-names.js +2 -0
  98. package/dist/agent-runtime/src/tool-names.js.map +1 -1
  99. package/dist/agent-runtime/src/types.d.ts +10 -2
  100. package/dist/agent-runtime/src/use-conversation-list.cjs +11 -11
  101. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
  102. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +24 -19
  103. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
  104. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +2 -1
  105. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +6 -1
  106. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
  107. package/dist/agent-runtime/src/use-deep-agent-config.cjs +14 -14
  108. package/dist/agent-runtime/src/use-deep-agent-config.cjs.map +1 -1
  109. package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs +6 -6
  110. package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -1
  111. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +16 -16
  112. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
  113. package/dist/agent-runtime/src/use-deep-agent-thread.cjs +45 -45
  114. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
  115. package/dist/agent-runtime/src/use-deep-agent-voice.cjs +572 -134
  116. package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
  117. package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +137 -10
  118. package/dist/agent-runtime/src/use-deep-agent-voice.js +514 -76
  119. package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
  120. package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs +26 -26
  121. package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -1
  122. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs +4 -4
  123. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs.map +1 -1
  124. package/dist/agent-runtime/src/use-thread-handoff-flow.d.ts +28 -26
  125. package/dist/agent-runtime/src/voice-media.cjs +117 -0
  126. package/dist/agent-runtime/src/voice-media.cjs.map +1 -0
  127. package/dist/agent-runtime/src/voice-media.d.ts +49 -0
  128. package/dist/agent-runtime/src/voice-media.js +117 -0
  129. package/dist/agent-runtime/src/voice-media.js.map +1 -0
  130. package/dist/agent-runtime/src/voice-wire-types.d.ts +32 -0
  131. package/dist/assets/AssetPanel.cjs +11 -11
  132. package/dist/assets/AssetPanel.cjs.map +1 -1
  133. package/dist/assets/AthenaAssetEmbed.cjs +11 -9
  134. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  135. package/dist/assets/AthenaAssetEmbed.d.ts +7 -0
  136. package/dist/assets/AthenaAssetEmbed.js +4 -2
  137. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  138. package/dist/assets/AthenaLayout.cjs +16 -16
  139. package/dist/assets/AthenaLayout.cjs.map +1 -1
  140. package/dist/assets/use-asset-content.cjs +4 -4
  141. package/dist/assets/use-asset-content.cjs.map +1 -1
  142. package/dist/assets/use-asset-embed.cjs +14 -7
  143. package/dist/assets/use-asset-embed.cjs.map +1 -1
  144. package/dist/assets/use-asset-embed.d.ts +11 -1
  145. package/dist/assets/use-asset-embed.js +10 -3
  146. package/dist/assets/use-asset-embed.js.map +1 -1
  147. package/dist/auth/AthenaAuthContext.cjs +3 -3
  148. package/dist/auth/AthenaAuthContext.cjs.map +1 -1
  149. package/dist/auth/AthenaAuthProvider.cjs +8 -8
  150. package/dist/auth/AthenaAuthProvider.cjs.map +1 -1
  151. package/dist/auth/AthenaCredentialSourceContext.cjs +5 -5
  152. package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
  153. package/dist/auth/AthenaSSOProvider.cjs +14 -14
  154. package/dist/auth/AthenaSSOProvider.cjs.map +1 -1
  155. package/dist/auth/credential-source.cjs +26 -13
  156. package/dist/auth/credential-source.cjs.map +1 -1
  157. package/dist/auth/credential-source.d.ts +8 -0
  158. package/dist/auth/credential-source.js +26 -13
  159. package/dist/auth/credential-source.js.map +1 -1
  160. package/dist/catalog/agent-model-options.cjs +25 -17
  161. package/dist/catalog/agent-model-options.cjs.map +1 -1
  162. package/dist/catalog/agent-model-options.d.ts +38 -5
  163. package/dist/catalog/agent-model-options.js +25 -17
  164. package/dist/catalog/agent-model-options.js.map +1 -1
  165. package/dist/catalog/channel-refusal.cjs +36 -0
  166. package/dist/catalog/channel-refusal.cjs.map +1 -0
  167. package/dist/catalog/channel-refusal.d.ts +29 -0
  168. package/dist/catalog/channel-refusal.js +36 -0
  169. package/dist/catalog/channel-refusal.js.map +1 -0
  170. package/dist/catalog/chat-pickers.cjs +60 -24
  171. package/dist/catalog/chat-pickers.cjs.map +1 -1
  172. package/dist/catalog/chat-pickers.d.ts +12 -2
  173. package/dist/catalog/chat-pickers.js +56 -20
  174. package/dist/catalog/chat-pickers.js.map +1 -1
  175. package/dist/catalog/runtime-catalog.cjs +89 -23
  176. package/dist/catalog/runtime-catalog.cjs.map +1 -1
  177. package/dist/catalog/runtime-catalog.d.ts +8 -2
  178. package/dist/catalog/runtime-catalog.js +83 -17
  179. package/dist/catalog/runtime-catalog.js.map +1 -1
  180. package/dist/catalog/use-athena-chat-mode.cjs +12 -12
  181. package/dist/catalog/use-athena-chat-mode.cjs.map +1 -1
  182. package/dist/chat/AthenaChat.cjs +155 -67
  183. package/dist/chat/AthenaChat.cjs.map +1 -1
  184. package/dist/chat/AthenaChat.d.ts +42 -2
  185. package/dist/chat/AthenaChat.js +106 -18
  186. package/dist/chat/AthenaChat.js.map +1 -1
  187. package/dist/chat/AthenaChatErrorBoundary.cjs +3 -3
  188. package/dist/chat/AthenaChatErrorBoundary.cjs.map +1 -1
  189. package/dist/chat/DrivingOnChip.cjs +23 -0
  190. package/dist/chat/DrivingOnChip.cjs.map +1 -0
  191. package/dist/chat/DrivingOnChip.d.ts +17 -0
  192. package/dist/chat/DrivingOnChip.js +23 -0
  193. package/dist/chat/DrivingOnChip.js.map +1 -0
  194. package/dist/chat/StatewireApprovalCard.cjs +125 -31
  195. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  196. package/dist/chat/StatewireApprovalCard.d.ts +73 -1
  197. package/dist/chat/StatewireApprovalCard.js +115 -21
  198. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  199. package/dist/chat/StatewireClientToolBridge.cjs +2 -2
  200. package/dist/chat/StatewireClientToolBridge.cjs.map +1 -1
  201. package/dist/chat/StatewireQueuedMessages.cjs +25 -63
  202. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  203. package/dist/chat/StatewireQueuedMessages.d.ts +11 -13
  204. package/dist/chat/StatewireQueuedMessages.js +16 -54
  205. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  206. package/dist/chat/WaitingOnYouBanner.cjs +3 -3
  207. package/dist/chat/WaitingOnYouBanner.cjs.map +1 -1
  208. package/dist/chat/athena-chat-welcome.cjs +2 -2
  209. package/dist/chat/athena-chat-welcome.cjs.map +1 -1
  210. package/dist/chat/athena-citation-links.cjs +5 -5
  211. package/dist/chat/athena-citation-links.cjs.map +1 -1
  212. package/dist/chat/athena-composer-controls.cjs +26 -16
  213. package/dist/chat/athena-composer-controls.cjs.map +1 -1
  214. package/dist/chat/athena-composer-controls.d.ts +6 -0
  215. package/dist/chat/athena-composer-controls.js +26 -16
  216. package/dist/chat/athena-composer-controls.js.map +1 -1
  217. package/dist/chat/athena-turn-end-status.cjs +42 -0
  218. package/dist/chat/athena-turn-end-status.cjs.map +1 -0
  219. package/dist/chat/athena-turn-end-status.d.ts +24 -0
  220. package/dist/chat/athena-turn-end-status.js +42 -0
  221. package/dist/chat/athena-turn-end-status.js.map +1 -0
  222. package/dist/chat/browser-decision-check.cjs +131 -0
  223. package/dist/chat/browser-decision-check.cjs.map +1 -0
  224. package/dist/chat/browser-decision-check.d.ts +61 -0
  225. package/dist/chat/browser-decision-check.js +131 -0
  226. package/dist/chat/browser-decision-check.js.map +1 -0
  227. package/dist/chat/chat-outbox-rows.cjs +3 -3
  228. package/dist/chat/chat-outbox-rows.cjs.map +1 -1
  229. package/dist/chat/chat-voice-controls.cjs +93 -28
  230. package/dist/chat/chat-voice-controls.cjs.map +1 -1
  231. package/dist/chat/chat-voice-controls.d.ts +36 -2
  232. package/dist/chat/chat-voice-controls.js +89 -24
  233. package/dist/chat/chat-voice-controls.js.map +1 -1
  234. package/dist/chat/composer-keyboard-hint.cjs +5 -5
  235. package/dist/chat/composer-keyboard-hint.cjs.map +1 -1
  236. package/dist/chat/device-operation.cjs +29 -0
  237. package/dist/chat/device-operation.cjs.map +1 -0
  238. package/dist/chat/device-operation.d.ts +34 -0
  239. package/dist/chat/device-operation.js +29 -0
  240. package/dist/chat/device-operation.js.map +1 -0
  241. package/dist/chat/super-grouping/CollapsibleGroup.cjs +14 -14
  242. package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -1
  243. package/dist/chat/super-grouping/GroupedMessageParts.cjs +4 -4
  244. package/dist/chat/super-grouping/GroupedMessageParts.cjs.map +1 -1
  245. package/dist/chat/super-grouping/SuperGroupingCard.cjs +60 -38
  246. package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
  247. package/dist/chat/super-grouping/SuperGroupingCard.d.ts +24 -4
  248. package/dist/chat/super-grouping/SuperGroupingCard.js +37 -15
  249. package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
  250. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs +32 -32
  251. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs.map +1 -1
  252. package/dist/chat/super-grouping/SuperGroupingTranscript.js +3 -3
  253. package/dist/chat/super-grouping/SuperGroupingTranscript.js.map +1 -1
  254. package/dist/chat/super-grouping/ToolTimeline.cjs +97 -37
  255. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  256. package/dist/chat/super-grouping/ToolTimeline.d.ts +14 -2
  257. package/dist/chat/super-grouping/ToolTimeline.js +94 -34
  258. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  259. package/dist/chat/super-grouping/activity-timeline.cjs +47 -12
  260. package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
  261. package/dist/chat/super-grouping/activity-timeline.d.ts +21 -0
  262. package/dist/chat/super-grouping/activity-timeline.js +47 -12
  263. package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
  264. package/dist/chat/super-grouping/grouping-function.cjs +4 -0
  265. package/dist/chat/super-grouping/grouping-function.cjs.map +1 -1
  266. package/dist/chat/super-grouping/grouping-function.d.ts +7 -0
  267. package/dist/chat/super-grouping/grouping-function.js +5 -1
  268. package/dist/chat/super-grouping/grouping-function.js.map +1 -1
  269. package/dist/chat/super-grouping/index.cjs +6 -0
  270. package/dist/chat/super-grouping/index.cjs.map +1 -1
  271. package/dist/chat/super-grouping/index.d.ts +6 -2
  272. package/dist/chat/super-grouping/index.js +7 -1
  273. package/dist/chat/super-grouping/index.js.map +1 -1
  274. package/dist/chat/super-grouping/timeline-step.cjs +61 -2
  275. package/dist/chat/super-grouping/timeline-step.cjs.map +1 -1
  276. package/dist/chat/super-grouping/timeline-step.d.ts +13 -1
  277. package/dist/chat/super-grouping/timeline-step.js +61 -2
  278. package/dist/chat/super-grouping/timeline-step.js.map +1 -1
  279. package/dist/chat/super-grouping/tool-part-placement.cjs +17 -0
  280. package/dist/chat/super-grouping/tool-part-placement.cjs.map +1 -0
  281. package/dist/chat/super-grouping/tool-part-placement.d.ts +22 -0
  282. package/dist/chat/super-grouping/tool-part-placement.js +17 -0
  283. package/dist/chat/super-grouping/tool-part-placement.js.map +1 -0
  284. package/dist/chat/thread-scroll-to-bottom.cjs +2 -2
  285. package/dist/chat/thread-scroll-to-bottom.cjs.map +1 -1
  286. package/dist/chat/thread-scroll-to-bottom.d.ts +10 -7
  287. package/dist/chat/thread-scroll-to-bottom.js +2 -2
  288. package/dist/chat/thread-scroll-to-bottom.js.map +1 -1
  289. package/dist/chat/tooltip-icon-button.cjs +2 -2
  290. package/dist/chat/tooltip-icon-button.cjs.map +1 -1
  291. package/dist/chat/use-athena-voice-live.cjs +11 -0
  292. package/dist/chat/use-athena-voice-live.cjs.map +1 -0
  293. package/dist/chat/use-athena-voice-live.d.ts +11 -0
  294. package/dist/chat/use-athena-voice-live.js +11 -0
  295. package/dist/chat/use-athena-voice-live.js.map +1 -0
  296. package/dist/chat/use-statewire-approval-request.cjs +56 -24
  297. package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
  298. package/dist/chat/use-statewire-approval-request.d.ts +33 -4
  299. package/dist/chat/use-statewire-approval-request.js +41 -9
  300. package/dist/chat/use-statewire-approval-request.js.map +1 -1
  301. package/dist/chat-ui/auth/sign-in-card.cjs +2 -2
  302. package/dist/chat-ui/auth/sign-in-card.cjs.map +1 -1
  303. package/dist/chat-ui/composer/tiptap-composer.cjs +138 -107
  304. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  305. package/dist/chat-ui/composer/tiptap-composer.d.ts +20 -4
  306. package/dist/chat-ui/composer/tiptap-composer.js +85 -54
  307. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  308. package/dist/chat-ui/header/conversation-history-panel.cjs +49 -23
  309. package/dist/chat-ui/header/conversation-history-panel.cjs.map +1 -1
  310. package/dist/chat-ui/header/conversation-history-panel.d.ts +12 -1
  311. package/dist/chat-ui/header/conversation-history-panel.js +38 -12
  312. package/dist/chat-ui/header/conversation-history-panel.js.map +1 -1
  313. package/dist/chat-ui/index.cjs +18 -0
  314. package/dist/chat-ui/index.cjs.map +1 -1
  315. package/dist/chat-ui/index.d.ts +7 -1
  316. package/dist/chat-ui/index.js +18 -0
  317. package/dist/chat-ui/index.js.map +1 -1
  318. package/dist/chat-ui/mentions/mention-chip.cjs +147 -38
  319. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  320. package/dist/chat-ui/mentions/mention-chip.d.ts +17 -1
  321. package/dist/chat-ui/mentions/mention-chip.js +146 -37
  322. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  323. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs +10 -9
  324. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs.map +1 -1
  325. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js +3 -2
  326. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js.map +1 -1
  327. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +2 -2
  328. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -1
  329. package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs +29 -6
  330. package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs.map +1 -1
  331. package/dist/chat-ui/mentions/suggestions/components/menu-list.d.ts +7 -1
  332. package/dist/chat-ui/mentions/suggestions/components/menu-list.js +25 -2
  333. package/dist/chat-ui/mentions/suggestions/components/menu-list.js.map +1 -1
  334. package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs +2 -2
  335. package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs.map +1 -1
  336. package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs +2 -2
  337. package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs.map +1 -1
  338. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +3 -3
  339. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
  340. package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs +56 -2
  341. package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs.map +1 -1
  342. package/dist/chat-ui/mentions/suggestions/data/orchestrator.d.ts +12 -0
  343. package/dist/chat-ui/mentions/suggestions/data/orchestrator.js +56 -2
  344. package/dist/chat-ui/mentions/suggestions/data/orchestrator.js.map +1 -1
  345. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +24 -3
  346. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  347. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +7 -0
  348. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +24 -3
  349. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  350. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +35 -13
  351. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  352. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +15 -1
  353. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +28 -6
  354. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  355. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs +9 -6
  356. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs.map +1 -1
  357. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.d.ts +3 -0
  358. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js +5 -2
  359. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js.map +1 -1
  360. package/dist/chat-ui/mentions/use-account-workspace-id.cjs +45 -10
  361. package/dist/chat-ui/mentions/use-account-workspace-id.cjs.map +1 -1
  362. package/dist/chat-ui/mentions/use-account-workspace-id.d.ts +24 -1
  363. package/dist/chat-ui/mentions/use-account-workspace-id.js +46 -11
  364. package/dist/chat-ui/mentions/use-account-workspace-id.js.map +1 -1
  365. package/dist/chat-ui/mentions/use-member-avatar.cjs +4 -4
  366. package/dist/chat-ui/mentions/use-member-avatar.cjs.map +1 -1
  367. package/dist/chat-ui/mentions/use-mention-asset.cjs +140 -0
  368. package/dist/chat-ui/mentions/use-mention-asset.cjs.map +1 -0
  369. package/dist/chat-ui/mentions/use-mention-asset.d.ts +16 -0
  370. package/dist/chat-ui/mentions/use-mention-asset.js +140 -0
  371. package/dist/chat-ui/mentions/use-mention-asset.js.map +1 -0
  372. package/dist/chat-ui/messages/answer-label.cjs +42 -0
  373. package/dist/chat-ui/messages/answer-label.cjs.map +1 -0
  374. package/dist/chat-ui/messages/answer-label.d.ts +33 -0
  375. package/dist/chat-ui/messages/answer-label.js +42 -0
  376. package/dist/chat-ui/messages/answer-label.js.map +1 -0
  377. package/dist/chat-ui/messages/arrival-animation.cjs +13 -0
  378. package/dist/chat-ui/messages/arrival-animation.cjs.map +1 -0
  379. package/dist/chat-ui/messages/arrival-animation.d.ts +14 -0
  380. package/dist/chat-ui/messages/arrival-animation.js +13 -0
  381. package/dist/chat-ui/messages/arrival-animation.js.map +1 -0
  382. package/dist/chat-ui/messages/continue-pill.cjs +5 -5
  383. package/dist/chat-ui/messages/continue-pill.cjs.map +1 -1
  384. package/dist/chat-ui/messages/handoff-arrival-divider.cjs +44 -0
  385. package/dist/chat-ui/messages/handoff-arrival-divider.cjs.map +1 -0
  386. package/dist/chat-ui/messages/handoff-arrival-divider.d.ts +17 -0
  387. package/dist/chat-ui/messages/handoff-arrival-divider.js +44 -0
  388. package/dist/chat-ui/messages/handoff-arrival-divider.js.map +1 -0
  389. package/dist/chat-ui/messages/message-actions-config.cjs +3 -3
  390. package/dist/chat-ui/messages/message-actions-config.cjs.map +1 -1
  391. package/dist/chat-ui/messages/message-components.cjs +8 -4
  392. package/dist/chat-ui/messages/message-components.cjs.map +1 -1
  393. package/dist/chat-ui/messages/message-components.js +5 -1
  394. package/dist/chat-ui/messages/message-components.js.map +1 -1
  395. package/dist/chat-ui/messages/message-images.cjs +66 -0
  396. package/dist/chat-ui/messages/message-images.cjs.map +1 -0
  397. package/dist/chat-ui/messages/message-images.d.ts +16 -0
  398. package/dist/chat-ui/messages/message-images.js +66 -0
  399. package/dist/chat-ui/messages/message-images.js.map +1 -0
  400. package/dist/chat-ui/messages/user-edit-composer.cjs +2 -2
  401. package/dist/chat-ui/messages/user-edit-composer.cjs.map +1 -1
  402. package/dist/chat-ui/messages/wake-marker.cjs +3 -3
  403. package/dist/chat-ui/messages/wake-marker.cjs.map +1 -1
  404. package/dist/chat-ui/rich-text/chat-link.cjs +7 -6
  405. package/dist/chat-ui/rich-text/chat-link.cjs.map +1 -1
  406. package/dist/chat-ui/rich-text/chat-link.d.ts +2 -3
  407. package/dist/chat-ui/rich-text/chat-link.js +6 -5
  408. package/dist/chat-ui/rich-text/chat-link.js.map +1 -1
  409. package/dist/chat-ui/rich-text/chat-message-body.cjs +8 -8
  410. package/dist/chat-ui/rich-text/chat-message-body.cjs.map +1 -1
  411. package/dist/chat-ui/rich-text/chat-node-views.cjs +7 -6
  412. package/dist/chat-ui/rich-text/chat-node-views.cjs.map +1 -1
  413. package/dist/chat-ui/rich-text/chat-node-views.js +1 -0
  414. package/dist/chat-ui/rich-text/chat-node-views.js.map +1 -1
  415. package/dist/chat-ui/rich-text/dom-output-spec.cjs +2 -2
  416. package/dist/chat-ui/rich-text/dom-output-spec.cjs.map +1 -1
  417. package/dist/chat-ui/statewire.cjs +3 -0
  418. package/dist/chat-ui/statewire.cjs.map +1 -1
  419. package/dist/chat-ui/statewire.d.ts +2 -1
  420. package/dist/chat-ui/statewire.js +3 -0
  421. package/dist/chat-ui/statewire.js.map +1 -1
  422. package/dist/chat-ui/thread/chat-thread-shell.cjs +43 -14
  423. package/dist/chat-ui/thread/chat-thread-shell.cjs.map +1 -1
  424. package/dist/chat-ui/thread/chat-thread-shell.d.ts +16 -2
  425. package/dist/chat-ui/thread/chat-thread-shell.js +35 -6
  426. package/dist/chat-ui/thread/chat-thread-shell.js.map +1 -1
  427. package/dist/chat-ui/thread/composer-send-or-stop.cjs +30 -20
  428. package/dist/chat-ui/thread/composer-send-or-stop.cjs.map +1 -1
  429. package/dist/chat-ui/thread/composer-send-or-stop.d.ts +8 -0
  430. package/dist/chat-ui/thread/composer-send-or-stop.js +29 -19
  431. package/dist/chat-ui/thread/composer-send-or-stop.js.map +1 -1
  432. package/dist/chat-ui/thread/statewire-history-edge.cjs +20 -21
  433. package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
  434. package/dist/chat-ui/thread/statewire-history-edge.js +3 -4
  435. package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
  436. package/dist/chat-ui/thread/thread-loading-overlay.cjs +5 -5
  437. package/dist/chat-ui/thread/thread-loading-overlay.cjs.map +1 -1
  438. package/dist/collab/client.cjs +40 -3
  439. package/dist/collab/client.cjs.map +1 -1
  440. package/dist/collab/client.d.ts +25 -0
  441. package/dist/collab/client.js +40 -3
  442. package/dist/collab/client.js.map +1 -1
  443. package/dist/collab/document-status.cjs +150 -0
  444. package/dist/collab/document-status.cjs.map +1 -0
  445. package/dist/collab/document-status.d.ts +68 -0
  446. package/dist/collab/document-status.js +150 -0
  447. package/dist/collab/document-status.js.map +1 -0
  448. package/dist/collab/index.cjs +7 -0
  449. package/dist/collab/index.cjs.map +1 -1
  450. package/dist/collab/index.d.ts +6 -1
  451. package/dist/collab/index.js +7 -0
  452. package/dist/collab/index.js.map +1 -1
  453. package/dist/collab/presence-react.cjs +11 -11
  454. package/dist/collab/presence-react.cjs.map +1 -1
  455. package/dist/collab/react.cjs +6 -6
  456. package/dist/collab/react.cjs.map +1 -1
  457. package/dist/composer/AttachmentContext.cjs +24 -11
  458. package/dist/composer/AttachmentContext.cjs.map +1 -1
  459. package/dist/composer/AttachmentContext.js +18 -5
  460. package/dist/composer/AttachmentContext.js.map +1 -1
  461. package/dist/composer/ComposerAttachmentPreview.cjs +78 -23
  462. package/dist/composer/ComposerAttachmentPreview.cjs.map +1 -1
  463. package/dist/composer/ComposerAttachmentPreview.d.ts +5 -3
  464. package/dist/composer/ComposerAttachmentPreview.js +79 -24
  465. package/dist/composer/ComposerAttachmentPreview.js.map +1 -1
  466. package/dist/composer/ComposerDropZone.cjs +7 -7
  467. package/dist/composer/ComposerDropZone.cjs.map +1 -1
  468. package/dist/composer/FileUploadButton.cjs +37 -22
  469. package/dist/composer/FileUploadButton.cjs.map +1 -1
  470. package/dist/composer/FileUploadButton.d.ts +6 -0
  471. package/dist/composer/FileUploadButton.js +34 -19
  472. package/dist/composer/FileUploadButton.js.map +1 -1
  473. package/dist/composer/QuoteContext.cjs +8 -8
  474. package/dist/composer/QuoteContext.cjs.map +1 -1
  475. package/dist/composer/composer-handoff.cjs +4 -4
  476. package/dist/composer/composer-handoff.cjs.map +1 -1
  477. package/dist/composer/useAppendToComposer.cjs +4 -4
  478. package/dist/composer/useAppendToComposer.cjs.map +1 -1
  479. package/dist/composer/useAttachFiles.cjs +23 -6
  480. package/dist/composer/useAttachFiles.cjs.map +1 -1
  481. package/dist/composer/useAttachFiles.d.ts +15 -7
  482. package/dist/composer/useAttachFiles.js +22 -5
  483. package/dist/composer/useAttachFiles.js.map +1 -1
  484. package/dist/composer/useComposerAttachment.cjs +4 -4
  485. package/dist/composer/useComposerAttachment.cjs.map +1 -1
  486. package/dist/composer/useFileUpload.cjs +21 -16
  487. package/dist/composer/useFileUpload.cjs.map +1 -1
  488. package/dist/composer/useFileUpload.d.ts +12 -0
  489. package/dist/composer/useFileUpload.js +12 -7
  490. package/dist/composer/useFileUpload.js.map +1 -1
  491. package/dist/composer/useReadComposerDraft.cjs +2 -2
  492. package/dist/composer/useReadComposerDraft.cjs.map +1 -1
  493. package/dist/composer/useSendMessage.cjs +4 -4
  494. package/dist/composer/useSendMessage.cjs.map +1 -1
  495. package/dist/diagnostics/useAthenaDiagnostics.cjs +4 -4
  496. package/dist/diagnostics/useAthenaDiagnostics.cjs.map +1 -1
  497. package/dist/dictation/audio-level-history.cjs +3 -3
  498. package/dist/dictation/audio-level-history.cjs.map +1 -1
  499. package/dist/dictation/dictation-controls.cjs +24 -20
  500. package/dist/dictation/dictation-controls.cjs.map +1 -1
  501. package/dist/dictation/dictation-controls.d.ts +6 -1
  502. package/dist/dictation/dictation-controls.js +24 -20
  503. package/dist/dictation/dictation-controls.js.map +1 -1
  504. package/dist/dictation/use-athena-dictation-engine.cjs +3 -3
  505. package/dist/dictation/use-athena-dictation-engine.cjs.map +1 -1
  506. package/dist/dictation/use-dictation.cjs +22 -22
  507. package/dist/dictation/use-dictation.cjs.map +1 -1
  508. package/dist/index.cjs +26 -2
  509. package/dist/index.cjs.map +1 -1
  510. package/dist/index.d.ts +15 -3
  511. package/dist/index.js +26 -2
  512. package/dist/index.js.map +1 -1
  513. package/dist/keryx-http/src/receive-only-socket.cjs +40 -0
  514. package/dist/keryx-http/src/receive-only-socket.cjs.map +1 -0
  515. package/dist/keryx-http/src/receive-only-socket.d.ts +27 -0
  516. package/dist/keryx-http/src/receive-only-socket.js +40 -0
  517. package/dist/keryx-http/src/receive-only-socket.js.map +1 -0
  518. package/dist/keryx-http/src/update-attributions.cjs +111 -0
  519. package/dist/keryx-http/src/update-attributions.cjs.map +1 -0
  520. package/dist/keryx-http/src/update-attributions.d.ts +75 -0
  521. package/dist/keryx-http/src/update-attributions.js +111 -0
  522. package/dist/keryx-http/src/update-attributions.js.map +1 -0
  523. package/dist/lib/owner-document.cjs +6 -6
  524. package/dist/lib/owner-document.cjs.map +1 -1
  525. package/dist/lib/use-athena-rest-query.cjs +4 -4
  526. package/dist/lib/use-athena-rest-query.cjs.map +1 -1
  527. package/dist/lib/use-document-active.cjs +4 -4
  528. package/dist/lib/use-document-active.cjs.map +1 -1
  529. package/dist/lib/use-prefers-reduced-motion.cjs +2 -2
  530. package/dist/lib/use-prefers-reduced-motion.cjs.map +1 -1
  531. package/dist/offline/offline-history.cjs +7 -7
  532. package/dist/offline/offline-history.cjs.map +1 -1
  533. package/dist/provider/AthenaContext.cjs +3 -3
  534. package/dist/provider/AthenaContext.cjs.map +1 -1
  535. package/dist/provider/AthenaProvider.cjs +116 -79
  536. package/dist/provider/AthenaProvider.cjs.map +1 -1
  537. package/dist/provider/AthenaProvider.js +40 -3
  538. package/dist/provider/AthenaProvider.js.map +1 -1
  539. package/dist/provider/PostHogProvider.cjs +2 -2
  540. package/dist/provider/PostHogProvider.cjs.map +1 -1
  541. package/dist/provider/agent-selection-context.cjs +2 -2
  542. package/dist/provider/agent-selection-context.cjs.map +1 -1
  543. package/dist/provider/chat-mode-context.cjs +2 -2
  544. package/dist/provider/chat-mode-context.cjs.map +1 -1
  545. package/dist/provider/session-persistence-context.cjs +10 -0
  546. package/dist/provider/session-persistence-context.cjs.map +1 -0
  547. package/dist/provider/session-persistence-context.d.ts +15 -0
  548. package/dist/provider/session-persistence-context.js +10 -0
  549. package/dist/provider/session-persistence-context.js.map +1 -0
  550. package/dist/provider/statewire-history-context.cjs +4 -4
  551. package/dist/provider/statewire-history-context.cjs.map +1 -1
  552. package/dist/provider/statewire-lifecycle-context.cjs +3 -3
  553. package/dist/provider/statewire-lifecycle-context.cjs.map +1 -1
  554. package/dist/provider/statewire-window-context.cjs +3 -3
  555. package/dist/provider/statewire-window-context.cjs.map +1 -1
  556. package/dist/provider/theme-style-context.cjs +3 -3
  557. package/dist/provider/theme-style-context.cjs.map +1 -1
  558. package/dist/react/package.json.cjs +1 -1
  559. package/dist/react/package.json.js +1 -1
  560. package/dist/references/src/tool-option-schemas.d.ts +0 -34
  561. package/dist/runtime/StatewireThreadConfigLaneSync.cjs +10 -10
  562. package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
  563. package/dist/runtime/auth-refusal-restart.cjs +7 -7
  564. package/dist/runtime/auth-refusal-restart.cjs.map +1 -1
  565. package/dist/runtime/auth.cjs +13 -13
  566. package/dist/runtime/auth.cjs.map +1 -1
  567. package/dist/runtime/statewire-lifecycle.cjs +1 -0
  568. package/dist/runtime/statewire-lifecycle.cjs.map +1 -1
  569. package/dist/runtime/statewire-lifecycle.d.ts +3 -1
  570. package/dist/runtime/statewire-lifecycle.js +2 -1
  571. package/dist/runtime/statewire-lifecycle.js.map +1 -1
  572. package/dist/runtime/statewire-server-lane-context.cjs +2 -2
  573. package/dist/runtime/statewire-server-lane-context.cjs.map +1 -1
  574. package/dist/runtime/statewire-session-lane.cjs +4 -4
  575. package/dist/runtime/statewire-session-lane.cjs.map +1 -1
  576. package/dist/runtime/useAthenaStatewireRuntime.cjs +10 -8
  577. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  578. package/dist/runtime/useAthenaStatewireRuntime.d.ts +2 -0
  579. package/dist/runtime/useAthenaStatewireRuntime.js +2 -0
  580. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  581. package/dist/styles.css +1 -1
  582. package/dist/threads/Inbox.cjs +8 -8
  583. package/dist/threads/Inbox.cjs.map +1 -1
  584. package/dist/threads/SessionList.cjs +9 -9
  585. package/dist/threads/SessionList.cjs.map +1 -1
  586. package/dist/threads/SessionsPage.cjs +11 -11
  587. package/dist/threads/SessionsPage.cjs.map +1 -1
  588. package/dist/threads/index-triggered-refresh.cjs +10 -10
  589. package/dist/threads/index-triggered-refresh.cjs.map +1 -1
  590. package/dist/threads/mark-viewed-thread-read.cjs +12 -12
  591. package/dist/threads/mark-viewed-thread-read.cjs.map +1 -1
  592. package/dist/threads/offline-session-list.cjs +3 -3
  593. package/dist/threads/offline-session-list.cjs.map +1 -1
  594. package/dist/threads/session-list-tab-share.cjs +5 -5
  595. package/dist/threads/session-list-tab-share.cjs.map +1 -1
  596. package/dist/threads/statewire-thread-list.cjs +55 -51
  597. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  598. package/dist/threads/statewire-thread-list.js +6 -2
  599. package/dist/threads/statewire-thread-list.js.map +1 -1
  600. package/dist/threads/thread-id-context.cjs +5 -5
  601. package/dist/threads/thread-id-context.cjs.map +1 -1
  602. package/dist/threads/use-athena-session-attention.cjs +2 -2
  603. package/dist/threads/use-athena-session-attention.cjs.map +1 -1
  604. package/dist/threads/use-athena-sessions.cjs +10 -10
  605. package/dist/threads/use-athena-sessions.cjs.map +1 -1
  606. package/dist/threads/use-athena-thread-model.cjs +3 -3
  607. package/dist/threads/use-athena-thread-model.cjs.map +1 -1
  608. package/dist/threads/use-rest-conversation-history.cjs +3 -3
  609. package/dist/threads/use-rest-conversation-history.cjs.map +1 -1
  610. package/dist/threads/use-statewire-conversation-history.cjs +8 -8
  611. package/dist/threads/use-statewire-conversation-history.cjs.map +1 -1
  612. package/dist/threads/use-thread-archive.cjs +9 -9
  613. package/dist/threads/use-thread-archive.cjs.map +1 -1
  614. package/dist/threads/use-thread-favorite.cjs +2 -2
  615. package/dist/threads/use-thread-favorite.cjs.map +1 -1
  616. package/dist/threads/use-thread-field-override.cjs +20 -20
  617. package/dist/threads/use-thread-field-override.cjs.map +1 -1
  618. package/dist/threads/use-thread-read-state.cjs +4 -4
  619. package/dist/threads/use-thread-read-state.cjs.map +1 -1
  620. package/dist/threads/use-thread-rename.cjs +2 -2
  621. package/dist/threads/use-thread-rename.cjs.map +1 -1
  622. package/dist/threads/useAthenaThreadManager.cjs +2 -2
  623. package/dist/threads/useAthenaThreadManager.cjs.map +1 -1
  624. package/dist/tools/NestedPtcMessages.cjs +6 -6
  625. package/dist/tools/NestedPtcMessages.cjs.map +1 -1
  626. package/dist/tools/append-document-tool-ui.cjs +7 -7
  627. package/dist/tools/append-document-tool-ui.cjs.map +1 -1
  628. package/dist/tools/file-tool-uis.cjs +2 -2
  629. package/dist/tools/file-tool-uis.cjs.map +1 -1
  630. package/dist/tools/misc-tool-uis.cjs +2 -2
  631. package/dist/tools/misc-tool-uis.cjs.map +1 -1
  632. package/dist/tools/primitives.cjs +6 -6
  633. package/dist/tools/primitives.cjs.map +1 -1
  634. package/dist/tools/read-asset-tool-ui.cjs +6 -6
  635. package/dist/tools/read-asset-tool-ui.cjs.map +1 -1
  636. package/dist/tools/subagent-task-tool-ui.cjs +21 -21
  637. package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
  638. package/dist/tools/test-recording-tool-uis.cjs +16 -16
  639. package/dist/tools/test-recording-tool-uis.cjs.map +1 -1
  640. package/dist/tools/todo-plan-store.cjs +4 -4
  641. package/dist/tools/todo-plan-store.cjs.map +1 -1
  642. package/dist/tools/tool-appearance.cjs +3 -3
  643. package/dist/tools/tool-appearance.cjs.map +1 -1
  644. package/dist/tools/tool-fallback.cjs +14 -14
  645. package/dist/tools/tool-fallback.cjs.map +1 -1
  646. package/dist/tools/tool-summary.cjs +0 -2
  647. package/dist/tools/tool-summary.cjs.map +1 -1
  648. package/dist/tools/tool-summary.js +0 -2
  649. package/dist/tools/tool-summary.js.map +1 -1
  650. package/dist/tools/tool-uis.cjs +74 -74
  651. package/dist/tools/tool-uis.cjs.map +1 -1
  652. package/dist/tools/use-elapsed-seconds.cjs +3 -3
  653. package/dist/tools/use-elapsed-seconds.cjs.map +1 -1
  654. package/dist/tools/write-todos-tool-ui.cjs +9 -9
  655. package/dist/tools/write-todos-tool-ui.cjs.map +1 -1
  656. package/dist/ui/image-viewer.cjs +382 -0
  657. package/dist/ui/image-viewer.cjs.map +1 -0
  658. package/dist/ui/image-viewer.d.ts +50 -0
  659. package/dist/ui/image-viewer.js +382 -0
  660. package/dist/ui/image-viewer.js.map +1 -0
  661. package/dist/voice/chat.cjs +6 -0
  662. package/dist/voice/chat.cjs.map +1 -1
  663. package/dist/voice/chat.d.ts +1 -1
  664. package/dist/voice/chat.js +8 -2
  665. package/dist/voice/livekit-join.cjs +52 -101
  666. package/dist/voice/livekit-join.cjs.map +1 -1
  667. package/dist/voice/livekit-join.d.ts +1 -6
  668. package/dist/voice/livekit-join.js +52 -101
  669. package/dist/voice/livekit-join.js.map +1 -1
  670. package/dist/voice/livekit.cjs.map +1 -1
  671. package/dist/voice/livekit.d.ts +11 -1
  672. package/dist/voice/livekit.js.map +1 -1
  673. package/dist/voice/use-athena-voice-session.cjs +34 -34
  674. package/dist/voice/use-athena-voice-session.cjs.map +1 -1
  675. package/dist/workbench/ComputerLiveDesktop.cjs +13 -13
  676. package/dist/workbench/ComputerLiveDesktop.cjs.map +1 -1
  677. package/dist/workbench/SessionWorkbench.cjs +22 -22
  678. package/dist/workbench/SessionWorkbench.cjs.map +1 -1
  679. package/dist/workbench/session-workbench-context.cjs +3 -3
  680. package/dist/workbench/session-workbench-context.cjs.map +1 -1
  681. package/dist/workbench/session-workbench-panes.cjs +8 -8
  682. package/dist/workbench/session-workbench-panes.cjs.map +1 -1
  683. package/dist/workbench/workbench-layout-context.cjs +3 -3
  684. package/dist/workbench/workbench-layout-context.cjs.map +1 -1
  685. package/package.json +2 -1
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const react = require("react");
3
+ const require$$0 = require("react");
4
4
  const api = require("./api.cjs");
5
5
  const useThreadFieldOverride = require("./use-thread-field-override.cjs");
6
6
  const RENAME_UNAVAILABLE_WARNING = "[AthenaSDK] This backend has no POST /api/conversations/threads/rename route yet; sessions cannot be renamed from here until it deploys.";
@@ -28,7 +28,7 @@ function useThreadRename({
28
28
  onServerTruth: onServerTruth ? ({ threadId, value }) => onServerTruth({ threadId, title: value }) : void 0
29
29
  });
30
30
  const set = field.set;
31
- const rename = react.useCallback(
31
+ const rename = require$$0.useCallback(
32
32
  ({ threadId, title }) => set({ threadId, value: title }),
33
33
  [set]
34
34
  );
@@ -1 +1 @@
1
- {"version":3,"file":"use-thread-rename.cjs","sources":["../../src/threads/use-thread-rename.ts"],"sourcesContent":["/**\n * The inline rename behind `SessionList`: `useThreadFieldOverride` over\n * `POST /api/conversations/threads/rename` (see that module for the\n * optimistic-override, rollback, serialization and identity-scoping\n * contract). The row shows the new title on commit; the server's stored\n * title (trimmed) is written back, and a failure restores the previous one.\n * A 404 / 405 marks the rename unavailable — the backend predates the route\n * — so the list withdraws the action instead of failing on every commit.\n */\nimport { useCallback } from 'react';\nimport type { CredentialResolver } from '../runtime/credential-renewal';\nimport { isThreadRenameUnavailableError, renameThread } from './api';\nimport type { RestConversationAuth } from './use-rest-conversation-history';\nimport { type ThreadFieldTarget, useThreadFieldOverride } from './use-thread-field-override';\n\nexport interface ThreadRenameTarget {\n threadId: string;\n /** The new title; the caller trims it (the server trims again and bounds it to 1–200 characters). */\n title: string;\n}\n\n/** The two fields the override layer reads and writes on a list row. */\nexport interface TitleRow {\n threadId: string;\n title: string;\n}\n\nexport interface UseThreadRenameOptions {\n backendUrl: string;\n /** Non-secret identity in the mutation key (as the read-state mutation keys). */\n principalId: string;\n /** Resolved per request; called with `{ force: true }` when the host refuses the token. */\n getAuth: CredentialResolver<RestConversationAuth>;\n /**\n * The rows as the list sources currently report them, BEFORE overrides. An\n * override is dropped once its row reports the same title.\n */\n rows: readonly TitleRow[];\n /** Write the server's answer into the list caches (`patchConversation`). */\n onServerTruth?: (result: ThreadRenameTarget) => void;\n}\n\nexport interface ThreadRename {\n /** Optimistic, then server-confirmed, titles layered over the list sources, keyed by thread id. */\n overrides: Readonly<Record<string, string>>;\n /**\n * Rename a thread. The row shows the title at once; while that thread's\n * write is in flight the call only records the desired title (see the\n * field-override module doc).\n */\n rename: (target: ThreadRenameTarget) => void;\n /** True while any rename is in flight. */\n isPending: boolean;\n /** The threads whose rename is in flight — the row's editor stays closed for these. */\n pendingThreadIds: ReadonlySet<string>;\n /**\n * `false` once the backend answered 404 / 405: the route is not deployed\n * there, and the list offers no rename action.\n */\n isAvailable: boolean;\n}\n\nconst RENAME_UNAVAILABLE_WARNING =\n '[AthenaSDK] This backend has no POST /api/conversations/threads/rename route yet; sessions cannot be renamed from here until it deploys.';\n\nconst readTitle = (row: TitleRow): string => row.title;\n\nexport function useThreadRename({\n backendUrl,\n principalId,\n getAuth,\n rows,\n onServerTruth,\n}: UseThreadRenameOptions): ThreadRename {\n const field = useThreadFieldOverride<string, TitleRow>({\n field: 'rename',\n backendUrl,\n principalId,\n getAuth,\n rows,\n readRow: readTitle,\n write: async (auth, { threadId, value }) => {\n const result = await renameThread(backendUrl, auth, { threadId, title: value });\n return { threadId: result.thread_id, value: result.title };\n },\n isUnavailableError: isThreadRenameUnavailableError,\n unavailableWarning: RENAME_UNAVAILABLE_WARNING,\n onServerTruth: onServerTruth\n ? ({ threadId, value }: ThreadFieldTarget<string>) => onServerTruth({ threadId, title: value })\n : undefined,\n });\n const set = field.set;\n const rename = useCallback(\n ({ threadId, title }: ThreadRenameTarget) => set({ threadId, value: title }),\n [set],\n );\n return {\n overrides: field.overrides,\n rename,\n isPending: field.isPending,\n pendingThreadIds: field.pendingThreadIds,\n isAvailable: field.isAvailable,\n };\n}\n\n/** The row with its title override applied, or the row itself when it has none. */\nexport function withTitleOverride<T extends TitleRow>(\n row: T,\n overrides: Readonly<Record<string, string>>,\n): T {\n const override = overrides[row.threadId];\n return override === undefined || override === row.title ? row : { ...row, title: override };\n}\n\n/** Every row with its title override applied. */\nexport function withTitleOverrides<T extends TitleRow>(\n rows: readonly T[],\n overrides: Readonly<Record<string, string>>,\n): T[] {\n return rows.map((row) => withTitleOverride(row, overrides));\n}\n"],"names":["useThreadFieldOverride","renameThread","isThreadRenameUnavailableError","useCallback"],"mappings":";;;;;AA8DA,MAAM,6BACJ;AAEF,MAAM,YAAY,CAAC,QAA0B,IAAI;AAE1C,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAyC;AACvC,QAAM,QAAQA,uBAAAA,uBAAyC;AAAA,IACrD,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,OAAO,OAAO,MAAM,EAAE,UAAU,YAAY;AAC1C,YAAM,SAAS,MAAMC,IAAAA,aAAa,YAAY,MAAM,EAAE,UAAU,OAAO,OAAO;AAC9E,aAAO,EAAE,UAAU,OAAO,WAAW,OAAO,OAAO,MAAA;AAAA,IACrD;AAAA,IACA,oBAAoBC,IAAAA;AAAAA,IACpB,oBAAoB;AAAA,IACpB,eAAe,gBACX,CAAC,EAAE,UAAU,MAAA,MAAuC,cAAc,EAAE,UAAU,OAAO,MAAA,CAAO,IAC5F;AAAA,EAAA,CACL;AACD,QAAM,MAAM,MAAM;AAClB,QAAM,SAASC,MAAAA;AAAAA,IACb,CAAC,EAAE,UAAU,YAAgC,IAAI,EAAE,UAAU,OAAO,OAAO;AAAA,IAC3E,CAAC,GAAG;AAAA,EAAA;AAEN,SAAO;AAAA,IACL,WAAW,MAAM;AAAA,IACjB;AAAA,IACA,WAAW,MAAM;AAAA,IACjB,kBAAkB,MAAM;AAAA,IACxB,aAAa,MAAM;AAAA,EAAA;AAEvB;AAGO,SAAS,kBACd,KACA,WACG;AACH,QAAM,WAAW,UAAU,IAAI,QAAQ;AACvC,SAAO,aAAa,UAAa,aAAa,IAAI,QAAQ,MAAM,EAAE,GAAG,KAAK,OAAO,SAAA;AACnF;AAGO,SAAS,mBACd,MACA,WACK;AACL,SAAO,KAAK,IAAI,CAAC,QAAQ,kBAAkB,KAAK,SAAS,CAAC;AAC5D;;;;"}
1
+ {"version":3,"file":"use-thread-rename.cjs","sources":["../../src/threads/use-thread-rename.ts"],"sourcesContent":["/**\n * The inline rename behind `SessionList`: `useThreadFieldOverride` over\n * `POST /api/conversations/threads/rename` (see that module for the\n * optimistic-override, rollback, serialization and identity-scoping\n * contract). The row shows the new title on commit; the server's stored\n * title (trimmed) is written back, and a failure restores the previous one.\n * A 404 / 405 marks the rename unavailable — the backend predates the route\n * — so the list withdraws the action instead of failing on every commit.\n */\nimport { useCallback } from 'react';\nimport type { CredentialResolver } from '../runtime/credential-renewal';\nimport { isThreadRenameUnavailableError, renameThread } from './api';\nimport type { RestConversationAuth } from './use-rest-conversation-history';\nimport { type ThreadFieldTarget, useThreadFieldOverride } from './use-thread-field-override';\n\nexport interface ThreadRenameTarget {\n threadId: string;\n /** The new title; the caller trims it (the server trims again and bounds it to 1–200 characters). */\n title: string;\n}\n\n/** The two fields the override layer reads and writes on a list row. */\nexport interface TitleRow {\n threadId: string;\n title: string;\n}\n\nexport interface UseThreadRenameOptions {\n backendUrl: string;\n /** Non-secret identity in the mutation key (as the read-state mutation keys). */\n principalId: string;\n /** Resolved per request; called with `{ force: true }` when the host refuses the token. */\n getAuth: CredentialResolver<RestConversationAuth>;\n /**\n * The rows as the list sources currently report them, BEFORE overrides. An\n * override is dropped once its row reports the same title.\n */\n rows: readonly TitleRow[];\n /** Write the server's answer into the list caches (`patchConversation`). */\n onServerTruth?: (result: ThreadRenameTarget) => void;\n}\n\nexport interface ThreadRename {\n /** Optimistic, then server-confirmed, titles layered over the list sources, keyed by thread id. */\n overrides: Readonly<Record<string, string>>;\n /**\n * Rename a thread. The row shows the title at once; while that thread's\n * write is in flight the call only records the desired title (see the\n * field-override module doc).\n */\n rename: (target: ThreadRenameTarget) => void;\n /** True while any rename is in flight. */\n isPending: boolean;\n /** The threads whose rename is in flight — the row's editor stays closed for these. */\n pendingThreadIds: ReadonlySet<string>;\n /**\n * `false` once the backend answered 404 / 405: the route is not deployed\n * there, and the list offers no rename action.\n */\n isAvailable: boolean;\n}\n\nconst RENAME_UNAVAILABLE_WARNING =\n '[AthenaSDK] This backend has no POST /api/conversations/threads/rename route yet; sessions cannot be renamed from here until it deploys.';\n\nconst readTitle = (row: TitleRow): string => row.title;\n\nexport function useThreadRename({\n backendUrl,\n principalId,\n getAuth,\n rows,\n onServerTruth,\n}: UseThreadRenameOptions): ThreadRename {\n const field = useThreadFieldOverride<string, TitleRow>({\n field: 'rename',\n backendUrl,\n principalId,\n getAuth,\n rows,\n readRow: readTitle,\n write: async (auth, { threadId, value }) => {\n const result = await renameThread(backendUrl, auth, { threadId, title: value });\n return { threadId: result.thread_id, value: result.title };\n },\n isUnavailableError: isThreadRenameUnavailableError,\n unavailableWarning: RENAME_UNAVAILABLE_WARNING,\n onServerTruth: onServerTruth\n ? ({ threadId, value }: ThreadFieldTarget<string>) => onServerTruth({ threadId, title: value })\n : undefined,\n });\n const set = field.set;\n const rename = useCallback(\n ({ threadId, title }: ThreadRenameTarget) => set({ threadId, value: title }),\n [set],\n );\n return {\n overrides: field.overrides,\n rename,\n isPending: field.isPending,\n pendingThreadIds: field.pendingThreadIds,\n isAvailable: field.isAvailable,\n };\n}\n\n/** The row with its title override applied, or the row itself when it has none. */\nexport function withTitleOverride<T extends TitleRow>(\n row: T,\n overrides: Readonly<Record<string, string>>,\n): T {\n const override = overrides[row.threadId];\n return override === undefined || override === row.title ? row : { ...row, title: override };\n}\n\n/** Every row with its title override applied. */\nexport function withTitleOverrides<T extends TitleRow>(\n rows: readonly T[],\n overrides: Readonly<Record<string, string>>,\n): T[] {\n return rows.map((row) => withTitleOverride(row, overrides));\n}\n"],"names":["useThreadFieldOverride","renameThread","isThreadRenameUnavailableError","useCallback"],"mappings":";;;;;AA8DA,MAAM,6BACJ;AAEF,MAAM,YAAY,CAAC,QAA0B,IAAI;AAE1C,SAAS,gBAAgB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAyC;AACvC,QAAM,QAAQA,uBAAAA,uBAAyC;AAAA,IACrD,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,OAAO,OAAO,MAAM,EAAE,UAAU,YAAY;AAC1C,YAAM,SAAS,MAAMC,IAAAA,aAAa,YAAY,MAAM,EAAE,UAAU,OAAO,OAAO;AAC9E,aAAO,EAAE,UAAU,OAAO,WAAW,OAAO,OAAO,MAAA;AAAA,IACrD;AAAA,IACA,oBAAoBC,IAAAA;AAAAA,IACpB,oBAAoB;AAAA,IACpB,eAAe,gBACX,CAAC,EAAE,UAAU,MAAA,MAAuC,cAAc,EAAE,UAAU,OAAO,MAAA,CAAO,IAC5F;AAAA,EAAA,CACL;AACD,QAAM,MAAM,MAAM;AAClB,QAAM,SAASC,WAAAA;AAAAA,IACb,CAAC,EAAE,UAAU,YAAgC,IAAI,EAAE,UAAU,OAAO,OAAO;AAAA,IAC3E,CAAC,GAAG;AAAA,EAAA;AAEN,SAAO;AAAA,IACL,WAAW,MAAM;AAAA,IACjB;AAAA,IACA,WAAW,MAAM;AAAA,IACjB,kBAAkB,MAAM;AAAA,IACxB,aAAa,MAAM;AAAA,EAAA;AAEvB;AAGO,SAAS,kBACd,KACA,WACG;AACH,QAAM,WAAW,UAAU,IAAI,QAAQ;AACvC,SAAO,aAAa,UAAa,aAAa,IAAI,QAAQ,MAAM,EAAE,GAAG,KAAK,OAAO,SAAA;AACnF;AAGO,SAAS,mBACd,MACA,WACK;AACL,SAAO,KAAK,IAAI,CAAC,QAAQ,kBAAkB,KAAK,SAAS,CAAC;AAC5D;;;;"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const react = require("@assistant-ui/react");
4
- const react$1 = require("react");
4
+ const require$$0 = require("react");
5
5
  const statewireThreadList = require("./statewire-thread-list.cjs");
6
6
  function useAthenaThreadManager() {
7
7
  const list = statewireThreadList.useAthenaStatewireThreadList();
@@ -9,7 +9,7 @@ function useAthenaThreadManager() {
9
9
  var _a;
10
10
  return ((_a = s.optional.thread) == null ? void 0 : _a.isLoading) ?? false;
11
11
  });
12
- return react$1.useMemo(() => {
12
+ return require$$0.useMemo(() => {
13
13
  if (!list) return null;
14
14
  return {
15
15
  activeThreadId: list.isNewChat ? null : list.activeThreadId,
@@ -1 +1 @@
1
- {"version":3,"file":"useAthenaThreadManager.cjs","sources":["../../src/threads/useAthenaThreadManager.ts"],"sourcesContent":["/**\n * Public hook for managing thread state and navigation.\n *\n * Wraps the provider's thread-list state to provide a clean, Athena-branded\n * API for reading the active thread and switching between threads.\n *\n * Must be used inside `<AthenaProvider enableThreadList>`.\n */\n\nimport { useAuiState } from '@assistant-ui/react';\nimport { useMemo } from 'react';\nimport { useAthenaStatewireThreadList } from './statewire-thread-list';\n\nexport interface AthenaThreadManagerState {\n /** The backend thread ID of the currently active thread, or null while the\n * active chat is a never-started local chat the backend has not listed yet. */\n activeThreadId: string | null;\n /** Whether the thread list is still loading from the backend. */\n isListLoading: boolean;\n /** Whether the current thread is loading its message history (e.g. after a thread switch). */\n isThreadLoading: boolean;\n /** Switch the chat to a different thread by its backend thread ID. */\n switchToThread: (threadId: string) => Promise<void>;\n /** Create and switch to a new empty thread. */\n switchToNewThread: () => Promise<void>;\n}\n\n/**\n * Hook for managing thread navigation.\n *\n * Returns `null` when called outside `<AthenaProvider enableThreadList>`.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const threads = useAthenaThreadManager();\n * if (!threads) return null;\n *\n * return (\n * <div>\n * <p>Active: {threads.activeThreadId}</p>\n * <button onClick={() => threads.switchToNewThread()}>New Chat</button>\n * </div>\n * );\n * }\n * ```\n */\nexport function useAthenaThreadManager(): AthenaThreadManagerState | null {\n const list = useAthenaStatewireThreadList();\n const isThreadLoading = useAuiState((s) => s.optional.thread?.isLoading ?? false);\n\n return useMemo<AthenaThreadManagerState | null>(() => {\n if (!list) return null;\n return {\n activeThreadId: list.isNewChat ? null : list.activeThreadId,\n isListLoading: list.isLoading,\n isThreadLoading,\n switchToThread: async (threadId: string) => list.selectThread(threadId),\n switchToNewThread: async () => list.newThread(),\n };\n }, [list, isThreadLoading]);\n}\n"],"names":["useAthenaStatewireThreadList","useAuiState","useMemo"],"mappings":";;;;;AA+CO,SAAS,yBAA0D;AACxE,QAAM,OAAOA,oBAAAA,6BAAA;AACb,QAAM,kBAAkBC,MAAAA,YAAY,CAAC,MAAA;;AAAM,oBAAE,SAAS,WAAX,mBAAmB,cAAa;AAAA,GAAK;AAEhF,SAAOC,QAAAA,QAAyC,MAAM;AACpD,QAAI,CAAC,KAAM,QAAO;AAClB,WAAO;AAAA,MACL,gBAAgB,KAAK,YAAY,OAAO,KAAK;AAAA,MAC7C,eAAe,KAAK;AAAA,MACpB;AAAA,MACA,gBAAgB,OAAO,aAAqB,KAAK,aAAa,QAAQ;AAAA,MACtE,mBAAmB,YAAY,KAAK,UAAA;AAAA,IAAU;AAAA,EAElD,GAAG,CAAC,MAAM,eAAe,CAAC;AAC5B;;"}
1
+ {"version":3,"file":"useAthenaThreadManager.cjs","sources":["../../src/threads/useAthenaThreadManager.ts"],"sourcesContent":["/**\n * Public hook for managing thread state and navigation.\n *\n * Wraps the provider's thread-list state to provide a clean, Athena-branded\n * API for reading the active thread and switching between threads.\n *\n * Must be used inside `<AthenaProvider enableThreadList>`.\n */\n\nimport { useAuiState } from '@assistant-ui/react';\nimport { useMemo } from 'react';\nimport { useAthenaStatewireThreadList } from './statewire-thread-list';\n\nexport interface AthenaThreadManagerState {\n /** The backend thread ID of the currently active thread, or null while the\n * active chat is a never-started local chat the backend has not listed yet. */\n activeThreadId: string | null;\n /** Whether the thread list is still loading from the backend. */\n isListLoading: boolean;\n /** Whether the current thread is loading its message history (e.g. after a thread switch). */\n isThreadLoading: boolean;\n /** Switch the chat to a different thread by its backend thread ID. */\n switchToThread: (threadId: string) => Promise<void>;\n /** Create and switch to a new empty thread. */\n switchToNewThread: () => Promise<void>;\n}\n\n/**\n * Hook for managing thread navigation.\n *\n * Returns `null` when called outside `<AthenaProvider enableThreadList>`.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const threads = useAthenaThreadManager();\n * if (!threads) return null;\n *\n * return (\n * <div>\n * <p>Active: {threads.activeThreadId}</p>\n * <button onClick={() => threads.switchToNewThread()}>New Chat</button>\n * </div>\n * );\n * }\n * ```\n */\nexport function useAthenaThreadManager(): AthenaThreadManagerState | null {\n const list = useAthenaStatewireThreadList();\n const isThreadLoading = useAuiState((s) => s.optional.thread?.isLoading ?? false);\n\n return useMemo<AthenaThreadManagerState | null>(() => {\n if (!list) return null;\n return {\n activeThreadId: list.isNewChat ? null : list.activeThreadId,\n isListLoading: list.isLoading,\n isThreadLoading,\n switchToThread: async (threadId: string) => list.selectThread(threadId),\n switchToNewThread: async () => list.newThread(),\n };\n }, [list, isThreadLoading]);\n}\n"],"names":["useAthenaStatewireThreadList","useAuiState","useMemo"],"mappings":";;;;;AA+CO,SAAS,yBAA0D;AACxE,QAAM,OAAOA,oBAAAA,6BAAA;AACb,QAAM,kBAAkBC,MAAAA,YAAY,CAAC,MAAA;;AAAM,oBAAE,SAAS,WAAX,mBAAmB,cAAa;AAAA,GAAK;AAEhF,SAAOC,WAAAA,QAAyC,MAAM;AACpD,QAAI,CAAC,KAAM,QAAO;AAClB,WAAO;AAAA,MACL,gBAAgB,KAAK,YAAY,OAAO,KAAK;AAAA,MAC7C,eAAe,KAAK;AAAA,MACpB;AAAA,MACA,gBAAgB,OAAO,aAAqB,KAAK,aAAa,QAAQ;AAAA,MACtE,mBAAmB,YAAY,KAAK,UAAA;AAAA,IAAU;AAAA,EAElD,GAAG,CAAC,MAAM,eAAe,CAAC;AAC5B;;"}
@@ -2,13 +2,13 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const react = require("@assistant-ui/react");
5
- const react$1 = require("react");
5
+ const require$$0 = require("react");
6
6
  const toolNames = require("../agent-runtime/src/tool-names.cjs");
7
- const NestedPtcComponentsContext = react$1.createContext(null);
7
+ const NestedPtcComponentsContext = require$$0.createContext(null);
8
8
  const NestedPtcComponentsProvider = ({ components, children }) => /* @__PURE__ */ jsxRuntime.jsx(NestedPtcComponentsContext.Provider, { value: components, children });
9
9
  const useNestedPtcComponents = (fallback) => {
10
- const components = react$1.useContext(NestedPtcComponentsContext);
11
- return react$1.useMemo(() => {
10
+ const components = require$$0.useContext(NestedPtcComponentsContext);
11
+ return require$$0.useMemo(() => {
12
12
  const standardComponents = components && "ChainOfThought" in components && components.ChainOfThought ? void 0 : components;
13
13
  return {
14
14
  ...standardComponents ?? {},
@@ -27,9 +27,9 @@ const NestedPtcMessages = ({
27
27
  const isSubagentLane = react.useAuiState(
28
28
  (s) => s.part.type === "tool-call" && s.part.toolName === toolNames.TASK_TOOL_NAME
29
29
  );
30
- const propsRef = react$1.useRef({ components, messageClassName });
30
+ const propsRef = require$$0.useRef({ components, messageClassName });
31
31
  propsRef.current = { components, messageClassName };
32
- const messageComponents = react$1.useMemo(() => {
32
+ const messageComponents = require$$0.useMemo(() => {
33
33
  const NestedMessage = () => {
34
34
  const { components: components2, messageClassName: messageClassName2 } = propsRef.current;
35
35
  const parts = /* @__PURE__ */ jsxRuntime.jsx(
@@ -1 +1 @@
1
- {"version":3,"file":"NestedPtcMessages.cjs","sources":["../../src/tools/NestedPtcMessages.tsx"],"sourcesContent":["\"use client\";\n\nimport { MessagePartPrimitive, MessagePrimitive, useAuiState } from \"@assistant-ui/react\";\nimport { TASK_TOOL_NAME } from \"@athenaintel/agent-runtime\";\nimport {\n createContext,\n useContext,\n useMemo,\n useRef,\n type ComponentProps,\n type FC,\n type PropsWithChildren,\n} from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\n\ntype PartsComponents = ComponentProps<typeof MessagePrimitive.Parts>[\"components\"];\ntype StandardPartsComponents = Extract<\n NonNullable<PartsComponents>,\n { ChainOfThought?: undefined }\n>;\n\nconst NestedPtcComponentsContext = createContext<PartsComponents | null>(null);\n\nexport const NestedPtcComponentsProvider: FC<\n PropsWithChildren<{ components: PartsComponents }>\n> = ({ components, children }) => (\n <NestedPtcComponentsContext.Provider value={components}>\n {children}\n </NestedPtcComponentsContext.Provider>\n);\n\nexport const useNestedPtcComponents = (\n fallback: ToolCallMessagePartComponent\n): PartsComponents => {\n const components = useContext(NestedPtcComponentsContext);\n\n return useMemo(() => {\n const standardComponents =\n components && \"ChainOfThought\" in components && components.ChainOfThought\n ? undefined\n : (components as StandardPartsComponents | null);\n\n return {\n ...(standardComponents ?? {}),\n tools: {\n ...(standardComponents?.tools ?? {}),\n Fallback: fallback,\n },\n } satisfies StandardPartsComponents;\n }, [components, fallback]);\n};\n\nexport interface NestedPtcMessagesProps {\n components: PartsComponents;\n messageClassName?: string;\n}\n\nconst EmptyComponent: FC = () => null;\n\n/**\n * A tool call's nested messages (a programmatic-tool-calling execution's\n * sub-calls), rendered under the tool card with the parent's renderers.\n *\n * Except a `task` call's: those are its subagent's lane, which the subagent\n * card (`SubagentTaskToolUI`) shows and pages. A generic card or a host's own\n * `task` UI wrapped with these would show a second, unpaged copy (a cut lane\n * holds only its newest steps), so it renders nothing for them.\n */\nexport const NestedPtcMessages: FC<NestedPtcMessagesProps> = ({\n components,\n messageClassName,\n}) => {\n const isSubagentLane = useAuiState(\n (s) => s.part.type === \"tool-call\" && s.part.toolName === TASK_TOOL_NAME,\n );\n const propsRef = useRef({ components, messageClassName });\n propsRef.current = { components, messageClassName };\n\n const messageComponents = useMemo(() => {\n const NestedMessage: FC = () => {\n const { components, messageClassName } = propsRef.current;\n const parts = (\n <MessagePrimitive.Parts\n components={{ Empty: EmptyComponent, ...components }}\n />\n );\n return messageClassName ? (\n <div className={messageClassName}>{parts}</div>\n ) : (\n parts\n );\n };\n\n return { Message: NestedMessage };\n }, []);\n\n if (isSubagentLane) return null;\n return <MessagePartPrimitive.Messages components={messageComponents} />;\n};\n"],"names":["createContext","jsx","useContext","useMemo","useAuiState","TASK_TOOL_NAME","useRef","components","messageClassName","MessagePrimitive","MessagePartPrimitive"],"mappings":";;;;;;AAqBA,MAAM,6BAA6BA,QAAAA,cAAsC,IAAI;AAEtE,MAAM,8BAET,CAAC,EAAE,YAAY,eACjBC,2BAAAA,IAAC,2BAA2B,UAA3B,EAAoC,OAAO,YACzC,SAAA,CACH;AAGK,MAAM,yBAAyB,CACpC,aACoB;AACpB,QAAM,aAAaC,QAAAA,WAAW,0BAA0B;AAExD,SAAOC,QAAAA,QAAQ,MAAM;AACnB,UAAM,qBACJ,cAAc,oBAAoB,cAAc,WAAW,iBACvD,SACC;AAEP,WAAO;AAAA,MACL,GAAI,sBAAsB,CAAA;AAAA,MAC1B,OAAO;AAAA,QACL,IAAI,yDAAoB,UAAS,CAAA;AAAA,QACjC,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,EAEJ,GAAG,CAAC,YAAY,QAAQ,CAAC;AAC3B;AAOA,MAAM,iBAAqB,MAAM;AAW1B,MAAM,oBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA;AACF,MAAM;AACJ,QAAM,iBAAiBC,MAAAA;AAAAA,IACrB,CAAC,MAAM,EAAE,KAAK,SAAS,eAAe,EAAE,KAAK,aAAaC,UAAAA;AAAAA,EAAA;AAE5D,QAAM,WAAWC,QAAAA,OAAO,EAAE,YAAY,kBAAkB;AACxD,WAAS,UAAU,EAAE,YAAY,iBAAA;AAEjC,QAAM,oBAAoBH,QAAAA,QAAQ,MAAM;AACtC,UAAM,gBAAoB,MAAM;AAC9B,YAAM,EAAE,YAAAI,aAAY,kBAAAC,kBAAAA,IAAqB,SAAS;AAClD,YAAM,QACJP,2BAAAA;AAAAA,QAACQ,MAAAA,iBAAiB;AAAA,QAAjB;AAAA,UACC,YAAY,EAAE,OAAO,gBAAgB,GAAGF,YAAAA;AAAAA,QAAW;AAAA,MAAA;AAGvD,aAAOC,oBACLP,+BAAC,OAAA,EAAI,WAAWO,mBAAmB,iBAAM,IAEzC;AAAA,IAEJ;AAEA,WAAO,EAAE,SAAS,cAAA;AAAA,EACpB,GAAG,CAAA,CAAE;AAEL,MAAI,eAAgB,QAAO;AAC3B,SAAOP,2BAAAA,IAACS,MAAAA,qBAAqB,UAArB,EAA8B,YAAY,kBAAA,CAAmB;AACvE;;;;"}
1
+ {"version":3,"file":"NestedPtcMessages.cjs","sources":["../../src/tools/NestedPtcMessages.tsx"],"sourcesContent":["\"use client\";\n\nimport { MessagePartPrimitive, MessagePrimitive, useAuiState } from \"@assistant-ui/react\";\nimport { TASK_TOOL_NAME } from \"@athenaintel/agent-runtime\";\nimport {\n createContext,\n useContext,\n useMemo,\n useRef,\n type ComponentProps,\n type FC,\n type PropsWithChildren,\n} from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\n\ntype PartsComponents = ComponentProps<typeof MessagePrimitive.Parts>[\"components\"];\ntype StandardPartsComponents = Extract<\n NonNullable<PartsComponents>,\n { ChainOfThought?: undefined }\n>;\n\nconst NestedPtcComponentsContext = createContext<PartsComponents | null>(null);\n\nexport const NestedPtcComponentsProvider: FC<\n PropsWithChildren<{ components: PartsComponents }>\n> = ({ components, children }) => (\n <NestedPtcComponentsContext.Provider value={components}>\n {children}\n </NestedPtcComponentsContext.Provider>\n);\n\nexport const useNestedPtcComponents = (\n fallback: ToolCallMessagePartComponent\n): PartsComponents => {\n const components = useContext(NestedPtcComponentsContext);\n\n return useMemo(() => {\n const standardComponents =\n components && \"ChainOfThought\" in components && components.ChainOfThought\n ? undefined\n : (components as StandardPartsComponents | null);\n\n return {\n ...(standardComponents ?? {}),\n tools: {\n ...(standardComponents?.tools ?? {}),\n Fallback: fallback,\n },\n } satisfies StandardPartsComponents;\n }, [components, fallback]);\n};\n\nexport interface NestedPtcMessagesProps {\n components: PartsComponents;\n messageClassName?: string;\n}\n\nconst EmptyComponent: FC = () => null;\n\n/**\n * A tool call's nested messages (a programmatic-tool-calling execution's\n * sub-calls), rendered under the tool card with the parent's renderers.\n *\n * Except a `task` call's: those are its subagent's lane, which the subagent\n * card (`SubagentTaskToolUI`) shows and pages. A generic card or a host's own\n * `task` UI wrapped with these would show a second, unpaged copy (a cut lane\n * holds only its newest steps), so it renders nothing for them.\n */\nexport const NestedPtcMessages: FC<NestedPtcMessagesProps> = ({\n components,\n messageClassName,\n}) => {\n const isSubagentLane = useAuiState(\n (s) => s.part.type === \"tool-call\" && s.part.toolName === TASK_TOOL_NAME,\n );\n const propsRef = useRef({ components, messageClassName });\n propsRef.current = { components, messageClassName };\n\n const messageComponents = useMemo(() => {\n const NestedMessage: FC = () => {\n const { components, messageClassName } = propsRef.current;\n const parts = (\n <MessagePrimitive.Parts\n components={{ Empty: EmptyComponent, ...components }}\n />\n );\n return messageClassName ? (\n <div className={messageClassName}>{parts}</div>\n ) : (\n parts\n );\n };\n\n return { Message: NestedMessage };\n }, []);\n\n if (isSubagentLane) return null;\n return <MessagePartPrimitive.Messages components={messageComponents} />;\n};\n"],"names":["createContext","jsx","useContext","useMemo","useAuiState","TASK_TOOL_NAME","useRef","components","messageClassName","MessagePrimitive","MessagePartPrimitive"],"mappings":";;;;;;AAqBA,MAAM,6BAA6BA,WAAAA,cAAsC,IAAI;AAEtE,MAAM,8BAET,CAAC,EAAE,YAAY,eACjBC,2BAAAA,IAAC,2BAA2B,UAA3B,EAAoC,OAAO,YACzC,SAAA,CACH;AAGK,MAAM,yBAAyB,CACpC,aACoB;AACpB,QAAM,aAAaC,WAAAA,WAAW,0BAA0B;AAExD,SAAOC,WAAAA,QAAQ,MAAM;AACnB,UAAM,qBACJ,cAAc,oBAAoB,cAAc,WAAW,iBACvD,SACC;AAEP,WAAO;AAAA,MACL,GAAI,sBAAsB,CAAA;AAAA,MAC1B,OAAO;AAAA,QACL,IAAI,yDAAoB,UAAS,CAAA;AAAA,QACjC,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,EAEJ,GAAG,CAAC,YAAY,QAAQ,CAAC;AAC3B;AAOA,MAAM,iBAAqB,MAAM;AAW1B,MAAM,oBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA;AACF,MAAM;AACJ,QAAM,iBAAiBC,MAAAA;AAAAA,IACrB,CAAC,MAAM,EAAE,KAAK,SAAS,eAAe,EAAE,KAAK,aAAaC,UAAAA;AAAAA,EAAA;AAE5D,QAAM,WAAWC,WAAAA,OAAO,EAAE,YAAY,kBAAkB;AACxD,WAAS,UAAU,EAAE,YAAY,iBAAA;AAEjC,QAAM,oBAAoBH,WAAAA,QAAQ,MAAM;AACtC,UAAM,gBAAoB,MAAM;AAC9B,YAAM,EAAE,YAAAI,aAAY,kBAAAC,kBAAAA,IAAqB,SAAS;AAClD,YAAM,QACJP,2BAAAA;AAAAA,QAACQ,MAAAA,iBAAiB;AAAA,QAAjB;AAAA,UACC,YAAY,EAAE,OAAO,gBAAgB,GAAGF,YAAAA;AAAAA,QAAW;AAAA,MAAA;AAGvD,aAAOC,oBACLP,+BAAC,OAAA,EAAI,WAAWO,mBAAmB,iBAAM,IAEzC;AAAA,IAEJ;AAEA,WAAO,EAAE,SAAS,cAAA;AAAA,EACpB,GAAG,CAAA,CAAE;AAEL,MAAI,eAAgB,QAAO;AAC3B,SAAOP,2BAAAA,IAACS,MAAAA,qBAAqB,UAArB,EAA8B,YAAY,kBAAA,CAAmB;AACvE;;;;"}
@@ -1,8 +1,8 @@
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");
5
- const react$1 = require("@tiptap/react");
4
+ const require$$0 = require("react");
5
+ const react = require("@tiptap/react");
6
6
  const StarterKit = require("@tiptap/starter-kit");
7
7
  const Link = require("@tiptap/extension-link");
8
8
  const tiptapMarkdown = require("tiptap-markdown");
@@ -40,7 +40,7 @@ const markdownPreviewExtensions = [
40
40
  })
41
41
  ];
42
42
  function MarkdownPreview({ content }) {
43
- const editor = react$1.useEditor({
43
+ const editor = react.useEditor({
44
44
  immediatelyRender: true,
45
45
  extensions: markdownPreviewExtensions,
46
46
  content,
@@ -51,16 +51,16 @@ function MarkdownPreview({ content }) {
51
51
  }
52
52
  }
53
53
  });
54
- return /* @__PURE__ */ jsxRuntime.jsx(react$1.EditorContent, { editor });
54
+ return /* @__PURE__ */ jsxRuntime.jsx(react.EditorContent, { editor });
55
55
  }
56
56
  const AppendDocumentToolUIImpl = ({
57
57
  args,
58
58
  result,
59
59
  status
60
60
  }) => {
61
- const [expanded, setExpanded] = react.useState(false);
61
+ const [expanded, setExpanded] = require$$0.useState(false);
62
62
  const typedArgs = args;
63
- const resultData = react.useMemo(() => {
63
+ const resultData = require$$0.useMemo(() => {
64
64
  if (!result) return null;
65
65
  if (typeof result === "string") return assetUtils.tryParseJson(result);
66
66
  if (typeof result === "object") {
@@ -142,7 +142,7 @@ const AppendDocumentToolUIImpl = ({
142
142
  ] })
143
143
  ] });
144
144
  };
145
- const AppendDocumentToolUI = react.memo(
145
+ const AppendDocumentToolUI = require$$0.memo(
146
146
  AppendDocumentToolUIImpl
147
147
  );
148
148
  AppendDocumentToolUI.displayName = "AppendDocumentToolUI";
@@ -1 +1 @@
1
- {"version":3,"file":"append-document-tool-ui.cjs","sources":["../../src/tools/append-document-tool-ui.tsx"],"sourcesContent":["import { memo, useMemo, useState } from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Link from \"@tiptap/extension-link\";\nimport { Markdown } from \"tiptap-markdown\";\nimport {\n CheckCircle2Icon,\n ChevronDownIcon,\n FileTextIcon,\n LoaderIcon,\n AlertCircleIcon,\n NotebookPenIcon,\n} from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { getAssetInfo, tryParseJson } from \"./asset-utils\";\n\nconst markdownPreviewExtensions = [\n StarterKit.configure({\n // Tiptap 3 StarterKit also bundles these; the preview registers its own link.\n link: false,\n underline: false,\n listKeymap: false,\n trailingNode: false,\n codeBlock: {\n HTMLAttributes: {\n class: \"rounded bg-muted p-2 font-mono text-[11px]\",\n },\n },\n }),\n Link.configure({\n openOnClick: true,\n HTMLAttributes: {\n class: \"text-blue-600 underline decoration-blue-300 hover:text-blue-700\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n },\n }),\n Markdown.configure({\n html: false,\n tightLists: true,\n linkify: true,\n breaks: true,\n transformPastedText: false,\n transformCopiedText: false,\n }),\n];\n\nfunction MarkdownPreview({ content }: { content: string }) {\n const editor = useEditor({\n immediatelyRender: true,\n extensions: markdownPreviewExtensions,\n content,\n editable: false,\n editorProps: {\n attributes: {\n class: \"prose prose-sm max-w-none focus:outline-none\",\n },\n },\n });\n\n return <EditorContent editor={editor} />;\n}\n\nconst AppendDocumentToolUIImpl: ToolCallMessagePartComponent = ({\n args,\n result,\n status,\n}) => {\n const [expanded, setExpanded] = useState(false);\n\n const typedArgs = args as Record<string, unknown> | undefined;\n const resultData = useMemo(() => {\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 }, [result]);\n\n const assetId = (typedArgs?.asset_id as string) ?? \"\";\n const markdownText = ((typedArgs?.markdown_text ?? typedArgs?.markdownText) as string) ?? \"\";\n const asset = getAssetInfo(assetId);\n\n const isRunning = status?.type === \"running\";\n const isComplete = status?.type === \"complete\";\n const isError = status?.type === \"incomplete\";\n\n const wordCount = resultData?.word_count as number | undefined;\n const lineCount = resultData?.non_empty_line_count as number | undefined;\n const msg = resultData?.msg as string | undefined;\n const isSuccess = isComplete && (msg?.toLowerCase().includes(\"success\") ?? true);\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 && isSuccess && \"bg-emerald-50 text-emerald-600\",\n isComplete && !isSuccess && \"bg-amber-50 text-amber-600\",\n isError && \"bg-red-50 text-red-500\",\n !isRunning && !isComplete && !isError && \"bg-muted text-muted-foreground\",\n )}\n >\n {isRunning ? (\n <LoaderIcon className=\"size-4 animate-spin\" />\n ) : isError ? (\n <AlertCircleIcon className=\"size-4\" />\n ) : (\n <NotebookPenIcon 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\">\n {isRunning ? \"Writing to document...\" : \"Appended content to document\"}\n </span>\n {isComplete && isSuccess && (\n <CheckCircle2Icon className=\"size-3.5 text-emerald-500\" />\n )}\n </div>\n <div className=\"flex items-center gap-1.5\">\n <FileTextIcon className=\"size-4\" />\n <span className=\"text-[12px] text-muted-foreground\">{asset.name}</span>\n </div>\n </div>\n\n {/* Stats badges */}\n {isComplete && (wordCount || lineCount) && (\n <div className=\"flex items-center gap-2\">\n {lineCount ? (\n <span className=\"rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {lineCount} lines\n </span>\n ) : null}\n {wordCount ? (\n <span className=\"rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {wordCount.toLocaleString()} words\n </span>\n ) : null}\n </div>\n )}\n </div>\n\n {/* Content preview */}\n {markdownText && (\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>{expanded ? \"Hide content\" : \"Show content preview\"}</span>\n </button>\n\n {expanded && (\n <div className=\"max-h-72 overflow-y-auto border-t bg-muted/30 px-4 py-3\">\n <MarkdownPreview content={markdownText} />\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport const AppendDocumentToolUI = memo(\n AppendDocumentToolUIImpl,\n) as unknown as ToolCallMessagePartComponent;\n\nAppendDocumentToolUI.displayName = \"AppendDocumentToolUI\";\n"],"names":["Markdown","useEditor","jsx","EditorContent","useState","useMemo","tryParseJson","getAssetInfo","jsxs","cn","LoaderIcon","AlertCircleIcon","NotebookPenIcon","CheckCircle2Icon","FileTextIcon","ChevronDownIcon","memo"],"mappings":"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"}
1
+ {"version":3,"file":"append-document-tool-ui.cjs","sources":["../../src/tools/append-document-tool-ui.tsx"],"sourcesContent":["import { memo, useMemo, useState } from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Link from \"@tiptap/extension-link\";\nimport { Markdown } from \"tiptap-markdown\";\nimport {\n CheckCircle2Icon,\n ChevronDownIcon,\n FileTextIcon,\n LoaderIcon,\n AlertCircleIcon,\n NotebookPenIcon,\n} from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { getAssetInfo, tryParseJson } from \"./asset-utils\";\n\nconst markdownPreviewExtensions = [\n StarterKit.configure({\n // Tiptap 3 StarterKit also bundles these; the preview registers its own link.\n link: false,\n underline: false,\n listKeymap: false,\n trailingNode: false,\n codeBlock: {\n HTMLAttributes: {\n class: \"rounded bg-muted p-2 font-mono text-[11px]\",\n },\n },\n }),\n Link.configure({\n openOnClick: true,\n HTMLAttributes: {\n class: \"text-blue-600 underline decoration-blue-300 hover:text-blue-700\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n },\n }),\n Markdown.configure({\n html: false,\n tightLists: true,\n linkify: true,\n breaks: true,\n transformPastedText: false,\n transformCopiedText: false,\n }),\n];\n\nfunction MarkdownPreview({ content }: { content: string }) {\n const editor = useEditor({\n immediatelyRender: true,\n extensions: markdownPreviewExtensions,\n content,\n editable: false,\n editorProps: {\n attributes: {\n class: \"prose prose-sm max-w-none focus:outline-none\",\n },\n },\n });\n\n return <EditorContent editor={editor} />;\n}\n\nconst AppendDocumentToolUIImpl: ToolCallMessagePartComponent = ({\n args,\n result,\n status,\n}) => {\n const [expanded, setExpanded] = useState(false);\n\n const typedArgs = args as Record<string, unknown> | undefined;\n const resultData = useMemo(() => {\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 }, [result]);\n\n const assetId = (typedArgs?.asset_id as string) ?? \"\";\n const markdownText = ((typedArgs?.markdown_text ?? typedArgs?.markdownText) as string) ?? \"\";\n const asset = getAssetInfo(assetId);\n\n const isRunning = status?.type === \"running\";\n const isComplete = status?.type === \"complete\";\n const isError = status?.type === \"incomplete\";\n\n const wordCount = resultData?.word_count as number | undefined;\n const lineCount = resultData?.non_empty_line_count as number | undefined;\n const msg = resultData?.msg as string | undefined;\n const isSuccess = isComplete && (msg?.toLowerCase().includes(\"success\") ?? true);\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 && isSuccess && \"bg-emerald-50 text-emerald-600\",\n isComplete && !isSuccess && \"bg-amber-50 text-amber-600\",\n isError && \"bg-red-50 text-red-500\",\n !isRunning && !isComplete && !isError && \"bg-muted text-muted-foreground\",\n )}\n >\n {isRunning ? (\n <LoaderIcon className=\"size-4 animate-spin\" />\n ) : isError ? (\n <AlertCircleIcon className=\"size-4\" />\n ) : (\n <NotebookPenIcon 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\">\n {isRunning ? \"Writing to document...\" : \"Appended content to document\"}\n </span>\n {isComplete && isSuccess && (\n <CheckCircle2Icon className=\"size-3.5 text-emerald-500\" />\n )}\n </div>\n <div className=\"flex items-center gap-1.5\">\n <FileTextIcon className=\"size-4\" />\n <span className=\"text-[12px] text-muted-foreground\">{asset.name}</span>\n </div>\n </div>\n\n {/* Stats badges */}\n {isComplete && (wordCount || lineCount) && (\n <div className=\"flex items-center gap-2\">\n {lineCount ? (\n <span className=\"rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {lineCount} lines\n </span>\n ) : null}\n {wordCount ? (\n <span className=\"rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {wordCount.toLocaleString()} words\n </span>\n ) : null}\n </div>\n )}\n </div>\n\n {/* Content preview */}\n {markdownText && (\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>{expanded ? \"Hide content\" : \"Show content preview\"}</span>\n </button>\n\n {expanded && (\n <div className=\"max-h-72 overflow-y-auto border-t bg-muted/30 px-4 py-3\">\n <MarkdownPreview content={markdownText} />\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport const AppendDocumentToolUI = memo(\n AppendDocumentToolUIImpl,\n) as unknown as ToolCallMessagePartComponent;\n\nAppendDocumentToolUI.displayName = \"AppendDocumentToolUI\";\n"],"names":["Markdown","useEditor","jsx","EditorContent","useState","useMemo","tryParseJson","getAssetInfo","jsxs","cn","LoaderIcon","AlertCircleIcon","NotebookPenIcon","CheckCircle2Icon","FileTextIcon","ChevronDownIcon","memo"],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const lucideReact = require("lucide-react");
5
- const react = require("react");
5
+ const require$$0 = require("react");
6
6
  const primitives = require("./primitives.cjs");
7
7
  const toolSummary = require("./tool-summary.cjs");
8
8
  function rawDetails(result) {
@@ -50,7 +50,7 @@ function makeQuietFileToolUI(spec) {
50
50
  }
51
51
  );
52
52
  };
53
- const Quiet = react.memo(Impl);
53
+ const Quiet = require$$0.memo(Impl);
54
54
  Quiet.displayName = `QuietFileToolUI(${spec.detailsLabel})`;
55
55
  return Quiet;
56
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"file-tool-uis.cjs","sources":["../../src/tools/file-tool-uis.tsx"],"sourcesContent":["/**\n * Quiet tool cards for the deep-agent workspace-file tools.\n *\n * `read_file` / `ls` / `write_file` / `edit_file` / `glob` / `grep` are the\n * agent's own scratch-space plumbing. Without registry entries they fall\n * through to the generic fallback, which renders the raw args/result JSON —\n * scratch paths like `/large_tool_results/toolu_…` and screenfuls of encoded\n * text that read as garble to a non-technical user. Each becomes a one-line\n * card titled by the shared summary registry (\"Read config.ts\", \"Edited\n * upstream.py\" with \"+4 −1\", scratch paths in plain English); the raw output\n * stays available behind a collapsed \"Show details\" section. Hosts can still\n * override any of them via the `toolUIs` prop, which wins over the registry.\n */\nimport {\n FileTextIcon,\n FolderOpenIcon,\n PenLineIcon,\n ScanSearchIcon,\n SearchIcon,\n} from \"lucide-react\";\nimport { memo } from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport { ExpandableSection, normalizeResult, ToolCard, truncate } from \"./primitives\";\nimport { summarizeToolCall, type ToolSummaryState } from \"./tool-summary\";\n\nexport { friendlyWorkspacePath } from \"./tool-summary\";\n\nfunction rawDetails(result: unknown): string | null {\n if (result === null || result === undefined) return null;\n // File tools usually return plain text (file content, listings) — show it\n // as-is; only genuinely structured results get pretty-printed.\n if (typeof result === \"string\") {\n return result.trim() !== \"\" ? result : null;\n }\n if (typeof result === \"object\") {\n const inner = (result as Record<string, unknown>).result;\n if (typeof inner === \"string\") {\n return inner.trim() !== \"\" ? inner : null;\n }\n }\n const data = normalizeResult(result);\n if (data === null) return null;\n const text = JSON.stringify(data, null, 2);\n return text.trim() !== \"\" ? text : null;\n}\n\ninterface QuietFileToolSpec {\n icon: React.ElementType;\n detailsLabel: string;\n}\n\nfunction quietCardState(status: { type: string; reason?: string } | undefined): ToolSummaryState {\n if (status?.type === \"running\") return \"running\";\n if (status?.type === \"requires-action\") return \"waiting\";\n if (status?.type === \"incomplete\") return status.reason === \"cancelled\" ? \"cancelled\" : \"error\";\n return \"complete\";\n}\n\nfunction makeQuietFileToolUI(spec: QuietFileToolSpec): ToolCallMessagePartComponent {\n const Impl: ToolCallMessagePartComponent = ({ toolName, args, result, status }) => {\n const isFailed = status?.type === \"incomplete\";\n const errorMsg = isFailed ? String(status.error ?? \"\") : null;\n const details = status?.type === \"complete\" ? rawDetails(result) : null;\n const summary = summarizeToolCall({\n toolName,\n args: args as Record<string, unknown> | undefined,\n result: status?.type === \"complete\" ? result : undefined,\n status: quietCardState(status),\n });\n\n return (\n <ToolCard\n icon={spec.icon}\n status={status?.type ?? \"complete\"}\n title={summary.label}\n subtitle={summary.meta ? truncate(summary.meta, 70) : undefined}\n error={errorMsg || undefined}\n >\n {details && (\n <ExpandableSection label={spec.detailsLabel}>\n <pre className=\"max-h-64 overflow-auto whitespace-pre-wrap break-all text-[11px] leading-snug text-muted-foreground\">\n {truncate(details, 6000)}\n </pre>\n </ExpandableSection>\n )}\n </ToolCard>\n );\n };\n const Quiet = memo(Impl) as unknown as ToolCallMessagePartComponent;\n Quiet.displayName = `QuietFileToolUI(${spec.detailsLabel})`;\n return Quiet;\n}\n\nexport const ReadFileToolUI = makeQuietFileToolUI({\n icon: ScanSearchIcon,\n detailsLabel: \"Show details\",\n});\n\nexport const ListFilesToolUI = makeQuietFileToolUI({\n icon: FolderOpenIcon,\n detailsLabel: \"Show files\",\n});\n\nexport const WriteFileToolUI = makeQuietFileToolUI({\n icon: FileTextIcon,\n detailsLabel: \"Show details\",\n});\n\nexport const EditFileToolUI = makeQuietFileToolUI({\n icon: PenLineIcon,\n detailsLabel: \"Show details\",\n});\n\nexport const SearchFilesToolUI = makeQuietFileToolUI({\n icon: SearchIcon,\n detailsLabel: \"Show matches\",\n});\n"],"names":["normalizeResult","summarizeToolCall","jsx","ToolCard","truncate","ExpandableSection","memo","ScanSearchIcon","FolderOpenIcon","FileTextIcon","PenLineIcon","SearchIcon"],"mappings":";;;;;;;AA2BA,SAAS,WAAW,QAAgC;AAClD,MAAI,WAAW,QAAQ,WAAW,OAAW,QAAO;AAGpD,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO,OAAO,KAAA,MAAW,KAAK,SAAS;AAAA,EACzC;AACA,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,QAAS,OAAmC;AAClD,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,MAAM,KAAA,MAAW,KAAK,QAAQ;AAAA,IACvC;AAAA,EACF;AACA,QAAM,OAAOA,WAAAA,gBAAgB,MAAM;AACnC,MAAI,SAAS,KAAM,QAAO;AAC1B,QAAM,OAAO,KAAK,UAAU,MAAM,MAAM,CAAC;AACzC,SAAO,KAAK,KAAA,MAAW,KAAK,OAAO;AACrC;AAOA,SAAS,eAAe,QAAyE;AAC/F,OAAI,iCAAQ,UAAS,UAAW,QAAO;AACvC,OAAI,iCAAQ,UAAS,kBAAmB,QAAO;AAC/C,OAAI,iCAAQ,UAAS,qBAAqB,OAAO,WAAW,cAAc,cAAc;AACxF,SAAO;AACT;AAEA,SAAS,oBAAoB,MAAuD;AAClF,QAAM,OAAqC,CAAC,EAAE,UAAU,MAAM,QAAQ,aAAa;AACjF,UAAM,YAAW,iCAAQ,UAAS;AAClC,UAAM,WAAW,WAAW,OAAO,OAAO,SAAS,EAAE,IAAI;AACzD,UAAM,WAAU,iCAAQ,UAAS,aAAa,WAAW,MAAM,IAAI;AACnE,UAAM,UAAUC,YAAAA,kBAAkB;AAAA,MAChC;AAAA,MACA;AAAA,MACA,SAAQ,iCAAQ,UAAS,aAAa,SAAS;AAAA,MAC/C,QAAQ,eAAe,MAAM;AAAA,IAAA,CAC9B;AAED,WACEC,2BAAAA;AAAAA,MAACC,WAAAA;AAAAA,MAAA;AAAA,QACC,MAAM,KAAK;AAAA,QACX,SAAQ,iCAAQ,SAAQ;AAAA,QACxB,OAAO,QAAQ;AAAA,QACf,UAAU,QAAQ,OAAOC,WAAAA,SAAS,QAAQ,MAAM,EAAE,IAAI;AAAA,QACtD,OAAO,YAAY;AAAA,QAElB,UAAA,WACCF,2BAAAA,IAACG,WAAAA,mBAAA,EAAkB,OAAO,KAAK,cAC7B,UAAAH,2BAAAA,IAAC,OAAA,EAAI,WAAU,uGACZ,UAAAE,WAAAA,SAAS,SAAS,GAAI,GACzB,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACA,QAAM,QAAQE,MAAAA,KAAK,IAAI;AACvB,QAAM,cAAc,mBAAmB,KAAK,YAAY;AACxD,SAAO;AACT;AAEO,MAAM,iBAAiB,oBAAoB;AAAA,EAChD,MAAMC,YAAAA;AAAAA,EACN,cAAc;AAChB,CAAC;AAEM,MAAM,kBAAkB,oBAAoB;AAAA,EACjD,MAAMC,YAAAA;AAAAA,EACN,cAAc;AAChB,CAAC;AAEM,MAAM,kBAAkB,oBAAoB;AAAA,EACjD,MAAMC,YAAAA;AAAAA,EACN,cAAc;AAChB,CAAC;AAEM,MAAM,iBAAiB,oBAAoB;AAAA,EAChD,MAAMC,YAAAA;AAAAA,EACN,cAAc;AAChB,CAAC;AAEM,MAAM,oBAAoB,oBAAoB;AAAA,EACnD,MAAMC,YAAAA;AAAAA,EACN,cAAc;AAChB,CAAC;;;;;;;"}
1
+ {"version":3,"file":"file-tool-uis.cjs","sources":["../../src/tools/file-tool-uis.tsx"],"sourcesContent":["/**\n * Quiet tool cards for the deep-agent workspace-file tools.\n *\n * `read_file` / `ls` / `write_file` / `edit_file` / `glob` / `grep` are the\n * agent's own scratch-space plumbing. Without registry entries they fall\n * through to the generic fallback, which renders the raw args/result JSON —\n * scratch paths like `/large_tool_results/toolu_…` and screenfuls of encoded\n * text that read as garble to a non-technical user. Each becomes a one-line\n * card titled by the shared summary registry (\"Read config.ts\", \"Edited\n * upstream.py\" with \"+4 −1\", scratch paths in plain English); the raw output\n * stays available behind a collapsed \"Show details\" section. Hosts can still\n * override any of them via the `toolUIs` prop, which wins over the registry.\n */\nimport {\n FileTextIcon,\n FolderOpenIcon,\n PenLineIcon,\n ScanSearchIcon,\n SearchIcon,\n} from \"lucide-react\";\nimport { memo } from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport { ExpandableSection, normalizeResult, ToolCard, truncate } from \"./primitives\";\nimport { summarizeToolCall, type ToolSummaryState } from \"./tool-summary\";\n\nexport { friendlyWorkspacePath } from \"./tool-summary\";\n\nfunction rawDetails(result: unknown): string | null {\n if (result === null || result === undefined) return null;\n // File tools usually return plain text (file content, listings) — show it\n // as-is; only genuinely structured results get pretty-printed.\n if (typeof result === \"string\") {\n return result.trim() !== \"\" ? result : null;\n }\n if (typeof result === \"object\") {\n const inner = (result as Record<string, unknown>).result;\n if (typeof inner === \"string\") {\n return inner.trim() !== \"\" ? inner : null;\n }\n }\n const data = normalizeResult(result);\n if (data === null) return null;\n const text = JSON.stringify(data, null, 2);\n return text.trim() !== \"\" ? text : null;\n}\n\ninterface QuietFileToolSpec {\n icon: React.ElementType;\n detailsLabel: string;\n}\n\nfunction quietCardState(status: { type: string; reason?: string } | undefined): ToolSummaryState {\n if (status?.type === \"running\") return \"running\";\n if (status?.type === \"requires-action\") return \"waiting\";\n if (status?.type === \"incomplete\") return status.reason === \"cancelled\" ? \"cancelled\" : \"error\";\n return \"complete\";\n}\n\nfunction makeQuietFileToolUI(spec: QuietFileToolSpec): ToolCallMessagePartComponent {\n const Impl: ToolCallMessagePartComponent = ({ toolName, args, result, status }) => {\n const isFailed = status?.type === \"incomplete\";\n const errorMsg = isFailed ? String(status.error ?? \"\") : null;\n const details = status?.type === \"complete\" ? rawDetails(result) : null;\n const summary = summarizeToolCall({\n toolName,\n args: args as Record<string, unknown> | undefined,\n result: status?.type === \"complete\" ? result : undefined,\n status: quietCardState(status),\n });\n\n return (\n <ToolCard\n icon={spec.icon}\n status={status?.type ?? \"complete\"}\n title={summary.label}\n subtitle={summary.meta ? truncate(summary.meta, 70) : undefined}\n error={errorMsg || undefined}\n >\n {details && (\n <ExpandableSection label={spec.detailsLabel}>\n <pre className=\"max-h-64 overflow-auto whitespace-pre-wrap break-all text-[11px] leading-snug text-muted-foreground\">\n {truncate(details, 6000)}\n </pre>\n </ExpandableSection>\n )}\n </ToolCard>\n );\n };\n const Quiet = memo(Impl) as unknown as ToolCallMessagePartComponent;\n Quiet.displayName = `QuietFileToolUI(${spec.detailsLabel})`;\n return Quiet;\n}\n\nexport const ReadFileToolUI = makeQuietFileToolUI({\n icon: ScanSearchIcon,\n detailsLabel: \"Show details\",\n});\n\nexport const ListFilesToolUI = makeQuietFileToolUI({\n icon: FolderOpenIcon,\n detailsLabel: \"Show files\",\n});\n\nexport const WriteFileToolUI = makeQuietFileToolUI({\n icon: FileTextIcon,\n detailsLabel: \"Show details\",\n});\n\nexport const EditFileToolUI = makeQuietFileToolUI({\n icon: PenLineIcon,\n detailsLabel: \"Show details\",\n});\n\nexport const SearchFilesToolUI = makeQuietFileToolUI({\n icon: SearchIcon,\n detailsLabel: \"Show matches\",\n});\n"],"names":["normalizeResult","summarizeToolCall","jsx","ToolCard","truncate","ExpandableSection","memo","ScanSearchIcon","FolderOpenIcon","FileTextIcon","PenLineIcon","SearchIcon"],"mappings":";;;;;;;AA2BA,SAAS,WAAW,QAAgC;AAClD,MAAI,WAAW,QAAQ,WAAW,OAAW,QAAO;AAGpD,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO,OAAO,KAAA,MAAW,KAAK,SAAS;AAAA,EACzC;AACA,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,QAAS,OAAmC;AAClD,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,MAAM,KAAA,MAAW,KAAK,QAAQ;AAAA,IACvC;AAAA,EACF;AACA,QAAM,OAAOA,WAAAA,gBAAgB,MAAM;AACnC,MAAI,SAAS,KAAM,QAAO;AAC1B,QAAM,OAAO,KAAK,UAAU,MAAM,MAAM,CAAC;AACzC,SAAO,KAAK,KAAA,MAAW,KAAK,OAAO;AACrC;AAOA,SAAS,eAAe,QAAyE;AAC/F,OAAI,iCAAQ,UAAS,UAAW,QAAO;AACvC,OAAI,iCAAQ,UAAS,kBAAmB,QAAO;AAC/C,OAAI,iCAAQ,UAAS,qBAAqB,OAAO,WAAW,cAAc,cAAc;AACxF,SAAO;AACT;AAEA,SAAS,oBAAoB,MAAuD;AAClF,QAAM,OAAqC,CAAC,EAAE,UAAU,MAAM,QAAQ,aAAa;AACjF,UAAM,YAAW,iCAAQ,UAAS;AAClC,UAAM,WAAW,WAAW,OAAO,OAAO,SAAS,EAAE,IAAI;AACzD,UAAM,WAAU,iCAAQ,UAAS,aAAa,WAAW,MAAM,IAAI;AACnE,UAAM,UAAUC,YAAAA,kBAAkB;AAAA,MAChC;AAAA,MACA;AAAA,MACA,SAAQ,iCAAQ,UAAS,aAAa,SAAS;AAAA,MAC/C,QAAQ,eAAe,MAAM;AAAA,IAAA,CAC9B;AAED,WACEC,2BAAAA;AAAAA,MAACC,WAAAA;AAAAA,MAAA;AAAA,QACC,MAAM,KAAK;AAAA,QACX,SAAQ,iCAAQ,SAAQ;AAAA,QACxB,OAAO,QAAQ;AAAA,QACf,UAAU,QAAQ,OAAOC,WAAAA,SAAS,QAAQ,MAAM,EAAE,IAAI;AAAA,QACtD,OAAO,YAAY;AAAA,QAElB,UAAA,WACCF,2BAAAA,IAACG,WAAAA,mBAAA,EAAkB,OAAO,KAAK,cAC7B,UAAAH,2BAAAA,IAAC,OAAA,EAAI,WAAU,uGACZ,UAAAE,WAAAA,SAAS,SAAS,GAAI,GACzB,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACA,QAAM,QAAQE,WAAAA,KAAK,IAAI;AACvB,QAAM,cAAc,mBAAmB,KAAK,YAAY;AACxD,SAAO;AACT;AAEO,MAAM,iBAAiB,oBAAoB;AAAA,EAChD,MAAMC,YAAAA;AAAAA,EACN,cAAc;AAChB,CAAC;AAEM,MAAM,kBAAkB,oBAAoB;AAAA,EACjD,MAAMC,YAAAA;AAAAA,EACN,cAAc;AAChB,CAAC;AAEM,MAAM,kBAAkB,oBAAoB;AAAA,EACjD,MAAMC,YAAAA;AAAAA,EACN,cAAc;AAChB,CAAC;AAEM,MAAM,iBAAiB,oBAAoB;AAAA,EAChD,MAAMC,YAAAA;AAAAA,EACN,cAAc;AAChB,CAAC;AAEM,MAAM,oBAAoB,oBAAoB;AAAA,EACnD,MAAMC,YAAAA;AAAAA,EACN,cAAc;AAChB,CAAC;;;;;;;"}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
4
  const lucideReact = require("lucide-react");
5
- const react = require("react");
5
+ const require$$0 = require("react");
6
6
  const primitives = require("./primitives.cjs");
7
7
  const toolFallback = require("./tool-fallback.cjs");
8
8
  const toolResult = require("../agent-runtime/src/tool-result.cjs");
@@ -33,7 +33,7 @@ const InstallPackageToolUIImpl = (props) => {
33
33
  }
34
34
  );
35
35
  };
36
- const InstallPackageToolUI = react.memo(
36
+ const InstallPackageToolUI = require$$0.memo(
37
37
  InstallPackageToolUIImpl
38
38
  );
39
39
  InstallPackageToolUI.displayName = "InstallPackageToolUI";
@@ -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";