@assistant-ui/react 0.7.58 → 0.7.59

Sign up to get free protection for your applications and to get access to all the features.
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
  };