@assistant-ui/react 0.12.8 → 0.12.10

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 (303) hide show
  1. package/dist/client/ExternalThread.d.ts.map +1 -1
  2. package/dist/client/ExternalThread.js +10 -0
  3. package/dist/client/ExternalThread.js.map +1 -1
  4. package/dist/client/NoOpComposerClient.d.ts.map +1 -1
  5. package/dist/client/NoOpComposerClient.js +4 -0
  6. package/dist/client/NoOpComposerClient.js.map +1 -1
  7. package/dist/context/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
  8. package/dist/context/providers/ChainOfThoughtByIndicesProvider.js +1 -1
  9. package/dist/context/providers/ChainOfThoughtByIndicesProvider.js.map +1 -1
  10. package/dist/context/react/utils/ensureBinding.js +1 -1
  11. package/dist/context/react/utils/ensureBinding.js.map +1 -1
  12. package/dist/hooks/useMessageQuote.d.ts +17 -0
  13. package/dist/hooks/useMessageQuote.d.ts.map +1 -0
  14. package/dist/hooks/useMessageQuote.js +20 -0
  15. package/dist/hooks/useMessageQuote.js.map +1 -0
  16. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts.map +1 -1
  17. package/dist/legacy-runtime/AssistantRuntimeProvider.js +1 -2
  18. package/dist/legacy-runtime/AssistantRuntimeProvider.js.map +1 -1
  19. package/dist/legacy-runtime/client/ComposerRuntimeClient.d.ts.map +1 -1
  20. package/dist/legacy-runtime/client/ComposerRuntimeClient.js +2 -0
  21. package/dist/legacy-runtime/client/ComposerRuntimeClient.js.map +1 -1
  22. package/dist/legacy-runtime/hooks/AssistantContext.d.ts +1 -1
  23. package/dist/legacy-runtime/hooks/AssistantContext.js +1 -1
  24. package/dist/legacy-runtime/hooks/AttachmentContext.d.ts +1 -1
  25. package/dist/legacy-runtime/hooks/AttachmentContext.js +1 -1
  26. package/dist/legacy-runtime/hooks/ComposerContext.d.ts +6 -6
  27. package/dist/legacy-runtime/hooks/ComposerContext.js +4 -4
  28. package/dist/legacy-runtime/hooks/MessageContext.d.ts +5 -5
  29. package/dist/legacy-runtime/hooks/MessageContext.js +5 -5
  30. package/dist/legacy-runtime/hooks/MessagePartContext.d.ts +1 -1
  31. package/dist/legacy-runtime/hooks/MessagePartContext.js +1 -1
  32. package/dist/legacy-runtime/hooks/ThreadContext.d.ts +5 -5
  33. package/dist/legacy-runtime/hooks/ThreadContext.js +4 -4
  34. package/dist/legacy-runtime/hooks/ThreadListItemContext.d.ts +1 -1
  35. package/dist/legacy-runtime/hooks/ThreadListItemContext.js +1 -1
  36. package/dist/legacy-runtime/runtime/ComposerRuntime.d.ts +12 -0
  37. package/dist/legacy-runtime/runtime/ComposerRuntime.d.ts.map +1 -1
  38. package/dist/legacy-runtime/runtime/ComposerRuntime.js +9 -0
  39. package/dist/legacy-runtime/runtime/ComposerRuntime.js.map +1 -1
  40. package/dist/legacy-runtime/runtime/ThreadRuntime.d.ts +2 -0
  41. package/dist/legacy-runtime/runtime/ThreadRuntime.d.ts.map +1 -1
  42. package/dist/legacy-runtime/runtime-cores/assistant-transport/types.d.ts +5 -0
  43. package/dist/legacy-runtime/runtime-cores/assistant-transport/types.d.ts.map +1 -1
  44. package/dist/legacy-runtime/runtime-cores/assistant-transport/types.js.map +1 -1
  45. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
  46. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js +36 -26
  47. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js.map +1 -1
  48. package/dist/legacy-runtime/runtime-cores/assistant-transport/useToolInvocations.js +7 -7
  49. package/dist/legacy-runtime/runtime-cores/assistant-transport/useToolInvocations.js.map +1 -1
  50. package/dist/legacy-runtime/runtime-cores/composer/BaseComposerRuntimeCore.d.ts +4 -0
  51. package/dist/legacy-runtime/runtime-cores/composer/BaseComposerRuntimeCore.d.ts.map +1 -1
  52. package/dist/legacy-runtime/runtime-cores/composer/BaseComposerRuntimeCore.js +16 -2
  53. package/dist/legacy-runtime/runtime-cores/composer/BaseComposerRuntimeCore.js.map +1 -1
  54. package/dist/legacy-runtime/runtime-cores/core/ComposerRuntimeCore.d.ts +3 -0
  55. package/dist/legacy-runtime/runtime-cores/core/ComposerRuntimeCore.d.ts.map +1 -1
  56. package/dist/legacy-runtime/runtime-cores/external-store/createMessageConverter.js +1 -1
  57. package/dist/legacy-runtime/runtime-cores/external-store/createMessageConverter.js.map +1 -1
  58. package/dist/legacy-runtime/runtime-cores/local/useLocalRuntime.d.ts.map +1 -1
  59. package/dist/legacy-runtime/runtime-cores/local/useLocalRuntime.js +1 -1
  60. package/dist/legacy-runtime/runtime-cores/local/useLocalRuntime.js.map +1 -1
  61. package/dist/legacy-runtime/runtime-cores/remote-thread-list/EMPTY_THREAD_CORE.d.ts.map +1 -1
  62. package/dist/legacy-runtime/runtime-cores/remote-thread-list/EMPTY_THREAD_CORE.js +4 -0
  63. package/dist/legacy-runtime/runtime-cores/remote-thread-list/EMPTY_THREAD_CORE.js.map +1 -1
  64. package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -1
  65. package/dist/primitives/actionBar/ActionBarCopy.js +7 -6
  66. package/dist/primitives/actionBar/ActionBarCopy.js.map +1 -1
  67. package/dist/primitives/actionBar/ActionBarEdit.js +1 -1
  68. package/dist/primitives/actionBar/ActionBarEdit.js.map +1 -1
  69. package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts.map +1 -1
  70. package/dist/primitives/actionBar/ActionBarExportMarkdown.js +4 -3
  71. package/dist/primitives/actionBar/ActionBarExportMarkdown.js.map +1 -1
  72. package/dist/primitives/actionBar/ActionBarSpeak.d.ts.map +1 -1
  73. package/dist/primitives/actionBar/ActionBarSpeak.js +4 -3
  74. package/dist/primitives/actionBar/ActionBarSpeak.js.map +1 -1
  75. package/dist/primitives/actionBar/ActionBarStopSpeaking.js +1 -1
  76. package/dist/primitives/actionBar/ActionBarStopSpeaking.js.map +1 -1
  77. package/dist/primitives/actionBar/useActionBarFloatStatus.js +5 -5
  78. package/dist/primitives/actionBar/useActionBarFloatStatus.js.map +1 -1
  79. package/dist/primitives/attachment/AttachmentName.js +1 -1
  80. package/dist/primitives/attachment/AttachmentName.js.map +1 -1
  81. package/dist/primitives/attachment/AttachmentThumb.js +2 -2
  82. package/dist/primitives/attachment/AttachmentThumb.js.map +1 -1
  83. package/dist/primitives/branchPicker/BranchPickerCount.js +1 -1
  84. package/dist/primitives/branchPicker/BranchPickerCount.js.map +1 -1
  85. package/dist/primitives/branchPicker/BranchPickerNext.js +3 -3
  86. package/dist/primitives/branchPicker/BranchPickerNext.js.map +1 -1
  87. package/dist/primitives/branchPicker/BranchPickerNumber.js +1 -1
  88. package/dist/primitives/branchPicker/BranchPickerNumber.js.map +1 -1
  89. package/dist/primitives/branchPicker/BranchPickerPrevious.js +3 -3
  90. package/dist/primitives/branchPicker/BranchPickerPrevious.js.map +1 -1
  91. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts.map +1 -1
  92. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js +1 -1
  93. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js.map +1 -1
  94. package/dist/primitives/chainOfThought/ChainOfThoughtParts.d.ts +3 -1
  95. package/dist/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
  96. package/dist/primitives/chainOfThought/ChainOfThoughtParts.js +5 -7
  97. package/dist/primitives/chainOfThought/ChainOfThoughtParts.js.map +1 -1
  98. package/dist/primitives/composer/ComposerAddAttachment.js +1 -1
  99. package/dist/primitives/composer/ComposerAddAttachment.js.map +1 -1
  100. package/dist/primitives/composer/ComposerAttachments.js +1 -1
  101. package/dist/primitives/composer/ComposerAttachments.js.map +1 -1
  102. package/dist/primitives/composer/ComposerCancel.js +1 -1
  103. package/dist/primitives/composer/ComposerCancel.js.map +1 -1
  104. package/dist/primitives/composer/ComposerDictate.js +3 -3
  105. package/dist/primitives/composer/ComposerDictate.js.map +1 -1
  106. package/dist/primitives/composer/ComposerDictationTranscript.d.ts.map +1 -1
  107. package/dist/primitives/composer/ComposerDictationTranscript.js +1 -1
  108. package/dist/primitives/composer/ComposerDictationTranscript.js.map +1 -1
  109. package/dist/primitives/composer/ComposerIf.js +4 -4
  110. package/dist/primitives/composer/ComposerIf.js.map +1 -1
  111. package/dist/primitives/composer/ComposerInput.d.ts +35 -45
  112. package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
  113. package/dist/primitives/composer/ComposerInput.js +25 -9
  114. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  115. package/dist/primitives/composer/ComposerQuote.d.ts +52 -0
  116. package/dist/primitives/composer/ComposerQuote.d.ts.map +1 -0
  117. package/dist/primitives/composer/ComposerQuote.js +57 -0
  118. package/dist/primitives/composer/ComposerQuote.js.map +1 -0
  119. package/dist/primitives/composer/ComposerStopDictation.js +1 -1
  120. package/dist/primitives/composer/ComposerStopDictation.js.map +1 -1
  121. package/dist/primitives/composer/index.d.ts +3 -0
  122. package/dist/primitives/composer/index.d.ts.map +1 -1
  123. package/dist/primitives/composer/index.js +3 -0
  124. package/dist/primitives/composer/index.js.map +1 -1
  125. package/dist/primitives/error/ErrorMessage.js +4 -4
  126. package/dist/primitives/error/ErrorMessage.js.map +1 -1
  127. package/dist/primitives/index.d.ts +2 -0
  128. package/dist/primitives/index.d.ts.map +1 -1
  129. package/dist/primitives/index.js +2 -0
  130. package/dist/primitives/index.js.map +1 -1
  131. package/dist/primitives/message/MessageAttachments.js +4 -4
  132. package/dist/primitives/message/MessageAttachments.js.map +1 -1
  133. package/dist/primitives/message/MessageError.js +2 -2
  134. package/dist/primitives/message/MessageError.js.map +1 -1
  135. package/dist/primitives/message/MessageIf.js +3 -3
  136. package/dist/primitives/message/MessageIf.js.map +1 -1
  137. package/dist/primitives/message/MessageParts.d.ts +140 -133
  138. package/dist/primitives/message/MessageParts.d.ts.map +1 -1
  139. package/dist/primitives/message/MessageParts.js +7 -7
  140. package/dist/primitives/message/MessageParts.js.map +1 -1
  141. package/dist/primitives/message/MessagePartsGrouped.js +5 -5
  142. package/dist/primitives/message/MessagePartsGrouped.js.map +1 -1
  143. package/dist/primitives/message/MessageRoot.d.ts.map +1 -1
  144. package/dist/primitives/message/MessageRoot.js +6 -5
  145. package/dist/primitives/message/MessageRoot.js.map +1 -1
  146. package/dist/primitives/messagePart/MessagePartInProgress.d.ts.map +1 -1
  147. package/dist/primitives/messagePart/MessagePartInProgress.js +1 -1
  148. package/dist/primitives/messagePart/MessagePartInProgress.js.map +1 -1
  149. package/dist/primitives/messagePart/useMessagePartData.js +3 -3
  150. package/dist/primitives/messagePart/useMessagePartData.js.map +1 -1
  151. package/dist/primitives/messagePart/useMessagePartFile.js +3 -3
  152. package/dist/primitives/messagePart/useMessagePartFile.js.map +1 -1
  153. package/dist/primitives/messagePart/useMessagePartImage.js +3 -3
  154. package/dist/primitives/messagePart/useMessagePartImage.js.map +1 -1
  155. package/dist/primitives/messagePart/useMessagePartReasoning.js +3 -3
  156. package/dist/primitives/messagePart/useMessagePartReasoning.js.map +1 -1
  157. package/dist/primitives/messagePart/useMessagePartSource.js +3 -3
  158. package/dist/primitives/messagePart/useMessagePartSource.js.map +1 -1
  159. package/dist/primitives/messagePart/useMessagePartText.d.ts.map +1 -1
  160. package/dist/primitives/messagePart/useMessagePartText.js +3 -3
  161. package/dist/primitives/messagePart/useMessagePartText.js.map +1 -1
  162. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts +24 -0
  163. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.d.ts.map +1 -0
  164. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js +37 -0
  165. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js.map +1 -0
  166. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts +31 -0
  167. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.d.ts.map +1 -0
  168. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +85 -0
  169. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js.map +1 -0
  170. package/dist/primitives/selectionToolbar/index.d.ts +3 -0
  171. package/dist/primitives/selectionToolbar/index.d.ts.map +1 -0
  172. package/dist/primitives/selectionToolbar/index.js +3 -0
  173. package/dist/primitives/selectionToolbar/index.js.map +1 -0
  174. package/dist/primitives/suggestion/SuggestionDescription.js +1 -1
  175. package/dist/primitives/suggestion/SuggestionDescription.js.map +1 -1
  176. package/dist/primitives/suggestion/SuggestionTitle.js +1 -1
  177. package/dist/primitives/suggestion/SuggestionTitle.js.map +1 -1
  178. package/dist/primitives/suggestion/SuggestionTrigger.d.ts.map +1 -1
  179. package/dist/primitives/suggestion/SuggestionTrigger.js +6 -3
  180. package/dist/primitives/suggestion/SuggestionTrigger.js.map +1 -1
  181. package/dist/primitives/thread/ThreadEmpty.js +1 -1
  182. package/dist/primitives/thread/ThreadEmpty.js.map +1 -1
  183. package/dist/primitives/thread/ThreadIf.js +7 -7
  184. package/dist/primitives/thread/ThreadIf.js.map +1 -1
  185. package/dist/primitives/thread/ThreadMessages.js +3 -3
  186. package/dist/primitives/thread/ThreadMessages.js.map +1 -1
  187. package/dist/primitives/thread/ThreadSuggestion.d.ts.map +1 -1
  188. package/dist/primitives/thread/ThreadSuggestion.js +5 -2
  189. package/dist/primitives/thread/ThreadSuggestion.js.map +1 -1
  190. package/dist/primitives/thread/ThreadSuggestions.js +1 -1
  191. package/dist/primitives/thread/ThreadSuggestions.js.map +1 -1
  192. package/dist/primitives/thread/ThreadViewportSlack.js +4 -4
  193. package/dist/primitives/thread/ThreadViewportSlack.js.map +1 -1
  194. package/dist/primitives/threadList/ThreadListItems.js +1 -1
  195. package/dist/primitives/threadList/ThreadListItems.js.map +1 -1
  196. package/dist/primitives/threadList/ThreadListNew.js +1 -1
  197. package/dist/primitives/threadList/ThreadListNew.js.map +1 -1
  198. package/dist/primitives/threadListItem/ThreadListItemRoot.js +1 -1
  199. package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -1
  200. package/dist/primitives/threadListItem/ThreadListItemTitle.js +1 -1
  201. package/dist/primitives/threadListItem/ThreadListItemTitle.js.map +1 -1
  202. package/dist/types/QuoteTypes.d.ts +5 -0
  203. package/dist/types/QuoteTypes.d.ts.map +1 -0
  204. package/dist/types/QuoteTypes.js +2 -0
  205. package/dist/types/QuoteTypes.js.map +1 -0
  206. package/dist/types/index.d.ts +1 -0
  207. package/dist/types/index.d.ts.map +1 -1
  208. package/dist/types/scopes/composer.d.ts +10 -0
  209. package/dist/types/scopes/composer.d.ts.map +1 -1
  210. package/dist/utils/getSelectionMessageId.d.ts +2 -0
  211. package/dist/utils/getSelectionMessageId.d.ts.map +1 -0
  212. package/dist/utils/getSelectionMessageId.js +21 -0
  213. package/dist/utils/getSelectionMessageId.js.map +1 -0
  214. package/dist/utils/smooth/useSmooth.js +1 -1
  215. package/dist/utils/smooth/useSmooth.js.map +1 -1
  216. package/dist/utils/useToolArgsFieldStatus.js +5 -5
  217. package/dist/utils/useToolArgsFieldStatus.js.map +1 -1
  218. package/package.json +7 -7
  219. package/src/client/ExternalThread.ts +12 -0
  220. package/src/client/NoOpComposerClient.tsx +4 -0
  221. package/src/context/providers/ChainOfThoughtByIndicesProvider.tsx +3 -2
  222. package/src/context/react/utils/ensureBinding.ts +1 -1
  223. package/src/hooks/useMessageQuote.ts +27 -0
  224. package/src/legacy-runtime/AssistantRuntimeProvider.tsx +1 -4
  225. package/src/legacy-runtime/client/ComposerRuntimeClient.ts +2 -0
  226. package/src/legacy-runtime/hooks/AssistantContext.ts +1 -1
  227. package/src/legacy-runtime/hooks/AttachmentContext.ts +1 -1
  228. package/src/legacy-runtime/hooks/ComposerContext.ts +6 -6
  229. package/src/legacy-runtime/hooks/MessageContext.ts +5 -5
  230. package/src/legacy-runtime/hooks/MessagePartContext.ts +1 -1
  231. package/src/legacy-runtime/hooks/ThreadContext.ts +5 -5
  232. package/src/legacy-runtime/hooks/ThreadListItemContext.ts +1 -1
  233. package/src/legacy-runtime/runtime/ComposerRuntime.ts +22 -0
  234. package/src/legacy-runtime/runtime-cores/assistant-transport/types.ts +5 -0
  235. package/src/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.tsx +41 -31
  236. package/src/legacy-runtime/runtime-cores/assistant-transport/useToolInvocations.ts +8 -8
  237. package/src/legacy-runtime/runtime-cores/composer/BaseComposerRuntimeCore.tsx +21 -2
  238. package/src/legacy-runtime/runtime-cores/core/ComposerRuntimeCore.tsx +4 -0
  239. package/src/legacy-runtime/runtime-cores/external-store/createMessageConverter.tsx +2 -2
  240. package/src/legacy-runtime/runtime-cores/local/useLocalRuntime.tsx +1 -3
  241. package/src/legacy-runtime/runtime-cores/remote-thread-list/EMPTY_THREAD_CORE.tsx +6 -0
  242. package/src/primitives/actionBar/ActionBarCopy.tsx +7 -6
  243. package/src/primitives/actionBar/ActionBarEdit.tsx +1 -1
  244. package/src/primitives/actionBar/ActionBarExportMarkdown.tsx +4 -3
  245. package/src/primitives/actionBar/ActionBarSpeak.tsx +4 -3
  246. package/src/primitives/actionBar/ActionBarStopSpeaking.tsx +1 -1
  247. package/src/primitives/actionBar/useActionBarFloatStatus.tsx +5 -5
  248. package/src/primitives/attachment/AttachmentName.tsx +1 -1
  249. package/src/primitives/attachment/AttachmentThumb.tsx +2 -2
  250. package/src/primitives/branchPicker/BranchPickerCount.tsx +1 -1
  251. package/src/primitives/branchPicker/BranchPickerNext.tsx +3 -3
  252. package/src/primitives/branchPicker/BranchPickerNumber.tsx +1 -1
  253. package/src/primitives/branchPicker/BranchPickerPrevious.tsx +3 -3
  254. package/src/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.tsx +1 -3
  255. package/src/primitives/chainOfThought/ChainOfThoughtParts.tsx +19 -11
  256. package/src/primitives/composer/ComposerAddAttachment.tsx +1 -1
  257. package/src/primitives/composer/ComposerAttachments.tsx +1 -1
  258. package/src/primitives/composer/ComposerCancel.tsx +1 -1
  259. package/src/primitives/composer/ComposerDictate.tsx +4 -4
  260. package/src/primitives/composer/ComposerDictationTranscript.tsx +1 -3
  261. package/src/primitives/composer/ComposerIf.tsx +4 -4
  262. package/src/primitives/composer/ComposerInput.tsx +57 -17
  263. package/src/primitives/composer/ComposerQuote.tsx +109 -0
  264. package/src/primitives/composer/ComposerStopDictation.tsx +1 -1
  265. package/src/primitives/composer/index.ts +3 -0
  266. package/src/primitives/error/ErrorMessage.tsx +4 -4
  267. package/src/primitives/index.ts +2 -0
  268. package/src/primitives/message/MessageAttachments.tsx +4 -4
  269. package/src/primitives/message/MessageError.tsx +3 -3
  270. package/src/primitives/message/MessageIf.tsx +3 -3
  271. package/src/primitives/message/MessageParts.tsx +156 -148
  272. package/src/primitives/message/MessagePartsGrouped.tsx +5 -5
  273. package/src/primitives/message/MessageRoot.tsx +6 -5
  274. package/src/primitives/messagePart/MessagePartInProgress.tsx +1 -3
  275. package/src/primitives/messagePart/useMessagePartData.tsx +3 -3
  276. package/src/primitives/messagePart/useMessagePartFile.tsx +3 -3
  277. package/src/primitives/messagePart/useMessagePartImage.tsx +3 -3
  278. package/src/primitives/messagePart/useMessagePartReasoning.tsx +3 -3
  279. package/src/primitives/messagePart/useMessagePartSource.tsx +3 -3
  280. package/src/primitives/messagePart/useMessagePartText.tsx +4 -3
  281. package/src/primitives/selectionToolbar/SelectionToolbarQuote.tsx +62 -0
  282. package/src/primitives/selectionToolbar/SelectionToolbarRoot.tsx +131 -0
  283. package/src/primitives/selectionToolbar/index.ts +8 -0
  284. package/src/primitives/suggestion/SuggestionDescription.tsx +1 -1
  285. package/src/primitives/suggestion/SuggestionTitle.tsx +1 -1
  286. package/src/primitives/suggestion/SuggestionTrigger.tsx +6 -3
  287. package/src/primitives/thread/ThreadEmpty.tsx +1 -1
  288. package/src/primitives/thread/ThreadIf.tsx +8 -8
  289. package/src/primitives/thread/ThreadMessages.tsx +3 -3
  290. package/src/primitives/thread/ThreadSuggestion.tsx +5 -2
  291. package/src/primitives/thread/ThreadSuggestions.tsx +1 -1
  292. package/src/primitives/thread/ThreadViewportSlack.tsx +5 -5
  293. package/src/primitives/threadList/ThreadListItems.tsx +2 -2
  294. package/src/primitives/threadList/ThreadListNew.tsx +1 -1
  295. package/src/primitives/threadListItem/ThreadListItemRoot.tsx +1 -1
  296. package/src/primitives/threadListItem/ThreadListItemTitle.tsx +1 -1
  297. package/src/types/QuoteTypes.ts +4 -0
  298. package/src/types/index.ts +2 -0
  299. package/src/types/scopes/composer.ts +12 -0
  300. package/src/utils/getSelectionMessageId.ts +20 -0
  301. package/src/utils/smooth/useSmooth.tsx +1 -1
  302. package/src/utils/useToolArgsFieldStatus.tsx +5 -5
  303. package/src/primitives/chainOfThought/CHAIN_OF_THOUGHT.spec.md +0 -68
