@assistant-ui/react 0.12.3 → 0.12.5

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 (33) hide show
  1. package/dist/client/ExternalThread.d.ts +16 -0
  2. package/dist/client/ExternalThread.d.ts.map +1 -0
  3. package/dist/client/ExternalThread.js +329 -0
  4. package/dist/client/ExternalThread.js.map +1 -0
  5. package/dist/client/InMemoryThreadList.d.ts +9 -0
  6. package/dist/client/InMemoryThreadList.d.ts.map +1 -0
  7. package/dist/client/InMemoryThreadList.js +129 -0
  8. package/dist/client/InMemoryThreadList.js.map +1 -0
  9. package/dist/client/index.d.ts +6 -0
  10. package/dist/client/index.d.ts.map +1 -0
  11. package/dist/client/index.js +6 -0
  12. package/dist/client/index.js.map +1 -0
  13. package/dist/devtools/index.d.ts +1 -1
  14. package/dist/devtools/index.d.ts.map +1 -1
  15. package/dist/devtools/index.js +1 -1
  16. package/dist/devtools/index.js.map +1 -1
  17. package/dist/index.d.ts +1 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +1 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/legacy-runtime/AssistantRuntimeProvider.d.ts.map +1 -1
  22. package/dist/legacy-runtime/AssistantRuntimeProvider.js +7 -1
  23. package/dist/legacy-runtime/AssistantRuntimeProvider.js.map +1 -1
  24. package/dist/primitives/message/MessagePartsGrouped.js +1 -1
  25. package/dist/primitives/message/MessagePartsGrouped.js.map +1 -1
  26. package/package.json +8 -8
  27. package/src/client/ExternalThread.ts +491 -0
  28. package/src/client/InMemoryThreadList.ts +197 -0
  29. package/src/client/index.ts +12 -0
  30. package/src/devtools/index.ts +1 -1
  31. package/src/index.ts +1 -0
  32. package/src/legacy-runtime/AssistantRuntimeProvider.tsx +7 -1
  33. package/src/primitives/message/MessagePartsGrouped.tsx +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"MessagePartsGrouped.js","sourceRoot":"","sources":["../../../src/primitives/message/MessagePartsGrouped.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MessagePartsGrouped.js","sourceRoot":"","sources":["../../../src/primitives/message/MessagePartsGrouped.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@assistant-ui/react",
3
- "version": "0.12.3",
3
+ "version": "0.12.5",
4
4
  "description": "TypeScript/React library for AI Chat",
5
5
  "keywords": [
6
6
  "radix-ui",
@@ -49,9 +49,9 @@
49
49
  ],
50
50
  "sideEffects": false,
51
51
  "dependencies": {
52
- "assistant-cloud": "^0.1.15",
53
- "@assistant-ui/tap": "^0.4.2",
54
- "@assistant-ui/store": "^0.1.2",
52
+ "assistant-cloud": "^0.1.16",
53
+ "@assistant-ui/tap": "^0.4.3",
54
+ "@assistant-ui/store": "^0.1.4",
55
55
  "@radix-ui/primitive": "^1.1.3",
56
56
  "@radix-ui/react-compose-refs": "^1.1.2",
57
57
  "@radix-ui/react-context": "^1.1.3",
@@ -61,11 +61,11 @@
61
61
  "@radix-ui/react-slot": "^1.2.4",
62
62
  "@radix-ui/react-use-callback-ref": "^1.1.1",
63
63
  "@radix-ui/react-use-escape-keydown": "^1.1.1",
64
- "assistant-stream": "^0.3.0",
64
+ "assistant-stream": "^0.3.1",
65
65
  "nanoid": "^5.1.6",
66
66
  "react-textarea-autosize": "^8.5.9",
67
67
  "zod": "^4.3.6",
68
- "zustand": "^5.0.10"
68
+ "zustand": "^5.0.11"
69
69
  },
70
70
  "peerDependencies": {
71
71
  "@types/react": "*",
@@ -83,8 +83,8 @@
83
83
  },
84
84
  "devDependencies": {
85
85
  "@types/json-schema": "^7.0.15",
86
- "@types/node": "^25.0.10",
87
- "@types/react": "^19.2.9",
86
+ "@types/node": "^25.2.0",
87
+ "@types/react": "^19.2.10",
88
88
  "@types/react-dom": "^19.2.3",
89
89
  "react": "^19.2.4",
90
90
  "react-dom": "^19.2.4",
@@ -0,0 +1,491 @@
1
+ import {
2
+ resource,
3
+ tapState,
4
+ tapMemo,
5
+ tapEffect,
6
+ tapEffectEvent,
7
+ } from "@assistant-ui/tap";
8
+ import {
9
+ type ClientOutput,
10
+ tapClientLookup,
11
+ attachDefaultPeers,
12
+ tapClientResource,
13
+ Derived,
14
+ } from "@assistant-ui/store";
15
+ import { withKey } from "@assistant-ui/tap";
16
+ import type { Attachment } from "../types/AttachmentTypes";
17
+ import { ModelContext } from "./ModelContextClient";
18
+ import { Tools } from "./Tools";
19
+ import { Suggestions } from "./Suggestions";
20
+ import {
21
+ ThreadAssistantMessagePart,
22
+ ThreadUserMessagePart,
23
+ } from "../types/MessagePartTypes";
24
+ import type { ThreadMessage } from "../types";
25
+
26
+ export type ExternalThreadMessage = ThreadMessage & {
27
+ id: string;
28
+ };
29
+
30
+ export type ExternalThreadProps = {
31
+ messages: readonly ExternalThreadMessage[];
32
+ isRunning?: boolean;
33
+ onNew?: (message: any) => void;
34
+ onEdit?: (message: any) => void;
35
+ onReload?: (parentId: string | null) => void;
36
+ onStartRun?: () => void;
37
+ onCancel?: () => void;
38
+ };
39
+
40
+ type MessageClientProps = {
41
+ message: ExternalThreadMessage;
42
+ index: number;
43
+ onEdit?: (message: any) => void;
44
+ onReload?: () => void;
45
+ };
46
+
47
+ // Message Client - minimal implementation
48
+ const MessageClient = resource(
49
+ ({
50
+ message,
51
+ index,
52
+ onEdit,
53
+ onReload,
54
+ }: MessageClientProps): ClientOutput<"message"> => {
55
+ const [isCopied, setIsCopied] = tapState(false);
56
+ const [isHovering, setIsHovering] = tapState(false);
57
+ const [isEditing, setIsEditing] = tapState(false);
58
+
59
+ const partClients = tapClientLookup(
60
+ () =>
61
+ message.content.map((part, idx) =>
62
+ withKey(idx, PartResource({ part })),
63
+ ),
64
+ [message.content],
65
+ );
66
+
67
+ const attachmentClients = tapClientLookup(
68
+ () =>
69
+ (message.attachments ?? []).map((attachment) =>
70
+ withKey(
71
+ attachment.id,
72
+ AttachmentResource({
73
+ attachment,
74
+ onRemove: () => {},
75
+ }),
76
+ ),
77
+ ),
78
+ [message.attachments],
79
+ );
80
+
81
+ const handleBeginEdit = () => {
82
+ setIsEditing(true);
83
+ };
84
+
85
+ const handleCancelEdit = () => {
86
+ setIsEditing(false);
87
+ };
88
+
89
+ const handleSendEdit = (msg: any) => {
90
+ onEdit?.({
91
+ ...msg,
92
+ parentId: message.id,
93
+ sourceId: message.id,
94
+ });
95
+ setIsEditing(false);
96
+ };
97
+
98
+ const composerClient = tapClientResource(
99
+ ComposerClientResource({
100
+ type: "edit",
101
+ isEditing,
102
+ canCancel: true,
103
+ onCancel: handleCancelEdit,
104
+ onBeginEdit: handleBeginEdit,
105
+ onSend: handleSendEdit,
106
+ message,
107
+ }),
108
+ );
109
+
110
+ const state = tapMemo(() => {
111
+ return {
112
+ ...message,
113
+ attachments: message.attachments ?? [],
114
+ parentId: null,
115
+ isLast: false, // Will be set by thread
116
+ branchNumber: 1,
117
+ branchCount: 1,
118
+ speech: undefined,
119
+ submittedFeedback: undefined,
120
+ parts: partClients.state,
121
+ isCopied,
122
+ isHovering,
123
+ index,
124
+ composer: composerClient.state,
125
+ };
126
+ }, [
127
+ message,
128
+ isCopied,
129
+ isHovering,
130
+ index,
131
+ composerClient.state,
132
+ partClients.state,
133
+ ]);
134
+
135
+ return {
136
+ state,
137
+ methods: {
138
+ getState: () => state,
139
+ composer: composerClient.methods,
140
+ reload: () => {
141
+ onReload?.();
142
+ },
143
+ speak: () => {},
144
+ stopSpeaking: () => {},
145
+ submitFeedback: () => {},
146
+ switchToBranch: () => {},
147
+ getCopyText: () =>
148
+ message.content.map((c) => ("text" in c ? c.text : "")).join(""),
149
+ part: (selector) => {
150
+ if ("index" in selector) {
151
+ return partClients.get(selector);
152
+ }
153
+ const partIndex = state.parts.findIndex(
154
+ (p) =>
155
+ p.type === "tool-call" && p.toolCallId === selector.toolCallId,
156
+ );
157
+ return partClients.get({ index: partIndex });
158
+ },
159
+ attachment: (selector) => {
160
+ if ("id" in selector) {
161
+ return attachmentClients.get({ key: selector.id });
162
+ }
163
+ return attachmentClients.get(selector);
164
+ },
165
+ setIsCopied,
166
+ setIsHovering,
167
+ },
168
+ };
169
+ },
170
+ );
171
+
172
+ type PartResourceProps = {
173
+ part: ThreadAssistantMessagePart | ThreadUserMessagePart;
174
+ };
175
+
176
+ // Part Client - minimal implementation
177
+ const PartResource = resource(
178
+ ({ part }: PartResourceProps): ClientOutput<"part"> => {
179
+ const state = tapMemo(
180
+ () => ({
181
+ ...part,
182
+ status: { type: "complete" as const },
183
+ }),
184
+ [part],
185
+ );
186
+
187
+ return {
188
+ state,
189
+ methods: {
190
+ getState: () => state,
191
+ addToolResult: () => {},
192
+ resumeToolCall: () => {},
193
+ },
194
+ };
195
+ },
196
+ );
197
+
198
+ type AttachmentResourceProps = {
199
+ attachment: Attachment;
200
+ onRemove?: () => void;
201
+ };
202
+
203
+ // Attachment Client - minimal implementation
204
+ const AttachmentResource = resource(
205
+ ({
206
+ attachment,
207
+ onRemove,
208
+ }: AttachmentResourceProps): ClientOutput<"attachment"> => {
209
+ return {
210
+ state: attachment,
211
+ methods: {
212
+ getState: () => attachment,
213
+ remove: async () => {
214
+ onRemove?.();
215
+ },
216
+ },
217
+ };
218
+ },
219
+ );
220
+
221
+ type ComposerClientResourceProps = {
222
+ type: "thread" | "edit";
223
+ isEditing: boolean;
224
+ canCancel: boolean;
225
+ onCancel: () => void;
226
+ onBeginEdit?: () => void;
227
+ onSend?: (message: any) => void;
228
+ message?: ExternalThreadMessage;
229
+ };
230
+
231
+ // Composer Client - minimal implementation
232
+ const ComposerClientResource = resource(
233
+ ({
234
+ type,
235
+ isEditing,
236
+ canCancel,
237
+ onCancel,
238
+ onBeginEdit,
239
+ onSend,
240
+ message,
241
+ }: ComposerClientResourceProps): ClientOutput<"composer"> => {
242
+ const [text, setText] = tapState("");
243
+ const [role, setRole] = tapState<"user" | "assistant" | "system">("user");
244
+ const [runConfig, setRunConfig] = tapState<Record<string, unknown>>({});
245
+ const [attachments, setAttachments] = tapState<readonly Attachment[]>([]);
246
+
247
+ // Update composer values when editing begins
248
+ const updateFromMessage = tapEffectEvent(() => {
249
+ if (message) {
250
+ // Extract text from message content (text parts only)
251
+ const textParts = message.content.filter(
252
+ (part) => part.type === "text",
253
+ );
254
+ const messageText = textParts
255
+ .map((part) => ("text" in part ? part.text : ""))
256
+ .join("\n\n");
257
+
258
+ setText(messageText);
259
+ setRole(message.role);
260
+ setAttachments(message.attachments ?? []);
261
+ }
262
+ });
263
+
264
+ tapEffect(() => {
265
+ if (isEditing) {
266
+ updateFromMessage();
267
+ }
268
+ }, [isEditing]);
269
+
270
+ const attachmentClients = tapClientLookup(
271
+ () =>
272
+ attachments.map((attachment, idx) =>
273
+ withKey(
274
+ attachment.id,
275
+ AttachmentResource({
276
+ attachment,
277
+ onRemove: () => {
278
+ setAttachments(attachments.filter((_, i) => i !== idx));
279
+ },
280
+ }),
281
+ ),
282
+ ),
283
+ [attachments],
284
+ );
285
+
286
+ const state = tapMemo(
287
+ () => ({
288
+ text,
289
+ role,
290
+ attachments: attachmentClients.state,
291
+ runConfig,
292
+ isEditing,
293
+ canCancel,
294
+ attachmentAccept: "*",
295
+ isEmpty: !text.trim() && !attachments.length,
296
+ type,
297
+ dictation: undefined,
298
+ }),
299
+ [
300
+ text,
301
+ role,
302
+ attachmentClients.state,
303
+ runConfig,
304
+ isEditing,
305
+ canCancel,
306
+ type,
307
+ attachments.length,
308
+ ],
309
+ );
310
+
311
+ return {
312
+ state,
313
+ methods: {
314
+ getState: () => state,
315
+ setText,
316
+ setRole,
317
+ setRunConfig,
318
+ addAttachment: async (file: File) => {
319
+ const newAttachment: Attachment = {
320
+ id: Math.random().toString(36).substring(7),
321
+ type: "file",
322
+ name: file.name,
323
+ contentType: file.type,
324
+ file,
325
+ status: { type: "complete" },
326
+ content: [],
327
+ };
328
+ setAttachments([...attachments, newAttachment]);
329
+ },
330
+ clearAttachments: async () => {
331
+ setAttachments([]);
332
+ },
333
+ attachment: (selector) => {
334
+ if ("id" in selector) {
335
+ return attachmentClients.get({ key: selector.id });
336
+ }
337
+ return attachmentClients.get(selector);
338
+ },
339
+ reset: async () => {
340
+ setText("");
341
+ setRole("user");
342
+ setRunConfig({});
343
+ setAttachments([]);
344
+ },
345
+ send: () => {
346
+ const message = {
347
+ role,
348
+ content: text ? [{ type: "text" as const, text }] : [],
349
+ attachments: attachments as any,
350
+ createdAt: new Date(),
351
+ runConfig,
352
+ };
353
+ onSend?.(message);
354
+ setText("");
355
+ setAttachments([]);
356
+ },
357
+ cancel: onCancel,
358
+ beginEdit: () => {
359
+ onBeginEdit?.();
360
+ },
361
+ startDictation: () => {},
362
+ stopDictation: () => {},
363
+ },
364
+ };
365
+ },
366
+ );
367
+
368
+ // External Thread Client
369
+ export const ExternalThread = resource(
370
+ ({
371
+ messages,
372
+ isRunning = false,
373
+ onNew,
374
+ onEdit,
375
+ onReload,
376
+ onStartRun,
377
+ onCancel,
378
+ }: ExternalThreadProps): ClientOutput<"thread"> => {
379
+ const handleReload = (messageId: string) => {
380
+ const messageIndex = messages.findIndex((m) => m.id === messageId);
381
+ if (messageIndex === -1) return;
382
+
383
+ const parentId = messageIndex > 0 ? messages[messageIndex - 1]!.id : null;
384
+ onReload?.(parentId);
385
+ };
386
+
387
+ const messageClients = tapClientLookup(
388
+ () =>
389
+ messages.map((msg, index) => {
390
+ const props: MessageClientProps = {
391
+ message: msg,
392
+ index,
393
+ onReload: () => handleReload(msg.id),
394
+ };
395
+ if (onEdit) props.onEdit = onEdit;
396
+ return withKey(msg.id, MessageClient(props));
397
+ }),
398
+ [messages, onEdit],
399
+ );
400
+
401
+ const handleCancelRun = () => {
402
+ onCancel?.();
403
+ };
404
+
405
+ const handleSendNew = (message: any) => {
406
+ onNew?.(message);
407
+ };
408
+
409
+ const composerClient = tapClientResource(
410
+ ComposerClientResource({
411
+ type: "thread",
412
+ isEditing: true,
413
+ canCancel: isRunning,
414
+ onCancel: handleCancelRun,
415
+ onSend: handleSendNew,
416
+ }),
417
+ );
418
+
419
+ const state = tapMemo(() => {
420
+ const messageStates = messageClients.state.map((s, idx, arr) => ({
421
+ ...s,
422
+ isLast: idx === arr.length - 1,
423
+ }));
424
+
425
+ return {
426
+ isEmpty: messages.length === 0,
427
+ isDisabled: false,
428
+ isLoading: false,
429
+ isRunning,
430
+ capabilities: {
431
+ edit: false,
432
+ reload: false,
433
+ cancel: isRunning,
434
+ speech: false,
435
+ attachments: false,
436
+ feedback: false,
437
+ switchToBranch: false,
438
+ switchBranchDuringRun: false,
439
+ unstable_copy: false,
440
+ dictation: false,
441
+ },
442
+ messages: messageStates,
443
+ state: {},
444
+ suggestions: [],
445
+ extras: undefined,
446
+ speech: undefined,
447
+ composer: composerClient.state,
448
+ };
449
+ }, [messages, isRunning, messageClients.state, composerClient.state]);
450
+
451
+ return {
452
+ state,
453
+ methods: {
454
+ getState: () => state,
455
+ composer: composerClient.methods,
456
+ append: (message) => {
457
+ onNew?.(message);
458
+ },
459
+ startRun: () => {
460
+ onStartRun?.();
461
+ },
462
+ unstable_resumeRun: () => {},
463
+ cancelRun: handleCancelRun,
464
+ getModelContext: () => ({ tools: {}, config: {} }),
465
+ export: () => ({ messages: [] }),
466
+ import: () => {},
467
+ reset: () => {},
468
+ message: (selector) => {
469
+ if ("id" in selector) {
470
+ return messageClients.get({ key: selector.id });
471
+ }
472
+ return messageClients.get(selector);
473
+ },
474
+ stopSpeaking: () => {},
475
+ startVoice: async () => {},
476
+ stopVoice: async () => {},
477
+ },
478
+ };
479
+ },
480
+ );
481
+
482
+ attachDefaultPeers(ExternalThread, {
483
+ modelContext: ModelContext(),
484
+ tools: Tools({}),
485
+ suggestions: Suggestions(),
486
+ composer: Derived({
487
+ source: "thread",
488
+ query: {},
489
+ get: (aui) => aui.thread().composer,
490
+ }),
491
+ });