@assistant-ui/react 0.14.18 → 0.14.19

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 (335) hide show
  1. package/dist/client/ExternalThread.d.ts +3 -2
  2. package/dist/client/ExternalThread.d.ts.map +1 -1
  3. package/dist/client/ExternalThread.js +721 -256
  4. package/dist/client/ExternalThread.js.map +1 -1
  5. package/dist/client/InMemoryThreadList.d.ts.map +1 -1
  6. package/dist/client/InMemoryThreadList.js +292 -108
  7. package/dist/client/InMemoryThreadList.js.map +1 -1
  8. package/dist/client/SingleThreadList.js +139 -53
  9. package/dist/client/SingleThreadList.js.map +1 -1
  10. package/dist/context/ReadonlyStore.js.map +1 -1
  11. package/dist/context/providers/MessageProvider.js +38 -5
  12. package/dist/context/providers/MessageProvider.js.map +1 -1
  13. package/dist/context/providers/ThreadViewportProvider.js +76 -20
  14. package/dist/context/providers/ThreadViewportProvider.js.map +1 -1
  15. package/dist/context/react/ThreadViewportContext.js.map +1 -1
  16. package/dist/context/react/utils/createContextHook.js.map +1 -1
  17. package/dist/context/react/utils/createContextStoreHook.js +17 -2
  18. package/dist/context/react/utils/createContextStoreHook.js.map +1 -1
  19. package/dist/context/react/utils/createStateHookForRuntime.js.map +1 -1
  20. package/dist/context/react/utils/ensureBinding.js.map +1 -1
  21. package/dist/context/react/utils/useRuntimeState.js +18 -2
  22. package/dist/context/react/utils/useRuntimeState.js.map +1 -1
  23. package/dist/context/stores/ThreadViewport.js.map +1 -1
  24. package/dist/devtools/DevToolsHooks.js.map +1 -1
  25. package/dist/hooks/useMessageQuote.js.map +1 -1
  26. package/dist/hooks/useMessageTiming.js +4 -1
  27. package/dist/hooks/useMessageTiming.js.map +1 -1
  28. package/dist/hooks/useToolCallElapsed.d.ts +23 -0
  29. package/dist/hooks/useToolCallElapsed.d.ts.map +1 -0
  30. package/dist/hooks/useToolCallElapsed.js +72 -0
  31. package/dist/hooks/useToolCallElapsed.js.map +1 -0
  32. package/dist/index.d.ts +4 -2
  33. package/dist/index.js +3 -1
  34. package/dist/internal.js.map +1 -1
  35. package/dist/legacy-runtime/AssistantRuntimeProvider.js +46 -10
  36. package/dist/legacy-runtime/AssistantRuntimeProvider.js.map +1 -1
  37. package/dist/legacy-runtime/cloud/auiV0.js.map +1 -1
  38. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.js +27 -6
  39. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.js.map +1 -1
  40. package/dist/legacy-runtime/hooks/AssistantContext.js +13 -2
  41. package/dist/legacy-runtime/hooks/AssistantContext.js.map +1 -1
  42. package/dist/legacy-runtime/hooks/AttachmentContext.js +9 -1
  43. package/dist/legacy-runtime/hooks/AttachmentContext.js.map +1 -1
  44. package/dist/legacy-runtime/hooks/ComposerContext.js +9 -1
  45. package/dist/legacy-runtime/hooks/ComposerContext.js.map +1 -1
  46. package/dist/legacy-runtime/hooks/MessageContext.js +12 -2
  47. package/dist/legacy-runtime/hooks/MessageContext.js.map +1 -1
  48. package/dist/legacy-runtime/hooks/MessagePartContext.js +9 -1
  49. package/dist/legacy-runtime/hooks/MessagePartContext.js.map +1 -1
  50. package/dist/legacy-runtime/hooks/ThreadContext.js +33 -5
  51. package/dist/legacy-runtime/hooks/ThreadContext.js.map +1 -1
  52. package/dist/legacy-runtime/hooks/ThreadListItemContext.js +9 -1
  53. package/dist/legacy-runtime/hooks/ThreadListItemContext.js.map +1 -1
  54. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.js +3 -3
  55. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.js.map +1 -1
  56. package/dist/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.js +71 -31
  57. package/dist/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.js.map +1 -1
  58. package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.js.map +1 -1
  59. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js +24 -16
  60. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js.map +1 -1
  61. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.js +17 -12
  62. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.js.map +1 -1
  63. package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.js +17 -3
  64. package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.js.map +1 -1
  65. package/dist/mcp-apps/McpAppRenderer.js +6 -6
  66. package/dist/mcp-apps/McpAppRenderer.js.map +1 -1
  67. package/dist/mcp-apps/McpAppsRemoteHost.js +3 -3
  68. package/dist/mcp-apps/McpAppsRemoteHost.js.map +1 -1
  69. package/dist/mcp-apps/app-frame.js +33 -14
  70. package/dist/mcp-apps/app-frame.js.map +1 -1
  71. package/dist/mcp-apps/bridge.js.map +1 -1
  72. package/dist/mcp-apps/types.js.map +1 -1
  73. package/dist/mcp-apps/utils.js.map +1 -1
  74. package/dist/model-context/frame/useAssistantFrameHost.js +32 -14
  75. package/dist/model-context/frame/useAssistantFrameHost.js.map +1 -1
  76. package/dist/model-context/makeAssistantVisible.js +64 -26
  77. package/dist/model-context/makeAssistantVisible.js.map +1 -1
  78. package/dist/primitives/actionBar/ActionBarCopy.js +94 -20
  79. package/dist/primitives/actionBar/ActionBarCopy.js.map +1 -1
  80. package/dist/primitives/actionBar/ActionBarEdit.js.map +1 -1
  81. package/dist/primitives/actionBar/ActionBarExportMarkdown.js +105 -37
  82. package/dist/primitives/actionBar/ActionBarExportMarkdown.js.map +1 -1
  83. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +60 -11
  84. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js.map +1 -1
  85. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +60 -11
  86. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js.map +1 -1
  87. package/dist/primitives/actionBar/ActionBarInteractionContext.js +3 -1
  88. package/dist/primitives/actionBar/ActionBarInteractionContext.js.map +1 -1
  89. package/dist/primitives/actionBar/ActionBarReload.js.map +1 -1
  90. package/dist/primitives/actionBar/ActionBarRoot.js +84 -25
  91. package/dist/primitives/actionBar/ActionBarRoot.js.map +1 -1
  92. package/dist/primitives/actionBar/ActionBarSpeak.js.map +1 -1
  93. package/dist/primitives/actionBar/ActionBarStopSpeaking.js +45 -14
  94. package/dist/primitives/actionBar/ActionBarStopSpeaking.js.map +1 -1
  95. package/dist/primitives/actionBar/useActionBarFloatStatus.js +22 -10
  96. package/dist/primitives/actionBar/useActionBarFloatStatus.js.map +1 -1
  97. package/dist/primitives/actionBar.js.map +1 -1
  98. package/dist/primitives/actionBarMore/ActionBarMoreContent.js +44 -7
  99. package/dist/primitives/actionBarMore/ActionBarMoreContent.js.map +1 -1
  100. package/dist/primitives/actionBarMore/ActionBarMoreItem.js +28 -6
  101. package/dist/primitives/actionBarMore/ActionBarMoreItem.js.map +1 -1
  102. package/dist/primitives/actionBarMore/ActionBarMoreRoot.js +103 -36
  103. package/dist/primitives/actionBarMore/ActionBarMoreRoot.js.map +1 -1
  104. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js +28 -6
  105. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js.map +1 -1
  106. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js +28 -6
  107. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js.map +1 -1
  108. package/dist/primitives/actionBarMore/scope.js.map +1 -1
  109. package/dist/primitives/actionBarMore.js.map +1 -1
  110. package/dist/primitives/assistantModal/AssistantModalAnchor.js +27 -6
  111. package/dist/primitives/assistantModal/AssistantModalAnchor.js.map +1 -1
  112. package/dist/primitives/assistantModal/AssistantModalContent.js +71 -10
  113. package/dist/primitives/assistantModal/AssistantModalContent.js.map +1 -1
  114. package/dist/primitives/assistantModal/AssistantModalRoot.js +93 -26
  115. package/dist/primitives/assistantModal/AssistantModalRoot.js.map +1 -1
  116. package/dist/primitives/assistantModal/AssistantModalTrigger.js +27 -6
  117. package/dist/primitives/assistantModal/AssistantModalTrigger.js.map +1 -1
  118. package/dist/primitives/assistantModal/scope.js.map +1 -1
  119. package/dist/primitives/assistantModal.js.map +1 -1
  120. package/dist/primitives/attachment/AttachmentName.js +13 -1
  121. package/dist/primitives/attachment/AttachmentName.js.map +1 -1
  122. package/dist/primitives/attachment/AttachmentRemove.js +11 -4
  123. package/dist/primitives/attachment/AttachmentRemove.js.map +1 -1
  124. package/dist/primitives/attachment/AttachmentRoot.js +13 -4
  125. package/dist/primitives/attachment/AttachmentRoot.js.map +1 -1
  126. package/dist/primitives/attachment/AttachmentThumb.js +20 -9
  127. package/dist/primitives/attachment/AttachmentThumb.js.map +1 -1
  128. package/dist/primitives/attachment.js.map +1 -1
  129. package/dist/primitives/branchPicker/BranchPickerCount.js +14 -2
  130. package/dist/primitives/branchPicker/BranchPickerCount.js.map +1 -1
  131. package/dist/primitives/branchPicker/BranchPickerNext.js.map +1 -1
  132. package/dist/primitives/branchPicker/BranchPickerNumber.js +14 -2
  133. package/dist/primitives/branchPicker/BranchPickerNumber.js.map +1 -1
  134. package/dist/primitives/branchPicker/BranchPickerPrevious.js.map +1 -1
  135. package/dist/primitives/branchPicker/BranchPickerRoot.js +34 -6
  136. package/dist/primitives/branchPicker/BranchPickerRoot.js.map +1 -1
  137. package/dist/primitives/branchPicker.js.map +1 -1
  138. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js +16 -5
  139. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js.map +1 -1
  140. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js +13 -4
  141. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js.map +1 -1
  142. package/dist/primitives/chainOfThought.js.map +1 -1
  143. package/dist/primitives/composer/ComposerAddAttachment.js +37 -24
  144. package/dist/primitives/composer/ComposerAddAttachment.js.map +1 -1
  145. package/dist/primitives/composer/ComposerAttachmentDropzone.js +124 -49
  146. package/dist/primitives/composer/ComposerAttachmentDropzone.js.map +1 -1
  147. package/dist/primitives/composer/ComposerCancel.js.map +1 -1
  148. package/dist/primitives/composer/ComposerDictate.js.map +1 -1
  149. package/dist/primitives/composer/ComposerDictationTranscript.js +32 -7
  150. package/dist/primitives/composer/ComposerDictationTranscript.js.map +1 -1
  151. package/dist/primitives/composer/ComposerInput.js +26 -26
  152. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  153. package/dist/primitives/composer/ComposerInputPluginContext.js +71 -25
  154. package/dist/primitives/composer/ComposerInputPluginContext.js.map +1 -1
  155. package/dist/primitives/composer/ComposerQuote.js +92 -23
  156. package/dist/primitives/composer/ComposerQuote.js.map +1 -1
  157. package/dist/primitives/composer/ComposerRoot.js +45 -11
  158. package/dist/primitives/composer/ComposerRoot.js.map +1 -1
  159. package/dist/primitives/composer/ComposerSend.js +9 -2
  160. package/dist/primitives/composer/ComposerSend.js.map +1 -1
  161. package/dist/primitives/composer/ComposerStopDictation.js +15 -5
  162. package/dist/primitives/composer/ComposerStopDictation.js.map +1 -1
  163. package/dist/primitives/composer/trigger/TriggerPopover.d.ts.map +1 -1
  164. package/dist/primitives/composer/trigger/TriggerPopover.js +215 -75
  165. package/dist/primitives/composer/trigger/TriggerPopover.js.map +1 -1
  166. package/dist/primitives/composer/trigger/TriggerPopoverAction.js.map +1 -1
  167. package/dist/primitives/composer/trigger/TriggerPopoverBack.js +35 -7
  168. package/dist/primitives/composer/trigger/TriggerPopoverBack.js.map +1 -1
  169. package/dist/primitives/composer/trigger/TriggerPopoverCategories.js +134 -28
  170. package/dist/primitives/composer/trigger/TriggerPopoverCategories.js.map +1 -1
  171. package/dist/primitives/composer/trigger/TriggerPopoverDirective.js.map +1 -1
  172. package/dist/primitives/composer/trigger/TriggerPopoverItems.js +132 -28
  173. package/dist/primitives/composer/trigger/TriggerPopoverItems.js.map +1 -1
  174. package/dist/primitives/composer/trigger/TriggerPopoverResource.js +124 -52
  175. package/dist/primitives/composer/trigger/TriggerPopoverResource.js.map +1 -1
  176. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js +181 -78
  177. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js.map +1 -1
  178. package/dist/primitives/composer/trigger/detectTrigger.js.map +1 -1
  179. package/dist/primitives/composer/trigger/index.js.map +1 -1
  180. package/dist/primitives/composer/trigger/triggerDetectionResource.js +28 -14
  181. package/dist/primitives/composer/trigger/triggerDetectionResource.js.map +1 -1
  182. package/dist/primitives/composer/trigger/triggerKeyboardResource.js +115 -58
  183. package/dist/primitives/composer/trigger/triggerKeyboardResource.js.map +1 -1
  184. package/dist/primitives/composer/trigger/triggerNavigationResource.js +202 -70
  185. package/dist/primitives/composer/trigger/triggerNavigationResource.js.map +1 -1
  186. package/dist/primitives/composer/trigger/triggerSelectionResource.js +49 -13
  187. package/dist/primitives/composer/trigger/triggerSelectionResource.js.map +1 -1
  188. package/dist/primitives/composer.js.map +1 -1
  189. package/dist/primitives/dropdownMenuRenderPrimitives.js.map +1 -1
  190. package/dist/primitives/error/ErrorMessage.js +28 -6
  191. package/dist/primitives/error/ErrorMessage.js.map +1 -1
  192. package/dist/primitives/error/ErrorRoot.js +14 -5
  193. package/dist/primitives/error/ErrorRoot.js.map +1 -1
  194. package/dist/primitives/error.js.map +1 -1
  195. package/dist/primitives/message/MessageError.js +2 -1
  196. package/dist/primitives/message/MessageError.js.map +1 -1
  197. package/dist/primitives/message/MessageIf.js +50 -20
  198. package/dist/primitives/message/MessageIf.js.map +1 -1
  199. package/dist/primitives/message/MessageParts.js +41 -7
  200. package/dist/primitives/message/MessageParts.js.map +1 -1
  201. package/dist/primitives/message/MessagePartsGrouped.js +399 -94
  202. package/dist/primitives/message/MessagePartsGrouped.js.map +1 -1
  203. package/dist/primitives/message/MessageRoot.js +197 -65
  204. package/dist/primitives/message/MessageRoot.js.map +1 -1
  205. package/dist/primitives/message.js.map +1 -1
  206. package/dist/primitives/messagePart/MessagePartImage.js +15 -5
  207. package/dist/primitives/messagePart/MessagePartImage.js.map +1 -1
  208. package/dist/primitives/messagePart/MessagePartText.js +35 -7
  209. package/dist/primitives/messagePart/MessagePartText.js.map +1 -1
  210. package/dist/primitives/messagePart/useMessagePartData.js +5 -4
  211. package/dist/primitives/messagePart/useMessagePartData.js.map +1 -1
  212. package/dist/primitives/messagePart/useMessagePartFile.js +5 -4
  213. package/dist/primitives/messagePart/useMessagePartFile.js.map +1 -1
  214. package/dist/primitives/messagePart/useMessagePartImage.js +5 -4
  215. package/dist/primitives/messagePart/useMessagePartImage.js.map +1 -1
  216. package/dist/primitives/messagePart/useMessagePartReasoning.js +5 -4
  217. package/dist/primitives/messagePart/useMessagePartReasoning.js.map +1 -1
  218. package/dist/primitives/messagePart/useMessagePartSource.js +5 -4
  219. package/dist/primitives/messagePart/useMessagePartSource.js.map +1 -1
  220. package/dist/primitives/messagePart/useMessagePartText.js +5 -4
  221. package/dist/primitives/messagePart/useMessagePartText.js.map +1 -1
  222. package/dist/primitives/messagePart.js.map +1 -1
  223. package/dist/primitives/queueItem/QueueItemRemove.js +11 -4
  224. package/dist/primitives/queueItem/QueueItemRemove.js.map +1 -1
  225. package/dist/primitives/queueItem/QueueItemSteer.js +11 -4
  226. package/dist/primitives/queueItem/QueueItemSteer.js.map +1 -1
  227. package/dist/primitives/queueItem/QueueItemText.js +20 -6
  228. package/dist/primitives/queueItem/QueueItemText.js.map +1 -1
  229. package/dist/primitives/queueItem.js.map +1 -1
  230. package/dist/primitives/reasoning/useScrollLock.js +61 -43
  231. package/dist/primitives/reasoning/useScrollLock.js.map +1 -1
  232. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js +56 -16
  233. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js.map +1 -1
  234. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +120 -59
  235. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js.map +1 -1
  236. package/dist/primitives/selectionToolbar.js.map +1 -1
  237. package/dist/primitives/suggestion/SuggestionDescription.js +20 -6
  238. package/dist/primitives/suggestion/SuggestionDescription.js.map +1 -1
  239. package/dist/primitives/suggestion/SuggestionTitle.js +20 -6
  240. package/dist/primitives/suggestion/SuggestionTitle.js.map +1 -1
  241. package/dist/primitives/suggestion/SuggestionTrigger.js +39 -26
  242. package/dist/primitives/suggestion/SuggestionTrigger.js.map +1 -1
  243. package/dist/primitives/suggestion.js.map +1 -1
  244. package/dist/primitives/thread/ThreadEmpty.js +6 -2
  245. package/dist/primitives/thread/ThreadEmpty.js.map +1 -1
  246. package/dist/primitives/thread/ThreadIf.js +32 -10
  247. package/dist/primitives/thread/ThreadIf.js.map +1 -1
  248. package/dist/primitives/thread/ThreadRoot.js +13 -4
  249. package/dist/primitives/thread/ThreadRoot.js.map +1 -1
  250. package/dist/primitives/thread/ThreadScrollToBottom.js +24 -6
  251. package/dist/primitives/thread/ThreadScrollToBottom.js.map +1 -1
  252. package/dist/primitives/thread/ThreadSuggestion.js +18 -6
  253. package/dist/primitives/thread/ThreadSuggestion.js.map +1 -1
  254. package/dist/primitives/thread/ThreadViewport.js +185 -47
  255. package/dist/primitives/thread/ThreadViewport.js.map +1 -1
  256. package/dist/primitives/thread/ThreadViewportFooter.js +22 -9
  257. package/dist/primitives/thread/ThreadViewportFooter.js.map +1 -1
  258. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.js.map +1 -1
  259. package/dist/primitives/thread/topAnchor/createReserveObservers.js.map +1 -1
  260. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js.map +1 -1
  261. package/dist/primitives/thread/topAnchor/topAnchorTurn.js.map +1 -1
  262. package/dist/primitives/thread/topAnchor/topAnchorUtils.js.map +1 -1
  263. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js +19 -4
  264. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js.map +1 -1
  265. package/dist/primitives/thread/useThreadViewportAutoScroll.js +16 -16
  266. package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -1
  267. package/dist/primitives/thread.js.map +1 -1
  268. package/dist/primitives/threadList/ThreadListLoadMore.js.map +1 -1
  269. package/dist/primitives/threadList/ThreadListNew.js +53 -11
  270. package/dist/primitives/threadList/ThreadListNew.js.map +1 -1
  271. package/dist/primitives/threadList/ThreadListRoot.js +13 -4
  272. package/dist/primitives/threadList/ThreadListRoot.js.map +1 -1
  273. package/dist/primitives/threadList.js.map +1 -1
  274. package/dist/primitives/threadListItem/ThreadListItemArchive.js.map +1 -1
  275. package/dist/primitives/threadListItem/ThreadListItemDelete.js.map +1 -1
  276. package/dist/primitives/threadListItem/ThreadListItemRoot.js +26 -7
  277. package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -1
  278. package/dist/primitives/threadListItem/ThreadListItemTrigger.js.map +1 -1
  279. package/dist/primitives/threadListItem/ThreadListItemUnarchive.js.map +1 -1
  280. package/dist/primitives/threadListItem.js.map +1 -1
  281. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js +44 -7
  282. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js.map +1 -1
  283. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js +28 -6
  284. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js.map +1 -1
  285. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js +25 -5
  286. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js.map +1 -1
  287. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js +28 -6
  288. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js.map +1 -1
  289. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js +28 -6
  290. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js.map +1 -1
  291. package/dist/primitives/threadListItemMore/scope.js.map +1 -1
  292. package/dist/primitives/threadListItemMore.js.map +1 -1
  293. package/dist/sandbox-host/SandboxHost.js.map +1 -1
  294. package/dist/tests/remote-thread-list-test-helpers.js.map +1 -1
  295. package/dist/tests/setup.js.map +1 -1
  296. package/dist/unstable/useComposerInputHistory.js.map +1 -1
  297. package/dist/unstable/useMentionAdapter.js.map +1 -1
  298. package/dist/unstable/useMessageStallDetection.d.ts +29 -0
  299. package/dist/unstable/useMessageStallDetection.d.ts.map +1 -0
  300. package/dist/unstable/useMessageStallDetection.js +69 -0
  301. package/dist/unstable/useMessageStallDetection.js.map +1 -0
  302. package/dist/unstable/useSlashCommandAdapter.js.map +1 -1
  303. package/dist/utils/Primitive.js +57 -12
  304. package/dist/utils/Primitive.js.map +1 -1
  305. package/dist/utils/createActionButton.js +23 -7
  306. package/dist/utils/createActionButton.js.map +1 -1
  307. package/dist/utils/getSelectionMessageId.js.map +1 -1
  308. package/dist/utils/hooks/useManagedRef.js +16 -8
  309. package/dist/utils/hooks/useManagedRef.js.map +1 -1
  310. package/dist/utils/hooks/useMediaQuery.js +25 -10
  311. package/dist/utils/hooks/useMediaQuery.js.map +1 -1
  312. package/dist/utils/hooks/useOnResizeContent.js +29 -19
  313. package/dist/utils/hooks/useOnResizeContent.js.map +1 -1
  314. package/dist/utils/hooks/useOnScrollToBottom.js +20 -4
  315. package/dist/utils/hooks/useOnScrollToBottom.js.map +1 -1
  316. package/dist/utils/hooks/useSizeHandle.js +23 -15
  317. package/dist/utils/hooks/useSizeHandle.js.map +1 -1
  318. package/dist/utils/json/is-json-equal.js.map +1 -1
  319. package/dist/utils/json/is-json.js.map +1 -1
  320. package/dist/utils/smooth/SmoothContext.js +41 -11
  321. package/dist/utils/smooth/SmoothContext.js.map +1 -1
  322. package/dist/utils/smooth/useSmooth.js +5 -5
  323. package/dist/utils/smooth/useSmooth.js.map +1 -1
  324. package/dist/utils/useToolArgsFieldStatus.d.ts +2 -2
  325. package/dist/utils/useToolArgsFieldStatus.d.ts.map +1 -1
  326. package/dist/utils/useToolArgsFieldStatus.js +13 -5
  327. package/dist/utils/useToolArgsFieldStatus.js.map +1 -1
  328. package/package.json +6 -6
  329. package/src/client/ExternalThread.ts +81 -52
  330. package/src/client/InMemoryThreadList.ts +12 -14
  331. package/src/hooks/useToolCallElapsed.ts +52 -0
  332. package/src/index.ts +11 -0
  333. package/src/primitives/composer/trigger/TriggerPopover.tsx +4 -5
  334. package/src/tests/toolCallTiming.test.tsx +221 -0
  335. package/src/unstable/useMessageStallDetection.ts +91 -0
