@agent-vm/agent-portal-sdk 0.0.135 → 0.0.138

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.
@@ -1,2 +1,2 @@
1
- import { a as ApprovalRequiredResult, i as ApprovalDecisionReferenceSchema, n as ApprovalChallengeReferenceSchema, o as ApprovalRequiredResultSchema, r as ApprovalDecisionReference, t as ApprovalChallengeReference } from "../index-Cwtgu-ga.js";
1
+ import { a as ApprovalRequiredResult, i as ApprovalDecisionReferenceSchema, n as ApprovalChallengeReferenceSchema, o as ApprovalRequiredResultSchema, r as ApprovalDecisionReference, t as ApprovalChallengeReference } from "../index-BqWw914Z.js";
2
2
  export { ApprovalChallengeReference, ApprovalChallengeReferenceSchema, ApprovalDecisionReference, ApprovalDecisionReferenceSchema, ApprovalRequiredResult, ApprovalRequiredResultSchema };
@@ -6,165 +6,34 @@ import { a as encodeCanonicalJson } from "../portable-contracts-C5rtqe-H.js";
6
6
  import { t as ToolPortalMcpClient } from "../tool-portal-mcp-client-nMGxqQ-A.js";
7
7
  import { t as createNodeToolPortalMcpTransport } from "../node-tool-portal-mcp-transport-CnB8MCW2.js";
8
8
  import { z } from "zod";
9
+ import { run } from "@optique/run";
9
10
  import { readFile } from "node:fs/promises";
10
11
  import path from "node:path";
11
- import { conditional, object, or } from "@optique/core/constructs";
12
- import { runParser } from "@optique/core/facade";
13
- import "@optique/core/message";
14
- import { map, optional } from "@optique/core/modifiers";
15
- import "@optique/core/parser";
16
- import { command, option } from "@optique/core/primitives";
12
+ import { object, or } from "@optique/core/constructs";
13
+ import { map, optional, withDefault } from "@optique/core/modifiers";
14
+ import { command, constant, option } from "@optique/core/primitives";
17
15
  import { zod } from "@optique/zod";
18
- //#region src/cli/tool-portal-cli-parser.ts
19
- z.enum([
20
- "artifact-read",
21
- "call",
22
- "describe",
23
- "list",
24
- "search"
25
- ]);
26
- const transportKindSchema = z.enum(["http", "scoped-stdio"]);
27
- const environmentVariableNameSchema = z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/u);
28
- const absolutePathSchema = z.string().min(1).refine(path.isAbsolute, { message: "Scoped stdio configuration path must be absolute." });
29
- function createEnvironmentVariableNameParser() {
30
- return zod(environmentVariableNameSchema, {
31
- metavar: "ENV_NAME",
32
- placeholder: "TOOL_PORTAL_AUTH"
33
- });
34
- }
35
- function createInputJsonParser() {
36
- return zod(z.string().min(1), {
37
- metavar: "JSON",
38
- placeholder: "{}"
39
- });
40
- }
41
- function createHttpTransportParser() {
42
- return map(object({
43
- authorizationEnvironmentName: option("--authorization-env", createEnvironmentVariableNameParser()),
44
- endpoint: option("--endpoint", zod(z.string().min(1), {
45
- metavar: "URL",
46
- placeholder: "https://example.test/mcp"
47
- }))
48
- }), (options) => ({
49
- ...options,
50
- kind: "http"
51
- }));
52
- }
53
- function createScopedStdioTransportParser() {
54
- return map(object({ scopedStdioConfigPath: option("--stdio-config", zod(absolutePathSchema, {
55
- metavar: "PATH",
56
- placeholder: "/tmp/tool-portal.json"
57
- })) }), (options) => ({
58
- ...options,
59
- kind: "scoped-stdio"
60
- }));
61
- }
62
- function createTransportParser() {
63
- return map(conditional(option("--transport", zod(transportKindSchema, {
64
- metavar: "TRANSPORT",
65
- placeholder: "http"
66
- })), {
67
- http: createHttpTransportParser(),
68
- "scoped-stdio": createScopedStdioTransportParser()
69
- }), ([, transport]) => transport);
70
- }
71
- function createInputJsonOption() {
72
- return option("--input-json", createInputJsonParser());
73
- }
74
- function createCallCommand() {
75
- return command("call", map(object({
76
- approvalTokenEnvironmentName: optional(option("--approval-token-env", createEnvironmentVariableNameParser())),
77
- inputJson: createInputJsonOption(),
78
- transport: createTransportParser()
79
- }), ({ approvalTokenEnvironmentName, inputJson, transport }) => ({
80
- ...approvalTokenEnvironmentName === void 0 ? {} : { approvalTokenEnvironmentName },
81
- inputJson,
82
- operation: "call",
83
- transport
84
- })));
85
- }
86
- function createNonCallCommand(operation) {
87
- return command(operation, map(object({
88
- inputJson: createInputJsonOption(),
89
- transport: createTransportParser()
90
- }), ({ inputJson, transport }) => ({
91
- inputJson,
92
- operation,
93
- transport
94
- })));
95
- }
96
- const toolPortalCliParser = or(createNonCallCommand("artifact-read"), createCallCommand(), createNonCallCommand("describe"), createNonCallCommand("list"), createNonCallCommand("search"));
97
- var ToolPortalCliRunnerSignalError = class extends Error {
98
- signal;
99
- constructor(signal) {
100
- super(`Tool Portal CLI runner signal: ${signal.kind}`);
101
- this.signal = signal;
102
- }
103
- };
104
- function writeOutput(write, text) {
105
- write.write(text.endsWith("\n") ? text : `${text}\n`);
106
- }
107
- function createRunOptions(io) {
108
- return {
109
- help: {
110
- command: true,
111
- option: { names: ["-h", "--help"] },
112
- onShow: () => {
113
- throw new ToolPortalCliRunnerSignalError({
114
- exitCode: 0,
115
- kind: "help"
116
- });
117
- }
118
- },
119
- onError: (exitCode) => {
120
- throw new ToolPortalCliRunnerSignalError({
121
- exitCode,
122
- kind: "parse-error"
123
- });
124
- },
125
- stderr: (text) => writeOutput(io.stderr, text),
126
- stdout: (text) => writeOutput(io.stdout, text)
127
- };
128
- }
129
- function runToolPortalCliParser(argv, io) {
130
- try {
131
- return {
132
- kind: "parsed",
133
- value: runParser(toolPortalCliParser, "tool-portal", argv, createRunOptions(io))
134
- };
135
- } catch (error) {
136
- if (error instanceof ToolPortalCliRunnerSignalError) return error.signal;
137
- throw error;
138
- }
139
- }
140
- //#endregion
141
- //#region src/cli/tool-portal.ts
16
+ //#region src/cli/tool-portal-cli-operation.ts
142
17
  const canonicalResultGraceAfterInterruptMilliseconds = 250;
