@assistant-ui/react 0.12.17 → 0.12.20

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 (508) hide show
  1. package/README.md +1 -1
  2. package/dist/client/ExternalThread.d.ts +24 -3
  3. package/dist/client/ExternalThread.d.ts.map +1 -1
  4. package/dist/client/ExternalThread.js +107 -27
  5. package/dist/client/ExternalThread.js.map +1 -1
  6. package/dist/client/InMemoryThreadList.js +23 -30
  7. package/dist/client/InMemoryThreadList.js.map +1 -1
  8. package/dist/client/SingleThreadList.d.ts +12 -0
  9. package/dist/client/SingleThreadList.d.ts.map +1 -0
  10. package/dist/client/SingleThreadList.js +68 -0
  11. package/dist/client/SingleThreadList.js.map +1 -0
  12. package/dist/context/index.d.ts +19 -3
  13. package/dist/context/index.d.ts.map +1 -1
  14. package/dist/context/index.js +18 -3
  15. package/dist/context/index.js.map +1 -1
  16. package/dist/context/react/ThreadViewportContext.d.ts +1 -1
  17. package/dist/context/react/ThreadViewportContext.d.ts.map +1 -1
  18. package/dist/hooks/useMessageQuote.d.ts.map +1 -1
  19. package/dist/hooks/useMessageQuote.js +2 -1
  20. package/dist/hooks/useMessageQuote.js.map +1 -1
  21. package/dist/index.d.ts +96 -8
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +101 -8
  24. package/dist/index.js.map +1 -1
  25. package/dist/internal.d.ts +2 -1
  26. package/dist/internal.d.ts.map +1 -1
  27. package/dist/internal.js +2 -1
  28. package/dist/internal.js.map +1 -1
  29. package/dist/legacy-runtime/AssistantRuntimeProvider.js +1 -1
  30. package/dist/legacy-runtime/AssistantRuntimeProvider.js.map +1 -1
  31. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.d.ts +1 -1
  32. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.d.ts.map +1 -1
  33. package/dist/legacy-runtime/hooks/ThreadContext.d.ts +1 -1
  34. package/dist/legacy-runtime/hooks/ThreadContext.d.ts.map +1 -1
  35. package/dist/legacy-runtime/runtime-cores/assistant-transport/types.d.ts +1 -1
  36. package/dist/legacy-runtime/runtime-cores/assistant-transport/types.d.ts.map +1 -1
  37. package/dist/legacy-runtime/runtime-cores/assistant-transport/types.js.map +1 -1
  38. package/dist/primitives/actionBar/ActionBarSpeak.d.ts.map +1 -1
  39. package/dist/primitives/actionBar/ActionBarSpeak.js +4 -13
  40. package/dist/primitives/actionBar/ActionBarSpeak.js.map +1 -1
  41. package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts.map +1 -1
  42. package/dist/primitives/actionBar/ActionBarStopSpeaking.js +4 -9
  43. package/dist/primitives/actionBar/ActionBarStopSpeaking.js.map +1 -1
  44. package/dist/primitives/actionBar.d.ts +10 -0
  45. package/dist/primitives/actionBar.d.ts.map +1 -0
  46. package/dist/primitives/actionBar.js +10 -0
  47. package/dist/primitives/actionBar.js.map +1 -0
  48. package/dist/primitives/actionBarMore.d.ts +6 -0
  49. package/dist/primitives/actionBarMore.d.ts.map +1 -0
  50. package/dist/primitives/actionBarMore.js +6 -0
  51. package/dist/primitives/actionBarMore.js.map +1 -0
  52. package/dist/primitives/assistantModal.d.ts +5 -0
  53. package/dist/primitives/assistantModal.d.ts.map +1 -0
  54. package/dist/primitives/assistantModal.js +5 -0
  55. package/dist/primitives/assistantModal.js.map +1 -0
  56. package/dist/primitives/attachment/AttachmentThumb.js +1 -1
  57. package/dist/primitives/attachment/AttachmentThumb.js.map +1 -1
  58. package/dist/primitives/attachment.d.ts +5 -0
  59. package/dist/primitives/attachment.d.ts.map +1 -0
  60. package/dist/primitives/attachment.js +5 -0
  61. package/dist/primitives/attachment.js.map +1 -0
  62. package/dist/primitives/branchPicker/BranchPickerNext.d.ts.map +1 -1
  63. package/dist/primitives/branchPicker/BranchPickerNext.js +3 -17
  64. package/dist/primitives/branchPicker/BranchPickerNext.js.map +1 -1
  65. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts +0 -21
  66. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts.map +1 -1
  67. package/dist/primitives/branchPicker/BranchPickerPrevious.js +3 -38
  68. package/dist/primitives/branchPicker/BranchPickerPrevious.js.map +1 -1
  69. package/dist/primitives/branchPicker/BranchPickerRoot.js +1 -1
  70. package/dist/primitives/branchPicker/BranchPickerRoot.js.map +1 -1
  71. package/dist/primitives/branchPicker.d.ts +6 -0
  72. package/dist/primitives/branchPicker.d.ts.map +1 -0
  73. package/dist/primitives/branchPicker.js +6 -0
  74. package/dist/primitives/branchPicker.js.map +1 -0
  75. package/dist/primitives/chainOfThought.d.ts +4 -0
  76. package/dist/primitives/chainOfThought.d.ts.map +1 -0
  77. package/dist/primitives/chainOfThought.js +4 -0
  78. package/dist/primitives/chainOfThought.js.map +1 -0
  79. package/dist/primitives/composer/ComposerDictate.d.ts.map +1 -1
  80. package/dist/primitives/composer/ComposerDictate.js +3 -10
  81. package/dist/primitives/composer/ComposerDictate.js.map +1 -1
  82. package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
  83. package/dist/primitives/composer/ComposerInput.js +37 -7
  84. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  85. package/dist/primitives/composer/ComposerQueue.d.ts +2 -0
  86. package/dist/primitives/composer/ComposerQueue.d.ts.map +1 -0
  87. package/dist/primitives/composer/ComposerQueue.js +3 -0
  88. package/dist/primitives/composer/ComposerQueue.js.map +1 -0
  89. package/dist/primitives/composer/ComposerSend.d.ts.map +1 -1
  90. package/dist/primitives/composer/ComposerSend.js +3 -1
  91. package/dist/primitives/composer/ComposerSend.js.map +1 -1
  92. package/dist/primitives/composer/mention/ComposerMentionBack.d.ts +21 -0
  93. package/dist/primitives/composer/mention/ComposerMentionBack.d.ts.map +1 -0
  94. package/dist/primitives/composer/mention/ComposerMentionBack.js +28 -0
  95. package/dist/primitives/composer/mention/ComposerMentionBack.js.map +1 -0
  96. package/dist/primitives/composer/mention/ComposerMentionCategories.d.ts +42 -0
  97. package/dist/primitives/composer/mention/ComposerMentionCategories.d.ts.map +1 -0
  98. package/dist/primitives/composer/mention/ComposerMentionCategories.js +32 -0
  99. package/dist/primitives/composer/mention/ComposerMentionCategories.js.map +1 -0
  100. package/dist/primitives/composer/mention/ComposerMentionContext.d.ts +23 -0
  101. package/dist/primitives/composer/mention/ComposerMentionContext.d.ts.map +1 -0
  102. package/dist/primitives/composer/mention/ComposerMentionContext.js +66 -0
  103. package/dist/primitives/composer/mention/ComposerMentionContext.js.map +1 -0
  104. package/dist/primitives/composer/mention/ComposerMentionItems.d.ts +46 -0
  105. package/dist/primitives/composer/mention/ComposerMentionItems.d.ts.map +1 -0
  106. package/dist/primitives/composer/mention/ComposerMentionItems.js +30 -0
  107. package/dist/primitives/composer/mention/ComposerMentionItems.js.map +1 -0
  108. package/dist/primitives/composer/mention/ComposerMentionPopover.d.ts +24 -0
  109. package/dist/primitives/composer/mention/ComposerMentionPopover.d.ts.map +1 -0
  110. package/dist/primitives/composer/mention/ComposerMentionPopover.js +28 -0
  111. package/dist/primitives/composer/mention/ComposerMentionPopover.js.map +1 -0
  112. package/dist/primitives/composer/mention/MentionResource.d.ts +39 -0
  113. package/dist/primitives/composer/mention/MentionResource.d.ts.map +1 -0
  114. package/dist/primitives/composer/mention/MentionResource.js +230 -0
  115. package/dist/primitives/composer/mention/MentionResource.js.map +1 -0
  116. package/dist/primitives/composer/mention/detectMentionTrigger.d.ts +2 -0
  117. package/dist/primitives/composer/mention/detectMentionTrigger.d.ts.map +1 -0
  118. package/dist/primitives/composer/mention/detectMentionTrigger.js +26 -0
  119. package/dist/primitives/composer/mention/detectMentionTrigger.js.map +1 -0
  120. package/dist/primitives/composer/mention/index.d.ts +6 -0
  121. package/dist/primitives/composer/mention/index.d.ts.map +1 -0
  122. package/dist/primitives/composer/mention/index.js +6 -0
  123. package/dist/primitives/composer/mention/index.js.map +1 -0
  124. package/dist/primitives/composer.d.ts +26 -0
  125. package/dist/primitives/composer.d.ts.map +1 -0
  126. package/dist/primitives/composer.js +26 -0
  127. package/dist/primitives/composer.js.map +1 -0
  128. package/dist/primitives/error/ErrorMessage.d.ts.map +1 -1
  129. package/dist/primitives/error/ErrorMessage.js +2 -7
  130. package/dist/primitives/error/ErrorMessage.js.map +1 -1
  131. package/dist/primitives/error.d.ts +3 -0
  132. package/dist/primitives/error.d.ts.map +1 -0
  133. package/dist/primitives/error.js +3 -0
  134. package/dist/primitives/error.js.map +1 -0
  135. package/dist/primitives/message/MessageError.d.ts.map +1 -1
  136. package/dist/primitives/message/MessageError.js +3 -4
  137. package/dist/primitives/message/MessageError.js.map +1 -1
  138. package/dist/primitives/message/MessageParts.d.ts.map +1 -1
  139. package/dist/primitives/message/MessageParts.js +6 -1
  140. package/dist/primitives/message/MessageParts.js.map +1 -1
  141. package/dist/primitives/message/MessagePartsGrouped.d.ts +1 -1
  142. package/dist/primitives/message/MessagePartsGrouped.d.ts.map +1 -1
  143. package/dist/primitives/message/MessagePartsGrouped.js +2 -1
  144. package/dist/primitives/message/MessagePartsGrouped.js.map +1 -1
  145. package/dist/primitives/message.d.ts +11 -0
  146. package/dist/primitives/message.d.ts.map +1 -0
  147. package/dist/primitives/message.js +11 -0
  148. package/dist/primitives/message.js.map +1 -0
  149. package/dist/primitives/messagePart.d.ts +5 -0
  150. package/dist/primitives/messagePart.d.ts.map +1 -0
  151. package/dist/primitives/messagePart.js +5 -0
  152. package/dist/primitives/messagePart.js.map +1 -0
  153. package/dist/primitives/queueItem/QueueItemRemove.d.ts +19 -0
  154. package/dist/primitives/queueItem/QueueItemRemove.d.ts.map +1 -0
  155. package/dist/primitives/queueItem/QueueItemRemove.js +21 -0
  156. package/dist/primitives/queueItem/QueueItemRemove.js.map +1 -0
  157. package/dist/primitives/queueItem/QueueItemSteer.d.ts +19 -0
  158. package/dist/primitives/queueItem/QueueItemSteer.d.ts.map +1 -0
  159. package/dist/primitives/queueItem/QueueItemSteer.js +21 -0
  160. package/dist/primitives/queueItem/QueueItemSteer.js.map +1 -0
  161. package/dist/primitives/queueItem/QueueItemText.d.ts +18 -0
  162. package/dist/primitives/queueItem/QueueItemText.d.ts.map +1 -0
  163. package/dist/primitives/queueItem/QueueItemText.js +19 -0
  164. package/dist/primitives/queueItem/QueueItemText.js.map +1 -0
  165. package/dist/primitives/queueItem.d.ts +4 -0
  166. package/dist/primitives/queueItem.d.ts.map +1 -0
  167. package/dist/primitives/queueItem.js +4 -0
  168. package/dist/primitives/queueItem.js.map +1 -0
  169. package/dist/primitives/selectionToolbar.d.ts +3 -0
  170. package/dist/primitives/selectionToolbar.d.ts.map +1 -0
  171. package/dist/primitives/selectionToolbar.js +3 -0
  172. package/dist/primitives/selectionToolbar.js.map +1 -0
  173. package/dist/primitives/suggestion.d.ts +4 -0
  174. package/dist/primitives/suggestion.d.ts.map +1 -0
  175. package/dist/primitives/suggestion.js +4 -0
  176. package/dist/primitives/suggestion.js.map +1 -0
  177. package/dist/primitives/thread/ThreadRoot.d.ts +3 -1
  178. package/dist/primitives/thread/ThreadRoot.d.ts.map +1 -1
  179. package/dist/primitives/thread/ThreadRoot.js +3 -1
  180. package/dist/primitives/thread/ThreadRoot.js.map +1 -1
  181. package/dist/primitives/thread/ThreadSuggestion.d.ts.map +1 -1
  182. package/dist/primitives/thread/ThreadSuggestion.js +8 -29
  183. package/dist/primitives/thread/ThreadSuggestion.js.map +1 -1
  184. package/dist/primitives/thread/ThreadViewport.d.ts +3 -1
  185. package/dist/primitives/thread/ThreadViewport.d.ts.map +1 -1
  186. package/dist/primitives/thread/ThreadViewport.js +3 -1
  187. package/dist/primitives/thread/ThreadViewport.js.map +1 -1
  188. package/dist/primitives/thread/ThreadViewportFooter.d.ts +3 -1
  189. package/dist/primitives/thread/ThreadViewportFooter.d.ts.map +1 -1
  190. package/dist/primitives/thread/ThreadViewportFooter.js +3 -1
  191. package/dist/primitives/thread/ThreadViewportFooter.js.map +1 -1
  192. package/dist/primitives/thread.d.ts +13 -0
  193. package/dist/primitives/thread.d.ts.map +1 -0
  194. package/dist/primitives/thread.js +13 -0
  195. package/dist/primitives/thread.js.map +1 -0
  196. package/dist/primitives/threadList/ThreadListNew.d.ts.map +1 -1
  197. package/dist/primitives/threadList/ThreadListNew.js +4 -5
  198. package/dist/primitives/threadList/ThreadListNew.js.map +1 -1
  199. package/dist/primitives/threadList.d.ts +5 -0
  200. package/dist/primitives/threadList.d.ts.map +1 -0
  201. package/dist/primitives/threadList.js +5 -0
  202. package/dist/primitives/threadList.js.map +1 -0
  203. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts.map +1 -1
  204. package/dist/primitives/threadListItem/ThreadListItemArchive.js +3 -6
  205. package/dist/primitives/threadListItem/ThreadListItemArchive.js.map +1 -1
  206. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts.map +1 -1
  207. package/dist/primitives/threadListItem/ThreadListItemDelete.js +3 -6
  208. package/dist/primitives/threadListItem/ThreadListItemDelete.js.map +1 -1
  209. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts.map +1 -1
  210. package/dist/primitives/threadListItem/ThreadListItemTrigger.js +3 -6
  211. package/dist/primitives/threadListItem/ThreadListItemTrigger.js.map +1 -1
  212. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts.map +1 -1
  213. package/dist/primitives/threadListItem/ThreadListItemUnarchive.js +3 -6
  214. package/dist/primitives/threadListItem/ThreadListItemUnarchive.js.map +1 -1
  215. package/dist/primitives/threadListItem.d.ts +7 -0
  216. package/dist/primitives/threadListItem.d.ts.map +1 -0
  217. package/dist/primitives/threadListItem.js +7 -0
  218. package/dist/primitives/threadListItem.js.map +1 -0
  219. package/dist/primitives/threadListItemMore.d.ts +6 -0
  220. package/dist/primitives/threadListItemMore.d.ts.map +1 -0
  221. package/dist/primitives/threadListItemMore.js +6 -0
  222. package/dist/primitives/threadListItemMore.js.map +1 -0
  223. package/dist/unstable/useToolMentionAdapter.d.ts +42 -0
  224. package/dist/unstable/useToolMentionAdapter.d.ts.map +1 -0
  225. package/dist/unstable/useToolMentionAdapter.js +65 -0
  226. package/dist/unstable/useToolMentionAdapter.js.map +1 -0
  227. package/package.json +12 -12
  228. package/src/client/ExternalThread.ts +161 -32
  229. package/src/client/InMemoryThreadList.ts +24 -35
  230. package/src/client/SingleThreadList.ts +95 -0
  231. package/src/context/index.ts +67 -3
  232. package/src/context/react/ThreadViewportContext.ts +1 -1
  233. package/src/hooks/useMessageQuote.ts +3 -7
  234. package/src/index.ts +357 -8
  235. package/src/internal.ts +5 -1
  236. package/src/legacy-runtime/AssistantRuntimeProvider.tsx +1 -1
  237. package/src/legacy-runtime/cloud/useCloudThreadListRuntime.ts +1 -1
  238. package/src/legacy-runtime/hooks/MessageContext.ts +1 -1
  239. package/src/legacy-runtime/hooks/ThreadContext.ts +2 -2
  240. package/src/legacy-runtime/runtime-cores/assistant-transport/types.ts +4 -1
  241. package/src/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.ts +1 -1
  242. package/src/model-context/frame/SPEC_AssistantFrame.md +2 -2
  243. package/src/primitives/actionBar/ActionBarSpeak.ts +4 -17
  244. package/src/primitives/actionBar/ActionBarStopSpeaking.tsx +4 -12
  245. package/src/primitives/actionBar.ts +9 -0
  246. package/src/primitives/actionBarMore.ts +5 -0
  247. package/src/primitives/assistantModal.ts +4 -0
  248. package/src/primitives/attachment/AttachmentThumb.tsx +1 -1
  249. package/src/primitives/attachment.ts +4 -0
  250. package/src/primitives/branchPicker/BranchPickerNext.ts +3 -20
  251. package/src/primitives/branchPicker/BranchPickerPrevious.ts +3 -41
  252. package/src/primitives/branchPicker/BranchPickerRoot.tsx +1 -1
  253. package/src/primitives/branchPicker.ts +5 -0
  254. package/src/primitives/{chainOfThought/index.ts → chainOfThought.ts} +3 -3
  255. package/src/primitives/composer/ComposerDictate.ts +3 -15
  256. package/src/primitives/composer/ComposerInput.tsx +49 -5
  257. package/src/primitives/composer/ComposerQueue.tsx +3 -0
  258. package/src/primitives/composer/ComposerSend.ts +3 -1
  259. package/src/primitives/composer/mention/ComposerMentionBack.tsx +55 -0
  260. package/src/primitives/composer/mention/ComposerMentionCategories.tsx +104 -0
  261. package/src/primitives/composer/mention/ComposerMentionContext.tsx +141 -0
  262. package/src/primitives/composer/mention/ComposerMentionItems.tsx +104 -0
  263. package/src/primitives/composer/mention/ComposerMentionPopover.tsx +52 -0
  264. package/src/primitives/composer/mention/MentionResource.ts +328 -0
  265. package/src/primitives/composer/mention/detectMentionTrigger.test.ts +78 -0
  266. package/src/primitives/composer/mention/detectMentionTrigger.ts +37 -0
  267. package/src/primitives/composer/mention/index.ts +16 -0
  268. package/src/primitives/composer.ts +25 -0
  269. package/src/primitives/error/ErrorMessage.tsx +2 -7
  270. package/src/primitives/error.ts +2 -0
  271. package/src/primitives/message/MessageError.ts +3 -7
  272. package/src/primitives/message/MessageParts.tsx +11 -4
  273. package/src/primitives/message/MessagePartsGrouped.tsx +3 -5
  274. package/src/primitives/message.ts +13 -0
  275. package/src/primitives/messagePart.ts +4 -0
  276. package/src/primitives/queueItem/QueueItemRemove.ts +37 -0
  277. package/src/primitives/queueItem/QueueItemSteer.ts +37 -0
  278. package/src/primitives/queueItem/QueueItemText.tsx +37 -0
  279. package/src/primitives/queueItem.ts +3 -0
  280. package/src/primitives/{selectionToolbar/index.ts → selectionToolbar.ts} +2 -2
  281. package/src/primitives/suggestion.ts +3 -0
  282. package/src/primitives/thread/ThreadRoot.tsx +3 -1
  283. package/src/primitives/thread/ThreadSuggestion.ts +8 -30
  284. package/src/primitives/thread/ThreadViewport.tsx +3 -1
  285. package/src/primitives/thread/ThreadViewportFooter.tsx +3 -1
  286. package/src/primitives/thread.ts +15 -0
  287. package/src/primitives/threadList/ThreadListNew.tsx +4 -5
  288. package/src/primitives/threadList.ts +4 -0
  289. package/src/primitives/threadListItem/ThreadListItemArchive.ts +3 -6
  290. package/src/primitives/threadListItem/ThreadListItemDelete.ts +3 -6
  291. package/src/primitives/threadListItem/ThreadListItemTrigger.ts +3 -6
  292. package/src/primitives/threadListItem/ThreadListItemUnarchive.ts +3 -6
  293. package/src/primitives/threadListItem.ts +6 -0
  294. package/src/primitives/threadListItemMore.ts +5 -0
  295. package/src/unstable/useToolMentionAdapter.ts +114 -0
  296. package/dist/client/index.d.ts +0 -7
  297. package/dist/client/index.d.ts.map +0 -1
  298. package/dist/client/index.js +0 -10
  299. package/dist/client/index.js.map +0 -1
  300. package/dist/context/providers/index.d.ts +0 -10
  301. package/dist/context/providers/index.d.ts.map +0 -1
  302. package/dist/context/providers/index.js +0 -10
  303. package/dist/context/providers/index.js.map +0 -1
  304. package/dist/context/react/index.d.ts +0 -9
  305. package/dist/context/react/index.d.ts.map +0 -1
  306. package/dist/context/react/index.js +0 -10
  307. package/dist/context/react/index.js.map +0 -1
  308. package/dist/context/stores/index.d.ts +0 -2
  309. package/dist/context/stores/index.d.ts.map +0 -1
  310. package/dist/context/stores/index.js +0 -2
  311. package/dist/context/stores/index.js.map +0 -1
  312. package/dist/devtools/index.d.ts +0 -2
  313. package/dist/devtools/index.d.ts.map +0 -1
  314. package/dist/devtools/index.js +0 -2
  315. package/dist/devtools/index.js.map +0 -1
  316. package/dist/legacy-runtime/cloud/index.d.ts +0 -3
  317. package/dist/legacy-runtime/cloud/index.d.ts.map +0 -1
  318. package/dist/legacy-runtime/cloud/index.js +0 -3
  319. package/dist/legacy-runtime/cloud/index.js.map +0 -1
  320. package/dist/legacy-runtime/runtime/index.d.ts +0 -2
  321. package/dist/legacy-runtime/runtime/index.d.ts.map +0 -1
  322. package/dist/legacy-runtime/runtime/index.js +0 -2
  323. package/dist/legacy-runtime/runtime/index.js.map +0 -1
  324. package/dist/legacy-runtime/runtime-cores/adapters/attachment/index.d.ts +0 -4
  325. package/dist/legacy-runtime/runtime-cores/adapters/attachment/index.d.ts.map +0 -1
  326. package/dist/legacy-runtime/runtime-cores/adapters/attachment/index.js +0 -4
  327. package/dist/legacy-runtime/runtime-cores/adapters/attachment/index.js.map +0 -1
  328. package/dist/legacy-runtime/runtime-cores/adapters/feedback/index.d.ts +0 -2
  329. package/dist/legacy-runtime/runtime-cores/adapters/feedback/index.d.ts.map +0 -1
  330. package/dist/legacy-runtime/runtime-cores/adapters/feedback/index.js +0 -2
  331. package/dist/legacy-runtime/runtime-cores/adapters/feedback/index.js.map +0 -1
  332. package/dist/legacy-runtime/runtime-cores/adapters/index.d.ts +0 -7
  333. package/dist/legacy-runtime/runtime-cores/adapters/index.d.ts.map +0 -1
  334. package/dist/legacy-runtime/runtime-cores/adapters/index.js +0 -7
  335. package/dist/legacy-runtime/runtime-cores/adapters/index.js.map +0 -1
  336. package/dist/legacy-runtime/runtime-cores/adapters/speech/index.d.ts +0 -3
  337. package/dist/legacy-runtime/runtime-cores/adapters/speech/index.d.ts.map +0 -1
  338. package/dist/legacy-runtime/runtime-cores/adapters/speech/index.js +0 -2
  339. package/dist/legacy-runtime/runtime-cores/adapters/speech/index.js.map +0 -1
  340. package/dist/legacy-runtime/runtime-cores/adapters/suggestion/index.d.ts +0 -2
  341. package/dist/legacy-runtime/runtime-cores/adapters/suggestion/index.d.ts.map +0 -1
  342. package/dist/legacy-runtime/runtime-cores/adapters/suggestion/index.js +0 -2
  343. package/dist/legacy-runtime/runtime-cores/adapters/suggestion/index.js.map +0 -1
  344. package/dist/legacy-runtime/runtime-cores/adapters/thread-history/index.d.ts +0 -2
  345. package/dist/legacy-runtime/runtime-cores/adapters/thread-history/index.d.ts.map +0 -1
  346. package/dist/legacy-runtime/runtime-cores/adapters/thread-history/index.js +0 -2
  347. package/dist/legacy-runtime/runtime-cores/adapters/thread-history/index.js.map +0 -1
  348. package/dist/legacy-runtime/runtime-cores/assistant-transport/index.d.ts +0 -3
  349. package/dist/legacy-runtime/runtime-cores/assistant-transport/index.d.ts.map +0 -1
  350. package/dist/legacy-runtime/runtime-cores/assistant-transport/index.js +0 -2
  351. package/dist/legacy-runtime/runtime-cores/assistant-transport/index.js.map +0 -1
  352. package/dist/legacy-runtime/runtime-cores/core/index.d.ts +0 -2
  353. package/dist/legacy-runtime/runtime-cores/core/index.d.ts.map +0 -1
  354. package/dist/legacy-runtime/runtime-cores/core/index.js +0 -2
  355. package/dist/legacy-runtime/runtime-cores/core/index.js.map +0 -1
  356. package/dist/legacy-runtime/runtime-cores/external-store/index.d.ts +0 -7
  357. package/dist/legacy-runtime/runtime-cores/external-store/index.d.ts.map +0 -1
  358. package/dist/legacy-runtime/runtime-cores/external-store/index.js +0 -6
  359. package/dist/legacy-runtime/runtime-cores/external-store/index.js.map +0 -1
  360. package/dist/legacy-runtime/runtime-cores/index.d.ts +0 -9
  361. package/dist/legacy-runtime/runtime-cores/index.d.ts.map +0 -1
  362. package/dist/legacy-runtime/runtime-cores/index.js +0 -8
  363. package/dist/legacy-runtime/runtime-cores/index.js.map +0 -1
  364. package/dist/legacy-runtime/runtime-cores/local/index.d.ts +0 -8
  365. package/dist/legacy-runtime/runtime-cores/local/index.d.ts.map +0 -1
  366. package/dist/legacy-runtime/runtime-cores/local/index.js +0 -7
  367. package/dist/legacy-runtime/runtime-cores/local/index.js.map +0 -1
  368. package/dist/legacy-runtime/runtime-cores/remote-thread-list/index.d.ts +0 -5
  369. package/dist/legacy-runtime/runtime-cores/remote-thread-list/index.d.ts.map +0 -1
  370. package/dist/legacy-runtime/runtime-cores/remote-thread-list/index.js +0 -5
  371. package/dist/legacy-runtime/runtime-cores/remote-thread-list/index.js.map +0 -1
  372. package/dist/model-context/frame/index.d.ts +0 -6
  373. package/dist/model-context/frame/index.d.ts.map +0 -1
  374. package/dist/model-context/frame/index.js +0 -5
  375. package/dist/model-context/frame/index.js.map +0 -1
  376. package/dist/model-context/index.d.ts +0 -10
  377. package/dist/model-context/index.d.ts.map +0 -1
  378. package/dist/model-context/index.js +0 -11
  379. package/dist/model-context/index.js.map +0 -1
  380. package/dist/model-context/registry/index.d.ts +0 -3
  381. package/dist/model-context/registry/index.d.ts.map +0 -1
  382. package/dist/model-context/registry/index.js +0 -2
  383. package/dist/model-context/registry/index.js.map +0 -1
  384. package/dist/primitives/actionBar/index.d.ts +0 -10
  385. package/dist/primitives/actionBar/index.d.ts.map +0 -1
  386. package/dist/primitives/actionBar/index.js +0 -10
  387. package/dist/primitives/actionBar/index.js.map +0 -1
  388. package/dist/primitives/actionBarMore/index.d.ts +0 -6
  389. package/dist/primitives/actionBarMore/index.d.ts.map +0 -1
  390. package/dist/primitives/actionBarMore/index.js +0 -6
  391. package/dist/primitives/actionBarMore/index.js.map +0 -1
  392. package/dist/primitives/assistantModal/index.d.ts +0 -5
  393. package/dist/primitives/assistantModal/index.d.ts.map +0 -1
  394. package/dist/primitives/assistantModal/index.js +0 -5
  395. package/dist/primitives/assistantModal/index.js.map +0 -1
  396. package/dist/primitives/attachment/index.d.ts +0 -5
  397. package/dist/primitives/attachment/index.d.ts.map +0 -1
  398. package/dist/primitives/attachment/index.js +0 -5
  399. package/dist/primitives/attachment/index.js.map +0 -1
  400. package/dist/primitives/branchPicker/index.d.ts +0 -6
  401. package/dist/primitives/branchPicker/index.d.ts.map +0 -1
  402. package/dist/primitives/branchPicker/index.js +0 -6
  403. package/dist/primitives/branchPicker/index.js.map +0 -1
  404. package/dist/primitives/chainOfThought/index.d.ts +0 -4
  405. package/dist/primitives/chainOfThought/index.d.ts.map +0 -1
  406. package/dist/primitives/chainOfThought/index.js +0 -4
  407. package/dist/primitives/chainOfThought/index.js.map +0 -1
  408. package/dist/primitives/composer/index.d.ts +0 -16
  409. package/dist/primitives/composer/index.d.ts.map +0 -1
  410. package/dist/primitives/composer/index.js +0 -16
  411. package/dist/primitives/composer/index.js.map +0 -1
  412. package/dist/primitives/error/index.d.ts +0 -3
  413. package/dist/primitives/error/index.d.ts.map +0 -1
  414. package/dist/primitives/error/index.js +0 -3
  415. package/dist/primitives/error/index.js.map +0 -1
  416. package/dist/primitives/index.d.ts +0 -27
  417. package/dist/primitives/index.d.ts.map +0 -1
  418. package/dist/primitives/index.js +0 -27
  419. package/dist/primitives/index.js.map +0 -1
  420. package/dist/primitives/message/index.d.ts +0 -10
  421. package/dist/primitives/message/index.d.ts.map +0 -1
  422. package/dist/primitives/message/index.js +0 -10
  423. package/dist/primitives/message/index.js.map +0 -1
  424. package/dist/primitives/messagePart/index.d.ts +0 -4
  425. package/dist/primitives/messagePart/index.d.ts.map +0 -1
  426. package/dist/primitives/messagePart/index.js +0 -4
  427. package/dist/primitives/messagePart/index.js.map +0 -1
  428. package/dist/primitives/reasoning/index.d.ts +0 -2
  429. package/dist/primitives/reasoning/index.d.ts.map +0 -1
  430. package/dist/primitives/reasoning/index.js +0 -2
  431. package/dist/primitives/reasoning/index.js.map +0 -1
  432. package/dist/primitives/selectionToolbar/index.d.ts +0 -3
  433. package/dist/primitives/selectionToolbar/index.d.ts.map +0 -1
  434. package/dist/primitives/selectionToolbar/index.js +0 -3
  435. package/dist/primitives/selectionToolbar/index.js.map +0 -1
  436. package/dist/primitives/suggestion/index.d.ts +0 -4
  437. package/dist/primitives/suggestion/index.d.ts.map +0 -1
  438. package/dist/primitives/suggestion/index.js +0 -4
  439. package/dist/primitives/suggestion/index.js.map +0 -1
  440. package/dist/primitives/thread/index.d.ts +0 -13
  441. package/dist/primitives/thread/index.d.ts.map +0 -1
  442. package/dist/primitives/thread/index.js +0 -13
  443. package/dist/primitives/thread/index.js.map +0 -1
  444. package/dist/primitives/threadList/index.d.ts +0 -5
  445. package/dist/primitives/threadList/index.d.ts.map +0 -1
  446. package/dist/primitives/threadList/index.js +0 -5
  447. package/dist/primitives/threadList/index.js.map +0 -1
  448. package/dist/primitives/threadListItem/index.d.ts +0 -7
  449. package/dist/primitives/threadListItem/index.d.ts.map +0 -1
  450. package/dist/primitives/threadListItem/index.js +0 -7
  451. package/dist/primitives/threadListItem/index.js.map +0 -1
  452. package/dist/primitives/threadListItemMore/index.d.ts +0 -6
  453. package/dist/primitives/threadListItemMore/index.d.ts.map +0 -1
  454. package/dist/primitives/threadListItemMore/index.js +0 -6
  455. package/dist/primitives/threadListItemMore/index.js.map +0 -1
  456. package/dist/types/index.d.ts +0 -4
  457. package/dist/types/index.d.ts.map +0 -1
  458. package/dist/types/index.js +0 -2
  459. package/dist/types/index.js.map +0 -1
  460. package/dist/types/scopes/index.d.ts +0 -3
  461. package/dist/types/scopes/index.d.ts.map +0 -1
  462. package/dist/types/scopes/index.js +0 -2
  463. package/dist/types/scopes/index.js.map +0 -1
  464. package/dist/utils/smooth/index.d.ts +0 -3
  465. package/dist/utils/smooth/index.d.ts.map +0 -1
  466. package/dist/utils/smooth/index.js +0 -6
  467. package/dist/utils/smooth/index.js.map +0 -1
  468. package/src/client/index.ts +0 -18
  469. package/src/context/providers/index.ts +0 -15
  470. package/src/context/react/index.ts +0 -50
  471. package/src/context/stores/index.ts +0 -1
  472. package/src/devtools/index.ts +0 -1
  473. package/src/legacy-runtime/cloud/index.ts +0 -2
  474. package/src/legacy-runtime/runtime/index.ts +0 -25
  475. package/src/legacy-runtime/runtime-cores/adapters/attachment/index.ts +0 -10
  476. package/src/legacy-runtime/runtime-cores/adapters/feedback/index.ts +0 -2
  477. package/src/legacy-runtime/runtime-cores/adapters/index.ts +0 -6
  478. package/src/legacy-runtime/runtime-cores/adapters/speech/index.ts +0 -9
  479. package/src/legacy-runtime/runtime-cores/adapters/suggestion/index.ts +0 -2
  480. package/src/legacy-runtime/runtime-cores/adapters/thread-history/index.ts +0 -9
  481. package/src/legacy-runtime/runtime-cores/assistant-transport/index.ts +0 -11
  482. package/src/legacy-runtime/runtime-cores/core/index.ts +0 -7
  483. package/src/legacy-runtime/runtime-cores/external-store/index.ts +0 -21
  484. package/src/legacy-runtime/runtime-cores/index.ts +0 -10
  485. package/src/legacy-runtime/runtime-cores/local/index.ts +0 -18
  486. package/src/legacy-runtime/runtime-cores/remote-thread-list/index.ts +0 -7
  487. package/src/model-context/frame/index.ts +0 -10
  488. package/src/model-context/index.ts +0 -45
  489. package/src/model-context/registry/index.ts +0 -6
  490. package/src/primitives/actionBar/index.ts +0 -9
  491. package/src/primitives/actionBarMore/index.ts +0 -5
  492. package/src/primitives/assistantModal/index.ts +0 -4
  493. package/src/primitives/attachment/index.ts +0 -4
  494. package/src/primitives/branchPicker/index.ts +0 -5
  495. package/src/primitives/composer/index.ts +0 -15
  496. package/src/primitives/error/index.ts +0 -2
  497. package/src/primitives/index.ts +0 -27
  498. package/src/primitives/message/index.ts +0 -12
  499. package/src/primitives/messagePart/index.ts +0 -3
  500. package/src/primitives/reasoning/index.ts +0 -1
  501. package/src/primitives/suggestion/index.ts +0 -3
  502. package/src/primitives/thread/index.ts +0 -15
  503. package/src/primitives/threadList/index.ts +0 -4
  504. package/src/primitives/threadListItem/index.ts +0 -6
  505. package/src/primitives/threadListItemMore/index.ts +0 -5
  506. package/src/types/index.ts +0 -56
  507. package/src/types/scopes/index.ts +0 -59
  508. package/src/utils/smooth/index.ts +0 -6
