From 2fe16af3cda2aa8d659fe8e28f8f546a029d0993 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 15 Feb 2026 05:47:55 +0000 Subject: [PATCH] refactor(gateway): dedupe agent file request resolution --- src/gateway/server-methods/agents.ts | 60 ++++++++++++++-------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/src/gateway/server-methods/agents.ts b/src/gateway/server-methods/agents.ts index d0f3589d3..86496e1b9 100644 --- a/src/gateway/server-methods/agents.ts +++ b/src/gateway/server-methods/agents.ts @@ -1,6 +1,6 @@ import fs from "node:fs/promises"; import path from "node:path"; -import type { GatewayRequestHandlers } from "./types.js"; +import type { GatewayRequestHandlers, RespondFn } from "./types.js"; import { listAgentIds, resolveAgentDir, @@ -57,6 +57,30 @@ const MEMORY_FILE_NAMES = [DEFAULT_MEMORY_FILENAME, DEFAULT_MEMORY_ALT_FILENAME] const ALLOWED_FILE_NAMES = new Set([...BOOTSTRAP_FILE_NAMES, ...MEMORY_FILE_NAMES]); +function resolveAgentWorkspaceFileOrRespondError( + params: Record, + respond: RespondFn, +): { + cfg: ReturnType; + agentId: string; + workspaceDir: string; + name: string; +} | null { + const cfg = loadConfig(); + const agentId = resolveAgentIdOrError(String(params.agentId ?? ""), cfg); + if (!agentId) { + respond(false, undefined, errorShape(ErrorCodes.INVALID_REQUEST, "unknown agent id")); + return null; + } + const name = String(params.name ?? "").trim(); + if (!ALLOWED_FILE_NAMES.has(name)) { + respond(false, undefined, errorShape(ErrorCodes.INVALID_REQUEST, `unsupported file "${name}"`)); + return null; + } + const workspaceDir = resolveAgentWorkspaceDir(cfg, agentId); + return { cfg, agentId, workspaceDir, name }; +} + type FileMeta = { size: number; updatedAtMs: number; @@ -403,22 +427,11 @@ export const agentsHandlers: GatewayRequestHandlers = { ); return; } - const cfg = loadConfig(); - const agentId = resolveAgentIdOrError(String(params.agentId ?? ""), cfg); - if (!agentId) { - respond(false, undefined, errorShape(ErrorCodes.INVALID_REQUEST, "unknown agent id")); + const resolved = resolveAgentWorkspaceFileOrRespondError(params, respond); + if (!resolved) { return; } - const name = String(params.name ?? "").trim(); - if (!ALLOWED_FILE_NAMES.has(name)) { - respond( - false, - undefined, - errorShape(ErrorCodes.INVALID_REQUEST, `unsupported file "${name}"`), - ); - return; - } - const workspaceDir = resolveAgentWorkspaceDir(cfg, agentId); + const { agentId, workspaceDir, name } = resolved; const filePath = path.join(workspaceDir, name); const meta = await statFile(filePath); if (!meta) { @@ -465,22 +478,11 @@ export const agentsHandlers: GatewayRequestHandlers = { ); return; } - const cfg = loadConfig(); - const agentId = resolveAgentIdOrError(String(params.agentId ?? ""), cfg); - if (!agentId) { - respond(false, undefined, errorShape(ErrorCodes.INVALID_REQUEST, "unknown agent id")); + const resolved = resolveAgentWorkspaceFileOrRespondError(params, respond); + if (!resolved) { return; } - const name = String(params.name ?? "").trim(); - if (!ALLOWED_FILE_NAMES.has(name)) { - respond( - false, - undefined, - errorShape(ErrorCodes.INVALID_REQUEST, `unsupported file "${name}"`), - ); - return; - } - const workspaceDir = resolveAgentWorkspaceDir(cfg, agentId); + const { agentId, workspaceDir, name } = resolved; await fs.mkdir(workspaceDir, { recursive: true }); const filePath = path.join(workspaceDir, name); const content = String(params.content ?? "");