From fc5a2f92933ddfb7f5eca52b702cdc939d6a5bf8 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Wed, 1 Apr 2026 00:08:20 +0900 Subject: [PATCH] fix(media): add host media read helper --- src/media/read-capability.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/media/read-capability.ts diff --git a/src/media/read-capability.ts b/src/media/read-capability.ts new file mode 100644 index 00000000000..3ca74a5bd9b --- /dev/null +++ b/src/media/read-capability.ts @@ -0,0 +1,29 @@ +import { resolveAgentWorkspaceDir } from "../agents/agent-scope.js"; +import { resolvePathFromInput } from "../agents/path-policy.js"; +import { resolveEffectiveToolFsRootExpansionAllowed } from "../agents/tool-fs-policy.js"; +import { resolveWorkspaceRoot } from "../agents/workspace-dir.js"; +import type { OpenClawConfig } from "../config/config.js"; +import { readLocalFileSafely } from "../infra/fs-safe.js"; + +export function createAgentScopedHostMediaReadFile(params: { + cfg: OpenClawConfig; + agentId?: string; + workspaceDir?: string; +}): ((filePath: string) => Promise) | undefined { + if ( + !resolveEffectiveToolFsRootExpansionAllowed({ + cfg: params.cfg, + agentId: params.agentId, + }) + ) { + return undefined; + } + const inferredWorkspaceDir = + params.workspaceDir ?? + (params.agentId ? resolveAgentWorkspaceDir(params.cfg, params.agentId) : undefined); + const workspaceRoot = resolveWorkspaceRoot(inferredWorkspaceDir); + return async (filePath: string) => { + const resolvedPath = resolvePathFromInput(filePath, workspaceRoot); + return (await readLocalFileSafely({ filePath: resolvedPath })).buffer; + }; +}