Skip to content

v1.0.13-preview.2

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 28 Aug 09:30
8715c13

Feature: 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 forwards agent, reasoningEffort, and contextTier (#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 Client is dropped (#2292)
  • improvement: [C#] skip untyped internal properties in C# codegen (#2298)

New contributors

  • @lutzroeder made their first contribution in #2330
  • @aymenfurter made their first contribution in #2294
  • @lukehoban made their first contribution in #2292
  • @scordio made their first contribution in #2382
  • @OllieinCanada made their first contribution in #2374

Generated by Release Changelog Generator · sonnet46 33.8 AIC · ⌖ 7.74 AIC · ⊞ 8.1K