refactor(agent-tools): reuse gateway option parsing

This commit is contained in:
Peter Steinberger
2026-02-17 00:29:30 +00:00
parent 37c97964af
commit 10b060dbd3
3 changed files with 13 additions and 12 deletions

View File

@@ -6,7 +6,7 @@ import { canvasSnapshotTempPath, parseCanvasSnapshotPayload } from "../../cli/no
import { imageMimeFromFormat } from "../../media/mime.js";
import { optionalStringEnum, stringEnum } from "../schema/typebox.js";
import { type AnyAgentTool, imageResult, jsonResult, readStringParam } from "./common.js";
import { callGatewayTool, type GatewayCallOptions } from "./gateway.js";
import { callGatewayTool, readGatewayCallOptions } from "./gateway.js";
import { resolveNodeId } from "./nodes-utils.js";
const CANVAS_ACTIONS = [
@@ -58,11 +58,7 @@ export function createCanvasTool(): AnyAgentTool {
execute: async (_toolCallId, args) => {
const params = args as Record<string, unknown>;
const action = readStringParam(params, "action", { required: true });
const gatewayOpts: GatewayCallOptions = {
gatewayUrl: readStringParam(params, "gatewayUrl", { trim: false }),
gatewayToken: readStringParam(params, "gatewayToken", { trim: false }),
timeoutMs: typeof params.timeoutMs === "number" ? params.timeoutMs : undefined,
};
const gatewayOpts = readGatewayCallOptions(params);
const nodeId = await resolveNodeId(
gatewayOpts,

View File

@@ -1,6 +1,7 @@
import { loadConfig, resolveGatewayPort } from "../../config/config.js";
import { callGateway } from "../../gateway/call.js";
import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES } from "../../utils/message-channel.js";
import { readStringParam } from "./common.js";
export const DEFAULT_GATEWAY_URL = "ws://127.0.0.1:18789";
@@ -10,6 +11,14 @@ export type GatewayCallOptions = {
timeoutMs?: number;
};
export function readGatewayCallOptions(params: Record<string, unknown>): GatewayCallOptions {
return {
gatewayUrl: readStringParam(params, "gatewayUrl", { trim: false }),
gatewayToken: readStringParam(params, "gatewayToken", { trim: false }),
timeoutMs: typeof params.timeoutMs === "number" ? params.timeoutMs : undefined,
};
}
function canonicalizeToolGatewayWsUrl(raw: string): { origin: string; key: string } {
const input = raw.trim();
let url: URL;

View File

@@ -22,7 +22,7 @@ import { resolveSessionAgentId } from "../agent-scope.js";
import { optionalStringEnum, stringEnum } from "../schema/typebox.js";
import { sanitizeToolResultImages } from "../tool-images.js";
import { type AnyAgentTool, jsonResult, readStringParam } from "./common.js";
import { callGatewayTool, type GatewayCallOptions } from "./gateway.js";
import { callGatewayTool, readGatewayCallOptions } from "./gateway.js";
import { listNodes, resolveNodeIdFromList, resolveNodeId } from "./nodes-utils.js";
const NODES_TOOL_ACTIONS = [
@@ -109,11 +109,7 @@ export function createNodesTool(options?: {
execute: async (_toolCallId, args) => {
const params = args as Record<string, unknown>;
const action = readStringParam(params, "action", { required: true });
const gatewayOpts: GatewayCallOptions = {
gatewayUrl: readStringParam(params, "gatewayUrl", { trim: false }),
gatewayToken: readStringParam(params, "gatewayToken", { trim: false }),
timeoutMs: typeof params.timeoutMs === "number" ? params.timeoutMs : undefined,
};
const gatewayOpts = readGatewayCallOptions(params);
try {
switch (action) {