@assistant-ui/core 0.1.3 → 0.1.7

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 (603) hide show
  1. package/dist/adapters/attachment.d.ts +1 -1
  2. package/dist/adapters/attachment.d.ts.map +1 -1
  3. package/dist/adapters/feedback.d.ts +1 -1
  4. package/dist/adapters/feedback.d.ts.map +1 -1
  5. package/dist/adapters/speech.d.ts +1 -1
  6. package/dist/adapters/speech.d.ts.map +1 -1
  7. package/dist/adapters/suggestion.d.ts +1 -1
  8. package/dist/adapters/suggestion.d.ts.map +1 -1
  9. package/dist/index.d.ts +44 -5
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +14 -5
  12. package/dist/index.js.map +1 -1
  13. package/dist/internal.d.ts +5 -2
  14. package/dist/internal.d.ts.map +1 -1
  15. package/dist/internal.js +13 -2
  16. package/dist/internal.js.map +1 -1
  17. package/dist/model-context/frame/host.d.ts +1 -1
  18. package/dist/model-context/frame/host.d.ts.map +1 -1
  19. package/dist/model-context/frame/provider.d.ts +1 -1
  20. package/dist/model-context/frame/provider.d.ts.map +1 -1
  21. package/dist/model-context/registry.d.ts +1 -1
  22. package/dist/model-context/registry.d.ts.map +1 -1
  23. package/dist/model-context/types.d.ts +1 -1
  24. package/dist/model-context/types.d.ts.map +1 -1
  25. package/dist/react/AssistantRuntimeProvider.d.ts +9 -0
  26. package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -0
  27. package/dist/react/AssistantRuntimeProvider.js +7 -0
  28. package/dist/react/AssistantRuntimeProvider.js.map +1 -0
  29. package/dist/react/RuntimeAdapter.d.ts.map +1 -1
  30. package/dist/react/RuntimeAdapter.js +2 -1
  31. package/dist/react/RuntimeAdapter.js.map +1 -1
  32. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts +15 -0
  33. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -0
  34. package/dist/react/adapters/LocalStorageThreadListAdapter.js +154 -0
  35. package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -0
  36. package/dist/react/adapters/TitleGenerationAdapter.d.ts +6 -0
  37. package/dist/react/adapters/TitleGenerationAdapter.d.ts.map +1 -0
  38. package/dist/react/adapters/TitleGenerationAdapter.js +15 -0
  39. package/dist/react/adapters/TitleGenerationAdapter.js.map +1 -0
  40. package/dist/react/index.d.ts +67 -6
  41. package/dist/react/index.d.ts.map +1 -1
  42. package/dist/react/index.js +70 -5
  43. package/dist/react/index.js.map +1 -1
  44. package/dist/react/model-context/useInlineRender.d.ts +1 -1
  45. package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
  46. package/dist/react/primitive-hooks/useActionBarCopy.d.ts +10 -0
  47. package/dist/react/primitive-hooks/useActionBarCopy.d.ts.map +1 -0
  48. package/dist/react/primitive-hooks/useActionBarCopy.js +26 -0
  49. package/dist/react/primitive-hooks/useActionBarCopy.js.map +1 -0
  50. package/dist/react/primitive-hooks/useActionBarEdit.d.ts +5 -0
  51. package/dist/react/primitive-hooks/useActionBarEdit.d.ts.map +1 -0
  52. package/dist/react/primitive-hooks/useActionBarEdit.js +11 -0
  53. package/dist/react/primitive-hooks/useActionBarEdit.js.map +1 -0
  54. package/dist/react/primitive-hooks/useActionBarFeedback.d.ts +9 -0
  55. package/dist/react/primitive-hooks/useActionBarFeedback.d.ts.map +1 -0
  56. package/dist/react/primitive-hooks/useActionBarFeedback.js +19 -0
  57. package/dist/react/primitive-hooks/useActionBarFeedback.js.map +1 -0
  58. package/dist/react/primitive-hooks/useActionBarReload.d.ts +5 -0
  59. package/dist/react/primitive-hooks/useActionBarReload.d.ts.map +1 -0
  60. package/dist/react/primitive-hooks/useActionBarReload.js +13 -0
  61. package/dist/react/primitive-hooks/useActionBarReload.js.map +1 -0
  62. package/dist/react/primitive-hooks/useActionBarSpeak.d.ts +5 -0
  63. package/dist/react/primitive-hooks/useActionBarSpeak.d.ts.map +1 -0
  64. package/dist/react/primitive-hooks/useActionBarSpeak.js +15 -0
  65. package/dist/react/primitive-hooks/useActionBarSpeak.js.map +1 -0
  66. package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts +5 -0
  67. package/dist/react/primitive-hooks/useActionBarStopSpeaking.d.ts.map +1 -0
  68. package/dist/react/primitive-hooks/useActionBarStopSpeaking.js +11 -0
  69. package/dist/react/primitive-hooks/useActionBarStopSpeaking.js.map +1 -0
  70. package/dist/react/primitive-hooks/useBranchPickerNext.d.ts +5 -0
  71. package/dist/react/primitive-hooks/useBranchPickerNext.d.ts.map +1 -0
  72. package/dist/react/primitive-hooks/useBranchPickerNext.js +18 -0
  73. package/dist/react/primitive-hooks/useBranchPickerNext.js.map +1 -0
  74. package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts +5 -0
  75. package/dist/react/primitive-hooks/useBranchPickerPrevious.d.ts.map +1 -0
  76. package/dist/react/primitive-hooks/useBranchPickerPrevious.js +18 -0
  77. package/dist/react/primitive-hooks/useBranchPickerPrevious.js.map +1 -0
  78. package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts +6 -0
  79. package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts.map +1 -0
  80. package/dist/react/primitive-hooks/useComposerAddAttachment.js +11 -0
  81. package/dist/react/primitive-hooks/useComposerAddAttachment.js.map +1 -0
  82. package/dist/react/primitive-hooks/useComposerCancel.d.ts +5 -0
  83. package/dist/react/primitive-hooks/useComposerCancel.d.ts.map +1 -0
  84. package/dist/react/primitive-hooks/useComposerCancel.js +11 -0
  85. package/dist/react/primitive-hooks/useComposerCancel.js.map +1 -0
  86. package/dist/react/primitive-hooks/useComposerDictate.d.ts +5 -0
  87. package/dist/react/primitive-hooks/useComposerDictate.d.ts.map +1 -0
  88. package/dist/react/primitive-hooks/useComposerDictate.js +13 -0
  89. package/dist/react/primitive-hooks/useComposerDictate.js.map +1 -0
  90. package/dist/react/primitive-hooks/useComposerSend.d.ts +5 -0
  91. package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -0
  92. package/dist/react/primitive-hooks/useComposerSend.js +11 -0
  93. package/dist/react/primitive-hooks/useComposerSend.js.map +1 -0
  94. package/dist/react/primitive-hooks/useEditComposerCancel.d.ts +4 -0
  95. package/dist/react/primitive-hooks/useEditComposerCancel.d.ts.map +1 -0
  96. package/dist/react/primitive-hooks/useEditComposerCancel.js +10 -0
  97. package/dist/react/primitive-hooks/useEditComposerCancel.js.map +1 -0
  98. package/dist/react/primitive-hooks/useEditComposerSend.d.ts +5 -0
  99. package/dist/react/primitive-hooks/useEditComposerSend.d.ts.map +1 -0
  100. package/dist/react/primitive-hooks/useEditComposerSend.js +11 -0
  101. package/dist/react/primitive-hooks/useEditComposerSend.js.map +1 -0
  102. package/dist/react/primitive-hooks/useMessageBranching.d.ts +7 -0
  103. package/dist/react/primitive-hooks/useMessageBranching.d.ts.map +1 -0
  104. package/dist/react/primitive-hooks/useMessageBranching.js +15 -0
  105. package/dist/react/primitive-hooks/useMessageBranching.js.map +1 -0
  106. package/dist/react/primitive-hooks/useMessageError.d.ts +2 -0
  107. package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -0
  108. package/dist/react/primitive-hooks/useMessageError.js +8 -0
  109. package/dist/react/primitive-hooks/useMessageError.js.map +1 -0
  110. package/dist/react/primitive-hooks/useMessageReload.d.ts +5 -0
  111. package/dist/react/primitive-hooks/useMessageReload.d.ts.map +1 -0
  112. package/dist/react/primitive-hooks/useMessageReload.js +11 -0
  113. package/dist/react/primitive-hooks/useMessageReload.js.map +1 -0
  114. package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts +10 -0
  115. package/dist/react/primitive-hooks/useSuggestionTrigger.d.ts.map +1 -0
  116. package/dist/react/primitive-hooks/useSuggestionTrigger.js +32 -0
  117. package/dist/react/primitive-hooks/useSuggestionTrigger.js.map +1 -0
  118. package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts +2 -0
  119. package/dist/react/primitive-hooks/useThreadIsEmpty.d.ts.map +1 -0
  120. package/dist/react/primitive-hooks/useThreadIsEmpty.js +5 -0
  121. package/dist/react/primitive-hooks/useThreadIsEmpty.js.map +1 -0
  122. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts +2 -0
  123. package/dist/react/primitive-hooks/useThreadIsRunning.d.ts.map +1 -0
  124. package/dist/react/primitive-hooks/useThreadIsRunning.js +5 -0
  125. package/dist/react/primitive-hooks/useThreadIsRunning.js.map +1 -0
  126. package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts +4 -0
  127. package/dist/react/primitive-hooks/useThreadListItemArchive.d.ts.map +1 -0
  128. package/dist/react/primitive-hooks/useThreadListItemArchive.js +10 -0
  129. package/dist/react/primitive-hooks/useThreadListItemArchive.js.map +1 -0
  130. package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts +4 -0
  131. package/dist/react/primitive-hooks/useThreadListItemDelete.d.ts.map +1 -0
  132. package/dist/react/primitive-hooks/useThreadListItemDelete.js +10 -0
  133. package/dist/react/primitive-hooks/useThreadListItemDelete.js.map +1 -0
  134. package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts +4 -0
  135. package/dist/react/primitive-hooks/useThreadListItemTrigger.d.ts.map +1 -0
  136. package/dist/react/primitive-hooks/useThreadListItemTrigger.js +10 -0
  137. package/dist/react/primitive-hooks/useThreadListItemTrigger.js.map +1 -0
  138. package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts +4 -0
  139. package/dist/react/primitive-hooks/useThreadListItemUnarchive.d.ts.map +1 -0
  140. package/dist/react/primitive-hooks/useThreadListItemUnarchive.js +10 -0
  141. package/dist/react/primitive-hooks/useThreadListItemUnarchive.js.map +1 -0
  142. package/dist/react/primitive-hooks/useThreadListNew.d.ts +4 -0
  143. package/dist/react/primitive-hooks/useThreadListNew.d.ts.map +1 -0
  144. package/dist/react/primitive-hooks/useThreadListNew.js +10 -0
  145. package/dist/react/primitive-hooks/useThreadListNew.js.map +1 -0
  146. package/dist/react/primitive-hooks/useThreadMessages.d.ts +3 -0
  147. package/dist/react/primitive-hooks/useThreadMessages.d.ts.map +1 -0
  148. package/dist/react/primitive-hooks/useThreadMessages.js +5 -0
  149. package/dist/react/primitive-hooks/useThreadMessages.js.map +1 -0
  150. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +23 -13
  151. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
  152. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js +16 -8
  153. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js.map +1 -1
  154. package/dist/react/primitives/composer/ComposerAttachments.d.ts +19 -8
  155. package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
  156. package/dist/react/primitives/composer/ComposerAttachments.js +19 -7
  157. package/dist/react/primitives/composer/ComposerAttachments.js.map +1 -1
  158. package/dist/react/primitives/message/MessageAttachments.d.ts +19 -8
  159. package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
  160. package/dist/react/primitives/message/MessageAttachments.js +19 -7
  161. package/dist/react/primitives/message/MessageAttachments.js.map +1 -1
  162. package/dist/react/primitives/message/MessageParts.d.ts +41 -5
  163. package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
  164. package/dist/react/primitives/message/MessageParts.js +113 -5
  165. package/dist/react/primitives/message/MessageParts.js.map +1 -1
  166. package/dist/react/primitives/message/MessageQuote.d.ts +10 -0
  167. package/dist/react/primitives/message/MessageQuote.d.ts.map +1 -0
  168. package/dist/react/primitives/message/MessageQuote.js +27 -0
  169. package/dist/react/primitives/message/MessageQuote.js.map +1 -0
  170. package/dist/react/primitives/part/PartMessages.d.ts +37 -0
  171. package/dist/react/primitives/part/PartMessages.d.ts.map +1 -0
  172. package/dist/react/primitives/part/PartMessages.js +49 -0
  173. package/dist/react/primitives/part/PartMessages.js.map +1 -0
  174. package/dist/react/primitives/thread/ThreadMessages.d.ts +54 -72
  175. package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
  176. package/dist/react/primitives/thread/ThreadMessages.js +32 -37
  177. package/dist/react/primitives/thread/ThreadMessages.js.map +1 -1
  178. package/dist/react/primitives/thread/ThreadSuggestions.d.ts +18 -10
  179. package/dist/react/primitives/thread/ThreadSuggestions.d.ts.map +1 -1
  180. package/dist/react/primitives/thread/ThreadSuggestions.js +25 -11
  181. package/dist/react/primitives/thread/ThreadSuggestions.js.map +1 -1
  182. package/dist/react/primitives/threadList/ThreadListItems.d.ts +18 -6
  183. package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
  184. package/dist/react/primitives/threadList/ThreadListItems.js +15 -7
  185. package/dist/react/primitives/threadList/ThreadListItems.js.map +1 -1
  186. package/dist/react/providers/ReadonlyThreadProvider.d.ts +9 -0
  187. package/dist/react/providers/ReadonlyThreadProvider.d.ts.map +1 -0
  188. package/dist/react/providers/ReadonlyThreadProvider.js +52 -0
  189. package/dist/react/providers/ReadonlyThreadProvider.js.map +1 -0
  190. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +1 -1
  191. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  192. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +1 -1
  193. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  194. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +1 -1
  195. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  196. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +1 -1
  197. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  198. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +1 -1
  199. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
  200. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +1 -1
  201. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
  202. package/dist/react/runtimes/cloud/auiV0.d.ts +1 -1
  203. package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
  204. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
  205. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js +2 -1
  206. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js.map +1 -1
  207. package/dist/react/runtimes/createMessageConverter.d.ts +1 -1
  208. package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
  209. package/dist/react/runtimes/external-message-converter.d.ts +2 -1
  210. package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
  211. package/dist/react/runtimes/useLocalRuntime.d.ts +28 -0
  212. package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -0
  213. package/dist/react/runtimes/useLocalRuntime.js +64 -0
  214. package/dist/react/runtimes/useLocalRuntime.js.map +1 -0
  215. package/dist/react/runtimes/useToolInvocations.d.ts +1 -1
  216. package/dist/react/runtimes/useToolInvocations.d.ts.map +1 -1
  217. package/dist/react/types/MessagePartComponentTypes.d.ts +3 -1
  218. package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
  219. package/dist/react/utils/getMessageQuote.d.ts +9 -0
  220. package/dist/react/utils/getMessageQuote.d.ts.map +1 -0
  221. package/dist/react/utils/getMessageQuote.js +7 -0
  222. package/dist/react/utils/getMessageQuote.js.map +1 -0
  223. package/dist/runtime/api/assistant-runtime.d.ts +2 -2
  224. package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
  225. package/dist/runtime/api/attachment-runtime.d.ts +2 -1
  226. package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
  227. package/dist/runtime/api/attachment-runtime.js.map +1 -1
  228. package/dist/runtime/api/bindings.d.ts +1 -1
  229. package/dist/runtime/api/bindings.d.ts.map +1 -1
  230. package/dist/runtime/api/composer-runtime.d.ts +5 -1
  231. package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
  232. package/dist/runtime/api/composer-runtime.js +2 -1
  233. package/dist/runtime/api/composer-runtime.js.map +1 -1
  234. package/dist/runtime/api/message-part-runtime.d.ts +3 -1
  235. package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
  236. package/dist/runtime/api/message-runtime.d.ts +3 -1
  237. package/dist/runtime/api/message-runtime.d.ts.map +1 -1
  238. package/dist/runtime/api/message-runtime.js +2 -1
  239. package/dist/runtime/api/message-runtime.js.map +1 -1
  240. package/dist/runtime/api/thread-list-item-runtime.d.ts +1 -1
  241. package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
  242. package/dist/runtime/api/thread-list-runtime.d.ts +1 -1
  243. package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
  244. package/dist/runtime/api/thread-list-runtime.js +2 -1
  245. package/dist/runtime/api/thread-list-runtime.js.map +1 -1
  246. package/dist/runtime/api/thread-runtime.d.ts +18 -10
  247. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  248. package/dist/runtime/api/thread-runtime.js +9 -3
  249. package/dist/runtime/api/thread-runtime.js.map +1 -1
  250. package/dist/runtime/base/base-assistant-runtime-core.d.ts +2 -2
  251. package/dist/runtime/base/base-assistant-runtime-core.d.ts.map +1 -1
  252. package/dist/runtime/base/base-composer-runtime-core.d.ts +5 -2
  253. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  254. package/dist/runtime/base/base-composer-runtime-core.js +1 -1
  255. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  256. package/dist/runtime/base/base-thread-runtime-core.d.ts +3 -2
  257. package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
  258. package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
  259. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +1 -1
  260. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
  261. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +1 -1
  262. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
  263. package/dist/runtime/interfaces/assistant-runtime-core.d.ts +2 -2
  264. package/dist/runtime/interfaces/assistant-runtime-core.d.ts.map +1 -1
  265. package/dist/runtime/interfaces/composer-runtime-core.d.ts +5 -1
  266. package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
  267. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +1 -1
  268. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
  269. package/dist/runtime/interfaces/thread-runtime-core.d.ts +4 -2
  270. package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
  271. package/dist/runtime/utils/auto-status.d.ts +1 -1
  272. package/dist/runtime/utils/auto-status.d.ts.map +1 -1
  273. package/dist/runtime/utils/chat-model-adapter.d.ts +3 -2
  274. package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -1
  275. package/dist/runtime/utils/external-store-message.d.ts +1 -1
  276. package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
  277. package/dist/runtime/utils/message-repository.d.ts +2 -1
  278. package/dist/runtime/utils/message-repository.d.ts.map +1 -1
  279. package/dist/runtime/utils/message-repository.js.map +1 -1
  280. package/dist/runtime/utils/thread-message-like.d.ts +3 -1
  281. package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
  282. package/dist/runtime/utils/thread-message-like.js.map +1 -1
  283. package/dist/runtimes/external-store/external-store-adapter.d.ts +1 -1
  284. package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
  285. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +1 -1
  286. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
  287. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +2 -2
  288. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  289. package/dist/runtimes/external-store/thread-message-converter.d.ts +1 -1
  290. package/dist/runtimes/external-store/thread-message-converter.d.ts.map +1 -1
  291. package/dist/runtimes/internal.d.ts +1 -0
  292. package/dist/runtimes/internal.d.ts.map +1 -1
  293. package/dist/runtimes/internal.js +2 -0
  294. package/dist/runtimes/internal.js.map +1 -1
  295. package/dist/runtimes/local/local-thread-list-runtime-core.d.ts +1 -1
  296. package/dist/runtimes/local/local-thread-list-runtime-core.d.ts.map +1 -1
  297. package/dist/runtimes/local/local-thread-list-runtime-core.js +1 -1
  298. package/dist/runtimes/local/local-thread-list-runtime-core.js.map +1 -1
  299. package/dist/runtimes/local/local-thread-runtime-core.d.ts +2 -2
  300. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  301. package/dist/runtimes/local/should-continue.d.ts +1 -1
  302. package/dist/runtimes/local/should-continue.d.ts.map +1 -1
  303. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +85 -0
  304. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -0
  305. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +169 -0
  306. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -0
  307. package/dist/runtimes/remote-thread-list/types.d.ts +1 -1
  308. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
  309. package/dist/store/clients/model-context-client.js +1 -1
  310. package/dist/store/clients/model-context-client.js.map +1 -1
  311. package/dist/store/clients/runtime-adapter.js +1 -1
  312. package/dist/store/clients/runtime-adapter.js.map +1 -1
  313. package/dist/store/clients/suggestions.d.ts.map +1 -1
  314. package/dist/store/clients/suggestions.js.map +1 -1
  315. package/dist/store/clients/thread-message-client.d.ts +1 -1
  316. package/dist/store/clients/thread-message-client.d.ts.map +1 -1
  317. package/dist/store/clients/thread-message-client.js.map +1 -1
  318. package/dist/store/index.d.ts +16 -2
  319. package/dist/store/index.d.ts.map +1 -1
  320. package/dist/store/index.js +5 -3
  321. package/dist/store/index.js.map +1 -1
  322. package/dist/store/internal.d.ts +7 -1
  323. package/dist/store/internal.d.ts.map +1 -1
  324. package/dist/store/internal.js +7 -1
  325. package/dist/store/internal.js.map +1 -1
  326. package/dist/store/runtime-clients/attachment-runtime-client.d.ts +1 -1
  327. package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
  328. package/dist/store/runtime-clients/composer-runtime-client.d.ts +1 -1
  329. package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
  330. package/dist/store/runtime-clients/message-part-runtime-client.d.ts +1 -1
  331. package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
  332. package/dist/store/runtime-clients/message-runtime-client.d.ts +1 -1
  333. package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
  334. package/dist/store/runtime-clients/tap-subscribable.d.ts +1 -1
  335. package/dist/store/runtime-clients/tap-subscribable.d.ts.map +1 -1
  336. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts +1 -1
  337. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
  338. package/dist/store/runtime-clients/thread-list-item-runtime-client.js.map +1 -1
  339. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts +2 -1
  340. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
  341. package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
  342. package/dist/store/runtime-clients/thread-runtime-client.d.ts +1 -1
  343. package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
  344. package/dist/store/runtime-clients/thread-runtime-client.js +2 -1
  345. package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
  346. package/dist/store/scopes/attachment.d.ts +2 -2
  347. package/dist/store/scopes/attachment.d.ts.map +1 -1
  348. package/dist/store/scopes/chain-of-thought.d.ts +2 -1
  349. package/dist/store/scopes/chain-of-thought.d.ts.map +1 -1
  350. package/dist/store/scopes/composer.d.ts +6 -2
  351. package/dist/store/scopes/composer.d.ts.map +1 -1
  352. package/dist/store/scopes/message.d.ts +4 -2
  353. package/dist/store/scopes/message.d.ts.map +1 -1
  354. package/dist/store/scopes/model-context.d.ts +2 -2
  355. package/dist/store/scopes/model-context.d.ts.map +1 -1
  356. package/dist/store/scopes/part.d.ts +3 -2
  357. package/dist/store/scopes/part.d.ts.map +1 -1
  358. package/dist/store/scopes/thread-list-item.d.ts +2 -1
  359. package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
  360. package/dist/store/scopes/thread.d.ts +9 -2
  361. package/dist/store/scopes/thread.d.ts.map +1 -1
  362. package/dist/store/scopes/threads.d.ts +1 -1
  363. package/dist/store/scopes/threads.d.ts.map +1 -1
  364. package/dist/subscribable/subscribable.d.ts +1 -1
  365. package/dist/subscribable/subscribable.d.ts.map +1 -1
  366. package/dist/utils/composite-context-provider.d.ts +1 -1
  367. package/dist/utils/composite-context-provider.d.ts.map +1 -1
  368. package/dist/utils/composite-context-provider.js +1 -1
  369. package/dist/utils/composite-context-provider.js.map +1 -1
  370. package/dist/utils/text.d.ts +1 -1
  371. package/dist/utils/text.d.ts.map +1 -1
  372. package/dist/utils/text.js.map +1 -1
  373. package/package.json +10 -10
  374. package/src/adapters/attachment.ts +1 -1
  375. package/src/adapters/feedback.ts +1 -1
  376. package/src/adapters/speech.ts +1 -1
  377. package/src/adapters/suggestion.ts +1 -1
  378. package/src/index.ts +254 -5
  379. package/src/internal.ts +37 -2
  380. package/src/model-context/frame/host.ts +1 -1
  381. package/src/model-context/frame/provider.ts +1 -1
  382. package/src/model-context/registry.ts +1 -1
  383. package/src/model-context/types.ts +1 -1
  384. package/src/react/AssistantRuntimeProvider.tsx +22 -0
  385. package/src/react/RuntimeAdapter.ts +2 -1
  386. package/src/react/adapters/LocalStorageThreadListAdapter.tsx +227 -0
  387. package/src/react/adapters/TitleGenerationAdapter.ts +20 -0
  388. package/src/react/client/DataRenderers.ts +2 -2
  389. package/src/react/client/Tools.ts +2 -2
  390. package/src/react/index.ts +167 -5
  391. package/src/react/model-context/useInlineRender.ts +1 -1
  392. package/src/react/primitive-hooks/useActionBarCopy.ts +38 -0
  393. package/src/react/primitive-hooks/useActionBarEdit.ts +13 -0
  394. package/src/react/primitive-hooks/useActionBarFeedback.ts +28 -0
  395. package/src/react/primitive-hooks/useActionBarReload.ts +18 -0
  396. package/src/react/primitive-hooks/useActionBarSpeak.ts +20 -0
  397. package/src/react/primitive-hooks/useActionBarStopSpeaking.ts +13 -0
  398. package/src/react/primitive-hooks/useBranchPickerNext.ts +19 -0
  399. package/src/react/primitive-hooks/useBranchPickerPrevious.ts +19 -0
  400. package/src/react/primitive-hooks/useComposerAddAttachment.ts +17 -0
  401. package/src/react/primitive-hooks/useComposerCancel.ts +13 -0
  402. package/src/react/primitive-hooks/useComposerDictate.ts +18 -0
  403. package/src/react/primitive-hooks/useComposerSend.ts +15 -0
  404. package/src/react/primitive-hooks/useEditComposerCancel.ts +12 -0
  405. package/src/react/primitive-hooks/useEditComposerSend.ts +13 -0
  406. package/src/react/primitive-hooks/useMessageBranching.ts +18 -0
  407. package/src/react/primitive-hooks/useMessageError.ts +10 -0
  408. package/src/react/primitive-hooks/useMessageReload.ts +13 -0
  409. package/src/react/primitive-hooks/useSuggestionTrigger.ts +43 -0
  410. package/src/react/primitive-hooks/useThreadIsEmpty.ts +5 -0
  411. package/src/react/primitive-hooks/useThreadIsRunning.ts +5 -0
  412. package/src/react/primitive-hooks/useThreadListItemArchive.ts +12 -0
  413. package/src/react/primitive-hooks/useThreadListItemDelete.ts +12 -0
  414. package/src/react/primitive-hooks/useThreadListItemTrigger.ts +12 -0
  415. package/src/react/primitive-hooks/useThreadListItemUnarchive.ts +12 -0
  416. package/src/react/primitive-hooks/useThreadListNew.ts +12 -0
  417. package/src/react/primitive-hooks/useThreadMessages.ts +6 -0
  418. package/src/react/primitives/chainOfThought/ChainOfThoughtParts.tsx +72 -28
  419. package/src/react/primitives/composer/ComposerAttachments.tsx +69 -30
  420. package/src/react/primitives/message/MessageAttachments.tsx +69 -30
  421. package/src/react/primitives/message/MessageParts.tsx +212 -24
  422. package/src/react/primitives/message/MessageQuote.tsx +37 -0
  423. package/src/react/primitives/part/PartMessages.tsx +75 -0
  424. package/src/react/primitives/thread/ThreadMessages.tsx +113 -99
  425. package/src/react/primitives/thread/ThreadSuggestions.tsx +72 -28
  426. package/src/react/primitives/threadList/ThreadListItems.tsx +69 -23
  427. package/src/react/providers/ReadonlyThreadProvider.tsx +84 -0
  428. package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +1 -1
  429. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +1 -1
  430. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +1 -1
  431. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +2 -2
  432. package/src/react/runtimes/cloud/auiV0.ts +1 -1
  433. package/src/react/runtimes/cloud/useCloudThreadListAdapter.tsx +3 -1
  434. package/src/react/runtimes/createMessageConverter.ts +1 -1
  435. package/src/react/runtimes/external-message-converter.ts +2 -2
  436. package/src/react/runtimes/useLocalRuntime.ts +101 -0
  437. package/src/react/runtimes/useToolInvocations.ts +1 -1
  438. package/src/react/types/MessagePartComponentTypes.ts +4 -0
  439. package/src/react/utils/getMessageQuote.ts +18 -0
  440. package/src/runtime/api/assistant-runtime.ts +2 -2
  441. package/src/runtime/api/attachment-runtime.ts +2 -1
  442. package/src/runtime/api/bindings.ts +1 -1
  443. package/src/runtime/api/composer-runtime.ts +9 -10
  444. package/src/runtime/api/message-part-runtime.ts +3 -3
  445. package/src/runtime/api/message-runtime.ts +5 -6
  446. package/src/runtime/api/thread-list-item-runtime.ts +1 -1
  447. package/src/runtime/api/thread-list-runtime.ts +5 -3
  448. package/src/runtime/api/thread-runtime.ts +19 -11
  449. package/src/runtime/base/base-assistant-runtime-core.ts +2 -2
  450. package/src/runtime/base/base-composer-runtime-core.ts +6 -7
  451. package/src/runtime/base/base-thread-runtime-core.ts +3 -2
  452. package/src/runtime/base/default-edit-composer-runtime-core.ts +1 -1
  453. package/src/runtime/base/default-thread-composer-runtime-core.ts +1 -1
  454. package/src/runtime/interfaces/assistant-runtime-core.ts +2 -2
  455. package/src/runtime/interfaces/composer-runtime-core.ts +5 -8
  456. package/src/runtime/interfaces/thread-list-runtime-core.ts +1 -1
  457. package/src/runtime/interfaces/thread-runtime-core.ts +4 -7
  458. package/src/runtime/utils/auto-status.ts +1 -1
  459. package/src/runtime/utils/chat-model-adapter.ts +7 -5
  460. package/src/runtime/utils/external-store-message.ts +1 -1
  461. package/src/runtime/utils/message-repository.ts +2 -1
  462. package/src/runtime/utils/thread-message-like.ts +3 -4
  463. package/src/runtimes/external-store/external-store-adapter.ts +1 -1
  464. package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +1 -1
  465. package/src/runtimes/external-store/external-store-thread-runtime-core.ts +2 -2
  466. package/src/runtimes/external-store/thread-message-converter.ts +1 -1
  467. package/src/runtimes/internal.ts +3 -0
  468. package/src/runtimes/local/local-thread-list-runtime-core.ts +1 -1
  469. package/src/runtimes/local/local-thread-runtime-core.ts +3 -3
  470. package/src/runtimes/local/should-continue.ts +1 -1
  471. package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +223 -0
  472. package/src/runtimes/remote-thread-list/types.ts +1 -1
  473. package/src/store/clients/chain-of-thought-client.ts +1 -1
  474. package/src/store/clients/model-context-client.ts +2 -2
  475. package/src/store/clients/no-op-composer-client.ts +1 -1
  476. package/src/store/clients/runtime-adapter.ts +1 -1
  477. package/src/store/clients/suggestions.ts +2 -1
  478. package/src/store/clients/thread-message-client.ts +4 -3
  479. package/src/store/index.ts +76 -2
  480. package/src/store/internal.ts +7 -1
  481. package/src/store/runtime-clients/attachment-runtime-client.ts +1 -1
  482. package/src/store/runtime-clients/composer-runtime-client.ts +4 -4
  483. package/src/store/runtime-clients/message-part-runtime-client.ts +1 -1
  484. package/src/store/runtime-clients/message-runtime-client.ts +2 -2
  485. package/src/store/runtime-clients/tap-subscribable.ts +1 -1
  486. package/src/store/runtime-clients/thread-list-item-runtime-client.ts +5 -2
  487. package/src/store/runtime-clients/thread-list-runtime-client.ts +3 -2
  488. package/src/store/runtime-clients/thread-runtime-client.ts +6 -4
  489. package/src/store/scopes/attachment.ts +2 -2
  490. package/src/store/scopes/chain-of-thought.ts +2 -1
  491. package/src/store/scopes/composer.ts +6 -8
  492. package/src/store/scopes/message.ts +4 -3
  493. package/src/store/scopes/model-context.ts +2 -2
  494. package/src/store/scopes/part.ts +3 -3
  495. package/src/store/scopes/thread-list-item.ts +2 -4
  496. package/src/store/scopes/thread.ts +11 -4
  497. package/src/store/scopes/threads.ts +1 -1
  498. package/src/subscribable/subscribable.ts +1 -1
  499. package/src/tests/MessageRepository.test.ts +2 -1
  500. package/src/tests/external-store-thread-runtime-core.test.ts +1 -1
  501. package/src/tests/no-unsafe-process-env.test.ts +58 -0
  502. package/src/utils/composite-context-provider.ts +1 -1
  503. package/src/utils/text.ts +2 -1
  504. package/dist/adapters/index.d.ts +0 -8
  505. package/dist/adapters/index.d.ts.map +0 -1
  506. package/dist/adapters/index.js +0 -3
  507. package/dist/adapters/index.js.map +0 -1
  508. package/dist/model-context/frame/index.d.ts +0 -5
  509. package/dist/model-context/frame/index.d.ts.map +0 -1
  510. package/dist/model-context/frame/index.js +0 -4
  511. package/dist/model-context/frame/index.js.map +0 -1
  512. package/dist/model-context/index.d.ts +0 -8
  513. package/dist/model-context/index.d.ts.map +0 -1
  514. package/dist/model-context/index.js +0 -9
  515. package/dist/model-context/index.js.map +0 -1
  516. package/dist/react/client/index.d.ts +0 -3
  517. package/dist/react/client/index.d.ts.map +0 -1
  518. package/dist/react/client/index.js +0 -3
  519. package/dist/react/client/index.js.map +0 -1
  520. package/dist/react/model-context/index.d.ts +0 -12
  521. package/dist/react/model-context/index.d.ts.map +0 -1
  522. package/dist/react/model-context/index.js +0 -11
  523. package/dist/react/model-context/index.js.map +0 -1
  524. package/dist/react/providers/index.d.ts +0 -10
  525. package/dist/react/providers/index.d.ts.map +0 -1
  526. package/dist/react/providers/index.js +0 -10
  527. package/dist/react/providers/index.js.map +0 -1
  528. package/dist/react/runtimes/cloud/index.d.ts +0 -4
  529. package/dist/react/runtimes/cloud/index.d.ts.map +0 -1
  530. package/dist/react/runtimes/cloud/index.js +0 -4
  531. package/dist/react/runtimes/cloud/index.js.map +0 -1
  532. package/dist/react/runtimes/index.d.ts +0 -10
  533. package/dist/react/runtimes/index.d.ts.map +0 -1
  534. package/dist/react/runtimes/index.js +0 -10
  535. package/dist/react/runtimes/index.js.map +0 -1
  536. package/dist/react/types/index.d.ts +0 -3
  537. package/dist/react/types/index.d.ts.map +0 -1
  538. package/dist/react/types/index.js +0 -2
  539. package/dist/react/types/index.js.map +0 -1
  540. package/dist/react/types/scopes/index.d.ts +0 -3
  541. package/dist/react/types/scopes/index.d.ts.map +0 -1
  542. package/dist/react/types/scopes/index.js +0 -2
  543. package/dist/react/types/scopes/index.js.map +0 -1
  544. package/dist/runtime/index.d.ts +0 -20
  545. package/dist/runtime/index.d.ts.map +0 -1
  546. package/dist/runtime/index.js +0 -7
  547. package/dist/runtime/index.js.map +0 -1
  548. package/dist/runtimes/external-store/index.d.ts +0 -8
  549. package/dist/runtimes/external-store/index.d.ts.map +0 -1
  550. package/dist/runtimes/external-store/index.js +0 -5
  551. package/dist/runtimes/external-store/index.js.map +0 -1
  552. package/dist/runtimes/index.d.ts +0 -6
  553. package/dist/runtimes/index.d.ts.map +0 -1
  554. package/dist/runtimes/index.js +0 -4
  555. package/dist/runtimes/index.js.map +0 -1
  556. package/dist/runtimes/local/index.d.ts +0 -7
  557. package/dist/runtimes/local/index.d.ts.map +0 -1
  558. package/dist/runtimes/local/index.js +0 -5
  559. package/dist/runtimes/local/index.js.map +0 -1
  560. package/dist/store/clients/index.d.ts +0 -6
  561. package/dist/store/clients/index.d.ts.map +0 -1
  562. package/dist/store/clients/index.js +0 -6
  563. package/dist/store/clients/index.js.map +0 -1
  564. package/dist/store/runtime-clients/index.d.ts +0 -8
  565. package/dist/store/runtime-clients/index.d.ts.map +0 -1
  566. package/dist/store/runtime-clients/index.js +0 -8
  567. package/dist/store/runtime-clients/index.js.map +0 -1
  568. package/dist/store/scopes/index.d.ts +0 -12
  569. package/dist/store/scopes/index.d.ts.map +0 -1
  570. package/dist/store/scopes/index.js +0 -2
  571. package/dist/store/scopes/index.js.map +0 -1
  572. package/dist/subscribable/index.d.ts +0 -3
  573. package/dist/subscribable/index.d.ts.map +0 -1
  574. package/dist/subscribable/index.js +0 -8
  575. package/dist/subscribable/index.js.map +0 -1
  576. package/dist/types/index.d.ts +0 -5
  577. package/dist/types/index.d.ts.map +0 -1
  578. package/dist/types/index.js +0 -2
  579. package/dist/types/index.js.map +0 -1
  580. package/dist/utils/index.d.ts +0 -4
  581. package/dist/utils/index.d.ts.map +0 -1
  582. package/dist/utils/index.js +0 -7
  583. package/dist/utils/index.js.map +0 -1
  584. package/src/adapters/index.ts +0 -30
  585. package/src/model-context/frame/index.ts +0 -10
  586. package/src/model-context/index.ts +0 -35
  587. package/src/react/client/index.ts +0 -2
  588. package/src/react/model-context/index.ts +0 -25
  589. package/src/react/providers/index.ts +0 -15
  590. package/src/react/runtimes/cloud/index.ts +0 -3
  591. package/src/react/runtimes/index.ts +0 -30
  592. package/src/react/types/index.ts +0 -31
  593. package/src/react/types/scopes/index.ts +0 -6
  594. package/src/runtime/index.ts +0 -109
  595. package/src/runtimes/external-store/index.ts +0 -15
  596. package/src/runtimes/index.ts +0 -28
  597. package/src/runtimes/local/index.ts +0 -6
  598. package/src/store/clients/index.ts +0 -8
  599. package/src/store/runtime-clients/index.ts +0 -7
  600. package/src/store/scopes/index.ts +0 -68
  601. package/src/subscribable/index.ts +0 -21
  602. package/src/types/index.ts +0 -40
  603. package/src/utils/index.ts +0 -14
