执行人:Atlas🐻 | 完成时间:2026-03-07 | 状态:后端已完成,等待Pixel前端
新增函数:emit_exec_log(agent, message, level, task_id, tokens)
- 位置:文件顶部(logger初始化之后,路径配置之前)
- 推送事件:agent_exec_log
- 错误保护:try-except,失败只记录warning,不影响主流程
插入推送调用(_dispatch_task_inner()):
1. 任务派发开始时 → emit_exec_log(assignee, "接收任务 #id title[:40]")
2. 模型路由推荐时 → emit_exec_log(assignee, "路由推荐模型: {recommended}")(已有router时才触发)
3. 任务文件写入收件箱时 → emit_exec_log(assignee, "任务文件已写入收件箱")
4. 专用事件 → socketio.emit("agent_task_start", {...})
插入推送调用(scan_completions()):
1. 检测到任务完成 → emit_exec_log(assignee, "任务 #task_id 已完成")
2. 专用事件 → socketio.emit("agent_task_complete", {...})
新增方法:_on_task_update(self, agent_name, task_id, message, tokens=0)
- 位置:_emit()方法之后(WebSocket推送区域)
- 推送事件:agent_exec_log
- 错误保护:try-except,pass静默失败
插入推送调用(execute_task()):
- task_started事件之后追加:_on_task_update() + agent_task_start专用事件
插入推送调用(_run_claude()):
- task_completed事件之后追加:_on_task_update() + agent_task_complete专用事件
agent_exec_log{
"timestamp": "HH:MM:SS",
"agent": "Agent名称",
"level": "info | warning | error",
"message": "日志消息",
"task_id": "任务ID或null",
"tokens": "Token数或null"
}
触发场景:dispatch收件箱写入、模型路由推荐、scan任务完成、execute_task启动、_run_claude完成
agent_task_start{
"agent": "Agent名称",
"task_id": "任务ID",
"task_title": "任务标题",
"timestamp": "HH:MM:SS"
}
触发场景:m31_dispatcher收件箱写入完成 / agent_executor任务提交
agent_task_complete{
"agent": "Agent名称",
"task_id": "任务ID",
"tokens": null,
"timestamp": "HH:MM:SS"
}
触发场景:scan_completions检测到output文件 / _run_claude subprocess正常退出
emit_exec_log()函数存在,可在m31_dispatcher中调用agent_exec_log WebSocket事件已在dispatch和scan_completions节点发出agent_task_start / agent_task_complete 专用事件已实现agent_task_start事件,前端需做去重处理(以task_id为key)Atlas🐻 完成 | 2026-03-07