fix(exec): uncap config exec timeout; 0 means no limit (#3595)

This commit is contained in:
04cb
2026-05-23 17:32:59 +08:00
committed by Xubin Ren
parent 5937236f9d
commit 5b71f61f55
3 changed files with 43 additions and 7 deletions
+22 -1
View File
@@ -4,6 +4,7 @@ import sys
from typing import Any
import pytest
from pydantic import ValidationError
from nanobot.agent.tools import (
ArraySchema,
@@ -16,7 +17,7 @@ from nanobot.agent.tools import (
)
from nanobot.agent.tools.base import Tool
from nanobot.agent.tools.registry import ToolRegistry
from nanobot.agent.tools.shell import ExecTool
from nanobot.agent.tools.shell import ExecTool, ExecToolConfig
from nanobot.security.network import configure_ssrf_whitelist
@@ -663,6 +664,26 @@ async def test_exec_timeout_capped_at_max() -> None:
assert "Exit code: 0" in result
def test_exec_config_timeout_uncapped_and_zero() -> None:
"""Config timeout is no longer capped at 600 and accepts 0 = no limit (#3595)."""
assert ExecToolConfig(timeout=0).timeout == 0
assert ExecToolConfig(timeout=3600).timeout == 3600
with pytest.raises(ValidationError):
ExecToolConfig(timeout=-1)
def test_resolve_timeout_config_uncapped_and_unlimited() -> None:
"""Config timeout drives the hard timeout uncapped; 0 means no limit (#3595)."""
assert ExecTool(timeout=3600)._resolve_timeout(None) == 3600
assert ExecTool(timeout=0)._resolve_timeout(None) is None
def test_resolve_timeout_per_call_still_capped() -> None:
"""Per-call (LLM) timeout stays capped at _MAX_TIMEOUT even with unlimited config."""
assert ExecTool(timeout=0)._resolve_timeout(9999) == ExecTool._MAX_TIMEOUT
assert ExecTool(timeout=60)._resolve_timeout(120) == 120
# --- _resolve_type and nullable param tests ---