@nifrajs/agent-protocol 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/dist/index.d.ts CHANGED
@@ -217,5 +217,8 @@ export * from "./orchestration.js";
217
217
  * feature negotiation, cursor resume). Additive to the session protocol; carries no payload content.
218
218
  */
219
219
  export * from "./run-lifecycle.js";
220
+ /** Shared fail-closed byte-limit policy used by independent HTTP adapters. */
221
+ export * from "./transport-policy.js";
222
+ /** Validate the complete discriminated event union before a projection or UI consumer sees it. */
220
223
  export declare function isAgentEvent(value: unknown): value is AgentEvent;
221
224
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -6,13 +6,16 @@
6
6
  * framework, model provider, or UI code into an application.
7
7
  */
8
8
  export const AGENT_PROTOCOL_VERSION = 1;
9
+ const MAX_AGENT_EVENT_QUEUE_SIZE = 65_536;
9
10
  /**
10
11
  * Small bounded event stream for RPC clients and UIs. The authoritative event history belongs to
11
12
  * the backend/session store; this live view may drop old transient events if a consumer falls behind.
12
13
  */
13
14
  export function createAgentEventStream(maxQueueSize = 256) {
14
- if (!Number.isSafeInteger(maxQueueSize) || maxQueueSize < 1)
15
- throw new RangeError("agent event stream: maxQueueSize must be a positive safe integer");
15
+ if (!Number.isSafeInteger(maxQueueSize) ||
16
+ maxQueueSize < 1 ||
17
+ maxQueueSize > MAX_AGENT_EVENT_QUEUE_SIZE)
18
+ throw new RangeError(`agent event stream: maxQueueSize must be between 1 and ${MAX_AGENT_EVENT_QUEUE_SIZE}`);
16
19
  const queue = [];
17
20
  const waiters = [];
18
21
  let completed = false;
@@ -96,17 +99,178 @@ export * from "./orchestration.js";
96
99
  * feature negotiation, cursor resume). Additive to the session protocol; carries no payload content.
97
100
  */
98
101
  export * from "./run-lifecycle.js";