@@ -1,13 +1,21 @@
1
1
  import {
2
2
  type ComponentType,
3
3
  type FC,
4
+ type ReactNode,
4
5
  memo,
5
6
  PropsWithChildren,
6
7
  useMemo,
7
8
  } from "react";
8
- import { useAuiState, useAui } from "@assistant-ui/store";
9
- import { PartByIndexProvider, TextMessagePartProvider } from "../../providers";
9
+ import {
10
+ RenderChildrenWithAccessor,
11
+ useAuiState,
12
+ useAui,
13
+ } from "@assistant-ui/store";
14
+ import type { PartState } from "../../../store/scopes/part";
15
+ import { PartByIndexProvider } from "../../providers/PartByIndexProvider";
16
+ import { TextMessagePartProvider } from "../../providers/TextMessagePartProvider";
10
17
  import { ChainOfThoughtByIndicesProvider } from "../../providers/ChainOfThoughtByIndicesProvider";
18
+ import { getMessageQuote } from "../../utils/getMessageQuote";
11
19
  import type {
12
20
  Unstable_AudioMessagePartComponent,
13
21
  DataMessagePartComponent,
@@ -21,8 +29,9 @@ import type {
21
29
  FileMessagePartComponent,
22
30
  ReasoningMessagePartComponent,
23
31
  ReasoningGroupComponent,
24
- } from "../../types";
25
- import type { MessagePartStatus } from "../../../types";
32
+ QuoteMessagePartComponent,
33
+ } from "../../types/MessagePartComponentTypes";
34
+ import type { MessagePartStatus } from "../../../types/message";
26
35
  import { useShallow } from "zustand/shallow";
