@assistant-ui/react-ag-ui 0.0.29 → 0.0.31
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/README.md +41 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/runtime/AgUiThreadRuntimeCore.d.ts +11 -0
- package/dist/runtime/AgUiThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtime/AgUiThreadRuntimeCore.js +186 -12
- package/dist/runtime/AgUiThreadRuntimeCore.js.map +1 -1
- package/dist/runtime/adapter/run-aggregator.d.ts +18 -5
- package/dist/runtime/adapter/run-aggregator.d.ts.map +1 -1
- package/dist/runtime/adapter/run-aggregator.js +134 -39
- package/dist/runtime/adapter/run-aggregator.js.map +1 -1
- package/dist/runtime/adapter/subscriber.d.ts +5 -0
- package/dist/runtime/adapter/subscriber.d.ts.map +1 -1
- package/dist/runtime/adapter/subscriber.js +55 -36
- package/dist/runtime/adapter/subscriber.js.map +1 -1
- package/dist/runtime/event-parser.d.ts +5 -1
- package/dist/runtime/event-parser.d.ts.map +1 -1
- package/dist/runtime/event-parser.js +48 -2
- package/dist/runtime/event-parser.js.map +1 -1
- package/dist/runtime/types.d.ts +22 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/useAgUiRuntime.d.ts +6 -2
- package/dist/useAgUiRuntime.d.ts.map +1 -1
- package/dist/useAgUiRuntime.js +7 -1
- package/dist/useAgUiRuntime.js.map +1 -1
- package/package.json +4 -4
- package/src/index.ts +5 -0
- package/src/runtime/AgUiThreadRuntimeCore.ts +251 -11
- package/src/runtime/adapter/run-aggregator.ts +168 -44
- package/src/runtime/adapter/subscriber.ts +53 -43
- package/src/runtime/event-parser.ts +64 -3
- package/src/runtime/types.ts +31 -1
- package/src/useAgUiRuntime.ts +23 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-parser.js","sourceRoot":"","sources":["../../src/runtime/event-parser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-parser.js","sourceRoot":"","sources":["../../src/runtime/event-parser.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/types.d.ts
CHANGED
|
@@ -35,12 +35,34 @@ export type UseAgUiRuntimeOptions = {
|
|
|
35
35
|
onCancel?: () => void;
|
|
36
36
|
adapters?: UseAgUiRuntimeAdapters;
|
|
37
37
|
};
|
|
38
|
+
export type AgUiInterruptReason = "tool_call" | "input_required" | "confirmation" | (string & {});
|
|
39
|
+
export type AgUiInterrupt = {
|
|
40
|
+
id: string;
|
|
41
|
+
reason: AgUiInterruptReason;
|
|
42
|
+
message?: string;
|
|
43
|
+
toolCallId?: string;
|
|
44
|
+
responseSchema?: Record<string, unknown>;
|
|
45
|
+
expiresAt?: string;
|
|
46
|
+
metadata?: Record<string, unknown>;
|
|
47
|
+
};
|
|
48
|
+
export type AgUiResumeEntry = {
|
|
49
|
+
interruptId: string;
|
|
50
|
+
status: "resolved" | "cancelled";
|
|
51
|
+
payload?: unknown;
|
|
52
|
+
};
|
|
53
|
+
export type AgUiRunFinishedOutcome = {
|
|
54
|
+
type: "success";
|
|
55
|
+
} | {
|
|
56
|
+
type: "interrupt";
|
|
57
|
+
interrupts: AgUiInterrupt[];
|
|
58
|
+
};
|
|
38
59
|
export type AgUiEvent = {
|
|
39
60
|
type: "RUN_STARTED";
|
|
40
61
|
runId: string;
|
|
41
62
|
} | {
|
|
42
63
|
type: "RUN_FINISHED";
|
|
43
64
|
runId: string;
|
|
65
|
+
outcome?: AgUiRunFinishedOutcome;
|
|
44
66
|
} | {
|
|
45
67
|
type: "RUN_CANCELLED";
|
|
46
68
|
runId?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,aAAa,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAiB;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,mBAAmB,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IAC/D,gBAAgB,CAAC,EACb,CAAC,CAAC,QAAQ,EAAE,MAAM,KACd,OAAO,CAAC;QACN,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;QACnC,KAAK,CAAC,EAAE,iBAAiB,CAAC;KAC3B,CAAC,GACF;QAAE,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,iBAAiB,CAAA;KAAE,CAAC,GACtE,SAAS,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B;;OAEG;IACH,UAAU,CAAC,EAAE,wBAAwB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,sBAAsB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACtC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"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"}
|
package/dist/useAgUiRuntime.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import type { AssistantRuntime } from "@assistant-ui/core";
|
|
2
|
-
import type { UseAgUiRuntimeOptions } from "./runtime/types.js";
|
|
3
|
-
export
|
|
2
|
+
import type { AgUiInterrupt, AgUiResumeEntry, UseAgUiRuntimeOptions } from "./runtime/types.js";
|
|
3
|
+
export type AgUiAssistantRuntime = AssistantRuntime & {
|
|
4
|
+
unstable_getPendingInterrupts: () => readonly AgUiInterrupt[];
|
|
5
|
+
unstable_submitInterruptResponses: (responses: readonly AgUiResumeEntry[]) => Promise<void>;
|
|
6
|
+
};
|
|
7
|
+
export declare function useAgUiRuntime(options: UseAgUiRuntimeOptions): AgUiAssistantRuntime;
|
|
4
8
|
//# sourceMappingURL=useAgUiRuntime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAgUiRuntime.d.ts","sourceRoot":"","sources":["../src/useAgUiRuntime.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,gBAAgB,EAIjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"useAgUiRuntime.d.ts","sourceRoot":"","sources":["../src/useAgUiRuntime.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,gBAAgB,EAIjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,qBAAqB,EACtB,2BAAwB;AAGzB,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG;IACpD,6BAA6B,EAAE,MAAM,SAAS,aAAa,EAAE,CAAC;IAC9D,iCAAiC,EAAE,CACjC,SAAS,EAAE,SAAS,eAAe,EAAE,KAClC,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB,CAAC;AAEF,wBAAgB,cAAc,CAC5B,OAAO,EAAE,qBAAqB,GAC7B,oBAAoB,CAiLtB"}
|
package/dist/useAgUiRuntime.js
CHANGED
|
@@ -126,7 +126,13 @@ export function useAgUiRuntime(options) {
|
|
|
126
126
|
// _version is intentionally included to trigger re-computation when core state changes via notifyUpdate
|
|
127
127
|
// toolInvocations intentionally excluded: abort/resume use refs internally and work with stale captures
|
|
128
128
|
[adapterAdapters, core, _version, hasExecutingTools]);
|
|
129
|
-
const
|
|
129
|
+
const baseRuntime = useExternalStoreRuntime(store);
|
|
130
|
+
const runtime = useMemo(() => {
|
|
131
|
+
const wrapper = Object.create(baseRuntime);
|
|
132
|
+
wrapper.unstable_getPendingInterrupts = () => core.getPendingInterrupts()?.interrupts ?? [];
|
|
133
|
+
wrapper.unstable_submitInterruptResponses = (responses) => core.submitInterruptResponses(responses);
|
|
134
|
+
return wrapper;
|
|
135
|
+
}, [baseRuntime, core]);
|
|
130
136
|
useEffect(() => {
|
|
131
137
|
core.attachRuntime(runtime);
|
|
132
138
|
return () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAgUiRuntime.js","sourceRoot":"","sources":["../src/useAgUiRuntime.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AASlC,OAAO,EAAE,UAAU,EAAE,4BAAyB;
|
|
1
|
+
{"version":3,"file":"useAgUiRuntime.js","sourceRoot":"","sources":["../src/useAgUiRuntime.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@assistant-ui/react-ag-ui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.31",
|
|
4
4
|
"description": "AG-UI protocol adapter for assistant-ui",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ag-ui",
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
"sideEffects": false,
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@ag-ui/client": "^0.0.53",
|
|
33
|
-
"@assistant-ui/core": "^0.2.
|
|
34
|
-
"assistant-stream": "^0.3.
|
|
33
|
+
"@assistant-ui/core": "^0.2.3",
|
|
34
|
+
"assistant-stream": "^0.3.15"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
37
|
"@types/react": "*",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"react": "^19.2.5",
|
|
48
48
|
"vitest": "^4.1.5",
|
|
49
49
|
"zod": "^4.4.3",
|
|
50
|
-
"@assistant-ui/x-buildutils": "0.0.
|
|
50
|
+
"@assistant-ui/x-buildutils": "0.0.8"
|
|
51
51
|
},
|
|
52
52
|
"publishConfig": {
|
|
53
53
|
"access": "public",
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
export { useAgUiRuntime } from "./useAgUiRuntime";
|
|
2
|
+
export type { AgUiAssistantRuntime } from "./useAgUiRuntime";
|
|
2
3
|
export type {
|
|
4
|
+
AgUiInterrupt,
|
|
5
|
+
AgUiInterruptReason,
|
|
6
|
+
AgUiResumeEntry,
|
|
7
|
+
AgUiRunFinishedOutcome,
|
|
3
8
|
UseAgUiRuntimeOptions,
|
|
4
9
|
UseAgUiRuntimeAdapters,
|
|
5
10
|
UseAgUiThreadListAdapter,
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
generateId,
|
|
5
|
+
generateOptimisticId,
|
|
6
|
+
isOptimisticId,
|
|
7
|
+
fromThreadMessageLike,
|
|
8
|
+
} from "@assistant-ui/core/internal";
|
|
4
9
|
import type {
|
|
5
10
|
AddToolResultOptions,
|
|
6
11
|
AppendMessage,
|
|
@@ -13,9 +18,13 @@ import type {
|
|
|
13
18
|
} from "@assistant-ui/core";
|
|
14
19
|
import type { HttpAgent } from "@ag-ui/client";
|
|
15
20
|
import type { Logger } from "./logger";
|
|
16
|
-
import type { AgUiEvent } from "./types";
|
|
21
|
+
import type { AgUiEvent, AgUiInterrupt, AgUiResumeEntry } from "./types";
|
|
17
22
|
import type { ReadonlyJSONValue } from "assistant-stream/utils";
|
|
18
|
-
import {
|
|
23
|
+
import {
|
|
24
|
+
AG_UI_METADATA_NAMESPACE,
|
|
25
|
+
type AgUiCustomMetadata,
|
|
26
|
+
RunAggregator,
|
|
27
|
+
} from "./adapter/run-aggregator";
|
|
19
28
|
import {
|
|
20
29
|
fromAgUiMessages,
|
|
21
30
|
toAgUiMessages,
|
|
@@ -23,6 +32,8 @@ import {
|
|
|
23
32
|
} from "./adapter/conversions";
|
|
24
33
|
import { createAgUiSubscriber } from "./adapter/subscriber";
|
|
25
34
|
|
|
35
|
+
const symbolResumeShim = Symbol("agui-resume-shim");
|
|
36
|
+
|
|
26
37
|
type RunConfig = NonNullable<AppendMessage["runConfig"]>;
|
|
27
38
|
type ResumeRunConfig = {
|
|
28
39
|
parentId: string | null;
|
|
@@ -72,6 +83,7 @@ export class AgUiThreadRuntimeCore {
|
|
|
72
83
|
this.onCancel = options.onCancel;
|
|
73
84
|
this.history = options.history;
|
|
74
85
|
this.notifyUpdate = options.notifyUpdate;
|
|
86
|
+
this.installResumeShim();
|
|
75
87
|
}
|
|
76
88
|
|
|
77
89
|
updateOptions(options: Omit<CoreOptions, "notifyUpdate">) {
|
|
@@ -81,6 +93,7 @@ export class AgUiThreadRuntimeCore {
|
|
|
81
93
|
this.onError = options.onError;
|
|
82
94
|
this.onCancel = options.onCancel;
|
|
83
95
|
this.history = options.history;
|
|
96
|
+
this.installResumeShim();
|
|
84
97
|
}
|
|
85
98
|
|
|
86
99
|
attachRuntime(runtime: AssistantRuntime) {
|
|
@@ -143,6 +156,7 @@ export class AgUiThreadRuntimeCore {
|
|
|
143
156
|
|
|
144
157
|
async append(message: AppendMessage): Promise<void> {
|
|
145
158
|
const startRun = message.startRun ?? message.role === "user";
|
|
159
|
+
if (startRun) this.assertNoPendingInterrupts();
|
|
146
160
|
if (message.sourceId) {
|
|
147
161
|
this.messages = this.messages.filter(
|
|
148
162
|
(entry) => entry.id !== message.sourceId,
|
|
@@ -167,6 +181,7 @@ export class AgUiThreadRuntimeCore {
|
|
|
167
181
|
parentId: string | null,
|
|
168
182
|
config: { runConfig?: RunConfig } = {},
|
|
169
183
|
): Promise<void> {
|
|
184
|
+
this.assertNoPendingInterrupts();
|
|
170
185
|
this.resetHead(parentId);
|
|
171
186
|
this.notifyUpdate();
|
|
172
187
|
await this.startRun(parentId, config.runConfig);
|
|
@@ -178,6 +193,7 @@ export class AgUiThreadRuntimeCore {
|
|
|
178
193
|
}
|
|
179
194
|
|
|
180
195
|
async resume(config: ResumeRunConfig): Promise<void> {
|
|
196
|
+
this.assertNoPendingInterrupts();
|
|
181
197
|
if (config.stream) {
|
|
182
198
|
this.logger.debug?.(
|
|
183
199
|
"[agui] resume stream is not supported, falling back to regular run",
|
|
@@ -189,6 +205,143 @@ export class AgUiThreadRuntimeCore {
|
|
|
189
205
|
);
|
|
190
206
|
}
|
|
191
207
|
|
|
208
|
+
private assertNoPendingInterrupts(): void {
|
|
209
|
+
if (!this.getPendingInterrupts()) return;
|
|
210
|
+
throw new Error(
|
|
211
|
+
"[agui] cannot start a new run while interrupts are pending; resolve them with submitInterruptResponses()",
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
getPendingInterrupts(): {
|
|
216
|
+
messageId: string;
|
|
217
|
+
interrupts: readonly AgUiInterrupt[];
|
|
218
|
+
} | null {
|
|
219
|
+
const assistant = this.messages.findLast((m) => m.role === "assistant") as
|
|
220
|
+
| ThreadAssistantMessage
|
|
221
|
+
| undefined;
|
|
222
|
+
if (
|
|
223
|
+
!assistant ||
|
|
224
|
+
assistant.status?.type !== "requires-action" ||
|
|
225
|
+
assistant.status.reason !== "interrupt"
|
|
226
|
+
) {
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
const stored = (
|
|
230
|
+
assistant.metadata.custom[AG_UI_METADATA_NAMESPACE] as
|
|
231
|
+
| AgUiCustomMetadata
|
|
232
|
+
| undefined
|
|
233
|
+
)?.interrupts;
|
|
234
|
+
if (!stored?.length) return null;
|
|
235
|
+
return { messageId: assistant.id, interrupts: stored };
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
async submitInterruptResponses(
|
|
239
|
+
responses: readonly AgUiResumeEntry[],
|
|
240
|
+
): Promise<void> {
|
|
241
|
+
const pending = this.getPendingInterrupts();
|
|
242
|
+
if (!pending) {
|
|
243
|
+
throw new Error(
|
|
244
|
+
"[agui] submitInterruptResponses: no pending interrupts on this thread",
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
const responsesById = new Map<string, AgUiResumeEntry>();
|
|
249
|
+
for (const entry of responses) {
|
|
250
|
+
if (!entry || typeof entry.interruptId !== "string") {
|
|
251
|
+
throw new Error(
|
|
252
|
+
"[agui] submitInterruptResponses: every entry must have an interruptId",
|
|
253
|
+
);
|
|
254
|
+
}
|
|
255
|
+
if (entry.status !== "resolved" && entry.status !== "cancelled") {
|
|
256
|
+
throw new Error(
|
|
257
|
+
`[agui] submitInterruptResponses: invalid status "${entry.status}" for interrupt ${entry.interruptId}`,
|
|
258
|
+
);
|
|
259
|
+
}
|
|
260
|
+
if (responsesById.has(entry.interruptId)) {
|
|
261
|
+
throw new Error(
|
|
262
|
+
`[agui] submitInterruptResponses: duplicate response for interrupt ${entry.interruptId}`,
|
|
263
|
+
);
|
|
264
|
+
}
|
|
265
|
+
responsesById.set(entry.interruptId, entry);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
const openIds = pending.interrupts.map((i) => i.id);
|
|
269
|
+
const missing = openIds.filter((id) => !responsesById.has(id));
|
|
270
|
+
if (missing.length > 0) {
|
|
271
|
+
throw new Error(
|
|
272
|
+
`[agui] submitInterruptResponses: missing responses for open interrupts: ${missing.join(", ")}`,
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
const known = new Set(openIds);
|
|
276
|
+
const unknownIds = [...responsesById.keys()].filter((id) => !known.has(id));
|
|
277
|
+
if (unknownIds.length > 0) {
|
|
278
|
+
throw new Error(
|
|
279
|
+
`[agui] submitInterruptResponses: unknown interrupt ids: ${unknownIds.join(", ")}`,
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
const now = Date.now();
|
|
284
|
+
for (const interrupt of pending.interrupts) {
|
|
285
|
+
if (!interrupt.expiresAt) continue;
|
|
286
|
+
const expiry = new Date(interrupt.expiresAt).getTime();
|
|
287
|
+
if (Number.isNaN(expiry)) {
|
|
288
|
+
throw new Error(
|
|
289
|
+
`[agui] submitInterruptResponses: interrupt ${interrupt.id} has malformed expiresAt "${interrupt.expiresAt}"`,
|
|
290
|
+
);
|
|
291
|
+
}
|
|
292
|
+
if (expiry <= now) {
|
|
293
|
+
throw new Error(
|
|
294
|
+
`[agui] submitInterruptResponses: interrupt ${interrupt.id} expired at ${interrupt.expiresAt}`,
|
|
295
|
+
);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
const resume: AgUiResumeEntry[] = openIds.map(
|
|
300
|
+
(id) => responsesById.get(id)!,
|
|
301
|
+
);
|
|
302
|
+
|
|
303
|
+
if (this.isRunningFlag) {
|
|
304
|
+
throw new Error(
|
|
305
|
+
"[agui] submitInterruptResponses: a run is already in progress",
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
this.clearPendingInterrupts(pending.messageId);
|
|
310
|
+
await this.startRun(pending.messageId, this.lastRunConfig, resume);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
private clearPendingInterrupts(messageId: string): void {
|
|
314
|
+
let touched = false;
|
|
315
|
+
this.messages = this.messages.map((message) => {
|
|
316
|
+
if (message.id !== messageId || message.role !== "assistant")
|
|
317
|
+
return message;
|
|
318
|
+
const assistant = message as ThreadAssistantMessage;
|
|
319
|
+
if (
|
|
320
|
+
assistant.status?.type !== "requires-action" ||
|
|
321
|
+
assistant.status.reason !== "interrupt"
|
|
322
|
+
) {
|
|
323
|
+
return assistant;
|
|
324
|
+
}
|
|
325
|
+
touched = true;
|
|
326
|
+
const aguiMeta = assistant.metadata.custom[AG_UI_METADATA_NAMESPACE] as
|
|
327
|
+
| AgUiCustomMetadata
|
|
328
|
+
| undefined;
|
|
329
|
+
const { interrupts: _drop, ...restAgui } = aguiMeta ?? {};
|
|
330
|
+
const newCustom = { ...assistant.metadata.custom };
|
|
331
|
+
if (Object.keys(restAgui).length > 0) {
|
|
332
|
+
newCustom[AG_UI_METADATA_NAMESPACE] = restAgui;
|
|
333
|
+
} else {
|
|
334
|
+
delete newCustom[AG_UI_METADATA_NAMESPACE];
|
|
335
|
+
}
|
|
336
|
+
return {
|
|
337
|
+
...assistant,
|
|
338
|
+
status: { type: "complete" as const, reason: "unknown" as const },
|
|
339
|
+
metadata: { ...assistant.metadata, custom: newCustom },
|
|
340
|
+
};
|
|
341
|
+
});
|
|
342
|
+
if (touched) this.notifyUpdate();
|
|
343
|
+
}
|
|
344
|
+
|
|
192
345
|
findMessageIdForToolCall(toolCallId: string): string | undefined {
|
|
193
346
|
let fallbackMessageId: string | undefined;
|
|
194
347
|
for (let index = this.messages.length - 1; index >= 0; index--) {
|
|
@@ -288,6 +441,7 @@ export class AgUiThreadRuntimeCore {
|
|
|
288
441
|
private async startRun(
|
|
289
442
|
parentId: string | null,
|
|
290
443
|
runConfig?: RunConfig,
|
|
444
|
+
resume?: AgUiResumeEntry[],
|
|
291
445
|
): Promise<void> {
|
|
292
446
|
const normalizedRunConfig = runConfig ?? {};
|
|
293
447
|
this.lastRunConfig = normalizedRunConfig;
|
|
@@ -300,6 +454,7 @@ export class AgUiThreadRuntimeCore {
|
|
|
300
454
|
runId,
|
|
301
455
|
normalizedRunConfig,
|
|
302
456
|
historicalMessages,
|
|
457
|
+
resume,
|
|
303
458
|
);
|
|
304
459
|
const assistantParentId = parentId ?? this.messages.at(-1)?.id ?? null;
|
|
305
460
|
let assistantMessageId: string | undefined;
|
|
@@ -314,7 +469,18 @@ export class AgUiThreadRuntimeCore {
|
|
|
314
469
|
const aggregator = new RunAggregator({
|
|
315
470
|
showThinking: this.showThinking,
|
|
316
471
|
logger: this.logger,
|
|
317
|
-
emit: (update) =>
|
|
472
|
+
emit: (update) => {
|
|
473
|
+
const resolved = this.updateAssistantMessage(ensureAssistant(), update);
|
|
474
|
+
if (resolved !== assistantMessageId) {
|
|
475
|
+
assistantMessageId = resolved;
|
|
476
|
+
}
|
|
477
|
+
},
|
|
478
|
+
onServerMessageId: (serverId) => {
|
|
479
|
+
const placeholder = ensureAssistant();
|
|
480
|
+
if (placeholder === serverId) return;
|
|
481
|
+
this.reassignAssistantId(placeholder, serverId);
|
|
482
|
+
assistantMessageId = serverId;
|
|
483
|
+
},
|
|
318
484
|
});
|
|
319
485
|
const dispatch = (event: AgUiEvent) => this.handleEvent(aggregator, event);
|
|
320
486
|
|
|
@@ -335,6 +501,7 @@ export class AgUiThreadRuntimeCore {
|
|
|
335
501
|
const subscriber = createAgUiSubscriber({
|
|
336
502
|
dispatch,
|
|
337
503
|
runId,
|
|
504
|
+
logger: this.logger,
|
|
338
505
|
onRunFailed: (error) => {
|
|
339
506
|
this.pendingError = error;
|
|
340
507
|
this.onError?.(error);
|
|
@@ -348,6 +515,7 @@ export class AgUiThreadRuntimeCore {
|
|
|
348
515
|
try {
|
|
349
516
|
(this.agent as any).messages = input.messages;
|
|
350
517
|
(this.agent as any).threadId = input.threadId;
|
|
518
|
+
(this.agent as any).state = input.state ?? null;
|
|
351
519
|
} catch {
|
|
352
520
|
// ignore
|
|
353
521
|
}
|
|
@@ -376,6 +544,7 @@ export class AgUiThreadRuntimeCore {
|
|
|
376
544
|
runId: string,
|
|
377
545
|
runConfig: RunConfig | undefined,
|
|
378
546
|
historyMessages: readonly ThreadMessage[] | undefined,
|
|
547
|
+
resume?: AgUiResumeEntry[],
|
|
379
548
|
) {
|
|
380
549
|
const threadId = this.agent.threadId || "main";
|
|
381
550
|
const messages = toAgUiMessages(historyMessages ?? this.messages);
|
|
@@ -394,6 +563,28 @@ export class AgUiThreadRuntimeCore {
|
|
|
394
563
|
...(context?.config ?? {}),
|
|
395
564
|
...(runConfig?.custom ? { runConfig: runConfig.custom } : {}),
|
|
396
565
|
},
|
|
566
|
+
...(resume !== undefined ? { resume } : {}),
|
|
567
|
+
};
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
private installResumeShim(): void {
|
|
571
|
+
const agent = this.agent as any;
|
|
572
|
+
if (agent[symbolResumeShim]) return;
|
|
573
|
+
agent[symbolResumeShim] = true;
|
|
574
|
+
const onInstance = Object.hasOwn(agent, "prepareRunAgentInput");
|
|
575
|
+
const original = onInstance
|
|
576
|
+
? agent.prepareRunAgentInput
|
|
577
|
+
: Object.getPrototypeOf(agent)?.prepareRunAgentInput;
|
|
578
|
+
if (typeof original !== "function") return;
|
|
579
|
+
agent.prepareRunAgentInput = function (
|
|
580
|
+
this: unknown,
|
|
581
|
+
params: { resume?: unknown } | undefined,
|
|
582
|
+
) {
|
|
583
|
+
const input = original.call(this, params);
|
|
584
|
+
if (params?.resume !== undefined && input && typeof input === "object") {
|
|
585
|
+
return { ...(input as object), resume: params.resume };
|
|
586
|
+
}
|
|
587
|
+
return input;
|
|
397
588
|
};
|
|
398
589
|
}
|
|
399
590
|
|
|
@@ -410,7 +601,7 @@ export class AgUiThreadRuntimeCore {
|
|
|
410
601
|
}
|
|
411
602
|
|
|
412
603
|
private insertAssistantPlaceholder(): string {
|
|
413
|
-
const id =
|
|
604
|
+
const id = generateOptimisticId();
|
|
414
605
|
const assistant: ThreadAssistantMessage = {
|
|
415
606
|
id,
|
|
416
607
|
role: "assistant",
|
|
@@ -430,10 +621,43 @@ export class AgUiThreadRuntimeCore {
|
|
|
430
621
|
return id;
|
|
431
622
|
}
|
|
432
623
|
|
|
624
|
+
private reassignAssistantId(oldId: string, newId: string): void {
|
|
625
|
+
if (oldId === newId) return;
|
|
626
|
+
|
|
627
|
+
const collidesWithExisting = this.messages.some((m) => m.id === newId);
|
|
628
|
+
|
|
629
|
+
if (collidesWithExisting) {
|
|
630
|
+
this.logger.debug?.(
|
|
631
|
+
"[agui] reassignAssistantId: server id already present in messages, dropping placeholder",
|
|
632
|
+
{ oldId, newId },
|
|
633
|
+
);
|
|
634
|
+
this.messages = this.messages.filter((m) => m.id !== oldId);
|
|
635
|
+
} else {
|
|
636
|
+
this.messages = this.messages.map((m) =>
|
|
637
|
+
m.id === oldId ? { ...m, id: newId } : m,
|
|
638
|
+
);
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
const pendingParent = this.assistantHistoryParents.get(oldId);
|
|
642
|
+
if (pendingParent !== undefined) {
|
|
643
|
+
this.assistantHistoryParents.delete(oldId);
|
|
644
|
+
if (!this.assistantHistoryParents.has(newId)) {
|
|
645
|
+
this.assistantHistoryParents.set(newId, pendingParent);
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
if (this.recordedHistoryIds.has(oldId)) {
|
|
650
|
+
this.recordedHistoryIds.delete(oldId);
|
|
651
|
+
this.recordedHistoryIds.add(newId);
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
this.notifyUpdate();
|
|
655
|
+
}
|
|
656
|
+
|
|
433
657
|
private updateAssistantMessage(
|
|
434
658
|
messageId: string,
|
|
435
659
|
update: ChatModelRunResult,
|
|
436
|
-
) {
|
|
660
|
+
): string {
|
|
437
661
|
let touched = false;
|
|
438
662
|
let latestStatus: MessageStatus | undefined;
|
|
439
663
|
this.messages = this.messages.map((message) => {
|
|
@@ -453,12 +677,22 @@ export class AgUiThreadRuntimeCore {
|
|
|
453
677
|
metadata,
|
|
454
678
|
};
|
|
455
679
|
});
|
|
456
|
-
if (touched)
|
|
680
|
+
if (!touched) return messageId;
|
|
681
|
+
|
|
682
|
+
let resolvedMessageId = messageId;
|
|
683
|
+
const isSettled =
|
|
684
|
+
latestStatus !== undefined && latestStatus.type !== "running";
|
|
685
|
+
if (isSettled && isOptimisticId(messageId)) {
|
|
686
|
+
const stableId = generateId();
|
|
687
|
+
this.reassignAssistantId(messageId, stableId);
|
|
688
|
+
resolvedMessageId = stableId;
|
|
689
|
+
} else {
|
|
457
690
|
this.notifyUpdate();
|
|
458
|
-
if (this.isTerminalStatus(latestStatus)) {
|
|
459
|
-
this.persistAssistantHistory(messageId);
|
|
460
|
-
}
|
|
461
691
|
}
|
|
692
|
+
if (this.isPersistableStatus(latestStatus)) {
|
|
693
|
+
this.persistAssistantHistory(resolvedMessageId);
|
|
694
|
+
}
|
|
695
|
+
return resolvedMessageId;
|
|
462
696
|
}
|
|
463
697
|
|
|
464
698
|
private mergeAssistantMetadata(
|
|
@@ -482,6 +716,7 @@ export class AgUiThreadRuntimeCore {
|
|
|
482
716
|
unstable_annotations: annotations,
|
|
483
717
|
unstable_data: data,
|
|
484
718
|
steps,
|
|
719
|
+
...(incoming.timing ? { timing: incoming.timing } : {}),
|
|
485
720
|
custom: incoming.custom
|
|
486
721
|
? { ...current.custom, ...incoming.custom }
|
|
487
722
|
: current.custom,
|
|
@@ -558,6 +793,11 @@ export class AgUiThreadRuntimeCore {
|
|
|
558
793
|
return status?.type === "complete" || status?.type === "incomplete";
|
|
559
794
|
}
|
|
560
795
|
|
|
796
|
+
private isPersistableStatus(status?: MessageStatus): boolean {
|
|
797
|
+
if (this.isTerminalStatus(status)) return true;
|
|
798
|
+
return status?.type === "requires-action" && status.reason === "interrupt";
|
|
799
|
+
}
|
|
800
|
+
|
|
561
801
|
private recordHistoryEntry(parentId: string | null, message: ThreadMessage) {
|
|
562
802
|
this.appendHistoryItem(parentId, message);
|
|
563
803
|
}
|
|
@@ -576,7 +816,7 @@ export class AgUiThreadRuntimeCore {
|
|
|
576
816
|
if (parentId === undefined) return;
|
|
577
817
|
const message = this.messages.find((m) => m.id === messageId);
|
|
578
818
|
if (!message || message.role !== "assistant") return;
|
|
579
|
-
if (!this.
|
|
819
|
+
if (!this.isPersistableStatus(message.status)) return;
|
|
580
820
|
this.assistantHistoryParents.delete(messageId);
|
|
581
821
|
this.appendHistoryItem(parentId, message);
|
|
582
822
|
}
|