mirror of
https://gitee.com/wanwujie/deer-flow
synced 2026-04-20 04:44:46 +08:00
feat(subagents): make subagent timeout configurable via config.yaml (#897)
* feat(subagents): make subagent timeout configurable via config.yaml - Add SubagentsAppConfig supporting global and per-agent timeout_seconds - Load subagents config section in AppConfig.from_file() - Registry now applies config.yaml overrides without mutating builtin defaults - Polling safety-net in task_tool is now dynamic (execution timeout + 60s buffer) - Document subagents section in config.example.yaml - Add make test command and enforce TDD policy in CLAUDE.md - Add 38 unit tests covering config validation, timeout resolution, registry override behavior, and polling timeout formula Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(subagents): add logging for subagent timeout config and execution - Log loaded timeout config (global default + per-agent overrides) on startup - Log debug message in registry when config.yaml overrides a builtin timeout - Include timeout in executor's async execution start log - Log effective timeout and polling limit when a task is dispatched - Fix UnboundLocalError: move max_poll_count assignment before logger.info Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * ci(backend): add lint step and run all unit tests via Makefile Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix lint --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
33
backend/tests/conftest.py
Normal file
33
backend/tests/conftest.py
Normal file
@@ -0,0 +1,33 @@
|
||||
"""Test configuration for the backend test suite.
|
||||
|
||||
Sets up sys.path and pre-mocks modules that would cause circular import
|
||||
issues when unit-testing lightweight config/registry code in isolation.
|
||||
"""
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
# Make 'src' importable from any working directory
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||||
|
||||
# Break the circular import chain that exists in production code:
|
||||
# src.subagents.__init__
|
||||
# -> .executor (SubagentExecutor, SubagentResult)
|
||||
# -> src.agents.thread_state
|
||||
# -> src.agents.__init__
|
||||
# -> lead_agent.agent
|
||||
# -> subagent_limit_middleware
|
||||
# -> src.subagents.executor <-- circular!
|
||||
#
|
||||
# By injecting a mock for src.subagents.executor *before* any test module
|
||||
# triggers the import, __init__.py's "from .executor import ..." succeeds
|
||||
# immediately without running the real executor module.
|
||||
_executor_mock = MagicMock()
|
||||
_executor_mock.SubagentExecutor = MagicMock
|
||||
_executor_mock.SubagentResult = MagicMock
|
||||
_executor_mock.SubagentStatus = MagicMock
|
||||
_executor_mock.MAX_CONCURRENT_SUBAGENTS = 3
|
||||
_executor_mock.get_background_task_result = MagicMock()
|
||||
|
||||
sys.modules["src.subagents.executor"] = _executor_mock
|
||||
Reference in New Issue
Block a user