mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 16:53:04 +08:00
feat(LocalRunnerClient): support executing MetaActions via MCP type
This commit is contained in:
@@ -17,7 +17,7 @@ public class MetaAction {
|
||||
/**
|
||||
* 行动程序可接受的参数,由调用处设置
|
||||
*/
|
||||
private Map<String, String> params;
|
||||
private Map<String, Object> params;
|
||||
/**
|
||||
* 行动结果,包括执行状态和相应内容(执行结果或者错误信息)
|
||||
*/
|
||||
|
||||
@@ -11,7 +11,7 @@ public class MetaActionInfo {
|
||||
private boolean io;
|
||||
private MetaActionType type;
|
||||
|
||||
private Map<String, String> params;
|
||||
private Map<String, Object> params;
|
||||
private String description;
|
||||
private List<String> tags;
|
||||
|
||||
|
||||
@@ -3,6 +3,8 @@ package work.slhaf.partner.core.action.runner;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import io.modelcontextprotocol.client.McpSyncClient;
|
||||
import io.modelcontextprotocol.spec.McpSchema;
|
||||
import lombok.Data;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -72,7 +74,7 @@ public class LocalRunnerClient extends RunnerClient {
|
||||
}
|
||||
|
||||
//TODO 后续需在加载时、或者通过配置文件获取可用命令并注册匹配
|
||||
private String[] buildCommands(String ext, Map<String, String> params, String absolutePath) {
|
||||
private String[] buildCommands(String ext, Map<String, Object> params, String absolutePath) {
|
||||
String command = switch (ext) {
|
||||
case "py" -> "python";
|
||||
case "sh" -> "bash";
|
||||
@@ -86,14 +88,21 @@ public class LocalRunnerClient extends RunnerClient {
|
||||
commands[1] = absolutePath;
|
||||
AtomicInteger paramCount = new AtomicInteger(2);
|
||||
params.forEach((param, value) -> {
|
||||
commands[paramCount.getAndIncrement()] = "--" + param + "=" + value;
|
||||
commands[paramCount.getAndIncrement()] = "--" + param + "=" + value.toString();
|
||||
});
|
||||
return commands;
|
||||
}
|
||||
|
||||
private RunnerResponse doRunWithMcp(MetaAction metaAction) {
|
||||
RunnerResponse response = new RunnerResponse();
|
||||
|
||||
McpSyncClient mcpClient = mcpClients.get(metaAction.getLocation());
|
||||
McpSchema.CallToolRequest callToolRequest = McpSchema.CallToolRequest.builder()
|
||||
.name(metaAction.getName())
|
||||
.arguments(metaAction.getParams())
|
||||
.build();
|
||||
McpSchema.CallToolResult callToolResult = mcpClient.callTool(callToolRequest);
|
||||
response.setOk(callToolResult.isError());
|
||||
response.setData(callToolResult.structuredContent().toString());
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ import java.util.Map;
|
||||
@Data
|
||||
public class GeneratorInput {
|
||||
private String actionName;
|
||||
private Map<String, String> params;
|
||||
private Map<String, Object> params;
|
||||
private String description;
|
||||
private Map<String, String> paramsDescription;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user