@assistant-ui/react-ag-ui 0.0.69 → 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.
Files changed (30) hide show
  1. package/README.md +1 -1
  2. package/dist/runtime/AgUiThreadRuntimeCore.d.ts +6 -3
  3. package/dist/runtime/AgUiThreadRuntimeCore.d.ts.map +1 -1
  4. package/dist/runtime/AgUiThreadRuntimeCore.js +77 -10
  5. package/dist/runtime/AgUiThreadRuntimeCore.js.map +1 -1
  6. package/dist/runtime/adapter/conversions.d.ts +5 -0
  7. package/dist/runtime/adapter/conversions.d.ts.map +1 -1
  8. package/dist/runtime/adapter/conversions.js +104 -15
  9. package/dist/runtime/adapter/conversions.js.map +1 -1
  10. package/dist/runtime/adapter/run-aggregator.d.ts +3 -0
  11. package/dist/runtime/adapter/run-aggregator.d.ts.map +1 -1
  12. package/dist/runtime/adapter/run-aggregator.js +4 -2
  13. package/dist/runtime/adapter/run-aggregator.js.map +1 -1
  14. package/dist/runtime/types.d.ts +18 -2
  15. package/dist/runtime/types.d.ts.map +1 -1
  16. package/dist/runtime/types.js.map +1 -1
  17. package/dist/useAgUiRuntime.d.ts.map +1 -1
  18. package/dist/useAgUiRuntime.js +4 -0
  19. package/dist/useAgUiRuntime.js.map +1 -1
  20. package/package.json +5 -5
  21. package/src/runtime/AgUiThreadRuntimeCore.interrupt-cancel.test.ts +202 -0
  22. package/src/runtime/AgUiThreadRuntimeCore.ts +143 -8
  23. package/src/runtime/adapter/conversions.metadata.test.ts +400 -0
  24. package/src/runtime/adapter/conversions.ts +170 -28
  25. package/src/runtime/adapter/run-aggregator.approval.test.ts +4 -4
  26. package/src/runtime/adapter/run-aggregator.ts +13 -2
  27. package/src/runtime/types.ts +20 -1
  28. package/src/useAgUiRuntime.context.test.tsx +227 -0
  29. package/src/useAgUiRuntime.external-store.test.tsx +39 -0
  30. package/src/useAgUiRuntime.ts +4 -0
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  ## Installation
6
6
 
7
7
  ```bash
8
- npm install @assistant-ui/react @assistant-ui/react-ag-ui @ag-ui/client
8
+ npm install @assistant-ui/react @assistant-ui/react-ag-ui @ag-ui/client@^0.0.59
9
9
  ```
10
10
 
11
11
  ## Usage
@@ -1,9 +1,8 @@
1
- import type { AddToolResultOptions, AppendMessage, CreateAppendMessage, AssistantRuntime, ChatModelRunOptions, ChatModelRunResult, ExportedMessageRepository, RespondToToolApprovalOptions, ThreadHistoryAdapter, ThreadMessage, Unstable_ToolInteraction } from "@assistant-ui/core";
1
+ import type { AddToolResultOptions, AppendMessage, CreateAppendMessage, AssistantRuntime, ChatModelRunOptions, ChatModelRunResult, ExportedMessageRepository, RespondToToolApprovalOptions, RunConfig, ThreadHistoryAdapter, ThreadMessage, Unstable_ToolInteraction } from "@assistant-ui/core";
2
2
  import type { AbstractAgent } from "@ag-ui/client";
3
3
  import type { Logger } from "./logger.js";
4
- import type { AgUiInterrupt, AgUiResumeEntry, AgUiResumeTranscript } from "./types.js";
4
+ import type { AgUiInterrupt, AgUiResumeEntry, AgUiResumeTranscript, UseAgUiRuntimeOptions } from "./types.js";
5
5
  import type { ReadonlyJSONValue } from "assistant-stream/utils";
6
- type RunConfig = NonNullable<AppendMessage["runConfig"]>;
7
6
  type ResumeStream = (options: ChatModelRunOptions) => AsyncGenerator<ChatModelRunResult, void, unknown>;
