@assistant-ui/react-ag-ui 0.0.70 → 0.0.71
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.
- package/dist/runtime/AgUiThreadRuntimeCore.d.ts +2 -0
- package/dist/runtime/AgUiThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtime/AgUiThreadRuntimeCore.js +57 -4
- package/dist/runtime/AgUiThreadRuntimeCore.js.map +1 -1
- package/dist/runtime/adapter/run-aggregator.d.ts +3 -0
- package/dist/runtime/adapter/run-aggregator.d.ts.map +1 -1
- package/dist/runtime/adapter/run-aggregator.js +3 -1
- package/dist/runtime/adapter/run-aggregator.js.map +1 -1
- package/dist/runtime/types.d.ts +2 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/useAgUiRuntime.d.ts.map +1 -1
- package/dist/useAgUiRuntime.js +2 -0
- package/dist/useAgUiRuntime.js.map +1 -1
- package/package.json +5 -5
- package/src/runtime/AgUiThreadRuntimeCore.ts +118 -1
- package/src/runtime/adapter/run-aggregator.ts +5 -0
- package/src/runtime/types.ts +2 -0
- package/src/useAgUiRuntime.external-store.test.tsx +39 -0
- package/src/useAgUiRuntime.ts +2 -0
|
@@ -14,6 +14,7 @@ type CoreOptions = {
|
|
|
14
14
|
agent: AbstractAgent;
|
|
15
15
|
logger: Logger;
|
|
16
16
|
showThinking: boolean;
|
|
17
|
+
joinStrategy?: UseAgUiRuntimeOptions["joinStrategy"];
|
|
17
18
|
getRunContext?: UseAgUiRuntimeOptions["getRunContext"];
|
|
18
19
|
resumeTranscript?: AgUiResumeTranscript | undefined;
|
|
19
20
|
autoCancelPendingToolCalls?: boolean | undefined;
|
|
@@ -26,6 +27,7 @@ export declare class AgUiThreadRuntimeCore {
|
|
|
26
27
|
private agent;
|
|
27
28
|
private logger;
|
|
28
29
|
private showThinking;
|
|
30
|
+
private joinStrategy;
|
|
29
31
|
private getRunContext;
|
|
30
32
|
private resumeTranscript;
|
|
31
33
|
private autoCancelPendingToolCalls;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgUiThreadRuntimeCore.d.ts","sourceRoot":"","sources":["../../src/runtime/AgUiThreadRuntimeCore.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"AgUiThreadRuntimeCore.d.ts","sourceRoot":"","sources":["../../src/runtime/AgUiThreadRuntimeCore.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,7 @@ var AgUiThreadRuntimeCore = class {
|
|
|
38
38
|
agent;
|
|
39
39
|
logger;
|
|
40
40
|
showThinking;
|
|
41
|
+
joinStrategy;
|
|
41
42
|
getRunContext;
|
|
42
43
|
resumeTranscript;
|
|
43
44
|
autoCancelPendingToolCalls;
|
|
@@ -84,6 +85,7 @@ var AgUiThreadRuntimeCore = class {
|
|
|
84
85
|
this.agent = options.agent;
|
|
85
86
|
this.logger = options.logger;
|
|
86
87
|
this.showThinking = options.showThinking;
|
|
88
|
+
this.joinStrategy = options.joinStrategy;
|
|
87
89
|
this.getRunContext = options.getRunContext;
|
|
88
90
|
this.resumeTranscript = options.resumeTranscript ?? "full";
|
|
89
91
|
this.autoCancelPendingToolCalls = options.autoCancelPendingToolCalls;
|
|
@@ -110,6 +112,7 @@ var AgUiThreadRuntimeCore = class {
|
|
|
110
112
|
this.agent = options.agent;
|
|
111
113
|
this.logger = options.logger;
|
|
112
114
|
this.showThinking = options.showThinking;
|
|
115
|
+
this.joinStrategy = options.joinStrategy;
|
|
113
116
|
this.getRunContext = options.getRunContext;
|
|
114
117
|
this.resumeTranscript = options.resumeTranscript ?? "full";
|
|
115
118
|
this.autoCancelPendingToolCalls = options.autoCancelPendingToolCalls;
|
|
@@ -755,6 +758,8 @@ var AgUiThreadRuntimeCore = class {
|
|
|
755
758
|
const shouldEagerlyInsertAssistant = parentId !== null && parent !== void 0 && parentId !== this.session.headId;
|
|
756
759
|
const historicalMessages = [...shouldEagerlyInsertAssistant ? this.session.tryGetMessages(parentId) ?? this.session.getMessages() : this.session.getMessages()];
|
|
757
760
|
const runStartMessageIds = new Set(this.getMessageRepository().messages.map(({ message }) => message.id));
|
|
761
|
+
const joinStrategy = this.joinStrategy;
|
|
762
|
+
const hasRunUserBoundary = parent?.message.role === "user" && !resume;
|
|
758
763
|
let pendingError = null;
|
|
759
764
|
const assistantParentId = parent ? parentId : this.session.headId;
|
|
760
765
|
let assistantMessageId;
|
|
@@ -806,6 +811,7 @@ var AgUiThreadRuntimeCore = class {
|
|
|
806
811
|
const abortSignal = abortController.signal;
|
|
807
812
|
const aggregator = new RunAggregator({
|
|
808
813
|
showThinking: this.showThinking,
|
|
814
|
+
joinStrategy,
|
|
809
815
|
logger: this.logger,
|
|
810
816
|
emit: applyUpdate,
|
|
811
817
|
onServerMessageId: (serverId) => {
|
|
@@ -817,7 +823,7 @@ var AgUiThreadRuntimeCore = class {
|
|
|
817
823
|
const dispatch = (event) => {
|
|
818
824
|
if (this.abortController !== abortController) return;
|
|
819
825
|
if (event.type === "RUN_FINISHED") runFinished = true;
|
|
820
|
-
const nextAssistantMessageId = this.handleEvent(aggregator, event, assistantMessageId);
|
|
826
|
+
const nextAssistantMessageId = this.handleEvent(aggregator, event, assistantMessageId, joinStrategy, runStartMessageIds, hasRunUserBoundary);
|
|
821
827
|
if (event.type === "MESSAGES_SNAPSHOT") assistantMessageId = nextAssistantMessageId;
|
|
822
828
|
};
|
|
823
829
|
this.abortController = abortController;
|
|
@@ -1234,7 +1240,7 @@ var AgUiThreadRuntimeCore = class {
|
|
|
1234
1240
|
custom: incoming.custom ? mergeAgUiNamespace(current.custom, incoming.custom) : current.custom
|
|
1235
1241
|
};
|
|
1236
1242
|
}
|
|
1237
|
-
handleEvent(aggregator, event, activeAssistantId) {
|
|
1243
|
+
handleEvent(aggregator, event, activeAssistantId, joinStrategy, runStartMessageIds, hasRunUserBoundary) {
|
|
1238
1244
|
switch (event.type) {
|
|
1239
1245
|
case "STATE_SNAPSHOT":
|
|
1240
1246
|
this.stateSnapshot = event.snapshot;
|
|
@@ -1255,7 +1261,7 @@ var AgUiThreadRuntimeCore = class {
|
|
|
1255
1261
|
const previousHeadId = this.session.headId;
|
|
1256
1262
|
const activeAssistant = activeAssistantId === void 0 ? void 0 : this.session.tryGetMessage(activeAssistantId)?.message;
|
|
1257
1263
|
const hasActiveText = activeAssistant?.role === "assistant" && activeAssistant.content.some((part) => part.type === "text");
|
|
1258
|
-
this.importMessagesSnapshot(event.messages, activeAssistantId);
|
|
1264
|
+
this.importMessagesSnapshot(event.messages, activeAssistantId, joinStrategy, runStartMessageIds, hasRunUserBoundary);
|
|
1259
1265
|
const headId = this.session.headId;
|
|
1260
1266
|
if (hasActiveText && headId !== previousHeadId) activeAssistantId = (headId === null ? void 0 : this.session.tryGetMessage(headId)?.message)?.role === "assistant" ? headId ?? void 0 : void 0;
|
|
1261
1267
|
this.updateActiveAssistantState(activeAssistantId);
|
|
@@ -1380,7 +1386,7 @@ var AgUiThreadRuntimeCore = class {
|
|
|
1380
1386
|
this.publishUpdate();
|
|
1381
1387
|
this.maybeCompleteAfterToolResults(messageId);
|
|
1382
1388
|
}
|
|
1383
|
-
importMessagesSnapshot(rawMessages, activeAssistantId) {
|
|
1389
|
+
importMessagesSnapshot(rawMessages, activeAssistantId, joinStrategy, runStartMessageIds, hasRunUserBoundary) {
|
|
1384
1390
|
try {
|
|
1385
1391
|
const activeAssistantItem = activeAssistantId ? this.session.tryGetMessage(activeAssistantId) : void 0;
|
|
1386
1392
|
const activeMessage = activeAssistantItem?.message;
|
|
@@ -1403,6 +1409,53 @@ var AgUiThreadRuntimeCore = class {
|
|
|
1403
1409
|
content: this.mergeSnapshotAssistantContent(existing.content, convertedMessage.content, snapshotHasReasoning, snapshotHasActivity)
|
|
1404
1410
|
};
|
|
1405
1411
|
}
|
|
1412
|
+
if (joinStrategy === "concat-content") {
|
|
1413
|
+
const activeIndex = converted.findIndex((message) => message.id === activeAssistantId);
|
|
1414
|
+
const lastKnownIndex = converted.findLastIndex((message) => runStartMessageIds.has(message.id));
|
|
1415
|
+
const lastUserIndex = hasRunUserBoundary ? converted.findLastIndex((message) => message.role === "user") : -1;
|
|
1416
|
+
const startIndex = activeIndex >= 0 ? activeIndex : lastKnownIndex >= 0 || lastUserIndex >= 0 ? Math.max(lastKnownIndex, lastUserIndex) + 1 : -1;
|
|
1417
|
+
if (startIndex >= 0 && converted[startIndex]?.role === "assistant") {
|
|
1418
|
+
let endIndex = startIndex + 1;
|
|
1419
|
+
while (converted[endIndex]?.role === "assistant") endIndex++;
|
|
1420
|
+
const runMessages = converted.slice(startIndex, endIndex);
|
|
1421
|
+
const includesStreamedPrefix = activeIndex < 0 && activeAssistant?.content.some((part) => part.type !== "data");
|
|
1422
|
+
if (includesStreamedPrefix && activeAssistant) runMessages.unshift(activeAssistant);
|
|
1423
|
+
if (runMessages.length > 1) {
|
|
1424
|
+
const [first, ...rest] = runMessages;
|
|
1425
|
+
let content = runMessages.flatMap((message) => message.content);
|
|
1426
|
+
if (includesStreamedPrefix) {
|
|
1427
|
+
content = [...first.content];
|
|
1428
|
+
let cursor = 0;
|
|
1429
|
+
const keyOf = (part) => part.type === "tool-call" ? `tool:${part.toolCallId}` : part.type === "text" || part.type === "reasoning" ? `${part.type}:${part.text}` : void 0;
|
|
1430
|
+
for (const message of rest) for (const part of message.content) {
|
|
1431
|
+
const key = keyOf(part);
|
|
1432
|
+
const match = key === void 0 ? -1 : content.findIndex((previous, index) => index >= cursor && keyOf(previous) === key);
|
|
1433
|
+
if (match < 0) {
|
|
1434
|
+
content.push(part);
|
|
1435
|
+
cursor = content.length;
|
|
1436
|
+
} else {
|
|
1437
|
+
if (part.type === "tool-call") content[match] = this.preserveToolResults([content[match]], [part])[0];
|
|
1438
|
+
cursor = match + 1;
|
|
1439
|
+
}
|
|
1440
|
+
}
|
|
1441
|
+
}
|
|
1442
|
+
converted.splice(startIndex, endIndex - startIndex, {
|
|
1443
|
+
...first,
|
|
1444
|
+
content,
|
|
1445
|
+
status: rest.at(-1).status,
|
|
1446
|
+
metadata: rest.reduce((metadata, message) => ({
|
|
1447
|
+
...metadata,
|
|
1448
|
+
...message.metadata,
|
|
1449
|
+
unstable_state: message.metadata.unstable_state,
|
|
1450
|
+
unstable_annotations: [...metadata.unstable_annotations, ...message.metadata.unstable_annotations],
|
|
1451
|
+
unstable_data: [...metadata.unstable_data, ...message.metadata.unstable_data],
|
|
1452
|
+
steps: [...metadata.steps, ...message.metadata.steps],
|
|
1453
|
+
custom: mergeAgUiNamespace(metadata.custom, message.metadata.custom)
|
|
1454
|
+
}), first.metadata)
|
|
1455
|
+
});
|
|
1456
|
+
}
|
|
1457
|
+
}
|
|
1458
|
+
}
|
|
1406
1459
|
const snapshotContainsActiveAssistant = converted.some((message) => message.id === activeAssistant?.id);
|
|
1407
1460
|
const preservesActiveAssistant = activeAssistant !== void 0 && !snapshotContainsActiveAssistant && (activeAssistant.metadata.isOptimistic !== true || converted.at(-1)?.role !== "assistant" || activeAssistantParentId !== void 0 && converted.at(-1)?.id === activeAssistantParentId);
|
|
1408
1461
|
if (preservesActiveAssistant) converted.push(activeAssistant);
|