@assistant-ui/core 0.1.17 → 0.2.2

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 (205) hide show
  1. package/README.md +45 -0
  2. package/dist/index.d.ts +5 -4
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +3 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/react/client/Tools.d.ts +6 -1
  7. package/dist/react/client/Tools.d.ts.map +1 -1
  8. package/dist/react/client/Tools.js +16 -19
  9. package/dist/react/client/Tools.js.map +1 -1
  10. package/dist/react/index.d.ts +2 -1
  11. package/dist/react/index.d.ts.map +1 -1
  12. package/dist/react/index.js +1 -0
  13. package/dist/react/index.js.map +1 -1
  14. package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
  15. package/dist/react/primitive-hooks/useComposerSend.js +2 -3
  16. package/dist/react/primitive-hooks/useComposerSend.js.map +1 -1
  17. package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts +5 -0
  18. package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -0
  19. package/dist/react/primitive-hooks/useThreadListLoadMore.js +11 -0
  20. package/dist/react/primitive-hooks/useThreadListLoadMore.js.map +1 -0
  21. package/dist/react/primitives/message/MessageAttachments.js +1 -1
  22. package/dist/react/primitives/message/MessageAttachments.js.map +1 -1
  23. package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
  24. package/dist/react/primitives/message/MessageParts.js +14 -10
  25. package/dist/react/primitives/message/MessageParts.js.map +1 -1
  26. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +2 -2
  27. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  28. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +4 -3
  29. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  30. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +8 -4
  31. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  32. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +86 -38
  33. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  34. package/dist/react/runtimes/cloud/auiV0.d.ts +10 -1
  35. package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
  36. package/dist/react/runtimes/cloud/auiV0.js +21 -3
  37. package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
  38. package/dist/react/runtimes/useLocalRuntime.d.ts +1 -1
  39. package/dist/react/runtimes/useToolInvocations.d.ts +2 -1
  40. package/dist/react/runtimes/useToolInvocations.d.ts.map +1 -1
  41. package/dist/react/runtimes/useToolInvocations.js +16 -1
  42. package/dist/react/runtimes/useToolInvocations.js.map +1 -1
  43. package/dist/react/types/scopes/tools.d.ts +4 -0
  44. package/dist/react/types/scopes/tools.d.ts.map +1 -1
  45. package/dist/runtime/api/assistant-runtime.d.ts +0 -33
  46. package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
  47. package/dist/runtime/api/assistant-runtime.js +0 -23
  48. package/dist/runtime/api/assistant-runtime.js.map +1 -1
  49. package/dist/runtime/api/bindings.d.ts +1 -3
  50. package/dist/runtime/api/bindings.d.ts.map +1 -1
  51. package/dist/runtime/api/composer-runtime.d.ts +1 -0
  52. package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
  53. package/dist/runtime/api/composer-runtime.js +2 -0
  54. package/dist/runtime/api/composer-runtime.js.map +1 -1
  55. package/dist/runtime/api/message-runtime.d.ts +1 -6
  56. package/dist/runtime/api/message-runtime.d.ts.map +1 -1
  57. package/dist/runtime/api/message-runtime.js.map +1 -1
  58. package/dist/runtime/api/thread-list-runtime.d.ts +4 -0
  59. package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
  60. package/dist/runtime/api/thread-list-runtime.js +6 -0
  61. package/dist/runtime/api/thread-list-runtime.js.map +1 -1
  62. package/dist/runtime/api/thread-runtime.d.ts +3 -24
  63. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  64. package/dist/runtime/api/thread-runtime.js +1 -20
  65. package/dist/runtime/api/thread-runtime.js.map +1 -1
  66. package/dist/runtime/base/base-composer-runtime-core.d.ts +1 -0
  67. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  68. package/dist/runtime/base/base-composer-runtime-core.js +1 -1
  69. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  70. package/dist/runtime/base/base-thread-runtime-core.d.ts +1 -1
  71. package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
  72. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts +1 -0
  73. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
  74. package/dist/runtime/base/default-edit-composer-runtime-core.js +3 -0
  75. package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
  76. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +1 -0
  77. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
  78. package/dist/runtime/base/default-thread-composer-runtime-core.js +12 -1
  79. package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
  80. package/dist/runtime/interfaces/composer-runtime-core.d.ts +1 -0
  81. package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
  82. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +3 -0
  83. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
  84. package/dist/runtime/interfaces/thread-runtime-core.d.ts +6 -4
  85. package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
  86. package/dist/runtime/utils/chat-model-adapter.d.ts +0 -4
  87. package/dist/runtime/utils/chat-model-adapter.d.ts.map +1 -1
  88. package/dist/runtime/utils/external-store-message.d.ts +0 -4
  89. package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
  90. package/dist/runtime/utils/external-store-message.js +0 -7
  91. package/dist/runtime/utils/external-store-message.js.map +1 -1
  92. package/dist/runtimes/assistant-transport/utils.d.ts +0 -9
  93. package/dist/runtimes/assistant-transport/utils.d.ts.map +1 -1
  94. package/dist/runtimes/assistant-transport/utils.js +0 -13
  95. package/dist/runtimes/assistant-transport/utils.js.map +1 -1
  96. package/dist/runtimes/external-store/external-store-adapter.d.ts +15 -0
  97. package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
  98. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +1 -1
  99. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
  100. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +14 -12
  101. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
  102. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +1 -1
  103. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  104. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +2 -3
  105. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  106. package/dist/runtimes/local/local-thread-runtime-core.d.ts +1 -1
  107. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  108. package/dist/runtimes/local/local-thread-runtime-core.js +1 -4
  109. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  110. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +2 -1
  111. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
  112. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +2 -3
  113. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
  114. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
  115. package/dist/runtimes/remote-thread-list/empty-thread-core.js +2 -3
  116. package/dist/runtimes/remote-thread-list/empty-thread-core.js.map +1 -1
  117. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +12 -1
  118. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
  119. package/dist/runtimes/remote-thread-list/remote-thread-state.js +34 -0
  120. package/dist/runtimes/remote-thread-list/remote-thread-state.js.map +1 -1
  121. package/dist/runtimes/remote-thread-list/types.d.ts +5 -1
  122. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
  123. package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
  124. package/dist/store/clients/no-op-composer-client.js +1 -0
  125. package/dist/store/clients/no-op-composer-client.js.map +1 -1
  126. package/dist/store/clients/thread-message-client.d.ts.map +1 -1
  127. package/dist/store/clients/thread-message-client.js +0 -1
  128. package/dist/store/clients/thread-message-client.js.map +1 -1
  129. package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
  130. package/dist/store/runtime-clients/composer-runtime-client.js +1 -0
  131. package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
  132. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
  133. package/dist/store/runtime-clients/thread-list-runtime-client.js +3 -0
  134. package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
  135. package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
  136. package/dist/store/runtime-clients/thread-runtime-client.js +0 -1
  137. package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
  138. package/dist/store/scopes/composer.d.ts +9 -0
  139. package/dist/store/scopes/composer.d.ts.map +1 -1
  140. package/dist/store/scopes/message.d.ts +1 -3
  141. package/dist/store/scopes/message.d.ts.map +1 -1
  142. package/dist/store/scopes/thread.d.ts +0 -4
  143. package/dist/store/scopes/thread.d.ts.map +1 -1
  144. package/dist/store/scopes/threads.d.ts +3 -0
  145. package/dist/store/scopes/threads.d.ts.map +1 -1
  146. package/dist/types/index.d.ts +1 -1
  147. package/dist/types/index.d.ts.map +1 -1
  148. package/dist/types/message.d.ts +28 -1
  149. package/dist/types/message.d.ts.map +1 -1
  150. package/dist/types/message.js +2 -1
  151. package/dist/types/message.js.map +1 -1
  152. package/package.json +11 -12
  153. package/src/index.ts +8 -6
  154. package/src/react/client/Tools.ts +46 -22
  155. package/src/react/index.ts +2 -1
  156. package/src/react/primitive-hooks/useComposerSend.ts +2 -3
  157. package/src/react/primitive-hooks/useThreadListLoadMore.ts +15 -0
  158. package/src/react/primitives/message/MessageAttachments.test.tsx +50 -0
  159. package/src/react/primitives/message/MessageAttachments.tsx +1 -1
  160. package/src/react/primitives/message/MessageParts.tsx +20 -9
  161. package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +7 -6
  162. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +96 -43
  163. package/src/react/runtimes/cloud/auiV0.ts +37 -4
  164. package/src/react/runtimes/useToolInvocations.ts +21 -1
  165. package/src/react/types/scopes/tools.ts +5 -0
  166. package/src/runtime/api/assistant-runtime.ts +0 -62
  167. package/src/runtime/api/bindings.ts +1 -6
  168. package/src/runtime/api/composer-runtime.ts +3 -0
  169. package/src/runtime/api/message-runtime.ts +1 -8
  170. package/src/runtime/api/thread-list-runtime.ts +10 -0
  171. package/src/runtime/api/thread-runtime.ts +1 -46
  172. package/src/runtime/base/base-composer-runtime-core.ts +2 -1
  173. package/src/runtime/base/base-thread-runtime-core.ts +1 -1
  174. package/src/runtime/base/default-edit-composer-runtime-core.ts +4 -0
  175. package/src/runtime/base/default-thread-composer-runtime-core.ts +12 -1
  176. package/src/runtime/interfaces/composer-runtime-core.ts +1 -0
  177. package/src/runtime/interfaces/thread-list-runtime-core.ts +3 -0
  178. package/src/runtime/interfaces/thread-runtime-core.ts +6 -5
  179. package/src/runtime/utils/chat-model-adapter.ts +0 -5
  180. package/src/runtime/utils/external-store-message.ts +0 -8
  181. package/src/runtimes/assistant-transport/utils.ts +0 -28
  182. package/src/runtimes/external-store/external-store-adapter.ts +15 -0
  183. package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +15 -9
  184. package/src/runtimes/external-store/external-store-thread-runtime-core.ts +2 -4
  185. package/src/runtimes/local/local-thread-runtime-core.ts +1 -5
  186. package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +2 -4
  187. package/src/runtimes/remote-thread-list/empty-thread-core.ts +2 -4
  188. package/src/runtimes/remote-thread-list/remote-thread-state.ts +54 -1
  189. package/src/runtimes/remote-thread-list/types.ts +6 -1
  190. package/src/store/clients/no-op-composer-client.ts +1 -0
  191. package/src/store/clients/thread-message-client.ts +0 -1
  192. package/src/store/runtime-clients/composer-runtime-client.ts +1 -0
  193. package/src/store/runtime-clients/thread-list-runtime-client.ts +3 -0
  194. package/src/store/runtime-clients/thread-runtime-client.ts +0 -1
  195. package/src/store/scopes/composer.ts +9 -0
  196. package/src/store/scopes/message.ts +1 -6
  197. package/src/store/scopes/thread.ts +0 -5
  198. package/src/store/scopes/threads.ts +3 -0
  199. package/src/tests/RemoteThreadListThreadListRuntimeCore-loadMore.test.ts +448 -0
  200. package/src/tests/RemoteThreadListThreadListRuntimeCore-reload.test.ts +6 -1
  201. package/src/tests/auiV0Encode.test.ts +55 -0
  202. package/src/tests/composer-can-send.test.ts +112 -0
  203. package/src/tests/external-store-thread-list-runtime-core.test.ts +34 -0
  204. package/src/types/index.ts +2 -0
  205. package/src/types/message.ts +44 -7