102
+ /** Shared fail-closed byte-limit policy used by independent HTTP adapters. */
103
+ export * from "./transport-policy.js";
104
+ const AGENT_TOKEN_RE = /^[A-Za-z0-9._:/-]{1,128}$/;
105
+ const AGENT_MAX_TEXT = 256 * 1024;
106
+ const AGENT_MAX_PAYLOAD_TEXT = 64 * 1024;
107
+ const AGENT_MAX_ARRAY = 256;
108
+ const AGENT_MAX_OBJECT_KEYS = 256;
109
+ const AGENT_MAX_PAYLOAD_DEPTH = 6;
110
+ const AGENT_STATUSES = new Set([
111
+ "idle",
112
+ "running",
113
+ "waiting",
114
+ "completed",
115
+ "failed",
116
+ "stopped",
117
+ ]);
118
+ const AGENT_COMPACTION_REASONS = new Set([
119
+ "manual",
120
+ "threshold",
121
+ "overflow",
122
+ "workflow",
123
+ ]);
124
+ function agentRecord(value) {
125
+ return value !== null && typeof value === "object" && !Array.isArray(value);
126
+ }
127
+ function agentToken(value) {
128
+ return typeof value === "string" && AGENT_TOKEN_RE.test(value);
129
+ }
130
+ function agentText(value, max = AGENT_MAX_TEXT, allowEmpty = true) {
131
+ return (typeof value === "string" &&
132
+ value.length <= max &&
133
+ (allowEmpty || value.length > 0) &&
134
+ !value.includes("\0"));
135
+ }
136
+ function agentCount(value) {
137
+ return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
138
+ }
139
+ function boundedAgentValue(value, depth = 0, state = { remaining: 2_048 }) {
140
+ if (state.remaining-- <= 0 || depth > AGENT_MAX_PAYLOAD_DEPTH)
141
+ return false;
142
+ if (value === null || typeof value === "boolean")
143
+ return true;
144
+ if (typeof value === "string")
145
+ return agentText(value, AGENT_MAX_PAYLOAD_TEXT);
146
+ if (typeof value === "number")
147
+ return Number.isFinite(value) && Math.abs(value) <= Number.MAX_SAFE_INTEGER;
148
+ if (Array.isArray(value))
149
+ return (value.length <= AGENT_MAX_ARRAY &&
150
+ value.every((item) => boundedAgentValue(item, depth + 1, state)));
151
+ if (!agentRecord(value) || Object.keys(value).length > AGENT_MAX_OBJECT_KEYS)
152
+ return false;
153
+ return Object.entries(value).every(([key, child]) => agentText(key, 128, false) && boundedAgentValue(child, depth + 1, state));
154
+ }
155
+ function optionalBoundedAgentValue(record, key) {
156
+ return !Object.hasOwn(record, key) || boundedAgentValue(record[key]);
157
+ }
158
+ function validAgentError(value) {
159
+ if (!agentRecord(value))
160
+ return false;
161
+ return (agentToken(value.code) &&
162
+ agentText(value.message, AGENT_MAX_TEXT, false) &&
163
+ optionalBoundedAgentValue(value, "details"));
164
+ }
165
+ function validAgentSnapshot(value, sessionId) {
166
+ if (!agentRecord(value))
167
+ return false;
168
+ if (value.version !== AGENT_PROTOCOL_VERSION ||
169
+ !agentToken(value.id) ||
170
+ value.id !== sessionId ||
171
+ !agentToken(value.backend) ||
172
+ !agentText(value.cwd, 4_096, false) ||
173
+ typeof value.status !== "string" ||
174
+ !AGENT_STATUSES.has(value.status) ||
175
+ !agentCount(value.createdAt) ||
176
+ !agentCount(value.updatedAt) ||
177
+ !agentCount(value.lastSeq) ||
178
+ !Array.isArray(value.capabilities) ||
179
+ value.capabilities.length > AGENT_MAX_ARRAY ||
180
+ !value.capabilities.every(agentToken))
181
+ return false;
182
+ if (value.activeTurnId !== undefined && !agentToken(value.activeTurnId))
183
+ return false;
184
+ if (value.extensionRevision !== undefined && !agentToken(value.extensionRevision))
185
+ return false;
186
+ return true;
187
+ }
188
+ function validRepairTask(value) {
189
+ if (!agentRecord(value))
190
+ return false;
191
+ return (agentToken(value.id) &&
192
+ (value.verification === "check" ||
193
+ value.verification === "assure" ||
194
+ value.verification === "test") &&
195
+ agentText(value.cwd, 4_096, false) &&
196
+ agentText(value.reason, AGENT_MAX_TEXT, false) &&
197
+ Array.isArray(value.capabilities) &&
198
+ value.capabilities.length <= AGENT_MAX_ARRAY &&
199
+ value.capabilities.every(agentToken) &&
200
+ (value.output === undefined || agentText(value.output)) &&
201
+ optionalBoundedAgentValue(value, "report"));
202
+ }
203
+ /** Validate the complete discriminated event union before a projection or UI consumer sees it. */
99
204
  export function isAgentEvent(value) {
100
- if (value === null || typeof value !== "object" || Array.isArray(value))
205
+ if (!agentRecord(value))
206
+ return false;
207
+ if (value.version !== AGENT_PROTOCOL_VERSION ||
208
+ !agentToken(value.sessionId) ||
209
+ !agentCount(value.seq) ||
210
+ !agentCount(value.at) ||
211
+ typeof value.type !== "string")
101
212
  return false;
102
- const record = value;
103
- return (record.version === AGENT_PROTOCOL_VERSION &&
104
- typeof record.sessionId === "string" &&
105
- typeof record.seq === "number" &&
106
- Number.isSafeInteger(record.seq) &&
107
- typeof record.at === "number" &&
108
- Number.isFinite(record.at) &&
109
- typeof record.type === "string" &&
110
- record.type.includes("."));
213
+ switch (value.type) {
214
+ case "session.started":
215
+ case "session.updated":
216
+ case "session.completed":
217
+ return validAgentSnapshot(value.snapshot, value.sessionId);
218
+ case "turn.started":
219
+ return agentToken(value.turnId) && agentText(value.prompt);
220
+ case "assistant.delta":
221
+ case "assistant.message":
222
+ return agentToken(value.turnId) && agentText(value.text);
223
+ case "tool.started":
224
+ return (agentToken(value.turnId) &&
225
+ agentToken(value.callId) &&
226
+ agentToken(value.name) &&
227
+ optionalBoundedAgentValue(value, "input"));
228
+ case "tool.delta":
229
+ return agentToken(value.turnId) && agentToken(value.callId) && agentText(value.text);
230
+ case "tool.completed":
231
+ return (agentToken(value.turnId) &&
232
+ agentToken(value.callId) &&
233
+ agentToken(value.name) &&
234
+ typeof value.ok === "boolean" &&
235
+ optionalBoundedAgentValue(value, "output") &&
236
+ (value.error === undefined || validAgentError(value.error)));
237
+ case "approval.required":
238
+ return (agentToken(value.turnId) &&
239
+ agentToken(value.approvalId) &&
240
+ agentText(value.action, AGENT_MAX_TEXT, false) &&
241
+ agentToken(value.capability) &&
242
+ (value.reason === undefined || agentText(value.reason)));
243
+ case "approval.resolved":
244
+ return ((value.turnId === undefined || agentToken(value.turnId)) &&
245
+ agentToken(value.approvalId) &&
246
+ typeof value.approved === "boolean" &&
247
+ (value.reason === undefined || agentText(value.reason)));
248
+ case "repair.required":
249
+ return (value.turnId === undefined || agentToken(value.turnId)) && validRepairTask(value.task);
250
+ case "verification.completed":
251
+ return ((value.name === "check" || value.name === "assure" || value.name === "test") &&
252
+ typeof value.ok === "boolean" &&
253
+ optionalBoundedAgentValue(value, "report"));
254
+ case "memory.compacted":
255
+ return (agentCount(value.before) &&
256
+ agentCount(value.after) &&
257
+ typeof value.reason === "string" &&
258
+ AGENT_COMPACTION_REASONS.has(value.reason));
259
+ case "extension.reloaded":
260
+ return (agentToken(value.revision) &&
261
+ Array.isArray(value.loaded) &&
262
+ value.loaded.length <= AGENT_MAX_ARRAY &&
263
+ value.loaded.every(agentToken) &&
264
+ Array.isArray(value.disabled) &&
265
+ value.disabled.length <= AGENT_MAX_ARRAY &&
266
+ value.disabled.every(agentToken) &&
267
+ typeof value.rolledBack === "boolean");
268
+ case "session.failed":
269
+ return validAgentError(value.error) && typeof value.recoverable === "boolean";
270
+ case "session.stopped":
271
+ return value.reason === undefined || agentText(value.reason);
272
+ default:
273
+ return false;
274
+ }
111
275
  }
