@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 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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAEH,OAAO,EACL,KAAK,eAAe,EAIpB,KAAK,UAAU,EAEf,KAAK,gBAAgB,EAStB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,KAAK,gBAAgB,EAGtB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAEL,KAAK,cAAc,EAKpB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAQ5D,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;;;;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;;;;;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,CAgBnF;AAyND;;;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"}
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 ?? (TURN_ID_PATTERN.test(runId) ? runId : crypto.randomUUID());
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 send = sseSender(controller);
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 = [{ type: "RUN_ERROR", message: "run_failed", timestamp: Date.now() }];
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
- send(event);
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
- controller.close();
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
- send({ type: "RUN_ERROR", message: "run_failed" });
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
- function sseSender(controller) {
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
- controller.enqueue(encoder.encode(`${head}data: ${JSON.stringify(event)}\n\n`));
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 ?? ""}${delta.model ?? ""}`;
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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nifrajs/ag-ui",
3
- "version": "3.3.0",
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": "^3.3.0",
37
- "@nifrajs/core": "^3.3.0"
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 = options.evidenceLog
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(identity, start, log, snapshotMessages, {
237
- channel: sharedState,
238
- announced: body.state !== undefined,
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 send = sseSender(controller)
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 = [{ type: "RUN_ERROR", message: "run_failed", timestamp: Date.now() }]
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) send(event)
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(identity: RunIdentity, replay: AgentEvidenceReplay): Response {
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
- send({ type: "RUN_ERROR", message: "run_failed" })
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
- function sseSender(controller: ReadableStreamDefaultController<Uint8Array>): SseSend {
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
- controller.enqueue(encoder.encode(`${head}data: ${JSON.stringify(event)}\n\n`))
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 ?? ""}${delta.model ?? ""}`
546
+ const key = `${delta.provider ?? ""}\u0000${delta.model ?? ""}`
463
547
  let entry = usage.get(key)
464
548
  if (entry === undefined) {
465
549
  entry = {