Skip to content

Commit e2f96ae

Browse files
authored
feat: add protocol method for session/set_config_option (#69)
1 parent 2157358 commit e2f96ae

File tree

6 files changed

+50
-0
lines changed

6 files changed

+50
-0
lines changed

src/acp/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@
6060
RequestPermissionRequest,
6161
RequestPermissionResponse,
6262
SessionNotification,
63+
SetSessionConfigOptionRequest,
64+
SetSessionConfigOptionResponse,
6365
SetSessionModelRequest,
6466
SetSessionModelResponse,
6567
SetSessionModeRequest,
@@ -115,6 +117,8 @@
115117
"SetSessionModeResponse",
116118
"SetSessionModelRequest",
117119
"SetSessionModelResponse",
120+
"SetSessionConfigOptionRequest",
121+
"SetSessionConfigOptionResponse",
118122
# terminal types
119123
"CreateTerminalRequest",
120124
"CreateTerminalResponse",

src/acp/agent/router.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
NewSessionRequest,
1717
PromptRequest,
1818
ResumeSessionRequest,
19+
SetSessionConfigOptionRequest,
1920
SetSessionModelRequest,
2021
SetSessionModeRequest,
2122
)
@@ -53,6 +54,13 @@ def build_agent_router(agent: Agent, use_unstable_protocol: bool = False) -> Mes
5354
adapt_result=normalize_result,
5455
unstable=True,
5556
)
57+
router.route_request(
58+
AGENT_METHODS["session_set_config_option"],
59+
SetSessionConfigOptionRequest,
60+
agent,
61+
"set_config_option",
62+
adapt_result=normalize_result,
63+
)
5664
router.route_request(
5765
AGENT_METHODS["authenticate"],
5866
AuthenticateRequest,

src/acp/client/connection.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
ResourceContentBlock,
3434
ResumeSessionRequest,
3535
ResumeSessionResponse,
36+
SetSessionConfigOptionRequest,
37+
SetSessionConfigOptionResponse,
3638
SetSessionModelRequest,
3739
SetSessionModelResponse,
3840
SetSessionModeRequest,
@@ -150,6 +152,19 @@ async def set_session_model(self, model_id: str, session_id: str, **kwargs: Any)
150152
SetSessionModelResponse,
151153
)
152154

155+
@param_model(SetSessionConfigOptionRequest)
156+
async def set_config_option(
157+
self, config_id: str, session_id: str, value: str, **kwargs: Any
158+
) -> SetSessionConfigOptionResponse:
159+
return await request_model_from_dict(
160+
self._conn,
161+
AGENT_METHODS["session_set_config_option"],
162+
SetSessionConfigOptionRequest(
163+
config_id=config_id, session_id=session_id, value=value, field_meta=kwargs or None
164+
),
165+
SetSessionConfigOptionResponse,
166+
)
167+
153168
@param_model(AuthenticateRequest)
154169
async def authenticate(self, method_id: str, **kwargs: Any) -> AuthenticateResponse:
155170
return await request_model_from_dict(

src/acp/interfaces.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@
4848
ResumeSessionResponse,
4949
SessionInfoUpdate,
5050
SessionNotification,
51+
SetSessionConfigOptionRequest,
52+
SetSessionConfigOptionResponse,
5153
SetSessionModelRequest,
5254
SetSessionModelResponse,
5355
SetSessionModeRequest,
@@ -179,6 +181,11 @@ async def set_session_model(
179181
self, model_id: str, session_id: str, **kwargs: Any
180182
) -> SetSessionModelResponse | None: ...
181183

184+
@param_model(SetSessionConfigOptionRequest)
185+
async def set_config_option(
186+
self, config_id: str, session_id: str, value: str, **kwargs: Any
187+
) -> SetSessionConfigOptionResponse | None: ...
188+
182189
@param_model(AuthenticateRequest)
183190
async def authenticate(self, method_id: str, **kwargs: Any) -> AuthenticateResponse | None: ...
184191

tests/conftest.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
RequestError,
2121
RequestPermissionResponse,
2222
SessionNotification,
23+
SetSessionConfigOptionResponse,
2324
SetSessionModeResponse,
2425
TerminalOutputResponse,
2526
WaitForTerminalExitResponse,
@@ -276,6 +277,11 @@ async def cancel(self, session_id: str, **kwargs: Any) -> None:
276277
async def set_session_mode(self, mode_id: str, session_id: str, **kwargs: Any) -> SetSessionModeResponse | None:
277278
return SetSessionModeResponse()
278279

280+
async def set_config_option(
281+
self, config_id: str, session_id: str, value: str, **kwargs: Any
282+
) -> SetSessionConfigOptionResponse | None:
283+
return SetSessionConfigOptionResponse(config_options=[])
284+
279285
async def ext_method(self, method: str, params: dict) -> dict:
280286
self.ext_calls.append((method, params))
281287
if method == "example.com/echo":

tests/test_rpc.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
PromptResponse,
1919
RequestPermissionRequest,
2020
RequestPermissionResponse,
21+
SetSessionConfigOptionResponse,
2122
SetSessionModeResponse,
2223
WriteTextFileResponse,
2324
spawn_agent_process,
@@ -253,6 +254,15 @@ async def test_set_session_mode_and_extensions(connect, agent, client):
253254
assert client.ext_calls and client.ext_calls[-1] == ("example.com/ping", {"k": 3})
254255

255256

257+
@pytest.mark.asyncio
258+
async def test_set_config_option(connect, agent, client):
259+
_, agent_conn = connect()
260+
261+
resp = await agent_conn.set_config_option(session_id="sess", config_id="theme", value="dark")
262+
assert isinstance(resp, SetSessionConfigOptionResponse)
263+
assert resp.config_options == []
264+
265+
256266
@pytest.mark.asyncio
257267
async def test_ignore_invalid_messages(connect, server):
258268
connect(connect_agent=True, connect_client=False)

0 commit comments

Comments
 (0)