@assistant-ui/react 0.7.58 → 0.7.59

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 (247) hide show
  1. package/dist/cloud/AssistantCloud.d.ts.map +1 -0
  2. package/dist/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloud.js +1 -1
  3. package/dist/cloud/AssistantCloud.js.map +1 -0
  4. package/dist/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloud.mjs +1 -1
  5. package/dist/cloud/AssistantCloud.mjs.map +1 -0
  6. package/dist/cloud/AssistantCloudAPI.d.ts.map +1 -0
  7. package/dist/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloudAPI.js +1 -1
  8. package/dist/cloud/AssistantCloudAPI.js.map +1 -0
  9. package/dist/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloudAPI.mjs +1 -1
  10. package/dist/cloud/AssistantCloudAPI.mjs.map +1 -0
  11. package/dist/cloud/AssistantCloudAuthStrategy.d.ts.map +1 -0
  12. package/dist/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloudAuthStrategy.js +1 -1
  13. package/dist/cloud/AssistantCloudAuthStrategy.js.map +1 -0
  14. package/dist/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloudAuthStrategy.mjs +1 -1
  15. package/dist/cloud/AssistantCloudAuthStrategy.mjs.map +1 -0
  16. package/dist/cloud/AssistantCloudAuthTokens.d.ts.map +1 -0
  17. package/dist/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloudAuthTokens.js +1 -1
  18. package/dist/cloud/AssistantCloudAuthTokens.js.map +1 -0
  19. package/dist/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloudAuthTokens.mjs +1 -1
  20. package/dist/cloud/AssistantCloudAuthTokens.mjs.map +1 -0
  21. package/dist/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloudRuns.d.ts +1 -1
  22. package/dist/cloud/AssistantCloudRuns.d.ts.map +1 -0
  23. package/dist/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloudRuns.js +1 -1
  24. package/dist/cloud/AssistantCloudRuns.js.map +1 -0
  25. package/dist/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloudRuns.mjs +1 -1
  26. package/dist/cloud/AssistantCloudRuns.mjs.map +1 -0
  27. package/dist/cloud/AssistantCloudThreadHistoryAdapter.d.ts +5 -0
  28. package/dist/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -0
  29. package/dist/cloud/AssistantCloudThreadHistoryAdapter.js +72 -0
  30. package/dist/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -0
  31. package/dist/cloud/AssistantCloudThreadHistoryAdapter.mjs +47 -0
  32. package/dist/cloud/AssistantCloudThreadHistoryAdapter.mjs.map +1 -0
  33. package/dist/cloud/AssistantCloudThreadMessages.d.ts +30 -0
  34. package/dist/cloud/AssistantCloudThreadMessages.d.ts.map +1 -0
  35. package/dist/cloud/AssistantCloudThreadMessages.js +46 -0
  36. package/dist/cloud/AssistantCloudThreadMessages.js.map +1 -0
  37. package/dist/cloud/AssistantCloudThreadMessages.mjs +21 -0
  38. package/dist/cloud/AssistantCloudThreadMessages.mjs.map +1 -0
  39. package/dist/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloudThreads.d.ts +2 -0
  40. package/dist/cloud/AssistantCloudThreads.d.ts.map +1 -0
  41. package/dist/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloudThreads.js +8 -3
  42. package/dist/cloud/AssistantCloudThreads.js.map +1 -0
  43. package/dist/cloud/AssistantCloudThreads.mjs +30 -0
  44. package/dist/cloud/AssistantCloudThreads.mjs.map +1 -0
  45. package/dist/cloud/auiV0.d.ts +46 -0
  46. package/dist/cloud/auiV0.d.ts.map +1 -0
  47. package/dist/cloud/auiV0.js +99 -0
  48. package/dist/cloud/auiV0.js.map +1 -0
  49. package/dist/cloud/auiV0.mjs +73 -0
  50. package/dist/cloud/auiV0.mjs.map +1 -0
  51. package/dist/cloud/index.d.ts.map +1 -0
  52. package/dist/{runtimes/remote-thread-list/cloud → cloud}/index.js +1 -1
  53. package/dist/cloud/index.js.map +1 -0
  54. package/dist/{runtimes/remote-thread-list/cloud → cloud}/index.mjs +1 -1
  55. package/dist/cloud/index.mjs.map +1 -0
  56. package/dist/{runtimes/remote-thread-list/cloud → cloud}/useCloudThreadListRuntime.d.ts +1 -1
  57. package/dist/cloud/useCloudThreadListRuntime.d.ts.map +1 -0
  58. package/dist/{runtimes/remote-thread-list/cloud → cloud}/useCloudThreadListRuntime.js +16 -4
  59. package/dist/cloud/useCloudThreadListRuntime.js.map +1 -0
  60. package/dist/{runtimes/remote-thread-list/cloud → cloud}/useCloudThreadListRuntime.mjs +23 -5
  61. package/dist/cloud/useCloudThreadListRuntime.mjs.map +1 -0
  62. package/dist/index.d.ts +1 -0
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +2 -0
  65. package/dist/index.js.map +1 -1
  66. package/dist/index.mjs +1 -0
  67. package/dist/index.mjs.map +1 -1
  68. package/dist/model-context/makeAssistantTool.d.ts +2 -1
  69. package/dist/model-context/makeAssistantTool.d.ts.map +1 -1
  70. package/dist/model-context/makeAssistantTool.js.map +1 -1
  71. package/dist/model-context/makeAssistantTool.mjs.map +1 -1
  72. package/dist/model-context/makeAssistantToolUI.d.ts +2 -1
  73. package/dist/model-context/makeAssistantToolUI.d.ts.map +1 -1
  74. package/dist/model-context/makeAssistantToolUI.js.map +1 -1
  75. package/dist/model-context/makeAssistantToolUI.mjs.map +1 -1
  76. package/dist/model-context/useAssistantTool.d.ts +3 -2
  77. package/dist/model-context/useAssistantTool.d.ts.map +1 -1
  78. package/dist/model-context/useAssistantTool.js.map +1 -1
  79. package/dist/model-context/useAssistantTool.mjs.map +1 -1
  80. package/dist/model-context/useAssistantToolUI.d.ts +2 -1
  81. package/dist/model-context/useAssistantToolUI.d.ts.map +1 -1
  82. package/dist/model-context/useAssistantToolUI.js.map +1 -1
  83. package/dist/model-context/useAssistantToolUI.mjs.map +1 -1
  84. package/dist/model-context/useInlineRender.d.ts +2 -1
  85. package/dist/model-context/useInlineRender.d.ts.map +1 -1
  86. package/dist/model-context/useInlineRender.js.map +1 -1
  87. package/dist/model-context/useInlineRender.mjs.map +1 -1
  88. package/dist/runtimes/edge/EdgeRuntimeRequestOptions.d.ts +5 -4
  89. package/dist/runtimes/edge/EdgeRuntimeRequestOptions.d.ts.map +1 -1
  90. package/dist/runtimes/edge/EdgeRuntimeRequestOptions.js +1 -1
  91. package/dist/runtimes/edge/EdgeRuntimeRequestOptions.js.map +1 -1
  92. package/dist/runtimes/edge/EdgeRuntimeRequestOptions.mjs +1 -1
  93. package/dist/runtimes/edge/EdgeRuntimeRequestOptions.mjs.map +1 -1
  94. package/dist/runtimes/edge/converters/fromLanguageModelMessages.d.ts.map +1 -1
  95. package/dist/runtimes/edge/converters/fromLanguageModelMessages.js.map +1 -1
  96. package/dist/runtimes/edge/converters/fromLanguageModelMessages.mjs.map +1 -1
  97. package/dist/runtimes/edge/createEdgeRuntimeAPI.d.ts +2 -2
  98. package/dist/runtimes/edge/createEdgeRuntimeAPI.d.ts.map +1 -1
  99. package/dist/runtimes/edge/createEdgeRuntimeAPI.js +1 -1
  100. package/dist/runtimes/edge/createEdgeRuntimeAPI.js.map +1 -1
  101. package/dist/runtimes/edge/createEdgeRuntimeAPI.mjs +1 -1
  102. package/dist/runtimes/edge/createEdgeRuntimeAPI.mjs.map +1 -1
  103. package/dist/runtimes/edge/streams/AssistantStreamChunkType.d.ts +4 -3
  104. package/dist/runtimes/edge/streams/AssistantStreamChunkType.d.ts.map +1 -1
  105. package/dist/runtimes/edge/streams/AssistantStreamChunkType.js.map +1 -1
  106. package/dist/runtimes/edge/streams/AssistantStreamChunkType.mjs.map +1 -1
  107. package/dist/runtimes/edge/streams/runResultStream.js +1 -1
  108. package/dist/runtimes/edge/streams/runResultStream.js.map +1 -1
  109. package/dist/runtimes/edge/streams/runResultStream.mjs +1 -1
  110. package/dist/runtimes/edge/streams/runResultStream.mjs.map +1 -1
  111. package/dist/runtimes/edge/streams/toolResultStream.d.ts +4 -3
  112. package/dist/runtimes/edge/streams/toolResultStream.d.ts.map +1 -1
  113. package/dist/runtimes/edge/streams/toolResultStream.js.map +1 -1
  114. package/dist/runtimes/edge/streams/toolResultStream.mjs.map +1 -1
  115. package/dist/runtimes/external-store/ThreadMessageLike.d.ts +11 -3
  116. package/dist/runtimes/external-store/ThreadMessageLike.d.ts.map +1 -1
  117. package/dist/runtimes/external-store/ThreadMessageLike.js +10 -1
  118. package/dist/runtimes/external-store/ThreadMessageLike.js.map +1 -1
  119. package/dist/runtimes/external-store/ThreadMessageLike.mjs +10 -1
  120. package/dist/runtimes/external-store/ThreadMessageLike.mjs.map +1 -1
  121. package/dist/runtimes/local/ChatModelAdapter.d.ts +3 -2
  122. package/dist/runtimes/local/ChatModelAdapter.d.ts.map +1 -1
  123. package/dist/runtimes/local/ChatModelAdapter.js.map +1 -1
  124. package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts +2 -0
  125. package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts.map +1 -1
  126. package/dist/runtimes/local/LocalThreadRuntimeCore.js +27 -1
  127. package/dist/runtimes/local/LocalThreadRuntimeCore.js.map +1 -1
  128. package/dist/runtimes/local/LocalThreadRuntimeCore.mjs +27 -1
  129. package/dist/runtimes/local/LocalThreadRuntimeCore.mjs.map +1 -1
  130. package/dist/runtimes/local/useLocalRuntime.d.ts.map +1 -1
  131. package/dist/runtimes/local/useLocalRuntime.js +14 -7
  132. package/dist/runtimes/local/useLocalRuntime.js.map +1 -1
  133. package/dist/runtimes/local/useLocalRuntime.mjs +14 -7
  134. package/dist/runtimes/local/useLocalRuntime.mjs.map +1 -1
  135. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  136. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js +1 -6
  137. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  138. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.mjs +1 -6
  139. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.mjs.map +1 -1
  140. package/dist/runtimes/remote-thread-list/index.d.ts +0 -1
  141. package/dist/runtimes/remote-thread-list/index.d.ts.map +1 -1
  142. package/dist/runtimes/remote-thread-list/index.js +1 -4
  143. package/dist/runtimes/remote-thread-list/index.js.map +1 -1
  144. package/dist/runtimes/remote-thread-list/index.mjs +0 -1
  145. package/dist/runtimes/remote-thread-list/index.mjs.map +1 -1
  146. package/dist/types/AssistantTypes.d.ts +8 -7
  147. package/dist/types/AssistantTypes.d.ts.map +1 -1
  148. package/dist/types/AssistantTypes.js.map +1 -1
  149. package/dist/types/ContentPartComponentTypes.d.ts +3 -2
  150. package/dist/types/ContentPartComponentTypes.d.ts.map +1 -1
  151. package/dist/types/ContentPartComponentTypes.js.map +1 -1
  152. package/dist/utils/json/fix-json.d.ts.map +1 -0
  153. package/dist/{runtimes/edge/partial-json → utils/json}/fix-json.js +1 -1
  154. package/dist/utils/json/fix-json.js.map +1 -0
  155. package/dist/{runtimes/edge/partial-json → utils/json}/fix-json.mjs +1 -1
  156. package/dist/utils/json/fix-json.mjs.map +1 -0
  157. package/dist/utils/json/is-json.d.ts +5 -0
  158. package/dist/utils/json/is-json.d.ts.map +1 -0
  159. package/dist/utils/json/is-json.js +56 -0
  160. package/dist/utils/json/is-json.js.map +1 -0
  161. package/dist/utils/json/is-json.mjs +29 -0
  162. package/dist/utils/json/is-json.mjs.map +1 -0
  163. package/dist/utils/json/json-value.d.ts +6 -0
  164. package/dist/utils/json/json-value.d.ts.map +1 -0
  165. package/dist/utils/json/json-value.js +19 -0
  166. package/dist/utils/json/json-value.js.map +1 -0
  167. package/dist/utils/json/json-value.mjs +1 -0
  168. package/dist/utils/json/json-value.mjs.map +1 -0
  169. package/dist/utils/json/parse-partial-json.d.ts.map +1 -0
  170. package/dist/{runtimes/edge/partial-json → utils/json}/parse-partial-json.js +1 -1
  171. package/dist/utils/json/parse-partial-json.js.map +1 -0
  172. package/dist/{runtimes/edge/partial-json → utils/json}/parse-partial-json.mjs +1 -1
  173. package/dist/utils/json/parse-partial-json.mjs.map +1 -0
  174. package/package.json +1 -1
  175. package/src/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloudRuns.tsx +1 -1
  176. package/src/cloud/AssistantCloudThreadHistoryAdapter.tsx +64 -0
  177. package/src/cloud/AssistantCloudThreadMessages.tsx +48 -0
  178. package/src/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloudThreads.tsx +10 -3
  179. package/src/cloud/auiV0.ts +130 -0
  180. package/src/{runtimes/remote-thread-list/cloud → cloud}/useCloudThreadListRuntime.tsx +29 -5
  181. package/src/index.ts +1 -0
  182. package/src/model-context/makeAssistantTool.tsx +2 -4
  183. package/src/model-context/makeAssistantToolUI.tsx +2 -4
  184. package/src/model-context/useAssistantTool.tsx +3 -5
  185. package/src/model-context/useAssistantToolUI.tsx +2 -4
  186. package/src/model-context/useInlineRender.tsx +2 -1
  187. package/src/runtimes/edge/EdgeRuntimeRequestOptions.ts +4 -2
  188. package/src/runtimes/edge/converters/fromLanguageModelMessages.ts +2 -1
  189. package/src/runtimes/edge/createEdgeRuntimeAPI.ts +4 -4
  190. package/src/runtimes/edge/streams/AssistantStreamChunkType.ts +4 -3
  191. package/src/runtimes/edge/streams/runResultStream.ts +1 -1
  192. package/src/runtimes/edge/streams/toolResultStream.ts +4 -3
  193. package/src/runtimes/external-store/ThreadMessageLike.tsx +24 -3
  194. package/src/runtimes/local/ChatModelAdapter.tsx +3 -2
  195. package/src/runtimes/local/LocalThreadRuntimeCore.tsx +37 -1
  196. package/src/runtimes/local/useLocalRuntime.tsx +14 -7
  197. package/src/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.tsx +1 -6
  198. package/src/runtimes/remote-thread-list/index.ts +0 -1
  199. package/src/types/AssistantTypes.ts +11 -7
  200. package/src/types/ContentPartComponentTypes.tsx +3 -2
  201. package/src/utils/json/is-json.ts +42 -0
  202. package/src/utils/json/json-value.ts +13 -0
  203. package/dist/runtimes/edge/partial-json/fix-json.d.ts.map +0 -1
  204. package/dist/runtimes/edge/partial-json/fix-json.js.map +0 -1
  205. package/dist/runtimes/edge/partial-json/fix-json.mjs.map +0 -1
  206. package/dist/runtimes/edge/partial-json/parse-partial-json.d.ts.map +0 -1
  207. package/dist/runtimes/edge/partial-json/parse-partial-json.js.map +0 -1
  208. package/dist/runtimes/edge/partial-json/parse-partial-json.mjs.map +0 -1
  209. package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.d.ts.map +0 -1
  210. package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.js.map +0 -1
  211. package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.mjs.map +0 -1
  212. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.d.ts.map +0 -1
  213. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.js.map +0 -1
  214. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.mjs.map +0 -1
  215. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.d.ts.map +0 -1
  216. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.js.map +0 -1
  217. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.mjs.map +0 -1
  218. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthTokens.d.ts.map +0 -1
  219. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthTokens.js.map +0 -1
  220. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthTokens.mjs.map +0 -1
  221. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudRuns.d.ts.map +0 -1
  222. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudRuns.js.map +0 -1
  223. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudRuns.mjs.map +0 -1
  224. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.d.ts.map +0 -1
  225. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.js.map +0 -1
  226. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.mjs +0 -25
  227. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.mjs.map +0 -1
  228. package/dist/runtimes/remote-thread-list/cloud/index.d.ts.map +0 -1
  229. package/dist/runtimes/remote-thread-list/cloud/index.js.map +0 -1
  230. package/dist/runtimes/remote-thread-list/cloud/index.mjs.map +0 -1
  231. package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.d.ts.map +0 -1
  232. package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.js.map +0 -1
  233. package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.mjs.map +0 -1
  234. /package/dist/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloud.d.ts +0 -0
  235. /package/dist/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloudAPI.d.ts +0 -0
  236. /package/dist/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloudAuthStrategy.d.ts +0 -0
  237. /package/dist/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloudAuthTokens.d.ts +0 -0
  238. /package/dist/{runtimes/remote-thread-list/cloud → cloud}/index.d.ts +0 -0
  239. /package/dist/{runtimes/edge/partial-json → utils/json}/fix-json.d.ts +0 -0
  240. /package/dist/{runtimes/edge/partial-json → utils/json}/parse-partial-json.d.ts +0 -0
  241. /package/src/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloud.tsx +0 -0
  242. /package/src/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloudAPI.tsx +0 -0
  243. /package/src/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloudAuthStrategy.tsx +0 -0
  244. /package/src/{runtimes/remote-thread-list/cloud → cloud}/AssistantCloudAuthTokens.tsx +0 -0
  245. /package/src/{runtimes/remote-thread-list/cloud → cloud}/index.ts +0 -0
  246. /package/src/{runtimes/edge/partial-json → utils/json}/fix-json.ts +0 -0
  247. /package/src/{runtimes/edge/partial-json → utils/json}/parse-partial-json.ts +0 -0