8
7
  type ResumeRunConfig = {
9
8
  parentId: string | null;
@@ -15,6 +14,8 @@ type CoreOptions = {
15
14
  agent: AbstractAgent;
16
15
  logger: Logger;
17
16
  showThinking: boolean;
17
+ joinStrategy?: UseAgUiRuntimeOptions["joinStrategy"];
18
+ getRunContext?: UseAgUiRuntimeOptions["getRunContext"];
18
19
  resumeTranscript?: AgUiResumeTranscript | undefined;
19
20
  autoCancelPendingToolCalls?: boolean | undefined;
20
21
  onError?: (error: Error) => void;
@@ -26,6 +27,8 @@ export declare class AgUiThreadRuntimeCore {
26
27
  private agent;
27
28
  private logger;
28
29
  private showThinking;
30
+ private joinStrategy;
31
+ private getRunContext;
29
32
  private resumeTranscript;
30
33
  private autoCancelPendingToolCalls;
31
34
  private onError;
@@ -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,8 @@ var AgUiThreadRuntimeCore = class {
38
38
  agent;
39
39
  logger;
40
40
  showThinking;
41
+ joinStrategy;
42
+ getRunContext;
41
43
  resumeTranscript;
42
44
  autoCancelPendingToolCalls;
43
45
  onError;
@@ -83,6 +85,8 @@ var AgUiThreadRuntimeCore = class {
83
85
  this.agent = options.agent;
84
86
  this.logger = options.logger;
85
87
  this.showThinking = options.showThinking;
88
+ this.joinStrategy = options.joinStrategy;
89
+ this.getRunContext = options.getRunContext;
86
90
  this.resumeTranscript = options.resumeTranscript ?? "full";
87
91
  this.autoCancelPendingToolCalls = options.autoCancelPendingToolCalls;
88
92
  this.onError = options.onError;
@@ -108,6 +112,8 @@ var AgUiThreadRuntimeCore = class {
108
112
  this.agent = options.agent;
109
113
  this.logger = options.logger;
110
114
  this.showThinking = options.showThinking;
115
+ this.joinStrategy = options.joinStrategy;
116
+ this.getRunContext = options.getRunContext;
111
117
  this.resumeTranscript = options.resumeTranscript ?? "full";
112
118
  this.autoCancelPendingToolCalls = options.autoCancelPendingToolCalls;
113
119
  this.onError = options.onError;
@@ -752,6 +758,8 @@ var AgUiThreadRuntimeCore = class {
752
758
  const shouldEagerlyInsertAssistant = parentId !== null && parent !== void 0 && parentId !== this.session.headId;
753
759
  const historicalMessages = [...shouldEagerlyInsertAssistant ? this.session.tryGetMessages(parentId) ?? this.session.getMessages() : this.session.getMessages()];
754
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;
755
763
  let pendingError = null;
756
764
  const assistantParentId = parent ? parentId : this.session.headId;
757
765
  let assistantMessageId;
@@ -803,6 +811,7 @@ var AgUiThreadRuntimeCore = class {
803
811
  const abortSignal = abortController.signal;
804
812
  const aggregator = new RunAggregator({
805
813
  showThinking: this.showThinking,
814
+ joinStrategy,
806
815
  logger: this.logger,
807
816
  emit: applyUpdate,
808
817
  onServerMessageId: (serverId) => {
@@ -814,7 +823,7 @@ var AgUiThreadRuntimeCore = class {
814
823
  const dispatch = (event) => {
815
824
  if (this.abortController !== abortController) return;
816
825
  if (event.type === "RUN_FINISHED") runFinished = true;
817
- const nextAssistantMessageId = this.handleEvent(aggregator, event, assistantMessageId);
826
+ const nextAssistantMessageId = this.handleEvent(aggregator, event, assistantMessageId, joinStrategy, runStartMessageIds, hasRunUserBoundary);
818
827
  if (event.type === "MESSAGES_SNAPSHOT") assistantMessageId = nextAssistantMessageId;
819
828
  };
820
829
  this.abortController = abortController;
@@ -955,29 +964,40 @@ var AgUiThreadRuntimeCore = class {
955
964
  } });
956
965
  }
957
966
  buildRunInput(runId, runConfig, historyMessages, resume) {
967
+ const pendingA2uiAction = this.pendingA2uiAction;
968
+ this.pendingA2uiAction = void 0;
958
969
  const threadId = this.agent.threadId || "main";
959
970
  const messages = toAgUiMessages(this.selectRunMessages(historyMessages ?? this.session.getMessages(), resume));
960
971
  const context = this.runtime?.thread.getModelContext();
961
- const input = {
972
+ let hostContext = [];
973
+ try {
974
+ hostContext = this.getRunContext?.({
975
+ messages,
976
+ runConfig
977
+ }) ?? [];
978
+ } catch (error) {
979
+ const err = error instanceof Error ? error : new Error(String(error));
980
+ this.logger.error("[agui] getRunContext failed", err);
981
+ invokeRuntimeCallback("onError", this.onError, err);
982
+ }
983
+ return {
962
984
  threadId,
963
985
  runId,
964
986
  state: this.stateSnapshot ?? null,
965
987
  messages,
966
988
  tools: toAgUiTools(context?.tools),
967
- context: context?.system ? [{
989
+ context: [...context?.system ? [{
968
990
  description: "system",
969
991
  value: context.system
970
- }] : [],
992
+ }] : [], ...hostContext],
971
993
  forwardedProps: {
972
994
  ...context?.callSettings ?? {},
973
995
  ...context?.config ?? {},
974
996
  ...runConfig?.custom ? { runConfig: runConfig.custom } : {},
975
- ...this.pendingA2uiAction ? { a2uiAction: { userAction: this.pendingA2uiAction } } : {}
997
+ ...pendingA2uiAction ? { a2uiAction: { userAction: pendingA2uiAction } } : {}
976
998
  },
977
999
  ...resume !== void 0 ? { resume: resume.entries } : {}
978
1000
  };
979
- this.pendingA2uiAction = void 0;
980
- return input;
981
1001
  }
982
1002
  /**
983
1003
  * An anchor the thread no longer carries falls back to the whole transcript.
@@ -1220,7 +1240,7 @@ var AgUiThreadRuntimeCore = class {
1220
1240
  custom: incoming.custom ? mergeAgUiNamespace(current.custom, incoming.custom) : current.custom
1221
1241
  };
1222
1242
  }
1223
- handleEvent(aggregator, event, activeAssistantId) {
1243
+ handleEvent(aggregator, event, activeAssistantId, joinStrategy, runStartMessageIds, hasRunUserBoundary) {
1224
1244
  switch (event.type) {
1225
1245
  case "STATE_SNAPSHOT":
1226
1246
  this.stateSnapshot = event.snapshot;
@@ -1241,7 +1261,7 @@ var AgUiThreadRuntimeCore = class {
1241
1261
  const previousHeadId = this.session.headId;
1242
1262
  const activeAssistant = activeAssistantId === void 0 ? void 0 : this.session.tryGetMessage(activeAssistantId)?.message;
1243
1263
  const hasActiveText = activeAssistant?.role === "assistant" && activeAssistant.content.some((part) => part.type === "text");
1244
- this.importMessagesSnapshot(event.messages, activeAssistantId);
1264
+ this.importMessagesSnapshot(event.messages, activeAssistantId, joinStrategy, runStartMessageIds, hasRunUserBoundary);
1245
1265
  const headId = this.session.headId;
1246
1266
  if (hasActiveText && headId !== previousHeadId) activeAssistantId = (headId === null ? void 0 : this.session.tryGetMessage(headId)?.message)?.role === "assistant" ? headId ?? void 0 : void 0;
1247
1267
  this.updateActiveAssistantState(activeAssistantId);
@@ -1366,7 +1386,7 @@ var AgUiThreadRuntimeCore = class {
1366
1386
  this.publishUpdate();
1367
1387
  this.maybeCompleteAfterToolResults(messageId);
1368
1388
  }
1369
- importMessagesSnapshot(rawMessages, activeAssistantId) {
1389
+ importMessagesSnapshot(rawMessages, activeAssistantId, joinStrategy, runStartMessageIds, hasRunUserBoundary) {
1370
1390
  try {
1371
1391
  const activeAssistantItem = activeAssistantId ? this.session.tryGetMessage(activeAssistantId) : void 0;
1372
1392
  const activeMessage = activeAssistantItem?.message;
@@ -1389,6 +1409,53 @@ var AgUiThreadRuntimeCore = class {
1389
1409
  content: this.mergeSnapshotAssistantContent(existing.content, convertedMessage.content, snapshotHasReasoning, snapshotHasActivity)
1390
1410
  };
1391
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
+ }
1392
1459
  const snapshotContainsActiveAssistant = converted.some((message) => message.id === activeAssistant?.id);
1393
1460
  const preservesActiveAssistant = activeAssistant !== void 0 && !snapshotContainsActiveAssistant && (activeAssistant.metadata.isOptimistic !== true || converted.at(-1)?.role !== "assistant" || activeAssistantParentId !== void 0 && converted.at(-1)?.id === activeAssistantParentId);
1394
1461
  if (preservesActiveAssistant) converted.push(activeAssistant);