@agent-vm/agent-portal-sdk 0.0.140 → 0.0.142

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 (120) hide show
  1. package/contract-fixtures/portable-contracts/approval/decision-request-approved.fixture.json +18 -0
  2. package/contract-fixtures/portable-contracts/approval/decision-result-recorded.fixture.json +18 -0
  3. package/contract-fixtures/portable-contracts/approval/presentation-outcome-approved.fixture.json +16 -0
  4. package/contract-fixtures/portable-contracts/approval/presentation-request.fixture.json +32 -0
  5. package/contract-fixtures/portable-contracts/discovery/describe-result.fixture.json +7 -3
  6. package/contract-fixtures/portable-contracts/discovery/list-result.fixture.json +15 -3
  7. package/contract-fixtures/portable-contracts/discovery/search-result.fixture.json +7 -3
  8. package/contract-fixtures/portable-contracts/gateway/managed-agent-projection-hermes-valid.fixture.json +7 -4
  9. package/contract-fixtures/portable-contracts/gateway/managed-agent-projection-long-namespace-name.fixture.json +13 -6
  10. package/contract-fixtures/portable-contracts/gateway/managed-agent-projection-namespace-names-code-point-order.fixture.json +7 -4
  11. package/contract-fixtures/portable-contracts/gateway/managed-agent-projection-namespace-names-code-point-reverse.fixture.json +6 -3
  12. package/contract-fixtures/portable-contracts/gateway/managed-agent-projection-namespace-names-duplicate.fixture.json +6 -3
  13. package/contract-fixtures/portable-contracts/gateway/managed-agent-projection-namespace-names-unsorted.fixture.json +6 -3
  14. package/contract-fixtures/portable-contracts/gateway/managed-agent-projection-old-authority-rejected.fixture.json +5 -2
  15. package/contract-fixtures/portable-contracts/gateway/managed-agent-projection-openclaw-valid.fixture.json +7 -4
  16. package/contract-fixtures/portable-contracts/gateway/managed-agent-projection-self-root-rejected.fixture.json +5 -2
  17. package/contract-fixtures/portable-contracts/gateway/managed-agent-projection-work-root-rejected.fixture.json +5 -2
  18. package/dist/adapter-boundary/index.d.ts +1 -1
  19. package/dist/approval-surface/index.d.ts +2 -2
  20. package/dist/approval-surface/index.js +2 -2
  21. package/dist/approval-surface-Cqk_hAtN.js +132 -0
  22. package/dist/approval-surface-Cqk_hAtN.js.map +1 -0
  23. package/dist/artifact-surface/index.d.ts +1 -1
  24. package/dist/artifact-surface/index.js +1 -1
  25. package/dist/{artifact-surface-BIDasG5x.js → artifact-surface-CHEu4tDd.js} +2 -2
  26. package/dist/{artifact-surface-BIDasG5x.js.map → artifact-surface-CHEu4tDd.js.map} +1 -1
  27. package/dist/capability-description-surface/index.d.ts +1 -1
  28. package/dist/capability-description-surface/index.js +2 -2
  29. package/dist/capability-description-surface-CplIb93y.js +2 -0
  30. package/dist/{capability-descriptor-schema-DmzUtpji.js → capability-descriptor-schema-v9tj7yKr.js} +2 -2
  31. package/dist/{capability-descriptor-schema-DmzUtpji.js.map → capability-descriptor-schema-v9tj7yKr.js.map} +1 -1
  32. package/dist/cli/tool-portal.js +6 -6
  33. package/dist/contracts/index.d.ts +1 -1
  34. package/dist/contracts/index.js +1 -1
  35. package/dist/{contracts-3pjrcMjD.js → contracts-mBPxCxoG.js} +15 -14
  36. package/dist/{contracts-3pjrcMjD.js.map → contracts-mBPxCxoG.js.map} +1 -1
  37. package/dist/gateway-runtime-client/index.d.ts +11 -4
  38. package/dist/gateway-runtime-client/index.d.ts.map +1 -1
  39. package/dist/gateway-runtime-client/index.js +22 -5
  40. package/dist/gateway-runtime-client/index.js.map +1 -1
  41. package/dist/gateway-runtime-local-exec/gateway-runtime-local-exec-helper.js +1 -1
  42. package/dist/gateway-runtime-local-exec/index.js +1 -1
  43. package/dist/{gateway-runtime-local-exec-transport-DjxMXdT9.js → gateway-runtime-local-exec-transport-CO2bQ3wz.js} +1 -1
  44. package/dist/{gateway-runtime-local-exec-transport-DjxMXdT9.js.map → gateway-runtime-local-exec-transport-CO2bQ3wz.js.map} +1 -1
  45. package/dist/{index-D4-HMHHY.d.ts → index-BIvLq827.d.ts} +3 -3
  46. package/dist/{index-D4-HMHHY.d.ts.map → index-BIvLq827.d.ts.map} +1 -1
  47. package/dist/{index-CZUAZ9ZZ.d.ts → index-BQj9hHds.d.ts} +4 -4
  48. package/dist/{index-CZUAZ9ZZ.d.ts.map → index-BQj9hHds.d.ts.map} +1 -1
  49. package/dist/{index-BoYiYKiy.d.ts → index-Ba_G25p_.d.ts} +37 -37
  50. package/dist/{index-BoYiYKiy.d.ts.map → index-Ba_G25p_.d.ts.map} +1 -1
  51. package/dist/{index-BgKPbuap.d.ts → index-Badq9e6i.d.ts} +1 -1
  52. package/dist/{index-BgKPbuap.d.ts.map → index-Badq9e6i.d.ts.map} +1 -1
  53. package/dist/{index-DqMFYBbN.d.ts → index-C-QFWaH5.d.ts} +39 -6
  54. package/dist/index-C-QFWaH5.d.ts.map +1 -0
  55. package/dist/{index-BXYUf57O.d.ts → index-C8O_HiyA.d.ts} +17 -17
  56. package/dist/{index-BXYUf57O.d.ts.map → index-C8O_HiyA.d.ts.map} +1 -1
  57. package/dist/index-COlx8Y1g.d.ts +124 -0
  58. package/dist/index-COlx8Y1g.d.ts.map +1 -0
  59. package/dist/{index-B_xYdo3v.d.ts → index-DDLN0DE_.d.ts} +2 -2
  60. package/dist/{index-B_xYdo3v.d.ts.map → index-DDLN0DE_.d.ts.map} +1 -1
  61. package/dist/index-D_69tlLY.d.ts +29 -0
  62. package/dist/index-D_69tlLY.d.ts.map +1 -0
  63. package/dist/{index-C5NhyO2R.d.ts → index-tmZkznV6.d.ts} +5 -2
  64. package/dist/{index-C5NhyO2R.d.ts.map → index-tmZkznV6.d.ts.map} +1 -1
  65. package/dist/index.d.ts +12 -12
  66. package/dist/index.js +16 -15
  67. package/dist/{json-value-schema-BGfMDOGA.js → json-value-schema-Br5M7d7X.js} +2 -2
  68. package/dist/{json-value-schema-BGfMDOGA.js.map → json-value-schema-Br5M7d7X.js.map} +1 -1
  69. package/dist/{json-value-schema-C-87ATB3.d.ts → json-value-schema-CwDmttWU.d.ts} +1 -1
  70. package/dist/{json-value-schema-C-87ATB3.d.ts.map → json-value-schema-CwDmttWU.d.ts.map} +1 -1
  71. package/dist/namespace-discovery-schema-DwbJHVLu.js +21 -0
  72. package/dist/namespace-discovery-schema-DwbJHVLu.js.map +1 -0
  73. package/dist/{node-tool-portal-mcp-transport-CnB8MCW2.js → node-tool-portal-mcp-transport-xFo0i37Q.js} +1 -1
  74. package/dist/{node-tool-portal-mcp-transport-CnB8MCW2.js.map → node-tool-portal-mcp-transport-xFo0i37Q.js.map} +1 -1
  75. package/dist/portable-contracts/index.d.ts +1 -1
  76. package/dist/portable-contracts/index.js +2 -2
  77. package/dist/{portable-contracts-C5rtqe-H.js → portable-contracts-CKeFnjAA.js} +28 -11
  78. package/dist/portable-contracts-CKeFnjAA.js.map +1 -0
  79. package/dist/{portable-refinement-authoring-CvlKRs_Z.js → portable-refinement-authoring-C1Q92x2G.js} +29 -6
  80. package/dist/portable-refinement-authoring-C1Q92x2G.js.map +1 -0
  81. package/dist/{portal-call-request-schema-DYxcWijW.js → portal-call-request-schema-Cl0kTLaX.js} +4 -4
  82. package/dist/{portal-call-request-schema-DYxcWijW.js.map → portal-call-request-schema-Cl0kTLaX.js.map} +1 -1
  83. package/dist/{portal-call-result-schema-CVWMGu2y.js → portal-call-result-schema-B25_rzZZ.js} +20 -10
  84. package/dist/portal-call-result-schema-B25_rzZZ.js.map +1 -0
  85. package/dist/{portal-call-result-schema-CGopcrjJ.d.ts → portal-call-result-schema-CS2rX3oP.d.ts} +1162 -196
  86. package/dist/portal-call-result-schema-CS2rX3oP.d.ts.map +1 -0
  87. package/dist/portal-call-surface/index.d.ts +3 -3
  88. package/dist/portal-call-surface/index.js +5 -5
  89. package/dist/{portal-call-surface-B_oQxm5X.js → portal-call-surface-qykVz_8k.js} +6 -6
  90. package/dist/{portal-call-surface-B_oQxm5X.js.map → portal-call-surface-qykVz_8k.js.map} +1 -1
  91. package/dist/{portal-error-schema-BCALC7xt.js → portal-error-schema-TSNrpQSy.js} +1 -1
  92. package/dist/{portal-error-schema-BCALC7xt.js.map → portal-error-schema-TSNrpQSy.js.map} +1 -1
  93. package/dist/portal-event-surface/index.d.ts +1 -1
  94. package/dist/portal-event-surface/index.js +2 -2
  95. package/dist/{portal-event-surface-DSWv7Kgi.js → portal-event-surface-Bp3rXsBz.js} +3 -3
  96. package/dist/{portal-event-surface-DSWv7Kgi.js.map → portal-event-surface-Bp3rXsBz.js.map} +1 -1
  97. package/dist/{request-id-schema-DGLLX-tp.js → request-id-schema-Hq_6lSFV.js} +2 -2
  98. package/dist/{request-id-schema-DGLLX-tp.js.map → request-id-schema-Hq_6lSFV.js.map} +1 -1
  99. package/dist/testing/index.d.ts +2 -2
  100. package/dist/testing/index.js +2 -2
  101. package/dist/tool-portal-mcp-client/index.d.ts +1 -1
  102. package/dist/tool-portal-mcp-client/index.js +1 -1
  103. package/dist/tool-portal-mcp-client/node-tool-portal-mcp-transport.d.ts +1 -1
  104. package/dist/tool-portal-mcp-client/node-tool-portal-mcp-transport.js +1 -1
  105. package/dist/{tool-portal-mcp-client-nMGxqQ-A.js → tool-portal-mcp-client-DZoloMod.js} +5 -5
  106. package/dist/{tool-portal-mcp-client-nMGxqQ-A.js.map → tool-portal-mcp-client-DZoloMod.js.map} +1 -1
  107. package/package.json +1 -1
  108. package/portable-contract-schema-manifest.json +275 -9
  109. package/dist/approval-surface-z5JUqa0K.js +0 -20
  110. package/dist/approval-surface-z5JUqa0K.js.map +0 -1
  111. package/dist/capability-description-surface-CyPgad9d.js +0 -2
  112. package/dist/index-Cwtgu-ga.d.ts +0 -64
  113. package/dist/index-Cwtgu-ga.d.ts.map +0 -1
  114. package/dist/index-DqMFYBbN.d.ts.map +0 -1
  115. package/dist/index-dKXgrOwm.d.ts +0 -17
  116. package/dist/index-dKXgrOwm.d.ts.map +0 -1
  117. package/dist/portable-contracts-C5rtqe-H.js.map +0 -1
  118. package/dist/portable-refinement-authoring-CvlKRs_Z.js.map +0 -1
  119. package/dist/portal-call-result-schema-CGopcrjJ.d.ts.map +0 -1
  120. package/dist/portal-call-result-schema-CVWMGu2y.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"node-tool-portal-mcp-transport-CnB8MCW2.js","names":[],"sources":["../src/tool-portal-mcp-client/node-tool-portal-mcp-transport.ts"],"sourcesContent":["import { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';\nimport { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';\nimport type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\n\nimport type { ToolPortalMcpResourceContent, ToolPortalMcpTransport } from './index.js';\n\nconst standaloneToolPortalApprovalMetaKey = 'agent-vm/tool-portal-approval-token';\n\nexport type CreateNodeToolPortalMcpTransportProps =\n\t| {\n\t\t\treadonly authorization: string;\n\t\t\treadonly endpoint: URL;\n\t\t\treadonly kind: 'http';\n\t }\n\t| {\n\t\t\treadonly argv: readonly string[];\n\t\t\treadonly executable: string;\n\t\t\treadonly kind: 'scoped-stdio';\n\t };\n\ntype NodeToolPortalSdkTransport = StdioClientTransport | StreamableHTTPClientTransport;\n\ninterface PendingRequestCapture {\n\taborted: boolean;\n\treadonly method: string;\n\trequestId?: number | string;\n\treadonly sendCancellation: (requestId: number | string) => void;\n}\n\nfunction isObjectRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction normalizeResourceContent(\n\tcontent: Awaited<ReturnType<Client['readResource']>>['contents'][number],\n): ToolPortalMcpResourceContent {\n\tif ('blob' in content) {\n\t\treturn content.mimeType === undefined\n\t\t\t? { blob: content.blob, kind: 'blob', uri: content.uri }\n\t\t\t: { blob: content.blob, kind: 'blob', mediaType: content.mimeType, uri: content.uri };\n\t}\n\treturn content.mimeType === undefined\n\t\t? { kind: 'text', text: content.text, uri: content.uri }\n\t\t: { kind: 'text', mediaType: content.mimeType, text: content.text, uri: content.uri };\n}\n\nfunction createSdkTransport(\n\tprops: CreateNodeToolPortalMcpTransportProps,\n): NodeToolPortalSdkTransport {\n\tif (props.kind === 'http') {\n\t\treturn new StreamableHTTPClientTransport(props.endpoint, {\n\t\t\trequestInit: {\n\t\t\t\theaders: { authorization: `Bearer ${props.authorization}` },\n\t\t\t},\n\t\t});\n\t}\n\treturn new StdioClientTransport({\n\t\targs: [...props.argv],\n\t\tcommand: props.executable,\n\t\tstderr: 'pipe',\n\t});\n}\n\nfunction createClientTransportBridge(\n\ttransport: NodeToolPortalSdkTransport,\n\tpendingRequestCaptures: PendingRequestCapture[],\n): Transport {\n\tconst clientTransport: Transport = {\n\t\tclose: async () => await transport.close(),\n\t\tsend: async (message, options) => {\n\t\t\tconst messageRecord: unknown = message;\n\t\t\tif (\n\t\t\t\tisObjectRecord(messageRecord) &&\n\t\t\t\ttypeof messageRecord['method'] === 'string' &&\n\t\t\t\t(typeof messageRecord['id'] === 'number' || typeof messageRecord['id'] === 'string')\n\t\t\t) {\n\t\t\t\tconst requestMethod = messageRecord['method'];\n\t\t\t\tconst requestId = messageRecord['id'];\n\t\t\t\tconst captureIndex = pendingRequestCaptures.findIndex(\n\t\t\t\t\t(capture) => capture.method === requestMethod && capture.requestId === undefined,\n\t\t\t\t);\n\t\t\t\tconst capture =\n\t\t\t\t\tcaptureIndex < 0 ? undefined : pendingRequestCaptures.splice(captureIndex, 1)[0];\n\t\t\t\tif (capture !== undefined) {\n\t\t\t\t\tcapture.requestId = requestId;\n\t\t\t\t\tif (capture.aborted) capture.sendCancellation(requestId);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (transport instanceof StreamableHTTPClientTransport) {\n\t\t\t\tawait transport.send(message, options);\n\t\t\t} else {\n\t\t\t\tawait transport.send(message);\n\t\t\t}\n\t\t},\n\t\tstart: async () => {\n\t\t\t// oxlint-disable-next-line unicorn/prefer-add-event-listener -- MCP Transport uses callback properties, not EventTarget.\n\t\t\tif (clientTransport.onclose !== undefined) transport.onclose = clientTransport.onclose;\n\t\t\t// oxlint-disable-next-line unicorn/prefer-add-event-listener -- MCP Transport uses callback properties, not EventTarget.\n\t\t\tif (clientTransport.onerror !== undefined) transport.onerror = clientTransport.onerror;\n\t\t\t// oxlint-disable-next-line unicorn/prefer-add-event-listener -- MCP Transport uses callback properties, not EventTarget.\n\t\t\tif (clientTransport.onmessage !== undefined) transport.onmessage = clientTransport.onmessage;\n\t\t\tawait transport.start();\n\t\t},\n\t\t...(transport instanceof StreamableHTTPClientTransport\n\t\t\t? { setProtocolVersion: (version: string): void => transport.setProtocolVersion(version) }\n\t\t\t: {}),\n\t};\n\treturn clientTransport;\n}\n\n/** Standard MCP transport adapter for the portable Tool Portal client. */\nexport function createNodeToolPortalMcpTransport(\n\tprops: CreateNodeToolPortalMcpTransportProps,\n): ToolPortalMcpTransport {\n\tconst client = new Client({ name: 'tool-portal', version: '1.0.0' });\n\tconst transport = createSdkTransport(props);\n\tconst pendingRequestCaptures: PendingRequestCapture[] = [];\n\tconst clientTransport = createClientTransportBridge(transport, pendingRequestCaptures);\n\n\tasync function requestWithCanonicalResultGrace<TResult>(requestProps: {\n\t\treadonly method: string;\n\t\treadonly options?: { readonly resultGraceAfterAbortMs?: number; readonly signal?: AbortSignal };\n\t\treadonly request: () => Promise<TResult>;\n\t}): Promise<TResult> {\n\t\tconst signal = requestProps.options?.signal;\n\t\tconst graceMilliseconds = requestProps.options?.resultGraceAfterAbortMs;\n\t\tif (signal === undefined || graceMilliseconds === undefined)\n\t\t\treturn await requestProps.request();\n\t\tif (!Number.isInteger(graceMilliseconds) || graceMilliseconds <= 0) {\n\t\t\tthrow new TypeError('Tool Portal canonical-result grace must be a positive integer.');\n\t\t}\n\t\tlet rejectAfterGrace: ((reason: unknown) => void) | undefined;\n\t\tlet graceTimer: NodeJS.Timeout | undefined;\n\t\tlet cancellationSent = false;\n\t\tconst sendCancellation = (requestId: number | string): void => {\n\t\t\tif (cancellationSent) return;\n\t\t\tcancellationSent = true;\n\t\t\tvoid transport\n\t\t\t\t.send({\n\t\t\t\t\tjsonrpc: '2.0',\n\t\t\t\t\tmethod: 'notifications/cancelled',\n\t\t\t\t\tparams: { reason: String(signal.reason), requestId },\n\t\t\t\t})\n\t\t\t\t.catch(() => undefined);\n\t\t};\n\t\tconst capture: PendingRequestCapture = {\n\t\t\taborted: signal.aborted,\n\t\t\tmethod: requestProps.method,\n\t\t\tsendCancellation,\n\t\t};\n\t\tpendingRequestCaptures.push(capture);\n\t\tconst cancellationDeadline = new Promise<never>((_resolve, reject) => {\n\t\t\trejectAfterGrace = reject;\n\t\t});\n\t\tconst onAbort = (): void => {\n\t\t\tcapture.aborted = true;\n\t\t\tif (capture.requestId !== undefined) sendCancellation(capture.requestId);\n\t\t\tgraceTimer = setTimeout(\n\t\t\t\t() => rejectAfterGrace?.(signal.reason ?? new Error('Tool Portal request interrupted.')),\n\t\t\t\tgraceMilliseconds,\n\t\t\t);\n\t\t};\n\t\tsignal.addEventListener('abort', onAbort, { once: true });\n\t\tif (signal.aborted) onAbort();\n\t\ttry {\n\t\t\treturn await Promise.race([requestProps.request(), cancellationDeadline]);\n\t\t} finally {\n\t\t\tsignal.removeEventListener('abort', onAbort);\n\t\t\tif (graceTimer !== undefined) clearTimeout(graceTimer);\n\t\t\tconst captureIndex = pendingRequestCaptures.indexOf(capture);\n\t\t\tif (captureIndex >= 0) pendingRequestCaptures.splice(captureIndex, 1);\n\t\t}\n\t}\n\treturn {\n\t\tcallTool: async (call, options) => {\n\t\t\tif (!isObjectRecord(call.arguments)) {\n\t\t\t\tthrow new TypeError('Tool Portal MCP arguments must be an object.');\n\t\t\t}\n\t\t\tconst callArguments = call.arguments;\n\t\t\tconst sdkRequestOptions =\n\t\t\t\toptions?.resultGraceAfterAbortMs === undefined ? options : undefined;\n\t\t\tconst result = await requestWithCanonicalResultGrace({\n\t\t\t\tmethod: 'tools/call',\n\t\t\t\t...(options === undefined ? {} : { options }),\n\t\t\t\trequest: async () =>\n\t\t\t\t\tawait client.callTool(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...(call.approvalToken === undefined\n\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\t\t\t_meta: {\n\t\t\t\t\t\t\t\t\t\t\t[standaloneToolPortalApprovalMetaKey]: call.approvalToken,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\targuments: callArguments,\n\t\t\t\t\t\t\tname: call.name,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tsdkRequestOptions,\n\t\t\t\t\t),\n\t\t\t});\n\t\t\treturn result.structuredContent === undefined\n\t\t\t\t? {}\n\t\t\t\t: { structuredContent: result.structuredContent };\n\t\t},\n\t\tclose: async () => {\n\t\t\tawait client.close();\n\t\t},\n\t\tconnect: async () => {\n\t\t\tawait client.connect(clientTransport);\n\t\t},\n\t\treadResource: async (request, options) => {\n\t\t\tconst sdkRequestOptions =\n\t\t\t\toptions?.resultGraceAfterAbortMs === undefined ? options : undefined;\n\t\t\tconst result = await requestWithCanonicalResultGrace({\n\t\t\t\tmethod: 'resources/read',\n\t\t\t\t...(options === undefined ? {} : { options }),\n\t\t\t\trequest: async () => await client.readResource(request, sdkRequestOptions),\n\t\t\t});\n\t\t\treturn { contents: result.contents.map(normalizeResourceContent) };\n\t\t},\n\t};\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"node-tool-portal-mcp-transport-xFo0i37Q.js","names":[],"sources":["../src/tool-portal-mcp-client/node-tool-portal-mcp-transport.ts"],"sourcesContent":["import { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';\nimport { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';\nimport type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';\n\nimport type { ToolPortalMcpResourceContent, ToolPortalMcpTransport } from './index.js';\n\nconst standaloneToolPortalApprovalMetaKey = 'agent-vm/tool-portal-approval-token';\n\nexport type CreateNodeToolPortalMcpTransportProps =\n\t| {\n\t\t\treadonly authorization: string;\n\t\t\treadonly endpoint: URL;\n\t\t\treadonly kind: 'http';\n\t }\n\t| {\n\t\t\treadonly argv: readonly string[];\n\t\t\treadonly executable: string;\n\t\t\treadonly kind: 'scoped-stdio';\n\t };\n\ntype NodeToolPortalSdkTransport = StdioClientTransport | StreamableHTTPClientTransport;\n\ninterface PendingRequestCapture {\n\taborted: boolean;\n\treadonly method: string;\n\trequestId?: number | string;\n\treadonly sendCancellation: (requestId: number | string) => void;\n}\n\nfunction isObjectRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction normalizeResourceContent(\n\tcontent: Awaited<ReturnType<Client['readResource']>>['contents'][number],\n): ToolPortalMcpResourceContent {\n\tif ('blob' in content) {\n\t\treturn content.mimeType === undefined\n\t\t\t? { blob: content.blob, kind: 'blob', uri: content.uri }\n\t\t\t: { blob: content.blob, kind: 'blob', mediaType: content.mimeType, uri: content.uri };\n\t}\n\treturn content.mimeType === undefined\n\t\t? { kind: 'text', text: content.text, uri: content.uri }\n\t\t: { kind: 'text', mediaType: content.mimeType, text: content.text, uri: content.uri };\n}\n\nfunction createSdkTransport(\n\tprops: CreateNodeToolPortalMcpTransportProps,\n): NodeToolPortalSdkTransport {\n\tif (props.kind === 'http') {\n\t\treturn new StreamableHTTPClientTransport(props.endpoint, {\n\t\t\trequestInit: {\n\t\t\t\theaders: { authorization: `Bearer ${props.authorization}` },\n\t\t\t},\n\t\t});\n\t}\n\treturn new StdioClientTransport({\n\t\targs: [...props.argv],\n\t\tcommand: props.executable,\n\t\tstderr: 'pipe',\n\t});\n}\n\nfunction createClientTransportBridge(\n\ttransport: NodeToolPortalSdkTransport,\n\tpendingRequestCaptures: PendingRequestCapture[],\n): Transport {\n\tconst clientTransport: Transport = {\n\t\tclose: async () => await transport.close(),\n\t\tsend: async (message, options) => {\n\t\t\tconst messageRecord: unknown = message;\n\t\t\tif (\n\t\t\t\tisObjectRecord(messageRecord) &&\n\t\t\t\ttypeof messageRecord['method'] === 'string' &&\n\t\t\t\t(typeof messageRecord['id'] === 'number' || typeof messageRecord['id'] === 'string')\n\t\t\t) {\n\t\t\t\tconst requestMethod = messageRecord['method'];\n\t\t\t\tconst requestId = messageRecord['id'];\n\t\t\t\tconst captureIndex = pendingRequestCaptures.findIndex(\n\t\t\t\t\t(capture) => capture.method === requestMethod && capture.requestId === undefined,\n\t\t\t\t);\n\t\t\t\tconst capture =\n\t\t\t\t\tcaptureIndex < 0 ? undefined : pendingRequestCaptures.splice(captureIndex, 1)[0];\n\t\t\t\tif (capture !== undefined) {\n\t\t\t\t\tcapture.requestId = requestId;\n\t\t\t\t\tif (capture.aborted) capture.sendCancellation(requestId);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (transport instanceof StreamableHTTPClientTransport) {\n\t\t\t\tawait transport.send(message, options);\n\t\t\t} else {\n\t\t\t\tawait transport.send(message);\n\t\t\t}\n\t\t},\n\t\tstart: async () => {\n\t\t\t// oxlint-disable-next-line unicorn/prefer-add-event-listener -- MCP Transport uses callback properties, not EventTarget.\n\t\t\tif (clientTransport.onclose !== undefined) transport.onclose = clientTransport.onclose;\n\t\t\t// oxlint-disable-next-line unicorn/prefer-add-event-listener -- MCP Transport uses callback properties, not EventTarget.\n\t\t\tif (clientTransport.onerror !== undefined) transport.onerror = clientTransport.onerror;\n\t\t\t// oxlint-disable-next-line unicorn/prefer-add-event-listener -- MCP Transport uses callback properties, not EventTarget.\n\t\t\tif (clientTransport.onmessage !== undefined) transport.onmessage = clientTransport.onmessage;\n\t\t\tawait transport.start();\n\t\t},\n\t\t...(transport instanceof StreamableHTTPClientTransport\n\t\t\t? { setProtocolVersion: (version: string): void => transport.setProtocolVersion(version) }\n\t\t\t: {}),\n\t};\n\treturn clientTransport;\n}\n\n/** Standard MCP transport adapter for the portable Tool Portal client. */\nexport function createNodeToolPortalMcpTransport(\n\tprops: CreateNodeToolPortalMcpTransportProps,\n): ToolPortalMcpTransport {\n\tconst client = new Client({ name: 'tool-portal', version: '1.0.0' });\n\tconst transport = createSdkTransport(props);\n\tconst pendingRequestCaptures: PendingRequestCapture[] = [];\n\tconst clientTransport = createClientTransportBridge(transport, pendingRequestCaptures);\n\n\tasync function requestWithCanonicalResultGrace<TResult>(requestProps: {\n\t\treadonly method: string;\n\t\treadonly options?: { readonly resultGraceAfterAbortMs?: number; readonly signal?: AbortSignal };\n\t\treadonly request: () => Promise<TResult>;\n\t}): Promise<TResult> {\n\t\tconst signal = requestProps.options?.signal;\n\t\tconst graceMilliseconds = requestProps.options?.resultGraceAfterAbortMs;\n\t\tif (signal === undefined || graceMilliseconds === undefined)\n\t\t\treturn await requestProps.request();\n\t\tif (!Number.isInteger(graceMilliseconds) || graceMilliseconds <= 0) {\n\t\t\tthrow new TypeError('Tool Portal canonical-result grace must be a positive integer.');\n\t\t}\n\t\tlet rejectAfterGrace: ((reason: unknown) => void) | undefined;\n\t\tlet graceTimer: NodeJS.Timeout | undefined;\n\t\tlet cancellationSent = false;\n\t\tconst sendCancellation = (requestId: number | string): void => {\n\t\t\tif (cancellationSent) return;\n\t\t\tcancellationSent = true;\n\t\t\tvoid transport\n\t\t\t\t.send({\n\t\t\t\t\tjsonrpc: '2.0',\n\t\t\t\t\tmethod: 'notifications/cancelled',\n\t\t\t\t\tparams: { reason: String(signal.reason), requestId },\n\t\t\t\t})\n\t\t\t\t.catch(() => undefined);\n\t\t};\n\t\tconst capture: PendingRequestCapture = {\n\t\t\taborted: signal.aborted,\n\t\t\tmethod: requestProps.method,\n\t\t\tsendCancellation,\n\t\t};\n\t\tpendingRequestCaptures.push(capture);\n\t\tconst cancellationDeadline = new Promise<never>((_resolve, reject) => {\n\t\t\trejectAfterGrace = reject;\n\t\t});\n\t\tconst onAbort = (): void => {\n\t\t\tcapture.aborted = true;\n\t\t\tif (capture.requestId !== undefined) sendCancellation(capture.requestId);\n\t\t\tgraceTimer = setTimeout(\n\t\t\t\t() => rejectAfterGrace?.(signal.reason ?? new Error('Tool Portal request interrupted.')),\n\t\t\t\tgraceMilliseconds,\n\t\t\t);\n\t\t};\n\t\tsignal.addEventListener('abort', onAbort, { once: true });\n\t\tif (signal.aborted) onAbort();\n\t\ttry {\n\t\t\treturn await Promise.race([requestProps.request(), cancellationDeadline]);\n\t\t} finally {\n\t\t\tsignal.removeEventListener('abort', onAbort);\n\t\t\tif (graceTimer !== undefined) clearTimeout(graceTimer);\n\t\t\tconst captureIndex = pendingRequestCaptures.indexOf(capture);\n\t\t\tif (captureIndex >= 0) pendingRequestCaptures.splice(captureIndex, 1);\n\t\t}\n\t}\n\treturn {\n\t\tcallTool: async (call, options) => {\n\t\t\tif (!isObjectRecord(call.arguments)) {\n\t\t\t\tthrow new TypeError('Tool Portal MCP arguments must be an object.');\n\t\t\t}\n\t\t\tconst callArguments = call.arguments;\n\t\t\tconst sdkRequestOptions =\n\t\t\t\toptions?.resultGraceAfterAbortMs === undefined ? options : undefined;\n\t\t\tconst result = await requestWithCanonicalResultGrace({\n\t\t\t\tmethod: 'tools/call',\n\t\t\t\t...(options === undefined ? {} : { options }),\n\t\t\t\trequest: async () =>\n\t\t\t\t\tawait client.callTool(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...(call.approvalToken === undefined\n\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\t\t\t_meta: {\n\t\t\t\t\t\t\t\t\t\t\t[standaloneToolPortalApprovalMetaKey]: call.approvalToken,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\targuments: callArguments,\n\t\t\t\t\t\t\tname: call.name,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tsdkRequestOptions,\n\t\t\t\t\t),\n\t\t\t});\n\t\t\treturn result.structuredContent === undefined\n\t\t\t\t? {}\n\t\t\t\t: { structuredContent: result.structuredContent };\n\t\t},\n\t\tclose: async () => {\n\t\t\tawait client.close();\n\t\t},\n\t\tconnect: async () => {\n\t\t\tawait client.connect(clientTransport);\n\t\t},\n\t\treadResource: async (request, options) => {\n\t\t\tconst sdkRequestOptions =\n\t\t\t\toptions?.resultGraceAfterAbortMs === undefined ? options : undefined;\n\t\t\tconst result = await requestWithCanonicalResultGrace({\n\t\t\t\tmethod: 'resources/read',\n\t\t\t\t...(options === undefined ? {} : { options }),\n\t\t\t\trequest: async () => await client.readResource(request, sdkRequestOptions),\n\t\t\t});\n\t\t\treturn { contents: result.contents.map(normalizeResourceContent) };\n\t\t},\n\t};\n}\n"],"mappings":"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"}
@@ -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-DqMFYBbN.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-C-QFWaH5.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
- import { i as PORTABLE_REFINEMENT_IDENTITIES, r as PORTABLE_REFINEMENT_DESCRIPTORS } from "../portable-refinement-authoring-CvlKRs_Z.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-C5rtqe-H.js";
1
+ import { i as PORTABLE_REFINEMENT_IDENTITIES, r as PORTABLE_REFINEMENT_DESCRIPTORS } from "../portable-refinement-authoring-C1Q92x2G.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-CKeFnjAA.js";
3
3
  export { PORTABLE_CONTRACT_ADAPTERS, PORTABLE_CONTRACT_PROTOCOL_VERSION, PORTABLE_REFINEMENT_DESCRIPTORS, PORTABLE_REFINEMENT_IDENTITIES, assertPortableContractSchemaIsExportable, createPortableContractSchemaManifest, encodeCanonicalJson };
@@ -1,12 +1,13 @@
1
- import { i as PORTABLE_REFINEMENT_IDENTITIES, t as portableRefinementIdentityForCheck } from "./portable-refinement-authoring-CvlKRs_Z.js";
1
+ import { i as PORTABLE_REFINEMENT_IDENTITIES, t as portableRefinementIdentityForCheck } from "./portable-refinement-authoring-C1Q92x2G.js";
2
2
  import { t as ArtifactReferenceSchema } from "./artifact-reference-schema-CiEjxYPd.js";
3
- import { o as JsonValueSchema } from "./json-value-schema-BGfMDOGA.js";
4
- import { d as PortalListResultSchema, i as PortalCallResultSchema, m as PortalSearchResultSchema, r as PortalCallItemResultSchema, s as PortalDescribeResultSchema } from "./portal-call-result-schema-CVWMGu2y.js";
5
- import { a as PortalArtifactReadRequestSchema, o as PortalArtifactReadResultSchema } from "./artifact-surface-BIDasG5x.js";
6
- 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-3pjrcMjD.js";
7
- import { r as PortalCallRequestSchema } from "./portal-call-request-schema-DYxcWijW.js";
8
- import { a as PortalListRequestSchema, r as PortalSearchRequestSchema, s as PortalDescribeRequestSchema } from "./portal-call-surface-B_oQxm5X.js";
9
- import { o as PortalProgressEventSchema } from "./portal-event-surface-DSWv7Kgi.js";
3
+ import { o as JsonValueSchema } from "./json-value-schema-Br5M7d7X.js";
4
+ import { C as PortalSearchResultSchema, b as PortalListResultSchema, f as PortalCallItemResultSchema, g as PortalDescribeResultSchema, p as PortalCallResultSchema } from "./portal-call-result-schema-B25_rzZZ.js";
5
+ import { i as GatewayApprovalPresentationRequestSchema, n as GatewayApprovalDecisionRequestSchema, r as GatewayApprovalDecisionResultSchema, t as ApprovalPresentationOutcomeSchema } from "./approval-surface-Cqk_hAtN.js";
6
+ import { a as PortalArtifactReadRequestSchema, o as PortalArtifactReadResultSchema } from "./artifact-surface-CHEu4tDd.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-mBPxCxoG.js";
8
+ import { r as PortalCallRequestSchema } from "./portal-call-request-schema-Cl0kTLaX.js";
9
+ import { a as PortalListRequestSchema, r as PortalSearchRequestSchema, s as PortalDescribeRequestSchema } from "./portal-call-surface-qykVz_8k.js";
10
+ import { o as PortalProgressEventSchema } from "./portal-event-surface-Bp3rXsBz.js";
10
11
  import { z } from "zod";
11
12
  //#region src/portable-contracts/portable-contract-runtime.ts
12
13
  const PORTABLE_CONTRACT_PROTOCOL_VERSION = 1;
@@ -88,7 +89,7 @@ function mapPortableIssue(props) {
88
89
  if (props.issue.message.includes("decoded canonical base64 content")) return "sandbox.binary-chunk.byte-length-mismatch";
89
90
  if (props.issue.message.includes("duplicate variable name")) return "sandbox.environment-variable.duplicate-name";
90
91
  if (props.issue.message.includes("duplicate configured agent id")) return "gateway.attachment.duplicate-agent-id";
91
- if (props.issue.message.includes("Managed Agent Projection Tool Portal namespace names")) return "gateway.managed-agent-projection.namespace-names";
92
+ if (props.issue.message.includes("Managed Agent Projection Tool Portal namespaces")) return "gateway.managed-agent-projection.namespaces";
92
93
  if (props.issue.message.includes("server-selected work root")) return "sandbox.path.not-work-relative";
93
94
  if (props.issue.message.startsWith("Duplicate portal item id")) return "portal.batch.unique-item-ids";
94
95
  if (props.issue.message.includes("reserved object property name")) return "portal.request-id.not-reserved";
@@ -221,12 +222,28 @@ const portableContractDefinitions = {
221
222
  }
222
223
  };
223
224
  const canonicalGatewayContractDefinitions = {
225
+ "gateway.approval.decision-request": {
226
+ refinementIdentities: [],
227
+ schema: GatewayApprovalDecisionRequestSchema
228
+ },
229
+ "gateway.approval.decision-result": {
230
+ refinementIdentities: [],
231
+ schema: GatewayApprovalDecisionResultSchema
232
+ },
233
+ "gateway.approval.presentation-outcome": {
234
+ refinementIdentities: [],
235
+ schema: ApprovalPresentationOutcomeSchema
236
+ },
237
+ "gateway.approval.presentation-request": {
238
+ refinementIdentities: ["gateway.approval.arguments-preview.utf8-bytes"],
239
+ schema: GatewayApprovalPresentationRequestSchema
240
+ },
224
241
  "gateway.attachment.metadata": {
225
242
  refinementIdentities: ["gateway.attachment.unique-agent-ids"],
226
243
  schema: GatewayRuntimeAttachmentMetadataSchema
227
244
  },
228
245
  "gateway.managed-agent-projection": {
229
- refinementIdentities: ["gateway.managed-agent-projection.namespace-names"],
246
+ refinementIdentities: ["gateway.managed-agent-projection.namespaces", "portal.namespace-discovery.summary-code-points"],
230
247
  schema: ManagedAgentProjectionSchema
231
248
  },
232
249
  "gateway.trusted-invocation-context": {
@@ -322,4 +339,4 @@ const PORTABLE_CONTRACT_ADAPTERS = Object.fromEntries(Object.entries(allPortable
322
339
  //#endregion
323
340
  export { encodeCanonicalJson as a, createPortableContractSchemaManifest as i, PORTABLE_CONTRACT_PROTOCOL_VERSION as n, assertPortableContractSchemaIsExportable as r, PORTABLE_CONTRACT_ADAPTERS as t };
324
341
 
325
- //# sourceMappingURL=portable-contracts-C5rtqe-H.js.map
342
+ //# sourceMappingURL=portable-contracts-CKeFnjAA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portable-contracts-CKeFnjAA.js","names":[],"sources":["../src/portable-contracts/portable-contract-runtime.ts"],"sourcesContent":["import { 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 { 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\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 { portableRefinementIdentityForCheck } 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\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\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 (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 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.map((issue) =>\n\t\t\t\t\t\t\t\t\t\tmapPortableIssue({ 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\treturn (\n\t\t(input['status'] === 'ok' && 'error' in input) ||\n\t\t(input['status'] === 'error' && 'value' in input)\n\t);\n}\n\nconst portableContractDefinitions = {\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.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: ['portal.request-id.not-reserved', 'portal.result.aggregate-status'],\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: ['portal.request-id.not-reserved', 'portal.result.aggregate-status'],\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: ['portal.request-id.not-reserved', 'portal.result.aggregate-status'],\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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"}
@@ -127,6 +127,28 @@ const PORTABLE_REFINEMENT_DESCRIPTORS = [
127
127
  values: { "/requests/*/schemaDetail": "summary" }
128
128
  }
129
129
  },
130
+ {
131
+ description: "Gateway approval argument previews remain inside the portable UTF-8 byte bound.",
132
+ errorCode: "gateway.approval.arguments-preview.above-maximum",
133
+ identity: "gateway.approval.arguments-preview.utf8-bytes",
134
+ kind: "structural-validation",
135
+ operation: {
136
+ fieldNames: ["argumentsPreview"],
137
+ kind: "maximum-utf8-bytes",
138
+ maximum: 4096
139
+ }
140
+ },
141
+ {
142
+ description: "Namespace discovery summaries remain inside the portable Unicode code-point bound.",
143
+ errorCode: "portal.namespace-discovery.summary-above-maximum",
144
+ identity: "portal.namespace-discovery.summary-code-points",
145
+ kind: "structural-validation",
146
+ operation: {
147
+ fieldNames: ["summary"],
148
+ kind: "maximum-code-points",
149
+ maximum: 500
150
+ }
151
+ },
130
152
  {
131
153
  description: "Gateway attachment metadata cannot repeat an admitted agent identity.",
132
154
  errorCode: "gateway.attachment.duplicate-agent-id",
@@ -138,13 +160,14 @@ const PORTABLE_REFINEMENT_DESCRIPTORS = [
138
160
  }
139
161
  },
140
162
  {
141
- description: "Managed Agent Projection namespace names must be sorted and unique.",
142
- errorCode: "gateway.managed-agent-projection.namespace-names",
143
- identity: "gateway.managed-agent-projection.namespace-names",
163
+ description: "Managed Agent Projection namespaces must be sorted and unique by namespace.",
164
+ errorCode: "gateway.managed-agent-projection.namespaces",
165
+ identity: "gateway.managed-agent-projection.namespaces",
144
166
  kind: "cross-field-validation",
145
167
  operation: {
146
- kind: "sorted-unique-string-items",
147
- path: "toolPortalNamespaceNames"
168
+ fieldName: "namespace",
169
+ kind: "sorted-unique-object-field-items",
170
+ path: "toolPortalNamespaces"
148
171
  }
149
172
  },
150
173
  {
@@ -203,4 +226,4 @@ function portableRefinementIdentityForCheck(check) {
203
226
  //#endregion
204
227
  export { PORTABLE_REFINEMENT_IDENTITIES as i, withPortableSuperRefinement as n, PORTABLE_REFINEMENT_DESCRIPTORS as r, portableRefinementIdentityForCheck as t };
205
228
 
206
- //# sourceMappingURL=portable-refinement-authoring-CvlKRs_Z.js.map
229
+ //# sourceMappingURL=portable-refinement-authoring-C1Q92x2G.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portable-refinement-authoring-C1Q92x2G.js","names":[],"sources":["../src/portable-contracts/portable-refinement-descriptors.ts","../src/portable-contracts/portable-refinement-authoring.ts"],"sourcesContent":["export type PortableRefinementKind =\n\t| 'canonical-normalization'\n\t| 'cross-field-validation'\n\t| 'default'\n\t| 'structural-validation';\n\nexport type PortableRefinementOperation =\n\t| {\n\t\t\treadonly kind: 'aggregate-status';\n\t\t\treadonly itemsField: string;\n\t\t\treadonly okField: string;\n\t }\n\t| { readonly kind: 'decoded-base64-byte-length' }\n\t| {\n\t\t\treadonly collectionPaths: readonly string[];\n\t\t\treadonly fieldName: string;\n\t\t\treadonly kind: 'unique-field';\n\t }\n\t| {\n\t\t\treadonly kind: 'default-values';\n\t\t\treadonly values: Readonly<Record<string, boolean | number | string>>;\n\t }\n\t| {\n\t\t\treadonly kind: 'canonical-json';\n\t\t\treadonly maximumArrayItems: number;\n\t\t\treadonly maximumObjectEntries: number;\n\t\t\treadonly maximumObjectKeyCharacters: number;\n\t\t\treadonly maximumStringCharacters: number;\n\t }\n\t| {\n\t\t\treadonly kind: 'maximum-object-entries';\n\t\t\treadonly maximum: number;\n\t }\n\t| {\n\t\t\treadonly fieldNames: readonly string[];\n\t\t\treadonly kind: 'maximum-code-points';\n\t\t\treadonly maximum: number;\n\t }\n\t| {\n\t\t\treadonly fieldNames: readonly string[];\n\t\t\treadonly kind: 'maximum-utf8-bytes';\n\t\t\treadonly maximum: number;\n\t }\n\t| {\n\t\t\treadonly fieldNames: readonly string[];\n\t\t\treadonly kind: 'reject-reserved-values';\n\t\t\treadonly values: readonly string[];\n\t }\n\t| {\n\t\t\treadonly kind: 'safe-integer';\n\t\t\treadonly maximum: number;\n\t\t\treadonly minimum: number;\n\t }\n\t| {\n\t\t\treadonly fieldName: string;\n\t\t\treadonly kind: 'sorted-unique-object-field-items';\n\t\t\treadonly path: string;\n\t }\n\t| { readonly kind: 'sorted-unique-string-items'; readonly path: string }\n\t| { readonly kind: 'terminal-outcome-algebra' }\n\t| { readonly kind: 'unique-string-items'; readonly path: string }\n\t| { readonly fieldNames: readonly string[]; readonly kind: 'work-relative-path' };\n\nexport interface PortableRefinementDescriptor {\n\treadonly description: string;\n\treadonly errorCode?: string;\n\treadonly identity: string;\n\treadonly kind: PortableRefinementKind;\n\treadonly operation: PortableRefinementOperation;\n}\n\nexport const PORTABLE_REFINEMENT_DESCRIPTORS = [\n\t{\n\t\tdescription: 'Artifact reads default omitted truncation state to false.',\n\t\tidentity: 'portal.artifact-read.default-truncated',\n\t\tkind: 'default',\n\t\toperation: { kind: 'default-values', values: { '/truncated': false } },\n\t},\n\t{\n\t\tdescription: 'Every item id in one portal batch must be unique.',\n\t\terrorCode: 'portal.batch.unique-item-ids',\n\t\tidentity: 'portal.batch.unique-item-ids',\n\t\tkind: 'cross-field-validation',\n\t\toperation: { collectionPaths: ['calls', 'requests'], fieldName: 'id', kind: 'unique-field' },\n\t},\n\t{\n\t\tdescription: 'Describe requests apply the portable inclusion defaults.',\n\t\tidentity: 'portal.describe.default-includes',\n\t\tkind: 'default',\n\t\toperation: {\n\t\t\tkind: 'default-values',\n\t\t\tvalues: {\n\t\t\t\t'/requests/*/includeJsonSchema': true,\n\t\t\t\t'/requests/*/includeRelated': true,\n\t\t\t\t'/requests/*/includeTypescriptHelper': false,\n\t\t\t\t'/requests/*/includeZod': false,\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tdescription: 'JSON values use sorted object keys and normalize negative zero.',\n\t\tidentity: 'portal.json.canonical',\n\t\tkind: 'canonical-normalization',\n\t\toperation: {\n\t\t\tkind: 'canonical-json',\n\t\t\tmaximumArrayItems: 1_000,\n\t\t\tmaximumObjectEntries: 1_000,\n\t\t\tmaximumObjectKeyCharacters: 256,\n\t\t\tmaximumStringCharacters: 64 * 1_024,\n\t\t},\n\t},\n\t{\n\t\tdescription: 'JSON objects cannot contain more than one thousand entries.',\n\t\terrorCode: 'portable.object.above-maximum',\n\t\tidentity: 'portal.json.max-object-entries',\n\t\tkind: 'structural-validation',\n\t\toperation: { kind: 'maximum-object-entries', maximum: 1_000 },\n\t},\n\t{\n\t\tdescription: 'List requests default omitted limits to twenty items.',\n\t\tidentity: 'portal.list.default-limit',\n\t\tkind: 'default',\n\t\toperation: { kind: 'default-values', values: { '/requests/*/limit': 20 } },\n\t},\n\t{\n\t\tdescription: 'Portable integer values remain inside the interoperable safe-integer range.',\n\t\terrorCode: 'portable.number.unsafe-integer',\n\t\tidentity: 'portal.number.safe-integer',\n\t\tkind: 'structural-validation',\n\t\toperation: {\n\t\t\tkind: 'safe-integer',\n\t\t\tmaximum: Number.MAX_SAFE_INTEGER,\n\t\t\tminimum: Number.MIN_SAFE_INTEGER,\n\t\t},\n\t},\n\t{\n\t\tdescription: 'Portal request ids cannot use reserved object property names.',\n\t\terrorCode: 'portal.request-id.not-reserved',\n\t\tidentity: 'portal.request-id.not-reserved',\n\t\tkind: 'structural-validation',\n\t\toperation: {\n\t\t\tfieldNames: ['id', 'requestId'],\n\t\t\tkind: 'reject-reserved-values',\n\t\t\tvalues: ['__proto__', 'constructor', 'prototype'],\n\t\t},\n\t},\n\t{\n\t\tdescription: 'Aggregate success must equal the success of every result item.',\n\t\terrorCode: 'portal.result.aggregate-status',\n\t\tidentity: 'portal.result.aggregate-status',\n\t\tkind: 'cross-field-validation',\n\t\toperation: { itemsField: 'items', kind: 'aggregate-status', okField: 'ok' },\n\t},\n\t{\n\t\tdescription: 'Call results use the normative terminal outcome algebra.',\n\t\terrorCode: 'portal.result.outcome-algebra',\n\t\tidentity: 'portal.result.outcome-algebra',\n\t\tkind: 'structural-validation',\n\t\toperation: { kind: 'terminal-outcome-algebra' },\n\t},\n\t{\n\t\tdescription: 'Search requests default omitted limits to ten items.',\n\t\tidentity: 'portal.search.default-limit',\n\t\tkind: 'default',\n\t\toperation: { kind: 'default-values', values: { '/requests/*/limit': 10 } },\n\t},\n\t{\n\t\tdescription: 'Search requests default omitted schema detail to summary.',\n\t\tidentity: 'portal.search.default-schema-detail',\n\t\tkind: 'default',\n\t\toperation: {\n\t\t\tkind: 'default-values',\n\t\t\tvalues: { '/requests/*/schemaDetail': 'summary' },\n\t\t},\n\t},\n\t{\n\t\tdescription: 'Gateway approval argument previews remain inside the portable UTF-8 byte bound.',\n\t\terrorCode: 'gateway.approval.arguments-preview.above-maximum',\n\t\tidentity: 'gateway.approval.arguments-preview.utf8-bytes',\n\t\tkind: 'structural-validation',\n\t\toperation: { fieldNames: ['argumentsPreview'], kind: 'maximum-utf8-bytes', maximum: 4_096 },\n\t},\n\t{\n\t\tdescription:\n\t\t\t'Namespace discovery summaries remain inside the portable Unicode code-point bound.',\n\t\terrorCode: 'portal.namespace-discovery.summary-above-maximum',\n\t\tidentity: 'portal.namespace-discovery.summary-code-points',\n\t\tkind: 'structural-validation',\n\t\toperation: { fieldNames: ['summary'], kind: 'maximum-code-points', maximum: 500 },\n\t},\n\t{\n\t\tdescription: 'Gateway attachment metadata cannot repeat an admitted agent identity.',\n\t\terrorCode: 'gateway.attachment.duplicate-agent-id',\n\t\tidentity: 'gateway.attachment.unique-agent-ids',\n\t\tkind: 'cross-field-validation',\n\t\toperation: { kind: 'unique-string-items', path: 'configuredAgentIds' },\n\t},\n\t{\n\t\tdescription: 'Managed Agent Projection namespaces must be sorted and unique by namespace.',\n\t\terrorCode: 'gateway.managed-agent-projection.namespaces',\n\t\tidentity: 'gateway.managed-agent-projection.namespaces',\n\t\tkind: 'cross-field-validation',\n\t\toperation: {\n\t\t\tfieldName: 'namespace',\n\t\t\tkind: 'sorted-unique-object-field-items',\n\t\t\tpath: 'toolPortalNamespaces',\n\t\t},\n\t},\n\t{\n\t\tdescription: 'Binary chunk byte length equals the decoded canonical base64 payload length.',\n\t\terrorCode: 'sandbox.binary-chunk.byte-length-mismatch',\n\t\tidentity: 'sandbox.binary-chunk.byte-length',\n\t\tkind: 'cross-field-validation',\n\t\toperation: { kind: 'decoded-base64-byte-length' },\n\t},\n\t{\n\t\tdescription: 'Direct Sandbox environment variable names must be unique.',\n\t\terrorCode: 'sandbox.environment-variable.duplicate-name',\n\t\tidentity: 'sandbox.environment-variable.unique-names',\n\t\tkind: 'cross-field-validation',\n\t\toperation: {\n\t\t\tcollectionPaths: ['environmentVariables'],\n\t\t\tfieldName: 'name',\n\t\t\tkind: 'unique-field',\n\t\t},\n\t},\n\t{\n\t\tdescription: 'Sandbox paths are relative to the server-selected work root.',\n\t\terrorCode: 'sandbox.path.not-work-relative',\n\t\tidentity: 'sandbox.path.work-relative',\n\t\tkind: 'structural-validation',\n\t\toperation: {\n\t\t\tfieldNames: ['destinationPath', 'logicalCwd', 'path', 'sourcePath'],\n\t\t\tkind: 'work-relative-path',\n\t\t},\n\t},\n] as const satisfies readonly PortableRefinementDescriptor[];\n\nexport const PORTABLE_REFINEMENT_IDENTITIES: readonly string[] =\n\tPORTABLE_REFINEMENT_DESCRIPTORS.map((descriptor) => descriptor.identity).toSorted(\n\t\t(leftIdentity, rightIdentity) => leftIdentity.localeCompare(rightIdentity),\n\t);\n","import type { z } from 'zod';\n\nimport { PORTABLE_REFINEMENT_DESCRIPTORS } from './portable-refinement-descriptors.js';\n\nconst portableRefinementIdentities: ReadonlySet<string> = new Set(\n\tPORTABLE_REFINEMENT_DESCRIPTORS.map((descriptor) => descriptor.identity),\n);\nconst portableRefinementIdentityByCheck = new WeakMap<object, string>();\n\nexport interface PortableSuperRefinementProps<TSchema extends z.ZodType> {\n\treadonly refinement: (value: z.output<TSchema>, context: z.RefinementCtx) => void;\n\treadonly refinementIdentity: string;\n\treadonly schema: TSchema;\n}\n\nexport function withPortableSuperRefinement<TSchema extends z.ZodType>(\n\tprops: PortableSuperRefinementProps<TSchema>,\n): TSchema {\n\tif (!portableRefinementIdentities.has(props.refinementIdentity)) {\n\t\tthrow new Error(`Portable refinement ${props.refinementIdentity} is not registered.`);\n\t}\n\t// oxlint-disable-next-line no-underscore-dangle -- Zod v4 exposes schema definitions through its library-author core contract.\n\tconst existingChecks = new Set(props.schema._zod.def.checks ?? []);\n\tconst refinedSchema = props.schema.superRefine(props.refinement);\n\t// oxlint-disable-next-line no-underscore-dangle -- Match the one check added by the named authoring helper.\n\tconst addedChecks = (refinedSchema._zod.def.checks ?? []).filter(\n\t\t(check) => !existingChecks.has(check),\n\t);\n\tif (addedChecks.length !== 1) {\n\t\tthrow new Error(\n\t\t\t`Portable refinement ${props.refinementIdentity} must add exactly one Zod check.`,\n\t\t);\n\t}\n\tconst addedCheck = addedChecks[0];\n\tif (addedCheck === undefined) {\n\t\tthrow new Error(`Portable refinement ${props.refinementIdentity} added no Zod check.`);\n\t}\n\tportableRefinementIdentityByCheck.set(addedCheck, props.refinementIdentity);\n\treturn refinedSchema;\n}\n\nexport function portableRefinementIdentityForCheck(check: object): string | undefined {\n\treturn portableRefinementIdentityByCheck.get(check);\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { n as withPortableSuperRefinement } from "./portable-refinement-authoring-CvlKRs_Z.js";
2
- import { n as RequestIdSchema } from "./request-id-schema-DGLLX-tp.js";
3
- import { i as JsonObjectSchema } from "./json-value-schema-BGfMDOGA.js";
1
+ import { n as withPortableSuperRefinement } from "./portable-refinement-authoring-C1Q92x2G.js";
2
+ import { n as RequestIdSchema } from "./request-id-schema-Hq_6lSFV.js";
3
+ import { i as JsonObjectSchema } from "./json-value-schema-Br5M7d7X.js";
4
4
  import { z } from "zod";
5
5
  //#region src/portal-call-surface/models/portal-batch-id-refinement.ts
6
6
  function addDuplicateItemIdIssues(items, context) {
@@ -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-DYxcWijW.js.map
41
+ //# sourceMappingURL=portal-call-request-schema-Cl0kTLaX.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"portal-call-request-schema-DYxcWijW.js","names":[],"sources":["../src/portal-call-surface/models/portal-batch-id-refinement.ts","../src/portal-call-surface/models/portal-call-request-schema.ts"],"sourcesContent":["import type { z } from 'zod';\n\nexport interface PortalBatchItemWithId {\n\treadonly id: string;\n}\n\nexport function addDuplicateItemIdIssues(\n\titems: readonly PortalBatchItemWithId[],\n\tcontext: z.RefinementCtx,\n): void {\n\tconst seenIds = new Set<string>();\n\tconst duplicateIds = new Set<string>();\n\tfor (const item of items) {\n\t\tif (seenIds.has(item.id)) {\n\t\t\tduplicateIds.add(item.id);\n\t\t}\n\t\tseenIds.add(item.id);\n\t}\n\tfor (const duplicateId of [...duplicateIds].toSorted()) {\n\t\tcontext.addIssue({\n\t\t\tcode: 'custom',\n\t\t\tmessage: `Duplicate portal item id \"${duplicateId}\".`,\n\t\t\tpath: ['id'],\n\t\t});\n\t}\n}\n","import { z } from 'zod';\n\nimport { JsonObjectSchema } from '../../contract-primitives/models/json-value-schema.js';\nimport { RequestIdSchema } from '../../contract-primitives/models/request-id-schema.js';\nimport { withPortableSuperRefinement } from '../../portable-contracts/portable-refinement-authoring.js';\nimport { addDuplicateItemIdIssues } from './portal-batch-id-refinement.js';\n\nexport const PortalBatchMaxItems = 50;\n\nexport const PortalCallItemRequestSchema = z\n\t.object({\n\t\targuments: JsonObjectSchema,\n\t\tid: RequestIdSchema,\n\t\tnamespace: z.string().min(1),\n\t\tname: z.string().min(1),\n\t})\n\t.strict();\n\nexport const PortalCallRequestSchema = withPortableSuperRefinement({\n\trefinement: (request, context) => {\n\t\taddDuplicateItemIdIssues(request.calls, context);\n\t},\n\trefinementIdentity: 'portal.batch.unique-item-ids',\n\tschema: z\n\t\t.object({\n\t\t\tcalls: z.array(PortalCallItemRequestSchema).min(1).max(PortalBatchMaxItems),\n\t\t\trequestId: RequestIdSchema.optional(),\n\t\t})\n\t\t.strict(),\n});\n\nexport type PortalCallRequest = z.infer<typeof PortalCallRequestSchema>;\n"],"mappings":";;;;;AAMA,SAAgB,yBACf,OACA,SACO;CACP,MAAM,0BAAU,IAAI,KAAa;CACjC,MAAM,+BAAe,IAAI,KAAa;CACtC,KAAK,MAAM,QAAQ,OAAO;EACzB,IAAI,QAAQ,IAAI,KAAK,GAAG,EACvB,aAAa,IAAI,KAAK,GAAG;EAE1B,QAAQ,IAAI,KAAK,GAAG;;CAErB,KAAK,MAAM,eAAe,CAAC,GAAG,aAAa,CAAC,UAAU,EACrD,QAAQ,SAAS;EAChB,MAAM;EACN,SAAS,6BAA6B,YAAY;EAClD,MAAM,CAAC,KAAK;EACZ,CAAC;;;;AChBJ,MAAa,sBAAsB;AAEnC,MAAa,8BAA8B,EACzC,OAAO;CACP,WAAW;CACX,IAAI;CACJ,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE;CAC5B,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE;CACvB,CAAC,CACD,QAAQ;AAEV,MAAa,0BAA0B,4BAA4B;CAClE,aAAa,SAAS,YAAY;EACjC,yBAAyB,QAAQ,OAAO,QAAQ;;CAEjD,oBAAoB;CACpB,QAAQ,EACN,OAAO;EACP,OAAO,EAAE,MAAM,4BAA4B,CAAC,IAAI,EAAE,CAAC,IAAA,GAAwB;EAC3E,WAAW,gBAAgB,UAAU;EACrC,CAAC,CACD,QAAQ;CACV,CAAC"}
1
+ {"version":3,"file":"portal-call-request-schema-Cl0kTLaX.js","names":[],"sources":["../src/portal-call-surface/models/portal-batch-id-refinement.ts","../src/portal-call-surface/models/portal-call-request-schema.ts"],"sourcesContent":["import type { z } from 'zod';\n\nexport interface PortalBatchItemWithId {\n\treadonly id: string;\n}\n\nexport function addDuplicateItemIdIssues(\n\titems: readonly PortalBatchItemWithId[],\n\tcontext: z.RefinementCtx,\n): void {\n\tconst seenIds = new Set<string>();\n\tconst duplicateIds = new Set<string>();\n\tfor (const item of items) {\n\t\tif (seenIds.has(item.id)) {\n\t\t\tduplicateIds.add(item.id);\n\t\t}\n\t\tseenIds.add(item.id);\n\t}\n\tfor (const duplicateId of [...duplicateIds].toSorted()) {\n\t\tcontext.addIssue({\n\t\t\tcode: 'custom',\n\t\t\tmessage: `Duplicate portal item id \"${duplicateId}\".`,\n\t\t\tpath: ['id'],\n\t\t});\n\t}\n}\n","import { z } from 'zod';\n\nimport { JsonObjectSchema } from '../../contract-primitives/models/json-value-schema.js';\nimport { RequestIdSchema } from '../../contract-primitives/models/request-id-schema.js';\nimport { withPortableSuperRefinement } from '../../portable-contracts/portable-refinement-authoring.js';\nimport { addDuplicateItemIdIssues } from './portal-batch-id-refinement.js';\n\nexport const PortalBatchMaxItems = 50;\n\nexport const PortalCallItemRequestSchema = z\n\t.object({\n\t\targuments: JsonObjectSchema,\n\t\tid: RequestIdSchema,\n\t\tnamespace: z.string().min(1),\n\t\tname: z.string().min(1),\n\t})\n\t.strict();\n\nexport const PortalCallRequestSchema = withPortableSuperRefinement({\n\trefinement: (request, context) => {\n\t\taddDuplicateItemIdIssues(request.calls, context);\n\t},\n\trefinementIdentity: 'portal.batch.unique-item-ids',\n\tschema: z\n\t\t.object({\n\t\t\tcalls: z.array(PortalCallItemRequestSchema).min(1).max(PortalBatchMaxItems),\n\t\t\trequestId: RequestIdSchema.optional(),\n\t\t})\n\t\t.strict(),\n});\n\nexport type PortalCallRequest = z.infer<typeof PortalCallRequestSchema>;\n"],"mappings":";;;;;AAMA,SAAgB,yBACf,OACA,SACO;CACP,MAAM,0BAAU,IAAI,KAAa;CACjC,MAAM,+BAAe,IAAI,KAAa;CACtC,KAAK,MAAM,QAAQ,OAAO;EACzB,IAAI,QAAQ,IAAI,KAAK,GAAG,EACvB,aAAa,IAAI,KAAK,GAAG;EAE1B,QAAQ,IAAI,KAAK,GAAG;;CAErB,KAAK,MAAM,eAAe,CAAC,GAAG,aAAa,CAAC,UAAU,EACrD,QAAQ,SAAS;EAChB,MAAM;EACN,SAAS,6BAA6B,YAAY;EAClD,MAAM,CAAC,KAAK;EACZ,CAAC;;;;AChBJ,MAAa,sBAAsB;AAEnC,MAAa,8BAA8B,EACzC,OAAO;CACP,WAAW;CACX,IAAI;CACJ,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE;CAC5B,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE;CACvB,CAAC,CACD,QAAQ;AAEV,MAAa,0BAA0B,4BAA4B;CAClE,aAAa,SAAS,YAAY;EACjC,yBAAyB,QAAQ,OAAO,QAAQ;;CAEjD,oBAAoB;CACpB,QAAQ,EACN,OAAO;EACP,OAAO,EAAE,MAAM,4BAA4B,CAAC,IAAI,EAAE,CAAC,IAAA,GAAwB;EAC3E,WAAW,gBAAgB,UAAU;EACrC,CAAC,CACD,QAAQ;CACV,CAAC"}
@@ -1,9 +1,10 @@
1
- import { n as withPortableSuperRefinement } from "./portable-refinement-authoring-CvlKRs_Z.js";
2
- import { t as ItemIdSchema } from "./request-id-schema-DGLLX-tp.js";
1
+ import { n as withPortableSuperRefinement } from "./portable-refinement-authoring-C1Q92x2G.js";
2
+ import { t as ItemIdSchema } from "./request-id-schema-Hq_6lSFV.js";
3
3
  import { t as ArtifactReferenceSchema } from "./artifact-reference-schema-CiEjxYPd.js";
4
- import { o as JsonValueSchema } from "./json-value-schema-BGfMDOGA.js";
5
- import { n as CapabilitySearchMatchSchema, r as CapabilitySummarySchema, t as CapabilityDescriptorSchema } from "./capability-descriptor-schema-DmzUtpji.js";
6
- import { i as SafeDiagnosticSchema, n as PortalErrorSchema } from "./portal-error-schema-BCALC7xt.js";
4
+ import { o as JsonValueSchema } from "./json-value-schema-Br5M7d7X.js";
5
+ import { n as CapabilitySearchMatchSchema, r as CapabilitySummarySchema, t as CapabilityDescriptorSchema } from "./capability-descriptor-schema-v9tj7yKr.js";
6
+ import { t as EffectiveNamespaceDiscoverySchema } from "./namespace-discovery-schema-DwbJHVLu.js";
7
+ import { i as SafeDiagnosticSchema, n as PortalErrorSchema } from "./portal-error-schema-TSNrpQSy.js";
7
8
  import { z } from "zod";
8
9
  //#region src/portal-call-surface/models/portal-call-result-schema.ts
9
10
  const TruncationMetadataSchema = z.object({
@@ -126,13 +127,22 @@ function createPortalResultSchema(itemSchema) {
126
127
  }).strict()
127
128
  });
128
129
  }
129
- const PortalListItemValueSchema = z.object({
130
+ const PortalBackendListItemValueSchema = z.object({
130
131
  namespaces: z.array(z.string().min(1)),
131
132
  nextCursor: z.string().regex(/^\d+$/u).optional(),
132
133
  tools: z.array(CapabilitySummarySchema)
133
134
  }).strict();
134
- const PortalSearchItemValueSchema = z.object({ tools: z.array(CapabilitySearchMatchSchema) }).strict();
135
- const PortalDescribeItemValueSchema = z.object({ tools: z.array(CapabilityDescriptorSchema) }).strict();
135
+ const PortalBackendSearchItemValueSchema = z.object({ tools: z.array(CapabilitySearchMatchSchema) }).strict();
136
+ const PortalBackendDescribeItemValueSchema = z.object({ tools: z.array(CapabilityDescriptorSchema) }).strict();
137
+ const PortalListItemValueSchema = PortalBackendListItemValueSchema.extend({ namespaceDiscovery: z.array(EffectiveNamespaceDiscoverySchema) }).strict();
138
+ const PortalSearchItemValueSchema = PortalBackendSearchItemValueSchema.extend({ namespaceDiscovery: z.array(EffectiveNamespaceDiscoverySchema) }).strict();
139
+ const PortalDescribeItemValueSchema = PortalBackendDescribeItemValueSchema.extend({ namespaceDiscovery: z.array(EffectiveNamespaceDiscoverySchema) }).strict();
140
+ const PortalBackendListItemResultSchema = createPortalItemResultSchema(PortalBackendListItemValueSchema);
141
+ const PortalBackendSearchItemResultSchema = createPortalItemResultSchema(PortalBackendSearchItemValueSchema);
142
+ const PortalBackendDescribeItemResultSchema = createPortalItemResultSchema(PortalBackendDescribeItemValueSchema);
143
+ const PortalBackendListResultSchema = createPortalResultSchema(PortalBackendListItemResultSchema);
144
+ const PortalBackendSearchResultSchema = createPortalResultSchema(PortalBackendSearchItemResultSchema);
145
+ const PortalBackendDescribeResultSchema = createPortalResultSchema(PortalBackendDescribeItemResultSchema);
136
146
  const PortalListItemResultSchema = createPortalItemResultSchema(PortalListItemValueSchema);
137
147
  const PortalSearchItemResultSchema = createPortalItemResultSchema(PortalSearchItemValueSchema);
138
148
  const PortalDescribeItemResultSchema = createPortalItemResultSchema(PortalDescribeItemValueSchema);
@@ -154,6 +164,6 @@ const PortalGenericItemResultSchema = z.discriminatedUnion("status", [z.object({
154
164
  status: z.literal("error")
155
165
  }).strict()]);
156
166
  //#endregion
157
- export { PortalDescribeItemResultSchema as a, PortalGenericItemResultSchema as c, PortalListResultSchema as d, PortalSearchItemResultSchema as f, TruncationMetadataSchema as h, PortalCallResultSchema as i, PortalListItemResultSchema as l, PortalSearchResultSchema as m, PortalApprovalRequiredCallItemResultSchema as n, PortalDescribeItemValueSchema as o, PortalSearchItemValueSchema as p, PortalCallItemResultSchema as r, PortalDescribeResultSchema as s, PortalApprovalChallengeSchema as t, PortalListItemValueSchema as u };
167
+ export { PortalSearchResultSchema as C, PortalSearchItemValueSchema as S, PortalGenericItemResultSchema as _, PortalBackendDescribeResultSchema as a, PortalListResultSchema as b, PortalBackendListResultSchema as c, PortalBackendSearchResultSchema as d, PortalCallItemResultSchema as f, PortalDescribeResultSchema as g, PortalDescribeItemValueSchema as h, PortalBackendDescribeItemValueSchema as i, PortalBackendSearchItemResultSchema as l, PortalDescribeItemResultSchema as m, PortalApprovalRequiredCallItemResultSchema as n, PortalBackendListItemResultSchema as o, PortalCallResultSchema as p, PortalBackendDescribeItemResultSchema as r, PortalBackendListItemValueSchema as s, PortalApprovalChallengeSchema as t, PortalBackendSearchItemValueSchema as u, PortalListItemResultSchema as v, TruncationMetadataSchema as w, PortalSearchItemResultSchema as x, PortalListItemValueSchema as y };
158
168
 
159
- //# sourceMappingURL=portal-call-result-schema-CVWMGu2y.js.map
169
+ //# sourceMappingURL=portal-call-result-schema-B25_rzZZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal-call-result-schema-B25_rzZZ.js","names":[],"sources":["../src/portal-call-surface/models/portal-call-result-schema.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport { ArtifactReferenceSchema } from '../../artifact-surface/models/artifact-reference-schema.js';\nimport {\n\tCapabilityDescriptorSchema,\n\tCapabilitySearchMatchSchema,\n\tCapabilitySummarySchema,\n} from '../../capability-description-surface/models/capability-descriptor-schema.js';\nimport { JsonValueSchema } from '../../contract-primitives/models/json-value-schema.js';\nimport { EffectiveNamespaceDiscoverySchema } from '../../contract-primitives/models/namespace-discovery-schema.js';\nimport { ItemIdSchema } from '../../contract-primitives/models/request-id-schema.js';\nimport { withPortableSuperRefinement } from '../../portable-contracts/portable-refinement-authoring.js';\nimport { SafeDiagnosticSchema } from '../../portal-event-surface/models/safe-diagnostic-schema.js';\nimport { PortalErrorSchema } from './portal-error-schema.js';\n\nexport const TruncationMetadataSchema = z\n\t.object({\n\t\tomittedBytes: z.number().int().nonnegative().optional(),\n\t\ttruncated: z.boolean(),\n\t})\n\t.strict();\n\n// oxlint-disable-next-line explicit-function-return-type -- Preserve the exact Zod discriminated-union inference for each operation-specific result schema.\nfunction createPortalItemResultSchema<TValueSchema extends z.ZodType>(valueSchema: TValueSchema) {\n\treturn z.discriminatedUnion('status', [\n\t\tz\n\t\t\t.object({\n\t\t\t\tartifacts: z.array(ArtifactReferenceSchema).optional(),\n\t\t\t\tdiagnostics: z.array(SafeDiagnosticSchema).optional(),\n\t\t\t\tid: ItemIdSchema,\n\t\t\t\tstatus: z.literal('ok'),\n\t\t\t\ttruncation: TruncationMetadataSchema.optional(),\n\t\t\t\tvalue: valueSchema,\n\t\t\t})\n\t\t\t.strict(),\n\t\tz\n\t\t\t.object({\n\t\t\t\tdiagnostics: z.array(SafeDiagnosticSchema).optional(),\n\t\t\t\terror: PortalErrorSchema,\n\t\t\t\tid: ItemIdSchema,\n\t\t\t\tstatus: z.literal('error'),\n\t\t\t})\n\t\t\t.strict(),\n\t]);\n}\n\nconst CompletedSucceededOutcomeSchema = z\n\t.object({\n\t\tcertainty: z.literal('proven'),\n\t\tcompletion: z.literal('succeeded'),\n\t\tkind: z.literal('completed'),\n\t\tretryClass: z.literal('forbidden'),\n\t})\n\t.strict();\n\nconst CompletedFailedOutcomeSchema = z\n\t.object({\n\t\tcertainty: z.literal('proven'),\n\t\tcompletion: z.literal('failed'),\n\t\tkind: z.literal('completed'),\n\t\tretryClass: z.enum(['forbidden', 'policy-gated']),\n\t})\n\t.strict();\n\nconst NotDispatchedOutcomeSchema = z\n\t.object({\n\t\tcertainty: z.literal('proven'),\n\t\tkind: z.literal('not-dispatched'),\n\t\tretryClass: z.literal('safe-before-dispatch'),\n\t})\n\t.strict();\n\nconst ProvenTerminatedOutcomeSchema = z.union([\n\tz\n\t\t.object({\n\t\t\tcertainty: z.literal('proven-terminated'),\n\t\t\tkind: z.literal('cancelled-proven'),\n\t\t\tretryClass: z.literal('manual-only'),\n\t\t})\n\t\t.strict(),\n\tz\n\t\t.object({\n\t\t\tcertainty: z.literal('proven-terminated'),\n\t\t\tkind: z.literal('timed-out-proven'),\n\t\t\tretryClass: z.literal('manual-only'),\n\t\t})\n\t\t.strict(),\n\tz\n\t\t.object({\n\t\t\tcertainty: z.literal('proven-terminated'),\n\t\t\tkind: z.literal('replaced-proven'),\n\t\t\tpriorSideEffects: z.literal('possible'),\n\t\t\tretryClass: z.literal('manual-only'),\n\t\t})\n\t\t.strict(),\n]);\n\nconst AmbiguousOutcomeSchema = z\n\t.object({\n\t\tcertainty: z.literal('side-effects-and-termination-unknown'),\n\t\tkind: z.literal('ambiguous'),\n\t\tretryClass: z.literal('forbidden'),\n\t})\n\t.strict();\n\nconst TerminalErrorOutcomeSchema = z.union([\n\tNotDispatchedOutcomeSchema,\n\tCompletedFailedOutcomeSchema,\n\tProvenTerminatedOutcomeSchema,\n\tAmbiguousOutcomeSchema,\n]);\n\nexport const PortalApprovalChallengeSchema = z\n\t.object({\n\t\tchallengeId: z.string().uuid(),\n\t\texpiresAt: z.string().datetime(),\n\t})\n\t.strict();\n\nexport const PortalApprovalRequiredCallItemResultSchema = z\n\t.object({\n\t\tapprovalChallenge: PortalApprovalChallengeSchema,\n\t\terror: PortalErrorSchema.extend({ code: z.literal('approval_required') }).strict(),\n\t\tid: ItemIdSchema,\n\t\toperationId: z.string().min(1),\n\t\toutcome: NotDispatchedOutcomeSchema,\n\t\towningGeneration: z.string().min(1),\n\t\tstatus: z.literal('approval_required'),\n\t})\n\t.strict();\n\nexport const PortalCallItemResultSchema = z.discriminatedUnion('status', [\n\tz\n\t\t.object({\n\t\t\tartifacts: z.array(ArtifactReferenceSchema).optional(),\n\t\t\tdiagnostics: z.array(SafeDiagnosticSchema).optional(),\n\t\t\tid: ItemIdSchema,\n\t\t\toperationId: z.string().min(1),\n\t\t\toutcome: CompletedSucceededOutcomeSchema,\n\t\t\towningGeneration: z.string().min(1),\n\t\t\tstatus: z.literal('ok'),\n\t\t\ttruncation: TruncationMetadataSchema.optional(),\n\t\t\tvalue: JsonValueSchema,\n\t\t})\n\t\t.strict(),\n\tz\n\t\t.object({\n\t\t\tdiagnostics: z.array(SafeDiagnosticSchema).optional(),\n\t\t\terror: PortalErrorSchema,\n\t\t\tid: ItemIdSchema,\n\t\t\toperationId: z.string().min(1),\n\t\t\toutcome: TerminalErrorOutcomeSchema,\n\t\t\towningGeneration: z.string().min(1),\n\t\t\tstatus: z.literal('error'),\n\t\t})\n\t\t.strict(),\n\tPortalApprovalRequiredCallItemResultSchema,\n]);\n\n// oxlint-disable-next-line explicit-function-return-type -- Preserve the exact Zod object inference derived from the item schema.\nfunction createPortalResultSchema<TItemSchema extends z.ZodType<{ readonly status: string }>>(\n\titemSchema: TItemSchema,\n) {\n\treturn withPortableSuperRefinement({\n\t\trefinement: (result, context) => {\n\t\t\tconst allItemsSucceeded = result.items.every((item) => item.status === 'ok');\n\t\t\tif (result.ok !== allItemsSucceeded) {\n\t\t\t\tcontext.addIssue({\n\t\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\t\tmessage: 'Portal result ok must match item statuses.',\n\t\t\t\t\tpath: ['ok'],\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\trefinementIdentity: 'portal.result.aggregate-status',\n\t\tschema: z\n\t\t\t.object({\n\t\t\t\tauditCorrelationId: z.string().min(1).optional(),\n\t\t\t\tdiagnostics: z.array(SafeDiagnosticSchema).optional(),\n\t\t\t\titems: z.array(itemSchema),\n\t\t\t\tok: z.boolean(),\n\t\t\t})\n\t\t\t.strict(),\n\t});\n}\n\nexport const PortalBackendListItemValueSchema = z\n\t.object({\n\t\tnamespaces: z.array(z.string().min(1)),\n\t\tnextCursor: z.string().regex(/^\\d+$/u).optional(),\n\t\ttools: z.array(CapabilitySummarySchema),\n\t})\n\t.strict();\n\nexport const PortalBackendSearchItemValueSchema = z\n\t.object({\n\t\ttools: z.array(CapabilitySearchMatchSchema),\n\t})\n\t.strict();\n\nexport const PortalBackendDescribeItemValueSchema = z\n\t.object({\n\t\ttools: z.array(CapabilityDescriptorSchema),\n\t})\n\t.strict();\n\nexport const PortalListItemValueSchema = PortalBackendListItemValueSchema.extend({\n\tnamespaceDiscovery: z.array(EffectiveNamespaceDiscoverySchema),\n}).strict();\n\nexport const PortalSearchItemValueSchema = PortalBackendSearchItemValueSchema.extend({\n\tnamespaceDiscovery: z.array(EffectiveNamespaceDiscoverySchema),\n}).strict();\n\nexport const PortalDescribeItemValueSchema = PortalBackendDescribeItemValueSchema.extend({\n\tnamespaceDiscovery: z.array(EffectiveNamespaceDiscoverySchema),\n}).strict();\n\nexport const PortalBackendListItemResultSchema = createPortalItemResultSchema(\n\tPortalBackendListItemValueSchema,\n);\nexport const PortalBackendSearchItemResultSchema = createPortalItemResultSchema(\n\tPortalBackendSearchItemValueSchema,\n);\nexport const PortalBackendDescribeItemResultSchema = createPortalItemResultSchema(\n\tPortalBackendDescribeItemValueSchema,\n);\n\nexport const PortalBackendListResultSchema = createPortalResultSchema(\n\tPortalBackendListItemResultSchema,\n);\nexport type PortalBackendListResult = z.infer<typeof PortalBackendListResultSchema>;\n\nexport const PortalBackendSearchResultSchema = createPortalResultSchema(\n\tPortalBackendSearchItemResultSchema,\n);\nexport type PortalBackendSearchResult = z.infer<typeof PortalBackendSearchResultSchema>;\n\nexport const PortalBackendDescribeResultSchema = createPortalResultSchema(\n\tPortalBackendDescribeItemResultSchema,\n);\nexport type PortalBackendDescribeResult = z.infer<typeof PortalBackendDescribeResultSchema>;\n\nexport const PortalListItemResultSchema = createPortalItemResultSchema(PortalListItemValueSchema);\nexport const PortalSearchItemResultSchema = createPortalItemResultSchema(\n\tPortalSearchItemValueSchema,\n);\nexport const PortalDescribeItemResultSchema = createPortalItemResultSchema(\n\tPortalDescribeItemValueSchema,\n);\n\nexport const PortalCallResultSchema = createPortalResultSchema(PortalCallItemResultSchema);\n\nexport type PortalCallResult = z.infer<typeof PortalCallResultSchema>;\n\nexport const PortalListResultSchema = createPortalResultSchema(PortalListItemResultSchema);\nexport type PortalListResult = z.infer<typeof PortalListResultSchema>;\n\nexport const PortalSearchResultSchema = createPortalResultSchema(PortalSearchItemResultSchema);\nexport type PortalSearchResult = z.infer<typeof PortalSearchResultSchema>;\n\nexport const PortalDescribeResultSchema = createPortalResultSchema(PortalDescribeItemResultSchema);\nexport type PortalDescribeResult = z.infer<typeof PortalDescribeResultSchema>;\n\nexport const PortalGenericItemResultSchema = z.discriminatedUnion('status', [\n\tz\n\t\t.object({\n\t\t\tartifacts: z.array(ArtifactReferenceSchema).optional(),\n\t\t\tdiagnostics: z.array(SafeDiagnosticSchema).optional(),\n\t\t\tid: ItemIdSchema,\n\t\t\tstatus: z.literal('ok'),\n\t\t\ttruncation: TruncationMetadataSchema.optional(),\n\t\t\tvalue: JsonValueSchema,\n\t\t})\n\t\t.strict(),\n\tz\n\t\t.object({\n\t\t\tdiagnostics: z.array(SafeDiagnosticSchema).optional(),\n\t\t\terror: PortalErrorSchema,\n\t\t\tid: ItemIdSchema,\n\t\t\tstatus: z.literal('error'),\n\t\t})\n\t\t.strict(),\n]);\n"],"mappings":"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"}