From cef913a2e1646513b89d77cabe6808d37c37a748 Mon Sep 17 00:00:00 2001 From: cfdaily Date: Tue, 19 May 2026 13:26:18 +0800 Subject: [PATCH] auto-sync: 2026-05-19 13:26:18 --- src/daemon/spawner.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/daemon/spawner.py b/src/daemon/spawner.py index 89f9d3d..824b75c 100644 --- a/src/daemon/spawner.py +++ b/src/daemon/spawner.py @@ -188,9 +188,13 @@ class AgentSpawner: message: str, new_session: bool = False, task_id: Optional[str] = None, + on_complete: Optional[Any] = None, ) -> str: """Spawn Full Agent(异步非阻塞) + Args: + on_complete: async callback(agent_id, outcome) — Agent 完成后调用 + Returns: session_id """ @@ -221,7 +225,8 @@ class AgentSpawner: # Schedule timeout + cleanup asyncio.create_task( - self._monitor_process(session_id, proc, agent_id, task_id) + self._monitor_process(session_id, proc, agent_id, task_id, + on_complete=on_complete) ) return session_id @@ -259,6 +264,7 @@ class AgentSpawner: proc: asyncio.subprocess.Process, agent_id: str, task_id: Optional[str], + on_complete: Optional[Any] = None, ) -> None: """监控子进程,超时 kill,完成后记录""" try: @@ -283,6 +289,14 @@ class AgentSpawner: logger.info("Agent %s finished (session=%s, outcome=%s, exit=%d)", agent_id, session_id, outcome, exit_code) + # 完成回调(释放 counter 等) + if on_complete: + try: + await on_complete(agent_id, outcome) + except Exception: + logger.warning("on_complete callback failed for %s", + agent_id, exc_info=True) + def _register_session( self, session_id: str,