@@ -0,0 +1,130 @@
1
+ import { JSONObject } from "@ai-sdk/provider";
2
+ import { ThreadMessage } from "../types";
3
+ import { MessageStatus } from "../types/AssistantTypes";
4
+ import { fromThreadMessageLike } from "../runtimes/external-store/ThreadMessageLike";
5
+ import { CloudMessage } from "./AssistantCloudThreadMessages";
6
+ import { isJSONValue } from "../utils/json/is-json";
7
+ import { ReadonlyJSONValue } from "../utils/json/json-value";
8
+ import { ExportedMessageRepositoryItem } from "../runtimes/utils/MessageRepository";
9
+
10
+ type AuiV0MessageContentPart =
11
+ | {
12
+ readonly type: "text";
13
+ readonly text: string;
14
+ }
15
+ | {
16
+ readonly type: "tool-call";
17
+ readonly toolCallId: string;
18
+ readonly toolName: string;
19
+ readonly args: ReadonlyJSONValue;
20
+ readonly result?: ReadonlyJSONValue;
21
+ readonly isError?: true;
22
+ }
23
+ | {
24
+ readonly type: "tool-call";
25
+ readonly toolCallId: string;
26
+ readonly toolName: string;
27
+ readonly argsText: string;
28
+ readonly result?: ReadonlyJSONValue;
29
+ readonly isError?: true;
30
+ };
31
+
32
+ type AuiV0Message = {
33
+ readonly role: "assistant" | "user" | "system";
34
+ readonly status?: MessageStatus;
35
+ readonly content: readonly AuiV0MessageContentPart[];
36
+ readonly metadata: {
37
+ readonly unstable_annotations: readonly ReadonlyJSONValue[];
38
+ readonly unstable_data: readonly ReadonlyJSONValue[];
39
+ readonly steps: readonly {
40
+ readonly usage?: {
41
+ readonly promptTokens: number;
42
+ readonly completionTokens: number;
43
+ };
44
+ }[];
45
+ readonly custom: Readonly<JSONObject>;
46
+ };
47
+ };
48
+
49
+ export const auiV0Encode = (message: ThreadMessage): AuiV0Message => {
50
+ // TODO attachments are currently intentionally ignored
51
+ // info: ID and createdAt are ignored (we use the server value instead)
52
+ return {
53
+ role: message.role,
54
+ content: message.content.map((part) => {
55
+ const type = part.type;
56
+ switch (type) {
57
+ case "text": {
58
+ return {
59
+ type: "text",
60
+ text: part.text,
61
+ };
62
+ }
63
+
64
+ case "tool-call": {
65
+ if (!isJSONValue(part.result)) {
66
+ console.warn(
67
+ "tool-call result is not JSON! " + JSON.stringify(part),
68
+ );
69
+ }
70
+ return {
71
+ type: "tool-call",
72
+ toolCallId: part.toolCallId,
73
+ toolName: part.toolName,
74
+ ...(JSON.stringify(part.args) === part.argsText
75
+ ? {
76
+ args: part.args,
77
+ }
78
+ : { argsText: part.argsText }),
79
+ ...(part.result
80
+ ? { result: part.result as ReadonlyJSONValue }
81
+ : {}),
82
+ ...(part.isError ? { isError: true } : {}),
83
+ };
84
+ }
85
+
86
+ default: {
87
+ const unhandledType: "ui" | "image" | "file" | "audio" = type;
88
+ throw new Error(
89
+ `Content part type not supported by aui/v0: ${unhandledType}`,
90
+ );
91
+ }
92
+ }
93
+ }),
94
+ metadata: message.metadata as AuiV0Message["metadata"],
95
+ ...(message.status
96
+ ? {
97
+ status:
98
+ message.status?.type === "running"
99
+ ? {
100
+ type: "incomplete",
101
+ reason: "cancelled",
102
+ }
103
+ : message.status,
104
+ }
105
+ : undefined),
106
+ };
107
+ };
108
+
109
+ export const auiV0Decode = (
110
+ cloudMessage: CloudMessage & { format: "aui/v0" },
111
+ ): ExportedMessageRepositoryItem => {
112
+ const payload = cloudMessage.content as unknown as AuiV0Message;
113
+ const message = fromThreadMessageLike(
114
+ {
115
+ id: cloudMessage.id,
116
+ createdAt: cloudMessage.created_at,
117
+ ...payload,
118
+ },
119
+ cloudMessage.id,
120
+ {
121
+ type: "complete",
122
+ reason: "unknown",
123
+ },
124
+ );
125
+
126
+ return {
127
+ parentId: cloudMessage.parent_id,
128
+ message,
129
+ };
130
+ };
@@ -1,11 +1,21 @@
1
1
  "use client";