@@ -0,0 +1,112 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { DefaultThreadComposerRuntimeCore } from "../runtime/base/default-thread-composer-runtime-core";
3
+ import { DefaultEditComposerRuntimeCore } from "../runtime/base/default-edit-composer-runtime-core";
4
+ import type { ThreadRuntimeCore } from "../runtime/interfaces/thread-runtime-core";
5
+ import type { ThreadMessage } from "../types/message";
6
+
7
+ type ThreadRuntimeStub = Omit<ThreadRuntimeCore, "composer"> & {
8
+ notify: () => void;
9
+ };
10
+
11
+ const makeRuntimeStub = (
12
+ overrides: Partial<ThreadRuntimeCore> = {},
13
+ ): ThreadRuntimeStub => {
14
+ const subscribers = new Set<() => void>();
15
+ const stub = {
16
+ append: vi.fn(),
17
+ cancelRun: vi.fn(),
18
+ subscribe: (cb: () => void) => {
19
+ subscribers.add(cb);
20
+ return () => subscribers.delete(cb);
21
+ },
22
+ capabilities: { cancel: false },
23
+ messages: [],
24
+ isDisabled: false,
25
+ isSendDisabled: false,
26
+ isLoading: false,
27
+ composer: { runConfig: {} },
28
+ notify: () => {
29
+ for (const cb of subscribers) cb();
30
+ },
31
+ ...overrides,
32
+ } as unknown as ThreadRuntimeStub;
33
+ return stub;
34
+ };
35
+
36
+ const makeUserMessage = (text = "old"): ThreadMessage =>
37
+ ({
38
+ id: "msg-1",
39
+ role: "user",
40
+ createdAt: new Date(),
41
+ content: [{ type: "text", text }],
42
+ attachments: [],
43
+ metadata: { custom: {} },
44
+ }) as ThreadMessage;
45
+
46
+ describe("DefaultThreadComposerRuntimeCore.canSend", () => {
47
+ it("is false when the composer is empty", () => {
48
+ const composer = new DefaultThreadComposerRuntimeCore(makeRuntimeStub());
49
+ expect(composer.canSend).toBe(false);
50
+ });
51
+
52
+ it("is true when in editing mode with non-empty text", () => {
53
+ const composer = new DefaultThreadComposerRuntimeCore(makeRuntimeStub());
54
+ composer.setText("hi");
55
+ expect(composer.canSend).toBe(true);
56
+ });
57
+
58
+ it("is false when the runtime reports isSendDisabled", () => {
59
+ const composer = new DefaultThreadComposerRuntimeCore(
60
+ makeRuntimeStub({ isSendDisabled: true }),
61
+ );
62
+ composer.setText("hi");
63
+ expect(composer.canSend).toBe(false);
64
+ });
65
+
66
+ it("notifies subscribers when isSendDisabled flips", () => {
67
+ const stub = makeRuntimeStub();
68
+ const composer = new DefaultThreadComposerRuntimeCore(stub);
69
+ composer.setText("hi");
70
+ const onChange = vi.fn();
71
+ composer.subscribe(onChange);
72
+
73
+ (stub as { isSendDisabled: boolean }).isSendDisabled = true;
74
+ stub.notify();
75
+ expect(onChange).toHaveBeenCalled();
76
+ expect(composer.canSend).toBe(false);
77
+ });
78
+ });
79
+
80
+ describe("BaseComposerRuntimeCore.send", () => {
81
+ it("is a no-op when canSend is false because of isSendDisabled", async () => {
82
+ const stub = makeRuntimeStub({ isSendDisabled: true });
83
+ const composer = new DefaultThreadComposerRuntimeCore(stub);
84
+ composer.setText("hi");
85
+
86
+ await composer.send();
87
+
88
+ expect(stub.append).not.toHaveBeenCalled();
89
+ });
90
+
91
+ it("dispatches when canSend is true", async () => {
92
+ const stub = makeRuntimeStub();
93
+ const composer = new DefaultThreadComposerRuntimeCore(stub);
94
+ composer.setText("hi");
95
+
96
+ await composer.send();
97
+
98
+ expect(stub.append).toHaveBeenCalledTimes(1);
99
+ });
100
+ });
101
+
102
+ describe("DefaultEditComposerRuntimeCore.canSend", () => {
103
+ it("ignores runtime.isSendDisabled (thread-scoped flag does not block edits)", () => {
104
+ const stub = makeRuntimeStub({ isSendDisabled: true });
105
+ const composer = new DefaultEditComposerRuntimeCore(stub, () => {}, {
106
+ parentId: null,
107
+ message: makeUserMessage("seed"),
108
+ });
109
+
110
+ expect(composer.canSend).toBe(true);
111
+ });
112
+ });
@@ -146,6 +146,33 @@ describe("ExternalStoreThreadListRuntimeCore - __internal_setAdapter", () => {
146
146
  core.__internal_setAdapter(makeAdapter({ threadId: "thread-beta" }));
147
147
  expect(callback).toHaveBeenCalled();
148
148
  });
