kin: auto-commit after pipeline
This commit is contained in:
parent
4f1dfbf10f
commit
c54849cf20
3 changed files with 170 additions and 25 deletions
|
|
@ -10,7 +10,7 @@ from agents.runner import (
|
|||
run_agent, run_pipeline, run_audit, _try_parse_json, _run_learning_extraction,
|
||||
_build_claude_env, _resolve_claude_cmd, _EXTRA_PATH_DIRS, _run_autocommit,
|
||||
_parse_agent_blocked, _get_changed_files, _save_sysadmin_output,
|
||||
check_claude_auth, ClaudeAuthError,
|
||||
check_claude_auth, ClaudeAuthError, _MODEL_TIMEOUTS,
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -603,7 +603,7 @@ class TestNonInteractive:
|
|||
mock_run.return_value = _mock_claude_success({"result": "ok"})
|
||||
run_agent(conn, "debugger", "VDOL-001", "vdol", noninteractive=True)
|
||||
call_kwargs = mock_run.call_args[1]
|
||||
assert call_kwargs.get("timeout") == 1200 # sonnet default
|
||||
assert call_kwargs.get("timeout") == 2400 # sonnet default
|
||||
|
||||
@patch.dict("os.environ", {"KIN_NONINTERACTIVE": ""})
|
||||
@patch("agents.runner.subprocess.run")
|
||||
|
|
@ -611,7 +611,7 @@ class TestNonInteractive:
|
|||
mock_run.return_value = _mock_claude_success({"result": "ok"})
|
||||
run_agent(conn, "debugger", "VDOL-001", "vdol", noninteractive=False)
|
||||
call_kwargs = mock_run.call_args[1]
|
||||
assert call_kwargs.get("timeout") == 1200 # sonnet default
|
||||
assert call_kwargs.get("timeout") == 2400 # sonnet default
|
||||
|
||||
@patch.dict("os.environ", {"KIN_NONINTERACTIVE": ""})
|
||||
@patch("agents.runner.subprocess.run")
|
||||
|
|
@ -630,7 +630,7 @@ class TestNonInteractive:
|
|||
run_agent(conn, "debugger", "VDOL-001", "vdol", noninteractive=False)
|
||||
call_kwargs = mock_run.call_args[1]
|
||||
assert call_kwargs.get("stdin") == subprocess.DEVNULL
|
||||
assert call_kwargs.get("timeout") == 1200 # sonnet default
|
||||
assert call_kwargs.get("timeout") == 2400 # sonnet default
|
||||
|
||||
@patch.dict("os.environ", {"KIN_AGENT_TIMEOUT": "900"})
|
||||
@patch("agents.runner.subprocess.run")
|
||||
|
|
@ -643,21 +643,21 @@ class TestNonInteractive:
|
|||
|
||||
@patch.dict("os.environ", {"KIN_AGENT_TIMEOUT": ""})
|
||||
@patch("agents.runner.subprocess.run")
|
||||
def test_opus_timeout_1800(self, mock_run, conn):
|
||||
"""Opus model gets 1800s (30 min) timeout."""
|
||||
def test_opus_timeout_2400(self, mock_run, conn):
|
||||
"""Opus model gets 2400s (40 min) timeout."""
|
||||
mock_run.return_value = _mock_claude_success({"result": "ok"})
|
||||
run_agent(conn, "debugger", "VDOL-001", "vdol", model="opus")
|
||||
call_kwargs = mock_run.call_args[1]
|
||||
assert call_kwargs.get("timeout") == 1800
|
||||
assert call_kwargs.get("timeout") == 2400
|
||||
|
||||
@patch.dict("os.environ", {"KIN_AGENT_TIMEOUT": ""})
|
||||
@patch("agents.runner.subprocess.run")
|
||||
def test_haiku_timeout_600(self, mock_run, conn):
|
||||
"""Haiku model gets 600s (10 min) timeout."""
|
||||
def test_haiku_timeout_1200(self, mock_run, conn):
|
||||
"""Haiku model gets 1200s (20 min) timeout."""
|
||||
mock_run.return_value = _mock_claude_success({"result": "ok"})
|
||||
run_agent(conn, "debugger", "VDOL-001", "vdol", model="haiku")
|
||||
call_kwargs = mock_run.call_args[1]
|
||||
assert call_kwargs.get("timeout") == 600
|
||||
assert call_kwargs.get("timeout") == 1200
|
||||
|
||||
@patch.dict("os.environ", {"KIN_AGENT_TIMEOUT": "999"})
|
||||
@patch("agents.runner.subprocess.run")
|
||||
|
|
@ -1264,11 +1264,11 @@ class TestRegressionKIN056:
|
|||
@patch.dict("os.environ", {"KIN_NONINTERACTIVE": "1", "KIN_AGENT_TIMEOUT": ""})
|
||||
@patch("agents.runner.subprocess.run")
|
||||
def test_web_noninteractive_timeout_uses_model_default(self, mock_run, conn):
|
||||
"""Web путь: KIN_NONINTERACTIVE=1 → timeout = model default (sonnet=1200s)."""
|
||||
"""Web путь: KIN_NONINTERACTIVE=1 → timeout = model default (sonnet=2400s)."""
|
||||
mock_run.return_value = _mock_claude_success({"result": "ok"})
|
||||
run_agent(conn, "debugger", "VDOL-001", "vdol")
|
||||
call_kwargs = mock_run.call_args[1]
|
||||
assert call_kwargs.get("timeout") == 1200
|
||||
assert call_kwargs.get("timeout") == 2400
|
||||
|
||||
@patch("agents.runner.subprocess.run")
|
||||
def test_web_and_cli_paths_use_same_timeout(self, mock_run, conn):
|
||||
|
|
@ -1301,6 +1301,45 @@ class TestRegressionKIN056:
|
|||
assert call_kwargs.get("timeout") == 900
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# KIN-TIMEOUT: Регрессия — таймауты были слишком короткими (opus 1800s, sonnet 1200s, haiku 600s)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
class TestRegressionModelTimeouts:
|
||||
"""Регрессионные тесты: увеличенные таймауты для opus/sonnet/haiku.
|
||||
|
||||
Старые значения: opus=1800s, sonnet=1200s, haiku=600s.
|
||||
Новые значения: opus=2400s, sonnet=2400s, haiku=1200s.
|
||||
|
||||
Каждый тест ПАДАЛ бы со старыми значениями и ПРОХОДИТ после фикса.
|
||||
"""
|
||||
|
||||
def test_opus_model_timeout_is_2400(self):
|
||||
"""Opus: таймаут должен быть 2400s (40 мин), а не старый 1800s."""
|
||||
assert _MODEL_TIMEOUTS["opus"] == 2400, (
|
||||
f"Регрессия: ожидалось 2400s для opus, получено {_MODEL_TIMEOUTS['opus']}s"
|
||||
)
|
||||
|
||||
def test_sonnet_model_timeout_is_2400(self):
|
||||
"""Sonnet: таймаут должен быть 2400s (40 мин), а не старый 1200s."""
|
||||
assert _MODEL_TIMEOUTS["sonnet"] == 2400, (
|
||||
f"Регрессия: ожидалось 2400s для sonnet, получено {_MODEL_TIMEOUTS['sonnet']}s"
|
||||
)
|
||||
|
||||
def test_haiku_model_timeout_is_1200(self):
|
||||
"""Haiku: таймаут должен быть 1200s (20 мин), а не старый 600s."""
|
||||
assert _MODEL_TIMEOUTS["haiku"] == 1200, (
|
||||
f"Регрессия: ожидалось 1200s для haiku, получено {_MODEL_TIMEOUTS['haiku']}s"
|
||||
)
|
||||
|
||||
def test_all_models_have_minimum_timeout_20min(self):
|
||||
"""Все модели должны иметь таймаут не менее 1200s (20 мин)."""
|
||||
for model, timeout in _MODEL_TIMEOUTS.items():
|
||||
assert timeout >= 1200, (
|
||||
f"Регрессия: модель '{model}' имеет таймаут {timeout}s < 1200s"
|
||||
)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# KIN-057: claude CLI в PATH при запуске через launchctl
|
||||
# ---------------------------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue