Skip to content

v1.0.13-preview.3

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 01 Sep 08:36
7a916f8

Feature: 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() forwards agent/reasoningEffort/contextTier (#2309)
  • feature: [Node] factories can declare an argsSchema so 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 askUserVariant session 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

  • @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 42.5 AIC · ⌖ 6.48 AIC · ⊞ 8.1K