27
36
 
28
37
  type MessagePartRange =
@@ -161,6 +170,8 @@ export namespace MessagePrimitiveParts {
161
170
  Unstable_Audio?: Unstable_AudioMessagePartComponent | undefined;
162
171
  /** Configuration for data part rendering */
163
172
  data?: DataConfig | undefined;
173
+ /** Component for rendering a quoted message reference (from metadata, not parts) */
174
+ Quote?: QuoteMessagePartComponent | undefined;
164
175
  };
165
176
 
166
177
  type ToolsConfig =
@@ -230,24 +241,32 @@ export namespace MessagePrimitiveParts {
230
241
  ReasoningGroup?: never;
231
242
  };
232
243
 
233
- export type Props = {
234
- /**
235
- * Component configuration for rendering different types of message content.
236
- *
237
- * Use either `Reasoning`/`tools`/`ToolGroup`/`ReasoningGroup` for standard rendering,
238
- * or `ChainOfThought` to group all reasoning and tool-call parts into a single
239
- * collapsible component. These two modes are mutually exclusive.
240
- */
241
- components?: StandardComponents | ChainOfThoughtComponents | undefined;
242
- /**
243
- * When enabled, shows the Empty component if the last part in the message
244
- * is anything other than Text or Reasoning.
245
- *
246
- * @experimental This API is experimental and may change in future versions.
247
- * @default true
248
- */
249
- unstable_showEmptyOnNonTextEnd?: boolean | undefined;
250
- };
244
+ export type Props =
245
+ | {
246
+ /**
247
+ * Component configuration for rendering different types of message content.
248
+ *
249
+ * Use either `Reasoning`/`tools`/`ToolGroup`/`ReasoningGroup` for standard rendering,
250
+ * or `ChainOfThought` to group all reasoning and tool-call parts into a single
251
+ * collapsible component. These two modes are mutually exclusive.
252
+ */
253
+ components?: StandardComponents | ChainOfThoughtComponents | undefined;
254
+ /**
255
+ * When enabled, shows the Empty component if the last part in the message
256
+ * is anything other than Text or Reasoning.
257
+ *
258
+ * @experimental This API is experimental and may change in future versions.
259
+ * @default true
260
+ */
261
+ unstable_showEmptyOnNonTextEnd?: boolean | undefined;
262
+ children?: never;
263
+ }
264
+ | {
265
+ /** Render function called for each part. Receives the enriched part state. */
266
+ children: (value: { part: EnrichedPartState }) => ReactNode;
267
+ components?: never;
268
+ unstable_showEmptyOnNonTextEnd?: never;
269
+ };
251
270
  }