143
- const ScopedStdioConfigSchema = z.object({
18
+ const scopedStdioConfigSchema = z.object({
144
19
  argv: z.array(z.string()).max(128),
145
20
  executable: z.string().min(1),
146
21
  schemaVersion: z.literal(1)
147
22
  }).strict();
148
- function parseHttpEndpoint(endpoint) {
149
- const parsedEndpoint = new URL(endpoint);
150
- if (!["http:", "https:"].includes(parsedEndpoint.protocol) || parsedEndpoint.username.length > 0 || parsedEndpoint.password.length > 0 || parsedEndpoint.hash.length > 0) throw new Error("Tool Portal HTTP endpoint must be an HTTP(S) URL without credentials or a fragment.");
151
- return parsedEndpoint;
152
- }
153
- async function createCliTransport(arguments_, environment) {
154
- if (arguments_.transport.kind === "http") {
155
- const environmentName = arguments_.transport.authorizationEnvironmentName;
156
- const authorization = environmentName === void 0 ? void 0 : environment[environmentName];
23
+ async function createCliTransport(command, environment) {
24
+ if (command.transport.kind === "http") {
25
+ const authorization = environment[command.transport.authorizationEnvironmentName];
157
26
  if (authorization === void 0 || authorization.length === 0) throw new Error("The explicit Tool Portal authorization environment variable is unset.");
158
27
  return {
159
28
  authorization,
160
29
  transport: createNodeToolPortalMcpTransport({
161
30
  authorization,
162
- endpoint: parseHttpEndpoint(arguments_.transport.endpoint),
31
+ endpoint: new URL(command.transport.endpoint),
163
32
  kind: "http"
164
33
  })
165
34
  };
166
35
  }
167
- const config = ScopedStdioConfigSchema.parse(JSON.parse(await readFile(arguments_.transport.scopedStdioConfigPath, "utf8")));
36
+ const config = scopedStdioConfigSchema.parse(JSON.parse(await readFile(command.transport.scopedStdioConfigPath, "utf8")));
168
37
  return {
169
38
  authorization: void 0,
170
39
  transport: createNodeToolPortalMcpTransport({
@@ -204,13 +73,13 @@ async function invokePortalOperation(props) {
204
73
  result: await props.client.search(PortalSearchRequestSchema.parse(props.publicRequest), options)
205
74
  };
206
75
  }
207
- return assertNever(props.operation);
76
+ return assertNever$1(props.operation);
208
77
  }
209
- function assertNever(value) {
78
+ function assertNever$1(value) {
210
79
  throw new Error(`Unsupported Tool Portal CLI operation: ${String(value)}.`);
211
80
  }
212
- function readApprovalToken(arguments_, environment) {
213
- const environmentName = arguments_.approvalTokenEnvironmentName;
81
+ function readApprovalToken(command, environment) {
82
+ const environmentName = command.approvalTokenEnvironmentName;
214
83
  if (environmentName === void 0) return void 0;
215
84
  const approvalToken = environment[environmentName];
216
85
  if (approvalToken === void 0 || approvalToken.length === 0) throw new Error("The explicit Tool Portal approval-token environment variable is unset.");
@@ -224,7 +93,7 @@ function safeDiagnostic(error, secrets) {
224
93
  async function waitForCancellationNotificationFlush() {
225
94
  await new Promise((resolve) => setImmediate(resolve));
226
95
  }
227
- async function runToolPortalCli(argv, environment) {
96
+ async function runToolPortalOperation(command, environment) {
228
97
  let authorization;
229
98
  let approvalToken;
230
99
  let client;
@@ -232,23 +101,16 @@ async function runToolPortalCli(argv, environment) {
232
101
  const interrupt = () => cancellation.abort(/* @__PURE__ */ new Error("Tool Portal CLI interrupted."));
233
102
  process.once("SIGINT", interrupt);
234
103
  try {
235
- const parseResult = runToolPortalCliParser(argv, {
236
- stderr: process.stderr,
237
- stdout: process.stdout
238
- });
239
- if (parseResult.kind === "help") return parseResult.exitCode;
240
- if (parseResult.kind === "parse-error") return 2;
241
- const cliArguments = parseResult.value;
242
- const transportResult = await createCliTransport(cliArguments, environment);
104
+ const transportResult = await createCliTransport(command, environment);
243
105
  authorization = transportResult.authorization;
244
106
  client = new ToolPortalMcpClient({ transport: transportResult.transport });
245
107
  await client.connect();
246
- const publicRequest = JSON.parse(cliArguments.inputJson);
247
- approvalToken = cliArguments.operation === "call" ? readApprovalToken(cliArguments, environment) : void 0;
108
+ const publicRequest = JSON.parse(command.inputJson);
109
+ approvalToken = command.operation === "call" ? readApprovalToken(command, environment) : void 0;
248
110
  const invocation = await invokePortalOperation({
249
111
  ...approvalToken === void 0 ? {} : { approvalToken },
250
112
  client,
251
- operation: cliArguments.operation,
113
+ operation: command.operation,
252
114
  publicRequest,
253
115
  signal: cancellation.signal
254
116
  });
@@ -270,7 +132,125 @@ async function runToolPortalCli(argv, environment) {
270
132
  } catch {}
271
133
  }
272
134
  }
273
- process.exitCode = await runToolPortalCli(process.argv.slice(2), process.env);
135
+ //#endregion
136
+ //#region src/cli/tool-portal-cli-dispatcher.ts
137
+ function assertNever(value) {
138
+ throw new Error(`Unsupported Tool Portal CLI operation: ${String(value)}.`);
139
+ }
140
+ async function dispatchToolPortalCommand(command, environment, operation = runToolPortalOperation) {
141
+ switch (command.operation) {
142
+ case "artifact-read":
143
+ case "call":
144
+ case "describe":
145
+ case "list":
146
+ case "search": return operation(command, environment);
147
+ default: return assertNever(command);
148
+ }
149
+ }
150
+ //#endregion
151
+ //#region src/cli/tool-portal-cli-parser.ts
152
+ const toolPortalTransportKindSchema = z.enum(["http", "scoped-stdio"]);
153
+ const toolPortalHttpTransportKindSchema = toolPortalTransportKindSchema.extract(["http"]);
154
+ const toolPortalScopedStdioTransportKindSchema = toolPortalTransportKindSchema.extract(["scoped-stdio"]);
155
+ const toolPortalInputJsonSchema = z.string().min(1);
156
+ const toolPortalEnvironmentVariableNameSchema = z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/u);
157
+ const toolPortalOptionalApprovalEnvironmentNameSchema = toolPortalEnvironmentVariableNameSchema.optional();
158
+ const toolPortalHttpEndpointSchema = z.string().min(1).refine((value) => {
159
+ try {
160
+ const endpoint = new URL(value);
161
+ return (endpoint.protocol === "http:" || endpoint.protocol === "https:") && endpoint.username.length === 0 && endpoint.password.length === 0 && endpoint.hash.length === 0;
162
+ } catch {
163
+ return false;
164
+ }
165
+ }, { message: "Tool Portal HTTP endpoint must be an HTTP(S) URL without credentials or a fragment." });
166
+ const toolPortalScopedStdioConfigPathSchema = z.string().min(1).refine(path.isAbsolute, { message: "Scoped stdio configuration path must be absolute." });
167
+ function projectZodScalarPresence(props) {
168
+ if (props.schema instanceof z.ZodOptional) {
169
+ if (props.schema.unwrap() instanceof z.ZodDefault) throw new Error("CLI value schemas must not mix ZodOptional and ZodDefault.");
170
+ return optional(props.parser);
171
+ }
172
+ if (props.schema instanceof z.ZodDefault) {
173
+ if (props.schema.unwrap() instanceof z.ZodOptional) throw new Error("CLI value schemas must not mix ZodOptional and ZodDefault.");
174
+ return withDefault(props.parser, props.schema.parse(void 0));
175
+ }
176
+ if (props.schema.safeParse(void 0).success) throw new TypeError("CLI value schemas accepting undefined must use ZodOptional or ZodDefault.");
177
+ return props.parser;
178
+ }
179
+ const toolPortalTransportParser = or(map(object({
180
+ authorizationEnvironmentName: option("--authorization-env", zod(toolPortalEnvironmentVariableNameSchema, {
181
+ metavar: "ENV_NAME",
182
+ placeholder: "TOOL_PORTAL_AUTH"
183
+ })),
184
+ endpoint: option("--endpoint", zod(toolPortalHttpEndpointSchema, {
185
+ metavar: "URL",
186
+ placeholder: "https://example.test/mcp"
187
+ })),
188
+ kind: constant("http"),
189
+ transportKind: option("--transport", zod(toolPortalHttpTransportKindSchema, {
190
+ metavar: "TRANSPORT",
191
+ placeholder: "http"
192
+ }))
193
+ }), ({ authorizationEnvironmentName, endpoint, kind }) => ({
194
+ authorizationEnvironmentName,
195
+ endpoint,
196
+ kind
197
+ })), map(object({
198
+ kind: constant("scoped-stdio"),
199
+ scopedStdioConfigPath: option("--stdio-config", zod(toolPortalScopedStdioConfigPathSchema, {
200
+ metavar: "PATH",
201
+ placeholder: "/tmp/tool-portal.json"
202
+ })),
203
+ transportKind: option("--transport", zod(toolPortalScopedStdioTransportKindSchema, {
204
+ metavar: "TRANSPORT",
205
+ placeholder: "scoped-stdio"
206
+ }))
207
+ }), ({ kind, scopedStdioConfigPath }) => ({
208
+ kind,
209
+ scopedStdioConfigPath
210
+ })));
211
+ function createInputJsonOption() {
212
+ return option("--input-json", zod(toolPortalInputJsonSchema, {
213
+ metavar: "JSON",
214
+ placeholder: "{}"
215
+ }));
216
+ }
217
+ const callCommandParser = command("call", object({
218
+ approvalTokenEnvironmentName: projectZodScalarPresence({
219
+ parser: option("--approval-token-env", zod(toolPortalOptionalApprovalEnvironmentNameSchema, {
220
+ metavar: "ENV_NAME",
221
+ placeholder: void 0
222
+ })),
223
+ schema: toolPortalOptionalApprovalEnvironmentNameSchema
224
+ }),
225
+ inputJson: createInputJsonOption(),
226
+ operation: constant("call"),
227
+ transport: toolPortalTransportParser
228
+ }));
229
+ //#endregion
230
+ //#region src/cli/tool-portal.ts
231
+ const command$1 = run(or(command("artifact-read", object({
232
+ inputJson: createInputJsonOption(),
233
+ operation: constant("artifact-read"),
234
+ transport: toolPortalTransportParser
235
+ })), callCommandParser, command("describe", object({
236
+ inputJson: createInputJsonOption(),
237
+ operation: constant("describe"),
238
+ transport: toolPortalTransportParser
239
+ })), command("list", object({
240
+ inputJson: createInputJsonOption(),
241
+ operation: constant("list"),
242
+ transport: toolPortalTransportParser
243
+ })), command("search", object({
244
+ inputJson: createInputJsonOption(),
245
+ operation: constant("search"),
246
+ transport: toolPortalTransportParser
247
+ }))), {
248
+ errorExitCode: 2,
249
+ help: "both",
250
+ programName: "tool-portal",
251
+ showDefault: true
252
+ });
253
+ process.exitCode = await dispatchToolPortalCommand(command$1, process.env);
274
254
  //#endregion
275
255
  export {};
276
256
 
@@ -1 +1 @@
1
- {"version":3,"file":"tool-portal.js","names":[],"sources":["../../src/cli/tool-portal-cli-parser.ts","../../src/cli/tool-portal.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { conditional, object, or } from '@optique/core/constructs';\nimport { runParser, type RunOptions } from '@optique/core/facade';\nimport { formatMessage } from '@optique/core/message';\nimport { map, optional } from '@optique/core/modifiers';\nimport type { Parser } from '@optique/core/parser';\nimport { parseSync } from '@optique/core/parser';\nimport { command, option } from '@optique/core/primitives';\nimport { zod } from '@optique/zod';\nimport { z } from 'zod';\n\nconst operationSchema = z.enum(['artifact-read', 'call', 'describe', 'list', 'search']);\nconst transportKindSchema = z.enum(['http', 'scoped-stdio']);\nconst environmentVariableNameSchema = z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/u);\nconst absolutePathSchema = z.string().min(1).refine(path.isAbsolute, {\n\tmessage: 'Scoped stdio configuration path must be absolute.',\n});\n\nexport type ToolPortalCliOperation = z.infer<typeof operationSchema>;\n\nexport interface ToolPortalHttpTransportArguments {\n\treadonly authorizationEnvironmentName: string;\n\treadonly endpoint: string;\n\treadonly kind: 'http';\n}\n\nexport interface ToolPortalScopedStdioTransportArguments {\n\treadonly kind: 'scoped-stdio';\n\treadonly scopedStdioConfigPath: string;\n}\n\nexport type ToolPortalCliTransport =\n\t| ToolPortalHttpTransportArguments\n\t| ToolPortalScopedStdioTransportArguments;\n\ntype ToolPortalNonCallOperation = Exclude<ToolPortalCliOperation, 'call'>;\n\nexport type ToolPortalCliArguments =\n\t| {\n\t\t\treadonly approvalTokenEnvironmentName?: string;\n\t\t\treadonly inputJson: string;\n\t\t\treadonly operation: 'call';\n\t\t\treadonly transport: ToolPortalCliTransport;\n\t }\n\t| {\n\t\t\treadonly inputJson: string;\n\t\t\treadonly operation: ToolPortalNonCallOperation;\n\t\t\treadonly transport: ToolPortalCliTransport;\n\t };\n\nexport type ToolPortalCliParseResult =\n\t| { readonly kind: 'parsed'; readonly value: ToolPortalCliArguments }\n\t| { readonly kind: 'help'; readonly exitCode: 0 }\n\t| { readonly kind: 'parse-error'; readonly exitCode: number };\n\nexport interface ToolPortalCliParserIo {\n\treadonly stderr: Pick<NodeJS.WriteStream, 'write'>;\n\treadonly stdout: Pick<NodeJS.WriteStream, 'write'>;\n}\n\nfunction createEnvironmentVariableNameParser(): ReturnType<typeof zod<string>> {\n\treturn zod(environmentVariableNameSchema, {\n\t\tmetavar: 'ENV_NAME',\n\t\tplaceholder: 'TOOL_PORTAL_AUTH',\n\t});\n}\n\nfunction createInputJsonParser(): ReturnType<typeof zod<string>> {\n\treturn zod(z.string().min(1), {\n\t\tmetavar: 'JSON',\n\t\tplaceholder: '{}',\n\t});\n}\n\nfunction createHttpTransportParser(): Parser<'sync', ToolPortalHttpTransportArguments> {\n\tconst httpTransportOptionsParser = object({\n\t\tauthorizationEnvironmentName: option(\n\t\t\t'--authorization-env',\n\t\t\tcreateEnvironmentVariableNameParser(),\n\t\t),\n\t\tendpoint: option(\n\t\t\t'--endpoint',\n\t\t\tzod(z.string().min(1), {\n\t\t\t\tmetavar: 'URL',\n\t\t\t\tplaceholder: 'https://example.test/mcp',\n\t\t\t}),\n\t\t),\n\t});\n\treturn map(\n\t\thttpTransportOptionsParser,\n\t\t(options): ToolPortalHttpTransportArguments => ({\n\t\t\t...options,\n\t\t\tkind: 'http',\n\t\t}),\n\t);\n}\n\nfunction createScopedStdioTransportParser(): Parser<\n\t'sync',\n\tToolPortalScopedStdioTransportArguments\n> {\n\tconst scopedStdioTransportOptionsParser = object({\n\t\tscopedStdioConfigPath: option(\n\t\t\t'--stdio-config',\n\t\t\tzod(absolutePathSchema, {\n\t\t\t\tmetavar: 'PATH',\n\t\t\t\tplaceholder: '/tmp/tool-portal.json',\n\t\t\t}),\n\t\t),\n\t});\n\treturn map(\n\t\tscopedStdioTransportOptionsParser,\n\t\t(options): ToolPortalScopedStdioTransportArguments => ({\n\t\t\t...options,\n\t\t\tkind: 'scoped-stdio',\n\t\t}),\n\t);\n}\n\nfunction createTransportParser(): Parser<'sync', ToolPortalCliTransport> {\n\tconst transportSelectionParser = conditional(\n\t\toption(\n\t\t\t'--transport',\n\t\t\tzod(transportKindSchema, {\n\t\t\t\tmetavar: 'TRANSPORT',\n\t\t\t\tplaceholder: 'http',\n\t\t\t}),\n\t\t),\n\t\t{\n\t\t\thttp: createHttpTransportParser(),\n\t\t\t'scoped-stdio': createScopedStdioTransportParser(),\n\t\t},\n\t);\n\treturn map(transportSelectionParser, ([, transport]): ToolPortalCliTransport => transport);\n}\n\nfunction createInputJsonOption(): Parser<'sync', string> {\n\treturn option('--input-json', createInputJsonParser());\n}\n\nfunction createCallCommand(): Parser<'sync', ToolPortalCliArguments> {\n\treturn command(\n\t\t'call',\n\t\tmap(\n\t\t\tobject({\n\t\t\t\tapprovalTokenEnvironmentName: optional(\n\t\t\t\t\toption('--approval-token-env', createEnvironmentVariableNameParser()),\n\t\t\t\t),\n\t\t\t\tinputJson: createInputJsonOption(),\n\t\t\t\ttransport: createTransportParser(),\n\t\t\t}),\n\t\t\t({ approvalTokenEnvironmentName, inputJson, transport }): ToolPortalCliArguments => ({\n\t\t\t\t...(approvalTokenEnvironmentName === undefined ? {} : { approvalTokenEnvironmentName }),\n\t\t\t\tinputJson,\n\t\t\t\toperation: 'call',\n\t\t\t\ttransport,\n\t\t\t}),\n\t\t),\n\t);\n}\n\nfunction createNonCallCommand(\n\toperation: ToolPortalNonCallOperation,\n): Parser<'sync', ToolPortalCliArguments> {\n\treturn command(\n\t\toperation,\n\t\tmap(\n\t\t\tobject({\n\t\t\t\tinputJson: createInputJsonOption(),\n\t\t\t\ttransport: createTransportParser(),\n\t\t\t}),\n\t\t\t({ inputJson, transport }): ToolPortalCliArguments => ({\n\t\t\t\tinputJson,\n\t\t\t\toperation,\n\t\t\t\ttransport,\n\t\t\t}),\n\t\t),\n\t);\n}\n\nexport const toolPortalCliParser: Parser<'sync', ToolPortalCliArguments> = or(\n\tcreateNonCallCommand('artifact-read'),\n\tcreateCallCommand(),\n\tcreateNonCallCommand('describe'),\n\tcreateNonCallCommand('list'),\n\tcreateNonCallCommand('search'),\n);\n\ntype ToolPortalCliRunnerSignal = Exclude<ToolPortalCliParseResult, { readonly kind: 'parsed' }>;\n\nclass ToolPortalCliRunnerSignalError extends Error {\n\treadonly signal: ToolPortalCliRunnerSignal;\n\n\tconstructor(signal: ToolPortalCliRunnerSignal) {\n\t\tsuper(`Tool Portal CLI runner signal: ${signal.kind}`);\n\t\tthis.signal = signal;\n\t}\n}\n\nfunction writeOutput(write: ToolPortalCliParserIo['stdout'], text: string): void {\n\twrite.write(text.endsWith('\\n') ? text : `${text}\\n`);\n}\n\nfunction createRunOptions(io: ToolPortalCliParserIo): RunOptions<never, never> {\n\treturn {\n\t\thelp: {\n\t\t\tcommand: true,\n\t\t\toption: { names: ['-h', '--help'] as const },\n\t\t\tonShow: (): never => {\n\t\t\t\tthrow new ToolPortalCliRunnerSignalError({ exitCode: 0, kind: 'help' });\n\t\t\t},\n\t\t},\n\t\tonError: (exitCode: number): never => {\n\t\t\tthrow new ToolPortalCliRunnerSignalError({ exitCode, kind: 'parse-error' });\n\t\t},\n\t\tstderr: (text: string): void => writeOutput(io.stderr, text),\n\t\tstdout: (text: string): void => writeOutput(io.stdout, text),\n\t};\n}\n\nexport function runToolPortalCliParser(\n\targv: readonly string[],\n\tio: ToolPortalCliParserIo,\n): ToolPortalCliParseResult {\n\ttry {\n\t\treturn {\n\t\t\tkind: 'parsed',\n\t\t\tvalue: runParser(toolPortalCliParser, 'tool-portal', argv, createRunOptions(io)),\n\t\t};\n\t} catch (error: unknown) {\n\t\tif (error instanceof ToolPortalCliRunnerSignalError) return error.signal;\n\t\tthrow error;\n\t}\n}\n\nexport function parseToolPortalCliArguments(argv: readonly string[]): ToolPortalCliArguments {\n\tconst result = parseSync(toolPortalCliParser, argv);\n\tif (!result.success) {\n\t\tthrow new Error(formatMessage(result.error));\n\t}\n\treturn result.value;\n}\n","#!/usr/bin/env node\n\nimport { readFile } from 'node:fs/promises';\n\nimport { z } from 'zod';\n\nimport {\n\tPortalArtifactReadRequestSchema,\n\ttype PortalArtifactReadResult,\n} from '../artifact-surface/index.js';\nimport { encodeCanonicalJson } from '../portable-contracts/index.js';\nimport {\n\tPortalCallRequestSchema,\n\tPortalDescribeRequestSchema,\n\tPortalListRequestSchema,\n\tPortalSearchRequestSchema,\n\ttype PortalCallResult,\n\ttype PortalDescribeResult,\n\ttype PortalListResult,\n\ttype PortalSearchResult,\n} from '../portal-call-surface/index.js';\nimport {\n\tToolPortalMcpClient,\n\ttype ToolPortalMcpTransport,\n} from '../tool-portal-mcp-client/index.js';\nimport { createNodeToolPortalMcpTransport } from '../tool-portal-mcp-client/node-tool-portal-mcp-transport.js';\nimport {\n\trunToolPortalCliParser,\n\ttype ToolPortalCliArguments,\n\ttype ToolPortalCliOperation,\n} from './tool-portal-cli-parser.js';\n\nconst canonicalResultGraceAfterInterruptMilliseconds = 250;\nconst ScopedStdioConfigSchema = z\n\t.object({\n\t\targv: z.array(z.string()).max(128),\n\t\texecutable: z.string().min(1),\n\t\tschemaVersion: z.literal(1),\n\t})\n\t.strict();\n\ntype ToolPortalCliInvocationResult =\n\t| { readonly kind: 'artifact-read'; readonly result: PortalArtifactReadResult }\n\t| {\n\t\t\treadonly kind: 'portal';\n\t\t\treadonly result:\n\t\t\t\t| PortalCallResult\n\t\t\t\t| PortalDescribeResult\n\t\t\t\t| PortalListResult\n\t\t\t\t| PortalSearchResult;\n\t };\n\ninterface ToolPortalCliTransportResult {\n\treadonly authorization: string | undefined;\n\treadonly transport: ToolPortalMcpTransport;\n}\n\nfunction parseHttpEndpoint(endpoint: string): URL {\n\tconst parsedEndpoint = new URL(endpoint);\n\tif (\n\t\t!['http:', 'https:'].includes(parsedEndpoint.protocol) ||\n\t\tparsedEndpoint.username.length > 0 ||\n\t\tparsedEndpoint.password.length > 0 ||\n\t\tparsedEndpoint.hash.length > 0\n\t) {\n\t\tthrow new Error(\n\t\t\t'Tool Portal HTTP endpoint must be an HTTP(S) URL without credentials or a fragment.',\n\t\t);\n\t}\n\treturn parsedEndpoint;\n}\n\nasync function createCliTransport(\n\targuments_: ToolPortalCliArguments,\n\tenvironment: NodeJS.ProcessEnv,\n): Promise<ToolPortalCliTransportResult> {\n\tif (arguments_.transport.kind === 'http') {\n\t\tconst environmentName = arguments_.transport.authorizationEnvironmentName;\n\t\tconst authorization = environmentName === undefined ? undefined : environment[environmentName];\n\t\tif (authorization === undefined || authorization.length === 0) {\n\t\t\tthrow new Error('The explicit Tool Portal authorization environment variable is unset.');\n\t\t}\n\t\treturn {\n\t\t\tauthorization,\n\t\t\ttransport: createNodeToolPortalMcpTransport({\n\t\t\t\tauthorization,\n\t\t\t\tendpoint: parseHttpEndpoint(arguments_.transport.endpoint),\n\t\t\t\tkind: 'http',\n\t\t\t}),\n\t\t};\n\t}\n\n\tconst config = ScopedStdioConfigSchema.parse(\n\t\tJSON.parse(await readFile(arguments_.transport.scopedStdioConfigPath, 'utf8')) as unknown,\n\t);\n\treturn {\n\t\tauthorization: undefined,\n\t\ttransport: createNodeToolPortalMcpTransport({\n\t\t\targv: config.argv,\n\t\t\texecutable: config.executable,\n\t\t\tkind: 'scoped-stdio',\n\t\t}),\n\t};\n}\n\nasync function invokePortalOperation(props: {\n\treadonly approvalToken?: string;\n\treadonly client: ToolPortalMcpClient;\n\treadonly operation: ToolPortalCliOperation;\n\treadonly publicRequest: unknown;\n\treadonly signal: AbortSignal;\n}): Promise<ToolPortalCliInvocationResult> {\n\tconst options = {\n\t\tresultGraceAfterAbortMs: canonicalResultGraceAfterInterruptMilliseconds,\n\t\tsignal: props.signal,\n\t};\n\tswitch (props.operation) {\n\t\tcase 'artifact-read':\n\t\t\treturn {\n\t\t\t\tkind: 'artifact-read',\n\t\t\t\tresult: await props.client.artifacts.read(\n\t\t\t\t\tPortalArtifactReadRequestSchema.parse(props.publicRequest),\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\t};\n\t\tcase 'call':\n\t\t\treturn {\n\t\t\t\tkind: 'portal',\n\t\t\t\tresult: await props.client.call(PortalCallRequestSchema.parse(props.publicRequest), {\n\t\t\t\t\t...options,\n\t\t\t\t\t...(props.approvalToken === undefined ? {} : { approvalToken: props.approvalToken }),\n\t\t\t\t}),\n\t\t\t};\n\t\tcase 'describe':\n\t\t\treturn {\n\t\t\t\tkind: 'portal',\n\t\t\t\tresult: await props.client.describe(\n\t\t\t\t\tPortalDescribeRequestSchema.parse(props.publicRequest),\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\t};\n\t\tcase 'list':\n\t\t\treturn {\n\t\t\t\tkind: 'portal',\n\t\t\t\tresult: await props.client.list(\n\t\t\t\t\tPortalListRequestSchema.parse(props.publicRequest),\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\t};\n\t\tcase 'search':\n\t\t\treturn {\n\t\t\t\tkind: 'portal',\n\t\t\t\tresult: await props.client.search(\n\t\t\t\t\tPortalSearchRequestSchema.parse(props.publicRequest),\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\t};\n\t}\n\treturn assertNever(props.operation);\n}\n\nfunction assertNever(value: never): never {\n\tthrow new Error(`Unsupported Tool Portal CLI operation: ${String(value)}.`);\n}\n\nfunction readApprovalToken(\n\targuments_: Extract<ToolPortalCliArguments, { readonly operation: 'call' }>,\n\tenvironment: NodeJS.ProcessEnv,\n): string | undefined {\n\tconst environmentName = arguments_.approvalTokenEnvironmentName;\n\tif (environmentName === undefined) return undefined;\n\tconst approvalToken = environment[environmentName];\n\tif (approvalToken === undefined || approvalToken.length === 0) {\n\t\tthrow new Error('The explicit Tool Portal approval-token environment variable is unset.');\n\t}\n\treturn z.string().min(1).max(16_384).parse(approvalToken);\n}\n\nfunction safeDiagnostic(error: unknown, secrets: readonly string[]): string {\n\tlet message = error instanceof Error ? error.message : String(error);\n\tfor (const secret of secrets) {\n\t\tif (secret.length > 0) message = message.replaceAll(secret, '[redacted]');\n\t}\n\treturn message;\n}\n\nasync function waitForCancellationNotificationFlush(): Promise<void> {\n\tawait new Promise<void>((resolve) => setImmediate(resolve));\n}\n\nasync function runToolPortalCli(\n\targv: readonly string[],\n\tenvironment: NodeJS.ProcessEnv,\n): Promise<number> {\n\tlet authorization: string | undefined;\n\tlet approvalToken: string | undefined;\n\tlet client: ToolPortalMcpClient | undefined;\n\tconst cancellation = new AbortController();\n\tconst interrupt = (): void => cancellation.abort(new Error('Tool Portal CLI interrupted.'));\n\tprocess.once('SIGINT', interrupt);\n\ttry {\n\t\tconst parseResult = runToolPortalCliParser(argv, {\n\t\t\tstderr: process.stderr,\n\t\t\tstdout: process.stdout,\n\t\t});\n\t\tif (parseResult.kind === 'help') return parseResult.exitCode;\n\t\tif (parseResult.kind === 'parse-error') return 2;\n\t\tconst cliArguments = parseResult.value;\n\t\tconst transportResult = await createCliTransport(cliArguments, environment);\n\t\tauthorization = transportResult.authorization;\n\t\tclient = new ToolPortalMcpClient({ transport: transportResult.transport });\n\t\tawait client.connect();\n\t\tconst publicRequest = JSON.parse(cliArguments.inputJson) as unknown;\n\t\tapprovalToken =\n\t\t\tcliArguments.operation === 'call' ? readApprovalToken(cliArguments, environment) : undefined;\n\t\tconst invocation = await invokePortalOperation({\n\t\t\t...(approvalToken === undefined ? {} : { approvalToken }),\n\t\t\tclient,\n\t\t\toperation: cliArguments.operation,\n\t\t\tpublicRequest,\n\t\t\tsignal: cancellation.signal,\n\t\t});\n\t\tprocess.stdout.write(`${encodeCanonicalJson(invocation.result)}\\n`);\n\t\tconst exitCode = invocation.kind === 'artifact-read' || invocation.result.ok ? 0 : 1;\n\t\ttry {\n\t\t\tawait client.close();\n\t\t} catch {\n\t\t\t// A canonical result already returned and remains authoritative after interrupt/close races.\n\t\t}\n\t\tclient = undefined;\n\t\treturn exitCode;\n\t} catch (error: unknown) {\n\t\tif (cancellation.signal.aborted) {\n\t\t\tawait waitForCancellationNotificationFlush();\n\t\t}\n\t\tprocess.stderr.write(\n\t\t\t`tool-portal: ${safeDiagnostic(error, [\n\t\t\t\t...(authorization === undefined ? [] : [authorization]),\n\t\t\t\t...(approvalToken === undefined ? [] : [approvalToken]),\n\t\t\t])}\\n`,\n\t\t);\n\t\treturn 2;\n\t} finally {\n\t\tprocess.removeListener('SIGINT', interrupt);\n\t\tif (client !== undefined) {\n\t\t\ttry {\n\t\t\t\tawait client.close();\n\t\t\t} catch {\n\t\t\t\t// The primary diagnostic and exit class remain authoritative.\n\t\t\t}\n\t\t}\n\t}\n}\n\nprocess.exitCode = await runToolPortalCli(process.argv.slice(2), process.env);\n"],"mappings":"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"}
1
+ {"version":3,"file":"tool-portal.js","names":["assertNever","command"],"sources":["../../src/cli/tool-portal-cli-operation.ts","../../src/cli/tool-portal-cli-dispatcher.ts","../../src/cli/tool-portal-cli-parser.ts","../../src/cli/tool-portal.ts"],"sourcesContent":["import { readFile } from 'node:fs/promises';\n\nimport { z } from 'zod';\n\nimport {\n\tPortalArtifactReadRequestSchema,\n\ttype PortalArtifactReadResult,\n} from '../artifact-surface/index.js';\nimport { encodeCanonicalJson } from '../portable-contracts/index.js';\nimport {\n\tPortalCallRequestSchema,\n\tPortalDescribeRequestSchema,\n\tPortalListRequestSchema,\n\tPortalSearchRequestSchema,\n\ttype PortalCallResult,\n\ttype PortalDescribeResult,\n\ttype PortalListResult,\n\ttype PortalSearchResult,\n} from '../portal-call-surface/index.js';\nimport {\n\tToolPortalMcpClient,\n\ttype ToolPortalMcpTransport,\n} from '../tool-portal-mcp-client/index.js';\nimport { createNodeToolPortalMcpTransport } from '../tool-portal-mcp-client/node-tool-portal-mcp-transport.js';\nimport type { ToolPortalCommand } from './tool-portal-cli-parser.js';\n\nconst canonicalResultGraceAfterInterruptMilliseconds = 250;\nconst scopedStdioConfigSchema = z\n\t.object({\n\t\targv: z.array(z.string()).max(128),\n\t\texecutable: z.string().min(1),\n\t\tschemaVersion: z.literal(1),\n\t})\n\t.strict();\n\ntype ToolPortalCliInvocationResult =\n\t| { readonly kind: 'artifact-read'; readonly result: PortalArtifactReadResult }\n\t| {\n\t\t\treadonly kind: 'portal';\n\t\t\treadonly result:\n\t\t\t\t| PortalCallResult\n\t\t\t\t| PortalDescribeResult\n\t\t\t\t| PortalListResult\n\t\t\t\t| PortalSearchResult;\n\t };\n\ninterface ToolPortalCliTransportResult {\n\treadonly authorization: string | undefined;\n\treadonly transport: ToolPortalMcpTransport;\n}\n\nasync function createCliTransport(\n\tcommand: ToolPortalCommand,\n\tenvironment: NodeJS.ProcessEnv,\n): Promise<ToolPortalCliTransportResult> {\n\tif (command.transport.kind === 'http') {\n\t\tconst authorization = environment[command.transport.authorizationEnvironmentName];\n\t\tif (authorization === undefined || authorization.length === 0) {\n\t\t\tthrow new Error('The explicit Tool Portal authorization environment variable is unset.');\n\t\t}\n\t\treturn {\n\t\t\tauthorization,\n\t\t\ttransport: createNodeToolPortalMcpTransport({\n\t\t\t\tauthorization,\n\t\t\t\tendpoint: new URL(command.transport.endpoint),\n\t\t\t\tkind: 'http',\n\t\t\t}),\n\t\t};\n\t}\n\n\tconst config = scopedStdioConfigSchema.parse(\n\t\tJSON.parse(await readFile(command.transport.scopedStdioConfigPath, 'utf8')) as unknown,\n\t);\n\treturn {\n\t\tauthorization: undefined,\n\t\ttransport: createNodeToolPortalMcpTransport({\n\t\t\targv: config.argv,\n\t\t\texecutable: config.executable,\n\t\t\tkind: 'scoped-stdio',\n\t\t}),\n\t};\n}\n\nasync function invokePortalOperation(props: {\n\treadonly approvalToken?: string;\n\treadonly client: ToolPortalMcpClient;\n\treadonly operation: ToolPortalCommand['operation'];\n\treadonly publicRequest: unknown;\n\treadonly signal: AbortSignal;\n}): Promise<ToolPortalCliInvocationResult> {\n\tconst options = {\n\t\tresultGraceAfterAbortMs: canonicalResultGraceAfterInterruptMilliseconds,\n\t\tsignal: props.signal,\n\t};\n\tswitch (props.operation) {\n\t\tcase 'artifact-read':\n\t\t\treturn {\n\t\t\t\tkind: 'artifact-read',\n\t\t\t\tresult: await props.client.artifacts.read(\n\t\t\t\t\tPortalArtifactReadRequestSchema.parse(props.publicRequest),\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\t};\n\t\tcase 'call':\n\t\t\treturn {\n\t\t\t\tkind: 'portal',\n\t\t\t\tresult: await props.client.call(PortalCallRequestSchema.parse(props.publicRequest), {\n\t\t\t\t\t...options,\n\t\t\t\t\t...(props.approvalToken === undefined ? {} : { approvalToken: props.approvalToken }),\n\t\t\t\t}),\n\t\t\t};\n\t\tcase 'describe':\n\t\t\treturn {\n\t\t\t\tkind: 'portal',\n\t\t\t\tresult: await props.client.describe(\n\t\t\t\t\tPortalDescribeRequestSchema.parse(props.publicRequest),\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\t};\n\t\tcase 'list':\n\t\t\treturn {\n\t\t\t\tkind: 'portal',\n\t\t\t\tresult: await props.client.list(\n\t\t\t\t\tPortalListRequestSchema.parse(props.publicRequest),\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\t};\n\t\tcase 'search':\n\t\t\treturn {\n\t\t\t\tkind: 'portal',\n\t\t\t\tresult: await props.client.search(\n\t\t\t\t\tPortalSearchRequestSchema.parse(props.publicRequest),\n\t\t\t\t\toptions,\n\t\t\t\t),\n\t\t\t};\n\t}\n\treturn assertNever(props.operation);\n}\n\nfunction assertNever(value: never): never {\n\tthrow new Error(`Unsupported Tool Portal CLI operation: ${String(value)}.`);\n}\n\nfunction readApprovalToken(\n\tcommand: Extract<ToolPortalCommand, { readonly operation: 'call' }>,\n\tenvironment: NodeJS.ProcessEnv,\n): string | undefined {\n\tconst environmentName = command.approvalTokenEnvironmentName;\n\tif (environmentName === undefined) return undefined;\n\tconst approvalToken = environment[environmentName];\n\tif (approvalToken === undefined || approvalToken.length === 0) {\n\t\tthrow new Error('The explicit Tool Portal approval-token environment variable is unset.');\n\t}\n\treturn z.string().min(1).max(16_384).parse(approvalToken);\n}\n\nfunction safeDiagnostic(error: unknown, secrets: readonly string[]): string {\n\tlet message = error instanceof Error ? error.message : String(error);\n\tfor (const secret of secrets) {\n\t\tif (secret.length > 0) message = message.replaceAll(secret, '[redacted]');\n\t}\n\treturn message;\n}\n\nasync function waitForCancellationNotificationFlush(): Promise<void> {\n\tawait new Promise<void>((resolve) => setImmediate(resolve));\n}\n\nexport async function runToolPortalOperation(\n\tcommand: ToolPortalCommand,\n\tenvironment: NodeJS.ProcessEnv,\n): Promise<number> {\n\tlet authorization: string | undefined;\n\tlet approvalToken: string | undefined;\n\tlet client: ToolPortalMcpClient | undefined;\n\tconst cancellation = new AbortController();\n\tconst interrupt = (): void => cancellation.abort(new Error('Tool Portal CLI interrupted.'));\n\tprocess.once('SIGINT', interrupt);\n\ttry {\n\t\tconst transportResult = await createCliTransport(command, environment);\n\t\tauthorization = transportResult.authorization;\n\t\tclient = new ToolPortalMcpClient({ transport: transportResult.transport });\n\t\tawait client.connect();\n\t\tconst publicRequest = JSON.parse(command.inputJson) as unknown;\n\t\tapprovalToken =\n\t\t\tcommand.operation === 'call' ? readApprovalToken(command, environment) : undefined;\n\t\tconst invocation = await invokePortalOperation({\n\t\t\t...(approvalToken === undefined ? {} : { approvalToken }),\n\t\t\tclient,\n\t\t\toperation: command.operation,\n\t\t\tpublicRequest,\n\t\t\tsignal: cancellation.signal,\n\t\t});\n\t\tprocess.stdout.write(`${encodeCanonicalJson(invocation.result)}\\n`);\n\t\tconst exitCode = invocation.kind === 'artifact-read' || invocation.result.ok ? 0 : 1;\n\t\ttry {\n\t\t\tawait client.close();\n\t\t} catch {\n\t\t\t// A canonical result already returned and remains authoritative after interrupt/close races.\n\t\t}\n\t\tclient = undefined;\n\t\treturn exitCode;\n\t} catch (error: unknown) {\n\t\tif (cancellation.signal.aborted) await waitForCancellationNotificationFlush();\n\t\tprocess.stderr.write(\n\t\t\t`tool-portal: ${safeDiagnostic(error, [\n\t\t\t\t...(authorization === undefined ? [] : [authorization]),\n\t\t\t\t...(approvalToken === undefined ? [] : [approvalToken]),\n\t\t\t])}\\n`,\n\t\t);\n\t\treturn 2;\n\t} finally {\n\t\tprocess.removeListener('SIGINT', interrupt);\n\t\tif (client !== undefined) {\n\t\t\ttry {\n\t\t\t\tawait client.close();\n\t\t\t} catch {\n\t\t\t\t// The primary diagnostic and exit class remain authoritative.\n\t\t\t}\n\t\t}\n\t}\n}\n","import { runToolPortalOperation } from './tool-portal-cli-operation.js';\nimport type { ToolPortalCommand } from './tool-portal-cli-parser.js';\n\nexport type ToolPortalOperation = (\n\tcommand: ToolPortalCommand,\n\tenvironment: NodeJS.ProcessEnv,\n) => Promise<number>;\n\nfunction assertNever(value: never): never {\n\tthrow new Error(`Unsupported Tool Portal CLI operation: ${String(value)}.`);\n}\n\nexport async function dispatchToolPortalCommand(\n\tcommand: ToolPortalCommand,\n\tenvironment: NodeJS.ProcessEnv,\n\toperation: ToolPortalOperation = runToolPortalOperation,\n): Promise<number> {\n\tswitch (command.operation) {\n\t\tcase 'artifact-read':\n\t\tcase 'call':\n\t\tcase 'describe':\n\t\tcase 'list':\n\t\tcase 'search':\n\t\t\treturn operation(command, environment);\n\t\tdefault:\n\t\t\treturn assertNever(command);\n\t}\n}\n","import path from 'node:path';\n\nimport { object, or } from '@optique/core/constructs';\nimport { map, optional, withDefault } from '@optique/core/modifiers';\nimport type { InferValue, Parser } from '@optique/core/parser';\nimport { command, constant, option } from '@optique/core/primitives';\nimport { zod } from '@optique/zod';\nimport { z } from 'zod';\n\nconst toolPortalTransportKindSchema = z.enum(['http', 'scoped-stdio']);\nconst toolPortalHttpTransportKindSchema = toolPortalTransportKindSchema.extract(['http']);\nconst toolPortalScopedStdioTransportKindSchema = toolPortalTransportKindSchema.extract([\n\t'scoped-stdio',\n]);\nconst toolPortalInputJsonSchema = z.string().min(1);\nconst toolPortalEnvironmentVariableNameSchema = z.string().regex(/^[A-Za-z_][A-Za-z0-9_]*$/u);\nconst toolPortalOptionalApprovalEnvironmentNameSchema =\n\ttoolPortalEnvironmentVariableNameSchema.optional();\nconst toolPortalHttpEndpointSchema = z\n\t.string()\n\t.min(1)\n\t.refine(\n\t\t(value): boolean => {\n\t\t\ttry {\n\t\t\t\tconst endpoint = new URL(value);\n\t\t\t\treturn (\n\t\t\t\t\t(endpoint.protocol === 'http:' || endpoint.protocol === 'https:') &&\n\t\t\t\t\tendpoint.username.length === 0 &&\n\t\t\t\t\tendpoint.password.length === 0 &&\n\t\t\t\t\tendpoint.hash.length === 0\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tmessage:\n\t\t\t\t'Tool Portal HTTP endpoint must be an HTTP(S) URL without credentials or a fragment.',\n\t\t},\n\t);\nconst toolPortalScopedStdioConfigPathSchema = z.string().min(1).refine(path.isAbsolute, {\n\tmessage: 'Scoped stdio configuration path must be absolute.',\n});\n\ninterface ZodScalarPresenceProps<TSchema extends z.ZodType, TState> {\n\treadonly parser: Parser<'sync', z.infer<TSchema>, TState>;\n\treadonly schema: TSchema;\n}\n\nexport function projectZodScalarPresence<TSchema extends z.ZodType, TState>(\n\tprops: ZodScalarPresenceProps<TSchema, TState>,\n): Parser<'sync', z.infer<TSchema>>;\nexport function projectZodScalarPresence(props: {\n\treadonly parser: Parser;\n\treadonly schema: z.ZodType;\n}): Parser {\n\tif (props.schema instanceof z.ZodOptional) {\n\t\tif (props.schema.unwrap() instanceof z.ZodDefault) {\n\t\t\tthrow new Error('CLI value schemas must not mix ZodOptional and ZodDefault.');\n\t\t}\n\t\treturn optional(props.parser);\n\t}\n\tif (props.schema instanceof z.ZodDefault) {\n\t\tif (props.schema.unwrap() instanceof z.ZodOptional) {\n\t\t\tthrow new Error('CLI value schemas must not mix ZodOptional and ZodDefault.');\n\t\t}\n\t\treturn withDefault(props.parser, props.schema.parse(undefined));\n\t}\n\tif (props.schema.safeParse(undefined).success) {\n\t\tthrow new TypeError(\n\t\t\t'CLI value schemas accepting undefined must use ZodOptional or ZodDefault.',\n\t\t);\n\t}\n\treturn props.parser;\n}\n\nconst toolPortalHttpTransportParser = map(\n\tobject({\n\t\tauthorizationEnvironmentName: option(\n\t\t\t'--authorization-env',\n\t\t\tzod(toolPortalEnvironmentVariableNameSchema, {\n\t\t\t\tmetavar: 'ENV_NAME',\n\t\t\t\tplaceholder: 'TOOL_PORTAL_AUTH',\n\t\t\t}),\n\t\t),\n\t\tendpoint: option(\n\t\t\t'--endpoint',\n\t\t\tzod(toolPortalHttpEndpointSchema, {\n\t\t\t\tmetavar: 'URL',\n\t\t\t\tplaceholder: 'https://example.test/mcp',\n\t\t\t}),\n\t\t),\n\t\tkind: constant('http'),\n\t\ttransportKind: option(\n\t\t\t'--transport',\n\t\t\tzod(toolPortalHttpTransportKindSchema, {\n\t\t\t\tmetavar: 'TRANSPORT',\n\t\t\t\tplaceholder: 'http',\n\t\t\t}),\n\t\t),\n\t}),\n\t({ authorizationEnvironmentName, endpoint, kind }) => ({\n\t\tauthorizationEnvironmentName,\n\t\tendpoint,\n\t\tkind,\n\t}),\n);\n\nconst toolPortalScopedStdioTransportParser = map(\n\tobject({\n\t\tkind: constant('scoped-stdio'),\n\t\tscopedStdioConfigPath: option(\n\t\t\t'--stdio-config',\n\t\t\tzod(toolPortalScopedStdioConfigPathSchema, {\n\t\t\t\tmetavar: 'PATH',\n\t\t\t\tplaceholder: '/tmp/tool-portal.json',\n\t\t\t}),\n\t\t),\n\t\ttransportKind: option(\n\t\t\t'--transport',\n\t\t\tzod(toolPortalScopedStdioTransportKindSchema, {\n\t\t\t\tmetavar: 'TRANSPORT',\n\t\t\t\tplaceholder: 'scoped-stdio',\n\t\t\t}),\n\t\t),\n\t}),\n\t({ kind, scopedStdioConfigPath }) => ({ kind, scopedStdioConfigPath }),\n);\n\nconst toolPortalTransportParser = or(\n\ttoolPortalHttpTransportParser,\n\ttoolPortalScopedStdioTransportParser,\n);\n\nfunction createInputJsonOption(): Parser<'sync', z.infer<typeof toolPortalInputJsonSchema>> {\n\treturn option(\n\t\t'--input-json',\n\t\tzod(toolPortalInputJsonSchema, { metavar: 'JSON', placeholder: '{}' }),\n\t);\n}\n\nconst callCommandParser = command(\n\t'call',\n\tobject({\n\t\tapprovalTokenEnvironmentName: projectZodScalarPresence({\n\t\t\tparser: option(\n\t\t\t\t'--approval-token-env',\n\t\t\t\tzod(toolPortalOptionalApprovalEnvironmentNameSchema, {\n\t\t\t\t\tmetavar: 'ENV_NAME',\n\t\t\t\t\tplaceholder: undefined,\n\t\t\t\t}),\n\t\t\t),\n\t\t\tschema: toolPortalOptionalApprovalEnvironmentNameSchema,\n\t\t}),\n\t\tinputJson: createInputJsonOption(),\n\t\toperation: constant('call'),\n\t\ttransport: toolPortalTransportParser,\n\t}),\n);\n\nconst artifactReadCommandParser = command(\n\t'artifact-read',\n\tobject({\n\t\tinputJson: createInputJsonOption(),\n\t\toperation: constant('artifact-read'),\n\t\ttransport: toolPortalTransportParser,\n\t}),\n);\nconst describeCommandParser = command(\n\t'describe',\n\tobject({\n\t\tinputJson: createInputJsonOption(),\n\t\toperation: constant('describe'),\n\t\ttransport: toolPortalTransportParser,\n\t}),\n);\nconst listCommandParser = command(\n\t'list',\n\tobject({\n\t\tinputJson: createInputJsonOption(),\n\t\toperation: constant('list'),\n\t\ttransport: toolPortalTransportParser,\n\t}),\n);\nconst searchCommandParser = command(\n\t'search',\n\tobject({\n\t\tinputJson: createInputJsonOption(),\n\t\toperation: constant('search'),\n\t\ttransport: toolPortalTransportParser,\n\t}),\n);\n\nexport const toolPortalRootParser = or(\n\tartifactReadCommandParser,\n\tcallCommandParser,\n\tdescribeCommandParser,\n\tlistCommandParser,\n\tsearchCommandParser,\n);\n\nexport type ToolPortalCommand = InferValue<typeof toolPortalRootParser>;\n","#!/usr/bin/env node\n\nimport { run } from '@optique/run';\n\nimport { dispatchToolPortalCommand } from './tool-portal-cli-dispatcher.js';\nimport { toolPortalRootParser } from './tool-portal-cli-parser.js';\n\nconst command = run(toolPortalRootParser, {\n\terrorExitCode: 2,\n\thelp: 'both',\n\tprogramName: 'tool-portal',\n\tshowDefault: true,\n});\n\nprocess.exitCode = await dispatchToolPortalCommand(command, process.env);\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { c as PortalArtifactReadRequest, u as PortalArtifactReadResult } from "../index-B_xYdo3v.js";
2
2
  import { A as SandboxTerminalResizeResult, At as SandboxFsRenameResult, B as SandboxStreamWriteRequest, Bt as SandboxExecCancelRequest, E as SandboxTerminalAttachResult, Et as SandboxFsRemoveResult, Gt as SandboxExecStartRequest, H as SandboxStreamWriteResult, Ht as SandboxExecCancelResult, I as SandboxStreamReadRequest, It as SandboxFsWriteRequest, K as SandboxProcessCancelResult, M as SandboxStreamCloseRequest, Mt as SandboxFsStatRequest, O as SandboxTerminalResizeRequest, Ot as SandboxFsRenameRequest, P as SandboxStreamCloseResult, Pt as SandboxFsStatResult, Q as SandboxProcessLogsResult, R as SandboxStreamReadResult, Rt as SandboxFsWriteResult, St as SandboxFsReadResult, W as SandboxProcessCancelRequest, X as SandboxProcessLogsRequest, Yt as SandboxExecWaitRequest, Zt as SandboxExecWaitResult, _ as GatewayRuntimeTrustedInvocationRequester, _n as SandboxRetainedResultLookupRequest, at as SandboxProcessStatusResult, bt as SandboxFsReadRequest, c as GatewayRuntimeManagedPluginClientKind, cn as SandboxEnvironmentStatusRequest, d as GatewayRuntimeTrustedInvocationContext, en as SandboxEnvironmentCloseRequest, et as SandboxProcessStartRequest, f as GatewayRuntimeTrustedInvocationContextSchema, ft as SandboxFsListRequest, g as GatewayRuntimeTrustedInvocationPrincipalSchema, gt as SandboxFsMkdirRequest, h as GatewayRuntimeTrustedInvocationPrincipal, in as SandboxEnvironmentOpenRequest, it as SandboxProcessStatusRequest, ln as SandboxEnvironmentStatusResult, lt as SandboxProcessWaitResult, m as GatewayRuntimeTrustedInvocationCorrelationSchema, mt as SandboxFsListResult, n as GatewayRuntimeAttachmentMetadata$1, nt as SandboxProcessStartResult, on as SandboxEnvironmentOpenResult, p as GatewayRuntimeTrustedInvocationCorrelation, qt as SandboxExecStartResult, st as SandboxProcessWaitRequest, tn as SandboxEnvironmentCloseResult, v as GatewayRuntimeTrustedInvocationRequesterSchema, vt as SandboxFsMkdirResult, w as SandboxTerminalAttachRequest, wt as SandboxFsRemoveRequest, yn as SandboxRetainedResultLookupResult } from "../index-C5NhyO2R.js";
3
- import { S as PortalCallRequest, _ as PortalSearchResult, c as PortalDescribeResult, i as PortalCallResult, p as PortalListResult } from "../portal-call-result-schema-CGopcrjJ.js";
4
- import { i as PortalSearchRequest, m as PortalDescribeRequest, s as PortalListRequest } from "../index-DvcQs-mM.js";
3
+ import { S as PortalCallRequest, _ as PortalSearchResult, c as PortalDescribeResult, i as PortalCallResult, p as PortalListResult } from "../portal-call-result-schema-DalyNrfW.js";
4
+ import { i as PortalSearchRequest, m as PortalDescribeRequest, s as PortalListRequest } from "../index-CsCLhmNb.js";
5
5
  import { z } from "zod/v4";
6
6
 
7
7
  //#region src/gateway-runtime-client/gateway-runtime-trace-context.d.ts
@@ -23,14 +23,14 @@ type PortalPartialOutputEvent = z.infer<typeof PortalPartialOutputEventSchema>;
23
23
  declare const PortalDiagnosticEventSchema: z.ZodObject<{
24
24
  diagnostic: z.ZodObject<{
25
25
  code: z.ZodEnum<{
26
- provider_unavailable: "provider_unavailable";
27
- capability_denied: "capability_denied";
28
26
  approval_required: "approval_required";
27
+ capability_denied: "capability_denied";
29
28
  validation_failed: "validation_failed";
29
+ provider_unavailable: "provider_unavailable";
30
30
  execution_failed: "execution_failed";
31
- output_truncated: "output_truncated";
32
- timeout: "timeout";
33
31
  cancelled: "cancelled";
32
+ timeout: "timeout";
33
+ output_truncated: "output_truncated";
34
34
  artifact_unavailable: "artifact_unavailable";
35
35
  }>;
36
36
  level: z.ZodEnum<{
@@ -55,29 +55,29 @@ type PortalCancellationRequestEvent = z.infer<typeof PortalCancellationRequestEv
55
55
  declare const PortalCancellationResultEventSchema: z.ZodObject<{
56
56
  error: z.ZodOptional<z.ZodObject<{
57
57
  code: z.ZodEnum<{
58
- provider_unavailable: "provider_unavailable";
59
- capability_denied: "capability_denied";
58
+ invalid_request: "invalid_request";
59
+ not_found: "not_found";
60
+ not_authorized: "not_authorized";
60
61
  approval_required: "approval_required";
62
+ capability_denied: "capability_denied";
61
63
  validation_failed: "validation_failed";
64
+ provider_unavailable: "provider_unavailable";
62
65
  execution_failed: "execution_failed";
63
- timeout: "timeout";
64
66
  cancelled: "cancelled";
65
- invalid_request: "invalid_request";
66
- not_found: "not_found";
67
- not_authorized: "not_authorized";
67
+ timeout: "timeout";
68
68
  }>;
69
69
  message: z.ZodString;
70
70
  retryable: z.ZodOptional<z.ZodBoolean>;
71
71
  safeDiagnostic: z.ZodOptional<z.ZodObject<{
72
72
  code: z.ZodEnum<{
73
- provider_unavailable: "provider_unavailable";
74
- capability_denied: "capability_denied";
75
73
  approval_required: "approval_required";
74
+ capability_denied: "capability_denied";
76
75
  validation_failed: "validation_failed";
76
+ provider_unavailable: "provider_unavailable";
77
77
  execution_failed: "execution_failed";
78
- output_truncated: "output_truncated";
79
- timeout: "timeout";
80
78
  cancelled: "cancelled";
79
+ timeout: "timeout";
80
+ output_truncated: "output_truncated";
81
81
  artifact_unavailable: "artifact_unavailable";
82
82
  }>;
83
83
  level: z.ZodEnum<{
@@ -93,8 +93,8 @@ declare const PortalCancellationResultEventSchema: z.ZodObject<{
93
93
  id: z.ZodString;
94
94
  kind: z.ZodLiteral<"cancellation_result">;
95
95
  status: z.ZodEnum<{
96
- cancelled: "cancelled";
97
96
  not_found: "not_found";
97
+ cancelled: "cancelled";
98
98
  already_finished: "already_finished";
99
99
  }>;
100
100
  }, z.core.$strict>;
@@ -117,14 +117,14 @@ declare const PortalEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
117
117
  }, z.core.$strict>, z.ZodObject<{
118
118
  diagnostic: z.ZodObject<{
119
119
  code: z.ZodEnum<{
120
- provider_unavailable: "provider_unavailable";
121
- capability_denied: "capability_denied";
122
120
  approval_required: "approval_required";
121
+ capability_denied: "capability_denied";
123
122
  validation_failed: "validation_failed";
123
+ provider_unavailable: "provider_unavailable";
124
124
  execution_failed: "execution_failed";
125
- output_truncated: "output_truncated";
126
- timeout: "timeout";
127
125
  cancelled: "cancelled";
126
+ timeout: "timeout";
127
+ output_truncated: "output_truncated";
128
128
  artifact_unavailable: "artifact_unavailable";
129
129
  }>;
130
130
  level: z.ZodEnum<{
@@ -145,29 +145,29 @@ declare const PortalEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
145
145
  }, z.core.$strict>, z.ZodObject<{
146
146
  error: z.ZodOptional<z.ZodObject<{
147
147
  code: z.ZodEnum<{
148
- provider_unavailable: "provider_unavailable";
149
- capability_denied: "capability_denied";
148
+ invalid_request: "invalid_request";
149
+ not_found: "not_found";
150
+ not_authorized: "not_authorized";
150
151
  approval_required: "approval_required";
152
+ capability_denied: "capability_denied";
151
153
  validation_failed: "validation_failed";
154
+ provider_unavailable: "provider_unavailable";
152
155
  execution_failed: "execution_failed";
153
- timeout: "timeout";
154
156
  cancelled: "cancelled";
155
- invalid_request: "invalid_request";
156
- not_found: "not_found";
157
- not_authorized: "not_authorized";
157
+ timeout: "timeout";
158
158
  }>;
159
159
  message: z.ZodString;
160
160
  retryable: z.ZodOptional<z.ZodBoolean>;
161
161
  safeDiagnostic: z.ZodOptional<z.ZodObject<{
162
162
  code: z.ZodEnum<{
163
- provider_unavailable: "provider_unavailable";
164
- capability_denied: "capability_denied";
165
163
  approval_required: "approval_required";
164
+ capability_denied: "capability_denied";
166
165
  validation_failed: "validation_failed";
166
+ provider_unavailable: "provider_unavailable";
167
167
  execution_failed: "execution_failed";
168
- output_truncated: "output_truncated";
169
- timeout: "timeout";
170
168
  cancelled: "cancelled";
169
+ timeout: "timeout";
170
+ output_truncated: "output_truncated";
171
171
  artifact_unavailable: "artifact_unavailable";
172
172
  }>;
173
173
  level: z.ZodEnum<{
@@ -183,8 +183,8 @@ declare const PortalEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
183
183
  id: z.ZodString;
184
184
  kind: z.ZodLiteral<"cancellation_result">;
185
185
  status: z.ZodEnum<{
186
- cancelled: "cancelled";
187
186
  not_found: "not_found";
187
+ cancelled: "cancelled";
188
188
  already_finished: "already_finished";
189
189
  }>;
190
190
  }, z.core.$strict>], "kind">;
@@ -192,26 +192,26 @@ type PortalEvent = z.infer<typeof PortalEventSchema>;
192
192
  //#endregion
193
193
  //#region src/portal-event-surface/models/safe-diagnostic-schema.d.ts
194
194
  declare const SafeDiagnosticCodeSchema: z.ZodEnum<{
195
- provider_unavailable: "provider_unavailable";
196
- capability_denied: "capability_denied";
197
195
  approval_required: "approval_required";
196
+ capability_denied: "capability_denied";
198
197
  validation_failed: "validation_failed";
198
+ provider_unavailable: "provider_unavailable";
199
199
  execution_failed: "execution_failed";
200
- output_truncated: "output_truncated";
201
- timeout: "timeout";
202
200
  cancelled: "cancelled";
201
+ timeout: "timeout";
202
+ output_truncated: "output_truncated";
203
203
  artifact_unavailable: "artifact_unavailable";
204
204
  }>;
205
205
  declare const SafeDiagnosticSchema: z.ZodObject<{
206
206
  code: z.ZodEnum<{
207
- provider_unavailable: "provider_unavailable";
208
- capability_denied: "capability_denied";
209
207
  approval_required: "approval_required";
208
+ capability_denied: "capability_denied";
210
209
  validation_failed: "validation_failed";
210
+ provider_unavailable: "provider_unavailable";
211
211
  execution_failed: "execution_failed";
212
- output_truncated: "output_truncated";
213
- timeout: "timeout";
214
212
  cancelled: "cancelled";
213
+ timeout: "timeout";
214
+ output_truncated: "output_truncated";
215
215
  artifact_unavailable: "artifact_unavailable";
216
216
  }>;
217
217
  level: z.ZodEnum<{
@@ -226,4 +226,4 @@ declare const SafeDiagnosticSchema: z.ZodObject<{
226
226
  type SafeDiagnostic = z.infer<typeof SafeDiagnosticSchema>;
227
227
  //#endregion
228
228
  export { PortalCancellationRequestEventSchema as a, PortalDiagnosticEvent as c, PortalEventSchema as d, PortalPartialOutputEvent as f, PortalProgressEventSchema as h, PortalCancellationRequestEvent as i, PortalDiagnosticEventSchema as l, PortalProgressEvent as m, SafeDiagnosticCodeSchema as n, PortalCancellationResultEvent as o, PortalPartialOutputEventSchema as p, SafeDiagnosticSchema as r, PortalCancellationResultEventSchema as s, SafeDiagnostic as t, PortalEvent as u };
229
- //# sourceMappingURL=index-BoYiYKiy.d.ts.map
229
+ //# sourceMappingURL=index-BQ12JshX.d.ts.map