@@ -2,7 +2,7 @@
2
2
  import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
3
3
  import { useAuiState } from "@assistant-ui/store";
4
4
  export const ThreadListItemPrimitiveTitle = ({ fallback }) => {
5
- const title = useAuiState(({ threadListItem }) => threadListItem.title);
5
+ const title = useAuiState((s) => s.threadListItem.title);
6
6
  return _jsx(_Fragment, { children: title || fallback });
7
7
  };
8
8
  ThreadListItemPrimitiveTitle.displayName = "ThreadListItemPrimitive.Title";
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadListItemTitle.js","sourceRoot":"","sources":["../../../src/primitives/threadListItem/ThreadListItemTitle.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQlD,MAAM,CAAC,MAAM,4BAA4B,GAErC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACnB,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACxE,OAAO,4BAAG,KAAK,IAAI,QAAQ,GAAI,CAAC;AAClC,CAAC,CAAC;AAEF,4BAA4B,CAAC,WAAW,GAAG,+BAA+B,CAAC"}
1
+ {"version":3,"file":"ThreadListItemTitle.js","sourceRoot":"","sources":["../../../src/primitives/threadListItem/ThreadListItemTitle.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQlD,MAAM,CAAC,MAAM,4BAA4B,GAErC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACnB,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACzD,OAAO,4BAAG,KAAK,IAAI,QAAQ,GAAI,CAAC;AAClC,CAAC,CAAC;AAEF,4BAA4B,CAAC,WAAW,GAAG,+BAA+B,CAAC"}
@@ -0,0 +1,5 @@
1
+ export type QuoteInfo = {
2
+ readonly text: string;
3
+ readonly messageId: string;
4
+ };
5
+ //# sourceMappingURL=QuoteTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuoteTypes.d.ts","sourceRoot":"","sources":["../../src/types/QuoteTypes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=QuoteTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuoteTypes.js","sourceRoot":"","sources":["../../src/types/QuoteTypes.ts"],"names":[],"mappings":""}
@@ -3,4 +3,5 @@ export type { AppendMessage, TextMessagePart, ReasoningMessagePart, SourceMessag
3
3
  export type { EmptyMessagePartComponent, EmptyMessagePartProps, TextMessagePartComponent, TextMessagePartProps, ReasoningMessagePartComponent, ReasoningMessagePartProps, SourceMessagePartComponent, SourceMessagePartProps, ImageMessagePartComponent, ImageMessagePartProps, FileMessagePartComponent, FileMessagePartProps, Unstable_AudioMessagePartComponent, Unstable_AudioMessagePartProps, ToolCallMessagePartComponent, ToolCallMessagePartProps, ReasoningGroupProps, ReasoningGroupComponent, } from "./MessagePartComponentTypes.js";
4
4
  export type { ThreadListItemStatus } from "../legacy-runtime/runtime/ThreadListItemRuntime.js";
5
5
  export type { Unsubscribe } from "./Unsubscribe.js";
6
+ export type { QuoteInfo } from "./QuoteTypes.js";
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,6BAA0B;AAE3B,YAAY,EACV,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,yBAAyB,EAEzB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,GACd,4BAAyB;AAE1B,YAAY,EACV,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,6BAA6B,EAC7B,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,kCAAkC,EAClC,8BAA8B,EAC9B,4BAA4B,EAC5B,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,GACxB,uCAAoC;AAGrC,YAAY,EAAE,oBAAoB,EAAE,2DAAwD;AAE5F,YAAY,EAAE,WAAW,EAAE,yBAAsB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,6BAA0B;AAE3B,YAAY,EACV,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,yBAAyB,EAEzB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,GACd,4BAAyB;AAE1B,YAAY,EACV,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,6BAA6B,EAC7B,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,kCAAkC,EAClC,8BAA8B,EAC9B,4BAA4B,EAC5B,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,GACxB,uCAAoC;AAGrC,YAAY,EAAE,oBAAoB,EAAE,2DAAwD;AAE5F,YAAY,EAAE,WAAW,EAAE,yBAAsB;AAEjD,YAAY,EAAE,SAAS,EAAE,wBAAqB"}
@@ -1,5 +1,6 @@
1
1
  import type { Attachment } from "../AttachmentTypes.js";
2
2
  import type { MessageRole, RunConfig } from "../AssistantTypes.js";
3
+ import type { QuoteInfo } from "../QuoteTypes.js";
3
4
  import type { AttachmentMethods } from "./attachment.js";
4
5
  import { DictationState } from "../../legacy-runtime/runtime-cores/index.js";
5
6
  export type ComposerState = {
@@ -17,6 +18,11 @@ export type ComposerState = {
17
18
  * Undefined when dictation is not active.
18
19
  */
19
20
  readonly dictation: DictationState | undefined;
21
+ /**
22
+ * The currently quoted text, if any.
23
+ * Undefined when no quote is set.
24
+ */
25
+ readonly quote: QuoteInfo | undefined;
20
26
  };
21
27
  export type ComposerMethods = {
22
28
  getState(): ComposerState;
@@ -43,6 +49,10 @@ export type ComposerMethods = {
43
49
  * Stop the current dictation session.
44
50
  */
45
51
  stopDictation(): void;
52
+ /**
53
+ * Set a quote for the next message. Pass undefined to clear.
54
+ */
55
+ setQuote(quote: QuoteInfo | undefined): void;
46
56
  };
47
57
  export type ComposerMeta = {
48
58
  source: "thread" | "message";
@@ -1 +1 @@
1
- {"version":3,"file":"composer.d.ts","sourceRoot":"","sources":["../../../src/types/scopes/composer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,8BAA2B;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,6BAA0B;AAEhE,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAqB;AACtD,OAAO,EAAE,cAAc,EAAE,oDAA2C;AAEpE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IAEjC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,cAAc,GAAG,SAAS,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,IAAI,aAAa,CAAC;IAC1B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IACzC,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,UAAU,CAAC,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,iBAAiB,CAAC;IAC5E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,IAAI,CAAC;IACb,MAAM,IAAI,IAAI,CAAC;IACf,SAAS,IAAI,IAAI,CAAC;IAElB;;;OAGG;IACH,cAAc,IAAI,IAAI,CAAC;IAEvB;;OAEG;IACH,aAAa,IAAI,IAAI,CAAC;CAIvB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,eAAe,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,wBAAwB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACpE,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;CACxB,CAAC"}
1
+ {"version":3,"file":"composer.d.ts","sourceRoot":"","sources":["../../../src/types/scopes/composer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,8BAA2B;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,6BAA0B;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,yBAAsB;AAE/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAqB;AACtD,OAAO,EAAE,cAAc,EAAE,oDAA2C;AAEpE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IAEjC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,cAAc,GAAG,SAAS,CAAC;IAE/C;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,IAAI,aAAa,CAAC;IAC1B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IACzC,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,UAAU,CAAC,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,iBAAiB,CAAC;IAC5E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,IAAI,CAAC;IACb,MAAM,IAAI,IAAI,CAAC;IACf,SAAS,IAAI,IAAI,CAAC;IAElB;;;OAGG;IACH,cAAc,IAAI,IAAI,CAAC;IAEvB;;OAEG;IACH,aAAa,IAAI,IAAI,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC;CAI9C,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,eAAe,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,wBAAwB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACpE,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;CACxB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const getSelectionMessageId: (selection: Selection) => string | null;
2
+ //# sourceMappingURL=getSelectionMessageId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSelectionMessageId.d.ts","sourceRoot":"","sources":["../../src/utils/getSelectionMessageId.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,qBAAqB,GAAI,WAAW,SAAS,KAAG,MAAM,GAAG,IASrE,CAAC"}
@@ -0,0 +1,21 @@
1
+ const findMessageId = (node) => {
2
+ let el = node instanceof HTMLElement ? node : (node?.parentElement ?? null);
3
+ while (el) {
4
+ const id = el.getAttribute("data-message-id");
5
+ if (id)
6
+ return id;
7
+ el = el.parentElement;
8
+ }
9
+ return null;
10
+ };
11
+ export const getSelectionMessageId = (selection) => {
12
+ const { anchorNode, focusNode } = selection;
13
+ if (!anchorNode || !focusNode)
14
+ return null;
15
+ const anchorId = findMessageId(anchorNode);
16
+ const focusId = findMessageId(focusNode);
17
+ if (!anchorId || anchorId !== focusId)
18
+ return null;
19
+ return anchorId;
20
+ };
21
+ //# sourceMappingURL=getSelectionMessageId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSelectionMessageId.js","sourceRoot":"","sources":["../../src/utils/getSelectionMessageId.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,CAAC,IAAiB,EAAiB,EAAE;IACzD,IAAI,EAAE,GAAG,IAAI,YAAY,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,aAAa,IAAI,IAAI,CAAC,CAAC;IAC5E,OAAO,EAAE,EAAE,CAAC;QACV,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;QAC9C,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC;QAClB,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC;IACxB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,SAAoB,EAAiB,EAAE;IAC3E,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;IAC5C,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE3C,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAEzC,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACnD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
@@ -55,7 +55,7 @@ const SMOOTH_STATUS = Object.freeze({
55
55
  });
56
56
  export const useSmooth = (state, smooth = false) => {
57
57
  const { text } = state;
58
- const id = useAuiState(({ message }) => message.id);
58
+ const id = useAuiState((s) => s.message.id);
59
59
  const idRef = useRef(id);
60
60
  const [displayedText, setDisplayedText] = useState(text);
61
61
  const smoothStatusStore = useSmoothStatusStore({ optional: true });
@@ -1 +1 @@
1
- {"version":3,"file":"useSmooth.js","sourceRoot":"","sources":["../../../src/utils/smooth/useSmooth.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useSmooth.js","sourceRoot":"","sources":["../../../src/utils/smooth/useSmooth.tsx"],"names":[],"mappings":"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"}
@@ -2,13 +2,13 @@ import { getPartialJsonObjectFieldState } from "assistant-stream/utils";
2
2
  import { useAuiState } from "@assistant-ui/store";
3
3
  const COMPLETE_STATUS = { type: "complete" };
4
4
  export const useToolArgsFieldStatus = (fieldPath) => {
5
- return useAuiState(({ part }) => {
6
- if (part.type !== "tool-call")
5
+ return useAuiState((s) => {
6
+ if (s.part.type !== "tool-call")
7
7
  throw new Error("useToolArgsFieldStatus can only be used inside tool-call message parts");
8
- const state = getPartialJsonObjectFieldState(part.args, fieldPath);
9
- if (state === "complete" || part.status?.type === "requires-action")
8
+ const state = getPartialJsonObjectFieldState(s.part.args, fieldPath);
9
+ if (state === "complete" || s.part.status?.type === "requires-action")
10
10
  return COMPLETE_STATUS;
11
- return part.status;
11
+ return s.part.status;
12
12
  });
13
13
  };
14
14
  //# sourceMappingURL=useToolArgsFieldStatus.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useToolArgsFieldStatus.js","sourceRoot":"","sources":["../../src/utils/useToolArgsFieldStatus.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,eAAe,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAE7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,SAA8B,EAAE,EAAE;IACvE,OAAO,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;YAC3B,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;QAEJ,MAAM,KAAK,GAAG,8BAA8B,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACnE,IAAI,KAAK,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,iBAAiB;YACjE,OAAO,eAAe,CAAC;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
1
+ {"version":3,"file":"useToolArgsFieldStatus.js","sourceRoot":"","sources":["../../src/utils/useToolArgsFieldStatus.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,eAAe,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAE7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,SAA8B,EAAE,EAAE;IACvE,OAAO,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE;QACvB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW;YAC7B,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;QAEJ,MAAM,KAAK,GAAG,8BAA8B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACrE,IAAI,KAAK,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,iBAAiB;YACnE,OAAO,eAAe,CAAC;QACzB,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@assistant-ui/react",
3
- "version": "0.12.8",
3
+ "version": "0.12.10",
4
4
  "description": "TypeScript/React library for AI Chat",
5
5
  "keywords": [
6
6
  "radix-ui",
@@ -49,9 +49,9 @@
49
49
  ],
50
50
  "sideEffects": false,
51
51
  "dependencies": {
52
- "assistant-cloud": "^0.1.16",
53
- "@assistant-ui/tap": "^0.4.4",
54
- "@assistant-ui/store": "^0.1.5",
52
+ "assistant-cloud": "^0.1.17",
53
+ "@assistant-ui/tap": "^0.4.6",
54
+ "@assistant-ui/store": "^0.1.6",
55
55
  "@radix-ui/primitive": "^1.1.3",
56
56
  "@radix-ui/react-compose-refs": "^1.1.2",
57
57
  "@radix-ui/react-context": "^1.1.3",
@@ -61,7 +61,7 @@
61
61
  "@radix-ui/react-slot": "^1.2.4",
62
62
  "@radix-ui/react-use-callback-ref": "^1.1.1",
63
63
  "@radix-ui/react-use-escape-keydown": "^1.1.1",
64
- "assistant-stream": "^0.3.1",
64
+ "assistant-stream": "^0.3.2",
65
65
  "nanoid": "^5.1.6",
66
66
  "react-textarea-autosize": "^8.5.9",
67
67
  "zod": "^4.3.6",
@@ -83,8 +83,8 @@
83
83
  },
84
84
  "devDependencies": {
85
85
  "@types/json-schema": "^7.0.15",
86
- "@types/node": "^25.2.0",
87
- "@types/react": "^19.2.10",
86
+ "@types/node": "^25.2.1",
87
+ "@types/react": "^19.2.13",
88
88
  "@types/react-dom": "^19.2.3",
89
89
  "react": "^19.2.4",
90
90
  "react-dom": "^19.2.4",
@@ -243,6 +243,9 @@ const ComposerClientResource = resource(
243
243
  const [role, setRole] = tapState<"user" | "assistant" | "system">("user");
244
244
  const [runConfig, setRunConfig] = tapState<Record<string, unknown>>({});
245
245
  const [attachments, setAttachments] = tapState<readonly Attachment[]>([]);
246
+ const [quote, setQuote] = tapState<
247
+ { readonly text: string; readonly messageId: string } | undefined
248
+ >(undefined);
246
249
 
247
250
  // Update composer values when editing begins
248
251
  const updateFromMessage = tapEffectEvent(() => {
@@ -295,6 +298,7 @@ const ComposerClientResource = resource(
295
298
  isEmpty: !text.trim() && !attachments.length,
296
299
  type,
297
300
  dictation: undefined,
301
+ quote,
298
302
  }),
299
303
  [
300
304
  text,
@@ -305,6 +309,7 @@ const ComposerClientResource = resource(
305
309
  canCancel,
306
310
  type,
307
311
  attachments.length,
312
+ quote,
308
313
  ],
309
314
  );
310
315
 
@@ -341,18 +346,24 @@ const ComposerClientResource = resource(
341
346
  setRole("user");
342
347
  setRunConfig({});
343
348
  setAttachments([]);
349
+ setQuote(undefined);
344
350
  },
345
351
  send: () => {
352
+ const currentQuote = quote;
346
353
  const message = {
347
354
  role,
348
355
  content: text ? [{ type: "text" as const, text }] : [],
349
356
  attachments: attachments as any,
350
357
  createdAt: new Date(),
351
358
  runConfig,
359
+ metadata: {
360
+ custom: { ...(currentQuote ? { quote: currentQuote } : {}) },
361
+ },
352
362
  };
353
363
  onSend?.(message);
354
364
  setText("");
355
365
  setAttachments([]);
366
+ setQuote(undefined);
356
367
  },
357
368
  cancel: onCancel,
358
369
  beginEdit: () => {
@@ -360,6 +371,7 @@ const ComposerClientResource = resource(
360
371
  },
361
372
  startDictation: () => {},
362
373
  stopDictation: () => {},
374
+ setQuote,
363
375
  },
364
376
  };
365
377
  },
@@ -17,6 +17,7 @@ export const NoOpComposerClient = resource(
17
17
  canCancel: false,
18
18
  type: type,
19
19
  dictation: undefined,
20
+ quote: undefined,
20
21
  };
21
22
  }, [type]);
22
23
 
@@ -60,6 +61,9 @@ export const NoOpComposerClient = resource(
60
61
  beginEdit: () => {
61
62
  throw new Error("Not supported");
62
63
  },
64
+ setQuote: () => {
65
+ throw new Error("Not supported");
66
+ },
63
67
  },
64
68
  };
65
69
  },
@@ -11,8 +11,9 @@ export const ChainOfThoughtByIndicesProvider: FC<
11
11
  endIndex: number;
12
12
  }>
13
13
  > = ({ startIndex, endIndex, children }) => {
14
- const parts = useAuiState(({ message }) =>
15
- message.parts.slice(startIndex, endIndex + 1),
14
+ const parts = useAuiState((s) => s.message.parts).slice(
15
+ startIndex,
16
+ endIndex + 1,
16
17
  ) as ChainOfThoughtPart[];
17
18
 
18
19
  const parentAui = useAui();
@@ -40,7 +40,7 @@ export const ensureBinding = (r: unknown) => {
40
40
  runtime.__internal_bindMethods?.();
41
41
  runtime.__isBound = true;
42
42
 
43
- if (process.env["NODE_ENV"] !== "production") {
43
+ if (process.env.NODE_ENV !== "production") {
44
44
  debugVerifyPrototype(runtime, Object.getPrototypeOf(runtime));
45
45
  }
46
46
  };
@@ -0,0 +1,27 @@
1
+ "use client";
2
+
3
+ import { useAuiState } from "@assistant-ui/store";
4
+ import type { QuoteInfo } from "../types/QuoteTypes";
5
+
6
+ /**
7
+ * Hook that returns the quote info for the current message, if any.
8
+ *
9
+ * Reads from `message.metadata.custom.quote`.
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * function QuoteBlock() {
14
+ * const quote = useMessageQuote();
15
+ * if (!quote) return null;
16
+ * return <blockquote>{quote.text}</blockquote>;
17
+ * }
18
+ * ```
19
+ */
20
+ export const useMessageQuote = (): QuoteInfo | undefined => {
21
+ return useAuiState(
22
+ (s) =>
23
+ (s.message.metadata?.custom as Record<string, unknown>)?.quote as
24
+ | QuoteInfo
25
+ | undefined,
26
+ );
27
+ };
@@ -32,10 +32,7 @@ export const AssistantRuntimeProviderImpl: FC<
32
32
  const aui = useAui({ threads: RuntimeAdapter(runtime) }, { parent: parent });
33
33
 
34
34
  useEffect(() => {
35
- if (
36
- typeof process === "undefined" ||
37
- process.env["NODE_ENV"] === "production"
38
- )
35
+ if (typeof process === "undefined" || process.env.NODE_ENV === "production")
39
36
  return;
40
37
  return DevToolsProviderApi.register(aui);
41
38
  }, [aui]);
@@ -100,6 +100,7 @@ export const ComposerClient = resource(
100
100
  isEmpty: runtimeState.isEmpty,
101
101
  type: runtimeState.type ?? "thread",
102
102
  dictation: runtimeState.dictation,
103
+ quote: runtimeState.quote,
103
104
  };
104
105
  }, [runtimeState, attachments.state]);
105
106
 
@@ -122,6 +123,7 @@ export const ComposerClient = resource(
122
123
  }),
123
124
  startDictation: runtime.startDictation,
124
125
  stopDictation: runtime.stopDictation,
126
+ setQuote: runtime.setQuote,
125
127
  attachment: (selector) => {
126
128
  if ("id" in selector) {
127
129
  return attachments.get({ key: selector.id });
@@ -62,6 +62,6 @@ const useThreadListRuntime = (opt: {
62
62
  }): ThreadListRuntime | null => useAssistantRuntime(opt)?.threads ?? null;
63
63
 
64
64
  /**
65
- * @deprecated Use `useAuiState(({ threads }) => threads)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
65
+ * @deprecated Use `useAuiState((s) => s.threads)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
66
66
  */
67
67
  export const useThreadList = createStateHookForRuntime(useThreadListRuntime);
@@ -84,7 +84,7 @@ export function useMessageAttachmentRuntime(options?: {
84
84
  }
85
85
 
86
86
  /**
87
- * @deprecated Use `useAuiState(({ attachment }) => attachment)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
87
+ * @deprecated Use `useAuiState((s) => s.attachment)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
88
88
  */
89
89
  export const useAttachment = createStateHookForRuntime(useAttachmentRuntime);
90
90
 
@@ -44,8 +44,8 @@ import { createStateHookForRuntime } from "../../context/react/utils/createState
44
44
  * // After:
45
45
  * function ComposerActions() {
46
46
  * const aui = useAui();
47
- * const canSend = useAuiState(({ composer }) => composer.canSend);
48
- * const canCancel = useAuiState(({ composer }) => composer.canCancel);
47
+ * const canSend = useAuiState((s) => s.composer.canSend);
48
+ * const canCancel = useAuiState((s) => s.composer.canCancel);
49
49
  * const handleSend = () => {
50
50
  * if (canSend) {
51
51
  * aui.composer().send();
@@ -87,7 +87,7 @@ export function useComposerRuntime(options?: {
87
87
  }
88
88
 
89
89
  /**
90
- * @deprecated Use `useAuiState(({ composer }) => composer)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
90
+ * @deprecated Use `useAuiState((s) => s.composer)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
91
91
  *
92
92
  * Hook to access the current composer state.
93
93
  *
@@ -115,9 +115,9 @@ export function useComposerRuntime(options?: {
115
115
  *
116
116
  * // After:
117
117
  * function ComposerStatus() {
118
- * const text = useAuiState(({ composer }) => composer.text);
119
- * const canSend = useAuiState(({ composer }) => composer.canSend);
120
- * const attachmentCount = useAuiState(({ composer }) => composer.attachments.length);
118
+ * const text = useAuiState((s) => s.composer.text);
119
+ * const canSend = useAuiState((s) => s.composer.canSend);
120
+ * const attachmentCount = useAuiState((s) => s.composer.attachments.length);
121
121
  * return (
122
122
  * <div>
123
123
  * Text: {text.length} chars,
@@ -76,7 +76,7 @@ export function useMessageRuntime(options?: {
76
76
  }
77
77
 
78
78
  /**
79
- * @deprecated Use `useAuiState(({ message }) => message)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
79
+ * @deprecated Use `useAuiState((s) => s.message)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
80
80
  *
81
81
  * Hook to access the current message state.
82
82
  *
@@ -102,9 +102,9 @@ export function useMessageRuntime(options?: {
102
102
  *
103
103
  * // After:
104
104
  * function MessageContent() {
105
- * const role = useAuiState(({ message }) => message.role);
106
- * const content = useAuiState(({ message }) => message.content);
107
- * const isLoading = useAuiState(({ message }) => message.status.type === "running");
105
+ * const role = useAuiState((s) => s.message.role);
106
+ * const content = useAuiState((s) => s.message.content);
107
+ * const isLoading = useAuiState((s) => s.message.status.type === "running");
108
108
  * return (
109
109
  * <div className={`message-${role}`}>
110
110
  * {isLoading ? "Loading..." : content.map(part => part.text).join("")}
@@ -120,7 +120,7 @@ const useEditComposerRuntime = (opt: {
120
120
  }): EditComposerRuntime | null => useMessageRuntime(opt)?.composer ?? null;
121
121
 
122
122
  /**
123
- * @deprecated Use `useAuiState(({ message }) => message.composer)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
123
+ * @deprecated Use `useAuiState((s) => s.message.composer)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
124
124
  */
125
125
  export const useEditComposer = createStateHookForRuntime(
126
126
  useEditComposerRuntime,
@@ -27,6 +27,6 @@ export function useMessagePartRuntime(options?: {
27
27
  }
28
28
 
29
29
  /**
30
- * @deprecated Use `useAuiState(({ part }) => part)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
30
+ * @deprecated Use `useAuiState((s) => s.part)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
31
31
  */
32
32
  export const useMessagePart = createStateHookForRuntime(useMessagePartRuntime);
@@ -58,7 +58,7 @@ export function useThreadRuntime(options?: { optional?: boolean | undefined }) {
58
58
  }
59
59
 
60
60
  /**
61
- * @deprecated Use `useAuiState(({ thread }) => thread)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
61
+ * @deprecated Use `useAuiState((s) => s.thread)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
62
62
  *
63
63
  * Hook to access the current thread state.
64
64
  *
@@ -79,8 +79,8 @@ export function useThreadRuntime(options?: { optional?: boolean | undefined }) {
79
79
  *
80
80
  * // After:
81
81
  * function ThreadStatus() {
82
- * const isRunning = useAuiState(({ thread }) => thread.isRunning);
83
- * const messageCount = useAuiState(({ thread }) => thread.messages.length);
82
+ * const isRunning = useAuiState((s) => s.thread.isRunning);
83
+ * const messageCount = useAuiState((s) => s.thread.messages.length);
84
84
  * return <div>Running: {isRunning}, Messages: {messageCount}</div>;
85
85
  * }
86
86
  * ```
@@ -92,14 +92,14 @@ const useThreadComposerRuntime = (opt: {
92
92
  }): ThreadComposerRuntime | null => useThreadRuntime(opt)?.composer ?? null;
93
93
 
94
94
  /**
95
- * @deprecated Use `useAuiState(({ thread }) => thread.composer)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
95
+ * @deprecated Use `useAuiState((s) => s.thread.composer)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
96
96
  */
97
97
  export const useThreadComposer = createStateHookForRuntime(
98
98
  useThreadComposerRuntime,
99
99
  );
100
100
 
101
101
  /**
102
- * @deprecated Use `useAuiState(({ thread }) => thread.modelContext)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
102
+ * @deprecated Use `useAuiState((s) => s.thread.modelContext)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
103
103
  */
104
104
  export function useThreadModelContext(options?: {
105
105
  optional?: false | undefined;
@@ -29,7 +29,7 @@ export function useThreadListItemRuntime(options?: {
29
29
  }
30
30
 
31
31
  /**
32
- * @deprecated Use `useAuiState(({ threadListItem }) => threadListItem)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
32
+ * @deprecated Use `useAuiState((s) => s.threadListItem)` instead. See migration guide: https://assistant-ui.com/docs/migrations/v0-12
33
33
  */
34
34
  export const useThreadListItem = createStateHookForRuntime(
35
35
  useThreadListItemRuntime,
@@ -10,6 +10,7 @@ import type {
10
10
  } from "../runtime-cores/core/ComposerRuntimeCore";
11
11
  import type { Unsubscribe } from "../../types";
12
12
  import type { MessageRole, RunConfig } from "../../types/AssistantTypes";
13
+ import type { QuoteInfo } from "../../types/QuoteTypes";
13
14
  import type {
14
15
  ThreadComposerRuntimeCoreBinding,
15
16
  EditComposerRuntimeCoreBinding,
@@ -51,6 +52,12 @@ type BaseComposerState = {
51
52
  * Undefined when dictation is not active.
52
53
  */
53
54
  readonly dictation: DictationState | undefined;
55
+
56
+ /**
57
+ * The currently quoted text, if any.
58
+ * Undefined when no quote is set.
59
+ */
60
+ readonly quote: QuoteInfo | undefined;
54
61
  };
55
62
 
56
63
  export type ThreadComposerState = BaseComposerState & {
@@ -83,6 +90,7 @@ const getThreadComposerState = (
83
90
  runConfig: runtime?.runConfig ?? EMPTY_OBJECT,
84
91
  attachmentAccept: runtime?.attachmentAccept ?? "",
85
92
  dictation: runtime?.dictation,
93
+ quote: runtime?.quote,
86
94
 
87
95
  value: runtime?.text ?? "",
88
96
  });
@@ -104,6 +112,7 @@ const getEditComposerState = (
104
112
  runConfig: runtime?.runConfig ?? EMPTY_OBJECT,
105
113
  attachmentAccept: runtime?.attachmentAccept ?? "",
106
114
  dictation: runtime?.dictation,
115
+ quote: runtime?.quote,
107
116
 
108
117
  value: runtime?.text ?? "",
109
118
  });
@@ -192,6 +201,12 @@ export type ComposerRuntime = {
192
201
  */
193
202
  stopDictation(): void;
194
203
 
204
+ /**
205
+ * Set a quote for the next message. Pass undefined to clear.
206
+ * @param quote The quote info to set, or undefined to clear.
207
+ */
208
+ setQuote(quote: QuoteInfo | undefined): void;
209
+
195
210
  /**
196
211
  * @deprecated This API is still under active development and might change without notice.
197
212
  */
@@ -224,6 +239,7 @@ export abstract class ComposerRuntimeImpl implements ComposerRuntime {
224
239
  this.getAttachmentByIndex = this.getAttachmentByIndex.bind(this);
225
240
  this.startDictation = this.startDictation.bind(this);
226
241
  this.stopDictation = this.stopDictation.bind(this);
242
+ this.setQuote = this.setQuote.bind(this);
227
243
  this.unstable_on = this.unstable_on.bind(this);
228
244
  }
229
245
 
@@ -289,6 +305,12 @@ export abstract class ComposerRuntimeImpl implements ComposerRuntime {
289
305
  core.stopDictation();
290
306
  }
291
307
 
308
+ public setQuote(quote: QuoteInfo | undefined) {
309
+ const core = this._core.getState();
310
+ if (!core) throw new Error("Composer is not available");
311
+ core.setQuote(quote);
312
+ }
313
+
292
314
  public subscribe(callback: () => void) {
293
315
  return this._core.subscribe(callback);
294
316
  }
@@ -31,6 +31,8 @@ export type AssistantMessage = {
31
31
  export type AddMessageCommand = {
32
32
  readonly type: "add-message";
33
33
  readonly message: UserMessage | AssistantMessage;
34
+ readonly parentId: string | null;
35
+ readonly sourceId: string | null;
34
36
  };
35
37
 
36
38
  export type AddToolResultCommand = {
@@ -109,6 +111,9 @@ export type AssistantTransportOptions<T> = {
109
111
  updateState: (updater: (state: T) => T) => void;
110
112
  error?: Error;
111
113
  }) => void;
114
+ capabilities?: {
115
+ edit?: boolean;
116
+ };
112
117
  adapters?: {
113
118
  attachments?: AttachmentAdapter | undefined;
114
119
  history?: ThreadHistoryAdapter | undefined;