refactor(action-core): wrap runner submit flow with Result.runCatching and centralize action error handling

This commit is contained in:
2026-04-12 18:51:33 +08:00
parent e0f955694d
commit 9755672750
2 changed files with 19 additions and 22 deletions

View File

@@ -23,7 +23,7 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.atomic.AtomicBoolean;
@Slf4j
public class LocalRunnerClient extends RunnerClient implements AutoCloseable {
public class LocalRunnerClient extends RunnerClient {
public static final String MCP_NAME_DESC = "mcp-desc";
public static final String MCP_NAME_DYNAMIC = "mcp-dynamic";
@@ -139,20 +139,12 @@ public class LocalRunnerClient extends RunnerClient implements AutoCloseable {
@Override
protected RunnerResponse doRun(MetaAction metaAction) {
log.debug("执行行动: {}", metaAction);
RunnerResponse response;
try {
response = switch (metaAction.getType()) {
case MCP -> mcpActionExecutor.run(metaAction);
case ORIGIN -> originExecutionService.run(metaAction);
case BUILTIN -> doRunWithBuiltin(metaAction);
};
} catch (Exception e) {
response = new RunnerResponse();
response.setOk(false);
response.setData(e.getLocalizedMessage());
}
log.debug("行动执行结果: {}", response);
response = switch (metaAction.getType()) {
case MCP -> mcpActionExecutor.run(metaAction);
case ORIGIN -> originExecutionService.run(metaAction);
case BUILTIN -> doRunWithBuiltin(metaAction);
};
return response;
}

View File

@@ -60,14 +60,24 @@ public abstract class RunnerClient implements AutoCloseable {
* 执行行动程序
*/
public void submit(MetaAction metaAction) {
log.debug("执行行动: {}", metaAction);
// 获取已存在行动列表
Result result = metaAction.getResult();
if (!result.getStatus().equals(Result.Status.WAITING)) {
return;
}
RunnerResponse response = doRun(metaAction);
RunnerResponse response = work.slhaf.partner.framework.agent.support.Result.runCatching(() -> doRun(metaAction)).fold(
runnerResponse -> runnerResponse,
ex -> {
RunnerResponse r = new RunnerResponse();
r.setOk(false);
r.setData(ex.getLocalizedMessage());
return r;
}
);
result.setData(response.getData());
result.setStatus(response.isOk() ? Result.Status.SUCCESS : Result.Status.FAILED);
log.debug("行动执行结果: {}", response);
}
protected abstract RunnerResponse doRun(MetaAction metaAction);
@@ -85,13 +95,8 @@ public abstract class RunnerClient implements AutoCloseable {
response.setData("BuiltinActionRegistry 未初始化");
return response;
}
try {
response.setData(builtinActionRegistry.call(metaAction.getKey(), metaAction.getParams()));
response.setOk(true);
} catch (Exception e) {
response.setOk(false);
response.setData(e.getLocalizedMessage());
}
response.setData(builtinActionRegistry.call(metaAction.getKey(), metaAction.getParams()));
response.setOk(true);
return response;
}