Skip to content

v1.0.13-preview.4

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 01 Sep 09:04
538b2dc

Feature: rewind support across all SDKs

Sessions can now opt into file-change tracking and rewind conversation history and tracked file changes to any prior checkpoint. Enable file tracking when creating a session, then use rewind to roll back. (#2321)

const session = await client.createSession({ enableFileChangeTracking: true });
// ...later
const points = await session.rpc.rewind.list();
await session.rpc.rewind.rewind({ rewindTarget: points[0].id });
var session = await client.CreateSessionAsync(new SessionOptions { EnableFileChangeTracking = true });
var points = await session.Rpc.Rewind.ListAsync();
await session.Rpc.Rewind.RewindAsync(new RewindRequest { RewindTarget = points[0].Id });
session = await client.create_session(enable_file_change_tracking=True)
points = await session.rpc.rewind.list()
await session.rpc.rewind.rewind(rewind_target=points[0].id)

Feature: session-scoped GitHub token providers

Sessions now support expiry-aware GitHub token callbacks in addition to static tokens. The SDK handles refresh requests from the runtime, so extensions always receive fresh credentials. (#2412)

const session = await client.createSession({
  gitHubTokenProvider: async ({ host, reason }) => ({ token: await fetchToken(host) })
});
var session = await client.CreateSessionAsync(new SessionOptions {
    GitHubTokenProvider = async (req, ct) =>
        new GitHubTokenResult { Token = await FetchTokenAsync(req.Host) }
});
session, _ := client.CreateSession(ctx, copilot.SessionOptions{
    GitHubTokenProvider: func(ctx context.Context, req copilot.TokenProviderRequest) (copilot.TokenProviderResult, error) {
        return copilot.TokenProviderResult{Token: fetchToken(req.Host)}, nil
    },
})

Feature: Java in-process native runtime on all platforms

The Java SDK now ships a bundled in-process Copilot CLI runtime for Linux x64/arm64, Windows x64/arm64, and Apple Silicon macOS. No separate CLI installation is needed on these platforms. (#2301, #2393, #2402, #2421, #2427)

The correct native classifier is resolved and loaded automatically at runtime — no configuration needed.

Feature: managed SDK servers now use the Rust runtime wrapper

All six SDKs now spawn the dedicated copilot-runtime executable when managing their own subprocess connection, pairing the wrapper with the correct runtime.node addon for a leaner and more reliable process lifecycle. (#2395)

Feature: built-in plugin directory support

Host applications can now register trusted built-in plugin directories loaded before any session begins. Unlike ordinary --plugin-dir loading, these are registered via plugins.builtin.set and trusted by the host. (#2330)

const client = new CopilotClient({ builtinPluginDirectories: ['/path/to/plugins'] });
let client = CopilotClient::new(CopilotClientOptions {
    builtin_plugin_directories: vec![PathBuf::from("/path/to/plugins")],
    ..Default::default()
});

Feature: permission decisions can carry decision context

Permission handlers can now attach optional decisionContext when replying to a permission request, letting the runtime attribute decisions to a person, host policy, or automated recommendation. Additive for all SDKs except Rust. (#2294)

session.onPermissionRequest(async (req) =>
  createAttributedPermissionResult('approve_once', { source: 'policy' })
);
async def handler(req):
    return copilot.create_attributed_permission_result('approve_once', {'source': 'policy'})

Rust breaking change: PermissionResult::Decision changed from a tuple variant to a struct variant ({ decision, context }). Code using result helpers (approve_once() etc.) is unaffected; direct construction or pattern-matching on Decision requires migration.

Feature: extensions can request sensitive environment variables

joinSession() now accepts an env option listing the sensitive environment variable names the extension needs. The CLI prompts the user; on approval the values are written into process.env before joinSession resolves. (#2348)

const session = await host.joinSession(extensionId, { env: ['MY_API_KEY'] });

Feature: ClientMode::Empty now excludes built-in skills by default

When a session is created in empty mode, includedBuiltinSkills defaults to [] across all SDKs. Pass an explicit allowlist to opt individual built-in skills back in. (#2410)

Feature: agent factories — argsSchema, pagination, and completion options

Three improvements to the Agent Factories API in the Node SDK:

  • Declare an argsSchema on a factory so the CLI validates arguments before a run starts (#2315)
  • session.factory.runs.list() supports cursor-based pagination for browsing full run history (#2431)
  • Run and resume options now forward completion notifications and phase-name logging (#2431)

Feature: ask-user variant session option

All SDKs expose an askUserVariant option on session create and resume for structured ask-user tool behavior. Omitting it preserves legacy behavior. (#2432)

Other changes

  • bugfix: [Rust] prevent orphaned CLI processes when the client is dropped (#2292)
  • bugfix: [Python] serialize native values in tool results correctly (#2374)
  • bugfix: [Node] fix agent factory types and behavior to match the wire contract (#2309)
  • 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 44.1 AIC · ⌖ 6.59 AIC · ⊞ 8.1K