Releases: github/copilot-sdk
v1.0.2
Feature: opt-in memory for sessions
Sessions can now be configured with persistent memory, allowing the agent to recall information across turns. Set memory: { enabled: true } when creating or resuming a session; when omitted the runtime default applies. (#1617)
const session = await client.createSession({
memory: { enabled: true },
});var session = await client.CreateSessionAsync(new SessionConfig
{
Memory = new MemoryConfiguration { Enabled = true }
});Feature: defer parameter for tool definitions
Tools now support a defer option controlling whether they are pre-loaded eagerly or surfaced lazily through tool search. Use "auto" (the default) to allow lazy loading, or "never" to force pre-loading. (#1632)
defineTool("lookup_issue", {
description: "Fetch issue details",
parameters: z.object({ id: z.string() }),
defer: "auto",
handler: async ({ id }) => { /* ... */ },
});var tool = CopilotTool.DefineTool(
async ([Description("Issue ID")] string id) => { /* ... */ },
toolOptions: new CopilotToolOptions { Defer = CopilotToolDefer.Auto });Other changes
- feature: [All SDKs] add
otlpProtocoltelemetry option ("http/json"or"http/protobuf") for configuring OTLP export transport (#1648) - feature: [All SDKs] surface
ModelBilling.tokenPriceson public SDK types, exposing per-tier input/output/cache pricing and context window limits (#1633) - improvement: [All SDKs] call
runtime.shutdownduring normal client stop for deterministic OTEL telemetry flush before process cleanup (#1667) - improvement: [Go] thread
context.Contextthrough the JSON-RPC request path for proper cancellation support (#1643) - improvement: [Java] add
getOpenCanvases()toCopilotSessionto track currently open canvas instances, matching the other SDKs (#1606) - improvement: [Java] rename
SystemPromptSectionstoSystemMessageSectionsfor cross-SDK consistency; old class deprecated withforRemoval=true(#1683) - bugfix: [Python] round sub-millisecond durations in
to_timedelta_intto avoid serialization errors (#1668) - bugfix: [Rust] skip CLI binary download in
build.rswhenDOCS_RSenv var is set (#1660)
New contributors
@andyfellermade their first contribution in #1631@almaleksiamade their first contribution in #1632@idryzhovmade their first contribution in #1668@scottaddiemade their first contribution in #1636
Generated by Release Changelog Generator · sonnet46 1.8M
rust/v1.0.2
What's Changed
- Bump the java-maven-deps group in /java with 3 updates by @dependabot[bot] in #1613
- Bump the java-codegen-deps group in /java/scripts/codegen with 2 updates by @dependabot[bot] in #1614
- Add open-canvases snapshot tracking to the Java SDK by @jmoseley in #1606
- Add docs style instructions for copilot agents by @sunbrye in #1236
- docs: rename index.md to README.md in docs directories by @andyfeller in #1631
- Make exit_plan_mode E2E snapshot tolerant of reworded CLI tool result by @stephentoub in #1639
- Add
deferparameter to tool definition by @almaleksia in #1632 - Make Go JSON-RPC requests context-aware by @qmuntal in #1643
- Bump esbuild from 0.27.3 to 0.28.1 in /scripts/codegen in the npm_and_yarn group across 1 directory by @dependabot[bot] in #1647
- Add API docs column to Available SDKs table in README by @Copilot in #1662
- Update @github/copilot to 1.0.62 by @github-actions[bot] in #1672
- Add E2E test for session.providerEndpoint.get by @SteveSandersonMS in #1621
- SDK: add optional memory configuration to session create and resume by @Morabbin in #1617
- [E2E] session.todos_changed event + readSqlTodosWithDependencies (6 languages) by @SteveSandersonMS in #1622
- Add graceful runtime shutdown to SDK clients by @stephentoub in #1667
- fix(python): round sub-millisecond durations in to_timedelta_int by @idryzhov in #1668
- Add ADR-005: Ergonomic tool definition via annotation processor by @edburns in #1684
- Add OTLP protocol telemetry options by @loganrosen in #1648
- Bump esbuild from 0.28.0 to 0.28.1 in /java/scripts/codegen by @dependabot[bot] in #1649
- Bump the npm_and_yarn group across 2 directories with 2 updates by @dependabot[bot] in #1681
- Standardize README prerequisites across all SDK languages by @scottaddie in #1636
- Update .NET SDK contribution prerequisite by @scottaddie in #1678
- Update @github/copilot to 1.0.63 by @github-actions[bot] in #1686
- Fix Dependabot security alerts: bump esbuild, tsx, js-yaml by @Copilot in #1685
- Rename SystemPromptSections → SystemMessageSections for cross-SDK consistency by @edburns in #1683
- Surface ModelBilling.tokenPrices on public SDK types by @MackinnonBuck in #1633
- Port
shouldUseReplacedIdentitySectionInResponseE2E test to dotnet, go, nodejs, python, and rust by @Copilot in #1691 - Generate package-info.java for generated packages by @edburns in #1695
- Update @github/copilot to 1.0.64-0 by @github-actions[bot] in #1697
- fix: skip CLI download in build.rs when DOCS_RS env var is set by @Copilot in #1660
- Update Azure managed identity setup docs by @scottaddie in #1712
New Contributors
- @andyfeller made their first contribution in #1631
- @almaleksia made their first contribution in #1632
- @idryzhov made their first contribution in #1668
- @scottaddie made their first contribution in #1636
Full Changelog: rust/v1.0.1...rust/v1.0.2
v1.0.1
Feature: @CopilotExperimental compile-time gate for Java SDK
The Java SDK now ships a @CopilotExperimental annotation and a JSR 269 annotation processor that causes compilation to fail when experimental SDK APIs are referenced without opting in. Annotate a class or method with @AllowCopilotExperimental, or pass -Acopilot.experimental.allowed=true to the compiler to acknowledge the experimental status. (#1601)
// Opt in at the declaration level
`@AllowCopilotExperimental`
public class MyApp {
// experimental SDK types and methods may be used here
}<!-- Or opt in for the entire compilation unit via Maven -->
<compilerArgs>
<arg>-Acopilot.experimental.allowed=true</arg>
</compilerArgs>Other changes
- bugfix: [Node, Python, Go, .NET, Rust]
open_canvasessnapshot now correctly shrinks whensession.canvas.closedis emitted — previously closed canvases were never removed (#1604) - bugfix: [Go] generator no longer produces discriminator accessor names that collide with struct field names (#1596)
- bugfix: [Rust] generator now scopes RPC methods that reference internal schemas as
pub(crate)instead ofpub(#1596) - improvement: [Java] generated types now propagate schema stability and deprecation metadata — experimental items gain
@apiNoteJavadoc and deprecated items gain@Deprecated(#1591)
Generated by Release Changelog Generator · sonnet46 1.9M
rust/v1.0.1
What's Changed
- De-flake builtin_tools E2E tests with a longer send timeout by @stephentoub in #1538
- Update java README with accurate validation steps by @edburns in #1541
- Java SDK: Update
@github/copilotdependency to^1.0.57by @edburns in #1546 - Edburns/remove pr 1524 test java publish update notes to point to docs by @edburns in #1543
- java: disable ModeHandlersTest pending snapshot re-recording (#1547) by @edburns in #1548
- Refine Go SDK pre-GA API surfaces by @qmuntal in #1549
- Resolve Vitest security alerts by @stephentoub in #1550
- Fix MCP E2E send wait race by @stephentoub in #1556
- Cleanup Java README.md by removing outdated sections by @brunoborges in #1558
- Java: make it so deps are correctly updated at release by @edburns in #1560
- Preserve Java commit authorship from standalone repo by @edburns in #1561
- On branch edburns/1511-codeql-quality-and-security by @edburns in #1566
- Bump the java-maven-deps group in /java with 7 updates by @dependabot[bot] in #1568
- Normalize shell completion markers in replay proxy by @stephentoub in #1572
- [java] Update project description and developer information by @brunoborges in #1574
- Include Java in the
@github/copilotversion-bump workflow by @edburns in #1576 - Update Java JaCoCo coverage badge by @github-actions[bot] in #1501
- Java: Fix items from traversal of Phase 08 checklist. Rust came along for the ride for
issue-triageandsdk-consistency-review. by @edburns in #1581 - Java: adr recording decision to keep everything in one module by @edburns in #1588
- Edburns/ghcp 1573 java ensure zod metadata shows thru by @edburns in #1591
- java: eliminate git clone into target/ — use monorepo directly by @edburns in #1592
- Stop compiling Java in dependency update workflow by @stephentoub in #1594
- Fix Go and Rust generator edge cases by @stephentoub in #1596
- Update grep replay snapshot for absolute paths by @stephentoub in #1598
- Fix flaky SessionFs workspace metadata E2E test by @stephentoub in #1599
- Update @github/copilot to 1.0.60 by @github-actions[bot] in #1597
- Handle session.canvas.closed by removing from open_canvases snapshot by @jmoseley in #1604
- Add
@CopilotExperimentalcompile-time gate for experimental APIs by @edburns in #1601 - Add E2E coverage for newly added RPC methods across all SDKs by @stephentoub in #1610
- Update @github/copilot to 1.0.61 by @github-actions[bot] in #1612
- Java codegen: clean output directory before generating to prevent orphan accumulation by @edburns in #1623
Full Changelog: rust/v1.0.0-beta.12...rust/v1.0.1
GitHub Copilot SDK for Java 1.0.1
Installation
vMaj.Min.Micro. For example v0.1.32. The corresponding maven version for the release will be Maj.Min.Micro-java.N, where Maj, Min and Micro are the corresponding numbers for the reference implementation release, and N is a monotonically increasing sequence number starting with 0 for each release. See the corresponding architectural decision record for more information in the docs/adr directory of the source code.
📦 [View on Maven Central]((central.sonatype.com/redacted)
📖 [Documentation]((github.github.io/redacted) · [Javadoc]((github.github.io/redacted)
Maven
<dependency>
<groupId>com.github</groupId>
<artifactId>copilot-sdk-java</artifactId>
<version>1.0.1</version>
</dependency>Gradle (Kotlin DSL)
implementation("com.github:copilot-sdk-java:1.0.1")Gradle (Groovy DSL)
implementation 'com.github:copilot-sdk-java:1.0.1'Feature: @CopilotExperimental compile-time gate for experimental APIs
Experimental SDK APIs are now guarded by the @CopilotExperimental annotation. Using them causes a compile error by default; opt in by annotating the consuming class or method with @AllowCopilotExperimental, or pass -Acopilot.experimental.allowed=true to the Java compiler. (#1601)
`@AllowCopilotExperimental`
public class MyHandler {
// may use `@CopilotExperimental` APIs here
}Feature: open-canvases snapshot on CopilotSession
CopilotSession.getOpenCanvases() now returns the live set of canvas instances open for the session, bringing the Java SDK to parity with the other SDK languages. The snapshot is seeded from the session create/resume response and kept current via session.canvas.opened and session.canvas.closed events. (#1606)
List<OpenCanvasInstance> open = session.getOpenCanvases();Other changes
- improvement: propagate
@Deprecatedand experimental@apiNoteJavadoc annotations from the schema into generated Java types (#1591)
Generated by Release Changelog Generator · sonnet46 1.8M
v1.0.0
What's Changed
- fix(dotnet): Add AOT-safe SetForegroundSessionRequest for SetForegroundSessionIdAsync() by @Encryptoid in #1144
- Update @github/copilot to 1.0.39-0 by @github-actions[bot] in #1157
- Update @github/copilot to 1.0.39 by @github-actions[bot] in #1167
- Update @github/copilot to 1.0.40-0 by @github-actions[bot] in #1171
- Document --host for non-loopback headless connections by @SteveSandersonMS in #1174
- Replace StreamJsonRpc with a custom JSON-RPC implementation in the .NET SDK by @stephentoub in #1170
- Update @github/copilot to 1.0.40-1 by @github-actions[bot] in #1177
- Update @github/copilot to 1.0.40-3 by @github-actions[bot] in #1182
- Update @github/copilot to 1.0.40 by @github-actions[bot] in #1183
- Derive session event envelopes from schema by @stephentoub in #1184
- Expand E2E test coverage across all 4 SDKs by @stephentoub in #1186
- docs: replace non-existent Docker image with build instructions by @patniko in #1189
- docs(python): clarify available_tools/excluded_tools filter all tools, not just built-ins by @loganrosen in #1180
- Add instructionDirectories session config support by @stephentoub in #1190
- Support optional connection token for TCP servers by @SteveSandersonMS in #1176
- feat: add copilotHome option for configurable data directory by @patniko in #1191
- Refine version update logic to allow arbitrary identifiers (e.g., "beta", not just "preview") by @SteveSandersonMS in #1193
- Update @github/copilot to 1.0.41-0 by @github-actions[bot] in #1195
- Stabilize unknown session delete E2E assertions by @stephentoub in #1198
- Expand SDK E2E runtime coverage by @stephentoub in #1197
- Ignore C# Dev Kit *.csproj.lscache files by @MackinnonBuck in #1196
- Update byok.md by @patniko in #1203
- Make agent reload test runtime-compatible by @stephentoub in #1201
- Add offline GitHub proxy for E2E tests by @stephentoub in #1199
- Update @github/copilot to 1.0.41-1 by @github-actions[bot] in #1202
- Harden Extension E2E Tests With --yolo For Permission Gate Compatibility by @MRayermannMSFT in #1204
- Fix .NET client startup cleanup race by @stephentoub in #1206
- Avoid shell kill cwd cleanup flakes by @stephentoub in #1207
- Add provider model and token limit overrides to ProviderConfig by @MackinnonBuck in #966
- Add Rust SDK (technical preview) by @tclem in #1164
- Update @github/copilot to 1.0.42 by @github-actions[bot] in #1211
- Align Rust SDK public surface by @stephentoub in #1212
- Internalize env_value_mode (cross-SDK parity) by @tclem in #1215
- feat: add remote session support across all SDKs by @patniko in #1192
- Fix .NET E2E event capture race by @stephentoub in #1221
- Update @github/copilot to 1.0.43 by @github-actions[bot] in #1218
- Add SDK tracing diagnostics by @stephentoub in #1217
- Add enableSessionTelemetry session option across SDKs by @stephentoub in #1224
- Update @github/copilot to 1.0.44-2 by @github-actions[bot] in #1225
- Docs normalization for the SDK -> Docs pipeline by @sunbrye in #1208
- Use string enums for .NET session events by @stephentoub in #1226
- Restore mode handler APIs across SDKs by @stephentoub in #1228
- feat(rust): support binary tool results by @cschleiden in #1222
- Disable CI workflows on forked repositories by @IeuanWalker in #1232
- Default release publishing to prerelease by @Copilot in #1233
- Fix SDK documentation typos by @stephentoub in #1235
- Unify Rust SDK release with publish.yml workflow by @tclem in #1237
- Update @github/copilot to 1.0.44-3 by @github-actions[bot] in #1239
- Replace Go RPC quicktype generation by @qmuntal in #1234
- fix(go): capture CLI stderr and fix SetProcessDone race by @claudiogodoy99 in #863
- Handle empty session fork behavior in E2E tests by @stephentoub in #1247
- Add Go reference badge to README by @qmuntal in #1253
- Expand Rust E2E coverage by @stephentoub in #1250
- Add Maven Central badge to README by @brunoborges in #1254
- Update README and guide for Rust SDK by @stephentoub in #1259
- Fix C# listFiles E2E ordering assumption by @stephentoub in #1261
- Update @github/copilot to 1.0.45 by @github-actions[bot] in #1263
- Generate typed Go union interfaces by @qmuntal in #1252
- Use z-prefixed Go generated files by @qmuntal in #1268
- Support experimental schema types in codegen by @stephentoub in #1267
- Normalize skill context replay snapshots by @stephentoub in #1269
- Update @github/copilot to 1.0.46 by @github-actions[bot] in #1270
- Temporarily use beta versions for "latest" dist-tag by @SteveSandersonMS in #1283
- Fix codegen identifier sanitization by @stephentoub in #1285
- Update @github/copilot to 1.0.47 by @github-actions[bot] in #1286
- Derive Default on generated Rust types by @tclem in #1272
- Generate Go bool discriminated unions by @qmuntal in #1284
- Update @github/copilot to 1.0.48-1 by @github-actions[bot] in #1288
- Share generated schema definitions across SDKs by @stephentoub in #1289
- Hide deprecated APIs where supported by @stephentoub in #1293
- Use schema descriptions in generated SDK docs by @stephentoub in #1291
- Update @github/copilot to 1.0.48 by @github-actions[bot] in #1292
- Add remote_session field to all SDK SessionConfig types by @devm33 in #1295
- Fix shared schema comparison for Go codegen by @stephentoub in #1304
- Update @github/copilot to 1.0.49-0 by @github-actions[bot] in #1305
- Update @github/copilot to 1.0.49-1 by @github-actions[bot] in #1307
- feat: add model field to CustomAgentConfig across all SDKs by @patniko in #1309
- Fix Python Quick Start example to compile with current SDK by @stephentoub in #1310
- Fix Python session.send docs examples by @stephentoub in #1312
- Consolidate ask_user E2E snapshots into single canonical folder by @stephentoub in #1311
- Stabilize compaction E2E tests by @stephentoub in #1314
- Harden permission-reject E2E tests across all SDKs (#1194) by @stephentoub in #1317
- Honor preinstalled CLI path in .NET MSBuild targets (#921) by @stephentoub in #1318
- Add netstandard and net10 targets to C# SDK by @stephentoub in #1320
- Fix some argument validation in C# by @stephentoub in #1322
- Add .NET CopilotTool helper by @stephentoub in #1321
- Add cloud session config support by @tiagonbotelho in #1306
- Fix sub-agent hook propagation: expose sessionId on hook inputs by @SteveSandersonMS in https://github.com/github/...
rust/v1.0.0
What's Changed
- De-flake builtin_tools E2E tests with a longer send timeout by @stephentoub in #1538
- Update java README with accurate validation steps by @edburns in #1541
- Java SDK: Update
@github/copilotdependency to^1.0.57by @edburns in #1546 - Edburns/remove pr 1524 test java publish update notes to point to docs by @edburns in #1543
- java: disable ModeHandlersTest pending snapshot re-recording (#1547) by @edburns in #1548
- Refine Go SDK pre-GA API surfaces by @qmuntal in #1549
Full Changelog: rust/v1.0.0-beta.12...rust/v1.0.0
GitHub Copilot SDK for Java 1.0.0
Installation
vMaj.Min.Micro. For example v0.1.32. The corresponding maven version for the release will be Maj.Min.Micro-java.N, where Maj, Min and Micro are the corresponding numbers for the reference implementation release, and N is a monotonically increasing sequence number starting with 0 for each release. See the corresponding architectural decision record for more information in the docs/adr directory of the source code.
📖 Documentation · Javadoc
Maven
<dependency>
<groupId>com.github</groupId>
<artifactId>copilot-sdk-java</artifactId>
<version>1.0.0</version>
</dependency>Gradle (Kotlin DSL)
implementation("com.github:copilot-sdk-java:1.0.0")Gradle (Groovy DSL)
implementation 'com.github:copilot-sdk-java:1.0.0'What's Changed
Full Changelog: java/v1.0.0-beta-12-java.1...java/v1.0.0
GitHub Copilot SDK for Java 1.0.0-beta-12-java.1
Installation
vMaj.Min.Micro. For example v0.1.32. The corresponding maven version for the release will be Maj.Min.Micro-java.N, where Maj, Min and Micro are the corresponding numbers for the reference implementation release, and N is a monotonically increasing sequence number starting with 0 for each release. See the corresponding architectural decision record for more information in the docs/adr directory of the source code.
📦 [View on Maven Central]((central.sonatype.com/redacted)
📖 [Documentation]((github.github.io/redacted) · [Javadoc]((github.github.io/redacted)
Maven
<dependency>
<groupId>com.github</groupId>
<artifactId>copilot-sdk-java</artifactId>
<version>1.0.0-beta-12-java.1</version>
</dependency>Gradle (Kotlin DSL)
implementation("com.github:copilot-sdk-java:1.0.0-beta-12-java.1")Gradle (Groovy DSL)
implementation 'com.github:copilot-sdk-java:1.0.0-beta-12-java.1'Feature: slash command responses accessible via RPC
Applications can now retrieve responses from slash commands. Previously the ability to invoke slash commands existed, but responses were not surfaced through the RPC layer. (#1520)
// Send a slash command and receive its response via the session RPC
CompletableFuture<AssistantMessage> response = session.sendMessage("/my-command args");Feature: session.mcp.apps.callTool returns JsonNode
session.mcp.apps.callTool() previously returned CompletableFuture<Void> due to a codegen gap; it now correctly returns CompletableFuture<JsonNode>, making the tool result accessible. (#1523)
JsonNode result = session.rpc().mcp().apps().callTool(params).get();Generated by Release Changelog Generator · ● 2.2M
v1.0.0-beta.12
Feature: [Go] idiomatic initialism casing across the Go SDK
All Go identifiers now use idiomatic uppercase initialisms as required by Go conventions. (#1527)
Api→API,Rpc→RPC,Mcp→MCP,Sse→SSEUrl/Uri→URL/URI,Id→ID,Tcp→TCPAdo→ADO,Sdk→SDK,Fs→FSUriConnection→URIConnection,TcpConnection→TCPConnection
Feature: [Go] tri-state session boolean flags
SessionConfig.EnableConfigDiscovery, ResumeSessionConfig.EnableConfigDiscovery, and ResumeSessionConfig.ContinuePendingWork are now *bool instead of bool, allowing callers to express explicit false (opt out) vs. unset (defer to runtime default). (#1536)
copilot.Bool(true) / copilot.Bool(false) to set a value, or leave the field nil to defer to the runtime default.
cfg := copilot.SessionConfig{
EnableConfigDiscovery: copilot.Bool(false), // explicitly opt out
}Feature: [Java] slash command responses accessible via RPC
Java callers can now retrieve responses from slash commands via the RPC layer. Previously it was possible to invoke slash commands but not to receive their responses programmatically. (#1520)
Improvement: [Python/Rust] stable public namespaces for generated types
Generated types are no longer exposed under the internal generated sub-module. (#1535)
- Python: use
copilot.session_events.Xandcopilot.rpc.Xinstead ofcopilot.generated.* - Rust: use
github_copilot_sdk::session_events::Xandgithub_copilot_sdk::rpc::Xinstead ofgithub_copilot_sdk::generated::*
Other changes
- bugfix: [Go] fix session event attachment aliases (#1515)
- bugfix: [Go] preserve empty slices and maps in JSON serialization (#1528)
- bugfix: [Node] map
suppressResumeEventtodisableResumeon the wire (#1529) - improvement: [Java] map
session.mcp.apps.callToolresult toJsonNode(#1523) - improvement: [Python] derive
__version__from package metadata; align Node version sentinel (#1521) - improvement: fix GitHub brand casing across SDK public surface (#1531)
New contributors
@dmytrostrukmade their first contribution in #1515@willglasmade their first contribution in #1529
Generated by Release Changelog Generator · ● 1.4M