"""Tests for teammate spawn helper behavior.""" from __future__ import annotations import sys from openharness.swarm.spawn_utils import ( TEAMMATE_COMMAND_ENV_VAR, build_inherited_cli_flags, build_inherited_env_vars, get_teammate_command, ) def test_get_teammate_command_prefers_current_interpreter(monkeypatch): monkeypatch.delenv(TEAMMATE_COMMAND_ENV_VAR, raising=False) monkeypatch.setattr(sys, "executable", "/tmp/current-python") command = get_teammate_command() assert command == "/tmp/current-python" def test_build_inherited_env_vars_disables_coordinator_mode(monkeypatch): monkeypatch.setenv("CLAUDE_CODE_COORDINATOR_MODE", "1") env = build_inherited_env_vars() assert env["CLAUDE_CODE_COORDINATOR_MODE"] == "0" def test_build_inherited_env_vars_forwards_openharness_config_dir(monkeypatch): monkeypatch.setenv("OPENHARNESS_CONFIG_DIR", "/opt/data/.openharness") env = build_inherited_env_vars() assert env["OPENHARNESS_CONFIG_DIR"] == "/opt/data/.openharness" def test_build_inherited_env_vars_includes_openharness_auth_vars(monkeypatch): monkeypatch.setenv("OPENHARNESS_PROVIDER", "openai") monkeypatch.setenv("OPENHARNESS_BASE_URL", "https://relay.example.com/v1") monkeypatch.setenv("OPENHARNESS_OPENAI_API_KEY", "sk-oh-openai") monkeypatch.setenv("OPENHARNESS_ANTHROPIC_API_KEY", "sk-oh-anthropic") env = build_inherited_env_vars() assert env["OPENHARNESS_AGENT_TEAMS"] == "1" assert env["OPENHARNESS_PROVIDER"] == "openai" assert env["OPENHARNESS_BASE_URL"] == "https://relay.example.com/v1" assert env["OPENHARNESS_OPENAI_API_KEY"] == "sk-oh-openai" assert env["OPENHARNESS_ANTHROPIC_API_KEY"] == "sk-oh-anthropic" # --------------------------------------------------------------------------- # build_inherited_cli_flags – model handling # --------------------------------------------------------------------------- def test_build_inherited_cli_flags_explicit_model_included(): flags = build_inherited_cli_flags(model="claude-opus-4-5") assert "--model" in flags idx = flags.index("--model") assert "claude-opus-4-5" in flags[idx + 1] def test_build_inherited_cli_flags_inherit_model_excluded(): """model='inherit' must NOT produce a --model flag so the subprocess picks up the parent's model from the OPENHARNESS_MODEL env var.""" flags = build_inherited_cli_flags(model="inherit") assert "--model" not in flags def test_build_inherited_cli_flags_none_model_excluded(): flags = build_inherited_cli_flags(model=None) assert "--model" not in flags def test_build_inherited_cli_flags_empty_string_model_excluded(): flags = build_inherited_cli_flags(model="") assert "--model" not in flags def test_build_inherited_cli_flags_forwards_system_prompt_as_replace(): flags = build_inherited_cli_flags(system_prompt="You are a specialized worker.") assert "--system-prompt" in flags idx = flags.index("--system-prompt") assert "specialized worker" in flags[idx + 1] assert "--append-system-prompt" not in flags def test_build_inherited_cli_flags_forwards_system_prompt_as_append(): flags = build_inherited_cli_flags( system_prompt="Extra worker instructions.", system_prompt_mode="append", ) assert "--append-system-prompt" in flags idx = flags.index("--append-system-prompt") assert "Extra worker instructions." in flags[idx + 1] assert "--system-prompt" not in flags