Skip to content

Commit fd8c478

Browse files
author
SolonCode
committed
添加 soloncode /resume 命令实现,可恢复任何任务(手动中断,异常结束)
1 parent eb9dc94 commit fd8c478

3 files changed

Lines changed: 13 additions & 7 deletions

File tree

UPDATE_LOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
### v2026.6.17
44

55
* 修复 soloncode 安装时,会清掉 `~/.soloncode/skills/` 技能的问题
6-
*
6+
* 添加 soloncode `/resume` 命令实现,可恢复任何任务(手动中断,异常结束)
77

88
### v2026.6.16
99

soloncode-cli/src/main/java/org/noear/solon/codecli/command/builtin/ResumeCommand.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import org.noear.solon.ai.agent.react.ReActTrace;
2222
import org.noear.solon.ai.chat.message.AssistantMessage;
2323
import org.noear.solon.ai.chat.message.ChatMessage;
24+
import org.noear.solon.ai.harness.HarnessEngine;
25+
import org.noear.solon.ai.harness.agent.AgentDefinition;
2426
import org.noear.solon.ai.harness.command.Command;
2527
import org.noear.solon.ai.harness.command.CommandContext;
2628
import org.noear.solon.codecli.config.AgentSettings;
@@ -50,17 +52,21 @@ public boolean execute(CommandContext ctx) throws Exception {
5052
AgentSession session = ctx.getSession();
5153

5254
//优化 "/resume"
53-
ReActTrace trace = ReActTrace.getCurrent(session.getContext());
55+
ReActTrace trace = session.getContext().getAs("__main");
5456
if (trace != null) {
55-
if (trace.getFinalAnswer() != null && Agent.ID_END.equals(trace.getRoute())) {
57+
if (Agent.ID_END.equals(trace.getRoute())) {
5658
//说明有结束节点,重新回到思考点点
5759
trace.setRoute(ReActAgent.ID_REASON);
5860
trace.setFinalAnswer(null, false);
59-
trace.getWorkingMemory().removeLastMessage();
61+
62+
ChatMessage workMessage = trace.getWorkingMemory().getLastMessage();
63+
if (workMessage instanceof AssistantMessage) {
64+
trace.getWorkingMemory().removeLastMessage();
65+
}
6066

6167
//回退一条 ai 消息(要生新生成)
62-
List<ChatMessage> messageList = session.getLatestMessages(1);
63-
if (Assert.isNotEmpty(messageList) && messageList.get(0) instanceof AssistantMessage) {
68+
List<ChatMessage> messageList = session.getMessages();
69+
if (Assert.isNotEmpty(messageList) && messageList.get(messageList.size() - 1) instanceof AssistantMessage) {
6470
session.removeLatestMessage(1);
6571
}
6672
}

soloncode-parent/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<parent>
88
<groupId>org.noear</groupId>
99
<artifactId>solon-parent</artifactId>
10-
<version>4.0.2</version>
10+
<version>4.0.3-SNAPSHOT</version>
1111
<relativePath />
1212
</parent>
1313

0 commit comments

Comments
 (0)