@agent-vm/agent-portal-sdk 0.0.150 → 0.0.152

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/contract-fixtures/portable-contracts/catalog/catalog-manifest.fixture.json +28 -0
  2. package/contract-fixtures/portable-contracts/catalog/catalog-offer-request.fixture.json +16 -0
  3. package/contract-fixtures/portable-contracts/catalog/catalog-offer-result.fixture.json +12 -0
  4. package/contract-fixtures/portable-contracts/catalog/catalog-prepare-request.fixture.json +12 -0
  5. package/contract-fixtures/portable-contracts/catalog/catalog-prepare-result.fixture.json +12 -0
  6. package/contract-fixtures/portable-contracts/catalog/catalog-read-request.fixture.json +22 -0
  7. package/contract-fixtures/portable-contracts/catalog/catalog-read-result.fixture.json +12 -0
  8. package/contract-fixtures/portable-contracts/catalog/catalog-release-request.fixture.json +18 -0
  9. package/contract-fixtures/portable-contracts/catalog/catalog-release-result.fixture.json +12 -0
  10. package/dist/adapter-boundary/index.d.ts +1 -1
  11. package/dist/approval-surface/index.d.ts +1 -1
  12. package/dist/approval-surface/index.js +1 -1
  13. package/dist/{approval-surface-CfbAG-81.js → approval-surface-BsE8CS3l.js} +3 -3
  14. package/dist/{approval-surface-CfbAG-81.js.map → approval-surface-BsE8CS3l.js.map} +1 -1
  15. package/dist/artifact-surface/index.d.ts +1 -1
  16. package/dist/capability-description-surface/index.d.ts +1 -1
  17. package/dist/capability-description-surface/index.js +1 -1
  18. package/dist/cli/tool-portal.js +13 -5
  19. package/dist/cli/tool-portal.js.map +1 -1
  20. package/dist/contracts/index.d.ts +2 -2
  21. package/dist/contracts/index.js +2 -2
  22. package/dist/{contracts-K6l783Yb.js → contracts-DlvJ0mo0.js} +87 -5
  23. package/dist/contracts-DlvJ0mo0.js.map +1 -0
  24. package/dist/gateway-runtime-client/index.d.ts +5 -5
  25. package/dist/gateway-runtime-client/index.js +6 -6
  26. package/dist/gateway-runtime-local-exec/gateway-runtime-local-exec-helper.js +1 -1
  27. package/dist/gateway-runtime-local-exec/index.js +1 -1
  28. package/dist/{gateway-runtime-local-exec-transport-CO2bQ3wz.js → gateway-runtime-local-exec-transport-CV4xijjZ.js} +2 -2
  29. package/dist/{gateway-runtime-local-exec-transport-CO2bQ3wz.js.map → gateway-runtime-local-exec-transport-CV4xijjZ.js.map} +1 -1
  30. package/dist/generated-tools/index.d.ts +53 -0
  31. package/dist/generated-tools/index.d.ts.map +1 -0
  32. package/dist/generated-tools/index.js +56 -0
  33. package/dist/generated-tools/index.js.map +1 -0
  34. package/dist/{index-BdK9cTP_.d.ts → index-BArHO3EQ.d.ts} +3 -3
  35. package/dist/{index-BdK9cTP_.d.ts.map → index-BArHO3EQ.d.ts.map} +1 -1
  36. package/dist/{index-E3B9TETl.d.ts → index-BU_dNZIt.d.ts} +1 -1
  37. package/dist/{index-E3B9TETl.d.ts.map → index-BU_dNZIt.d.ts.map} +1 -1
  38. package/dist/{index-D_69tlLY.d.ts → index-BiZZR4uU.d.ts} +1 -1
  39. package/dist/{index-D_69tlLY.d.ts.map → index-BiZZR4uU.d.ts.map} +1 -1
  40. package/dist/{index-DDLN0DE_.d.ts → index-C8Wl2up5.d.ts} +2 -2
  41. package/dist/{index-DDLN0DE_.d.ts.map → index-C8Wl2up5.d.ts.map} +1 -1
  42. package/dist/{index-ksJ4wmQG.d.ts → index-CPKrnpa6.d.ts} +180 -2
  43. package/dist/index-CPKrnpa6.d.ts.map +1 -0
  44. package/dist/{index-DZJH4Rau.d.ts → index-Cwtjtz8S.d.ts} +11 -11
  45. package/dist/{index-DZJH4Rau.d.ts.map → index-Cwtjtz8S.d.ts.map} +1 -1
  46. package/dist/{index-DwxCTubj.d.ts → index-D6WrkwXg.d.ts} +1 -1
  47. package/dist/{index-DwxCTubj.d.ts.map → index-D6WrkwXg.d.ts.map} +1 -1
  48. package/dist/{index-CLHNSgWL.d.ts → index-DFOVxirw.d.ts} +6 -6
  49. package/dist/{index-CLHNSgWL.d.ts.map → index-DFOVxirw.d.ts.map} +1 -1
  50. package/dist/{index-ByBEiqZp.d.ts → index-DO3Rrknf.d.ts} +2 -2
  51. package/dist/{index-ByBEiqZp.d.ts.map → index-DO3Rrknf.d.ts.map} +1 -1
  52. package/dist/{index-B5Yuf_ir.d.ts → index-DfnyhwPE.d.ts} +4 -4
  53. package/dist/{index-B5Yuf_ir.d.ts.map → index-DfnyhwPE.d.ts.map} +1 -1
  54. package/dist/index.d.ts +19 -12
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +27 -11
  57. package/dist/index.js.map +1 -0
  58. package/dist/{json-value-schema-CwDmttWU.d.ts → json-value-schema-CBPcpqFG.d.ts} +1 -1
  59. package/dist/{json-value-schema-CwDmttWU.d.ts.map → json-value-schema-CBPcpqFG.d.ts.map} +1 -1
  60. package/dist/local-transport-75M3QuSr.js +383 -0
  61. package/dist/local-transport-75M3QuSr.js.map +1 -0
  62. package/dist/local-transport-LampGTSy.js +2 -0
  63. package/dist/portable-contracts/index.d.ts +1 -1
  64. package/dist/portable-contracts/index.js +1 -1
  65. package/dist/{portable-contracts-D7axGgu1.js → portable-contracts-j7lwJkzK.js} +43 -7
  66. package/dist/portable-contracts-j7lwJkzK.js.map +1 -0
  67. package/dist/{portal-call-request-schema-B1dbBjmW.js → portal-call-request-schema-8wgpdxjI.js} +2 -2
  68. package/dist/{portal-call-request-schema-B1dbBjmW.js.map → portal-call-request-schema-8wgpdxjI.js.map} +1 -1
  69. package/dist/{portal-call-result-schema-BEPp8X4z.d.ts → portal-call-result-schema-DvW6QIxq.d.ts} +78 -78
  70. package/dist/{portal-call-result-schema-BEPp8X4z.d.ts.map → portal-call-result-schema-DvW6QIxq.d.ts.map} +1 -1
  71. package/dist/{portal-call-result-schema-DVJ6FyTz.js → portal-call-result-schema-bjzGidd5.js} +3 -3
  72. package/dist/{portal-call-result-schema-DVJ6FyTz.js.map → portal-call-result-schema-bjzGidd5.js.map} +1 -1
  73. package/dist/portal-call-surface/index.d.ts +2 -2
  74. package/dist/portal-call-surface/index.js +4 -4
  75. package/dist/{portal-call-surface-BPVX-rjw.js → portal-call-surface-CG609sIB.js} +5 -5
  76. package/dist/{portal-call-surface-BPVX-rjw.js.map → portal-call-surface-CG609sIB.js.map} +1 -1
  77. package/dist/portal-error-schema-Ft5ydM8F.js +25 -0
  78. package/dist/portal-error-schema-Ft5ydM8F.js.map +1 -0
  79. package/dist/portal-event-surface/index.d.ts +1 -1
  80. package/dist/portal-event-surface/index.js +2 -2
  81. package/dist/{portal-event-surface-Z76kra2a.js → portal-event-surface-AGsuU_aJ.js} +3 -3
  82. package/dist/{portal-event-surface-Z76kra2a.js.map → portal-event-surface-AGsuU_aJ.js.map} +1 -1
  83. package/dist/safe-diagnostic-schema-CpcrwZlp.js +51 -0
  84. package/dist/safe-diagnostic-schema-CpcrwZlp.js.map +1 -0
  85. package/dist/testing/index.d.ts +2 -2
  86. package/dist/testing/index.js +2 -2
  87. package/dist/tool-portal-mcp-client/index.d.ts +1 -1
  88. package/dist/tool-portal-mcp-client/index.js +1 -1
  89. package/dist/tool-portal-mcp-client/node-tool-portal-mcp-transport.d.ts +1 -1
  90. package/dist/{tool-portal-mcp-client-DSDLoZ5e.js → tool-portal-mcp-client-CKnzM8W5.js} +4 -4
  91. package/dist/{tool-portal-mcp-client-DSDLoZ5e.js.map → tool-portal-mcp-client-CKnzM8W5.js.map} +1 -1
  92. package/package.json +6 -2
  93. package/portable-contract-schema-manifest.json +607 -0
  94. package/dist/contracts-K6l783Yb.js.map +0 -1
  95. package/dist/index-ksJ4wmQG.d.ts.map +0 -1
  96. package/dist/portable-contracts-D7axGgu1.js.map +0 -1
  97. package/dist/portal-error-schema-TSNrpQSy.js +0 -52
  98. package/dist/portal-error-schema-TSNrpQSy.js.map +0 -1
  99. package/dist/request-id-schema-DQ84TX-D.js +0 -23
  100. package/dist/request-id-schema-DQ84TX-D.js.map +0 -1
  101. /package/dist/{capability-description-surface-DKZLjpG4.js → capability-description-surface-BFRN8Ohb.js} +0 -0
