diff --git a/src/claude_agent_sdk/_internal/transport/subprocess_cli.py b/src/claude_agent_sdk/_internal/transport/subprocess_cli.py index a8bf65de..4b47f115 100644 --- a/src/claude_agent_sdk/_internal/transport/subprocess_cli.py +++ b/src/claude_agent_sdk/_internal/transport/subprocess_cli.py @@ -300,20 +300,20 @@ def _build_command(self) -> list[str]: # Flag with value cmd.extend([f"--{flag}", str(value)]) - # Resolve thinking config → --max-thinking-tokens + # Resolve thinking config -> --thinking / --max-thinking-tokens # `thinking` takes precedence over the deprecated `max_thinking_tokens` - resolved_max_thinking_tokens = self._options.max_thinking_tokens if self._options.thinking is not None: t = self._options.thinking if t["type"] == "adaptive": - if resolved_max_thinking_tokens is None: - resolved_max_thinking_tokens = 32_000 + cmd.extend(["--thinking", "adaptive"]) elif t["type"] == "enabled": - resolved_max_thinking_tokens = t["budget_tokens"] + cmd.extend(["--max-thinking-tokens", str(t["budget_tokens"])]) elif t["type"] == "disabled": - resolved_max_thinking_tokens = 0 - if resolved_max_thinking_tokens is not None: - cmd.extend(["--max-thinking-tokens", str(resolved_max_thinking_tokens)]) + cmd.extend(["--thinking", "disabled"]) + elif self._options.max_thinking_tokens is not None: + cmd.extend( + ["--max-thinking-tokens", str(self._options.max_thinking_tokens)] + ) if self._options.effort is not None: cmd.extend(["--effort", self._options.effort]) diff --git a/tests/test_transport.py b/tests/test_transport.py index 13657e0e..b2c40923 100644 --- a/tests/test_transport.py +++ b/tests/test_transport.py @@ -233,6 +233,44 @@ def test_build_command_with_max_thinking_tokens(self): assert "--max-thinking-tokens" in cmd assert "5000" in cmd + @pytest.mark.parametrize( + ("thinking", "expected", "absent"), + [ + ({"type": "adaptive"}, ["--thinking", "adaptive"], "--max-thinking-tokens"), + ( + {"type": "enabled", "budget_tokens": 5000}, + ["--max-thinking-tokens", "5000"], + "--thinking", + ), + ({"type": "disabled"}, ["--thinking", "disabled"], "--max-thinking-tokens"), + ], + ) + def test_build_command_with_thinking(self, thinking, expected, absent): + """Test building CLI command with thinking option.""" + transport = SubprocessCLITransport( + prompt="test", + options=make_options(thinking=thinking), + ) + + cmd = transport._build_command() + idx = cmd.index(expected[0]) + assert cmd[idx : idx + 2] == expected + assert absent not in cmd + + def test_build_command_thinking_precedence_over_max_thinking_tokens(self): + """thinking takes precedence over deprecated max_thinking_tokens.""" + transport = SubprocessCLITransport( + prompt="test", + options=make_options( + thinking={"type": "adaptive"}, max_thinking_tokens=9999 + ), + ) + + cmd = transport._build_command() + idx = cmd.index("--thinking") + assert cmd[idx : idx + 2] == ["--thinking", "adaptive"] + assert "--max-thinking-tokens" not in cmd + def test_build_command_with_add_dirs(self): """Test building CLI command with add_dirs option.""" from pathlib import Path