@@ -1,55 +1,129 @@
1
1
  import { SingleThreadList } from "./SingleThreadList.js";
2
2
  import { Derived, attachTransformScopes, useClientLookup, useClientResource } from "@assistant-ui/store";
3
+ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
3
4
  import { DataRenderers, Tools } from "@assistant-ui/core/react";
4
- import { useEffect, useEffectEvent, useMemo, useState } from "@assistant-ui/tap/react-shim";
5
+ import { useEffect, useEffectEvent, useState } from "@assistant-ui/tap/react-shim";
5
6
  import { ModelContext, Suggestions } from "@assistant-ui/core/store";
6
7
  import { resource, withKey } from "@assistant-ui/tap";
7
- import { getThreadMessageText } from "@assistant-ui/core/internal";
8
+ import { getThreadMessageText, resolveToolApprovalResponse } from "@assistant-ui/core/internal";
8
9
  //#region src/client/ExternalThread.ts
9
10
  const EMPTY_QUEUE_ITEMS = [];
10
11
  const EMPTY_BRANCH_IDS = [];
11
- const useMessageClient = ({ message, index, onEdit, onReload, queue, branches }) => {
12
+ const useMessageClient = (t0) => {
13
+ const $ = c(62);
14
+ const { message, index, onEdit, onReload, queue, branches, onRespondToToolApproval } = t0;
12
15
  const [isCopied, setIsCopied] = useState(false);
13
16
  const [isHovering, setIsHovering] = useState(false);
14
17
  const [isEditing, setIsEditing] = useState(false);
15
- const partClients = useClientLookup(() => message.content.map((part, idx) => withKey(idx, PartResource({ part }))), [message.content]);
16
- const attachmentClients = useClientLookup(() => (message.attachments ?? []).map((attachment) => withKey(attachment.id, AttachmentResource({
17
- attachment,
18
- onRemove: () => {}
19
- }))), [message.attachments]);
20
- const handleBeginEdit = () => {
21
- setIsEditing(true);
22
- };
23
- const handleCancelEdit = () => {
24
- setIsEditing(false);
25
- };
26
- const handleSendEdit = (msg) => {
27
- queue?.clear("edit");
28
- onEdit?.({
29
- ...msg,
30
- parentId: message.id,
31
- sourceId: message.id
18
+ let t1;
19
+ if ($[0] !== message.content || $[1] !== onRespondToToolApproval) {
20
+ let t2;
21
+ if ($[3] !== onRespondToToolApproval) {
22
+ t2 = (part, idx) => withKey(idx, PartResource({
23
+ part,
24
+ onRespondToToolApproval
25
+ }));
26
+ $[3] = onRespondToToolApproval;
27
+ $[4] = t2;
28
+ } else t2 = $[4];
29
+ t1 = message.content.map(t2);
30
+ $[0] = message.content;
31
+ $[1] = onRespondToToolApproval;
32
+ $[2] = t1;
33
+ } else t1 = $[2];
34
+ const partClients = useClientLookup(t1);
35
+ let t2;
36
+ if ($[5] !== message.attachments) {
37
+ t2 = message.attachments ?? [];
38
+ $[5] = message.attachments;
39
+ $[6] = t2;
40
+ } else t2 = $[6];
41
+ let t3;
42
+ if ($[7] !== t2) {
43
+ t3 = t2.map(_temp2);
44
+ $[7] = t2;
45
+ $[8] = t3;
46
+ } else t3 = $[8];
47
+ const attachmentClients = useClientLookup(t3);
48
+ let t4;
49
+ if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
50
+ t4 = () => {
51
+ setIsEditing(true);
52
+ };
53
+ $[9] = t4;
54
+ } else t4 = $[9];
55
+ const handleBeginEdit = t4;
56
+ let t5;
57
+ if ($[10] === Symbol.for("react.memo_cache_sentinel")) {
58
+ t5 = () => {
59
+ setIsEditing(false);
60
+ };
61
+ $[10] = t5;
62
+ } else t5 = $[10];
63
+ const handleCancelEdit = t5;
64
+ let t6;
65
+ if ($[11] !== message.id || $[12] !== onEdit || $[13] !== queue) {
66
+ t6 = (msg) => {
67
+ queue?.clear("edit");
68
+ onEdit?.({
69
+ ...msg,
70
+ parentId: message.id,
71
+ sourceId: message.id
72
+ });
73
+ setIsEditing(false);
74
+ };
75
+ $[11] = message.id;
76
+ $[12] = onEdit;
77
+ $[13] = queue;
78
+ $[14] = t6;
79
+ } else t6 = $[14];
80
+ const handleSendEdit = t6;
81
+ let t7;
82
+ if ($[15] !== handleSendEdit || $[16] !== isEditing || $[17] !== message || $[18] !== queue) {
83
+ t7 = ComposerClientResource({
84
+ type: "edit",
85
+ isEditing,
86
+ canCancel: true,
87
+ onCancel: handleCancelEdit,
88
+ onBeginEdit: handleBeginEdit,
89
+ onSend: handleSendEdit,
90
+ message,
91
+ queue
32
92
  });
33
- setIsEditing(false);
34
- };
35
- const composerClient = useClientResource(ComposerClientResource({
36
- type: "edit",
37
- isEditing,
38
- canCancel: true,
39
- onCancel: handleCancelEdit,
40
- onBeginEdit: handleBeginEdit,
41
- onSend: handleSendEdit,
42
- message,
43
- queue
44
- }));
45
- const branchIds = branches?.getBranches(message.id) ?? EMPTY_BRANCH_IDS;
46
- const branchIndex = branchIds.indexOf(message.id);
93
+ $[15] = handleSendEdit;
94
+ $[16] = isEditing;
95
+ $[17] = message;
96
+ $[18] = queue;
97
+ $[19] = t7;
98
+ } else t7 = $[19];
99
+ const composerClient = useClientResource(t7);
100
+ let branchIds;
101
+ let t8;
102
+ if ($[20] !== branches || $[21] !== message.id) {
103
+ branchIds = branches?.getBranches(message.id) ?? EMPTY_BRANCH_IDS;
104
+ t8 = branchIds.indexOf(message.id);
105
+ $[20] = branches;
106
+ $[21] = message.id;
107
+ $[22] = branchIds;
108
+ $[23] = t8;
109
+ } else {
110
+ branchIds = $[22];
111
+ t8 = $[23];
112
+ }
113
+ const branchIndex = t8;
47
114
  const branchNumber = branchIndex === -1 ? 1 : branchIndex + 1;
48
115
  const branchCount = branchIndex === -1 ? 1 : branchIds.length;
49
- const state = useMemo(() => {
50
- return {
116
+ let t9;
117
+ if ($[24] !== message.attachments) {
118
+ t9 = message.attachments ?? [];
119
+ $[24] = message.attachments;
120
+ $[25] = t9;
121
+ } else t9 = $[25];
122
+ let t10;
123
+ if ($[26] !== branchCount || $[27] !== branchNumber || $[28] !== composerClient.state || $[29] !== index || $[30] !== isCopied || $[31] !== isHovering || $[32] !== message || $[33] !== partClients.state || $[34] !== t9) {
124
+ t10 = {
51
125
  ...message,
52
- attachments: message.attachments ?? [],
126
+ attachments: t9,
53
127
  parentId: null,
54
128
  isLast: false,
55
129
  branchNumber,
@@ -61,57 +135,156 @@ const useMessageClient = ({ message, index, onEdit, onReload, queue, branches })
61
135
  index,
62
136
  composer: composerClient.state
63
137
  };
64
- }, [
65
- message,
66
- isCopied,
67
- isHovering,
68
- index,
69
- composerClient.state,
70
- partClients.state,
71
- branchNumber,
72
- branchCount
73
- ]);
74
- return {
75
- getState: () => state,
76
- composer: () => composerClient.methods,
77
- delete: () => {},
78
- reload: () => {
138
+ $[26] = branchCount;
139
+ $[27] = branchNumber;
140
+ $[28] = composerClient.state;
141
+ $[29] = index;
142
+ $[30] = isCopied;
143
+ $[31] = isHovering;
144
+ $[32] = message;
145
+ $[33] = partClients.state;
146
+ $[34] = t9;
147
+ $[35] = t10;
148
+ } else t10 = $[35];
149
+ const state = t10;
150
+ let t11;
151
+ if ($[36] !== state) {
152
+ t11 = () => state;
153
+ $[36] = state;
154
+ $[37] = t11;
155
+ } else t11 = $[37];
156
+ let t12;
157
+ if ($[38] !== composerClient.methods) {
158
+ t12 = () => composerClient.methods;
159
+ $[38] = composerClient.methods;
160
+ $[39] = t12;
161
+ } else t12 = $[39];
162
+ let t13;
163
+ if ($[40] !== onReload) {
164
+ t13 = () => {
79
165
  onReload?.();
80
- },
81
- speak: () => {},
82
- stopSpeaking: () => {},
83
- submitFeedback: () => {},
84
- switchToBranch: ({ position, branchId }) => {
166
+ };
167
+ $[40] = onReload;
168
+ $[41] = t13;
169
+ } else t13 = $[41];
170
+ let t14;
171
+ if ($[42] !== branchIds || $[43] !== branchIndex || $[44] !== branches || $[45] !== message.id) {
172
+ t14 = (t15) => {
173
+ const { position, branchId } = t15;
85
174
  if (!branches) return;
86
175
  const target = branchId ?? (branchIndex === -1 ? void 0 : position === "previous" ? branchIds[branchIndex - 1] : position === "next" ? branchIds[branchIndex + 1] : void 0);
87
176
  if (target !== void 0 && target !== message.id) branches.switchToBranch(target);
88
- },
89
- getCopyText: () => getThreadMessageText(message),
90
- part: (selector) => {
177
+ };
178
+ $[42] = branchIds;
179
+ $[43] = branchIndex;
180
+ $[44] = branches;
181
+ $[45] = message.id;
182
+ $[46] = t14;
183
+ } else t14 = $[46];
184
+ let t15;
185
+ if ($[47] !== message) {
186
+ t15 = () => getThreadMessageText(message);
187
+ $[47] = message;
188
+ $[48] = t15;
189
+ } else t15 = $[48];
190
+ let t16;
191
+ if ($[49] !== partClients || $[50] !== state) {
192
+ t16 = (selector) => {
91
193
  if ("index" in selector) return partClients.get(selector);
92
194
  const partIndex = state.parts.findIndex((p) => p.type === "tool-call" && p.toolCallId === selector.toolCallId);
93
195
  return partClients.get({ index: partIndex });
94
- },
95
- attachment: (selector) => {
96
- if ("id" in selector) return attachmentClients.get({ key: selector.id });
97
- return attachmentClients.get(selector);
98
- },
99
- setIsCopied,
100
- setIsHovering
101
- };
196
+ };
197
+ $[49] = partClients;
198
+ $[50] = state;
199
+ $[51] = t16;
200
+ } else t16 = $[51];
201
+ let t17;
202
+ if ($[52] !== attachmentClients) {
203
+ t17 = (selector_0) => {
204
+ if ("id" in selector_0) return attachmentClients.get({ key: selector_0.id });
205
+ return attachmentClients.get(selector_0);
206
+ };
207
+ $[52] = attachmentClients;
208
+ $[53] = t17;
209
+ } else t17 = $[53];
210
+ let t18;
211
+ if ($[54] !== t11 || $[55] !== t12 || $[56] !== t13 || $[57] !== t14 || $[58] !== t15 || $[59] !== t16 || $[60] !== t17) {
212
+ t18 = {
213
+ getState: t11,
214
+ composer: t12,
215
+ delete: _temp3,
216
+ reload: t13,
217
+ speak: _temp4,
218
+ stopSpeaking: _temp5,
219
+ submitFeedback: _temp6,
220
+ switchToBranch: t14,
221
+ getCopyText: t15,
222
+ part: t16,
223
+ attachment: t17,
224
+ setIsCopied,
225
+ setIsHovering
226
+ };
227
+ $[54] = t11;
228
+ $[55] = t12;
229
+ $[56] = t13;
230
+ $[57] = t14;
231
+ $[58] = t15;
232
+ $[59] = t16;
233
+ $[60] = t17;
234
+ $[61] = t18;
235
+ } else t18 = $[61];
236
+ return t18;
102
237
  };
103
238
  const MessageClient = resource(useMessageClient);
104
- const usePartResource = ({ part }) => {
105
- const state = useMemo(() => ({
106
- ...part,
107
- status: { type: "complete" }
108
- }), [part]);
109
- return {
110
- getState: () => state,
111
- addToolResult: () => {},
112
- resumeToolCall: () => {},
113
- respondToToolApproval: () => {}
114
- };
239
+ const usePartResource = (t0) => {
240
+ const $ = c(11);
241
+ const { part, onRespondToToolApproval } = t0;
242
+ let t1;
243
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
244
+ t1 = { type: "complete" };
245
+ $[0] = t1;
246
+ } else t1 = $[0];
247
+ let t2;
248
+ if ($[1] !== part) {
249
+ t2 = {
250
+ ...part,
251
+ status: t1
252
+ };
253
+ $[1] = part;
254
+ $[2] = t2;
255
+ } else t2 = $[2];
256
+ const state = t2;
257
+ let t3;
258
+ if ($[3] !== state) {
259
+ t3 = () => state;
260
+ $[3] = state;
261
+ $[4] = t3;
262
+ } else t3 = $[4];
263
+ let t4;
264
+ if ($[5] !== onRespondToToolApproval || $[6] !== part) {
265
+ t4 = (response) => {
266
+ if (!onRespondToToolApproval) throw new Error("Runtime does not support tool approvals.");
267
+ if (part.type !== "tool-call") throw new Error("Tried to respond to tool approval on non-tool message part");
268
+ if (!part.approval || part.approval.approved !== void 0 || part.approval.resolution !== void 0) throw new Error("Tool call has no pending approval");
269
+ onRespondToToolApproval(resolveToolApprovalResponse(part.approval, response));
270
+ };
271
+ $[5] = onRespondToToolApproval;
272
+ $[6] = part;
273
+ $[7] = t4;
274
+ } else t4 = $[7];
275
+ let t5;
276
+ if ($[8] !== t3 || $[9] !== t4) {
277
+ t5 = {
278
+ getState: t3,
279
+ addToolResult: _temp7,
280
+ resumeToolCall: _temp8,
281
+ respondToToolApproval: t4
282
+ };
283
+ $[8] = t3;
284
+ $[9] = t4;
285
+ $[10] = t5;
286
+ } else t5 = $[10];
287
+ return t5;
115
288
  };
116
289
  const PartResource = resource(usePartResource);
117
290
  const useAttachmentResource = ({ attachment, onRemove }) => {
@@ -131,44 +304,104 @@ const useQueueItemClient = ({ item, onSteer, onRemove }) => {
131
304
  };
132
305
  };
133
306
  const QueueItemClient = resource(useQueueItemClient);
134
- const useComposerClientResource = ({ type, isEditing, canCancel, isSendDisabled = false, onCancel, onBeginEdit, onSend, message, queue }) => {
307
+ const useComposerClientResource = (t0) => {
308
+ const $ = c(60);
309
+ const { type, isEditing, canCancel, isSendDisabled: t1, onCancel, onBeginEdit, onSend, message, queue } = t0;
310
+ const isSendDisabled = t1 === void 0 ? false : t1;
135
311
  const [text, setText] = useState("");
136
312
  const [role, setRole] = useState("user");
137
- const [runConfig, setRunConfig] = useState({});
138
- const [attachments, setAttachments] = useState([]);
313
+ let t2;
314
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
315
+ t2 = {};
316
+ $[0] = t2;
317
+ } else t2 = $[0];
318
+ const [runConfig, setRunConfig] = useState(t2);
319
+ let t3;
320
+ if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
321
+ t3 = [];
322
+ $[1] = t3;
323
+ } else t3 = $[1];
324
+ const [attachments, setAttachments] = useState(t3);
139
325
  const [quote, setQuote] = useState(void 0);
140
- const updateFromMessage = useEffectEvent(() => {
141
- if (message) {
142
- setText(message.content.filter((part) => part.type === "text").map((part) => "text" in part ? part.text : "").join("\n\n"));
143
- setRole(message.role);
144
- setAttachments(message.attachments ?? []);
145
- }
146
- });
147
- useEffect(() => {
148
- if (isEditing) updateFromMessage();
149
- }, [isEditing]);
150
- const attachmentClients = useClientLookup(() => attachments.map((attachment, idx) => withKey(attachment.id, AttachmentResource({
151
- attachment,
152
- onRemove: () => {
153
- setAttachments(attachments.filter((_, i) => i !== idx));
154
- }
155
- }))), [attachments]);
326
+ let t4;
327
+ if ($[2] !== message) {
328
+ t4 = () => {
329
+ if (message) {
330
+ setText(message.content.filter(_temp9).map(_temp0).join("\n\n"));
331
+ setRole(message.role);
332
+ setAttachments(message.attachments ?? []);
333
+ }
334
+ };
335
+ $[2] = message;
336
+ $[3] = t4;
337
+ } else t4 = $[3];
338
+ const updateFromMessage = useEffectEvent(t4);
339
+ let t5;
340
+ if ($[4] !== isEditing || $[5] !== updateFromMessage) {
341
+ t5 = () => {
342
+ if (isEditing) updateFromMessage();
343
+ };
344
+ $[4] = isEditing;
345
+ $[5] = updateFromMessage;
346
+ $[6] = t5;
347
+ } else t5 = $[6];
348
+ let t6;
349
+ if ($[7] !== isEditing) {
350
+ t6 = [isEditing];
351
+ $[7] = isEditing;
352
+ $[8] = t6;
353
+ } else t6 = $[8];
354
+ useEffect(t5, t6);
355
+ let t7;
356
+ if ($[9] !== attachments) {
357
+ t7 = attachments.map((attachment, idx) => withKey(attachment.id, AttachmentResource({
358
+ attachment,
359
+ onRemove: () => {
360
+ setAttachments(attachments.filter((_, i) => i !== idx));
361
+ }
362
+ })));
363
+ $[9] = attachments;
364
+ $[10] = t7;
365
+ } else t7 = $[10];
366
+ const attachmentClients = useClientLookup(t7);
156
367
  const queueItems = queue?.items ?? EMPTY_QUEUE_ITEMS;
157
- const queueItemClients = useClientLookup(() => queueItems.map((item) => withKey(item.id, QueueItemClient({
158
- item,
159
- onSteer: () => queue?.steer(item.id),
160
- onRemove: () => queue?.remove(item.id)
161
- }))), [queueItems]);
162
- const state = useMemo(() => {
163
- const isEmpty = !text.trim() && !attachments.length;
164
- return {
368
+ let t8;
369
+ if ($[11] !== queue || $[12] !== queueItems) {
370
+ let t9;
371
+ if ($[14] !== queue) {
372
+ t9 = (item) => withKey(item.id, QueueItemClient({
373
+ item,
374
+ onSteer: () => queue?.steer(item.id),
375
+ onRemove: () => queue?.remove(item.id)
376
+ }));
377
+ $[14] = queue;
378
+ $[15] = t9;
379
+ } else t9 = $[15];
380
+ t8 = queueItems.map(t9);
381
+ $[11] = queue;
382
+ $[12] = queueItems;
383
+ $[13] = t8;
384
+ } else t8 = $[13];
385
+ const queueItemClients = useClientLookup(t8);
386
+ let t9;
387
+ if ($[16] !== attachments.length || $[17] !== text) {
388
+ t9 = !text.trim() && !attachments.length;
389
+ $[16] = attachments.length;
390
+ $[17] = text;
391
+ $[18] = t9;
392
+ } else t9 = $[18];
393
+ const isEmpty = t9;
394
+ const t10 = isEditing && !isEmpty && !isSendDisabled;
395
+ let t11;
396
+ if ($[19] !== attachmentClients.state || $[20] !== canCancel || $[21] !== isEditing || $[22] !== isEmpty || $[23] !== queueItems || $[24] !== quote || $[25] !== role || $[26] !== runConfig || $[27] !== t10 || $[28] !== text || $[29] !== type) {
397
+ t11 = {
165
398
  text,
166
399
  role,
167
400
  attachments: attachmentClients.state,
168
401
  runConfig,
169
402
  isEditing,
170
403
  canCancel,
171
- canSend: isEditing && !isEmpty && !isSendDisabled,
404
+ canSend: t10,
172
405
  attachmentAccept: "*",
173
406
  isEmpty,
174
407
  type,
@@ -176,25 +409,29 @@ const useComposerClientResource = ({ type, isEditing, canCancel, isSendDisabled
176
409
  quote,
177
410
  queue: queueItems
178
411
  };
179
- }, [
180
- text,
181
- role,
182
- attachmentClients.state,
183
- runConfig,
184
- isEditing,
185
- canCancel,
186
- isSendDisabled,
187
- type,
188
- attachments.length,
189
- quote,
190
- queueItems
191
- ]);
192
- return {
193
- getState: () => state,
194
- setText,
195
- setRole,
196
- setRunConfig,
197
- addAttachment: async (fileOrAttachment) => {
412
+ $[19] = attachmentClients.state;
413
+ $[20] = canCancel;
414
+ $[21] = isEditing;
415
+ $[22] = isEmpty;
416
+ $[23] = queueItems;
417
+ $[24] = quote;
418
+ $[25] = role;
419
+ $[26] = runConfig;
420
+ $[27] = t10;
421
+ $[28] = text;
422
+ $[29] = type;
423
+ $[30] = t11;
424
+ } else t11 = $[30];
425
+ const state = t11;
426
+ let t12;
427
+ if ($[31] !== state) {
428
+ t12 = () => state;
429
+ $[31] = state;
430
+ $[32] = t12;
431
+ } else t12 = $[32];
432
+ let t13;
433
+ if ($[33] !== attachments) {
434
+ t13 = async (fileOrAttachment) => {
198
435
  if (fileOrAttachment instanceof File) {
199
436
  const newAttachment = {
200
437
  id: Math.random().toString(36).substring(7),
@@ -207,7 +444,7 @@ const useComposerClientResource = ({ type, isEditing, canCancel, isSendDisabled
207
444
  };
208
445
  setAttachments([...attachments, newAttachment]);
209
446
  } else {
210
- const newAttachment = {
447
+ const newAttachment_0 = {
211
448
  id: fileOrAttachment.id ?? Math.random().toString(36).substring(7),
212
449
  type: fileOrAttachment.type ?? "document",
213
450
  name: fileOrAttachment.name,
@@ -215,24 +452,42 @@ const useComposerClientResource = ({ type, isEditing, canCancel, isSendDisabled
215
452
  content: fileOrAttachment.content,
216
453
  status: { type: "complete" }
217
454
  };
218
- setAttachments([...attachments, newAttachment]);
455
+ setAttachments([...attachments, newAttachment_0]);
219
456
  }
220
- },
221
- clearAttachments: async () => {
457
+ };
458
+ $[33] = attachments;
459
+ $[34] = t13;
460
+ } else t13 = $[34];
461
+ let t14;
462
+ if ($[35] === Symbol.for("react.memo_cache_sentinel")) {
463
+ t14 = async () => {
222
464
  setAttachments([]);
223
- },
224
- attachment: (selector) => {
465
+ };
466
+ $[35] = t14;
467
+ } else t14 = $[35];
468
+ let t15;
469
+ if ($[36] !== attachmentClients) {
470
+ t15 = (selector) => {
225
471
  if ("id" in selector) return attachmentClients.get({ key: selector.id });
226
472
  return attachmentClients.get(selector);
227
- },
228
- reset: async () => {
473
+ };
474
+ $[36] = attachmentClients;
475
+ $[37] = t15;
476
+ } else t15 = $[37];
477
+ let t16;
478
+ if ($[38] === Symbol.for("react.memo_cache_sentinel")) {
479
+ t16 = async () => {
229
480
  setText("");
230
481
  setRole("user");
231
482
  setRunConfig({});
232
483
  setAttachments([]);
233
484
  setQuote(void 0);
234
- },
235
- send: (opts) => {
485
+ };
486
+ $[38] = t16;
487
+ } else t16 = $[38];
488
+ let t17;
489
+ if ($[39] !== attachments || $[40] !== onSend || $[41] !== queue || $[42] !== quote || $[43] !== role || $[44] !== runConfig || $[45] !== state || $[46] !== text) {
490
+ t17 = (opts) => {
236
491
  if (!state.canSend) return;
237
492
  const currentQuote = quote;
238
493
  const composedMessage = {
@@ -254,108 +509,237 @@ const useComposerClientResource = ({ type, isEditing, canCancel, isSendDisabled
254
509
  setText("");
255
510
  setAttachments([]);
256
511
  setQuote(void 0);
257
- },
258
- cancel: onCancel,
259
- beginEdit: () => {
512
+ };
513
+ $[39] = attachments;
514
+ $[40] = onSend;
515
+ $[41] = queue;
516
+ $[42] = quote;
517
+ $[43] = role;
518
+ $[44] = runConfig;
519
+ $[45] = state;
520
+ $[46] = text;
521
+ $[47] = t17;
522
+ } else t17 = $[47];
523
+ let t18;
524
+ if ($[48] !== onBeginEdit) {
525
+ t18 = () => {
260
526
  onBeginEdit?.();
261
- },
262
- startDictation: () => {},
263
- stopDictation: () => {},
264
- setQuote,
265
- queueItem: (selector) => {
266
- return queueItemClients.get(selector);
267
- }
268
- };
527
+ };
528
+ $[48] = onBeginEdit;
529
+ $[49] = t18;
530
+ } else t18 = $[49];
531
+ let t19;
532
+ if ($[50] !== queueItemClients) {
533
+ t19 = (selector_0) => queueItemClients.get(selector_0);
534
+ $[50] = queueItemClients;
535
+ $[51] = t19;
536
+ } else t19 = $[51];
537
+ let t20;
538
+ if ($[52] !== onCancel || $[53] !== t12 || $[54] !== t13 || $[55] !== t15 || $[56] !== t17 || $[57] !== t18 || $[58] !== t19) {
539
+ t20 = {
540
+ getState: t12,
541
+ setText,
542
+ setRole,
543
+ setRunConfig,
544
+ addAttachment: t13,
545
+ clearAttachments: t14,
546
+ attachment: t15,
547
+ reset: t16,
548
+ send: t17,
549
+ cancel: onCancel,
550
+ beginEdit: t18,
551
+ startDictation: _temp1,
552
+ stopDictation: _temp10,
553
+ setQuote,
554
+ queueItem: t19
555
+ };
556
+ $[52] = onCancel;
557
+ $[53] = t12;
558
+ $[54] = t13;
559
+ $[55] = t15;
560
+ $[56] = t17;
561
+ $[57] = t18;
562
+ $[58] = t19;
563
+ $[59] = t20;
564
+ } else t20 = $[59];
565
+ return t20;
269
566
  };
270
567
  const ComposerClientResource = resource(useComposerClientResource);
271
- const useExternalThread = ({ messages, isRunning = false, isSendDisabled = false, onNew, onEdit, onReload, onStartRun, onCancel, queue, branches }) => {
272
- const handleReload = (messageId) => {
273
- const messageIndex = messages.findIndex((m) => m.id === messageId);
274
- if (messageIndex === -1) return;
275
- const parentId = messageIndex > 0 ? messages[messageIndex - 1].id : null;
276
- queue?.clear("reload");
277
- onReload?.(parentId);
278
- };
279
- const messageClients = useClientLookup(() => messages.map((msg, index) => {
280
- const props = {
281
- message: msg,
282
- index,
283
- onReload: () => handleReload(msg.id),
284
- queue,
285
- branches
568
+ const useExternalThread = (t0) => {
569
+ const $ = c(61);
570
+ const { messages, isRunning: t1, isSendDisabled: t2, onNew, onEdit, onReload, onStartRun, onCancel, queue, branches, onRespondToToolApproval } = t0;
571
+ const isRunning = t1 === void 0 ? false : t1;
572
+ const isSendDisabled = t2 === void 0 ? false : t2;
573
+ let t3;
574
+ if ($[0] !== messages || $[1] !== onReload || $[2] !== queue) {
575
+ t3 = (messageId) => {
576
+ const messageIndex = messages.findIndex((m) => m.id === messageId);
577
+ if (messageIndex === -1) return;
578
+ const parentId = messageIndex > 0 ? messages[messageIndex - 1].id : null;
579
+ queue?.clear("reload");
580
+ onReload?.(parentId);
286
581
  };
287
- if (onEdit) props.onEdit = onEdit;
288
- return withKey(msg.id, MessageClient(props));
289
- }), [
290
- messages,
291
- onEdit,
292
- queue,
293
- branches
294
- ]);
295
- const handleCancelRun = () => {
296
- queue?.clear("cancel-run");
297
- onCancel?.();
298
- };
299
- const handleSendNew = (message) => {
300
- onNew?.(message);
301
- };
302
- const composerClient = useClientResource(ComposerClientResource({
303
- type: "thread",
304
- isEditing: true,
305
- canCancel: isRunning,
306
- isSendDisabled,
307
- onCancel: handleCancelRun,
308
- onSend: handleSendNew,
309
- queue
310
- }));
582
+ $[0] = messages;
583
+ $[1] = onReload;
584
+ $[2] = queue;
585
+ $[3] = t3;
586
+ } else t3 = $[3];
587
+ const handleReload = t3;
588
+ let t4;
589
+ if ($[4] !== branches || $[5] !== handleReload || $[6] !== messages || $[7] !== onEdit || $[8] !== onRespondToToolApproval || $[9] !== queue) {
590
+ let t5;
591
+ if ($[11] !== branches || $[12] !== handleReload || $[13] !== onEdit || $[14] !== onRespondToToolApproval || $[15] !== queue) {
592
+ t5 = (msg, index) => {
593
+ const props = {
594
+ message: msg,
595
+ index,
596
+ onReload: () => handleReload(msg.id),
597
+ queue,
598
+ branches,
599
+ onRespondToToolApproval
600
+ };
601
+ if (onEdit) props.onEdit = onEdit;
602
+ return withKey(msg.id, MessageClient(props));
603
+ };
604
+ $[11] = branches;
605
+ $[12] = handleReload;
606
+ $[13] = onEdit;
607
+ $[14] = onRespondToToolApproval;
608
+ $[15] = queue;
609
+ $[16] = t5;
610
+ } else t5 = $[16];
611
+ t4 = messages.map(t5);
612
+ $[4] = branches;
613
+ $[5] = handleReload;
614
+ $[6] = messages;
615
+ $[7] = onEdit;
616
+ $[8] = onRespondToToolApproval;
617
+ $[9] = queue;
618
+ $[10] = t4;
619
+ } else t4 = $[10];
620
+ const messageClients = useClientLookup(t4);
621
+ let t5;
622
+ if ($[17] !== onCancel || $[18] !== queue) {
623
+ t5 = () => {
624
+ queue?.clear("cancel-run");
625
+ onCancel?.();
626
+ };
627
+ $[17] = onCancel;
628
+ $[18] = queue;
629
+ $[19] = t5;
630
+ } else t5 = $[19];
631
+ const handleCancelRun = t5;
632
+ let t6;
633
+ if ($[20] !== onNew) {
634
+ t6 = (message) => {
635
+ onNew?.(message);
636
+ };
637
+ $[20] = onNew;
638
+ $[21] = t6;
639
+ } else t6 = $[21];
640
+ const handleSendNew = t6;
641
+ let t7;
642
+ if ($[22] !== handleCancelRun || $[23] !== handleSendNew || $[24] !== isRunning || $[25] !== isSendDisabled || $[26] !== queue) {
643
+ t7 = ComposerClientResource({
644
+ type: "thread",
645
+ isEditing: true,
646
+ canCancel: isRunning,
647
+ isSendDisabled,
648
+ onCancel: handleCancelRun,
649
+ onSend: handleSendNew,
650
+ queue
651
+ });
652
+ $[22] = handleCancelRun;
653
+ $[23] = handleSendNew;
654
+ $[24] = isRunning;
655
+ $[25] = isSendDisabled;
656
+ $[26] = queue;
657
+ $[27] = t7;
658
+ } else t7 = $[27];
659
+ const composerClient = useClientResource(t7);
311
660
  const hasQueue = !!queue;
312
661
  const hasBranches = !!branches;
313
- const state = useMemo(() => {
314
- const messageStates = messageClients.state.map((s, idx, arr) => ({
315
- ...s,
316
- isLast: idx === arr.length - 1
317
- }));
318
- return {
319
- isEmpty: messages.length === 0,
662
+ let t8;
663
+ if ($[28] !== messageClients.state) {
664
+ t8 = messageClients.state.map(_temp11);
665
+ $[28] = messageClients.state;
666
+ $[29] = t8;
667
+ } else t8 = $[29];
668
+ const messageStates = t8;
669
+ const t9 = messages.length === 0;
670
+ let t10;
671
+ if ($[30] !== hasBranches || $[31] !== hasQueue || $[32] !== isRunning) {
672
+ t10 = {
673
+ edit: false,
674
+ delete: false,
675
+ reload: false,
676
+ cancel: isRunning,
677
+ speech: false,
678
+ attachments: false,
679
+ feedback: false,
680
+ voice: false,
681
+ switchToBranch: hasBranches,
682
+ switchBranchDuringRun: false,
683
+ unstable_copy: false,
684
+ dictation: false,
685
+ queue: hasQueue
686
+ };
687
+ $[30] = hasBranches;
688
+ $[31] = hasQueue;
689
+ $[32] = isRunning;
690
+ $[33] = t10;
691
+ } else t10 = $[33];
692
+ let t11;
693
+ let t12;
694
+ if ($[34] === Symbol.for("react.memo_cache_sentinel")) {
695
+ t11 = {};
696
+ t12 = [];
697
+ $[34] = t11;
698
+ $[35] = t12;
699
+ } else {
700
+ t11 = $[34];
701
+ t12 = $[35];
702
+ }
703
+ let t13;
704
+ if ($[36] !== composerClient.state || $[37] !== isRunning || $[38] !== messageStates || $[39] !== t10 || $[40] !== t9) {
705
+ t13 = {
706
+ isEmpty: t9,
320
707
  isDisabled: false,
321
708
  isLoading: false,
322
709
  isRunning,
323
- capabilities: {
324
- edit: false,
325
- delete: false,
326
- reload: false,
327
- cancel: isRunning,
328
- speech: false,
329
- attachments: false,
330
- feedback: false,
331
- voice: false,
332
- switchToBranch: hasBranches,
333
- switchBranchDuringRun: false,
334
- unstable_copy: false,
335
- dictation: false,
336
- queue: hasQueue
337
- },
710
+ capabilities: t10,
338
711
  messages: messageStates,
339
- state: {},
340
- suggestions: [],
712
+ state: t11,
713
+ suggestions: t12,
341
714
  extras: void 0,
342
715
  speech: void 0,
343
716
  voice: void 0,
344
717
  composer: composerClient.state
345
718
  };
346
- }, [
347
- messages,
348
- isRunning,
349
- hasQueue,
350
- hasBranches,
351
- messageClients.state,
352
- composerClient.state
353
- ]);
354
- return {
355
- getState: () => state,
356
- composer: () => composerClient.methods,
357
- append: (message) => {
358
- const appendMessage = typeof message === "string" ? {
719
+ $[36] = composerClient.state;
720
+ $[37] = isRunning;
721
+ $[38] = messageStates;
722
+ $[39] = t10;
723
+ $[40] = t9;
724
+ $[41] = t13;
725
+ } else t13 = $[41];
726
+ const state = t13;
727
+ let t14;
728
+ if ($[42] !== state) {
729
+ t14 = () => state;
730
+ $[42] = state;
731
+ $[43] = t14;
732
+ } else t14 = $[43];
733
+ let t15;
734
+ if ($[44] !== composerClient.methods) {
735
+ t15 = () => composerClient.methods;
736
+ $[44] = composerClient.methods;
737
+ $[45] = t15;
738
+ } else t15 = $[45];
739
+ let t16;
740
+ if ($[46] !== messages || $[47] !== onNew || $[48] !== queue) {
741
+ t16 = (message_0) => {
742
+ const appendMessage = typeof message_0 === "string" ? {
359
743
  createdAt: /* @__PURE__ */ new Date(),
360
744
  parentId: messages.at(-1)?.id ?? null,
361
745
  sourceId: null,
@@ -363,49 +747,78 @@ const useExternalThread = ({ messages, isRunning = false, isSendDisabled = false
363
747
  role: "user",
364
748
  content: [{
365
749
  type: "text",
366
- text: message
750
+ text: message_0
367
751
  }],
368
752
  attachments: [],
369
753
  metadata: { custom: {} }
370
754
  } : {
371
- createdAt: message.createdAt ?? /* @__PURE__ */ new Date(),
372
- parentId: message.parentId ?? messages.at(-1)?.id ?? null,
373
- sourceId: message.sourceId ?? null,
374
- role: message.role ?? "user",
375
- content: message.content,
376
- attachments: message.attachments ?? [],
377
- metadata: message.metadata ?? { custom: {} },
378
- runConfig: message.runConfig ?? {},
379
- startRun: message.startRun
755
+ createdAt: message_0.createdAt ?? /* @__PURE__ */ new Date(),
756
+ parentId: message_0.parentId ?? messages.at(-1)?.id ?? null,
757
+ sourceId: message_0.sourceId ?? null,
758
+ role: message_0.role ?? "user",
759
+ content: message_0.content,
760
+ attachments: message_0.attachments ?? [],
761
+ metadata: message_0.metadata ?? { custom: {} },
762
+ runConfig: message_0.runConfig ?? {},
763
+ startRun: message_0.startRun
380
764
  };
381
765
  if (queue) queue.enqueue(appendMessage, { steer: false });
382
766
  else onNew?.(appendMessage);
383
- },
384
- deleteMessage: () => {},
385
- startRun: () => {
767
+ };
768
+ $[46] = messages;
769
+ $[47] = onNew;
770
+ $[48] = queue;
771
+ $[49] = t16;
772
+ } else t16 = $[49];
773
+ let t17;
774
+ if ($[50] !== onStartRun) {
775
+ t17 = () => {
386
776
  onStartRun?.();
387
- },
388
- resumeRun: () => {},
389
- cancelRun: handleCancelRun,
390
- getModelContext: () => ({
391
- tools: {},
392
- config: {}
393
- }),
394
- export: () => ({ messages: [] }),
395
- import: () => {},
396
- reset: () => {},
397
- message: (selector) => {
777
+ };
778
+ $[50] = onStartRun;
779
+ $[51] = t17;
780
+ } else t17 = $[51];
781
+ let t18;
782
+ if ($[52] !== messageClients) {
783
+ t18 = (selector) => {
398
784
  if ("id" in selector) return messageClients.get({ key: selector.id });
399
785
  return messageClients.get(selector);
400
- },
401
- stopSpeaking: () => {},
402
- connectVoice: () => {},
403
- disconnectVoice: () => {},
404
- getVoiceVolume: () => 0,
405
- subscribeVoiceVolume: () => () => {},
406
- muteVoice: () => {},
407
- unmuteVoice: () => {}
408
- };
786
+ };
787
+ $[52] = messageClients;
788
+ $[53] = t18;
789
+ } else t18 = $[53];
790
+ let t19;
791
+ if ($[54] !== handleCancelRun || $[55] !== t14 || $[56] !== t15 || $[57] !== t16 || $[58] !== t17 || $[59] !== t18) {
792
+ t19 = {
793
+ getState: t14,
794
+ composer: t15,
795
+ append: t16,
796
+ deleteMessage: _temp12,
797
+ startRun: t17,
798
+ resumeRun: _temp13,
799
+ cancelRun: handleCancelRun,
800
+ getModelContext: _temp14,
801
+ export: _temp15,
802
+ import: _temp16,
803
+ reset: _temp17,
804
+ message: t18,
805
+ stopSpeaking: _temp18,
806
+ connectVoice: _temp19,
807
+ disconnectVoice: _temp20,
808
+ getVoiceVolume: _temp21,
809
+ subscribeVoiceVolume: _temp23,
810
+ muteVoice: _temp24,
811
+ unmuteVoice: _temp25
812
+ };
813
+ $[54] = handleCancelRun;
814
+ $[55] = t14;
815
+ $[56] = t15;
816
+ $[57] = t16;
817
+ $[58] = t17;
818
+ $[59] = t18;
819
+ $[60] = t19;
820
+ } else t19 = $[60];
821
+ return t19;
409
822
  };
410
823
  const ExternalThread = resource(useExternalThread);
411
824
  attachTransformScopes(useExternalThread, (scopes, parent) => {
@@ -433,6 +846,58 @@ attachTransformScopes(useExternalThread, (scopes, parent) => {
433
846
  if (!scopes.dataRenderers && parent.dataRenderers.source === null) scopes.dataRenderers = DataRenderers();
434
847
  if (!scopes.suggestions && parent.suggestions.source === null) scopes.suggestions = Suggestions();
435
848
  });
849
+ function _temp() {}
850
+ function _temp2(attachment) {
851
+ return withKey(attachment.id, AttachmentResource({
852
+ attachment,
853
+ onRemove: _temp
854
+ }));
855
+ }
856
+ function _temp3() {}
857
+ function _temp4() {}
858
+ function _temp5() {}
859
+ function _temp6() {}
860
+ function _temp7() {}
861
+ function _temp8() {}
862
+ function _temp9(part) {
863
+ return part.type === "text";
864
+ }
865
+ function _temp0(part_0) {
866
+ return "text" in part_0 ? part_0.text : "";
867
+ }
868
+ function _temp1() {}
869
+ function _temp10() {}
870
+ function _temp11(s, idx, arr) {
871
+ return {
872
+ ...s,
873
+ isLast: idx === arr.length - 1
874
+ };
875
+ }
876
+ function _temp12() {}
877
+ function _temp13() {}
878
+ function _temp14() {
879
+ return {
880
+ tools: {},
881
+ config: {}
882
+ };
883
+ }
884
+ function _temp15() {
885
+ return { messages: [] };
886
+ }
887
+ function _temp16() {}
888
+ function _temp17() {}
889
+ function _temp18() {}
890
+ function _temp19() {}
891
+ function _temp20() {}
892
+ function _temp21() {
893
+ return 0;
894
+ }
895
+ function _temp22() {}
896
+ function _temp23() {
897
+ return _temp22;
898
+ }
899
+ function _temp24() {}
900
+ function _temp25() {}
436
901
  //#endregion
437
902
  export { ExternalThread };
438
903