fix(acp): declare session load and resume capabilities in initialize response (#6985)
The resume_session and load_session handlers were implemented but undiscoverable by ACP clients because the capabilities weren't declared in the initialize response. Adds load_session=True and resume=SessionResumeCapabilities() plus wire-format tests. Fixes #6633. Contributed by @luyao618.
This commit is contained in:
@@ -36,6 +36,7 @@ from acp.schema import (
|
|||||||
SessionCapabilities,
|
SessionCapabilities,
|
||||||
SessionForkCapabilities,
|
SessionForkCapabilities,
|
||||||
SessionListCapabilities,
|
SessionListCapabilities,
|
||||||
|
SessionResumeCapabilities,
|
||||||
SessionInfo,
|
SessionInfo,
|
||||||
TextContentBlock,
|
TextContentBlock,
|
||||||
UnstructuredCommandInput,
|
UnstructuredCommandInput,
|
||||||
@@ -245,9 +246,11 @@ class HermesACPAgent(acp.Agent):
|
|||||||
protocol_version=acp.PROTOCOL_VERSION,
|
protocol_version=acp.PROTOCOL_VERSION,
|
||||||
agent_info=Implementation(name="hermes-agent", version=HERMES_VERSION),
|
agent_info=Implementation(name="hermes-agent", version=HERMES_VERSION),
|
||||||
agent_capabilities=AgentCapabilities(
|
agent_capabilities=AgentCapabilities(
|
||||||
|
load_session=True,
|
||||||
session_capabilities=SessionCapabilities(
|
session_capabilities=SessionCapabilities(
|
||||||
fork=SessionForkCapabilities(),
|
fork=SessionForkCapabilities(),
|
||||||
list=SessionListCapabilities(),
|
list=SessionListCapabilities(),
|
||||||
|
resume=SessionResumeCapabilities(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
auth_methods=auth_methods,
|
auth_methods=auth_methods,
|
||||||
|
|||||||
@@ -68,9 +68,22 @@ class TestInitialize:
|
|||||||
resp = await agent.initialize(protocol_version=1)
|
resp = await agent.initialize(protocol_version=1)
|
||||||
caps = resp.agent_capabilities
|
caps = resp.agent_capabilities
|
||||||
assert isinstance(caps, AgentCapabilities)
|
assert isinstance(caps, AgentCapabilities)
|
||||||
|
assert caps.load_session is True
|
||||||
assert caps.session_capabilities is not None
|
assert caps.session_capabilities is not None
|
||||||
assert caps.session_capabilities.fork is not None
|
assert caps.session_capabilities.fork is not None
|
||||||
assert caps.session_capabilities.list is not None
|
assert caps.session_capabilities.list is not None
|
||||||
|
assert caps.session_capabilities.resume is not None
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_initialize_capabilities_wire_format(self, agent):
|
||||||
|
"""Verify the JSON wire format uses correct aliases so ACP clients see the right keys."""
|
||||||
|
resp = await agent.initialize(protocol_version=1)
|
||||||
|
payload = resp.agent_capabilities.model_dump(by_alias=True, exclude_none=True)
|
||||||
|
assert payload["loadSession"] is True
|
||||||
|
session_caps = payload["sessionCapabilities"]
|
||||||
|
assert "fork" in session_caps
|
||||||
|
assert "list" in session_caps
|
||||||
|
assert "resume" in session_caps
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user