Compare commits

..

3 commits

Author SHA1 Message Date
Gros Frumos
8b409fd7db kin: auto-commit after pipeline 2026-03-18 01:00:15 +02:00
Gros Frumos
2bc0146189 Merge branch 'KIN-FIX-023-backend_dev' 2026-03-18 00:52:44 +02:00
Gros Frumos
0cc0566462 kin: KIN-FIX-023-backend_dev 2026-03-18 00:52:44 +02:00
3 changed files with 40 additions and 1 deletions

View file

@ -260,7 +260,7 @@ def _run_claude(
"--model", model, "--model", model,
] ]
is_noninteractive = noninteractive or os.environ.get("KIN_NONINTERACTIVE") == "1" is_noninteractive = noninteractive or os.environ.get("KIN_NONINTERACTIVE") == "1"
if allow_write or noninteractive: if allow_write or is_noninteractive:
cmd.append("--dangerously-skip-permissions") cmd.append("--dangerously-skip-permissions")
if timeout is None: if timeout is None:
env_timeout = os.environ.get("KIN_AGENT_TIMEOUT") env_timeout = os.environ.get("KIN_AGENT_TIMEOUT")

View file

@ -11,6 +11,18 @@ def _set_kin_secret_key(monkeypatch):
monkeypatch.setenv("KIN_SECRET_KEY", Fernet.generate_key().decode()) monkeypatch.setenv("KIN_SECRET_KEY", Fernet.generate_key().decode())
@pytest.fixture(autouse=True)
def _clear_kin_noninteractive(monkeypatch):
"""Ensure KIN_NONINTERACTIVE is not inherited from parent process.
Tests that need it explicitly set it via @patch.dict("os.environ", {"KIN_NONINTERACTIVE": "1"}).
Without this fixture, KIN_NONINTERACTIVE=1 (set by web API when launching agent subprocesses)
leaks into the test environment and causes _run_claude to add --dangerously-skip-permissions
even when noninteractive=False.
"""
monkeypatch.delenv("KIN_NONINTERACTIVE", raising=False)
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
def _mock_check_claude_auth(): def _mock_check_claude_auth():
"""Авто-мок agents.runner.check_claude_auth для всех тестов. """Авто-мок agents.runner.check_claude_auth для всех тестов.

View file

@ -839,6 +839,33 @@ class TestNonInteractive:
cmd = mock_run.call_args[0][0] cmd = mock_run.call_args[0][0]
assert "--dangerously-skip-permissions" not in cmd assert "--dangerously-skip-permissions" not in cmd
# --- KIN-FIX-023: guard использует is_noninteractive, а не raw noninteractive ---
@patch("agents.runner.subprocess.run")
def test_noninteractive_param_adds_dangerously_skip_permissions(self, mock_run, conn):
"""noninteractive=True → --dangerously-skip-permissions добавляется в команду."""
mock_run.return_value = _mock_claude_success({"result": "ok"})
run_agent(conn, "debugger", "VDOL-001", "vdol", noninteractive=True)
cmd = mock_run.call_args[0][0]
assert "--dangerously-skip-permissions" in cmd
@patch.dict("os.environ", {"KIN_NONINTERACTIVE": "1"})
@patch("agents.runner.subprocess.run")
def test_kin_noninteractive_env_adds_dangerously_skip_permissions(self, mock_run, conn):
"""KIN_NONINTERACTIVE=1 → --dangerously-skip-permissions добавляется в команду."""
mock_run.return_value = _mock_claude_success({"result": "ok"})
run_agent(conn, "debugger", "VDOL-001", "vdol", noninteractive=False)
cmd = mock_run.call_args[0][0]
assert "--dangerously-skip-permissions" in cmd
@patch("agents.runner.subprocess.run")
def test_noninteractive_false_no_env_no_skip_permissions(self, mock_run, conn):
"""noninteractive=False и нет KIN_NONINTERACTIVE → без --dangerously-skip-permissions."""
mock_run.return_value = _mock_claude_success({"result": "ok"})
run_agent(conn, "debugger", "VDOL-001", "vdol", noninteractive=False, allow_write=False)
cmd = mock_run.call_args[0][0]
assert "--dangerously-skip-permissions" not in cmd
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# run_audit # run_audit