112
276
  //# sourceMappingURL=index.js.map
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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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Protocol-neutral byte limits for HTTP adapters.
3
+ *
4
+ * MCP's HTTP server and the Agent App browser transport have different wire protocols, but both need
5
+ * the same fail-closed rules when reading an untrusted stream. Keeping this small policy here avoids
6
+ * coupling either adapter to the other while making the limit and cancellation semantics identical.
7
+ */
8
+ export declare const MAX_TRANSPORT_BYTES: number;
9
+ export interface TransportByteLimitOptions {
10
+ readonly minimum?: number;
11
+ readonly maximum?: number;
12
+ readonly label?: string;
13
+ }
14
+ export declare function assertTransportByteLimit(value: number, options?: TransportByteLimitOptions): void;
15
+ /** Parse a decimal Content-Length without allowing malformed or unsafe values to pass as a size. */
16
+ export declare function parseTransportContentLength(value: string | null): number | undefined;
17
+ export type BoundedTransportRead = {
18
+ readonly ok: true;
19
+ readonly bytes: Uint8Array;
20
+ } | {
21
+ readonly ok: false;
22
+ readonly reason: "too-large" | "read-error";
23
+ readonly error?: unknown;
24
+ };
25
+ /** Read a Web stream under one byte cap, canceling the source as soon as the cap is exceeded. */
26
+ export declare function readBoundedTransportBytes(body: ReadableStream<Uint8Array>, maxBytes: number): Promise<BoundedTransportRead>;
27
+ //# sourceMappingURL=transport-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-policy.d.ts","sourceRoot":"","sources":["../src/transport-policy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,mBAAmB,QAAmB,CAAA;AAEnD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,yBAA8B,GACtC,IAAI,CAgBN;AAED,oGAAoG;AACpG,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAUpF;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GACjD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAEjG,iGAAiG;AACjG,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,EAChC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,oBAAoB,CAAC,CAsC/B"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Protocol-neutral byte limits for HTTP adapters.
3
+ *
4
+ * MCP's HTTP server and the Agent App browser transport have different wire protocols, but both need
5
+ * the same fail-closed rules when reading an untrusted stream. Keeping this small policy here avoids
6
+ * coupling either adapter to the other while making the limit and cancellation semantics identical.
7
+ */
8
+ export const MAX_TRANSPORT_BYTES = 64 * 1024 * 1024;
9
+ export function assertTransportByteLimit(value, options = {}) {
10
+ const minimum = options.minimum ?? 0;
11
+ const maximum = options.maximum ?? MAX_TRANSPORT_BYTES;
12
+ if (!Number.isSafeInteger(value) ||
13
+ !Number.isSafeInteger(minimum) ||
14
+ !Number.isSafeInteger(maximum) ||
15
+ minimum < 0 ||
16
+ maximum < minimum ||
17
+ value < minimum ||
18
+ value > maximum) {
19
+ throw new RangeError(`${options.label ?? "transport byte limit"} must be between ${minimum} and ${maximum}`);
20
+ }
21
+ }
22
+ /** Parse a decimal Content-Length without allowing malformed or unsafe values to pass as a size. */
23
+ export function parseTransportContentLength(value) {
24
+ if (value === null || value.length === 0)
25
+ return undefined;
26
+ let length = 0;
27
+ for (let index = 0; index < value.length; index++) {
28
+ const digit = value.charCodeAt(index) - 48;
29
+ if (digit < 0 || digit > 9)
30
+ return undefined;
31
+ length = length * 10 + digit;
32
+ if (!Number.isSafeInteger(length))
33
+ return Number.POSITIVE_INFINITY;
34
+ }
35
+ return length;
36
+ }
37
+ /** Read a Web stream under one byte cap, canceling the source as soon as the cap is exceeded. */
38
+ export async function readBoundedTransportBytes(body, maxBytes) {
39
+ assertTransportByteLimit(maxBytes);
40
+ const reader = body.getReader();
41
+ const chunks = [];
42
+ let total = 0;
43
+ try {
44
+ for (;;) {
45
+ const { done, value } = await reader.read();
46
+ if (done)
47
+ break;
48
+ if (value === undefined || value.byteLength > maxBytes - total) {
49
+ try {
50
+ await reader.cancel();
51
+ }
52
+ catch {
53
+ // Preserve the bounded-read result if the source has already closed.
54
+ }
55
+ return { ok: false, reason: "too-large" };
56
+ }
57
+ total += value.byteLength;
58
+ chunks.push(value);
59
+ }
60
+ }
61
+ catch (error) {
62
+ try {
63
+ await reader.cancel();
64
+ }
65
+ catch {
66
+ // Preserve the original stream error classification.
67
+ }
68
+ return { ok: false, reason: "read-error", error };
69
+ }
70
+ finally {
71
+ reader.releaseLock();
72
+ }
73
+ const bytes = new Uint8Array(total);
74
+ let offset = 0;
75
+ for (const chunk of chunks) {
76
+ bytes.set(chunk, offset);
77
+ offset += chunk.byteLength;
78
+ }
79
+ return { ok: true, bytes };
80
+ }
81
+ //# sourceMappingURL=transport-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-policy.js","sourceRoot":"","sources":["../src/transport-policy.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nifrajs/agent-protocol",
3
- "version": "3.3.0",
3
+ "version": "4.0.0",
4
4
  "description": "Small backend-neutral session and event protocol for Nifra coding agents.",
