55import os
66import sys
77from pathlib import Path
8+ from typing import Any
89
910from acp import (
1011 Client ,
1314 NewSessionRequest ,
1415 PromptRequest ,
1516 RequestError ,
16- SessionNotification ,
1717 text_block ,
1818 PROTOCOL_VERSION ,
1919)
2020from acp .schema import (
2121 AgentMessageChunk ,
22+ AgentPlanUpdate ,
23+ AgentThoughtChunk ,
2224 AudioContentBlock ,
25+ AvailableCommandsUpdate ,
2326 ClientCapabilities ,
27+ CreateTerminalResponse ,
28+ CurrentModeUpdate ,
2429 EmbeddedResourceContentBlock ,
30+ EnvVariable ,
2531 ImageContentBlock ,
2632 Implementation ,
33+ KillTerminalCommandResponse ,
34+ PermissionOption ,
35+ ReadTextFileResponse ,
36+ ReleaseTerminalResponse ,
37+ RequestPermissionResponse ,
2738 ResourceContentBlock ,
39+ TerminalOutputResponse ,
2840 TextContentBlock ,
41+ ToolCall ,
42+ ToolCallProgress ,
43+ ToolCallStart ,
44+ UserMessageChunk ,
45+ WaitForTerminalExitResponse ,
46+ WriteTextFileResponse ,
2947)
3048
3149
3250class ExampleClient (Client ):
33- async def requestPermission (self , params ): # type: ignore[override]
51+ async def request_permission (
52+ self , options : list [PermissionOption ], session_id : str , tool_call : ToolCall , ** kwargs : Any
53+ ) -> RequestPermissionResponse :
3454 raise RequestError .method_not_found ("session/request_permission" )
3555
36- async def writeTextFile (self , params ): # type: ignore[override]
56+ async def write_text_file (
57+ self , content : str , path : str , session_id : str , ** kwargs : Any
58+ ) -> WriteTextFileResponse | None :
3759 raise RequestError .method_not_found ("fs/write_text_file" )
3860
39- async def readTextFile (self , params ): # type: ignore[override]
61+ async def read_text_file (
62+ self , path : str , session_id : str , limit : int | None = None , line : int | None = None , ** kwargs : Any
63+ ) -> ReadTextFileResponse :
4064 raise RequestError .method_not_found ("fs/read_text_file" )
4165
42- async def createTerminal (self , params ): # type: ignore[override]
66+ async def create_terminal (
67+ self ,
68+ command : str ,
69+ session_id : str ,
70+ args : list [str ] | None = None ,
71+ cwd : str | None = None ,
72+ env : list [EnvVariable ] | None = None ,
73+ output_byte_limit : int | None = None ,
74+ ** kwargs : Any ,
75+ ) -> CreateTerminalResponse :
4376 raise RequestError .method_not_found ("terminal/create" )
4477
45- async def terminalOutput (self , params ): # type: ignore[override]
78+ async def terminal_output (self , session_id : str , terminal_id : str , ** kwargs : Any ) -> TerminalOutputResponse :
4679 raise RequestError .method_not_found ("terminal/output" )
4780
48- async def releaseTerminal (self , params ): # type: ignore[override]
81+ async def release_terminal (
82+ self , session_id : str , terminal_id : str , ** kwargs : Any
83+ ) -> ReleaseTerminalResponse | None :
4984 raise RequestError .method_not_found ("terminal/release" )
5085
51- async def waitForTerminalExit (self , params ): # type: ignore[override]
86+ async def wait_for_terminal_exit (
87+ self , session_id : str , terminal_id : str , ** kwargs : Any
88+ ) -> WaitForTerminalExitResponse :
5289 raise RequestError .method_not_found ("terminal/wait_for_exit" )
5390
54- async def killTerminal (self , params ): # type: ignore[override]
91+ async def kill_terminal (
92+ self , session_id : str , terminal_id : str , ** kwargs : Any
93+ ) -> KillTerminalCommandResponse | None :
5594 raise RequestError .method_not_found ("terminal/kill" )
5695
57- async def sessionUpdate (self , params : SessionNotification ) -> None :
58- update = params .update
96+ async def session_update (
97+ self ,
98+ session_id : str ,
99+ update : UserMessageChunk
100+ | AgentMessageChunk
101+ | AgentThoughtChunk
102+ | ToolCallStart
103+ | ToolCallProgress
104+ | AgentPlanUpdate
105+ | AvailableCommandsUpdate
106+ | CurrentModeUpdate ,
107+ ** kwargs : Any ,
108+ ) -> None :
59109 if not isinstance (update , AgentMessageChunk ):
60110 return
61111
@@ -76,10 +126,10 @@ async def sessionUpdate(self, params: SessionNotification) -> None:
76126
77127 print (f"| Agent: { text } " )
78128
79- async def extMethod (self , method : str , params : dict ) -> dict : # noqa: ARG002
129+ async def ext_method (self , method : str , params : dict ) -> dict :
80130 raise RequestError .method_not_found (method )
81131
82- async def extNotification (self , method : str , params : dict ) -> None : # noqa: ARG002
132+ async def ext_notification (self , method : str , params : dict ) -> None :
83133 raise RequestError .method_not_found (method )
84134
85135
@@ -103,10 +153,8 @@ async def interactive_loop(conn: ClientSideConnection, session_id: str) -> None:
103153
104154 try :
105155 await conn .prompt (
106- PromptRequest (
107- session_id = session_id ,
108- prompt = [text_block (line )],
109- )
156+ session_id = session_id ,
157+ prompt = [text_block (line )],
110158 )
111159 except Exception as exc : # noqa: BLE001
112160 logging .error ("Prompt failed: %s" , exc )
@@ -145,13 +193,11 @@ async def main(argv: list[str]) -> int:
145193 conn = ClientSideConnection (lambda _agent : client_impl , proc .stdin , proc .stdout )
146194
147195 await conn .initialize (
148- InitializeRequest (
149- protocol_version = PROTOCOL_VERSION ,
150- client_capabilities = ClientCapabilities (),
151- client_info = Implementation (name = "example-client" , title = "Example Client" , version = "0.1.0" ),
152- )
196+ protocol_version = PROTOCOL_VERSION ,
197+ client_capabilities = ClientCapabilities (),
198+ client_info = Implementation (name = "example-client" , title = "Example Client" , version = "0.1.0" ),
153199 )
154- session = await conn .newSession ( NewSessionRequest ( mcp_servers = [], cwd = os .getcwd () ))
200+ session = await conn .new_session ( mcp_servers = [], cwd = os .getcwd ())
155201
156202 await interactive_loop (conn , session .session_id )
157203
0 commit comments