Skip to content

Commit b80af48

Browse files
Phase I: update README + docs for new Python SDK API
Mirrors PR #1357 Phase K (TypeScript SDK API review): every Python code snippet under \docs/\ and the \python/README.md\ now uses the post-Phase-B/F/G/H public API: * `CopilotClient()` / `CopilotClient(CopilotClientOptions(connection=RuntimeConnection.uri/stdio/tcp(...), ...))` in place of `SubprocessConfig` / `ExternalServerConfig` * `PermissionDecisionApproveOnce()`, `PermissionDecisionReject(feedback=...)`, `PermissionDecisionUserNotAvailable()`, `PermissionNoResult()` in place of `PermissionRequestResult(kind=...)` * `base_directory` (was `copilot_home`) * `enable_remote_sessions` (was `remote`) * `on_exit_plan_mode_request` / `on_auto_mode_switch_request` * `session.get_events()` (was `get_messages`) * `client.on_lifecycle(...)` (was `client.on`) * `max_prompt_tokens` (was `max_input_tokens`) * snake_case dataclass attribute accesses (\session_id\, \start_time\, \modified_time\, \is_remote\, \git_root\, \protocol_version\) TypeScript / Go / C# / Rust / Java snippets in the same files are untouched. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent b23e8dc commit b80af48

11 files changed

Lines changed: 78 additions & 78 deletions

File tree

