@assistant-ui/react 0.15.20 → 0.15.21

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 (340) hide show
  1. package/dist/assistant-transport.d.ts +10 -10
  2. package/dist/assistant-transport.d.ts.map +1 -1
  3. package/dist/augmentations.d.ts +3 -4
  4. package/dist/augmentations.d.ts.map +1 -1
  5. package/dist/context/ReadonlyStore.d.ts +2 -3
  6. package/dist/context/ReadonlyStore.d.ts.map +1 -1
  7. package/dist/context/providers/MessageProvider.d.ts +1 -2
  8. package/dist/context/providers/MessageProvider.d.ts.map +1 -1
  9. package/dist/context/providers/ThreadViewportProvider.d.ts +2 -3
  10. package/dist/context/providers/ThreadViewportProvider.d.ts.map +1 -1
  11. package/dist/context/react/ThreadViewportContext.d.ts +3 -4
  12. package/dist/context/react/ThreadViewportContext.d.ts.map +1 -1
  13. package/dist/context/react/utils/createContextHook.d.ts +1 -2
  14. package/dist/context/react/utils/createContextHook.d.ts.map +1 -1
  15. package/dist/context/react/utils/createContextStoreHook.d.ts +1 -2
  16. package/dist/context/react/utils/createContextStoreHook.d.ts.map +1 -1
  17. package/dist/context/stores/ThreadViewport.d.ts +4 -5
  18. package/dist/context/stores/ThreadViewport.d.ts.map +1 -1
  19. package/dist/devtools/DevToolsHooks.d.ts +3 -4
  20. package/dist/devtools/DevToolsHooks.d.ts.map +1 -1
  21. package/dist/hooks/useMessageQuote.d.ts +1 -2
  22. package/dist/hooks/useMessageQuote.d.ts.map +1 -1
  23. package/dist/hooks/useMessageTiming.d.ts +1 -2
  24. package/dist/hooks/useMessageTiming.d.ts.map +1 -1
  25. package/dist/hooks/useToolCallElapsed.d.ts +1 -2
  26. package/dist/hooks/useToolCallElapsed.d.ts.map +1 -1
  27. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts +3 -4
  28. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts.map +1 -1
  29. package/dist/mcp-apps/McpAppRenderer.d.ts +3 -4
  30. package/dist/mcp-apps/McpAppRenderer.d.ts.map +1 -1
  31. package/dist/mcp-apps/McpAppsRemoteHost.d.ts +1 -2
  32. package/dist/mcp-apps/McpAppsRemoteHost.d.ts.map +1 -1
  33. package/dist/mcp-apps/app-frame.d.ts +1 -2
  34. package/dist/mcp-apps/app-frame.d.ts.map +1 -1
  35. package/dist/mcp-apps/bridge.d.ts +4 -5
  36. package/dist/mcp-apps/bridge.d.ts.map +1 -1
  37. package/dist/mcp-apps/types.d.ts +20 -20
  38. package/dist/mcp-apps/types.d.ts.map +1 -1
  39. package/dist/mcp-apps/utils.d.ts +1 -2
  40. package/dist/mcp-apps/utils.d.ts.map +1 -1
  41. package/dist/model-context/frame/useAssistantFrameHost.d.ts +1 -2
  42. package/dist/model-context/frame/useAssistantFrameHost.d.ts.map +1 -1
  43. package/dist/model-context/makeAssistantVisible.d.ts +2 -2
  44. package/dist/model-context/makeAssistantVisible.d.ts.map +1 -1
  45. package/dist/primitives/actionBar/ActionBarCopy.d.ts +2 -3
  46. package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -1
  47. package/dist/primitives/actionBar/ActionBarEdit.d.ts +2 -3
  48. package/dist/primitives/actionBar/ActionBarEdit.d.ts.map +1 -1
  49. package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts +2 -3
  50. package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts.map +1 -1
  51. package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts +2 -3
  52. package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts.map +1 -1
  53. package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts +2 -3
  54. package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts.map +1 -1
  55. package/dist/primitives/actionBar/ActionBarInteractionContext.d.ts +3 -4
  56. package/dist/primitives/actionBar/ActionBarInteractionContext.d.ts.map +1 -1
  57. package/dist/primitives/actionBar/ActionBarReload.d.ts +2 -3
  58. package/dist/primitives/actionBar/ActionBarReload.d.ts.map +1 -1
  59. package/dist/primitives/actionBar/ActionBarRoot.d.ts +2 -3
  60. package/dist/primitives/actionBar/ActionBarRoot.d.ts.map +1 -1
  61. package/dist/primitives/actionBar/ActionBarSpeak.d.ts +2 -3
  62. package/dist/primitives/actionBar/ActionBarSpeak.d.ts.map +1 -1
  63. package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts +2 -3
  64. package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts.map +1 -1
  65. package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts +4 -5
  66. package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts.map +1 -1
  67. package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts +2 -3
  68. package/dist/primitives/actionBarMore/ActionBarMoreContent.d.ts.map +1 -1
  69. package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts +2 -3
  70. package/dist/primitives/actionBarMore/ActionBarMoreItem.d.ts.map +1 -1
  71. package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts +2 -3
  72. package/dist/primitives/actionBarMore/ActionBarMoreRoot.d.ts.map +1 -1
  73. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts +2 -3
  74. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.d.ts.map +1 -1
  75. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts +2 -3
  76. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.d.ts.map +1 -1
  77. package/dist/primitives/actionBarMore/scope.d.ts +2 -3
  78. package/dist/primitives/actionBarMore/scope.d.ts.map +1 -1
  79. package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts +2 -3
  80. package/dist/primitives/assistantModal/AssistantModalAnchor.d.ts.map +1 -1
  81. package/dist/primitives/assistantModal/AssistantModalContent.d.ts +2 -3
  82. package/dist/primitives/assistantModal/AssistantModalContent.d.ts.map +1 -1
  83. package/dist/primitives/assistantModal/AssistantModalRoot.d.ts +2 -3
  84. package/dist/primitives/assistantModal/AssistantModalRoot.d.ts.map +1 -1
  85. package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts +2 -3
  86. package/dist/primitives/assistantModal/AssistantModalTrigger.d.ts.map +1 -1
  87. package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts +3 -4
  88. package/dist/primitives/assistantModal/popoverRenderPrimitives.d.ts.map +1 -1
  89. package/dist/primitives/assistantModal/scope.d.ts +2 -3
  90. package/dist/primitives/assistantModal/scope.d.ts.map +1 -1
  91. package/dist/primitives/attachment/AttachmentName.d.ts +2 -3
  92. package/dist/primitives/attachment/AttachmentName.d.ts.map +1 -1
  93. package/dist/primitives/attachment/AttachmentRemove.d.ts +2 -3
  94. package/dist/primitives/attachment/AttachmentRemove.d.ts.map +1 -1
  95. package/dist/primitives/attachment/AttachmentRoot.d.ts +2 -3
  96. package/dist/primitives/attachment/AttachmentRoot.d.ts.map +1 -1
  97. package/dist/primitives/attachment/AttachmentThumb.d.ts +2 -3
  98. package/dist/primitives/attachment/AttachmentThumb.d.ts.map +1 -1
  99. package/dist/primitives/branchPicker/BranchPickerCount.d.ts +2 -3
  100. package/dist/primitives/branchPicker/BranchPickerCount.d.ts.map +1 -1
  101. package/dist/primitives/branchPicker/BranchPickerNext.d.ts +2 -3
  102. package/dist/primitives/branchPicker/BranchPickerNext.d.ts.map +1 -1
  103. package/dist/primitives/branchPicker/BranchPickerNumber.d.ts +2 -3
  104. package/dist/primitives/branchPicker/BranchPickerNumber.d.ts.map +1 -1
  105. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts +2 -3
  106. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts.map +1 -1
  107. package/dist/primitives/branchPicker/BranchPickerRoot.d.ts +2 -3
  108. package/dist/primitives/branchPicker/BranchPickerRoot.d.ts.map +1 -1
  109. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts +2 -3
  110. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts.map +1 -1
  111. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts +2 -3
  112. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts.map +1 -1
  113. package/dist/primitives/composer/ComposerAddAttachment.d.ts +2 -3
  114. package/dist/primitives/composer/ComposerAddAttachment.d.ts.map +1 -1
  115. package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts +2 -3
  116. package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts.map +1 -1
  117. package/dist/primitives/composer/ComposerCancel.d.ts +2 -3
  118. package/dist/primitives/composer/ComposerCancel.d.ts.map +1 -1
  119. package/dist/primitives/composer/ComposerCompactContext.d.ts +3 -4
  120. package/dist/primitives/composer/ComposerCompactContext.d.ts.map +1 -1
  121. package/dist/primitives/composer/ComposerDictate.d.ts +2 -3
  122. package/dist/primitives/composer/ComposerDictate.d.ts.map +1 -1
  123. package/dist/primitives/composer/ComposerDictationTranscript.d.ts +2 -3
  124. package/dist/primitives/composer/ComposerDictationTranscript.d.ts.map +1 -1
  125. package/dist/primitives/composer/ComposerInput.d.ts +2 -3
  126. package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
  127. package/dist/primitives/composer/ComposerInputPluginContext.d.ts +5 -6
  128. package/dist/primitives/composer/ComposerInputPluginContext.d.ts.map +1 -1
  129. package/dist/primitives/composer/ComposerQuote.d.ts +6 -7
  130. package/dist/primitives/composer/ComposerQuote.d.ts.map +1 -1
  131. package/dist/primitives/composer/ComposerRoot.d.ts +2 -3
  132. package/dist/primitives/composer/ComposerRoot.d.ts.map +1 -1
  133. package/dist/primitives/composer/ComposerSend.d.ts +3 -4
  134. package/dist/primitives/composer/ComposerSend.d.ts.map +1 -1
  135. package/dist/primitives/composer/ComposerStopDictation.d.ts +2 -3
  136. package/dist/primitives/composer/ComposerStopDictation.d.ts.map +1 -1
  137. package/dist/primitives/composer/trigger/TriggerPopover.d.ts +6 -7
  138. package/dist/primitives/composer/trigger/TriggerPopover.d.ts.map +1 -1
  139. package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts +2 -3
  140. package/dist/primitives/composer/trigger/TriggerPopoverAction.d.ts.map +1 -1
  141. package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts +2 -3
  142. package/dist/primitives/composer/trigger/TriggerPopoverBack.d.ts.map +1 -1
  143. package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts +4 -5
  144. package/dist/primitives/composer/trigger/TriggerPopoverCategories.d.ts.map +1 -1
  145. package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts +2 -3
  146. package/dist/primitives/composer/trigger/TriggerPopoverDirective.d.ts.map +1 -1
  147. package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts +4 -5
  148. package/dist/primitives/composer/trigger/TriggerPopoverItems.d.ts.map +1 -1
  149. package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts +4 -4
  150. package/dist/primitives/composer/trigger/TriggerPopoverResource.d.ts.map +1 -1
  151. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts +12 -13
  152. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.d.ts.map +1 -1
  153. package/dist/primitives/composer/trigger/detectTrigger.d.ts +3 -4
  154. package/dist/primitives/composer/trigger/detectTrigger.d.ts.map +1 -1
  155. package/dist/primitives/composer/trigger/index.d.ts +2 -2
  156. package/dist/primitives/composer/trigger/index.d.ts.map +1 -1
  157. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts +1 -2
  158. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.d.ts.map +1 -1
  159. package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts +3 -4
  160. package/dist/primitives/composer/trigger/triggerDetectionResource.d.ts.map +1 -1
  161. package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts +3 -4
  162. package/dist/primitives/composer/trigger/triggerKeyboardResource.d.ts.map +1 -1
  163. package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts +2 -3
  164. package/dist/primitives/composer/trigger/triggerNavigationResource.d.ts.map +1 -1
  165. package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts +4 -5
  166. package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts.map +1 -1
  167. package/dist/primitives/composer/useComposerInputState.d.ts +4 -5
  168. package/dist/primitives/composer/useComposerInputState.d.ts.map +1 -1
  169. package/dist/primitives/dropdownMenuRenderPrimitives.d.ts +4 -5
  170. package/dist/primitives/dropdownMenuRenderPrimitives.d.ts.map +1 -1
  171. package/dist/primitives/error/ErrorMessage.d.ts +2 -3
  172. package/dist/primitives/error/ErrorMessage.d.ts.map +1 -1
  173. package/dist/primitives/error/ErrorRoot.d.ts +2 -3
  174. package/dist/primitives/error/ErrorRoot.d.ts.map +1 -1
  175. package/dist/primitives/message/MessageError.d.ts +1 -2
  176. package/dist/primitives/message/MessageError.d.ts.map +1 -1
  177. package/dist/primitives/message/MessageIf.d.ts +2 -3
  178. package/dist/primitives/message/MessageIf.d.ts.map +1 -1
  179. package/dist/primitives/message/MessageParts.d.ts +3 -3
  180. package/dist/primitives/message/MessageParts.d.ts.map +1 -1
  181. package/dist/primitives/message/MessagePartsGrouped.d.ts +4 -5
  182. package/dist/primitives/message/MessagePartsGrouped.d.ts.map +1 -1
  183. package/dist/primitives/message/MessageRoot.d.ts +2 -3
  184. package/dist/primitives/message/MessageRoot.d.ts.map +1 -1
  185. package/dist/primitives/messagePart/MessagePartImage.d.ts +2 -3
  186. package/dist/primitives/messagePart/MessagePartImage.d.ts.map +1 -1
  187. package/dist/primitives/messagePart/MessagePartText.d.ts +2 -3
  188. package/dist/primitives/messagePart/MessagePartText.d.ts.map +1 -1
  189. package/dist/primitives/messagePart/useMessagePartData.d.ts +1 -2
  190. package/dist/primitives/messagePart/useMessagePartData.d.ts.map +1 -1
  191. package/dist/primitives/messagePart/useMessagePartFile.d.ts +1 -2
  192. package/dist/primitives/messagePart/useMessagePartFile.d.ts.map +1 -1
  193. package/dist/primitives/messagePart/useMessagePartImage.d.ts +1 -2
  194. package/dist/primitives/messagePart/useMessagePartImage.d.ts.map +1 -1
  195. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts +1 -2
  196. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts.map +1 -1
  197. package/dist/primitives/messagePart/useMessagePartSource.d.ts +1 -2
  198. package/dist/primitives/messagePart/useMessagePartSource.d.ts.map +1 -1
  199. package/dist/primitives/messagePart/useMessagePartText.d.ts +1 -2
  200. package/dist/primitives/messagePart/useMessagePartText.d.ts.map +1 -1
  201. package/dist/primitives/queueItem/QueueItemRemove.d.ts +2 -3
  202. package/dist/primitives/queueItem/QueueItemRemove.d.ts.map +1 -1
  203. package/dist/primitives/queueItem/QueueItemSteer.d.ts +2 -3
  204. package/dist/primitives/queueItem/QueueItemSteer.d.ts.map +1 -1
  205. package/dist/primitives/queueItem/QueueItemText.d.ts +2 -3
  206. package/dist/primitives/queueItem/QueueItemText.d.ts.map +1 -1
  207. package/dist/primitives/reasoning/useScrollLock.d.ts +1 -2
  208. package/dist/primitives/reasoning/useScrollLock.d.ts.map +1 -1
  209. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts +2 -3
  210. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts.map +1 -1
  211. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts +3 -4
  212. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts.map +1 -1
  213. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +5 -1
  214. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js.map +1 -1
  215. package/dist/primitives/suggestion/SuggestionDescription.d.ts +2 -3
  216. package/dist/primitives/suggestion/SuggestionDescription.d.ts.map +1 -1
  217. package/dist/primitives/suggestion/SuggestionTitle.d.ts +2 -3
  218. package/dist/primitives/suggestion/SuggestionTitle.d.ts.map +1 -1
  219. package/dist/primitives/suggestion/SuggestionTrigger.d.ts +2 -3
  220. package/dist/primitives/suggestion/SuggestionTrigger.d.ts.map +1 -1
  221. package/dist/primitives/thread/ThreadEmpty.d.ts +2 -3
  222. package/dist/primitives/thread/ThreadEmpty.d.ts.map +1 -1
  223. package/dist/primitives/thread/ThreadIf.d.ts +2 -3
  224. package/dist/primitives/thread/ThreadIf.d.ts.map +1 -1
  225. package/dist/primitives/thread/ThreadRoot.d.ts +2 -3
  226. package/dist/primitives/thread/ThreadRoot.d.ts.map +1 -1
  227. package/dist/primitives/thread/ThreadScrollToBottom.d.ts +3 -3
  228. package/dist/primitives/thread/ThreadScrollToBottom.d.ts.map +1 -1
  229. package/dist/primitives/thread/ThreadSuggestion.d.ts +2 -3
  230. package/dist/primitives/thread/ThreadSuggestion.d.ts.map +1 -1
  231. package/dist/primitives/thread/ThreadViewport.d.ts +2 -3
  232. package/dist/primitives/thread/ThreadViewport.d.ts.map +1 -1
  233. package/dist/primitives/thread/ThreadViewportFooter.d.ts +2 -3
  234. package/dist/primitives/thread/ThreadViewportFooter.d.ts.map +1 -1
  235. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts +4 -5
  236. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts.map +1 -1
  237. package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts +1 -2
  238. package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts.map +1 -1
  239. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts +2 -3
  240. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts.map +1 -1
  241. package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts +5 -6
  242. package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts.map +1 -1
  243. package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts +5 -6
  244. package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts.map +1 -1
  245. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts +1 -2
  246. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts.map +1 -1
  247. package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts +2 -3
  248. package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts.map +1 -1
  249. package/dist/primitives/thread/useThreadViewportAutoScroll.js +23 -15
  250. package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -1
  251. package/dist/primitives/threadList/ThreadListLoadMore.d.ts +2 -3
  252. package/dist/primitives/threadList/ThreadListLoadMore.d.ts.map +1 -1
  253. package/dist/primitives/threadList/ThreadListNew.d.ts +2 -3
  254. package/dist/primitives/threadList/ThreadListNew.d.ts.map +1 -1
  255. package/dist/primitives/threadList/ThreadListRoot.d.ts +2 -3
  256. package/dist/primitives/threadList/ThreadListRoot.d.ts.map +1 -1
  257. package/dist/primitives/threadListFocusGroup.d.ts +4 -4
  258. package/dist/primitives/threadListFocusGroup.d.ts.map +1 -1
  259. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts +2 -3
  260. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts.map +1 -1
  261. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts +2 -3
  262. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts.map +1 -1
  263. package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts +2 -3
  264. package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts.map +1 -1
  265. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts +2 -3
  266. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts.map +1 -1
  267. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts +2 -3
  268. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts.map +1 -1
  269. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts +2 -3
  270. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.d.ts.map +1 -1
  271. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts +2 -3
  272. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.d.ts.map +1 -1
  273. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts +4 -5
  274. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.d.ts.map +1 -1
  275. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts +2 -3
  276. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.d.ts.map +1 -1
  277. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts +2 -3
  278. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.d.ts.map +1 -1
  279. package/dist/primitives/threadListItemMore/scope.d.ts +2 -3
  280. package/dist/primitives/threadListItemMore/scope.d.ts.map +1 -1
  281. package/dist/sandbox-host/SandboxHost.d.ts +8 -9
  282. package/dist/sandbox-host/SandboxHost.d.ts.map +1 -1
  283. package/dist/tests/remote-thread-list-test-helpers.d.ts +1 -2
  284. package/dist/tests/remote-thread-list-test-helpers.d.ts.map +1 -1
  285. package/dist/unstable/useComposerInput.d.ts +5 -6
  286. package/dist/unstable/useComposerInput.d.ts.map +1 -1
  287. package/dist/unstable/useComposerInputHistory.d.ts +2 -3
  288. package/dist/unstable/useComposerInputHistory.d.ts.map +1 -1
  289. package/dist/unstable/useLiveCompletionAdapter.d.ts +2 -3
  290. package/dist/unstable/useLiveCompletionAdapter.d.ts.map +1 -1
  291. package/dist/unstable/useMentionAdapter.d.ts +7 -8
  292. package/dist/unstable/useMentionAdapter.d.ts.map +1 -1
  293. package/dist/unstable/useMessageStallDetection.d.ts +3 -4
  294. package/dist/unstable/useMessageStallDetection.d.ts.map +1 -1
  295. package/dist/unstable/useModelContextSnapshot.d.ts +3 -4
  296. package/dist/unstable/useModelContextSnapshot.d.ts.map +1 -1
  297. package/dist/unstable/useSlashCommandAdapter.d.ts +4 -5
  298. package/dist/unstable/useSlashCommandAdapter.d.ts.map +1 -1
  299. package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts +2 -3
  300. package/dist/unstable/webmcp/WebMcpRegistrationResource.d.ts.map +1 -1
  301. package/dist/unstable/webmcp/convertTools.d.ts +4 -5
  302. package/dist/unstable/webmcp/convertTools.d.ts.map +1 -1
  303. package/dist/unstable/webmcp/useWebMcpProvider.d.ts +3 -4
  304. package/dist/unstable/webmcp/useWebMcpProvider.d.ts.map +1 -1
  305. package/dist/unstable/webmcp/webmcp-host.d.ts +6 -7
  306. package/dist/unstable/webmcp/webmcp-host.d.ts.map +1 -1
  307. package/dist/utils/RequireAtLeastOne.d.ts +1 -2
  308. package/dist/utils/RequireAtLeastOne.d.ts.map +1 -1
  309. package/dist/utils/createActionButton.d.ts +3 -4
  310. package/dist/utils/createActionButton.d.ts.map +1 -1
  311. package/dist/utils/getSelectionMessageId.d.ts +1 -2
  312. package/dist/utils/getSelectionMessageId.d.ts.map +1 -1
  313. package/dist/utils/hooks/useManagedRef.d.ts +1 -2
  314. package/dist/utils/hooks/useManagedRef.d.ts.map +1 -1
  315. package/dist/utils/hooks/useMediaQuery.d.ts +1 -2
  316. package/dist/utils/hooks/useMediaQuery.d.ts.map +1 -1
  317. package/dist/utils/hooks/useOnResizeContent.d.ts +1 -2
  318. package/dist/utils/hooks/useOnResizeContent.d.ts.map +1 -1
  319. package/dist/utils/hooks/useOnScrollToBottom.d.ts +1 -2
  320. package/dist/utils/hooks/useOnScrollToBottom.d.ts.map +1 -1
  321. package/dist/utils/hooks/useSizeHandle.d.ts +1 -2
  322. package/dist/utils/hooks/useSizeHandle.d.ts.map +1 -1
  323. package/dist/utils/smooth/SmoothContext.d.ts +3 -4
  324. package/dist/utils/smooth/SmoothContext.d.ts.map +1 -1
  325. package/dist/utils/smooth/useSmooth.d.ts +2 -3
  326. package/dist/utils/smooth/useSmooth.d.ts.map +1 -1
  327. package/package.json +17 -16
  328. package/src/mcp-apps/McpAppRenderer.test.tsx +1 -2
  329. package/src/primitives/composer/ComposerAddAttachment.test.tsx +7 -5
  330. package/src/primitives/composer/ComposerRoot.test.tsx +5 -3
  331. package/src/primitives/selectionToolbar/SelectionToolbarRoot.test.tsx +44 -0
  332. package/src/primitives/selectionToolbar/SelectionToolbarRoot.tsx +7 -1
  333. package/src/primitives/thread/useThreadViewportAutoScroll.test.tsx +95 -0
  334. package/src/primitives/thread/useThreadViewportAutoScroll.ts +10 -0
  335. package/src/tests/RemoteThreadListRuntime.reloadMainThread.test.tsx +2 -4
  336. package/src/tests/threadListItemIsRunning.test.tsx +3 -2
  337. package/src/unstable/useMentionAdapter.test.tsx +15 -21
  338. package/src/unstable/useModelContextSnapshot.test.tsx +3 -2
  339. package/src/unstable/webmcp/convertTools.test.ts +59 -37
  340. package/src/unstable/webmcp/useWebMcpProvider.test.tsx +12 -3
