Skip to content

v0.2.2

Latest

Choose a tag to compare

@github-actions github-actions released this 10 Apr 09:03
6029b37

Feature: session filesystem support across all four SDKs

The sessionFs feature introduced earlier in Node.js is now available across .NET, Go, and Python too, so you can redirect session-scoped storage (events, checkpoints, temp files, workspace state) to your own backing store instead of the runtime's default local filesystem. This is especially useful for serverless and multi-tenant hosts. (#1036)

// TypeScript
const client = new CopilotClient({
  sessionFs: { initialCwd: "/", sessionStatePath: "/s", conventions: "posix" },
});

const session = await client.createSession({
    createSessionFsHandler: () => ({ readFile: async () => "...", writeFile: async () => { /* ... */ }, /* ... */ })
});
// C#
var client = new CopilotClient(new CopilotClientOptions {
    SessionFs = new()
    {
        InitialCwd = "/",
        SessionStatePath = "/",
        Conventions = SessionFsSetProviderRequestConventions.Posix
    }
});

var session = await client.CreateSessionAsync(new SessionConfig
{
    CreateSessionFsHandler = _ => new MySessionFsHandler(/* ... */) // e.g., map to in-memory storage, etc
});

For a full end-to-end sample of a multi-user hosted system using sessionFs, see https://github.com/github/copilot-sdk-server-sample

Feature: override model capabilities when creating a session or switching models

All SDKs can now override individual model capabilities such as vision support without replacing the full capabilities object. This makes BYOK and custom-provider scenarios easier, and lets you change behavior mid-session with setModel/SetModelAsync. (#1029)

const session = await client.createSession({
  modelCapabilities: { supports: { vision: false } },
});
await session.setModel("claude-sonnet-4.5", { modelCapabilities: { supports: { vision: true } } });
await session.SetModelAsync("claude-sonnet-4.5", reasoningEffort: null,
    modelCapabilities: new ModelCapabilitiesOverride { Supports = new ModelCapabilitiesOverrideSupports { Vision = true } });

Feature: enableConfigDiscovery for automatic MCP and skill discovery

All SDKs now expose enableConfigDiscovery, allowing the runtime to automatically discover MCP server configs and skill directories from the working directory and merge them with any explicitly supplied configuration. Explicit values still win on name collisions. (#1044)

const session = await client.createSession({
  enableConfigDiscovery: true,
});
var session = await client.CreateSessionAsync(new SessionConfig {
    EnableConfigDiscovery = true,
});

Improvement: safer per-event data types in Go

The Go SDK no longer flattens all session event payloads into one giant optional struct. event.Data is now a per-event typed interface, so adding a new event type no longer risks silently changing the shape of existing ones. (#1037)

switch d := event.Data.(type) {
case *copilot.AssistantMessageData:
    fmt.Println(d.Content)
}

⚠️ Breaking change (Go): event.Data is now a SessionEventData interface rather than a flat struct, so consumers must use type assertions or type switches. This update also applies some Go-style initialism renames such as UiUI and UriURI.

Other changes

  • bugfix: [.NET] [Go] ignore unknown hook types from newer CLI versions instead of failing the session, improving forward compatibility with runtime updates (#1013)
  • improvement: [Go] harden the internal JSON-RPC transport and framing logic, including stricter protocol validation and better handling of exact error payload JSON (#949)