Skip to content

Commit 416f614

Browse files
Add changelog for v0.1.31 (#705)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 5fbd145 commit 416f614

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

CHANGELOG.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,58 @@ All notable changes to the Copilot SDK are documented in this file.
55
This changelog is automatically generated by an AI agent when stable releases are published.
66
See [GitHub Releases](https://github.com/github/copilot-sdk/releases) for the full list.
77

8+
## [v0.1.31](https://github.com/github/copilot-sdk/releases/tag/v0.1.31) (2026-03-07)
9+
10+
### Feature: multi-client tool and permission broadcasts (protocol v3)
11+
12+
The SDK now uses protocol version 3, where the runtime broadcasts `external_tool.requested` and `permission.requested` as session events to all connected clients. This enables multi-client architectures where different clients contribute different tools, or where multiple clients observe the same permission prompts — if one client approves, all clients see the result. Your existing tool and permission handler code is unchanged. ([#686](https://github.com/github/copilot-sdk/pull/686))
13+
14+
```ts
15+
// Two clients each register different tools; the agent can use both
16+
const session1 = await client1.createSession({
17+
tools: [defineTool("search", { handler: doSearch })],
18+
onPermissionRequest: approveAll,
19+
});
20+
const session2 = await client2.resumeSession(session1.id, {
21+
tools: [defineTool("analyze", { handler: doAnalyze })],
22+
onPermissionRequest: approveAll,
23+
});
24+
```
25+
26+
```cs
27+
var session1 = await client1.CreateSessionAsync(new SessionConfig {
28+
Tools = [AIFunctionFactory.Create(DoSearch, "search")],
29+
OnPermissionRequest = PermissionHandlers.ApproveAll,
30+
});
31+
var session2 = await client2.ResumeSessionAsync(session1.Id, new ResumeSessionConfig {
32+
Tools = [AIFunctionFactory.Create(DoAnalyze, "analyze")],
33+
OnPermissionRequest = PermissionHandlers.ApproveAll,
34+
});
35+
```
36+
37+
### Feature: strongly-typed `PermissionRequestResultKind` for .NET and Go
38+
39+
Rather than comparing `result.Kind` against undiscoverable magic strings like `"approved"` or `"denied-interactively-by-user"`, .NET and Go now provide typed constants. Node and Python already had typed unions for this; this brings full parity. ([#631](https://github.com/github/copilot-sdk/pull/631))
40+
41+
```cs
42+
session.OnPermissionCompleted += (e) => {
43+
if (e.Result.Kind == PermissionRequestResultKind.Approved) { /* ... */ }
44+
if (e.Result.Kind == PermissionRequestResultKind.DeniedInteractivelyByUser) { /* ... */ }
45+
};
46+
```
47+
48+
```go
49+
// Go: PermissionKindApproved, PermissionKindDeniedByRules,
50+
// PermissionKindDeniedCouldNotRequestFromUser, PermissionKindDeniedInteractivelyByUser
51+
if result.Kind == copilot.PermissionKindApproved { /* ... */ }
52+
```
53+
54+
### Other changes
55+
56+
- feature: **[Python]** **[Go]** add `get_last_session_id()` / `GetLastSessionID()` for SDK-wide parity (was already available in Node and .NET) ([#671](https://github.com/github/copilot-sdk/pull/671))
57+
- improvement: **[Python]** add `timeout` parameter to generated RPC methods, allowing callers to override the default 30s timeout for long-running operations ([#681](https://github.com/github/copilot-sdk/pull/681))
58+
- bugfix: **[Go]** `PermissionRequest` fields are now properly typed (`ToolName`, `Diff`, `Path`, etc.) instead of a generic `Extra map[string]any` catch-all ([#685](https://github.com/github/copilot-sdk/pull/685))
59+
860
## [v0.1.30](https://github.com/github/copilot-sdk/releases/tag/v0.1.30) (2026-03-03)
961

1062
### Feature: support overriding built-in tools

0 commit comments

Comments
 (0)