Compare commits
3 commits
03e2915ad6
...
8b409fd7db
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8b409fd7db | ||
|
|
2bc0146189 | ||
|
|
0cc0566462 |
3 changed files with 40 additions and 1 deletions
|
|
@ -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")
|
||||||
|
|
|
||||||
|
|
@ -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 для всех тестов.
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue