Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions examples/01_standalone_sdk/40_acp_agent_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
Prerequisites:
- Node.js / npx available
- Claude Code CLI authenticated (or CLAUDE_API_KEY set)
- pip install 'openhands-sdk[acp]'

Usage:
uv run python examples/01_standalone_sdk/40_acp_agent_example.py
Expand Down
9 changes: 8 additions & 1 deletion openhands-sdk/openhands/sdk/agent/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,14 @@
# that previously defaulted.
def __getattr__(name: str):
if name == "ACPAgent":
from openhands.sdk.agent.acp_agent import ACPAgent
try:
from openhands.sdk.agent.acp_agent import ACPAgent
except ImportError:
raise ImportError(
"The 'agent-client-protocol' package is required for ACPAgent. "
"Install it with: pip install 'openhands-sdk[acp]' or "
"pip install agent-client-protocol"
) from None

return ACPAgent
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
Expand Down
2 changes: 1 addition & 1 deletion openhands-sdk/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ description = "OpenHands SDK - Core functionality for building AI agents"

requires-python = ">=3.12"
dependencies = [
"agent-client-protocol>=0.8.1",
"deprecation>=2.1.0",
"fakeredis[lua]>=2.32.1", # Explicit dependency for docket/fastmcp background tasks
"fastmcp>=3.0.0",
Expand All @@ -27,6 +26,7 @@ Documentation = "https://docs.openhands.dev/sdk"
"Bug Tracker" = "https://github.com/OpenHands/software-agent-sdk/issues"

[project.optional-dependencies]
acp = ["agent-client-protocol>=0.8.1"]
boto3 = ["boto3>=1.35.0"]

[build-system]
Expand Down
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ openhands-agent-server = { workspace = true }

[dependency-groups]
dev = [
"agent-client-protocol>=0.8.1", # Optional SDK extra; included for ACP tests
"pre-commit>=4.3.0",
"packaging>=24.2",
"psutil>=7.0.0",
Expand Down
19 changes: 13 additions & 6 deletions tests/sdk/agent/test_acp_agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,22 @@

import pytest

from openhands.sdk.agent.acp_agent import ACPAgent, _OpenHandsACPBridge
from openhands.sdk.agent.base import AgentBase
from openhands.sdk.conversation.state import (

pytest.importorskip("acp", reason="agent-client-protocol not installed")

from openhands.sdk.agent.acp_agent import ACPAgent, _OpenHandsACPBridge # noqa: E402
from openhands.sdk.agent.base import AgentBase # noqa: E402
from openhands.sdk.conversation.state import ( # noqa: E402
ConversationExecutionStatus,
ConversationState,
)
from openhands.sdk.event import ACPToolCallEvent, MessageEvent, SystemPromptEvent
from openhands.sdk.llm import Message, TextContent
from openhands.sdk.workspace.local import LocalWorkspace
from openhands.sdk.event import ( # noqa: E402
ACPToolCallEvent,
MessageEvent,
SystemPromptEvent,
)
from openhands.sdk.llm import Message, TextContent # noqa: E402
from openhands.sdk.workspace.local import LocalWorkspace # noqa: E402


# ---------------------------------------------------------------------------
Expand Down
9 changes: 6 additions & 3 deletions uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading