From 819a19e814e8c7ad819c8b7b00c4f6582d43f5f5 Mon Sep 17 00:00:00 2001 From: McClone <***@users.noreply.github.com> Date: Wed, 10 Jun 2026 17:32:59 +0800 Subject: [PATCH] fix(memory): toRelative strips workspace root for ROOTED local filesystem paths In LocalFsMode.ROOTED/UNRESTRICTED, glob returns absolute paths (e.g., /data/agent/.agents/memory/2026-06-10.md). The old toRelative() only stripped the leading '/' which broke resolution in readManagedWorkspaceFileUtf8. Make toRelative non-static and strip the workspace root prefix via WorkspaceManager.getWorkspace() when the path is absolute, preserving the '/' fallback for SANDBOXED virtual paths. --- .../agent/memory/MemoryConsolidator.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/agentscope-harness/src/main/java/io/agentscope/harness/agent/memory/MemoryConsolidator.java b/agentscope-harness/src/main/java/io/agentscope/harness/agent/memory/MemoryConsolidator.java index b324db42a..be0d46cf1 100644 --- a/agentscope-harness/src/main/java/io/agentscope/harness/agent/memory/MemoryConsolidator.java +++ b/agentscope-harness/src/main/java/io/agentscope/harness/agent/memory/MemoryConsolidator.java @@ -24,6 +24,7 @@ import io.agentscope.harness.agent.filesystem.model.FileInfo; import io.agentscope.harness.agent.filesystem.model.GlobResult; import io.agentscope.harness.agent.workspace.WorkspaceManager; +import java.nio.file.Path; import java.time.Instant; import java.util.ArrayList; import java.util.Comparator; @@ -264,14 +265,22 @@ private static String fileName(String path) { } /** - * Converts an absolute filesystem path (e.g. {@code /memory/2025-01-01.md}) to a - * workspace-relative path ({@code memory/2025-01-01.md}) for use with - * {@link WorkspaceManager#readManagedWorkspaceFileUtf8}. + * Converts an absolute filesystem path to a workspace-relative path for use + * with {@link WorkspaceManager#readManagedWorkspaceFileUtf8}. Strips the + * workspace root prefix when the path is an absolute local filesystem path; + * strips only the leading {@code /} for SANDBOXED virtual paths. */ - private static String toRelative(String path) { + private String toRelative(String path) { if (path == null) { return ""; } + Path p = Path.of(path); + if (p.isAbsolute()) { + Path root = workspaceManager.getWorkspace(); + if (p.startsWith(root)) { + return root.relativize(p).toString(); + } + } return path.startsWith("/") ? path.substring(1) : path; }