Feature: commands and UI elicitation across all four SDKs
Register slash commands that CLI users can invoke and drive interactive input dialogs from any SDK language. This feature was previously Node.js-only; it now ships in Python, Go, and .NET as well. (#906, #908, #960)
const session = await client.createSession({
onPermissionRequest: approveAll,
commands: [{
name: "summarize",
description: "Summarize the conversation",
handler: async (context) => { /* ... */ },
}],
onElicitationRequest: async (context) => {
if (context.type === "confirm") return { action: "confirm" };
},
});
// Drive dialogs from the session
const confirmed = await session.ui.confirm({ message: "Proceed?" });
const choice = await session.ui.select({ message: "Pick one", options: ["A", "B"] });var session = await client.CreateSessionAsync(new SessionConfig {
OnPermissionRequest = PermissionHandler.ApproveAll,
Commands = [
new CommandDefinition {
Name = "summarize",
Description = "Summarize the conversation",
Handler = async (context) => { /* ... */ },
}
],
});
// Drive dialogs from the session
var confirmed = await session.Ui.ConfirmAsync(new ConfirmOptions { Message = "Proceed?" });
⚠️ Breaking change (Node.js): TheonElicitationRequesthandler signature changed from two arguments (request, invocation) to a singleElicitationContextthat combines both. Update callers to usecontext.sessionIdandcontext.messagedirectly.
Feature: session.getMetadata across all SDKs
Efficiently fetch metadata for a single session by ID without listing all sessions. Returns undefined/null (not an error) when the session is not found. (#899)
- TypeScript:
const meta = await client.getSessionMetadata(sessionId); - C#:
var meta = await client.GetSessionMetadataAsync(sessionId); - Python:
meta = await client.get_session_metadata(session_id) - Go:
meta, err := client.GetSessionMetadata(ctx, sessionID)
Feature: sessionFs for virtualizing per-session storage (Node SDK)
Supply a custom sessionFs adapter in Node SDK session config to redirect the runtime's per-session storage (event log, large output files) to any backing store — useful for serverless deployments or custom persistence layers. (#917)
Other changes
- bugfix: structured tool results (with
toolTelemetry,resultType, etc.) now sent via RPC as objects instead of being stringified, preserving metadata for Node, Go, and Python SDKs (#970) - feature: [Python]
CopilotClientandCopilotSessionnow supportasync withfor automatic resource cleanup (#475) - improvement: [Python]
copilot.typesmodule removed; import types directly fromcopilot(#871) - improvement: [Python]
workspace_pathnow accepts anyos.PathLikeandsession.workspace_pathreturns apathlib.Path(#901) - improvement: [Go] simplified
rpcpackage API: renamed structs drop the redundantRpcinfix (e.g.ModelRpcApi→ModelApi) (#905) - fix: [Go]
Session.SetModelnow takes a pointer for optional options instead of a variadic argument (#904)
New contributors
@Sumanth007made their first contribution in #475@jongallowaymade their first contribution in #957@Morabbinmade their first contribution in #970@schneidafunkmade their first contribution in #998
Note
🔒 Integrity filter blocked 2 items
The following items were blocked because they don't meet the GitHub integrity level.
- #970
search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved". - #475
search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
To allow these resources, lower min-integrity in your GitHub frontmatter:
tools:
github:
min-integrity: approved # merged | approved | unapproved | noneGenerated by Release Changelog Generator