diff --git a/dotnet/src/Generated/Rpc.cs b/dotnet/src/Generated/Rpc.cs
index 97f9b52762..31ddec9f8c 100644
--- a/dotnet/src/Generated/Rpc.cs
+++ b/dotnet/src/Generated/Rpc.cs
@@ -61,10 +61,35 @@ internal sealed class ConnectResult
public string Version { get; set; } = string.Empty;
}
+/// Identity of the integrating host, declared once on the `server.connect` handshake so telemetry from this connection is attributed to a single, consistent surface. All fields are optional; omit them to keep the default attribution.
+[Experimental(Diagnostics.Experimental)]
+internal sealed class ConnectClientInfo
+{
+ /// Name of the host editor, e.g. `"vscode"`.
+ [JsonPropertyName("editorName")]
+ public string? EditorName { get; set; }
+
+ /// Version of the host editor, e.g. `"1.124.2"`. Ignored unless it looks like a version string.
+ [JsonPropertyName("editorVersion")]
+ public string? EditorVersion { get; set; }
+
+ /// Name of the Copilot extension within the host, e.g. `"copilot-chat"`.
+ [JsonPropertyName("extensionName")]
+ public string? ExtensionName { get; set; }
+
+ /// Version of the Copilot extension within the host, e.g. `"0.54.0"`. Ignored unless it looks like a version string.
+ [JsonPropertyName("extensionVersion")]
+ public string? ExtensionVersion { get; set; }
+}
+
/// Connection-level opt-ins for the `server.connect` handshake. Transport authentication is consumed by the native protocol boundary before dispatch.
[Experimental(Diagnostics.Experimental)]
internal sealed class ConnectRequest
{
+ /// Identity of the integrating host. Optional; omit it to keep the default attribution.
+ [JsonPropertyName("clientInfo")]
+ public ConnectClientInfo? ClientInfo { get; set; }
+
/// Opt this connection in to GitHub telemetry forwarding for its lifetime. When set, the runtime forwards every internal telemetry event it emits — across all sessions, plus sessionless events — to this connection over the `gitHubTelemetry.event` notification. Regular events are also written to the runtime's normal GitHub/CTS path (dual-write); host-only compatibility events are forward-only and intentionally skip that path. Intended for first-party hosts that re-emit the events into their own telemetry stores. Both unrestricted and restricted events are forwarded, each tagged with a `restricted` discriminator; a backstop drops restricted events when restricted telemetry is disabled — using the process-global gate for ordinary events and an explicit session-scoped decision for host-only events.
[JsonPropertyName("enableGitHubTelemetryForwarding")]
public bool? EnableGitHubTelemetryForwarding { get; set; }
@@ -282,6 +307,19 @@ public sealed class ModelCapabilities
public ModelCapabilitiesSupports? Supports { get; set; }
}
+/// A service-published message about a model, carrying a stable machine-readable code alongside human-readable text.
+[Experimental(Diagnostics.Experimental)]
+public sealed class ModelMessage
+{
+ /// Stable machine-readable identifier for the message, such as `client_version_deprecated`. Hosts can key custom presentation off this; unrecognized codes should fall back to displaying `message`.
+ [JsonPropertyName("code")]
+ public string Code { get; set; } = string.Empty;
+
+ /// Human-readable message text intended for display to the user.
+ [JsonPropertyName("message")]
+ public string Message { get; set; } = string.Empty;
+}
+
/// Policy state (if applicable).
[Experimental(Diagnostics.Experimental)]
public sealed class ModelPolicy
@@ -295,6 +333,15 @@ public sealed class ModelPolicy
public string? Terms { get; set; }
}
+/// Service-published warning text that hosts should display when presenting a model.
+[Experimental(Diagnostics.Experimental)]
+public sealed class ModelWarningText
+{
+ /// Data-retention warning for the model. The text may contain Markdown links and should be rendered as Markdown when supported.
+ [JsonPropertyName("dataRetention")]
+ public string? DataRetention { get; set; }
+}
+
/// Copilot model metadata, including identifier, display name, capabilities, policy, billing, reasoning efforts, and picker categories.
[Experimental(Diagnostics.Experimental)]
public sealed class Model
@@ -315,6 +362,10 @@ public sealed class Model
[JsonPropertyName("id")]
public string Id { get; set; } = string.Empty;
+ /// Informational notices the service published for this model, such as an upcoming change or a recommended alternative. Present only when the service published at least one notice. Hosts should surface these without implying anything is wrong with the model.
+ [JsonPropertyName("infoMessages")]
+ public IList? InfoMessages { get; set; }
+
/// Model capability category for grouping in the model picker.
[JsonPropertyName("modelPickerCategory")]
public ModelPickerCategory? ModelPickerCategory { get; set; }
@@ -338,6 +389,14 @@ public sealed class Model
/// Supported reasoning effort levels (only present if model supports reasoning effort).
[JsonPropertyName("supportedReasoningEfforts")]
public IList? SupportedReasoningEfforts { get; set; }
+
+ /// Warnings the service published for this model, such as a deprecated client version. Present only when the service published at least one warning. The model remains usable; hosts should surface these as advisory rather than blocking.
+ [JsonPropertyName("warningMessages")]
+ public IList? WarningMessages { get; set; }
+
+ /// Warning text the service requires hosts to surface for this model. Present only when the service published at least one warning.
+ [JsonPropertyName("warningText")]
+ public ModelWarningText? WarningText { get; set; }
}
/// List of Copilot models available to the resolved user, including capabilities and billing metadata.
@@ -2695,6 +2754,10 @@ public sealed class InstalledPluginInfo
[JsonPropertyName("enabled")]
public bool Enabled { get; set; }
+ /// Absolute path of the marketplace directory a live plugin was resolved from. Present only on live, never-persisted records — a plugin belonging to a directory/local marketplace, which is loaded from its real directory on every pass instead of a copy under the installed-plugins cache. Its presence is what marks a listed plugin as live: such a plugin is always present on disk, so `enabled` is its only meaningful state and it is never "not installed".
+ [JsonPropertyName("installedFrom")]
+ public string? InstalledFrom { get; set; }
+
/// Marketplace the plugin came from. Empty string ("") for direct repo / URL / local installs.
[JsonPropertyName("marketplace")]
public string Marketplace { get; set; } = string.Empty;
@@ -4462,6 +4525,10 @@ public sealed class InstalledPlugin
[JsonPropertyName("installed_at")]
public string InstalledAt { get; set; } = string.Empty;
+ /// Absolute path of the marketplace directory a live plugin was resolved from. Present only on live, never-persisted records — those synthesized at session start for a directory/local marketplace, whose cache_path points at the real plugin directory on disk rather than a copy under the installed-plugins cache. Its presence is what marks a record as live, and no record carrying it is ever written to the persisted installedPlugins key.
+ [JsonPropertyName("installed_from")]
+ public string? InstalledFrom { get; set; }
+
/// Marketplace the plugin came from (empty string for direct repo installs).
[JsonPropertyName("marketplace")]
public string Marketplace { get; set; } = string.Empty;
@@ -10588,6 +10655,10 @@ public sealed class SessionInstalledPlugin
[JsonPropertyName("installed_at")]
public string InstalledAt { get; set; } = string.Empty;
+ /// Absolute path of the marketplace directory a live plugin was resolved from. Present only on live, never-persisted records — those synthesized at session start for a directory/local marketplace, whose cache_path points at the real plugin directory on disk rather than a copy under the installed-plugins cache. Its presence is what marks a record as live, and no record carrying it is ever written to the persisted installedPlugins key.
+ [JsonPropertyName("installed_from")]
+ public string? InstalledFrom { get; set; }
+
/// Marketplace the plugin came from (empty string for direct repo installs).
[JsonPropertyName("marketplace")]
public string Marketplace { get; set; } = string.Empty;
@@ -10802,7 +10873,7 @@ public sealed class SandboxConfig
[JsonPropertyName("addCurrentWorkingDirectory")]
public bool? AddCurrentWorkingDirectory { get; set; }
- /// Whether to auto-grant read access to the tool directories discovered on PATH and in toolchain environment variables (GOROOT, CARGO_HOME, JAVA_HOME, VIRTUAL_ENV, and similar), and to common developer-tool caches, registries, and toolchains in their default home locations (cargo, go, npm, Maven, and more), plus read-write access to (and, on Unix, up-front creation of) the scratch caches builds write on every run (go-build, ccache, sccache, Gradle caches, Cargo lock/tracker files), so builds work without extra configuration; a relocated CARGO_HOME additionally gets its Cargo lock files granted read-write. Set to false to disable every grant listed above: user-installed toolchains (rustup, nvm, pyenv, conda, pipx) then need explicit userPolicy.filesystem entries — readonlyPaths to read them, plus readwriteFiles for a relocated CARGO_HOME's .package-cache and .global-cache, which Cargo locks on every build. Only these developer-tool grants are affected: the working directory (see addCurrentWorkingDirectory), temporary storage, session log paths, and system locations follow their own rules and stay granted, so commands still run. Default: true (enabled by default; set to false to opt out).
+ /// Whether to auto-grant read access to the tool directories discovered on PATH and in toolchain environment variables (GOROOT, CARGO_HOME, JAVA_HOME, VIRTUAL_ENV, and similar), and to common developer-tool caches, registries, and toolchains in their default home locations (cargo, go, npm, Maven, and more), plus read-write access to (and up-front creation of) the scratch caches builds write on every run (go-build, ccache, sccache, Gradle caches, Cargo lock/tracker files), so builds work without extra configuration; a relocated CARGO_HOME additionally gets its Cargo lock files granted read-write. Set to false to disable every grant listed above: user-installed toolchains (rustup, nvm, pyenv, conda, pipx) then need explicit userPolicy.filesystem entries — readonlyPaths to read them, plus readwriteFiles for a relocated CARGO_HOME's .package-cache and .global-cache, which Cargo locks on every build. Only these developer-tool grants are affected: the working directory (see addCurrentWorkingDirectory), temporary storage, session log paths, and system locations follow their own rules and stay granted, so commands still run. Default: true (enabled by default; set to false to opt out).
[JsonPropertyName("allowDevToolAccess")]
public bool? AllowDevToolAccess { get; set; }
@@ -13485,7 +13556,7 @@ public sealed class PermissionsConfigureAdditionalContentExclusionPolicy
[Experimental(Diagnostics.Experimental)]
public sealed class PermissionPathsConfig
{
- /// Additional directories to allow tool access to (in addition to the session's working directory). When `unrestricted` is true, these are still pre-populated on the UnrestrictedPathManager so they remain visible via getDirectories() (e.g. for @-mention completion).
+ /// Additional directories to allow tool access to (in addition to the session's working directory). Conventional `.github/skills/` and `.github/agents/` definitions under them also join the session catalogs when their subsystem gates are enabled, so supplying a directory is a trust decision for configuration stored there. When `unrestricted` is true, these are still pre-populated on the UnrestrictedPathManager so they remain visible via getDirectories() (e.g. for @-mention completion).
[JsonPropertyName("additionalDirectories")]
public IList? AdditionalDirectories { get; set; }
@@ -14466,7 +14537,7 @@ public sealed class PermissionsPathsAddResult
[Experimental(Diagnostics.Experimental)]
internal sealed class PermissionPathsAddParams
{
- /// Directory to add to the allow-list. The runtime resolves and validates the path before adding.
+ /// Directory to add to the allow-list. The runtime resolves and validates the path before adding, then loads conventional `.github/skills/` and `.github/agents/` definitions under it when their subsystem gates are enabled. Adding the directory is therefore also a trust decision for configuration stored there.
[JsonPropertyName("path")]
public string Path { get; set; } = string.Empty;
@@ -16233,6 +16304,10 @@ public sealed class QueuePendingItems
[Experimental(Diagnostics.Experimental)]
public sealed class QueuePendingItemsResult
{
+ /// How many leading entries of `steeringMessages` have already been folded into the running turn (and so have an emitted `user.message`), as opposed to still waiting for one. Absent for hosts that do not distinguish the two.
+ [JsonPropertyName("inFlightSteeringCount")]
+ public long? InFlightSteeringCount { get; set; }
+
/// Pending queued items in submission order. Includes user messages, queued slash commands, and queued model changes; omits internal system items.
[JsonPropertyName("items")]
public IList Items { get => field ??= []; set; }
@@ -28847,13 +28922,14 @@ public async Task PingAsync(string? message = null, CancellationToke
/// Performs the SDK server connection handshake and validates the optional connection token. Marked internal because this is JSON-RPC transport plumbing invoked automatically by an SDK client's own `connect()` wrapper, not a user-facing method. Stays internal as long as the SDK client owns the handshake; would only become public if the SDK ever exposed the raw schema surface to consumers without a connection wrapper.
/// Opt this connection in to GitHub telemetry forwarding for its lifetime. When set, the runtime forwards every internal telemetry event it emits — across all sessions, plus sessionless events — to this connection over the `gitHubTelemetry.event` notification. Regular events are also written to the runtime's normal GitHub/CTS path (dual-write); host-only compatibility events are forward-only and intentionally skip that path. Intended for first-party hosts that re-emit the events into their own telemetry stores. Both unrestricted and restricted events are forwarded, each tagged with a `restricted` discriminator; a backstop drops restricted events when restricted telemetry is disabled — using the process-global gate for ordinary events and an explicit session-scoped decision for host-only events.
+ /// Identity of the integrating host. Optional; omit it to keep the default attribution.
/// Connection token; required when the server was started with COPILOT_CONNECTION_TOKEN.
/// The to monitor for cancellation requests. The default is .
/// Handshake result reporting the server's protocol version and package version on success.
[Experimental(Diagnostics.Experimental)]
- internal async Task ConnectAsync(bool? enableGitHubTelemetryForwarding = null, string? token = null, CancellationToken cancellationToken = default)
+ internal async Task ConnectAsync(bool? enableGitHubTelemetryForwarding = null, ConnectClientInfo? clientInfo = null, string? token = null, CancellationToken cancellationToken = default)
{
- var request = new ConnectRequest { EnableGitHubTelemetryForwarding = enableGitHubTelemetryForwarding, Token = token };
+ var request = new ConnectRequest { EnableGitHubTelemetryForwarding = enableGitHubTelemetryForwarding, ClientInfo = clientInfo, Token = token };
return await CopilotClient.InvokeRpcAsync(_rpc, "connect", [request], cancellationToken);
}
@@ -33388,8 +33464,8 @@ public async Task ListAsync(CancellationToken cancellationT
return await CopilotClient.InvokeRpcAsync(_session.Rpc, "session.permissions.paths.list", [request], cancellationToken);
}
- /// Adds a directory to the session's allow-list.
- /// Directory to add to the allow-list. The runtime resolves and validates the path before adding.
+ /// Adds a directory to the session's allow-list and activates conventional skill and agent definitions under it.
+ /// Directory to add to the allow-list. The runtime resolves and validates the path before adding, then loads conventional `.github/skills/` and `.github/agents/` definitions under it when their subsystem gates are enabled. Adding the directory is therefore also a trust decision for configuration stored there.
/// The to monitor for cancellation requests. The default is .
/// Indicates whether the operation succeeded.
public async Task AddAsync(string path, CancellationToken cancellationToken = default)
@@ -35028,6 +35104,9 @@ public static void RegisterClientGlobalApiHandlers(JsonRpc rpc, ClientGlobalApiH
[JsonSerializable(typeof(GitHub.Copilot.ModelCallFailureRequestFingerprint), TypeInfoPropertyName = "SessionEventsModelCallFailureRequestFingerprint")]
[JsonSerializable(typeof(GitHub.Copilot.ModelCallFailureSource), TypeInfoPropertyName = "SessionEventsModelCallFailureSource")]
[JsonSerializable(typeof(GitHub.Copilot.ModelCallFailureTransport), TypeInfoPropertyName = "SessionEventsModelCallFailureTransport")]
+[JsonSerializable(typeof(GitHub.Copilot.ModelCallFinishedData), TypeInfoPropertyName = "SessionEventsModelCallFinishedData")]
+[JsonSerializable(typeof(GitHub.Copilot.ModelCallFinishedEvent), TypeInfoPropertyName = "SessionEventsModelCallFinishedEvent")]
+[JsonSerializable(typeof(GitHub.Copilot.ModelCallFinishedOutcome), TypeInfoPropertyName = "SessionEventsModelCallFinishedOutcome")]
[JsonSerializable(typeof(GitHub.Copilot.ModelCallStartData), TypeInfoPropertyName = "SessionEventsModelCallStartData")]
[JsonSerializable(typeof(GitHub.Copilot.ModelCallStartEvent), TypeInfoPropertyName = "SessionEventsModelCallStartEvent")]
[JsonSerializable(typeof(GitHub.Copilot.ModelChangeSource), TypeInfoPropertyName = "SessionEventsModelChangeSource")]
@@ -35283,6 +35362,7 @@ public static void RegisterClientGlobalApiHandlers(JsonRpc rpc, ClientGlobalApiH
[JsonSerializable(typeof(CompletionsRequestRequest))]
[JsonSerializable(typeof(CompletionsRequestResult))]
[JsonSerializable(typeof(ConfigureSessionExtensionsParams))]
+[JsonSerializable(typeof(ConnectClientInfo))]
[JsonSerializable(typeof(ConnectRemoteSessionParams))]
[JsonSerializable(typeof(ConnectRequest))]
[JsonSerializable(typeof(ConnectResult))]
@@ -35560,6 +35640,7 @@ public static void RegisterClientGlobalApiHandlers(JsonRpc rpc, ClientGlobalApiH
[JsonSerializable(typeof(ModelCapabilitiesOverrideSupports))]
[JsonSerializable(typeof(ModelCapabilitiesSupports))]
[JsonSerializable(typeof(ModelList))]
+[JsonSerializable(typeof(ModelMessage))]
[JsonSerializable(typeof(ModelPickerPersistenceRequest))]
[JsonSerializable(typeof(ModelPickerSettingsContext))]
[JsonSerializable(typeof(ModelPickerSettingsContextEnvironment))]
@@ -35569,6 +35650,7 @@ public static void RegisterClientGlobalApiHandlers(JsonRpc rpc, ClientGlobalApiH
[JsonSerializable(typeof(ModelSwitchConfirmation))]
[JsonSerializable(typeof(ModelSwitchToRequest))]
[JsonSerializable(typeof(ModelSwitchToResult))]
+[JsonSerializable(typeof(ModelWarningText))]
[JsonSerializable(typeof(ModelsListRequest))]
[JsonSerializable(typeof(MoveMcpLoadingToBackgroundResult))]
[JsonSerializable(typeof(NameGetResult))]
diff --git a/dotnet/src/Generated/SessionEvents.cs b/dotnet/src/Generated/SessionEvents.cs
index fa0563a8e4..70a2c880e1 100644
--- a/dotnet/src/Generated/SessionEvents.cs
+++ b/dotnet/src/Generated/SessionEvents.cs
@@ -68,6 +68,7 @@ namespace GitHub.Copilot;
[JsonDerivedType(typeof(McpResourcesListChangedEvent), "mcp.resources.list_changed")]
[JsonDerivedType(typeof(McpToolsListChangedEvent), "mcp.tools.list_changed")]
[JsonDerivedType(typeof(ModelCallFailureEvent), "model.call_failure")]
+[JsonDerivedType(typeof(ModelCallFinishedEvent), "model.call_finished")]
[JsonDerivedType(typeof(ModelCallStartEvent), "model.call_start")]
[JsonDerivedType(typeof(PendingMessagesModifiedEvent), "pending_messages.modified")]
[JsonDerivedType(typeof(PermissionCompletedEvent), "permission.completed")]
@@ -825,6 +826,19 @@ public sealed partial class ModelCallFailureEvent : SessionEvent
public required ModelCallFailureData Data { get; set; }
}
+/// Final lifecycle outcome for one logical model dispatch. A logical dispatch may include internal reconnect or fallback work, so event count is not provider HTTP-request count.
+/// Represents the model.call_finished event.
+public sealed partial class ModelCallFinishedEvent : SessionEvent
+{
+ ///
+ [JsonIgnore]
+ public override string Type => "model.call_finished";
+
+ /// The model.call_finished event payload.
+ [JsonPropertyName("data")]
+ public required ModelCallFinishedData Data { get; set; }
+}
+
/// Model API dispatch metadata for internal telemetry.
/// Represents the model.call_start event.
public sealed partial class ModelCallStartEvent : SessionEvent
@@ -3281,6 +3295,12 @@ public sealed partial class AssistantUsageData
[JsonPropertyName("outputTokens")]
public long? OutputTokens { get; set; }
+ /// Time to first observable model output in milliseconds. Includes text, reasoning, and tool-call output; only available for streaming requests that produce observable output.
+ [JsonConverter(typeof(MillisecondsTimeSpanConverter))]
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("outputTtftMs")]
+ public TimeSpan? OutputTtft { get; set; }
+
/// Parent tool call ID when this usage originates from a sub-agent.
[EditorBrowsable(EditorBrowsableState.Never)]
#if NET5_0_OR_GREATER
@@ -3610,6 +3630,37 @@ public sealed partial class ModelCallFailureData
public ModelCallFailureTransport? Transport { get; set; }
}
+/// Final lifecycle outcome for one logical model dispatch. A logical dispatch may include internal reconnect or fallback work, so event count is not provider HTTP-request count.
+public sealed partial class ModelCallFinishedData
+{
+ /// Whether an accepted successful response requested the exact name and command semantics of a built-in file edit tool, including an external tool explicitly replacing that built-in name. Absent when the logical dispatch did not produce an accepted response.
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("containsBuiltInFileEditRequest")]
+ public bool? ContainsBuiltInFileEditRequest { get; set; }
+
+ /// Monotonic elapsed time spent in the logical model dispatch, including any internal transport reconnect or fallback and excluding orchestrator retry backoff, tool execution, confirmations, and post-response processing.
+ [JsonConverter(typeof(MillisecondsTimeSpanConverter))]
+ [JsonPropertyName("dispatchDurationMs")]
+ public required TimeSpan DispatchDuration { get; set; }
+
+ /// Version of the built-in file-edit semantic classifier used for this event.
+ [JsonPropertyName("editClassifierVersion")]
+ public required long EditClassifierVersion { get; set; }
+
+ /// Identifier of the user interaction that owns the model dispatch, matching assistant.turn_start.interactionId when available.
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("interactionId")]
+ public string? InteractionId { get; set; }
+
+ /// Final outcome after post-response acceptance processing.
+ [JsonPropertyName("outcome")]
+ public required ModelCallFinishedOutcome Outcome { get; set; }
+
+ /// Agent-loop iteration within the interaction that initiated the model dispatch.
+ [JsonPropertyName("turnId")]
+ public required string TurnId { get; set; }
+}
+
/// Model API dispatch metadata for internal telemetry.
public sealed partial class ModelCallStartData
{
@@ -8288,6 +8339,11 @@ public sealed partial class PermissionPromptRequestMcp : PermissionPromptRequest
[JsonPropertyName("assistedApproval")]
public PermissionAssistedApproval? AssistedApproval { get; set; }
+ /// Whether the host may offer a server-wide "approve all tools from this server" blanket. Absent is treated as true; the runtime sends false when managed policy disables bypass-permissions mode, which forbids the server-wide escalation while still allowing per-tool approval.
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("canOfferServerWideApproval")]
+ public bool? CanOfferServerWideApproval { get; set; }
+
/// Advisory runtime permission recommendation. The host remains responsible for deciding the request and may reject it.
[Experimental(Diagnostics.Experimental)]
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
@@ -11341,6 +11397,73 @@ public override void Write(Utf8JsonWriter writer, ModelCallFailureSource value,
}
}
+/// Final outcome of one logical model dispatch after response acceptance processing.
+[JsonConverter(typeof(Converter))]
+[DebuggerDisplay("{Value,nq}")]
+public readonly struct ModelCallFinishedOutcome : IEquatable
+{
+ private readonly string? _value;
+
+ /// Initializes a new instance of the struct.
+ /// The value to associate with this .
+ [JsonConstructor]
+ public ModelCallFinishedOutcome(string value)
+ {
+ ArgumentException.ThrowIfNullOrWhiteSpace(value);
+ _value = value;
+ }
+
+ /// Gets the value associated with this .
+ public string Value => _value ?? string.Empty;
+
+ /// The provider response was accepted for continued agent processing.
+ public static ModelCallFinishedOutcome Success { get; } = new("success");
+
+ /// The dispatch ended with a provider or transport error.
+ public static ModelCallFinishedOutcome Error { get; } = new("error");
+
+ /// The dispatch was cancelled before an accepted response was produced.
+ public static ModelCallFinishedOutcome Cancelled { get; } = new("cancelled");
+
+ /// The provider response was rejected during post-response acceptance processing.
+ public static ModelCallFinishedOutcome Rejected { get; } = new("rejected");
+
+ /// Returns a value indicating whether two instances are equivalent.
+ public static bool operator ==(ModelCallFinishedOutcome left, ModelCallFinishedOutcome right) => left.Equals(right);
+
+ /// Returns a value indicating whether two instances are not equivalent.
+ public static bool operator !=(ModelCallFinishedOutcome left, ModelCallFinishedOutcome right) => !(left == right);
+
+ ///
+ public override bool Equals(object? obj) => obj is ModelCallFinishedOutcome other && Equals(other);
+
+ ///
+ public bool Equals(ModelCallFinishedOutcome other) => string.Equals(Value, other.Value, StringComparison.OrdinalIgnoreCase);
+
+ ///
+ public override int GetHashCode() => StringComparer.OrdinalIgnoreCase.GetHashCode(Value);
+
+ ///
+ public override string ToString() => Value;
+
+ /// Provides a for serializing instances.
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public sealed class Converter : JsonConverter
+ {
+ ///
+ public override ModelCallFinishedOutcome Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ return new(GeneratedStringEnumJson.ReadValue(ref reader, typeToConvert));
+ }
+
+ ///
+ public override void Write(Utf8JsonWriter writer, ModelCallFinishedOutcome value, JsonSerializerOptions options)
+ {
+ GeneratedStringEnumJson.WriteValue(writer, value.Value, typeof(ModelCallFinishedOutcome));
+ }
+ }
+}
+
/// Finite reason code describing why the current turn was aborted.
[JsonConverter(typeof(Converter))]
[DebuggerDisplay("{Value,nq}")]
@@ -13403,6 +13526,9 @@ public ManagedSettingsEnforcedEscalation(string value)
/// Unrestricted URL fetch access.
public static ManagedSettingsEnforcedEscalation UnrestrictedUrls { get; } = new("unrestricted_urls");
+ /// A server-wide MCP "Always Allow" (or `--allow-tool <server>`) blanket that would auto-approve every tool from an MCP server. Capped to per-tool approval; each tool still prompts.
+ public static ManagedSettingsEnforcedEscalation ServerWideMcpApproval { get; } = new("server_wide_mcp_approval");
+
/// Returns a value indicating whether two instances are equivalent.
public static bool operator ==(ManagedSettingsEnforcedEscalation left, ManagedSettingsEnforcedEscalation right) => left.Equals(right);
@@ -14149,6 +14275,8 @@ public override void Write(Utf8JsonWriter writer, ExtensionsLoadedExtensionStatu
[JsonSerializable(typeof(ModelCallFailureData))]
[JsonSerializable(typeof(ModelCallFailureEvent))]
[JsonSerializable(typeof(ModelCallFailureRequestFingerprint))]
+[JsonSerializable(typeof(ModelCallFinishedData))]
+[JsonSerializable(typeof(ModelCallFinishedEvent))]
[JsonSerializable(typeof(ModelCallStartData))]
[JsonSerializable(typeof(ModelCallStartEvent))]
[JsonSerializable(typeof(OmittedBinaryResult))]
diff --git a/go/client_test.go b/go/client_test.go
index d0139eb11a..2332a77011 100644
--- a/go/client_test.go
+++ b/go/client_test.go
@@ -3834,6 +3834,26 @@ func TestSessionRequests_ManagedSettings(t *testing.T) {
}
})
+ t.Run("accepts future bypass-permissions modes", func(t *testing.T) {
+ req := createSessionRequest{ManagedSettings: &ManagedSettings{
+ Permissions: &ManagedSettingsPermissions{
+ DisableBypassPermissionsMode: DisableBypassPermissionsMode("future-fail-closed-mode"),
+ },
+ }}
+ data, err := json.Marshal(req)
+ if err != nil {
+ t.Fatalf("Failed to marshal: %v", err)
+ }
+ var m map[string]any
+ if err := json.Unmarshal(data, &m); err != nil {
+ t.Fatalf("Failed to unmarshal: %v", err)
+ }
+ perms := m["managedSettings"].(map[string]any)["permissions"].(map[string]any)
+ if perms["disableBypassPermissionsMode"] != "future-fail-closed-mode" {
+ t.Errorf("Expected future mode preserved, got %v", perms["disableBypassPermissionsMode"])
+ }
+ })
+
t.Run("omits managedSettings when nil", func(t *testing.T) {
req := createSessionRequest{}
data, _ := json.Marshal(req)
diff --git a/go/internal/e2e/rpc_tasks_and_handlers_e2e_test.go b/go/internal/e2e/rpc_tasks_and_handlers_e2e_test.go
index 0267f8d042..648855e5a3 100644
--- a/go/internal/e2e/rpc_tasks_and_handlers_e2e_test.go
+++ b/go/internal/e2e/rpc_tasks_and_handlers_e2e_test.go
@@ -127,6 +127,7 @@ func TestRPCTasksAndHandlersE2E(t *testing.T) {
})
t.Run("should report implemented error for invalid task agent model", func(t *testing.T) {
+ ctx.ConfigureForTest(t)
session, err := client.CreateSession(t.Context(), &copilot.SessionConfig{
OnPermissionRequest: copilot.PermissionHandler.ApproveAll,
})
diff --git a/go/rpc/zrpc.go b/go/rpc/zrpc.go
index 69b44cef4c..4abfb47106 100644
--- a/go/rpc/zrpc.go
+++ b/go/rpc/zrpc.go
@@ -1949,6 +1949,25 @@ type ConfigureSessionExtensionsParams struct {
SessionID string `json:"sessionId"`
}
+// Identity of the integrating host, declared once on the `server.connect` handshake so
+// telemetry from this connection is attributed to a single, consistent surface. All fields
+// are optional; omit them to keep the default attribution.
+// Experimental: ConnectClientInfo is part of an experimental API and may change or be
+// removed.
+// Internal: ConnectClientInfo is an internal SDK API and is not part of the public surface.
+type ConnectClientInfo struct {
+ // Name of the host editor, e.g. `"vscode"`.
+ EditorName *string `json:"editorName,omitempty"`
+ // Version of the host editor, e.g. `"1.124.2"`. Ignored unless it looks like a version
+ // string.
+ EditorVersion *string `json:"editorVersion,omitempty"`
+ // Name of the Copilot extension within the host, e.g. `"copilot-chat"`.
+ ExtensionName *string `json:"extensionName,omitempty"`
+ // Version of the Copilot extension within the host, e.g. `"0.54.0"`. Ignored unless it
+ // looks like a version string.
+ ExtensionVersion *string `json:"extensionVersion,omitempty"`
+}
+
// Metadata for a connected remote session.
// Experimental: ConnectedRemoteSessionMetadata is part of an experimental API and may
// change or be removed.
@@ -2002,6 +2021,10 @@ type ConnectRemoteSessionParams struct {
// Experimental: ConnectRequest is part of an experimental API and may change or be removed.
// Internal: ConnectRequest is an internal SDK API and is not part of the public surface.
type ConnectRequest struct {
+ // Identity of the integrating host. Optional; omit it to keep the default attribution.
+ // Internal: ClientInfo is part of the SDK's internal API surface and is not intended for
+ // external use.
+ ClientInfo *ConnectClientInfo `json:"clientInfo,omitempty"`
// Opt this connection in to GitHub telemetry forwarding for its lifetime. When set, the
// runtime forwards every internal telemetry event it emits — across all sessions, plus
// sessionless events — to this connection over the `gitHubTelemetry.event` notification.
@@ -4074,6 +4097,12 @@ type InstalledPlugin struct {
Enabled bool `json:"enabled"`
// Installation timestamp
InstalledAt string `json:"installed_at"`
+ // Absolute path of the marketplace directory a live plugin was resolved from. Present only
+ // on live, never-persisted records — those synthesized at session start for a
+ // directory/local marketplace, whose cache_path points at the real plugin directory on disk
+ // rather than a copy under the installed-plugins cache. Its presence is what marks a record
+ // as live, and no record carrying it is ever written to the persisted installedPlugins key.
+ InstalledFrom *string `json:"installed_from,omitempty"`
// Marketplace the plugin came from (empty string for direct repo installs)
Marketplace string `json:"marketplace"`
// Plugin name
@@ -4100,6 +4129,13 @@ type InstalledPluginInfo struct {
DirectSourceID *string `json:"directSourceId,omitempty"`
// Whether the plugin is currently enabled for new sessions
Enabled bool `json:"enabled"`
+ // Absolute path of the marketplace directory a live plugin was resolved from. Present only
+ // on live, never-persisted records — a plugin belonging to a directory/local marketplace,
+ // which is loaded from its real directory on every pass instead of a copy under the
+ // installed-plugins cache. Its presence is what marks a listed plugin as live: such a
+ // plugin is always present on disk, so `enabled` is its only meaningful state and it is
+ // never "not installed".
+ InstalledFrom *string `json:"installedFrom,omitempty"`
// Marketplace the plugin came from. Empty string ("") for direct repo / URL / local
// installs.
Marketplace string `json:"marketplace"`
@@ -6669,6 +6705,10 @@ type Model struct {
DefaultReasoningEffort *string `json:"defaultReasoningEffort,omitempty"`
// Model identifier (e.g., "claude-sonnet-4.5")
ID string `json:"id"`
+ // Informational notices the service published for this model, such as an upcoming change or
+ // a recommended alternative. Present only when the service published at least one notice.
+ // Hosts should surface these without implying anything is wrong with the model.
+ InfoMessages []ModelMessage `json:"infoMessages,omitzero"`
// Model capability category for grouping in the model picker
ModelPickerCategory *ModelPickerCategory `json:"modelPickerCategory,omitempty"`
// Relative cost tier for token-based billing users
@@ -6684,6 +6724,13 @@ type Model struct {
SupportedContextTiers []string `json:"supportedContextTiers,omitzero"`
// Supported reasoning effort levels (only present if model supports reasoning effort)
SupportedReasoningEfforts []string `json:"supportedReasoningEfforts,omitzero"`
+ // Warnings the service published for this model, such as a deprecated client version.
+ // Present only when the service published at least one warning. The model remains usable;
+ // hosts should surface these as advisory rather than blocking.
+ WarningMessages []ModelMessage `json:"warningMessages,omitzero"`
+ // Warning text the service requires hosts to surface for this model. Present only when the
+ // service published at least one warning.
+ WarningText *ModelWarningText `json:"warningText,omitempty"`
}
// Managed, repository, and CLI model overrides to overlay onto the session at startup.
@@ -6906,6 +6953,18 @@ type ModelListRequest struct {
SkipCache *bool `json:"skipCache,omitempty"`
}
+// A service-published message about a model, carrying a stable machine-readable code
+// alongside human-readable text.
+// Experimental: ModelMessage is part of an experimental API and may change or be removed.
+type ModelMessage struct {
+ // Stable machine-readable identifier for the message, such as `client_version_deprecated`.
+ // Hosts can key custom presentation off this; unrecognized codes should fall back to
+ // displaying `message`.
+ Code string `json:"code"`
+ // Human-readable message text intended for display to the user.
+ Message string `json:"message"`
+}
+
// Experimental: ModelPickerPersistenceRequest is part of an experimental API and may change
// or be removed.
type ModelPickerPersistenceRequest struct {
@@ -7050,6 +7109,15 @@ type ModelSwitchToResult struct {
Warning *string `json:"warning,omitempty"`
}
+// Service-published warning text that hosts should display when presenting a model.
+// Experimental: ModelWarningText is part of an experimental API and may change or be
+// removed.
+type ModelWarningText struct {
+ // Data-retention warning for the model. The text may contain Markdown links and should be
+ // rendered as Markdown when supported.
+ DataRetention *string `json:"dataRetention,omitempty"`
+}
+
// Agent interaction mode to apply to the session.
// Experimental: ModeSetRequest is part of an experimental API and may change or be removed.
type ModeSetRequest struct {
@@ -7926,7 +7994,9 @@ type PermissionLocationResolveResult struct {
// be removed.
type PermissionPathsAddParams struct {
// Directory to add to the allow-list. The runtime resolves and validates the path before
- // adding.
+ // adding, then loads conventional `.github/skills/` and `.github/agents/` definitions under
+ // it when their subsystem gates are enabled. Adding the directory is therefore also a trust
+ // decision for configuration stored there.
Path string `json:"path"`
}
@@ -7953,9 +8023,11 @@ type PermissionPathsAllowedCheckResult struct {
// removed.
type PermissionPathsConfig struct {
// Additional directories to allow tool access to (in addition to the session's working
- // directory). When `unrestricted` is true, these are still pre-populated on the
- // UnrestrictedPathManager so they remain visible via getDirectories() (e.g. for @-mention
- // completion).
+ // directory). Conventional `.github/skills/` and `.github/agents/` definitions under them
+ // also join the session catalogs when their subsystem gates are enabled, so supplying a
+ // directory is a trust decision for configuration stored there. When `unrestricted` is
+ // true, these are still pre-populated on the UnrestrictedPathManager so they remain visible
+ // via getDirectories() (e.g. for @-mention completion).
AdditionalDirectories []string `json:"additionalDirectories,omitzero"`
// Whether to include the system temp directory in the allowed list (defaults to true).
// Ignored when `unrestricted` is true.
@@ -9589,6 +9661,10 @@ type QueuePendingItems struct {
// Experimental: QueuePendingItemsResult is part of an experimental API and may change or be
// removed.
type QueuePendingItemsResult struct {
+ // How many leading entries of `steeringMessages` have already been folded into the running
+ // turn (and so have an emitted `user.message`), as opposed to still waiting for one. Absent
+ // for hosts that do not distinguish the two.
+ InFlightSteeringCount *int64 `json:"inFlightSteeringCount,omitempty"`
// Pending queued items in submission order. Includes user messages, queued slash commands,
// and queued model changes; omits internal system items.
Items []QueuePendingItems `json:"items"`
@@ -10002,9 +10078,9 @@ type SandboxConfig struct {
// Whether to auto-grant read access to the tool directories discovered on PATH and in
// toolchain environment variables (GOROOT, CARGO_HOME, JAVA_HOME, VIRTUAL_ENV, and
// similar), and to common developer-tool caches, registries, and toolchains in their
- // default home locations (cargo, go, npm, Maven, and more), plus read-write access to (and,
- // on Unix, up-front creation of) the scratch caches builds write on every run (go-build,
- // ccache, sccache, Gradle caches, Cargo lock/tracker files), so builds work without extra
+ // default home locations (cargo, go, npm, Maven, and more), plus read-write access to (and
+ // up-front creation of) the scratch caches builds write on every run (go-build, ccache,
+ // sccache, Gradle caches, Cargo lock/tracker files), so builds work without extra
// configuration; a relocated CARGO_HOME additionally gets its Cargo lock files granted
// read-write. Set to false to disable every grant listed above: user-installed toolchains
// (rustup, nvm, pyenv, conda, pipx) then need explicit userPolicy.filesystem entries —
@@ -11187,6 +11263,12 @@ type SessionInstalledPlugin struct {
Enabled bool `json:"enabled"`
// Installation timestamp (ISO-8601)
InstalledAt string `json:"installed_at"`
+ // Absolute path of the marketplace directory a live plugin was resolved from. Present only
+ // on live, never-persisted records — those synthesized at session start for a
+ // directory/local marketplace, whose cache_path points at the real plugin directory on disk
+ // rather than a copy under the installed-plugins cache. Its presence is what marks a record
+ // as live, and no record carrying it is ever written to the persisted installedPlugins key.
+ InstalledFrom *string `json:"installed_from,omitempty"`
// Marketplace the plugin came from (empty string for direct repo installs)
Marketplace string `json:"marketplace"`
// Plugin name
@@ -11474,8 +11556,12 @@ type SessionManagedPermissions struct {
Ask []string `json:"ask,omitzero"`
// Permission rules that block matching operations. Deny has highest precedence.
Deny []string `json:"deny,omitzero"`
- // When set to `disable`, prevents bypass/allow-all permission modes.
- DisableBypassPermissionsMode *DisableBypassPermissionsMode `json:"disableBypassPermissionsMode,omitempty"`
+ // When set to `disable`, prevents bypass/allow-all permission modes. `allow-auto-only`
+ // blocks full allow-all but permits advisory auto-approval. Any other value is accepted
+ // rather than failing the session, but is enforced as `disable`: the key is only present to
+ // restrict something, so a mode this runtime cannot interpret fails closed to the most
+ // restrictive one it knows. Omit the key entirely to impose no restriction.
+ DisableBypassPermissionsMode *string `json:"disableBypassPermissionsMode,omitempty"`
}
// Managed settings an SDK host may inject at session startup. Only permissions are accepted
@@ -11636,11 +11722,15 @@ type SessionOpenOptions struct {
AdditionalContentExclusionPolicies []SessionOpenOptionsAdditionalContentExclusionPolicy `json:"additionalContentExclusionPolicies,omitzero"`
// Additional directories the agent may access beyond the working directory. Each entry is
// granted to the session's file-access allow-list and surfaced to the model (system prompt
- // context and `@`-mention completion). Absolute paths are recommended; a relative path is
- // resolved against the session's working directory. Nonexistent or unresolvable entries are
- // skipped with a warning. This is applied on both session creation and resume, and is not
- // persisted: a resumed session that omits this option does not retain previously supplied
- // directories (re-supply them, exactly as the CLI re-passes `--add-dir`).
+ // context and `@`-mention completion). Conventional `.github/skills/` and `.github/agents/`
+ // definitions under each directory also join the session's project catalogs when their
+ // existing subsystem gates are enabled: added-root skills require both
+ // `enableConfigDiscovery` and effective `enableSkills`; added-root agents require
+ // `enableConfigDiscovery`. Supplying a directory therefore activates configuration from it
+ // and should be treated as a trust decision. Absolute paths are recommended; a relative
+ // path is resolved against the session's working directory. Nonexistent or unresolvable
+ // entries are skipped with a warning. This is applied during session creation and cold
+ // resume and is not persisted, so a cold resume must re-supply the directories.
AdditionalDirectories []string `json:"additionalDirectories,omitzero"`
// Runtime context discriminator for agent filtering.
AgentContext *string `json:"agentContext,omitempty"`
@@ -16018,14 +16108,6 @@ const (
DebugCollectLogsSourceShellLog DebugCollectLogsSource = "shell-log"
)
-// Experimental: DisableBypassPermissionsMode is part of an experimental API and may change
-// or be removed.
-type DisableBypassPermissionsMode string
-
-const (
- DisableBypassPermissionsModeDisable DisableBypassPermissionsMode = "disable"
-)
-
// Effective extension loading and agent-management mode
// Experimental: DiscoveredExtensionMode is part of an experimental API and may change or be
// removed.
@@ -23973,7 +24055,8 @@ func (s *PermissionsAPI) Locations() *PermissionsLocationsAPI {
// removed.
type PermissionsPathsAPI sessionAPI
-// Adds a directory to the session's allow-list.
+// Adds a directory to the session's allow-list and activates conventional skill and agent
+// definitions under it.
//
// RPC method: session.permissions.paths.add.
//
diff --git a/go/rpc/zsession_encoding.go b/go/rpc/zsession_encoding.go
index fb7412d396..5c5d3bca27 100644
--- a/go/rpc/zsession_encoding.go
+++ b/go/rpc/zsession_encoding.go
@@ -299,6 +299,12 @@ func (e *SessionEvent) UnmarshalJSON(data []byte) error {
return err
}
e.Data = &d
+ case SessionEventTypeModelCallFinished:
+ var d ModelCallFinishedData
+ if err := json.Unmarshal(raw.Data, &d); err != nil {
+ return err
+ }
+ e.Data = &d
case SessionEventTypeModelCallStart:
var d ModelCallStartData
if err := json.Unmarshal(raw.Data, &d); err != nil {
diff --git a/go/rpc/zsession_events.go b/go/rpc/zsession_events.go
index 82b0470dbf..89bd6a449d 100644
--- a/go/rpc/zsession_events.go
+++ b/go/rpc/zsession_events.go
@@ -103,6 +103,7 @@ const (
SessionEventTypeMCPResourcesListChanged SessionEventType = "mcp.resources.list_changed"
SessionEventTypeMCPToolsListChanged SessionEventType = "mcp.tools.list_changed"
SessionEventTypeModelCallFailure SessionEventType = "model.call_failure"
+ SessionEventTypeModelCallFinished SessionEventType = "model.call_finished"
SessionEventTypeModelCallStart SessionEventType = "model.call_start"
SessionEventTypePendingMessagesModified SessionEventType = "pending_messages.modified"
SessionEventTypePermissionCompleted SessionEventType = "permission.completed"
@@ -942,6 +943,25 @@ type ModelCallFailureData struct {
func (*ModelCallFailureData) sessionEventData() {}
func (*ModelCallFailureData) Type() SessionEventType { return SessionEventTypeModelCallFailure }
+// Final lifecycle outcome for one logical model dispatch. A logical dispatch may include internal reconnect or fallback work, so event count is not provider HTTP-request count.
+type ModelCallFinishedData struct {
+ // Whether an accepted successful response requested the exact name and command semantics of a built-in file edit tool, including an external tool explicitly replacing that built-in name. Absent when the logical dispatch did not produce an accepted response.
+ ContainsBuiltInFileEditRequest *bool `json:"containsBuiltInFileEditRequest,omitempty"`
+ // Monotonic elapsed time spent in the logical model dispatch, including any internal transport reconnect or fallback and excluding orchestrator retry backoff, tool execution, confirmations, and post-response processing
+ DispatchDurationMs float64 `json:"dispatchDurationMs"`
+ // Version of the built-in file-edit semantic classifier used for this event
+ EditClassifierVersion int64 `json:"editClassifierVersion"`
+ // Identifier of the user interaction that owns the model dispatch, matching assistant.turn_start.interactionId when available
+ InteractionID *string `json:"interactionId,omitempty"`
+ // Final outcome after post-response acceptance processing
+ Outcome ModelCallFinishedOutcome `json:"outcome"`
+ // Agent-loop iteration within the interaction that initiated the model dispatch
+ TurnID string `json:"turnId"`
+}
+
+func (*ModelCallFinishedData) sessionEventData() {}
+func (*ModelCallFinishedData) Type() SessionEventType { return SessionEventTypeModelCallFinished }
+
// Hook invocation completion details including output, success status, and error information
type HookEndData struct {
// Error details when the hook failed
@@ -1047,6 +1067,8 @@ type AssistantUsageData struct {
NumToolCalls *int64 `json:"numToolCalls,omitempty"`
// Number of output tokens produced
OutputTokens *int64 `json:"outputTokens,omitempty"`
+ // Time to first observable model output in milliseconds. Includes text, reasoning, and tool-call output; only available for streaming requests that produce observable output.
+ OutputTtftMs *float64 `json:"outputTtftMs,omitempty"`
// Parent tool call ID when this usage originates from a sub-agent
// Deprecated: ParentToolCallID is deprecated.
ParentToolCallID *string `json:"parentToolCallId,omitempty"`
@@ -3108,6 +3130,8 @@ type PermissionPromptRequestMCP struct {
// Assisted-approval judge information for this request; present only in assisted mode.
// Experimental: AssistedApproval is part of an experimental API and may change or be removed.
AssistedApproval *PermissionAssistedApproval `json:"assistedApproval,omitempty"`
+ // Whether the host may offer a server-wide "approve all tools from this server" blanket. Absent is treated as true; the runtime sends false when managed policy disables bypass-permissions mode, which forbids the server-wide escalation while still allowing per-tool approval.
+ CanOfferServerWideApproval *bool `json:"canOfferServerWideApproval,omitempty"`
// Advisory runtime permission recommendation. The host remains responsible for deciding the request and may reject it.
// Experimental: PermissionRecommendation is part of an experimental API and may change or be removed.
PermissionRecommendation *PermissionRecommendation `json:"permissionRecommendation,omitempty"`
@@ -4710,6 +4734,8 @@ const (
ManagedSettingsEnforcedEscalationApproveAll ManagedSettingsEnforcedEscalation = "approve_all"
// Assisted mode — keeps normal prompt paths and adds an LLM recommendation, distinct from allow-all.
ManagedSettingsEnforcedEscalationAssistedApproval ManagedSettingsEnforcedEscalation = "assisted_approval"
+ // A server-wide MCP "Always Allow" (or `--allow-tool `) blanket that would auto-approve every tool from an MCP server. Capped to per-tool approval; each tool still prompts.
+ ManagedSettingsEnforcedEscalationServerWideMCPApproval ManagedSettingsEnforcedEscalation = "server_wide_mcp_approval"
// Unrestricted filesystem access outside the session's allowed directories.
ManagedSettingsEnforcedEscalationUnrestrictedPaths ManagedSettingsEnforcedEscalation = "unrestricted_paths"
// Unrestricted URL fetch access.
@@ -4843,6 +4869,20 @@ const (
ModelCallFailureTransportWebsocket ModelCallFailureTransport = "websocket"
)
+// Final outcome of one logical model dispatch after response acceptance processing
+type ModelCallFinishedOutcome string
+
+const (
+ // The dispatch was cancelled before an accepted response was produced.
+ ModelCallFinishedOutcomeCancelled ModelCallFinishedOutcome = "cancelled"
+ // The dispatch ended with a provider or transport error.
+ ModelCallFinishedOutcomeError ModelCallFinishedOutcome = "error"
+ // The provider response was rejected during post-response acceptance processing.
+ ModelCallFinishedOutcomeRejected ModelCallFinishedOutcome = "rejected"
+ // The provider response was accepted for continued agent processing.
+ ModelCallFinishedOutcomeSuccess ModelCallFinishedOutcome = "success"
+)
+
// Binary result type discriminator. Use "image" for images and "resource" for other binary data.
type OmittedBinaryType string
diff --git a/go/types.go b/go/types.go
index 60781d1da8..c8cf72197b 100644
--- a/go/types.go
+++ b/go/types.go
@@ -1569,11 +1569,16 @@ type ManagedSettings struct {
}
// DisableBypassPermissionsMode is the managed bypass-permissions policy.
-type DisableBypassPermissionsMode = rpc.DisableBypassPermissionsMode
+//
+// The runtime may introduce additional fail-closed modes. Values are serialized
+// as strings so callers can use newer modes without waiting for an SDK release.
+type DisableBypassPermissionsMode string
const (
// DisableBypassPermissionsModeDisable turns off bypass-permissions mode.
- DisableBypassPermissionsModeDisable = rpc.DisableBypassPermissionsModeDisable
+ DisableBypassPermissionsModeDisable DisableBypassPermissionsMode = "disable"
+ // DisableBypassPermissionsModeAllowAutoOnly permits only automatic bypass.
+ DisableBypassPermissionsModeAllowAutoOnly DisableBypassPermissionsMode = "allow-auto-only"
)
// ManagedSettingsPermissions is the permissions-only managed policy injected
diff --git a/go/zsession_events.go b/go/zsession_events.go
index 711943b45d..209d08181c 100644
--- a/go/zsession_events.go
+++ b/go/zsession_events.go
@@ -155,6 +155,8 @@ type (
ModelCallFailureRequestFingerprint = rpc.ModelCallFailureRequestFingerprint
ModelCallFailureSource = rpc.ModelCallFailureSource
ModelCallFailureTransport = rpc.ModelCallFailureTransport
+ ModelCallFinishedData = rpc.ModelCallFinishedData
+ ModelCallFinishedOutcome = rpc.ModelCallFinishedOutcome
ModelCallStartData = rpc.ModelCallStartData
ModelChangeSource = rpc.ModelChangeSource
OmittedBinaryOmittedReason = rpc.OmittedBinaryOmittedReason
@@ -498,6 +500,7 @@ const (
ManagedSettingsEnforcedEscalationAllowAll = rpc.ManagedSettingsEnforcedEscalationAllowAll
ManagedSettingsEnforcedEscalationApproveAll = rpc.ManagedSettingsEnforcedEscalationApproveAll
ManagedSettingsEnforcedEscalationAssistedApproval = rpc.ManagedSettingsEnforcedEscalationAssistedApproval
+ ManagedSettingsEnforcedEscalationServerWideMCPApproval = rpc.ManagedSettingsEnforcedEscalationServerWideMCPApproval
ManagedSettingsEnforcedEscalationUnrestrictedPaths = rpc.ManagedSettingsEnforcedEscalationUnrestrictedPaths
ManagedSettingsEnforcedEscalationUnrestrictedURLs = rpc.ManagedSettingsEnforcedEscalationUnrestrictedURLs
ManagedSettingsResolvedSourceClient = rpc.ManagedSettingsResolvedSourceClient
@@ -542,6 +545,10 @@ const (
ModelCallFailureSourceTopLevel = rpc.ModelCallFailureSourceTopLevel
ModelCallFailureTransportHTTP = rpc.ModelCallFailureTransportHTTP
ModelCallFailureTransportWebsocket = rpc.ModelCallFailureTransportWebsocket
+ ModelCallFinishedOutcomeCancelled = rpc.ModelCallFinishedOutcomeCancelled
+ ModelCallFinishedOutcomeError = rpc.ModelCallFinishedOutcomeError
+ ModelCallFinishedOutcomeRejected = rpc.ModelCallFinishedOutcomeRejected
+ ModelCallFinishedOutcomeSuccess = rpc.ModelCallFinishedOutcomeSuccess
ModelChangeSourceAgent = rpc.ModelChangeSourceAgent
ModelChangeSourceAutomatic = rpc.ModelChangeSourceAutomatic
ModelChangeSourceConfigCommand = rpc.ModelChangeSourceConfigCommand
@@ -660,6 +667,7 @@ const (
SessionEventTypeMCPResourcesListChanged = rpc.SessionEventTypeMCPResourcesListChanged
SessionEventTypeMCPToolsListChanged = rpc.SessionEventTypeMCPToolsListChanged
SessionEventTypeModelCallFailure = rpc.SessionEventTypeModelCallFailure
+ SessionEventTypeModelCallFinished = rpc.SessionEventTypeModelCallFinished
SessionEventTypeModelCallStart = rpc.SessionEventTypeModelCallStart
SessionEventTypePendingMessagesModified = rpc.SessionEventTypePendingMessagesModified
SessionEventTypePermissionCompleted = rpc.SessionEventTypePermissionCompleted
diff --git a/java/pom.xml b/java/pom.xml
index d6b0ee3d33..2d6c22bea6 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -63,7 +63,7 @@
DO NOT EDIT MANUALLY. Updated by the update-copilot-dependency
workflow.
-->
- ^1.0.81-6
+ ^1.0.81-9true
diff --git a/java/scripts/codegen/package-lock.json b/java/scripts/codegen/package-lock.json
index be096fe130..9296b91c85 100644
--- a/java/scripts/codegen/package-lock.json
+++ b/java/scripts/codegen/package-lock.json
@@ -6,7 +6,7 @@
"": {
"name": "copilot-sdk-java-codegen",
"dependencies": {
- "@github/copilot": "^1.0.81-6",
+ "@github/copilot": "^1.0.81-9",
"json-schema": "^0.4.0",
"tsx": "^4.23.12"
}
@@ -428,9 +428,9 @@
}
},
"node_modules/@github/copilot": {
- "version": "1.0.81-6",
- "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.81-6.tgz",
- "integrity": "sha512-hT29nRkf0EJE3N6lqeLOPszbdEyALZ+fjYG9zKX5a3L5r+o+m4/KF+8l2gn2yORNqOzwUYNj2vnVzKqeYYNLGg==",
+ "version": "1.0.81-9",
+ "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.81-9.tgz",
+ "integrity": "sha512-4AuNUN2aOmLnxB+Y7/3L37pJi3TYqOzTwDtSwJ5m1a0WveQXTvbj31gDnVJ/hLy5Jmlr86Wgef2VCiVyiLMttg==",
"license": "SEE LICENSE IN LICENSE.md",
"dependencies": {
"detect-libc": "^2.1.2"
@@ -439,20 +439,20 @@
"copilot": "npm-loader.js"
},
"optionalDependencies": {
- "@github/copilot-darwin-arm64": "1.0.81-6",
- "@github/copilot-darwin-x64": "1.0.81-6",
- "@github/copilot-linux-arm64": "1.0.81-6",
- "@github/copilot-linux-x64": "1.0.81-6",
- "@github/copilot-linuxmusl-arm64": "1.0.81-6",
- "@github/copilot-linuxmusl-x64": "1.0.81-6",
- "@github/copilot-win32-arm64": "1.0.81-6",
- "@github/copilot-win32-x64": "1.0.81-6"
+ "@github/copilot-darwin-arm64": "1.0.81-9",
+ "@github/copilot-darwin-x64": "1.0.81-9",
+ "@github/copilot-linux-arm64": "1.0.81-9",
+ "@github/copilot-linux-x64": "1.0.81-9",
+ "@github/copilot-linuxmusl-arm64": "1.0.81-9",
+ "@github/copilot-linuxmusl-x64": "1.0.81-9",
+ "@github/copilot-win32-arm64": "1.0.81-9",
+ "@github/copilot-win32-x64": "1.0.81-9"
}
},
"node_modules/@github/copilot-darwin-arm64": {
- "version": "1.0.81-6",
- "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.81-6.tgz",
- "integrity": "sha512-nALa4e8Jc/g5ltIHrpHBHByJ5rlgzoZFylZIrkQY+B9vr3L57d5F6fOiTbf/OF9blFQX7artWRE1K0TmowGNCA==",
+ "version": "1.0.81-9",
+ "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.81-9.tgz",
+ "integrity": "sha512-knqJbbb9crWaMAqP2OoOcXC9uWVRs+iBxZXao146L5EshnWsFFsoihSAAtU9B2ONlggJj+K5APOMNEJM1NMHgw==",
"cpu": [
"arm64"
],
@@ -466,9 +466,9 @@
}
},
"node_modules/@github/copilot-darwin-x64": {
- "version": "1.0.81-6",
- "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.81-6.tgz",
- "integrity": "sha512-K+bp799DejrsmxMNyaFAmKo4xnLJXBb8hkv9N8OCQukmTSoRpfqhv2oTDfgVFadwllt+py/FIdxKTZQYvPGGGw==",
+ "version": "1.0.81-9",
+ "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.81-9.tgz",
+ "integrity": "sha512-Qn4mQRKHFXsH/Kv0V1h2m3K24Tnc2MHAeXeoOPoOt410ROb1QcLTdXDRb+eu4ZrZQcHrSV44bYHMuFX+iH1itQ==",
"cpu": [
"x64"
],
@@ -482,9 +482,9 @@
}
},
"node_modules/@github/copilot-linux-arm64": {
- "version": "1.0.81-6",
- "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.81-6.tgz",
- "integrity": "sha512-aEpnfTTjOxpesFo9jqk/phZUivOhNHbdBRfBrS2NiCPrQZFBYUC4wRVo/Xo2PMMQ4J07b6fU7JJQPoUUkKy5Wg==",
+ "version": "1.0.81-9",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.81-9.tgz",
+ "integrity": "sha512-JxFD/kUuyiqWulUJ4WNCAFLQJNfWdZabF3N16GDxaPrG7aOBB602Gi+wM6nn9Yf80j7/G56hyArRRKQji5+Rsg==",
"cpu": [
"arm64"
],
@@ -498,9 +498,9 @@
}
},
"node_modules/@github/copilot-linux-x64": {
- "version": "1.0.81-6",
- "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.81-6.tgz",
- "integrity": "sha512-NFqonFfJCyA7d3bNoYeLWUQ69zelPr9TTnLpAHCi3scFZqbEvMBDFxW2XsKWwfYuuR9XzfU7/tgOUgq3gmL5aA==",
+ "version": "1.0.81-9",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.81-9.tgz",
+ "integrity": "sha512-1mR5AqfBMbzk4D9bij12pJKcQ7WuHfg0pe68g126crVGsAgSoOLNahd+TlTZK2YLcv06q30tUBgpxq78QS7fkg==",
"cpu": [
"x64"
],
@@ -514,9 +514,9 @@
}
},
"node_modules/@github/copilot-linuxmusl-arm64": {
- "version": "1.0.81-6",
- "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-arm64/-/copilot-linuxmusl-arm64-1.0.81-6.tgz",
- "integrity": "sha512-EE99DFTAgTq6eOFDiiv+OUROD2pDQIrzyyJEfUS9K8JanwNc+Py8vTxrJ0yK0slpJ+Fue5uDRno6c9ys8OM59g==",
+ "version": "1.0.81-9",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-arm64/-/copilot-linuxmusl-arm64-1.0.81-9.tgz",
+ "integrity": "sha512-AaU/3tn39dM/v2UObeWEqLfRWhyfwNILXLLG8ErrW7a3lo27+qWrIHaI85oZiYEsjtwWEJm7Cw0Q3Gfy1SW3RQ==",
"cpu": [
"arm64"
],
@@ -530,9 +530,9 @@
}
},
"node_modules/@github/copilot-linuxmusl-x64": {
- "version": "1.0.81-6",
- "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-x64/-/copilot-linuxmusl-x64-1.0.81-6.tgz",
- "integrity": "sha512-90HRKx25EjhlQNOCCdbiC0Ck0fSKyp8XUxUoCvuNdoigdUP54ZGS07dkyJiJq9KZaKilxZBSpXiNt8t5ETA2Sg==",
+ "version": "1.0.81-9",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-x64/-/copilot-linuxmusl-x64-1.0.81-9.tgz",
+ "integrity": "sha512-Yu/4rf++dmTnTrq49K448dSKCmNGUmCat//Zik5SaIQh+cv3TMis/JJtR7QyQgNWxrOByGmpMr0u6nSKyLgRog==",
"cpu": [
"x64"
],
@@ -546,9 +546,9 @@
}
},
"node_modules/@github/copilot-win32-arm64": {
- "version": "1.0.81-6",
- "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.81-6.tgz",
- "integrity": "sha512-1dRSHF/7PFzB+AGORg8BJh2n1+N7+sIJDLqozrC9INWFp1t6ercptIXgJTF/V7UZVGQLO4LBBK1HH/QhzUmrfA==",
+ "version": "1.0.81-9",
+ "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.81-9.tgz",
+ "integrity": "sha512-g38mc4ld1ZKTWwc9ponJpgK2jvuD/JMeFwgnYeyX2H7O1/jWBJU8fjt/2pTSdFDz0+kpxaw1DiHCS1xMgIb7zg==",
"cpu": [
"arm64"
],
@@ -562,9 +562,9 @@
}
},
"node_modules/@github/copilot-win32-x64": {
- "version": "1.0.81-6",
- "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.81-6.tgz",
- "integrity": "sha512-lIbN1mk6Rm9bWrWU4/UfrC5OCga7XcBi2LBz5roDnNcuG8mKEevDcNOtbEYz/TaJg+WBMoTbGfXBVd1hGy2DTA==",
+ "version": "1.0.81-9",
+ "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.81-9.tgz",
+ "integrity": "sha512-Ilvrz4A6T/oKxN2HSPG4qaXlSWrRQZ9vdhpAa9ChQfPQ4WNaiQB5vZ5yESp3QZlN9S/7WVXiQK0WdrLWCwx4Pg==",
"cpu": [
"x64"
],
diff --git a/java/scripts/codegen/package.json b/java/scripts/codegen/package.json
index 18bdca9bcd..4963f064e9 100644
--- a/java/scripts/codegen/package.json
+++ b/java/scripts/codegen/package.json
@@ -7,7 +7,7 @@
"generate:java": "tsx java.ts"
},
"dependencies": {
- "@github/copilot": "^1.0.81-6",
+ "@github/copilot": "^1.0.81-9",
"json-schema": "^0.4.0",
"tsx": "^4.23.12"
}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/AssistantUsageEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantUsageEvent.java
index 6d94a553da..ff4cfddec8 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/AssistantUsageEvent.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/AssistantUsageEvent.java
@@ -56,6 +56,8 @@ public record AssistantUsageEventData(
@JsonProperty("duration") Long duration,
/** Time to first token in milliseconds. Only available for streaming requests */
@JsonProperty("timeToFirstTokenMs") Double timeToFirstTokenMs,
+ /** Time to first observable model output in milliseconds. Includes text, reasoning, and tool-call output; only available for streaming requests that produce observable output. */
+ @JsonProperty("outputTtftMs") Double outputTtftMs,
/** Average inter-token latency in milliseconds. Only available for streaming requests */
@JsonProperty("interTokenLatencyMs") Double interTokenLatencyMs,
/** What initiated this API call (e.g., "sub-agent", "mcp-sampling"); absent for user-initiated calls */
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/ManagedSettingsEnforcedEscalation.java b/java/sdk/src/generated/java/com/github/copilot/generated/ManagedSettingsEnforcedEscalation.java
index 3b4f9917fc..619fb326e1 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/ManagedSettingsEnforcedEscalation.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/ManagedSettingsEnforcedEscalation.java
@@ -25,7 +25,9 @@ public enum ManagedSettingsEnforcedEscalation {
/** The {@code unrestricted_paths} variant. */
UNRESTRICTED_PATHS("unrestricted_paths"),
/** The {@code unrestricted_urls} variant. */
- UNRESTRICTED_URLS("unrestricted_urls");
+ UNRESTRICTED_URLS("unrestricted_urls"),
+ /** The {@code server_wide_mcp_approval} variant. */
+ SERVER_WIDE_MCP_APPROVAL("server_wide_mcp_approval");
private final String value;
ManagedSettingsEnforcedEscalation(String value) { this.value = value; }
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/ModelCallFinishedEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/ModelCallFinishedEvent.java
new file mode 100644
index 0000000000..a1b424e807
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/ModelCallFinishedEvent.java
@@ -0,0 +1,51 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: session-events.schema.json
+
+package com.github.copilot.generated;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.processing.Generated;
+
+/**
+ * Session event "model.call_finished". Final lifecycle outcome for one logical model dispatch. A logical dispatch may include internal reconnect or fallback work, so event count is not provider HTTP-request count.
+ * @since 1.0.0
+ */
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public final class ModelCallFinishedEvent extends SessionEvent {
+
+ @Override
+ public String getType() { return "model.call_finished"; }
+
+ @JsonProperty("data")
+ private ModelCallFinishedEventData data;
+
+ public ModelCallFinishedEventData getData() { return data; }
+ public void setData(ModelCallFinishedEventData data) { this.data = data; }
+
+ /** Data payload for {@link ModelCallFinishedEvent}. */
+ @JsonIgnoreProperties(ignoreUnknown = true)
+ @JsonInclude(JsonInclude.Include.NON_NULL)
+ public record ModelCallFinishedEventData(
+ /** Agent-loop iteration within the interaction that initiated the model dispatch */
+ @JsonProperty("turnId") String turnId,
+ /** Identifier of the user interaction that owns the model dispatch, matching assistant.turn_start.interactionId when available */
+ @JsonProperty("interactionId") String interactionId,
+ /** Monotonic elapsed time spent in the logical model dispatch, including any internal transport reconnect or fallback and excluding orchestrator retry backoff, tool execution, confirmations, and post-response processing */
+ @JsonProperty("dispatchDurationMs") Double dispatchDurationMs,
+ /** Final outcome after post-response acceptance processing */
+ @JsonProperty("outcome") ModelCallFinishedOutcome outcome,
+ /** Whether an accepted successful response requested the exact name and command semantics of a built-in file edit tool, including an external tool explicitly replacing that built-in name. Absent when the logical dispatch did not produce an accepted response. */
+ @JsonProperty("containsBuiltInFileEditRequest") Boolean containsBuiltInFileEditRequest,
+ /** Version of the built-in file-edit semantic classifier used for this event */
+ @JsonProperty("editClassifierVersion") Long editClassifierVersion
+ ) {
+ }
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/ModelCallFinishedOutcome.java b/java/sdk/src/generated/java/com/github/copilot/generated/ModelCallFinishedOutcome.java
new file mode 100644
index 0000000000..8b86ed0281
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/ModelCallFinishedOutcome.java
@@ -0,0 +1,39 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: session-events.schema.json
+
+package com.github.copilot.generated;
+
+import javax.annotation.processing.Generated;
+
+/**
+ * Final outcome of one logical model dispatch after response acceptance processing
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+public enum ModelCallFinishedOutcome {
+ /** The {@code success} variant. */
+ SUCCESS("success"),
+ /** The {@code error} variant. */
+ ERROR("error"),
+ /** The {@code cancelled} variant. */
+ CANCELLED("cancelled"),
+ /** The {@code rejected} variant. */
+ REJECTED("rejected");
+
+ private final String value;
+ ModelCallFinishedOutcome(String value) { this.value = value; }
+ @com.fasterxml.jackson.annotation.JsonValue
+ public String getValue() { return value; }
+ @com.fasterxml.jackson.annotation.JsonCreator
+ public static ModelCallFinishedOutcome fromValue(String value) {
+ for (ModelCallFinishedOutcome v : values()) {
+ if (v.value.equals(value)) return v;
+ }
+ throw new IllegalArgumentException("Unknown ModelCallFinishedOutcome value: " + value);
+ }
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/SessionEvent.java b/java/sdk/src/generated/java/com/github/copilot/generated/SessionEvent.java
index a1da651ddb..0acc3df712 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/SessionEvent.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/SessionEvent.java
@@ -74,6 +74,7 @@
@JsonSubTypes.Type(value = AssistantUsageEvent.class, name = "assistant.usage"),
@JsonSubTypes.Type(value = PromptCacheBreakEvent.class, name = "prompt_cache_break"),
@JsonSubTypes.Type(value = ModelCallFailureEvent.class, name = "model.call_failure"),
+ @JsonSubTypes.Type(value = ModelCallFinishedEvent.class, name = "model.call_finished"),
@JsonSubTypes.Type(value = ModelCallStartEvent.class, name = "model.call_start"),
@JsonSubTypes.Type(value = AbortEvent.class, name = "abort"),
@JsonSubTypes.Type(value = ToolUserRequestedEvent.class, name = "tool.user_requested"),
@@ -198,6 +199,7 @@ public abstract sealed class SessionEvent permits
AssistantUsageEvent,
PromptCacheBreakEvent,
ModelCallFailureEvent,
+ ModelCallFinishedEvent,
ModelCallStartEvent,
AbortEvent,
ToolUserRequestedEvent,
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ConnectClientInfo.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ConnectClientInfo.java
new file mode 100644
index 0000000000..e5b6b6f24d
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ConnectClientInfo.java
@@ -0,0 +1,33 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: api.schema.json
+
+package com.github.copilot.generated.rpc;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.processing.Generated;
+
+/**
+ * Identity of the integrating host, declared once on the `server.connect` handshake so telemetry from this connection is attributed to a single, consistent surface. All fields are optional; omit them to keep the default attribution.
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public record ConnectClientInfo(
+ /** Name of the host editor, e.g. `"vscode"`. */
+ @JsonProperty("editorName") String editorName,
+ /** Version of the host editor, e.g. `"1.124.2"`. Ignored unless it looks like a version string. */
+ @JsonProperty("editorVersion") String editorVersion,
+ /** Name of the Copilot extension within the host, e.g. `"copilot-chat"`. */
+ @JsonProperty("extensionName") String extensionName,
+ /** Version of the Copilot extension within the host, e.g. `"0.54.0"`. Ignored unless it looks like a version string. */
+ @JsonProperty("extensionVersion") String extensionVersion
+) {
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ConnectParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ConnectParams.java
index d59f8fd6b0..05f2534970 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ConnectParams.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ConnectParams.java
@@ -26,6 +26,8 @@
public record ConnectParams(
/** Opt this connection in to GitHub telemetry forwarding for its lifetime. When set, the runtime forwards every internal telemetry event it emits — across all sessions, plus sessionless events — to this connection over the `gitHubTelemetry.event` notification. Regular events are also written to the runtime's normal GitHub/CTS path (dual-write); host-only compatibility events are forward-only and intentionally skip that path. Intended for first-party hosts that re-emit the events into their own telemetry stores. Both unrestricted and restricted events are forwarded, each tagged with a `restricted` discriminator; a backstop drops restricted events when restricted telemetry is disabled — using the process-global gate for ordinary events and an explicit session-scoped decision for host-only events. */
@JsonProperty("enableGitHubTelemetryForwarding") Boolean enableGitHubTelemetryForwarding,
+ /** Identity of the integrating host. Optional; omit it to keep the default attribution. */
+ @JsonProperty("clientInfo") ConnectClientInfo clientInfo,
/** Connection token; required when the server was started with COPILOT_CONNECTION_TOKEN */
@JsonProperty("token") String token
) {
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/DisableBypassPermissionsMode.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/DisableBypassPermissionsMode.java
deleted file mode 100644
index 1e6b1e7db6..0000000000
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/DisableBypassPermissionsMode.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- *--------------------------------------------------------------------------------------------*/
-
-// AUTO-GENERATED FILE - DO NOT EDIT
-// Generated from: api.schema.json
-
-package com.github.copilot.generated.rpc;
-
-import javax.annotation.processing.Generated;
-
-@javax.annotation.processing.Generated("copilot-sdk-codegen")
-public enum DisableBypassPermissionsMode {
- /** The {@code disable} variant. */
- DISABLE("disable");
-
- private final String value;
- DisableBypassPermissionsMode(String value) { this.value = value; }
- @com.fasterxml.jackson.annotation.JsonValue
- public String getValue() { return value; }
- @com.fasterxml.jackson.annotation.JsonCreator
- public static DisableBypassPermissionsMode fromValue(String value) {
- for (DisableBypassPermissionsMode v : values()) {
- if (v.value.equals(value)) return v;
- }
- throw new IllegalArgumentException("Unknown DisableBypassPermissionsMode value: " + value);
- }
-}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstalledPlugin.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstalledPlugin.java
index 3da690f47b..e372049403 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstalledPlugin.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstalledPlugin.java
@@ -36,6 +36,8 @@ public record InstalledPlugin(
/** Source for direct repo installs (when marketplace is empty) */
@JsonProperty("source") Object source,
/** Per-plugin source fingerprint (a SHA-256 hash of the plugin's catalog source spec plus its resolved source subtree — NOT a Git commit SHA) captured at marketplace install/update time. Auto-update compares it against the freshly recomputed fingerprint to detect a content change that does not bump the version. Absent for pre-existing installs and for direct (non-marketplace) installs. */
- @JsonProperty("source_sha") String sourceSha
+ @JsonProperty("source_sha") String sourceSha,
+ /** Absolute path of the marketplace directory a live plugin was resolved from. Present only on live, never-persisted records — those synthesized at session start for a directory/local marketplace, whose cache_path points at the real plugin directory on disk rather than a copy under the installed-plugins cache. Its presence is what marks a record as live, and no record carrying it is ever written to the persisted installedPlugins key. */
+ @JsonProperty("installed_from") String installedFrom
) {
}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstalledPluginInfo.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstalledPluginInfo.java
index 2f4895690f..2c81e95f2b 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstalledPluginInfo.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/InstalledPluginInfo.java
@@ -30,6 +30,8 @@ public record InstalledPluginInfo(
/** Installed version (when reported by the plugin manifest) */
@JsonProperty("version") String version,
/** Whether the plugin is currently enabled for new sessions */
- @JsonProperty("enabled") Boolean enabled
+ @JsonProperty("enabled") Boolean enabled,
+ /** Absolute path of the marketplace directory a live plugin was resolved from. Present only on live, never-persisted records — a plugin belonging to a directory/local marketplace, which is loaded from its real directory on every pass instead of a copy under the installed-plugins cache. Its presence is what marks a listed plugin as live: such a plugin is always present on disk, so `enabled` is its only meaningful state and it is never "not installed". */
+ @JsonProperty("installedFrom") String installedFrom
) {
}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/Model.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/Model.java
index 8aadae4a22..a652e8f4f6 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/Model.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/Model.java
@@ -41,6 +41,12 @@ public record Model(
/** Model capability category for grouping in the model picker */
@JsonProperty("modelPickerCategory") ModelPickerCategory modelPickerCategory,
/** Relative cost tier for token-based billing users */
- @JsonProperty("modelPickerPriceCategory") ModelPickerPriceCategory modelPickerPriceCategory
+ @JsonProperty("modelPickerPriceCategory") ModelPickerPriceCategory modelPickerPriceCategory,
+ /** Warning text the service requires hosts to surface for this model. Present only when the service published at least one warning. */
+ @JsonProperty("warningText") ModelWarningText warningText,
+ /** Informational notices the service published for this model, such as an upcoming change or a recommended alternative. Present only when the service published at least one notice. Hosts should surface these without implying anything is wrong with the model. */
+ @JsonProperty("infoMessages") List infoMessages,
+ /** Warnings the service published for this model, such as a deprecated client version. Present only when the service published at least one warning. The model remains usable; hosts should surface these as advisory rather than blocking. */
+ @JsonProperty("warningMessages") List warningMessages
) {
}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelMessage.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelMessage.java
new file mode 100644
index 0000000000..35e8a17386
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelMessage.java
@@ -0,0 +1,29 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: api.schema.json
+
+package com.github.copilot.generated.rpc;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.processing.Generated;
+
+/**
+ * A service-published message about a model, carrying a stable machine-readable code alongside human-readable text.
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public record ModelMessage(
+ /** Stable machine-readable identifier for the message, such as `client_version_deprecated`. Hosts can key custom presentation off this; unrecognized codes should fall back to displaying `message`. */
+ @JsonProperty("code") String code,
+ /** Human-readable message text intended for display to the user. */
+ @JsonProperty("message") String message
+) {
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelWarningText.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelWarningText.java
new file mode 100644
index 0000000000..817be420c5
--- /dev/null
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ModelWarningText.java
@@ -0,0 +1,27 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+
+// AUTO-GENERATED FILE - DO NOT EDIT
+// Generated from: api.schema.json
+
+package com.github.copilot.generated.rpc;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import javax.annotation.processing.Generated;
+
+/**
+ * Service-published warning text that hosts should display when presenting a model.
+ *
+ * @since 1.0.0
+ */
+@javax.annotation.processing.Generated("copilot-sdk-codegen")
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public record ModelWarningText(
+ /** Data-retention warning for the model. The text may contain Markdown links and should be rendered as Markdown when supported. */
+ @JsonProperty("dataRetention") String dataRetention
+) {
+}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionPathsConfig.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionPathsConfig.java
index 29aef6c66f..56dbd73dd8 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionPathsConfig.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionPathsConfig.java
@@ -24,7 +24,7 @@
public record PermissionPathsConfig(
/** If true, the runtime allows access to all paths without prompting. Equivalent to constructing an UnrestrictedPathManager. */
@JsonProperty("unrestricted") Boolean unrestricted,
- /** Additional directories to allow tool access to (in addition to the session's working directory). When `unrestricted` is true, these are still pre-populated on the UnrestrictedPathManager so they remain visible via getDirectories() (e.g. for @-mention completion). */
+ /** Additional directories to allow tool access to (in addition to the session's working directory). Conventional `.github/skills/` and `.github/agents/` definitions under them also join the session catalogs when their subsystem gates are enabled, so supplying a directory is a trust decision for configuration stored there. When `unrestricted` is true, these are still pre-populated on the UnrestrictedPathManager so they remain visible via getDirectories() (e.g. for @-mention completion). */
@JsonProperty("additionalDirectories") List additionalDirectories,
/** Whether to include the system temp directory in the allowed list (defaults to true). Ignored when `unrestricted` is true. */
@JsonProperty("includeTempDirectory") Boolean includeTempDirectory,
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfig.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfig.java
index cae6b6868f..9194ea9661 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfig.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SandboxConfig.java
@@ -29,7 +29,7 @@ public record SandboxConfig(
@JsonProperty("addCurrentWorkingDirectory") Boolean addCurrentWorkingDirectory,
/** Credential-injection capability flags. */
@JsonProperty("auth") SandboxConfigAuth auth,
- /** Whether to auto-grant read access to the tool directories discovered on PATH and in toolchain environment variables (GOROOT, CARGO_HOME, JAVA_HOME, VIRTUAL_ENV, and similar), and to common developer-tool caches, registries, and toolchains in their default home locations (cargo, go, npm, Maven, and more), plus read-write access to (and, on Unix, up-front creation of) the scratch caches builds write on every run (go-build, ccache, sccache, Gradle caches, Cargo lock/tracker files), so builds work without extra configuration; a relocated CARGO_HOME additionally gets its Cargo lock files granted read-write. Set to false to disable every grant listed above: user-installed toolchains (rustup, nvm, pyenv, conda, pipx) then need explicit userPolicy.filesystem entries — readonlyPaths to read them, plus readwriteFiles for a relocated CARGO_HOME's .package-cache and .global-cache, which Cargo locks on every build. Only these developer-tool grants are affected: the working directory (see addCurrentWorkingDirectory), temporary storage, session log paths, and system locations follow their own rules and stay granted, so commands still run. Default: true (enabled by default; set to false to opt out). */
+ /** Whether to auto-grant read access to the tool directories discovered on PATH and in toolchain environment variables (GOROOT, CARGO_HOME, JAVA_HOME, VIRTUAL_ENV, and similar), and to common developer-tool caches, registries, and toolchains in their default home locations (cargo, go, npm, Maven, and more), plus read-write access to (and up-front creation of) the scratch caches builds write on every run (go-build, ccache, sccache, Gradle caches, Cargo lock/tracker files), so builds work without extra configuration; a relocated CARGO_HOME additionally gets its Cargo lock files granted read-write. Set to false to disable every grant listed above: user-installed toolchains (rustup, nvm, pyenv, conda, pipx) then need explicit userPolicy.filesystem entries — readonlyPaths to read them, plus readwriteFiles for a relocated CARGO_HOME's .package-cache and .global-cache, which Cargo locks on every build. Only these developer-tool grants are affected: the working directory (see addCurrentWorkingDirectory), temporary storage, session log paths, and system locations follow their own rules and stay granted, so commands still run. Default: true (enabled by default; set to false to opt out). */
@JsonProperty("allowDevToolAccess") Boolean allowDevToolAccess
) {
}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionInstalledPlugin.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionInstalledPlugin.java
index 1109f5f231..db8ea12026 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionInstalledPlugin.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionInstalledPlugin.java
@@ -36,6 +36,8 @@ public record SessionInstalledPlugin(
/** Source descriptor for direct repo installs (when marketplace is empty) */
@JsonProperty("source") Object source,
/** Per-plugin source fingerprint (a SHA-256 hash of the plugin's catalog source spec plus its resolved source subtree — NOT a Git commit SHA) captured at marketplace install/update time. Auto-update compares it against the freshly recomputed fingerprint to detect a content change that does not bump the version. Absent for pre-existing installs and for direct (non-marketplace) installs. */
- @JsonProperty("source_sha") String sourceSha
+ @JsonProperty("source_sha") String sourceSha,
+ /** Absolute path of the marketplace directory a live plugin was resolved from. Present only on live, never-persisted records — those synthesized at session start for a directory/local marketplace, whose cache_path points at the real plugin directory on disk rather than a copy under the installed-plugins cache. Its presence is what marks a record as live, and no record carrying it is ever written to the persisted installedPlugins key. */
+ @JsonProperty("installed_from") String installedFrom
) {
}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionManagedPermissions.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionManagedPermissions.java
index 79698b27c4..8d52a1eb1e 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionManagedPermissions.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionManagedPermissions.java
@@ -22,8 +22,8 @@
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public record SessionManagedPermissions(
- /** When set to `disable`, prevents bypass/allow-all permission modes. */
- @JsonProperty("disableBypassPermissionsMode") DisableBypassPermissionsMode disableBypassPermissionsMode,
+ /** When set to `disable`, prevents bypass/allow-all permission modes. `allow-auto-only` blocks full allow-all but permits advisory auto-approval. Any other value is accepted rather than failing the session, but is enforced as `disable`: the key is only present to restrict something, so a mode this runtime cannot interpret fails closed to the most restrictive one it knows. Omit the key entirely to impose no restriction. */
+ @JsonProperty("disableBypassPermissionsMode") String disableBypassPermissionsMode,
/** Permission rules that block matching operations. Deny has highest precedence. */
@JsonProperty("deny") List deny,
/** Permission rules that require explicit human approval. */
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptions.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptions.java
index 002f5e82de..91781a4b40 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptions.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionOpenOptions.java
@@ -67,7 +67,7 @@ public record SessionOpenOptions(
@JsonProperty("models") List models,
/** Working directory to anchor the session. */
@JsonProperty("workingDirectory") String workingDirectory,
- /** Additional directories the agent may access beyond the working directory. Each entry is granted to the session's file-access allow-list and surfaced to the model (system prompt context and `@`-mention completion). Absolute paths are recommended; a relative path is resolved against the session's working directory. Nonexistent or unresolvable entries are skipped with a warning. This is applied on both session creation and resume, and is not persisted: a resumed session that omits this option does not retain previously supplied directories (re-supply them, exactly as the CLI re-passes `--add-dir`). */
+ /** Additional directories the agent may access beyond the working directory. Each entry is granted to the session's file-access allow-list and surfaced to the model (system prompt context and `@`-mention completion). Conventional `.github/skills/` and `.github/agents/` definitions under each directory also join the session's project catalogs when their existing subsystem gates are enabled: added-root skills require both `enableConfigDiscovery` and effective `enableSkills`; added-root agents require `enableConfigDiscovery`. Supplying a directory therefore activates configuration from it and should be treated as a trust decision. Absolute paths are recommended; a relative path is resolved against the session's working directory. Nonexistent or unresolvable entries are skipped with a warning. This is applied during session creation and cold resume and is not persisted, so a cold resume must re-supply the directories. */
@JsonProperty("additionalDirectories") List additionalDirectories,
/** Pre-resolved working-directory context for session startup. */
@JsonProperty("workingDirectoryContext") SessionContext workingDirectoryContext,
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsAddParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsAddParams.java
index e5f35a2264..48ee26e0d9 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsAddParams.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionPermissionsPathsAddParams.java
@@ -26,7 +26,7 @@
public record SessionPermissionsPathsAddParams(
/** Target session identifier */
@JsonProperty("sessionId") String sessionId,
- /** Directory to add to the allow-list. The runtime resolves and validates the path before adding. */
+ /** Directory to add to the allow-list. The runtime resolves and validates the path before adding, then loads conventional `.github/skills/` and `.github/agents/` definitions under it when their subsystem gates are enabled. Adding the directory is therefore also a trust decision for configuration stored there. */
@JsonProperty("path") String path
) {
}
diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueuePendingItemsResult.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueuePendingItemsResult.java
index 7b096480ca..a74d54e245 100644
--- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueuePendingItemsResult.java
+++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/SessionQueuePendingItemsResult.java
@@ -28,6 +28,8 @@ public record SessionQueuePendingItemsResult(
/** Pending queued items in submission order. Includes user messages, queued slash commands, and queued model changes; omits internal system items. */
@JsonProperty("items") List items,
/** Display text for messages currently in the immediate steering queue (interjections sent during a running turn). */
- @JsonProperty("steeringMessages") List steeringMessages
+ @JsonProperty("steeringMessages") List steeringMessages,
+ /** How many leading entries of `steeringMessages` have already been folded into the running turn (and so have an emitted `user.message`), as opposed to still waiting for one. Absent for hosts that do not distinguish the two. */
+ @JsonProperty("inFlightSteeringCount") Long inFlightSteeringCount
) {
}
diff --git a/java/sdk/src/main/java/com/github/copilot/rpc/DisableBypassPermissionsModes.java b/java/sdk/src/main/java/com/github/copilot/rpc/DisableBypassPermissionsModes.java
new file mode 100644
index 0000000000..cf98f0526d
--- /dev/null
+++ b/java/sdk/src/main/java/com/github/copilot/rpc/DisableBypassPermissionsModes.java
@@ -0,0 +1,23 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+package com.github.copilot.rpc;
+
+/**
+ * Known values for the managed bypass-permissions policy.
+ *
+ *
+ * The wire contract is an open string so callers can pass newer fail-closed
+ * modes directly to
+ * {@link ManagedSettingsPermissions#setDisableBypassPermissionsMode(String)}.
+ */
+public final class DisableBypassPermissionsModes {
+ /** Turns off bypass-permissions mode. */
+ public static final String DISABLE = "disable";
+
+ /** Permits bypass only for automatic operations. */
+ public static final String ALLOW_AUTO_ONLY = "allow-auto-only";
+
+ private DisableBypassPermissionsModes() {
+ }
+}
diff --git a/java/sdk/src/main/java/com/github/copilot/rpc/ManagedSettingsPermissions.java b/java/sdk/src/main/java/com/github/copilot/rpc/ManagedSettingsPermissions.java
index 0923cea54a..f857391dbc 100644
--- a/java/sdk/src/main/java/com/github/copilot/rpc/ManagedSettingsPermissions.java
+++ b/java/sdk/src/main/java/com/github/copilot/rpc/ManagedSettingsPermissions.java
@@ -5,7 +5,6 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
-import com.github.copilot.generated.rpc.DisableBypassPermissionsMode;
import java.util.ArrayList;
import java.util.List;
@@ -15,7 +14,7 @@
@JsonInclude(JsonInclude.Include.NON_NULL)
public final class ManagedSettingsPermissions {
@JsonProperty("disableBypassPermissionsMode")
- private DisableBypassPermissionsMode disableBypassPermissionsMode;
+ private String disableBypassPermissionsMode;
@JsonProperty("deny")
private List deny;
@@ -27,7 +26,7 @@ public final class ManagedSettingsPermissions {
private List allow;
/** @return the bypass-permissions policy, or {@code null} when unset */
- public DisableBypassPermissionsMode getDisableBypassPermissionsMode() {
+ public String getDisableBypassPermissionsMode() {
return disableBypassPermissionsMode;
}
@@ -38,7 +37,7 @@ public DisableBypassPermissionsMode getDisableBypassPermissionsMode() {
* bypass-permissions policy
* @return this policy
*/
- public ManagedSettingsPermissions setDisableBypassPermissionsMode(DisableBypassPermissionsMode value) {
+ public ManagedSettingsPermissions setDisableBypassPermissionsMode(String value) {
this.disableBypassPermissionsMode = value;
return this;
}
diff --git a/java/sdk/src/test/java/com/github/copilot/ManagedSettingsTest.java b/java/sdk/src/test/java/com/github/copilot/ManagedSettingsTest.java
index dbd19f3c97..d6341b26c5 100644
--- a/java/sdk/src/test/java/com/github/copilot/ManagedSettingsTest.java
+++ b/java/sdk/src/test/java/com/github/copilot/ManagedSettingsTest.java
@@ -8,7 +8,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.github.copilot.generated.rpc.DisableBypassPermissionsMode;
+import com.github.copilot.rpc.DisableBypassPermissionsModes;
import com.github.copilot.rpc.ManagedSettings;
import com.github.copilot.rpc.ManagedSettingsPermissions;
import com.github.copilot.rpc.PermissionRequestResult;
@@ -23,7 +23,7 @@ class ManagedSettingsTest {
@Test
void forwardsManagedSettingsOnCreateAndResume() throws Exception {
var permissions = new ManagedSettingsPermissions()
- .setDisableBypassPermissionsMode(DisableBypassPermissionsMode.DISABLE).setDeny(List.of("Shell(rm *)"))
+ .setDisableBypassPermissionsMode(DisableBypassPermissionsModes.DISABLE).setDeny(List.of("Shell(rm *)"))
.setAsk(List.of("Domain(publish.example)")).setAllow(List.of("Read(**)"));
var managedSettings = new ManagedSettings().setPermissions(permissions);
@@ -41,6 +41,14 @@ void forwardsManagedSettingsOnCreateAndResume() throws Exception {
assertTrue(json.contains("\"disableBypassPermissionsMode\":\"disable\""));
}
+ @Test
+ void acceptsFutureBypassPermissionsModes() throws Exception {
+ var permissions = new ManagedSettingsPermissions().setDisableBypassPermissionsMode("future-fail-closed-mode");
+ var json = new ObjectMapper().writeValueAsString(permissions);
+
+ assertTrue(json.contains("\"disableBypassPermissionsMode\":\"future-fail-closed-mode\""));
+ }
+
@Test
void preservesExplicitEmptyPermissionArrays() throws Exception {
// Security-critical: a present empty allow list admits nothing, while an
diff --git a/java/sdk/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java b/java/sdk/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java
index cf5b0426c5..602089d012 100644
--- a/java/sdk/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java
+++ b/java/sdk/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java
@@ -818,7 +818,8 @@ void modelsListResult_nested() {
var policy = new ModelPolicy(ModelPolicyState.ENABLED, null);
var promo = new ModelBillingPromo("summer-2026", 25.0, "2026-08-01T00:00:00Z", "Summer discount");
var billing = new ModelBilling(1.0, null, null, promo);
- var modelItem = new Model("gpt-5", "GPT-5", capabilities, policy, billing, null, null, null, null, null);
+ var modelItem = new Model("gpt-5", "GPT-5", capabilities, policy, billing, null, null, null, null, null, null,
+ null, null);
var result = new ModelsListResult(List.of(modelItem));
assertEquals(1, result.models().size());
diff --git a/nodejs/package-lock.json b/nodejs/package-lock.json
index b17b6f55b3..c70f789d34 100644
--- a/nodejs/package-lock.json
+++ b/nodejs/package-lock.json
@@ -9,7 +9,7 @@
"version": "0.0.0-dev",
"license": "MIT",
"dependencies": {
- "@github/copilot": "^1.0.81-6",
+ "@github/copilot": "^1.0.81-9",
"koffi": "^3.1.0",
"vscode-jsonrpc": "^8.2.1",
"zod": "^4.3.6"
@@ -658,8 +658,8 @@
}
},
"node_modules/@github/copilot": {
- "version": "1.0.81-6",
- "integrity": "sha512-hT29nRkf0EJE3N6lqeLOPszbdEyALZ+fjYG9zKX5a3L5r+o+m4/KF+8l2gn2yORNqOzwUYNj2vnVzKqeYYNLGg==",
+ "version": "1.0.81-9",
+ "integrity": "sha512-4AuNUN2aOmLnxB+Y7/3L37pJi3TYqOzTwDtSwJ5m1a0WveQXTvbj31gDnVJ/hLy5Jmlr86Wgef2VCiVyiLMttg==",
"license": "SEE LICENSE IN LICENSE.md",
"dependencies": {
"detect-libc": "^2.1.2"
@@ -668,19 +668,19 @@
"copilot": "npm-loader.js"
},
"optionalDependencies": {
- "@github/copilot-darwin-arm64": "1.0.81-6",
- "@github/copilot-darwin-x64": "1.0.81-6",
- "@github/copilot-linux-arm64": "1.0.81-6",
- "@github/copilot-linux-x64": "1.0.81-6",
- "@github/copilot-linuxmusl-arm64": "1.0.81-6",
- "@github/copilot-linuxmusl-x64": "1.0.81-6",
- "@github/copilot-win32-arm64": "1.0.81-6",
- "@github/copilot-win32-x64": "1.0.81-6"
+ "@github/copilot-darwin-arm64": "1.0.81-9",
+ "@github/copilot-darwin-x64": "1.0.81-9",
+ "@github/copilot-linux-arm64": "1.0.81-9",
+ "@github/copilot-linux-x64": "1.0.81-9",
+ "@github/copilot-linuxmusl-arm64": "1.0.81-9",
+ "@github/copilot-linuxmusl-x64": "1.0.81-9",
+ "@github/copilot-win32-arm64": "1.0.81-9",
+ "@github/copilot-win32-x64": "1.0.81-9"
}
},
"node_modules/@github/copilot-darwin-arm64": {
- "version": "1.0.81-6",
- "integrity": "sha512-nALa4e8Jc/g5ltIHrpHBHByJ5rlgzoZFylZIrkQY+B9vr3L57d5F6fOiTbf/OF9blFQX7artWRE1K0TmowGNCA==",
+ "version": "1.0.81-9",
+ "integrity": "sha512-knqJbbb9crWaMAqP2OoOcXC9uWVRs+iBxZXao146L5EshnWsFFsoihSAAtU9B2ONlggJj+K5APOMNEJM1NMHgw==",
"cpu": [
"arm64"
],
@@ -694,8 +694,8 @@
}
},
"node_modules/@github/copilot-darwin-x64": {
- "version": "1.0.81-6",
- "integrity": "sha512-K+bp799DejrsmxMNyaFAmKo4xnLJXBb8hkv9N8OCQukmTSoRpfqhv2oTDfgVFadwllt+py/FIdxKTZQYvPGGGw==",
+ "version": "1.0.81-9",
+ "integrity": "sha512-Qn4mQRKHFXsH/Kv0V1h2m3K24Tnc2MHAeXeoOPoOt410ROb1QcLTdXDRb+eu4ZrZQcHrSV44bYHMuFX+iH1itQ==",
"cpu": [
"x64"
],
@@ -709,8 +709,8 @@
}
},
"node_modules/@github/copilot-linux-arm64": {
- "version": "1.0.81-6",
- "integrity": "sha512-aEpnfTTjOxpesFo9jqk/phZUivOhNHbdBRfBrS2NiCPrQZFBYUC4wRVo/Xo2PMMQ4J07b6fU7JJQPoUUkKy5Wg==",
+ "version": "1.0.81-9",
+ "integrity": "sha512-JxFD/kUuyiqWulUJ4WNCAFLQJNfWdZabF3N16GDxaPrG7aOBB602Gi+wM6nn9Yf80j7/G56hyArRRKQji5+Rsg==",
"cpu": [
"arm64"
],
@@ -724,8 +724,8 @@
}
},
"node_modules/@github/copilot-linux-x64": {
- "version": "1.0.81-6",
- "integrity": "sha512-NFqonFfJCyA7d3bNoYeLWUQ69zelPr9TTnLpAHCi3scFZqbEvMBDFxW2XsKWwfYuuR9XzfU7/tgOUgq3gmL5aA==",
+ "version": "1.0.81-9",
+ "integrity": "sha512-1mR5AqfBMbzk4D9bij12pJKcQ7WuHfg0pe68g126crVGsAgSoOLNahd+TlTZK2YLcv06q30tUBgpxq78QS7fkg==",
"cpu": [
"x64"
],
@@ -739,8 +739,8 @@
}
},
"node_modules/@github/copilot-linuxmusl-arm64": {
- "version": "1.0.81-6",
- "integrity": "sha512-EE99DFTAgTq6eOFDiiv+OUROD2pDQIrzyyJEfUS9K8JanwNc+Py8vTxrJ0yK0slpJ+Fue5uDRno6c9ys8OM59g==",
+ "version": "1.0.81-9",
+ "integrity": "sha512-AaU/3tn39dM/v2UObeWEqLfRWhyfwNILXLLG8ErrW7a3lo27+qWrIHaI85oZiYEsjtwWEJm7Cw0Q3Gfy1SW3RQ==",
"cpu": [
"arm64"
],
@@ -754,8 +754,8 @@
}
},
"node_modules/@github/copilot-linuxmusl-x64": {
- "version": "1.0.81-6",
- "integrity": "sha512-90HRKx25EjhlQNOCCdbiC0Ck0fSKyp8XUxUoCvuNdoigdUP54ZGS07dkyJiJq9KZaKilxZBSpXiNt8t5ETA2Sg==",
+ "version": "1.0.81-9",
+ "integrity": "sha512-Yu/4rf++dmTnTrq49K448dSKCmNGUmCat//Zik5SaIQh+cv3TMis/JJtR7QyQgNWxrOByGmpMr0u6nSKyLgRog==",
"cpu": [
"x64"
],
@@ -769,8 +769,8 @@
}
},
"node_modules/@github/copilot-win32-arm64": {
- "version": "1.0.81-6",
- "integrity": "sha512-1dRSHF/7PFzB+AGORg8BJh2n1+N7+sIJDLqozrC9INWFp1t6ercptIXgJTF/V7UZVGQLO4LBBK1HH/QhzUmrfA==",
+ "version": "1.0.81-9",
+ "integrity": "sha512-g38mc4ld1ZKTWwc9ponJpgK2jvuD/JMeFwgnYeyX2H7O1/jWBJU8fjt/2pTSdFDz0+kpxaw1DiHCS1xMgIb7zg==",
"cpu": [
"arm64"
],
@@ -784,8 +784,8 @@
}
},
"node_modules/@github/copilot-win32-x64": {
- "version": "1.0.81-6",
- "integrity": "sha512-lIbN1mk6Rm9bWrWU4/UfrC5OCga7XcBi2LBz5roDnNcuG8mKEevDcNOtbEYz/TaJg+WBMoTbGfXBVd1hGy2DTA==",
+ "version": "1.0.81-9",
+ "integrity": "sha512-Ilvrz4A6T/oKxN2HSPG4qaXlSWrRQZ9vdhpAa9ChQfPQ4WNaiQB5vZ5yESp3QZlN9S/7WVXiQK0WdrLWCwx4Pg==",
"cpu": [
"x64"
],
diff --git a/nodejs/package.json b/nodejs/package.json
index 1d41026534..6cb43ce307 100644
--- a/nodejs/package.json
+++ b/nodejs/package.json
@@ -56,7 +56,7 @@
"author": "GitHub",
"license": "MIT",
"dependencies": {
- "@github/copilot": "^1.0.81-6",
+ "@github/copilot": "^1.0.81-9",
"koffi": "^3.1.0",
"vscode-jsonrpc": "^8.2.1",
"zod": "^4.3.6"
diff --git a/nodejs/samples/package-lock.json b/nodejs/samples/package-lock.json
index 62199ea95a..bd6f32daa6 100644
--- a/nodejs/samples/package-lock.json
+++ b/nodejs/samples/package-lock.json
@@ -18,7 +18,7 @@
"version": "0.0.0-dev",
"license": "MIT",
"dependencies": {
- "@github/copilot": "^1.0.81-6",
+ "@github/copilot": "^1.0.81-9",
"koffi": "^3.1.0",
"vscode-jsonrpc": "^8.2.1",
"zod": "^4.3.6"
diff --git a/nodejs/src/generated/rpc.ts b/nodejs/src/generated/rpc.ts
index 0174e476bf..16159f7f26 100644
--- a/nodejs/src/generated/rpc.ts
+++ b/nodejs/src/generated/rpc.ts
@@ -834,9 +834,6 @@ export type DebugCollectLogsResultKind =
| "archive"
/** A directory containing redacted files was written. */
| "directory";
-
-/** @experimental */
-export type DisableBypassPermissionsMode = "disable";
/**
* Persisted extension discovery source
*
@@ -6199,6 +6196,32 @@ export interface ConfigureSessionExtensionsParams {
*/
controller?: OpaqueInProcessValue;
}
+/**
+ * Identity of the integrating host, declared once on the `server.connect` handshake so telemetry from this connection is attributed to a single, consistent surface. All fields are optional; omit them to keep the default attribution.
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "ConnectClientInfo".
+ */
+/** @experimental */
+/** @internal */
+export interface ConnectClientInfo {
+ /**
+ * Name of the host editor, e.g. `"vscode"`.
+ */
+ editorName?: string;
+ /**
+ * Version of the host editor, e.g. `"1.124.2"`. Ignored unless it looks like a version string.
+ */
+ editorVersion?: string;
+ /**
+ * Name of the Copilot extension within the host, e.g. `"copilot-chat"`.
+ */
+ extensionName?: string;
+ /**
+ * Version of the Copilot extension within the host, e.g. `"0.54.0"`. Ignored unless it looks like a version string.
+ */
+ extensionVersion?: string;
+}
/**
* Metadata for a connected remote session.
*
@@ -6293,6 +6316,7 @@ export interface ConnectRequest {
* Opt this connection in to GitHub telemetry forwarding for its lifetime. When set, the runtime forwards every internal telemetry event it emits — across all sessions, plus sessionless events — to this connection over the `gitHubTelemetry.event` notification. Regular events are also written to the runtime's normal GitHub/CTS path (dual-write); host-only compatibility events are forward-only and intentionally skip that path. Intended for first-party hosts that re-emit the events into their own telemetry stores. Both unrestricted and restricted events are forwarded, each tagged with a `restricted` discriminator; a backstop drops restricted events when restricted telemetry is disabled — using the process-global gate for ordinary events and an explicit session-scoped decision for host-only events.
*/
enableGitHubTelemetryForwarding?: boolean;
+ clientInfo?: ConnectClientInfo;
/**
* Connection token; required when the server was started with COPILOT_CONNECTION_TOKEN
*/
@@ -8728,6 +8752,10 @@ export interface InstalledPlugin {
* Per-plugin source fingerprint (a SHA-256 hash of the plugin's catalog source spec plus its resolved source subtree — NOT a Git commit SHA) captured at marketplace install/update time. Auto-update compares it against the freshly recomputed fingerprint to detect a content change that does not bump the version. Absent for pre-existing installs and for direct (non-marketplace) installs.
*/
source_sha?: string;
+ /**
+ * Absolute path of the marketplace directory a live plugin was resolved from. Present only on live, never-persisted records — those synthesized at session start for a directory/local marketplace, whose cache_path points at the real plugin directory on disk rather than a copy under the installed-plugins cache. Its presence is what marks a record as live, and no record carrying it is ever written to the persisted installedPlugins key.
+ */
+ installed_from?: string;
}
/**
* Source descriptor for a direct GitHub plugin install, with `owner/repo`, optional ref or full commit SHA, and optional subpath.
@@ -8832,6 +8860,10 @@ export interface InstalledPluginInfo {
* Whether the plugin is currently enabled for new sessions
*/
enabled: boolean;
+ /**
+ * Absolute path of the marketplace directory a live plugin was resolved from. Present only on live, never-persisted records — a plugin belonging to a directory/local marketplace, which is loaded from its real directory on every pass instead of a copy under the installed-plugins cache. Its presence is what marks a listed plugin as live: such a plugin is always present on disk, so `enabled` is its only meaningful state and it is never "not installed".
+ */
+ installedFrom?: string;
}
/**
* Canonical file or directory where custom instructions can be discovered or created, with location, kind, preference, and project path.
@@ -11851,6 +11883,15 @@ export interface Model {
supportedContextTiers?: string[];
modelPickerCategory?: ModelPickerCategory;
modelPickerPriceCategory?: ModelPickerPriceCategory;
+ warningText?: ModelWarningText;
+ /**
+ * Informational notices the service published for this model, such as an upcoming change or a recommended alternative. Present only when the service published at least one notice. Hosts should surface these without implying anything is wrong with the model.
+ */
+ infoMessages?: ModelMessage[];
+ /**
+ * Warnings the service published for this model, such as a deprecated client version. Present only when the service published at least one warning. The model remains usable; hosts should surface these as advisory rather than blocking.
+ */
+ warningMessages?: ModelMessage[];
}
/**
* Model capabilities and limits
@@ -12073,6 +12114,36 @@ export interface ModelBillingPromo {
*/
message?: string;
}
+/**
+ * Service-published warning text that hosts should display when presenting a model.
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "ModelWarningText".
+ */
+/** @experimental */
+export interface ModelWarningText {
+ /**
+ * Data-retention warning for the model. The text may contain Markdown links and should be rendered as Markdown when supported.
+ */
+ dataRetention?: string;
+}
+/**
+ * A service-published message about a model, carrying a stable machine-readable code alongside human-readable text.
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "ModelMessage".
+ */
+/** @experimental */
+export interface ModelMessage {
+ /**
+ * Stable machine-readable identifier for the message, such as `client_version_deprecated`. Hosts can key custom presentation off this; unrecognized codes should fall back to displaying `message`.
+ */
+ code: string;
+ /**
+ * Human-readable message text intended for display to the user.
+ */
+ message: string;
+}
/**
* Managed, repository, and CLI model overrides to overlay onto the session at startup.
*
@@ -13584,7 +13655,7 @@ export interface PermissionLocationResolveResult {
/** @experimental */
export interface PermissionPathsAddParams {
/**
- * Directory to add to the allow-list. The runtime resolves and validates the path before adding.
+ * Directory to add to the allow-list. The runtime resolves and validates the path before adding, then loads conventional `.github/skills/` and `.github/agents/` definitions under it when their subsystem gates are enabled. Adding the directory is therefore also a trust decision for configuration stored there.
*/
path: string;
}
@@ -13627,7 +13698,7 @@ export interface PermissionPathsConfig {
*/
unrestricted?: boolean;
/**
- * Additional directories to allow tool access to (in addition to the session's working directory). When `unrestricted` is true, these are still pre-populated on the UnrestrictedPathManager so they remain visible via getDirectories() (e.g. for @-mention completion).
+ * Additional directories to allow tool access to (in addition to the session's working directory). Conventional `.github/skills/` and `.github/agents/` definitions under them also join the session catalogs when their subsystem gates are enabled, so supplying a directory is a trust decision for configuration stored there. When `unrestricted` is true, these are still pre-populated on the UnrestrictedPathManager so they remain visible via getDirectories() (e.g. for @-mention completion).
*/
additionalDirectories?: string[];
/**
@@ -15550,6 +15621,10 @@ export interface QueuePendingItemsResult {
* Display text for messages currently in the immediate steering queue (interjections sent during a running turn).
*/
steeringMessages: string[];
+ /**
+ * How many leading entries of `steeringMessages` have already been folded into the running turn (and so have an emitted `user.message`), as opposed to still waiting for one. Absent for hosts that do not distinguish the two.
+ */
+ inFlightSteeringCount?: number;
}
/**
* Parameters for removing a queued item by stable id.
@@ -16140,7 +16215,7 @@ export interface SandboxConfig {
addCurrentWorkingDirectory?: boolean;
auth?: SandboxConfigAuth;
/**
- * Whether to auto-grant read access to the tool directories discovered on PATH and in toolchain environment variables (GOROOT, CARGO_HOME, JAVA_HOME, VIRTUAL_ENV, and similar), and to common developer-tool caches, registries, and toolchains in their default home locations (cargo, go, npm, Maven, and more), plus read-write access to (and, on Unix, up-front creation of) the scratch caches builds write on every run (go-build, ccache, sccache, Gradle caches, Cargo lock/tracker files), so builds work without extra configuration; a relocated CARGO_HOME additionally gets its Cargo lock files granted read-write. Set to false to disable every grant listed above: user-installed toolchains (rustup, nvm, pyenv, conda, pipx) then need explicit userPolicy.filesystem entries — readonlyPaths to read them, plus readwriteFiles for a relocated CARGO_HOME's .package-cache and .global-cache, which Cargo locks on every build. Only these developer-tool grants are affected: the working directory (see addCurrentWorkingDirectory), temporary storage, session log paths, and system locations follow their own rules and stay granted, so commands still run. Default: true (enabled by default; set to false to opt out).
+ * Whether to auto-grant read access to the tool directories discovered on PATH and in toolchain environment variables (GOROOT, CARGO_HOME, JAVA_HOME, VIRTUAL_ENV, and similar), and to common developer-tool caches, registries, and toolchains in their default home locations (cargo, go, npm, Maven, and more), plus read-write access to (and up-front creation of) the scratch caches builds write on every run (go-build, ccache, sccache, Gradle caches, Cargo lock/tracker files), so builds work without extra configuration; a relocated CARGO_HOME additionally gets its Cargo lock files granted read-write. Set to false to disable every grant listed above: user-installed toolchains (rustup, nvm, pyenv, conda, pipx) then need explicit userPolicy.filesystem entries — readonlyPaths to read them, plus readwriteFiles for a relocated CARGO_HOME's .package-cache and .global-cache, which Cargo locks on every build. Only these developer-tool grants are affected: the working directory (see addCurrentWorkingDirectory), temporary storage, session log paths, and system locations follow their own rules and stay granted, so commands still run. Default: true (enabled by default; set to false to opt out).
*/
allowDevToolAccess?: boolean;
}
@@ -17462,6 +17537,10 @@ export interface SessionInstalledPlugin {
* Per-plugin source fingerprint (a SHA-256 hash of the plugin's catalog source spec plus its resolved source subtree — NOT a Git commit SHA) captured at marketplace install/update time. Auto-update compares it against the freshly recomputed fingerprint to detect a content change that does not bump the version. Absent for pre-existing installs and for direct (non-marketplace) installs.
*/
source_sha?: string;
+ /**
+ * Absolute path of the marketplace directory a live plugin was resolved from. Present only on live, never-persisted records — those synthesized at session start for a directory/local marketplace, whose cache_path points at the real plugin directory on disk rather than a copy under the installed-plugins cache. Its presence is what marks a record as live, and no record carrying it is ever written to the persisted installedPlugins key.
+ */
+ installed_from?: string;
}
/**
* Source descriptor for a direct GitHub plugin install, with `owner/repo`, optional ref or full commit SHA, and optional subpath.
@@ -17665,7 +17744,10 @@ export interface SessionLoadDeferredRepoHooksResult {
*/
/** @experimental */
export interface SessionManagedPermissions {
- disableBypassPermissionsMode?: DisableBypassPermissionsMode;
+ /**
+ * When set to `disable`, prevents bypass/allow-all permission modes. `allow-auto-only` blocks full allow-all but permits advisory auto-approval. Any other value is accepted rather than failing the session, but is enforced as `disable`: the key is only present to restrict something, so a mode this runtime cannot interpret fails closed to the most restrictive one it knows. Omit the key entirely to impose no restriction.
+ */
+ disableBypassPermissionsMode?: string;
/**
* Permission rules that block matching operations. Deny has highest precedence.
*/
@@ -17876,7 +17958,7 @@ export interface SessionOpenOptions {
*/
workingDirectory?: string;
/**
- * Additional directories the agent may access beyond the working directory. Each entry is granted to the session's file-access allow-list and surfaced to the model (system prompt context and `@`-mention completion). Absolute paths are recommended; a relative path is resolved against the session's working directory. Nonexistent or unresolvable entries are skipped with a warning. This is applied on both session creation and resume, and is not persisted: a resumed session that omits this option does not retain previously supplied directories (re-supply them, exactly as the CLI re-passes `--add-dir`).
+ * Additional directories the agent may access beyond the working directory. Each entry is granted to the session's file-access allow-list and surfaced to the model (system prompt context and `@`-mention completion). Conventional `.github/skills/` and `.github/agents/` definitions under each directory also join the session's project catalogs when their existing subsystem gates are enabled: added-root skills require both `enableConfigDiscovery` and effective `enableSkills`; added-root agents require `enableConfigDiscovery`. Supplying a directory therefore activates configuration from it and should be treated as a trust decision. Absolute paths are recommended; a relative path is resolved against the session's working directory. Nonexistent or unresolvable entries are skipped with a warning. This is applied during session creation and cold resume and is not persisted, so a cold resume must re-supply the directories.
*/
additionalDirectories?: string[];
workingDirectoryContext?: SessionContext;
@@ -24645,7 +24727,7 @@ export function createSessionRpc(connection: MessageConnection, sessionId: strin
list: async (): Promise =>
connection.sendRequest("session.permissions.paths.list", { sessionId }),
/**
- * Adds a directory to the session's allow-list.
+ * Adds a directory to the session's allow-list and activates conventional skill and agent definitions under it.
*
* @param params Directory path to add to the session's allowed directories.
*
diff --git a/nodejs/src/generated/session-events.ts b/nodejs/src/generated/session-events.ts
index fdb82ab14e..532e897f2a 100644
--- a/nodejs/src/generated/session-events.ts
+++ b/nodejs/src/generated/session-events.ts
@@ -56,6 +56,7 @@ export type SessionEvent =
| AssistantIdleEvent
| AssistantUsageEvent
| ModelCallFailureEvent
+ | ModelCallFinishedEvent
| AbortEvent
| ToolUserRequestedEvent
| ToolExecutionStartEvent
@@ -434,6 +435,18 @@ export type ModelCallFailureTransport =
| "http"
/** WebSocket transport. */
| "websocket";
+/**
+ * Final outcome of one logical model dispatch after response acceptance processing
+ */
+export type ModelCallFinishedOutcome =
+ /** The provider response was accepted for continued agent processing. */
+ | "success"
+ /** The dispatch ended with a provider or transport error. */
+ | "error"
+ /** The dispatch was cancelled before an accepted response was produced. */
+ | "cancelled"
+ /** The provider response was rejected during post-response acceptance processing. */
+ | "rejected";
/**
* Finite reason code describing why the current turn was aborted
*/
@@ -855,7 +868,9 @@ export type ManagedSettingsEnforcedEscalation =
/** Unrestricted filesystem access outside the session's allowed directories. */
| "unrestricted_paths"
/** Unrestricted URL fetch access. */
- | "unrestricted_urls";
+ | "unrestricted_urls"
+ /** A server-wide MCP "Always Allow" (or `--allow-tool `) blanket that would auto-approve every tool from an MCP server. Capped to per-tool approval; each tool still prompts. */
+ | "server_wide_mcp_approval";
/**
* Exit plan mode action
*/
@@ -4390,6 +4405,10 @@ export interface AssistantUsageData {
* Number of output tokens produced
*/
outputTokens?: number;
+ /**
+ * Time to first observable model output in milliseconds. Includes text, reasoning, and tool-call output; only available for streaming requests that produce observable output.
+ */
+ outputTtftMs?: number;
/**
* @deprecated
* Parent tool call ID when this usage originates from a sub-agent
@@ -4706,6 +4725,62 @@ export interface ModelCallFailureRequestFingerprint {
*/
toolResultMessageCount: number;
}
+/**
+ * Session event "model.call_finished". Final lifecycle outcome for one logical model dispatch. A logical dispatch may include internal reconnect or fallback work, so event count is not provider HTTP-request count.
+ */
+export interface ModelCallFinishedEvent {
+ /**
+ * Sub-agent instance identifier. Absent for events from the root/main agent and session-level events.
+ */
+ agentId?: string;
+ data: ModelCallFinishedData;
+ /**
+ * Always true for events that are transient and not persisted to the session event log on disk.
+ */
+ ephemeral: true;
+ /**
+ * Unique event identifier (UUID v4), generated when the event is emitted
+ */
+ id: string;
+ /**
+ * ID of the chronologically preceding event in the session, forming a linked chain. Null for the first event.
+ */
+ parentId: string | null;
+ /**
+ * ISO 8601 timestamp when the event was created
+ */
+ timestamp: string;
+ /**
+ * Type discriminator. Always "model.call_finished".
+ */
+ type: "model.call_finished";
+}
+/**
+ * Final lifecycle outcome for one logical model dispatch. A logical dispatch may include internal reconnect or fallback work, so event count is not provider HTTP-request count.
+ */
+export interface ModelCallFinishedData {
+ /**
+ * Whether an accepted successful response requested the exact name and command semantics of a built-in file edit tool, including an external tool explicitly replacing that built-in name. Absent when the logical dispatch did not produce an accepted response.
+ */
+ containsBuiltInFileEditRequest?: boolean;
+ /**
+ * Monotonic elapsed time spent in the logical model dispatch, including any internal transport reconnect or fallback and excluding orchestrator retry backoff, tool execution, confirmations, and post-response processing
+ */
+ dispatchDurationMs: number;
+ /**
+ * Version of the built-in file-edit semantic classifier used for this event
+ */
+ editClassifierVersion: number;
+ /**
+ * Identifier of the user interaction that owns the model dispatch, matching assistant.turn_start.interactionId when available
+ */
+ interactionId?: string;
+ outcome: ModelCallFinishedOutcome;
+ /**
+ * Agent-loop iteration within the interaction that initiated the model dispatch
+ */
+ turnId: string;
+}
/**
* Session event "abort". Turn abort information including the reason for termination
*/
@@ -7172,6 +7247,10 @@ export interface PermissionPromptRequestMcp {
* @experimental
*/
assistedApproval?: PermissionAssistedApproval;
+ /**
+ * Whether the host may offer a server-wide "approve all tools from this server" blanket. Absent is treated as true; the runtime sends false when managed policy disables bypass-permissions mode, which forbids the server-wide escalation while still allowing per-tool approval.
+ */
+ canOfferServerWideApproval?: boolean;
/**
* Prompt kind discriminator
*/
diff --git a/python/copilot/generated/rpc.py b/python/copilot/generated/rpc.py
index d7c86509e8..59816e3a64 100644
--- a/python/copilot/generated/rpc.py
+++ b/python/copilot/generated/rpc.py
@@ -1752,59 +1752,68 @@ def to_dict(self) -> dict:
return result
# Experimental: this type is part of an experimental API and may change or be removed.
+# Internal: this type is an internal SDK API and is not part of the public surface.
@dataclass
-class ConnectRemoteSessionParams:
- """Remote session connection parameters."""
+class _ConnectClientInfo:
+ """Identity of the integrating host, declared once on the `server.connect` handshake so
+ telemetry from this connection is attributed to a single, consistent surface. All fields
+ are optional; omit them to keep the default attribution.
- session_id: str
- """Session ID to connect to."""
+ Identity of the integrating host. Optional; omit it to keep the default attribution.
+ """
+ editor_name: str | None = None
+ """Name of the host editor, e.g. `"vscode"`."""
+
+ editor_version: str | None = None
+ """Version of the host editor, e.g. `"1.124.2"`. Ignored unless it looks like a version
+ string.
+ """
+ extension_name: str | None = None
+ """Name of the Copilot extension within the host, e.g. `"copilot-chat"`."""
+
+ extension_version: str | None = None
+ """Version of the Copilot extension within the host, e.g. `"0.54.0"`. Ignored unless it
+ looks like a version string.
+ """
@staticmethod
- def from_dict(obj: Any) -> 'ConnectRemoteSessionParams':
+ def from_dict(obj: Any) -> '_ConnectClientInfo':
assert isinstance(obj, dict)
- session_id = from_str(obj.get("sessionId"))
- return ConnectRemoteSessionParams(session_id)
+ editor_name = from_union([from_str, from_none], obj.get("editorName"))
+ editor_version = from_union([from_str, from_none], obj.get("editorVersion"))
+ extension_name = from_union([from_str, from_none], obj.get("extensionName"))
+ extension_version = from_union([from_str, from_none], obj.get("extensionVersion"))
+ return _ConnectClientInfo(editor_name, editor_version, extension_name, extension_version)
def to_dict(self) -> dict:
result: dict = {}
- result["sessionId"] = from_str(self.session_id)
+ if self.editor_name is not None:
+ result["editorName"] = from_union([from_str, from_none], self.editor_name)
+ if self.editor_version is not None:
+ result["editorVersion"] = from_union([from_str, from_none], self.editor_version)
+ if self.extension_name is not None:
+ result["extensionName"] = from_union([from_str, from_none], self.extension_name)
+ if self.extension_version is not None:
+ result["extensionVersion"] = from_union([from_str, from_none], self.extension_version)
return result
# Experimental: this type is part of an experimental API and may change or be removed.
-# Internal: this type is an internal SDK API and is not part of the public surface.
@dataclass
-class _ConnectRequest:
- """Connection-level opt-ins for the `server.connect` handshake. Transport authentication is
- consumed by the native protocol boundary before dispatch.
- """
- enable_git_hub_telemetry_forwarding: bool | None = None
- """Opt this connection in to GitHub telemetry forwarding for its lifetime. When set, the
- runtime forwards every internal telemetry event it emits — across all sessions, plus
- sessionless events — to this connection over the `gitHubTelemetry.event` notification.
- Regular events are also written to the runtime's normal GitHub/CTS path (dual-write);
- host-only compatibility events are forward-only and intentionally skip that path.
- Intended for first-party hosts that re-emit the events into their own telemetry stores.
- Both unrestricted and restricted events are forwarded, each tagged with a `restricted`
- discriminator; a backstop drops restricted events when restricted telemetry is disabled —
- using the process-global gate for ordinary events and an explicit session-scoped decision
- for host-only events.
- """
- token: str | None = None
- """Connection token; required when the server was started with COPILOT_CONNECTION_TOKEN"""
+class ConnectRemoteSessionParams:
+ """Remote session connection parameters."""
+
+ session_id: str
+ """Session ID to connect to."""
@staticmethod
- def from_dict(obj: Any) -> '_ConnectRequest':
+ def from_dict(obj: Any) -> 'ConnectRemoteSessionParams':
assert isinstance(obj, dict)
- enable_git_hub_telemetry_forwarding = from_union([from_bool, from_none], obj.get("enableGitHubTelemetryForwarding"))
- token = from_union([from_str, from_none], obj.get("token"))
- return _ConnectRequest(enable_git_hub_telemetry_forwarding, token)
+ session_id = from_str(obj.get("sessionId"))
+ return ConnectRemoteSessionParams(session_id)
def to_dict(self) -> dict:
result: dict = {}
- if self.enable_git_hub_telemetry_forwarding is not None:
- result["enableGitHubTelemetryForwarding"] = from_union([from_bool, from_none], self.enable_git_hub_telemetry_forwarding)
- if self.token is not None:
- result["token"] = from_union([from_str, from_none], self.token)
+ result["sessionId"] = from_str(self.session_id)
return result
# Experimental: this type is part of an experimental API and may change or be removed.
@@ -2396,12 +2405,6 @@ def to_dict(self) -> dict:
result["path"] = from_union([from_str, from_none], self.path)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
-class DisableBypassPermissionsMode(Enum):
- """When set to `disable`, prevents bypass/allow-all permission modes."""
-
- DISABLE = "disable"
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class DiscoveredExtensionPlugin:
@@ -6698,6 +6701,33 @@ def to_dict(self) -> dict:
result["supported_media_types"] = from_list(from_str, self.supported_media_types)
return result
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class ModelMessage:
+ """A service-published message about a model, carrying a stable machine-readable code
+ alongside human-readable text.
+ """
+ code: str
+ """Stable machine-readable identifier for the message, such as `client_version_deprecated`.
+ Hosts can key custom presentation off this; unrecognized codes should fall back to
+ displaying `message`.
+ """
+ message: str
+ """Human-readable message text intended for display to the user."""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'ModelMessage':
+ assert isinstance(obj, dict)
+ code = from_str(obj.get("code"))
+ message = from_str(obj.get("message"))
+ return ModelMessage(code, message)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["code"] = from_str(self.code)
+ result["message"] = from_str(self.message)
+ return result
+
# Experimental: this type is part of an experimental API and may change or be removed.
class ModelPickerPriceCategory(Enum):
"""Relative cost tier for token-based billing users
@@ -6717,6 +6747,31 @@ class ModelPolicyState(Enum):
ENABLED = "enabled"
UNCONFIGURED = "unconfigured"
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class ModelWarningText:
+ """Warning text the service requires hosts to surface for this model. Present only when the
+ service published at least one warning.
+
+ Service-published warning text that hosts should display when presenting a model.
+ """
+ data_retention: str | None = None
+ """Data-retention warning for the model. The text may contain Markdown links and should be
+ rendered as Markdown when supported.
+ """
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'ModelWarningText':
+ assert isinstance(obj, dict)
+ data_retention = from_union([from_str, from_none], obj.get("dataRetention"))
+ return ModelWarningText(data_retention)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ if self.data_retention is not None:
+ result["dataRetention"] = from_union([from_str, from_none], self.data_retention)
+ return result
+
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class ModelCapabilitiesOverrideLimitsVision:
@@ -7249,7 +7304,9 @@ class PermissionPathsAddParams:
path: str
"""Directory to add to the allow-list. The runtime resolves and validates the path before
- adding.
+ adding, then loads conventional `.github/skills/` and `.github/agents/` definitions under
+ it when their subsystem gates are enabled. Adding the directory is therefore also a trust
+ decision for configuration stored there.
"""
@staticmethod
@@ -10863,6 +10920,53 @@ def to_dict(self) -> dict:
result["startupPrompts"] = from_list(from_str, self.startup_prompts)
return result
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class SessionManagedPermissions:
+ """Enterprise permission policy expressed with the runtime's managed permission-rule
+ syntax.
+
+ Managed permission policy injected by the SDK host.
+ """
+ allow: list[str] | None = None
+ """Permission rules that allow matching operations unless another managed source, deny, or
+ ask rule restricts them.
+ """
+ ask: list[str] | None = None
+ """Permission rules that require explicit human approval."""
+
+ deny: list[str] | None = None
+ """Permission rules that block matching operations. Deny has highest precedence."""
+
+ disable_bypass_permissions_mode: str | None = None
+ """When set to `disable`, prevents bypass/allow-all permission modes. `allow-auto-only`
+ blocks full allow-all but permits advisory auto-approval. Any other value is accepted
+ rather than failing the session, but is enforced as `disable`: the key is only present to
+ restrict something, so a mode this runtime cannot interpret fails closed to the most
+ restrictive one it knows. Omit the key entirely to impose no restriction.
+ """
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'SessionManagedPermissions':
+ assert isinstance(obj, dict)
+ allow = from_union([lambda x: from_list(from_str, x), from_none], obj.get("allow"))
+ ask = from_union([lambda x: from_list(from_str, x), from_none], obj.get("ask"))
+ deny = from_union([lambda x: from_list(from_str, x), from_none], obj.get("deny"))
+ disable_bypass_permissions_mode = from_union([from_str, from_none], obj.get("disableBypassPermissionsMode"))
+ return SessionManagedPermissions(allow, ask, deny, disable_bypass_permissions_mode)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ if self.allow is not None:
+ result["allow"] = from_union([lambda x: from_list(from_str, x), from_none], self.allow)
+ if self.ask is not None:
+ result["ask"] = from_union([lambda x: from_list(from_str, x), from_none], self.ask)
+ if self.deny is not None:
+ result["deny"] = from_union([lambda x: from_list(from_str, x), from_none], self.deny)
+ if self.disable_bypass_permissions_mode is not None:
+ result["disableBypassPermissionsMode"] = from_union([from_str, from_none], self.disable_bypass_permissions_mode)
+ return result
+
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class SessionModelListRequest:
@@ -15499,6 +15603,49 @@ def to_dict(self) -> dict:
result["origin"] = from_union([lambda x: to_enum(CommandsInvocationOrigin, x), from_none], self.origin)
return result
+# Experimental: this type is part of an experimental API and may change or be removed.
+# Internal: this type is an internal SDK API and is not part of the public surface.
+@dataclass
+class _ConnectRequest:
+ """Connection-level opt-ins for the `server.connect` handshake. Transport authentication is
+ consumed by the native protocol boundary before dispatch.
+ """
+ client_info: _ConnectClientInfo | None = None
+ """Identity of the integrating host. Optional; omit it to keep the default attribution."""
+
+ enable_git_hub_telemetry_forwarding: bool | None = None
+ """Opt this connection in to GitHub telemetry forwarding for its lifetime. When set, the
+ runtime forwards every internal telemetry event it emits — across all sessions, plus
+ sessionless events — to this connection over the `gitHubTelemetry.event` notification.
+ Regular events are also written to the runtime's normal GitHub/CTS path (dual-write);
+ host-only compatibility events are forward-only and intentionally skip that path.
+ Intended for first-party hosts that re-emit the events into their own telemetry stores.
+ Both unrestricted and restricted events are forwarded, each tagged with a `restricted`
+ discriminator; a backstop drops restricted events when restricted telemetry is disabled —
+ using the process-global gate for ordinary events and an explicit session-scoped decision
+ for host-only events.
+ """
+ token: str | None = None
+ """Connection token; required when the server was started with COPILOT_CONNECTION_TOKEN"""
+
+ @staticmethod
+ def from_dict(obj: Any) -> '_ConnectRequest':
+ assert isinstance(obj, dict)
+ client_info = from_union([_ConnectClientInfo.from_dict, from_none], obj.get("clientInfo"))
+ enable_git_hub_telemetry_forwarding = from_union([from_bool, from_none], obj.get("enableGitHubTelemetryForwarding"))
+ token = from_union([from_str, from_none], obj.get("token"))
+ return _ConnectRequest(client_info, enable_git_hub_telemetry_forwarding, token)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ if self.client_info is not None:
+ result["clientInfo"] = from_union([lambda x: to_class(_ConnectClientInfo, x), from_none], self.client_info)
+ if self.enable_git_hub_telemetry_forwarding is not None:
+ result["enableGitHubTelemetryForwarding"] = from_union([from_bool, from_none], self.enable_git_hub_telemetry_forwarding)
+ if self.token is not None:
+ result["token"] = from_union([from_str, from_none], self.token)
+ return result
+
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class ConnectedRemoteSessionMetadata:
@@ -15972,48 +16119,6 @@ def to_dict(self) -> dict:
result["outputDirectory"] = from_union([from_str, from_none], self.output_directory)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
-@dataclass
-class SessionManagedPermissions:
- """Enterprise permission policy expressed with the runtime's managed permission-rule
- syntax.
-
- Managed permission policy injected by the SDK host.
- """
- allow: list[str] | None = None
- """Permission rules that allow matching operations unless another managed source, deny, or
- ask rule restricts them.
- """
- ask: list[str] | None = None
- """Permission rules that require explicit human approval."""
-
- deny: list[str] | None = None
- """Permission rules that block matching operations. Deny has highest precedence."""
-
- disable_bypass_permissions_mode: DisableBypassPermissionsMode | None = None
- """When set to `disable`, prevents bypass/allow-all permission modes."""
-
- @staticmethod
- def from_dict(obj: Any) -> 'SessionManagedPermissions':
- assert isinstance(obj, dict)
- allow = from_union([lambda x: from_list(from_str, x), from_none], obj.get("allow"))
- ask = from_union([lambda x: from_list(from_str, x), from_none], obj.get("ask"))
- deny = from_union([lambda x: from_list(from_str, x), from_none], obj.get("deny"))
- disable_bypass_permissions_mode = from_union([DisableBypassPermissionsMode, from_none], obj.get("disableBypassPermissionsMode"))
- return SessionManagedPermissions(allow, ask, deny, disable_bypass_permissions_mode)
-
- def to_dict(self) -> dict:
- result: dict = {}
- if self.allow is not None:
- result["allow"] = from_union([lambda x: from_list(from_str, x), from_none], self.allow)
- if self.ask is not None:
- result["ask"] = from_union([lambda x: from_list(from_str, x), from_none], self.ask)
- if self.deny is not None:
- result["deny"] = from_union([lambda x: from_list(from_str, x), from_none], self.deny)
- if self.disable_bypass_permissions_mode is not None:
- result["disableBypassPermissionsMode"] = from_union([lambda x: to_enum(DisableBypassPermissionsMode, x), from_none], self.disable_bypass_permissions_mode)
- return result
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class DiscoveredExtension:
@@ -20918,6 +21023,14 @@ class InstalledPluginInfo:
for direct repo / URL / local installs; absent for marketplace plugins. Same source
yields the same id; distinct sources never collide.
"""
+ installed_from: str | None = None
+ """Absolute path of the marketplace directory a live plugin was resolved from. Present only
+ on live, never-persisted records — a plugin belonging to a directory/local marketplace,
+ which is loaded from its real directory on every pass instead of a copy under the
+ installed-plugins cache. Its presence is what marks a listed plugin as live: such a
+ plugin is always present on disk, so `enabled` is its only meaningful state and it is
+ never "not installed".
+ """
version: str | None = None
"""Installed version (when reported by the plugin manifest)"""
@@ -20928,8 +21041,9 @@ def from_dict(obj: Any) -> 'InstalledPluginInfo':
marketplace = from_str(obj.get("marketplace"))
name = from_str(obj.get("name"))
direct_source_id = from_union([from_str, from_none], obj.get("directSourceId"))
+ installed_from = from_union([from_str, from_none], obj.get("installedFrom"))
version = from_union([from_str, from_none], obj.get("version"))
- return InstalledPluginInfo(enabled, marketplace, name, direct_source_id, version)
+ return InstalledPluginInfo(enabled, marketplace, name, direct_source_id, installed_from, version)
def to_dict(self) -> dict:
result: dict = {}
@@ -20938,6 +21052,8 @@ def to_dict(self) -> dict:
result["name"] = from_str(self.name)
if self.direct_source_id is not None:
result["directSourceId"] = from_union([from_str, from_none], self.direct_source_id)
+ if self.installed_from is not None:
+ result["installedFrom"] = from_union([from_str, from_none], self.installed_from)
if self.version is not None:
result["version"] = from_union([from_str, from_none], self.version)
return result
@@ -22697,6 +22813,30 @@ def to_dict(self) -> dict:
result["tier"] = to_enum(SessionLimitPredictionTier, self.tier)
return result
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class SessionManagedSettings:
+ """Managed settings an SDK host may inject at session startup. Only permissions are accepted
+ in this initial contract.
+
+ Permissions-only enterprise policy injected by the SDK host at session create or resume.
+ Composes restrictively with self-fetched and device policy and is not persisted.
+ """
+ permissions: SessionManagedPermissions | None = None
+ """Managed permission policy injected by the SDK host."""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'SessionManagedSettings':
+ assert isinstance(obj, dict)
+ permissions = from_union([SessionManagedPermissions.from_dict, from_none], obj.get("permissions"))
+ return SessionManagedSettings(permissions)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ if self.permissions is not None:
+ result["permissions"] = from_union([lambda x: to_class(SessionManagedPermissions, x), from_none], self.permissions)
+ return result
+
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class SessionOpenOptionsAdditionalContentExclusionPolicyRule:
@@ -25098,30 +25238,6 @@ def to_dict(self) -> dict:
result["skippedEntries"] = from_union([lambda x: from_list(lambda x: to_class(DebugCollectLogsSkippedEntry, x), x), from_none], self.skipped_entries)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
-@dataclass
-class SessionManagedSettings:
- """Managed settings an SDK host may inject at session startup. Only permissions are accepted
- in this initial contract.
-
- Permissions-only enterprise policy injected by the SDK host at session create or resume.
- Composes restrictively with self-fetched and device policy and is not persisted.
- """
- permissions: SessionManagedPermissions | None = None
- """Managed permission policy injected by the SDK host."""
-
- @staticmethod
- def from_dict(obj: Any) -> 'SessionManagedSettings':
- assert isinstance(obj, dict)
- permissions = from_union([SessionManagedPermissions.from_dict, from_none], obj.get("permissions"))
- return SessionManagedSettings(permissions)
-
- def to_dict(self) -> dict:
- result: dict = {}
- if self.permissions is not None:
- result["permissions"] = from_union([lambda x: to_class(SessionManagedPermissions, x), from_none], self.permissions)
- return result
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class DiscoveredExtensions:
@@ -25885,6 +26001,13 @@ class InstalledPlugin:
cache_path: str | None = None
"""Path where the plugin is cached locally"""
+ installed_from: str | None = None
+ """Absolute path of the marketplace directory a live plugin was resolved from. Present only
+ on live, never-persisted records — those synthesized at session start for a
+ directory/local marketplace, whose cache_path points at the real plugin directory on disk
+ rather than a copy under the installed-plugins cache. Its presence is what marks a record
+ as live, and no record carrying it is ever written to the persisted installedPlugins key.
+ """
source: InstalledPluginSource | str | None = None
"""Source for direct repo installs (when marketplace is empty)"""
@@ -25906,10 +26029,11 @@ def from_dict(obj: Any) -> 'InstalledPlugin':
marketplace = from_str(obj.get("marketplace"))
name = from_str(obj.get("name"))
cache_path = from_union([from_str, from_none], obj.get("cache_path"))
+ installed_from = from_union([from_str, from_none], obj.get("installed_from"))
source = from_union([InstalledPluginSource.from_dict, from_str, from_none], obj.get("source"))
source_sha = from_union([from_str, from_none], obj.get("source_sha"))
version = from_union([from_str, from_none], obj.get("version"))
- return InstalledPlugin(enabled, installed_at, marketplace, name, cache_path, source, source_sha, version)
+ return InstalledPlugin(enabled, installed_at, marketplace, name, cache_path, installed_from, source, source_sha, version)
def to_dict(self) -> dict:
result: dict = {}
@@ -25919,6 +26043,8 @@ def to_dict(self) -> dict:
result["name"] = from_str(self.name)
if self.cache_path is not None:
result["cache_path"] = from_union([from_str, from_none], self.cache_path)
+ if self.installed_from is not None:
+ result["installed_from"] = from_union([from_str, from_none], self.installed_from)
if self.source is not None:
result["source"] = from_union([lambda x: to_class(InstalledPluginSource, x), from_str, from_none], self.source)
if self.source_sha is not None:
@@ -25948,6 +26074,13 @@ class SessionInstalledPlugin:
cache_path: str | None = None
"""Path where the plugin is cached locally"""
+ installed_from: str | None = None
+ """Absolute path of the marketplace directory a live plugin was resolved from. Present only
+ on live, never-persisted records — those synthesized at session start for a
+ directory/local marketplace, whose cache_path points at the real plugin directory on disk
+ rather than a copy under the installed-plugins cache. Its presence is what marks a record
+ as live, and no record carrying it is ever written to the persisted installedPlugins key.
+ """
source: SessionInstalledPluginSource | str | None = None
"""Source descriptor for direct repo installs (when marketplace is empty)"""
@@ -25969,10 +26102,11 @@ def from_dict(obj: Any) -> 'SessionInstalledPlugin':
marketplace = from_str(obj.get("marketplace"))
name = from_str(obj.get("name"))
cache_path = from_union([from_str, from_none], obj.get("cache_path"))
+ installed_from = from_union([from_str, from_none], obj.get("installed_from"))
source = from_union([SessionInstalledPluginSource.from_dict, from_str, from_none], obj.get("source"))
source_sha = from_union([from_str, from_none], obj.get("source_sha"))
version = from_union([from_str, from_none], obj.get("version"))
- return SessionInstalledPlugin(enabled, installed_at, marketplace, name, cache_path, source, source_sha, version)
+ return SessionInstalledPlugin(enabled, installed_at, marketplace, name, cache_path, installed_from, source, source_sha, version)
def to_dict(self) -> dict:
result: dict = {}
@@ -25982,6 +26116,8 @@ def to_dict(self) -> dict:
result["name"] = from_str(self.name)
if self.cache_path is not None:
result["cache_path"] = from_union([from_str, from_none], self.cache_path)
+ if self.installed_from is not None:
+ result["installed_from"] = from_union([from_str, from_none], self.installed_from)
if self.source is not None:
result["source"] = from_union([lambda x: to_class(SessionInstalledPluginSource, x), from_str, from_none], self.source)
if self.source_sha is not None:
@@ -26268,9 +26404,11 @@ class PermissionPathsConfig:
"""
additional_directories: list[str] | None = None
"""Additional directories to allow tool access to (in addition to the session's working
- directory). When `unrestricted` is true, these are still pre-populated on the
- UnrestrictedPathManager so they remain visible via getDirectories() (e.g. for @-mention
- completion).
+ directory). Conventional `.github/skills/` and `.github/agents/` definitions under them
+ also join the session catalogs when their subsystem gates are enabled, so supplying a
+ directory is a trust decision for configuration stored there. When `unrestricted` is
+ true, these are still pre-populated on the UnrestrictedPathManager so they remain visible
+ via getDirectories() (e.g. for @-mention completion).
"""
include_temp_directory: bool | None = None
"""Whether to include the system temp directory in the allowed list (defaults to true).
@@ -27165,18 +27303,26 @@ class QueuePendingItemsResult:
"""Display text for messages currently in the immediate steering queue (interjections sent
during a running turn).
"""
+ in_flight_steering_count: int | None = None
+ """How many leading entries of `steeringMessages` have already been folded into the running
+ turn (and so have an emitted `user.message`), as opposed to still waiting for one. Absent
+ for hosts that do not distinguish the two.
+ """
@staticmethod
def from_dict(obj: Any) -> 'QueuePendingItemsResult':
assert isinstance(obj, dict)
items = from_list(QueuePendingItems.from_dict, obj.get("items"))
steering_messages = from_list(from_str, obj.get("steeringMessages"))
- return QueuePendingItemsResult(items, steering_messages)
+ in_flight_steering_count = from_union([from_int, from_none], obj.get("inFlightSteeringCount"))
+ return QueuePendingItemsResult(items, steering_messages, in_flight_steering_count)
def to_dict(self) -> dict:
result: dict = {}
result["items"] = from_list(lambda x: to_class(QueuePendingItems, x), self.items)
result["steeringMessages"] = from_list(from_str, self.steering_messages)
+ if self.in_flight_steering_count is not None:
+ result["inFlightSteeringCount"] = from_union([from_int, from_none], self.in_flight_steering_count)
return result
# Experimental: this type is part of an experimental API and may change or be removed.
@@ -29897,9 +30043,9 @@ class SandboxConfig:
"""Whether to auto-grant read access to the tool directories discovered on PATH and in
toolchain environment variables (GOROOT, CARGO_HOME, JAVA_HOME, VIRTUAL_ENV, and
similar), and to common developer-tool caches, registries, and toolchains in their
- default home locations (cargo, go, npm, Maven, and more), plus read-write access to (and,
- on Unix, up-front creation of) the scratch caches builds write on every run (go-build,
- ccache, sccache, Gradle caches, Cargo lock/tracker files), so builds work without extra
+ default home locations (cargo, go, npm, Maven, and more), plus read-write access to (and
+ up-front creation of) the scratch caches builds write on every run (go-build, ccache,
+ sccache, Gradle caches, Cargo lock/tracker files), so builds work without extra
configuration; a relocated CARGO_HOME additionally gets its Cargo lock files granted
read-write. Set to false to disable every grant listed above: user-installed toolchains
(rustup, nvm, pyenv, conda, pipx) then need explicit userPolicy.filesystem entries —
@@ -30339,11 +30485,15 @@ class SessionOpenOptions:
additional_directories: list[str] | None = None
"""Additional directories the agent may access beyond the working directory. Each entry is
granted to the session's file-access allow-list and surfaced to the model (system prompt
- context and `@`-mention completion). Absolute paths are recommended; a relative path is
- resolved against the session's working directory. Nonexistent or unresolvable entries are
- skipped with a warning. This is applied on both session creation and resume, and is not
- persisted: a resumed session that omits this option does not retain previously supplied
- directories (re-supply them, exactly as the CLI re-passes `--add-dir`).
+ context and `@`-mention completion). Conventional `.github/skills/` and `.github/agents/`
+ definitions under each directory also join the session's project catalogs when their
+ existing subsystem gates are enabled: added-root skills require both
+ `enableConfigDiscovery` and effective `enableSkills`; added-root agents require
+ `enableConfigDiscovery`. Supplying a directory therefore activates configuration from it
+ and should be treated as a trust decision. Absolute paths are recommended; a relative
+ path is resolved against the session's working directory. Nonexistent or unresolvable
+ entries are skipped with a warning. This is applied during session creation and cold
+ resume and is not persisted, so a cold resume must re-supply the directories.
"""
agent_context: str | None = None
"""Runtime context discriminator for agent filtering."""
@@ -33354,6 +33504,11 @@ class Model:
default_reasoning_effort: str | None = None
"""Default reasoning effort level (only present if model supports reasoning effort)"""
+ info_messages: list[ModelMessage] | None = None
+ """Informational notices the service published for this model, such as an upcoming change or
+ a recommended alternative. Present only when the service published at least one notice.
+ Hosts should surface these without implying anything is wrong with the model.
+ """
model_picker_category: ModelPickerCategory | None = None
"""Model capability category for grouping in the model picker"""
@@ -33372,6 +33527,16 @@ class Model:
supported_reasoning_efforts: list[str] | None = None
"""Supported reasoning effort levels (only present if model supports reasoning effort)"""
+ warning_messages: list[ModelMessage] | None = None
+ """Warnings the service published for this model, such as a deprecated client version.
+ Present only when the service published at least one warning. The model remains usable;
+ hosts should surface these as advisory rather than blocking.
+ """
+ warning_text: ModelWarningText | None = None
+ """Warning text the service requires hosts to surface for this model. Present only when the
+ service published at least one warning.
+ """
+
@staticmethod
def from_dict(obj: Any) -> 'Model':
assert isinstance(obj, dict)
@@ -33380,12 +33545,15 @@ def from_dict(obj: Any) -> 'Model':
name = from_str(obj.get("name"))
billing = from_union([ModelBilling.from_dict, from_none], obj.get("billing"))
default_reasoning_effort = from_union([from_str, from_none], obj.get("defaultReasoningEffort"))
+ info_messages = from_union([lambda x: from_list(ModelMessage.from_dict, x), from_none], obj.get("infoMessages"))
model_picker_category = from_union([ModelPickerCategory, from_none], obj.get("modelPickerCategory"))
model_picker_price_category = from_union([ModelPickerPriceCategory, from_none], obj.get("modelPickerPriceCategory"))
policy = from_union([ModelPolicy.from_dict, from_none], obj.get("policy"))
supported_context_tiers = from_union([lambda x: from_list(from_str, x), from_none], obj.get("supportedContextTiers"))
supported_reasoning_efforts = from_union([lambda x: from_list(from_str, x), from_none], obj.get("supportedReasoningEfforts"))
- return Model(capabilities, id, name, billing, default_reasoning_effort, model_picker_category, model_picker_price_category, policy, supported_context_tiers, supported_reasoning_efforts)
+ warning_messages = from_union([lambda x: from_list(ModelMessage.from_dict, x), from_none], obj.get("warningMessages"))
+ warning_text = from_union([ModelWarningText.from_dict, from_none], obj.get("warningText"))
+ return Model(capabilities, id, name, billing, default_reasoning_effort, info_messages, model_picker_category, model_picker_price_category, policy, supported_context_tiers, supported_reasoning_efforts, warning_messages, warning_text)
def to_dict(self) -> dict:
result: dict = {}
@@ -33396,6 +33564,8 @@ def to_dict(self) -> dict:
result["billing"] = from_union([lambda x: to_class(ModelBilling, x), from_none], self.billing)
if self.default_reasoning_effort is not None:
result["defaultReasoningEffort"] = from_union([from_str, from_none], self.default_reasoning_effort)
+ if self.info_messages is not None:
+ result["infoMessages"] = from_union([lambda x: from_list(lambda x: to_class(ModelMessage, x), x), from_none], self.info_messages)
if self.model_picker_category is not None:
result["modelPickerCategory"] = from_union([lambda x: to_enum(ModelPickerCategory, x), from_none], self.model_picker_category)
if self.model_picker_price_category is not None:
@@ -33406,6 +33576,10 @@ def to_dict(self) -> dict:
result["supportedContextTiers"] = from_union([lambda x: from_list(from_str, x), from_none], self.supported_context_tiers)
if self.supported_reasoning_efforts is not None:
result["supportedReasoningEfforts"] = from_union([lambda x: from_list(from_str, x), from_none], self.supported_reasoning_efforts)
+ if self.warning_messages is not None:
+ result["warningMessages"] = from_union([lambda x: from_list(lambda x: to_class(ModelMessage, x), x), from_none], self.warning_messages)
+ if self.warning_text is not None:
+ result["warningText"] = from_union([lambda x: to_class(ModelWarningText, x), from_none], self.warning_text)
return result
# Experimental: this type is part of an experimental API and may change or be removed.
@@ -34640,6 +34814,7 @@ class RPC:
completions_request_request: CompletionsRequestRequest
completions_request_result: CompletionsRequestResult
configure_session_extensions_params: _ConfigureSessionExtensionsParams
+ connect_client_info: _ConnectClientInfo
connected_remote_session_metadata: ConnectedRemoteSessionMetadata
connected_remote_session_metadata_kind: ConnectedRemoteSessionMetadataKind
connected_remote_session_metadata_repository: ConnectedRemoteSessionMetadataRepository
@@ -34671,7 +34846,6 @@ class RPC:
debug_collect_logs_result_kind: DebugCollectLogsResultKind
debug_collect_logs_skipped_entry: DebugCollectLogsSkippedEntry
debug_collect_logs_source: DebugCollectLogsSource
- disable_bypass_permissions_mode: DisableBypassPermissionsMode
discovered_canvas: DiscoveredCanvas
discovered_extension: DiscoveredExtension
discovered_extension_mode: DiscoveredExtensionMode
@@ -35024,6 +35198,7 @@ class RPC:
model_capabilities_supports: ModelCapabilitiesSupports
model_list: ModelList
model_list_request: Any
+ model_message: ModelMessage
model_picker_category: ModelPickerCategory
model_picker_persistence_request: ModelPickerPersistenceRequest
model_picker_price_category: ModelPickerPriceCategory
@@ -35036,6 +35211,7 @@ class RPC:
model_switch_confirmation: ModelSwitchConfirmation
model_switch_to_request: ModelSwitchToRequest
model_switch_to_result: ModelSwitchToResult
+ model_warning_text: ModelWarningText
mode_set_request: ModeSetRequest
mode_set_result: ModeSetResult
move_mcp_loading_to_background_result: MoveMCPLoadingToBackgroundResult
@@ -35810,6 +35986,7 @@ def from_dict(obj: Any) -> 'RPC':
completions_request_request = CompletionsRequestRequest.from_dict(obj.get("CompletionsRequestRequest"))
completions_request_result = CompletionsRequestResult.from_dict(obj.get("CompletionsRequestResult"))
configure_session_extensions_params = _ConfigureSessionExtensionsParams.from_dict(obj.get("ConfigureSessionExtensionsParams"))
+ connect_client_info = _ConnectClientInfo.from_dict(obj.get("ConnectClientInfo"))
connected_remote_session_metadata = ConnectedRemoteSessionMetadata.from_dict(obj.get("ConnectedRemoteSessionMetadata"))
connected_remote_session_metadata_kind = ConnectedRemoteSessionMetadataKind(obj.get("ConnectedRemoteSessionMetadataKind"))
connected_remote_session_metadata_repository = ConnectedRemoteSessionMetadataRepository.from_dict(obj.get("ConnectedRemoteSessionMetadataRepository"))
@@ -35841,7 +36018,6 @@ def from_dict(obj: Any) -> 'RPC':
debug_collect_logs_result_kind = DebugCollectLogsResultKind(obj.get("DebugCollectLogsResultKind"))
debug_collect_logs_skipped_entry = DebugCollectLogsSkippedEntry.from_dict(obj.get("DebugCollectLogsSkippedEntry"))
debug_collect_logs_source = DebugCollectLogsSource(obj.get("DebugCollectLogsSource"))
- disable_bypass_permissions_mode = DisableBypassPermissionsMode(obj.get("DisableBypassPermissionsMode"))
discovered_canvas = DiscoveredCanvas.from_dict(obj.get("DiscoveredCanvas"))
discovered_extension = DiscoveredExtension.from_dict(obj.get("DiscoveredExtension"))
discovered_extension_mode = DiscoveredExtensionMode(obj.get("DiscoveredExtensionMode"))
@@ -36194,6 +36370,7 @@ def from_dict(obj: Any) -> 'RPC':
model_capabilities_supports = ModelCapabilitiesSupports.from_dict(obj.get("ModelCapabilitiesSupports"))
model_list = ModelList.from_dict(obj.get("ModelList"))
model_list_request = obj.get("ModelListRequest")
+ model_message = ModelMessage.from_dict(obj.get("ModelMessage"))
model_picker_category = ModelPickerCategory(obj.get("ModelPickerCategory"))
model_picker_persistence_request = ModelPickerPersistenceRequest.from_dict(obj.get("ModelPickerPersistenceRequest"))
model_picker_price_category = ModelPickerPriceCategory(obj.get("ModelPickerPriceCategory"))
@@ -36206,6 +36383,7 @@ def from_dict(obj: Any) -> 'RPC':
model_switch_confirmation = ModelSwitchConfirmation.from_dict(obj.get("ModelSwitchConfirmation"))
model_switch_to_request = ModelSwitchToRequest.from_dict(obj.get("ModelSwitchToRequest"))
model_switch_to_result = ModelSwitchToResult.from_dict(obj.get("ModelSwitchToResult"))
+ model_warning_text = ModelWarningText.from_dict(obj.get("ModelWarningText"))
mode_set_request = ModeSetRequest.from_dict(obj.get("ModeSetRequest"))
mode_set_result = ModeSetResult.from_dict(obj.get("ModeSetResult"))
move_mcp_loading_to_background_result = MoveMCPLoadingToBackgroundResult.from_dict(obj.get("MoveMcpLoadingToBackgroundResult"))
@@ -36838,7 +37016,7 @@ def from_dict(obj: Any) -> 'RPC':
subagent_settings = from_union([SubagentSettings.from_dict, from_none], obj.get("SubagentSettings"))
task_progress = from_union([TaskProgress.from_dict, from_none], obj.get("TaskProgress"))
workspace_summary = from_union([WorkspaceSummary.from_dict, from_none], obj.get("WorkspaceSummary"))
- return RPC(abort_request, abort_result, account_all_users, account_get_all_users_result, account_get_current_auth_result, account_get_quota_request, account_get_quota_result, account_login_request, account_login_result, account_logout_request, account_logout_result, account_quota_snapshot, adaptive_thinking_support, agent_discovery_path, agent_discovery_path_list, agent_discovery_path_scope, agent_get_current_result, agent_info, agent_info_source, agent_list, agent_list_request, agent_registry_live_target_entry, agent_registry_live_target_entry_attention_kind, agent_registry_live_target_entry_kind, agent_registry_live_target_entry_last_terminal_event, agent_registry_live_target_entry_status, agent_registry_log_capture, agent_registry_log_capture_open_error_reason, agent_registry_spawn_error, agent_registry_spawn_permission_mode, agent_registry_spawn_registry_timeout, agent_registry_spawn_request, agent_registry_spawn_result, agent_registry_spawn_spawned, agent_registry_spawn_validation_error, agent_registry_spawn_validation_error_field, agent_registry_spawn_validation_error_reason, agent_reload_result, agents_discover_request, agent_select_request, agent_select_result, agent_set_prompt_request, agents_get_discovery_paths_request, api_key_auth_info, auth_identity, auth_info, auth_info_type, auth_validation_error, auth_validation_errors, built_in_model_catalog, built_in_model_catalog_entry, builtin_tool_descriptor, builtin_tool_format, builtin_tool_format_type, builtin_tool_input_schema, builtin_tool_input_schema_type, builtin_tool_safe_for_telemetry, builtin_tool_safe_telemetry_fields, cancel_user_requested_shell_command_result, canvas_action, canvas_action_invoke_request, canvas_action_invoke_result, canvas_close_request, canvas_host_context, canvas_host_context_capabilities, canvas_json_schema, canvas_list, canvas_list_open_result, canvas_open_request, canvas_provider_close_request, canvas_provider_invoke_action_request, canvas_provider_open_request, canvas_provider_open_result, canvas_provider_register_request, canvas_provider_unregister_request, canvas_session_context, capi_session_options, card_digest, card_digest_algorithm, card_digest_value, catalog_ai_skill_candidate, catalog_ai_skill_candidate_provenance, catalog_authentication_required_error, catalog_authentication_required_reason, catalog_candidate, catalog_candidate_kind, catalog_candidate_source, catalog_candidate_source_embedded, catalog_candidate_source_url, catalog_capability, catalog_capability_id, catalog_client_contract, catalog_contract_violation_error, catalog_contract_violation_reason, catalog_handle_rejected_error, catalog_handle_rejection_reason, catalog_handle_type, catalog_invalid_request_error, catalog_invalid_request_field, catalog_malformed_card_error, catalog_malformed_card_reason, catalog_mcp_server_candidate, catalog_mcp_server_candidate_provenance, catalog_mcp_server_installability, catalog_media_type, catalog_negotiated_contract, catalog_negotiation_refused_error, catalog_negotiation_refused_reason, catalog_network_failure_error, catalog_network_failure_reason, catalog_not_installable_error, catalog_not_installable_reason, catalog_policy_rejected_error, catalog_search_request, catalog_search_result, catalog_search_succeeded, catalog_unavailable_error, catalog_unavailable_reason, catalog_unavailable_transport_error, catalog_unavailable_transport_reason, catalog_unsafe_retrieval_error, catalog_unsafe_retrieval_reason, catalog_unsupported_kind_error, command_list, commands_finalize_invocation_effect_request, commands_finalize_invocation_effect_result, commands_handle_pending_command_request, commands_handle_pending_command_result, commands_invocation_effect_outcome, commands_invocation_origin, commands_invoke_request, commands_list_request, commands_respond_to_queued_command_request, commands_respond_to_queued_command_result, completions_get_trigger_characters_result, completions_request_request, completions_request_result, configure_session_extensions_params, connected_remote_session_metadata, connected_remote_session_metadata_kind, connected_remote_session_metadata_repository, connect_remote_session_params, connect_request, connect_result, content_exclusion_check_paths_request, content_exclusion_check_paths_result, content_exclusion_path_check, content_filter_mode, context_heaviest_message, copilot_api_token_auth_info, copilot_user_response, copilot_user_response_endpoints, copilot_user_response_quota_snapshots, copilot_user_response_quota_snapshots_chat, copilot_user_response_quota_snapshots_completions, copilot_user_response_quota_snapshots_premium_interactions, current_model, current_tool_metadata, debug_collect_logs_collected_entry, debug_collect_logs_destination, debug_collect_logs_entry, debug_collect_logs_entry_kind, debug_collect_logs_include, debug_collect_logs_redaction, debug_collect_logs_request, debug_collect_logs_result, debug_collect_logs_result_kind, debug_collect_logs_skipped_entry, debug_collect_logs_source, disable_bypass_permissions_mode, discovered_canvas, discovered_extension, discovered_extension_mode, discovered_extension_plugin, discovered_extensions, discovered_extensions_disable_request, discovered_extensions_enable_request, discovered_extension_source, discovered_mcp_server, discovered_mcp_server_type, enqueue_command_params, enqueue_command_result, env_auth_info, event_log_read_request, event_log_release_interest_result, event_log_tail_result, event_log_types, events_agent_scope, events_cursor_status, events_read_direction, events_read_result, execute_command_params, execute_command_result, extension, extension_context_push_input, extension_launch_profile, extension_launch_provider_resolve_request, extension_launch_provider_resolve_result, extension_list, extensions_disable_request, extensions_enable_request, extension_source, extension_status, external_tool_result, external_tool_text_result_for_llm, external_tool_text_result_for_llm_binary_results_for_llm, external_tool_text_result_for_llm_binary_results_for_llm_type, external_tool_text_result_for_llm_content, external_tool_text_result_for_llm_content_audio, external_tool_text_result_for_llm_content_image, external_tool_text_result_for_llm_content_resource, external_tool_text_result_for_llm_content_resource_details, external_tool_text_result_for_llm_content_resource_link, external_tool_text_result_for_llm_content_resource_link_icon, external_tool_text_result_for_llm_content_resource_link_icon_theme, external_tool_text_result_for_llm_content_shell_exit, external_tool_text_result_for_llm_content_terminal, external_tool_text_result_for_llm_content_text, factory_abort_request, factory_ack_result, factory_agent_options, factory_agent_request, factory_agent_result, factory_agent_summary, factory_cancel_request, factory_current_phase, factory_declared_limits, factory_durable_operation, factory_execute_request, factory_execute_result, factory_get_run_progress_request, factory_get_run_request, factory_journal_get_request, factory_journal_get_result, factory_journal_put_request, factory_list_runs_request, factory_list_runs_result, factory_log_line, factory_log_line_kind, factory_log_request, factory_phase_observation, factory_phase_status, factory_progress_line, factory_progress_page, factory_resume_request, factory_resume_result, factory_run_consumed, factory_run_detail, factory_run_failure, factory_run_failure_kind, factory_run_limits, factory_run_request, factory_run_result, factory_run_status, factory_run_summary, factory_run_terminal, filter_mapping, fleet_start_request, fleet_start_result, folder_trust_add_params, folder_trust_check_params, folder_trust_check_result, gh_cli_auth_info, git_hub_telemetry_client_info, git_hub_telemetry_event, git_hub_telemetry_notification, handle_pending_tool_call_request, handle_pending_tool_call_result, history_abort_manual_compaction_result, history_cancel_background_compaction_result, history_clear_context_request, history_clear_context_result, history_compact_context_window, history_compact_request, history_compact_result, history_file_restore_skip_reason, history_list_rewind_points_result, history_preview_rewind_request, history_preview_rewind_result, history_rewind_change_type, history_rewind_file_preview, history_rewind_mode, history_rewind_outcome, history_rewind_point, history_rewind_request, history_rewind_result, history_rewind_unavailable_reason, history_skipped_file_restore, history_summarize_for_handoff_result, history_truncate_request, history_truncate_result, hmac_auth_info, hook_invoke_request, hook_invoke_response, hook_type, installed_plugin, installed_plugin_info, installed_plugin_source, installed_plugin_source_git_hub, installed_plugin_source_local, installed_plugin_source_url, instruction_discovery_path, instruction_discovery_path_kind, instruction_discovery_path_list, instruction_discovery_path_location, instructions_discover_request, instructions_get_discovery_paths_request, instructions_get_sources_result, instruction_source, instruction_source_location, instruction_source_type, interrupt_main_turn_request, interrupt_main_turn_result, llm_inference_headers, llm_inference_http_request_chunk_request, llm_inference_http_request_chunk_result, llm_inference_http_request_start_request, llm_inference_http_request_start_result, llm_inference_http_request_start_transport, llm_inference_http_response_chunk_error, llm_inference_http_response_chunk_request, llm_inference_http_response_chunk_result, llm_inference_http_response_start_request, llm_inference_http_response_start_result, llm_inference_set_provider_result, local_session_metadata_value, log_request, log_result, lsp_initialize_request, managed_settings_read_result, marketplace_add_result, marketplace_browse_result, marketplace_info, marketplace_list_result, marketplace_plugin_info, marketplace_refresh_entry, marketplace_refresh_result, marketplace_remove_result, mcp_allowed_server, mcp_apps_call_tool_request, mcp_apps_diagnose_capability, mcp_apps_diagnose_request, mcp_apps_diagnose_result, mcp_apps_diagnose_server, mcp_apps_host_context, mcp_apps_host_context_details, mcp_apps_host_context_details_available_display_mode, mcp_apps_host_context_details_display_mode, mcp_apps_host_context_details_platform, mcp_apps_host_context_details_theme, mcp_apps_list_tools_request, mcp_apps_list_tools_result, mcp_apps_read_resource_request, mcp_apps_read_resource_result, mcp_apps_resource_content, mcp_apps_set_host_context_details, mcp_apps_set_host_context_details_available_display_mode, mcp_apps_set_host_context_details_display_mode, mcp_apps_set_host_context_details_platform, mcp_apps_set_host_context_details_theme, mcp_apps_set_host_context_request, mcp_cancel_sampling_execution_params, mcp_cancel_sampling_execution_result, mcp_config_add_request, mcp_config_disable_request, mcp_config_enable_request, mcp_config_list, mcp_config_remove_request, mcp_config_update_request, mcp_configure_git_hub_request, mcp_configure_git_hub_result, mcp_disable_request, mcp_discover_request, mcp_discover_result, mcp_elicitation_form_mode, mcp_enable_request, mcp_execute_sampling_params, mcp_execute_sampling_request, mcp_execute_sampling_result, mcp_failed_server, mcp_filtered_server, mcp_headers_handle_pending_headers_refresh_request, mcp_headers_handle_pending_headers_refresh_request_request, mcp_headers_handle_pending_headers_refresh_request_result, mcp_host_state, mcp_install_plan, mcp_is_server_running_request, mcp_is_server_running_result, mcp_list_tools_request, mcp_list_tools_result, mcp_oauth_authentication_state_changed_request, mcp_oauth_handle_pending_request, mcp_oauth_handle_pending_result, mcp_oauth_login_grant_type, mcp_oauth_login_request, mcp_oauth_login_result, mcp_oauth_pending_request_response, mcp_oauth_probe_needs_auth_reason, mcp_oauth_probe_request, mcp_oauth_probe_result, mcp_oauth_respond_request, mcp_oauth_respond_result, mcp_plan_configuration_change, mcp_plan_configuration_operation, mcp_plan_enum_value_type, mcp_plan_install_planned, mcp_plan_install_request, mcp_plan_install_result, mcp_plan_install_source, mcp_plan_install_source_candidate, mcp_plan_install_source_candidate_kind, mcp_plan_install_source_card, mcp_plan_install_source_card_kind, mcp_plan_package_install_method, mcp_plan_package_transport, mcp_plan_policy_decision, mcp_plan_policy_result, mcp_plan_policy_source, mcp_plan_provenance, mcp_plan_remote_install_method, mcp_plan_remote_transport, mcp_plan_required_value, mcp_plan_required_value_enum, mcp_plan_required_value_enum_kind, mcp_plan_required_value_scalar, mcp_plan_required_value_scalar_kind, mcp_plan_resource_identity, mcp_plan_scalar_value_type, mcp_plan_scope, mcp_plan_secret_placeholder, mcp_plan_secret_reference, mcp_plan_target, mcp_plan_transport_choice, mcp_plan_transport_choice_package, mcp_plan_transport_choice_remote, mcp_plan_value_category, mcp_register_external_client_request, mcp_reload_config, mcp_reload_with_config_request, mcp_remove_git_hub_result, mcp_resource, mcp_resource_annotations, mcp_resource_content, mcp_resource_icon, mcp_resources_list_request, mcp_resources_list_result, mcp_resources_list_templates_request, mcp_resources_list_templates_result, mcp_resources_read_request, mcp_resources_read_result, mcp_resource_template, mcp_restart_server_request, mcp_safe_for_telemetry, mcp_safe_for_telemetry_fields, mcp_sampling_execution_action, mcp_sampling_execution_result, mcp_serializable_server_config, mcp_server, mcp_server_auth_config, mcp_server_auth_config_redirect_port, mcp_server_card_embedded, mcp_server_card_embedded_kind, mcp_server_card_media_type, mcp_server_card_reference, mcp_server_card_url, mcp_server_card_url_kind, mcp_server_config, mcp_server_config_defer_tools, mcp_server_config_http, mcp_server_config_http_oauth_grant_type, mcp_server_config_http_type, mcp_server_config_memory, mcp_server_config_memory_type, mcp_server_config_stdio, mcp_server_config_stdio_type, mcp_server_failure_info, mcp_server_list, mcp_server_needs_auth_info, mcp_set_env_value_mode_details, mcp_set_env_value_mode_params, mcp_set_env_value_mode_result, mcp_start_server_request, mcp_start_servers_result, mcp_stop_server_request, mcp_task_metadata, mcp_tools, mcp_tool_ui, mcp_tool_ui_visibility, mcp_unregister_external_client_request, memory_configuration, metadata_context_attribution_result, metadata_context_heaviest_messages_request, metadata_context_heaviest_messages_result, metadata_context_info_request, metadata_context_info_result, metadata_is_processing_result, metadata_recompute_context_tokens_request, metadata_recompute_context_tokens_result, metadata_record_context_change_request, metadata_record_context_change_result, metadata_set_working_directory_request, metadata_set_working_directory_result, metadata_snapshot_current_mode, metadata_snapshot_remote_metadata, metadata_snapshot_remote_metadata_repository, metadata_snapshot_remote_metadata_task_type, model, model_apply_startup_overlay_request, model_billing, model_billing_promo, model_billing_token_prices, model_billing_token_prices_long_context, model_capabilities, model_capabilities_limits, model_capabilities_limits_vision, model_capabilities_override, model_capabilities_override_limits, model_capabilities_override_limits_vision, model_capabilities_override_supports, model_capabilities_supports, model_list, model_list_request, model_picker_category, model_picker_persistence_request, model_picker_price_category, model_picker_settings_context, model_policy, model_policy_state, model_set_reasoning_effort_request, model_set_reasoning_effort_result, models_list_request, model_switch_confirmation, model_switch_to_request, model_switch_to_result, mode_set_request, mode_set_result, move_mcp_loading_to_background_result, named_provider_config, name_get_result, name_set_auto_request, name_set_auto_result, name_set_request, open_canvas_instance, options_update_additional_content_exclusion_policy, options_update_additional_content_exclusion_policy_rule, options_update_additional_content_exclusion_policy_rule_source, options_update_additional_content_exclusion_policy_scope, options_update_context_tier, options_update_env_value_mode, options_update_reasoning_summary, options_update_tool_filter_precedence, pending_permission_request, pending_permission_request_list, permission_decision, permission_decision_approved, permission_decision_approved_for_location, permission_decision_approved_for_session, permission_decision_approve_for_location, permission_decision_approve_for_location_approval, permission_decision_approve_for_location_approval_commands, permission_decision_approve_for_location_approval_custom_tool, permission_decision_approve_for_location_approval_extension_env_access, permission_decision_approve_for_location_approval_extension_management, permission_decision_approve_for_location_approval_extension_permission_access, permission_decision_approve_for_location_approval_factory, permission_decision_approve_for_location_approval_mcp, permission_decision_approve_for_location_approval_mcp_sampling, permission_decision_approve_for_location_approval_memory, permission_decision_approve_for_location_approval_read, permission_decision_approve_for_location_approval_write, permission_decision_approve_for_session, permission_decision_approve_for_session_approval, permission_decision_approve_for_session_approval_commands, permission_decision_approve_for_session_approval_custom_tool, permission_decision_approve_for_session_approval_extension_env_access, permission_decision_approve_for_session_approval_extension_management, permission_decision_approve_for_session_approval_extension_permission_access, permission_decision_approve_for_session_approval_factory, permission_decision_approve_for_session_approval_mcp, permission_decision_approve_for_session_approval_mcp_sampling, permission_decision_approve_for_session_approval_memory, permission_decision_approve_for_session_approval_read, permission_decision_approve_for_session_approval_write, permission_decision_approve_once, permission_decision_approve_permanently, permission_decision_cancelled, permission_decision_context, permission_decision_denied_by_content_exclusion_policy, permission_decision_denied_by_permission_request_hook, permission_decision_denied_by_rules, permission_decision_denied_interactively_by_user, permission_decision_denied_no_approval_rule_and_could_not_request_from_user, permission_decision_outcome, permission_decision_reject, permission_decision_request, permission_decision_source, permission_decision_surface, permission_decision_user_not_available, permission_location_add_tool_approval_params, permission_location_apply_params, permission_location_apply_result, permission_location_resolve_params, permission_location_resolve_result, permission_location_type, permission_mode_source, permission_paths_add_params, permission_paths_allowed_check_params, permission_paths_allowed_check_result, permission_paths_config, permission_paths_list, permission_paths_update_primary_params, permission_paths_workspace_check_params, permission_paths_workspace_check_result, permission_prompt_shown_notification, permission_request_result, permission_rules_set, permissions_configure_additional_content_exclusion_policy, permissions_configure_additional_content_exclusion_policy_rule, permissions_configure_additional_content_exclusion_policy_rule_source, permissions_configure_additional_content_exclusion_policy_scope, permissions_configure_params, permissions_configure_result, permissions_folder_trust_add_trusted_result, permissions_get_mode_request, permissions_get_mode_result, permissions_locations_add_tool_approval_details, permissions_locations_add_tool_approval_details_commands, permissions_locations_add_tool_approval_details_custom_tool, permissions_locations_add_tool_approval_details_extension_env_access, permissions_locations_add_tool_approval_details_extension_management, permissions_locations_add_tool_approval_details_extension_permission_access, permissions_locations_add_tool_approval_details_factory, permissions_locations_add_tool_approval_details_mcp, permissions_locations_add_tool_approval_details_mcp_sampling, permissions_locations_add_tool_approval_details_memory, permissions_locations_add_tool_approval_details_read, permissions_locations_add_tool_approval_details_write, permissions_locations_add_tool_approval_result, permissions_modify_rules_params, permissions_modify_rules_result, permissions_modify_rules_scope, permissions_notify_prompt_shown_result, permissions_paths_add_result, permissions_paths_list_request, permissions_paths_update_primary_result, permissions_pending_requests_request, permissions_reset_session_approvals_request, permissions_reset_session_approvals_result, permissions_set_approve_all_request, permissions_set_approve_all_result, permissions_set_approve_all_source, permissions_set_mode_request, permissions_set_mode_result, permissions_set_required_request, permissions_set_required_result, permissions_urls_set_unrestricted_mode_result, permission_urls_config, permission_urls_set_unrestricted_mode_params, ping_request, ping_result, plan_read_result, plan_read_sql_todos_result, plan_read_sql_todos_with_dependencies_result, plan_sql_todo_dependency, plan_sql_todos_row, plan_update_request, plugin, plugin_install_result, plugin_list, plugin_list_result, plugins_builtin_set_request, plugins_disable_request, plugins_enable_request, plugins_install_request, plugins_marketplaces_add_request, plugins_marketplaces_browse_request, plugins_marketplaces_refresh_request, plugins_marketplaces_remove_request, plugins_reload_request, plugins_uninstall_request, plugins_update_request, plugin_update_all_entry, plugin_update_all_result, plugin_update_result, protocol_external_tool_defer, protocol_external_tool_definition, provider_add_request, provider_add_result, provider_config, provider_config_azure, provider_config_transport, provider_config_type, provider_config_wire_api, provider_endpoint, provider_endpoint_transport, provider_endpoint_type, provider_endpoint_wire_api, provider_get_endpoint_request, provider_model_config, provider_session_token, provider_token_acquire_request, provider_token_acquire_result, push_attachment, push_attachment_blob, push_attachment_directory, push_attachment_file, push_attachment_file_line_range, push_attachment_git_hub_actions_job, push_attachment_git_hub_commit, push_attachment_git_hub_file, push_attachment_git_hub_file_diff, push_attachment_git_hub_file_diff_side, push_attachment_git_hub_reference, push_attachment_git_hub_reference_type, push_attachment_git_hub_release, push_attachment_git_hub_repository, push_attachment_git_hub_snippet, push_attachment_git_hub_tree_comparison, push_attachment_git_hub_tree_comparison_side, push_attachment_git_hub_url, push_attachment_selection, push_attachment_selection_details, push_attachment_selection_details_end, push_attachment_selection_details_start, push_git_hub_repo_ref, queue_begin_deferred_idle_drain_request, queue_begin_deferred_idle_drain_result, queue_consume_system_notifications_request, queued_command_handled, queued_command_not_handled, queued_command_result, queue_defer_session_idle_request, queue_duplicate_at_request, queue_duplicate_at_result, queue_enqueue_resume_pending_result, queue_finish_deferred_idle_drain_request, queue_finish_deferred_idle_drain_result, queue_has_pending_result, queue_insert_at_request, queue_insert_at_result, queue_insert_message, queue_move_item_request, queue_move_item_result, queue_pending_items, queue_pending_items_kind, queue_pending_items_result, queue_remove_at_request, queue_remove_at_result, queue_remove_most_recent_result, queue_send_now_request, queue_send_now_result, queue_set_drain_paused_request, queue_snapshot_result, queue_update_text_request, queue_update_text_result, register_event_interest_params, register_event_interest_result, register_extension_tools_params, register_extension_tools_result, release_event_interest_params, remote_control_config, remote_control_config_existing_mc_session, remote_control_status, remote_control_status_active, remote_control_status_connecting, remote_control_status_error, remote_control_status_off, remote_control_status_result, remote_control_stop_result, remote_control_transfer_result, remote_enable_request, remote_enable_result, remote_notify_steerable_changed_request, remote_notify_steerable_changed_result, remote_session_connection_result, remote_session_host_status, remote_session_metadata_repository, remote_session_metadata_task_type, remote_session_metadata_value, remote_session_mode, remote_session_repository, run_options, sandbox_config, sandbox_config_auth, sandbox_config_user_policy, sandbox_config_user_policy_experimental, sandbox_config_user_policy_experimental_seatbelt, sandbox_config_user_policy_filesystem, sandbox_config_user_policy_network, sandbox_config_user_policy_network_proxy, sandbox_config_user_policy_seatbelt, schedule_add_at_request, schedule_add_cron_request, schedule_add_request, schedule_add_result, schedule_add_self_paced_request, schedule_entry, schedule_has_self_paced_result, schedule_list, schedule_rearm_self_paced_request, schedule_stop_request, schedule_stop_result, secrets_add_filter_values_request, secrets_add_filter_values_result, send_agent_mode, send_attachments_to_message_params, send_message_item, send_messages_request, send_messages_result, send_mode, send_request, send_result, send_system_notification_request, server_agent_list, server_instruction_source_list, server_skill, server_skill_list, session_activity, session_agent_list_request, session_auth_login_request, session_auth_logout_user_request, session_auth_status, session_auth_switch_request, session_bulk_delete_result, session_cancel_all_background_agents_result, session_capability, session_commands_list_request, session_completion_item, session_context, session_context_host_type, session_enrich_metadata_result, session_fs_append_file_request, session_fs_error, session_fs_error_code, session_fs_exists_request, session_fs_exists_result, session_fs_mkdir_request, session_fs_readdir_request, session_fs_readdir_result, session_fs_readdir_with_types_entry, session_fs_readdir_with_types_entry_type, session_fs_readdir_with_types_request, session_fs_readdir_with_types_result, session_fs_read_file_request, session_fs_read_file_result, session_fs_rename_request, session_fs_rm_request, session_fs_set_provider_capabilities, session_fs_set_provider_conventions, session_fs_set_provider_request, session_fs_set_provider_result, session_fs_sqlite_exists_request, session_fs_sqlite_exists_result, session_fs_sqlite_query_request, session_fs_sqlite_query_result, session_fs_sqlite_query_type, session_fs_sqlite_transaction_error, session_fs_sqlite_transaction_error_class, session_fs_sqlite_transaction_request, session_fs_sqlite_transaction_result, session_fs_sqlite_transaction_statement, session_fs_stat_request, session_fs_stat_result, session_fs_write_file_request, session_git_hub_auth_get_all_auth_available_result, session_git_hub_auth_logout_result, session_git_hub_auth_logout_user_result, session_history_compact_request, session_installed_plugin, session_installed_plugin_source, session_installed_plugin_source_git_hub, session_installed_plugin_source_local, session_installed_plugin_source_url, session_limit_prediction_baseline_data, session_limit_prediction_client_type, session_limit_prediction_details, session_limit_prediction_predict_request, session_limit_prediction_request, session_limit_prediction_result, session_limit_prediction_source, session_limit_prediction_tier, session_limit_prediction_tier_option, session_limit_prediction_unavailable_reason, session_list, session_list_entry, session_list_filter, session_load_deferred_repo_hooks_result, session_log_level, session_managed_permissions, session_managed_settings, session_mcp_apps_call_tool_result, session_metadata_snapshot, session_mode, session_model_list, session_model_list_request, session_model_price_category, session_open_options, session_open_options_additional_content_exclusion_policy, session_open_options_additional_content_exclusion_policy_rule, session_open_options_additional_content_exclusion_policy_rule_source, session_open_options_additional_content_exclusion_policy_scope, session_open_options_env_value_mode, session_open_options_reasoning_summary, session_open_params, session_open_result, session_plugins_reload_request, session_provider_get_endpoint_request, session_prune_result, sessions_bulk_delete_request, sessions_check_in_use_request, sessions_check_in_use_result, sessions_close_request, sessions_close_result, sessions_delete_request, sessions_enrich_metadata_request, session_set_credentials_params, session_set_credentials_result, session_settings_built_in_tool_availability_snapshot, session_settings_evaluate_predicate_request, session_settings_evaluate_predicate_result, session_settings_job_snapshot, session_settings_model_snapshot, session_settings_online_evaluation_snapshot, session_settings_predicate_name, session_settings_repo_snapshot, session_settings_snapshot, session_settings_validation_snapshot, sessions_find_by_prefix_request, sessions_find_by_prefix_result, sessions_find_by_task_id_request, sessions_find_by_task_id_result, sessions_fork_request, sessions_fork_result, sessions_get_board_entry_count_request, sessions_get_board_entry_count_result, sessions_get_event_file_path_request, sessions_get_event_file_path_result, sessions_get_last_for_context_request, sessions_get_last_for_context_result, sessions_get_metadata_request, sessions_get_metadata_result, sessions_get_persisted_remote_steerable_request, sessions_get_persisted_remote_steerable_result, session_sizes, sessions_list_non_empty_session_ids_request, sessions_list_non_empty_session_ids_result, sessions_list_request, sessions_load_deferred_repo_hooks_request, sessions_open_attach, sessions_open_cloud, sessions_open_create, sessions_open_handoff, sessions_open_handoff_task_type, sessions_open_progress, sessions_open_progress_status, sessions_open_progress_step, sessions_open_remote, sessions_open_resume, sessions_open_resume_last, sessions_open_status, session_source, sessions_prune_old_request, sessions_register_extension_tools_on_session_options, sessions_release_lock_request, sessions_release_lock_result, sessions_reload_plugin_hooks_request, sessions_reload_plugin_hooks_result, sessions_save_request, sessions_save_result, sessions_set_additional_plugins_request, sessions_set_additional_plugins_result, sessions_set_remote_control_steering_request, sessions_start_remote_control_request, sessions_stop_remote_control_request, sessions_transfer_remote_control_request, session_telemetry_engagement, session_update_options_params, session_update_options_result, session_visibility_status, session_working_directory_context, session_working_directory_context_host_type, shell_cancel_user_requested_request, shell_credentials, shell_exec_request, shell_exec_result, shell_execute_user_requested_request, shell_init_profile, shell_init_script, shell_init_script_shell, shell_kill_request, shell_kill_result, shell_kill_signal, shell_options, shutdown_request, skill, skill_discovery_path, skill_discovery_path_list, skill_discovery_scope, skill_list, skills_config_set_disabled_skills_request, skills_config_set_skill_disabled_request, skills_disable_request, skills_discover_request, skills_enable_request, skills_get_discovery_paths_request, skills_get_invoked_result, skills_invoked_skill, skills_load_diagnostics, slash_command_add_timeline_entry_result, slash_command_agent_prompt_result, slash_command_completed_result, slash_command_info, slash_command_input, slash_command_input_choice, slash_command_input_completion, slash_command_invocation_result, slash_command_kind, slash_command_model_picker_dialog, slash_command_select_subcommand_option, slash_command_select_subcommand_result, slash_command_set_model_result, slash_command_set_plan_model_result, slash_command_show_dialog_result, slash_command_text_result, slash_command_timeline_entry, subagent_settings_entry, subagent_settings_entry_context_tier, task_agent_info, task_agent_progress, task_complete_data, task_completion_decision, task_execution_mode, task_info, task_list, task_progress_line, tasks_cancel_request, tasks_cancel_result, tasks_get_current_promotable_result, tasks_get_progress_request, tasks_get_progress_result, task_shell_info, task_shell_info_attachment_mode, task_shell_progress, tasks_promote_current_to_background_result, tasks_promote_to_background_request, tasks_promote_to_background_result, tasks_refresh_result, tasks_remove_request, tasks_remove_result, tasks_send_message_request, tasks_send_message_result, tasks_start_agent_request, tasks_start_agent_result, task_status, tasks_wait_for_pending_result, telemetry_set_feature_overrides_request, token_auth_info, tool, tool_list, tool_result, tool_result_expanded, tool_result_new_message, tool_result_type, tools_execute_request, tools_get_builtin_descriptors_request, tools_get_builtin_descriptors_result, tools_get_current_metadata_result, tools_initialize_and_validate_result, tools_list_request, tools_set_request, tools_set_result, tools_shell_descriptor_config, tools_task_complete_event_data_request, tools_update_subagent_settings_result, ui_auto_mode_switch_response, ui_elicitation_array_any_of_field, ui_elicitation_array_any_of_field_items, ui_elicitation_array_any_of_field_items_any_of, ui_elicitation_array_enum_field, ui_elicitation_array_enum_field_items, ui_elicitation_field_value, ui_elicitation_request, ui_elicitation_response, ui_elicitation_response_action, ui_elicitation_response_content, ui_elicitation_result, ui_elicitation_schema, ui_elicitation_schema_property, ui_elicitation_schema_property_boolean, ui_elicitation_schema_property_number, ui_elicitation_schema_property_number_type, ui_elicitation_schema_property_string, ui_elicitation_schema_property_string_format, ui_elicitation_string_enum_field, ui_elicitation_string_one_of_field, ui_elicitation_string_one_of_field_one_of, ui_ephemeral_query_request, ui_ephemeral_query_result, ui_exit_plan_mode_action, ui_exit_plan_mode_response, ui_handle_pending_auto_mode_switch_request, ui_handle_pending_elicitation_request, ui_handle_pending_exit_plan_mode_request, ui_handle_pending_result, ui_handle_pending_sampling_request, ui_handle_pending_sampling_response, ui_handle_pending_session_limits_exhausted_request, ui_handle_pending_user_input_request, ui_register_direct_auto_mode_switch_handler_result, ui_session_limits_exhausted_response, ui_session_limits_exhausted_response_action, ui_unregister_direct_auto_mode_switch_handler_request, ui_unregister_direct_auto_mode_switch_handler_result, ui_user_input_response, update_subagent_settings_request, usage_get_metrics_result, usage_metrics_agent_metric, usage_metrics_code_changes, usage_metrics_model_metric, usage_metrics_model_metric_requests, usage_metrics_model_metric_token_detail, usage_metrics_model_metric_usage, usage_metrics_token_detail, user_auth_info, user_requested_shell_command_result, user_setting_metadata, user_settings_get_result, user_settings_set_request, user_settings_set_result, visibility_get_result, visibility_set_request, visibility_set_result, workspace_diff_file_change, workspace_diff_file_change_type, workspace_diff_mode, workspace_diff_result, workspaces_add_summary_request, workspaces_add_summary_result, workspaces_autopilot_objective_exists_result, workspaces_checkpoints, workspaces_create_file_request, workspaces_delete_autopilot_objective_result, workspaces_diff_request, workspaces_ensure_request, workspaces_get_workspace_result, workspaces_list_checkpoints_result, workspaces_list_files_result, workspaces_read_autopilot_objective_result, workspaces_read_checkpoint_request, workspaces_read_checkpoint_result, workspaces_read_file_request, workspaces_read_file_result, workspaces_save_large_paste_request, workspaces_save_large_paste_result, workspaces_truncate_summaries_request, workspace_summary_host_type, workspaces_update_metadata_request, workspaces_workspace_details_host_type, workspaces_write_autopilot_objective_request, workspaces_write_autopilot_objective_result, session_auth_info_result, session_context_attribution, session_context_info, subagent_settings, task_progress, workspace_summary)
+ return RPC(abort_request, abort_result, account_all_users, account_get_all_users_result, account_get_current_auth_result, account_get_quota_request, account_get_quota_result, account_login_request, account_login_result, account_logout_request, account_logout_result, account_quota_snapshot, adaptive_thinking_support, agent_discovery_path, agent_discovery_path_list, agent_discovery_path_scope, agent_get_current_result, agent_info, agent_info_source, agent_list, agent_list_request, agent_registry_live_target_entry, agent_registry_live_target_entry_attention_kind, agent_registry_live_target_entry_kind, agent_registry_live_target_entry_last_terminal_event, agent_registry_live_target_entry_status, agent_registry_log_capture, agent_registry_log_capture_open_error_reason, agent_registry_spawn_error, agent_registry_spawn_permission_mode, agent_registry_spawn_registry_timeout, agent_registry_spawn_request, agent_registry_spawn_result, agent_registry_spawn_spawned, agent_registry_spawn_validation_error, agent_registry_spawn_validation_error_field, agent_registry_spawn_validation_error_reason, agent_reload_result, agents_discover_request, agent_select_request, agent_select_result, agent_set_prompt_request, agents_get_discovery_paths_request, api_key_auth_info, auth_identity, auth_info, auth_info_type, auth_validation_error, auth_validation_errors, built_in_model_catalog, built_in_model_catalog_entry, builtin_tool_descriptor, builtin_tool_format, builtin_tool_format_type, builtin_tool_input_schema, builtin_tool_input_schema_type, builtin_tool_safe_for_telemetry, builtin_tool_safe_telemetry_fields, cancel_user_requested_shell_command_result, canvas_action, canvas_action_invoke_request, canvas_action_invoke_result, canvas_close_request, canvas_host_context, canvas_host_context_capabilities, canvas_json_schema, canvas_list, canvas_list_open_result, canvas_open_request, canvas_provider_close_request, canvas_provider_invoke_action_request, canvas_provider_open_request, canvas_provider_open_result, canvas_provider_register_request, canvas_provider_unregister_request, canvas_session_context, capi_session_options, card_digest, card_digest_algorithm, card_digest_value, catalog_ai_skill_candidate, catalog_ai_skill_candidate_provenance, catalog_authentication_required_error, catalog_authentication_required_reason, catalog_candidate, catalog_candidate_kind, catalog_candidate_source, catalog_candidate_source_embedded, catalog_candidate_source_url, catalog_capability, catalog_capability_id, catalog_client_contract, catalog_contract_violation_error, catalog_contract_violation_reason, catalog_handle_rejected_error, catalog_handle_rejection_reason, catalog_handle_type, catalog_invalid_request_error, catalog_invalid_request_field, catalog_malformed_card_error, catalog_malformed_card_reason, catalog_mcp_server_candidate, catalog_mcp_server_candidate_provenance, catalog_mcp_server_installability, catalog_media_type, catalog_negotiated_contract, catalog_negotiation_refused_error, catalog_negotiation_refused_reason, catalog_network_failure_error, catalog_network_failure_reason, catalog_not_installable_error, catalog_not_installable_reason, catalog_policy_rejected_error, catalog_search_request, catalog_search_result, catalog_search_succeeded, catalog_unavailable_error, catalog_unavailable_reason, catalog_unavailable_transport_error, catalog_unavailable_transport_reason, catalog_unsafe_retrieval_error, catalog_unsafe_retrieval_reason, catalog_unsupported_kind_error, command_list, commands_finalize_invocation_effect_request, commands_finalize_invocation_effect_result, commands_handle_pending_command_request, commands_handle_pending_command_result, commands_invocation_effect_outcome, commands_invocation_origin, commands_invoke_request, commands_list_request, commands_respond_to_queued_command_request, commands_respond_to_queued_command_result, completions_get_trigger_characters_result, completions_request_request, completions_request_result, configure_session_extensions_params, connect_client_info, connected_remote_session_metadata, connected_remote_session_metadata_kind, connected_remote_session_metadata_repository, connect_remote_session_params, connect_request, connect_result, content_exclusion_check_paths_request, content_exclusion_check_paths_result, content_exclusion_path_check, content_filter_mode, context_heaviest_message, copilot_api_token_auth_info, copilot_user_response, copilot_user_response_endpoints, copilot_user_response_quota_snapshots, copilot_user_response_quota_snapshots_chat, copilot_user_response_quota_snapshots_completions, copilot_user_response_quota_snapshots_premium_interactions, current_model, current_tool_metadata, debug_collect_logs_collected_entry, debug_collect_logs_destination, debug_collect_logs_entry, debug_collect_logs_entry_kind, debug_collect_logs_include, debug_collect_logs_redaction, debug_collect_logs_request, debug_collect_logs_result, debug_collect_logs_result_kind, debug_collect_logs_skipped_entry, debug_collect_logs_source, discovered_canvas, discovered_extension, discovered_extension_mode, discovered_extension_plugin, discovered_extensions, discovered_extensions_disable_request, discovered_extensions_enable_request, discovered_extension_source, discovered_mcp_server, discovered_mcp_server_type, enqueue_command_params, enqueue_command_result, env_auth_info, event_log_read_request, event_log_release_interest_result, event_log_tail_result, event_log_types, events_agent_scope, events_cursor_status, events_read_direction, events_read_result, execute_command_params, execute_command_result, extension, extension_context_push_input, extension_launch_profile, extension_launch_provider_resolve_request, extension_launch_provider_resolve_result, extension_list, extensions_disable_request, extensions_enable_request, extension_source, extension_status, external_tool_result, external_tool_text_result_for_llm, external_tool_text_result_for_llm_binary_results_for_llm, external_tool_text_result_for_llm_binary_results_for_llm_type, external_tool_text_result_for_llm_content, external_tool_text_result_for_llm_content_audio, external_tool_text_result_for_llm_content_image, external_tool_text_result_for_llm_content_resource, external_tool_text_result_for_llm_content_resource_details, external_tool_text_result_for_llm_content_resource_link, external_tool_text_result_for_llm_content_resource_link_icon, external_tool_text_result_for_llm_content_resource_link_icon_theme, external_tool_text_result_for_llm_content_shell_exit, external_tool_text_result_for_llm_content_terminal, external_tool_text_result_for_llm_content_text, factory_abort_request, factory_ack_result, factory_agent_options, factory_agent_request, factory_agent_result, factory_agent_summary, factory_cancel_request, factory_current_phase, factory_declared_limits, factory_durable_operation, factory_execute_request, factory_execute_result, factory_get_run_progress_request, factory_get_run_request, factory_journal_get_request, factory_journal_get_result, factory_journal_put_request, factory_list_runs_request, factory_list_runs_result, factory_log_line, factory_log_line_kind, factory_log_request, factory_phase_observation, factory_phase_status, factory_progress_line, factory_progress_page, factory_resume_request, factory_resume_result, factory_run_consumed, factory_run_detail, factory_run_failure, factory_run_failure_kind, factory_run_limits, factory_run_request, factory_run_result, factory_run_status, factory_run_summary, factory_run_terminal, filter_mapping, fleet_start_request, fleet_start_result, folder_trust_add_params, folder_trust_check_params, folder_trust_check_result, gh_cli_auth_info, git_hub_telemetry_client_info, git_hub_telemetry_event, git_hub_telemetry_notification, handle_pending_tool_call_request, handle_pending_tool_call_result, history_abort_manual_compaction_result, history_cancel_background_compaction_result, history_clear_context_request, history_clear_context_result, history_compact_context_window, history_compact_request, history_compact_result, history_file_restore_skip_reason, history_list_rewind_points_result, history_preview_rewind_request, history_preview_rewind_result, history_rewind_change_type, history_rewind_file_preview, history_rewind_mode, history_rewind_outcome, history_rewind_point, history_rewind_request, history_rewind_result, history_rewind_unavailable_reason, history_skipped_file_restore, history_summarize_for_handoff_result, history_truncate_request, history_truncate_result, hmac_auth_info, hook_invoke_request, hook_invoke_response, hook_type, installed_plugin, installed_plugin_info, installed_plugin_source, installed_plugin_source_git_hub, installed_plugin_source_local, installed_plugin_source_url, instruction_discovery_path, instruction_discovery_path_kind, instruction_discovery_path_list, instruction_discovery_path_location, instructions_discover_request, instructions_get_discovery_paths_request, instructions_get_sources_result, instruction_source, instruction_source_location, instruction_source_type, interrupt_main_turn_request, interrupt_main_turn_result, llm_inference_headers, llm_inference_http_request_chunk_request, llm_inference_http_request_chunk_result, llm_inference_http_request_start_request, llm_inference_http_request_start_result, llm_inference_http_request_start_transport, llm_inference_http_response_chunk_error, llm_inference_http_response_chunk_request, llm_inference_http_response_chunk_result, llm_inference_http_response_start_request, llm_inference_http_response_start_result, llm_inference_set_provider_result, local_session_metadata_value, log_request, log_result, lsp_initialize_request, managed_settings_read_result, marketplace_add_result, marketplace_browse_result, marketplace_info, marketplace_list_result, marketplace_plugin_info, marketplace_refresh_entry, marketplace_refresh_result, marketplace_remove_result, mcp_allowed_server, mcp_apps_call_tool_request, mcp_apps_diagnose_capability, mcp_apps_diagnose_request, mcp_apps_diagnose_result, mcp_apps_diagnose_server, mcp_apps_host_context, mcp_apps_host_context_details, mcp_apps_host_context_details_available_display_mode, mcp_apps_host_context_details_display_mode, mcp_apps_host_context_details_platform, mcp_apps_host_context_details_theme, mcp_apps_list_tools_request, mcp_apps_list_tools_result, mcp_apps_read_resource_request, mcp_apps_read_resource_result, mcp_apps_resource_content, mcp_apps_set_host_context_details, mcp_apps_set_host_context_details_available_display_mode, mcp_apps_set_host_context_details_display_mode, mcp_apps_set_host_context_details_platform, mcp_apps_set_host_context_details_theme, mcp_apps_set_host_context_request, mcp_cancel_sampling_execution_params, mcp_cancel_sampling_execution_result, mcp_config_add_request, mcp_config_disable_request, mcp_config_enable_request, mcp_config_list, mcp_config_remove_request, mcp_config_update_request, mcp_configure_git_hub_request, mcp_configure_git_hub_result, mcp_disable_request, mcp_discover_request, mcp_discover_result, mcp_elicitation_form_mode, mcp_enable_request, mcp_execute_sampling_params, mcp_execute_sampling_request, mcp_execute_sampling_result, mcp_failed_server, mcp_filtered_server, mcp_headers_handle_pending_headers_refresh_request, mcp_headers_handle_pending_headers_refresh_request_request, mcp_headers_handle_pending_headers_refresh_request_result, mcp_host_state, mcp_install_plan, mcp_is_server_running_request, mcp_is_server_running_result, mcp_list_tools_request, mcp_list_tools_result, mcp_oauth_authentication_state_changed_request, mcp_oauth_handle_pending_request, mcp_oauth_handle_pending_result, mcp_oauth_login_grant_type, mcp_oauth_login_request, mcp_oauth_login_result, mcp_oauth_pending_request_response, mcp_oauth_probe_needs_auth_reason, mcp_oauth_probe_request, mcp_oauth_probe_result, mcp_oauth_respond_request, mcp_oauth_respond_result, mcp_plan_configuration_change, mcp_plan_configuration_operation, mcp_plan_enum_value_type, mcp_plan_install_planned, mcp_plan_install_request, mcp_plan_install_result, mcp_plan_install_source, mcp_plan_install_source_candidate, mcp_plan_install_source_candidate_kind, mcp_plan_install_source_card, mcp_plan_install_source_card_kind, mcp_plan_package_install_method, mcp_plan_package_transport, mcp_plan_policy_decision, mcp_plan_policy_result, mcp_plan_policy_source, mcp_plan_provenance, mcp_plan_remote_install_method, mcp_plan_remote_transport, mcp_plan_required_value, mcp_plan_required_value_enum, mcp_plan_required_value_enum_kind, mcp_plan_required_value_scalar, mcp_plan_required_value_scalar_kind, mcp_plan_resource_identity, mcp_plan_scalar_value_type, mcp_plan_scope, mcp_plan_secret_placeholder, mcp_plan_secret_reference, mcp_plan_target, mcp_plan_transport_choice, mcp_plan_transport_choice_package, mcp_plan_transport_choice_remote, mcp_plan_value_category, mcp_register_external_client_request, mcp_reload_config, mcp_reload_with_config_request, mcp_remove_git_hub_result, mcp_resource, mcp_resource_annotations, mcp_resource_content, mcp_resource_icon, mcp_resources_list_request, mcp_resources_list_result, mcp_resources_list_templates_request, mcp_resources_list_templates_result, mcp_resources_read_request, mcp_resources_read_result, mcp_resource_template, mcp_restart_server_request, mcp_safe_for_telemetry, mcp_safe_for_telemetry_fields, mcp_sampling_execution_action, mcp_sampling_execution_result, mcp_serializable_server_config, mcp_server, mcp_server_auth_config, mcp_server_auth_config_redirect_port, mcp_server_card_embedded, mcp_server_card_embedded_kind, mcp_server_card_media_type, mcp_server_card_reference, mcp_server_card_url, mcp_server_card_url_kind, mcp_server_config, mcp_server_config_defer_tools, mcp_server_config_http, mcp_server_config_http_oauth_grant_type, mcp_server_config_http_type, mcp_server_config_memory, mcp_server_config_memory_type, mcp_server_config_stdio, mcp_server_config_stdio_type, mcp_server_failure_info, mcp_server_list, mcp_server_needs_auth_info, mcp_set_env_value_mode_details, mcp_set_env_value_mode_params, mcp_set_env_value_mode_result, mcp_start_server_request, mcp_start_servers_result, mcp_stop_server_request, mcp_task_metadata, mcp_tools, mcp_tool_ui, mcp_tool_ui_visibility, mcp_unregister_external_client_request, memory_configuration, metadata_context_attribution_result, metadata_context_heaviest_messages_request, metadata_context_heaviest_messages_result, metadata_context_info_request, metadata_context_info_result, metadata_is_processing_result, metadata_recompute_context_tokens_request, metadata_recompute_context_tokens_result, metadata_record_context_change_request, metadata_record_context_change_result, metadata_set_working_directory_request, metadata_set_working_directory_result, metadata_snapshot_current_mode, metadata_snapshot_remote_metadata, metadata_snapshot_remote_metadata_repository, metadata_snapshot_remote_metadata_task_type, model, model_apply_startup_overlay_request, model_billing, model_billing_promo, model_billing_token_prices, model_billing_token_prices_long_context, model_capabilities, model_capabilities_limits, model_capabilities_limits_vision, model_capabilities_override, model_capabilities_override_limits, model_capabilities_override_limits_vision, model_capabilities_override_supports, model_capabilities_supports, model_list, model_list_request, model_message, model_picker_category, model_picker_persistence_request, model_picker_price_category, model_picker_settings_context, model_policy, model_policy_state, model_set_reasoning_effort_request, model_set_reasoning_effort_result, models_list_request, model_switch_confirmation, model_switch_to_request, model_switch_to_result, model_warning_text, mode_set_request, mode_set_result, move_mcp_loading_to_background_result, named_provider_config, name_get_result, name_set_auto_request, name_set_auto_result, name_set_request, open_canvas_instance, options_update_additional_content_exclusion_policy, options_update_additional_content_exclusion_policy_rule, options_update_additional_content_exclusion_policy_rule_source, options_update_additional_content_exclusion_policy_scope, options_update_context_tier, options_update_env_value_mode, options_update_reasoning_summary, options_update_tool_filter_precedence, pending_permission_request, pending_permission_request_list, permission_decision, permission_decision_approved, permission_decision_approved_for_location, permission_decision_approved_for_session, permission_decision_approve_for_location, permission_decision_approve_for_location_approval, permission_decision_approve_for_location_approval_commands, permission_decision_approve_for_location_approval_custom_tool, permission_decision_approve_for_location_approval_extension_env_access, permission_decision_approve_for_location_approval_extension_management, permission_decision_approve_for_location_approval_extension_permission_access, permission_decision_approve_for_location_approval_factory, permission_decision_approve_for_location_approval_mcp, permission_decision_approve_for_location_approval_mcp_sampling, permission_decision_approve_for_location_approval_memory, permission_decision_approve_for_location_approval_read, permission_decision_approve_for_location_approval_write, permission_decision_approve_for_session, permission_decision_approve_for_session_approval, permission_decision_approve_for_session_approval_commands, permission_decision_approve_for_session_approval_custom_tool, permission_decision_approve_for_session_approval_extension_env_access, permission_decision_approve_for_session_approval_extension_management, permission_decision_approve_for_session_approval_extension_permission_access, permission_decision_approve_for_session_approval_factory, permission_decision_approve_for_session_approval_mcp, permission_decision_approve_for_session_approval_mcp_sampling, permission_decision_approve_for_session_approval_memory, permission_decision_approve_for_session_approval_read, permission_decision_approve_for_session_approval_write, permission_decision_approve_once, permission_decision_approve_permanently, permission_decision_cancelled, permission_decision_context, permission_decision_denied_by_content_exclusion_policy, permission_decision_denied_by_permission_request_hook, permission_decision_denied_by_rules, permission_decision_denied_interactively_by_user, permission_decision_denied_no_approval_rule_and_could_not_request_from_user, permission_decision_outcome, permission_decision_reject, permission_decision_request, permission_decision_source, permission_decision_surface, permission_decision_user_not_available, permission_location_add_tool_approval_params, permission_location_apply_params, permission_location_apply_result, permission_location_resolve_params, permission_location_resolve_result, permission_location_type, permission_mode_source, permission_paths_add_params, permission_paths_allowed_check_params, permission_paths_allowed_check_result, permission_paths_config, permission_paths_list, permission_paths_update_primary_params, permission_paths_workspace_check_params, permission_paths_workspace_check_result, permission_prompt_shown_notification, permission_request_result, permission_rules_set, permissions_configure_additional_content_exclusion_policy, permissions_configure_additional_content_exclusion_policy_rule, permissions_configure_additional_content_exclusion_policy_rule_source, permissions_configure_additional_content_exclusion_policy_scope, permissions_configure_params, permissions_configure_result, permissions_folder_trust_add_trusted_result, permissions_get_mode_request, permissions_get_mode_result, permissions_locations_add_tool_approval_details, permissions_locations_add_tool_approval_details_commands, permissions_locations_add_tool_approval_details_custom_tool, permissions_locations_add_tool_approval_details_extension_env_access, permissions_locations_add_tool_approval_details_extension_management, permissions_locations_add_tool_approval_details_extension_permission_access, permissions_locations_add_tool_approval_details_factory, permissions_locations_add_tool_approval_details_mcp, permissions_locations_add_tool_approval_details_mcp_sampling, permissions_locations_add_tool_approval_details_memory, permissions_locations_add_tool_approval_details_read, permissions_locations_add_tool_approval_details_write, permissions_locations_add_tool_approval_result, permissions_modify_rules_params, permissions_modify_rules_result, permissions_modify_rules_scope, permissions_notify_prompt_shown_result, permissions_paths_add_result, permissions_paths_list_request, permissions_paths_update_primary_result, permissions_pending_requests_request, permissions_reset_session_approvals_request, permissions_reset_session_approvals_result, permissions_set_approve_all_request, permissions_set_approve_all_result, permissions_set_approve_all_source, permissions_set_mode_request, permissions_set_mode_result, permissions_set_required_request, permissions_set_required_result, permissions_urls_set_unrestricted_mode_result, permission_urls_config, permission_urls_set_unrestricted_mode_params, ping_request, ping_result, plan_read_result, plan_read_sql_todos_result, plan_read_sql_todos_with_dependencies_result, plan_sql_todo_dependency, plan_sql_todos_row, plan_update_request, plugin, plugin_install_result, plugin_list, plugin_list_result, plugins_builtin_set_request, plugins_disable_request, plugins_enable_request, plugins_install_request, plugins_marketplaces_add_request, plugins_marketplaces_browse_request, plugins_marketplaces_refresh_request, plugins_marketplaces_remove_request, plugins_reload_request, plugins_uninstall_request, plugins_update_request, plugin_update_all_entry, plugin_update_all_result, plugin_update_result, protocol_external_tool_defer, protocol_external_tool_definition, provider_add_request, provider_add_result, provider_config, provider_config_azure, provider_config_transport, provider_config_type, provider_config_wire_api, provider_endpoint, provider_endpoint_transport, provider_endpoint_type, provider_endpoint_wire_api, provider_get_endpoint_request, provider_model_config, provider_session_token, provider_token_acquire_request, provider_token_acquire_result, push_attachment, push_attachment_blob, push_attachment_directory, push_attachment_file, push_attachment_file_line_range, push_attachment_git_hub_actions_job, push_attachment_git_hub_commit, push_attachment_git_hub_file, push_attachment_git_hub_file_diff, push_attachment_git_hub_file_diff_side, push_attachment_git_hub_reference, push_attachment_git_hub_reference_type, push_attachment_git_hub_release, push_attachment_git_hub_repository, push_attachment_git_hub_snippet, push_attachment_git_hub_tree_comparison, push_attachment_git_hub_tree_comparison_side, push_attachment_git_hub_url, push_attachment_selection, push_attachment_selection_details, push_attachment_selection_details_end, push_attachment_selection_details_start, push_git_hub_repo_ref, queue_begin_deferred_idle_drain_request, queue_begin_deferred_idle_drain_result, queue_consume_system_notifications_request, queued_command_handled, queued_command_not_handled, queued_command_result, queue_defer_session_idle_request, queue_duplicate_at_request, queue_duplicate_at_result, queue_enqueue_resume_pending_result, queue_finish_deferred_idle_drain_request, queue_finish_deferred_idle_drain_result, queue_has_pending_result, queue_insert_at_request, queue_insert_at_result, queue_insert_message, queue_move_item_request, queue_move_item_result, queue_pending_items, queue_pending_items_kind, queue_pending_items_result, queue_remove_at_request, queue_remove_at_result, queue_remove_most_recent_result, queue_send_now_request, queue_send_now_result, queue_set_drain_paused_request, queue_snapshot_result, queue_update_text_request, queue_update_text_result, register_event_interest_params, register_event_interest_result, register_extension_tools_params, register_extension_tools_result, release_event_interest_params, remote_control_config, remote_control_config_existing_mc_session, remote_control_status, remote_control_status_active, remote_control_status_connecting, remote_control_status_error, remote_control_status_off, remote_control_status_result, remote_control_stop_result, remote_control_transfer_result, remote_enable_request, remote_enable_result, remote_notify_steerable_changed_request, remote_notify_steerable_changed_result, remote_session_connection_result, remote_session_host_status, remote_session_metadata_repository, remote_session_metadata_task_type, remote_session_metadata_value, remote_session_mode, remote_session_repository, run_options, sandbox_config, sandbox_config_auth, sandbox_config_user_policy, sandbox_config_user_policy_experimental, sandbox_config_user_policy_experimental_seatbelt, sandbox_config_user_policy_filesystem, sandbox_config_user_policy_network, sandbox_config_user_policy_network_proxy, sandbox_config_user_policy_seatbelt, schedule_add_at_request, schedule_add_cron_request, schedule_add_request, schedule_add_result, schedule_add_self_paced_request, schedule_entry, schedule_has_self_paced_result, schedule_list, schedule_rearm_self_paced_request, schedule_stop_request, schedule_stop_result, secrets_add_filter_values_request, secrets_add_filter_values_result, send_agent_mode, send_attachments_to_message_params, send_message_item, send_messages_request, send_messages_result, send_mode, send_request, send_result, send_system_notification_request, server_agent_list, server_instruction_source_list, server_skill, server_skill_list, session_activity, session_agent_list_request, session_auth_login_request, session_auth_logout_user_request, session_auth_status, session_auth_switch_request, session_bulk_delete_result, session_cancel_all_background_agents_result, session_capability, session_commands_list_request, session_completion_item, session_context, session_context_host_type, session_enrich_metadata_result, session_fs_append_file_request, session_fs_error, session_fs_error_code, session_fs_exists_request, session_fs_exists_result, session_fs_mkdir_request, session_fs_readdir_request, session_fs_readdir_result, session_fs_readdir_with_types_entry, session_fs_readdir_with_types_entry_type, session_fs_readdir_with_types_request, session_fs_readdir_with_types_result, session_fs_read_file_request, session_fs_read_file_result, session_fs_rename_request, session_fs_rm_request, session_fs_set_provider_capabilities, session_fs_set_provider_conventions, session_fs_set_provider_request, session_fs_set_provider_result, session_fs_sqlite_exists_request, session_fs_sqlite_exists_result, session_fs_sqlite_query_request, session_fs_sqlite_query_result, session_fs_sqlite_query_type, session_fs_sqlite_transaction_error, session_fs_sqlite_transaction_error_class, session_fs_sqlite_transaction_request, session_fs_sqlite_transaction_result, session_fs_sqlite_transaction_statement, session_fs_stat_request, session_fs_stat_result, session_fs_write_file_request, session_git_hub_auth_get_all_auth_available_result, session_git_hub_auth_logout_result, session_git_hub_auth_logout_user_result, session_history_compact_request, session_installed_plugin, session_installed_plugin_source, session_installed_plugin_source_git_hub, session_installed_plugin_source_local, session_installed_plugin_source_url, session_limit_prediction_baseline_data, session_limit_prediction_client_type, session_limit_prediction_details, session_limit_prediction_predict_request, session_limit_prediction_request, session_limit_prediction_result, session_limit_prediction_source, session_limit_prediction_tier, session_limit_prediction_tier_option, session_limit_prediction_unavailable_reason, session_list, session_list_entry, session_list_filter, session_load_deferred_repo_hooks_result, session_log_level, session_managed_permissions, session_managed_settings, session_mcp_apps_call_tool_result, session_metadata_snapshot, session_mode, session_model_list, session_model_list_request, session_model_price_category, session_open_options, session_open_options_additional_content_exclusion_policy, session_open_options_additional_content_exclusion_policy_rule, session_open_options_additional_content_exclusion_policy_rule_source, session_open_options_additional_content_exclusion_policy_scope, session_open_options_env_value_mode, session_open_options_reasoning_summary, session_open_params, session_open_result, session_plugins_reload_request, session_provider_get_endpoint_request, session_prune_result, sessions_bulk_delete_request, sessions_check_in_use_request, sessions_check_in_use_result, sessions_close_request, sessions_close_result, sessions_delete_request, sessions_enrich_metadata_request, session_set_credentials_params, session_set_credentials_result, session_settings_built_in_tool_availability_snapshot, session_settings_evaluate_predicate_request, session_settings_evaluate_predicate_result, session_settings_job_snapshot, session_settings_model_snapshot, session_settings_online_evaluation_snapshot, session_settings_predicate_name, session_settings_repo_snapshot, session_settings_snapshot, session_settings_validation_snapshot, sessions_find_by_prefix_request, sessions_find_by_prefix_result, sessions_find_by_task_id_request, sessions_find_by_task_id_result, sessions_fork_request, sessions_fork_result, sessions_get_board_entry_count_request, sessions_get_board_entry_count_result, sessions_get_event_file_path_request, sessions_get_event_file_path_result, sessions_get_last_for_context_request, sessions_get_last_for_context_result, sessions_get_metadata_request, sessions_get_metadata_result, sessions_get_persisted_remote_steerable_request, sessions_get_persisted_remote_steerable_result, session_sizes, sessions_list_non_empty_session_ids_request, sessions_list_non_empty_session_ids_result, sessions_list_request, sessions_load_deferred_repo_hooks_request, sessions_open_attach, sessions_open_cloud, sessions_open_create, sessions_open_handoff, sessions_open_handoff_task_type, sessions_open_progress, sessions_open_progress_status, sessions_open_progress_step, sessions_open_remote, sessions_open_resume, sessions_open_resume_last, sessions_open_status, session_source, sessions_prune_old_request, sessions_register_extension_tools_on_session_options, sessions_release_lock_request, sessions_release_lock_result, sessions_reload_plugin_hooks_request, sessions_reload_plugin_hooks_result, sessions_save_request, sessions_save_result, sessions_set_additional_plugins_request, sessions_set_additional_plugins_result, sessions_set_remote_control_steering_request, sessions_start_remote_control_request, sessions_stop_remote_control_request, sessions_transfer_remote_control_request, session_telemetry_engagement, session_update_options_params, session_update_options_result, session_visibility_status, session_working_directory_context, session_working_directory_context_host_type, shell_cancel_user_requested_request, shell_credentials, shell_exec_request, shell_exec_result, shell_execute_user_requested_request, shell_init_profile, shell_init_script, shell_init_script_shell, shell_kill_request, shell_kill_result, shell_kill_signal, shell_options, shutdown_request, skill, skill_discovery_path, skill_discovery_path_list, skill_discovery_scope, skill_list, skills_config_set_disabled_skills_request, skills_config_set_skill_disabled_request, skills_disable_request, skills_discover_request, skills_enable_request, skills_get_discovery_paths_request, skills_get_invoked_result, skills_invoked_skill, skills_load_diagnostics, slash_command_add_timeline_entry_result, slash_command_agent_prompt_result, slash_command_completed_result, slash_command_info, slash_command_input, slash_command_input_choice, slash_command_input_completion, slash_command_invocation_result, slash_command_kind, slash_command_model_picker_dialog, slash_command_select_subcommand_option, slash_command_select_subcommand_result, slash_command_set_model_result, slash_command_set_plan_model_result, slash_command_show_dialog_result, slash_command_text_result, slash_command_timeline_entry, subagent_settings_entry, subagent_settings_entry_context_tier, task_agent_info, task_agent_progress, task_complete_data, task_completion_decision, task_execution_mode, task_info, task_list, task_progress_line, tasks_cancel_request, tasks_cancel_result, tasks_get_current_promotable_result, tasks_get_progress_request, tasks_get_progress_result, task_shell_info, task_shell_info_attachment_mode, task_shell_progress, tasks_promote_current_to_background_result, tasks_promote_to_background_request, tasks_promote_to_background_result, tasks_refresh_result, tasks_remove_request, tasks_remove_result, tasks_send_message_request, tasks_send_message_result, tasks_start_agent_request, tasks_start_agent_result, task_status, tasks_wait_for_pending_result, telemetry_set_feature_overrides_request, token_auth_info, tool, tool_list, tool_result, tool_result_expanded, tool_result_new_message, tool_result_type, tools_execute_request, tools_get_builtin_descriptors_request, tools_get_builtin_descriptors_result, tools_get_current_metadata_result, tools_initialize_and_validate_result, tools_list_request, tools_set_request, tools_set_result, tools_shell_descriptor_config, tools_task_complete_event_data_request, tools_update_subagent_settings_result, ui_auto_mode_switch_response, ui_elicitation_array_any_of_field, ui_elicitation_array_any_of_field_items, ui_elicitation_array_any_of_field_items_any_of, ui_elicitation_array_enum_field, ui_elicitation_array_enum_field_items, ui_elicitation_field_value, ui_elicitation_request, ui_elicitation_response, ui_elicitation_response_action, ui_elicitation_response_content, ui_elicitation_result, ui_elicitation_schema, ui_elicitation_schema_property, ui_elicitation_schema_property_boolean, ui_elicitation_schema_property_number, ui_elicitation_schema_property_number_type, ui_elicitation_schema_property_string, ui_elicitation_schema_property_string_format, ui_elicitation_string_enum_field, ui_elicitation_string_one_of_field, ui_elicitation_string_one_of_field_one_of, ui_ephemeral_query_request, ui_ephemeral_query_result, ui_exit_plan_mode_action, ui_exit_plan_mode_response, ui_handle_pending_auto_mode_switch_request, ui_handle_pending_elicitation_request, ui_handle_pending_exit_plan_mode_request, ui_handle_pending_result, ui_handle_pending_sampling_request, ui_handle_pending_sampling_response, ui_handle_pending_session_limits_exhausted_request, ui_handle_pending_user_input_request, ui_register_direct_auto_mode_switch_handler_result, ui_session_limits_exhausted_response, ui_session_limits_exhausted_response_action, ui_unregister_direct_auto_mode_switch_handler_request, ui_unregister_direct_auto_mode_switch_handler_result, ui_user_input_response, update_subagent_settings_request, usage_get_metrics_result, usage_metrics_agent_metric, usage_metrics_code_changes, usage_metrics_model_metric, usage_metrics_model_metric_requests, usage_metrics_model_metric_token_detail, usage_metrics_model_metric_usage, usage_metrics_token_detail, user_auth_info, user_requested_shell_command_result, user_setting_metadata, user_settings_get_result, user_settings_set_request, user_settings_set_result, visibility_get_result, visibility_set_request, visibility_set_result, workspace_diff_file_change, workspace_diff_file_change_type, workspace_diff_mode, workspace_diff_result, workspaces_add_summary_request, workspaces_add_summary_result, workspaces_autopilot_objective_exists_result, workspaces_checkpoints, workspaces_create_file_request, workspaces_delete_autopilot_objective_result, workspaces_diff_request, workspaces_ensure_request, workspaces_get_workspace_result, workspaces_list_checkpoints_result, workspaces_list_files_result, workspaces_read_autopilot_objective_result, workspaces_read_checkpoint_request, workspaces_read_checkpoint_result, workspaces_read_file_request, workspaces_read_file_result, workspaces_save_large_paste_request, workspaces_save_large_paste_result, workspaces_truncate_summaries_request, workspace_summary_host_type, workspaces_update_metadata_request, workspaces_workspace_details_host_type, workspaces_write_autopilot_objective_request, workspaces_write_autopilot_objective_result, session_auth_info_result, session_context_attribution, session_context_info, subagent_settings, task_progress, workspace_summary)
def to_dict(self) -> dict:
result: dict = {}
@@ -36980,6 +37158,7 @@ def to_dict(self) -> dict:
result["CompletionsRequestRequest"] = to_class(CompletionsRequestRequest, self.completions_request_request)
result["CompletionsRequestResult"] = to_class(CompletionsRequestResult, self.completions_request_result)
result["ConfigureSessionExtensionsParams"] = to_class(_ConfigureSessionExtensionsParams, self.configure_session_extensions_params)
+ result["ConnectClientInfo"] = to_class(_ConnectClientInfo, self.connect_client_info)
result["ConnectedRemoteSessionMetadata"] = to_class(ConnectedRemoteSessionMetadata, self.connected_remote_session_metadata)
result["ConnectedRemoteSessionMetadataKind"] = to_enum(ConnectedRemoteSessionMetadataKind, self.connected_remote_session_metadata_kind)
result["ConnectedRemoteSessionMetadataRepository"] = to_class(ConnectedRemoteSessionMetadataRepository, self.connected_remote_session_metadata_repository)
@@ -37011,7 +37190,6 @@ def to_dict(self) -> dict:
result["DebugCollectLogsResultKind"] = to_enum(DebugCollectLogsResultKind, self.debug_collect_logs_result_kind)
result["DebugCollectLogsSkippedEntry"] = to_class(DebugCollectLogsSkippedEntry, self.debug_collect_logs_skipped_entry)
result["DebugCollectLogsSource"] = to_enum(DebugCollectLogsSource, self.debug_collect_logs_source)
- result["DisableBypassPermissionsMode"] = to_enum(DisableBypassPermissionsMode, self.disable_bypass_permissions_mode)
result["DiscoveredCanvas"] = to_class(DiscoveredCanvas, self.discovered_canvas)
result["DiscoveredExtension"] = to_class(DiscoveredExtension, self.discovered_extension)
result["DiscoveredExtensionMode"] = to_enum(DiscoveredExtensionMode, self.discovered_extension_mode)
@@ -37364,6 +37542,7 @@ def to_dict(self) -> dict:
result["ModelCapabilitiesSupports"] = to_class(ModelCapabilitiesSupports, self.model_capabilities_supports)
result["ModelList"] = to_class(ModelList, self.model_list)
result["ModelListRequest"] = self.model_list_request
+ result["ModelMessage"] = to_class(ModelMessage, self.model_message)
result["ModelPickerCategory"] = to_enum(ModelPickerCategory, self.model_picker_category)
result["ModelPickerPersistenceRequest"] = to_class(ModelPickerPersistenceRequest, self.model_picker_persistence_request)
result["ModelPickerPriceCategory"] = to_enum(ModelPickerPriceCategory, self.model_picker_price_category)
@@ -37376,6 +37555,7 @@ def to_dict(self) -> dict:
result["ModelSwitchConfirmation"] = to_class(ModelSwitchConfirmation, self.model_switch_confirmation)
result["ModelSwitchToRequest"] = to_class(ModelSwitchToRequest, self.model_switch_to_request)
result["ModelSwitchToResult"] = to_class(ModelSwitchToResult, self.model_switch_to_result)
+ result["ModelWarningText"] = to_class(ModelWarningText, self.model_warning_text)
result["ModeSetRequest"] = to_class(ModeSetRequest, self.mode_set_request)
result["ModeSetResult"] = to_class(ModeSetResult, self.mode_set_result)
result["MoveMcpLoadingToBackgroundResult"] = to_class(MoveMCPLoadingToBackgroundResult, self.move_mcp_loading_to_background_result)
@@ -40063,7 +40243,7 @@ async def list(self, *, timeout: float | None = None) -> PermissionPathsList:
return PermissionPathsList.from_dict(await self._client.request("session.permissions.paths.list", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
async def add(self, params: PermissionPathsAddParams, *, timeout: float | None = None) -> PermissionsPathsAddResult:
- "Adds a directory to the session's allow-list.\n\nArgs:\n params: Directory path to add to the session's allowed directories.\n\nReturns:\n Indicates whether the operation succeeded."
+ "Adds a directory to the session's allow-list and activates conventional skill and agent definitions under it.\n\nArgs:\n params: Directory path to add to the session's allowed directories.\n\nReturns:\n Indicates whether the operation succeeded."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return PermissionsPathsAddResult.from_dict(await self._client.request("session.permissions.paths.add", params_dict, **_timeout_kwargs(timeout)))
@@ -41386,7 +41566,6 @@ async def handle_git_hub_telemetry_event(params: dict) -> None:
"DebugCollectLogsResultKind",
"DebugCollectLogsSkippedEntry",
"DebugCollectLogsSource",
- "DisableBypassPermissionsMode",
"DiscoveredCanvas",
"DiscoveredExtension",
"DiscoveredExtensionMode",
@@ -41804,6 +41983,7 @@ async def handle_git_hub_telemetry_event(params: dict) -> None:
"ModelCapabilitiesSupports",
"ModelList",
"ModelListRequest",
+ "ModelMessage",
"ModelPickerCategory",
"ModelPickerPersistenceRequest",
"ModelPickerPriceCategory",
@@ -41815,6 +41995,7 @@ async def handle_git_hub_telemetry_event(params: dict) -> None:
"ModelSwitchConfirmation",
"ModelSwitchToRequest",
"ModelSwitchToResult",
+ "ModelWarningText",
"ModelsListRequest",
"MoveMCPLoadingToBackgroundResult",
"NameApi",
diff --git a/python/copilot/generated/session_events.py b/python/copilot/generated/session_events.py
index 68117bdc01..1cfc1ad597 100644
--- a/python/copilot/generated/session_events.py
+++ b/python/copilot/generated/session_events.py
@@ -173,6 +173,7 @@ class SessionEventType(Enum):
ASSISTANT_USAGE = "assistant.usage"
PROMPT_CACHE_BREAK = "prompt_cache_break"
MODEL_CALL_FAILURE = "model.call_failure"
+ MODEL_CALL_FINISHED = "model.call_finished"
MODEL_CALL_START = "model.call_start"
ABORT = "abort"
TOOL_USER_REQUESTED = "tool.user_requested"
@@ -2080,6 +2081,7 @@ class AssistantUsageData:
# Internal: this field is an internal SDK API and is not part of the public surface.
_num_tool_calls: int | None = None
output_tokens: int | None = None
+ output_ttft: timedelta | None = None
# Deprecated: this field is deprecated.
parent_tool_call_id: str | None = None
provider_call_id: str | None = None
@@ -2127,6 +2129,7 @@ def from_dict(obj: Any) -> "AssistantUsageData":
max_prompt_tokens = from_union([from_none, from_int], obj.get("maxPromptTokens"))
_num_tool_calls = from_union([from_none, from_int], obj.get("numToolCalls"))
output_tokens = from_union([from_none, from_int], obj.get("outputTokens"))
+ output_ttft = from_union([from_none, from_timedelta], obj.get("outputTtftMs"))
parent_tool_call_id = from_union([from_none, from_str], obj.get("parentToolCallId"))
provider_call_id = from_union([from_none, from_str], obj.get("providerCallId"))
_quota_snapshots = from_union([from_none, lambda x: from_dict(_AssistantUsageQuotaSnapshot.from_dict, x)], obj.get("quotaSnapshots"))
@@ -2167,6 +2170,7 @@ def from_dict(obj: Any) -> "AssistantUsageData":
max_prompt_tokens=max_prompt_tokens,
_num_tool_calls=_num_tool_calls,
output_tokens=output_tokens,
+ output_ttft=output_ttft,
parent_tool_call_id=parent_tool_call_id,
provider_call_id=provider_call_id,
_quota_snapshots=_quota_snapshots,
@@ -2235,6 +2239,8 @@ def to_dict(self) -> dict:
result["numToolCalls"] = from_union([from_none, to_int], self._num_tool_calls)
if self.output_tokens is not None:
result["outputTokens"] = from_union([from_none, to_int], self.output_tokens)
+ if self.output_ttft is not None:
+ result["outputTtftMs"] = from_union([from_none, to_timedelta], self.output_ttft)
if self.parent_tool_call_id is not None:
result["parentToolCallId"] = from_union([from_none, from_str], self.parent_tool_call_id)
if self.provider_call_id is not None:
@@ -4613,6 +4619,47 @@ def to_dict(self) -> dict:
return result
+@dataclass
+class ModelCallFinishedData:
+ "Final lifecycle outcome for one logical model dispatch. A logical dispatch may include internal reconnect or fallback work, so event count is not provider HTTP-request count."
+ dispatch_duration: timedelta
+ edit_classifier_version: int
+ outcome: ModelCallFinishedOutcome
+ turn_id: str
+ contains_built_in_file_edit_request: bool | None = None
+ interaction_id: str | None = None
+
+ @staticmethod
+ def from_dict(obj: Any) -> "ModelCallFinishedData":
+ assert isinstance(obj, dict)
+ dispatch_duration = from_timedelta(obj.get("dispatchDurationMs"))
+ edit_classifier_version = from_int(obj.get("editClassifierVersion"))
+ outcome = parse_enum(ModelCallFinishedOutcome, obj.get("outcome"))
+ turn_id = from_str(obj.get("turnId"))
+ contains_built_in_file_edit_request = from_union([from_none, from_bool], obj.get("containsBuiltInFileEditRequest"))
+ interaction_id = from_union([from_none, from_str], obj.get("interactionId"))
+ return ModelCallFinishedData(
+ dispatch_duration=dispatch_duration,
+ edit_classifier_version=edit_classifier_version,
+ outcome=outcome,
+ turn_id=turn_id,
+ contains_built_in_file_edit_request=contains_built_in_file_edit_request,
+ interaction_id=interaction_id,
+ )
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["dispatchDurationMs"] = to_timedelta(self.dispatch_duration)
+ result["editClassifierVersion"] = to_int(self.edit_classifier_version)
+ result["outcome"] = to_enum(ModelCallFinishedOutcome, self.outcome)
+ result["turnId"] = from_str(self.turn_id)
+ if self.contains_built_in_file_edit_request is not None:
+ result["containsBuiltInFileEditRequest"] = from_union([from_none, from_bool], self.contains_built_in_file_edit_request)
+ if self.interaction_id is not None:
+ result["interactionId"] = from_union([from_none, from_str], self.interaction_id)
+ return result
+
+
@dataclass
class ModelCallStartData:
"Model API dispatch metadata for internal telemetry"
@@ -5253,6 +5300,7 @@ class PermissionPromptRequestMcp:
args: Any = None
# Experimental: this field is part of an experimental API and may change or be removed.
assisted_approval: PermissionAssistedApproval | None = None
+ can_offer_server_wide_approval: bool | None = None
# Experimental: this field is part of an experimental API and may change or be removed.
permission_recommendation: PermissionRecommendation | None = None
tool_call_id: str | None = None
@@ -5265,6 +5313,7 @@ def from_dict(obj: Any) -> "PermissionPromptRequestMcp":
tool_title = from_str(obj.get("toolTitle"))
args = obj.get("args")
assisted_approval = from_union([from_none, PermissionAssistedApproval.from_dict], obj.get("assistedApproval"))
+ can_offer_server_wide_approval = from_union([from_none, from_bool], obj.get("canOfferServerWideApproval"))
permission_recommendation = from_union([from_none, lambda x: parse_enum(PermissionRecommendation, x)], obj.get("permissionRecommendation"))
tool_call_id = from_union([from_none, from_str], obj.get("toolCallId"))
return PermissionPromptRequestMcp(
@@ -5273,6 +5322,7 @@ def from_dict(obj: Any) -> "PermissionPromptRequestMcp":
tool_title=tool_title,
args=args,
assisted_approval=assisted_approval,
+ can_offer_server_wide_approval=can_offer_server_wide_approval,
permission_recommendation=permission_recommendation,
tool_call_id=tool_call_id,
)
@@ -5287,6 +5337,8 @@ def to_dict(self) -> dict:
result["args"] = self.args
if self.assisted_approval is not None:
result["assistedApproval"] = from_union([from_none, lambda x: to_class(PermissionAssistedApproval, x)], self.assisted_approval)
+ if self.can_offer_server_wide_approval is not None:
+ result["canOfferServerWideApproval"] = from_union([from_none, from_bool], self.can_offer_server_wide_approval)
if self.permission_recommendation is not None:
result["permissionRecommendation"] = from_union([from_none, lambda x: to_enum(PermissionRecommendation, x)], self.permission_recommendation)
if self.tool_call_id is not None:
@@ -10847,6 +10899,8 @@ class ManagedSettingsEnforcedEscalation(Enum):
UNRESTRICTED_PATHS = "unrestricted_paths"
# Unrestricted URL fetch access.
UNRESTRICTED_URLS = "unrestricted_urls"
+ # A server-wide MCP "Always Allow" (or `--allow-tool `) blanket that would auto-approve every tool from an MCP server. Capped to per-tool approval; each tool still prompts.
+ SERVER_WIDE_MCP_APPROVAL = "server_wide_mcp_approval"
class ManagedSettingsResolvedSource(Enum):
@@ -10979,6 +11033,18 @@ class ModelCallFailureTransport(Enum):
WEBSOCKET = "websocket"
+class ModelCallFinishedOutcome(Enum):
+ "Final outcome of one logical model dispatch after response acceptance processing"
+ # The provider response was accepted for continued agent processing.
+ SUCCESS = "success"
+ # The dispatch ended with a provider or transport error.
+ ERROR = "error"
+ # The dispatch was cancelled before an accepted response was produced.
+ CANCELLED = "cancelled"
+ # The provider response was rejected during post-response acceptance processing.
+ REJECTED = "rejected"
+
+
class ModelChangeSource(Enum):
"Origin of an effective session model change."
# The user selected a model directly with `/model `.
@@ -11259,7 +11325,7 @@ class WorkspaceFileChangedOperation(Enum):
UPDATE = "update"
-SessionEventData = SessionStartData | SessionResumeData | SessionRemoteSteerableChangedData | SessionErrorData | SessionIdleData | SessionTitleChangedData | SessionScheduleCreatedData | SessionScheduleCancelledData | SessionScheduleRearmedData | SessionAutopilotObjectiveChangedData | SessionInfoData | SessionWarningData | SessionModelChangeData | SessionModeChangedData | SessionSessionLimitsChangedData | SessionPermissionsChangedData | SessionPlanChangedData | SessionTodosChangedData | SessionWorkspaceFileChangedData | SessionHandoffData | SessionTruncationData | SessionSnapshotRewindData | SessionShutdownData | SessionUsageCheckpointData | SessionContextChangedData | SessionUsageInfoData | SessionContextClearedData | SessionCompactionStartData | SessionCompactionCompleteData | SessionTaskCompleteData | UserMessageData | PendingMessagesModifiedData | AssistantTurnStartData | AssistantTurnRetryData | AgentInterruptedData | AssistantIntentData | AssistantServerToolProgressData | AssistantReasoningData | AssistantReasoningDeltaData | AssistantToolCallDeltaData | AssistantStreamingDeltaData | AssistantMessageData | AssistantMessageStartData | AssistantMessageDeltaData | AssistantTurnEndData | AssistantIdleData | AssistantUsageData | PromptCacheBreakData | ModelCallFailureData | ModelCallStartData | AbortData | ToolUserRequestedData | ToolExecutionStartData | ToolExecutionPartialResultData | ToolExecutionProgressData | ToolExecutionCompleteData | ToolSearchActivatedData | SkillInvokedData | SandboxDecisionData | SubagentStartedData | SubagentCompletedData | SubagentFailedData | SubagentSelectedData | SubagentDeselectedData | HookStartData | HookEndData | HookProgressData | SessionBinaryAssetData | SystemMessageData | SystemNotificationData | PermissionRequestedData | PermissionCompletedData | UserInputRequestedData | UserInputCompletedData | ElicitationRequestedData | ElicitationCompletedData | SamplingRequestedData | SamplingCompletedData | McpOauthRequiredData | McpOauthCompletedData | McpHeadersRefreshRequiredData | McpHeadersRefreshCompletedData | SessionCustomNotificationData | UiEphemeralQueryData | ExternalToolRequestedData | ExternalToolCompletedData | CommandQueuedData | CommandExecuteData | CommandCompletedData | AutoModeSwitchRequestedData | AutoModeSwitchCompletedData | SessionLimitsExhaustedRequestedData | SessionLimitsExhaustedCompletedData | SessionAutoModeResolvedData | SessionManagedSettingsResolvedData | SessionManagedSettingsEnforcedData | CommandsChangedData | CapabilitiesChangedData | ExitPlanModeRequestedData | ExitPlanModeCompletedData | SessionToolsUpdatedData | SessionBackgroundTasksChangedData | FactoryRunUpdatedData | FactoryRunStartedData | FactoryRunSettledData | SessionSkillsLoadedData | SessionCustomAgentsUpdatedData | SessionMcpServersLoadedData | SessionMcpServerStatusChangedData | McpToolsListChangedData | McpResourcesListChangedData | McpPromptsListChangedData | SessionExtensionsLoadedData | SessionCanvasOpenedData | SessionCanvasRegistryChangedData | SessionCanvasClosedData | SessionCanvasUnavailableData | SessionCanvasRecordedData | SessionCanvasRemovedData | SessionExtensionsAttachmentsPushedData | McpAppToolCallCompleteData | RawSessionEventData | Data
+SessionEventData = SessionStartData | SessionResumeData | SessionRemoteSteerableChangedData | SessionErrorData | SessionIdleData | SessionTitleChangedData | SessionScheduleCreatedData | SessionScheduleCancelledData | SessionScheduleRearmedData | SessionAutopilotObjectiveChangedData | SessionInfoData | SessionWarningData | SessionModelChangeData | SessionModeChangedData | SessionSessionLimitsChangedData | SessionPermissionsChangedData | SessionPlanChangedData | SessionTodosChangedData | SessionWorkspaceFileChangedData | SessionHandoffData | SessionTruncationData | SessionSnapshotRewindData | SessionShutdownData | SessionUsageCheckpointData | SessionContextChangedData | SessionUsageInfoData | SessionContextClearedData | SessionCompactionStartData | SessionCompactionCompleteData | SessionTaskCompleteData | UserMessageData | PendingMessagesModifiedData | AssistantTurnStartData | AssistantTurnRetryData | AgentInterruptedData | AssistantIntentData | AssistantServerToolProgressData | AssistantReasoningData | AssistantReasoningDeltaData | AssistantToolCallDeltaData | AssistantStreamingDeltaData | AssistantMessageData | AssistantMessageStartData | AssistantMessageDeltaData | AssistantTurnEndData | AssistantIdleData | AssistantUsageData | PromptCacheBreakData | ModelCallFailureData | ModelCallFinishedData | ModelCallStartData | AbortData | ToolUserRequestedData | ToolExecutionStartData | ToolExecutionPartialResultData | ToolExecutionProgressData | ToolExecutionCompleteData | ToolSearchActivatedData | SkillInvokedData | SandboxDecisionData | SubagentStartedData | SubagentCompletedData | SubagentFailedData | SubagentSelectedData | SubagentDeselectedData | HookStartData | HookEndData | HookProgressData | SessionBinaryAssetData | SystemMessageData | SystemNotificationData | PermissionRequestedData | PermissionCompletedData | UserInputRequestedData | UserInputCompletedData | ElicitationRequestedData | ElicitationCompletedData | SamplingRequestedData | SamplingCompletedData | McpOauthRequiredData | McpOauthCompletedData | McpHeadersRefreshRequiredData | McpHeadersRefreshCompletedData | SessionCustomNotificationData | UiEphemeralQueryData | ExternalToolRequestedData | ExternalToolCompletedData | CommandQueuedData | CommandExecuteData | CommandCompletedData | AutoModeSwitchRequestedData | AutoModeSwitchCompletedData | SessionLimitsExhaustedRequestedData | SessionLimitsExhaustedCompletedData | SessionAutoModeResolvedData | SessionManagedSettingsResolvedData | SessionManagedSettingsEnforcedData | CommandsChangedData | CapabilitiesChangedData | ExitPlanModeRequestedData | ExitPlanModeCompletedData | SessionToolsUpdatedData | SessionBackgroundTasksChangedData | FactoryRunUpdatedData | FactoryRunStartedData | FactoryRunSettledData | SessionSkillsLoadedData | SessionCustomAgentsUpdatedData | SessionMcpServersLoadedData | SessionMcpServerStatusChangedData | McpToolsListChangedData | McpResourcesListChangedData | McpPromptsListChangedData | SessionExtensionsLoadedData | SessionCanvasOpenedData | SessionCanvasRegistryChangedData | SessionCanvasClosedData | SessionCanvasUnavailableData | SessionCanvasRecordedData | SessionCanvasRemovedData | SessionExtensionsAttachmentsPushedData | McpAppToolCallCompleteData | RawSessionEventData | Data
@dataclass
@@ -11334,6 +11400,7 @@ def from_dict(obj: Any) -> "SessionEvent":
case SessionEventType.ASSISTANT_USAGE: data = AssistantUsageData.from_dict(data_obj)
case SessionEventType.PROMPT_CACHE_BREAK: data = PromptCacheBreakData.from_dict(data_obj)
case SessionEventType.MODEL_CALL_FAILURE: data = ModelCallFailureData.from_dict(data_obj)
+ case SessionEventType.MODEL_CALL_FINISHED: data = ModelCallFinishedData.from_dict(data_obj)
case SessionEventType.MODEL_CALL_START: data = ModelCallStartData.from_dict(data_obj)
case SessionEventType.ABORT: data = AbortData.from_dict(data_obj)
case SessionEventType.TOOL_USER_REQUESTED: data = ToolUserRequestedData.from_dict(data_obj)
@@ -11586,6 +11653,8 @@ def session_event_to_dict(x: SessionEvent) -> Any:
"ModelCallFailureRequestFingerprint",
"ModelCallFailureSource",
"ModelCallFailureTransport",
+ "ModelCallFinishedData",
+ "ModelCallFinishedOutcome",
"ModelCallStartData",
"ModelChangeSource",
"OmittedBinaryOmittedReason",
diff --git a/rust/src/generated/api_types.rs b/rust/src/generated/api_types.rs
index 0583c09229..1a9868f267 100644
--- a/rust/src/generated/api_types.rs
+++ b/rust/src/generated/api_types.rs
@@ -3822,6 +3822,31 @@ pub(crate) struct ConfigureSessionExtensionsParams {
pub session_id: SessionId,
}
+/// Identity of the integrating host, declared once on the `server.connect` handshake so telemetry from this connection is attributed to a single, consistent surface. All fields are optional; omit them to keep the default attribution.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub(crate) struct ConnectClientInfo {
+ /// Name of the host editor, e.g. `"vscode"`.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub editor_name: Option,
+ /// Version of the host editor, e.g. `"1.124.2"`. Ignored unless it looks like a version string.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub editor_version: Option,
+ /// Name of the Copilot extension within the host, e.g. `"copilot-chat"`.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub extension_name: Option,
+ /// Version of the Copilot extension within the host, e.g. `"0.54.0"`. Ignored unless it looks like a version string.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub extension_version: Option,
+}
+
/// Repository associated with the connected remote session.
///
///
@@ -3908,6 +3933,10 @@ pub struct ConnectRemoteSessionParams {
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub(crate) struct ConnectRequest {
+ /// Identity of the integrating host. Optional; omit it to keep the default attribution.
+ #[doc(hidden)]
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub(crate) client_info: Option,
/// Opt this connection in to GitHub telemetry forwarding for its lifetime. When set, the runtime forwards every internal telemetry event it emits — across all sessions, plus sessionless events — to this connection over the `gitHubTelemetry.event` notification. Regular events are also written to the runtime's normal GitHub/CTS path (dual-write); host-only compatibility events are forward-only and intentionally skip that path. Intended for first-party hosts that re-emit the events into their own telemetry stores. Both unrestricted and restricted events are forwarded, each tagged with a `restricted` discriminator; a backstop drops restricted events when restricted telemetry is disabled — using the process-global gate for ordinary events and an explicit session-scoped decision for host-only events.
#[serde(skip_serializing_if = "Option::is_none")]
pub enable_git_hub_telemetry_forwarding: Option,
@@ -6288,6 +6317,9 @@ pub struct InstalledPlugin {
/// Installation timestamp
#[serde(rename = "installed_at")]
pub installed_at: String,
+ /// Absolute path of the marketplace directory a live plugin was resolved from. Present only on live, never-persisted records — those synthesized at session start for a directory/local marketplace, whose cache_path points at the real plugin directory on disk rather than a copy under the installed-plugins cache. Its presence is what marks a record as live, and no record carrying it is ever written to the persisted installedPlugins key.
+ #[serde(rename = "installed_from", skip_serializing_if = "Option::is_none")]
+ pub installed_from: Option,
/// Marketplace the plugin came from (empty string for direct repo installs)
pub marketplace: String,
/// Plugin name
@@ -6319,6 +6351,9 @@ pub struct InstalledPluginInfo {
pub direct_source_id: Option,
/// Whether the plugin is currently enabled for new sessions
pub enabled: bool,
+ /// Absolute path of the marketplace directory a live plugin was resolved from. Present only on live, never-persisted records — a plugin belonging to a directory/local marketplace, which is loaded from its real directory on every pass instead of a copy under the installed-plugins cache. Its presence is what marks a listed plugin as live: such a plugin is always present on disk, so `enabled` is its only meaningful state and it is never "not installed".
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub installed_from: Option,
/// Marketplace the plugin came from. Empty string ("") for direct repo / URL / local installs.
pub marketplace: String,
/// Plugin name
@@ -9888,6 +9923,23 @@ pub struct ModelCapabilities {
pub supports: Option,
}
+/// A service-published message about a model, carrying a stable machine-readable code alongside human-readable text.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct ModelMessage {
+ /// Stable machine-readable identifier for the message, such as `client_version_deprecated`. Hosts can key custom presentation off this; unrecognized codes should fall back to displaying `message`.
+ pub code: String,
+ /// Human-readable message text intended for display to the user.
+ pub message: String,
+}
+
/// Policy state (if applicable)
///
///
@@ -9906,6 +9958,22 @@ pub struct ModelPolicy {
pub terms: Option,
}
+/// Service-published warning text that hosts should display when presenting a model.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct ModelWarningText {
+ /// Data-retention warning for the model. The text may contain Markdown links and should be rendered as Markdown when supported.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub data_retention: Option,
+}
+
/// Copilot model metadata, including identifier, display name, capabilities, policy, billing, reasoning efforts, and picker categories.
///
///
@@ -9927,6 +9995,9 @@ pub struct Model {
pub default_reasoning_effort: Option,
/// Model identifier (e.g., "claude-sonnet-4.5")
pub id: String,
+ /// Informational notices the service published for this model, such as an upcoming change or a recommended alternative. Present only when the service published at least one notice. Hosts should surface these without implying anything is wrong with the model.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub info_messages: Option>,
/// Model capability category for grouping in the model picker
#[serde(skip_serializing_if = "Option::is_none")]
pub model_picker_category: Option,
@@ -9944,6 +10015,12 @@ pub struct Model {
/// Supported reasoning effort levels (only present if model supports reasoning effort)
#[serde(skip_serializing_if = "Option::is_none")]
pub supported_reasoning_efforts: Option>,
+ /// Warnings the service published for this model, such as a deprecated client version. Present only when the service published at least one warning. The model remains usable; hosts should surface these as advisory rather than blocking.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub warning_messages: Option>,
+ /// Warning text the service requires hosts to surface for this model. Present only when the service published at least one warning.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub warning_text: Option,
}
/// Managed, repository, and CLI model overrides to overlay onto the session at startup.
@@ -11580,7 +11657,7 @@ pub struct PermissionLocationResolveResult {
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionPathsAddParams {
- /// Directory to add to the allow-list. The runtime resolves and validates the path before adding.
+ /// Directory to add to the allow-list. The runtime resolves and validates the path before adding, then loads conventional `.github/skills/` and `.github/agents/` definitions under it when their subsystem gates are enabled. Adding the directory is therefore also a trust decision for configuration stored there.
pub path: String,
}
@@ -11625,7 +11702,7 @@ pub struct PermissionPathsAllowedCheckResult {
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PermissionPathsConfig {
- /// Additional directories to allow tool access to (in addition to the session's working directory). When `unrestricted` is true, these are still pre-populated on the UnrestrictedPathManager so they remain visible via getDirectories() (e.g. for @-mention completion).
+ /// Additional directories to allow tool access to (in addition to the session's working directory). Conventional `.github/skills/` and `.github/agents/` definitions under them also join the session catalogs when their subsystem gates are enabled, so supplying a directory is a trust decision for configuration stored there. When `unrestricted` is true, these are still pre-populated on the UnrestrictedPathManager so they remain visible via getDirectories() (e.g. for @-mention completion).
#[serde(skip_serializing_if = "Option::is_none")]
pub additional_directories: Option>,
/// Whether to include the system temp directory in the allowed list (defaults to true). Ignored when `unrestricted` is true.
@@ -13726,6 +13803,9 @@ pub struct QueuePendingItems {
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct QueuePendingItemsResult {
+ /// How many leading entries of `steeringMessages` have already been folded into the running turn (and so have an emitted `user.message`), as opposed to still waiting for one. Absent for hosts that do not distinguish the two.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub in_flight_steering_count: Option,
/// Pending queued items in submission order. Includes user messages, queued slash commands, and queued model changes; omits internal system items.
pub items: Vec,
/// Display text for messages currently in the immediate steering queue (interjections sent during a running turn).
@@ -14500,7 +14580,7 @@ pub struct SandboxConfig {
/// Whether to auto-add the current working directory to readwritePaths. Default: true.
#[serde(skip_serializing_if = "Option::is_none")]
pub add_current_working_directory: Option,
- /// Whether to auto-grant read access to the tool directories discovered on PATH and in toolchain environment variables (GOROOT, CARGO_HOME, JAVA_HOME, VIRTUAL_ENV, and similar), and to common developer-tool caches, registries, and toolchains in their default home locations (cargo, go, npm, Maven, and more), plus read-write access to (and, on Unix, up-front creation of) the scratch caches builds write on every run (go-build, ccache, sccache, Gradle caches, Cargo lock/tracker files), so builds work without extra configuration; a relocated CARGO_HOME additionally gets its Cargo lock files granted read-write. Set to false to disable every grant listed above: user-installed toolchains (rustup, nvm, pyenv, conda, pipx) then need explicit userPolicy.filesystem entries — readonlyPaths to read them, plus readwriteFiles for a relocated CARGO_HOME's .package-cache and .global-cache, which Cargo locks on every build. Only these developer-tool grants are affected: the working directory (see addCurrentWorkingDirectory), temporary storage, session log paths, and system locations follow their own rules and stay granted, so commands still run. Default: true (enabled by default; set to false to opt out).
+ /// Whether to auto-grant read access to the tool directories discovered on PATH and in toolchain environment variables (GOROOT, CARGO_HOME, JAVA_HOME, VIRTUAL_ENV, and similar), and to common developer-tool caches, registries, and toolchains in their default home locations (cargo, go, npm, Maven, and more), plus read-write access to (and up-front creation of) the scratch caches builds write on every run (go-build, ccache, sccache, Gradle caches, Cargo lock/tracker files), so builds work without extra configuration; a relocated CARGO_HOME additionally gets its Cargo lock files granted read-write. Set to false to disable every grant listed above: user-installed toolchains (rustup, nvm, pyenv, conda, pipx) then need explicit userPolicy.filesystem entries — readonlyPaths to read them, plus readwriteFiles for a relocated CARGO_HOME's .package-cache and .global-cache, which Cargo locks on every build. Only these developer-tool grants are affected: the working directory (see addCurrentWorkingDirectory), temporary storage, session log paths, and system locations follow their own rules and stay granted, so commands still run. Default: true (enabled by default; set to false to opt out).
#[serde(skip_serializing_if = "Option::is_none")]
pub allow_dev_tool_access: Option,
/// Credential-injection capability flags.
@@ -15842,6 +15922,9 @@ pub struct SessionInstalledPlugin {
/// Installation timestamp (ISO-8601)
#[serde(rename = "installed_at")]
pub installed_at: String,
+ /// Absolute path of the marketplace directory a live plugin was resolved from. Present only on live, never-persisted records — those synthesized at session start for a directory/local marketplace, whose cache_path points at the real plugin directory on disk rather than a copy under the installed-plugins cache. Its presence is what marks a record as live, and no record carrying it is ever written to the persisted installedPlugins key.
+ #[serde(rename = "installed_from", skip_serializing_if = "Option::is_none")]
+ pub installed_from: Option,
/// Marketplace the plugin came from (empty string for direct repo installs)
pub marketplace: String,
/// Plugin name
@@ -16106,9 +16189,9 @@ pub struct SessionManagedPermissions {
/// Permission rules that block matching operations. Deny has highest precedence.
#[serde(skip_serializing_if = "Option::is_none")]
pub deny: Option>,
- /// When set to `disable`, prevents bypass/allow-all permission modes.
+ /// When set to `disable`, prevents bypass/allow-all permission modes. `allow-auto-only` blocks full allow-all but permits advisory auto-approval. Any other value is accepted rather than failing the session, but is enforced as `disable`: the key is only present to restrict something, so a mode this runtime cannot interpret fails closed to the most restrictive one it knows. Omit the key entirely to impose no restriction.
#[serde(skip_serializing_if = "Option::is_none")]
- pub disable_bypass_permissions_mode: Option,
+ pub disable_bypass_permissions_mode: Option,
}
/// Managed settings an SDK host may inject at session startup. Only permissions are accepted in this initial contract.
@@ -16429,7 +16512,7 @@ pub struct SessionOpenOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub additional_content_exclusion_policies:
Option>,
- /// Additional directories the agent may access beyond the working directory. Each entry is granted to the session's file-access allow-list and surfaced to the model (system prompt context and `@`-mention completion). Absolute paths are recommended; a relative path is resolved against the session's working directory. Nonexistent or unresolvable entries are skipped with a warning. This is applied on both session creation and resume, and is not persisted: a resumed session that omits this option does not retain previously supplied directories (re-supply them, exactly as the CLI re-passes `--add-dir`).
+ /// Additional directories the agent may access beyond the working directory. Each entry is granted to the session's file-access allow-list and surfaced to the model (system prompt context and `@`-mention completion). Conventional `.github/skills/` and `.github/agents/` definitions under each directory also join the session's project catalogs when their existing subsystem gates are enabled: added-root skills require both `enableConfigDiscovery` and effective `enableSkills`; added-root agents require `enableConfigDiscovery`. Supplying a directory therefore activates configuration from it and should be treated as a trust decision. Absolute paths are recommended; a relative path is resolved against the session's working directory. Nonexistent or unresolvable entries are skipped with a warning. This is applied during session creation and cold resume and is not persisted, so a cold resume must re-supply the directories.
#[serde(skip_serializing_if = "Option::is_none")]
pub additional_directories: Option>,
/// Runtime context discriminator for agent filtering.
@@ -25891,6 +25974,9 @@ pub struct SessionQueuePendingItemsParams {
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SessionQueuePendingItemsResult {
+ /// How many leading entries of `steeringMessages` have already been folded into the running turn (and so have an emitted `user.message`), as opposed to still waiting for one. Absent for hosts that do not distinguish the two.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub in_flight_steering_count: Option,
/// Pending queued items in submission order. Includes user messages, queued slash commands, and queued model changes; omits internal system items.
pub items: Vec,
/// Display text for messages currently in the immediate steering queue (interjections sent during a running turn).
@@ -28461,23 +28547,6 @@ pub enum DebugCollectLogsResultKind {
Unknown,
}
-///
-///
-///
-/// **Experimental.** This type is part of an experimental wire-protocol surface
-/// and may change or be removed in future SDK or CLI releases.
-///
-///
diff --git a/rust/src/generated/rpc.rs b/rust/src/generated/rpc.rs
index c955637e31..60bf9d804f 100644
--- a/rust/src/generated/rpc.rs
+++ b/rust/src/generated/rpc.rs
@@ -8205,7 +8205,7 @@ impl<'a> SessionRpcPermissionsPaths<'a> {
Ok(serde_json::from_value(_value)?)
}
- /// Adds a directory to the session's allow-list.
+ /// Adds a directory to the session's allow-list and activates conventional skill and agent definitions under it.
///
/// Wire method: `session.permissions.paths.add`.
///
diff --git a/rust/src/generated/session_events.rs b/rust/src/generated/session_events.rs
index 1a7ca36cbd..2b7c90ca96 100644
--- a/rust/src/generated/session_events.rs
+++ b/rust/src/generated/session_events.rs
@@ -116,6 +116,8 @@ pub enum SessionEventType {
PromptCacheBreak,
#[serde(rename = "model.call_failure")]
ModelCallFailure,
+ #[serde(rename = "model.call_finished")]
+ ModelCallFinished,
#[serde(rename = "model.call_start")]
ModelCallStart,
#[serde(rename = "abort")]
@@ -475,6 +477,8 @@ pub enum SessionEventData {
PromptCacheBreak(PromptCacheBreakData),
#[serde(rename = "model.call_failure")]
ModelCallFailure(ModelCallFailureData),
+ #[serde(rename = "model.call_finished")]
+ ModelCallFinished(ModelCallFinishedData),
#[serde(rename = "model.call_start")]
ModelCallStart(ModelCallStartData),
#[serde(rename = "abort")]
@@ -2282,6 +2286,9 @@ pub struct AssistantUsageData {
/// Number of output tokens produced
#[serde(skip_serializing_if = "Option::is_none")]
pub output_tokens: Option,
+ /// Time to first observable model output in milliseconds. Includes text, reasoning, and tool-call output; only available for streaming requests that produce observable output.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub output_ttft_ms: Option,
/// Parent tool call ID when this usage originates from a sub-agent
#[doc(hidden)]
#[deprecated]
@@ -2513,6 +2520,26 @@ pub struct ModelCallFailureData {
pub transport: Option,
}
+/// Session event "model.call_finished". Final lifecycle outcome for one logical model dispatch. A logical dispatch may include internal reconnect or fallback work, so event count is not provider HTTP-request count.
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct ModelCallFinishedData {
+ /// Whether an accepted successful response requested the exact name and command semantics of a built-in file edit tool, including an external tool explicitly replacing that built-in name. Absent when the logical dispatch did not produce an accepted response.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub contains_built_in_file_edit_request: Option,
+ /// Monotonic elapsed time spent in the logical model dispatch, including any internal transport reconnect or fallback and excluding orchestrator retry backoff, tool execution, confirmations, and post-response processing
+ pub dispatch_duration_ms: f64,
+ /// Version of the built-in file-edit semantic classifier used for this event
+ pub edit_classifier_version: i64,
+ /// Identifier of the user interaction that owns the model dispatch, matching assistant.turn_start.interactionId when available
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub interaction_id: Option,
+ /// Final outcome after post-response acceptance processing
+ pub outcome: ModelCallFinishedOutcome,
+ /// Agent-loop iteration within the interaction that initiated the model dispatch
+ pub turn_id: String,
+}
+
/// Session event "model.call_start". Model API dispatch metadata for internal telemetry
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
@@ -3960,6 +3987,9 @@ pub struct PermissionPromptRequestMcp {
///
#[serde(skip_serializing_if = "Option::is_none")]
pub assisted_approval: Option,
+ /// Whether the host may offer a server-wide "approve all tools from this server" blanket. Absent is treated as true; the runtime sends false when managed policy disables bypass-permissions mode, which forbids the server-wide escalation while still allowing per-tool approval.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub can_offer_server_wide_approval: Option,
/// Prompt kind discriminator
pub kind: PermissionPromptRequestMcpKind,
/// Advisory runtime permission recommendation. The host remains responsible for deciding the request and may reject it.
@@ -6126,6 +6156,27 @@ pub enum ModelCallFailureSource {
Unknown,
}
+/// Final outcome of one logical model dispatch after response acceptance processing
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum ModelCallFinishedOutcome {
+ /// The provider response was accepted for continued agent processing.
+ #[serde(rename = "success")]
+ Success,
+ /// The dispatch ended with a provider or transport error.
+ #[serde(rename = "error")]
+ Error,
+ /// The dispatch was cancelled before an accepted response was produced.
+ #[serde(rename = "cancelled")]
+ Cancelled,
+ /// The provider response was rejected during post-response acceptance processing.
+ #[serde(rename = "rejected")]
+ Rejected,
+ /// Unknown variant for forward compatibility.
+ #[default]
+ #[serde(other)]
+ Unknown,
+}
+
/// Finite reason code describing why the current turn was aborted
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum AbortReason {
@@ -7234,6 +7285,9 @@ pub enum ManagedSettingsEnforcedEscalation {
/// Unrestricted URL fetch access.
#[serde(rename = "unrestricted_urls")]
UnrestrictedUrls,
+ /// A server-wide MCP "Always Allow" (or `--allow-tool `) blanket that would auto-approve every tool from an MCP server. Capped to per-tool approval; each tool still prompts.
+ #[serde(rename = "server_wide_mcp_approval")]
+ ServerWideMcpApproval,
/// Unknown variant for forward compatibility.
#[default]
#[serde(other)]
diff --git a/rust/src/lib.rs b/rust/src/lib.rs
index 5c06744698..2eb4c4116e 100644
--- a/rust/src/lib.rs
+++ b/rust/src/lib.rs
@@ -2157,6 +2157,7 @@ impl Client {
/// started with `COPILOT_CONNECTION_TOKEN`.
async fn connect_handshake(&self) -> Result