252
271
 
253
272
  const ToolUIDisplay = ({
@@ -460,6 +479,158 @@ const ConditionalEmpty = memo(
460
479
  prev.components?.Text === next.components?.Text,
461
480
  );
462
481
 
482
+ const QuoteRendererImpl: FC<{ Quote: QuoteMessagePartComponent }> = ({
483
+ Quote,
484
+ }) => {
485
+ const quoteInfo = useAuiState(getMessageQuote);
486
+ if (!quoteInfo) return null;
487
+ return <Quote text={quoteInfo.text} messageId={quoteInfo.messageId} />;
488
+ };
489
+
490
+ const QuoteRenderer = memo(QuoteRendererImpl);
491
+
492
+ /**
493
+ * Stable propless component that renders the registered tool UI for the
494
+ * current part context. Reads tool registry and part state from context.
495
+ */
496
+ const RegisteredToolUI: FC = () => {
497
+ const aui = useAui();
498
+ const part = useAuiState((s) => s.part);
499
+ const Render = useAuiState((s) => {
500
+ if (s.part.type !== "tool-call") return null;
501
+ const entry = s.tools.tools[s.part.toolName];
502
+ if (Array.isArray(entry)) return entry[0] ?? null;
503
+ return entry ?? null;
504
+ });
505
+
506
+ if (!Render || part.type !== "tool-call") return null;
507
+
508
+ return (
509
+ <Render
510
+ {...part}
511
+ addResult={aui.part().addToolResult}
512
+ resume={aui.part().resumeToolCall}
513
+ />
514
+ );
515
+ };
516
+
517
+ /**
518
+ * Stable propless component that renders the registered data renderer UI
519
+ * for the current part context.
520
+ */
521
+ const RegisteredDataRendererUI: FC = () => {
522
+ const part = useAuiState((s) => s.part);
523
+ const Render = useAuiState((s) => {
524
+ if (s.part.type !== "data") return null;
525
+ const entry = s.dataRenderers.renderers[s.part.name];
526
+ if (Array.isArray(entry)) return entry[0] ?? null;
527
+ return entry ?? null;
528
+ });
529
+
530
+ if (!Render || part.type !== "data") return null;
531
+
532
+ return <Render {...(part as DataMessagePartProps)} />;
533
+ };
534
+
535
+ /**
536
+ * Fallback component rendered when the children render function returns null.
537
+ * Renders registered tool/data UIs via context.
538
+ * For all other part types, renders nothing.
539
+ *
540
+ * This allows users to write:
541
+ * {({ part }) => {
542
+ * if (part.type === "text") return <MyText />;
543
+ * return null; // tool UIs and data UIs still render via registry
544
+ * }}
545
+ *
546
+ * To explicitly render nothing (suppressing registered UIs), return <></>.
547
+ */
548
+ const DefaultPartFallback: FC = () => {
549
+ const partType = useAuiState((s) => s.part.type);
550
+
551
+ if (partType === "tool-call") return <RegisteredToolUI />;
552
+ if (partType === "data") return <RegisteredDataRendererUI />;
553
+
554
+ return null;
555
+ };
556
+
557
+ export type { PartState };
558
+
559
+ /**
560
+ * Enriched part state passed to children render functions.
561
+ *
562
+ * For tool-call parts, adds `toolUI`, `addResult`, and `resume`.
563
+ * For data parts, adds `dataRendererUI`.
564
+ */
565
+ export type EnrichedPartState =
566
+ | (Extract<PartState, { type: "tool-call" }> & {
567
+ /** The registered tool UI element, or null if none registered. */
568
+ readonly toolUI: ReactNode;
569
+ /** Add a tool result to this tool call. */
570
+ addResult: ToolCallMessagePartProps["addResult"];
571
+ /** Resume a tool call waiting for human input. */
572
+ resume: ToolCallMessagePartProps["resume"];
573
+ })
574
+ | (Extract<PartState, { type: "data" }> & {
575
+ /** The registered data renderer UI element, or null if none registered. */
576
+ readonly dataRendererUI: ReactNode;
577
+ })
578
+ | Exclude<PartState, { type: "tool-call" } | { type: "data" }>;
579
+
580
+ const MessagePrimitivePartsInner: FC<{
581
+ children: (value: { part: EnrichedPartState }) => ReactNode;
582
+ }> = ({ children }) => {
583
+ const aui = useAui();
584
+ const contentLength = useAuiState((s) => s.message.parts.length);
585
+
586
+ // biome-ignore lint/correctness/useExhaustiveDependencies: aui accessors are stable refs
587
+ return useMemo(
588
+ () =>
589
+ Array.from({ length: contentLength }, (_, index) => (
590
+ <PartByIndexProvider key={index} index={index}>
591
+ <RenderChildrenWithAccessor
592
+ getItemState={(aui) => aui.message().part({ index }).getState()}
593
+ >
594
+ {(getItem) => {
595
+ const result = children({
596
+ get part() {
597
+ const state = getItem();
598
+ if (state.type === "tool-call") {
599
+ const entry = aui.tools().getState().tools[state.toolName];
600
+ const hasUI = Array.isArray(entry) ? !!entry[0] : !!entry;
601
+ const partMethods = aui.message().part({ index });
602
+ return {
603
+ ...state,
604
+ toolUI: hasUI ? <RegisteredToolUI /> : null,
605
+ addResult: partMethods.addToolResult,
606
+ resume: partMethods.resumeToolCall,
607
+ };
608
+ }
609
+ if (state.type === "data") {
610
+ const entry = aui.dataRenderers().getState().renderers[
611
+ state.name
612
+ ];
613
+ const hasUI = Array.isArray(entry) ? !!entry[0] : !!entry;
614
+ return {
615
+ ...state,
616
+ dataRendererUI: hasUI ? (
617
+ <RegisteredDataRendererUI />
618
+ ) : null,
619
+ };
620
+ }
621
+ return state;
622
+ },
623
+ });
624
+ if (result !== null) return result;
625
+ return <DefaultPartFallback />;
626
+ }}
627
+ </RenderChildrenWithAccessor>
628
+ </PartByIndexProvider>
629
+ )),
630
+ [contentLength, children],
631
+ );
632
+ };
633
+
463
634
  /**
464
635
  * Renders the parts of a message with support for multiple content types.
465
636
  *
@@ -469,7 +640,25 @@ const ConditionalEmpty = memo(
469
640
  export const MessagePrimitiveParts: FC<MessagePrimitiveParts.Props> = ({
470
641
  components,
471
642
  unstable_showEmptyOnNonTextEnd = true,
643
+ children,
472
644
  }) => {
645
+ if (children) {
646
+ return <MessagePrimitivePartsInner>{children}</MessagePrimitivePartsInner>;
647
+ }
648
+ return (
649
+ <MessagePrimitivePartsCompat
650
+ components={components}
651
+ unstable_showEmptyOnNonTextEnd={unstable_showEmptyOnNonTextEnd}
652
+ />
653
+ );
654
+ };
655
+
656
+ MessagePrimitiveParts.displayName = "MessagePrimitive.Parts";
657
+
658
+ const MessagePrimitivePartsCompat: FC<{
659
+ components: MessagePrimitiveParts.Props["components"];
660
+ unstable_showEmptyOnNonTextEnd: boolean;
661
+ }> = ({ components, unstable_showEmptyOnNonTextEnd }) => {
473
662
  const contentLength = useAuiState((s) => s.message.parts.length);
474
663
  const useChainOfThought = !!components?.ChainOfThought;
475
664
  const messageRanges = useMessagePartsGroups(useChainOfThought);
@@ -549,6 +738,7 @@ export const MessagePrimitiveParts: FC<MessagePrimitiveParts.Props> = ({
549
738
 
550
739
  return (
551
740
  <>
741
+ {components?.Quote && <QuoteRenderer Quote={components.Quote} />}
552
742
  {partsElements}
553
743
  <ConditionalEmpty
554
744
  components={components}
@@ -557,5 +747,3 @@ export const MessagePrimitiveParts: FC<MessagePrimitiveParts.Props> = ({
557
747
  </>
558
748
  );
559
749
  };
560
-
561
- MessagePrimitiveParts.displayName = "MessagePrimitive.Parts";
@@ -0,0 +1,37 @@
1
+ import { type FC, type ReactNode, memo } from "react";
2
+ import { useAuiState } from "@assistant-ui/store";
3
+ import { getMessageQuote } from "../../utils/getMessageQuote";
4
+ import type { QuoteInfo } from "../../../types/quote";
5
+
6
+ export namespace MessagePrimitiveQuote {
7
+ export type Props = {
8
+ /** Render function called when a quote is present. Receives quote info. */
9
+ children: (value: QuoteInfo) => ReactNode;
10
+ };
11
+ }
12
+
13
+ /**
14
+ * Renders a quote block if the message has quote metadata.
15
+ * Place this above `MessagePrimitive.Parts` in your message layout.
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * <MessagePrimitive.Quote>
20
+ * {({ text, messageId }) => <QuoteBlock text={text} messageId={messageId} />}
21
+ * </MessagePrimitive.Quote>
22
+ * <MessagePrimitive.Parts>
23
+ * {({ part }) => { ... }}
24
+ * </MessagePrimitive.Parts>
25
+ * ```
26
+ */
27
+ const MessagePrimitiveQuoteImpl: FC<MessagePrimitiveQuote.Props> = ({
28
+ children,
29
+ }) => {
30
+ const quoteInfo = useAuiState(getMessageQuote);
31
+ if (!quoteInfo) return null;
32
+ return <>{children(quoteInfo)}</>;
33
+ };
34
+
35
+ export const MessagePrimitiveQuote = memo(MessagePrimitiveQuoteImpl);
36
+
37
+ MessagePrimitiveQuote.displayName = "MessagePrimitive.Quote";
@@ -0,0 +1,75 @@
1
+ import { type FC, type ReactNode, memo } from "react";
2
+ import { useAuiState } from "@assistant-ui/store";
3
+ import type { ThreadMessage } from "../../../types/message";
4
+ import { ReadonlyThreadProvider } from "../../providers/ReadonlyThreadProvider";
5
+ import {
6
+ ThreadPrimitiveMessages,
7
+ ThreadPrimitiveMessagesImpl,
8
+ } from "../thread/ThreadMessages";
9
+
10
+ export namespace PartPrimitiveMessages {
11
+ export type Props = {
12
+ components?: ThreadPrimitiveMessages.Props["components"];
13
+ /** Render function called for each message. Receives the message. */
14
+ children?: (value: { message: ThreadMessage }) => ReactNode;
15
+ };
16
+ }
17
+
18
+ const usePartMessages = (): readonly ThreadMessage[] | undefined => {
19
+ return useAuiState((s) => {
20
+ const part = s.part;
21
+ if (part.type !== "tool-call") return undefined;
22
+ return "messages" in part
23
+ ? (part.messages as readonly ThreadMessage[] | undefined)
24
+ : undefined;
25
+ });
26
+ };
27
+
28
+ /**
29
+ * Renders the nested messages of a tool call part (e.g. sub-agent conversation).
30
+ *
31
+ * This primitive reads `messages` from the current tool call part in the PartScope
32
+ * and renders them using a readonly thread context. All existing message and part
33
+ * primitives work inside, and parent tool UI registrations are inherited.
34
+ *
35
+ * @example
36
+ * ```tsx
37
+ * const SubAgentToolUI = makeAssistantToolUI({
38
+ * toolName: "invoke_sub_agent",
39
+ * render: () => (
40
+ * <PartPrimitive.Messages>
41
+ * {({ message }) => {
42
+ * if (message.role === "user") return <MyUserMessage />;
43
+ * return <MyAssistantMessage />;
44
+ * }}
45
+ * </PartPrimitive.Messages>
46
+ * ),
47
+ * });
48
+ * ```
49
+ */
50
+ export const PartPrimitiveMessagesImpl: FC<PartPrimitiveMessages.Props> = ({
51
+ components,
52
+ children,
53
+ }) => {
54
+ const messages = usePartMessages();
55
+
56
+ if (!messages?.length) return null;
57
+
58
+ if (children) {
59
+ return (
60
+ <ReadonlyThreadProvider messages={messages}>
61
+ <ThreadPrimitiveMessagesImpl>{children}</ThreadPrimitiveMessagesImpl>
62
+ </ReadonlyThreadProvider>
63
+ );
64
+ }
65
+
66
+ return (
67
+ <ReadonlyThreadProvider messages={messages}>
68
+ <ThreadPrimitiveMessagesImpl components={components!} />
69
+ </ReadonlyThreadProvider>
70
+ );
71
+ };
72
+
73
+ PartPrimitiveMessagesImpl.displayName = "PartPrimitive.Messages";
74
+
75
+ export const PartPrimitiveMessages = memo(PartPrimitiveMessagesImpl);
@@ -1,63 +1,69 @@
1
- import type { ThreadMessage as ThreadMessageType } from "../../../types";
2
- import { type ComponentType, type FC, memo, useMemo } from "react";
3
- import { useAuiState } from "@assistant-ui/store";
4
- import { MessageByIndexProvider } from "../../providers";
1
+ import {
2
+ type ComponentType,
3
+ type FC,
4
+ type ReactNode,
5
+ memo,
6
+ useMemo,
7
+ } from "react";
8
+ import { RenderChildrenWithAccessor, useAuiState } from "@assistant-ui/store";
9
+ import { MessageByIndexProvider } from "../../providers/MessageByIndexProvider";
10
+ import { MessageState } from "../../../store";
11
+
12
+ type MessagesComponentConfig =
13
+ | {
14
+ /** Component used to render all message types */
15
+ Message: ComponentType;
16
+ /** Component used when editing any message type */
17
+ EditComposer?: ComponentType | undefined;
18
+ /** Component used when editing user messages specifically */
19
+ UserEditComposer?: ComponentType | undefined;
20
+ /** Component used when editing assistant messages specifically */
21
+ AssistantEditComposer?: ComponentType | undefined;
22
+ /** Component used when editing system messages specifically */
23
+ SystemEditComposer?: ComponentType | undefined;
24
+ /** Component used to render user messages specifically */
25
+ UserMessage?: ComponentType | undefined;
26
+ /** Component used to render assistant messages specifically */
27
+ AssistantMessage?: ComponentType | undefined;
28
+ /** Component used to render system messages specifically */
29
+ SystemMessage?: ComponentType | undefined;
30
+ }
31
+ | {
32
+ /** Component used to render all message types (fallback) */
33
+ Message?: ComponentType | undefined;
34
+ /** Component used when editing any message type */
35
+ EditComposer?: ComponentType | undefined;
36
+ /** Component used when editing user messages specifically */
37
+ UserEditComposer?: ComponentType | undefined;
38
+ /** Component used when editing assistant messages specifically */
39
+ AssistantEditComposer?: ComponentType | undefined;
40
+ /** Component used when editing system messages specifically */
41
+ SystemEditComposer?: ComponentType | undefined;
42
+ /** Component used to render user messages */
43
+ UserMessage: ComponentType;
44
+ /** Component used to render assistant messages */
45
+ AssistantMessage: ComponentType;
46
+ /** Component used to render system messages */
47
+ SystemMessage?: ComponentType | undefined;
48
+ };
5
49
 
