| import type { Command } from "commander"; |
| import { callGateway } from "../gateway/call.js"; |
| import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES } from "../utils/message-channel.js"; |
| import { withProgress } from "./progress.js"; |
|
|
| export type GatewayRpcOpts = { |
| url?: string; |
| token?: string; |
| timeout?: string; |
| expectFinal?: boolean; |
| json?: boolean; |
| }; |
|
|
| export function addGatewayClientOptions(cmd: Command) { |
| return cmd |
| .option("--url <url>", "Gateway WebSocket URL (defaults to gateway.remote.url when configured)") |
| .option("--token <token>", "Gateway token (if required)") |
| .option("--timeout <ms>", "Timeout in ms", "10000") |
| .option("--expect-final", "Wait for final response (agent)", false); |
| } |
|
|
| export async function callGatewayFromCli( |
| method: string, |
| opts: GatewayRpcOpts, |
| params?: unknown, |
| extra?: { expectFinal?: boolean; progress?: boolean }, |
| ) { |
| const showProgress = extra?.progress ?? opts.json !== true; |
| return await withProgress( |
| { |
| label: `Gateway ${method}`, |
| indeterminate: true, |
| enabled: showProgress, |
| }, |
| async () => |
| await callGateway({ |
| url: opts.url, |
| token: opts.token, |
| method, |
| params, |
| expectFinal: extra?.expectFinal ?? Boolean(opts.expectFinal), |
| timeoutMs: Number(opts.timeout ?? 10_000), |
| clientName: GATEWAY_CLIENT_NAMES.CLI, |
| mode: GATEWAY_CLIENT_MODES.CLI, |
| }), |
| ); |
| } |
|
|