149
+
150
+ it("synthesizes mainThreadId entry after a switch to a threadId not in the threads list (regression: #3971)", () => {
151
+ const core = new ExternalStoreThreadListRuntimeCore(
152
+ makeAdapter({ threadId: "thread-alpha" }),
153
+ makeFactory(),
154
+ );
155
+ core.__internal_setAdapter(makeAdapter({ threadId: "thread-beta" }));
156
+ const item = core.getItemById("thread-beta");
157
+ expect(item).toBeDefined();
158
+ expect(item?.id).toBe("thread-beta");
159
+ });
160
+
161
+ it("does not retain stale synthesized entries across mainThreadId switches (regression: #3971)", () => {
162
+ const core = new ExternalStoreThreadListRuntimeCore(
163
+ makeAdapter({ threadId: "thread-alpha" }),
164
+ makeFactory(),
165
+ );
166
+ core.__internal_setAdapter(makeAdapter({ threadId: "thread-beta" }));
167
+ core.__internal_setAdapter(makeAdapter({ threadId: "thread-gamma" }));
168
+ expect(core.getItemById("thread-alpha")).toBeUndefined();
169
+ expect(core.getItemById("thread-beta")).toBeUndefined();
170
+ expect(core.getItemById("thread-gamma")).toBeDefined();
171
+ expect(Object.keys(core.threadItems).sort()).toEqual([
172
+ "DEFAULT_THREAD_ID",
173
+ "thread-gamma",
174
+ ]);
175
+ });
149
176
  });
