feat: 任务列表显示 turn_id 与 root_turn_id

host.py dispatch 打印补 turn_id/root_turn_id;执行器解析(local/Docker)透传;worker 写回 tasks 新列(新值非空才覆盖);server 迁移与接口字段;控制台任务列表新增 turn/root turn 两列(短显+悬停全文);新单测 9 个。
This commit is contained in:
host committed 2026-10-27 14:52:00 +08:00
1 parent 559a7dcb9f
commit dbcc8e641a
7 files changed
+252 -11

No files matched your search

+19
View File
@@ -227,6 +227,8 @@ class LocalExecutor(Executor):
status = "failed"
usage = None
task_messages = []
turn_id = None
root_turn_id = None
if returncode == 0:
status = "completed"
# JSON 解析必须用完整 stdout:截头后的前 2000 字在
@@ -245,6 +247,13 @@ class LocalExecutor(Executor):
# 原样透传给 worker 记 actual;脏数据由
# _clean_usage 挡掉,不进 actual。
usage = _clean_usage(parsed.get("usage"))
# 任务列表显示 turn 用:本轮回合的 turn_id 与
# root_turn_id(dispatch 打印里带,run 打印整
# 个 result 所以也有);取不到时保持 None,
# worker 写回时不覆盖旧值(见 worker 的
# _write_execution_result)。
turn_id = parsed.get("turn_id")
root_turn_id = parsed.get("root_turn_id")
# 互发消息标记块:从完整解析出的 text 里提取(截头
# 版 text 尾部的块会丢),worker 在 completed 轮次
# 后投递;goal 路径不走这里,goal 任务只收不发。
@@ -266,6 +275,8 @@ class LocalExecutor(Executor):
"stderr": _truncate_stdout(getattr(result, "stderr", "")),
"usage": usage,
"task_messages": task_messages,
"turn_id": turn_id,
"root_turn_id": root_turn_id,
}
def _host_name(self, task):
@@ -1240,6 +1251,8 @@ def _parse_host_result(task_id, fake):
host_status = None
usage = None
task_messages = []
turn_id = None
root_turn_id = None
if returncode == 0:
status = "completed"
# 与 _result_from_runner 同理:JSON 解析用完整 stdout,
@@ -1256,6 +1269,10 @@ def _parse_host_result(task_id, fake):
else "failed")
usage = _clean_usage(parsed.get("usage"))
task_messages = _extract_peer_messages(parsed.get("text"))
# 任务列表显示 turn 用:与 Local 版同款语义,取不到
# 时保持 None,worker 写回时不覆盖旧值。
turn_id = parsed.get("turn_id")
root_turn_id = parsed.get("root_turn_id")
return {
"executor": "docker",
"task_id": task_id,
@@ -1266,6 +1283,8 @@ def _parse_host_result(task_id, fake):
"stderr": _truncate_stdout(getattr(fake, "stderr", "")),
"usage": usage,
"task_messages": task_messages,
"turn_id": turn_id,
"root_turn_id": root_turn_id,
}