diff --git a/CHANGELOG.md b/CHANGELOG.md index fd84654a..3f557b39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 0.0.19 + +- Add `ClaudeCodeOptions.add_dirs` for `--add-dir` +- Fix ClaudeCodeSDK hanging when MCP servers log to Claude Code stderr + ## 0.0.18 - Add `ClaudeCodeOptions.settings` for `--settings` diff --git a/src/claude_code_sdk/_internal/transport/subprocess_cli.py b/src/claude_code_sdk/_internal/transport/subprocess_cli.py index 1c88debb..68f2e49f 100644 --- a/src/claude_code_sdk/_internal/transport/subprocess_cli.py +++ b/src/claude_code_sdk/_internal/transport/subprocess_cli.py @@ -124,6 +124,11 @@ def _build_command(self) -> list[str]: if self._options.settings: cmd.extend(["--settings", self._options.settings]) + if self._options.add_dirs: + # Convert all paths to strings and add each directory + for directory in self._options.add_dirs: + cmd.extend(["--add-dir", str(directory)]) + if self._options.mcp_servers: cmd.extend( ["--mcp-config", json.dumps({"mcpServers": self._options.mcp_servers})] diff --git a/src/claude_code_sdk/types.py b/src/claude_code_sdk/types.py index 3e14fbf7..81df3cd5 100644 --- a/src/claude_code_sdk/types.py +++ b/src/claude_code_sdk/types.py @@ -128,3 +128,4 @@ class ClaudeCodeOptions: permission_prompt_tool_name: str | None = None cwd: str | Path | None = None settings: str | None = None + add_dirs: list[str | Path] = field(default_factory=list) diff --git a/tests/test_transport.py b/tests/test_transport.py index aa9e4328..5bc5d7aa 100644 --- a/tests/test_transport.py +++ b/tests/test_transport.py @@ -79,6 +79,24 @@ def test_build_command_with_options(self): assert "--max-turns" in cmd assert "5" in cmd + def test_build_command_with_add_dirs(self): + """Test building CLI command with add_dirs option.""" + from pathlib import Path + + transport = SubprocessCLITransport( + prompt="test", + options=ClaudeCodeOptions( + add_dirs=["/path/to/dir1", Path("/path/to/dir2")] + ), + cli_path="/usr/bin/claude", + ) + + cmd = transport._build_command() + cmd_str = " ".join(cmd) + + # Check that the command string contains the expected --add-dir flags + assert "--add-dir /path/to/dir1 --add-dir /path/to/dir2" in cmd_str + def test_session_continuation(self): """Test session continuation options.""" transport = SubprocessCLITransport(