From 71e5c27416855f0e0c5de3db3d3d98a850dd794c Mon Sep 17 00:00:00 2001 From: Dickson Tsai Date: Sun, 28 Sep 2025 14:18:34 -0700 Subject: [PATCH 1/3] Rename claude_code to claude_agent --- .github/workflows/create-release-tag.yml | 4 +-- .github/workflows/publish.yml | 14 ++++---- .github/workflows/test.yml | 2 +- CLAUDE.md | 2 +- README.md | 24 +++++++------- e2e-tests/test_agents_and_settings.py | 2 +- e2e-tests/test_dynamic_control.py | 2 +- e2e-tests/test_include_partial_messages.py | 4 +-- e2e-tests/test_sdk_mcp_tools.py | 2 +- e2e-tests/test_stderr_callback.py | 2 +- e2e-tests/test_tool_permissions.py | 2 +- examples/agents.py | 4 +-- examples/hooks.py | 4 +-- examples/include_partial_messages.py | 4 +-- examples/mcp_calculator.py | 6 ++-- examples/quick_start.py | 2 +- examples/setting_sources.py | 2 +- examples/stderr_callback_example.py | 2 +- examples/streaming_mode.py | 3 +- examples/streaming_mode_ipython.py | 14 ++++---- examples/streaming_mode_trio.py | 2 +- examples/system_prompt.py | 2 +- examples/tool_permission_callback.py | 2 +- pyproject.toml | 10 +++--- scripts/update_version.py | 2 +- .../__init__.py | 0 .../_errors.py | 0 .../_internal/__init__.py | 0 .../_internal/client.py | 0 .../_internal/message_parser.py | 0 .../_internal/query.py | 0 .../_internal/transport/__init__.py | 0 .../_internal/transport/subprocess_cli.py | 0 src/claude_agent_sdk/_version.py | 3 ++ .../client.py | 0 .../py.typed | 0 .../query.py | 2 +- .../types.py | 0 src/claude_code_sdk/_version.py | 3 -- tests/test_client.py | 10 +++--- tests/test_errors.py | 2 +- tests/test_integration.py | 10 +++--- tests/test_message_parser.py | 6 ++-- tests/test_sdk_mcp_integration.py | 2 +- tests/test_streaming_client.py | 32 +++++++++---------- tests/test_subprocess_buffering.py | 6 ++-- tests/test_tool_callbacks.py | 6 ++-- tests/test_transport.py | 8 ++--- tests/test_types.py | 4 +-- 49 files changed, 107 insertions(+), 106 deletions(-) rename src/{claude_code_sdk => claude_agent_sdk}/__init__.py (100%) rename src/{claude_code_sdk => claude_agent_sdk}/_errors.py (100%) rename src/{claude_code_sdk => claude_agent_sdk}/_internal/__init__.py (100%) rename src/{claude_code_sdk => claude_agent_sdk}/_internal/client.py (100%) rename src/{claude_code_sdk => claude_agent_sdk}/_internal/message_parser.py (100%) rename src/{claude_code_sdk => claude_agent_sdk}/_internal/query.py (100%) rename src/{claude_code_sdk => claude_agent_sdk}/_internal/transport/__init__.py (100%) rename src/{claude_code_sdk => claude_agent_sdk}/_internal/transport/subprocess_cli.py (100%) create mode 100644 src/claude_agent_sdk/_version.py rename src/{claude_code_sdk => claude_agent_sdk}/client.py (100%) rename src/{claude_code_sdk => claude_agent_sdk}/py.typed (100%) rename src/{claude_code_sdk => claude_agent_sdk}/query.py (98%) rename src/{claude_code_sdk => claude_agent_sdk}/types.py (100%) delete mode 100644 src/claude_code_sdk/_version.py diff --git a/.github/workflows/create-release-tag.yml b/.github/workflows/create-release-tag.yml index d30668d7..8d6b8e19 100644 --- a/.github/workflows/create-release-tag.yml +++ b/.github/workflows/create-release-tag.yml @@ -51,9 +51,9 @@ jobs: --title "Release v${{ steps.extract_version.outputs.version }}" \ --generate-notes \ --notes-start-tag "${{ steps.previous_tag.outputs.previous_tag }}" \ - --notes "Published to PyPI: https://pypi.org/project/claude-code-sdk/${{ steps.extract_version.outputs.version }}/ + --notes "Published to PyPI: https://pypi.org/project/claude-agent-sdk/${{ steps.extract_version.outputs.version }}/ ### Installation \`\`\`bash - pip install claude-code-sdk==${{ steps.extract_version.outputs.version }} + pip install claude-agent-sdk==${{ steps.extract_version.outputs.version }} \`\`\`" diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index c2bf6049..36ecc8b8 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -102,7 +102,7 @@ jobs: run: | twine upload dist/* echo "Package published to PyPI" - echo "Install with: pip install claude-code-sdk==${{ env.VERSION }}" + echo "Install with: pip install claude-agent-sdk==${{ env.VERSION }}" - name: Create version update PR env: @@ -124,7 +124,7 @@ jobs: echo "Getting SHA for pyproject.toml" PYPROJECT_SHA=$(gh api /repos/$GITHUB_REPOSITORY/contents/pyproject.toml --jq '.sha') echo "Getting SHA for _version.py" - VERSION_SHA=$(gh api /repos/$GITHUB_REPOSITORY/contents/src/claude_code_sdk/_version.py --jq '.sha') + VERSION_SHA=$(gh api /repos/$GITHUB_REPOSITORY/contents/src/claude_agent_sdk/_version.py --jq '.sha') # Commit pyproject.toml via GitHub API (this creates signed commits) message="chore: bump version to ${{ env.VERSION }}" @@ -138,10 +138,10 @@ jobs: -f branch="$BRANCH_NAME" # Commit _version.py via GitHub API - base64 -i src/claude_code_sdk/_version.py > version.py.b64 + base64 -i src/claude_agent_sdk/_version.py > version.py.b64 gh api \ --method PUT \ - /repos/$GITHUB_REPOSITORY/contents/src/claude_code_sdk/_version.py \ + /repos/$GITHUB_REPOSITORY/contents/src/claude_agent_sdk/_version.py \ -f message="$message" \ -F content=@version.py.b64 \ -f sha="$VERSION_SHA" \ @@ -152,11 +152,11 @@ jobs: ## Changes - Updated version in \`pyproject.toml\` - - Updated version in \`src/claude_code_sdk/_version.py\` + - Updated version in \`src/claude_agent_sdk/_version.py\` ## Release Information - - Published to PyPI: https://pypi.org/project/claude-code-sdk/${{ env.VERSION }}/ - - Install with: \`pip install claude-code-sdk==${{ env.VERSION }}\` + - Published to PyPI: https://pypi.org/project/claude-agent-sdk/${{ env.VERSION }}/ + - Install with: \`pip install claude-agent-sdk==${{ env.VERSION }}\` 🤖 Generated by GitHub Actions" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9a3e24a2..7ccffcb8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,7 +28,7 @@ jobs: - name: Run tests run: | - python -m pytest tests/ -v --cov=claude_code_sdk --cov-report=xml + python -m pytest tests/ -v --cov=claude_agent_sdk --cov-report=xml - name: Upload coverage to Codecov uses: codecov/codecov-action@v4 diff --git a/CLAUDE.md b/CLAUDE.md index fb9ed473..189cdefb 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -18,7 +18,7 @@ python -m pytest tests/test_client.py # Codebase Structure -- `src/claude_code_sdk/` - Main package +- `src/claude_agent_sdk/` - Main package - `client.py` - ClaudeSDKClient for interactive sessions - `query.py` - One-shot query function - `types.py` - Type definitions diff --git a/README.md b/README.md index 366cf7e4..ed182546 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ -# Claude Code SDK for Python +# Claude Agent SDK for Python -Python SDK for Claude Code. See the [Claude Code SDK documentation](https://docs.anthropic.com/en/docs/claude-code/sdk/sdk-python) for more information. +Python SDK for Claude Agent. See the [Claude Agent SDK documentation](https://docs.anthropic.com/en/docs/claude-code/sdk/sdk-python) for more information. ## Installation ```bash -pip install claude-code-sdk +pip install claude-agent-sdk ``` **Prerequisites:** @@ -17,7 +17,7 @@ pip install claude-code-sdk ```python import anyio -from claude_code_sdk import query +from claude_agent_sdk import query async def main(): async for message in query(prompt="What is 2 + 2?"): @@ -28,10 +28,10 @@ anyio.run(main) ## Basic Usage: query() -`query()` is an async function for querying Claude Code. It returns an `AsyncIterator` of response messages. See [src/claude_code_sdk/query.py](src/claude_code_sdk/query.py). +`query()` is an async function for querying Claude Code. It returns an `AsyncIterator` of response messages. See [src/claude_agent_sdk/query.py](src/claude_agent_sdk/query.py). ```python -from claude_code_sdk import query, ClaudeAgentOptions, AssistantMessage, TextBlock +from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, TextBlock # Simple query async for message in query(prompt="Hello Claude"): @@ -79,7 +79,7 @@ options = ClaudeAgentOptions( ## ClaudeSDKClient `ClaudeSDKClient` supports bidirectional, interactive conversations with Claude -Code. See [src/claude_code_sdk/client.py](src/claude_code_sdk/client.py). +Code. See [src/claude_agent_sdk/client.py](src/claude_agent_sdk/client.py). Unlike `query()`, `ClaudeSDKClient` additionally enables **custom tools** and **hooks**, both of which can be defined as Python functions. @@ -94,7 +94,7 @@ For an end-to-end example, see [MCP Calculator](examples/mcp_calculator.py). #### Creating a Simple Tool ```python -from claude_code_sdk import tool, create_sdk_mcp_server, ClaudeAgentOptions, ClaudeSDKClient +from claude_agent_sdk import tool, create_sdk_mcp_server, ClaudeAgentOptions, ClaudeSDKClient # Define a tool using the @tool decorator @tool("greet", "Greet a user", {"name": str}) @@ -186,7 +186,7 @@ For more examples, see examples/hooks.py. #### Example ```python -from claude_code_sdk import ClaudeAgentOptions, ClaudeSDKClient, HookMatcher +from claude_agent_sdk import ClaudeAgentOptions, ClaudeSDKClient, HookMatcher async def check_bash_command(input_data, tool_use_id, context): tool_name = input_data["tool_name"] @@ -232,7 +232,7 @@ async with ClaudeSDKClient(options=options) as client: ## Types -See [src/claude_code_sdk/types.py](src/claude_code_sdk/types.py) for complete type definitions: +See [src/claude_agent_sdk/types.py](src/claude_agent_sdk/types.py) for complete type definitions: - `ClaudeAgentOptions` - Configuration options - `AssistantMessage`, `UserMessage`, `SystemMessage`, `ResultMessage` - Message types - `TextBlock`, `ToolUseBlock`, `ToolResultBlock` - Content blocks @@ -240,7 +240,7 @@ See [src/claude_code_sdk/types.py](src/claude_code_sdk/types.py) for complete ty ## Error Handling ```python -from claude_code_sdk import ( +from claude_agent_sdk import ( ClaudeSDKError, # Base error CLINotFoundError, # Claude Code not installed CLIConnectionError, # Connection issues @@ -259,7 +259,7 @@ except CLIJSONDecodeError as e: print(f"Failed to parse response: {e}") ``` -See [src/claude_code_sdk/_errors.py](src/claude_code_sdk/_errors.py) for all error types. +See [src/claude_agent_sdk/_errors.py](src/claude_agent_sdk/_errors.py) for all error types. ## Available Tools diff --git a/e2e-tests/test_agents_and_settings.py b/e2e-tests/test_agents_and_settings.py index 3ed7cbda..678ea819 100644 --- a/e2e-tests/test_agents_and_settings.py +++ b/e2e-tests/test_agents_and_settings.py @@ -5,7 +5,7 @@ import pytest -from claude_code_sdk import ( +from claude_agent_sdk import ( AgentDefinition, ClaudeAgentOptions, ClaudeSDKClient, diff --git a/e2e-tests/test_dynamic_control.py b/e2e-tests/test_dynamic_control.py index 779ebea0..f12ffb68 100644 --- a/e2e-tests/test_dynamic_control.py +++ b/e2e-tests/test_dynamic_control.py @@ -2,7 +2,7 @@ import pytest -from claude_code_sdk import ( +from claude_agent_sdk import ( ClaudeAgentOptions, ClaudeSDKClient, ) diff --git a/e2e-tests/test_include_partial_messages.py b/e2e-tests/test_include_partial_messages.py index 70c0b1ea..3dffe47c 100644 --- a/e2e-tests/test_include_partial_messages.py +++ b/e2e-tests/test_include_partial_messages.py @@ -9,8 +9,8 @@ import pytest -from claude_code_sdk import ClaudeSDKClient -from claude_code_sdk.types import ( +from claude_agent_sdk import ClaudeSDKClient +from claude_agent_sdk.types import ( ClaudeAgentOptions, StreamEvent, AssistantMessage, diff --git a/e2e-tests/test_sdk_mcp_tools.py b/e2e-tests/test_sdk_mcp_tools.py index 27ce9eab..402465c8 100644 --- a/e2e-tests/test_sdk_mcp_tools.py +++ b/e2e-tests/test_sdk_mcp_tools.py @@ -8,7 +8,7 @@ import pytest -from claude_code_sdk import ( +from claude_agent_sdk import ( ClaudeAgentOptions, ClaudeSDKClient, create_sdk_mcp_server, diff --git a/e2e-tests/test_stderr_callback.py b/e2e-tests/test_stderr_callback.py index 93aa8d5c..9040643b 100644 --- a/e2e-tests/test_stderr_callback.py +++ b/e2e-tests/test_stderr_callback.py @@ -2,7 +2,7 @@ import pytest -from claude_code_sdk import ClaudeCodeOptions, query +from claude_agent_sdk import ClaudeCodeOptions, query @pytest.mark.e2e diff --git a/e2e-tests/test_tool_permissions.py b/e2e-tests/test_tool_permissions.py index 329abbd7..21ed672b 100644 --- a/e2e-tests/test_tool_permissions.py +++ b/e2e-tests/test_tool_permissions.py @@ -2,7 +2,7 @@ import pytest -from claude_code_sdk import ( +from claude_agent_sdk import ( ClaudeAgentOptions, ClaudeSDKClient, PermissionResultAllow, diff --git a/examples/agents.py b/examples/agents.py index 75c187bc..9e7439ee 100644 --- a/examples/agents.py +++ b/examples/agents.py @@ -10,7 +10,7 @@ import anyio -from claude_code_sdk import ( +from claude_agent_sdk import ( AgentDefinition, AssistantMessage, ClaudeAgentOptions, @@ -38,7 +38,7 @@ async def code_reviewer_example(): ) async for message in query( - prompt="Use the code-reviewer agent to review the code in src/claude_code_sdk/types.py", + prompt="Use the code-reviewer agent to review the code in src/claude_agent_sdk/types.py", options=options, ): if isinstance(message, AssistantMessage): diff --git a/examples/hooks.py b/examples/hooks.py index 5a8a0b27..18bd8815 100644 --- a/examples/hooks.py +++ b/examples/hooks.py @@ -15,8 +15,8 @@ import sys from typing import Any -from claude_code_sdk import ClaudeAgentOptions, ClaudeSDKClient -from claude_code_sdk.types import ( +from claude_agent_sdk import ClaudeAgentOptions, ClaudeSDKClient +from claude_agent_sdk.types import ( AssistantMessage, HookContext, HookJSONOutput, diff --git a/examples/include_partial_messages.py b/examples/include_partial_messages.py index 503efbb5..61a4c678 100644 --- a/examples/include_partial_messages.py +++ b/examples/include_partial_messages.py @@ -14,8 +14,8 @@ """ import asyncio -from claude_code_sdk import ClaudeSDKClient -from claude_code_sdk.types import ( +from claude_agent_sdk import ClaudeSDKClient +from claude_agent_sdk.types import ( ClaudeAgentOptions, StreamEvent, AssistantMessage, diff --git a/examples/mcp_calculator.py b/examples/mcp_calculator.py index 7b8e9286..18503dd8 100644 --- a/examples/mcp_calculator.py +++ b/examples/mcp_calculator.py @@ -12,7 +12,7 @@ import asyncio from typing import Any -from claude_code_sdk import ( +from claude_agent_sdk import ( ClaudeAgentOptions, create_sdk_mcp_server, tool, @@ -99,7 +99,7 @@ async def power(args: dict[str, Any]) -> dict[str, Any]: def display_message(msg): """Display message content in a clean format.""" - from claude_code_sdk import ( + from claude_agent_sdk import ( AssistantMessage, ResultMessage, SystemMessage, @@ -137,7 +137,7 @@ def display_message(msg): async def main(): """Run example calculations using the SDK MCP server with streaming client.""" - from claude_code_sdk import ClaudeSDKClient + from claude_agent_sdk import ClaudeSDKClient # Create the calculator server with all tools calculator = create_sdk_mcp_server( diff --git a/examples/quick_start.py b/examples/quick_start.py index e612075f..3f128552 100644 --- a/examples/quick_start.py +++ b/examples/quick_start.py @@ -3,7 +3,7 @@ import anyio -from claude_code_sdk import ( +from claude_agent_sdk import ( AssistantMessage, ClaudeAgentOptions, ResultMessage, diff --git a/examples/setting_sources.py b/examples/setting_sources.py index 2678765e..a0b37d63 100644 --- a/examples/setting_sources.py +++ b/examples/setting_sources.py @@ -29,7 +29,7 @@ import sys from pathlib import Path -from claude_code_sdk import ( +from claude_agent_sdk import ( ClaudeAgentOptions, ClaudeSDKClient, SystemMessage, diff --git a/examples/stderr_callback_example.py b/examples/stderr_callback_example.py index f1a12406..41756d81 100644 --- a/examples/stderr_callback_example.py +++ b/examples/stderr_callback_example.py @@ -2,7 +2,7 @@ import asyncio -from claude_code_sdk import ClaudeCodeOptions, query +from claude_agent_sdk import ClaudeCodeOptions, query async def main(): diff --git a/examples/streaming_mode.py b/examples/streaming_mode.py index ffab622a..7a3c8f32 100755 --- a/examples/streaming_mode.py +++ b/examples/streaming_mode.py @@ -19,7 +19,7 @@ import contextlib import sys -from claude_code_sdk import ( +from claude_agent_sdk import ( AssistantMessage, ClaudeAgentOptions, ClaudeSDKClient, @@ -66,6 +66,7 @@ async def example_basic_streaming(): # Receive complete response using the helper method async for msg in client.receive_response(): + print(msg) display_message(msg) print("\n") diff --git a/examples/streaming_mode_ipython.py b/examples/streaming_mode_ipython.py index 27b90312..aa63994c 100644 --- a/examples/streaming_mode_ipython.py +++ b/examples/streaming_mode_ipython.py @@ -14,7 +14,7 @@ # BASIC STREAMING # ============================================================================ -from claude_code_sdk import AssistantMessage, ClaudeSDKClient, ResultMessage, TextBlock +from claude_agent_sdk import AssistantMessage, ClaudeSDKClient, ResultMessage, TextBlock async with ClaudeSDKClient() as client: print("User: What is 2+2?") @@ -33,7 +33,7 @@ import asyncio -from claude_code_sdk import AssistantMessage, ClaudeSDKClient, TextBlock +from claude_agent_sdk import AssistantMessage, ClaudeSDKClient, TextBlock async with ClaudeSDKClient() as client: async def send_and_receive(prompt): @@ -54,7 +54,7 @@ async def send_and_receive(prompt): # PERSISTENT CLIENT FOR MULTIPLE QUESTIONS # ============================================================================ -from claude_code_sdk import AssistantMessage, ClaudeSDKClient, TextBlock +from claude_agent_sdk import AssistantMessage, ClaudeSDKClient, TextBlock # Create client client = ClaudeSDKClient() @@ -89,7 +89,7 @@ async def get_response(): # IMPORTANT: Interrupts require active message consumption. You must be # consuming messages from the client for the interrupt to be processed. -from claude_code_sdk import AssistantMessage, ClaudeSDKClient, TextBlock +from claude_agent_sdk import AssistantMessage, ClaudeSDKClient, TextBlock async with ClaudeSDKClient() as client: print("\n--- Sending initial message ---\n") @@ -141,7 +141,7 @@ async def consume_messages(): # ERROR HANDLING PATTERN # ============================================================================ -from claude_code_sdk import AssistantMessage, ClaudeSDKClient, TextBlock +from claude_agent_sdk import AssistantMessage, ClaudeSDKClient, TextBlock try: async with ClaudeSDKClient() as client: @@ -168,7 +168,7 @@ async def consume_messages(): # SENDING ASYNC ITERABLE OF MESSAGES # ============================================================================ -from claude_code_sdk import AssistantMessage, ClaudeSDKClient, TextBlock +from claude_agent_sdk import AssistantMessage, ClaudeSDKClient, TextBlock async def message_generator(): @@ -210,7 +210,7 @@ async def message_generator(): # COLLECTING ALL MESSAGES INTO A LIST # ============================================================================ -from claude_code_sdk import AssistantMessage, ClaudeSDKClient, TextBlock +from claude_agent_sdk import AssistantMessage, ClaudeSDKClient, TextBlock async with ClaudeSDKClient() as client: print("User: What are the primary colors?") diff --git a/examples/streaming_mode_trio.py b/examples/streaming_mode_trio.py index b63b77b6..364c72ad 100644 --- a/examples/streaming_mode_trio.py +++ b/examples/streaming_mode_trio.py @@ -9,7 +9,7 @@ import trio -from claude_code_sdk import ( +from claude_agent_sdk import ( AssistantMessage, ClaudeAgentOptions, ClaudeSDKClient, diff --git a/examples/system_prompt.py b/examples/system_prompt.py index 7a2bf959..37476923 100644 --- a/examples/system_prompt.py +++ b/examples/system_prompt.py @@ -3,7 +3,7 @@ import anyio -from claude_code_sdk import ( +from claude_agent_sdk import ( AssistantMessage, ClaudeAgentOptions, TextBlock, diff --git a/examples/tool_permission_callback.py b/examples/tool_permission_callback.py index 6c86c46e..82c324b5 100644 --- a/examples/tool_permission_callback.py +++ b/examples/tool_permission_callback.py @@ -8,7 +8,7 @@ import asyncio import json -from claude_code_sdk import ( +from claude_agent_sdk import ( AssistantMessage, ClaudeAgentOptions, ClaudeSDKClient, diff --git a/pyproject.toml b/pyproject.toml index 65fe9c6f..8eb7048e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ requires = ["hatchling"] build-backend = "hatchling.build" [project] -name = "claude-code-sdk" +name = "claude-agent-sdk" version = "0.0.23" description = "Python SDK for Claude Code" readme = "README.md" @@ -41,12 +41,12 @@ dev = [ ] [project.urls] -Homepage = "https://github.com/anthropics/claude-code-sdk-python" +Homepage = "https://github.com/anthropics/claude-agent-sdk-python" Documentation = "https://docs.anthropic.com/en/docs/claude-code/sdk" -Issues = "https://github.com/anthropics/claude-code-sdk-python/issues" +Issues = "https://github.com/anthropics/claude-agent-sdk-python/issues" [tool.hatch.build.targets.wheel] -packages = ["src/claude_code_sdk"] +packages = ["src/claude_agent_sdk"] [tool.hatch.build.targets.sdist] include = [ @@ -105,4 +105,4 @@ ignore = [ ] [tool.ruff.lint.isort] -known-first-party = ["claude_code_sdk"] \ No newline at end of file +known-first-party = ["claude_agent_sdk"] \ No newline at end of file diff --git a/scripts/update_version.py b/scripts/update_version.py index 18a22a6f..743b40f8 100755 --- a/scripts/update_version.py +++ b/scripts/update_version.py @@ -25,7 +25,7 @@ def update_version(new_version: str) -> None: print(f"Updated pyproject.toml to version {new_version}") # Update _version.py - version_path = Path("src/claude_code_sdk/_version.py") + version_path = Path("src/claude_agent_sdk/_version.py") content = version_path.read_text() # Only update __version__ assignment diff --git a/src/claude_code_sdk/__init__.py b/src/claude_agent_sdk/__init__.py similarity index 100% rename from src/claude_code_sdk/__init__.py rename to src/claude_agent_sdk/__init__.py diff --git a/src/claude_code_sdk/_errors.py b/src/claude_agent_sdk/_errors.py similarity index 100% rename from src/claude_code_sdk/_errors.py rename to src/claude_agent_sdk/_errors.py diff --git a/src/claude_code_sdk/_internal/__init__.py b/src/claude_agent_sdk/_internal/__init__.py similarity index 100% rename from src/claude_code_sdk/_internal/__init__.py rename to src/claude_agent_sdk/_internal/__init__.py diff --git a/src/claude_code_sdk/_internal/client.py b/src/claude_agent_sdk/_internal/client.py similarity index 100% rename from src/claude_code_sdk/_internal/client.py rename to src/claude_agent_sdk/_internal/client.py diff --git a/src/claude_code_sdk/_internal/message_parser.py b/src/claude_agent_sdk/_internal/message_parser.py similarity index 100% rename from src/claude_code_sdk/_internal/message_parser.py rename to src/claude_agent_sdk/_internal/message_parser.py diff --git a/src/claude_code_sdk/_internal/query.py b/src/claude_agent_sdk/_internal/query.py similarity index 100% rename from src/claude_code_sdk/_internal/query.py rename to src/claude_agent_sdk/_internal/query.py diff --git a/src/claude_code_sdk/_internal/transport/__init__.py b/src/claude_agent_sdk/_internal/transport/__init__.py similarity index 100% rename from src/claude_code_sdk/_internal/transport/__init__.py rename to src/claude_agent_sdk/_internal/transport/__init__.py diff --git a/src/claude_code_sdk/_internal/transport/subprocess_cli.py b/src/claude_agent_sdk/_internal/transport/subprocess_cli.py similarity index 100% rename from src/claude_code_sdk/_internal/transport/subprocess_cli.py rename to src/claude_agent_sdk/_internal/transport/subprocess_cli.py diff --git a/src/claude_agent_sdk/_version.py b/src/claude_agent_sdk/_version.py new file mode 100644 index 00000000..20a0ec77 --- /dev/null +++ b/src/claude_agent_sdk/_version.py @@ -0,0 +1,3 @@ +"""Version information for claude-agent-sdk.""" + +__version__ = "0.0.23" diff --git a/src/claude_code_sdk/client.py b/src/claude_agent_sdk/client.py similarity index 100% rename from src/claude_code_sdk/client.py rename to src/claude_agent_sdk/client.py diff --git a/src/claude_code_sdk/py.typed b/src/claude_agent_sdk/py.typed similarity index 100% rename from src/claude_code_sdk/py.typed rename to src/claude_agent_sdk/py.typed diff --git a/src/claude_code_sdk/query.py b/src/claude_agent_sdk/query.py similarity index 98% rename from src/claude_code_sdk/query.py rename to src/claude_agent_sdk/query.py index 9c01d300..98ed0c1c 100644 --- a/src/claude_code_sdk/query.py +++ b/src/claude_agent_sdk/query.py @@ -98,7 +98,7 @@ async def prompts(): Example - With custom transport: ```python - from claude_code_sdk import query, Transport + from claude_agent_sdk import query, Transport class MyCustomTransport(Transport): # Implement custom transport logic diff --git a/src/claude_code_sdk/types.py b/src/claude_agent_sdk/types.py similarity index 100% rename from src/claude_code_sdk/types.py rename to src/claude_agent_sdk/types.py diff --git a/src/claude_code_sdk/_version.py b/src/claude_code_sdk/_version.py deleted file mode 100644 index 0ff45304..00000000 --- a/src/claude_code_sdk/_version.py +++ /dev/null @@ -1,3 +0,0 @@ -"""Version information for claude-code-sdk.""" - -__version__ = "0.0.23" diff --git a/tests/test_client.py b/tests/test_client.py index fc1b0836..39c32895 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -4,8 +4,8 @@ import anyio -from claude_code_sdk import AssistantMessage, ClaudeAgentOptions, query -from claude_code_sdk.types import TextBlock +from claude_agent_sdk import AssistantMessage, ClaudeAgentOptions, query +from claude_agent_sdk.types import TextBlock class TestQueryFunction: @@ -16,7 +16,7 @@ def test_query_single_prompt(self): async def _test(): with patch( - "claude_code_sdk._internal.client.InternalClient.process_query" + "claude_agent_sdk._internal.client.InternalClient.process_query" ) as mock_process: # Mock the async generator async def mock_generator(): @@ -41,7 +41,7 @@ def test_query_with_options(self): async def _test(): with patch( - "claude_code_sdk._internal.client.InternalClient.process_query" + "claude_agent_sdk._internal.client.InternalClient.process_query" ) as mock_process: async def mock_generator(): @@ -76,7 +76,7 @@ def test_query_with_cwd(self): async def _test(): with patch( - "claude_code_sdk._internal.client.SubprocessCLITransport" + "claude_agent_sdk._internal.client.SubprocessCLITransport" ) as mock_transport_class: mock_transport = AsyncMock() mock_transport_class.return_value = mock_transport diff --git a/tests/test_errors.py b/tests/test_errors.py index 1eee01d4..9490d075 100644 --- a/tests/test_errors.py +++ b/tests/test_errors.py @@ -1,6 +1,6 @@ """Tests for Claude SDK error handling.""" -from claude_code_sdk import ( +from claude_agent_sdk import ( ClaudeSDKError, CLIConnectionError, CLIJSONDecodeError, diff --git a/tests/test_integration.py b/tests/test_integration.py index f2ab0180..1afae61b 100644 --- a/tests/test_integration.py +++ b/tests/test_integration.py @@ -8,14 +8,14 @@ import anyio import pytest -from claude_code_sdk import ( +from claude_agent_sdk import ( AssistantMessage, ClaudeAgentOptions, CLINotFoundError, ResultMessage, query, ) -from claude_code_sdk.types import ToolUseBlock +from claude_agent_sdk.types import ToolUseBlock class TestIntegration: @@ -26,7 +26,7 @@ def test_simple_query_response(self): async def _test(): with patch( - "claude_code_sdk._internal.client.SubprocessCLITransport" + "claude_agent_sdk._internal.client.SubprocessCLITransport" ) as mock_transport_class: mock_transport = AsyncMock() mock_transport_class.return_value = mock_transport @@ -84,7 +84,7 @@ def test_query_with_tool_use(self): async def _test(): with patch( - "claude_code_sdk._internal.client.SubprocessCLITransport" + "claude_agent_sdk._internal.client.SubprocessCLITransport" ) as mock_transport_class: mock_transport = AsyncMock() mock_transport_class.return_value = mock_transport @@ -170,7 +170,7 @@ def test_continuation_option(self): async def _test(): with patch( - "claude_code_sdk._internal.client.SubprocessCLITransport" + "claude_agent_sdk._internal.client.SubprocessCLITransport" ) as mock_transport_class: mock_transport = AsyncMock() mock_transport_class.return_value = mock_transport diff --git a/tests/test_message_parser.py b/tests/test_message_parser.py index 58e58515..60bcc53a 100644 --- a/tests/test_message_parser.py +++ b/tests/test_message_parser.py @@ -2,9 +2,9 @@ import pytest -from claude_code_sdk._errors import MessageParseError -from claude_code_sdk._internal.message_parser import parse_message -from claude_code_sdk.types import ( +from claude_agent_sdk._errors import MessageParseError +from claude_agent_sdk._internal.message_parser import parse_message +from claude_agent_sdk.types import ( AssistantMessage, ResultMessage, SystemMessage, diff --git a/tests/test_sdk_mcp_integration.py b/tests/test_sdk_mcp_integration.py index 07b0e611..b76c8e10 100644 --- a/tests/test_sdk_mcp_integration.py +++ b/tests/test_sdk_mcp_integration.py @@ -8,7 +8,7 @@ import pytest -from claude_code_sdk import ( +from claude_agent_sdk import ( ClaudeAgentOptions, create_sdk_mcp_server, tool, diff --git a/tests/test_streaming_client.py b/tests/test_streaming_client.py index 2b8d4a72..9f636d96 100644 --- a/tests/test_streaming_client.py +++ b/tests/test_streaming_client.py @@ -10,7 +10,7 @@ import anyio import pytest -from claude_code_sdk import ( +from claude_agent_sdk import ( AssistantMessage, ClaudeAgentOptions, ClaudeSDKClient, @@ -20,7 +20,7 @@ UserMessage, query, ) -from claude_code_sdk._internal.transport.subprocess_cli import SubprocessCLITransport +from claude_agent_sdk._internal.transport.subprocess_cli import SubprocessCLITransport def create_mock_transport(with_init_response=True): @@ -115,7 +115,7 @@ def test_auto_connect_with_context_manager(self): async def _test(): with patch( - "claude_code_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" + "claude_agent_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" ) as mock_transport_class: mock_transport = create_mock_transport() mock_transport_class.return_value = mock_transport @@ -135,7 +135,7 @@ def test_manual_connect_disconnect(self): async def _test(): with patch( - "claude_code_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" + "claude_agent_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" ) as mock_transport_class: mock_transport = create_mock_transport() mock_transport_class.return_value = mock_transport @@ -159,7 +159,7 @@ def test_connect_with_string_prompt(self): async def _test(): with patch( - "claude_code_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" + "claude_agent_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" ) as mock_transport_class: mock_transport = create_mock_transport() mock_transport_class.return_value = mock_transport @@ -178,7 +178,7 @@ def test_connect_with_async_iterable(self): async def _test(): with patch( - "claude_code_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" + "claude_agent_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" ) as mock_transport_class: mock_transport = create_mock_transport() mock_transport_class.return_value = mock_transport @@ -206,7 +206,7 @@ def test_query(self): async def _test(): with patch( - "claude_code_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" + "claude_agent_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" ) as mock_transport_class: mock_transport = create_mock_transport() mock_transport_class.return_value = mock_transport @@ -240,7 +240,7 @@ def test_send_message_with_session_id(self): async def _test(): with patch( - "claude_code_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" + "claude_agent_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" ) as mock_transport_class: mock_transport = create_mock_transport() mock_transport_class.return_value = mock_transport @@ -279,7 +279,7 @@ def test_receive_messages(self): async def _test(): with patch( - "claude_code_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" + "claude_agent_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" ) as mock_transport_class: mock_transport = create_mock_transport() mock_transport_class.return_value = mock_transport @@ -348,7 +348,7 @@ def test_receive_response(self): async def _test(): with patch( - "claude_code_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" + "claude_agent_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" ) as mock_transport_class: mock_transport = create_mock_transport() mock_transport_class.return_value = mock_transport @@ -430,7 +430,7 @@ def test_interrupt(self): async def _test(): with patch( - "claude_code_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" + "claude_agent_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" ) as mock_transport_class: mock_transport = create_mock_transport() mock_transport_class.return_value = mock_transport @@ -478,7 +478,7 @@ async def _test(): ) with patch( - "claude_code_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" + "claude_agent_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" ) as mock_transport_class: mock_transport = create_mock_transport() mock_transport_class.return_value = mock_transport @@ -497,7 +497,7 @@ def test_concurrent_send_receive(self): async def _test(): with patch( - "claude_code_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" + "claude_agent_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" ) as mock_transport_class: mock_transport = create_mock_transport() mock_transport_class.return_value = mock_transport @@ -699,7 +699,7 @@ def test_double_connect(self): async def _test(): with patch( - "claude_code_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" + "claude_agent_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" ) as mock_transport_class: # Create a new mock transport for each call mock_transport_class.side_effect = [ @@ -732,7 +732,7 @@ def test_context_manager_with_exception(self): async def _test(): with patch( - "claude_code_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" + "claude_agent_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" ) as mock_transport_class: mock_transport = create_mock_transport() mock_transport_class.return_value = mock_transport @@ -751,7 +751,7 @@ def test_receive_response_list_comprehension(self): async def _test(): with patch( - "claude_code_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" + "claude_agent_sdk._internal.transport.subprocess_cli.SubprocessCLITransport" ) as mock_transport_class: mock_transport = create_mock_transport() mock_transport_class.return_value = mock_transport diff --git a/tests/test_subprocess_buffering.py b/tests/test_subprocess_buffering.py index 755efcd2..9c62557f 100644 --- a/tests/test_subprocess_buffering.py +++ b/tests/test_subprocess_buffering.py @@ -8,12 +8,12 @@ import anyio import pytest -from claude_code_sdk._errors import CLIJSONDecodeError -from claude_code_sdk._internal.transport.subprocess_cli import ( +from claude_agent_sdk._errors import CLIJSONDecodeError +from claude_agent_sdk._internal.transport.subprocess_cli import ( _MAX_BUFFER_SIZE, SubprocessCLITransport, ) -from claude_code_sdk.types import ClaudeAgentOptions +from claude_agent_sdk.types import ClaudeAgentOptions class MockTextReceiveStream: diff --git a/tests/test_tool_callbacks.py b/tests/test_tool_callbacks.py index 6097ba8f..27634c95 100644 --- a/tests/test_tool_callbacks.py +++ b/tests/test_tool_callbacks.py @@ -2,7 +2,7 @@ import pytest -from claude_code_sdk import ( +from claude_agent_sdk import ( ClaudeAgentOptions, HookContext, HookMatcher, @@ -10,8 +10,8 @@ PermissionResultDeny, ToolPermissionContext, ) -from claude_code_sdk._internal.query import Query -from claude_code_sdk._internal.transport import Transport +from claude_agent_sdk._internal.query import Query +from claude_agent_sdk._internal.transport import Transport class MockTransport(Transport): diff --git a/tests/test_transport.py b/tests/test_transport.py index 86ad97a1..5a68c804 100644 --- a/tests/test_transport.py +++ b/tests/test_transport.py @@ -7,8 +7,8 @@ import anyio import pytest -from claude_code_sdk._internal.transport.subprocess_cli import SubprocessCLITransport -from claude_code_sdk.types import ClaudeAgentOptions +from claude_agent_sdk._internal.transport.subprocess_cli import SubprocessCLITransport +from claude_agent_sdk.types import ClaudeAgentOptions class TestSubprocessCLITransport: @@ -16,7 +16,7 @@ class TestSubprocessCLITransport: def test_find_cli_not_found(self): """Test CLI not found error.""" - from claude_code_sdk._errors import CLINotFoundError + from claude_agent_sdk._errors import CLINotFoundError with ( patch("shutil.which", return_value=None), @@ -207,7 +207,7 @@ def test_read_messages(self): def test_connect_with_nonexistent_cwd(self): """Test that connect raises CLIConnectionError when cwd doesn't exist.""" - from claude_code_sdk._errors import CLIConnectionError + from claude_agent_sdk._errors import CLIConnectionError async def _test(): transport = SubprocessCLITransport( diff --git a/tests/test_types.py b/tests/test_types.py index cc11492f..2142b5aa 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -1,11 +1,11 @@ """Tests for Claude SDK type definitions.""" -from claude_code_sdk import ( +from claude_agent_sdk import ( AssistantMessage, ClaudeAgentOptions, ResultMessage, ) -from claude_code_sdk.types import ( +from claude_agent_sdk.types import ( TextBlock, ThinkingBlock, ToolResultBlock, From fe6d65afd28d1ee6db407514848cd75f5aa2fdb4 Mon Sep 17 00:00:00 2001 From: Dickson Tsai Date: Sun, 28 Sep 2025 14:23:16 -0700 Subject: [PATCH 2/3] Misc ClaudeAgentOptions additions --- e2e-tests/test_stderr_callback.py | 6 +++--- examples/stderr_callback_example.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/e2e-tests/test_stderr_callback.py b/e2e-tests/test_stderr_callback.py index 9040643b..e6982acc 100644 --- a/e2e-tests/test_stderr_callback.py +++ b/e2e-tests/test_stderr_callback.py @@ -2,7 +2,7 @@ import pytest -from claude_agent_sdk import ClaudeCodeOptions, query +from claude_agent_sdk import ClaudeAgentOptions, query @pytest.mark.e2e @@ -15,7 +15,7 @@ def capture_stderr(line: str): stderr_lines.append(line) # Enable debug mode to generate stderr output - options = ClaudeCodeOptions( + options = ClaudeAgentOptions( stderr=capture_stderr, extra_args={"debug-to-stderr": None} ) @@ -39,7 +39,7 @@ def capture_stderr(line: str): stderr_lines.append(line) # No debug mode enabled - options = ClaudeCodeOptions(stderr=capture_stderr) + options = ClaudeAgentOptions(stderr=capture_stderr) # Run a simple query async for _ in query(prompt="What is 1+1?", options=options): diff --git a/examples/stderr_callback_example.py b/examples/stderr_callback_example.py index 41756d81..8b9c4c21 100644 --- a/examples/stderr_callback_example.py +++ b/examples/stderr_callback_example.py @@ -2,7 +2,7 @@ import asyncio -from claude_agent_sdk import ClaudeCodeOptions, query +from claude_agent_sdk import ClaudeAgentOptions, query async def main(): @@ -19,7 +19,7 @@ def stderr_callback(message: str): print(f"Error detected: {message}") # Create options with stderr callback and enable debug mode - options = ClaudeCodeOptions( + options = ClaudeAgentOptions( stderr=stderr_callback, extra_args={"debug-to-stderr": None} # Enable debug output ) From a02558ca3e8d4d8693589e5a23c62d411dbf4be6 Mon Sep 17 00:00:00 2001 From: Dickson Tsai Date: Sun, 28 Sep 2025 14:40:51 -0700 Subject: [PATCH 3/3] Remove unnecessary print statement --- examples/streaming_mode.py | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/streaming_mode.py b/examples/streaming_mode.py index 7a3c8f32..277e62f2 100755 --- a/examples/streaming_mode.py +++ b/examples/streaming_mode.py @@ -66,7 +66,6 @@ async def example_basic_streaming(): # Receive complete response using the helper method async for msg in client.receive_response(): - print(msg) display_message(msg) print("\n")