@assistant-ui/react 0.15.9 → 0.15.10
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExternalThread.d.ts","names":[],"sources":["../../src/client/ExternalThread.ts"],"mappings":";;;;KAyDY,wBAAwB;EAClC;;KAgBU;EACV,mBAAmB;EACnB;EACA;EACA,QAAQ;EACR;;;;;;;EAOA;;;;;EAKA,SAAS,SAAS;EAClB,UAAU,SAAS;EACnB,YAAY;EACZ;EACA;EACA;EACA,oBAAoB,SAAS;;EAE7B,qBAAqB,SAAS;EAC9B,wBAAwB;EACxB,oBAAoB;EACpB,kBAAkB;EAClB,gBAAgB;;EAEhB,QAAQ;;EAER,WAAW;;EAEX,2BAA2B,SAAS;;
|
|
1
|
+
{"version":3,"file":"ExternalThread.d.ts","names":[],"sources":["../../src/client/ExternalThread.ts"],"mappings":";;;;KAyDY,wBAAwB;EAClC;;KAgBU;EACV,mBAAmB;EACnB;EACA;EACA,QAAQ;EACR;;;;;;;EAOA;;;;;EAKA,SAAS,SAAS;EAClB,UAAU,SAAS;EACnB,YAAY;EACZ;EACA;EACA;EACA,oBAAoB,SAAS;;EAE7B,qBAAqB,SAAS;EAC9B,wBAAwB;EACxB,oBAAoB;EACpB,kBAAkB;EAClB,gBAAgB;;EAEhB,QAAQ;;EAER,WAAW;;EAEX,2BAA2B,SAAS;;cAq/BzB,4CAAc,SAAA,yBAAA"}
|
|
@@ -16,7 +16,7 @@ const derivePartStatus = (message, partIndex, part) => {
|
|
|
16
16
|
return toMessagePartStatus(message, partIndex, part);
|
|
17
17
|
};
|
|
18
18
|
const useMessageClient = (t0) => {
|
|
19
|
-
const $ = c(
|
|
19
|
+
const $ = c(73);
|
|
20
20
|
const { message, index, parentId, onEdit, onReload, queue, branches, onRespondToToolApproval, onAddToolResult, onResumeToolCall, attachmentAdapter, submittedFeedback, onSubmitFeedback, speech, onSpeak, onStopSpeaking } = t0;
|
|
21
21
|
const [isCopied, setIsCopied] = useState(false);
|
|
22
22
|
const [isHovering, setIsHovering] = useState(false);
|
|
@@ -52,39 +52,42 @@ const useMessageClient = (t0) => {
|
|
|
52
52
|
} else t3 = $[8];
|
|
53
53
|
const attachmentClients = useClientLookup(t3);
|
|
54
54
|
let t4;
|
|
55
|
-
if ($[9]
|
|
55
|
+
if ($[9] !== onEdit) {
|
|
56
56
|
t4 = () => {
|
|
57
|
+
if (!onEdit) throw new Error("Runtime does not support editing.");
|
|
57
58
|
setIsEditing(true);
|
|
58
59
|
};
|
|
59
|
-
$[9] =
|
|
60
|
-
|
|
60
|
+
$[9] = onEdit;
|
|
61
|
+
$[10] = t4;
|
|
62
|
+
} else t4 = $[10];
|
|
61
63
|
const handleBeginEdit = t4;
|
|
62
64
|
let t5;
|
|
63
|
-
if ($[
|
|
65
|
+
if ($[11] === Symbol.for("react.memo_cache_sentinel")) {
|
|
64
66
|
t5 = () => {
|
|
65
67
|
setIsEditing(false);
|
|
66
68
|
};
|
|
67
|
-
$[
|
|
68
|
-
} else t5 = $[
|
|
69
|
+
$[11] = t5;
|
|
70
|
+
} else t5 = $[11];
|
|
69
71
|
const handleCancelEdit = t5;
|
|
70
72
|
let t6;
|
|
71
|
-
if ($[
|
|
73
|
+
if ($[12] !== message.id || $[13] !== onEdit || $[14] !== parentId) {
|
|
72
74
|
t6 = (msg) => {
|
|
73
|
-
onEdit
|
|
75
|
+
if (!onEdit) throw new Error("Runtime does not support editing.");
|
|
76
|
+
onEdit({
|
|
74
77
|
...msg,
|
|
75
78
|
parentId,
|
|
76
79
|
sourceId: message.id
|
|
77
80
|
});
|
|
78
81
|
setIsEditing(false);
|
|
79
82
|
};
|
|
80
|
-
$[
|
|
81
|
-
$[
|
|
82
|
-
$[
|
|
83
|
-
$[
|
|
84
|
-
} else t6 = $[
|
|
83
|
+
$[12] = message.id;
|
|
84
|
+
$[13] = onEdit;
|
|
85
|
+
$[14] = parentId;
|
|
86
|
+
$[15] = t6;
|
|
87
|
+
} else t6 = $[15];
|
|
85
88
|
const handleSendEdit = t6;
|
|
86
89
|
let t7;
|
|
87
|
-
if ($[
|
|
90
|
+
if ($[16] !== attachmentAdapter || $[17] !== handleBeginEdit || $[18] !== handleSendEdit || $[19] !== isEditing || $[20] !== message || $[21] !== queue) {
|
|
88
91
|
t7 = ComposerClientResource({
|
|
89
92
|
type: "edit",
|
|
90
93
|
isEditing,
|
|
@@ -96,32 +99,33 @@ const useMessageClient = (t0) => {
|
|
|
96
99
|
queue,
|
|
97
100
|
attachmentAdapter
|
|
98
101
|
});
|
|
99
|
-
$[
|
|
100
|
-
$[
|
|
101
|
-
$[
|
|
102
|
-
$[
|
|
103
|
-
$[
|
|
104
|
-
$[
|
|
105
|
-
|
|
102
|
+
$[16] = attachmentAdapter;
|
|
103
|
+
$[17] = handleBeginEdit;
|
|
104
|
+
$[18] = handleSendEdit;
|
|
105
|
+
$[19] = isEditing;
|
|
106
|
+
$[20] = message;
|
|
107
|
+
$[21] = queue;
|
|
108
|
+
$[22] = t7;
|
|
109
|
+
} else t7 = $[22];
|
|
106
110
|
const composerClient = useClientResource(t7);
|
|
107
111
|
let branchIds;
|
|
108
112
|
let t8;
|
|
109
|
-
if ($[
|
|
113
|
+
if ($[23] !== branches || $[24] !== message.id) {
|
|
110
114
|
branchIds = branches?.getBranches(message.id) ?? EMPTY_BRANCH_IDS;
|
|
111
115
|
t8 = branchIds.indexOf(message.id);
|
|
112
|
-
$[
|
|
113
|
-
$[
|
|
114
|
-
$[
|
|
115
|
-
$[
|
|
116
|
+
$[23] = branches;
|
|
117
|
+
$[24] = message.id;
|
|
118
|
+
$[25] = branchIds;
|
|
119
|
+
$[26] = t8;
|
|
116
120
|
} else {
|
|
117
|
-
branchIds = $[
|
|
118
|
-
t8 = $[
|
|
121
|
+
branchIds = $[25];
|
|
122
|
+
t8 = $[26];
|
|
119
123
|
}
|
|
120
124
|
const branchIndex = t8;
|
|
121
125
|
const branchNumber = branchIndex === -1 ? 1 : branchIndex + 1;
|
|
122
126
|
const branchCount = branchIndex === -1 ? 1 : branchIds.length;
|
|
123
127
|
let t9;
|
|
124
|
-
if ($[
|
|
128
|
+
if ($[27] !== message || $[28] !== submittedFeedback) {
|
|
125
129
|
t9 = submittedFeedback && message.role === "assistant" ? {
|
|
126
130
|
...message,
|
|
127
131
|
metadata: {
|
|
@@ -129,19 +133,19 @@ const useMessageClient = (t0) => {
|
|
|
129
133
|
submittedFeedback: { type: submittedFeedback }
|
|
130
134
|
}
|
|
131
135
|
} : message;
|
|
132
|
-
$[
|
|
133
|
-
$[
|
|
134
|
-
$[
|
|
135
|
-
} else t9 = $[
|
|
136
|
+
$[27] = message;
|
|
137
|
+
$[28] = submittedFeedback;
|
|
138
|
+
$[29] = t9;
|
|
139
|
+
} else t9 = $[29];
|
|
136
140
|
const messageWithFeedback = t9;
|
|
137
141
|
let t10;
|
|
138
|
-
if ($[
|
|
142
|
+
if ($[30] !== message.attachments) {
|
|
139
143
|
t10 = message.attachments ?? [];
|
|
140
|
-
$[
|
|
141
|
-
$[
|
|
142
|
-
} else t10 = $[
|
|
144
|
+
$[30] = message.attachments;
|
|
145
|
+
$[31] = t10;
|
|
146
|
+
} else t10 = $[31];
|
|
143
147
|
let t11;
|
|
144
|
-
if ($[
|
|
148
|
+
if ($[32] !== branchCount || $[33] !== branchNumber || $[34] !== composerClient.state || $[35] !== index || $[36] !== isCopied || $[37] !== isHovering || $[38] !== messageWithFeedback || $[39] !== parentId || $[40] !== partClients.state || $[41] !== speech || $[42] !== t10) {
|
|
145
149
|
t11 = {
|
|
146
150
|
...messageWithFeedback,
|
|
147
151
|
attachments: t10,
|
|
@@ -156,82 +160,82 @@ const useMessageClient = (t0) => {
|
|
|
156
160
|
index,
|
|
157
161
|
composer: composerClient.state
|
|
158
162
|
};
|
|
159
|
-
$[
|
|
160
|
-
$[
|
|
161
|
-
$[
|
|
162
|
-
$[
|
|
163
|
-
$[
|
|
164
|
-
$[
|
|
165
|
-
$[
|
|
166
|
-
$[
|
|
167
|
-
$[
|
|
168
|
-
$[
|
|
169
|
-
$[
|
|
170
|
-
$[
|
|
171
|
-
} else t11 = $[
|
|
163
|
+
$[32] = branchCount;
|
|
164
|
+
$[33] = branchNumber;
|
|
165
|
+
$[34] = composerClient.state;
|
|
166
|
+
$[35] = index;
|
|
167
|
+
$[36] = isCopied;
|
|
168
|
+
$[37] = isHovering;
|
|
169
|
+
$[38] = messageWithFeedback;
|
|
170
|
+
$[39] = parentId;
|
|
171
|
+
$[40] = partClients.state;
|
|
172
|
+
$[41] = speech;
|
|
173
|
+
$[42] = t10;
|
|
174
|
+
$[43] = t11;
|
|
175
|
+
} else t11 = $[43];
|
|
172
176
|
const state = t11;
|
|
173
177
|
let t12;
|
|
174
|
-
if ($[
|
|
178
|
+
if ($[44] !== state) {
|
|
175
179
|
t12 = () => state;
|
|
176
|
-
$[
|
|
177
|
-
$[
|
|
178
|
-
} else t12 = $[
|
|
180
|
+
$[44] = state;
|
|
181
|
+
$[45] = t12;
|
|
182
|
+
} else t12 = $[45];
|
|
179
183
|
let t13;
|
|
180
|
-
if ($[
|
|
184
|
+
if ($[46] !== composerClient.methods) {
|
|
181
185
|
t13 = () => composerClient.methods;
|
|
182
|
-
$[
|
|
183
|
-
$[
|
|
184
|
-
} else t13 = $[
|
|
186
|
+
$[46] = composerClient.methods;
|
|
187
|
+
$[47] = t13;
|
|
188
|
+
} else t13 = $[47];
|
|
185
189
|
let t14;
|
|
186
|
-
if ($[
|
|
190
|
+
if ($[48] !== onReload) {
|
|
187
191
|
t14 = () => {
|
|
188
192
|
onReload?.();
|
|
189
193
|
};
|
|
190
|
-
$[
|
|
191
|
-
$[
|
|
192
|
-
} else t14 = $[
|
|
194
|
+
$[48] = onReload;
|
|
195
|
+
$[49] = t14;
|
|
196
|
+
} else t14 = $[49];
|
|
193
197
|
let t15;
|
|
194
|
-
if ($[
|
|
198
|
+
if ($[50] !== branchIds || $[51] !== branchIndex || $[52] !== branches || $[53] !== message.id) {
|
|
195
199
|
t15 = (t16) => {
|
|
196
200
|
const { position, branchId } = t16;
|
|
197
201
|
if (!branches) return;
|
|
198
202
|
const target = branchId ?? (branchIndex === -1 ? void 0 : position === "previous" ? branchIds[branchIndex - 1] : position === "next" ? branchIds[branchIndex + 1] : void 0);
|
|
199
203
|
if (target !== void 0 && target !== message.id) branches.switchToBranch(target);
|
|
200
204
|
};
|
|
201
|
-
$[
|
|
202
|
-
$[
|
|
203
|
-
$[
|
|
204
|
-
$[
|
|
205
|
-
$[
|
|
206
|
-
} else t15 = $[
|
|
205
|
+
$[50] = branchIds;
|
|
206
|
+
$[51] = branchIndex;
|
|
207
|
+
$[52] = branches;
|
|
208
|
+
$[53] = message.id;
|
|
209
|
+
$[54] = t15;
|
|
210
|
+
} else t15 = $[54];
|
|
207
211
|
let t16;
|
|
208
|
-
if ($[
|
|
212
|
+
if ($[55] !== message) {
|
|
209
213
|
t16 = () => getThreadMessageText(message);
|
|
210
|
-
$[
|
|
211
|
-
$[
|
|
212
|
-
} else t16 = $[
|
|
214
|
+
$[55] = message;
|
|
215
|
+
$[56] = t16;
|
|
216
|
+
} else t16 = $[56];
|
|
213
217
|
let t17;
|
|
214
|
-
if ($[
|
|
218
|
+
if ($[57] !== partClients || $[58] !== state) {
|
|
215
219
|
t17 = (selector) => {
|
|
216
220
|
if ("index" in selector) return partClients.get(selector);
|
|
217
221
|
const partIndex = state.parts.findIndex((p) => p.type === "tool-call" && p.toolCallId === selector.toolCallId);
|
|
218
222
|
return partClients.get({ index: partIndex });
|
|
219
223
|
};
|
|
220
|
-
$[
|
|
221
|
-
$[
|
|
222
|
-
$[
|
|
223
|
-
} else t17 = $[
|
|
224
|
+
$[57] = partClients;
|
|
225
|
+
$[58] = state;
|
|
226
|
+
$[59] = t17;
|
|
227
|
+
} else t17 = $[59];
|
|
224
228
|
let t18;
|
|
225
|
-
if ($[
|
|
229
|
+
if ($[60] !== attachmentClients) {
|
|
226
230
|
t18 = (selector_0) => {
|
|
227
231
|
if ("id" in selector_0) return attachmentClients.get({ key: selector_0.id });
|
|
228
232
|
return attachmentClients.get(selector_0);
|
|
229
233
|
};
|
|
230
|
-
$[
|
|
231
|
-
$[
|
|
232
|
-
} else t18 = $[
|
|
234
|
+
$[60] = attachmentClients;
|
|
235
|
+
$[61] = t18;
|
|
236
|
+
} else t18 = $[61];
|
|
233
237
|
let t19;
|
|
234
|
-
if ($[
|
|
238
|
+
if ($[62] !== onSpeak || $[63] !== onStopSpeaking || $[64] !== onSubmitFeedback || $[65] !== t12 || $[66] !== t13 || $[67] !== t14 || $[68] !== t15 || $[69] !== t16 || $[70] !== t17 || $[71] !== t18) {
|
|
235
239
|
t19 = {
|
|
236
240
|
getState: t12,
|
|
237
241
|
composer: t13,
|
|
@@ -247,18 +251,18 @@ const useMessageClient = (t0) => {
|
|
|
247
251
|
setIsCopied,
|
|
248
252
|
setIsHovering
|
|
249
253
|
};
|
|
250
|
-
$[
|
|
251
|
-
$[
|
|
252
|
-
$[
|
|
253
|
-
$[
|
|
254
|
-
$[
|
|
255
|
-
$[
|
|
256
|
-
$[
|
|
257
|
-
$[
|
|
258
|
-
$[
|
|
259
|
-
$[
|
|
260
|
-
$[
|
|
261
|
-
} else t19 = $[
|
|
254
|
+
$[62] = onSpeak;
|
|
255
|
+
$[63] = onStopSpeaking;
|
|
256
|
+
$[64] = onSubmitFeedback;
|
|
257
|
+
$[65] = t12;
|
|
258
|
+
$[66] = t13;
|
|
259
|
+
$[67] = t14;
|
|
260
|
+
$[68] = t15;
|
|
261
|
+
$[69] = t16;
|
|
262
|
+
$[70] = t17;
|
|
263
|
+
$[71] = t18;
|
|
264
|
+
$[72] = t19;
|
|
265
|
+
} else t19 = $[72];
|
|
262
266
|
return t19;
|
|
263
267
|
};
|
|
264
268
|
const MessageClient = resource(useMessageClient);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExternalThread.js","names":["useState","useMemo","useEffect","useEffectEvent","useCallback","useRef","resource","withKey","ClientElement","ClientOutput","useClientLookup","attachTransformScopes","useClientResource","Derived","AddToolResultOptions","AppendMessage","Attachment","AttachmentAdapter","CreateAttachment","PendingAttachment","RespondToToolApprovalOptions","ResumeToolCallOptions","MessagePartStatus","ThreadAssistantMessagePart","ThreadUserMessagePart","ThreadMessage","ToolCallMessagePartStatus","ExternalThreadQueueAdapter","ExternalThreadBranchAdapter","QueuePlacement","FeedbackAdapter","SpeechState","SpeechSynthesisAdapter","ToolResponse","ReadonlyJSONValue","QueueItemState","ComposerSendOptions","fileMatchesAccept","getThreadMessageText","isCreateAttachment","resolveToolApprovalResponse","toMessagePartStatus","ModelContext","Suggestions","Tools","DataRenderers","SingleThreadList","EMPTY_QUEUE_ITEMS","EMPTY_BRANCH_IDS","ExternalThreadMessage","id","COMPLETE_STATUS","Object","freeze","type","derivePartStatus","message","partIndex","part","status","ExternalThreadProps","messages","isRunning","isLoading","state","extras","isSendDisabled","onNew","onEdit","onReload","parentId","onStartRun","onCancel","onResume","onAddToolResult","options","onResumeToolCall","onLoadExternalState","attachmentAdapter","feedbackAdapter","speechAdapter","queue","branches","onRespondToToolApproval","MessageClientProps","index","submittedFeedback","onSubmitFeedback","feedback","speech","onSpeak","onStopSpeaking","useMessageClient","t0","$","_c","isCopied","setIsCopied","isHovering","setIsHovering","isEditing","setIsEditing","t1","content","map","idx","PartResource","messageId","partClients","t2","attachments","t3","_temp2","attachmentClients","t4","Symbol","for","handleBeginEdit","t5","handleCancelEdit","t6","msg","sourceId","handleSendEdit","t7","ComposerClientResource","canCancel","onBeginEdit","onSend","composerClient","branchIds","t8","getBranches","indexOf","branchIndex","branchNumber","branchCount","length","t9","role","metadata","messageWithFeedback","t10","t11","isLast","parts","composer","t12","t13","methods","t14","t15","t16","position","branchId","target","undefined","switchToBranch","t17","selector","get","findIndex","p","toolCallId","t18","selector_0","key","t19","getState","delete","_temp3","reload","speak","stopSpeaking","submitFeedback","getCopyText","attachment","MessageClient","PartResourceProps","usePartResource","result","Error","response","toResponse","toolName","isError","artifact","modelContent","payload","response_0","approval","approved","resolution","addToolResult","resumeToolCall","respondToToolApproval","AttachmentResourceProps","onRemove","Promise","useAttachmentResource","remove","AttachmentResource","ComposerClientResourceProps","useQueueItemClient","item","onMove","placement","steer","lane","insertAfter","move","QueueItemClient","drainAdapterAdd","ReturnType","upsert","asyncIterator","useLiveState","initial","setState","ref","next","current","prev","T","set","const","useComposerClientResource","text","setText","textRef","setRole","roleRef","runConfig","setRunConfig","runConfigRef","setAttachments","attachmentsRef","quote","setQuote","quoteRef","textParts","filter","_temp4","messageText","_temp5","join","updateFromMessage","a","removed","all","_temp6","a_1","removePendingAttachments","attachment_0","prev_0","a_2","upsertAttachment","steerItems","laneItems","items","queueItems","queueItemClients","accept","isEmpty","trim","canSend","attachmentAccept","dictation","fileOrAttachment","file","name","contentType","add","newAttachment","Math","random","toString","substring","prev_1","newAttachment_0","prev_2","removed_0","removed_1","opts","currentQuote","currentText","currentAttachments","isEmpty_0","dispatch","sendAttachments","composedMessage","createdAt","Date","startRun","custom","enqueue","attachment_1","send","then","error","prev_3","prev_4","prev_5","console","t20","t21","t22","addAttachment","clearAttachments","reset","cancel","beginEdit","startDictation","_temp7","stopDictation","_temp8","queueItem","createSpeechController","notify","session","clear","adapter","utterance","unsub","subscribe","stop","stopMessage","dispose","dedupeMessagesById","seenIds","Set","deduped","i","has","warn","push","reverse","useExternalThread","messagesProp","threadState","setSubmittedFeedback","entry","external","feedbackFor","live","entries","entry_0","msg_0","find","m","keys","fromEntries","submit","handleSubmitFeedback","speechState","setSpeech","speechController","hasSpeechAdapter","message_0","handleSpeak","messageIndex","m_0","handleReload","msg_1","props","messageClients","handleCancelRun","message_1","at","handleSendNew","headId","message_2","message_3","composerQueue","hasQueue","hasBranches","hasEdit","hasReload","hasAttachments","hasFeedback","hasSpeech","t23","_temp9","messageStates","t24","t25","edit","refetchThread","voice","switchBranchDuringRun","unstable_copy","t26","t27","t28","isDisabled","capabilities","suggestions","t29","t30","t31","message_4","appendMessage","t32","t33","t34","state_0","t35","t36","append","deleteMessage","_temp0","resumeRun","cancelRun","importExternalState","getModelContext","_temp1","export","_temp10","import","_temp11","_temp12","connectVoice","_temp13","disconnectVoice","_temp14","getVoiceVolume","_temp15","subscribeVoiceVolume","_temp17","muteVoice","_temp18","unmuteVoice","_temp19","ExternalThread","scopes","parent","threads","source","threadElement","thread","query","aui","threadListItem","modelContext","tools","dataRenderers","_temp","part_0","a_0","s","arr","config","_temp16"],"sources":["../../src/client/ExternalThread.ts"],"sourcesContent":["import {\n useState,\n useMemo,\n useEffect,\n useEffectEvent,\n useCallback,\n useRef,\n} from \"react\";\nimport { resource, withKey } from \"@assistant-ui/tap\";\nimport {\n type ClientElement,\n type ClientOutput,\n useClientLookup,\n attachTransformScopes,\n useClientResource,\n Derived,\n} from \"@assistant-ui/store\";\n\nimport type {\n AddToolResultOptions,\n AppendMessage,\n Attachment,\n AttachmentAdapter,\n CreateAttachment,\n PendingAttachment,\n RespondToToolApprovalOptions,\n ResumeToolCallOptions,\n MessagePartStatus,\n ThreadAssistantMessagePart,\n ThreadUserMessagePart,\n ThreadMessage,\n ToolCallMessagePartStatus,\n ExternalThreadQueueAdapter,\n ExternalThreadBranchAdapter,\n QueuePlacement,\n FeedbackAdapter,\n SpeechState,\n SpeechSynthesisAdapter,\n} from \"@assistant-ui/core\";\nimport { ToolResponse } from \"assistant-stream\";\nimport type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport type { QueueItemState } from \"@assistant-ui/core/store\";\nimport type { ComposerSendOptions } from \"@assistant-ui/core/store\";\nimport {\n fileMatchesAccept,\n getThreadMessageText,\n isCreateAttachment,\n resolveToolApprovalResponse,\n toMessagePartStatus,\n} from \"@assistant-ui/core/internal\";\nimport { ModelContext, Suggestions } from \"@assistant-ui/core/store\";\nimport { Tools, DataRenderers } from \"@assistant-ui/core/react\";\nimport { SingleThreadList } from \"./SingleThreadList\";\n\nconst EMPTY_QUEUE_ITEMS: readonly QueueItemState[] = [];\nconst EMPTY_BRANCH_IDS: readonly string[] = [];\n\nexport type ExternalThreadMessage = ThreadMessage & {\n id: string;\n};\n\nconst COMPLETE_STATUS: MessagePartStatus = Object.freeze({\n type: \"complete\",\n});\n\nconst derivePartStatus = (\n message: ExternalThreadMessage,\n partIndex: number,\n part: ThreadAssistantMessagePart | ThreadUserMessagePart,\n): ToolCallMessagePartStatus => {\n if (!message.status) return COMPLETE_STATUS;\n return toMessagePartStatus(message, partIndex, part);\n};\n\nexport type ExternalThreadProps = {\n messages: readonly ExternalThreadMessage[];\n isRunning?: boolean;\n isLoading?: boolean | undefined;\n state?: ReadonlyJSONValue | undefined;\n extras?: unknown;\n /**\n * Whether sending new messages is currently disabled. When `true`, the\n * thread composer's input remains usable but `send()` is a no-op and\n * `composer.canSend` is `false`. Edit composers (saving message edits)\n * intentionally ignore this flag.\n */\n isSendDisabled?: boolean;\n /**\n * Callback for new messages (non-queue runtimes).\n * @note Unused when `queue` is provided — new messages are routed through `queue.enqueue` instead.\n */\n onNew?: (message: AppendMessage) => void;\n onEdit?: (message: AppendMessage) => void;\n onReload?: (parentId: string | null) => void;\n onStartRun?: () => void;\n onCancel?: () => void;\n onResume?: (() => void) | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n /** Callback for resuming a tool call that is waiting for human input. */\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n onLoadExternalState?: ((state: unknown) => void) | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n feedbackAdapter?: FeedbackAdapter | undefined;\n speechAdapter?: SpeechSynthesisAdapter | undefined;\n /** Queue adapter for runtimes that support message queuing and steering. */\n queue?: ExternalThreadQueueAdapter;\n /** Branch adapter for runtimes that track sibling variants of messages. */\n branches?: ExternalThreadBranchAdapter;\n /** Callback for tool approval decisions. Absent: responding to an approval throws a capability error. */\n onRespondToToolApproval?: (options: RespondToToolApprovalOptions) => void;\n};\n\ntype MessageClientProps = {\n message: ExternalThreadMessage;\n index: number;\n parentId: string | null;\n onEdit?: (message: AppendMessage) => void;\n onReload?: () => void;\n queue?: ExternalThreadQueueAdapter | undefined;\n branches?: ExternalThreadBranchAdapter | undefined;\n onRespondToToolApproval?:\n | ((options: RespondToToolApprovalOptions) => void)\n | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n submittedFeedback: \"positive\" | \"negative\" | undefined;\n onSubmitFeedback: (feedback: { type: \"positive\" | \"negative\" }) => void;\n speech: SpeechState | undefined;\n onSpeak: () => void;\n onStopSpeaking: () => void;\n};\n\n// Message Client - minimal implementation\nconst useMessageClient = ({\n message,\n index,\n parentId,\n onEdit,\n onReload,\n queue,\n branches,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n attachmentAdapter,\n submittedFeedback,\n onSubmitFeedback,\n speech,\n onSpeak,\n onStopSpeaking,\n}: MessageClientProps): ClientOutput<\"message\"> => {\n const [isCopied, setIsCopied] = useState(false);\n const [isHovering, setIsHovering] = useState(false);\n const [isEditing, setIsEditing] = useState(false);\n\n const partClients = useClientLookup(\n message.content.map((part, idx) =>\n withKey(\n idx,\n PartResource({\n part,\n status: derivePartStatus(message, idx, part),\n messageId: message.id,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n }),\n ),\n ),\n );\n\n const attachmentClients = useClientLookup(\n (message.attachments ?? []).map((attachment) =>\n withKey(\n attachment.id,\n AttachmentResource({\n attachment,\n onRemove: () => {},\n }),\n ),\n ),\n );\n\n const handleBeginEdit = () => {\n setIsEditing(true);\n };\n\n const handleCancelEdit = () => {\n setIsEditing(false);\n };\n\n const handleSendEdit = (msg: AppendMessage) => {\n onEdit?.({\n ...msg,\n parentId,\n sourceId: message.id,\n });\n setIsEditing(false);\n };\n\n const composerClient = useClientResource(\n ComposerClientResource({\n type: \"edit\",\n isEditing,\n canCancel: true,\n onCancel: handleCancelEdit,\n onBeginEdit: handleBeginEdit,\n onSend: handleSendEdit,\n message,\n queue,\n attachmentAdapter,\n }),\n );\n\n const branchIds = branches?.getBranches(message.id) ?? EMPTY_BRANCH_IDS;\n const branchIndex = branchIds.indexOf(message.id);\n const branchNumber = branchIndex === -1 ? 1 : branchIndex + 1;\n const branchCount = branchIndex === -1 ? 1 : branchIds.length;\n\n const state = useMemo(() => {\n const messageWithFeedback: ExternalThreadMessage =\n submittedFeedback && message.role === \"assistant\"\n ? {\n ...message,\n metadata: {\n ...message.metadata,\n submittedFeedback: { type: submittedFeedback },\n },\n }\n : message;\n return {\n ...messageWithFeedback,\n attachments: message.attachments ?? [],\n parentId,\n isLast: false, // Will be set by thread\n branchNumber,\n branchCount,\n speech,\n parts: partClients.state,\n isCopied,\n isHovering,\n index,\n composer: composerClient.state,\n };\n }, [\n message,\n parentId,\n isCopied,\n isHovering,\n index,\n composerClient.state,\n partClients.state,\n branchNumber,\n branchCount,\n submittedFeedback,\n speech,\n ]);\n\n return {\n getState: () => state,\n composer: () => composerClient.methods,\n delete: () => {},\n reload: () => {\n onReload?.();\n },\n speak: onSpeak,\n stopSpeaking: onStopSpeaking,\n submitFeedback: onSubmitFeedback,\n switchToBranch: ({ position, branchId }) => {\n if (!branches) return;\n const target =\n branchId ??\n (branchIndex === -1\n ? undefined\n : position === \"previous\"\n ? branchIds[branchIndex - 1]\n : position === \"next\"\n ? branchIds[branchIndex + 1]\n : undefined);\n if (target !== undefined && target !== message.id)\n branches.switchToBranch(target);\n },\n getCopyText: () => getThreadMessageText(message),\n part: (selector) => {\n if (\"index\" in selector) {\n return partClients.get(selector);\n }\n const partIndex = state.parts.findIndex(\n (p) => p.type === \"tool-call\" && p.toolCallId === selector.toolCallId,\n );\n return partClients.get({ index: partIndex });\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachmentClients.get({ key: selector.id });\n }\n return attachmentClients.get(selector);\n },\n setIsCopied,\n setIsHovering,\n };\n};\n\nconst MessageClient = resource(useMessageClient);\n\ntype PartResourceProps = {\n part: ThreadAssistantMessagePart | ThreadUserMessagePart;\n status: ToolCallMessagePartStatus;\n messageId: string;\n onRespondToToolApproval?:\n | ((options: RespondToToolApprovalOptions) => void)\n | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n};\n\n// Part Client - minimal implementation\nconst usePartResource = ({\n part,\n status,\n messageId,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n}: PartResourceProps): ClientOutput<\"part\"> => {\n const state = useMemo(\n () => ({ ...part, status: status as MessagePartStatus }),\n [part, status],\n );\n\n return {\n getState: () => state,\n addToolResult: (result) => {\n if (!onAddToolResult)\n throw new Error(\n \"Runtime does not support tool results (onAddToolResult is not set).\",\n );\n if (part.type !== \"tool-call\")\n throw new Error(\"Tried to add tool result on non-tool message part\");\n\n const response = ToolResponse.toResponse(result);\n onAddToolResult({\n messageId,\n toolName: part.toolName,\n toolCallId: part.toolCallId,\n result: response.result as ReadonlyJSONValue,\n isError: response.isError,\n ...(response.artifact !== undefined && { artifact: response.artifact }),\n ...(response.modelContent !== undefined && {\n modelContent: response.modelContent,\n }),\n });\n },\n resumeToolCall: (payload) => {\n if (!onResumeToolCall)\n throw new Error(\n \"Runtime does not support resuming tool calls (onResumeToolCall is not set).\",\n );\n if (part.type !== \"tool-call\")\n throw new Error(\"Tried to resume tool call on non-tool message part\");\n\n onResumeToolCall({ toolCallId: part.toolCallId, payload });\n },\n respondToToolApproval: (response) => {\n if (!onRespondToToolApproval)\n throw new Error(\"Runtime does not support tool approvals.\");\n\n if (part.type !== \"tool-call\")\n throw new Error(\n \"Tried to respond to tool approval on non-tool message part\",\n );\n\n if (\n !part.approval ||\n part.approval.approved !== undefined ||\n part.approval.resolution !== undefined\n )\n throw new Error(\"Tool call has no pending approval\");\n\n onRespondToToolApproval(\n resolveToolApprovalResponse(part.approval, response),\n );\n },\n };\n};\n\nconst PartResource = resource(usePartResource);\n\ntype AttachmentResourceProps = {\n attachment: Attachment;\n onRemove?: () => void | Promise<void>;\n};\n\n// Attachment Client - minimal implementation\nconst useAttachmentResource = ({\n attachment,\n onRemove,\n}: AttachmentResourceProps): ClientOutput<\"attachment\"> => {\n return {\n getState: () => attachment,\n remove: async () => {\n await onRemove?.();\n },\n };\n};\n\nconst AttachmentResource = resource(useAttachmentResource);\n\ntype ComposerClientResourceProps = {\n type: \"thread\" | \"edit\";\n isEditing: boolean;\n canCancel: boolean;\n isSendDisabled?: boolean;\n onCancel: () => void;\n onBeginEdit?: () => void;\n onSend?: (message: AppendMessage) => void;\n message?: ExternalThreadMessage;\n queue?: ExternalThreadQueueAdapter | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n};\n\nconst useQueueItemClient = ({\n item,\n onMove,\n onRemove,\n}: {\n item: QueueItemState;\n onMove: (placement: QueuePlacement) => void;\n onRemove: () => void;\n}): ClientOutput<\"queueItem\"> => {\n return {\n getState: () => item,\n steer: () => onMove({ lane: \"steer\", insertAfter: null }),\n move: onMove,\n remove: onRemove,\n };\n};\n\nconst QueueItemClient = resource(useQueueItemClient);\n\nconst drainAdapterAdd = async (\n result: ReturnType<AttachmentAdapter[\"add\"]>,\n upsert: (attachment: Attachment) => void,\n) => {\n if (Symbol.asyncIterator in result) {\n for await (const attachment of result) {\n upsert(attachment);\n }\n } else {\n upsert(await result);\n }\n};\n\n// State whose setter tracks the latest value in a ref, so imperative\n// call sequences (setText immediately followed by send) observe the write\n// before React re-renders — legacy composer parity.\nconst useLiveState = <T>(initial: T) => {\n const [state, setState] = useState(initial);\n const ref = useRef(state);\n const set = useCallback((next: T | ((prev: T) => T)) => {\n ref.current =\n typeof next === \"function\" ? (next as (prev: T) => T)(ref.current) : next;\n setState(ref.current);\n }, []);\n return [state, set, ref] as const;\n};\n\n// Composer Client - minimal implementation\nconst useComposerClientResource = ({\n type,\n isEditing,\n canCancel,\n isSendDisabled = false,\n onCancel,\n onBeginEdit,\n onSend,\n message,\n queue,\n attachmentAdapter,\n}: ComposerClientResourceProps): ClientOutput<\"composer\"> => {\n const [text, setText, textRef] = useLiveState(\"\");\n const [role, setRole, roleRef] = useLiveState<\n \"user\" | \"assistant\" | \"system\"\n >(\"user\");\n const [runConfig, setRunConfig, runConfigRef] = useLiveState<\n Record<string, unknown>\n >({});\n const [attachments, setAttachments, attachmentsRef] = useLiveState<\n readonly Attachment[]\n >([]);\n const [quote, setQuote, quoteRef] = useLiveState<\n { readonly text: string; readonly messageId: string } | undefined\n >(undefined);\n\n // Update composer values when editing begins\n const updateFromMessage = useEffectEvent(() => {\n if (message) {\n // Extract text from message content (text parts only)\n const textParts = message.content.filter((part) => part.type === \"text\");\n const messageText = textParts\n .map((part) => (\"text\" in part ? part.text : \"\"))\n .join(\"\\n\\n\");\n\n setText(messageText);\n setRole(message.role);\n setAttachments(message.attachments ?? []);\n }\n });\n\n useEffect(() => {\n if (isEditing) {\n updateFromMessage();\n }\n }, [isEditing]);\n\n const attachmentClients = useClientLookup(\n attachments.map((attachment) =>\n withKey(\n attachment.id,\n AttachmentResource({\n attachment,\n onRemove: async () => {\n await attachmentAdapter?.remove(attachment);\n setAttachments((prev) =>\n prev.filter((a) => a.id !== attachment.id),\n );\n },\n }),\n ),\n ),\n );\n\n const removePendingAttachments = async (removed: readonly Attachment[]) => {\n if (!attachmentAdapter) return;\n await Promise.all(\n removed\n .filter((a) => a.status.type !== \"complete\")\n .map((a) => attachmentAdapter.remove(a)),\n );\n };\n\n const upsertAttachment = (attachment: Attachment) => {\n setAttachments((prev) => {\n const idx = prev.findIndex((a) => a.id === attachment.id);\n if (idx === -1) return [...prev, attachment];\n const next = [...prev];\n next[idx] = attachment;\n return next;\n });\n };\n\n const steerItems = queue?.steerItems ?? EMPTY_QUEUE_ITEMS;\n const laneItems = queue?.items ?? EMPTY_QUEUE_ITEMS;\n const queueItems = useMemo(\n () =>\n steerItems.length === 0\n ? laneItems\n : laneItems.length === 0\n ? steerItems\n : [...steerItems, ...laneItems],\n [steerItems, laneItems],\n );\n const queueItemClients = useClientLookup(\n queueItems.map((item) =>\n withKey(\n item.id,\n QueueItemClient({\n item,\n onMove: (placement) => queue?.move(item.id, placement),\n onRemove: () => queue?.remove(item.id),\n }),\n ),\n ),\n );\n\n const state = useMemo(() => {\n const isEmpty = !text.trim() && !attachments.length;\n return {\n text,\n role,\n attachments: attachmentClients.state,\n runConfig,\n isEditing,\n canCancel,\n canSend: isEditing && !isEmpty && !isSendDisabled,\n attachmentAccept: attachmentAdapter?.accept ?? \"*\",\n isEmpty,\n type,\n dictation: undefined,\n quote,\n queue: queueItems,\n };\n }, [\n text,\n role,\n attachmentClients.state,\n runConfig,\n isEditing,\n canCancel,\n isSendDisabled,\n type,\n attachments.length,\n quote,\n queueItems,\n attachmentAdapter?.accept,\n ]);\n\n return {\n getState: () => state,\n setText,\n setRole,\n setRunConfig,\n addAttachment: async (fileOrAttachment: File | CreateAttachment) => {\n if (attachmentAdapter) {\n const file = isCreateAttachment(fileOrAttachment)\n ? {\n name: fileOrAttachment.name,\n type: fileOrAttachment.contentType ?? \"\",\n }\n : { name: fileOrAttachment.name, type: fileOrAttachment.type };\n if (!fileMatchesAccept(file, attachmentAdapter.accept))\n throw new Error(\n `File type ${file.type || \"unknown\"} is not accepted. Accepted types: ${attachmentAdapter.accept}`,\n );\n }\n if (!isCreateAttachment(fileOrAttachment) && attachmentAdapter) {\n await drainAdapterAdd(\n attachmentAdapter.add({ file: fileOrAttachment }),\n upsertAttachment,\n );\n } else if (!isCreateAttachment(fileOrAttachment)) {\n const newAttachment: Attachment = {\n id: Math.random().toString(36).substring(7),\n type: \"file\",\n name: fileOrAttachment.name,\n contentType: fileOrAttachment.type,\n file: fileOrAttachment,\n status: { type: \"complete\" },\n content: [],\n };\n setAttachments((prev) => [...prev, newAttachment]);\n } else {\n const newAttachment: Attachment = {\n id: fileOrAttachment.id ?? Math.random().toString(36).substring(7),\n type: fileOrAttachment.type ?? \"document\",\n name: fileOrAttachment.name,\n contentType: fileOrAttachment.contentType,\n content: fileOrAttachment.content,\n status: { type: \"complete\" },\n };\n setAttachments((prev) => [...prev, newAttachment]);\n }\n },\n clearAttachments: async () => {\n const removed = attachmentsRef.current;\n setAttachments([]);\n await removePendingAttachments(removed);\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachmentClients.get({ key: selector.id });\n }\n return attachmentClients.get(selector);\n },\n reset: async () => {\n const removed = attachmentsRef.current;\n setText(\"\");\n setRole(\"user\");\n setRunConfig({});\n setAttachments([]);\n setQuote(undefined);\n await removePendingAttachments(removed);\n },\n send: (opts?: ComposerSendOptions) => {\n const currentQuote = quoteRef.current;\n const currentText = textRef.current;\n const currentAttachments = attachmentsRef.current;\n const isEmpty = !currentText.trim() && !currentAttachments.length;\n if (!isEditing || isEmpty || isSendDisabled) return;\n\n setText(\"\");\n setAttachments([]);\n setQuote(undefined);\n\n const dispatch = (sendAttachments: readonly Attachment[]) => {\n const composedMessage: AppendMessage = {\n role: roleRef.current,\n content: currentText\n ? [{ type: \"text\" as const, text: currentText }]\n : [],\n attachments: sendAttachments as any,\n createdAt: new Date(),\n parentId: null,\n sourceId: null,\n runConfig: runConfigRef.current,\n startRun: opts?.startRun,\n metadata: {\n custom: { ...(currentQuote ? { quote: currentQuote } : {}) },\n },\n };\n // edit sends carry a sourceId contract; only thread sends queue\n if (queue && type === \"thread\") {\n if (opts?.steer ?? canCancel) queue.steer(composedMessage);\n else queue.enqueue(composedMessage);\n } else {\n onSend?.(composedMessage);\n }\n };\n\n if (attachmentAdapter && currentAttachments.length > 0) {\n void Promise.all(\n currentAttachments.map((attachment) =>\n attachment.status.type === \"complete\"\n ? attachment\n : attachmentAdapter.send(attachment as PendingAttachment),\n ),\n ).then(dispatch, (error) => {\n // Upload failed: merge the failed send back into the draft.\n setText((prev) =>\n currentText && prev\n ? currentText + \"\\n\" + prev\n : currentText || prev,\n );\n setQuote((prev) => prev ?? currentQuote);\n setAttachments((prev) => [...currentAttachments, ...prev]);\n console.error(\"Failed to send attachments\", error);\n });\n } else {\n dispatch(currentAttachments);\n }\n },\n cancel: onCancel,\n beginEdit: () => {\n onBeginEdit?.();\n },\n startDictation: () => {},\n stopDictation: () => {},\n setQuote,\n queueItem: (selector: { index: number } | { id: string }) => {\n if (\"id\" in selector) {\n return queueItemClients.get({ key: selector.id });\n }\n return queueItemClients.get(selector);\n },\n };\n};\n\nconst ComposerClientResource = resource(useComposerClientResource);\n\nconst createSpeechController = (\n notify: (speech: SpeechState | undefined) => void,\n) => {\n let session: { messageId: string; cancel: () => void } | undefined;\n\n const clear = () => {\n if (!session) return;\n session.cancel();\n session = undefined;\n notify(undefined);\n };\n\n return {\n speak: (\n adapter: SpeechSynthesisAdapter,\n message: ExternalThreadMessage,\n ) => {\n clear();\n\n const utterance = adapter.speak(getThreadMessageText(message));\n let unsub: (() => void) | undefined;\n unsub = utterance.subscribe(() => {\n if (utterance.status.type === \"ended\") {\n unsub?.();\n session = undefined;\n notify(undefined);\n } else {\n notify({ messageId: message.id, status: utterance.status });\n }\n });\n\n if (utterance.status.type === \"ended\") {\n unsub();\n notify(undefined);\n return;\n }\n\n session = {\n messageId: message.id,\n cancel: () => {\n unsub!();\n utterance.cancel();\n },\n };\n notify({ messageId: message.id, status: utterance.status });\n },\n stop: () => {\n if (!session) throw new Error(\"No message is being spoken\");\n clear();\n },\n stopMessage: (messageId: string) => {\n if (session?.messageId !== messageId)\n throw new Error(\"Message is not being spoken\");\n clear();\n },\n dispose: clear,\n };\n};\n\nconst dedupeMessagesById = (messages: readonly ExternalThreadMessage[]) => {\n const seenIds = new Set<string>();\n const deduped: ExternalThreadMessage[] = [];\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i]!;\n if (seenIds.has(message.id)) {\n console.warn(\n `ExternalThread: duplicate message id \"${message.id}\" in the provided messages array; keeping the last occurrence.`,\n );\n continue;\n }\n seenIds.add(message.id);\n deduped.push(message);\n }\n return deduped.length === messages.length ? messages : deduped.reverse();\n};\n\n// External Thread Client\nconst useExternalThread = ({\n messages: messagesProp,\n isRunning = false,\n isLoading = false,\n state: threadState,\n extras,\n isSendDisabled = false,\n onNew,\n onEdit,\n onReload,\n onStartRun,\n onCancel,\n onResume,\n onAddToolResult,\n onResumeToolCall,\n onLoadExternalState,\n attachmentAdapter,\n feedbackAdapter,\n speechAdapter,\n queue,\n branches,\n onRespondToToolApproval,\n}: ExternalThreadProps): ClientOutput<\"thread\"> => {\n const messages = useMemo(\n () => dedupeMessagesById(messagesProp),\n [messagesProp],\n );\n\n // Local entries are optimistic: they apply only while the message's\n // external submittedFeedback still equals the value seen at click time.\n const [submittedFeedback, setSubmittedFeedback] = useState<\n Record<\n string,\n {\n type: \"positive\" | \"negative\";\n external: \"positive\" | \"negative\" | undefined;\n }\n >\n >({});\n\n const feedbackFor = (msg: ExternalThreadMessage) => {\n const entry = submittedFeedback[msg.id];\n return entry && msg.metadata.submittedFeedback?.type === entry.external\n ? entry.type\n : undefined;\n };\n\n useEffect(() => {\n setSubmittedFeedback((prev) => {\n const live = Object.entries(prev).filter(([id, entry]) => {\n const msg = messages.find((m) => m.id === id);\n return !!msg && msg.metadata.submittedFeedback?.type === entry.external;\n });\n return live.length === Object.keys(prev).length\n ? prev\n : Object.fromEntries(live);\n });\n }, [messages]);\n\n const handleSubmitFeedback = (\n message: ExternalThreadMessage,\n { type }: { type: \"positive\" | \"negative\" },\n ) => {\n if (!feedbackAdapter) throw new Error(\"Feedback adapter not configured\");\n feedbackAdapter.submit({ message, type });\n\n if (message.role === \"assistant\") {\n setSubmittedFeedback((prev) => ({\n ...prev,\n [message.id]: {\n type,\n external: message.metadata.submittedFeedback?.type,\n },\n }));\n }\n };\n\n const [speechState, setSpeech] = useState<SpeechState | undefined>(undefined);\n const [speechController] = useState(() => createSpeechController(setSpeech));\n\n const hasSpeechAdapter = !!speechAdapter;\n const speech = hasSpeechAdapter ? speechState : undefined;\n useEffect(() => {\n if (!hasSpeechAdapter) speechController.dispose();\n }, [hasSpeechAdapter, speechController]);\n\n useEffect(() => () => speechController.dispose(), [speechController]);\n\n const handleSpeak = (message: ExternalThreadMessage) => {\n if (!speechAdapter) throw new Error(\"Speech adapter not configured\");\n speechController.speak(speechAdapter, message);\n };\n\n const handleReload = (messageId: string) => {\n const messageIndex = messages.findIndex((m) => m.id === messageId);\n if (messageIndex === -1) return;\n\n const parentId = messageIndex > 0 ? messages[messageIndex - 1]!.id : null;\n onReload?.(parentId);\n };\n\n const messageClients = useClientLookup(\n messages.map((msg, index) => {\n const props: MessageClientProps = {\n message: msg,\n index,\n parentId: index > 0 ? messages[index - 1]!.id : null,\n onReload: () => handleReload(msg.id),\n queue,\n branches,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n attachmentAdapter,\n submittedFeedback: feedbackFor(msg),\n onSubmitFeedback: (feedback) => handleSubmitFeedback(msg, feedback),\n speech: speech?.messageId === msg.id ? speech : undefined,\n onSpeak: () => handleSpeak(msg),\n onStopSpeaking: () => speechController.stopMessage(msg.id),\n };\n if (onEdit) props.onEdit = onEdit;\n return withKey(msg.id, MessageClient(props));\n }),\n );\n\n const handleCancelRun = () => {\n onCancel?.();\n };\n\n const handleSendNew = (message: AppendMessage) => {\n // The composer does not know the thread; stamp the current head as the\n // parent (legacy composer parity).\n onNew?.({ ...message, parentId: messages.at(-1)?.id ?? null });\n };\n\n const headId = messages.at(-1)?.id ?? null;\n const composerQueue = useMemo(\n (): ExternalThreadQueueAdapter | undefined =>\n queue && {\n ...queue,\n enqueue: (message) =>\n queue.enqueue({ ...message, parentId: message.parentId ?? headId }),\n steer: (message) =>\n queue.steer({ ...message, parentId: message.parentId ?? headId }),\n },\n [queue, headId],\n );\n\n const composerClient = useClientResource(\n ComposerClientResource({\n type: \"thread\",\n isEditing: true,\n canCancel: isRunning,\n isSendDisabled,\n onCancel: handleCancelRun,\n onSend: handleSendNew,\n queue: composerQueue,\n attachmentAdapter,\n }),\n );\n\n const hasQueue = !!queue;\n const hasBranches = !!branches;\n const hasEdit = !!onEdit;\n const hasReload = !!onReload;\n const hasAttachments = !!attachmentAdapter;\n const hasFeedback = !!feedbackAdapter;\n const hasSpeech = !!speechAdapter;\n const state = useMemo(() => {\n const messageStates = messageClients.state.map((s, idx, arr) => ({\n ...s,\n isLast: idx === arr.length - 1,\n }));\n\n return {\n isEmpty: messages.length === 0,\n isDisabled: false,\n isLoading,\n isRunning,\n capabilities: {\n edit: hasEdit,\n delete: false,\n reload: hasReload,\n refetchThread: false,\n cancel: isRunning,\n speech: hasSpeech,\n attachments: hasAttachments,\n feedback: hasFeedback,\n voice: false,\n switchToBranch: hasBranches,\n switchBranchDuringRun: false,\n unstable_copy: false,\n dictation: false,\n queue: hasQueue,\n },\n messages: messageStates,\n state: threadState ?? {},\n suggestions: [],\n extras,\n speech,\n voice: undefined,\n composer: composerClient.state,\n };\n }, [\n messages,\n isRunning,\n isLoading,\n threadState,\n extras,\n hasQueue,\n hasBranches,\n hasEdit,\n hasReload,\n hasAttachments,\n hasFeedback,\n hasSpeech,\n speech,\n messageClients.state,\n composerClient.state,\n ]);\n\n return {\n getState: () => state,\n composer: () => composerClient.methods,\n append: (message) => {\n const appendMessage: AppendMessage =\n typeof message === \"string\"\n ? {\n createdAt: new Date(),\n parentId: messages.at(-1)?.id ?? null,\n sourceId: null,\n runConfig: {},\n role: \"user\",\n content: [{ type: \"text\", text: message }],\n attachments: [],\n metadata: { custom: {} },\n }\n : {\n createdAt: message.createdAt ?? new Date(),\n parentId: message.parentId ?? messages.at(-1)?.id ?? null,\n sourceId: message.sourceId ?? null,\n role: message.role ?? \"user\",\n content: message.content,\n attachments: message.attachments ?? [],\n metadata: message.metadata ?? { custom: {} },\n runConfig: message.runConfig ?? {},\n startRun: message.startRun,\n };\n if (queue) {\n queue.enqueue(appendMessage);\n } else {\n onNew?.(appendMessage);\n }\n },\n deleteMessage: () => {},\n startRun: () => {\n onStartRun?.();\n },\n resumeRun: () => {\n if (!onResume)\n throw new Error(\n \"Runtime does not support resuming runs (onResume is not set).\",\n );\n onResume();\n },\n cancelRun: handleCancelRun,\n importExternalState: (state: unknown) => {\n if (!onLoadExternalState)\n throw new Error(\n \"Runtime does not support importing external states (onLoadExternalState is not set).\",\n );\n onLoadExternalState(state);\n },\n getModelContext: () => ({ tools: {}, config: {} }),\n export: () => ({ messages: [] }),\n import: () => {},\n reset: () => {},\n message: (selector) => {\n if (\"id\" in selector) {\n return messageClients.get({ key: selector.id });\n }\n return messageClients.get(selector);\n },\n stopSpeaking: speechController.stop,\n connectVoice: () => {},\n disconnectVoice: () => {},\n getVoiceVolume: () => 0,\n subscribeVoiceVolume: () => () => {},\n muteVoice: () => {},\n unmuteVoice: () => {},\n };\n};\n\nexport const ExternalThread = resource(useExternalThread);\n\nattachTransformScopes(useExternalThread, (scopes, parent) => {\n if (!scopes.threads && parent.threads.source === null) {\n const threadElement = scopes.thread as ClientElement<\"thread\">;\n scopes.threads = SingleThreadList({ thread: threadElement });\n // scopes mount in key order; re-declare thread after the threads source it resolves from\n delete scopes.thread;\n scopes.thread = Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.thread(\"main\"),\n });\n }\n\n if (!scopes.threadListItem && parent.threadListItem.source === null) {\n scopes.threadListItem = Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.item(\"main\"),\n });\n }\n\n scopes.composer ??= Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.thread.composer(),\n });\n\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n if (!scopes.tools && parent.tools.source === null) {\n scopes.tools = Tools({});\n }\n if (!scopes.dataRenderers && parent.dataRenderers.source === null) {\n scopes.dataRenderers = DataRenderers();\n }\n if (!scopes.suggestions && parent.suggestions.source === null) {\n scopes.suggestions = Suggestions();\n }\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ExternalThread.js","names":["useState","useMemo","useEffect","useEffectEvent","useCallback","useRef","resource","withKey","ClientElement","ClientOutput","useClientLookup","attachTransformScopes","useClientResource","Derived","AddToolResultOptions","AppendMessage","Attachment","AttachmentAdapter","CreateAttachment","PendingAttachment","RespondToToolApprovalOptions","ResumeToolCallOptions","MessagePartStatus","ThreadAssistantMessagePart","ThreadUserMessagePart","ThreadMessage","ToolCallMessagePartStatus","ExternalThreadQueueAdapter","ExternalThreadBranchAdapter","QueuePlacement","FeedbackAdapter","SpeechState","SpeechSynthesisAdapter","ToolResponse","ReadonlyJSONValue","QueueItemState","ComposerSendOptions","fileMatchesAccept","getThreadMessageText","isCreateAttachment","resolveToolApprovalResponse","toMessagePartStatus","ModelContext","Suggestions","Tools","DataRenderers","SingleThreadList","EMPTY_QUEUE_ITEMS","EMPTY_BRANCH_IDS","ExternalThreadMessage","id","COMPLETE_STATUS","Object","freeze","type","derivePartStatus","message","partIndex","part","status","ExternalThreadProps","messages","isRunning","isLoading","state","extras","isSendDisabled","onNew","onEdit","onReload","parentId","onStartRun","onCancel","onResume","onAddToolResult","options","onResumeToolCall","onLoadExternalState","attachmentAdapter","feedbackAdapter","speechAdapter","queue","branches","onRespondToToolApproval","MessageClientProps","index","submittedFeedback","onSubmitFeedback","feedback","speech","onSpeak","onStopSpeaking","useMessageClient","t0","$","_c","isCopied","setIsCopied","isHovering","setIsHovering","isEditing","setIsEditing","t1","content","map","idx","PartResource","messageId","partClients","t2","attachments","t3","_temp2","attachmentClients","t4","Error","handleBeginEdit","t5","Symbol","for","handleCancelEdit","t6","msg","sourceId","handleSendEdit","t7","ComposerClientResource","canCancel","onBeginEdit","onSend","composerClient","branchIds","t8","getBranches","indexOf","branchIndex","branchNumber","branchCount","length","t9","role","metadata","messageWithFeedback","t10","t11","isLast","parts","composer","t12","t13","methods","t14","t15","t16","position","branchId","target","undefined","switchToBranch","t17","selector","get","findIndex","p","toolCallId","t18","selector_0","key","t19","getState","delete","_temp3","reload","speak","stopSpeaking","submitFeedback","getCopyText","attachment","MessageClient","PartResourceProps","usePartResource","result","response","toResponse","toolName","isError","artifact","modelContent","payload","response_0","approval","approved","resolution","addToolResult","resumeToolCall","respondToToolApproval","AttachmentResourceProps","onRemove","Promise","useAttachmentResource","remove","AttachmentResource","ComposerClientResourceProps","useQueueItemClient","item","onMove","placement","steer","lane","insertAfter","move","QueueItemClient","drainAdapterAdd","ReturnType","upsert","asyncIterator","useLiveState","initial","setState","ref","next","current","prev","T","set","const","useComposerClientResource","text","setText","textRef","setRole","roleRef","runConfig","setRunConfig","runConfigRef","setAttachments","attachmentsRef","quote","setQuote","quoteRef","textParts","filter","_temp4","messageText","_temp5","join","updateFromMessage","a","removed","all","_temp6","a_1","removePendingAttachments","attachment_0","prev_0","a_2","upsertAttachment","steerItems","laneItems","items","queueItems","queueItemClients","accept","isEmpty","trim","canSend","attachmentAccept","dictation","fileOrAttachment","file","name","contentType","add","newAttachment","Math","random","toString","substring","prev_1","newAttachment_0","prev_2","removed_0","removed_1","opts","currentQuote","currentText","currentAttachments","isEmpty_0","dispatch","sendAttachments","composedMessage","createdAt","Date","startRun","custom","enqueue","attachment_1","send","then","error","prev_3","prev_4","prev_5","console","t20","t21","t22","addAttachment","clearAttachments","reset","cancel","beginEdit","startDictation","_temp7","stopDictation","_temp8","queueItem","createSpeechController","notify","session","clear","adapter","utterance","unsub","subscribe","stop","stopMessage","dispose","dedupeMessagesById","seenIds","Set","deduped","i","has","warn","push","reverse","useExternalThread","messagesProp","threadState","setSubmittedFeedback","entry","external","feedbackFor","live","entries","entry_0","msg_0","find","m","keys","fromEntries","submit","handleSubmitFeedback","speechState","setSpeech","speechController","hasSpeechAdapter","message_0","handleSpeak","messageIndex","m_0","handleReload","msg_1","props","messageClients","handleCancelRun","message_1","at","handleSendNew","headId","message_2","message_3","composerQueue","hasQueue","hasBranches","hasEdit","hasReload","hasAttachments","hasFeedback","hasSpeech","t23","_temp9","messageStates","t24","t25","edit","refetchThread","voice","switchBranchDuringRun","unstable_copy","t26","t27","t28","isDisabled","capabilities","suggestions","t29","t30","t31","message_4","appendMessage","t32","t33","t34","state_0","t35","t36","append","deleteMessage","_temp0","resumeRun","cancelRun","importExternalState","getModelContext","_temp1","export","_temp10","import","_temp11","_temp12","connectVoice","_temp13","disconnectVoice","_temp14","getVoiceVolume","_temp15","subscribeVoiceVolume","_temp17","muteVoice","_temp18","unmuteVoice","_temp19","ExternalThread","scopes","parent","threads","source","threadElement","thread","query","aui","threadListItem","modelContext","tools","dataRenderers","_temp","part_0","a_0","s","arr","config","_temp16"],"sources":["../../src/client/ExternalThread.ts"],"sourcesContent":["import {\n useState,\n useMemo,\n useEffect,\n useEffectEvent,\n useCallback,\n useRef,\n} from \"react\";\nimport { resource, withKey } from \"@assistant-ui/tap\";\nimport {\n type ClientElement,\n type ClientOutput,\n useClientLookup,\n attachTransformScopes,\n useClientResource,\n Derived,\n} from \"@assistant-ui/store\";\n\nimport type {\n AddToolResultOptions,\n AppendMessage,\n Attachment,\n AttachmentAdapter,\n CreateAttachment,\n PendingAttachment,\n RespondToToolApprovalOptions,\n ResumeToolCallOptions,\n MessagePartStatus,\n ThreadAssistantMessagePart,\n ThreadUserMessagePart,\n ThreadMessage,\n ToolCallMessagePartStatus,\n ExternalThreadQueueAdapter,\n ExternalThreadBranchAdapter,\n QueuePlacement,\n FeedbackAdapter,\n SpeechState,\n SpeechSynthesisAdapter,\n} from \"@assistant-ui/core\";\nimport { ToolResponse } from \"assistant-stream\";\nimport type { ReadonlyJSONValue } from \"assistant-stream/utils\";\nimport type { QueueItemState } from \"@assistant-ui/core/store\";\nimport type { ComposerSendOptions } from \"@assistant-ui/core/store\";\nimport {\n fileMatchesAccept,\n getThreadMessageText,\n isCreateAttachment,\n resolveToolApprovalResponse,\n toMessagePartStatus,\n} from \"@assistant-ui/core/internal\";\nimport { ModelContext, Suggestions } from \"@assistant-ui/core/store\";\nimport { Tools, DataRenderers } from \"@assistant-ui/core/react\";\nimport { SingleThreadList } from \"./SingleThreadList\";\n\nconst EMPTY_QUEUE_ITEMS: readonly QueueItemState[] = [];\nconst EMPTY_BRANCH_IDS: readonly string[] = [];\n\nexport type ExternalThreadMessage = ThreadMessage & {\n id: string;\n};\n\nconst COMPLETE_STATUS: MessagePartStatus = Object.freeze({\n type: \"complete\",\n});\n\nconst derivePartStatus = (\n message: ExternalThreadMessage,\n partIndex: number,\n part: ThreadAssistantMessagePart | ThreadUserMessagePart,\n): ToolCallMessagePartStatus => {\n if (!message.status) return COMPLETE_STATUS;\n return toMessagePartStatus(message, partIndex, part);\n};\n\nexport type ExternalThreadProps = {\n messages: readonly ExternalThreadMessage[];\n isRunning?: boolean;\n isLoading?: boolean | undefined;\n state?: ReadonlyJSONValue | undefined;\n extras?: unknown;\n /**\n * Whether sending new messages is currently disabled. When `true`, the\n * thread composer's input remains usable but `send()` is a no-op and\n * `composer.canSend` is `false`. Edit composers (saving message edits)\n * intentionally ignore this flag.\n */\n isSendDisabled?: boolean;\n /**\n * Callback for new messages (non-queue runtimes).\n * @note Unused when `queue` is provided — new messages are routed through `queue.enqueue` instead.\n */\n onNew?: (message: AppendMessage) => void;\n onEdit?: (message: AppendMessage) => void;\n onReload?: (parentId: string | null) => void;\n onStartRun?: () => void;\n onCancel?: () => void;\n onResume?: (() => void) | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n /** Callback for resuming a tool call that is waiting for human input. */\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n onLoadExternalState?: ((state: unknown) => void) | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n feedbackAdapter?: FeedbackAdapter | undefined;\n speechAdapter?: SpeechSynthesisAdapter | undefined;\n /** Queue adapter for runtimes that support message queuing and steering. */\n queue?: ExternalThreadQueueAdapter;\n /** Branch adapter for runtimes that track sibling variants of messages. */\n branches?: ExternalThreadBranchAdapter;\n /** Callback for tool approval decisions. Absent: responding to an approval throws a capability error. */\n onRespondToToolApproval?: (options: RespondToToolApprovalOptions) => void;\n};\n\ntype MessageClientProps = {\n message: ExternalThreadMessage;\n index: number;\n parentId: string | null;\n onEdit?: (message: AppendMessage) => void;\n onReload?: () => void;\n queue?: ExternalThreadQueueAdapter | undefined;\n branches?: ExternalThreadBranchAdapter | undefined;\n onRespondToToolApproval?:\n | ((options: RespondToToolApprovalOptions) => void)\n | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n submittedFeedback: \"positive\" | \"negative\" | undefined;\n onSubmitFeedback: (feedback: { type: \"positive\" | \"negative\" }) => void;\n speech: SpeechState | undefined;\n onSpeak: () => void;\n onStopSpeaking: () => void;\n};\n\n// Message Client - minimal implementation\nconst useMessageClient = ({\n message,\n index,\n parentId,\n onEdit,\n onReload,\n queue,\n branches,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n attachmentAdapter,\n submittedFeedback,\n onSubmitFeedback,\n speech,\n onSpeak,\n onStopSpeaking,\n}: MessageClientProps): ClientOutput<\"message\"> => {\n const [isCopied, setIsCopied] = useState(false);\n const [isHovering, setIsHovering] = useState(false);\n const [isEditing, setIsEditing] = useState(false);\n\n const partClients = useClientLookup(\n message.content.map((part, idx) =>\n withKey(\n idx,\n PartResource({\n part,\n status: derivePartStatus(message, idx, part),\n messageId: message.id,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n }),\n ),\n ),\n );\n\n const attachmentClients = useClientLookup(\n (message.attachments ?? []).map((attachment) =>\n withKey(\n attachment.id,\n AttachmentResource({\n attachment,\n onRemove: () => {},\n }),\n ),\n ),\n );\n\n const handleBeginEdit = () => {\n if (!onEdit) throw new Error(\"Runtime does not support editing.\");\n setIsEditing(true);\n };\n\n const handleCancelEdit = () => {\n setIsEditing(false);\n };\n\n const handleSendEdit = (msg: AppendMessage) => {\n if (!onEdit) throw new Error(\"Runtime does not support editing.\");\n onEdit({\n ...msg,\n parentId,\n sourceId: message.id,\n });\n setIsEditing(false);\n };\n\n const composerClient = useClientResource(\n ComposerClientResource({\n type: \"edit\",\n isEditing,\n canCancel: true,\n onCancel: handleCancelEdit,\n onBeginEdit: handleBeginEdit,\n onSend: handleSendEdit,\n message,\n queue,\n attachmentAdapter,\n }),\n );\n\n const branchIds = branches?.getBranches(message.id) ?? EMPTY_BRANCH_IDS;\n const branchIndex = branchIds.indexOf(message.id);\n const branchNumber = branchIndex === -1 ? 1 : branchIndex + 1;\n const branchCount = branchIndex === -1 ? 1 : branchIds.length;\n\n const state = useMemo(() => {\n const messageWithFeedback: ExternalThreadMessage =\n submittedFeedback && message.role === \"assistant\"\n ? {\n ...message,\n metadata: {\n ...message.metadata,\n submittedFeedback: { type: submittedFeedback },\n },\n }\n : message;\n return {\n ...messageWithFeedback,\n attachments: message.attachments ?? [],\n parentId,\n isLast: false, // Will be set by thread\n branchNumber,\n branchCount,\n speech,\n parts: partClients.state,\n isCopied,\n isHovering,\n index,\n composer: composerClient.state,\n };\n }, [\n message,\n parentId,\n isCopied,\n isHovering,\n index,\n composerClient.state,\n partClients.state,\n branchNumber,\n branchCount,\n submittedFeedback,\n speech,\n ]);\n\n return {\n getState: () => state,\n composer: () => composerClient.methods,\n delete: () => {},\n reload: () => {\n onReload?.();\n },\n speak: onSpeak,\n stopSpeaking: onStopSpeaking,\n submitFeedback: onSubmitFeedback,\n switchToBranch: ({ position, branchId }) => {\n if (!branches) return;\n const target =\n branchId ??\n (branchIndex === -1\n ? undefined\n : position === \"previous\"\n ? branchIds[branchIndex - 1]\n : position === \"next\"\n ? branchIds[branchIndex + 1]\n : undefined);\n if (target !== undefined && target !== message.id)\n branches.switchToBranch(target);\n },\n getCopyText: () => getThreadMessageText(message),\n part: (selector) => {\n if (\"index\" in selector) {\n return partClients.get(selector);\n }\n const partIndex = state.parts.findIndex(\n (p) => p.type === \"tool-call\" && p.toolCallId === selector.toolCallId,\n );\n return partClients.get({ index: partIndex });\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachmentClients.get({ key: selector.id });\n }\n return attachmentClients.get(selector);\n },\n setIsCopied,\n setIsHovering,\n };\n};\n\nconst MessageClient = resource(useMessageClient);\n\ntype PartResourceProps = {\n part: ThreadAssistantMessagePart | ThreadUserMessagePart;\n status: ToolCallMessagePartStatus;\n messageId: string;\n onRespondToToolApproval?:\n | ((options: RespondToToolApprovalOptions) => void)\n | undefined;\n onAddToolResult?: ((options: AddToolResultOptions) => void) | undefined;\n onResumeToolCall?: ((options: ResumeToolCallOptions) => void) | undefined;\n};\n\n// Part Client - minimal implementation\nconst usePartResource = ({\n part,\n status,\n messageId,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n}: PartResourceProps): ClientOutput<\"part\"> => {\n const state = useMemo(\n () => ({ ...part, status: status as MessagePartStatus }),\n [part, status],\n );\n\n return {\n getState: () => state,\n addToolResult: (result) => {\n if (!onAddToolResult)\n throw new Error(\n \"Runtime does not support tool results (onAddToolResult is not set).\",\n );\n if (part.type !== \"tool-call\")\n throw new Error(\"Tried to add tool result on non-tool message part\");\n\n const response = ToolResponse.toResponse(result);\n onAddToolResult({\n messageId,\n toolName: part.toolName,\n toolCallId: part.toolCallId,\n result: response.result as ReadonlyJSONValue,\n isError: response.isError,\n ...(response.artifact !== undefined && { artifact: response.artifact }),\n ...(response.modelContent !== undefined && {\n modelContent: response.modelContent,\n }),\n });\n },\n resumeToolCall: (payload) => {\n if (!onResumeToolCall)\n throw new Error(\n \"Runtime does not support resuming tool calls (onResumeToolCall is not set).\",\n );\n if (part.type !== \"tool-call\")\n throw new Error(\"Tried to resume tool call on non-tool message part\");\n\n onResumeToolCall({ toolCallId: part.toolCallId, payload });\n },\n respondToToolApproval: (response) => {\n if (!onRespondToToolApproval)\n throw new Error(\"Runtime does not support tool approvals.\");\n\n if (part.type !== \"tool-call\")\n throw new Error(\n \"Tried to respond to tool approval on non-tool message part\",\n );\n\n if (\n !part.approval ||\n part.approval.approved !== undefined ||\n part.approval.resolution !== undefined\n )\n throw new Error(\"Tool call has no pending approval\");\n\n onRespondToToolApproval(\n resolveToolApprovalResponse(part.approval, response),\n );\n },\n };\n};\n\nconst PartResource = resource(usePartResource);\n\ntype AttachmentResourceProps = {\n attachment: Attachment;\n onRemove?: () => void | Promise<void>;\n};\n\n// Attachment Client - minimal implementation\nconst useAttachmentResource = ({\n attachment,\n onRemove,\n}: AttachmentResourceProps): ClientOutput<\"attachment\"> => {\n return {\n getState: () => attachment,\n remove: async () => {\n await onRemove?.();\n },\n };\n};\n\nconst AttachmentResource = resource(useAttachmentResource);\n\ntype ComposerClientResourceProps = {\n type: \"thread\" | \"edit\";\n isEditing: boolean;\n canCancel: boolean;\n isSendDisabled?: boolean;\n onCancel: () => void;\n onBeginEdit?: () => void;\n onSend?: (message: AppendMessage) => void;\n message?: ExternalThreadMessage;\n queue?: ExternalThreadQueueAdapter | undefined;\n attachmentAdapter?: AttachmentAdapter | undefined;\n};\n\nconst useQueueItemClient = ({\n item,\n onMove,\n onRemove,\n}: {\n item: QueueItemState;\n onMove: (placement: QueuePlacement) => void;\n onRemove: () => void;\n}): ClientOutput<\"queueItem\"> => {\n return {\n getState: () => item,\n steer: () => onMove({ lane: \"steer\", insertAfter: null }),\n move: onMove,\n remove: onRemove,\n };\n};\n\nconst QueueItemClient = resource(useQueueItemClient);\n\nconst drainAdapterAdd = async (\n result: ReturnType<AttachmentAdapter[\"add\"]>,\n upsert: (attachment: Attachment) => void,\n) => {\n if (Symbol.asyncIterator in result) {\n for await (const attachment of result) {\n upsert(attachment);\n }\n } else {\n upsert(await result);\n }\n};\n\n// State whose setter tracks the latest value in a ref, so imperative\n// call sequences (setText immediately followed by send) observe the write\n// before React re-renders — legacy composer parity.\nconst useLiveState = <T>(initial: T) => {\n const [state, setState] = useState(initial);\n const ref = useRef(state);\n const set = useCallback((next: T | ((prev: T) => T)) => {\n ref.current =\n typeof next === \"function\" ? (next as (prev: T) => T)(ref.current) : next;\n setState(ref.current);\n }, []);\n return [state, set, ref] as const;\n};\n\n// Composer Client - minimal implementation\nconst useComposerClientResource = ({\n type,\n isEditing,\n canCancel,\n isSendDisabled = false,\n onCancel,\n onBeginEdit,\n onSend,\n message,\n queue,\n attachmentAdapter,\n}: ComposerClientResourceProps): ClientOutput<\"composer\"> => {\n const [text, setText, textRef] = useLiveState(\"\");\n const [role, setRole, roleRef] = useLiveState<\n \"user\" | \"assistant\" | \"system\"\n >(\"user\");\n const [runConfig, setRunConfig, runConfigRef] = useLiveState<\n Record<string, unknown>\n >({});\n const [attachments, setAttachments, attachmentsRef] = useLiveState<\n readonly Attachment[]\n >([]);\n const [quote, setQuote, quoteRef] = useLiveState<\n { readonly text: string; readonly messageId: string } | undefined\n >(undefined);\n\n // Update composer values when editing begins\n const updateFromMessage = useEffectEvent(() => {\n if (message) {\n // Extract text from message content (text parts only)\n const textParts = message.content.filter((part) => part.type === \"text\");\n const messageText = textParts\n .map((part) => (\"text\" in part ? part.text : \"\"))\n .join(\"\\n\\n\");\n\n setText(messageText);\n setRole(message.role);\n setAttachments(message.attachments ?? []);\n }\n });\n\n useEffect(() => {\n if (isEditing) {\n updateFromMessage();\n }\n }, [isEditing]);\n\n const attachmentClients = useClientLookup(\n attachments.map((attachment) =>\n withKey(\n attachment.id,\n AttachmentResource({\n attachment,\n onRemove: async () => {\n await attachmentAdapter?.remove(attachment);\n setAttachments((prev) =>\n prev.filter((a) => a.id !== attachment.id),\n );\n },\n }),\n ),\n ),\n );\n\n const removePendingAttachments = async (removed: readonly Attachment[]) => {\n if (!attachmentAdapter) return;\n await Promise.all(\n removed\n .filter((a) => a.status.type !== \"complete\")\n .map((a) => attachmentAdapter.remove(a)),\n );\n };\n\n const upsertAttachment = (attachment: Attachment) => {\n setAttachments((prev) => {\n const idx = prev.findIndex((a) => a.id === attachment.id);\n if (idx === -1) return [...prev, attachment];\n const next = [...prev];\n next[idx] = attachment;\n return next;\n });\n };\n\n const steerItems = queue?.steerItems ?? EMPTY_QUEUE_ITEMS;\n const laneItems = queue?.items ?? EMPTY_QUEUE_ITEMS;\n const queueItems = useMemo(\n () =>\n steerItems.length === 0\n ? laneItems\n : laneItems.length === 0\n ? steerItems\n : [...steerItems, ...laneItems],\n [steerItems, laneItems],\n );\n const queueItemClients = useClientLookup(\n queueItems.map((item) =>\n withKey(\n item.id,\n QueueItemClient({\n item,\n onMove: (placement) => queue?.move(item.id, placement),\n onRemove: () => queue?.remove(item.id),\n }),\n ),\n ),\n );\n\n const state = useMemo(() => {\n const isEmpty = !text.trim() && !attachments.length;\n return {\n text,\n role,\n attachments: attachmentClients.state,\n runConfig,\n isEditing,\n canCancel,\n canSend: isEditing && !isEmpty && !isSendDisabled,\n attachmentAccept: attachmentAdapter?.accept ?? \"*\",\n isEmpty,\n type,\n dictation: undefined,\n quote,\n queue: queueItems,\n };\n }, [\n text,\n role,\n attachmentClients.state,\n runConfig,\n isEditing,\n canCancel,\n isSendDisabled,\n type,\n attachments.length,\n quote,\n queueItems,\n attachmentAdapter?.accept,\n ]);\n\n return {\n getState: () => state,\n setText,\n setRole,\n setRunConfig,\n addAttachment: async (fileOrAttachment: File | CreateAttachment) => {\n if (attachmentAdapter) {\n const file = isCreateAttachment(fileOrAttachment)\n ? {\n name: fileOrAttachment.name,\n type: fileOrAttachment.contentType ?? \"\",\n }\n : { name: fileOrAttachment.name, type: fileOrAttachment.type };\n if (!fileMatchesAccept(file, attachmentAdapter.accept))\n throw new Error(\n `File type ${file.type || \"unknown\"} is not accepted. Accepted types: ${attachmentAdapter.accept}`,\n );\n }\n if (!isCreateAttachment(fileOrAttachment) && attachmentAdapter) {\n await drainAdapterAdd(\n attachmentAdapter.add({ file: fileOrAttachment }),\n upsertAttachment,\n );\n } else if (!isCreateAttachment(fileOrAttachment)) {\n const newAttachment: Attachment = {\n id: Math.random().toString(36).substring(7),\n type: \"file\",\n name: fileOrAttachment.name,\n contentType: fileOrAttachment.type,\n file: fileOrAttachment,\n status: { type: \"complete\" },\n content: [],\n };\n setAttachments((prev) => [...prev, newAttachment]);\n } else {\n const newAttachment: Attachment = {\n id: fileOrAttachment.id ?? Math.random().toString(36).substring(7),\n type: fileOrAttachment.type ?? \"document\",\n name: fileOrAttachment.name,\n contentType: fileOrAttachment.contentType,\n content: fileOrAttachment.content,\n status: { type: \"complete\" },\n };\n setAttachments((prev) => [...prev, newAttachment]);\n }\n },\n clearAttachments: async () => {\n const removed = attachmentsRef.current;\n setAttachments([]);\n await removePendingAttachments(removed);\n },\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachmentClients.get({ key: selector.id });\n }\n return attachmentClients.get(selector);\n },\n reset: async () => {\n const removed = attachmentsRef.current;\n setText(\"\");\n setRole(\"user\");\n setRunConfig({});\n setAttachments([]);\n setQuote(undefined);\n await removePendingAttachments(removed);\n },\n send: (opts?: ComposerSendOptions) => {\n const currentQuote = quoteRef.current;\n const currentText = textRef.current;\n const currentAttachments = attachmentsRef.current;\n const isEmpty = !currentText.trim() && !currentAttachments.length;\n if (!isEditing || isEmpty || isSendDisabled) return;\n\n setText(\"\");\n setAttachments([]);\n setQuote(undefined);\n\n const dispatch = (sendAttachments: readonly Attachment[]) => {\n const composedMessage: AppendMessage = {\n role: roleRef.current,\n content: currentText\n ? [{ type: \"text\" as const, text: currentText }]\n : [],\n attachments: sendAttachments as any,\n createdAt: new Date(),\n parentId: null,\n sourceId: null,\n runConfig: runConfigRef.current,\n startRun: opts?.startRun,\n metadata: {\n custom: { ...(currentQuote ? { quote: currentQuote } : {}) },\n },\n };\n // edit sends carry a sourceId contract; only thread sends queue\n if (queue && type === \"thread\") {\n if (opts?.steer ?? canCancel) queue.steer(composedMessage);\n else queue.enqueue(composedMessage);\n } else {\n onSend?.(composedMessage);\n }\n };\n\n if (attachmentAdapter && currentAttachments.length > 0) {\n void Promise.all(\n currentAttachments.map((attachment) =>\n attachment.status.type === \"complete\"\n ? attachment\n : attachmentAdapter.send(attachment as PendingAttachment),\n ),\n ).then(dispatch, (error) => {\n // Upload failed: merge the failed send back into the draft.\n setText((prev) =>\n currentText && prev\n ? currentText + \"\\n\" + prev\n : currentText || prev,\n );\n setQuote((prev) => prev ?? currentQuote);\n setAttachments((prev) => [...currentAttachments, ...prev]);\n console.error(\"Failed to send attachments\", error);\n });\n } else {\n dispatch(currentAttachments);\n }\n },\n cancel: onCancel,\n beginEdit: () => {\n onBeginEdit?.();\n },\n startDictation: () => {},\n stopDictation: () => {},\n setQuote,\n queueItem: (selector: { index: number } | { id: string }) => {\n if (\"id\" in selector) {\n return queueItemClients.get({ key: selector.id });\n }\n return queueItemClients.get(selector);\n },\n };\n};\n\nconst ComposerClientResource = resource(useComposerClientResource);\n\nconst createSpeechController = (\n notify: (speech: SpeechState | undefined) => void,\n) => {\n let session: { messageId: string; cancel: () => void } | undefined;\n\n const clear = () => {\n if (!session) return;\n session.cancel();\n session = undefined;\n notify(undefined);\n };\n\n return {\n speak: (\n adapter: SpeechSynthesisAdapter,\n message: ExternalThreadMessage,\n ) => {\n clear();\n\n const utterance = adapter.speak(getThreadMessageText(message));\n let unsub: (() => void) | undefined;\n unsub = utterance.subscribe(() => {\n if (utterance.status.type === \"ended\") {\n unsub?.();\n session = undefined;\n notify(undefined);\n } else {\n notify({ messageId: message.id, status: utterance.status });\n }\n });\n\n if (utterance.status.type === \"ended\") {\n unsub();\n notify(undefined);\n return;\n }\n\n session = {\n messageId: message.id,\n cancel: () => {\n unsub!();\n utterance.cancel();\n },\n };\n notify({ messageId: message.id, status: utterance.status });\n },\n stop: () => {\n if (!session) throw new Error(\"No message is being spoken\");\n clear();\n },\n stopMessage: (messageId: string) => {\n if (session?.messageId !== messageId)\n throw new Error(\"Message is not being spoken\");\n clear();\n },\n dispose: clear,\n };\n};\n\nconst dedupeMessagesById = (messages: readonly ExternalThreadMessage[]) => {\n const seenIds = new Set<string>();\n const deduped: ExternalThreadMessage[] = [];\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i]!;\n if (seenIds.has(message.id)) {\n console.warn(\n `ExternalThread: duplicate message id \"${message.id}\" in the provided messages array; keeping the last occurrence.`,\n );\n continue;\n }\n seenIds.add(message.id);\n deduped.push(message);\n }\n return deduped.length === messages.length ? messages : deduped.reverse();\n};\n\n// External Thread Client\nconst useExternalThread = ({\n messages: messagesProp,\n isRunning = false,\n isLoading = false,\n state: threadState,\n extras,\n isSendDisabled = false,\n onNew,\n onEdit,\n onReload,\n onStartRun,\n onCancel,\n onResume,\n onAddToolResult,\n onResumeToolCall,\n onLoadExternalState,\n attachmentAdapter,\n feedbackAdapter,\n speechAdapter,\n queue,\n branches,\n onRespondToToolApproval,\n}: ExternalThreadProps): ClientOutput<\"thread\"> => {\n const messages = useMemo(\n () => dedupeMessagesById(messagesProp),\n [messagesProp],\n );\n\n // Local entries are optimistic: they apply only while the message's\n // external submittedFeedback still equals the value seen at click time.\n const [submittedFeedback, setSubmittedFeedback] = useState<\n Record<\n string,\n {\n type: \"positive\" | \"negative\";\n external: \"positive\" | \"negative\" | undefined;\n }\n >\n >({});\n\n const feedbackFor = (msg: ExternalThreadMessage) => {\n const entry = submittedFeedback[msg.id];\n return entry && msg.metadata.submittedFeedback?.type === entry.external\n ? entry.type\n : undefined;\n };\n\n useEffect(() => {\n setSubmittedFeedback((prev) => {\n const live = Object.entries(prev).filter(([id, entry]) => {\n const msg = messages.find((m) => m.id === id);\n return !!msg && msg.metadata.submittedFeedback?.type === entry.external;\n });\n return live.length === Object.keys(prev).length\n ? prev\n : Object.fromEntries(live);\n });\n }, [messages]);\n\n const handleSubmitFeedback = (\n message: ExternalThreadMessage,\n { type }: { type: \"positive\" | \"negative\" },\n ) => {\n if (!feedbackAdapter) throw new Error(\"Feedback adapter not configured\");\n feedbackAdapter.submit({ message, type });\n\n if (message.role === \"assistant\") {\n setSubmittedFeedback((prev) => ({\n ...prev,\n [message.id]: {\n type,\n external: message.metadata.submittedFeedback?.type,\n },\n }));\n }\n };\n\n const [speechState, setSpeech] = useState<SpeechState | undefined>(undefined);\n const [speechController] = useState(() => createSpeechController(setSpeech));\n\n const hasSpeechAdapter = !!speechAdapter;\n const speech = hasSpeechAdapter ? speechState : undefined;\n useEffect(() => {\n if (!hasSpeechAdapter) speechController.dispose();\n }, [hasSpeechAdapter, speechController]);\n\n useEffect(() => () => speechController.dispose(), [speechController]);\n\n const handleSpeak = (message: ExternalThreadMessage) => {\n if (!speechAdapter) throw new Error(\"Speech adapter not configured\");\n speechController.speak(speechAdapter, message);\n };\n\n const handleReload = (messageId: string) => {\n const messageIndex = messages.findIndex((m) => m.id === messageId);\n if (messageIndex === -1) return;\n\n const parentId = messageIndex > 0 ? messages[messageIndex - 1]!.id : null;\n onReload?.(parentId);\n };\n\n const messageClients = useClientLookup(\n messages.map((msg, index) => {\n const props: MessageClientProps = {\n message: msg,\n index,\n parentId: index > 0 ? messages[index - 1]!.id : null,\n onReload: () => handleReload(msg.id),\n queue,\n branches,\n onRespondToToolApproval,\n onAddToolResult,\n onResumeToolCall,\n attachmentAdapter,\n submittedFeedback: feedbackFor(msg),\n onSubmitFeedback: (feedback) => handleSubmitFeedback(msg, feedback),\n speech: speech?.messageId === msg.id ? speech : undefined,\n onSpeak: () => handleSpeak(msg),\n onStopSpeaking: () => speechController.stopMessage(msg.id),\n };\n if (onEdit) props.onEdit = onEdit;\n return withKey(msg.id, MessageClient(props));\n }),\n );\n\n const handleCancelRun = () => {\n onCancel?.();\n };\n\n const handleSendNew = (message: AppendMessage) => {\n // The composer does not know the thread; stamp the current head as the\n // parent (legacy composer parity).\n onNew?.({ ...message, parentId: messages.at(-1)?.id ?? null });\n };\n\n const headId = messages.at(-1)?.id ?? null;\n const composerQueue = useMemo(\n (): ExternalThreadQueueAdapter | undefined =>\n queue && {\n ...queue,\n enqueue: (message) =>\n queue.enqueue({ ...message, parentId: message.parentId ?? headId }),\n steer: (message) =>\n queue.steer({ ...message, parentId: message.parentId ?? headId }),\n },\n [queue, headId],\n );\n\n const composerClient = useClientResource(\n ComposerClientResource({\n type: \"thread\",\n isEditing: true,\n canCancel: isRunning,\n isSendDisabled,\n onCancel: handleCancelRun,\n onSend: handleSendNew,\n queue: composerQueue,\n attachmentAdapter,\n }),\n );\n\n const hasQueue = !!queue;\n const hasBranches = !!branches;\n const hasEdit = !!onEdit;\n const hasReload = !!onReload;\n const hasAttachments = !!attachmentAdapter;\n const hasFeedback = !!feedbackAdapter;\n const hasSpeech = !!speechAdapter;\n const state = useMemo(() => {\n const messageStates = messageClients.state.map((s, idx, arr) => ({\n ...s,\n isLast: idx === arr.length - 1,\n }));\n\n return {\n isEmpty: messages.length === 0,\n isDisabled: false,\n isLoading,\n isRunning,\n capabilities: {\n edit: hasEdit,\n delete: false,\n reload: hasReload,\n refetchThread: false,\n cancel: isRunning,\n speech: hasSpeech,\n attachments: hasAttachments,\n feedback: hasFeedback,\n voice: false,\n switchToBranch: hasBranches,\n switchBranchDuringRun: false,\n unstable_copy: false,\n dictation: false,\n queue: hasQueue,\n },\n messages: messageStates,\n state: threadState ?? {},\n suggestions: [],\n extras,\n speech,\n voice: undefined,\n composer: composerClient.state,\n };\n }, [\n messages,\n isRunning,\n isLoading,\n threadState,\n extras,\n hasQueue,\n hasBranches,\n hasEdit,\n hasReload,\n hasAttachments,\n hasFeedback,\n hasSpeech,\n speech,\n messageClients.state,\n composerClient.state,\n ]);\n\n return {\n getState: () => state,\n composer: () => composerClient.methods,\n append: (message) => {\n const appendMessage: AppendMessage =\n typeof message === \"string\"\n ? {\n createdAt: new Date(),\n parentId: messages.at(-1)?.id ?? null,\n sourceId: null,\n runConfig: {},\n role: \"user\",\n content: [{ type: \"text\", text: message }],\n attachments: [],\n metadata: { custom: {} },\n }\n : {\n createdAt: message.createdAt ?? new Date(),\n parentId: message.parentId ?? messages.at(-1)?.id ?? null,\n sourceId: message.sourceId ?? null,\n role: message.role ?? \"user\",\n content: message.content,\n attachments: message.attachments ?? [],\n metadata: message.metadata ?? { custom: {} },\n runConfig: message.runConfig ?? {},\n startRun: message.startRun,\n };\n if (queue) {\n queue.enqueue(appendMessage);\n } else {\n onNew?.(appendMessage);\n }\n },\n deleteMessage: () => {},\n startRun: () => {\n onStartRun?.();\n },\n resumeRun: () => {\n if (!onResume)\n throw new Error(\n \"Runtime does not support resuming runs (onResume is not set).\",\n );\n onResume();\n },\n cancelRun: handleCancelRun,\n importExternalState: (state: unknown) => {\n if (!onLoadExternalState)\n throw new Error(\n \"Runtime does not support importing external states (onLoadExternalState is not set).\",\n );\n onLoadExternalState(state);\n },\n getModelContext: () => ({ tools: {}, config: {} }),\n export: () => ({ messages: [] }),\n import: () => {},\n reset: () => {},\n message: (selector) => {\n if (\"id\" in selector) {\n return messageClients.get({ key: selector.id });\n }\n return messageClients.get(selector);\n },\n stopSpeaking: speechController.stop,\n connectVoice: () => {},\n disconnectVoice: () => {},\n getVoiceVolume: () => 0,\n subscribeVoiceVolume: () => () => {},\n muteVoice: () => {},\n unmuteVoice: () => {},\n };\n};\n\nexport const ExternalThread = resource(useExternalThread);\n\nattachTransformScopes(useExternalThread, (scopes, parent) => {\n if (!scopes.threads && parent.threads.source === null) {\n const threadElement = scopes.thread as ClientElement<\"thread\">;\n scopes.threads = SingleThreadList({ thread: threadElement });\n // scopes mount in key order; re-declare thread after the threads source it resolves from\n delete scopes.thread;\n scopes.thread = Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.thread(\"main\"),\n });\n }\n\n if (!scopes.threadListItem && parent.threadListItem.source === null) {\n scopes.threadListItem = Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.item(\"main\"),\n });\n }\n\n scopes.composer ??= Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.thread.composer(),\n });\n\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n if (!scopes.tools && parent.tools.source === null) {\n scopes.tools = Tools({});\n }\n if (!scopes.dataRenderers && parent.dataRenderers.source === null) {\n scopes.dataRenderers = DataRenderers();\n }\n if (!scopes.suggestions && parent.suggestions.source === null) {\n scopes.suggestions = Suggestions();\n }\n});\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@assistant-ui/react",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.10",
|
|
4
4
|
"description": "Open-source TypeScript/React library for building production-grade AI chat experiences",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
],
|
|
56
56
|
"sideEffects": false,
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"@assistant-ui/core": "^0.3.
|
|
58
|
+
"@assistant-ui/core": "^0.3.9",
|
|
59
59
|
"@assistant-ui/store": "^0.3.7",
|
|
60
60
|
"@assistant-ui/tap": "^0.9.10",
|
|
61
61
|
"@radix-ui/primitive": "^1.1.7",
|
|
@@ -183,6 +183,7 @@ const useMessageClient = ({
|
|
|
183
183
|
);
|
|
184
184
|
|
|
185
185
|
const handleBeginEdit = () => {
|
|
186
|
+
if (!onEdit) throw new Error("Runtime does not support editing.");
|
|
186
187
|
setIsEditing(true);
|
|
187
188
|
};
|
|
188
189
|
|
|
@@ -191,7 +192,8 @@ const useMessageClient = ({
|
|
|
191
192
|
};
|
|
192
193
|
|
|
193
194
|
const handleSendEdit = (msg: AppendMessage) => {
|
|
194
|
-
onEdit
|
|
195
|
+
if (!onEdit) throw new Error("Runtime does not support editing.");
|
|
196
|
+
onEdit({
|
|
195
197
|
...msg,
|
|
196
198
|
parentId,
|
|
197
199
|
sourceId: message.id,
|
|
@@ -322,6 +322,35 @@ describe("ExternalThread composer", () => {
|
|
|
322
322
|
expect(steer).not.toHaveBeenCalled();
|
|
323
323
|
});
|
|
324
324
|
|
|
325
|
+
it("throws on beginEdit when the runtime has no edit handler", () => {
|
|
326
|
+
const { aui } = renderThread({
|
|
327
|
+
messages: [
|
|
328
|
+
{
|
|
329
|
+
id: "u1",
|
|
330
|
+
role: "user",
|
|
331
|
+
content: [{ type: "text", text: "hi" }],
|
|
332
|
+
createdAt: new Date(0),
|
|
333
|
+
attachments: [],
|
|
334
|
+
metadata: { custom: {} },
|
|
335
|
+
} as unknown as ExternalThreadMessage,
|
|
336
|
+
],
|
|
337
|
+
isRunning: false,
|
|
338
|
+
queue: {
|
|
339
|
+
items: [],
|
|
340
|
+
steerItems: [],
|
|
341
|
+
enqueue: vi.fn(),
|
|
342
|
+
steer: vi.fn(),
|
|
343
|
+
move: vi.fn(),
|
|
344
|
+
edit: vi.fn(),
|
|
345
|
+
remove: vi.fn(),
|
|
346
|
+
},
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
expect(() =>
|
|
350
|
+
aui().thread.message({ id: "u1" }).composer().beginEdit(),
|
|
351
|
+
).toThrow("Runtime does not support editing.");
|
|
352
|
+
});
|
|
353
|
+
|
|
325
354
|
it("still refuses to send an empty composer synchronously after a send", async () => {
|
|
326
355
|
const onNew = vi.fn();
|
|
327
356
|
const { aui } = renderThread({ messages: [], isRunning: false, onNew });
|