@@ -0,0 +1,383 @@
1
+ import { o as JsonValueSchema } from "./json-value-schema-rxMrw9uZ.js";
2
+ import { a as PortalArtifactReadRequestSchema, o as PortalArtifactReadResultSchema, r as createPortalArtifactReadResourceRequest } from "./artifact-surface-Db5KQOA0.js";
3
+ import "./contracts-DlvJ0mo0.js";
4
+ import { a as encodeCanonicalJson } from "./portable-contracts-j7lwJkzK.js";
5
+ import { z } from "zod";
6
+ import { createConnection } from "node:net";
7
+ import { isAbsolute } from "node:path";
8
+ //#region src/tool-vm-relay/relay-protocol.ts
9
+ const MAX_RELAY_MESSAGE_BYTES = 1048576;
10
+ const MAX_RELAY_HEADER_BYTES = 8192;
11
+ const relayRequestId = z.string().min(1);
12
+ const jsonObject = z.record(z.string(), JsonValueSchema);
13
+ const RelayMessageSchema = z.discriminatedUnion("kind", [
14
+ z.object({
15
+ kind: z.literal("hello"),
16
+ version: z.literal(1)
17
+ }).strict(),
18
+ z.object({
19
+ kind: z.literal("ready"),
20
+ version: z.literal(1),
21
+ maxMessageBytes: z.number().int().positive().max(MAX_RELAY_MESSAGE_BYTES),
22
+ maxPendingRequests: z.number().int().positive().max(16)
23
+ }).strict(),
24
+ z.object({
25
+ kind: z.literal("request"),
26
+ requestId: relayRequestId,
27
+ operation: z.enum([
28
+ "list",
29
+ "search",
30
+ "describe",
31
+ "call",
32
+ "artifact-read"
33
+ ]),
34
+ request: jsonObject
35
+ }).strict(),
36
+ z.object({
37
+ kind: z.literal("result"),
38
+ requestId: relayRequestId,
39
+ result: jsonObject
40
+ }).strict(),
41
+ z.object({
42
+ kind: z.literal("error"),
43
+ requestId: relayRequestId,
44
+ code: z.string().min(1).max(128),
45
+ dispatch: z.enum([
46
+ "not-dispatched",
47
+ "uncertain",
48
+ "completed"
49
+ ])
50
+ }).strict(),
51
+ z.object({
52
+ kind: z.literal("cancel"),
53
+ requestId: relayRequestId
54
+ }).strict(),
55
+ z.object({ kind: z.literal("close") }).strict(),
56
+ z.object({
57
+ kind: z.literal("credit"),
58
+ requests: z.number().int().min(0).max(16),
59
+ bytes: z.number().int().min(0).max(64 * 1024 * 1024)
60
+ }).strict(),
61
+ z.object({
62
+ kind: z.literal("artifact-chunk"),
63
+ requestId: relayRequestId,
64
+ reference: jsonObject,
65
+ offsetBytes: z.number().int().nonnegative(),
66
+ contentBase64: z.string().max(9e4)
67
+ }).strict(),
68
+ z.object({
69
+ kind: z.literal("artifact-end"),
70
+ requestId: relayRequestId,
71
+ reference: jsonObject,
72
+ offsetBytes: z.number().int().nonnegative(),
73
+ byteLength: z.number().int().min(0).max(16 * 1024 * 1024),
74
+ truncated: z.boolean(),
75
+ mediaType: z.string().optional()
76
+ }).strict()
77
+ ]);
78
+ function parseRelayJson(body) {
79
+ const parsed = JSON.parse(body);
80
+ const stack = [];
81
+ for (const tokenMatch of body.matchAll(/"(?:[^"\\]|\\.)*"|[{}[\],:]/gu)) {
82
+ const token = tokenMatch[0];
83
+ if (token === "{") {
84
+ stack.push({
85
+ kind: "object",
86
+ keys: /* @__PURE__ */ new Set(),
87
+ expectsKey: true
88
+ });
89
+ continue;
90
+ }
91
+ if (token === "[") {
92
+ stack.push({ kind: "array" });
93
+ continue;
94
+ }
95
+ if (token === "}" || token === "]") {
96
+ stack.pop();
97
+ continue;
98
+ }
99
+ const current = stack.at(-1);
100
+ if (current?.kind !== "object") continue;
101
+ if (token === ",") {
102
+ current.expectsKey = true;
103
+ continue;
104
+ }
105
+ if (token === ":") {
106
+ current.expectsKey = false;
107
+ continue;
108
+ }
109
+ if (current.expectsKey && token.startsWith("\"")) {
110
+ const key = JSON.parse(token);
111
+ if (typeof key !== "string" || current.keys.has(key)) throw new Error("Duplicate relay JSON key.");
112
+ current.keys.add(key);
113
+ }
114
+ }
115
+ return parsed;
116
+ }
117
+ function encodeRelayFrame(message) {
118
+ const body = Buffer.from(JSON.stringify(RelayMessageSchema.parse(message)), "utf8");
119
+ if (body.byteLength > 1048576) throw new Error("Relay message exceeds its byte limit.");
120
+ return Buffer.concat([Buffer.from(`Content-Length: ${body.byteLength}\r\n\r\n`), body]);
121
+ }
122
+ var PortalRelayDecoder = class {
123
+ #buffer = Buffer.alloc(0);
124
+ #bodyLength;
125
+ #failed = false;
126
+ #utf8 = new TextDecoder("utf-8", { fatal: true });
127
+ feed(chunk) {
128
+ if (this.#failed) throw new Error("Relay decoder is closed after invalid traffic.");
129
+ try {
130
+ const bufferLimit = MAX_RELAY_MESSAGE_BYTES + MAX_RELAY_HEADER_BYTES;
131
+ if (chunk.byteLength > bufferLimit) throw new Error("Relay input exceeds its buffer limit.");
132
+ const messages = [];
133
+ let position = 0;
134
+ while (position < chunk.byteLength) {
135
+ const capacity = bufferLimit - this.#buffer.byteLength;
136
+ if (capacity <= 0) throw new Error("Relay input exceeds its buffer limit.");
137
+ const end = Math.min(chunk.byteLength, position + capacity);
138
+ this.#buffer = Buffer.concat([this.#buffer, chunk.subarray(position, end)]);
139
+ messages.push(...this.#drain());
140
+ position = end;
141
+ }
142
+ return messages;
143
+ } catch (error) {
144
+ this.#failed = true;
145
+ this.#buffer = Buffer.alloc(0);
146
+ throw error;
147
+ }
148
+ }
149
+ #drain() {
150
+ const messages = [];
151
+ while (true) {
152
+ if (this.#bodyLength === void 0) {
153
+ const delimiter = this.#buffer.indexOf("\r\n\r\n");
154
+ if (delimiter < 0) {
155
+ if (this.#buffer.byteLength > MAX_RELAY_HEADER_BYTES) throw new Error("Relay header exceeds its limit.");
156
+ return messages;
157
+ }
158
+ if (delimiter > MAX_RELAY_HEADER_BYTES) throw new Error("Relay header exceeds its limit.");
159
+ const header = this.#utf8.decode(this.#buffer.subarray(0, delimiter));
160
+ const match = /^Content-Length: ([0-9]{1,7})$/u.exec(header);
161
+ if (!match) throw new Error("Malformed relay header.");
162
+ this.#bodyLength = Number(match[1]);
163
+ if (this.#bodyLength < 1 || this.#bodyLength > 1048576) throw new Error("Relay body exceeds its limit.");
164
+ this.#buffer = this.#buffer.subarray(delimiter + 4);
165
+ }
166
+ if (this.#buffer.byteLength < this.#bodyLength) return messages;
167
+ const body = this.#utf8.decode(this.#buffer.subarray(0, this.#bodyLength));
168
+ this.#buffer = this.#buffer.subarray(this.#bodyLength);
169
+ this.#bodyLength = void 0;
170
+ messages.push(RelayMessageSchema.parse(parseRelayJson(body)));
171
+ }
172
+ }
173
+ };
174
+ //#endregion
175
+ //#region src/tool-vm-relay/local-transport.ts
176
+ function classifyLocalToolPortalSocketFailure(error) {
177
+ if (typeof error !== "object" || error === null || !("code" in error)) return "other";
178
+ const code = error.code;
179
+ switch (code) {
180
+ case "EACCES":
181
+ case "ECONNREFUSED":
182
+ case "ECONNRESET":
183
+ case "ENAMETOOLONG":
184
+ case "ENOENT":
185
+ case "ETIMEDOUT": return code;
186
+ default: return "other";
187
+ }
188
+ }
189
+ function portalOperation(name) {
190
+ switch (name) {
191
+ case "tool_portal_list": return "list";
192
+ case "tool_portal_search": return "search";
193
+ case "tool_portal_describe": return "describe";
194
+ case "tool_portal_call": return "call";
195
+ default: throw new Error("Only Portal operations are available in the managed transport.");
196
+ }
197
+ }
198
+ function createLocalToolPortalTransport(props) {
199
+ const socketPath = props.environment["AGENT_VM_TOOL_PORTAL_SOCKET"];
200
+ if (!socketPath) throw new Error("No managed Portal execution context is available.");
201
+ if (!isAbsolute(socketPath) || socketPath.includes("\0")) throw new Error("Portal socket requires an absolute guest path.");
202
+ let socket;
203
+ let ready = false;
204
+ let closed = false;
205
+ let nextId = 0;
206
+ let maximumPending = 16;
207
+ let maximumMessageBytes = 1048576;
208
+ let socketPhase = "connecting";
209
+ let handshake;
210
+ const pending = /* @__PURE__ */ new Map();
211
+ const decoder = new PortalRelayDecoder();
212
+ function fail(error) {
213
+ closed = true;
214
+ ready = false;
215
+ handshake?.reject(error);
216
+ handshake = void 0;
217
+ for (const request of pending.values()) {
218
+ request.cleanup();
219
+ request.reject(error);
220
+ }
221
+ pending.clear();
222
+ socket?.destroy();
223
+ }
224
+ function finish(requestId, value) {
225
+ const request = pending.get(requestId);
226
+ if (!request) throw new Error("Unexpected Portal response ID.");
227
+ pending.delete(requestId);
228
+ request.cleanup();
229
+ request.resolve(value);
230
+ }
231
+ function receiveArtifact(message, request) {
232
+ const assembly = request.artifact;
233
+ if (!assembly || encodeCanonicalJson(message.reference) !== encodeCanonicalJson(assembly.request.reference)) throw new Error("Unexpected artifact reference.");
234
+ if (message.kind === "artifact-chunk") {
235
+ const bytes = Buffer.from(message.contentBase64, "base64");
236
+ if (message.offsetBytes !== assembly.request.offsetBytes + assembly.bytes || bytes.length === 0 || bytes.length > 65536 || bytes.toString("base64") !== message.contentBase64 || assembly.bytes + bytes.length > assembly.request.maxBytes) throw new Error("Invalid artifact chunk position or bounds.");
237
+ assembly.chunks.push(bytes);
238
+ assembly.bytes += bytes.length;
239
+ return;
240
+ }
241
+ const expected = Math.min(assembly.request.maxBytes, Math.max(0, assembly.request.reference.byteLength - assembly.request.offsetBytes));
242
+ if (message.offsetBytes !== assembly.request.offsetBytes || message.byteLength !== assembly.bytes || assembly.bytes !== expected || message.truncated !== message.offsetBytes + assembly.bytes < assembly.request.reference.byteLength) throw new Error("Invalid artifact completion.");
243
+ finish(message.requestId, {
244
+ contentBase64: Buffer.concat(assembly.chunks).toString("base64"),
245
+ reference: message.reference,
246
+ offsetBytes: message.offsetBytes,
247
+ truncated: message.truncated,
248
+ ...message.mediaType === void 0 ? {} : { mediaType: message.mediaType }
249
+ });
250
+ }
251
+ function receive(message) {
252
+ if (message.kind === "ready") {
253
+ if (!handshake || ready) throw new Error("Unexpected Portal handshake.");
254
+ maximumPending = message.maxPendingRequests;
255
+ maximumMessageBytes = message.maxMessageBytes;
256
+ ready = true;
257
+ socketPhase = "active";
258
+ handshake.resolve();
259
+ handshake = void 0;
260
+ return;
261
+ }
262
+ if (!("requestId" in message)) throw new Error("Unexpected Portal frame.");
263
+ const request = pending.get(message.requestId);
264
+ if (!request) throw new Error("Unexpected Portal response identity.");
265
+ if (message.kind === "artifact-chunk" || message.kind === "artifact-end") {
266
+ receiveArtifact(message, request);
267
+ return;
268
+ }
269
+ if (message.kind === "result") {
270
+ finish(message.requestId, message.result);
271
+ return;
272
+ }
273
+ if (message.kind === "error") {
274
+ pending.delete(message.requestId);
275
+ request.cleanup();
276
+ request.reject(/* @__PURE__ */ new Error(`Portal relay request failed (${message.code}); dispatch=${message.dispatch}.`));
277
+ return;
278
+ }
279
+ throw new Error("Unexpected Portal response kind.");
280
+ }
281
+ async function requestOperation(operation, argumentsValue, options, artifact) {
282
+ const signal = options?.signal;
283
+ const graceMs = options?.resultGraceAfterAbortMs;
284
+ if (graceMs !== void 0 && (!Number.isInteger(graceMs) || graceMs <= 0)) throw new TypeError("Tool Portal canonical-result grace must be a positive integer.");
285
+ if (!ready || closed || !socket) throw new Error("Portal execution connection is unavailable.");
286
+ if (signal?.aborted) throw new Error("Portal request cancelled before dispatch.");
287
+ if (pending.size >= maximumPending || artifact && [...pending.values()].some((request) => request.artifact)) throw new Error("Portal request capacity exceeded before dispatch.");
288
+ const requestId = String(++nextId);
289
+ const frame = encodeRelayFrame({
290
+ kind: "request",
291
+ requestId,
292
+ operation,
293
+ request: argumentsValue
294
+ });
295
+ if (frame.byteLength - frame.indexOf("\r\n\r\n") - 4 > maximumMessageBytes) throw new Error("Portal message exceeds negotiated limit before dispatch.");
296
+ const activeSocket = socket;
297
+ return await new Promise((resolve, reject) => {
298
+ let graceTimer;
299
+ const abort = () => {
300
+ activeSocket.write(encodeRelayFrame({
301
+ kind: "cancel",
302
+ requestId
303
+ }));
304
+ const rejectCancelled = () => reject(/* @__PURE__ */ new Error("Portal request cancelled; its effect may be uncertain."));
305
+ if (graceMs === void 0) rejectCancelled();
306
+ else graceTimer = setTimeout(rejectCancelled, graceMs);
307
+ };
308
+ pending.set(requestId, {
309
+ resolve,
310
+ reject,
311
+ cleanup: () => {
312
+ signal?.removeEventListener("abort", abort);
313
+ if (graceTimer !== void 0) clearTimeout(graceTimer);
314
+ },
315
+ ...artifact === void 0 ? {} : { artifact: {
316
+ request: artifact,
317
+ chunks: [],
318
+ bytes: 0
319
+ } }
320
+ });
321
+ signal?.addEventListener("abort", abort, { once: true });
322
+ activeSocket.write(frame);
323
+ });
324
+ }
325
+ return {
326
+ connect: async () => {
327
+ if (closed || socket) throw new Error("Portal transport is already connected or closed.");
328
+ await new Promise((resolve, reject) => {
329
+ const timer = setTimeout(() => fail(/* @__PURE__ */ new Error("Portal handshake timeout.")), 5e3);
330
+ handshake = {
331
+ resolve: () => {
332
+ clearTimeout(timer);
333
+ resolve();
334
+ },
335
+ reject: (error) => {
336
+ clearTimeout(timer);
337
+ reject(error);
338
+ }
339
+ };
340
+ socket = createConnection(socketPath);
341
+ socket.once("connect", () => {
342
+ socketPhase = "negotiating";
343
+ socket?.write(encodeRelayFrame({
344
+ kind: "hello",
345
+ version: 1
346
+ }));
347
+ });
348
+ socket.on("data", (chunk) => {
349
+ try {
350
+ for (const message of decoder.feed(chunk)) receive(message);
351
+ } catch {
352
+ fail(/* @__PURE__ */ new Error("Invalid Portal traffic; outstanding effects may be uncertain."));
353
+ }
354
+ });
355
+ socket.once("error", (error) => fail(/* @__PURE__ */ new Error(`Portal connection failed; phase=${socketPhase}; code=${classifyLocalToolPortalSocketFailure(error)}; outstanding effects may be uncertain.`)));
356
+ socket.once("close", () => fail(/* @__PURE__ */ new Error("Portal connection ended; outstanding effects may be uncertain.")));
357
+ });
358
+ },
359
+ close: async () => {
360
+ fail(/* @__PURE__ */ new Error("Portal client closed; outstanding effects may be uncertain."));
361
+ },
362
+ callTool: async (call, options) => {
363
+ const operation = portalOperation(call.name);
364
+ if (call.approvalToken !== void 0) throw new Error("Managed Portal cannot accept standalone approval tokens.");
365
+ return { structuredContent: await requestOperation(operation, call.arguments, options) };
366
+ },
367
+ readResource: async (request, options) => {
368
+ const range = PortalArtifactReadRequestSchema.parse(request["_meta"]["agent-vm/artifact-read-request"]);
369
+ if (encodeCanonicalJson(createPortalArtifactReadResourceRequest(range)) !== encodeCanonicalJson(request)) throw new Error("Artifact URI and range do not match.");
370
+ const result = PortalArtifactReadResultSchema.parse(await requestOperation("artifact-read", range, options, range));
371
+ return { contents: [{
372
+ kind: "blob",
373
+ blob: result.contentBase64,
374
+ uri: request.uri,
375
+ ...result.mediaType === void 0 ? {} : { mediaType: result.mediaType }
376
+ }] };
377
+ }
378
+ };
379
+ }
380
+ //#endregion
381
+ export { createLocalToolPortalTransport as n, classifyLocalToolPortalSocketFailure as t };
382
+
383
+ //# sourceMappingURL=local-transport-75M3QuSr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-transport-75M3QuSr.js","names":["#utf8","#failed","#buffer","#drain","#bodyLength"],"sources":["../src/tool-vm-relay/relay-protocol.ts","../src/tool-vm-relay/local-transport.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport { JsonValueSchema } from '../contract-primitives/index.js';\n\nexport const MAX_RELAY_MESSAGE_BYTES = 1_048_576;\nconst MAX_RELAY_HEADER_BYTES = 8_192;\nconst relayRequestId = z.string().min(1);\nconst jsonObject = z.record(z.string(), JsonValueSchema);\n\nexport const RelayMessageSchema = z.discriminatedUnion('kind', [\n\tz.object({ kind: z.literal('hello'), version: z.literal(1) }).strict(),\n\tz\n\t\t.object({\n\t\t\tkind: z.literal('ready'),\n\t\t\tversion: z.literal(1),\n\t\t\tmaxMessageBytes: z.number().int().positive().max(MAX_RELAY_MESSAGE_BYTES),\n\t\t\tmaxPendingRequests: z.number().int().positive().max(16),\n\t\t})\n\t\t.strict(),\n\tz\n\t\t.object({\n\t\t\tkind: z.literal('request'),\n\t\t\trequestId: relayRequestId,\n\t\t\toperation: z.enum(['list', 'search', 'describe', 'call', 'artifact-read']),\n\t\t\trequest: jsonObject,\n\t\t})\n\t\t.strict(),\n\tz.object({ kind: z.literal('result'), requestId: relayRequestId, result: jsonObject }).strict(),\n\tz\n\t\t.object({\n\t\t\tkind: z.literal('error'),\n\t\t\trequestId: relayRequestId,\n\t\t\tcode: z.string().min(1).max(128),\n\t\t\tdispatch: z.enum(['not-dispatched', 'uncertain', 'completed']),\n\t\t})\n\t\t.strict(),\n\tz.object({ kind: z.literal('cancel'), requestId: relayRequestId }).strict(),\n\tz.object({ kind: z.literal('close') }).strict(),\n\tz\n\t\t.object({\n\t\t\tkind: z.literal('credit'),\n\t\t\trequests: z.number().int().min(0).max(16),\n\t\t\tbytes: z\n\t\t\t\t.number()\n\t\t\t\t.int()\n\t\t\t\t.min(0)\n\t\t\t\t.max(64 * 1024 * 1024),\n\t\t})\n\t\t.strict(),\n\tz\n\t\t.object({\n\t\t\tkind: z.literal('artifact-chunk'),\n\t\t\trequestId: relayRequestId,\n\t\t\treference: jsonObject,\n\t\t\toffsetBytes: z.number().int().nonnegative(),\n\t\t\tcontentBase64: z.string().max(90_000),\n\t\t})\n\t\t.strict(),\n\tz\n\t\t.object({\n\t\t\tkind: z.literal('artifact-end'),\n\t\t\trequestId: relayRequestId,\n\t\t\treference: jsonObject,\n\t\t\toffsetBytes: z.number().int().nonnegative(),\n\t\t\tbyteLength: z\n\t\t\t\t.number()\n\t\t\t\t.int()\n\t\t\t\t.min(0)\n\t\t\t\t.max(16 * 1024 * 1024),\n\t\t\ttruncated: z.boolean(),\n\t\t\tmediaType: z.string().optional(),\n\t\t})\n\t\t.strict(),\n]);\n\nexport type RelayMessage = z.infer<typeof RelayMessageSchema>;\n\nfunction parseRelayJson(body: string): unknown {\n\tconst parsed: unknown = JSON.parse(body);\n\t// JSON.parse accepts duplicate keys. Inspect only structural tokens after it\n\t// has validated syntax, decoding key escapes before checking uniqueness.\n\tconst stack: ({ kind: 'object'; keys: Set<string>; expectsKey: boolean } | { kind: 'array' })[] =\n\t\t[];\n\tfor (const tokenMatch of body.matchAll(/\"(?:[^\"\\\\]|\\\\.)*\"|[{}[\\],:]/gu)) {\n\t\tconst token = tokenMatch[0];\n\t\tif (token === '{') {\n\t\t\tstack.push({ kind: 'object', keys: new Set(), expectsKey: true });\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === '[') {\n\t\t\tstack.push({ kind: 'array' });\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === '}' || token === ']') {\n\t\t\tstack.pop();\n\t\t\tcontinue;\n\t\t}\n\t\tconst current = stack.at(-1);\n\t\tif (current?.kind !== 'object') continue;\n\t\tif (token === ',') {\n\t\t\tcurrent.expectsKey = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (token === ':') {\n\t\t\tcurrent.expectsKey = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (current.expectsKey && token.startsWith('\"')) {\n\t\t\tconst key: unknown = JSON.parse(token);\n\t\t\tif (typeof key !== 'string' || current.keys.has(key))\n\t\t\t\tthrow new Error('Duplicate relay JSON key.');\n\t\t\tcurrent.keys.add(key);\n\t\t}\n\t}\n\treturn parsed;\n}\n\nexport function encodeRelayFrame(message: unknown): Buffer {\n\tconst body = Buffer.from(JSON.stringify(RelayMessageSchema.parse(message)), 'utf8');\n\tif (body.byteLength > MAX_RELAY_MESSAGE_BYTES)\n\t\tthrow new Error('Relay message exceeds its byte limit.');\n\treturn Buffer.concat([Buffer.from(`Content-Length: ${body.byteLength}\\r\\n\\r\\n`), body]);\n}\n\nexport class PortalRelayDecoder {\n\t#buffer: Buffer = Buffer.alloc(0);\n\t#bodyLength: number | undefined;\n\t#failed = false;\n\treadonly #utf8 = new TextDecoder('utf-8', { fatal: true });\n\n\tfeed(chunk: Uint8Array): readonly RelayMessage[] {\n\t\tif (this.#failed) throw new Error('Relay decoder is closed after invalid traffic.');\n\t\ttry {\n\t\t\tconst bufferLimit = MAX_RELAY_MESSAGE_BYTES + MAX_RELAY_HEADER_BYTES;\n\t\t\tif (chunk.byteLength > bufferLimit) throw new Error('Relay input exceeds its buffer limit.');\n\t\t\tconst messages: RelayMessage[] = [];\n\t\t\tlet position = 0;\n\t\t\twhile (position < chunk.byteLength) {\n\t\t\t\tconst capacity = bufferLimit - this.#buffer.byteLength;\n\t\t\t\tif (capacity <= 0) throw new Error('Relay input exceeds its buffer limit.');\n\t\t\t\tconst end = Math.min(chunk.byteLength, position + capacity);\n\t\t\t\tthis.#buffer = Buffer.concat([this.#buffer, chunk.subarray(position, end)]);\n\t\t\t\tmessages.push(...this.#drain());\n\t\t\t\tposition = end;\n\t\t\t}\n\t\t\treturn messages;\n\t\t} catch (error: unknown) {\n\t\t\tthis.#failed = true;\n\t\t\tthis.#buffer = Buffer.alloc(0);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t#drain(): readonly RelayMessage[] {\n\t\tconst messages: RelayMessage[] = [];\n\t\twhile (true) {\n\t\t\tif (this.#bodyLength === undefined) {\n\t\t\t\tconst delimiter = this.#buffer.indexOf('\\r\\n\\r\\n');\n\t\t\t\tif (delimiter < 0) {\n\t\t\t\t\tif (this.#buffer.byteLength > MAX_RELAY_HEADER_BYTES)\n\t\t\t\t\t\tthrow new Error('Relay header exceeds its limit.');\n\t\t\t\t\treturn messages;\n\t\t\t\t}\n\t\t\t\tif (delimiter > MAX_RELAY_HEADER_BYTES) throw new Error('Relay header exceeds its limit.');\n\t\t\t\tconst header = this.#utf8.decode(this.#buffer.subarray(0, delimiter));\n\t\t\t\tconst match = /^Content-Length: ([0-9]{1,7})$/u.exec(header);\n\t\t\t\tif (!match) throw new Error('Malformed relay header.');\n\t\t\t\tthis.#bodyLength = Number(match[1]);\n\t\t\t\tif (this.#bodyLength < 1 || this.#bodyLength > MAX_RELAY_MESSAGE_BYTES)\n\t\t\t\t\tthrow new Error('Relay body exceeds its limit.');\n\t\t\t\tthis.#buffer = this.#buffer.subarray(delimiter + 4);\n\t\t\t}\n\t\t\tif (this.#buffer.byteLength < this.#bodyLength) return messages;\n\t\t\tconst body = this.#utf8.decode(this.#buffer.subarray(0, this.#bodyLength));\n\t\t\tthis.#buffer = this.#buffer.subarray(this.#bodyLength);\n\t\t\tthis.#bodyLength = undefined;\n\t\t\tmessages.push(RelayMessageSchema.parse(parseRelayJson(body)));\n\t\t}\n\t}\n}\n","import { createConnection, type Socket } from 'node:net';\nimport { isAbsolute } from 'node:path';\n\nimport {\n\tcreatePortalArtifactReadResourceRequest,\n\tPortalArtifactReadRequestSchema,\n\tPortalArtifactReadResultSchema,\n\ttype PortalArtifactReadRequest,\n} from '../artifact-surface/index.js';\nimport { encodeCanonicalJson } from '../portable-contracts/index.js';\nimport type { ToolPortalMcpTransport } from '../tool-portal-mcp-client/index.js';\nimport { encodeRelayFrame, PortalRelayDecoder, type RelayMessage } from './relay-protocol.js';\n\ninterface PendingRequest {\n\treadonly resolve: (value: unknown) => void;\n\treadonly reject: (error: Error) => void;\n\treadonly cleanup: () => void;\n\treadonly artifact?: {\n\t\treadonly request: PortalArtifactReadRequest;\n\t\treadonly chunks: Buffer[];\n\t\tbytes: number;\n\t};\n}\n\ntype PortalSocketPhase = 'active' | 'connecting' | 'negotiating';\ntype PortalSocketFailureCode =\n\t| 'EACCES'\n\t| 'ECONNREFUSED'\n\t| 'ECONNRESET'\n\t| 'ENAMETOOLONG'\n\t| 'ENOENT'\n\t| 'ETIMEDOUT'\n\t| 'other';\n\nexport function classifyLocalToolPortalSocketFailure(error: unknown): PortalSocketFailureCode {\n\tif (typeof error !== 'object' || error === null || !('code' in error)) return 'other';\n\tconst code = error.code;\n\tswitch (code) {\n\t\tcase 'EACCES':\n\t\tcase 'ECONNREFUSED':\n\t\tcase 'ECONNRESET':\n\t\tcase 'ENAMETOOLONG':\n\t\tcase 'ENOENT':\n\t\tcase 'ETIMEDOUT':\n\t\t\treturn code;\n\t\tdefault:\n\t\t\treturn 'other';\n\t}\n}\n\nfunction portalOperation(name: string): 'list' | 'search' | 'describe' | 'call' {\n\tswitch (name) {\n\t\tcase 'tool_portal_list':\n\t\t\treturn 'list';\n\t\tcase 'tool_portal_search':\n\t\t\treturn 'search';\n\t\tcase 'tool_portal_describe':\n\t\t\treturn 'describe';\n\t\tcase 'tool_portal_call':\n\t\t\treturn 'call';\n\t\tdefault:\n\t\t\tthrow new Error('Only Portal operations are available in the managed transport.');\n\t}\n}\n\nexport function createLocalToolPortalTransport(props: {\n\treadonly environment: Readonly<Record<string, string | undefined>>;\n}): ToolPortalMcpTransport {\n\tconst socketPath = props.environment['AGENT_VM_TOOL_PORTAL_SOCKET'];\n\tif (!socketPath) throw new Error('No managed Portal execution context is available.');\n\tif (!isAbsolute(socketPath) || socketPath.includes('\\0'))\n\t\tthrow new Error('Portal socket requires an absolute guest path.');\n\tlet socket: Socket | undefined;\n\tlet ready = false;\n\tlet closed = false;\n\tlet nextId = 0;\n\tlet maximumPending = 16;\n\tlet maximumMessageBytes = 1_048_576;\n\tlet socketPhase: PortalSocketPhase = 'connecting';\n\tlet handshake: { resolve: () => void; reject: (error: Error) => void } | undefined;\n\tconst pending = new Map<string, PendingRequest>();\n\tconst decoder = new PortalRelayDecoder();\n\n\tfunction fail(error: Error): void {\n\t\tclosed = true;\n\t\tready = false;\n\t\thandshake?.reject(error);\n\t\thandshake = undefined;\n\t\tfor (const request of pending.values()) {\n\t\t\trequest.cleanup();\n\t\t\trequest.reject(error);\n\t\t}\n\t\tpending.clear();\n\t\tsocket?.destroy();\n\t}\n\n\tfunction finish(requestId: string, value: unknown): void {\n\t\tconst request = pending.get(requestId);\n\t\tif (!request) throw new Error('Unexpected Portal response ID.');\n\t\tpending.delete(requestId);\n\t\trequest.cleanup();\n\t\trequest.resolve(value);\n\t}\n\n\tfunction receiveArtifact(\n\t\tmessage: Extract<RelayMessage, { kind: 'artifact-chunk' | 'artifact-end' }>,\n\t\trequest: PendingRequest,\n\t): void {\n\t\tconst assembly = request.artifact;\n\t\tif (\n\t\t\t!assembly ||\n\t\t\tencodeCanonicalJson(message.reference) !== encodeCanonicalJson(assembly.request.reference)\n\t\t)\n\t\t\tthrow new Error('Unexpected artifact reference.');\n\t\tif (message.kind === 'artifact-chunk') {\n\t\t\tconst bytes = Buffer.from(message.contentBase64, 'base64');\n\t\t\tif (\n\t\t\t\tmessage.offsetBytes !== assembly.request.offsetBytes + assembly.bytes ||\n\t\t\t\tbytes.length === 0 ||\n\t\t\t\tbytes.length > 65_536 ||\n\t\t\t\tbytes.toString('base64') !== message.contentBase64 ||\n\t\t\t\tassembly.bytes + bytes.length > assembly.request.maxBytes\n\t\t\t)\n\t\t\t\tthrow new Error('Invalid artifact chunk position or bounds.');\n\t\t\tassembly.chunks.push(bytes);\n\t\t\tassembly.bytes += bytes.length;\n\t\t\treturn;\n\t\t}\n\t\tconst expected = Math.min(\n\t\t\tassembly.request.maxBytes,\n\t\t\tMath.max(0, assembly.request.reference.byteLength - assembly.request.offsetBytes),\n\t\t);\n\t\tif (\n\t\t\tmessage.offsetBytes !== assembly.request.offsetBytes ||\n\t\t\tmessage.byteLength !== assembly.bytes ||\n\t\t\tassembly.bytes !== expected ||\n\t\t\tmessage.truncated !==\n\t\t\t\tmessage.offsetBytes + assembly.bytes < assembly.request.reference.byteLength\n\t\t)\n\t\t\tthrow new Error('Invalid artifact completion.');\n\t\tfinish(message.requestId, {\n\t\t\tcontentBase64: Buffer.concat(assembly.chunks).toString('base64'),\n\t\t\treference: message.reference,\n\t\t\toffsetBytes: message.offsetBytes,\n\t\t\ttruncated: message.truncated,\n\t\t\t...(message.mediaType === undefined ? {} : { mediaType: message.mediaType }),\n\t\t});\n\t}\n\n\tfunction receive(message: RelayMessage): void {\n\t\tif (message.kind === 'ready') {\n\t\t\tif (!handshake || ready) throw new Error('Unexpected Portal handshake.');\n\t\t\tmaximumPending = message.maxPendingRequests;\n\t\t\tmaximumMessageBytes = message.maxMessageBytes;\n\t\t\tready = true;\n\t\t\tsocketPhase = 'active';\n\t\t\thandshake.resolve();\n\t\t\thandshake = undefined;\n\t\t\treturn;\n\t\t}\n\t\tif (!('requestId' in message)) throw new Error('Unexpected Portal frame.');\n\t\tconst request = pending.get(message.requestId);\n\t\tif (!request) throw new Error('Unexpected Portal response identity.');\n\t\tif (message.kind === 'artifact-chunk' || message.kind === 'artifact-end') {\n\t\t\treceiveArtifact(message, request);\n\t\t\treturn;\n\t\t}\n\t\tif (message.kind === 'result') {\n\t\t\tfinish(message.requestId, message.result);\n\t\t\treturn;\n\t\t}\n\t\tif (message.kind === 'error') {\n\t\t\tpending.delete(message.requestId);\n\t\t\trequest.cleanup();\n\t\t\trequest.reject(\n\t\t\t\tnew Error(`Portal relay request failed (${message.code}); dispatch=${message.dispatch}.`),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tthrow new Error('Unexpected Portal response kind.');\n\t}\n\n\tasync function requestOperation(\n\t\toperation: 'list' | 'search' | 'describe' | 'call' | 'artifact-read',\n\t\targumentsValue: unknown,\n\t\toptions?: { readonly signal?: AbortSignal; readonly resultGraceAfterAbortMs?: number },\n\t\tartifact?: PortalArtifactReadRequest,\n\t): Promise<unknown> {\n\t\tconst signal = options?.signal;\n\t\tconst graceMs = options?.resultGraceAfterAbortMs;\n\t\tif (graceMs !== undefined && (!Number.isInteger(graceMs) || graceMs <= 0)) {\n\t\t\tthrow new TypeError('Tool Portal canonical-result grace must be a positive integer.');\n\t\t}\n\t\tif (!ready || closed || !socket) throw new Error('Portal execution connection is unavailable.');\n\t\tif (signal?.aborted) throw new Error('Portal request cancelled before dispatch.');\n\t\tif (\n\t\t\tpending.size >= maximumPending ||\n\t\t\t(artifact && [...pending.values()].some((request) => request.artifact))\n\t\t)\n\t\t\tthrow new Error('Portal request capacity exceeded before dispatch.');\n\t\tconst requestId = String(++nextId);\n\t\tconst frame = encodeRelayFrame({\n\t\t\tkind: 'request',\n\t\t\trequestId,\n\t\t\toperation,\n\t\t\trequest: argumentsValue,\n\t\t});\n\t\tif (frame.byteLength - frame.indexOf('\\r\\n\\r\\n') - 4 > maximumMessageBytes) {\n\t\t\tthrow new Error('Portal message exceeds negotiated limit before dispatch.');\n\t\t}\n\t\tconst activeSocket = socket;\n\t\treturn await new Promise<unknown>((resolve, reject) => {\n\t\t\tlet graceTimer: ReturnType<typeof setTimeout> | undefined;\n\t\t\tconst abort = (): void => {\n\t\t\t\t// Keep the ID reserved until its terminal response; no response can be assigned to another call.\n\t\t\t\tactiveSocket.write(encodeRelayFrame({ kind: 'cancel', requestId }));\n\t\t\t\tconst rejectCancelled = (): void =>\n\t\t\t\t\treject(new Error('Portal request cancelled; its effect may be uncertain.'));\n\t\t\t\tif (graceMs === undefined) rejectCancelled();\n\t\t\t\telse graceTimer = setTimeout(rejectCancelled, graceMs);\n\t\t\t};\n\t\t\tpending.set(requestId, {\n\t\t\t\tresolve,\n\t\t\t\treject,\n\t\t\t\tcleanup: () => {\n\t\t\t\t\tsignal?.removeEventListener('abort', abort);\n\t\t\t\t\tif (graceTimer !== undefined) clearTimeout(graceTimer);\n\t\t\t\t},\n\t\t\t\t...(artifact === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { artifact: { request: artifact, chunks: [], bytes: 0 } }),\n\t\t\t});\n\t\t\tsignal?.addEventListener('abort', abort, { once: true });\n\t\t\tactiveSocket.write(frame);\n\t\t});\n\t}\n\n\treturn {\n\t\tconnect: async (): Promise<void> => {\n\t\t\tif (closed || socket) throw new Error('Portal transport is already connected or closed.');\n\t\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\t\tconst timer = setTimeout(() => fail(new Error('Portal handshake timeout.')), 5_000);\n\t\t\t\thandshake = {\n\t\t\t\t\tresolve: () => {\n\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t},\n\t\t\t\t\treject: (error) => {\n\t\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tsocket = createConnection(socketPath);\n\t\t\t\tsocket.once('connect', () => {\n\t\t\t\t\tsocketPhase = 'negotiating';\n\t\t\t\t\tsocket?.write(encodeRelayFrame({ kind: 'hello', version: 1 }));\n\t\t\t\t});\n\t\t\t\tsocket.on('data', (chunk: Buffer) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (const message of decoder.feed(chunk)) receive(message);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tfail(new Error('Invalid Portal traffic; outstanding effects may be uncertain.'));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tsocket.once('error', (error) =>\n\t\t\t\t\tfail(\n\t\t\t\t\t\tnew Error(\n\t\t\t\t\t\t\t`Portal connection failed; phase=${socketPhase}; code=${classifyLocalToolPortalSocketFailure(error)}; outstanding effects may be uncertain.`,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tsocket.once('close', () =>\n\t\t\t\t\tfail(new Error('Portal connection ended; outstanding effects may be uncertain.')),\n\t\t\t\t);\n\t\t\t});\n\t\t},\n\t\tclose: async (): Promise<void> => {\n\t\t\tfail(new Error('Portal client closed; outstanding effects may be uncertain.'));\n\t\t},\n\t\tcallTool: async (call, options) => {\n\t\t\tconst operation = portalOperation(call.name);\n\t\t\tif (call.approvalToken !== undefined)\n\t\t\t\tthrow new Error('Managed Portal cannot accept standalone approval tokens.');\n\t\t\treturn {\n\t\t\t\tstructuredContent: await requestOperation(operation, call.arguments, options),\n\t\t\t};\n\t\t},\n\t\treadResource: async (request, options) => {\n\t\t\tconst range = PortalArtifactReadRequestSchema.parse(\n\t\t\t\trequest['_meta']['agent-vm/artifact-read-request'],\n\t\t\t);\n\t\t\tif (\n\t\t\t\tencodeCanonicalJson(createPortalArtifactReadResourceRequest(range)) !==\n\t\t\t\tencodeCanonicalJson(request)\n\t\t\t)\n\t\t\t\tthrow new Error('Artifact URI and range do not match.');\n\t\t\tconst result = PortalArtifactReadResultSchema.parse(\n\t\t\t\tawait requestOperation('artifact-read', range, options, range),\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tcontents: [\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: 'blob',\n\t\t\t\t\t\tblob: result.contentBase64,\n\t\t\t\t\t\turi: request.uri,\n\t\t\t\t\t\t...(result.mediaType === undefined ? {} : { mediaType: result.mediaType }),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t},\n\t};\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { n as createLocalToolPortalTransport, t as classifyLocalToolPortalSocketFailure } from "./local-transport-75M3QuSr.js";
2
+ export { classifyLocalToolPortalSocketFailure, createLocalToolPortalTransport };
@@ -1,2 +1,2 @@
1
- import { a as assertPortableContractSchemaIsExportable, c as PORTABLE_REFINEMENT_DESCRIPTORS, d as PortableRefinementKind, f as PortableRefinementOperation, i as PortableContractParseResult, l as PORTABLE_REFINEMENT_IDENTITIES, n as PORTABLE_CONTRACT_PROTOCOL_VERSION, o as createPortableContractSchemaManifest, r as PortableContractAdapter, s as encodeCanonicalJson, t as PORTABLE_CONTRACT_ADAPTERS, u as PortableRefinementDescriptor } from "../index-E3B9TETl.js";
1
+ import { a as assertPortableContractSchemaIsExportable, c as PORTABLE_REFINEMENT_DESCRIPTORS, d as PortableRefinementKind, f as PortableRefinementOperation, i as PortableContractParseResult, l as PORTABLE_REFINEMENT_IDENTITIES, n as PORTABLE_CONTRACT_PROTOCOL_VERSION, o as createPortableContractSchemaManifest, r as PortableContractAdapter, s as encodeCanonicalJson, t as PORTABLE_CONTRACT_ADAPTERS, u as PortableRefinementDescriptor } from "../index-BU_dNZIt.js";
2
2
  export { PORTABLE_CONTRACT_ADAPTERS, PORTABLE_CONTRACT_PROTOCOL_VERSION, PORTABLE_REFINEMENT_DESCRIPTORS, PORTABLE_REFINEMENT_IDENTITIES, PortableContractAdapter, PortableContractParseResult, PortableRefinementDescriptor, PortableRefinementKind, PortableRefinementOperation, assertPortableContractSchemaIsExportable, createPortableContractSchemaManifest, encodeCanonicalJson };
@@ -1,3 +1,3 @@
1
1
  import { a as PORTABLE_REFINEMENT_IDENTITIES, i as PORTABLE_REFINEMENT_DESCRIPTORS } from "../portable-refinement-authoring-oFICWLOo.js";
2
- import { a as encodeCanonicalJson, i as createPortableContractSchemaManifest, n as PORTABLE_CONTRACT_PROTOCOL_VERSION, r as assertPortableContractSchemaIsExportable, t as PORTABLE_CONTRACT_ADAPTERS } from "../portable-contracts-D7axGgu1.js";
2
+ import { a as encodeCanonicalJson, i as createPortableContractSchemaManifest, n as PORTABLE_CONTRACT_PROTOCOL_VERSION, r as assertPortableContractSchemaIsExportable, t as PORTABLE_CONTRACT_ADAPTERS } from "../portable-contracts-j7lwJkzK.js";
3
3
  export { PORTABLE_CONTRACT_ADAPTERS, PORTABLE_CONTRACT_PROTOCOL_VERSION, PORTABLE_REFINEMENT_DESCRIPTORS, PORTABLE_REFINEMENT_IDENTITIES, assertPortableContractSchemaIsExportable, createPortableContractSchemaManifest, encodeCanonicalJson };
@@ -1,13 +1,13 @@
1
1
  import { a as PORTABLE_REFINEMENT_IDENTITIES, n as registerPortableExternalRefinement, t as portableRefinementIdentityForCheck } from "./portable-refinement-authoring-oFICWLOo.js";
2
2
  import { t as ArtifactReferenceSchema } from "./artifact-reference-schema-CiEjxYPd.js";
3
3
  import { o as JsonValueSchema } from "./json-value-schema-rxMrw9uZ.js";
4
- import { C as PortalSearchResultSchema, b as PortalListResultSchema, f as PortalCallItemResultSchema, g as PortalDescribeResultSchema, p as PortalCallResultSchema } from "./portal-call-result-schema-DVJ6FyTz.js";
5
- import { i as GatewayApprovalPresentationRequestSchema, n as GatewayApprovalDecisionRequestSchema, r as GatewayApprovalDecisionResultSchema, t as ApprovalPresentationOutcomeSchema } from "./approval-surface-CfbAG-81.js";
4
+ import { C as PortalSearchResultSchema, b as PortalListResultSchema, f as PortalCallItemResultSchema, g as PortalDescribeResultSchema, p as PortalCallResultSchema } from "./portal-call-result-schema-bjzGidd5.js";
5
+ import { i as GatewayApprovalPresentationRequestSchema, n as GatewayApprovalDecisionRequestSchema, r as GatewayApprovalDecisionResultSchema, t as ApprovalPresentationOutcomeSchema } from "./approval-surface-BsE8CS3l.js";
6
6
  import { a as PortalArtifactReadRequestSchema, o as PortalArtifactReadResultSchema } from "./artifact-surface-Db5KQOA0.js";
7
- import { dt as SandboxOperationIdentitySchema, f as ManagedAgentProjectionSchema, mt as SandboxRetainedResultLookupResultSchema, n as GatewayRuntimeAttachmentMetadataSchema, pt as SandboxRetainedResultLookupRequestSchema, s as GatewayRuntimeTrustedInvocationContextSchema, t as SANDBOX_METHOD_CONTRACTS, ut as SandboxOperationControlResultSchema } from "./contracts-K6l783Yb.js";
8
- import { r as PortalCallRequestSchema } from "./portal-call-request-schema-B1dbBjmW.js";
9
- import { c as PortalSearchRequestSchema, f as PortalDescribeRequestSchema, i as PortalAttachmentResultSchema, n as PortalFileResultSchema, r as PortalAttachmentRequestSchema, t as PortalFileRequestSchema, u as PortalListRequestSchema } from "./portal-call-surface-BPVX-rjw.js";
10
- import { o as PortalProgressEventSchema } from "./portal-event-surface-Z76kra2a.js";
7
+ import { At as PortalCatalogReleaseResultSchema, Ct as PortalCatalogOfferRequestSchema, Dt as PortalCatalogReadRequestSchema, Et as PortalCatalogPrepareResultSchema, Mt as PortalCatalogSourceManifestSchema, Ot as PortalCatalogReadResultSchema, Tt as PortalCatalogPrepareRequestSchema, dt as SandboxOperationControlResultSchema, f as ManagedAgentProjectionSchema, ft as SandboxOperationIdentitySchema, ht as SandboxRetainedResultLookupResultSchema, kt as PortalCatalogReleaseRequestSchema, mt as SandboxRetainedResultLookupRequestSchema, n as GatewayRuntimeAttachmentMetadataSchema, s as GatewayRuntimeTrustedInvocationContextSchema, t as SANDBOX_METHOD_CONTRACTS, wt as PortalCatalogOfferResultSchema } from "./contracts-DlvJ0mo0.js";
8
+ import { r as PortalCallRequestSchema } from "./portal-call-request-schema-8wgpdxjI.js";
9
+ import { c as PortalSearchRequestSchema, f as PortalDescribeRequestSchema, i as PortalAttachmentResultSchema, n as PortalFileResultSchema, r as PortalAttachmentRequestSchema, t as PortalFileRequestSchema, u as PortalListRequestSchema } from "./portal-call-surface-CG609sIB.js";
10
+ import { o as PortalProgressEventSchema } from "./portal-event-surface-AGsuU_aJ.js";
11
11
  import { z } from "zod";
12
12
  import { oauthAccountToolOptionSchema, oauthToolAvailabilitySchema, oauthToolRequirementSchema } from "@agent-vm/oauth-broker-contracts";
13
13
  //#region src/portable-contracts/portable-contract-runtime.ts
@@ -162,6 +162,42 @@ function callItemHasStatusShapeConflict(input) {
162
162
  return input["status"] === "ok" && "error" in input || input["status"] === "error" && "value" in input && !completedDelivery;
163
163
  }
164
164
  const portableContractDefinitions = {
165
+ "portal.catalog.manifest": {
166
+ refinementIdentities: ["sandbox.path.work-relative"],
167
+ schema: PortalCatalogSourceManifestSchema
168
+ },
169
+ "portal.catalog.offer-request": {
170
+ refinementIdentities: [],
171
+ schema: PortalCatalogOfferRequestSchema
172
+ },
173
+ "portal.catalog.offer-result": {
174
+ refinementIdentities: ["sandbox.path.work-relative"],
175
+ schema: PortalCatalogOfferResultSchema
176
+ },
177
+ "portal.catalog.prepare-request": {
178
+ refinementIdentities: [],
179
+ schema: PortalCatalogPrepareRequestSchema
180
+ },
181
+ "portal.catalog.prepare-result": {
182
+ refinementIdentities: ["sandbox.path.work-relative"],
183
+ schema: PortalCatalogPrepareResultSchema
184
+ },
185
+ "portal.catalog.read-request": {
186
+ refinementIdentities: [],
187
+ schema: PortalCatalogReadRequestSchema
188
+ },
189
+ "portal.catalog.read-result": {
190
+ refinementIdentities: [],
191
+ schema: PortalCatalogReadResultSchema
192
+ },
193
+ "portal.catalog.release-request": {
194
+ refinementIdentities: [],
195
+ schema: PortalCatalogReleaseRequestSchema
196
+ },
197
+ "portal.catalog.release-result": {
198
+ refinementIdentities: [],
199
+ schema: PortalCatalogReleaseResultSchema
200
+ },
165
201
  "portal.artifact.read-request": {
166
202
  refinementIdentities: [],
167
203
  schema: PortalArtifactReadRequestSchema
@@ -399,4 +435,4 @@ const PORTABLE_CONTRACT_ADAPTERS = Object.fromEntries(Object.entries(allPortable
399
435
  //#endregion
400
436
  export { encodeCanonicalJson as a, createPortableContractSchemaManifest as i, PORTABLE_CONTRACT_PROTOCOL_VERSION as n, assertPortableContractSchemaIsExportable as r, PORTABLE_CONTRACT_ADAPTERS as t };
401
437
 
402
- //# sourceMappingURL=portable-contracts-D7axGgu1.js.map
438
+ //# sourceMappingURL=portable-contracts-j7lwJkzK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portable-contracts-j7lwJkzK.js","names":[],"sources":["../src/portable-contracts/portable-contract-runtime.ts"],"sourcesContent":["import {\n\toauthToolRequirementSchema,\n\toauthAccountToolOptionSchema,\n\toauthToolAvailabilitySchema,\n} from '@agent-vm/oauth-broker-contracts';\nimport { z } from 'zod';\n\nimport {\n\tApprovalPresentationOutcomeSchema,\n\tGatewayApprovalDecisionRequestSchema,\n\tGatewayApprovalDecisionResultSchema,\n\tGatewayApprovalPresentationRequestSchema,\n} from '../approval-surface/index.js';\nimport {\n\tArtifactReferenceSchema,\n\tPortalArtifactReadRequestSchema,\n\tPortalArtifactReadResultSchema,\n} from '../artifact-surface/index.js';\nimport {\n\tPortalCatalogOfferRequestSchema,\n\tPortalCatalogOfferResultSchema,\n\tPortalCatalogPrepareRequestSchema,\n\tPortalCatalogPrepareResultSchema,\n\tPortalCatalogReadRequestSchema,\n\tPortalCatalogReadResultSchema,\n\tPortalCatalogReleaseRequestSchema,\n\tPortalCatalogReleaseResultSchema,\n\tPortalCatalogSourceManifestSchema,\n} from '../catalog-surface/index.js';\nimport { JsonValueSchema } from '../contract-primitives/index.js';\nimport {\n\tGatewayRuntimeAttachmentMetadataSchema,\n\tGatewayRuntimeTrustedInvocationContextSchema,\n\tManagedAgentProjectionSchema,\n\tSANDBOX_METHOD_CONTRACTS,\n\tSandboxOperationControlResultSchema,\n\tSandboxOperationIdentitySchema,\n\tSandboxRetainedResultLookupRequestSchema,\n\tSandboxRetainedResultLookupResultSchema,\n} from '../contracts/index.js';\nimport {\n\tPortalCallItemResultSchema,\n\tPortalFileRequestSchema,\n\tPortalFileResultSchema,\n\tPortalAttachmentRequestSchema,\n\tPortalAttachmentResultSchema,\n\tPortalCallRequestSchema,\n\tPortalCallResultSchema,\n\tPortalDescribeRequestSchema,\n\tPortalDescribeResultSchema,\n\tPortalListRequestSchema,\n\tPortalListResultSchema,\n\tPortalSearchRequestSchema,\n\tPortalSearchResultSchema,\n} from '../portal-call-surface/index.js';\nimport { PortalProgressEventSchema } from '../portal-event-surface/index.js';\nimport {\n\tportableRefinementIdentityForCheck,\n\tregisterPortableExternalRefinement,\n} from './portable-refinement-authoring.js';\nimport { PORTABLE_REFINEMENT_IDENTITIES } from './portable-refinement-descriptors.js';\nexport {\n\tPORTABLE_REFINEMENT_DESCRIPTORS,\n\tPORTABLE_REFINEMENT_IDENTITIES,\n} from './portable-refinement-descriptors.js';\n\nregisterPortableExternalRefinement({\n\tschema: oauthToolRequirementSchema.shape.operations,\n\trefinementIdentity: 'portal.google.discovery-policy',\n});\nregisterPortableExternalRefinement({\n\tschema: oauthAccountToolOptionSchema,\n\trefinementIdentity: 'portal.google.discovery-policy',\n});\nregisterPortableExternalRefinement({\n\tschema: oauthToolAvailabilitySchema,\n\trefinementIdentity: 'portal.google.discovery-policy',\n});\n\ninterface PortableAcceptedContractParseResult {\n\treadonly kind: 'accepted';\n\treadonly normalized: unknown;\n\treadonly refinementIdentities: readonly string[];\n}\n\ninterface PortableRejectedContractParseResult {\n\treadonly errorCodes: readonly string[];\n\treadonly kind: 'rejected';\n\treadonly refinementIdentities: readonly string[];\n}\n\nexport type PortableContractParseResult =\n\t| PortableAcceptedContractParseResult\n\t| PortableRejectedContractParseResult;\n\nexport interface PortableContractAdapter {\n\treadonly parse: (input: unknown) => PortableContractParseResult;\n}\n\nexport const PORTABLE_CONTRACT_PROTOCOL_VERSION = 1;\n\ninterface PortableContractDefinition {\n\treadonly refinementIdentities: readonly string[];\n\treadonly resolveRefinementIdentities?: (props: {\n\t\treadonly input: unknown;\n\t\treadonly parseSucceeded: boolean;\n\t}) => readonly string[];\n\treadonly schema: z.ZodType;\n}\n\ninterface PortableSchemaExportabilityProps {\n\treadonly schema: z.ZodType;\n\treadonly schemaId: string;\n}\n\nfunction isUnknownRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isZodSchema(value: unknown): value is z.ZodType {\n\treturn isUnknownRecord(value) && isUnknownRecord(value['_zod']) && 'def' in value['_zod'];\n}\n\nfunction containsUnsafeInteger(value: unknown): boolean {\n\tif (typeof value === 'number') return Number.isInteger(value) && !Number.isSafeInteger(value);\n\tif (Array.isArray(value)) return value.some((item) => containsUnsafeInteger(item));\n\tif (isUnknownRecord(value)) {\n\t\treturn Object.values(value).some((childValue) => containsUnsafeInteger(childValue));\n\t}\n\treturn false;\n}\n\nfunction inspectPortableSchemaNode(props: {\n\treadonly node: unknown;\n\treadonly schemaId: string;\n\treadonly visited: Set<object>;\n}): void {\n\tif ((typeof props.node !== 'object' && typeof props.node !== 'function') || props.node === null) {\n\t\treturn;\n\t}\n\tif (props.visited.has(props.node)) {\n\t\treturn;\n\t}\n\tprops.visited.add(props.node);\n\n\tif (isZodSchema(props.node)) {\n\t\t// oxlint-disable-next-line no-underscore-dangle -- Zod v4 core definitions are required for the portable-authoring structural guard.\n\t\tconst definition: unknown = props.node._zod.def;\n\t\tif (isUnknownRecord(definition) && definition['type'] === 'transform') {\n\t\t\tthrow new Error(\n\t\t\t\t`Portable schema ${props.schemaId} contains an anonymous or unregistered transform.`,\n\t\t\t);\n\t\t}\n\t\tif (isUnknownRecord(definition) && Array.isArray(definition['checks'])) {\n\t\t\tfor (const check of definition['checks']) {\n\t\t\t\tif (\n\t\t\t\t\tisUnknownRecord(check) &&\n\t\t\t\t\tisUnknownRecord(check['_zod']) &&\n\t\t\t\t\tisUnknownRecord(check['_zod']['def']) &&\n\t\t\t\t\tcheck['_zod']['def']['check'] === 'custom'\n\t\t\t\t) {\n\t\t\t\t\tif (portableRefinementIdentityForCheck(check) !== undefined) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Portable schema ${props.schemaId} contains an anonymous or unregistered refinement.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tinspectPortableSchemaNode({\n\t\t\tnode: definition,\n\t\t\tschemaId: props.schemaId,\n\t\t\tvisited: props.visited,\n\t\t});\n\t\treturn;\n\t}\n\n\tif (Array.isArray(props.node)) {\n\t\tfor (const child of props.node) {\n\t\t\tinspectPortableSchemaNode({ node: child, schemaId: props.schemaId, visited: props.visited });\n\t\t}\n\t\treturn;\n\t}\n\n\tfor (const child of Object.values(props.node)) {\n\t\tinspectPortableSchemaNode({ node: child, schemaId: props.schemaId, visited: props.visited });\n\t}\n}\n\nexport function assertPortableContractSchemaIsExportable(\n\tprops: PortableSchemaExportabilityProps,\n): void {\n\tinspectPortableSchemaNode({ node: props.schema, schemaId: props.schemaId, visited: new Set() });\n}\n\nfunction normalizeCanonicalJsonValue(value: unknown): unknown {\n\tif (typeof value === 'number') {\n\t\treturn Object.is(value, -0) ? 0 : value;\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value.map((item) => normalizeCanonicalJsonValue(item));\n\t}\n\tif (isUnknownRecord(value)) {\n\t\treturn Object.fromEntries(\n\t\t\tObject.entries(value)\n\t\t\t\t.toSorted(([leftKey], [rightKey]) => leftKey.localeCompare(rightKey))\n\t\t\t\t.map(([key, childValue]) => [key, normalizeCanonicalJsonValue(childValue)]),\n\t\t);\n\t}\n\treturn value;\n}\n\nexport function encodeCanonicalJson(value: unknown): string {\n\tconst encodedValue = JSON.stringify(normalizeCanonicalJsonValue(value));\n\tif (encodedValue === undefined) {\n\t\tthrow new Error('Canonical JSON input must be JSON-serializable.');\n\t}\n\treturn encodedValue;\n}\n\nfunction mapPortableIssue(props: {\n\treadonly input: unknown;\n\treadonly issue: z.core.$ZodIssue;\n\treadonly schemaId: string;\n}): string {\n\t// The generated JSON-schema reader reports failure of these outer unions as\n\t// one shape error; keep TS diagnostics identical without relaxing either schema.\n\tif (\n\t\t[\n\t\t\t'portal.file.request',\n\t\t\t'portal.file.result',\n\t\t\t'portal.attachment.request',\n\t\t\t'portal.attachment.result',\n\t\t].includes(props.schemaId)\n\t)\n\t\treturn 'portable.schema.invalid-union';\n\tif (props.schemaId === 'portal.call.item-result') {\n\t\tconst firstPathSegment = props.issue.path?.[0];\n\t\tif (\n\t\t\tfirstPathSegment === 'outcome' ||\n\t\t\tfirstPathSegment === 'operationId' ||\n\t\t\tfirstPathSegment === 'owningGeneration'\n\t\t) {\n\t\t\treturn 'portal.result.outcome-algebra';\n\t\t}\n\t\tif (props.issue.code === 'unrecognized_keys' || props.issue.code === 'invalid_union') {\n\t\t\treturn 'portal.result.status-shape';\n\t\t}\n\t}\n\n\tif (props.issue.code === 'unrecognized_keys') {\n\t\treturn 'portable.object.unknown-field';\n\t}\n\tif (\n\t\tprops.issue.code === 'invalid_type' &&\n\t\tprops.issue.path?.length === 1 &&\n\t\tisUnknownRecord(props.input) &&\n\t\ttypeof props.issue.path[0] === 'string' &&\n\t\t!(props.issue.path[0] in props.input)\n\t) {\n\t\treturn 'portable.object.missing-field';\n\t}\n\tif (\n\t\tprops.issue.code === 'invalid_format' &&\n\t\t'format' in props.issue &&\n\t\tprops.issue.format === 'starts_with'\n\t) {\n\t\treturn 'portable.string.pattern';\n\t}\n\tif (props.issue.code === 'too_big' && props.issue.origin === 'number') {\n\t\treturn 'portable.number.above-maximum';\n\t}\n\tif (props.issue.code === 'custom') {\n\t\tif (\n\t\t\tprops.issue.message.startsWith('Google operation') ||\n\t\t\tprops.issue.message.startsWith('Usable account activity')\n\t\t)\n\t\t\treturn 'portal.google.discovery-policy';\n\t\tif (props.issue.message.includes('decoded canonical base64 content')) {\n\t\t\treturn 'sandbox.binary-chunk.byte-length-mismatch';\n\t\t}\n\t\tif (props.issue.message.includes('duplicate variable name')) {\n\t\t\treturn 'sandbox.environment-variable.duplicate-name';\n\t\t}\n\t\tif (props.issue.message.includes('duplicate configured agent id')) {\n\t\t\treturn 'gateway.attachment.duplicate-agent-id';\n\t\t}\n\t\tif (props.issue.message.includes('Managed Agent Projection Tool Portal namespaces')) {\n\t\t\treturn 'gateway.managed-agent-projection.namespaces';\n\t\t}\n\t\tif (props.issue.message.includes('server-selected work root')) {\n\t\t\treturn 'sandbox.path.not-work-relative';\n\t\t}\n\t\tif (props.issue.message.startsWith('Duplicate portal item id')) {\n\t\t\treturn 'portal.batch.unique-item-ids';\n\t\t}\n\t\tif (props.issue.message.includes('reserved object property name')) {\n\t\t\treturn 'portal.request-id.not-reserved';\n\t\t}\n\t\tif (props.issue.message.includes('maximum number of entries')) {\n\t\t\treturn 'portable.object.above-maximum';\n\t\t}\n\t\tif (props.issue.message.includes('ok must match item statuses')) {\n\t\t\treturn 'portal.result.aggregate-status';\n\t\t}\n\t}\n\treturn `portable.zod.${props.issue.code}`;\n}\n\nfunction mapPortableIssues(props: {\n\treadonly input: unknown;\n\treadonly issue: z.core.$ZodIssue;\n\treadonly schemaId: string;\n}): readonly string[] {\n\tif (\n\t\tprops.schemaId === 'portal.call.item-result' &&\n\t\tprops.issue.code === 'invalid_union' &&\n\t\tprops.issue.path.length === 0 &&\n\t\tisUnknownRecord(props.input)\n\t) {\n\t\t// Completed delivery errors share a status with ordinary errors. Preserve\n\t\t// field-level error codes from the closest matching status branch.\n\t\tconst matchingBranches = props.issue.errors.filter(\n\t\t\t(issues) => !issues.some((issue) => issue.path[0] === 'status'),\n\t\t);\n\t\tconst selected = matchingBranches.toSorted((left, right) => left.length - right.length)[0];\n\t\tif (selected !== undefined && selected.length > 0) {\n\t\t\treturn selected.map((issue) => mapPortableIssue({ ...props, issue }));\n\t\t}\n\t}\n\treturn [mapPortableIssue(props)];\n}\n\nfunction createPortableContractAdapter(props: {\n\treadonly definition: PortableContractDefinition;\n\treadonly schemaId: string;\n}): PortableContractAdapter {\n\treturn {\n\t\tparse: (input): PortableContractParseResult => {\n\t\t\tif (containsUnsafeInteger(input)) {\n\t\t\t\treturn {\n\t\t\t\t\terrorCodes: ['portable.number.unsafe-integer'],\n\t\t\t\t\tkind: 'rejected',\n\t\t\t\t\trefinementIdentities: [\n\t\t\t\t\t\t...new Set([...props.definition.refinementIdentities, 'portal.number.safe-integer']),\n\t\t\t\t\t].toSorted((leftIdentity, rightIdentity) => leftIdentity.localeCompare(rightIdentity)),\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst parsed = props.definition.schema.safeParse(input);\n\t\t\tconst refinementIdentities = (\n\t\t\t\tprops.definition.resolveRefinementIdentities?.({\n\t\t\t\t\tinput,\n\t\t\t\t\tparseSucceeded: parsed.success,\n\t\t\t\t}) ?? props.definition.refinementIdentities\n\t\t\t).toSorted((leftIdentity, rightIdentity) => leftIdentity.localeCompare(rightIdentity));\n\t\t\tif (!parsed.success) {\n\t\t\t\tconst errorCodes =\n\t\t\t\t\tprops.schemaId === 'portal.call.item-result' &&\n\t\t\t\t\tisUnknownRecord(input) &&\n\t\t\t\t\tcallItemHasStatusShapeConflict(input)\n\t\t\t\t\t\t? ['portal.result.status-shape']\n\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t...new Set(\n\t\t\t\t\t\t\t\t\tparsed.error.issues.flatMap((issue) =>\n\t\t\t\t\t\t\t\t\t\tmapPortableIssues({ input, issue, schemaId: props.schemaId }),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t].toSorted((leftCode, rightCode) => leftCode.localeCompare(rightCode));\n\t\t\t\treturn {\n\t\t\t\t\terrorCodes,\n\t\t\t\t\tkind: 'rejected',\n\t\t\t\t\trefinementIdentities,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkind: 'accepted',\n\t\t\t\tnormalized: normalizeCanonicalJsonValue(parsed.data),\n\t\t\t\trefinementIdentities,\n\t\t\t};\n\t\t},\n\t};\n}\n\nfunction callItemHasStatusShapeConflict(input: Record<string, unknown>): boolean {\n\tconst outcome = input['outcome'];\n\tconst completedDelivery =\n\t\tisUnknownRecord(outcome) &&\n\t\toutcome['kind'] === 'completed' &&\n\t\toutcome['completion'] === 'failed' &&\n\t\toutcome['certainty'] === 'proven' &&\n\t\toutcome['retryClass'] === 'forbidden' &&\n\t\ttypeof input['operationId'] === 'string' &&\n\t\tinput['operationId'].length > 0 &&\n\t\ttypeof input['owningGeneration'] === 'string' &&\n\t\tinput['owningGeneration'].length > 0;\n\treturn (\n\t\t(input['status'] === 'ok' && 'error' in input) ||\n\t\t(input['status'] === 'error' && 'value' in input && !completedDelivery)\n\t);\n}\n\nconst portableContractDefinitions = {\n\t'portal.catalog.manifest': {\n\t\trefinementIdentities: ['sandbox.path.work-relative'],\n\t\tschema: PortalCatalogSourceManifestSchema,\n\t},\n\t'portal.catalog.offer-request': {\n\t\trefinementIdentities: [],\n\t\tschema: PortalCatalogOfferRequestSchema,\n\t},\n\t'portal.catalog.offer-result': {\n\t\trefinementIdentities: ['sandbox.path.work-relative'],\n\t\tschema: PortalCatalogOfferResultSchema,\n\t},\n\t'portal.catalog.prepare-request': {\n\t\trefinementIdentities: [],\n\t\tschema: PortalCatalogPrepareRequestSchema,\n\t},\n\t'portal.catalog.prepare-result': {\n\t\trefinementIdentities: ['sandbox.path.work-relative'],\n\t\tschema: PortalCatalogPrepareResultSchema,\n\t},\n\t'portal.catalog.read-request': {\n\t\trefinementIdentities: [],\n\t\tschema: PortalCatalogReadRequestSchema,\n\t},\n\t'portal.catalog.read-result': { refinementIdentities: [], schema: PortalCatalogReadResultSchema },\n\t'portal.catalog.release-request': {\n\t\trefinementIdentities: [],\n\t\tschema: PortalCatalogReleaseRequestSchema,\n\t},\n\t'portal.catalog.release-result': {\n\t\trefinementIdentities: [],\n\t\tschema: PortalCatalogReleaseResultSchema,\n\t},\n\t'portal.artifact.read-request': {\n\t\trefinementIdentities: [],\n\t\tschema: PortalArtifactReadRequestSchema,\n\t},\n\t'portal.artifact.read-result': {\n\t\trefinementIdentities: ['portal.artifact-read.default-truncated'],\n\t\tschema: PortalArtifactReadResultSchema,\n\t},\n\t'portal.artifact.reference': {\n\t\trefinementIdentities: [],\n\t\tschema: ArtifactReferenceSchema,\n\t},\n\t'portal.call.item-result': {\n\t\trefinementIdentities: ['portal.request-id.not-reserved', 'portal.result.outcome-algebra'],\n\t\tresolveRefinementIdentities: ({ input }): readonly string[] => {\n\t\t\treturn isUnknownRecord(input) &&\n\t\t\t\t!callItemHasStatusShapeConflict(input) &&\n\t\t\t\t('outcome' in input || !('operationId' in input))\n\t\t\t\t? ['portal.request-id.not-reserved', 'portal.result.outcome-algebra']\n\t\t\t\t: ['portal.request-id.not-reserved'];\n\t\t},\n\t\tschema: PortalCallItemResultSchema,\n\t},\n\t'portal.call.request': {\n\t\trefinementIdentities: [\n\t\t\t'portal.batch.unique-item-ids',\n\t\t\t'portal.json.canonical',\n\t\t\t'portal.request-id.not-reserved',\n\t\t],\n\t\tresolveRefinementIdentities: ({ parseSucceeded }): readonly string[] => {\n\t\t\treturn parseSucceeded\n\t\t\t\t? [\n\t\t\t\t\t\t'portal.batch.unique-item-ids',\n\t\t\t\t\t\t'portal.json.canonical',\n\t\t\t\t\t\t'portal.request-id.not-reserved',\n\t\t\t\t\t]\n\t\t\t\t: ['portal.batch.unique-item-ids', 'portal.request-id.not-reserved'];\n\t\t},\n\t\tschema: PortalCallRequestSchema,\n\t},\n\t'portal.file.request': { refinementIdentities: [], schema: PortalFileRequestSchema },\n\t'portal.file.result': { refinementIdentities: [], schema: PortalFileResultSchema },\n\t'portal.attachment.request': { refinementIdentities: [], schema: PortalAttachmentRequestSchema },\n\t'portal.attachment.result': { refinementIdentities: [], schema: PortalAttachmentResultSchema },\n\t'portal.call.result': {\n\t\trefinementIdentities: [\n\t\t\t'portal.request-id.not-reserved',\n\t\t\t'portal.result.aggregate-status',\n\t\t\t'portal.result.outcome-algebra',\n\t\t],\n\t\tschema: PortalCallResultSchema,\n\t},\n\t'portal.describe.request': {\n\t\trefinementIdentities: [\n\t\t\t'portal.batch.unique-item-ids',\n\t\t\t'portal.describe.default-includes',\n\t\t\t'portal.request-id.not-reserved',\n\t\t],\n\t\tschema: PortalDescribeRequestSchema,\n\t},\n\t'portal.describe.result': {\n\t\trefinementIdentities: [\n\t\t\t'portal.request-id.not-reserved',\n\t\t\t'portal.result.aggregate-status',\n\t\t\t'portal.google.discovery-policy',\n\t\t],\n\t\tschema: PortalDescribeResultSchema,\n\t},\n\t'portal.json-value': {\n\t\trefinementIdentities: ['portal.json.canonical', 'portal.json.max-object-entries'],\n\t\tresolveRefinementIdentities: ({ input }): readonly string[] => {\n\t\t\treturn isUnknownRecord(input) && Object.keys(input).length > 1_000\n\t\t\t\t? ['portal.json.canonical', 'portal.json.max-object-entries']\n\t\t\t\t: ['portal.json.canonical'];\n\t\t},\n\t\tschema: JsonValueSchema,\n\t},\n\t'portal.list.request': {\n\t\trefinementIdentities: [\n\t\t\t'portal.batch.unique-item-ids',\n\t\t\t'portal.list.default-limit',\n\t\t\t'portal.request-id.not-reserved',\n\t\t],\n\t\tschema: PortalListRequestSchema,\n\t},\n\t'portal.list.result': {\n\t\trefinementIdentities: [\n\t\t\t'portal.request-id.not-reserved',\n\t\t\t'portal.result.aggregate-status',\n\t\t\t'portal.google.discovery-policy',\n\t\t],\n\t\tschema: PortalListResultSchema,\n\t},\n\t'portal.progress.event': {\n\t\trefinementIdentities: ['portal.request-id.not-reserved'],\n\t\tschema: PortalProgressEventSchema,\n\t},\n\t'portal.search.request': {\n\t\trefinementIdentities: [\n\t\t\t'portal.batch.unique-item-ids',\n\t\t\t'portal.request-id.not-reserved',\n\t\t\t'portal.search.default-limit',\n\t\t\t'portal.search.default-schema-detail',\n\t\t],\n\t\tschema: PortalSearchRequestSchema,\n\t},\n\t'portal.search.result': {\n\t\trefinementIdentities: [\n\t\t\t'portal.request-id.not-reserved',\n\t\t\t'portal.result.aggregate-status',\n\t\t\t'portal.google.discovery-policy',\n\t\t],\n\t\tschema: PortalSearchResultSchema,\n\t},\n} as const satisfies Readonly<Record<string, PortableContractDefinition>>;\n\nconst canonicalGatewayContractDefinitions = {\n\t'gateway.approval.decision-request': {\n\t\trefinementIdentities: [],\n\t\tschema: GatewayApprovalDecisionRequestSchema,\n\t},\n\t'gateway.approval.decision-result': {\n\t\trefinementIdentities: [],\n\t\tschema: GatewayApprovalDecisionResultSchema,\n\t},\n\t'gateway.approval.presentation-outcome': {\n\t\trefinementIdentities: [],\n\t\tschema: ApprovalPresentationOutcomeSchema,\n\t},\n\t'gateway.approval.presentation-request': {\n\t\trefinementIdentities: ['gateway.approval.arguments-preview.utf8-bytes'],\n\t\tschema: GatewayApprovalPresentationRequestSchema,\n\t},\n\t'gateway.attachment.metadata': {\n\t\trefinementIdentities: ['gateway.attachment.unique-agent-ids'],\n\t\tschema: GatewayRuntimeAttachmentMetadataSchema,\n\t},\n\t'gateway.managed-agent-projection': {\n\t\trefinementIdentities: [\n\t\t\t'gateway.managed-agent-projection.namespaces',\n\t\t\t'portal.namespace-discovery.summary-code-points',\n\t\t],\n\t\tschema: ManagedAgentProjectionSchema,\n\t},\n\t'gateway.trusted-invocation-context': {\n\t\trefinementIdentities: [],\n\t\tschema: GatewayRuntimeTrustedInvocationContextSchema,\n\t},\n\t'sandbox.operation.control-result': {\n\t\trefinementIdentities: ['portal.result.outcome-algebra'],\n\t\tschema: SandboxOperationControlResultSchema,\n\t},\n\t'sandbox.operation.identity': {\n\t\trefinementIdentities: [],\n\t\tschema: SandboxOperationIdentitySchema,\n\t},\n\t'sandbox.retained-result.lookup-request': {\n\t\trefinementIdentities: [],\n\t\tschema: SandboxRetainedResultLookupRequestSchema,\n\t},\n\t'sandbox.retained-result.lookup-result': {\n\t\trefinementIdentities: ['portal.result.outcome-algebra'],\n\t\tschema: SandboxRetainedResultLookupResultSchema,\n\t},\n} as const satisfies Readonly<Record<string, PortableContractDefinition>>;\n\ninterface SandboxMethodPortableContractMetadata {\n\treadonly requestRefinementIdentities: readonly string[];\n\treadonly requestSchemaId: string;\n\treadonly resultRefinementIdentities: readonly string[];\n\treadonly resultSchemaId: string;\n}\n\nfunction resolveSandboxMethodPortableContractMetadata(props: {\n\treadonly method: string;\n\treadonly requestOnlyRefinementIdentities: readonly string[];\n\treadonly sharedRefinementIdentities: readonly string[];\n}): SandboxMethodPortableContractMetadata {\n\tif (props.method === 'sandbox.retained-result.lookup') {\n\t\treturn {\n\t\t\trequestRefinementIdentities: [\n\t\t\t\t...props.sharedRefinementIdentities,\n\t\t\t\t...props.requestOnlyRefinementIdentities,\n\t\t\t],\n\t\t\trequestSchemaId: 'sandbox.retained-result.lookup-request',\n\t\t\tresultRefinementIdentities: [\n\t\t\t\t...props.sharedRefinementIdentities,\n\t\t\t\t'portal.result.outcome-algebra',\n\t\t\t],\n\t\t\tresultSchemaId: 'sandbox.retained-result.lookup-result',\n\t\t};\n\t}\n\treturn {\n\t\trequestRefinementIdentities: [\n\t\t\t...props.sharedRefinementIdentities,\n\t\t\t...props.requestOnlyRefinementIdentities,\n\t\t],\n\t\trequestSchemaId: `${props.method}.request`,\n\t\tresultRefinementIdentities: props.sharedRefinementIdentities,\n\t\tresultSchemaId: `${props.method}.result`,\n\t};\n}\n\nfunction createSandboxMethodContractDefinitions(): Readonly<\n\tRecord<string, PortableContractDefinition>\n> {\n\tconst contractDefinitions: Record<string, PortableContractDefinition> = {};\n\tfor (const [method, contracts] of Object.entries(SANDBOX_METHOD_CONTRACTS)) {\n\t\tconst refinementIdentities: string[] = method.startsWith('sandbox.environment.')\n\t\t\t? ['sandbox.path.work-relative']\n\t\t\t: [];\n\t\tconst requestOnlyRefinementIdentities =\n\t\t\tmethod === 'sandbox.exec.start' || method === 'sandbox.process.start'\n\t\t\t\t? ['sandbox.environment-variable.unique-names']\n\t\t\t\t: [];\n\t\tif (\n\t\t\t[\n\t\t\t\t'sandbox.fs.read',\n\t\t\t\t'sandbox.fs.write',\n\t\t\t\t'sandbox.process.logs',\n\t\t\t\t'sandbox.stream.read',\n\t\t\t\t'sandbox.stream.write',\n\t\t\t].includes(method)\n\t\t) {\n\t\t\trefinementIdentities.push('sandbox.binary-chunk.byte-length');\n\t\t}\n\t\tconst metadata = resolveSandboxMethodPortableContractMetadata({\n\t\t\tmethod,\n\t\t\trequestOnlyRefinementIdentities,\n\t\t\tsharedRefinementIdentities: refinementIdentities,\n\t\t});\n\t\tcontractDefinitions[metadata.requestSchemaId] = {\n\t\t\trefinementIdentities: metadata.requestRefinementIdentities,\n\t\t\tschema: contracts.request,\n\t\t};\n\t\tcontractDefinitions[metadata.resultSchemaId] = {\n\t\t\trefinementIdentities: metadata.resultRefinementIdentities,\n\t\t\tschema: contracts.result,\n\t\t};\n\t}\n\treturn contractDefinitions;\n}\n\nconst sandboxMethodContractDefinitions = createSandboxMethodContractDefinitions();\n\nconst allPortableContractDefinitions: Readonly<Record<string, PortableContractDefinition>> = {\n\t...portableContractDefinitions,\n\t...canonicalGatewayContractDefinitions,\n\t...sandboxMethodContractDefinitions,\n};\n\nfor (const [schemaId, definition] of Object.entries(allPortableContractDefinitions)) {\n\tassertPortableContractSchemaIsExportable({ schema: definition.schema, schemaId });\n}\n\nexport function createPortableContractSchemaManifest(): Readonly<Record<string, unknown>> {\n\treturn {\n\t\tprotocolVersion: PORTABLE_CONTRACT_PROTOCOL_VERSION,\n\t\trefinements: PORTABLE_REFINEMENT_IDENTITIES,\n\t\tschemas: Object.fromEntries(\n\t\t\tObject.entries(allPortableContractDefinitions).map(([schemaId, definition]) => [\n\t\t\t\tschemaId,\n\t\t\t\t{\n\t\t\t\t\tjsonSchema: z.toJSONSchema(definition.schema, {\n\t\t\t\t\t\tio: 'input',\n\t\t\t\t\t\tunrepresentable: 'any',\n\t\t\t\t\t}),\n\t\t\t\t\trefinementIdentities: definition.refinementIdentities.toSorted(\n\t\t\t\t\t\t(leftIdentity, rightIdentity) => leftIdentity.localeCompare(rightIdentity),\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t]),\n\t\t),\n\t};\n}\n\nexport const PORTABLE_CONTRACT_ADAPTERS = Object.fromEntries(\n\tObject.entries(allPortableContractDefinitions).map(([schemaId, definition]) => [\n\t\tschemaId,\n\t\tcreatePortableContractAdapter({ definition, schemaId }),\n\t]),\n) satisfies Readonly<Record<string, PortableContractAdapter>>;\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { r as withPortableSuperRefinement } from "./portable-refinement-authoring-oFICWLOo.js";
2
- import { n as RequestIdSchema } from "./request-id-schema-DQ84TX-D.js";
2
+ import { i as RequestIdSchema } from "./safe-diagnostic-schema-CpcrwZlp.js";
3
3
  import { i as JsonObjectSchema } from "./json-value-schema-rxMrw9uZ.js";
4
4
  import { z } from "zod";
5
5
  //#region src/portal-call-surface/models/portal-batch-id-refinement.ts
@@ -38,4 +38,4 @@ const PortalCallRequestSchema = withPortableSuperRefinement({
38
38
  //#endregion
39
39
  export { addDuplicateItemIdIssues as i, PortalCallItemRequestSchema as n, PortalCallRequestSchema as r, PortalBatchMaxItems as t };
40
40
 
41
- //# sourceMappingURL=portal-call-request-schema-B1dbBjmW.js.map
41
+ //# sourceMappingURL=portal-call-request-schema-8wgpdxjI.js.map