mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-05-23 08:25:57 +00:00
fix(harness): wrap all async-only tools for sync clients (#2935)
This commit is contained in:
@@ -95,6 +95,64 @@ def test_config_loaded_async_only_tool_gets_sync_wrapper(mock_bash, mock_cfg):
|
||||
assert async_tool.invoke({"x": 42}) == "result: 42"
|
||||
|
||||
|
||||
@patch("deerflow.tools.tools.get_app_config")
|
||||
@patch("deerflow.tools.tools.is_host_bash_allowed", return_value=True)
|
||||
def test_subagent_async_only_tool_gets_sync_wrapper(mock_bash, mock_cfg):
|
||||
"""Async-only tools added through the subagent path can be invoked by sync clients."""
|
||||
|
||||
async def async_tool_impl(x: int) -> str:
|
||||
return f"subagent: {x}"
|
||||
|
||||
async_tool = StructuredTool(
|
||||
name="async_subagent_tool",
|
||||
description="Async-only subagent test tool.",
|
||||
args_schema=AsyncToolArgs,
|
||||
func=None,
|
||||
coroutine=async_tool_impl,
|
||||
)
|
||||
mock_cfg.return_value = _make_minimal_config([])
|
||||
|
||||
with (
|
||||
patch("deerflow.tools.tools.BUILTIN_TOOLS", []),
|
||||
patch("deerflow.tools.tools.SUBAGENT_TOOLS", [async_tool]),
|
||||
):
|
||||
result = get_available_tools(include_mcp=False, subagent_enabled=True, app_config=mock_cfg.return_value)
|
||||
|
||||
assert async_tool in result
|
||||
assert async_tool.func is not None
|
||||
assert async_tool.invoke({"x": 7}) == "subagent: 7"
|
||||
|
||||
|
||||
@patch("deerflow.tools.tools.get_app_config")
|
||||
@patch("deerflow.tools.tools.is_host_bash_allowed", return_value=True)
|
||||
def test_acp_async_only_tool_gets_sync_wrapper(mock_bash, mock_cfg):
|
||||
"""Async-only ACP tools can be invoked by sync clients."""
|
||||
|
||||
async def async_tool_impl(x: int) -> str:
|
||||
return f"acp: {x}"
|
||||
|
||||
async_tool = StructuredTool(
|
||||
name="invoke_acp_agent",
|
||||
description="Async-only ACP test tool.",
|
||||
args_schema=AsyncToolArgs,
|
||||
func=None,
|
||||
coroutine=async_tool_impl,
|
||||
)
|
||||
config = _make_minimal_config([])
|
||||
config.acp_agents = {"codex": object()}
|
||||
mock_cfg.return_value = config
|
||||
|
||||
with (
|
||||
patch("deerflow.tools.tools.BUILTIN_TOOLS", []),
|
||||
patch("deerflow.tools.builtins.invoke_acp_agent_tool.build_invoke_acp_agent_tool", return_value=async_tool),
|
||||
):
|
||||
result = get_available_tools(include_mcp=False, app_config=config)
|
||||
|
||||
assert async_tool in result
|
||||
assert async_tool.func is not None
|
||||
assert async_tool.invoke({"x": 9}) == "acp: 9"
|
||||
|
||||
|
||||
@patch("deerflow.tools.tools.get_app_config")
|
||||
@patch("deerflow.tools.tools.is_host_bash_allowed", return_value=True)
|
||||
def test_no_duplicates_returned(mock_bash, mock_cfg):
|
||||
|
||||
Reference in New Issue
Block a user