5
5
  "keywords": [
6
6
  "bun",
@@ -11,6 +11,9 @@
11
11
  "rpc"
12
12
  ],
13
13
  "type": "module",
14
+ "nifra": {
15
+ "environment": "library"
16
+ },
14
17
  "main": "./dist/index.js",
15
18
  "module": "./dist/index.js",
16
19
  "types": "./dist/index.d.ts",
package/src/index.ts CHANGED
@@ -294,13 +294,21 @@ export interface AgentEventStream extends AgentEventSink, AsyncIterableIterator<
294
294
  readonly dropped: number
295
295
  }
296
296
 
297
+ const MAX_AGENT_EVENT_QUEUE_SIZE = 65_536
298
+
297
299
  /**
298
300
  * Small bounded event stream for RPC clients and UIs. The authoritative event history belongs to
299
301
  * the backend/session store; this live view may drop old transient events if a consumer falls behind.
300
302
  */
301
303
  export function createAgentEventStream(maxQueueSize = 256): AgentEventStream {
302
- if (!Number.isSafeInteger(maxQueueSize) || maxQueueSize < 1)
303
- throw new RangeError("agent event stream: maxQueueSize must be a positive safe integer")
304
+ if (
305
+ !Number.isSafeInteger(maxQueueSize) ||
306
+ maxQueueSize < 1 ||
307
+ maxQueueSize > MAX_AGENT_EVENT_QUEUE_SIZE
308
+ )
309
+ throw new RangeError(
310
+ `agent event stream: maxQueueSize must be between 1 and ${MAX_AGENT_EVENT_QUEUE_SIZE}`,
311
+ )
304
312
 
305
313
  const queue: AgentEvent[] = []
306
314
  const waiters: Array<{
@@ -389,17 +397,210 @@ export * from "./orchestration.ts"
389
397
  */
390
398
  export * from "./run-lifecycle.ts"
391
399
 
392
- export function isAgentEvent(value: unknown): value is AgentEvent {
393
- if (value === null || typeof value !== "object" || Array.isArray(value)) return false
394
- const record = value as Record<string, unknown>
400
+ /** Shared fail-closed byte-limit policy used by independent HTTP adapters. */
401
+ export * from "./transport-policy.ts"
402
+
403
+ const AGENT_TOKEN_RE = /^[A-Za-z0-9._:/-]{1,128}$/
404
+ const AGENT_MAX_TEXT = 256 * 1024
405
+ const AGENT_MAX_PAYLOAD_TEXT = 64 * 1024
406
+ const AGENT_MAX_ARRAY = 256
407
+ const AGENT_MAX_OBJECT_KEYS = 256
408
+ const AGENT_MAX_PAYLOAD_DEPTH = 6
409
+ const AGENT_STATUSES: ReadonlySet<string> = new Set([
410
+ "idle",
411
+ "running",
412
+ "waiting",
413
+ "completed",
414
+ "failed",
415
+ "stopped",
416
+ ])
417
+ const AGENT_COMPACTION_REASONS: ReadonlySet<string> = new Set([
418
+ "manual",
419
+ "threshold",
420
+ "overflow",
421
+ "workflow",
422
+ ])
423
+
424
+ function agentRecord(value: unknown): value is Record<string, unknown> {
425
+ return value !== null && typeof value === "object" && !Array.isArray(value)
426
+ }
427
+
428
+ function agentToken(value: unknown): value is string {
429
+ return typeof value === "string" && AGENT_TOKEN_RE.test(value)
430
+ }
431
+
432
+ function agentText(value: unknown, max = AGENT_MAX_TEXT, allowEmpty = true): value is string {
433
+ return (
434
+ typeof value === "string" &&
435
+ value.length <= max &&
436
+ (allowEmpty || value.length > 0) &&
437
+ !value.includes("\0")
438
+ )
439
+ }
440
+
441
+ function agentCount(value: unknown): value is number {
442
+ return typeof value === "number" && Number.isSafeInteger(value) && value >= 0
443
+ }
444
+
445
+ function boundedAgentValue(
446
+ value: unknown,
447
+ depth = 0,
448
+ state: { remaining: number } = { remaining: 2_048 },
449
+ ): boolean {
450
+ if (state.remaining-- <= 0 || depth > AGENT_MAX_PAYLOAD_DEPTH) return false
451
+ if (value === null || typeof value === "boolean") return true
452
+ if (typeof value === "string") return agentText(value, AGENT_MAX_PAYLOAD_TEXT)
453
+ if (typeof value === "number")
454
+ return Number.isFinite(value) && Math.abs(value) <= Number.MAX_SAFE_INTEGER
455
+ if (Array.isArray(value))
456
+ return (
457
+ value.length <= AGENT_MAX_ARRAY &&
458
+ value.every((item) => boundedAgentValue(item, depth + 1, state))
459
+ )
460
+ if (!agentRecord(value) || Object.keys(value).length > AGENT_MAX_OBJECT_KEYS) return false
461
+ return Object.entries(value).every(
462
+ ([key, child]) => agentText(key, 128, false) && boundedAgentValue(child, depth + 1, state),
463
+ )
464
+ }
465
+
466
+ function optionalBoundedAgentValue(record: Record<string, unknown>, key: string): boolean {
467
+ return !Object.hasOwn(record, key) || boundedAgentValue(record[key])
468
+ }
469
+
470
+ function validAgentError(value: unknown): boolean {
471
+ if (!agentRecord(value)) return false
395
472
  return (
396
- record.version === AGENT_PROTOCOL_VERSION &&
397
- typeof record.sessionId === "string" &&
398
- typeof record.seq === "number" &&
399
- Number.isSafeInteger(record.seq) &&
400
- typeof record.at === "number" &&
401
- Number.isFinite(record.at) &&
402
- typeof record.type === "string" &&
403
- record.type.includes(".")
473
+ agentToken(value.code) &&
474
+ agentText(value.message, AGENT_MAX_TEXT, false) &&
475
+ optionalBoundedAgentValue(value, "details")
404
476
  )
405
477
  }
478
+
479
+ function validAgentSnapshot(value: unknown, sessionId: string): value is AgentSessionSnapshot {
480
+ if (!agentRecord(value)) return false
481
+ if (
482
+ value.version !== AGENT_PROTOCOL_VERSION ||
483
+ !agentToken(value.id) ||
484
+ value.id !== sessionId ||
485
+ !agentToken(value.backend) ||
486
+ !agentText(value.cwd, 4_096, false) ||
487
+ typeof value.status !== "string" ||
488
+ !AGENT_STATUSES.has(value.status) ||
489
+ !agentCount(value.createdAt) ||
490
+ !agentCount(value.updatedAt) ||
491
+ !agentCount(value.lastSeq) ||
492
+ !Array.isArray(value.capabilities) ||
493
+ value.capabilities.length > AGENT_MAX_ARRAY ||
494
+ !value.capabilities.every(agentToken)
495
+ )
496
+ return false
497
+ if (value.activeTurnId !== undefined && !agentToken(value.activeTurnId)) return false
498
+ if (value.extensionRevision !== undefined && !agentToken(value.extensionRevision)) return false
499
+ return true
500
+ }
501
+
502
+ function validRepairTask(value: unknown): boolean {
503
+ if (!agentRecord(value)) return false
504
+ return (
505
+ agentToken(value.id) &&
506
+ (value.verification === "check" ||
507
+ value.verification === "assure" ||
508
+ value.verification === "test") &&
509
+ agentText(value.cwd, 4_096, false) &&
510
+ agentText(value.reason, AGENT_MAX_TEXT, false) &&
511
+ Array.isArray(value.capabilities) &&
512
+ value.capabilities.length <= AGENT_MAX_ARRAY &&
513
+ value.capabilities.every(agentToken) &&
514
+ (value.output === undefined || agentText(value.output)) &&
515
+ optionalBoundedAgentValue(value, "report")
516
+ )
517
+ }
518
+
519
+ /** Validate the complete discriminated event union before a projection or UI consumer sees it. */
520
+ export function isAgentEvent(value: unknown): value is AgentEvent {
521
+ if (!agentRecord(value)) return false
522
+ if (
523
+ value.version !== AGENT_PROTOCOL_VERSION ||
524
+ !agentToken(value.sessionId) ||
525
+ !agentCount(value.seq) ||
526
+ !agentCount(value.at) ||
527
+ typeof value.type !== "string"
528
+ )
529
+ return false
530
+ switch (value.type) {
531
+ case "session.started":
532
+ case "session.updated":
533
+ case "session.completed":
534
+ return validAgentSnapshot(value.snapshot, value.sessionId)
535
+ case "turn.started":
536
+ return agentToken(value.turnId) && agentText(value.prompt)
537
+ case "assistant.delta":
538
+ case "assistant.message":
539
+ return agentToken(value.turnId) && agentText(value.text)
540
+ case "tool.started":
541
+ return (
542
+ agentToken(value.turnId) &&
543
+ agentToken(value.callId) &&
544
+ agentToken(value.name) &&
545
+ optionalBoundedAgentValue(value, "input")
546
+ )
547
+ case "tool.delta":
548
+ return agentToken(value.turnId) && agentToken(value.callId) && agentText(value.text)
549
+ case "tool.completed":
550
+ return (
551
+ agentToken(value.turnId) &&
552
+ agentToken(value.callId) &&
553
+ agentToken(value.name) &&
554
+ typeof value.ok === "boolean" &&
555
+ optionalBoundedAgentValue(value, "output") &&
556
+ (value.error === undefined || validAgentError(value.error))
557
+ )
558
+ case "approval.required":
559
+ return (
560
+ agentToken(value.turnId) &&
561
+ agentToken(value.approvalId) &&
562
+ agentText(value.action, AGENT_MAX_TEXT, false) &&
563
+ agentToken(value.capability) &&
564
+ (value.reason === undefined || agentText(value.reason))
565
+ )
566
+ case "approval.resolved":
567
+ return (
568
+ (value.turnId === undefined || agentToken(value.turnId)) &&
569
+ agentToken(value.approvalId) &&
570
+ typeof value.approved === "boolean" &&
571
+ (value.reason === undefined || agentText(value.reason))
572
+ )
573
+ case "repair.required":
574
+ return (value.turnId === undefined || agentToken(value.turnId)) && validRepairTask(value.task)
575
+ case "verification.completed":
576
+ return (
577
+ (value.name === "check" || value.name === "assure" || value.name === "test") &&
578
+ typeof value.ok === "boolean" &&
579
+ optionalBoundedAgentValue(value, "report")
580
+ )
581
+ case "memory.compacted":
582
+ return (
583
+ agentCount(value.before) &&
584
+ agentCount(value.after) &&
585
+ typeof value.reason === "string" &&
586
+ AGENT_COMPACTION_REASONS.has(value.reason)
587
+ )
588
+ case "extension.reloaded":
589
+ return (
590
+ agentToken(value.revision) &&
591
+ Array.isArray(value.loaded) &&
592
+ value.loaded.length <= AGENT_MAX_ARRAY &&
593
+ value.loaded.every(agentToken) &&
594
+ Array.isArray(value.disabled) &&
595
+ value.disabled.length <= AGENT_MAX_ARRAY &&
596
+ value.disabled.every(agentToken) &&
597
+ typeof value.rolledBack === "boolean"
598
+ )
599
+ case "session.failed":
600
+ return validAgentError(value.error) && typeof value.recoverable === "boolean"
601
+ case "session.stopped":
602
+ return value.reason === undefined || agentText(value.reason)
603
+ default:
604
+ return false
605
+ }
606
+ }
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Protocol-neutral byte limits for HTTP adapters.
3
+ *
4
+ * MCP's HTTP server and the Agent App browser transport have different wire protocols, but both need
5
+ * the same fail-closed rules when reading an untrusted stream. Keeping this small policy here avoids
6
+ * coupling either adapter to the other while making the limit and cancellation semantics identical.
7
+ */
8
+
9
+ export const MAX_TRANSPORT_BYTES = 64 * 1024 * 1024
10
+
11
+ export interface TransportByteLimitOptions {
12
+ readonly minimum?: number
13
+ readonly maximum?: number
14
+ readonly label?: string
15
+ }
16
+
17
+ export function assertTransportByteLimit(
18
+ value: number,
19
+ options: TransportByteLimitOptions = {},
20
+ ): void {
21
+ const minimum = options.minimum ?? 0
22
+ const maximum = options.maximum ?? MAX_TRANSPORT_BYTES
23
+ if (
24
+ !Number.isSafeInteger(value) ||
25
+ !Number.isSafeInteger(minimum) ||
26
+ !Number.isSafeInteger(maximum) ||
27
+ minimum < 0 ||
28
+ maximum < minimum ||
29
+ value < minimum ||
30
+ value > maximum
31
+ ) {
32
+ throw new RangeError(
33
+ `${options.label ?? "transport byte limit"} must be between ${minimum} and ${maximum}`,
34
+ )
35
+ }
36
+ }
37
+
38
+ /** Parse a decimal Content-Length without allowing malformed or unsafe values to pass as a size. */
39
+ export function parseTransportContentLength(value: string | null): number | undefined {
40
+ if (value === null || value.length === 0) return undefined
41
+ let length = 0
42
+ for (let index = 0; index < value.length; index++) {
43
+ const digit = value.charCodeAt(index) - 48
44
+ if (digit < 0 || digit > 9) return undefined
45
+ length = length * 10 + digit
46
+ if (!Number.isSafeInteger(length)) return Number.POSITIVE_INFINITY
47
+ }
48
+ return length
49
+ }
50
+
51
+ export type BoundedTransportRead =
52
+ | { readonly ok: true; readonly bytes: Uint8Array }
53
+ | { readonly ok: false; readonly reason: "too-large" | "read-error"; readonly error?: unknown }
54
+
55
+ /** Read a Web stream under one byte cap, canceling the source as soon as the cap is exceeded. */
56
+ export async function readBoundedTransportBytes(
57
+ body: ReadableStream<Uint8Array>,
58
+ maxBytes: number,
59
+ ): Promise<BoundedTransportRead> {
60
+ assertTransportByteLimit(maxBytes)
61
+ const reader = body.getReader()
62
+ const chunks: Uint8Array[] = []
63
+ let total = 0
64
+ try {
65
+ for (;;) {
66
+ const { done, value } = await reader.read()
67
+ if (done) break
68
+ if (value === undefined || value.byteLength > maxBytes - total) {
69
+ try {
70
+ await reader.cancel()
71
+ } catch {
72
+ // Preserve the bounded-read result if the source has already closed.
73
+ }
74
+ return { ok: false, reason: "too-large" }
75
+ }
76
+ total += value.byteLength
77
+ chunks.push(value)
78
+ }
79
+ } catch (error) {
80
+ try {
81
+ await reader.cancel()
82
+ } catch {
83
+ // Preserve the original stream error classification.
84
+ }
85
+ return { ok: false, reason: "read-error", error }
86
+ } finally {
87
+ reader.releaseLock()
88
+ }
89
+
90
+ const bytes = new Uint8Array(total)
91
+ let offset = 0
92
+ for (const chunk of chunks) {
93
+ bytes.set(chunk, offset)
94
+ offset += chunk.byteLength
95
+ }
96
+ return { ok: true, bytes }
97
+ }