refactor(gateway): dedupe agent file request resolution

This commit is contained in:
Peter Steinberger
2026-02-15 05:47:55 +00:00
parent 45f7ef1bfc
commit 2fe16af3cd

View File

@@ -1,6 +1,6 @@
import fs from "node:fs/promises"; import fs from "node:fs/promises";
import path from "node:path"; import path from "node:path";
import type { GatewayRequestHandlers } from "./types.js"; import type { GatewayRequestHandlers, RespondFn } from "./types.js";
import { import {
listAgentIds, listAgentIds,
resolveAgentDir, resolveAgentDir,
@@ -57,6 +57,30 @@ const MEMORY_FILE_NAMES = [DEFAULT_MEMORY_FILENAME, DEFAULT_MEMORY_ALT_FILENAME]
const ALLOWED_FILE_NAMES = new Set<string>([...BOOTSTRAP_FILE_NAMES, ...MEMORY_FILE_NAMES]); const ALLOWED_FILE_NAMES = new Set<string>([...BOOTSTRAP_FILE_NAMES, ...MEMORY_FILE_NAMES]);
function resolveAgentWorkspaceFileOrRespondError(
params: Record<string, unknown>,
respond: RespondFn,
): {
cfg: ReturnType<typeof loadConfig>;
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 = { type FileMeta = {
size: number; size: number;
updatedAtMs: number; updatedAtMs: number;
@@ -403,22 +427,11 @@ export const agentsHandlers: GatewayRequestHandlers = {
); );
return; return;
} }
const cfg = loadConfig(); const resolved = resolveAgentWorkspaceFileOrRespondError(params, respond);
const agentId = resolveAgentIdOrError(String(params.agentId ?? ""), cfg); if (!resolved) {
if (!agentId) {
respond(false, undefined, errorShape(ErrorCodes.INVALID_REQUEST, "unknown agent id"));
return; return;
} }
const name = String(params.name ?? "").trim(); const { agentId, workspaceDir, name } = resolved;
if (!ALLOWED_FILE_NAMES.has(name)) {
respond(
false,
undefined,
errorShape(ErrorCodes.INVALID_REQUEST, `unsupported file "${name}"`),
);
return;
}
const workspaceDir = resolveAgentWorkspaceDir(cfg, agentId);
const filePath = path.join(workspaceDir, name); const filePath = path.join(workspaceDir, name);
const meta = await statFile(filePath); const meta = await statFile(filePath);
if (!meta) { if (!meta) {
@@ -465,22 +478,11 @@ export const agentsHandlers: GatewayRequestHandlers = {
); );
return; return;
} }
const cfg = loadConfig(); const resolved = resolveAgentWorkspaceFileOrRespondError(params, respond);
const agentId = resolveAgentIdOrError(String(params.agentId ?? ""), cfg); if (!resolved) {
if (!agentId) {
respond(false, undefined, errorShape(ErrorCodes.INVALID_REQUEST, "unknown agent id"));
return; return;
} }
const name = String(params.name ?? "").trim(); const { agentId, workspaceDir, name } = resolved;
if (!ALLOWED_FILE_NAMES.has(name)) {
respond(
false,
undefined,
errorShape(ErrorCodes.INVALID_REQUEST, `unsupported file "${name}"`),
);
return;
}
const workspaceDir = resolveAgentWorkspaceDir(cfg, agentId);
await fs.mkdir(workspaceDir, { recursive: true }); await fs.mkdir(workspaceDir, { recursive: true });
const filePath = path.join(workspaceDir, name); const filePath = path.join(workspaceDir, name);
const content = String(params.content ?? ""); const content = String(params.content ?? "");