@nifrajs/ag-ui 3.3.0 → 4.0.0
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 +9 -2
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +84 -24
- package/dist/index.js.map +1 -1
- package/package.json +6 -3
- package/src/index.ts +107 -23
package/README.md
CHANGED
|
@@ -90,7 +90,7 @@ A suspended run finishes with `outcome: { "type": "interrupt", "interrupts": [in
|
|
|
90
90
|
}
|
|
91
91
|
```
|
|
92
92
|
|
|
93
|
-
Resume with the AG-UI `resume` array. The runtime keeps state token-only - it holds no interrupt registry - so the payload must echo `metadata.continuation`, with the suspended tool's input replayed in `continuation.input
|
|
93
|
+
Resume with the AG-UI `resume` array. The runtime keeps state token-only - it holds no interrupt registry - so the payload must echo `metadata.continuation`, with the suspended tool's input replayed in `continuation.input`. The turn keeps a digest of that input: a continuation naming another tool, effect, kind or input is refused, and an `approval` answers only an `approval` interrupt:
|
|
94
94
|
|
|
95
95
|
```jsonc
|
|
96
96
|
{
|
|
@@ -114,7 +114,9 @@ The pre-interrupt form - the same `{ continuation, approval? }` object in `forwa
|
|
|
114
114
|
Pass an `evidenceLog` to make a dropped SSE connection resumable. Evidence-derived frames then
|
|
115
115
|
carry SSE `id: <seq>`; a client reconnects by re-POSTing the same body with a `Last-Event-ID`
|
|
116
116
|
header and receives the missed events, rejoining a still-running turn live or replaying the stored
|
|
117
|
-
terminal events - the run is never re-executed.
|
|
117
|
+
terminal events - the run is never re-executed. A disconnected run keeps going and records its
|
|
118
|
+
real terminal events for that reconnect. Without an `evidenceLog` nothing can rejoin a dropped
|
|
119
|
+
stream, so the disconnect aborts `ports.signal` and the turn suspends as `cancelled`.
|
|
118
120
|
|
|
119
121
|
```ts
|
|
120
122
|
import { createMemoryAgentEvidenceLog } from "@nifrajs/agent/events"
|
|
@@ -125,6 +127,11 @@ mountAgUI(app, { agent, ports, evidenceLog: createMemoryAgentEvidenceLog() })
|
|
|
125
127
|
The in-memory log is the single-process dev/test reference; a durable, multi-process log is an
|
|
126
128
|
adapter implementing the same `AgentEvidenceLog` interface.
|
|
127
129
|
|
|
130
|
+
When more than one caller shares the route, also pass `evidenceOwner: (c) => <the caller's user or
|
|
131
|
+
tenant id>`: turns are recorded and replayed under that owner, so another caller's reconnect or
|
|
132
|
+
reused `runId` finds none of them. Without it a turn id (by default the client's `runId`) works as a
|
|
133
|
+
bearer capability. The owner function runs before any replay; throwing from it refuses the request.
|
|
134
|
+
|
|
128
135
|
The seam performs no authentication or authorization - wrap it with your app's route guards and scope every port in `ports(c)` to the caller.
|
|
129
136
|
|
|
130
137
|
## Docs
|
package/dist/index.d.ts
CHANGED
|
@@ -54,7 +54,9 @@
|
|
|
54
54
|
* missed events and rejoin the still-running turn - the run is never re-executed. Without the
|
|
55
55
|
* log the header is ignored and every POST starts a run.
|
|
56
56
|
* - The seam performs no authentication or authorization. Wrap it with the app's own route guards,
|
|
57
|
-
* and scope the store/model returned by `ports` to the caller.
|
|
57
|
+
* and scope the store/model returned by `ports` to the caller. With an `evidenceLog`, set
|
|
58
|
+
* `evidenceOwner` too: without it a turn id (by default the client's `runId`) is a bearer
|
|
59
|
+
* capability, and any caller who reaches the route with it replays that turn's events.
|
|
58
60
|
*/
|
|
59
61
|
import { type AgentDefinition, type AgentPorts, type AgentSharedState } from "@nifrajs/agent";
|
|
60
62
|
import { type AgentEvidenceLog } from "@nifrajs/agent/events";
|
|
@@ -88,6 +90,8 @@ export interface MountAgUIOptions<InputSchema extends StandardSchemaV1, OutputSc
|
|
|
88
90
|
readonly maxBodyBytes?: number;
|
|
89
91
|
/** Prototype-poisoning policy for the framing lane. Default `"reject"`. */
|
|
90
92
|
readonly protoPoisoning?: ProtoPoisoning;
|
|
93
|
+
/** Maximum total UTF-8 bytes emitted by one SSE response. Default 4 MiB. */
|
|
94
|
+
readonly maxOutputBytes?: number;
|
|
91
95
|
/**
|
|
92
96
|
* Build the ports for one request - the model, durable state store, approval transport,
|
|
93
97
|
* capabilities, and budgets. Receives the route context so the caller can scope every port to
|
|
@@ -99,6 +103,12 @@ export interface MountAgUIOptions<InputSchema extends StandardSchemaV1, OutputSc
|
|
|
99
103
|
* (`createMemoryAgentEvidenceLog`) is single-process; a durable log is an adapter concern.
|
|
100
104
|
*/
|
|
101
105
|
readonly evidenceLog?: AgentEvidenceLog;
|
|
106
|
+
/**
|
|
107
|
+
* Who a turn's recorded events belong to - the caller's user or tenant id. Turns are recorded and
|
|
108
|
+
* replayed under it, so a reconnect or a reused run id from another caller finds nothing of this
|
|
109
|
+
* caller's turns. It runs before a replay is served; throw to refuse the request.
|
|
110
|
+
*/
|
|
111
|
+
readonly evidenceOwner?: (c: AgUIRouteContext) => string | Promise<string>;
|
|
102
112
|
/**
|
|
103
113
|
* Emit a `MESSAGES_SNAPSHOT` (the request's `messages` plus the assistant output message)
|
|
104
114
|
* before `RUN_FINISHED` on a successful completion. Default `false`: the snapshot echoes
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AAEH,OAAO,EACL,KAAK,eAAe,EAIpB,KAAK,UAAU,EAEf,KAAK,gBAAgB,EAStB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,KAAK,gBAAgB,EAItB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAEL,KAAK,cAAc,EAKpB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAU5D,8DAA8D;AAC9D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;CACtB;AAED,gEAAgE;AAChE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAA;CAC5F;AAED,iFAAiF;AACjF,MAAM,WAAW,cAAc;IAC7B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAA;CACvC;AAED,MAAM,WAAW,gBAAgB,CAC/B,WAAW,SAAS,gBAAgB,EACpC,YAAY,SAAS,gBAAgB;IAErC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;IAC1D,sCAAsC;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAA;IACxC,4EAA4E;IAC5E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,cAAc,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAC9F;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAA;IACvC;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1E;;;;;OAKG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;CACxC;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CACvB,WAAW,SAAS,gBAAgB,EACpC,YAAY,SAAS,gBAAgB,EACrC,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,IAAI,CAkBnF;AA8RD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CACpC"}
|
package/dist/index.js
CHANGED
|
@@ -54,13 +54,17 @@
|
|
|
54
54
|
* missed events and rejoin the still-running turn - the run is never re-executed. Without the
|
|
55
55
|
* log the header is ignored and every POST starts a run.
|
|
56
56
|
* - The seam performs no authentication or authorization. Wrap it with the app's own route guards,
|
|
57
|
-
* and scope the store/model returned by `ports` to the caller.
|
|
57
|
+
* and scope the store/model returned by `ports` to the caller. With an `evidenceLog`, set
|
|
58
|
+
* `evidenceOwner` too: without it a turn id (by default the client's `runId`) is a bearer
|
|
59
|
+
* capability, and any caller who reaches the route with it replays that turn's events.
|
|
58
60
|
*/
|
|
59
61
|
import { combineAgentDeltaSinks, combineAgentTelemetry, createAgentSharedState, createAgentState, resumeAgent, runAgent, } from "@nifrajs/agent";
|
|
60
|
-
import { createAgentEvidenceStream, } from "@nifrajs/agent/events";
|
|
62
|
+
import { createAgentEvidenceStream, scopeAgentEvidenceLog, } from "@nifrajs/agent/events";
|
|
61
63
|
import { EMPTY_RESPONSE_CONTROLS, plainError, readBodyFramed, toResponse, } from "@nifrajs/core/edge-kit";
|
|
62
64
|
const DEFAULT_PATH = "/agui";
|
|
63
65
|
const DEFAULT_MAX_BODY_BYTES = 1_000_000;
|
|
66
|
+
const DEFAULT_MAX_OUTPUT_BYTES = 4 * 1024 * 1024;
|
|
67
|
+
const MAX_OUTPUT_BYTES = 64 * 1024 * 1024;
|
|
64
68
|
const PENDING_KINDS = ["approval", "budget", "model", "cancelled"];
|
|
65
69
|
const TURN_ID_PATTERN = /^[a-zA-Z0-9._:-]{1,128}$/;
|
|
66
70
|
const LAST_EVENT_ID_PATTERN = /^\d{1,15}$/;
|
|
@@ -68,26 +72,34 @@ const LAST_EVENT_ID_PATTERN = /^\d{1,15}$/;
|
|
|
68
72
|
export function mountAgUI(app, options) {
|
|
69
73
|
const path = options.path ?? DEFAULT_PATH;
|
|
70
74
|
const maxBytes = options.maxBodyBytes ?? DEFAULT_MAX_BODY_BYTES;
|
|
75
|
+
const maxOutputBytes = options.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;
|
|
76
|
+
assertOutputLimit(maxOutputBytes);
|
|
71
77
|
const proto = options.protoPoisoning ?? "reject";
|
|
72
78
|
const runOptions = options.maxTurns === undefined ? {} : { maxTurns: options.maxTurns };
|
|
73
|
-
app.post(path, (c) => readBodyFramed(c.req, maxBytes, proto, (parsed) => execute(c, parsed, options, runOptions), (rejection) => render(rejection), () => render(plainError(400, "bad_request"))).catch(() => render(plainError(400, "bad_request"))));
|
|
79
|
+
app.post(path, (c) => readBodyFramed(c.req, maxBytes, proto, (parsed) => execute(c, parsed, options, runOptions, maxOutputBytes), (rejection) => render(rejection), () => render(plainError(400, "bad_request"))).catch(() => render(plainError(400, "bad_request"))));
|
|
74
80
|
}
|
|
75
|
-
async function execute(c, parsed, options, runOptions) {
|
|
81
|
+
async function execute(c, parsed, options, runOptions, maxOutputBytes) {
|
|
76
82
|
const body = asRecord(parsed);
|
|
77
83
|
const threadId = body === undefined ? undefined : body.threadId;
|
|
78
84
|
const runId = body === undefined ? undefined : body.runId;
|
|
79
85
|
if (body === undefined || typeof threadId !== "string" || typeof runId !== "string")
|
|
80
86
|
return jsonResponse(400, { error: "invalid_run_agent_input" });
|
|
87
|
+
if (!TURN_ID_PATTERN.test(threadId))
|
|
88
|
+
return jsonResponse(400, { error: "invalid_thread_id" });
|
|
89
|
+
if (!TURN_ID_PATTERN.test(runId))
|
|
90
|
+
return jsonResponse(400, { error: "invalid_run_id" });
|
|
81
91
|
const forwarded = asRecord(body.forwardedProps) ?? {};
|
|
82
92
|
const forwardedTurnId = typeof forwarded.turnId === "string" ? forwarded.turnId : undefined;
|
|
83
93
|
if (forwardedTurnId !== undefined && !TURN_ID_PATTERN.test(forwardedTurnId))
|
|
84
94
|
return jsonResponse(400, { error: "invalid_turn_id" });
|
|
85
95
|
// Legacy resume names the turn in forwardedProps; spec resume names it via the interrupt id.
|
|
86
96
|
const entry = parseResumeEntry(body.resume);
|
|
87
|
-
const turnId = forwardedTurnId ?? entry?.turnId ??
|
|
97
|
+
const turnId = forwardedTurnId ?? entry?.turnId ?? runId;
|
|
88
98
|
const input = Object.hasOwn(forwarded, "input") ? forwarded.input : lastUserMessage(body.messages);
|
|
89
99
|
const resume = parseResume(forwarded.resume) ?? entry?.resume;
|
|
90
|
-
const log = options.evidenceLog
|
|
100
|
+
const log = options.evidenceLog === undefined || options.evidenceOwner === undefined
|
|
101
|
+
? options.evidenceLog
|
|
102
|
+
: scopeAgentEvidenceLog(options.evidenceLog, await options.evidenceOwner(c));
|
|
91
103
|
const identity = { threadId, runId, turnId };
|
|
92
104
|
// A reconnect replays recorded evidence and rejoins the turn; it never starts a second run.
|
|
93
105
|
const lastEventId = c.req.headers.get("last-event-id");
|
|
@@ -97,20 +109,24 @@ async function execute(c, parsed, options, runOptions) {
|
|
|
97
109
|
const replay = await log.replay(turnId, Number(lastEventId));
|
|
98
110
|
if (replay === undefined)
|
|
99
111
|
return jsonResponse(409, { error: "replay_unavailable" });
|
|
100
|
-
return sseReplayResponse(identity, replay);
|
|
112
|
+
return sseReplayResponse(identity, replay, maxOutputBytes);
|
|
101
113
|
}
|
|
102
114
|
// `body.state` seeds the run's shared UI state document; patches stream as STATE_DELTA.
|
|
103
115
|
const sharedState = createAgentSharedState(body.state === undefined ? {} : body.state);
|
|
104
116
|
const basePorts = await options.ports(c, { turnId, sharedState });
|
|
105
|
-
const start = (telemetry, deltas) => {
|
|
117
|
+
const start = (telemetry, deltas, disconnect) => {
|
|
106
118
|
// Compose rather than replace: the SSE evidence stream must not displace a telemetry port or
|
|
107
119
|
// delta sink the caller injected through `ports`.
|
|
108
120
|
const combined = combineAgentTelemetry(basePorts.telemetry, log?.open(turnId), telemetry);
|
|
109
121
|
const sinks = combineAgentDeltaSinks(basePorts.deltas, deltas);
|
|
122
|
+
const signal = basePorts.signal === undefined || disconnect === undefined
|
|
123
|
+
? (basePorts.signal ?? disconnect)
|
|
124
|
+
: AbortSignal.any([basePorts.signal, disconnect]);
|
|
110
125
|
const ports = {
|
|
111
126
|
...basePorts,
|
|
112
127
|
...(combined === undefined ? {} : { telemetry: combined }),
|
|
113
128
|
...(sinks === undefined ? {} : { deltas: sinks }),
|
|
129
|
+
...(signal === undefined ? {} : { signal }),
|
|
114
130
|
};
|
|
115
131
|
if (resume !== undefined) {
|
|
116
132
|
return resumeAgent(options.agent, turnId, { value: input, resume }, ports, runOptions);
|
|
@@ -124,17 +140,25 @@ async function execute(c, parsed, options, runOptions) {
|
|
|
124
140
|
return sseResponse(identity, start, log, snapshotMessages, {
|
|
125
141
|
channel: sharedState,
|
|
126
142
|
announced: body.state !== undefined,
|
|
127
|
-
});
|
|
143
|
+
}, maxOutputBytes);
|
|
128
144
|
}
|
|
129
|
-
function sseResponse(identity, start, log, snapshotMessages, state) {
|
|
145
|
+
function sseResponse(identity, start, log, snapshotMessages, state, maxOutputBytes) {
|
|
130
146
|
const stream = createAgentEvidenceStream();
|
|
131
147
|
// `id:` frames are only meaningful when a log can serve the reconnect they invite.
|
|
132
148
|
const withIds = log !== undefined;
|
|
149
|
+
// A disconnect detaches the client. With a log the run keeps recording for a reconnect to replay;
|
|
150
|
+
// without one nothing can rejoin it, so the run is cancelled.
|
|
151
|
+
const disconnect = log === undefined ? new AbortController() : undefined;
|
|
152
|
+
let detached = false;
|
|
133
153
|
const body = new ReadableStream({
|
|
134
154
|
async start(controller) {
|
|
135
|
-
const
|
|
155
|
+
const deliver = sseSender(controller, maxOutputBytes);
|
|
156
|
+
const send = (event, id) => {
|
|
157
|
+
if (!detached)
|
|
158
|
+
deliver(event, id);
|
|
159
|
+
};
|
|
136
160
|
const projector = createDeltaProjector(send, identity.turnId);
|
|
137
|
-
const run = start(stream, projector.sink);
|
|
161
|
+
const run = start(stream, projector.sink, disconnect?.signal);
|
|
138
162
|
// The evidence stream must terminate whether the run resolves or throws, or the `for await`
|
|
139
163
|
// below would hang; the run result (or the error) is still reported in-band after it drains.
|
|
140
164
|
run
|
|
@@ -178,25 +202,42 @@ function sseResponse(identity, start, log, snapshotMessages, state) {
|
|
|
178
202
|
send(event);
|
|
179
203
|
}
|
|
180
204
|
}
|
|
181
|
-
catch {
|
|
205
|
+
catch (error) {
|
|
182
206
|
projector.finish();
|
|
183
|
-
const events = [
|
|
207
|
+
const events = [
|
|
208
|
+
{
|
|
209
|
+
type: "RUN_ERROR",
|
|
210
|
+
message: error instanceof SseOutputLimitError ? "output_limit" : "run_failed",
|
|
211
|
+
timestamp: Date.now(),
|
|
212
|
+
},
|
|
213
|
+
];
|
|
184
214
|
await finishQuietly(log, identity.turnId, { events });
|
|
185
|
-
for (const event of events)
|
|
186
|
-
|
|
215
|
+
for (const event of events) {
|
|
216
|
+
try {
|
|
217
|
+
send(event);
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
// The output budget itself may be exhausted; the stream still closes below.
|
|
221
|
+
}
|
|
222
|
+
}
|
|
187
223
|
}
|
|
188
224
|
finally {
|
|
189
225
|
unsubscribe();
|
|
190
|
-
|
|
226
|
+
if (!detached)
|
|
227
|
+
controller.close();
|
|
191
228
|
}
|
|
192
229
|
},
|
|
230
|
+
cancel() {
|
|
231
|
+
detached = true;
|
|
232
|
+
disconnect?.abort();
|
|
233
|
+
},
|
|
193
234
|
});
|
|
194
235
|
return sseHeaders(body);
|
|
195
236
|
}
|
|
196
|
-
function sseReplayResponse(identity, replay) {
|
|
237
|
+
function sseReplayResponse(identity, replay, maxOutputBytes) {
|
|
197
238
|
const body = new ReadableStream({
|
|
198
239
|
async start(controller) {
|
|
199
|
-
const send = sseSender(controller);
|
|
240
|
+
const send = sseSender(controller, maxOutputBytes);
|
|
200
241
|
send({ type: "RUN_STARTED", threadId: identity.threadId, runId: identity.runId });
|
|
201
242
|
send({ type: "CUSTOM", name: "nifra.turn", value: { turnId: identity.turnId } });
|
|
202
243
|
try {
|
|
@@ -212,8 +253,16 @@ function sseReplayResponse(identity, replay) {
|
|
|
212
253
|
for (const event of events)
|
|
213
254
|
send(event);
|
|
214
255
|
}
|
|
215
|
-
catch {
|
|
216
|
-
|
|
256
|
+
catch (error) {
|
|
257
|
+
try {
|
|
258
|
+
send({
|
|
259
|
+
type: "RUN_ERROR",
|
|
260
|
+
message: error instanceof SseOutputLimitError ? "output_limit" : "run_failed",
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
// The output budget itself may be exhausted; the stream still closes below.
|
|
265
|
+
}
|
|
217
266
|
}
|
|
218
267
|
finally {
|
|
219
268
|
controller.close();
|
|
@@ -222,13 +271,24 @@ function sseReplayResponse(identity, replay) {
|
|
|
222
271
|
});
|
|
223
272
|
return sseHeaders(body);
|
|
224
273
|
}
|
|
225
|
-
|
|
274
|
+
class SseOutputLimitError extends Error {
|
|
275
|
+
}
|
|
276
|
+
function sseSender(controller, maxOutputBytes) {
|
|
226
277
|
const encoder = new TextEncoder();
|
|
278
|
+
let emittedBytes = 0;
|
|
227
279
|
return (event, id) => {
|
|
228
280
|
const head = id === undefined ? "" : `id: ${id}\n`;
|
|
229
|
-
|
|
281
|
+
const frame = encoder.encode(`${head}data: ${JSON.stringify(event)}\n\n`);
|
|
282
|
+
if (frame.byteLength > maxOutputBytes || emittedBytes > maxOutputBytes - frame.byteLength)
|
|
283
|
+
throw new SseOutputLimitError("AG-UI SSE output limit exceeded");
|
|
284
|
+
emittedBytes += frame.byteLength;
|
|
285
|
+
controller.enqueue(frame);
|
|
230
286
|
};
|
|
231
287
|
}
|
|
288
|
+
function assertOutputLimit(value) {
|
|
289
|
+
if (!Number.isSafeInteger(value) || value < 1024 || value > MAX_OUTPUT_BYTES)
|
|
290
|
+
throw new RangeError(`AG-UI maxOutputBytes must be between 1024 and ${MAX_OUTPUT_BYTES}`);
|
|
291
|
+
}
|
|
232
292
|
/**
|
|
233
293
|
* Emit one evidence item's events, stamping the `seq` only on the item's LAST frame: SSE
|
|
234
294
|
* `Last-Event-ID` points at the last frame received, so a partially delivered multi-event item
|
|
@@ -300,7 +360,7 @@ function createDeltaProjector(send, turnId) {
|
|
|
300
360
|
// across model decisions without disturbing whichever stream is open.
|
|
301
361
|
if (delta.kind === "usage") {
|
|
302
362
|
usage = usage ?? new Map();
|
|
303
|
-
const key = `${delta.provider ?? ""}
|
|
363
|
+
const key = `${delta.provider ?? ""}\u0000${delta.model ?? ""}`;
|
|
304
364
|
let entry = usage.get(key);
|
|
305
365
|
if (entry === undefined) {
|
|
306
366
|
entry = {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AAEH,OAAO,EAUL,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,WAAW,EACX,QAAQ,GACT,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAGL,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,uBAAuB,EAEvB,UAAU,EAEV,cAAc,EACd,UAAU,GACX,MAAM,wBAAwB,CAAA;AAG/B,MAAM,YAAY,GAAG,OAAO,CAAA;AAC5B,MAAM,sBAAsB,GAAG,SAAS,CAAA;AACxC,MAAM,wBAAwB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AAChD,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA;AACzC,MAAM,aAAa,GAAgC,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;AAC/F,MAAM,eAAe,GAAG,0BAA0B,CAAA;AAClD,MAAM,qBAAqB,GAAG,YAAY,CAAA;AAgE1C,mEAAmE;AACnE,MAAM,UAAU,SAAS,CAGvB,GAAqB,EAAE,OAAoD;IAC3E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,YAAY,CAAA;IACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,IAAI,sBAAsB,CAAA;IAC/D,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,wBAAwB,CAAA;IACzE,iBAAiB,CAAC,cAAc,CAAC,CAAA;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,IAAI,QAAQ,CAAA;IAChD,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAA;IAEvF,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CACnB,cAAc,CACZ,CAAC,CAAC,GAAG,EACL,QAAQ,EACR,KAAK,EACL,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,CAAC,EACnE,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAChC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAC7C,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,CACtD,CAAA;AACH,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,CAAmB,EACnB,MAAe,EACf,OAAoD,EACpD,UAA0C,EAC1C,cAAsB;IAEtB,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC7B,MAAM,QAAQ,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAA;IAC/D,MAAM,KAAK,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAA;IACzD,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;QACjF,OAAO,YAAY,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAA;IAChE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,YAAY,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAA;IAC7F,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAA;IAEvF,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;IACrD,MAAM,eAAe,GAAG,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;IAC3F,IAAI,eAAe,KAAK,SAAS,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC;QACzE,OAAO,YAAY,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAA;IACxD,6FAA6F;IAC7F,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC3C,MAAM,MAAM,GAAG,eAAe,IAAI,KAAK,EAAE,MAAM,IAAI,KAAK,CAAA;IAExD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAClG,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,MAAM,CAAA;IAC7D,MAAM,GAAG,GACP,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS;QACtE,CAAC,CAAC,OAAO,CAAC,WAAW;QACrB,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;IAChF,MAAM,QAAQ,GAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;IAEzD,4FAA4F;IAC5F,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;IACtD,IAAI,GAAG,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC;YAC1C,OAAO,YAAY,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAA;QAC9D,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAA;QAC5D,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,YAAY,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAA;QACnF,OAAO,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,CAAA;IAC5D,CAAC;IAED,wFAAwF;IACxF,MAAM,WAAW,GAAG,sBAAsB,CAAU,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC/F,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAA;IAEjE,MAAM,KAAK,GAAG,CACZ,SAAkC,EAClC,MAAsB,EACtB,UAAmC,EACD,EAAE;QACpC,6FAA6F;QAC7F,kDAAkD;QAClD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAA;QACzF,MAAM,KAAK,GAAG,sBAAsB,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC9D,MAAM,MAAM,GACV,SAAS,CAAC,MAAM,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS;YACxD,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,UAAU,CAAC;YAClC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAA;QACrD,MAAM,KAAK,GAAG;YACZ,GAAG,SAAS;YACZ,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;YAC1D,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YACjD,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;SAC5C,CAAA;QACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,CAAA;QACxF,CAAC;QACD,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE;YACtD,GAAG,UAAU;YACb,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC;SAChC,CAAC,CAAA;IACJ,CAAC,CAAA;IACD,MAAM,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;IAC1F,OAAO,WAAW,CAChB,QAAQ,EACR,KAAK,EACL,GAAG,EACH,gBAAgB,EAChB;QACE,OAAO,EAAE,WAAW;QACpB,SAAS,EAAE,IAAI,CAAC,KAAK,KAAK,SAAS;KACpC,EACD,cAAc,CACf,CAAA;AACH,CAAC;AAQD,SAAS,WAAW,CAClB,QAAqB,EACrB,KAIqC,EACrC,GAAiC,EACjC,gBAAyB,EACzB,KAA0E,EAC1E,cAAsB;IAEtB,MAAM,MAAM,GAAG,yBAAyB,EAAE,CAAA;IAC1C,mFAAmF;IACnF,MAAM,OAAO,GAAG,GAAG,KAAK,SAAS,CAAA;IACjC,kGAAkG;IAClG,8DAA8D;IAC9D,MAAM,UAAU,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACxE,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,MAAM,IAAI,GAAG,IAAI,cAAc,CAAa;QAC1C,KAAK,CAAC,KAAK,CAAC,UAAU;YACpB,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;YACrD,MAAM,IAAI,GAAY,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;gBAClC,IAAI,CAAC,QAAQ;oBAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;YACnC,CAAC,CAAA;YACD,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;YAC7D,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;YAC7D,4FAA4F;YAC5F,6FAA6F;YAC7F,GAAG;iBACA,IAAI,CACH,GAAG,EAAE,GAAE,CAAC,EACR,GAAG,EAAE,GAAE,CAAC,CACT;iBACA,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;YACnC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;YACjF,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;YAChF,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;YAC/B,IAAI,SAAS;gBACX,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;YAC7F,wFAAwF;YACxF,uCAAuC;YACvC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;gBAClD,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,SAAS,GAAG,IAAI,CAAA;oBAChB,IAAI,CAAC;wBACH,IAAI,EAAE,gBAAgB;wBACtB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE;wBAClC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;qBACtB,CAAC,CAAA;oBACF,OAAM;gBACR,CAAC;gBACD,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;YAClE,CAAC,CAAC,CAAA;YACF,IAAI,CAAC;gBACH,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC;oBACpC,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;oBAChD,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,CAAA;gBACxE,CAAC;gBACD,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,CAAA;gBAClD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAA;gBAC3E,qFAAqF;gBACrF,oFAAoF;gBACpF,oDAAoD;gBACpD,MAAM,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;gBACrD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,kFAAkF;oBAClF,mCAAmC;oBACnC,IAAI,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC;wBAAE,SAAQ;oBAC5E,IAAI,CAAC,KAAK,CAAC,CAAA;gBACb,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,CAAC,MAAM,EAAE,CAAA;gBAClB,MAAM,MAAM,GAAG;oBACb;wBACE,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,KAAK,YAAY,mBAAmB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY;wBAC7E,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;qBACtB;iBACF,CAAA;gBACD,MAAM,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;gBACrD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,IAAI,CAAC;wBACH,IAAI,CAAC,KAAK,CAAC,CAAA;oBACb,CAAC;oBAAC,MAAM,CAAC;wBACP,4EAA4E;oBAC9E,CAAC;gBACH,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,WAAW,EAAE,CAAA;gBACb,IAAI,CAAC,QAAQ;oBAAE,UAAU,CAAC,KAAK,EAAE,CAAA;YACnC,CAAC;QACH,CAAC;QACD,MAAM;YACJ,QAAQ,GAAG,IAAI,CAAA;YACf,UAAU,EAAE,KAAK,EAAE,CAAA;QACrB,CAAC;KACF,CAAC,CAAA;IACF,OAAO,UAAU,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,SAAS,iBAAiB,CACxB,QAAqB,EACrB,MAA2B,EAC3B,cAAsB;IAEtB,MAAM,IAAI,GAAG,IAAI,cAAc,CAAa;QAC1C,KAAK,CAAC,KAAK,CAAC,UAAU;YACpB,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;YAClD,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;YACjF,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;YAChF,IAAI,CAAC;gBACH,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,QAAQ;oBAAE,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;gBAC3F,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;oBAC3B,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI;wBACtC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;gBACvD,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;gBACpD,IAAI,MAAM,KAAK,SAAS;oBAAE,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAA;;oBACvE,KAAK,MAAM,KAAK,IAAI,MAAM;wBAAE,IAAI,CAAC,KAAK,CAAC,CAAA;YAC9C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC;oBACH,IAAI,CAAC;wBACH,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,KAAK,YAAY,mBAAmB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY;qBAC9E,CAAC,CAAA;gBACJ,CAAC;gBAAC,MAAM,CAAC;oBACP,4EAA4E;gBAC9E,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,UAAU,CAAC,KAAK,EAAE,CAAA;YACpB,CAAC;QACH,CAAC;KACF,CAAC,CAAA;IACF,OAAO,UAAU,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAID,MAAM,mBAAoB,SAAQ,KAAK;CAAG;AAE1C,SAAS,SAAS,CAChB,UAAuD,EACvD,cAAsB;IAEtB,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;IACjC,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACnB,MAAM,IAAI,GAAG,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAA;QAClD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACzE,IAAI,KAAK,CAAC,UAAU,GAAG,cAAc,IAAI,YAAY,GAAG,cAAc,GAAG,KAAK,CAAC,UAAU;YACvF,MAAM,IAAI,mBAAmB,CAAC,iCAAiC,CAAC,CAAA;QAClE,YAAY,IAAI,KAAK,CAAC,UAAU,CAAA;QAChC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC,CAAA;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,gBAAgB;QAC1E,MAAM,IAAI,UAAU,CAAC,iDAAiD,gBAAgB,EAAE,CAAC,CAAA;AAC7F,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CACnB,IAAa,EACb,QAA2B,EAC3B,MAAc,EACd,OAAgB,EAChB,cAAuB;IAEvB,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,CAAA;IAC/D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAA4B,CAAA;QACtD,IAAI,OAAO,IAAI,KAAK,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAA;;YAChE,IAAI,CAAC,KAAK,CAAC,CAAA;IAClB,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAgC;IAClD,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;QACxB,MAAM,EAAE,GAAG;QACX,OAAO,EAAE;YACP,cAAc,EAAE,kCAAkC;YAClD,eAAe,EAAE,wBAAwB;YACzC,UAAU,EAAE,YAAY;SACzB;KACF,CAAC,CAAA;AACJ,CAAC;AAgBD,MAAM,kBAAkB,GAAG;IACzB,aAAa;IACb,cAAc;IACd,aAAa;IACb,iBAAiB;IACjB,mBAAmB;CACX,CAAA;AAiBV;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,IAAa,EAAE,MAAc;IACzD,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,IAAI,MAA0B,CAAA;IAC9B,IAAI,WAA+B,CAAA;IACnC,IAAI,MAA0B,CAAA;IAC9B,IAAI,YAAY,GAAG,KAAK,CAAA;IACxB,IAAI,KAA0C,CAAA;IAC9C,MAAM,SAAS,GAAG,GAAS,EAAE;QAC3B,IAAI,MAAM,KAAK,SAAS;YAAE,OAAM;QAChC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;QAC5E,MAAM,GAAG,SAAS,CAAA;IACpB,CAAC,CAAA;IACD,MAAM,cAAc,GAAG,GAAS,EAAE;QAChC,IAAI,WAAW,KAAK,SAAS;YAAE,OAAM;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC5B,IAAI,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAA;QAC1E,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAA;QAClE,WAAW,GAAG,SAAS,CAAA;IACzB,CAAC,CAAA;IACD,MAAM,SAAS,GAAG,GAAS,EAAE;QAC3B,IAAI,MAAM,KAAK,SAAS;YAAE,OAAM;QAChC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;QAC1E,MAAM,GAAG,SAAS,CAAA;IACpB,CAAC,CAAA;IACD,MAAM,IAAI,GAAmB;QAC3B,KAAK,CAAC,KAAsB;YAC1B,uFAAuF;YACvF,sEAAsE;YACtE,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC3B,KAAK,GAAG,KAAK,IAAI,IAAI,GAAG,EAAE,CAAA;gBAC1B,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,SAAS,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAA;gBAC/D,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBAC1B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,KAAK,GAAG;wBACN,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;wBACrE,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;qBAC7D,CAAA;oBACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;gBACvB,CAAC;gBACD,KAAK,MAAM,KAAK,IAAI,kBAAkB,EAAE,CAAC;oBACvC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;oBAC1B,oFAAoF;oBACpF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;wBACrD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAA;gBAC9C,CAAC;gBACD,OAAM;YACR,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,cAAc,EAAE,CAAA;gBAChB,SAAS,EAAE,CAAA;gBACX,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,MAAM,GAAG,GAAG,MAAM,WAAW,OAAO,EAAE,CAAA;oBACtC,OAAO,IAAI,CAAC,CAAA;oBACZ,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAA;gBACvF,CAAC;gBACD,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;gBACvF,YAAY,GAAG,IAAI,CAAA;gBACnB,OAAM;YACR,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/B,SAAS,EAAE,CAAA;gBACX,SAAS,EAAE,CAAA;gBACX,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;oBAC9B,WAAW,GAAG,GAAG,MAAM,cAAc,OAAO,EAAE,CAAA;oBAC9C,OAAO,IAAI,CAAC,CAAA;oBACZ,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAA;oBACpE,IAAI,CAAC;wBACH,IAAI,EAAE,yBAAyB;wBAC/B,SAAS,EAAE,WAAW;wBACtB,IAAI,EAAE,WAAW;wBACjB,SAAS;qBACV,CAAC,CAAA;gBACJ,CAAC;gBACD,IAAI,CAAC;oBACH,IAAI,EAAE,2BAA2B;oBACjC,SAAS,EAAE,WAAW;oBACtB,KAAK,EAAE,KAAK,CAAC,IAAI;oBACjB,SAAS;iBACV,CAAC,CAAA;gBACF,OAAM;YACR,CAAC;YACD,SAAS,EAAE,CAAA;YACX,cAAc,EAAE,CAAA;YAChB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,GAAG,GAAG,MAAM,SAAS,OAAO,EAAE,CAAA;gBACpC,OAAO,IAAI,CAAC,CAAA;gBACZ,IAAI,CAAC;oBACH,IAAI,EAAE,iBAAiB;oBACvB,UAAU,EAAE,MAAM;oBAClB,YAAY,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM;oBAClC,SAAS;iBACV,CAAC,CAAA;YACJ,CAAC;YACD,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAA;QACxF,CAAC;KACF,CAAA;IACD,OAAO;QACL,IAAI;QACJ,KAAK,CAAC,QAAQ;YACZ,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAA;YAChF,SAAS,EAAE,CAAA;YACX,cAAc,EAAE,CAAA;YAChB,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAA;YAC1C,MAAM,OAAO,GAAG,MAAM,CAAA;YACtB,MAAM,GAAG,SAAS,CAAA;YAClB,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,MAAM;YACJ,SAAS,EAAE,CAAA;YACX,cAAc,EAAE,CAAA;YAChB,SAAS,EAAE,CAAA;YACX,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;QACzF,CAAC;KACF,CAAA;AACH,CAAC;AAaD,yEAAyE;AACzE,MAAM,sBAAsB,GAA4B;IACtD,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,CAAC,cAAc,CAAC;IAC1B,UAAU,EAAE;QACV,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,8EAA8E;SAC5F;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;SACzE;KACF;CACF,CAAA;AAED,4FAA4F;AAC5F,SAAS,cAAc,CACrB,QAAqB,EACrB,MAA+B,EAC/B,gBAAyB,EACzB,KAA+B;IAE/B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC5B,2FAA2F;IAC3F,iEAAiE;IACjE,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAA;IACtD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;YAC5B,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;QACvE,MAAM,SAAS,GAAG,GAAG,QAAQ,CAAC,MAAM,SAAS,CAAA;QAC7C,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC/F,OAAO;YACL,EAAE,IAAI,EAAE,oBAAoB,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE;YACvE,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;YAC7D,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,SAAS,EAAE;YAClD,GAAG,gBAAgB,CAAC,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC;YAClE;gBACE,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC5B,GAAG,SAAS;gBACZ,SAAS;aACV;SACF,CAAA;IACH,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO;YACL;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,eAAe;gBACrB,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE;gBACvF,SAAS;aACV;YACD;gBACE,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,OAAO,EAAE;oBACP,IAAI,EAAE,WAAW;oBACjB,UAAU,EAAE;wBACV;4BACE,EAAE,EAAE,QAAQ,CAAC,MAAM;4BACnB,MAAM,EAAE,MAAM,CAAC,MAAM;4BACrB,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;4BACrF,cAAc,EAAE,sBAAsB;4BACtC,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE;yBACpE;qBACF;iBACF;gBACD,GAAG,SAAS;gBACZ,SAAS;aACV;SACF,CAAA;IACH,CAAC;IACD,OAAO;QACL;YACE,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,GAAG,SAAS;YACZ,SAAS;SACV;KACF,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CACvB,QAAiB,EACjB,SAAiB,EACjB,OAAe,EACf,SAAiB;IAEjB,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IACrC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;IACtD,OAAO;QACL;YACE,IAAI,EAAE,mBAAmB;YACzB,QAAQ,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;YACpE,SAAS;SACV;KACF,CAAA;AACH,CAAC;AAED,sFAAsF;AACtF,SAAS,gBAAgB,CAAC,KAAc;IACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC9B,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAA;IAC3E,MAAM,MAAM,GAA8B,EAAE,CAAA;IAC5C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC9B,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,SAAS,CAAA;QAC1C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACrB,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,wFAAwF;AACxF,KAAK,UAAU,aAAa,CAC1B,GAAiC,EACjC,MAAc,EACd,MAAe;IAEf,IAAI,GAAG,KAAK,SAAS;QAAE,OAAM;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,sEAAsE;IACxE,CAAC;AACH,CAAC;AAED,sFAAsF;AACtF,SAAS,cAAc,CACrB,QAA2B,EAC3B,MAAc,EACd,cAAuB;IAEvB,MAAM,SAAS,GAAG,QAAQ,CAAC,EAAE,CAAA;IAC7B,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC7B,2FAA2F;QAC3F,qFAAqF;QACrF,4CAA4C;QAC5C,MAAM,UAAU,GAAG,cAAc,IAAI,QAAQ,CAAC,QAAQ,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAA;QAC5F,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,iBAAiB;YACvB,UAAU;YACV,YAAY,EAAE,QAAQ,CAAC,IAAI,IAAI,MAAM;YACrC,SAAS;SACV,CAAA;QACD,2FAA2F;QAC3F,2FAA2F;QAC3F,+EAA+E;QAC/E,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACtF,OAAO;YACL,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE;YAChD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,SAAS,EAAE,GAAG,MAAM,SAAS,QAAQ,CAAC,GAAG,EAAE;gBAC3C,UAAU;gBACV,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;oBACtB,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;iBAChE,CAAC;gBACF,SAAS;aACV;SACF,CAAA;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAA;IAClG,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAA;IAC1F,OAAO,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAA;AACzD,CAAC;AAED,SAAS,eAAe,CAAC,QAAiB;IACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAA;IAC9C,KAAK,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;QACzC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,OAAO,CAAC,OAAO,CAAA;IAC9E,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,GAAY;IAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;IAC5B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC1C,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IAClD,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAChD,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAA;IAC9B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAwB,CAAC;QAC/E,OAAO,SAAS,CAAA;IAClB,IAAI,OAAO,YAAY,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IAC/D,IAAI,YAAY,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,YAAY,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IAC9F,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC1C,OAAO;QACL,YAAY,EAAE;YACZ,IAAI,EAAE,IAAwB;YAC9B,GAAG,CAAC,YAAY,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,IAAc,EAAE,CAAC;YACjF,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,QAAQ,EAAE,YAAY,CAAC,QAAQ;SAChC;QACD,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,SAAS;YACjE,CAAC,CAAC;gBACE,QAAQ,EAAE;oBACR,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,GAAG,CAAC,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC5E;aACF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CACvB,GAAY;IAEZ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAC7D,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACzC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAA;IACrC,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,OAAO,SAAS,CAAA;IAC3F,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;IAC3B,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,SAAS,CAAA;IACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;IAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC3C,MAAM,MAAM,GAAG,WAAW,CAAC;QACzB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,+EAA+E;QAC/E,QAAQ,EAAE,QAAQ,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;KAChF,CAAC,CAAA;IACF,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC1C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAA;AACxC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACzF,OAAO,KAAgC,CAAA;AACzC,CAAC;AAED,SAAS,YAAY,CAAC,MAAc,EAAE,IAAa;IACjD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACxC,MAAM;QACN,OAAO,EAAE,EAAE,cAAc,EAAE,iCAAiC,EAAE;KAC/D,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,QAAmC;IACjD,OAAO,QAAQ,YAAY,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAA;AAChG,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nifrajs/ag-ui",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "Mount a nifra agent as an AG-UI (Agent-User Interaction protocol) endpoint - one POST accepting RunAgentInput, a stream of AG-UI events out over SSE: run lifecycle, step and tool-call events from the runner's step evidence, text message events for the output, and a typed continuation for human-in-the-loop resume. A protocol bridge over @nifrajs/agent; the model, state store, and approval transport stay injected per request.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bun",
|
|
@@ -14,6 +14,9 @@
|
|
|
14
14
|
"human-in-the-loop"
|
|
15
15
|
],
|
|
16
16
|
"type": "module",
|
|
17
|
+
"nifra": {
|
|
18
|
+
"environment": "library"
|
|
19
|
+
},
|
|
17
20
|
"main": "./dist/index.js",
|
|
18
21
|
"module": "./dist/index.js",
|
|
19
22
|
"types": "./dist/index.d.ts",
|
|
@@ -33,8 +36,8 @@
|
|
|
33
36
|
"build": "tsc -p tsconfig.build.json && bun run ../../scripts/fix-dts.ts dist"
|
|
34
37
|
},
|
|
35
38
|
"peerDependencies": {
|
|
36
|
-
"@nifrajs/agent": "^
|
|
37
|
-
"@nifrajs/core": "^
|
|
39
|
+
"@nifrajs/agent": "^4.0.0",
|
|
40
|
+
"@nifrajs/core": "^4.0.0"
|
|
38
41
|
},
|
|
39
42
|
"peerDependenciesMeta": {
|
|
40
43
|
"@nifrajs/core": {
|
package/src/index.ts
CHANGED
|
@@ -54,7 +54,9 @@
|
|
|
54
54
|
* missed events and rejoin the still-running turn - the run is never re-executed. Without the
|
|
55
55
|
* log the header is ignored and every POST starts a run.
|
|
56
56
|
* - The seam performs no authentication or authorization. Wrap it with the app's own route guards,
|
|
57
|
-
* and scope the store/model returned by `ports` to the caller.
|
|
57
|
+
* and scope the store/model returned by `ports` to the caller. With an `evidenceLog`, set
|
|
58
|
+
* `evidenceOwner` too: without it a turn id (by default the client's `runId`) is a bearer
|
|
59
|
+
* capability, and any caller who reaches the route with it replays that turn's events.
|
|
58
60
|
*/
|
|
59
61
|
|
|
60
62
|
import {
|
|
@@ -78,6 +80,7 @@ import {
|
|
|
78
80
|
type AgentEvidenceLog,
|
|
79
81
|
type AgentEvidenceReplay,
|
|
80
82
|
createAgentEvidenceStream,
|
|
83
|
+
scopeAgentEvidenceLog,
|
|
81
84
|
} from "@nifrajs/agent/events"
|
|
82
85
|
import {
|
|
83
86
|
EMPTY_RESPONSE_CONTROLS,
|
|
@@ -91,6 +94,8 @@ import type { StandardSchemaV1 } from "@nifrajs/core/schema"
|
|
|
91
94
|
|
|
92
95
|
const DEFAULT_PATH = "/agui"
|
|
93
96
|
const DEFAULT_MAX_BODY_BYTES = 1_000_000
|
|
97
|
+
const DEFAULT_MAX_OUTPUT_BYTES = 4 * 1024 * 1024
|
|
98
|
+
const MAX_OUTPUT_BYTES = 64 * 1024 * 1024
|
|
94
99
|
const PENDING_KINDS: readonly AgentPendingKind[] = ["approval", "budget", "model", "cancelled"]
|
|
95
100
|
const TURN_ID_PATTERN = /^[a-zA-Z0-9._:-]{1,128}$/
|
|
96
101
|
const LAST_EVENT_ID_PATTERN = /^\d{1,15}$/
|
|
@@ -129,6 +134,8 @@ export interface MountAgUIOptions<
|
|
|
129
134
|
readonly maxBodyBytes?: number
|
|
130
135
|
/** Prototype-poisoning policy for the framing lane. Default `"reject"`. */
|
|
131
136
|
readonly protoPoisoning?: ProtoPoisoning
|
|
137
|
+
/** Maximum total UTF-8 bytes emitted by one SSE response. Default 4 MiB. */
|
|
138
|
+
readonly maxOutputBytes?: number
|
|
132
139
|
/**
|
|
133
140
|
* Build the ports for one request - the model, durable state store, approval transport,
|
|
134
141
|
* capabilities, and budgets. Receives the route context so the caller can scope every port to
|
|
@@ -140,6 +147,12 @@ export interface MountAgUIOptions<
|
|
|
140
147
|
* (`createMemoryAgentEvidenceLog`) is single-process; a durable log is an adapter concern.
|
|
141
148
|
*/
|
|
142
149
|
readonly evidenceLog?: AgentEvidenceLog
|
|
150
|
+
/**
|
|
151
|
+
* Who a turn's recorded events belong to - the caller's user or tenant id. Turns are recorded and
|
|
152
|
+
* replayed under it, so a reconnect or a reused run id from another caller finds nothing of this
|
|
153
|
+
* caller's turns. It runs before a replay is served; throw to refuse the request.
|
|
154
|
+
*/
|
|
155
|
+
readonly evidenceOwner?: (c: AgUIRouteContext) => string | Promise<string>
|
|
143
156
|
/**
|
|
144
157
|
* Emit a `MESSAGES_SNAPSHOT` (the request's `messages` plus the assistant output message)
|
|
145
158
|
* before `RUN_FINISHED` on a successful completion. Default `false`: the snapshot echoes
|
|
@@ -156,6 +169,8 @@ export function mountAgUI<
|
|
|
156
169
|
>(app: AgUIMountableApp, options: MountAgUIOptions<InputSchema, OutputSchema>): void {
|
|
157
170
|
const path = options.path ?? DEFAULT_PATH
|
|
158
171
|
const maxBytes = options.maxBodyBytes ?? DEFAULT_MAX_BODY_BYTES
|
|
172
|
+
const maxOutputBytes = options.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES
|
|
173
|
+
assertOutputLimit(maxOutputBytes)
|
|
159
174
|
const proto = options.protoPoisoning ?? "reject"
|
|
160
175
|
const runOptions = options.maxTurns === undefined ? {} : { maxTurns: options.maxTurns }
|
|
161
176
|
|
|
@@ -164,7 +179,7 @@ export function mountAgUI<
|
|
|
164
179
|
c.req,
|
|
165
180
|
maxBytes,
|
|
166
181
|
proto,
|
|
167
|
-
(parsed) => execute(c, parsed, options, runOptions),
|
|
182
|
+
(parsed) => execute(c, parsed, options, runOptions, maxOutputBytes),
|
|
168
183
|
(rejection) => render(rejection),
|
|
169
184
|
() => render(plainError(400, "bad_request")),
|
|
170
185
|
).catch(() => render(plainError(400, "bad_request"))),
|
|
@@ -176,12 +191,15 @@ async function execute<InputSchema extends StandardSchemaV1, OutputSchema extend
|
|
|
176
191
|
parsed: unknown,
|
|
177
192
|
options: MountAgUIOptions<InputSchema, OutputSchema>,
|
|
178
193
|
runOptions: { readonly maxTurns?: number },
|
|
194
|
+
maxOutputBytes: number,
|
|
179
195
|
): Promise<Response> {
|
|
180
196
|
const body = asRecord(parsed)
|
|
181
197
|
const threadId = body === undefined ? undefined : body.threadId
|
|
182
198
|
const runId = body === undefined ? undefined : body.runId
|
|
183
199
|
if (body === undefined || typeof threadId !== "string" || typeof runId !== "string")
|
|
184
200
|
return jsonResponse(400, { error: "invalid_run_agent_input" })
|
|
201
|
+
if (!TURN_ID_PATTERN.test(threadId)) return jsonResponse(400, { error: "invalid_thread_id" })
|
|
202
|
+
if (!TURN_ID_PATTERN.test(runId)) return jsonResponse(400, { error: "invalid_run_id" })
|
|
185
203
|
|
|
186
204
|
const forwarded = asRecord(body.forwardedProps) ?? {}
|
|
187
205
|
const forwardedTurnId = typeof forwarded.turnId === "string" ? forwarded.turnId : undefined
|
|
@@ -189,12 +207,14 @@ async function execute<InputSchema extends StandardSchemaV1, OutputSchema extend
|
|
|
189
207
|
return jsonResponse(400, { error: "invalid_turn_id" })
|
|
190
208
|
// Legacy resume names the turn in forwardedProps; spec resume names it via the interrupt id.
|
|
191
209
|
const entry = parseResumeEntry(body.resume)
|
|
192
|
-
const turnId =
|
|
193
|
-
forwardedTurnId ?? entry?.turnId ?? (TURN_ID_PATTERN.test(runId) ? runId : crypto.randomUUID())
|
|
210
|
+
const turnId = forwardedTurnId ?? entry?.turnId ?? runId
|
|
194
211
|
|
|
195
212
|
const input = Object.hasOwn(forwarded, "input") ? forwarded.input : lastUserMessage(body.messages)
|
|
196
213
|
const resume = parseResume(forwarded.resume) ?? entry?.resume
|
|
197
|
-
const log =
|
|
214
|
+
const log =
|
|
215
|
+
options.evidenceLog === undefined || options.evidenceOwner === undefined
|
|
216
|
+
? options.evidenceLog
|
|
217
|
+
: scopeAgentEvidenceLog(options.evidenceLog, await options.evidenceOwner(c))
|
|
198
218
|
const identity: RunIdentity = { threadId, runId, turnId }
|
|
199
219
|
|
|
200
220
|
// A reconnect replays recorded evidence and rejoins the turn; it never starts a second run.
|
|
@@ -204,7 +224,7 @@ async function execute<InputSchema extends StandardSchemaV1, OutputSchema extend
|
|
|
204
224
|
return jsonResponse(400, { error: "invalid_last_event_id" })
|
|
205
225
|
const replay = await log.replay(turnId, Number(lastEventId))
|
|
206
226
|
if (replay === undefined) return jsonResponse(409, { error: "replay_unavailable" })
|
|
207
|
-
return sseReplayResponse(identity, replay)
|
|
227
|
+
return sseReplayResponse(identity, replay, maxOutputBytes)
|
|
208
228
|
}
|
|
209
229
|
|
|
210
230
|
// `body.state` seeds the run's shared UI state document; patches stream as STATE_DELTA.
|
|
@@ -214,15 +234,21 @@ async function execute<InputSchema extends StandardSchemaV1, OutputSchema extend
|
|
|
214
234
|
const start = (
|
|
215
235
|
telemetry: AgentPorts["telemetry"],
|
|
216
236
|
deltas: AgentDeltaSink,
|
|
237
|
+
disconnect: AbortSignal | undefined,
|
|
217
238
|
): Promise<AgentRunResult<unknown>> => {
|
|
218
239
|
// Compose rather than replace: the SSE evidence stream must not displace a telemetry port or
|
|
219
240
|
// delta sink the caller injected through `ports`.
|
|
220
241
|
const combined = combineAgentTelemetry(basePorts.telemetry, log?.open(turnId), telemetry)
|
|
221
242
|
const sinks = combineAgentDeltaSinks(basePorts.deltas, deltas)
|
|
243
|
+
const signal =
|
|
244
|
+
basePorts.signal === undefined || disconnect === undefined
|
|
245
|
+
? (basePorts.signal ?? disconnect)
|
|
246
|
+
: AbortSignal.any([basePorts.signal, disconnect])
|
|
222
247
|
const ports = {
|
|
223
248
|
...basePorts,
|
|
224
249
|
...(combined === undefined ? {} : { telemetry: combined }),
|
|
225
250
|
...(sinks === undefined ? {} : { deltas: sinks }),
|
|
251
|
+
...(signal === undefined ? {} : { signal }),
|
|
226
252
|
}
|
|
227
253
|
if (resume !== undefined) {
|
|
228
254
|
return resumeAgent(options.agent, turnId, { value: input, resume }, ports, runOptions)
|
|
@@ -233,10 +259,17 @@ async function execute<InputSchema extends StandardSchemaV1, OutputSchema extend
|
|
|
233
259
|
})
|
|
234
260
|
}
|
|
235
261
|
const snapshotMessages = options.emitMessagesSnapshot === true ? body.messages : undefined
|
|
236
|
-
return sseResponse(
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
262
|
+
return sseResponse(
|
|
263
|
+
identity,
|
|
264
|
+
start,
|
|
265
|
+
log,
|
|
266
|
+
snapshotMessages,
|
|
267
|
+
{
|
|
268
|
+
channel: sharedState,
|
|
269
|
+
announced: body.state !== undefined,
|
|
270
|
+
},
|
|
271
|
+
maxOutputBytes,
|
|
272
|
+
)
|
|
240
273
|
}
|
|
241
274
|
|
|
242
275
|
interface RunIdentity {
|
|
@@ -250,19 +283,28 @@ function sseResponse(
|
|
|
250
283
|
start: (
|
|
251
284
|
telemetry: AgentPorts["telemetry"],
|
|
252
285
|
deltas: AgentDeltaSink,
|
|
286
|
+
disconnect: AbortSignal | undefined,
|
|
253
287
|
) => Promise<AgentRunResult<unknown>>,
|
|
254
288
|
log: AgentEvidenceLog | undefined,
|
|
255
289
|
snapshotMessages: unknown,
|
|
256
290
|
state: { readonly channel: AgentSharedState; readonly announced: boolean },
|
|
291
|
+
maxOutputBytes: number,
|
|
257
292
|
): Response {
|
|
258
293
|
const stream = createAgentEvidenceStream()
|
|
259
294
|
// `id:` frames are only meaningful when a log can serve the reconnect they invite.
|
|
260
295
|
const withIds = log !== undefined
|
|
296
|
+
// A disconnect detaches the client. With a log the run keeps recording for a reconnect to replay;
|
|
297
|
+
// without one nothing can rejoin it, so the run is cancelled.
|
|
298
|
+
const disconnect = log === undefined ? new AbortController() : undefined
|
|
299
|
+
let detached = false
|
|
261
300
|
const body = new ReadableStream<Uint8Array>({
|
|
262
301
|
async start(controller) {
|
|
263
|
-
const
|
|
302
|
+
const deliver = sseSender(controller, maxOutputBytes)
|
|
303
|
+
const send: SseSend = (event, id) => {
|
|
304
|
+
if (!detached) deliver(event, id)
|
|
305
|
+
}
|
|
264
306
|
const projector = createDeltaProjector(send, identity.turnId)
|
|
265
|
-
const run = start(stream, projector.sink)
|
|
307
|
+
const run = start(stream, projector.sink, disconnect?.signal)
|
|
266
308
|
// The evidence stream must terminate whether the run resolves or throws, or the `for await`
|
|
267
309
|
// below would hang; the run result (or the error) is still reported in-band after it drains.
|
|
268
310
|
run
|
|
@@ -307,24 +349,44 @@ function sseResponse(
|
|
|
307
349
|
if (streamedText && String(event.type).startsWith("TEXT_MESSAGE_")) continue
|
|
308
350
|
send(event)
|
|
309
351
|
}
|
|
310
|
-
} catch {
|
|
352
|
+
} catch (error) {
|
|
311
353
|
projector.finish()
|
|
312
|
-
const events = [
|
|
354
|
+
const events = [
|
|
355
|
+
{
|
|
356
|
+
type: "RUN_ERROR",
|
|
357
|
+
message: error instanceof SseOutputLimitError ? "output_limit" : "run_failed",
|
|
358
|
+
timestamp: Date.now(),
|
|
359
|
+
},
|
|
360
|
+
]
|
|
313
361
|
await finishQuietly(log, identity.turnId, { events })
|
|
314
|
-
for (const event of events)
|
|
362
|
+
for (const event of events) {
|
|
363
|
+
try {
|
|
364
|
+
send(event)
|
|
365
|
+
} catch {
|
|
366
|
+
// The output budget itself may be exhausted; the stream still closes below.
|
|
367
|
+
}
|
|
368
|
+
}
|
|
315
369
|
} finally {
|
|
316
370
|
unsubscribe()
|
|
317
|
-
controller.close()
|
|
371
|
+
if (!detached) controller.close()
|
|
318
372
|
}
|
|
319
373
|
},
|
|
374
|
+
cancel() {
|
|
375
|
+
detached = true
|
|
376
|
+
disconnect?.abort()
|
|
377
|
+
},
|
|
320
378
|
})
|
|
321
379
|
return sseHeaders(body)
|
|
322
380
|
}
|
|
323
381
|
|
|
324
|
-
function sseReplayResponse(
|
|
382
|
+
function sseReplayResponse(
|
|
383
|
+
identity: RunIdentity,
|
|
384
|
+
replay: AgentEvidenceReplay,
|
|
385
|
+
maxOutputBytes: number,
|
|
386
|
+
): Response {
|
|
325
387
|
const body = new ReadableStream<Uint8Array>({
|
|
326
388
|
async start(controller) {
|
|
327
|
-
const send = sseSender(controller)
|
|
389
|
+
const send = sseSender(controller, maxOutputBytes)
|
|
328
390
|
send({ type: "RUN_STARTED", threadId: identity.threadId, runId: identity.runId })
|
|
329
391
|
send({ type: "CUSTOM", name: "nifra.turn", value: { turnId: identity.turnId } })
|
|
330
392
|
try {
|
|
@@ -335,8 +397,15 @@ function sseReplayResponse(identity: RunIdentity, replay: AgentEvidenceReplay):
|
|
|
335
397
|
const events = asTerminalEvents(await replay.result)
|
|
336
398
|
if (events === undefined) send({ type: "RUN_ERROR", message: "run_failed" })
|
|
337
399
|
else for (const event of events) send(event)
|
|
338
|
-
} catch {
|
|
339
|
-
|
|
400
|
+
} catch (error) {
|
|
401
|
+
try {
|
|
402
|
+
send({
|
|
403
|
+
type: "RUN_ERROR",
|
|
404
|
+
message: error instanceof SseOutputLimitError ? "output_limit" : "run_failed",
|
|
405
|
+
})
|
|
406
|
+
} catch {
|
|
407
|
+
// The output budget itself may be exhausted; the stream still closes below.
|
|
408
|
+
}
|
|
340
409
|
} finally {
|
|
341
410
|
controller.close()
|
|
342
411
|
}
|
|
@@ -347,14 +416,29 @@ function sseReplayResponse(identity: RunIdentity, replay: AgentEvidenceReplay):
|
|
|
347
416
|
|
|
348
417
|
type SseSend = (event: Record<string, unknown>, id?: number) => void
|
|
349
418
|
|
|
350
|
-
|
|
419
|
+
class SseOutputLimitError extends Error {}
|
|
420
|
+
|
|
421
|
+
function sseSender(
|
|
422
|
+
controller: ReadableStreamDefaultController<Uint8Array>,
|
|
423
|
+
maxOutputBytes: number,
|
|
424
|
+
): SseSend {
|
|
351
425
|
const encoder = new TextEncoder()
|
|
426
|
+
let emittedBytes = 0
|
|
352
427
|
return (event, id) => {
|
|
353
428
|
const head = id === undefined ? "" : `id: ${id}\n`
|
|
354
|
-
|
|
429
|
+
const frame = encoder.encode(`${head}data: ${JSON.stringify(event)}\n\n`)
|
|
430
|
+
if (frame.byteLength > maxOutputBytes || emittedBytes > maxOutputBytes - frame.byteLength)
|
|
431
|
+
throw new SseOutputLimitError("AG-UI SSE output limit exceeded")
|
|
432
|
+
emittedBytes += frame.byteLength
|
|
433
|
+
controller.enqueue(frame)
|
|
355
434
|
}
|
|
356
435
|
}
|
|
357
436
|
|
|
437
|
+
function assertOutputLimit(value: number): void {
|
|
438
|
+
if (!Number.isSafeInteger(value) || value < 1024 || value > MAX_OUTPUT_BYTES)
|
|
439
|
+
throw new RangeError(`AG-UI maxOutputBytes must be between 1024 and ${MAX_OUTPUT_BYTES}`)
|
|
440
|
+
}
|
|
441
|
+
|
|
358
442
|
/**
|
|
359
443
|
* Emit one evidence item's events, stamping the `seq` only on the item's LAST frame: SSE
|
|
360
444
|
* `Last-Event-ID` points at the last frame received, so a partially delivered multi-event item
|
|
@@ -459,7 +543,7 @@ function createDeltaProjector(send: SseSend, turnId: string): DeltaProjector {
|
|
|
459
543
|
// across model decisions without disturbing whichever stream is open.
|
|
460
544
|
if (delta.kind === "usage") {
|
|
461
545
|
usage = usage ?? new Map()
|
|
462
|
-
const key = `${delta.provider ?? ""}
|
|
546
|
+
const key = `${delta.provider ?? ""}\u0000${delta.model ?? ""}`
|
|
463
547
|
let entry = usage.get(key)
|
|
464
548
|
if (entry === undefined) {
|
|
465
549
|
entry = {
|