6
50
  export namespace ThreadPrimitiveMessages {
7
- export type Props = {
8
- /**
9
- * Component configuration for rendering different types of messages and composers.
10
- *
11
- * You can provide either:
12
- * 1. A single `Message` component that handles all message types
13
- * 2. Specific components for `UserMessage` and `AssistantMessage` (with optional `SystemMessage`)
14
- *
15
- * Optional edit composer components can be provided to customize the editing experience
16
- * for different message types when users edit their messages.
17
- */
18
- components:
19
- | {
20
- /** Component used to render all message types */
21
- Message: ComponentType;
22
- /** Component used when editing any message type */
23
- EditComposer?: ComponentType | undefined;
24
- /** Component used when editing user messages specifically */
25
- UserEditComposer?: ComponentType | undefined;
26
- /** Component used when editing assistant messages specifically */
27
- AssistantEditComposer?: ComponentType | undefined;
28
- /** Component used when editing system messages specifically */
29
- SystemEditComposer?: ComponentType | undefined;
30
- /** Component used to render user messages specifically */
31
- UserMessage?: ComponentType | undefined;
32
- /** Component used to render assistant messages specifically */
33
- AssistantMessage?: ComponentType | undefined;
34
- /** Component used to render system messages specifically */
35
- SystemMessage?: ComponentType | undefined;
36
- }
37
- | {
38
- /** Component used to render all message types (fallback) */
39
- Message?: ComponentType | undefined;
40
- /** Component used when editing any message type */
41
- EditComposer?: ComponentType | undefined;
42
- /** Component used when editing user messages specifically */
43
- UserEditComposer?: ComponentType | undefined;
44
- /** Component used when editing assistant messages specifically */
45
- AssistantEditComposer?: ComponentType | undefined;
46
- /** Component used when editing system messages specifically */
47
- SystemEditComposer?: ComponentType | undefined;
48
- /** Component used to render user messages */
49
- UserMessage: ComponentType;
50
- /** Component used to render assistant messages */
51
- AssistantMessage: ComponentType;
52
- /** Component used to render system messages */
53
- SystemMessage?: ComponentType | undefined;
54
- };
55
- };
51
+ export type Props =
52
+ | {
53
+ /** @deprecated Use the children render function instead. */
54
+ components: MessagesComponentConfig;
55
+ children?: never;
56
+ }
57
+ | {
58
+ /** Render function called for each message. Receives the message. */
59
+ children: (value: { message: MessageState }) => ReactNode;
60
+ components?: never;
61
+ };
56
62
  }