docs/features/custom-agents.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,13 @@ const session = await client.createSession({
6464
<summary><strong>Python</strong></summary>
6565

6666
```python
67-
from copilot import CopilotClient
68-
from copilot.session import PermissionRequestResult
67+
from copilot import CopilotClient, PermissionDecisionApproveOnce
6968

7069
client = CopilotClient()
7170
await client.start()
7271

7372
session = await client.create_session(
74-
on_permission_request=lambda req, inv: PermissionRequestResult(kind="approve-once"),
73+
on_permission_request=lambda req, inv: PermissionDecisionApproveOnce(),
7574
model="gpt-4.1",
7675
custom_agents=[
7776
{

docs/features/hooks.md

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,13 @@ const session = await client.createSession({
6060
<summary><strong>Python</strong></summary>
6161

6262
```python
63-
from copilot import CopilotClient
64-
from copilot.session import PermissionRequestResult
63+
from copilot import CopilotClient, PermissionDecisionApproveOnce
6564

6665
client = CopilotClient()
6766
await client.start()
6867

6968
session = await client.create_session(
70-
on_permission_request=lambda req, inv: PermissionRequestResult(kind="approve-once"),
69+
on_permission_request=lambda req, inv: PermissionDecisionApproveOnce(),
7170
hooks={
7271
"on_session_start": on_session_start,
7372
"on_pre_tool_use": on_pre_tool_use,
@@ -262,7 +261,7 @@ const session = await client.createSession({
262261
<summary><strong>Python</strong></summary>
263262

264263
```python
265-
from copilot.session import PermissionRequestResult
264+
from copilot import PermissionDecisionApproveOnce
266265

267266
READ_ONLY_TOOLS = ["read_file", "glob", "grep", "view"]
268267

@@ -276,7 +275,7 @@ async def on_pre_tool_use(input_data, invocation):
276275
return {"permissionDecision": "allow"}
277276

278277
session = await client.create_session(
279-
on_permission_request=lambda req, inv: PermissionRequestResult(kind="approve-once"),
278+
on_permission_request=lambda req, inv: PermissionDecisionApproveOnce(),
280279
hooks={"on_pre_tool_use": on_pre_tool_use},
281280
)
282281
```
@@ -578,7 +577,7 @@ const session = await client.createSession({
578577
<!-- docs-validate: skip -->
579578
```python
580579
import json, aiofiles
581-
from copilot.session import PermissionRequestResult
580+
from copilot import PermissionDecisionApproveOnce
582581

583582
audit_log = []
584583

@@ -630,7 +629,7 @@ async def on_session_end(input_data, invocation):
630629
return None
631630

632631
session = await client.create_session(
633-
on_permission_request=lambda req, inv: PermissionRequestResult(kind="approve-once"),
632+
on_permission_request=lambda req, inv: PermissionDecisionApproveOnce(),
634633
hooks={
635634
"on_session_start": on_session_start,
636635
"on_user_prompt_submitted": on_user_prompt_submitted,
@@ -709,7 +708,7 @@ const session = await client.createSession({
709708

710709
```python
711710
import subprocess
712-
from copilot.session import PermissionRequestResult
711+
from copilot import PermissionDecisionApproveOnce
713712

714713
async def on_session_end(input_data, invocation):
715714
sid = invocation["session_id"][:8]
@@ -728,7 +727,7 @@ async def on_error_occurred(input_data, invocation):
728727
return None
729728

730729
session = await client.create_session(
731-
on_permission_request=lambda req, inv: PermissionRequestResult(kind="approve-once"),
730+
on_permission_request=lambda req, inv: PermissionDecisionApproveOnce(),
732731
hooks={
733732
"on_session_end": on_session_end,
734733
"on_error_occurred": on_error_occurred,
@@ -932,7 +931,7 @@ const session = await client.createSession({
932931
<summary><strong>Python</strong></summary>
933932

934933
```python
935-
from copilot.session import PermissionRequestResult
934+
from copilot import PermissionDecisionApproveOnce
936935

937936
session_metrics = {}
938937

@@ -963,7 +962,7 @@ async def on_session_end(input_data, invocation):
963962
return None
964963

965964
session = await client.create_session(
966-
on_permission_request=lambda req, inv: PermissionRequestResult(kind="approve-once"),
965+
on_permission_request=lambda req, inv: PermissionDecisionApproveOnce(),
967966
hooks={
968967
"on_session_start": on_session_start,
969968
"on_user_prompt_submitted": on_user_prompt_submitted,

docs/features/image-input.md

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,13 @@ await session.send({
6868
<summary><strong>Python</strong></summary>
6969

7070
```python
71-
from copilot import CopilotClient
72-
from copilot.session import PermissionRequestResult
71+
from copilot import CopilotClient, PermissionDecisionApproveOnce
7372

7473
client = CopilotClient()
7574
await client.start()
7675

7776
session = await client.create_session(
78-
on_permission_request=lambda req, inv: PermissionRequestResult(kind="approve-once"),
77+
on_permission_request=lambda req, inv: PermissionDecisionApproveOnce(),
7978
model="gpt-4.1",
8079
)
8180

@@ -286,14 +285,13 @@ await session.send({
286285
<summary><strong>Python</strong></summary>
287286

288287
```python
289-
from copilot import CopilotClient
290-
from copilot.session import PermissionRequestResult
288+
from copilot import CopilotClient, PermissionDecisionApproveOnce
291289

292290
client = CopilotClient()
293291
await client.start()
294292

295293
session = await client.create_session(
296-
on_permission_request=lambda req, inv: PermissionRequestResult(kind="approve-once"),
294+
on_permission_request=lambda req, inv: PermissionDecisionApproveOnce(),
297295
model="gpt-4.1",
298296
)
299297

docs/features/remote-sessions.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ session.on("session.info", (event) => {
3838

3939
<!-- docs-validate: skip -->
4040
```python
41-
from copilot import CopilotClient, SubprocessConfig
41+
from copilot import CopilotClient, CopilotClientOptions
4242

43-
client = CopilotClient(SubprocessConfig(remote=True))
43+
client = CopilotClient(CopilotClientOptions(enable_remote_sessions=True))
4444
session = await client.create_session(
4545
working_directory="/path/to/github-repo",
4646
on_permission_request=lambda req: {"allowed": True},

docs/features/skills.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,14 @@ await session.sendAndWait({ prompt: "Review this code for security issues" });
4242
<summary><strong>Python</strong></summary>
4343

4444
```python
45-
from copilot import CopilotClient
46-
from copilot.session import PermissionRequestResult
45+
from copilot import CopilotClient, PermissionDecisionApproveOnce
4746

4847
async def main():
4948
client = CopilotClient()
5049
await client.start()
5150

5251
session = await client.create_session(
53-
on_permission_request=lambda req, inv: PermissionRequestResult(kind="approve-once"),
52+
on_permission_request=lambda req, inv: PermissionDecisionApproveOnce(),
5453
model="gpt-4.1",
5554
skill_directories=[
5655
"./skills/code-review",

docs/features/steering-and-queueing.md

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,14 @@ await session.send({
6969
<summary><strong>Python</strong></summary>
7070

7171
```python
72-
from copilot import CopilotClient
73-
from copilot.session import PermissionRequestResult
72+
from copilot import CopilotClient, PermissionDecisionApproveOnce
7473

7574
async def main():
7675
client = CopilotClient()
7776
await client.start()
7877

7978
session = await client.create_session(
80-
on_permission_request=lambda req, inv: PermissionRequestResult(kind="approve-once"),
79+
on_permission_request=lambda req, inv: PermissionDecisionApproveOnce(),
8180
model="gpt-4.1",
8281
)
8382

@@ -261,15 +260,14 @@ await session.send({
261260
<summary><strong>Python</strong></summary>
262261

263262
```python
264-
from copilot import CopilotClient
265-
from copilot.session import PermissionRequestResult
263+
from copilot import CopilotClient, PermissionDecisionApproveOnce
266264

267265
async def main():
268266
client = CopilotClient()
269267
await client.start()
270268

271269
session = await client.create_session(
272-
on_permission_request=lambda req, inv: PermissionRequestResult(kind="approve-once"),
270+
on_permission_request=lambda req, inv: PermissionDecisionApproveOnce(),
273271
model="gpt-4.1",
274272
)
275273

@@ -502,7 +500,7 @@ await session.send({
502500

503501
```python
504502
session = await client.create_session(
505-
on_permission_request=lambda req, inv: PermissionRequestResult(kind="approve-once"),
503+
on_permission_request=lambda req, inv: PermissionDecisionApproveOnce(),
506504
model="gpt-4.1",
507505
)
508506

docs/getting-started.md

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -665,13 +665,12 @@ unsubscribeIdle();
665665

666666
<!-- docs-validate: hidden -->
667667
```python
668-
from copilot import CopilotClient
668+
from copilot import CopilotClient, PermissionDecisionApproveOnce
669669
from copilot.generated.session_events import SessionEvent, SessionEventType
670-
from copilot.session import PermissionRequestResult
671670

672671
client = CopilotClient()
673672

674-
session = await client.create_session(on_permission_request=lambda req, inv: PermissionRequestResult(kind="approve-once"))
673+
session = await client.create_session(on_permission_request=lambda req, inv: PermissionDecisionApproveOnce())
675674

676675
# Subscribe to all events
677676
unsubscribe = session.on(lambda event: print(f"Event: {event.type}"))
@@ -1968,12 +1967,12 @@ const session = await client.createSession({ onPermissionRequest: approveAll });
19681967
<summary><strong>Python</strong></summary>
19691968

19701969
```python
1971-
from copilot import CopilotClient
1970+
from copilot import CopilotClient, CopilotClientOptions, RuntimeConnection
19721971
from copilot.session import PermissionHandler
19731972

1974-
client = CopilotClient({
1975-
"cli_url": "localhost:4321"
1976-
})
1973+
client = CopilotClient(CopilotClientOptions(
1974+
connection=RuntimeConnection.uri("localhost:4321"),
1975+
))
19771976
await client.start()
19781977

19791978
# Use the client normally
@@ -2138,9 +2137,9 @@ Optional peer dependency: `@opentelemetry/api`
21382137

21392138
<!-- docs-validate: skip -->
21402139
```python
2141-
from copilot import CopilotClient, SubprocessConfig
2140+
from copilot import CopilotClient, CopilotClientOptions
21422141

2143-
client = CopilotClient(SubprocessConfig(
2142+
client = CopilotClient(CopilotClientOptions(
21442143
telemetry={
21452144
"otlp_endpoint": "http://localhost:4318",
21462145
},

docs/observability/opentelemetry.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ const client = new CopilotClient({
2727

2828
<!-- docs-validate: skip -->
2929
```python
30-
from copilot import CopilotClient, SubprocessConfig
30+
from copilot import CopilotClient, CopilotClientOptions
3131

32-
client = CopilotClient(SubprocessConfig(
32+
client = CopilotClient(CopilotClientOptions(
3333
telemetry={
3434
"otlp_endpoint": "http://localhost:4318",
3535
},

docs/setup/backend-services.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,12 @@ res.json({ content: response?.data.content });
144144
<summary><strong>Python</strong></summary>
145145

146146
```python
147-
from copilot import CopilotClient, ExternalServerConfig
147+
from copilot import CopilotClient, CopilotClientOptions, RuntimeConnection
148148
from copilot.session import PermissionHandler
149149

150-
client = CopilotClient(ExternalServerConfig(url="localhost:4321"))
150+
client = CopilotClient(CopilotClientOptions(
151+
connection=RuntimeConnection.uri("localhost:4321"),
152+
))
151153
await client.start()
152154

153155
session = await client.create_session(on_permission_request=PermissionHandler.approve_all, model="gpt-4.1", session_id=f"user-{user_id}-{int(time.time())}")

docs/troubleshooting/debugging.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ const client = new CopilotClient({
3232
<summary><strong>Python</strong></summary>
3333

3434
```python
35-
from copilot import CopilotClient
35+
from copilot import CopilotClient, CopilotClientOptions
3636

37-
client = CopilotClient({"log_level": "debug"})
37+
client = CopilotClient(CopilotClientOptions(log_level="debug"))
3838
```
3939

4040
</details>
@@ -131,7 +131,7 @@ const client = new CopilotClient({
131131
```
132132

133133
> [!NOTE]
134-
> Python SDK logging configuration is limited. For advanced logging, run the CLI manually with `--log-dir` and connect via `cli_url`.
134+
> Python SDK logging configuration is limited. For advanced logging, run the CLI manually with `--log-dir` and connect via `RuntimeConnection.uri(...)`.
135135
136136
</details>
137137

0 commit comments

Comments
 (0)