v1.0.13-preview.2
Pre-releaseFeature: rewind support across all SDKs
Sessions can now opt in to file-change tracking so that rewinding restores both conversation history and the files that were modified. Enable it with the new enableFileChangeTracking session option. (#2321)
const session = await client.startSession({ enableFileChangeTracking: true });var session = await client.StartSessionAsync(new SessionOptions { EnableFileChangeTracking = true });session = await client.start_session(enable_file_change_tracking=True)session, _ := client.StartSession(ctx, &copilot.SessionOptions{EnableFileChangeTracking: true})Session session = client.startSession(new SessionOptions().setEnableFileChangeTracking(true)).get();let session = client.start_session(SessionOptions { enable_file_change_tracking: Some(true), ..Default::default() }).await?;Feature: session-scoped GitHub token providers
Applications can now supply a dynamic GitHub token callback instead of a static gitHubToken string. The runtime calls the callback before each token use, so short-lived tokens stay fresh across long-running sessions. (#2412)
const session = await client.startSession({
gitHubTokenProvider: async ({ host, reason }) => ({ token: await fetchToken(host) })
});var session = await client.StartSessionAsync(new SessionOptions
{
GitHubTokenProvider = async (request, ct) => new GitHubTokenResult(await FetchTokenAsync(request.Host))
});async def token_provider(request):
return GitHubTokenResult(token=await fetch_token(request.host))
session = await client.start_session(github_token_provider=token_provider)session, _ := client.StartSession(ctx, &copilot.SessionOptions{
GitHubTokenProvider: func(ctx context.Context, req copilot.GitHubTokenRequest) (copilot.GitHubTokenResult, error) {
return copilot.GitHubTokenResult{Token: fetchToken(req.Host)}, nil
},
})session = client.startSession(new SessionOptions()
.setGitHubTokenProvider((req, ct) ->
CompletableFuture.completedFuture(new GitHubTokenResult(fetchToken(req.getHost()))))).get();let session = client.start_session(SessionOptions {
github_token_provider: Some(Box::new(|req| Box::pin(async move { Ok(GitHubTokenResult { token: fetch_token(&req.host).await }) }))),
..Default::default()
}).await?;Feature: Java in-process runtime (linux-x64, macOS arm64, Windows x64/arm64)
The Java SDK now supports an in-process connection mode that loads the Copilot runtime as a native library via JNA, eliminating the need for a separate CLI child process. Add the platform-specific classifier JAR to your project and use RuntimeConnection.forInProcess(). (#2301, #2393, #2402, #2421, #2427)
CopilotClientOptions options = new CopilotClientOptions()
.setConnection(RuntimeConnection.forInProcess());
CopilotClient client = new CopilotClient(options);
client.start().get();Feature: built-in plugin directory support
Host applications can now register a set of trusted, host-bundled plugin directories at startup. These directories are registered with plugins.builtin.set before any session is created. (#2330)
Feature: ClientMode.Empty defaults to no built-in skills
ClientMode.Empty now deny-by-defaults includedBuiltinSkills to [], matching its deny-by-default behavior for all other built-in capabilities. Callers can still pass an explicit allowlist to opt in to specific runtime-bundled skills. (#2410)
Feature: permission decision context forwarding
Permission handlers can now attach decisionContext to let the runtime attribute decisions (human, policy, or automated recommendation). This is additive for TypeScript, Python, Go, C#, and Java. Rust clients that construct or match PermissionResult::Decision directly must migrate from the tuple variant to the new struct variant. (#2294)
return createAttributedPermissionResult(PermissionDecision.ApproveOnce, context);PermissionResult::Decision { decision: PermissionDecision::ApproveOnce, context: Some(ctx) }Feature: Node extensions can request sensitive environment variables
Node SDK extensions can now declare which sensitive environment variables they need. The CLI prompts the user and, on approval, injects the granted values before the extension starts. (#2348)
await joinSession({ env: ["MY_API_KEY", "MY_SECRET"] });Feature: factory argsSchema declaration
Node SDK factories can now declare an argsSchema so the CLI validates caller arguments before starting a run, saving credits and preventing confusing runtime errors. (#2315)
session.defineFactory("my-factory", { argsSchema: { type: "object", properties: { query: { type: "string" } } } }, async (ctx) => { ... });Other changes
- bugfix: [Node] fix agent factory surface to match wire contract —
ctx.agent()now forwardsagent,reasoningEffort, andcontextTier(#2309) - bugfix: [Python] serialize native values (datetime, UUID, Decimal, set, Enum) in tool results (#2374)
- bugfix: [Rust] prevent orphaned CLI child processes when the last
Clientis dropped (#2292) - improvement: [C#] skip untyped internal properties in C# codegen (#2298)
New contributors
@lutzroedermade their first contribution in #2330@aymenfurtermade their first contribution in #2294@lukehobanmade their first contribution in #2292@scordiomade their first contribution in #2382@OllieinCanadamade their first contribution in #2374
Generated by Release Changelog Generator · sonnet46 33.8 AIC · ⌖ 7.74 AIC · ⊞ 8.1K