diff --git a/nanobot/agent/loop.py b/nanobot/agent/loop.py index 7c4c7b205..61de18fb2 100644 --- a/nanobot/agent/loop.py +++ b/nanobot/agent/loop.py @@ -760,7 +760,7 @@ class AgentLoop: Returns the total number of cancelled tasks + subagents. """ - tasks = self._active_tasks.pop(key, set()) + tasks = tuple(self._active_tasks.pop(key, set())) cancelled = sum(1 for t in tasks if not t.done() and t.cancel()) for t in tasks: with suppress(asyncio.CancelledError, Exception): diff --git a/tests/agent/test_task_cancel.py b/tests/agent/test_task_cancel.py index 8e51091b7..6acb41ff7 100644 --- a/tests/agent/test_task_cancel.py +++ b/tests/agent/test_task_cancel.py @@ -73,7 +73,9 @@ class TestHandleStop: task = asyncio.create_task(slow_task()) await asyncio.sleep(0) - loop._active_tasks["test:c1"] = {task} + active_tasks = {task} + loop._active_tasks["test:c1"] = active_tasks + task.add_done_callback(active_tasks.discard) msg = InboundMessage(channel="test", sender_id="u1", chat_id="c1", content="/stop") ctx = CommandContext(msg=msg, session=None, key=msg.session_key, raw="/stop", loop=loop)