diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/Constant.java b/Partner-Main/src/main/java/work/slhaf/partner/common/Constant.java index 36d0ab3a..5cecd24a 100644 --- a/Partner-Main/src/main/java/work/slhaf/partner/common/Constant.java +++ b/Partner-Main/src/main/java/work/slhaf/partner/common/Constant.java @@ -5,8 +5,6 @@ public final class Constant { public static final class Path { public static final String DATA = "data"; public static final String MEMORY_DATA = DATA + "/memory"; - public static final String ACTION_PROGRAM = DATA + "/action"; - public static final String TMP_ACTION_DIR_LOCAL = ACTION_PROGRAM + "/tmp"; } } diff --git a/Partner-Main/src/main/java/work/slhaf/partner/common/util/PathUtil.java b/Partner-Main/src/main/java/work/slhaf/partner/common/util/PathUtil.java new file mode 100644 index 00000000..3266de53 --- /dev/null +++ b/Partner-Main/src/main/java/work/slhaf/partner/common/util/PathUtil.java @@ -0,0 +1,14 @@ +package work.slhaf.partner.common.util; + +public class PathUtil { + public static String buildPathStr(String... path) { + StringBuilder str = new StringBuilder(); + for (int i = 0; i < path.length; i++) { + str.append(path[i]); + if (i < path.length - 1) { + str.append("/"); + } + } + return str.toString(); + } +} \ No newline at end of file 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 5929bf25..81c204e6 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 @@ -40,11 +40,16 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.atomic.AtomicInteger; -import static work.slhaf.partner.common.Constant.Path.TMP_ACTION_DIR_LOCAL; +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 Map mcpClients = new HashMap<>(); /** * 动态生成的行动程序都将挂载至该 McpServer @@ -52,8 +57,8 @@ public class LocalRunnerClient extends RunnerClient { private McpStatelessAsyncServer dynamicActionMcpServer; private final WatchService watchService; - public LocalRunnerClient(ConcurrentHashMap existedMetaActions, ExecutorService executor, @Nullable String actionWatchPath) { - super(existedMetaActions, executor); + public LocalRunnerClient(ConcurrentHashMap existedMetaActions, ExecutorService executor, @Nullable String baseActionPath) { + super(existedMetaActions, executor, baseActionPath); try { watchService = FileSystems.getDefault().newWatchService(); } catch (IOException e) { @@ -143,7 +148,7 @@ public class LocalRunnerClient extends RunnerClient { @Override public String buildTmpPath(MetaAction tempAction, String codeType) { - return Path.of(TMP_ACTION_DIR_LOCAL, System.currentTimeMillis() + "-" + tempAction.getKey() + codeType).toString(); + return Path.of(TMP_ACTION_PATH, System.currentTimeMillis() + "-" + tempAction.getKey() + codeType).toString(); } @Override 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 f410083d..b7c32f18 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 @@ -1,8 +1,10 @@ package work.slhaf.partner.core.action.runner; import com.alibaba.fastjson2.JSONObject; +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.MetaAction; import work.slhaf.partner.core.action.entity.MetaAction.Result; @@ -13,6 +15,9 @@ import java.io.IOException; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; +import static work.slhaf.partner.common.Constant.Path.DATA; +import static work.slhaf.partner.common.util.PathUtil.buildPathStr; + /** * 执行客户端抽象类 *
@@ -33,15 +38,19 @@ import java.util.concurrent.ExecutorService; @Slf4j public abstract class RunnerClient { + protected final String ACTION_PATH; + protected final ConcurrentHashMap existedMetaActions; protected final ExecutorService executor; /** * ActionCore 将注入虚拟线程池 */ - public RunnerClient(ConcurrentHashMap existedMetaActions, ExecutorService executor) { + public RunnerClient(ConcurrentHashMap existedMetaActions, ExecutorService executor, @Nullable String baseActionPath) { this.existedMetaActions = existedMetaActions; this.executor = executor; + baseActionPath = baseActionPath == null ? DATA : baseActionPath; + this.ACTION_PATH = buildPathStr(baseActionPath, "action"); } /**