2
2
 
3
- import { useEffect, useRef, useState } from "react";
4
- import { useRemoteThreadListRuntime } from "../useRemoteThreadListRuntime";
3
+ import {
4
+ FC,
5
+ PropsWithChildren,
6
+ useCallback,
7
+ useEffect,
8
+ useMemo,
9
+ useRef,
10
+ useState,
11
+ } from "react";
5
12
  import { AssistantCloud } from "./AssistantCloud";
6
- import { AssistantRuntime } from "../../../api";
7
- import { RemoteThreadListSubscriber } from "../types";
8
- import { toCoreMessages } from "../../edge";
13
+ import { AssistantRuntime } from "../api";
14
+ import { RemoteThreadListSubscriber } from "../runtimes/remote-thread-list/types";
15
+ import { toCoreMessages } from "../runtimes/edge";
16
+ import { useRemoteThreadListRuntime } from "../runtimes/remote-thread-list/useRemoteThreadListRuntime";
17
+ import { RuntimeAdapterProvider } from "../runtimes/adapters/RuntimeAdapterProvider";
18
+ import { useAssistantCloudThreadHistoryAdapter } from "./AssistantCloudThreadHistoryAdapter";
9
19
 
10
20
  type ThreadData = {
11
21
  externalId: string;
@@ -104,6 +114,20 @@ export const useCloudThreadListRuntime = (adapter: CloudThreadListAdapter) => {
104
114
  subscribers.delete(callback);
105
115
  };
106
116
  },
