fix(runtime): 收敛跨线程任务提交终态 (#6446)

This commit is contained in:
InfinityPacer
2026-08-25 06:43:37 +08:00
committed by GitHub
parent b277770080
commit 6c334f7b9b
8 changed files with 609 additions and 65 deletions
+20 -2
View File
@@ -3,7 +3,7 @@ from concurrent.futures import Future
from dataclasses import replace
from unittest.mock import AsyncMock, Mock, patch
from app.agent import MoviePilotAgent
from app.agent.orchestrator import MoviePilotAgent
from app.agent.orchestrator import AgentManagerQueueFullError
from app.agent.tools.impl.ask_user_choice import (
AskUserChoiceTool,
@@ -12,13 +12,14 @@ from app.agent.tools.impl.ask_user_choice import (
from app.agent.tools.impl.send_message import SendMessageTool
from app.chain.message import MessageChain
from app.runtime.config import global_vars, settings
from app.db import SessionFactory
from app.db.session import SessionFactory
from app.db.oper.message import MessageOper
from app.db.models.message import Message
from app.application.messaging.agent import AgentInteractionOption, agent_interaction_manager
from app.application.messaging.interaction import InteractionContext
from app.application.messaging.media import media_interaction_manager
from app.schemas.types import NotificationChannel, MessageType
from app.runtime.tasks import TaskRegistry
def _clear_messages() -> None:
@@ -61,6 +62,23 @@ def test_agent_session_clear_uses_owned_threadsafe_submission():
}
def test_agent_session_clear_handles_closed_task_registry():
"""宿主已停止接收任务时,同步消息清理链应记录拒绝而不是泄漏协程。"""
registry = TaskRegistry()
asyncio.run(registry.shutdown(timeout_seconds=0.01))
manager = Mock(clear_session=AsyncMock())
with patch.object(global_vars, "CURRENT_EVENT_LOOP", _running_loop_stub()), patch(
"app.chain.message.get_running_agent_manager", return_value=manager
), patch("app.chain.message.get_task_registry", return_value=registry), patch(
"app.chain.message.logger"
) as logger:
MessageChain._schedule_agent_session_clear("session-1", "10001")
logger.warning.assert_called_once()
assert "正在关闭" in logger.warning.call_args.args[0]
def test_remote_session_clear_reuses_owned_clear_scheduler():
"""远程清理命令应复用唯一 Agent 会话清理入口。"""
chain = MessageChain()