From 0644a344f02c9df94b666658fd9c153442231310 Mon Sep 17 00:00:00 2001 From: guslegend <1670547022@qq.com> Date: Thu, 25 Jun 2026 22:49:57 +0800 Subject: [PATCH] fix(skill): upload resource files under skill name --- .../io/agentscope/core/skill/SkillBox.java | 3 ++- .../agentscope/core/skill/SkillBoxTest.java | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/agentscope-core/src/main/java/io/agentscope/core/skill/SkillBox.java b/agentscope-core/src/main/java/io/agentscope/core/skill/SkillBox.java index 5c89bcec3d..abcf324225 100644 --- a/agentscope-core/src/main/java/io/agentscope/core/skill/SkillBox.java +++ b/agentscope-core/src/main/java/io/agentscope/core/skill/SkillBox.java @@ -781,7 +781,8 @@ public void uploadSkillFiles() { continue; } - Path skillDir = targetDir.resolve(skillId); + // Upload synthesized skills under the package directory, not the source-qualified id. + Path skillDir = targetDir.resolve(skill.getName()); for (String resourcePath : resourcePaths) { if (!filter.accept(resourcePath)) { diff --git a/agentscope-core/src/test/java/io/agentscope/core/skill/SkillBoxTest.java b/agentscope-core/src/test/java/io/agentscope/core/skill/SkillBoxTest.java index a2cee901c7..fbeb1b796b 100644 --- a/agentscope-core/src/test/java/io/agentscope/core/skill/SkillBoxTest.java +++ b/agentscope-core/src/test/java/io/agentscope/core/skill/SkillBoxTest.java @@ -34,6 +34,8 @@ import io.agentscope.core.tool.Toolkit; import io.agentscope.core.tool.mcp.McpClientWrapper; import io.modelcontextprotocol.spec.McpSchema; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.List; import java.util.Map; import org.junit.jupiter.api.BeforeEach; @@ -325,6 +327,28 @@ void testSetSkillActiveWithoutTools() { skillBox.isSkillActive(purePromptSkill.getSkillId()), "Logical state should be inactive"); } + + @Test + @DisplayName("Should upload skill resources under the package directory name") + void testUploadSkillFilesUsesSkillNameDirectory() throws Exception { + AgentSkill skill = + new AgentSkill( + "resource_skill", + "Skill with resources", + "# Resource Skill", + Map.of("SOUL.md", "soul content"), + "classpath:/skills/resource_skill"); + skillBox.registerSkill(skill); + + assertDoesNotThrow(() -> skillBox.uploadSkillFiles()); + + Path uploadDir = skillBox.getUploadDir(); + assertNotNull(uploadDir, "Upload directory should be initialized"); + + Path expectedResource = uploadDir.resolve(skill.getName()).resolve("SOUL.md"); + assertTrue(Files.exists(expectedResource), "Resource should be uploaded by skill name"); + assertEquals("soul content", Files.readString(expectedResource)); + } } private AgentTool createTestTool(String name) {