@@ -498,6 +498,101 @@ describe("useThreadViewportAutoScroll", () => {
498
498
  expect(screen.getByTestId("is-at-bottom").textContent).toBe("false");
499
499
  });
500
500
 
501
+ it("starts following when auto-scroll is enabled at the bottom", async () => {
502
+ const view = render(
503
+ <SyncRuntimeProvider>
504
+ <Thread autoScroll={false} scrollToBottomOnInitialize={false} />
505
+ </SyncRuntimeProvider>,
506
+ );
507
+
508
+ const viewport = getViewport();
509
+ await waitFor(() => {
510
+ expect(screen.getAllByTestId("thread-message")).toHaveLength(
511
+ messages.length,
512
+ );
513
+ });
514
+
515
+ act(() => {
516
+ viewport.scrollTop = getMaxScrollTop(viewport);
517
+ viewport.dispatchEvent(new Event("scroll"));
518
+ });
519
+
520
+ view.rerender(
521
+ <SyncRuntimeProvider>
522
+ <Thread autoScroll scrollToBottomOnInitialize={false} />
523
+ </SyncRuntimeProvider>,
524
+ );
525
+
526
+ viewportMeasurementOffset += 200;
527
+ act(notifyResizeObservers);
528
+
529
+ expect(viewport.scrollTop).toBe(getMaxScrollTop(viewport));
530
+ });
531
+
532
+ it("preserves bottom follow on initial mount when initialize scrolling is disabled", async () => {
533
+ render(
534
+ <SyncRuntimeProvider>
535
+ <ThreadPrimitiveRoot>
536
+ <ThreadPrimitiveViewport
537
+ autoScroll
538
+ data-testid="viewport"
539
+ scrollToBottomOnInitialize={false}
540
+ turnAnchor="top"
541
+ >
542
+ {messages.map((_, index) => (
543
+ <div key={index} data-testid="thread-message" />
544
+ ))}
545
+ </ThreadPrimitiveViewport>
546
+ </ThreadPrimitiveRoot>
547
+ </SyncRuntimeProvider>,
548
+ );
549
+
550
+ const viewport = getViewport();
551
+ await waitFor(() => {
552
+ expect(screen.getAllByTestId("thread-message")).toHaveLength(
553
+ messages.length,
554
+ );
555
+ });
556
+
557
+ viewportMeasurementOffset += 200;
558
+ act(notifyResizeObservers);
559
+
560
+ expect(viewport.scrollTop).toBe(getMaxScrollTop(viewport));
561
+ });
562
+
563
+ it("does not jump down when auto-scroll is enabled away from the bottom", async () => {
564
+ const view = render(
565
+ <SyncRuntimeProvider>
566
+ <Thread autoScroll={false} scrollToBottomOnInitialize={false} />
567
+ </SyncRuntimeProvider>,
568
+ );
569
+
570
+ const viewport = getViewport();
571
+ await waitFor(() => {
572
+ expect(screen.getAllByTestId("thread-message")).toHaveLength(
573
+ messages.length,
574
+ );
575
+ });
576
+
577
+ act(() => {
578
+ viewport.scrollTop = getMaxScrollTop(viewport) - 80;
579
+ viewport.dispatchEvent(new Event("scroll"));
580
+ });
581
+ const scrollTopBeforeEnable = viewport.scrollTop;
582
+
583
+ view.rerender(
584
+ <SyncRuntimeProvider>
585
+ <Thread autoScroll scrollToBottomOnInitialize={false} />
586
+ </SyncRuntimeProvider>,
587
+ );
588
+
589
+ viewportMeasurementOffset += 200;
590
+ act(notifyResizeObservers);
591
+
592
+ expect(viewport.scrollTop).toBe(scrollTopBeforeEnable);
593
+ expect(viewport.scrollTop).toBeLessThan(getMaxScrollTop(viewport));
594
+ });
595
+
501
596
  it("defers auto-scroll to an active top anchor only while the run is active", async () => {
502
597
  let releaseRun!: () => void;
503
598
  const runGate = new Promise<void>((resolve) => {
@@ -74,6 +74,16 @@ export const useThreadViewportAutoScroll = <TElement extends HTMLElement>({
74
74
  // user actively scrolls up while content size is stable.
75
75
  const scrollingToBottomBehaviorRef = useRef<ScrollBehavior | null>(null);
76
76
  const followBottomRef = useRef(autoScroll);
77
+ const previousAutoScrollRef = useRef(autoScroll);
78
+
79
+ useLayoutEffect(() => {
80
+ const previousAutoScroll = previousAutoScrollRef.current;
81
+ previousAutoScrollRef.current = autoScroll;
82
+ if (previousAutoScroll || !autoScroll) return;
83
+
84
+ const div = divRef.current;
85
+ followBottomRef.current = div !== null && isViewportAtBottom(div);
86
+ }, [autoScroll]);
77
87
 
78
88
  const scrollToBottom = useCallback((behavior: ScrollBehavior) => {
79
89
  const div = divRef.current;
@@ -3,10 +3,8 @@
3
3
  import { act, render, waitFor } from "@testing-library/react";
4
4
  import { type FC, useEffect } from "react";
5
5
  import { describe, expect, it } from "vitest";
6
- import {
7
- useRemoteThreadListRuntime,
8
- type AssistantRuntime,
9
- } from "@assistant-ui/core/react";
6
+ import type { AssistantRuntime } from "@assistant-ui/core";
7
+ import { useRemoteThreadListRuntime } from "@assistant-ui/core/react";
10
8
  import { makeAdapter } from "./remote-thread-list-test-helpers";
11
9
  import { useLocalRuntime } from "../legacy-runtime/runtime-cores/local/useLocalRuntime";
12
10
  import { AssistantRuntimeProvider } from "../context";
@@ -3,6 +3,7 @@
3
3
  import { act, render, screen, waitFor } from "@testing-library/react";
4
4
  import { type FC, useEffect, useReducer } from "react";
5
5
  import { describe, expect, it } from "vitest";
6
+ import type { ThreadMessage } from "@assistant-ui/core";
6
7
  import { useRemoteThreadListRuntime } from "@assistant-ui/core/react";
7
8
  import { makeAdapter } from "./remote-thread-list-test-helpers";
8
9
  import { AssistantRuntimeProvider } from "../context";
@@ -79,7 +80,7 @@ describe("threadListItem.isRunning", () => {
79
80
 
80
81
  it("reports the run of a single-thread runtime that cannot observe background threads", async () => {
81
82
  const Inner: FC<{ isRunning: boolean }> = ({ isRunning }) => {
82
- const runtime = useExternalStoreRuntime({
83
+ const runtime = useExternalStoreRuntime<ThreadMessage>({
83
84
  messages: [],
84
85
  isRunning,
85
86
  onNew: async () => {},
@@ -126,7 +127,7 @@ describe("threadListItem.isRunning", () => {
126
127
  };
127
128
  }, []);
128
129
 
129
- return useExternalStoreRuntime({
130
+ return useExternalStoreRuntime<ThreadMessage>({
130
131
  messages: [],
131
132
  isRunning: running.get(threadId) ?? false,
132
133
  onNew: async () => {},
@@ -82,20 +82,21 @@ describe("unstable_useMentionAdapter", () => {
82
82
 
83
83
  it("does not expose flat items when the last category is removed", () => {
84
84
  const items = [{ id: "alice", type: "person", label: "Alice" }];
85
+ const initialOptions: Unstable_UseMentionAdapterOptions = {
86
+ items,
87
+ categories: [
88
+ {
89
+ id: "people",
90
+ label: "People",
91
+ items: [{ id: "bob", type: "person", label: "Bob" }],
92
+ },
93
+ ],
94
+ };
85
95
  const { result, rerender } = renderHook(
86
96
  (options: Unstable_UseMentionAdapterOptions) =>
87
97
  unstable_useMentionAdapter(options),
88
98
  {
89
- initialProps: {
90
- items,
91
- categories: [
92
- {
93
- id: "people",
94
- label: "People",
95
- items: [{ id: "bob", type: "person", label: "Bob" }],
96
- },
97
- ],
98
- },
99
+ initialProps: initialOptions,
99
100
  },
100
101
  );
101
102
 
@@ -334,23 +335,16 @@ describe("unstable_useMentionAdapter", () => {
334
335
  createIssue: { description: "Create an issue" },
335
336
  };
336
337
 
338
+ const initialOptions: Unstable_UseMentionAdapterOptions = { items: [] };
337
339
  const { result, rerender } = renderHook(
338
- ({
339
- items,
340
- }: {
341
- items: readonly {
342
- id: string;
343
- type: string;
344
- label: string;
345
- }[];
346
- }) =>
340
+ ({ items }: Unstable_UseMentionAdapterOptions) =>
347
341
  unstable_useMentionAdapter({
348
- items,
342
+ ...(items === undefined ? {} : { items }),
349
343
  includeModelContextTools: {
350
344
  category: { id: "actions", label: "Actions" },
351
345
  },
352
346
  }),
353
- { initialProps: { items: [] } },
347
+ { initialProps: initialOptions },
354
348
  );
355
349
 
356
350
  expect(result.current.adapter.categories()).toEqual([]);
@@ -15,6 +15,7 @@ const createSource = (
15
15
  overrides: Partial<
16
16
  ModelContextSnapshotSource<Readonly<Record<string, string>>>
17
17
  > = {},
18
+ includeIsEqual = true,
18
19
  ) => {
19
20
  const listeners = new Set<() => void>();
20
21
  const state = { tools: EMPTY as Record<string, string> };
@@ -29,7 +30,7 @@ const createSource = (
29
30
  unsubscribe();
30
31
  };
31
32
  }),
32
- isEqual: shallowEqualRecords,
33
+ ...(includeIsEqual ? { isEqual: shallowEqualRecords } : {}),
33
34
  ...overrides,
34
35
  };
35
36
  return {
@@ -90,7 +91,7 @@ describe("useModelContextSnapshot", () => {
90
91
  });
91
92
 
92
93
  it("takes every notification when the source omits isEqual", () => {
93
- const { source, state, notify } = createSource({ isEqual: undefined });
94
+ const { source, state, notify } = createSource({}, false);
94
95
  state.tools = { a: "1" };
95
96
 
96
97
  const { result } = renderHook(() =>
@@ -7,25 +7,41 @@ import {
7
7
  toWebMcpTool,
8
8
  } from "./convertTools";
9
9
 
10
- const jsonSchema = {
10
+ type WeatherArgs = { city: string };
11
+ type FrontendTool = Extract<Tool<WeatherArgs, unknown>, { type: "frontend" }>;
12
+
13
+ const jsonSchema: FrontendTool["parameters"] = {
11
14
  type: "object",
12
15
  properties: { city: { type: "string" } },
13
16
  required: ["city"],
14
- } as const;
15
-
16
- const frontendTool = (
17
- overrides: Partial<Tool<any, any>> = {},
18
- ): Tool<any, any> =>
19
- ({
20
- type: "frontend",
21
- description: "Get the weather for a city.",
22
- parameters: jsonSchema,
23
- execute: async ({ city }: { city: string }) => `Sunny in ${city}`,
24
- ...overrides,
25
- }) as Tool<any, any>;
17
+ };
18
+
19
+ const frontendTool = (overrides: Partial<FrontendTool> = {}): FrontendTool => ({
20
+ type: "frontend",
21
+ description: "Get the weather for a city.",
22
+ parameters: jsonSchema,
23
+ execute: async ({ city }) => `Sunny in ${city}`,
24
+ ...overrides,
25
+ });
26
+
27
+ const frontendToolWithoutExecute = (): FrontendTool => ({
28
+ type: "frontend",
29
+ description: "Get the weather for a city.",
30
+ parameters: jsonSchema,
31
+ });
32
+
33
+ const typeLessTool = (): Tool<WeatherArgs, unknown> => ({
34
+ description: "Get the weather for a city.",
35
+ parameters: jsonSchema,
36
+ execute: async ({ city }) => `Sunny in ${city}`,
37
+ });
38
+
39
+ const typeLessToolWithoutExecute = (): Tool<WeatherArgs, unknown> => ({
40
+ type: undefined,
41
+ });
26
42
 
27
43
  const descriptorFor = (
28
- overrides: Partial<Tool<any, any>> = {},
44
+ overrides: Partial<FrontendTool> = {},
29
45
  lifecycleSignal?: AbortSignal,
30
46
  ) => toWebMcpTool("t", () => frontendTool(overrides), lifecycleSignal);
31
47
 
@@ -33,20 +49,29 @@ const text = (value: string) => ({ type: "text", text: value });
33
49
 
34
50
  describe("defaultWebMcpFilter", () => {
35
51
  it.for([
36
- ["exposes an enabled frontend tool", {}, true],
37
- ["hides a backend tool", { type: "backend" }, false],
38
- ["hides a frontend tool with no execute", { execute: undefined }, false],
39
- ["hides a disabled frontend tool", { disabled: true }, false],
40
- ["exposes a tool authored without a type", { type: undefined }, true],
52
+ ["exposes an enabled frontend tool", frontendTool(), true],
53
+ [
54
+ "hides a backend tool",
55
+ { ...frontendTool(), type: "backend" } as unknown as Tool<
56
+ WeatherArgs,
57
+ unknown
58
+ >,
59
+ false,
60
+ ],
61
+ [
62
+ "hides a frontend tool with no execute",
63
+ frontendToolWithoutExecute(),
64
+ false,
65
+ ],
66
+ ["hides a disabled frontend tool", frontendTool({ disabled: true }), false],
67
+ ["exposes a tool authored without a type", typeLessTool(), true],
41
68
  [
42
69
  "hides a type-less tool with no execute",
43
- { type: undefined, execute: undefined },
70
+ typeLessToolWithoutExecute(),
44
71
  false,
45
72
  ],
46
- ] as const)("%s", ([, overrides, expected]) => {
47
- expect(defaultWebMcpFilter("t", frontendTool(overrides as any))).toBe(
48
- expected,
49
- );
73
+ ] as const)("%s", ([, tool, expected]) => {
74
+ expect(defaultWebMcpFilter("t", tool)).toBe(expected);
50
75
  });
51
76
  });
52
77
 
@@ -61,10 +86,7 @@ describe("toWebMcpTool descriptor", () => {
61
86
  descriptorFor({ parameters: z.object({ city: z.string() }) }).inputSchema,
62
87
  ).toMatchObject(jsonSchema);
63
88
 
64
- const bare = descriptorFor({
65
- description: undefined,
66
- parameters: undefined,
67
- });
89
+ const bare = toWebMcpTool("bare", () => ({ type: "backend" }));
68
90
  expect(bare.description).toBe("");
69
91
  expect(bare.inputSchema).toEqual({ type: "object", properties: {} });
70
92
  });
@@ -80,7 +102,7 @@ describe("toWebMcpTool descriptor", () => {
80
102
  describe("toWebMcpTool execute", () => {
81
103
  it("passes the arguments through, defaulting missing arguments to {}", async () => {
82
104
  const execute = vi.fn(async () => "Sunny in Paris");
83
- const descriptor = descriptorFor({ execute, parameters: undefined });
105
+ const descriptor = descriptorFor({ execute });
84
106
 
85
107
  const result = await descriptor.execute({ city: "Paris" });
86
108
  expect(execute).toHaveBeenCalledWith(
@@ -137,7 +159,7 @@ describe("toWebMcpTool execute", () => {
137
159
 
138
160
  it("reports an error when a published tool has no client-side execute", async () => {
139
161
  await expect(
140
- descriptorFor({ execute: undefined }).execute({}),
162
+ toWebMcpTool("t", frontendToolWithoutExecute).execute({}),
141
163
  ).resolves.toEqual({
142
164
  isError: true,
143
165
  content: [text('Tool "t" has no client-side implementation.')],
@@ -155,7 +177,7 @@ describe("toWebMcpTool execute", () => {
155
177
 
156
178
  it("rejects human input requests", async () => {
157
179
  const result = await descriptorFor({
158
- execute: async (_args: unknown, context: any) => await context.human(),
180
+ execute: async (_args, context) => await context.human(undefined),
159
181
  }).execute({});
160
182
  expect(result).toEqual({
161
183
  isError: true,
@@ -165,7 +187,7 @@ describe("toWebMcpTool execute", () => {
165
187
  });
166
188
 
167
189
  describe("toWebMcpTool schema validation", () => {
168
- const zodTool = (overrides: Partial<Tool<any, any>> = {}) =>
190
+ const zodTool = (overrides: Omit<Partial<FrontendTool>, "parameters"> = {}) =>
169
191
  descriptorFor({
170
192
  parameters: z.object({ city: z.string() }),
171
193
  ...overrides,
@@ -521,12 +543,12 @@ describe("toMcpContent", () => {
521
543
  });
522
544
 
523
545
  it("projects a successful result through toModelOutput", async () => {
524
- const toModelOutput = vi.fn(async () => [
525
- { type: "text", text: "projected" },
526
- ]);
546
+ const toModelOutput = vi.fn<NonNullable<FrontendTool["toModelOutput"]>>(
547
+ async () => [{ type: "text", text: "projected" }],
548
+ );
527
549
  const response = await toMcpContent("raw", {
528
550
  ...options,
529
- tool: frontendTool({ toModelOutput } as any),
551
+ tool: frontendTool({ toModelOutput }),
530
552
  });
531
553
  expect(toModelOutput).toHaveBeenCalledWith({
532
554
  toolCallId: "1",
@@ -544,7 +566,7 @@ describe("toMcpContent", () => {
544
566
  toModelOutput: () => {
545
567
  throw new Error("bad projection");
546
568
  },
547
- } as any),
569
+ }),
548
570
  });
549
571
  expect(response).toEqual({ content: [text("raw")] });
550
572
  expect(warn).toHaveBeenCalled();
@@ -445,7 +445,11 @@ describe("unstable_useWebMcpProvider", () => {
445
445
  available: true,
446
446
  registerTool: (def, onError) => {
447
447
  const dispose = vi.fn();
448
- calls.push({ def, onError, dispose });
448
+ calls.push({
449
+ def,
450
+ ...(onError === undefined ? {} : { onError }),
451
+ dispose,
452
+ });
449
453
  return dispose;
450
454
  },
451
455
  });
@@ -457,10 +461,15 @@ describe("unstable_useWebMcpProvider", () => {
457
461
  provider.setTools({ search: frontendTool({ description: "renamed" }) });
458
462
  await vi.waitFor(() => expect(calls).toHaveLength(2));
459
463
 
460
- calls[0]!.onError?.(new Error("late failure"));
464
+ const initialCall = calls.at(0);
465
+ const replacementCall = calls.at(1);
466
+ if (!initialCall?.onError || !replacementCall) {
467
+ throw new Error("Expected both tool registrations");
468
+ }
469
+ initialCall.onError(new Error("late failure"));
461
470
 
462
471
  expect(providerResult().registeredToolNames).toEqual(["search"]);
463
- expect(calls[1]!.dispose).not.toHaveBeenCalled();
472
+ expect(replacementCall.dispose).not.toHaveBeenCalled();
464
473
  expect(warn).not.toHaveBeenCalled();
465
474
  });
466
475
  });