57
63
 
58
64
  const isComponentsSame = (
59
- prev: ThreadPrimitiveMessages.Props["components"],
60
- next: ThreadPrimitiveMessages.Props["components"],
65
+ prev: MessagesComponentConfig,
66
+ next: MessagesComponentConfig,
61
67
  ) => {
62
68
  return (
63
69
  prev.Message === next.Message &&
@@ -74,8 +80,8 @@ const isComponentsSame = (
74
80
  const DEFAULT_SYSTEM_MESSAGE = () => null;
75
81
 
76
82
  const getComponent = (
77
- components: ThreadPrimitiveMessages.Props["components"],
78
- role: ThreadMessageType["role"],
83
+ components: MessagesComponentConfig,
84
+ role: MessageState["role"],
79
85
  isEditing: boolean,
80
86
  ) => {
81
87
  switch (role) {
@@ -125,7 +131,7 @@ const getComponent = (
125
131
  };
126
132
 
127
133
  type ThreadMessageComponentProps = {
128
- components: ThreadPrimitiveMessages.Props["components"];
134
+ components: MessagesComponentConfig;
129
135
  };
130
136
 
131
137
  const ThreadMessageComponent: FC<ThreadMessageComponentProps> = ({
@@ -140,26 +146,12 @@ const ThreadMessageComponent: FC<ThreadMessageComponentProps> = ({
140
146
  export namespace ThreadPrimitiveMessageByIndex {
141
147
  export type Props = {
142
148
  index: number;
143
- components: ThreadPrimitiveMessages.Props["components"];
149
+ components: MessagesComponentConfig;
144
150
  };
145
151
  }
146
152
 
147
153
  /**
148
154
  * Renders a single message at the specified index in the current thread.
149
- *
150
- * This component provides message context for a specific message in the thread
151
- * and renders it using the provided component configuration.
152
- *
153
- * @example
154
- * ```tsx
155
- * <ThreadPrimitive.MessageByIndex
156
- * index={0}
157
- * components={{
158
- * UserMessage: MyUserMessage,
159
- * AssistantMessage: MyAssistantMessage
160
- * }}
161
- * />
162
- * ```
163
155
  */
164
156
  export const ThreadPrimitiveMessageByIndex: FC<ThreadPrimitiveMessageByIndex.Props> =
165
157
  memo(
@@ -177,46 +169,68 @@ export const ThreadPrimitiveMessageByIndex: FC<ThreadPrimitiveMessageByIndex.Pro
177
169
 
178
170
  ThreadPrimitiveMessageByIndex.displayName = "ThreadPrimitive.MessageByIndex";
179
171
 
172
+ const ThreadPrimitiveMessagesInner: FC<{
173
+ children: (value: { message: MessageState }) => ReactNode;
174
+ }> = ({ children }) => {
175
+ const messagesLength = useAuiState((s) => s.thread.messages.length);
176
+
177
+ return useMemo(() => {
178
+ if (messagesLength === 0) return null;
179
+ return Array.from({ length: messagesLength }, (_, index) => (
180
+ <MessageByIndexProvider key={index} index={index}>
181
+ <RenderChildrenWithAccessor
182
+ getItemState={(aui) => aui.thread().message({ index }).getState()}
183
+ >
184
+ {(getItem) =>
185
+ children({
186
+ get message() {
187
+ return getItem();
188
+ },
189
+ })
190
+ }
191
+ </RenderChildrenWithAccessor>
192
+ </MessageByIndexProvider>
193
+ ));
194
+ }, [messagesLength, children]);
195
+ };
196
+
180
197
  /**
181
- * Renders all messages in the current thread using the provided component configuration.
182
- *
183
- * This component automatically renders all messages in the thread, providing the appropriate
184
- * message context for each message. It handles different message types (user, assistant, system)
185
- * and supports editing mode through the provided edit composer components.
198
+ * Renders all messages in the current thread.
186
199
  *
187
200
  * @example
188
201
  * ```tsx
189
- * <ThreadPrimitive.Messages
190
- * components={{
191
- * UserMessage: MyUserMessage,
192
- * AssistantMessage: MyAssistantMessage,
193
- * EditComposer: MyEditComposer
202
+ * <ThreadPrimitive.Messages>
203
+ * {({ message }) => {
204
+ * if (message.role === "user") return <MyUserMessage />;
205
+ * return <MyAssistantMessage />;
194
206
  * }}
195
- * />
207
+ * </ThreadPrimitive.Messages>
196
208
  * ```
197
209
  */
198
210
  export const ThreadPrimitiveMessagesImpl: FC<ThreadPrimitiveMessages.Props> = ({
199
211
  components,
212
+ children,
200
213
  }) => {
201
- const messagesLength = useAuiState((s) => s.thread.messages.length);
202
-
203
- const messageElements = useMemo(() => {
204
- if (messagesLength === 0) return null;
205
- return Array.from({ length: messagesLength }, (_, index) => (
206
- <ThreadPrimitiveMessageByIndex
207
- key={index}
208
- index={index}
209
- components={components}
210
- />
211
- ));
212
- }, [messagesLength, components]);
213
-
214
- return messageElements;
214
+ if (components) {
215
+ return (
216
+ <ThreadPrimitiveMessagesInner>
217
+ {() => <ThreadMessageComponent components={components} />}
218
+ </ThreadPrimitiveMessagesInner>
219
+ );
220
+ }
221
+ return (
222
+ <ThreadPrimitiveMessagesInner>{children}</ThreadPrimitiveMessagesInner>
223
+ );
215
224
  };
216
225
 
217
226
  ThreadPrimitiveMessagesImpl.displayName = "ThreadPrimitive.Messages";
218
227
 
219
228
  export const ThreadPrimitiveMessages = memo(
220
229
  ThreadPrimitiveMessagesImpl,
221
- (prev, next) => isComponentsSame(prev.components, next.components),
230
+ (prev, next) => {
231
+ if (prev.children || next.children) {
232
+ return prev.children === next.children;
233
+ }
234
+ return isComponentsSame(prev.components!, next.components!);
235
+ },
222
236
  );