@assistant-ui/react 0.10.24 → 0.10.26

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 (267) hide show
  1. package/dist/api/{ContentPartRuntime.d.ts → MessagePartRuntime.d.ts} +14 -14
  2. package/dist/api/{ContentPartRuntime.d.ts.map → MessagePartRuntime.d.ts.map} +1 -1
  3. package/dist/api/{ContentPartRuntime.js → MessagePartRuntime.js} +6 -6
  4. package/dist/api/{ContentPartRuntime.js.map → MessagePartRuntime.js.map} +1 -1
  5. package/dist/api/MessageRuntime.d.ts +8 -8
  6. package/dist/api/MessageRuntime.js +17 -17
  7. package/dist/api/MessageRuntime.js.map +1 -1
  8. package/dist/api/RuntimePathTypes.d.ts +2 -2
  9. package/dist/api/ThreadListRuntime.d.ts +3 -0
  10. package/dist/api/ThreadListRuntime.d.ts.map +1 -1
  11. package/dist/api/ThreadListRuntime.js +5 -1
  12. package/dist/api/ThreadListRuntime.js.map +1 -1
  13. package/dist/api/ThreadRuntime.d.ts +5 -0
  14. package/dist/api/ThreadRuntime.d.ts.map +1 -1
  15. package/dist/api/ThreadRuntime.js +1 -0
  16. package/dist/api/ThreadRuntime.js.map +1 -1
  17. package/dist/api/index.d.ts +2 -1
  18. package/dist/api/index.d.ts.map +1 -1
  19. package/dist/cloud/auiV0.d.ts +2 -2
  20. package/dist/cloud/auiV0.js +1 -1
  21. package/dist/cloud/auiV0.js.map +1 -1
  22. package/dist/context/providers/MessagePartRuntimeProvider.d.ts +9 -0
  23. package/dist/context/providers/{ContentPartRuntimeProvider.d.ts.map → MessagePartRuntimeProvider.d.ts.map} +1 -1
  24. package/dist/context/providers/{ContentPartRuntimeProvider.js → MessagePartRuntimeProvider.js} +9 -9
  25. package/dist/context/providers/MessagePartRuntimeProvider.js.map +1 -0
  26. package/dist/context/providers/{TextContentPartProvider.d.ts → TextMessagePartProvider.d.ts} +3 -3
  27. package/dist/context/providers/{TextContentPartProvider.d.ts.map → TextMessagePartProvider.d.ts.map} +1 -1
  28. package/dist/context/providers/{TextContentPartProvider.js → TextMessagePartProvider.js} +19 -19
  29. package/dist/context/providers/{TextContentPartProvider.js.map → TextMessagePartProvider.js.map} +1 -1
  30. package/dist/context/providers/index.d.ts +2 -1
  31. package/dist/context/providers/index.d.ts.map +1 -1
  32. package/dist/context/providers/index.js +4 -2
  33. package/dist/context/providers/index.js.map +1 -1
  34. package/dist/context/react/AttachmentContext.d.ts +72 -72
  35. package/dist/context/react/MessagePartContext.d.ts +41 -0
  36. package/dist/context/react/{ContentPartContext.d.ts.map → MessagePartContext.d.ts.map} +1 -1
  37. package/dist/context/react/MessagePartContext.js +25 -0
  38. package/dist/context/react/MessagePartContext.js.map +1 -0
  39. package/dist/context/react/index.d.ts +1 -1
  40. package/dist/context/react/index.js +3 -3
  41. package/dist/context/react/index.js.map +1 -1
  42. package/dist/context/stores/AssistantToolUIs.d.ts +3 -3
  43. package/dist/context/stores/AssistantToolUIs.js.map +1 -1
  44. package/dist/model-context/useAssistantTool.d.ts +2 -2
  45. package/dist/model-context/useAssistantTool.js.map +1 -1
  46. package/dist/model-context/useAssistantToolUI.d.ts +2 -2
  47. package/dist/model-context/useAssistantToolUI.js.map +1 -1
  48. package/dist/model-context/useInlineRender.d.ts +2 -2
  49. package/dist/model-context/useInlineRender.js.map +1 -1
  50. package/dist/primitives/assistantModal/AssistantModalContent.d.ts +2 -0
  51. package/dist/primitives/assistantModal/AssistantModalContent.d.ts.map +1 -1
  52. package/dist/primitives/assistantModal/AssistantModalContent.js +2 -1
  53. package/dist/primitives/assistantModal/AssistantModalContent.js.map +1 -1
  54. package/dist/primitives/index.d.ts +12 -6
  55. package/dist/primitives/index.d.ts.map +1 -1
  56. package/dist/primitives/index.js +23 -11
  57. package/dist/primitives/index.js.map +1 -1
  58. package/dist/primitives/message/MessageParts.d.ts +116 -0
  59. package/dist/primitives/message/MessageParts.d.ts.map +1 -0
  60. package/dist/primitives/message/MessageParts.js +208 -0
  61. package/dist/primitives/message/MessageParts.js.map +1 -0
  62. package/dist/primitives/message/index.d.ts +2 -1
  63. package/dist/primitives/message/index.d.ts.map +1 -1
  64. package/dist/primitives/message/index.js +4 -2
  65. package/dist/primitives/message/index.js.map +1 -1
  66. package/dist/primitives/{contentPart/ContentPartImage.d.ts → messagePart/MessagePartImage.d.ts} +8 -8
  67. package/dist/primitives/{contentPart/ContentPartImage.d.ts.map → messagePart/MessagePartImage.d.ts.map} +1 -1
  68. package/dist/primitives/messagePart/MessagePartImage.js +16 -0
  69. package/dist/primitives/messagePart/MessagePartImage.js.map +1 -0
  70. package/dist/primitives/messagePart/MessagePartInProgress.d.ts +6 -0
  71. package/dist/primitives/{contentPart/ContentPartInProgress.d.ts.map → messagePart/MessagePartInProgress.d.ts.map} +1 -1
  72. package/dist/primitives/messagePart/MessagePartInProgress.js +13 -0
  73. package/dist/primitives/messagePart/MessagePartInProgress.js.map +1 -0
  74. package/dist/primitives/{contentPart/ContentPartText.d.ts → messagePart/MessagePartText.d.ts} +6 -6
  75. package/dist/primitives/{contentPart/ContentPartText.d.ts.map → messagePart/MessagePartText.d.ts.map} +1 -1
  76. package/dist/primitives/messagePart/MessagePartText.js +18 -0
  77. package/dist/primitives/{contentPart/ContentPartText.js.map → messagePart/MessagePartText.js.map} +1 -1
  78. package/dist/primitives/messagePart/index.d.ts +4 -0
  79. package/dist/primitives/{contentPart → messagePart}/index.d.ts.map +1 -1
  80. package/dist/primitives/messagePart/index.js +10 -0
  81. package/dist/primitives/messagePart/index.js.map +1 -0
  82. package/dist/primitives/messagePart/useMessagePartFile.d.ts +5 -0
  83. package/dist/primitives/messagePart/useMessagePartFile.d.ts.map +1 -0
  84. package/dist/primitives/messagePart/useMessagePartFile.js +18 -0
  85. package/dist/primitives/messagePart/useMessagePartFile.js.map +1 -0
  86. package/dist/primitives/messagePart/useMessagePartImage.d.ts +5 -0
  87. package/dist/primitives/messagePart/useMessagePartImage.d.ts.map +1 -0
  88. package/dist/primitives/messagePart/useMessagePartImage.js +18 -0
  89. package/dist/primitives/messagePart/useMessagePartImage.js.map +1 -0
  90. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts +5 -0
  91. package/dist/primitives/messagePart/useMessagePartReasoning.d.ts.map +1 -0
  92. package/dist/primitives/messagePart/useMessagePartReasoning.js +18 -0
  93. package/dist/primitives/messagePart/useMessagePartReasoning.js.map +1 -0
  94. package/dist/primitives/messagePart/useMessagePartSource.d.ts +5 -0
  95. package/dist/primitives/messagePart/useMessagePartSource.d.ts.map +1 -0
  96. package/dist/primitives/messagePart/useMessagePartSource.js +18 -0
  97. package/dist/primitives/messagePart/useMessagePartSource.js.map +1 -0
  98. package/dist/primitives/messagePart/useMessagePartText.d.ts +7 -0
  99. package/dist/primitives/messagePart/useMessagePartText.d.ts.map +1 -0
  100. package/dist/primitives/messagePart/useMessagePartText.js +18 -0
  101. package/dist/primitives/messagePart/useMessagePartText.js.map +1 -0
  102. package/dist/runtimes/core/BaseThreadRuntimeCore.d.ts +1 -0
  103. package/dist/runtimes/core/BaseThreadRuntimeCore.d.ts.map +1 -1
  104. package/dist/runtimes/core/BaseThreadRuntimeCore.js.map +1 -1
  105. package/dist/runtimes/core/ThreadListRuntimeCore.d.ts +1 -0
  106. package/dist/runtimes/core/ThreadListRuntimeCore.d.ts.map +1 -1
  107. package/dist/runtimes/core/ThreadRuntimeCore.d.ts +1 -0
  108. package/dist/runtimes/core/ThreadRuntimeCore.d.ts.map +1 -1
  109. package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts +2 -0
  110. package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts.map +1 -1
  111. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts +1 -0
  112. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts.map +1 -1
  113. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js +3 -0
  114. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js.map +1 -1
  115. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.d.ts +1 -0
  116. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.d.ts.map +1 -1
  117. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.js +3 -8
  118. package/dist/runtimes/external-store/ExternalStoreThreadRuntimeCore.js.map +1 -1
  119. package/dist/runtimes/external-store/ThreadMessageLike.d.ts +3 -3
  120. package/dist/runtimes/external-store/ThreadMessageLike.js +4 -4
  121. package/dist/runtimes/external-store/ThreadMessageLike.js.map +1 -1
  122. package/dist/runtimes/external-store/createMessageConverter.js +3 -3
  123. package/dist/runtimes/external-store/createMessageConverter.js.map +1 -1
  124. package/dist/runtimes/external-store/external-message-converter.js.map +1 -1
  125. package/dist/runtimes/local/ChatModelAdapter.d.ts +4 -4
  126. package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts +1 -0
  127. package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts.map +1 -1
  128. package/dist/runtimes/local/LocalThreadListRuntimeCore.js +3 -0
  129. package/dist/runtimes/local/LocalThreadListRuntimeCore.js.map +1 -1
  130. package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts +2 -0
  131. package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts.map +1 -1
  132. package/dist/runtimes/local/LocalThreadRuntimeCore.js +12 -1
  133. package/dist/runtimes/local/LocalThreadRuntimeCore.js.map +1 -1
  134. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.d.ts.map +1 -1
  135. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.js +1 -0
  136. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.js.map +1 -1
  137. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts +2 -0
  138. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  139. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts +3 -0
  140. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  141. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js +3 -0
  142. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  143. package/dist/runtimes/utils/MessageRepository.js +1 -1
  144. package/dist/runtimes/utils/MessageRepository.js.map +1 -1
  145. package/dist/tests/setup.js +8 -8
  146. package/dist/tests/setup.js.map +1 -1
  147. package/dist/types/AssistantTypes.d.ts +15 -15
  148. package/dist/types/AttachmentTypes.d.ts +3 -3
  149. package/dist/types/MessagePartComponentTypes.d.ts +25 -0
  150. package/dist/types/{ContentPartComponentTypes.d.ts.map → MessagePartComponentTypes.d.ts.map} +1 -1
  151. package/dist/types/MessagePartComponentTypes.js +1 -0
  152. package/dist/types/index.d.ts +4 -2
  153. package/dist/types/index.d.ts.map +1 -1
  154. package/dist/utils/getThreadMessageText.js.map +1 -1
  155. package/dist/utils/smooth/SmoothContext.js +3 -3
  156. package/dist/utils/smooth/SmoothContext.js.map +1 -1
  157. package/dist/utils/smooth/useSmooth.d.ts +3 -3
  158. package/dist/utils/smooth/useSmooth.js.map +1 -1
  159. package/dist/utils/useToolArgsFieldStatus.js +3 -3
  160. package/dist/utils/useToolArgsFieldStatus.js.map +1 -1
  161. package/package.json +8 -8
  162. package/src/api/{ContentPartRuntime.ts → MessagePartRuntime.ts} +20 -20
  163. package/src/api/MessageRuntime.ts +32 -32
  164. package/src/api/RuntimePathTypes.ts +2 -2
  165. package/src/api/ThreadListRuntime.ts +8 -0
  166. package/src/api/ThreadRuntime.ts +6 -0
  167. package/src/api/index.ts +11 -3
  168. package/src/cloud/auiV0.ts +3 -3
  169. package/src/context/providers/MessagePartRuntimeProvider.tsx +42 -0
  170. package/src/context/providers/{TextContentPartProvider.tsx → TextMessagePartProvider.tsx} +27 -27
  171. package/src/context/providers/index.ts +4 -1
  172. package/src/context/react/MessagePartContext.ts +37 -0
  173. package/src/context/react/index.ts +1 -1
  174. package/src/context/stores/AssistantToolUIs.ts +4 -4
  175. package/src/model-context/useAssistantTool.tsx +2 -2
  176. package/src/model-context/useAssistantToolUI.tsx +2 -2
  177. package/src/model-context/useInlineRender.tsx +3 -3
  178. package/src/primitives/assistantModal/AssistantModalContent.tsx +5 -1
  179. package/src/primitives/index.ts +14 -6
  180. package/src/primitives/message/MessageParts.tsx +423 -0
  181. package/src/primitives/message/index.ts +2 -1
  182. package/src/primitives/messagePart/MessagePartImage.tsx +39 -0
  183. package/src/primitives/messagePart/MessagePartInProgress.tsx +19 -0
  184. package/src/primitives/{contentPart/ContentPartText.tsx → messagePart/MessagePartText.tsx} +10 -10
  185. package/src/primitives/messagePart/index.ts +3 -0
  186. package/src/primitives/messagePart/useMessagePartFile.tsx +18 -0
  187. package/src/primitives/messagePart/useMessagePartImage.tsx +18 -0
  188. package/src/primitives/messagePart/useMessagePartReasoning.tsx +18 -0
  189. package/src/primitives/messagePart/useMessagePartSource.tsx +18 -0
  190. package/src/primitives/messagePart/useMessagePartText.tsx +18 -0
  191. package/src/runtimes/core/BaseThreadRuntimeCore.tsx +1 -0
  192. package/src/runtimes/core/ThreadListRuntimeCore.tsx +1 -0
  193. package/src/runtimes/core/ThreadRuntimeCore.tsx +1 -0
  194. package/src/runtimes/external-store/ExternalStoreAdapter.tsx +2 -0
  195. package/src/runtimes/external-store/ExternalStoreThreadListRuntimeCore.tsx +4 -0
  196. package/src/runtimes/external-store/ExternalStoreThreadRuntimeCore.tsx +3 -8
  197. package/src/runtimes/external-store/ThreadMessageLike.tsx +21 -21
  198. package/src/runtimes/external-store/createMessageConverter.tsx +3 -3
  199. package/src/runtimes/external-store/external-message-converter.tsx +2 -2
  200. package/src/runtimes/local/ChatModelAdapter.tsx +13 -13
  201. package/src/runtimes/local/LocalThreadListRuntimeCore.tsx +4 -0
  202. package/src/runtimes/local/LocalThreadRuntimeCore.tsx +30 -15
  203. package/src/runtimes/remote-thread-list/EMPTY_THREAD_CORE.tsx +1 -0
  204. package/src/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.tsx +4 -0
  205. package/src/runtimes/utils/MessageRepository.tsx +1 -1
  206. package/src/tests/MessageRepository.test.ts +6 -6
  207. package/src/types/AssistantTypes.ts +24 -24
  208. package/src/types/AttachmentTypes.ts +3 -3
  209. package/src/types/MessagePartComponentTypes.tsx +52 -0
  210. package/src/types/index.ts +69 -28
  211. package/src/utils/getThreadMessageText.tsx +2 -2
  212. package/src/utils/smooth/SmoothContext.tsx +7 -7
  213. package/src/utils/smooth/useSmooth.tsx +7 -7
  214. package/src/utils/useToolArgsFieldStatus.tsx +3 -3
  215. package/dist/context/providers/ContentPartRuntimeProvider.d.ts +0 -9
  216. package/dist/context/providers/ContentPartRuntimeProvider.js.map +0 -1
  217. package/dist/context/react/ContentPartContext.d.ts +0 -41
  218. package/dist/context/react/ContentPartContext.js +0 -25
  219. package/dist/context/react/ContentPartContext.js.map +0 -1
  220. package/dist/primitives/contentPart/ContentPartImage.js +0 -16
  221. package/dist/primitives/contentPart/ContentPartImage.js.map +0 -1
  222. package/dist/primitives/contentPart/ContentPartInProgress.d.ts +0 -6
  223. package/dist/primitives/contentPart/ContentPartInProgress.js +0 -13
  224. package/dist/primitives/contentPart/ContentPartInProgress.js.map +0 -1
  225. package/dist/primitives/contentPart/ContentPartText.js +0 -18
  226. package/dist/primitives/contentPart/index.d.ts +0 -4
  227. package/dist/primitives/contentPart/index.js +0 -10
  228. package/dist/primitives/contentPart/index.js.map +0 -1
  229. package/dist/primitives/contentPart/useContentPartFile.d.ts +0 -5
  230. package/dist/primitives/contentPart/useContentPartFile.d.ts.map +0 -1
  231. package/dist/primitives/contentPart/useContentPartFile.js +0 -18
  232. package/dist/primitives/contentPart/useContentPartFile.js.map +0 -1
  233. package/dist/primitives/contentPart/useContentPartImage.d.ts +0 -5
  234. package/dist/primitives/contentPart/useContentPartImage.d.ts.map +0 -1
  235. package/dist/primitives/contentPart/useContentPartImage.js +0 -18
  236. package/dist/primitives/contentPart/useContentPartImage.js.map +0 -1
  237. package/dist/primitives/contentPart/useContentPartReasoning.d.ts +0 -5
  238. package/dist/primitives/contentPart/useContentPartReasoning.d.ts.map +0 -1
  239. package/dist/primitives/contentPart/useContentPartReasoning.js +0 -18
  240. package/dist/primitives/contentPart/useContentPartReasoning.js.map +0 -1
  241. package/dist/primitives/contentPart/useContentPartSource.d.ts +0 -5
  242. package/dist/primitives/contentPart/useContentPartSource.d.ts.map +0 -1
  243. package/dist/primitives/contentPart/useContentPartSource.js +0 -18
  244. package/dist/primitives/contentPart/useContentPartSource.js.map +0 -1
  245. package/dist/primitives/contentPart/useContentPartText.d.ts +0 -7
  246. package/dist/primitives/contentPart/useContentPartText.d.ts.map +0 -1
  247. package/dist/primitives/contentPart/useContentPartText.js +0 -18
  248. package/dist/primitives/contentPart/useContentPartText.js.map +0 -1
  249. package/dist/primitives/message/MessageContent.d.ts +0 -64
  250. package/dist/primitives/message/MessageContent.d.ts.map +0 -1
  251. package/dist/primitives/message/MessageContent.js +0 -141
  252. package/dist/primitives/message/MessageContent.js.map +0 -1
  253. package/dist/types/ContentPartComponentTypes.d.ts +0 -25
  254. package/dist/types/ContentPartComponentTypes.js +0 -1
  255. package/src/context/providers/ContentPartRuntimeProvider.tsx +0 -42
  256. package/src/context/react/ContentPartContext.ts +0 -37
  257. package/src/primitives/contentPart/ContentPartImage.tsx +0 -39
  258. package/src/primitives/contentPart/ContentPartInProgress.tsx +0 -19
  259. package/src/primitives/contentPart/index.ts +0 -3
  260. package/src/primitives/contentPart/useContentPartFile.tsx +0 -18
  261. package/src/primitives/contentPart/useContentPartImage.tsx +0 -18
  262. package/src/primitives/contentPart/useContentPartReasoning.tsx +0 -18
  263. package/src/primitives/contentPart/useContentPartSource.tsx +0 -18
  264. package/src/primitives/contentPart/useContentPartText.tsx +0 -18
  265. package/src/primitives/message/MessageContent.tsx +0 -277
  266. package/src/types/ContentPartComponentTypes.tsx +0 -52
  267. /package/dist/types/{ContentPartComponentTypes.js.map → MessagePartComponentTypes.js.map} +0 -0
