v1.0.13-preview.3
Pre-releaseFeature: rewind support across all SDKs
Sessions can now opt into file-change tracking and conversation rewind. When enableFileChangeTracking is enabled, the session records which files were changed during a conversation turn. You can then list pending rewind points, preview changes, and rewind the conversation history together with any tracked file modifications. (#2321)
const session = await client.createSession({ enableFileChangeTracking: true });
const points = await session.rpc.rewind.listPendingRewindPoints();
await session.rpc.rewind.rewind({ id: points[0].id });var session = await client.CreateSessionAsync(new SessionOptions { EnableFileChangeTracking = true });
var points = await session.Rpc.Rewind.ListPendingRewindPointsAsync();
await session.Rpc.Rewind.RewindAsync(new RewindRequest { Id = points[0].Id });session = await client.create_session(enable_file_change_tracking=True)
points = await session.rpc.rewind.list_pending_rewind_points()
await session.rpc.rewind.rewind(id=points[0].id)Feature: session-scoped GitHub token providers
Sessions now support a dynamic, expiry-aware GitHub token callback as an alternative to a static gitHubToken. The SDK maps each host request (with host, session, and reason context) to your callback, handling concurrent-session isolation automatically. (#2412)
const session = await client.createSession({
gitHubTokenProvider: async ({ host }) => ({ token: await getToken(host), expiresIn: 3600 }),
});var session = await client.CreateSessionAsync(new SessionOptions
{
GitHubTokenProvider = async (req, ct) =>
new GitHubToken { Token = await GetTokenAsync(req.Host, ct), ExpiresIn = TimeSpan.FromHours(1) }
});session, err := client.CreateSession(ctx, copilot.SessionOptions{
GitHubTokenProvider: func(ctx context.Context, req copilot.GitHubTokenRequest) (copilot.GitHubToken, error) {
return copilot.GitHubToken{Token: getToken(req.Host), ExpiresIn: 3600}, nil
},
})Feature: built-in plugin directory support
Applications that ship their own built-in plugins can now register a trusted plugin directory at client startup. These plugins are registered with the runtime before any sessions are created, distinct from ordinary --plugin-dir loading. (#2330)
const client = new CopilotClient({ builtInPluginDirectories: ['/path/to/plugins'] });let client = CopilotClient::builder()
.built_in_plugin_directories(vec![PathBuf::from("/path/to/plugins")])
.build()?;Feature: permission decision context forwarding
Permission handlers can now attach a decisionContext so the runtime can attribute whether a decision came from a person, a host policy, or an automated recommendation. This is additive for TypeScript, C#, Go, Python, and Java. Rust clients that construct PermissionResult::Decision directly must migrate from the tuple variant to the new struct variant. (#2294)
session.onPermissionRequest(async (req) => {
return createAttributedPermissionResult('allow_once', { source: 'host-policy' });
});session.on_permission_request(|req| async move {
PermissionResult::approve_once().with_context(DecisionContext { source: "host-policy".into() })
});Feature: ClientMode::Empty now defaults to no built-in skills
When creating a session with ClientMode::Empty, built-in skills are now disabled by default. To opt specific skills in, supply an explicit includedBuiltinSkills allowlist. Custom skills via enableSkills and skillDirectories are unaffected. (#2410)
const session = await client.createSession({
clientMode: 'empty',
includedBuiltinSkills: ['grep'],
});Feature: Java in-process CLI runtime for Linux, Windows, and macOS
The Java SDK now ships a bundled native CLI runtime for Linux x64, Linux ARM64, Windows x64, Windows ARM64, and Apple Silicon macOS. Applications on these platforms no longer need a separately installed Copilot CLI binary. (#2301, #2393, #2402, #2421, #2427)
Other changes
- feature: [Node] agent factories surface matches the wire contract — result and arguments typed as
JsonValue,ctx.agent()forwardsagent/reasoningEffort/contextTier(#2309) - feature: [Node] factories can declare an
argsSchemaso the CLI validates caller arguments before starting a run (#2315) - feature: [Node] factory run listing with cursor-based pagination and truncation metadata; run and resume support completion notifications and phase-name logging (#2431)
- feature: [Node] extensions can request sensitive environment variables (#2348)
- feature: [All] typed
askUserVariantsession option for structured ask-user tool selection (#2432) - bugfix: [Rust] prevent orphaned CLI child processes on session drop (#2292)
- bugfix: [Python] serialize native values in tool results (#2374)
- improvement: [C#] codegen skips untyped internal properties (#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 42.5 AIC · ⌖ 6.48 AIC · ⊞ 8.1K