f01c193be4
Every tool schema ships on every API call. The terminal schema was 5,641 chars (~1,410 tokens) and execute_code 2,842 (~710) — the two largest core tools, padded with repeated war stories and triple-stated rules. Schema token audit across 88 tools: ~33k tokens total. This trims prose while preserving every hard rule (each still stated exactly once): - terminal description 2,324 -> 1,233 chars: tool-redirect lines collapsed to one sentence; background/notify guidance deduplicated (was stated in desc + 2 params); PTY/pager rules merged. - background/notify_on_complete/watch_patterns params 692/508/1,114 -> ~330/250/490 chars: kept the mutual-exclusion contracts, the rate-limit consequence, and the bounded-vs-long-lived distinction; dropped narrative repetition. - execute_code description tightened (helper docs inlined to one line each; when-to-use kept). Net: terminal schema 5,641 -> 3,386 chars, execute_code 2,842 -> 2,522 — ~700 tokens saved on EVERY request with the terminal+code toolsets. One test updated (pinned a removed phrase; now pins the rule's new phrasing).
89 lines
3.1 KiB
Python
89 lines
3.1 KiB
Python
"""Regression tests for sudo detection and sudo password handling."""
|
|
|
|
import tools.terminal_tool as terminal_tool
|
|
|
|
|
|
def setup_function():
|
|
terminal_tool._reset_cached_sudo_passwords()
|
|
|
|
|
|
def teardown_function():
|
|
terminal_tool._reset_cached_sudo_passwords()
|
|
|
|
|
|
def test_searching_for_sudo_does_not_trigger_rewrite(monkeypatch):
|
|
monkeypatch.delenv("SUDO_PASSWORD", raising=False)
|
|
monkeypatch.delenv("HERMES_INTERACTIVE", raising=False)
|
|
|
|
command = "rg --line-number --no-heading --with-filename 'sudo' . | head -n 20"
|
|
transformed, sudo_stdin = terminal_tool._transform_sudo_command(command)
|
|
|
|
assert transformed == command
|
|
assert sudo_stdin is None
|
|
|
|
|
|
def test_terminal_schema_advertises_persistent_env_state():
|
|
description = terminal_tool.TERMINAL_TOOL_DESCRIPTION
|
|
|
|
assert "exported environment variables persist between calls" in description
|
|
assert "activate a virtualenv" in description
|
|
assert "once per session" in description
|
|
|
|
|
|
def test_printf_literal_sudo_does_not_trigger_rewrite(monkeypatch):
|
|
monkeypatch.delenv("SUDO_PASSWORD", raising=False)
|
|
monkeypatch.delenv("HERMES_INTERACTIVE", raising=False)
|
|
|
|
command = "printf '%s\\n' sudo"
|
|
transformed, sudo_stdin = terminal_tool._transform_sudo_command(command)
|
|
|
|
assert transformed == command
|
|
assert sudo_stdin is None
|
|
|
|
|
|
def test_non_command_argument_named_sudo_does_not_trigger_rewrite(monkeypatch):
|
|
monkeypatch.delenv("SUDO_PASSWORD", raising=False)
|
|
monkeypatch.delenv("HERMES_INTERACTIVE", raising=False)
|
|
|
|
command = "grep -n sudo README.md"
|
|
transformed, sudo_stdin = terminal_tool._transform_sudo_command(command)
|
|
|
|
assert transformed == command
|
|
assert sudo_stdin is None
|
|
|
|
|
|
def test_actual_sudo_command_uses_configured_password(monkeypatch):
|
|
monkeypatch.setenv("SUDO_PASSWORD", "testpass")
|
|
monkeypatch.delenv("HERMES_INTERACTIVE", raising=False)
|
|
|
|
transformed, sudo_stdin = terminal_tool._transform_sudo_command("sudo apt install -y ripgrep")
|
|
|
|
assert transformed == "sudo -S -p '' apt install -y ripgrep"
|
|
assert sudo_stdin == "testpass\n"
|
|
|
|
|
|
def test_explicit_empty_sudo_password_tries_empty_without_prompt(monkeypatch):
|
|
monkeypatch.setenv("SUDO_PASSWORD", "")
|
|
monkeypatch.setenv("HERMES_INTERACTIVE", "1")
|
|
|
|
def _fail_prompt(*_args, **_kwargs):
|
|
raise AssertionError("interactive sudo prompt should not run for explicit empty password")
|
|
|
|
monkeypatch.setattr(terminal_tool, "_prompt_for_sudo_password", _fail_prompt)
|
|
|
|
transformed, sudo_stdin = terminal_tool._transform_sudo_command("sudo true")
|
|
|
|
assert transformed == "sudo -S -p '' true"
|
|
assert sudo_stdin == "\n"
|
|
|
|
|
|
def test_validate_workdir_blocks_shell_metacharacters_in_windows_paths():
|
|
assert terminal_tool._validate_workdir(r"C:\Users\Alice\project; rm -rf /")
|
|
assert terminal_tool._validate_workdir(r"C:\Users\Alice\project$(whoami)")
|
|
assert terminal_tool._validate_workdir("C:\\Users\\Alice\\project\nwhoami")
|
|
|
|
|
|
def test_count_real_sudo_invocations_ignores_mentions(monkeypatch):
|
|
assert terminal_tool._count_real_sudo_invocations("grep sudo README.md") == 0
|
|
assert terminal_tool._count_real_sudo_invocations("sudo a; sudo b") == 2
|