@@ -21,11 +21,14 @@ export type ThreadListState = {
21
21
  readonly newThread: string | undefined;
22
22
  readonly threads: readonly string[];
23
23
  readonly archivedThreads: readonly string[];
24
+ readonly isLoading: boolean;
24
25
  };
25
26
 
26
27
  export type ThreadListRuntime = {
27
28
  getState(): ThreadListState;
28
29
 
30
+ readonly isLoading: boolean;
31
+
29
32
  subscribe(callback: () => void): Unsubscribe;
30
33
 
31
34
  readonly main: ThreadRuntime;
@@ -48,6 +51,7 @@ const getThreadListState = (
48
51
  newThread: threadList.newThreadId,
49
52
  threads: threadList.threadIds,
50
53
  archivedThreads: threadList.archivedThreadIds,
54
+ isLoading: threadList.isLoading,
51
55
  };
52
56
  };
53
57
 
@@ -139,6 +143,10 @@ export class ThreadListRuntimeImpl implements ThreadListRuntime {
139
143
  return this._getState();
140
144
  }
141
145
 
146
+ public get isLoading() {
147
+ return this._core.isLoading;
148
+ }
149
+
142
150
  public subscribe(callback: () => void): Unsubscribe {
143
151
  return this._core.subscribe(callback);
144
152
  }