117
+ unstable_Provider: useCallback<FC<PropsWithChildren>>(({ children }) => {
118
+ const history = useAssistantCloudThreadHistoryAdapter({
119
+ get current() {
120
+ return adapterRef.current.cloud;
121
+ },
122
+ });
123
+ const adapters = useMemo(() => ({ history }), [history]);
124
+
125
+ return (
126
+ <RuntimeAdapterProvider adapters={adapters}>
127
+ {children}
128
+ </RuntimeAdapterProvider>
129
+ );
130
+ }, []),
107
131
  });
108
132
 
109
133
  return runtime;
package/src/index.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./api";
2
+ export * from "./cloud";
2
3
  export * from "./context";
3
4
  export * from "./model-context";
4
5
  export * from "./primitives";
@@ -2,15 +2,13 @@
2
2
 
3
3
  import { FC } from "react";
4
4
  import { type AssistantToolProps, useAssistantTool } from "./useAssistantTool";
5
+ import { ReadonlyJSONObject } from "../utils/json/json-value";
5
6
 
6
7
  export type AssistantTool = FC & {
7
8
  unstable_tool: AssistantToolProps<any, any>;
8
9
  };
9
10
 
10
- export const makeAssistantTool = <
11
- TArgs extends Record<string, unknown>,
12
- TResult,
13
- >(
11
+ export const makeAssistantTool = <TArgs extends ReadonlyJSONObject, TResult>(
14
12
  tool: AssistantToolProps<TArgs, TResult>,
15
13
  ) => {
16
14
  const Tool: AssistantTool = () => {
@@ -5,15 +5,13 @@ import {
5
5
  type AssistantToolUIProps,
6
6
  useAssistantToolUI,
7
7
  } from "./useAssistantToolUI";
8
+ import { ReadonlyJSONObject } from "../utils/json/json-value";
8
9
 
9
10
  export type AssistantToolUI = FC & {
10
11
  unstable_tool: AssistantToolUIProps<any, any>;
11
12
  };
12
13
 
13
- export const makeAssistantToolUI = <
14
- TArgs extends Record<string, unknown>,
15
- TResult,
16
- >(
14
+ export const makeAssistantToolUI = <TArgs extends ReadonlyJSONObject, TResult>(
17
15
  tool: AssistantToolUIProps<TArgs, TResult>,
18
16
  ) => {
19
17
  const ToolUI: AssistantToolUI = () => {
@@ -7,9 +7,10 @@ import {
7
7
  } from "../context/react/AssistantContext";
8
8
  import type { ToolCallContentPartComponent } from "../types/ContentPartComponentTypes";
9
9
  import type { Tool } from "./ModelContextTypes";
10
+ import { ReadonlyJSONObject } from "../utils/json/json-value";
10
11
 
11
12
  export type AssistantToolProps<
12
- TArgs extends Record<string, unknown>,
13
+ TArgs extends ReadonlyJSONObject,
13
14
  TResult,
14
15
  > = Tool<TArgs, TResult> & {
15
16
  toolName: string;
@@ -17,10 +18,7 @@ export type AssistantToolProps<
17
18
  disabled?: boolean | undefined;
18
19
  };
19
20
 
20
- export const useAssistantTool = <
21
- TArgs extends Record<string, unknown>,
22
- TResult,
23
- >(
21
+ export const useAssistantTool = <TArgs extends ReadonlyJSONObject, TResult>(
24
22
  tool: AssistantToolProps<TArgs, TResult>,
25
23
  ) => {
26
24
  const assistantRuntime = useAssistantRuntime();
@@ -3,11 +3,9 @@
3
3
  import { useEffect } from "react";
4
4
  import { useToolUIsStore } from "../context/react/AssistantContext";
5
5
  import type { ToolCallContentPartComponent } from "../types/ContentPartComponentTypes";
6
+ import { ReadonlyJSONObject } from "../utils/json/json-value";
6
7
 
7
- export type AssistantToolUIProps<
8
- TArgs extends Record<string, unknown>,
9
- TResult,
10
- > = {
8
+ export type AssistantToolUIProps<TArgs extends ReadonlyJSONObject, TResult> = {
11
9
  toolName: string;
12
10
  render: ToolCallContentPartComponent<TArgs, TResult>;
13
11
  };
@@ -3,8 +3,9 @@
3
3
  import { FC, useCallback, useEffect, useState } from "react";
4
4
  import { ToolCallContentPartProps } from "../types";
5
5
  import { create } from "zustand";
6
+ import { ReadonlyJSONObject } from "../utils/json/json-value";
6
7
 
7
- export const useInlineRender = <TArgs extends Record<string, unknown>, TResult>(
8
+ export const useInlineRender = <TArgs extends ReadonlyJSONObject, TResult>(
8
9
  toolUI: FC<ToolCallContentPartProps<TArgs, TResult>>,
9
10
  ): FC<ToolCallContentPartProps<TArgs, TResult>> => {
10
11
  const [useToolUI] = useState(() => create(() => toolUI));
@@ -4,6 +4,7 @@ import {
4
4
  LanguageModelV1CallSettingsSchema,
5
5
  } from "../../model-context/ModelContextTypes";
6
6
  import { z } from "zod";
7
+ import { ReadonlyJSONObject } from "../../utils/json/json-value";
7
8
 
8
9
  const LanguageModelV1FunctionToolSchema = z.object({
9
10
  type: z.literal("function"),
@@ -42,11 +43,12 @@ const CoreToolCallContentPartSchema = z.object({
42
43
  type: z.literal("tool-call"),
43
44
  toolCallId: z.string(),
44
45
  toolName: z.string(),
45
- args: z.record(z.unknown()),
46
+ args: z
47
+ .record(z.unknown())
48
+ .refine((c): c is ReadonlyJSONObject => c !== undefined),
46
49
  result: z.unknown().optional(),
47
50
  isError: z.boolean().optional(),
48
51
  });
49
- // args is required but unknown;
50
52
 
51
53
  const CoreUserMessageSchema = z.object({
52
54
  role: z.literal("user"),
@@ -1,6 +1,7 @@
1
1
  import { LanguageModelV1Message } from "@ai-sdk/provider";
2
2
  import { CoreMessage, ToolCallContentPart } from "../../../types";
3
3
  import { Writable } from "stream";
4
+ import { ReadonlyJSONObject } from "../../../utils/json/json-value";
4
5
 
5
6
  type fromLanguageModelMessagesOptions = {
6
7
  mergeSteps: boolean;
@@ -76,7 +77,7 @@ export const fromLanguageModelMessages = (
76
77
  toolCallId: part.toolCallId,
77
78
  toolName: part.toolName,
78
79
  argsText: JSON.stringify(part.args),
79
- args: part.args as Record<string, unknown>,
80
+ args: part.args as ReadonlyJSONObject,
80
81
  } satisfies ToolCallContentPart;
81
82
  }
82
83
  return part;
@@ -26,7 +26,7 @@ import { streamPartEncoderStream } from "./streams/utils/streamPartEncoderStream
26
26
  import { z } from "zod";
27
27
 
28
28
  type FinishResult = {
29
- messages: CoreMessage[];
29
+ messages: readonly CoreMessage[];
30
30
  metadata: {
31
31
  steps: readonly ThreadStep[];
32
32
  };
@@ -111,7 +111,7 @@ export const getEdgeRuntimeStream = async ({
111
111
  abortSignal,
112
112
 
113
113
  ...(!!system ? { system } : undefined),
114
- messages: [...messages],
114
+ messages,
115
115
  tools: lmServerTools.concat(clientTools as LanguageModelV1FunctionTool[]),
116
116
  ...(toolChoice ? { toolChoice } : undefined),
117
117
  });
@@ -201,7 +201,7 @@ export const createEdgeRuntimeAPI = (options: CreateEdgeRuntimeAPIOptions) => ({
201
201
  type StreamMessageOptions = LanguageModelV1CallSettings & {
202
202
  model: LanguageModelV1;
203
203
  system?: string;
204
- messages: CoreMessage[];
204
+ messages: readonly CoreMessage[];
205
205
  tools?: LanguageModelV1FunctionTool[];
206
206
  toolChoice?: LanguageModelV1ToolChoice;
207
207
  abortSignal: AbortSignal;
@@ -229,7 +229,7 @@ async function streamMessage({
229
229
 
230
230
  export function convertToLanguageModelPrompt(
231
231
  system: string | undefined,
232
- messages: CoreMessage[],
232
+ messages: readonly CoreMessage[],
233
233
  ): LanguageModelV1Prompt {
234
234
  const languageModelMessages: LanguageModelV1Prompt = [];
235
235
 
@@ -1,4 +1,5 @@
1
- import { JSONValue, LanguageModelV1StreamPart } from "@ai-sdk/provider";
1
+ import { LanguageModelV1StreamPart } from "@ai-sdk/provider";
2
+ import { ReadonlyJSONValue } from "../../../utils/json/json-value";
2
3
 
3
4
  export enum AssistantStreamChunkType {
4
5
  TextDelta = "0",
@@ -17,8 +18,8 @@ export enum AssistantStreamChunkType {
17
18
 
18
19
  export type AssistantStreamChunk = {
19
20
  [AssistantStreamChunkType.TextDelta]: string;
20
- [AssistantStreamChunkType.Data]: JSONValue[];
21
- [AssistantStreamChunkType.Annotation]: JSONValue[];
21
+ [AssistantStreamChunkType.Data]: ReadonlyJSONValue[];
22
+ [AssistantStreamChunkType.Annotation]: ReadonlyJSONValue[];
22
23
  [AssistantStreamChunkType.ToolCall]: {
23
24
  toolCallId: string;
24
25
  toolName: string;
@@ -1,5 +1,5 @@
1
1
  import { CoreChatModelRunResult } from "../../local/ChatModelAdapter";
2
- import { parsePartialJson } from "../partial-json/parse-partial-json";
2
+ import { parsePartialJson } from "../../../utils/json/parse-partial-json";
3
3
  import { LanguageModelV1StreamPart } from "@ai-sdk/provider";
4
4
  import { ToolResultStreamPart } from "./toolResultStream";
5
5
  import { MessageStatus, ToolCallContentPart } from "../../../types";
@@ -1,17 +1,18 @@
1
1
  import { Tool } from "../../../model-context/ModelContextTypes";
2
- import { JSONValue, LanguageModelV1StreamPart } from "@ai-sdk/provider";
2
+ import { LanguageModelV1StreamPart } from "@ai-sdk/provider";
3
3
  import { z } from "zod";
4
4
  import sjson from "secure-json-parse";
5
+ import { ReadonlyJSONValue } from "../../../utils/json/json-value";
5
6
 
6
7
  export type ToolResultStreamPart =
7
8
  | LanguageModelV1StreamPart
8
9
  | {
9
10
  type: "annotations";
10
- annotations: JSONValue[];
11
+ annotations: ReadonlyJSONValue[];
11
12
  }
12
13
  | {
13
14
  type: "data";
14
- data: JSONValue[];
15
+ data: ReadonlyJSONValue[];
15
16
  }
16
17
  | {
17
18
  type: "tool-result";
@@ -18,6 +18,8 @@ import {
18
18
  CoreToolCallContentPart,
19
19
  ThreadStep,
20
20
  } from "../../types/AssistantTypes";
21
+ import { ReadonlyJSONValue } from "../../utils/json/json-value";
22
+ import { parsePartialJson } from "../../utils/json/parse-partial-json";
21
23
 
22
24
  export type ThreadMessageLike = {
23
25
  readonly role: "assistant" | "user" | "system";
@@ -30,6 +32,14 @@ export type ThreadMessageLike = {
30
32
  | Unstable_AudioContentPart
31
33
  | ToolCallContentPart<any, any>
32
34
  | CoreToolCallContentPart<any, any>
35
+ | {
36
+ type: "tool-call";
37
+ toolCallId: string;
38
+ toolName: string;
39
+ argsText: string;
40
+ result?: unknown | undefined;
41
+ isError?: boolean | undefined;
42
+ }
33
43
  | UIContentPart
34
44
  )[];
35
45
  readonly id?: string | undefined;
@@ -38,8 +48,10 @@ export type ThreadMessageLike = {
38
48
  readonly attachments?: readonly CompleteAttachment[] | undefined;
39
49
  readonly metadata?:
40
50
  | {
41
- readonly unstable_annotations?: readonly unknown[] | undefined;
42
- readonly unstable_data?: readonly unknown[] | undefined;
51
+ readonly unstable_annotations?:
52
+ | readonly ReadonlyJSONValue[]
53
+ | undefined;
54
+ readonly unstable_data?: readonly ReadonlyJSONValue[] | undefined;
43
55
  readonly steps?: readonly ThreadStep[] | undefined;
44
56
  readonly custom?: Record<string, unknown> | undefined;
45
57
  }
@@ -88,7 +100,16 @@ export const fromThreadMessageLike = (
88
100
  return part;
89
101
 
90
102
  case "tool-call": {
91
- if ("argsText" in part) return part;
103
+ if ("argsText" in part) {
104
+ if ("args" in part) {
105
+ return part;
106
+ }
107
+
108
+ return {
109
+ ...part,
110
+ args: parsePartialJson(part.argsText),
111
+ };
112
+ }
92
113
  return {
93
114
  ...part,
94
115
  argsText: JSON.stringify(part.args),
@@ -8,6 +8,7 @@ import type {
8
8
  ToolCallContentPart,
9
9
  } from "../../types/AssistantTypes";
10
10
  import type { ModelContext } from "../../model-context/ModelContextTypes";
11
+ import { ReadonlyJSONValue } from "../../utils/json/json-value";
11
12
 
12
13
  export type ChatModelRunUpdate = {
13
14
  readonly content: readonly ThreadAssistantContentPart[];
@@ -18,8 +19,8 @@ export type ChatModelRunResult = {
18
19
  readonly content?: readonly ThreadAssistantContentPart[] | undefined;
19
20
  readonly status?: MessageStatus | undefined;
20
21
  readonly metadata?: {
21
- readonly unstable_annotations?: readonly unknown[] | undefined;
22
- readonly unstable_data?: readonly unknown[] | undefined;
22
+ readonly unstable_annotations?: readonly ReadonlyJSONValue[] | undefined;
23
+ readonly unstable_data?: readonly ReadonlyJSONValue[] | undefined;
23
24
  readonly steps?: readonly ThreadStep[] | undefined;
24
25
  readonly custom?: Record<string, unknown> | undefined;
25
26
  };
@@ -82,6 +82,21 @@ export class LocalThreadRuntimeCore
82
82
  if (hasUpdates) this._notifySubscribers();
83
83
  }
84
84
 
85
+ private _loadPromise: Promise<void> | undefined;
86
+ public __internal_load() {
87
+ if (this._loadPromise) return this._loadPromise;
88
+
89
+ const promise = this.adapters.history?.load() ?? Promise.resolve(null);
90
+
91
+ this._loadPromise = promise.then((repo) => {
92
+ if (!repo) return;
93
+ this.repository.import(repo);
94
+ this._notifySubscribers();
95
+ });
96
+
97
+ return this._loadPromise;
98
+ }
99
+
85
100
  public async append(message: AppendMessage): Promise<void> {
86
101
  this.ensureInitialized();
87
102
 
@@ -89,6 +104,10 @@ export class LocalThreadRuntimeCore
89
104
  attachments: message.attachments,
90
105
  });
91
106
  this.repository.addOrUpdateMessage(message.parentId, newMessage);
107
+ this._options.adapters.history?.append({
108
+ parentId: message.parentId,
109
+ message: newMessage,
110
+ });
92
111
 
93
112
  const startRun = message.startRun ?? message.role === "user";
94
113
  if (startRun) {
@@ -258,11 +277,28 @@ export class LocalThreadRuntimeCore
258
277
  });
259
278
  } else {
260
279
  updateMessage({
261
- status: { type: "incomplete", reason: "error", error: e },
280
+ status: {
281
+ type: "incomplete",
282
+ reason: "error",
283
+ error:
284
+ e instanceof Error
285
+ ? e.message
286
+ : `[${typeof e}] ${new String(e).toString()}`,
287
+ },
262
288
  });
263
289
 
264
290
  throw e;
265
291
  }
292
+ } finally {
293
+ if (
294
+ message.status.type === "complete" ||
295
+ message.status.type === "incomplete"
296
+ ) {
297
+ await this._options.adapters.history?.append({
298
+ parentId,
299
+ message: message,
300
+ });
301
+ }
266
302
  }
267
303
  return message;
268
304
  }
@@ -9,6 +9,7 @@ import {
9
9
  AssistantRuntimeImpl,
10
10
  } from "../../api/AssistantRuntime";
11
11
  import { ThreadRuntimeImpl } from "../../internal";
12
+ import { useRuntimeAdapters } from "../adapters/RuntimeAdapterProvider";
12
13
 
13
14
  export type LocalRuntime = AssistantRuntime & {
14
15
  reset: (options?: Parameters<LocalRuntimeCore["reset"]>[0]) => void;
@@ -37,18 +38,24 @@ export const useLocalRuntime = (
37
38
  adapter: ChatModelAdapter,
38
39
  { initialMessages, ...options }: LocalRuntimeOptions = {},
39
40
  ) => {
40
- const opt = {
41
- ...options,
42
- adapters: {
43
- ...options.adapters,
44
- chatModel: adapter,
45
- },
46
- };
41
+ const threadListAdapters = useRuntimeAdapters();
42
+ const opt = useMemo(
43
+ () => ({
44
+ ...options,
45
+ adapters: {
46
+ ...threadListAdapters,
47
+ ...options.adapters,
48
+ chatModel: adapter,
49
+ },
50
+ }),
51
+ [adapter, options, threadListAdapters],
52
+ );
47
53
 
48
54
  const [runtime] = useState(() => new LocalRuntimeCore(opt, initialMessages));
49
55
 
50
56
  useEffect(() => {
51
57
  runtime.threads.getMainThreadRuntimeCore().__internal_setOptions(opt);
58
+ runtime.threads.getMainThreadRuntimeCore().__internal_load();
52
59
  }, [runtime, opt]);
53
60
 
54
61
  return useMemo(() => LocalRuntimeImpl.create(runtime), [runtime]);
@@ -465,12 +465,7 @@ export class RemoteThreadListThreadListRuntimeCore
465
465
  private async _ensureThreadIsNotMain(threadId: string) {
466
466
  // if thread is main thread, switch to another thread
467
467
  if (threadId === this._mainThreadId) {
468
- const lastThreadId = this._state.value.threadIds[0];
469
- if (lastThreadId) {
470
- await this.switchToThread(lastThreadId);
471
- } else {
472
- await this.switchToNewThread();
473
- }
468
+ await this.switchToNewThread();
474
469
  }
475
470
  }
476
471
 
@@ -3,4 +3,3 @@ export type {
3
3
  RemoteThreadListAdapter as unstable_RemoteThreadListAdapter,
4
4
  RemoteThreadListSubscriber as unstable_RemoteThreadListSubscriber,
5
5
  } from "./types";
6
- export * from "./cloud";
@@ -1,5 +1,9 @@
1
1
  import type { ReactNode } from "react";
2
2
  import { CompleteAttachment } from "./AttachmentTypes";
3
+ import {
4
+ ReadonlyJSONObject,
5
+ ReadonlyJSONValue,
6
+ } from "../utils/json/json-value";
3
7
 
4
8
  export type MessageRole = "user" | "assistant" | "system";
5
9
 
@@ -70,7 +74,7 @@ export type UIContentPart = {
70
74
  };
71
75
 
72
76
  export type CoreToolCallContentPart<
73
- TArgs extends Record<string, unknown> = Record<string | number, unknown>,
77
+ TArgs extends ReadonlyJSONObject = ReadonlyJSONObject,
74
78
  TResult = unknown,
75
79
  > = {
76
80
  readonly type: "tool-call";
@@ -82,7 +86,7 @@ export type CoreToolCallContentPart<
82
86
  };
83
87
 
84
88
  export type ToolCallContentPart<
85
- TArgs extends Record<string, unknown> = Record<string | number, unknown>,
89
+ TArgs extends ReadonlyJSONObject = ReadonlyJSONObject,
86
90
  TResult = unknown,
87
91
  > = CoreToolCallContentPart<TArgs, TResult> & {
88
92
  readonly argsText: string;
@@ -160,7 +164,7 @@ export type MessageStatus =
160
164
  | "content-filter"
161
165
  | "other"
162
166
  | "error";
163
- readonly error?: unknown;
167
+ readonly error?: ReadonlyJSONValue;
164
168
  };
165
169
 
166
170
  export type ThreadSystemMessage = MessageCommonProps & {
@@ -185,8 +189,8 @@ export type ThreadAssistantMessage = MessageCommonProps & {
185
189
  readonly content: readonly ThreadAssistantContentPart[];
186
190
  readonly status: MessageStatus;
187
191
  readonly metadata: {
188
- readonly unstable_annotations: readonly unknown[];
189
- readonly unstable_data: readonly unknown[];
192
+ readonly unstable_annotations: readonly ReadonlyJSONValue[];
193
+ readonly unstable_data: readonly ReadonlyJSONValue[];
190
194
  readonly steps: readonly ThreadStep[];
191
195
  readonly custom: Record<string, unknown>;
192
196
  };
@@ -211,8 +215,8 @@ export type AppendMessage = CoreMessage & {
211
215
  type BaseThreadMessage = {
212
216
  readonly status?: ThreadAssistantMessage["status"];
213
217
  readonly metadata: {
214
- readonly unstable_annotations?: readonly unknown[];
215
- readonly unstable_data?: readonly unknown[];
218
+ readonly unstable_annotations?: readonly ReadonlyJSONValue[];
219
+ readonly unstable_data?: readonly ReadonlyJSONValue[];
216
220
  readonly steps?: readonly ThreadStep[];
217
221
  readonly custom: Record<string, unknown>;
218
222
  };