From 99b42620d05ac81b83de7e022a91c618a5887282 Mon Sep 17 00:00:00 2001 From: slhafzjw Date: Sun, 11 Jan 2026 15:01:19 +0800 Subject: [PATCH] refactor(LocalRunnerClient): repair paths registering order and support creating directories automatically --- .../core/action/runner/LocalRunnerClient.java | 26 ++++++++++++++++--- .../core/action/runner/RunnerClient.java | 11 +++++++- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/action/runner/LocalRunnerClient.java b/Partner-Main/src/main/java/work/slhaf/partner/core/action/runner/LocalRunnerClient.java index 5578dab3..e7a3dec7 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/action/runner/LocalRunnerClient.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/action/runner/LocalRunnerClient.java @@ -57,10 +57,10 @@ import static work.slhaf.partner.common.util.PathUtil.buildPathStr; @Slf4j public class LocalRunnerClient extends RunnerClient { - private final String TMP_ACTION_PATH = buildPathStr(ACTION_PATH, "tmp"); - private final String DYNAMIC_ACTION_PATH = buildPathStr(ACTION_PATH, "dynamic"); - private final String MCP_SERVER_PATH = buildPathStr(ACTION_PATH, "mcp"); - private final String MCP_DESC_PATH = buildPathStr(MCP_SERVER_PATH, "desc"); + private final String TMP_ACTION_PATH; + private final String DYNAMIC_ACTION_PATH; + private final String MCP_SERVER_PATH; + private final String MCP_DESC_PATH; /** * 存储包括 DescMcp、DynamicActionMcp、CommonMcp 在内的所有 MCP Server 对应的客户端 @@ -99,6 +99,13 @@ public class LocalRunnerClient extends RunnerClient { public LocalRunnerClient(ConcurrentHashMap existedMetaActions, ExecutorService executor, @Nullable String baseActionPath) { super(existedMetaActions, executor, baseActionPath); + this.TMP_ACTION_PATH = buildPathStr(ACTION_PATH, "tmp"); + this.DYNAMIC_ACTION_PATH = buildPathStr(ACTION_PATH, "dynamic"); + this.MCP_SERVER_PATH = buildPathStr(ACTION_PATH, "mcp"); + this.MCP_DESC_PATH = buildPathStr(MCP_SERVER_PATH, "desc"); + + createPaths(); + try { watchService = FileSystems.getDefault().newWatchService(); } catch (IOException e) { @@ -110,6 +117,17 @@ public class LocalRunnerClient extends RunnerClient { setupShutdownHook(); } + private void createPaths() { + try { + Files.createDirectory(Path.of(TMP_ACTION_PATH)); + Files.createDirectory(Path.of(DYNAMIC_ACTION_PATH)); + Files.createDirectory(Path.of(MCP_SERVER_PATH)); + Files.createDirectory(Path.of(MCP_DESC_PATH)); + } catch (IOException e) { + throw new ActionInitFailedException("目录创建失败: " + e); + } + } + private void registerCommonMcp() { val ctx = new WatchContext(Path.of(MCP_SERVER_PATH), watchService); val common = new LocalWatchEventProcessor.Common(existedMetaActions, mcpClients, ctx); diff --git a/Partner-Main/src/main/java/work/slhaf/partner/core/action/runner/RunnerClient.java b/Partner-Main/src/main/java/work/slhaf/partner/core/action/runner/RunnerClient.java index b7c32f18..af610ffa 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/core/action/runner/RunnerClient.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/core/action/runner/RunnerClient.java @@ -5,13 +5,16 @@ import io.modelcontextprotocol.server.McpStatelessAsyncServer; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.Nullable; -import work.slhaf.partner.core.action.entity.McpData; +import work.slhaf.partner.core.action.entity.ActionFileMetaData; import work.slhaf.partner.core.action.entity.MetaAction; import work.slhaf.partner.core.action.entity.MetaAction.Result; import work.slhaf.partner.core.action.entity.MetaAction.ResultStatus; import work.slhaf.partner.core.action.entity.MetaActionInfo; +import work.slhaf.partner.core.action.exception.ActionInitFailedException; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; @@ -51,6 +54,12 @@ public abstract class RunnerClient { this.executor = executor; baseActionPath = baseActionPath == null ? DATA : baseActionPath; this.ACTION_PATH = buildPathStr(baseActionPath, "action"); + + try { + Files.createDirectory(Path.of(ACTION_PATH)); + } catch (IOException e) { + throw new ActionInitFailedException("目录创建失败: " + ACTION_PATH, e); + } } /**