Skip to content

Commit 61ae1f4

Browse files
author
Chojan Shang
committed
fix: correct default value
Signed-off-by: Chojan Shang <chojan.shang@vesoft.com>
1 parent 8bd4e8d commit 61ae1f4

File tree

4 files changed

+65
-83
lines changed

4 files changed

+65
-83
lines changed

README.md

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -34,53 +34,60 @@ Prefer a step-by-step walkthrough? Read the [Quickstart guide](docs/quickstart.m
3434

3535
Embed the agent inside another Python process without spawning your own pipes:
3636

37+
```python
38+
import asyncio
39+
import sys
40+
from pathlib import Path
41+
42+
from acp import spawn_agent_process
43+
from acp.schema import InitializeRequest, NewSessionRequest, PromptRequest, TextContentBlock
44+
45+
46+
async def main() -> None:
47+
agent_script = Path("examples/echo_agent.py")
48+
async with spawn_agent_process(lambda _agent: YourClient(), sys.executable, str(agent_script)) as (conn, _proc):
49+
await conn.initialize(InitializeRequest(protocolVersion=1))
50+
session = await conn.newSession(NewSessionRequest(cwd=str(agent_script.parent), mcpServers=[]))
51+
await conn.prompt(
52+
PromptRequest(
53+
sessionId=session.sessionId,
54+
prompt=[TextContentBlock(type="text", text="Hello!")],
55+
)
56+
)
57+
58+
59+
asyncio.run(main())
60+
```
61+
62+
`spawn_client_process` mirrors this pattern for the inverse direction.
63+
64+
### Minimal agent sketch
65+
3766
```python
3867
import asyncio
3968

4069
from acp import (
4170
Agent,
4271
AgentSideConnection,
43-
AuthenticateRequest,
44-
AuthenticateResponse,
45-
CancelNotification,
4672
InitializeRequest,
4773
InitializeResponse,
48-
LoadSessionRequest,
49-
LoadSessionResponse,
5074
NewSessionRequest,
5175
NewSessionResponse,
5276
PromptRequest,
5377
PromptResponse,
54-
SetSessionModeRequest,
55-
SetSessionModeResponse,
56-
stdio_streams,
57-
PROTOCOL_VERSION,
58-
)
59-
from acp.schema import (
60-
AgentCapabilities,
61-
AgentMessageChunk,
62-
McpCapabilities,
63-
PromptCapabilities,
6478
SessionNotification,
65-
TextContentBlock,
79+
stdio_streams,
6680
)
81+
from acp.schema import TextContentBlock, AgentMessageChunk
82+
6783

6884
class EchoAgent(Agent):
6985
def __init__(self, conn):
7086
self._conn = conn
7187

7288
async def initialize(self, params: InitializeRequest) -> InitializeResponse:
73-
mcp_caps: McpCapabilities = McpCapabilities(http=False, sse=False)
74-
prompt_caps: PromptCapabilities = PromptCapabilities(audio=False, embeddedContext=False, image=False)
75-
agent_caps: AgentCapabilities = AgentCapabilities(
76-
loadSession=False,
77-
mcpCapabilities=mcp_caps,
78-
promptCapabilities=prompt_caps,
79-
)
80-
return InitializeResponse(
81-
protocolVersion=PROTOCOL_VERSION,
82-
agentCapabilities=agent_caps,
83-
)
89+
return InitializeResponse(protocolVersion=params.protocolVersion)
90+
8491
async def newSession(self, params: NewSessionRequest) -> NewSessionResponse:
8592
return NewSessionResponse(sessionId="sess-1")
8693

examples/echo_agent.py

Lines changed: 3 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,16 @@
11
import asyncio
22

3-
from acp import (
4-
Agent,
5-
AgentSideConnection,
6-
AuthenticateRequest,
7-
AuthenticateResponse,
8-
CancelNotification,
9-
InitializeRequest,
10-
InitializeResponse,
11-
LoadSessionRequest,
12-
LoadSessionResponse,
13-
NewSessionRequest,
14-
NewSessionResponse,
15-
PromptRequest,
16-
PromptResponse,
17-
SetSessionModeRequest,
18-
SetSessionModeResponse,
19-
stdio_streams,
20-
PROTOCOL_VERSION,
21-
)
22-
from acp.schema import (
23-
AgentCapabilities,
24-
AgentMessageChunk,
25-
McpCapabilities,
26-
PromptCapabilities,
27-
SessionNotification,
28-
TextContentBlock,
29-
)
3+
from acp import Agent, AgentSideConnection, PromptRequest, PromptResponse, SessionNotification, stdio_streams
4+
from acp.schema import AgentMessageChunk, TextContentBlock
305

316

327
class EchoAgent(Agent):
338
def __init__(self, conn):
349
self._conn = conn
3510

36-
async def initialize(self, params: InitializeRequest) -> InitializeResponse:
37-
mcp_caps: McpCapabilities = McpCapabilities(http=False, sse=False)
38-
prompt_caps: PromptCapabilities = PromptCapabilities(audio=False, embeddedContext=False, image=False)
39-
agent_caps: AgentCapabilities = AgentCapabilities(
40-
loadSession=False,
41-
mcpCapabilities=mcp_caps,
42-
promptCapabilities=prompt_caps,
43-
)
44-
return InitializeResponse(
45-
protocolVersion=PROTOCOL_VERSION,
46-
agentCapabilities=agent_caps,
47-
)
48-
49-
async def newSession(self, params: NewSessionRequest) -> NewSessionResponse:
50-
return NewSessionResponse(sessionId="sess-1")
51-
5211
async def prompt(self, params: PromptRequest) -> PromptResponse:
5312
for block in params.prompt:
54-
text = block.get("text", "") if isinstance(block, dict) else getattr(block, "text", "")
13+
text = getattr(block, "text", "")
5514
await self._conn.sessionUpdate(
5615
SessionNotification(
5716
sessionId=params.sessionId,

scripts/gen_schema.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,24 @@
7474
)
7575

7676
DEFAULT_VALUE_OVERRIDES: tuple[tuple[str, str, str], ...] = (
77-
("AgentCapabilities", "mcpCapabilities", "None"),
78-
("AgentCapabilities", "promptCapabilities", "None"),
79-
("ClientCapabilities", "fs", "None"),
80-
("ClientCapabilities", "terminal", "None"),
81-
("InitializeRequest", "clientCapabilities", "None"),
82-
("InitializeResponse", "agentCapabilities", "None"),
77+
("AgentCapabilities", "mcpCapabilities", "McpCapabilities(http=False, sse=False)"),
78+
(
79+
"AgentCapabilities",
80+
"promptCapabilities",
81+
"PromptCapabilities(audio=False, embeddedContext=False, image=False)",
82+
),
83+
("ClientCapabilities", "fs", "FileSystemCapability(readTextFile=False, writeTextFile=False)"),
84+
("ClientCapabilities", "terminal", "False"),
85+
(
86+
"InitializeRequest",
87+
"clientCapabilities",
88+
"ClientCapabilities(fs=FileSystemCapability(readTextFile=False, writeTextFile=False), terminal=False)",
89+
),
90+
(
91+
"InitializeResponse",
92+
"agentCapabilities",
93+
"AgentCapabilities(loadSession=False, mcpCapabilities=McpCapabilities(http=False, sse=False), promptCapabilities=PromptCapabilities(audio=False, embeddedContext=False, image=False))",
94+
),
8395
)
8496

8597

src/acp/schema.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -402,11 +402,11 @@ class AgentCapabilities(BaseModel):
402402
mcpCapabilities: Annotated[
403403
Optional[McpCapabilities],
404404
Field(description="MCP capabilities supported by the agent."),
405-
] = None
405+
] = McpCapabilities(http=False, sse=False)
406406
promptCapabilities: Annotated[
407407
Optional[PromptCapabilities],
408408
Field(description="Prompt capabilities supported by the agent."),
409-
] = None
409+
] = PromptCapabilities(audio=False, embeddedContext=False, image=False)
410410

411411

412412
class Annotations(BaseModel):
@@ -476,11 +476,11 @@ class ClientCapabilities(BaseModel):
476476
Field(
477477
description="File system capabilities supported by the client.\nDetermines which file operations the agent can request."
478478
),
479-
] = None
479+
] = FileSystemCapability(readTextFile=False, writeTextFile=False)
480480
terminal: Annotated[
481481
Optional[bool],
482482
Field(description="Whether the Client support all `terminal/*` methods."),
483-
] = None
483+
] = False
484484

485485

486486
class TextContentBlock(BaseModel):
@@ -575,7 +575,7 @@ class InitializeRequest(BaseModel):
575575
clientCapabilities: Annotated[
576576
Optional[ClientCapabilities],
577577
Field(description="Capabilities supported by the client."),
578-
] = None
578+
] = ClientCapabilities(fs=FileSystemCapability(readTextFile=False, writeTextFile=False), terminal=False)
579579
protocolVersion: Annotated[
580580
int,
581581
Field(
@@ -594,7 +594,11 @@ class InitializeResponse(BaseModel):
594594
agentCapabilities: Annotated[
595595
Optional[AgentCapabilities],
596596
Field(description="Capabilities supported by the agent."),
597-
] = None
597+
] = AgentCapabilities(
598+
loadSession=False,
599+
mcpCapabilities=McpCapabilities(http=False, sse=False),
600+
promptCapabilities=PromptCapabilities(audio=False, embeddedContext=False, image=False),
601+
)
598602
authMethods: Annotated[
599603
Optional[List[AuthMethod]],
600604
Field(description="Authentication methods supported by the agent."),

0 commit comments

Comments
 (0)