@@ -6,6 +6,7 @@ import {
6
6
  tapEffectEvent,
7
7
  } from "@assistant-ui/tap";
8
8
  import {
9
+ type ClientElement,
9
10
  type ClientOutput,
10
11
  tapClientLookup,
11
12
  attachTransformScopes,
@@ -14,34 +15,60 @@ import {
14
15
  } from "@assistant-ui/store";
15
16
  import { withKey } from "@assistant-ui/tap";
16
17
  import type {
18
+ AppendMessage,
17
19
  Attachment,
18
20
  CreateAttachment,
19
21
  ThreadAssistantMessagePart,
20
22
  ThreadUserMessagePart,
21
23
  ThreadMessage,
22
24
  } from "@assistant-ui/core";
25
+ import type { QueueItemState } from "@assistant-ui/core/store";
26
+ import type { ComposerSendOptions } from "@assistant-ui/core/store";
23
27
  import { ModelContext, Suggestions } from "@assistant-ui/core/store";
24
28
  import { Tools, DataRenderers } from "@assistant-ui/core/react";
29
+ import { SingleThreadList } from "./SingleThreadList";
30
+
31
+ const EMPTY_QUEUE_ITEMS: readonly QueueItemState[] = [];
25
32
 
26
33
  export type ExternalThreadMessage = ThreadMessage & {
27
34
  id: string;
28
35
  };
29
36
 
37
+ export type ExternalThreadQueueAdapter = {
38
+ /** The current queue items. */
39
+ items: readonly QueueItemState[];
40
+ /** Called when a message is submitted via the composer. Receives the steer preference. */
41
+ enqueue: (message: AppendMessage, opts: { steer: boolean }) => void;
42
+ /** Called to promote an existing queue item (cancel current run, run this immediately). */
43
+ steer: (queueItemId: string) => void;
44
+ /** Called to remove an item from the queue. */
45
+ remove: (queueItemId: string) => void;
46
+ /** Called to clear all pending queue items, with the reason for clearing. */
47
+ clear: (reason: "edit" | "reload" | "cancel-run") => void;
48
+ };
49
+
30
50
  export type ExternalThreadProps = {
31
51
  messages: readonly ExternalThreadMessage[];
32
52
  isRunning?: boolean;
33
- onNew?: (message: any) => void;
34
- onEdit?: (message: any) => void;
53
+ /**
54
+ * Callback for new messages (non-queue runtimes).
55
+ * @note Unused when `queue` is provided — new messages are routed through `queue.enqueue` instead.
56
+ */
57
+ onNew?: (message: AppendMessage) => void;
58
+ onEdit?: (message: AppendMessage) => void;
35
59
  onReload?: (parentId: string | null) => void;
36
60
  onStartRun?: () => void;
37
61
  onCancel?: () => void;
62
+ /** Queue adapter for runtimes that support message queuing and steering. */
63
+ queue?: ExternalThreadQueueAdapter;
38
64
  };
39
65
 
40
66
  type MessageClientProps = {
41
67
  message: ExternalThreadMessage;
42
68
  index: number;
43
- onEdit?: (message: any) => void;
69
+ onEdit?: (message: AppendMessage) => void;
44
70
  onReload?: () => void;
71
+ queue?: ExternalThreadQueueAdapter | undefined;
45
72
  };
46
73
 
47
74
  // Message Client - minimal implementation
@@ -51,6 +78,7 @@ const MessageClient = resource(
51
78
  index,
52
79
  onEdit,
53
80
  onReload,
81
+ queue,
54
82
  }: MessageClientProps): ClientOutput<"message"> => {
55
83
  const [isCopied, setIsCopied] = tapState(false);
56
84
  const [isHovering, setIsHovering] = tapState(false);
@@ -86,7 +114,8 @@ const MessageClient = resource(
86
114
  setIsEditing(false);
87
115
  };
88
116
 
89
- const handleSendEdit = (msg: any) => {
117
+ const handleSendEdit = (msg: AppendMessage) => {
118
+ queue?.clear("edit");
90
119
  onEdit?.({
91
120
  ...msg,
92
121
  parentId: message.id,
@@ -104,6 +133,7 @@ const MessageClient = resource(
104
133
  onBeginEdit: handleBeginEdit,
105
134
  onSend: handleSendEdit,
106
135
  message,
136
+ queue,
107
137
  }),
108
138
  );
109
139
 
@@ -214,10 +244,29 @@ type ComposerClientResourceProps = {
214
244
  canCancel: boolean;
215
245
  onCancel: () => void;
216
246
  onBeginEdit?: () => void;
217
- onSend?: (message: any) => void;
247
+ onSend?: (message: AppendMessage) => void;
218
248
  message?: ExternalThreadMessage;
249
+ queue?: ExternalThreadQueueAdapter | undefined;
219
250
  };
220
251
 
252
+ const QueueItemClient = resource(
253
+ ({
254
+ item,
255
+ onSteer,
256
+ onRemove,
257
+ }: {
258
+ item: QueueItemState;
259
+ onSteer: () => void;
260
+ onRemove: () => void;
261
+ }): ClientOutput<"queueItem"> => {
262
+ return {
263
+ getState: () => item,
264
+ steer: onSteer,
265
+ remove: onRemove,
266
+ };
267
+ },
268
+ );
269
+
221
270
  // Composer Client - minimal implementation
222
271
  const ComposerClientResource = resource(
223
272
  ({
@@ -228,6 +277,7 @@ const ComposerClientResource = resource(
228
277
  onBeginEdit,
229
278
  onSend,
230
279
  message,
280
+ queue,
231
281
  }: ComposerClientResourceProps): ClientOutput<"composer"> => {
232
282
  const [text, setText] = tapState("");
233
283
  const [role, setRole] = tapState<"user" | "assistant" | "system">("user");
@@ -276,6 +326,22 @@ const ComposerClientResource = resource(
276
326
  [attachments],
277
327
  );
278
328
 
329
+ const queueItems = queue?.items ?? EMPTY_QUEUE_ITEMS;
330
+ const queueItemClients = tapClientLookup(
331
+ () =>
332
+ queueItems.map((item) =>
333
+ withKey(
334
+ item.id,
335
+ QueueItemClient({
336
+ item,
337
+ onSteer: () => queue?.steer(item.id),
338
+ onRemove: () => queue?.remove(item.id),
339
+ }),
340
+ ),
341
+ ),
342
+ [queueItems],
343
+ );
344
+
279
345
  const state = tapMemo(
280
346
  () => ({
281
347
  text,
@@ -289,6 +355,7 @@ const ComposerClientResource = resource(
289
355
  type,
290
356
  dictation: undefined,
291
357
  quote,
358
+ queue: queueItems,
292
359
  }),
293
360
  [
294
361
  text,
@@ -300,6 +367,7 @@ const ComposerClientResource = resource(
300
367
  type,
301
368
  attachments.length,
302
369
  quote,
370
+ queueItems,
303
371
  ],
304
372
  );
305
373
 
@@ -348,19 +416,25 @@ const ComposerClientResource = resource(
348
416
  setAttachments([]);
349
417
  setQuote(undefined);
350
418
  },
351
- send: () => {
419
+ send: (opts?: ComposerSendOptions) => {
352
420
  const currentQuote = quote;
353
- const message = {
421
+ const composedMessage: AppendMessage = {
354
422
  role,
355
423
  content: text ? [{ type: "text" as const, text }] : [],
356
424
  attachments: attachments as any,
357
425
  createdAt: new Date(),
426
+ parentId: null,
427
+ sourceId: null,
358
428
  runConfig,
359
429
  metadata: {
360
430
  custom: { ...(currentQuote ? { quote: currentQuote } : {}) },
361
431
  },
362
432
  };
363
- onSend?.(message);
433
+ if (queue) {
434
+ queue.enqueue(composedMessage, { steer: opts?.steer ?? false });
435
+ } else {
436
+ onSend?.(composedMessage);
437
+ }
364
438
  setText("");
365
439
  setAttachments([]);
366
440
  setQuote(undefined);
@@ -372,6 +446,9 @@ const ComposerClientResource = resource(
372
446
  startDictation: () => {},
373
447
  stopDictation: () => {},
374
448
  setQuote,
449
+ queueItem: (selector: { index: number }) => {
450
+ return queueItemClients.get(selector);
451
+ },
375
452
  };
376
453
  },
377
454
  );
@@ -386,12 +463,14 @@ export const ExternalThread = resource(
386
463
  onReload,
387
464
  onStartRun,
388
465
  onCancel,
466
+ queue,
389
467
  }: ExternalThreadProps): ClientOutput<"thread"> => {
390
468
  const handleReload = (messageId: string) => {
391
469
  const messageIndex = messages.findIndex((m) => m.id === messageId);
392
470
  if (messageIndex === -1) return;
393
471
 
394
472
  const parentId = messageIndex > 0 ? messages[messageIndex - 1]!.id : null;
473
+ queue?.clear("reload");
395
474
  onReload?.(parentId);
396
475
  };
397
476
 
@@ -402,18 +481,20 @@ export const ExternalThread = resource(
402
481
  message: msg,
403
482
  index,
404
483
  onReload: () => handleReload(msg.id),
484
+ queue,
405
485
  };
406
486
  if (onEdit) props.onEdit = onEdit;
407
487
  return withKey(msg.id, MessageClient(props));
408
488
  }),
409
- [messages, onEdit],
489
+ [messages, onEdit, queue],
410
490
  );
411
491
 
412
492
  const handleCancelRun = () => {
493
+ queue?.clear("cancel-run");
413
494
  onCancel?.();
414
495
  };
415
496
 
416
- const handleSendNew = (message: any) => {
497
+ const handleSendNew = (message: AppendMessage) => {
417
498
  onNew?.(message);
418
499
  };
419
500
 
@@ -424,9 +505,11 @@ export const ExternalThread = resource(
424
505
  canCancel: isRunning,
425
506
  onCancel: handleCancelRun,
426
507
  onSend: handleSendNew,
508
+ queue,
427
509
  }),
428
510
  );
429
511
 
512
+ const hasQueue = !!queue;
430
513
  const state = tapMemo(() => {
431
514
  const messageStates = messageClients.state.map((s, idx, arr) => ({
432
515
  ...s,
@@ -449,6 +532,7 @@ export const ExternalThread = resource(
449
532
  switchBranchDuringRun: false,
450
533
  unstable_copy: false,
451
534
  dictation: false,
535
+ queue: hasQueue,
452
536
  },
453
537
  messages: messageStates,
454
538
  state: {},
@@ -457,17 +541,51 @@ export const ExternalThread = resource(
457
541
  speech: undefined,
458
542
  composer: composerClient.state,
459
543
  };
460
- }, [messages, isRunning, messageClients.state, composerClient.state]);
544
+ }, [
545
+ messages,
546
+ isRunning,
547
+ hasQueue,
548
+ messageClients.state,
549
+ composerClient.state,
550
+ ]);
461
551
 
462
552
  return {
463
553
  getState: () => state,
464
554
  composer: () => composerClient.methods,
465
555
  append: (message) => {
466
- onNew?.(message);
556
+ const appendMessage: AppendMessage =
557
+ typeof message === "string"
558
+ ? {
559
+ createdAt: new Date(),
560
+ parentId: messages.at(-1)?.id ?? null,
561
+ sourceId: null,
562
+ runConfig: {},
563
+ role: "user",
564
+ content: [{ type: "text", text: message }],
565
+ attachments: [],
566
+ metadata: { custom: {} },
567
+ }
568
+ : {
569
+ createdAt: message.createdAt ?? new Date(),
570
+ parentId: message.parentId ?? messages.at(-1)?.id ?? null,
571
+ sourceId: message.sourceId ?? null,
572
+ role: message.role ?? "user",
573
+ content: message.content,
574
+ attachments: message.attachments ?? [],
575
+ metadata: message.metadata ?? { custom: {} },
576
+ runConfig: message.runConfig ?? {},
577
+ startRun: message.startRun,
578
+ };
579
+ if (queue) {
580
+ queue.enqueue(appendMessage, { steer: false });
581
+ } else {
582
+ onNew?.(appendMessage);
583
+ }
467
584
  },
468
585
  startRun: () => {
469
586
  onStartRun?.();
470
587
  },
588
+ resumeRun: () => {},
471
589
  unstable_resumeRun: () => {},
472
590
  cancelRun: handleCancelRun,
473
591
  getModelContext: () => ({ tools: {}, config: {} }),
@@ -488,29 +606,40 @@ export const ExternalThread = resource(
488
606
  );
489
607
 
490
608
  attachTransformScopes(ExternalThread, (scopes, parent) => {
491
- const result = {
492
- ...scopes,
493
- composer:
494
- scopes.composer ??
495
- Derived({
496
- source: "thread",
497
- query: {},
498
- get: (aui) => aui.thread().composer(),
499
- }),
500
- };
609
+ if (!scopes.threads && parent.threads.source === null) {
610
+ const threadElement = scopes.thread as ClientElement<"thread">;
611
+ scopes.threads = SingleThreadList({ thread: threadElement });
612
+ scopes.thread = Derived({
613
+ source: "threads",
614
+ query: { type: "main" },
615
+ get: (aui) => aui.threads().thread("main"),
616
+ });
617
+ }
618
+
619
+ if (!scopes.threadListItem && parent.threadListItem.source === null) {
620
+ scopes.threadListItem = Derived({
621
+ source: "threads",
622
+ query: { type: "main" },
623
+ get: (aui) => aui.threads().item("main"),
624
+ });
625
+ }
501
626
 
502
- if (!result.modelContext && parent.modelContext.source === null) {
503
- result.modelContext = ModelContext();
627
+ scopes.composer ??= Derived({
628
+ source: "thread",
629
+ query: {},
630
+ get: (aui) => aui.thread().composer(),
631
+ });
632
+
633
+ if (!scopes.modelContext && parent.modelContext.source === null) {
634
+ scopes.modelContext = ModelContext();
504
635
  }
505
- if (!result.tools && parent.tools.source === null) {
506
- result.tools = Tools({});
636
+ if (!scopes.tools && parent.tools.source === null) {
637
+ scopes.tools = Tools({});
507
638
  }
508
- if (!result.dataRenderers && parent.dataRenderers.source === null) {
509
- result.dataRenderers = DataRenderers();
639
+ if (!scopes.dataRenderers && parent.dataRenderers.source === null) {
640
+ scopes.dataRenderers = DataRenderers();
510
641
  }
511
- if (!result.suggestions && parent.suggestions.source === null) {
512
- result.suggestions = Suggestions();
642
+ if (!scopes.suggestions && parent.suggestions.source === null) {
643
+ scopes.suggestions = Suggestions();
513
644
  }
514
-
515
- return result;
516
645
  });
@@ -168,43 +168,32 @@ export const InMemoryThreadList = resource(
168
168
  );
169
169
 
170
170
  attachTransformScopes(InMemoryThreadList, (scopes, parent) => {
171
- const result = {
172
- ...scopes,
173
- thread:
174
- scopes.thread ??
175
- Derived({
176
- source: "threads",
177
- query: { type: "main" },
178
- get: (aui) => aui.threads().thread("main"),
179
- }),
180
- threadListItem:
181
- scopes.threadListItem ??
182
- Derived({
183
- source: "threads",
184
- query: { type: "main" },
185
- get: (aui) => aui.threads().item("main"),
186
- }),
187
- composer:
188
- scopes.composer ??
189
- Derived({
190
- source: "thread",
191
- query: {},
192
- get: (aui) => aui.threads().thread("main").composer(),
193
- }),
194
- };
195
-
196
- if (!result.modelContext && parent.modelContext.source === null) {
197
- result.modelContext = ModelContext();
171
+ scopes.thread ??= Derived({
172
+ source: "threads",
173
+ query: { type: "main" },
174
+ get: (aui) => aui.threads().thread("main"),
175
+ });
176
+ scopes.threadListItem ??= Derived({
177
+ source: "threads",
178
+ query: { type: "main" },
179
+ get: (aui) => aui.threads().item("main"),
180
+ });
181
+ scopes.composer ??= Derived({
182
+ source: "thread",
183
+ query: {},
184
+ get: (aui) => aui.threads().thread("main").composer(),
185
+ });
186
+
187
+ if (!scopes.modelContext && parent.modelContext.source === null) {
188
+ scopes.modelContext = ModelContext();
198
189
  }
199
- if (!result.tools && parent.tools.source === null) {
200
- result.tools = Tools({});
190
+ if (!scopes.tools && parent.tools.source === null) {
191
+ scopes.tools = Tools({});
201
192
  }
202
- if (!result.dataRenderers && parent.dataRenderers.source === null) {
203
- result.dataRenderers = DataRenderers();
193
+ if (!scopes.dataRenderers && parent.dataRenderers.source === null) {
194
+ scopes.dataRenderers = DataRenderers();
204
195
  }
205
- if (!result.suggestions && parent.suggestions.source === null) {
206
- result.suggestions = Suggestions();
196
+ if (!scopes.suggestions && parent.suggestions.source === null) {
197
+ scopes.suggestions = Suggestions();
207
198
  }
208
-
209
- return result;
210
199
  });
@@ -0,0 +1,95 @@
1
+ import { resource, tapMemo } from "@assistant-ui/tap";
2
+ import {
3
+ type ClientElement,
4
+ type ClientOutput,
5
+ tapClientResource,
6
+ } from "@assistant-ui/store";
7
+
8
+ const THREAD_ID = "default";
9
+
10
+ const SingleThreadListItem = resource((): ClientOutput<"threadListItem"> => {
11
+ return {
12
+ getState: () => ({
13
+ id: THREAD_ID,
14
+ remoteId: undefined,
15
+ externalId: undefined,
16
+ title: undefined,
17
+ status: "regular",
18
+ }),
19
+ switchTo: () => {},
20
+ rename: () => {},
21
+ archive: () => {},
22
+ unarchive: () => {},
23
+ delete: () => {},
24
+ generateTitle: () => {},
25
+ initialize: async () => ({ remoteId: THREAD_ID, externalId: undefined }),
26
+ detach: () => {},
27
+ };
28
+ });
29
+
30
+ type SingleThreadListProps = {
31
+ thread: ClientElement<"thread">;
32
+ };
33
+
34
+ /**
35
+ * A minimal threads scope that wraps a single thread.
36
+ * Automatically provided by ExternalThread when no threads scope exists.
37
+ * Mounts the provided thread resource element.
38
+ */
39
+ export const SingleThreadList = resource(
40
+ ({ thread }: SingleThreadListProps): ClientOutput<"threads"> => {
41
+ const itemClient = tapClientResource(SingleThreadListItem());
42
+ const threadClient = tapClientResource(thread);
43
+
44
+ const state = tapMemo(
45
+ () => ({
46
+ mainThreadId: THREAD_ID,
47
+ newThreadId: null,
48
+ isLoading: false,
49
+ threadIds: [THREAD_ID],
50
+ archivedThreadIds: [],
51
+ threadItems: [itemClient.state],
52
+ main: threadClient.state,
53
+ }),
54
+ [itemClient.state, threadClient.state],
55
+ );
56
+
57
+ return {
58
+ getState: () => state,
59
+ switchToThread: () => {
60
+ throw new Error("SingleThreadList does not support switchToThread");
61
+ },
62
+ switchToNewThread: () => {
63
+ throw new Error("SingleThreadList does not support switchToNewThread");
64
+ },
65
+ item: (selector) => {
66
+ if (
67
+ selector !== "main" &&
68
+ !(
69
+ typeof selector === "object" &&
70
+ "id" in selector &&
71
+ selector.id === THREAD_ID
72
+ ) &&
73
+ !(
74
+ typeof selector === "object" &&
75
+ "index" in selector &&
76
+ selector.index === 0
77
+ )
78
+ ) {
79
+ throw new Error(
80
+ `SingleThreadList: unknown item selector ${JSON.stringify(selector)}`,
81
+ );
82
+ }
83
+ return itemClient.methods;
84
+ },
85
+ thread: (selector) => {
86
+ if (selector !== "main" && selector !== THREAD_ID) {
87
+ throw new Error(
88
+ `SingleThreadList: unknown thread selector ${JSON.stringify(selector)}`,
89
+ );
90
+ }
91
+ return threadClient.methods;
92
+ },
93
+ };
94
+ },
95
+ );
@@ -1,3 +1,67 @@
1
- export * from "./providers";
2
- export * from "./stores";
3
- export * from "./react";
1
+ export { AssistantRuntimeProvider } from "../legacy-runtime/AssistantRuntimeProvider";
2
+ export {
3
+ ThreadListItemByIndexProvider,
4
+ ThreadListItemRuntimeProvider,
5
+ } from "./providers/ThreadListItemProvider";
6
+ export { MessageByIndexProvider } from "./providers/MessageByIndexProvider";
7
+ export { SuggestionByIndexProvider } from "./providers/SuggestionByIndexProvider";
8
+ export { PartByIndexProvider } from "./providers/PartByIndexProvider";
9
+ export {
10
+ MessageAttachmentByIndexProvider,
11
+ ComposerAttachmentByIndexProvider,
12
+ } from "./providers/AttachmentByIndexProvider";
13
+ export { TextMessagePartProvider } from "./providers/TextMessagePartProvider";
14
+ export { MessageProvider } from "./providers/MessageProvider";
15
+ export { ChainOfThoughtByIndicesProvider } from "./providers/ChainOfThoughtByIndicesProvider";
16
+ export { ReadonlyThreadProvider } from "@assistant-ui/core/react";
17
+
18
+ export type { ThreadViewportState } from "./stores/ThreadViewport";
19
+
20
+ export {
21
+ useThreadViewport,
22
+ useThreadViewportStore,
23
+ } from "./react/ThreadViewportContext";
24
+
25
+ export {
26
+ useAssistantRuntime,
27
+ useThreadList,
28
+ } from "../legacy-runtime/hooks/AssistantContext";
29
+
30
+ export {
31
+ useAttachmentRuntime,
32
+ useAttachment,
33
+ useThreadComposerAttachmentRuntime,
34
+ useThreadComposerAttachment,
35
+ useEditComposerAttachmentRuntime,
36
+ useEditComposerAttachment,
37
+ useMessageAttachment,
38
+ useMessageAttachmentRuntime,
39
+ } from "../legacy-runtime/hooks/AttachmentContext";
40
+
41
+ export {
42
+ useComposerRuntime,
43
+ useComposer,
44
+ } from "../legacy-runtime/hooks/ComposerContext";
45
+
46
+ export {
47
+ useMessageRuntime,
48
+ useEditComposer,
49
+ useMessage,
50
+ } from "../legacy-runtime/hooks/MessageContext";
51
+
52
+ export {
53
+ useMessagePartRuntime,
54
+ useMessagePart,
55
+ } from "../legacy-runtime/hooks/MessagePartContext";
56
+
57
+ export {
58
+ useThreadRuntime,
59
+ useThread,
60
+ useThreadComposer,
61
+ useThreadModelContext,
62
+ } from "../legacy-runtime/hooks/ThreadContext";
63
+
64
+ export {
65
+ useThreadListItemRuntime,
66
+ useThreadListItem,
67
+ } from "../legacy-runtime/hooks/ThreadListItemContext";
@@ -5,7 +5,7 @@ import { ReadonlyStore } from "../ReadonlyStore";
5
5
  import { UseBoundStore } from "zustand";
6
6
  import { createContextHook } from "./utils/createContextHook";
7
7
  import { createContextStoreHook } from "./utils/createContextStoreHook";
8
- import { ThreadViewportState } from "../stores";
8
+ import { ThreadViewportState } from "../stores/ThreadViewport";
9
9
 
10
10
  export type ThreadViewportContextValue = {
11
11
  useThreadViewport: UseBoundStore<ReadonlyStore<ThreadViewportState>>;
@@ -1,7 +1,8 @@
1
1
  "use client";
2
2
 
3
- import { useAuiState } from "@assistant-ui/store";
4
3
  import type { QuoteInfo } from "@assistant-ui/core";
4
+ import { getMessageQuote } from "@assistant-ui/core/react";
5
+ import { useAuiState } from "@assistant-ui/store";
5
6
 
6
7
  /**
7
8
  * Hook that returns the quote info for the current message, if any.
@@ -18,10 +19,5 @@ import type { QuoteInfo } from "@assistant-ui/core";
18
19
  * ```
19
20
  */
20
21
  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
- );
22
+ return useAuiState(getMessageQuote);
27
23
  };