@@ -139,6 +139,11 @@ export type ThreadState = {
139
139
  */
140
140
  readonly isDisabled: boolean;
141
141
 
142
+ /**
143
+ * Whether the thread is loading its history.
144
+ */
145
+ readonly isLoading: boolean;
146
+
142
147
  /**
143
148
  * Whether the thread is running. A thread is considered running when there is an active stream connection to the backend.
144
149
  */
@@ -187,6 +192,7 @@ export const getThreadState = (
187
192
  metadata: threadListItemState,
188
193
  capabilities: runtime.capabilities,
189
194
  isDisabled: runtime.isDisabled,
195
+ isLoading: runtime.isLoading,
190
196
  isRunning:
191
197
  lastMessage?.role !== "assistant"
192
198
  ? false
package/src/api/index.ts CHANGED
@@ -6,10 +6,18 @@ export type {
6
6
  CreateStartRunConfig,
7
7
  } from "./ThreadRuntime";
8
8
  export type { MessageRuntime, MessageState } from "./MessageRuntime";
9
+
9
10
  export type {
10
- ContentPartRuntime,
11
- ContentPartState,
12
- } from "./ContentPartRuntime";
11
+ MessagePartRuntime,
12
+ MessagePartState,
13
+ } from "./MessagePartRuntime";
14
+
15
+ // TODO remove in v0.11
16
+ export type {
17
+ MessagePartRuntime as MessageContentRuntime,
18
+ MessagePartState as MessageContentState,
19
+ } from "./MessagePartRuntime";
20
+
13
21
  export type {
14
22
  ComposerRuntime,
15
23
  ThreadComposerRuntime,
@@ -6,7 +6,7 @@ import { isJSONValue } from "../utils/json/is-json";
6
6
  import { ReadonlyJSONObject, ReadonlyJSONValue } from "assistant-stream/utils";
7
7
  import { ExportedMessageRepositoryItem } from "../runtimes/utils/MessageRepository";
8
8
 
9
- type AuiV0MessageContentPart =
9
+ type AuiV0MessageMessagePart =
10
10
  | {
11
11
  readonly type: "text";
12
12
  readonly text: string;
@@ -42,7 +42,7 @@ type AuiV0MessageContentPart =
42
42
  type AuiV0Message = {
43
43
  readonly role: "assistant" | "user" | "system";
44
44
  readonly status?: MessageStatus;
45
- readonly content: readonly AuiV0MessageContentPart[];
45
+ readonly content: readonly AuiV0MessageMessagePart[];
46
46
  readonly metadata: {
47
47
  readonly unstable_state?: ReadonlyJSONValue;
48
48
  readonly unstable_annotations: readonly ReadonlyJSONValue[];
@@ -114,7 +114,7 @@ export const auiV0Encode = (message: ThreadMessage): AuiV0Message => {
114
114
  default: {
115
115
  const unhandledType: "image" | "file" | "audio" = type;
116
116
  throw new Error(
117
- `Content part type not supported by aui/v0: ${unhandledType}`,
117
+ `Message part type not supported by aui/v0: ${unhandledType}`,
118
118
  );
119
119
  }
120
120
  }
@@ -0,0 +1,42 @@
1
+ "use client";
2
+
3
+ import { type FC, type PropsWithChildren, useEffect, useState } from "react";
4
+ import { create } from "zustand";
5
+ import { MessagePartContext } from "../react/MessagePartContext";
6
+ import type { MessagePartContextValue } from "../react/MessagePartContext";
7
+ import { writableStore } from "../ReadonlyStore";
8
+ import { MessagePartRuntime } from "../../api/MessagePartRuntime";
9
+ import { ensureBinding } from "../react/utils/ensureBinding";
10
+
11
+ export namespace MessagePartRuntimeProvider {
12
+ export type Props = PropsWithChildren<{
13
+ runtime: MessagePartRuntime;
14
+ }>;
15
+ }
16
+
17
+ const useMessagePartRuntimeStore = (runtime: MessagePartRuntime) => {
18
+ const [store] = useState(() => create(() => runtime));
19
+
20
+ useEffect(() => {
21
+ ensureBinding(runtime);
22
+
23
+ writableStore(store).setState(runtime, true);
24
+ }, [runtime, store]);
25
+
26
+ return store;
27
+ };
28
+
29
+ export const MessagePartRuntimeProvider: FC<
30
+ MessagePartRuntimeProvider.Props
31
+ > = ({ runtime, children }) => {
32
+ const useMessagePartRuntime = useMessagePartRuntimeStore(runtime);
33
+ const [context] = useState<MessagePartContextValue>(() => {
34
+ return { useMessagePartRuntime };
35
+ });
36
+
37
+ return (
38
+ <MessagePartContext.Provider value={context}>
39
+ {children}
40
+ </MessagePartContext.Provider>
41
+ );
42
+ };
@@ -3,88 +3,88 @@
3
3
  import { FC, PropsWithChildren, useEffect, useState } from "react";
4
4
  import { create, StoreApi, UseBoundStore } from "zustand";
5
5
  import {
6
- ContentPartContext,
7
- ContentPartContextValue,
8
- } from "../react/ContentPartContext";
9
- import { ContentPartStatus } from "../../types/AssistantTypes";
6
+ MessagePartContext,
7
+ MessagePartContextValue,
8
+ } from "../react/MessagePartContext";
9
+ import { MessagePartStatus } from "../../types/AssistantTypes";
10
10
  import { writableStore } from "../ReadonlyStore";
11
11
  import {
12
- ContentPartRuntimeImpl,
13
- ContentPartState,
14
- } from "../../api/ContentPartRuntime";
12
+ MessagePartRuntimeImpl,
13
+ MessagePartState,
14
+ } from "../../api/MessagePartRuntime";
15
15
  import { ensureBinding } from "../react/utils/ensureBinding";
16
16
 
17
- export namespace TextContentPartProvider {
17
+ export namespace TextMessagePartProvider {
18
18
  export type Props = PropsWithChildren<{
19
19
  text: string;
20
20
  isRunning?: boolean | undefined;
21
21
  }>;
22
22
  }
23
23
 
24
- const COMPLETE_STATUS: ContentPartStatus = {
24
+ const COMPLETE_STATUS: MessagePartStatus = {
25
25
  type: "complete",
26
26
  };
27
27
 
28
- const RUNNING_STATUS: ContentPartStatus = {
28
+ const RUNNING_STATUS: MessagePartStatus = {
29
29
  type: "running",
30
30
  };
31
31
 
32
- export const TextContentPartProvider: FC<TextContentPartProvider.Props> = ({
32
+ export const TextMessagePartProvider: FC<TextMessagePartProvider.Props> = ({
33
33
  children,
34
34
  text,
35
35
  isRunning,
36
36
  }) => {
37
37
  const [context] = useState<
38
- ContentPartContextValue & {
39
- useContentPart: UseBoundStore<
40
- StoreApi<ContentPartState & { type: "text" }>
38
+ MessagePartContextValue & {
39
+ useMessagePart: UseBoundStore<
40
+ StoreApi<MessagePartState & { type: "text" }>
41
41
  >;
42
42
  }
43
43
  >(() => {
44
- const useContentPart = create<ContentPartState & { type: "text" }>(() => ({
44
+ const useMessagePart = create<MessagePartState & { type: "text" }>(() => ({
45
45
  status: isRunning ? RUNNING_STATUS : COMPLETE_STATUS,
46
46
  type: "text",
47
47
  text,
48
48
  }));
49
49
 
50
- const contentPartRuntime = new ContentPartRuntimeImpl({
50
+ const MessagePartRuntime = new MessagePartRuntimeImpl({
51
51
  path: {
52
52
  ref: "text",
53
53
  threadSelector: { type: "main" },
54
54
  messageSelector: { type: "messageId", messageId: "" },
55
- contentPartSelector: { type: "index", index: 0 },
55
+ messagePartSelector: { type: "index", index: 0 },
56
56
  },
57
- getState: useContentPart.getState,
58
- subscribe: useContentPart.subscribe,
57
+ getState: useMessagePart.getState,
58
+ subscribe: useMessagePart.subscribe,
59
59
  });
60
- ensureBinding(contentPartRuntime);
60
+ ensureBinding(MessagePartRuntime);
61
61
 
62
- const useContentPartRuntime = create(() => contentPartRuntime);
62
+ const useMessagePartRuntime = create(() => MessagePartRuntime);
63
63
 
64
- return { useContentPartRuntime, useContentPart };
64
+ return { useMessagePartRuntime, useMessagePart };
65
65
  });
66
66
 
67
67
  useEffect(() => {
68
- const state = context.useContentPart.getState();
68
+ const state = context.useMessagePart.getState();
69
69
  const textUpdated = state.text !== text;
70
70
  const targetStatus = isRunning ? RUNNING_STATUS : COMPLETE_STATUS;
71
71
  const statusUpdated = state.status !== targetStatus;
72
72
 
73
73
  if (!textUpdated && !statusUpdated) return;
74
74
 
75
- writableStore(context.useContentPart).setState(
75
+ writableStore(context.useMessagePart).setState(
76
76
  {
77
77
  type: "text",
78
78
  text,
79
79
  status: targetStatus,
80
- } satisfies ContentPartState,
80
+ } satisfies MessagePartState,
81
81
  true,
82
82
  );
83
83
  }, [context, isRunning, text]);
84
84
 
85
85
  return (
86
- <ContentPartContext.Provider value={context}>
86
+ <MessagePartContext.Provider value={context}>
87
87
  {children}
88
- </ContentPartContext.Provider>
88
+ </MessagePartContext.Provider>
89
89
  );
90
90
  };
@@ -1,2 +1,5 @@
1
1
  export { AssistantRuntimeProvider } from "./AssistantRuntimeProvider";
2
- export { TextContentPartProvider } from "./TextContentPartProvider";
2
+ export { TextMessagePartProvider } from "./TextMessagePartProvider";
3
+
4
+ // TODO remove in v0.11
5
+ export { TextMessagePartProvider as TextContentPartProvider } from "./TextMessagePartProvider";
@@ -0,0 +1,37 @@
1
+ "use client";
2
+
3
+ import { createContext } from "react";
4
+ import { ReadonlyStore } from "../ReadonlyStore";
5
+ import { createContextHook } from "./utils/createContextHook";
6
+ import { UseBoundStore } from "zustand";
7
+ import { MessagePartRuntime } from "../../api/MessagePartRuntime";
8
+ import { createStateHookForRuntime } from "./utils/createStateHookForRuntime";
9
+
10
+ export type MessagePartContextValue = {
11
+ useMessagePartRuntime: UseBoundStore<ReadonlyStore<MessagePartRuntime>>;
12
+ };
13
+
14
+ export const MessagePartContext = createContext<MessagePartContextValue | null>(
15
+ null,
16
+ );
17
+
18
+ const useMessagePartContext = createContextHook(
19
+ MessagePartContext,
20
+ "a component passed to <MessagePrimitive.Parts components={...}>",
21
+ );
22
+
23
+ export function useMessagePartRuntime(options?: {
24
+ optional?: false | undefined;
25
+ }): MessagePartRuntime;
26
+ export function useMessagePartRuntime(options?: {
27
+ optional?: boolean | undefined;
28
+ }): MessagePartRuntime | null;
29
+ export function useMessagePartRuntime(options?: {
30
+ optional?: boolean | undefined;
31
+ }) {
32
+ const context = useMessagePartContext(options);
33
+ if (!context) return null;
34
+ return context.useMessagePartRuntime();
35
+ }
36
+
37
+ export const useMessagePart = createStateHookForRuntime(useMessagePartRuntime);
@@ -37,7 +37,7 @@ export {
37
37
  useMessageUtils,
38
38
  useMessageUtilsStore,
39
39
  } from "./MessageContext";
40
- export { useContentPartRuntime, useContentPart } from "./ContentPartContext";
40
+ export { useMessagePartRuntime, useMessagePart } from "./MessagePartContext";
41
41
  export { useComposerRuntime, useComposer } from "./ComposerContext";
42
42
 
43
43
  export {
@@ -1,25 +1,25 @@
1
1
  import { create } from "zustand";
2
- import type { ToolCallContentPartComponent } from "../../types/ContentPartComponentTypes";
2
+ import type { ToolCallMessagePartComponent } from "../../types/MessagePartComponentTypes";
3
3
  import { Unsubscribe } from "../../types";
4
4
 
5
5
  export type AssistantToolUIsState = {
6
6
  /**
7
7
  * Get the tool UI configured for a given tool name.
8
8
  */
9
- getToolUI: (toolName: string) => ToolCallContentPartComponent | null;
9
+ getToolUI: (toolName: string) => ToolCallMessagePartComponent | null;
10
10
 
11
11
  /**
12
12
  * Registers a tool UI for a given tool name. Returns an unsubscribe function to remove the tool UI.
13
13
  */
14
14
  setToolUI: (
15
15
  toolName: string,
16
- render: ToolCallContentPartComponent,
16
+ render: ToolCallMessagePartComponent,
17
17
  ) => Unsubscribe;
18
18
  };
19
19
 
20
20
  export const makeAssistantToolUIsStore = () =>
21
21
  create<AssistantToolUIsState>((set) => {
22
- const renderers = new Map<string, ToolCallContentPartComponent[]>();
22
+ const renderers = new Map<string, ToolCallMessagePartComponent[]>();
23
23
 
24
24
  return Object.freeze({
25
25
  getToolUI: (name) => {
@@ -5,7 +5,7 @@ import {
5
5
  useAssistantRuntime,
6
6
  useToolUIsStore,
7
7
  } from "../context/react/AssistantContext";
8
- import type { ToolCallContentPartComponent } from "../types/ContentPartComponentTypes";
8
+ import type { ToolCallMessagePartComponent } from "../types/MessagePartComponentTypes";
9
9
  import type { Tool } from "assistant-stream";
10
10
 
11
11
  export type AssistantToolProps<
@@ -13,7 +13,7 @@ export type AssistantToolProps<
13
13
  TResult,
14
14
  > = Tool<TArgs, TResult> & {
15
15
  toolName: string;
16
- render?: ToolCallContentPartComponent<TArgs, TResult> | undefined;
16
+ render?: ToolCallMessagePartComponent<TArgs, TResult> | undefined;
17
17
  };
18
18
 
19
19
  export const useAssistantTool = <
@@ -2,11 +2,11 @@
2
2
 
3
3
  import { useEffect } from "react";
4
4
  import { useToolUIsStore } from "../context/react/AssistantContext";
5
- import type { ToolCallContentPartComponent } from "../types/ContentPartComponentTypes";
5
+ import type { ToolCallMessagePartComponent } from "../types/MessagePartComponentTypes";
6
6
 
7
7
  export type AssistantToolUIProps<TArgs, TResult> = {
8
8
  toolName: string;
9
- render: ToolCallContentPartComponent<TArgs, TResult>;
9
+ render: ToolCallMessagePartComponent<TArgs, TResult>;
10
10
  };
11
11
 
12
12
  export const useAssistantToolUI = (
@@ -1,12 +1,12 @@
1
1
  "use client";
2
2
 
3
3
  import { FC, useCallback, useEffect, useState } from "react";
4
- import { ToolCallContentPartProps } from "../types";
4
+ import { ToolCallMessagePartProps } from "../types";
5
5
  import { create } from "zustand";
6
6
 
7
7
  export const useInlineRender = <TArgs, TResult>(
8
- toolUI: FC<ToolCallContentPartProps<TArgs, TResult>>,
9
- ): FC<ToolCallContentPartProps<TArgs, TResult>> => {
8
+ toolUI: FC<ToolCallMessagePartProps<TArgs, TResult>>,
9
+ ): FC<ToolCallMessagePartProps<TArgs, TResult>> => {
10
10
  const [useToolUIStore] = useState(() =>
11
11
  create(() => ({
12
12
  toolUI,
@@ -10,6 +10,9 @@ export namespace AssistantModalPrimitiveContent {
10
10
  export type Props = ComponentPropsWithoutRef<
11
11
  typeof PopoverPrimitive.Content
12
12
  > & {
13
+ portalProps?:
14
+ | ComponentPropsWithoutRef<typeof PopoverPrimitive.Portal>
15
+ | undefined;
13
16
  dissmissOnInteractOutside?: boolean | undefined;
14
17
  };
15
18
  }
@@ -25,6 +28,7 @@ export const AssistantModalPrimitiveContent = forwardRef<
25
28
  align,
26
29
  onInteractOutside,
27
30
  dissmissOnInteractOutside = false,
31
+ portalProps,
28
32
  ...props
29
33
  }: ScopedProps<AssistantModalPrimitiveContent.Props>,
30
34
  forwardedRef,
@@ -32,7 +36,7 @@ export const AssistantModalPrimitiveContent = forwardRef<
32
36
  const scope = usePopoverScope(__scopeAssistantModal);
33
37
 
34
38
  return (
35
- <PopoverPrimitive.Portal {...scope}>
39
+ <PopoverPrimitive.Portal {...scope} {...portalProps}>
36
40
  <PopoverPrimitive.Content
37
41
  {...scope}
38
42
  {...props}
@@ -3,16 +3,24 @@ export * as AssistantModalPrimitive from "./assistantModal";
3
3
  export * as AttachmentPrimitive from "./attachment";
4
4
  export * as BranchPickerPrimitive from "./branchPicker";
5
5
  export * as ComposerPrimitive from "./composer";
6
- export * as ContentPartPrimitive from "./contentPart";
6
+ export * as MessagePartPrimitive from "./messagePart";
7
7
  export * as ErrorPrimitive from "./error";
8
8
  export * as MessagePrimitive from "./message";
9
9
  export * as ThreadPrimitive from "./thread";
10
10
  export * as ThreadListPrimitive from "./threadList";
11
11
  export * as ThreadListItemPrimitive from "./threadListItem";
12
12
 
13
- export { useContentPartText } from "./contentPart/useContentPartText";
14
- export { useContentPartReasoning } from "./contentPart/useContentPartReasoning";
15
- export { useContentPartSource } from "./contentPart/useContentPartSource";
16
- export { useContentPartFile } from "./contentPart/useContentPartFile";
17
- export { useContentPartImage } from "./contentPart/useContentPartImage";
13
+ export { useMessagePartText } from "./messagePart/useMessagePartText";
14
+ export { useMessagePartReasoning } from "./messagePart/useMessagePartReasoning";
15
+ export { useMessagePartSource } from "./messagePart/useMessagePartSource";
16
+ export { useMessagePartFile } from "./messagePart/useMessagePartFile";
17
+ export { useMessagePartImage } from "./messagePart/useMessagePartImage";
18
18
  export { useThreadViewportAutoScroll } from "./thread/useThreadViewportAutoScroll";
19
+
20
+ // TODO remove in v0.11
21
+ export * as ContentPartPrimitive from "./messagePart";
22
+ export { useMessagePartText as useContentPartText } from "./messagePart/useMessagePartText";
23
+ export { useMessagePartReasoning as useContentPartReasoning } from "./messagePart/useMessagePartReasoning";
24
+ export { useMessagePartSource as useContentPartSource } from "./messagePart/useMessagePartSource";
25
+ export { useMessagePartFile as useContentPartFile } from "./messagePart/useMessagePartFile";
26
+ export { useMessagePartImage as useContentPartImage } from "./messagePart/useMessagePartImage";