150
177
 
151
178
  describe("ExternalStoreThreadListRuntimeCore - isMain via ThreadListRuntimeImpl", () => {
@@ -187,6 +214,13 @@ describe("ExternalStoreThreadListRuntimeCore - isMain via ThreadListRuntimeImpl"
187
214
  expect(state.mainThreadId).toBe("thread-alpha");
188
215
  expect(state.threadIds).toEqual(["thread-alpha", "thread-beta"]);
189
216
  });
217
+
218
+ it("does not throw when adapter.threadId has no matching threads entry (regression: #3971)", () => {
219
+ const impl = buildImpl({ threadId: "thread-alpha" });
220
+ expect(impl.mainItem.getState().id).toBe("thread-alpha");
221
+ expect(impl.mainItem.getState().isMain).toBe(true);
222
+ expect(impl.mainItem.getState().status).toBe("regular");
223
+ });
190
224
  });
191
225
 
192
226
  describe("ExternalStoreThreadListRuntimeCore - switchToThread", () => {
@@ -2,12 +2,14 @@ export type {
2
2
  // Message parts
3
3
  TextMessagePart,
4
4
  ReasoningMessagePart,
5
+ SourceProviderMetadata,
5
6
  SourceMessagePart,
6
7
  ImageMessagePart,
7
8
  FileMessagePart,
8
9
  DataMessagePart,
9
10
  Unstable_AudioMessagePart,
10
11
  ToolCallMessagePart,
12
+ ToolModelContentPart,
11
13
  ThreadUserMessagePart,
12
14
  ThreadAssistantMessagePart,
13
15
  // Message status
@@ -2,8 +2,11 @@ import type {
2
2
  ReadonlyJSONObject,
3
3
  ReadonlyJSONValue,
4
4
  } from "assistant-stream/utils";
5
+ import type { ToolModelContentPart } from "assistant-stream";
5
6
  import type { CompleteAttachment } from "./attachment";
6
7
 
8
+ export type { ToolModelContentPart };
9
+
7
10
  export type TextMessagePart = {
8
11
  readonly type: "text";
9
12
  readonly text: string;
@@ -16,15 +19,32 @@ export type ReasoningMessagePart = {
16
19
  readonly parentId?: string;
17
20
  };
18
21
 
19
- export type SourceMessagePart = {
20
- readonly type: "source";
21
- readonly sourceType: "url";
22
- readonly id: string;
23
- readonly url: string;
24
- readonly title?: string;
25
- readonly parentId?: string;
22
+ export type SourceProviderMetadata = {
23
+ readonly [providerName: string]: ReadonlyJSONObject;
26
24
  };
27
25
 
26
+ export type SourceMessagePart =
27
+ | {
28
+ readonly type: "source";
29
+ readonly sourceType: "url";
30
+ readonly id: string;
31
+ readonly url: string;
32
+ readonly title?: string;
33
+ readonly providerMetadata?: SourceProviderMetadata;
34
+ readonly parentId?: string;
35
+ }
36
+ | {
37
+ readonly type: "source";
38
+ readonly sourceType: "document";
39
+ readonly id: string;
40
+ readonly url?: undefined;
41
+ readonly title: string;
42
+ readonly mediaType: string;
43
+ readonly filename?: string;
44
+ readonly providerMetadata?: SourceProviderMetadata;
45
+ readonly parentId?: string;
46
+ };
47
+
28
48
  export type ImageMessagePart = {
29
49
  readonly type: "image";
30
50
  readonly image: string;
@@ -53,6 +73,21 @@ export type DataMessagePart<T = any> = {
53
73
  readonly data: T;
54
74
  };
55
75
 
76
+ export type McpAppMetadata = {
77
+ readonly resourceUri: string;
78
+ readonly mimeType?: string;
79
+ readonly visibility?: readonly ("model" | "app")[];
80
+ };
81
+
82
+ export const MCP_APP_URI_SCHEME = "ui://";
83
+
84
+ export const isMcpAppUri = (uri: string | undefined): boolean =>
85
+ !!uri?.startsWith(MCP_APP_URI_SCHEME);
86
+
87
+ export type ToolCallMessagePartMcpMetadata = {
88
+ readonly app?: McpAppMetadata;
89
+ };
90
+
56
91
  export type ToolCallMessagePart<
57
92
  TArgs = ReadonlyJSONObject,
58
93
  TResult = unknown,
@@ -65,6 +100,8 @@ export type ToolCallMessagePart<
65
100
  readonly isError?: boolean | undefined;
66
101
  readonly argsText: string;
67
102
  readonly artifact?: unknown;
103
+ readonly mcp?: ToolCallMessagePartMcpMetadata;
104
+ readonly modelContent?: readonly ToolModelContentPart[] | undefined;
68
105
  readonly interrupt?: { type: "human"; payload: unknown };
69
106
  readonly parentId?: string;
70
107
  readonly messages?: readonly ThreadMessage[];