From 33d37ba78fc3b6c7fde5d11090aeef0e018885ab Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 29 May 2026 17:28:56 +0000 Subject: [PATCH 1/4] Update @github/copilot to 1.0.56-2 - Updated nodejs and test harness dependencies - Re-ran code generators - Formatted generated code --- dotnet/src/Generated/Rpc.cs | 71 ++++++++++++++++++++++++++- go/rpc/zrpc.go | 20 +++++++- nodejs/package-lock.json | 72 +++++++++++++-------------- nodejs/package.json | 2 +- nodejs/samples/package-lock.json | 2 +- nodejs/src/generated/rpc.ts | 17 ++++++- python/copilot/generated/rpc.py | 84 +++++++++++++++++++------------- rust/src/generated/api_types.rs | 32 +++++++++++- rust/src/generated/rpc.rs | 2 +- test/harness/package-lock.json | 72 +++++++++++++-------------- test/harness/package.json | 2 +- 11 files changed, 257 insertions(+), 119 deletions(-) diff --git a/dotnet/src/Generated/Rpc.cs b/dotnet/src/Generated/Rpc.cs index e0ab7aa95..346177f63 100644 --- a/dotnet/src/Generated/Rpc.cs +++ b/dotnet/src/Generated/Rpc.cs @@ -2485,10 +2485,14 @@ internal sealed class CanvasActionInvokeRequest public string SessionId { get; set; } = string.Empty; } -/// The currently selected model and reasoning effort for the session. +/// The currently selected model, reasoning effort, and context tier for the session. [Experimental(Diagnostics.Experimental)] public sealed class CurrentModel { + /// Context tier currently pinned for the session, when one is set. Reflects `Session.getContextTier()`, restored from the session journal on resume. + [JsonPropertyName("contextTier")] + public ModelCurrentContextTier? ContextTier { get; set; } + /// Currently active model identifier. [JsonPropertyName("modelId")] public string? ModelId { get; set; } @@ -9737,6 +9741,69 @@ public override void Write(Utf8JsonWriter writer, CanvasInstanceAvailability val } +/// Context tier currently pinned for the session, when one is set. Reflects `Session.getContextTier()`, restored from the session journal on resume. +[Experimental(Diagnostics.Experimental)] +[JsonConverter(typeof(Converter))] +[DebuggerDisplay("{Value,nq}")] +public readonly struct ModelCurrentContextTier : IEquatable +{ + private readonly string? _value; + + /// Initializes a new instance of the struct. + /// The value to associate with this . + [JsonConstructor] + public ModelCurrentContextTier(string value) + { + ArgumentException.ThrowIfNullOrWhiteSpace(value); + _value = value; + } + + /// Gets the value associated with this . + public string Value => _value ?? string.Empty; + + /// Use the model's default context window. + public static ModelCurrentContextTier Default { get; } = new("default"); + + /// Pin the session to the long-context tier when supported. + public static ModelCurrentContextTier LongContext { get; } = new("long_context"); + + /// Returns a value indicating whether two instances are equivalent. + public static bool operator ==(ModelCurrentContextTier left, ModelCurrentContextTier right) => left.Equals(right); + + /// Returns a value indicating whether two instances are not equivalent. + public static bool operator !=(ModelCurrentContextTier left, ModelCurrentContextTier right) => !(left == right); + + /// + public override bool Equals(object? obj) => obj is ModelCurrentContextTier other && Equals(other); + + /// + public bool Equals(ModelCurrentContextTier 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 ModelCurrentContextTier Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return new(GeneratedStringEnumJson.ReadValue(ref reader, typeToConvert)); + } + + /// + public override void Write(Utf8JsonWriter writer, ModelCurrentContextTier value, JsonSerializerOptions options) + { + GeneratedStringEnumJson.WriteValue(writer, value.Value, typeof(ModelCurrentContextTier)); + } + } +} + + /// Defines the allowed values. [JsonConverter(typeof(Converter))] [DebuggerDisplay("{Value,nq}")] @@ -13833,7 +13900,7 @@ internal ModelApi(CopilotSession session) /// Gets the currently selected model for the session. /// The to monitor for cancellation requests. The default is . - /// The currently selected model and reasoning effort for the session. + /// The currently selected model, reasoning effort, and context tier for the session. public async Task GetCurrentAsync(CancellationToken cancellationToken = default) { _session.ThrowIfDisposed(); diff --git a/go/rpc/zrpc.go b/go/rpc/zrpc.go index 40daa62b6..e2c735ada 100644 --- a/go/rpc/zrpc.go +++ b/go/rpc/zrpc.go @@ -904,9 +904,12 @@ type CopilotUserResponseQuotaSnapshotsPremiumInteractions struct { Unlimited *bool `json:"unlimited,omitempty"` } -// The currently selected model and reasoning effort for the session. +// The currently selected model, reasoning effort, and context tier for the session. // Experimental: CurrentModel is part of an experimental API and may change or be removed. type CurrentModel struct { + // Context tier currently pinned for the session, when one is set. Reflects + // `Session.getContextTier()`, restored from the session journal on resume. + ContextTier *ModelCurrentContextTier `json:"contextTier,omitempty"` // Currently active model identifier ModelID *string `json:"modelId,omitempty"` // Reasoning effort level currently applied to the active model, when one is set. Reads @@ -7312,6 +7315,19 @@ const ( MetadataSnapshotRemoteMetadataTaskTypeCli MetadataSnapshotRemoteMetadataTaskType = "cli" ) +// Context tier currently pinned for the session, when one is set. Reflects +// `Session.getContextTier()`, restored from the session journal on resume. +// Experimental: ModelCurrentContextTier is part of an experimental API and may change or be +// removed. +type ModelCurrentContextTier string + +const ( + // Use the model's default context window. + ModelCurrentContextTierDefault ModelCurrentContextTier = "default" + // Pin the session to the long-context tier when supported. + ModelCurrentContextTierLongContext ModelCurrentContextTier = "long_context" +) + // Model capability category for grouping in the model picker type ModelPickerCategory string @@ -10271,7 +10287,7 @@ type ModelApi sessionApi // // RPC method: session.model.getCurrent. // -// Returns: The currently selected model and reasoning effort for the session. +// Returns: The currently selected model, reasoning effort, and context tier for the session. func (a *ModelApi) GetCurrent(ctx context.Context) (*CurrentModel, error) { req := map[string]any{"sessionId": a.sessionID} raw, err := a.client.Request("session.model.getCurrent", req) diff --git a/nodejs/package-lock.json b/nodejs/package-lock.json index 20439e93d..53dd36b7b 100644 --- a/nodejs/package-lock.json +++ b/nodejs/package-lock.json @@ -9,7 +9,7 @@ "version": "0.1.8", "license": "MIT", "dependencies": { - "@github/copilot": "^1.0.56-1", + "@github/copilot": "^1.0.56-2", "vscode-jsonrpc": "^8.2.1", "zod": "^4.3.6" }, @@ -663,9 +663,9 @@ } }, "node_modules/@github/copilot": { - "version": "1.0.56-1", - "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.56-1.tgz", - "integrity": "sha512-9VGwX6kcUfm8NHTQaUEtmR6qA73jyDXwtBSmd8ia3OpadEpqc5V65isv37zEtGDv33PPA4ntvoEG0CK4j2oXEg==", + "version": "1.0.56-2", + "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.56-2.tgz", + "integrity": "sha512-Dpue7utF6PzGS4tPrG3pRXL3d1lMJHFFT8PJegljn7vg64LAbjhk5yNgBXbMg/XbObu755SJTNtbEL/aSdrGNg==", "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "detect-libc": "^2.1.2" @@ -674,20 +674,20 @@ "copilot": "npm-loader.js" }, "optionalDependencies": { - "@github/copilot-darwin-arm64": "1.0.56-1", - "@github/copilot-darwin-x64": "1.0.56-1", - "@github/copilot-linux-arm64": "1.0.56-1", - "@github/copilot-linux-x64": "1.0.56-1", - "@github/copilot-linuxmusl-arm64": "1.0.56-1", - "@github/copilot-linuxmusl-x64": "1.0.56-1", - "@github/copilot-win32-arm64": "1.0.56-1", - "@github/copilot-win32-x64": "1.0.56-1" + "@github/copilot-darwin-arm64": "1.0.56-2", + "@github/copilot-darwin-x64": "1.0.56-2", + "@github/copilot-linux-arm64": "1.0.56-2", + "@github/copilot-linux-x64": "1.0.56-2", + "@github/copilot-linuxmusl-arm64": "1.0.56-2", + "@github/copilot-linuxmusl-x64": "1.0.56-2", + "@github/copilot-win32-arm64": "1.0.56-2", + "@github/copilot-win32-x64": "1.0.56-2" } }, "node_modules/@github/copilot-darwin-arm64": { - "version": "1.0.56-1", - "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.56-1.tgz", - "integrity": "sha512-GmdinjTXPKe7CBGC6pfFEOcqE3cN7craTo4muMPIRzDWnnkPwkIT05z74fgLc+r0/+MtllCysXkQVLixHEmyQw==", + "version": "1.0.56-2", + "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.56-2.tgz", + "integrity": "sha512-RHJNhdPSkdPc/nabWVess7BfEda7xfwBQ2X5vq9nq4VjqTbvUHBFwTt792q00TE4DZR/UsWr0sJKJkLcRvTltQ==", "cpu": [ "arm64" ], @@ -701,9 +701,9 @@ } }, "node_modules/@github/copilot-darwin-x64": { - "version": "1.0.56-1", - "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.56-1.tgz", - "integrity": "sha512-WfkSnB0MxmMxV58yqF8O0GkBzXCCKy3H6s13Xrqfvotmk9KNriVzCHmUnnMTve4XeOGCGrOqU2Hy2VNUu8Cj1A==", + "version": "1.0.56-2", + "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.56-2.tgz", + "integrity": "sha512-EqBtGH1I2rX5TzSJ+L9O22SQ8jlSsn1YJeFS6RTtYU+NhC6xLajjfTutkA5DZOr3eQgmeceit/4NDqEdjwANEA==", "cpu": [ "x64" ], @@ -717,9 +717,9 @@ } }, "node_modules/@github/copilot-linux-arm64": { - "version": "1.0.56-1", - "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.56-1.tgz", - "integrity": "sha512-fNwcdnPG8N01n9MFl4xKswFsO4ZjkckM5D7UqgtO4aiJYGQYmw+Viq0MFzKD4G8Nzl5k6qR1pDnvWciVAcYDag==", + "version": "1.0.56-2", + "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.56-2.tgz", + "integrity": "sha512-FmjODKft2tmY5B0B94RDek/TR3QtdDTT7W/+lqkiosnUyLhsNtmzKaDYpiQsCBee68YUuB1umecqiTL1qMo3cw==", "cpu": [ "arm64" ], @@ -733,9 +733,9 @@ } }, "node_modules/@github/copilot-linux-x64": { - "version": "1.0.56-1", - "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.56-1.tgz", - "integrity": "sha512-Ow2dQSpuJXHmnw4RBitt/RiAMxsG9Mu5x0MX7ueNzhK1xfuGp7m8yUikbJNZQbBq2KZB2OlwGDKx2KtEBxtbig==", + "version": "1.0.56-2", + "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.56-2.tgz", + "integrity": "sha512-aqF4k6mDLU1OXdaAb3gBIRCgdrlXX+1FBtcoLKPMjzVfkA2abEZ/vuYfZWS7ZaxG/aCOScp8D+/E+RaYHsGYOw==", "cpu": [ "x64" ], @@ -749,9 +749,9 @@ } }, "node_modules/@github/copilot-linuxmusl-arm64": { - "version": "1.0.56-1", - "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-arm64/-/copilot-linuxmusl-arm64-1.0.56-1.tgz", - "integrity": "sha512-vZQAF+QCa+UVND6NNo/lexc3bLWLYMP63aY5peh5BIYrPLv0Ylf5+VSJoaxBC1qFrjLmFaKo4KRWtmh8Mqx6Lw==", + "version": "1.0.56-2", + "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-arm64/-/copilot-linuxmusl-arm64-1.0.56-2.tgz", + "integrity": "sha512-+CztOiU7/nlNLX50jcpOMreMrDr7+DFnq3OV59doDd9UgqTdpjEnZKjkgHpxid117rYF/95cN5EYWD7ermOcjA==", "cpu": [ "arm64" ], @@ -765,9 +765,9 @@ } }, "node_modules/@github/copilot-linuxmusl-x64": { - "version": "1.0.56-1", - "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-x64/-/copilot-linuxmusl-x64-1.0.56-1.tgz", - "integrity": "sha512-EEubP5DRWX/w2CPuZr7aQdfd57mGQ8gDNXOLNds+94Qp2UQD0/wJxF+FrU9YZSWPhcjG/BmXxnw/D7xwby53Nw==", + "version": "1.0.56-2", + "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-x64/-/copilot-linuxmusl-x64-1.0.56-2.tgz", + "integrity": "sha512-FuBYfN2dX2a5fSEzPImtX6hjtjwiL0kutrq4RuvHYxUu0FR0JRB4vfN2mQ/KN4X5DZgaGkPQk19hkoEgd1tmdg==", "cpu": [ "x64" ], @@ -781,9 +781,9 @@ } }, "node_modules/@github/copilot-win32-arm64": { - "version": "1.0.56-1", - "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.56-1.tgz", - "integrity": "sha512-PHr9xxlbh/UMYP0XL7UnPhgPdQyGbA6lJ7yqxoy0JO017c9o62Bhcd39gCuVPlkYurxeFzAdPnlbDVxSKBfNKQ==", + "version": "1.0.56-2", + "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.56-2.tgz", + "integrity": "sha512-mKTzS9HrH+wvOmIgIaRUs+l89o51P7ACVk4P/o1UEWGxDblTxwRZGL+cRBhqNltIxY+8XVIAEwg6CzE+sTH5Hw==", "cpu": [ "arm64" ], @@ -797,9 +797,9 @@ } }, "node_modules/@github/copilot-win32-x64": { - "version": "1.0.56-1", - "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.56-1.tgz", - "integrity": "sha512-EWMfn0EQhUYOpwG+VaLif9ZLBt3D9mZ0DFmxVSM2DSnIMRlpC23hAnwY9n1R6zAvwQY20XMLIJ4d0LW4mUX9Ag==", + "version": "1.0.56-2", + "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.56-2.tgz", + "integrity": "sha512-tacHeeqNiLawmlUpturke10I9d6kkREqTcHGkGRy/MEwrio7A77L45j/IegRcQNjLwHP62R2+5GmNFx6BRwx9w==", "cpu": [ "x64" ], diff --git a/nodejs/package.json b/nodejs/package.json index 1d6de1e20..09011e9df 100644 --- a/nodejs/package.json +++ b/nodejs/package.json @@ -56,7 +56,7 @@ "author": "GitHub", "license": "MIT", "dependencies": { - "@github/copilot": "^1.0.56-1", + "@github/copilot": "^1.0.56-2", "vscode-jsonrpc": "^8.2.1", "zod": "^4.3.6" }, diff --git a/nodejs/samples/package-lock.json b/nodejs/samples/package-lock.json index fc502c2bd..6bb3b8df8 100644 --- a/nodejs/samples/package-lock.json +++ b/nodejs/samples/package-lock.json @@ -18,7 +18,7 @@ "version": "0.1.8", "license": "MIT", "dependencies": { - "@github/copilot": "^1.0.56-1", + "@github/copilot": "^1.0.56-2", "vscode-jsonrpc": "^8.2.1", "zod": "^4.3.6" }, diff --git a/nodejs/src/generated/rpc.ts b/nodejs/src/generated/rpc.ts index 8fff66c7e..602ee76a0 100644 --- a/nodejs/src/generated/rpc.ts +++ b/nodejs/src/generated/rpc.ts @@ -265,6 +265,18 @@ export type ContentFilterMode = | "markdown" /** Remove characters that can hide directives. */ | "hidden_characters"; +/** + * Context tier currently pinned for the session, when one is set. Reflects `Session.getContextTier()`, restored from the session journal on resume. + * + * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema + * via the `definition` "ModelCurrentContextTier". + */ +/** @experimental */ +export type ModelCurrentContextTier = + /** Use the model's default context window. */ + | "default" + /** Pin the session to the long-context tier when supported. */ + | "long_context"; /** * Server transport type: stdio, http, sse (deprecated), or memory * @@ -2814,7 +2826,7 @@ export interface ConnectResult { version: string; } /** - * The currently selected model and reasoning effort for the session. + * The currently selected model, reasoning effort, and context tier for the session. * * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema * via the `definition` "CurrentModel". @@ -2829,6 +2841,7 @@ export interface CurrentModel { * Reasoning effort level currently applied to the active model, when one is set. Reads `Session.getReasoningEffort()` synchronously after `getSelectedModel()` resolves so the two values are reported as a snapshot. */ reasoningEffort?: string; + contextTier?: ModelCurrentContextTier; } /** * Lightweight metadata for a currently initialized session tool @@ -10693,7 +10706,7 @@ export function createSessionRpc(connection: MessageConnection, sessionId: strin /** * Gets the currently selected model for the session. * - * @returns The currently selected model and reasoning effort for the session. + * @returns The currently selected model, reasoning effort, and context tier for the session. */ getCurrent: async (): Promise => connection.sendRequest("session.model.getCurrent", { sessionId }), diff --git a/python/copilot/generated/rpc.py b/python/copilot/generated/rpc.py index 833e95d25..694a6a267 100644 --- a/python/copilot/generated/rpc.py +++ b/python/copilot/generated/rpc.py @@ -1051,33 +1051,12 @@ def to_dict(self) -> dict: return result # Experimental: this type is part of an experimental API and may change or be removed. -@dataclass -class CurrentModel: - """The currently selected model and reasoning effort for the session.""" - - model_id: str | None = None - """Currently active model identifier""" - - reasoning_effort: str | None = None - """Reasoning effort level currently applied to the active model, when one is set. Reads - `Session.getReasoningEffort()` synchronously after `getSelectedModel()` resolves so the - two values are reported as a snapshot. +class ModelCurrentContextTier(Enum): + """Context tier currently pinned for the session, when one is set. Reflects + `Session.getContextTier()`, restored from the session journal on resume. """ - - @staticmethod - def from_dict(obj: Any) -> 'CurrentModel': - assert isinstance(obj, dict) - model_id = from_union([from_str, from_none], obj.get("modelId")) - reasoning_effort = from_union([from_str, from_none], obj.get("reasoningEffort")) - return CurrentModel(model_id, reasoning_effort) - - def to_dict(self) -> dict: - result: dict = {} - if self.model_id is not None: - result["modelId"] = from_union([from_str, from_none], self.model_id) - if self.reasoning_effort is not None: - result["reasoningEffort"] = from_union([from_str, from_none], self.reasoning_effort) - return result + DEFAULT = "default" + LONG_CONTEXT = "long_context" class DiscoveredMCPServerType(Enum): """Server transport type: stdio, http, sse (deprecated), or memory""" @@ -2779,10 +2758,6 @@ def to_dict(self) -> dict: result["reasoningEffort"] = from_str(self.reasoning_effort) return result -class ContextTier(Enum): - DEFAULT = "default" - LONG_CONTEXT = "long_context" - # Experimental: this type is part of an experimental API and may change or be removed. @dataclass class ModelSwitchToResult: @@ -7487,6 +7462,42 @@ def to_dict(self) -> dict: result["unlimited"] = from_union([from_bool, from_none], self.unlimited) return result +# Experimental: this type is part of an experimental API and may change or be removed. +@dataclass +class CurrentModel: + """The currently selected model, reasoning effort, and context tier for the session.""" + + context_tier: ModelCurrentContextTier | None = None + """Context tier currently pinned for the session, when one is set. Reflects + `Session.getContextTier()`, restored from the session journal on resume. + """ + model_id: str | None = None + """Currently active model identifier""" + + reasoning_effort: str | None = None + """Reasoning effort level currently applied to the active model, when one is set. Reads + `Session.getReasoningEffort()` synchronously after `getSelectedModel()` resolves so the + two values are reported as a snapshot. + """ + + @staticmethod + def from_dict(obj: Any) -> 'CurrentModel': + assert isinstance(obj, dict) + context_tier = from_union([ModelCurrentContextTier, from_none], obj.get("contextTier")) + model_id = from_union([from_str, from_none], obj.get("modelId")) + reasoning_effort = from_union([from_str, from_none], obj.get("reasoningEffort")) + return CurrentModel(context_tier, model_id, reasoning_effort) + + def to_dict(self) -> dict: + result: dict = {} + if self.context_tier is not None: + result["contextTier"] = from_union([lambda x: to_enum(ModelCurrentContextTier, x), from_none], self.context_tier) + if self.model_id is not None: + result["modelId"] = from_union([from_str, from_none], self.model_id) + if self.reasoning_effort is not None: + result["reasoningEffort"] = from_union([from_str, from_none], self.reasoning_effort) + return result + @dataclass class DiscoveredMCPServer: """Schema for the `DiscoveredMcpServer` type.""" @@ -15391,7 +15402,7 @@ class ModelSwitchToRequest: model_id: str """Model identifier to switch to""" - context_tier: ContextTier | None = None + context_tier: ModelCurrentContextTier | None = None """Explicit context tier for the selected model. `"default"` / `"long_context"` pin the tier; `null` clears any previous explicit choice; `undefined` leaves the existing tier untouched. @@ -15409,7 +15420,7 @@ class ModelSwitchToRequest: def from_dict(obj: Any) -> 'ModelSwitchToRequest': assert isinstance(obj, dict) model_id = from_str(obj.get("modelId")) - context_tier = from_union([from_none, ContextTier], obj.get("contextTier")) + context_tier = from_union([ModelCurrentContextTier, from_none], obj.get("contextTier")) model_capabilities = from_union([ModelCapabilitiesOverride.from_dict, from_none], obj.get("modelCapabilities")) reasoning_effort = from_union([from_str, from_none], obj.get("reasoningEffort")) reasoning_summary = from_union([ReasoningSummary, from_none], obj.get("reasoningSummary")) @@ -15419,7 +15430,7 @@ def to_dict(self) -> dict: result: dict = {} result["modelId"] = from_str(self.model_id) if self.context_tier is not None: - result["contextTier"] = from_union([from_none, lambda x: to_enum(ContextTier, x)], self.context_tier) + result["contextTier"] = from_union([lambda x: to_enum(ModelCurrentContextTier, x), from_none], self.context_tier) if self.model_capabilities is not None: result["modelCapabilities"] = from_union([lambda x: to_class(ModelCapabilitiesOverride, x), from_none], self.model_capabilities) if self.reasoning_effort is not None: @@ -15839,6 +15850,7 @@ class RPC: model_capabilities_override_limits_vision: ModelCapabilitiesOverrideLimitsVision model_capabilities_override_supports: ModelCapabilitiesOverrideSupports model_capabilities_supports: ModelCapabilitiesSupports + model_current_context_tier: ModelCurrentContextTier model_list: ModelList model_list_request: ModelListRequest model_picker_category: ModelPickerCategory @@ -16424,6 +16436,7 @@ def from_dict(obj: Any) -> 'RPC': model_capabilities_override_limits_vision = ModelCapabilitiesOverrideLimitsVision.from_dict(obj.get("ModelCapabilitiesOverrideLimitsVision")) model_capabilities_override_supports = ModelCapabilitiesOverrideSupports.from_dict(obj.get("ModelCapabilitiesOverrideSupports")) model_capabilities_supports = ModelCapabilitiesSupports.from_dict(obj.get("ModelCapabilitiesSupports")) + model_current_context_tier = ModelCurrentContextTier(obj.get("ModelCurrentContextTier")) model_list = ModelList.from_dict(obj.get("ModelList")) model_list_request = ModelListRequest.from_dict(obj.get("ModelListRequest")) model_picker_category = ModelPickerCategory(obj.get("ModelPickerCategory")) @@ -16789,7 +16802,7 @@ def from_dict(obj: Any) -> 'RPC': session_context_info = from_union([SessionContextInfo.from_dict, from_none], obj.get("SessionContextInfo")) 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_get_quota_request, account_get_quota_result, account_quota_snapshot, agent_get_current_result, agent_info, agent_info_source, agent_list, 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, agent_select_request, agent_select_result, allow_all_permission_set_result, allow_all_permission_state, api_key_auth_info, auth_info, auth_info_type, canvas_action, canvas_action_invoke_request, canvas_action_invoke_result, canvas_close_request, canvas_host_context, canvas_host_context_capabilities, canvas_instance_availability, 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_session_context, command_list, commands_handle_pending_command_request, commands_handle_pending_command_result, commands_invoke_request, commands_list_request, commands_respond_to_queued_command_request, commands_respond_to_queued_command_result, connected_remote_session_metadata, connected_remote_session_metadata_kind, connected_remote_session_metadata_repository, connect_remote_session_params, connect_request, connect_result, content_filter_mode, 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, discovered_canvas, 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_result, execute_command_params, execute_command_result, extension, 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_terminal, external_tool_text_result_for_llm_content_text, filter_mapping, fleet_start_request, fleet_start_result, folder_trust_add_params, folder_trust_check_params, folder_trust_check_result, gh_cli_auth_info, handle_pending_tool_call_request, handle_pending_tool_call_result, history_abort_manual_compaction_result, history_cancel_background_compaction_result, history_compact_context_window, history_compact_request, history_compact_result, history_summarize_for_handoff_result, history_truncate_request, history_truncate_result, hmac_auth_info, installed_plugin, installed_plugin_source, installed_plugin_source_github, installed_plugin_source_local, installed_plugin_source_url, instructions_get_sources_result, instructions_sources, instructions_sources_location, instructions_sources_type, log_request, log_result, lsp_initialize_request, 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_disable_request, mcp_discover_request, mcp_discover_result, mcp_enable_request, mcp_execute_sampling_params, mcp_execute_sampling_request, mcp_execute_sampling_result, mcp_oauth_login_request, mcp_oauth_login_result, mcp_remove_git_hub_result, mcp_sampling_execution_action, mcp_sampling_execution_result, mcp_server, mcp_server_auth_config, mcp_server_auth_config_redirect_port, mcp_server_config, mcp_server_config_http, mcp_server_config_http_oauth_grant_type, mcp_server_config_http_type, mcp_server_config_stdio, mcp_server_list, mcp_set_env_value_mode_details, mcp_set_env_value_mode_params, mcp_set_env_value_mode_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_billing, 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_price_category, model_policy, model_policy_state, model_set_reasoning_effort_request, model_set_reasoning_effort_result, models_list_request, model_switch_to_request, model_switch_to_result, mode_set_request, name_get_result, name_set_auto_request, name_set_auto_result, name_set_request, open_canvas_instance, options_update_env_value_mode, 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_management, permission_decision_approve_for_location_approval_extension_permission_access, 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_management, permission_decision_approve_for_session_approval_extension_permission_access, 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_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_reject, permission_decision_request, 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_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_allow_all_request, 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_management, permissions_locations_add_tool_approval_details_extension_permission_access, 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_allow_all_request, permissions_set_allow_all_source, permissions_set_approve_all_request, permissions_set_approve_all_result, permissions_set_approve_all_source, 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_update_request, plugin, plugin_list, queued_command_handled, queued_command_not_handled, queued_command_result, queue_pending_items, queue_pending_items_kind, queue_pending_items_result, queue_remove_most_recent_result, register_event_interest_params, register_event_interest_result, release_event_interest_params, remote_enable_request, remote_enable_result, remote_notify_steerable_changed_request, remote_notify_steerable_changed_result, remote_session_connection_result, remote_session_mode, schedule_entry, schedule_list, schedule_stop_request, schedule_stop_result, secrets_add_filter_values_request, secrets_add_filter_values_result, send_agent_mode, send_attachment, send_attachment_blob, send_attachment_directory, send_attachment_file, send_attachment_file_line_range, send_attachment_github_reference, send_attachment_github_reference_type, send_attachment_selection, send_attachment_selection_details, send_attachment_selection_details_end, send_attachment_selection_details_start, send_mode, send_request, send_result, server_skill, server_skill_list, session_auth_status, session_bulk_delete_result, 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_stat_request, session_fs_stat_result, session_fs_write_file_request, session_installed_plugin, session_installed_plugin_source, session_installed_plugin_source_github, session_installed_plugin_source_local, session_installed_plugin_source_url, session_list, session_list_filter, session_load_deferred_repo_hooks_result, session_log_level, session_mcp_apps_call_tool_result, session_metadata, session_metadata_snapshot, session_mode, session_model_list, session_prune_result, sessions_bulk_delete_request, sessions_check_in_use_request, sessions_check_in_use_result, sessions_close_request, sessions_close_result, sessions_enrich_metadata_request, session_set_credentials_params, session_set_credentials_result, 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_event_file_path_request, sessions_get_event_file_path_result, sessions_get_last_for_context_request, sessions_get_last_for_context_result, sessions_get_persisted_remote_steerable_request, sessions_get_persisted_remote_steerable_result, session_sizes, sessions_list_request, sessions_load_deferred_repo_hooks_request, sessions_prune_old_request, 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, session_update_options_params, session_update_options_result, session_working_directory_context, session_working_directory_context_host_type, shell_exec_request, shell_exec_result, shell_kill_request, shell_kill_result, shell_kill_signal, shutdown_request, skill, skill_list, skills_config_set_disabled_skills_request, skills_disable_request, skills_discover_request, skills_enable_request, skills_get_invoked_result, skills_invoked_skill, skills_load_diagnostics, slash_command_agent_prompt_result, slash_command_completed_result, slash_command_info, slash_command_input, slash_command_input_completion, slash_command_invocation_result, slash_command_kind, slash_command_select_subcommand_option, slash_command_select_subcommand_result, slash_command_text_result, task_agent_info, task_agent_progress, 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, tools_get_current_metadata_result, tools_initialize_and_validate_result, tools_list_request, 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_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_user_input_request, ui_register_direct_auto_mode_switch_handler_result, ui_unregister_direct_auto_mode_switch_handler_request, ui_unregister_direct_auto_mode_switch_handler_result, ui_user_input_response, usage_get_metrics_result, 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, workspace_diff_file_change, workspace_diff_file_change_type, workspace_diff_mode, workspace_diff_result, workspaces_checkpoints, workspaces_create_file_request, workspaces_diff_request, workspaces_get_workspace_result, workspaces_list_checkpoints_result, workspaces_list_files_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, workspace_summary_host_type, workspaces_workspace_details_host_type, session_context_info, task_progress, workspace_summary) + return RPC(abort_request, abort_result, account_get_quota_request, account_get_quota_result, account_quota_snapshot, agent_get_current_result, agent_info, agent_info_source, agent_list, 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, agent_select_request, agent_select_result, allow_all_permission_set_result, allow_all_permission_state, api_key_auth_info, auth_info, auth_info_type, canvas_action, canvas_action_invoke_request, canvas_action_invoke_result, canvas_close_request, canvas_host_context, canvas_host_context_capabilities, canvas_instance_availability, 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_session_context, command_list, commands_handle_pending_command_request, commands_handle_pending_command_result, commands_invoke_request, commands_list_request, commands_respond_to_queued_command_request, commands_respond_to_queued_command_result, connected_remote_session_metadata, connected_remote_session_metadata_kind, connected_remote_session_metadata_repository, connect_remote_session_params, connect_request, connect_result, content_filter_mode, 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, discovered_canvas, 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_result, execute_command_params, execute_command_result, extension, 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_terminal, external_tool_text_result_for_llm_content_text, filter_mapping, fleet_start_request, fleet_start_result, folder_trust_add_params, folder_trust_check_params, folder_trust_check_result, gh_cli_auth_info, handle_pending_tool_call_request, handle_pending_tool_call_result, history_abort_manual_compaction_result, history_cancel_background_compaction_result, history_compact_context_window, history_compact_request, history_compact_result, history_summarize_for_handoff_result, history_truncate_request, history_truncate_result, hmac_auth_info, installed_plugin, installed_plugin_source, installed_plugin_source_github, installed_plugin_source_local, installed_plugin_source_url, instructions_get_sources_result, instructions_sources, instructions_sources_location, instructions_sources_type, log_request, log_result, lsp_initialize_request, 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_disable_request, mcp_discover_request, mcp_discover_result, mcp_enable_request, mcp_execute_sampling_params, mcp_execute_sampling_request, mcp_execute_sampling_result, mcp_oauth_login_request, mcp_oauth_login_result, mcp_remove_git_hub_result, mcp_sampling_execution_action, mcp_sampling_execution_result, mcp_server, mcp_server_auth_config, mcp_server_auth_config_redirect_port, mcp_server_config, mcp_server_config_http, mcp_server_config_http_oauth_grant_type, mcp_server_config_http_type, mcp_server_config_stdio, mcp_server_list, mcp_set_env_value_mode_details, mcp_set_env_value_mode_params, mcp_set_env_value_mode_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_billing, 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_current_context_tier, model_list, model_list_request, model_picker_category, model_picker_price_category, model_policy, model_policy_state, model_set_reasoning_effort_request, model_set_reasoning_effort_result, models_list_request, model_switch_to_request, model_switch_to_result, mode_set_request, name_get_result, name_set_auto_request, name_set_auto_result, name_set_request, open_canvas_instance, options_update_env_value_mode, 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_management, permission_decision_approve_for_location_approval_extension_permission_access, 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_management, permission_decision_approve_for_session_approval_extension_permission_access, 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_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_reject, permission_decision_request, 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_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_allow_all_request, 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_management, permissions_locations_add_tool_approval_details_extension_permission_access, 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_allow_all_request, permissions_set_allow_all_source, permissions_set_approve_all_request, permissions_set_approve_all_result, permissions_set_approve_all_source, 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_update_request, plugin, plugin_list, queued_command_handled, queued_command_not_handled, queued_command_result, queue_pending_items, queue_pending_items_kind, queue_pending_items_result, queue_remove_most_recent_result, register_event_interest_params, register_event_interest_result, release_event_interest_params, remote_enable_request, remote_enable_result, remote_notify_steerable_changed_request, remote_notify_steerable_changed_result, remote_session_connection_result, remote_session_mode, schedule_entry, schedule_list, schedule_stop_request, schedule_stop_result, secrets_add_filter_values_request, secrets_add_filter_values_result, send_agent_mode, send_attachment, send_attachment_blob, send_attachment_directory, send_attachment_file, send_attachment_file_line_range, send_attachment_github_reference, send_attachment_github_reference_type, send_attachment_selection, send_attachment_selection_details, send_attachment_selection_details_end, send_attachment_selection_details_start, send_mode, send_request, send_result, server_skill, server_skill_list, session_auth_status, session_bulk_delete_result, 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_stat_request, session_fs_stat_result, session_fs_write_file_request, session_installed_plugin, session_installed_plugin_source, session_installed_plugin_source_github, session_installed_plugin_source_local, session_installed_plugin_source_url, session_list, session_list_filter, session_load_deferred_repo_hooks_result, session_log_level, session_mcp_apps_call_tool_result, session_metadata, session_metadata_snapshot, session_mode, session_model_list, session_prune_result, sessions_bulk_delete_request, sessions_check_in_use_request, sessions_check_in_use_result, sessions_close_request, sessions_close_result, sessions_enrich_metadata_request, session_set_credentials_params, session_set_credentials_result, 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_event_file_path_request, sessions_get_event_file_path_result, sessions_get_last_for_context_request, sessions_get_last_for_context_result, sessions_get_persisted_remote_steerable_request, sessions_get_persisted_remote_steerable_result, session_sizes, sessions_list_request, sessions_load_deferred_repo_hooks_request, sessions_prune_old_request, 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, session_update_options_params, session_update_options_result, session_working_directory_context, session_working_directory_context_host_type, shell_exec_request, shell_exec_result, shell_kill_request, shell_kill_result, shell_kill_signal, shutdown_request, skill, skill_list, skills_config_set_disabled_skills_request, skills_disable_request, skills_discover_request, skills_enable_request, skills_get_invoked_result, skills_invoked_skill, skills_load_diagnostics, slash_command_agent_prompt_result, slash_command_completed_result, slash_command_info, slash_command_input, slash_command_input_completion, slash_command_invocation_result, slash_command_kind, slash_command_select_subcommand_option, slash_command_select_subcommand_result, slash_command_text_result, task_agent_info, task_agent_progress, 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, tools_get_current_metadata_result, tools_initialize_and_validate_result, tools_list_request, 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_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_user_input_request, ui_register_direct_auto_mode_switch_handler_result, ui_unregister_direct_auto_mode_switch_handler_request, ui_unregister_direct_auto_mode_switch_handler_result, ui_user_input_response, usage_get_metrics_result, 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, workspace_diff_file_change, workspace_diff_file_change_type, workspace_diff_mode, workspace_diff_result, workspaces_checkpoints, workspaces_create_file_request, workspaces_diff_request, workspaces_get_workspace_result, workspaces_list_checkpoints_result, workspaces_list_files_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, workspace_summary_host_type, workspaces_workspace_details_host_type, session_context_info, task_progress, workspace_summary) def to_dict(self) -> dict: result: dict = {} @@ -17009,6 +17022,7 @@ def to_dict(self) -> dict: result["ModelCapabilitiesOverrideLimitsVision"] = to_class(ModelCapabilitiesOverrideLimitsVision, self.model_capabilities_override_limits_vision) result["ModelCapabilitiesOverrideSupports"] = to_class(ModelCapabilitiesOverrideSupports, self.model_capabilities_override_supports) result["ModelCapabilitiesSupports"] = to_class(ModelCapabilitiesSupports, self.model_capabilities_supports) + result["ModelCurrentContextTier"] = to_enum(ModelCurrentContextTier, self.model_current_context_tier) result["ModelList"] = to_class(ModelList, self.model_list) result["ModelListRequest"] = to_class(ModelListRequest, self.model_list_request) result["ModelPickerCategory"] = to_enum(ModelPickerCategory, self.model_picker_category) @@ -17951,7 +17965,7 @@ def __init__(self, client: "JsonRpcClient", session_id: str): self._session_id = session_id async def get_current(self, *, timeout: float | None = None) -> CurrentModel: - "Gets the currently selected model for the session.\n\nReturns:\n The currently selected model and reasoning effort for the session." + "Gets the currently selected model for the session.\n\nReturns:\n The currently selected model, reasoning effort, and context tier for the session." return CurrentModel.from_dict(await self._client.request("session.model.getCurrent", {"sessionId": self._session_id}, **_timeout_kwargs(timeout))) async def switch_to(self, params: ModelSwitchToRequest, *, timeout: float | None = None) -> ModelSwitchToResult: diff --git a/rust/src/generated/api_types.rs b/rust/src/generated/api_types.rs index b1d2b0fd4..39157f858 100644 --- a/rust/src/generated/api_types.rs +++ b/rust/src/generated/api_types.rs @@ -1783,7 +1783,7 @@ pub struct CopilotApiTokenAuthInfo { pub r#type: CopilotApiTokenAuthInfoType, } -/// The currently selected model and reasoning effort for the session. +/// The currently selected model, reasoning effort, and context tier for the session. /// ///
/// @@ -1794,6 +1794,9 @@ pub struct CopilotApiTokenAuthInfo { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CurrentModel { + /// Context tier currently pinned for the session, when one is set. Reflects `Session.getContextTier()`, restored from the session journal on resume. + #[serde(skip_serializing_if = "Option::is_none")] + pub context_tier: Option, /// Currently active model identifier #[serde(skip_serializing_if = "Option::is_none")] pub model_id: Option, @@ -10101,7 +10104,7 @@ pub struct SessionModelGetCurrentParams { pub session_id: SessionId, } -/// The currently selected model and reasoning effort for the session. +/// The currently selected model, reasoning effort, and context tier for the session. /// ///
/// @@ -10112,6 +10115,9 @@ pub struct SessionModelGetCurrentParams { #[derive(Debug, Clone, Default, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct SessionModelGetCurrentResult { + /// Context tier currently pinned for the session, when one is set. Reflects `Session.getContextTier()`, restored from the session journal on resume. + #[serde(skip_serializing_if = "Option::is_none")] + pub context_tier: Option, /// Currently active model identifier #[serde(skip_serializing_if = "Option::is_none")] pub model_id: Option, @@ -13149,6 +13155,28 @@ pub enum CopilotApiTokenAuthInfoType { CopilotApiToken, } +/// Context tier currently pinned for the session, when one is set. Reflects `Session.getContextTier()`, restored from the session journal on resume. +/// +///
+/// +/// **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, PartialEq, Eq, Serialize, Deserialize)] +pub enum ModelCurrentContextTier { + /// Use the model's default context window. + #[serde(rename = "default")] + Default, + /// Pin the session to the long-context tier when supported. + #[serde(rename = "long_context")] + LongContext, + /// Unknown variant for forward compatibility. + #[default] + #[serde(other)] + Unknown, +} + /// Server transport type: stdio, http, sse (deprecated), or memory #[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] pub enum DiscoveredMcpServerType { diff --git a/rust/src/generated/rpc.rs b/rust/src/generated/rpc.rs index 25726978e..422bf7b83 100644 --- a/rust/src/generated/rpc.rs +++ b/rust/src/generated/rpc.rs @@ -3468,7 +3468,7 @@ impl<'a> SessionRpcModel<'a> { /// /// # Returns /// - /// The currently selected model and reasoning effort for the session. + /// The currently selected model, reasoning effort, and context tier for the session. /// ///
/// diff --git a/test/harness/package-lock.json b/test/harness/package-lock.json index 621f6c737..818e62bf0 100644 --- a/test/harness/package-lock.json +++ b/test/harness/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "ISC", "devDependencies": { - "@github/copilot": "^1.0.56-1", + "@github/copilot": "^1.0.56-2", "@modelcontextprotocol/sdk": "^1.26.0", "@types/node": "^25.3.3", "@types/node-forge": "^1.3.14", @@ -464,9 +464,9 @@ } }, "node_modules/@github/copilot": { - "version": "1.0.56-1", - "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.56-1.tgz", - "integrity": "sha512-9VGwX6kcUfm8NHTQaUEtmR6qA73jyDXwtBSmd8ia3OpadEpqc5V65isv37zEtGDv33PPA4ntvoEG0CK4j2oXEg==", + "version": "1.0.56-2", + "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.56-2.tgz", + "integrity": "sha512-Dpue7utF6PzGS4tPrG3pRXL3d1lMJHFFT8PJegljn7vg64LAbjhk5yNgBXbMg/XbObu755SJTNtbEL/aSdrGNg==", "dev": true, "license": "SEE LICENSE IN LICENSE.md", "dependencies": { @@ -476,20 +476,20 @@ "copilot": "npm-loader.js" }, "optionalDependencies": { - "@github/copilot-darwin-arm64": "1.0.56-1", - "@github/copilot-darwin-x64": "1.0.56-1", - "@github/copilot-linux-arm64": "1.0.56-1", - "@github/copilot-linux-x64": "1.0.56-1", - "@github/copilot-linuxmusl-arm64": "1.0.56-1", - "@github/copilot-linuxmusl-x64": "1.0.56-1", - "@github/copilot-win32-arm64": "1.0.56-1", - "@github/copilot-win32-x64": "1.0.56-1" + "@github/copilot-darwin-arm64": "1.0.56-2", + "@github/copilot-darwin-x64": "1.0.56-2", + "@github/copilot-linux-arm64": "1.0.56-2", + "@github/copilot-linux-x64": "1.0.56-2", + "@github/copilot-linuxmusl-arm64": "1.0.56-2", + "@github/copilot-linuxmusl-x64": "1.0.56-2", + "@github/copilot-win32-arm64": "1.0.56-2", + "@github/copilot-win32-x64": "1.0.56-2" } }, "node_modules/@github/copilot-darwin-arm64": { - "version": "1.0.56-1", - "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.56-1.tgz", - "integrity": "sha512-GmdinjTXPKe7CBGC6pfFEOcqE3cN7craTo4muMPIRzDWnnkPwkIT05z74fgLc+r0/+MtllCysXkQVLixHEmyQw==", + "version": "1.0.56-2", + "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.56-2.tgz", + "integrity": "sha512-RHJNhdPSkdPc/nabWVess7BfEda7xfwBQ2X5vq9nq4VjqTbvUHBFwTt792q00TE4DZR/UsWr0sJKJkLcRvTltQ==", "cpu": [ "arm64" ], @@ -504,9 +504,9 @@ } }, "node_modules/@github/copilot-darwin-x64": { - "version": "1.0.56-1", - "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.56-1.tgz", - "integrity": "sha512-WfkSnB0MxmMxV58yqF8O0GkBzXCCKy3H6s13Xrqfvotmk9KNriVzCHmUnnMTve4XeOGCGrOqU2Hy2VNUu8Cj1A==", + "version": "1.0.56-2", + "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.56-2.tgz", + "integrity": "sha512-EqBtGH1I2rX5TzSJ+L9O22SQ8jlSsn1YJeFS6RTtYU+NhC6xLajjfTutkA5DZOr3eQgmeceit/4NDqEdjwANEA==", "cpu": [ "x64" ], @@ -521,9 +521,9 @@ } }, "node_modules/@github/copilot-linux-arm64": { - "version": "1.0.56-1", - "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.56-1.tgz", - "integrity": "sha512-fNwcdnPG8N01n9MFl4xKswFsO4ZjkckM5D7UqgtO4aiJYGQYmw+Viq0MFzKD4G8Nzl5k6qR1pDnvWciVAcYDag==", + "version": "1.0.56-2", + "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.56-2.tgz", + "integrity": "sha512-FmjODKft2tmY5B0B94RDek/TR3QtdDTT7W/+lqkiosnUyLhsNtmzKaDYpiQsCBee68YUuB1umecqiTL1qMo3cw==", "cpu": [ "arm64" ], @@ -538,9 +538,9 @@ } }, "node_modules/@github/copilot-linux-x64": { - "version": "1.0.56-1", - "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.56-1.tgz", - "integrity": "sha512-Ow2dQSpuJXHmnw4RBitt/RiAMxsG9Mu5x0MX7ueNzhK1xfuGp7m8yUikbJNZQbBq2KZB2OlwGDKx2KtEBxtbig==", + "version": "1.0.56-2", + "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.56-2.tgz", + "integrity": "sha512-aqF4k6mDLU1OXdaAb3gBIRCgdrlXX+1FBtcoLKPMjzVfkA2abEZ/vuYfZWS7ZaxG/aCOScp8D+/E+RaYHsGYOw==", "cpu": [ "x64" ], @@ -555,9 +555,9 @@ } }, "node_modules/@github/copilot-linuxmusl-arm64": { - "version": "1.0.56-1", - "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-arm64/-/copilot-linuxmusl-arm64-1.0.56-1.tgz", - "integrity": "sha512-vZQAF+QCa+UVND6NNo/lexc3bLWLYMP63aY5peh5BIYrPLv0Ylf5+VSJoaxBC1qFrjLmFaKo4KRWtmh8Mqx6Lw==", + "version": "1.0.56-2", + "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-arm64/-/copilot-linuxmusl-arm64-1.0.56-2.tgz", + "integrity": "sha512-+CztOiU7/nlNLX50jcpOMreMrDr7+DFnq3OV59doDd9UgqTdpjEnZKjkgHpxid117rYF/95cN5EYWD7ermOcjA==", "cpu": [ "arm64" ], @@ -572,9 +572,9 @@ } }, "node_modules/@github/copilot-linuxmusl-x64": { - "version": "1.0.56-1", - "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-x64/-/copilot-linuxmusl-x64-1.0.56-1.tgz", - "integrity": "sha512-EEubP5DRWX/w2CPuZr7aQdfd57mGQ8gDNXOLNds+94Qp2UQD0/wJxF+FrU9YZSWPhcjG/BmXxnw/D7xwby53Nw==", + "version": "1.0.56-2", + "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-x64/-/copilot-linuxmusl-x64-1.0.56-2.tgz", + "integrity": "sha512-FuBYfN2dX2a5fSEzPImtX6hjtjwiL0kutrq4RuvHYxUu0FR0JRB4vfN2mQ/KN4X5DZgaGkPQk19hkoEgd1tmdg==", "cpu": [ "x64" ], @@ -589,9 +589,9 @@ } }, "node_modules/@github/copilot-win32-arm64": { - "version": "1.0.56-1", - "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.56-1.tgz", - "integrity": "sha512-PHr9xxlbh/UMYP0XL7UnPhgPdQyGbA6lJ7yqxoy0JO017c9o62Bhcd39gCuVPlkYurxeFzAdPnlbDVxSKBfNKQ==", + "version": "1.0.56-2", + "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.56-2.tgz", + "integrity": "sha512-mKTzS9HrH+wvOmIgIaRUs+l89o51P7ACVk4P/o1UEWGxDblTxwRZGL+cRBhqNltIxY+8XVIAEwg6CzE+sTH5Hw==", "cpu": [ "arm64" ], @@ -606,9 +606,9 @@ } }, "node_modules/@github/copilot-win32-x64": { - "version": "1.0.56-1", - "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.56-1.tgz", - "integrity": "sha512-EWMfn0EQhUYOpwG+VaLif9ZLBt3D9mZ0DFmxVSM2DSnIMRlpC23hAnwY9n1R6zAvwQY20XMLIJ4d0LW4mUX9Ag==", + "version": "1.0.56-2", + "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.56-2.tgz", + "integrity": "sha512-tacHeeqNiLawmlUpturke10I9d6kkREqTcHGkGRy/MEwrio7A77L45j/IegRcQNjLwHP62R2+5GmNFx6BRwx9w==", "cpu": [ "x64" ], diff --git a/test/harness/package.json b/test/harness/package.json index 9c7f5344a..fd605ead4 100644 --- a/test/harness/package.json +++ b/test/harness/package.json @@ -11,7 +11,7 @@ "test": "vitest run" }, "devDependencies": { - "@github/copilot": "^1.0.56-1", + "@github/copilot": "^1.0.56-2", "@modelcontextprotocol/sdk": "^1.26.0", "@types/node": "^25.3.3", "@types/node-forge": "^1.3.14", From c450bc9b7ee324fff1be1aefb3d1717e86b42c99 Mon Sep 17 00:00:00 2001 From: Dmytro Struk <13853051+dmytrostruk@users.noreply.github.com> Date: Fri, 29 May 2026 11:42:41 -0700 Subject: [PATCH 2/4] Added context tier property --- dotnet/src/Client.cs | 4 ++++ dotnet/src/Types.cs | 7 +++++++ go/client.go | 2 ++ go/types.go | 8 ++++++++ nodejs/src/client.ts | 2 ++ nodejs/src/types.ts | 12 ++++++++++++ python/copilot/client.py | 11 +++++++++++ python/copilot/session.py | 1 + rust/src/types.rs | 25 +++++++++++++++++++++++++ rust/src/wire.rs | 4 ++++ 10 files changed, 76 insertions(+) diff --git a/dotnet/src/Client.cs b/dotnet/src/Client.cs index 03f43c9a2..48644f04f 100644 --- a/dotnet/src/Client.cs +++ b/dotnet/src/Client.cs @@ -889,6 +889,7 @@ public async Task CreateSessionAsync(SessionConfig config, Cance config.ClientName, config.ReasoningEffort, config.ReasoningSummary, + config.ContextTier, config.Tools?.Select(ToolDefinition.FromAIFunction).ToList(), wireSystemMessage, toolFilter.AvailableTools, @@ -1082,6 +1083,7 @@ public async Task ResumeSessionAsync(string sessionId, ResumeSes config.Model, config.ReasoningEffort, config.ReasoningSummary, + config.ContextTier, config.Tools?.Select(ToolDefinition.FromAIFunction).ToList(), wireSystemMessage, toolFilter.AvailableTools, @@ -2272,6 +2274,7 @@ internal record CreateSessionRequest( string? ClientName, string? ReasoningEffort, ReasoningSummary? ReasoningSummary, + string? ContextTier, IList? Tools, SystemMessageConfig? SystemMessage, IList? AvailableTools, @@ -2356,6 +2359,7 @@ internal record ResumeSessionRequest( string? Model, string? ReasoningEffort, ReasoningSummary? ReasoningSummary, + string? ContextTier, IList? Tools, SystemMessageConfig? SystemMessage, IList? AvailableTools, diff --git a/dotnet/src/Types.cs b/dotnet/src/Types.cs index 2e1a217b3..d3c2b3322 100644 --- a/dotnet/src/Types.cs +++ b/dotnet/src/Types.cs @@ -2452,6 +2452,7 @@ protected SessionConfigBase(SessionConfigBase? other) ManageScheduleEnabled = other.ManageScheduleEnabled; ReasoningEffort = other.ReasoningEffort; ReasoningSummary = other.ReasoningSummary; + ContextTier = other.ContextTier; CreateSessionFsProvider = other.CreateSessionFsProvider; GitHubToken = other.GitHubToken; RemoteSession = other.RemoteSession; @@ -2493,6 +2494,12 @@ protected SessionConfigBase(SessionConfigBase? other) /// public ReasoningSummary? ReasoningSummary { get; set; } + /// + /// Context window tier for models that support it. + /// Valid values: "default", "long_context". + /// + public string? ContextTier { get; set; } + /// Per-property overrides for model capabilities, deep-merged over runtime defaults. public ModelCapabilitiesOverride? ModelCapabilities { get; set; } diff --git a/go/client.go b/go/client.go index 11c7e6234..cfdd25adc 100644 --- a/go/client.go +++ b/go/client.go @@ -605,6 +605,7 @@ func (c *Client) CreateSession(ctx context.Context, config *SessionConfig) (*Ses req.ClientName = config.ClientName req.ReasoningEffort = config.ReasoningEffort req.ReasoningSummary = config.ReasoningSummary + req.ContextTier = config.ContextTier req.ConfigDir = config.ConfigDirectory if config.EnableConfigDiscovery { req.EnableConfigDiscovery = Bool(true) @@ -916,6 +917,7 @@ func (c *Client) ResumeSessionWithOptions(ctx context.Context, sessionID string, req.Model = config.Model req.ReasoningEffort = config.ReasoningEffort req.ReasoningSummary = config.ReasoningSummary + req.ContextTier = config.ContextTier systemMessage := c.systemMessageForMode(config.SystemMessage) wireSystemMessage, transformCallbacks := extractTransformCallbacks(systemMessage) req.SystemMessage = wireSystemMessage diff --git a/go/types.go b/go/types.go index 30216adf0..9663e5326 100644 --- a/go/types.go +++ b/go/types.go @@ -894,6 +894,9 @@ type SessionConfig struct { // ReasoningSummary mode for models that support configurable reasoning summaries. // Use ReasoningSummaryNone to suppress summary output regardless of whether reasoning is enabled. ReasoningSummary ReasoningSummary + // ContextTier pins the session to a context window tier for models that support it. + // Valid values: "default", "long_context". + ContextTier string // ConfigDirectory overrides the default configuration directory location. // When specified, the session will use this directory for storing config and state. ConfigDirectory string @@ -1288,6 +1291,9 @@ type ResumeSessionConfig struct { // ReasoningSummary mode for models that support configurable reasoning summaries. // Use ReasoningSummaryNone to suppress summary output regardless of whether reasoning is enabled. ReasoningSummary ReasoningSummary + // ContextTier pins the session to a context window tier for models that support it. + // Valid values: "default", "long_context". + ContextTier string // OnPermissionRequest is an optional handler for permission requests from the server. // When nil, permission requests are surfaced as events and left pending for the // consumer to resolve via pending permission RPCs. @@ -1645,6 +1651,7 @@ type createSessionRequest struct { ClientName string `json:"clientName,omitempty"` ReasoningEffort string `json:"reasoningEffort,omitempty"` ReasoningSummary ReasoningSummary `json:"reasoningSummary,omitempty"` + ContextTier string `json:"contextTier,omitempty"` Tools []Tool `json:"tools,omitempty"` SystemMessage *SystemMessageConfig `json:"systemMessage,omitempty"` AvailableTools []string `json:"availableTools"` @@ -1721,6 +1728,7 @@ type resumeSessionRequest struct { Model string `json:"model,omitempty"` ReasoningEffort string `json:"reasoningEffort,omitempty"` ReasoningSummary ReasoningSummary `json:"reasoningSummary,omitempty"` + ContextTier string `json:"contextTier,omitempty"` Tools []Tool `json:"tools,omitempty"` SystemMessage *SystemMessageConfig `json:"systemMessage,omitempty"` AvailableTools []string `json:"availableTools"` diff --git a/nodejs/src/client.ts b/nodejs/src/client.ts index 5ee36b78b..46596416a 100644 --- a/nodejs/src/client.ts +++ b/nodejs/src/client.ts @@ -1100,6 +1100,7 @@ export class CopilotClient { clientName: config.clientName, reasoningEffort: config.reasoningEffort, reasoningSummary: config.reasoningSummary, + contextTier: config.contextTier, tools: config.tools?.map((tool) => ({ name: tool.name, description: tool.description, @@ -1279,6 +1280,7 @@ export class CopilotClient { model: config.model, reasoningEffort: config.reasoningEffort, reasoningSummary: config.reasoningSummary, + contextTier: config.contextTier, systemMessage: wireSystemMessage, availableTools: toolFilterOptions.availableTools, excludedTools: toolFilterOptions.excludedTools, diff --git a/nodejs/src/types.ts b/nodejs/src/types.ts index b6ce9b774..da9af4ed8 100644 --- a/nodejs/src/types.ts +++ b/nodejs/src/types.ts @@ -1540,6 +1540,12 @@ export interface LargeToolOutputConfig { */ export type ReasoningEffort = "low" | "medium" | "high" | "xhigh"; +/** + * Context window tier for the session. "long_context" pins the session to the + * long-context tier when the selected model supports it. + */ +export type ContextTier = "default" | "long_context"; + /** * Stable extension identity for session participants that provide canvases. */ @@ -1580,6 +1586,12 @@ export interface SessionConfigBase { */ reasoningSummary?: ReasoningSummary; + /** + * Context window tier for models that support it. Use "long_context" to pin + * the session to the long-context tier; omit or use "default" otherwise. + */ + contextTier?: ContextTier; + /** Per-property overrides for model capabilities, deep-merged over runtime defaults. */ modelCapabilities?: ModelCapabilitiesOverride; diff --git a/python/copilot/client.py b/python/copilot/client.py index 66c56a595..d25dd514e 100644 --- a/python/copilot/client.py +++ b/python/copilot/client.py @@ -77,6 +77,7 @@ from .session import ( AutoModeSwitchHandler, CommandDefinition, + ContextTier, CopilotSession, CreateSessionFsHandler, CustomAgentConfig, @@ -1562,6 +1563,7 @@ async def create_session( client_name: str | None = None, reasoning_effort: ReasoningEffort | None = None, reasoning_summary: ReasoningSummary | None = None, + context_tier: ContextTier | None = None, tools: list[Tool] | None = None, system_message: SystemMessageConfig | None = None, available_tools: list[str] | ToolSet | None = None, @@ -1633,6 +1635,8 @@ async def create_session( reasoning_summary: Reasoning summary mode for supported models. Use ``"none"`` to suppress summary output regardless of whether reasoning is enabled. + context_tier: Context window tier for models that support it. Use + ``"long_context"`` to pin the session to the long-context tier. tools: Custom tools to register with the session. system_message: System message configuration. available_tools: Allowlist of tools to enable. When specified, only @@ -1779,6 +1783,8 @@ async def create_session( payload["reasoningEffort"] = reasoning_effort if reasoning_summary: payload["reasoningSummary"] = reasoning_summary + if context_tier: + payload["contextTier"] = context_tier if tool_defs: payload["tools"] = tool_defs @@ -2123,6 +2129,7 @@ async def resume_session( client_name: str | None = None, reasoning_effort: ReasoningEffort | None = None, reasoning_summary: ReasoningSummary | None = None, + context_tier: ContextTier | None = None, tools: list[Tool] | None = None, system_message: SystemMessageConfig | None = None, available_tools: list[str] | ToolSet | None = None, @@ -2195,6 +2202,8 @@ async def resume_session( reasoning_summary: Reasoning summary mode for supported models. Use ``"none"`` to suppress summary output regardless of whether reasoning is enabled. + context_tier: Context window tier for models that support it. Use + ``"long_context"`` to pin the session to the long-context tier. tools: Custom tools to register with the session. system_message: System message configuration. available_tools: Allowlist of tools to enable. When specified, only @@ -2342,6 +2351,8 @@ async def resume_session( payload["reasoningEffort"] = reasoning_effort if reasoning_summary: payload["reasoningSummary"] = reasoning_summary + if context_tier: + payload["contextTier"] = context_tier if tool_defs: payload["tools"] = tool_defs wire_system_message, transform_callbacks = _extract_transform_callbacks(system_message) diff --git a/python/copilot/session.py b/python/copilot/session.py index 5aac18bfa..f9bbb24c3 100644 --- a/python/copilot/session.py +++ b/python/copilot/session.py @@ -91,6 +91,7 @@ ReasoningEffort = Literal["low", "medium", "high", "xhigh"] ReasoningSummary = Literal["none", "concise", "detailed"] +ContextTier = Literal["default", "long_context"] SessionFsConventions = Literal["posix", "windows"] diff --git a/rust/src/types.rs b/rust/src/types.rs index a0118e4b2..706bc3ad3 100644 --- a/rust/src/types.rs +++ b/rust/src/types.rs @@ -1157,6 +1157,9 @@ pub struct SessionConfig { /// reasoning summaries. Use [`ReasoningSummary::None`] to suppress /// summary output regardless of whether reasoning is enabled. pub reasoning_summary: Option, + /// Context window tier for models that support it. Use `"long_context"` + /// to pin the session to the long-context tier. + pub context_tier: Option, /// Enable streaming token deltas via `assistant.message_delta` events. pub streaming: Option, /// Custom system message configuration. @@ -1370,6 +1373,7 @@ impl std::fmt::Debug for SessionConfig { .field("client_name", &self.client_name) .field("reasoning_effort", &self.reasoning_effort) .field("reasoning_summary", &self.reasoning_summary) + .field("context_tier", &self.context_tier) .field("streaming", &self.streaming) .field("system_message", &self.system_message) .field("tools", &self.tools) @@ -1482,6 +1486,7 @@ impl Default for SessionConfig { client_name: None, reasoning_effort: None, reasoning_summary: None, + context_tier: None, streaming: None, system_message: None, tools: None, @@ -1616,6 +1621,7 @@ impl SessionConfig { client_name: self.client_name, reasoning_effort: self.reasoning_effort, reasoning_summary: self.reasoning_summary, + context_tier: self.context_tier, streaming: self.streaming, system_message: self.system_message, tools: self.tools, @@ -1815,6 +1821,12 @@ impl SessionConfig { self } + /// Set the context window tier (e.g. `"default"`, `"long_context"`). + pub fn with_context_tier(mut self, tier: impl Into) -> Self { + self.context_tier = Some(tier.into()); + self + } + /// Enable streaming token deltas via `assistant.message_delta` events. pub fn with_streaming(mut self, streaming: bool) -> Self { self.streaming = Some(streaming); @@ -2163,6 +2175,9 @@ pub struct ResumeSessionConfig { /// [`ReasoningSummary::None`] to suppress summary output regardless of /// whether reasoning is enabled. pub reasoning_summary: Option, + /// Context window tier to apply after resuming the session. Use + /// `"long_context"` to pin the session to the long-context tier. + pub context_tier: Option, /// Enable streaming token deltas. pub streaming: Option, /// Re-supply the system message so the agent retains workspace context @@ -2319,6 +2334,7 @@ impl std::fmt::Debug for ResumeSessionConfig { .field("client_name", &self.client_name) .field("reasoning_effort", &self.reasoning_effort) .field("reasoning_summary", &self.reasoning_summary) + .field("context_tier", &self.context_tier) .field("streaming", &self.streaming) .field("system_message", &self.system_message) .field("tools", &self.tools) @@ -2469,6 +2485,7 @@ impl ResumeSessionConfig { client_name: self.client_name, reasoning_effort: self.reasoning_effort, reasoning_summary: self.reasoning_summary, + context_tier: self.context_tier, streaming: self.streaming, system_message: self.system_message, tools: self.tools, @@ -2549,6 +2566,7 @@ impl ResumeSessionConfig { client_name: None, reasoning_effort: None, reasoning_summary: None, + context_tier: None, streaming: None, system_message: None, tools: None, @@ -2715,6 +2733,13 @@ impl ResumeSessionConfig { self } + /// Set the context window tier to apply on resume (e.g. `"default"`, + /// `"long_context"`). + pub fn with_context_tier(mut self, tier: impl Into) -> Self { + self.context_tier = Some(tier.into()); + self + } + /// Enable streaming token deltas via `assistant.message_delta` events. pub fn with_streaming(mut self, streaming: bool) -> Self { self.streaming = Some(streaming); diff --git a/rust/src/wire.rs b/rust/src/wire.rs index 05f44aabf..02ae1a92d 100644 --- a/rust/src/wire.rs +++ b/rust/src/wire.rs @@ -55,6 +55,8 @@ pub(crate) struct SessionCreateWire { #[serde(skip_serializing_if = "Option::is_none")] pub reasoning_summary: Option, #[serde(skip_serializing_if = "Option::is_none")] + pub context_tier: Option, + #[serde(skip_serializing_if = "Option::is_none")] pub streaming: Option, #[serde(skip_serializing_if = "Option::is_none")] pub system_message: Option, @@ -157,6 +159,8 @@ pub(crate) struct SessionResumeWire { #[serde(skip_serializing_if = "Option::is_none")] pub reasoning_summary: Option, #[serde(skip_serializing_if = "Option::is_none")] + pub context_tier: Option, + #[serde(skip_serializing_if = "Option::is_none")] pub streaming: Option, #[serde(skip_serializing_if = "Option::is_none")] pub system_message: Option, From 88346236105252e31a73331f721ca08b448a2efb Mon Sep 17 00:00:00 2001 From: Dmytro Struk <13853051+dmytrostruk@users.noreply.github.com> Date: Fri, 29 May 2026 11:49:20 -0700 Subject: [PATCH 3/4] Tests --- dotnet/test/Unit/CloneTests.cs | 15 +++++++++++++++ go/client_test.go | 32 ++++++++++++++++++++++++++++++++ nodejs/test/client.test.ts | 32 ++++++++++++++++++++++++++++++++ python/test_client.py | 33 +++++++++++++++++++++++++++++++++ rust/src/types.rs | 4 ++++ 5 files changed, 116 insertions(+) diff --git a/dotnet/test/Unit/CloneTests.cs b/dotnet/test/Unit/CloneTests.cs index 3870465eb..f34056b97 100644 --- a/dotnet/test/Unit/CloneTests.cs +++ b/dotnet/test/Unit/CloneTests.cs @@ -69,6 +69,7 @@ public void SessionConfig_Clone_CopiesAllProperties() Model = "gpt-4", ReasoningEffort = "high", ReasoningSummary = ReasoningSummary.Detailed, + ContextTier = "long_context", ConfigDirectory = "/config", AvailableTools = ["tool1", "tool2"], ExcludedTools = ["tool3"], @@ -107,6 +108,7 @@ public void SessionConfig_Clone_CopiesAllProperties() Assert.Equal(original.Model, clone.Model); Assert.Equal(original.ReasoningEffort, clone.ReasoningEffort); Assert.Equal(original.ReasoningSummary, clone.ReasoningSummary); + Assert.Equal(original.ContextTier, clone.ContextTier); Assert.Equal(original.ConfigDirectory, clone.ConfigDirectory); Assert.Equal(original.AvailableTools, clone.AvailableTools); Assert.Equal(original.ExcludedTools, clone.ExcludedTools); @@ -379,6 +381,19 @@ public void ResumeSessionConfig_Clone_CopiesReasoningSummary() Assert.Equal(original.ReasoningSummary, clone.ReasoningSummary); } + [Fact] + public void ResumeSessionConfig_Clone_CopiesContextTier() + { + var original = new ResumeSessionConfig + { + ContextTier = "long_context", + }; + + var clone = original.Clone(); + + Assert.Equal(original.ContextTier, clone.ContextTier); + } + [Fact] public void ResumeSessionConfig_Clone_CopiesPluginDirectoriesAndLargeOutput() { diff --git a/go/client_test.go b/go/client_test.go index 012084701..e8ca4f06e 100644 --- a/go/client_test.go +++ b/go/client_test.go @@ -434,6 +434,38 @@ func TestSessionRequests_ReasoningSummary(t *testing.T) { }) } +func TestSessionRequests_ContextTier(t *testing.T) { + t.Run("create includes contextTier in JSON when set", func(t *testing.T) { + req := createSessionRequest{ContextTier: "long_context"} + 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) + } + if m["contextTier"] != "long_context" { + t.Errorf("Expected contextTier to be 'long_context', got %v", m["contextTier"]) + } + }) + + t.Run("resume includes contextTier in JSON when set", func(t *testing.T) { + req := resumeSessionRequest{SessionID: "s1", ContextTier: "default"} + 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) + } + if m["contextTier"] != "default" { + t.Errorf("Expected contextTier to be 'default', got %v", m["contextTier"]) + } + }) +} + func TestSessionRequests_PluginDirectoriesAndLargeOutput(t *testing.T) { pluginDirs := []string{"/tmp/plugins/a", "/tmp/plugins/b"} enabled := true diff --git a/nodejs/test/client.test.ts b/nodejs/test/client.test.ts index 0a22e6b6c..3a1e83460 100644 --- a/nodejs/test/client.test.ts +++ b/nodejs/test/client.test.ts @@ -138,6 +138,38 @@ describe("CopilotClient", () => { expect(resumePayload.reasoningSummary).toBe("none"); }); + it("forwards contextTier in session.create and session.resume", async () => { + const client = new CopilotClient(); + await client.start(); + onTestFinished(() => client.forceStop()); + + const spy = vi + .spyOn((client as any).connection!, "sendRequest") + .mockImplementation(async (method: string, params: any) => { + if (method === "session.create") return { sessionId: params.sessionId }; + if (method === "session.resume") return { sessionId: params.sessionId }; + throw new Error(`Unexpected method: ${method}`); + }); + + const session = await client.createSession({ + onPermissionRequest: approveAll, + contextTier: "long_context", + }); + await client.resumeSession(session.sessionId, { + onPermissionRequest: approveAll, + contextTier: "default", + }); + + const createPayload = spy.mock.calls.find( + ([method]) => method === "session.create" + )![1] as any; + const resumePayload = spy.mock.calls.find( + ([method]) => method === "session.resume" + )![1] as any; + expect(createPayload.contextTier).toBe("long_context"); + expect(resumePayload.contextTier).toBe("default"); + }); + it("forwards pluginDirectories and largeOutput in session.create and session.resume", async () => { const client = new CopilotClient(); await client.start(); diff --git a/python/test_client.py b/python/test_client.py index 76823b34e..b1c687204 100644 --- a/python/test_client.py +++ b/python/test_client.py @@ -137,6 +137,39 @@ async def mock_request(method, params, **kwargs): finally: await client.force_stop() + @pytest.mark.asyncio + async def test_create_and_resume_session_forward_context_tier(self): + client = CopilotClient(connection=RuntimeConnection.for_stdio(path=CLI_PATH)) + await client.start() + try: + captured = {} + + async def mock_request(method, params, **kwargs): + captured[method] = params + if method in ("session.create", "session.resume"): + result = {"sessionId": params.get("sessionId") or "session-1"} + callback = kwargs.get("on_response_inline") + if callback is not None: + callback(result) + return result + return {} + + client._client.request = mock_request + session = await client.create_session( + on_permission_request=PermissionHandler.approve_all, + context_tier="long_context", + ) + await client.resume_session( + session.session_id, + on_permission_request=PermissionHandler.approve_all, + context_tier="default", + ) + + assert captured["session.create"]["contextTier"] == "long_context" + assert captured["session.resume"]["contextTier"] == "default" + finally: + await client.force_stop() + @pytest.mark.asyncio async def test_create_and_resume_session_forward_plugin_directories_and_large_output(self): client = CopilotClient(connection=RuntimeConnection.for_stdio(path=CLI_PATH)) diff --git a/rust/src/types.rs b/rust/src/types.rs index 706bc3ad3..3bb7d5e9a 100644 --- a/rust/src/types.rs +++ b/rust/src/types.rs @@ -4576,6 +4576,7 @@ mod tests { .with_client_name("test-app") .with_reasoning_effort("medium") .with_reasoning_summary(ReasoningSummary::Concise) + .with_context_tier("long_context") .with_streaming(true) .with_tools([Tool::new("greet")]) .with_available_tools(["bash", "view"]) @@ -4599,6 +4600,7 @@ mod tests { assert_eq!(cfg.client_name.as_deref(), Some("test-app")); assert_eq!(cfg.reasoning_effort.as_deref(), Some("medium")); assert_eq!(cfg.reasoning_summary, Some(ReasoningSummary::Concise)); + assert_eq!(cfg.context_tier.as_deref(), Some("long_context")); assert_eq!(cfg.streaming, Some(true)); assert_eq!(cfg.tools.as_ref().map(|t| t.len()), Some(1)); assert_eq!( @@ -4640,6 +4642,7 @@ mod tests { let cfg = ResumeSessionConfig::new(SessionId::from("sess-2")) .with_client_name("test-app") .with_reasoning_summary(ReasoningSummary::None) + .with_context_tier("default") .with_streaming(true) .with_tools([Tool::new("greet")]) .with_available_tools(["bash", "view"]) @@ -4663,6 +4666,7 @@ mod tests { assert_eq!(cfg.session_id.as_str(), "sess-2"); assert_eq!(cfg.client_name.as_deref(), Some("test-app")); assert_eq!(cfg.reasoning_summary, Some(ReasoningSummary::None)); + assert_eq!(cfg.context_tier.as_deref(), Some("default")); assert_eq!(cfg.streaming, Some(true)); assert_eq!(cfg.tools.as_ref().map(|t| t.len()), Some(1)); assert_eq!( From 44add6463ddeacfe4a0328eb27ba933ba2268308 Mon Sep 17 00:00:00 2001 From: Dmytro Struk <13853051+dmytrostruk@users.noreply.github.com> Date: Fri, 29 May 2026 11:56:32 -0700 Subject: [PATCH 4/4] Added Java --- .../github/copilot/SessionRequestBuilder.java | 2 ++ .../copilot/rpc/CreateSessionRequest.java | 13 ++++++++++ .../copilot/rpc/ResumeSessionConfig.java | 25 +++++++++++++++++++ .../copilot/rpc/ResumeSessionRequest.java | 13 ++++++++++ .../com/github/copilot/rpc/SessionConfig.java | 25 +++++++++++++++++++ .../com/github/copilot/ConfigCloneTest.java | 4 +++ .../copilot/SessionRequestBuilderTest.java | 14 +++++++++++ 7 files changed, 96 insertions(+) diff --git a/java/src/main/java/com/github/copilot/SessionRequestBuilder.java b/java/src/main/java/com/github/copilot/SessionRequestBuilder.java index bcd08bf5d..ded92a506 100644 --- a/java/src/main/java/com/github/copilot/SessionRequestBuilder.java +++ b/java/src/main/java/com/github/copilot/SessionRequestBuilder.java @@ -107,6 +107,7 @@ static CreateSessionRequest buildCreateRequest(SessionConfig config, String sess request.setClientName(config.getClientName()); request.setReasoningEffort(config.getReasoningEffort()); request.setReasoningSummary(config.getReasoningSummary()); + request.setContextTier(config.getContextTier()); request.setTools(config.getTools()); request.setSystemMessage(config.getSystemMessage()); request.setAvailableTools(config.getAvailableTools()); @@ -217,6 +218,7 @@ static ResumeSessionRequest buildResumeRequest(String sessionId, ResumeSessionCo request.setClientName(config.getClientName()); request.setReasoningEffort(config.getReasoningEffort()); request.setReasoningSummary(config.getReasoningSummary()); + request.setContextTier(config.getContextTier()); request.setTools(config.getTools()); request.setSystemMessage(config.getSystemMessage()); request.setAvailableTools(config.getAvailableTools()); diff --git a/java/src/main/java/com/github/copilot/rpc/CreateSessionRequest.java b/java/src/main/java/com/github/copilot/rpc/CreateSessionRequest.java index c5dc200f9..f7d2d44c3 100644 --- a/java/src/main/java/com/github/copilot/rpc/CreateSessionRequest.java +++ b/java/src/main/java/com/github/copilot/rpc/CreateSessionRequest.java @@ -39,6 +39,9 @@ public final class CreateSessionRequest { @JsonProperty("reasoningSummary") private String reasoningSummary; + @JsonProperty("contextTier") + private String contextTier; + @JsonProperty("tools") private List tools; @@ -234,6 +237,16 @@ public void setReasoningSummary(String reasoningSummary) { this.reasoningSummary = reasoningSummary; } + /** Gets the context window tier. @return the context window tier */ + public String getContextTier() { + return contextTier; + } + + /** Sets the context window tier. @param contextTier the context window tier */ + public void setContextTier(String contextTier) { + this.contextTier = contextTier; + } + /** Gets the tools. @return the tool definitions */ public List getTools() { return tools == null ? null : Collections.unmodifiableList(tools); diff --git a/java/src/main/java/com/github/copilot/rpc/ResumeSessionConfig.java b/java/src/main/java/com/github/copilot/rpc/ResumeSessionConfig.java index 26a0f6876..aee27e1b1 100644 --- a/java/src/main/java/com/github/copilot/rpc/ResumeSessionConfig.java +++ b/java/src/main/java/com/github/copilot/rpc/ResumeSessionConfig.java @@ -52,6 +52,7 @@ public class ResumeSessionConfig { private Boolean manageScheduleEnabled; private String reasoningEffort; private String reasoningSummary; + private String contextTier; private ModelCapabilitiesOverride modelCapabilities; private PermissionHandler onPermissionRequest; private UserInputHandler onUserInputRequest; @@ -504,6 +505,29 @@ public ResumeSessionConfig setReasoningSummary(String reasoningSummary) { return this; } + /** + * Gets the context window tier. + * + * @return the context window tier ("default" or "long_context") + */ + public String getContextTier() { + return contextTier; + } + + /** + * Sets the context window tier to apply on resume for models that support it. + * Use {@code "long_context"} to pin the session to the long-context tier; omit + * or use {@code "default"} otherwise. + * + * @param contextTier + * the context window tier + * @return this config for method chaining + */ + public ResumeSessionConfig setContextTier(String contextTier) { + this.contextTier = contextTier; + return this; + } + /** * Gets the permission request handler. * @@ -1505,6 +1529,7 @@ public ResumeSessionConfig clone() { copy.enableSessionTelemetry = this.enableSessionTelemetry; copy.reasoningEffort = this.reasoningEffort; copy.reasoningSummary = this.reasoningSummary; + copy.contextTier = this.contextTier; copy.modelCapabilities = this.modelCapabilities; copy.onPermissionRequest = this.onPermissionRequest; copy.onUserInputRequest = this.onUserInputRequest; diff --git a/java/src/main/java/com/github/copilot/rpc/ResumeSessionRequest.java b/java/src/main/java/com/github/copilot/rpc/ResumeSessionRequest.java index 66cee6b95..c8cdc5a2d 100644 --- a/java/src/main/java/com/github/copilot/rpc/ResumeSessionRequest.java +++ b/java/src/main/java/com/github/copilot/rpc/ResumeSessionRequest.java @@ -41,6 +41,9 @@ public final class ResumeSessionRequest { @JsonProperty("reasoningSummary") private String reasoningSummary; + @JsonProperty("contextTier") + private String contextTier; + @JsonProperty("tools") private List tools; @@ -236,6 +239,16 @@ public void setReasoningSummary(String reasoningSummary) { this.reasoningSummary = reasoningSummary; } + /** Gets the context window tier. @return the context window tier */ + public String getContextTier() { + return contextTier; + } + + /** Sets the context window tier. @param contextTier the context window tier */ + public void setContextTier(String contextTier) { + this.contextTier = contextTier; + } + /** Gets the tools. @return the tool definitions */ public List getTools() { return tools == null ? null : Collections.unmodifiableList(tools); diff --git a/java/src/main/java/com/github/copilot/rpc/SessionConfig.java b/java/src/main/java/com/github/copilot/rpc/SessionConfig.java index c8c897df2..fa7fd2244 100644 --- a/java/src/main/java/com/github/copilot/rpc/SessionConfig.java +++ b/java/src/main/java/com/github/copilot/rpc/SessionConfig.java @@ -43,6 +43,7 @@ public class SessionConfig { private String model; private String reasoningEffort; private String reasoningSummary; + private String contextTier; private List tools; private SystemMessageConfig systemMessage; private List availableTools; @@ -207,6 +208,29 @@ public SessionConfig setReasoningSummary(String reasoningSummary) { return this; } + /** + * Gets the context window tier. + * + * @return the context window tier ("default" or "long_context") + */ + public String getContextTier() { + return contextTier; + } + + /** + * Sets the context window tier for models that support it. Use + * {@code "long_context"} to pin the session to the long-context tier; omit or + * use {@code "default"} otherwise. + * + * @param contextTier + * the context window tier + * @return this config instance for method chaining + */ + public SessionConfig setContextTier(String contextTier) { + this.contextTier = contextTier; + return this; + } + /** * Gets the custom tools for this session. * @@ -1619,6 +1643,7 @@ public SessionConfig clone() { copy.model = this.model; copy.reasoningEffort = this.reasoningEffort; copy.reasoningSummary = this.reasoningSummary; + copy.contextTier = this.contextTier; copy.tools = this.tools != null ? new ArrayList<>(this.tools) : null; copy.systemMessage = this.systemMessage; copy.availableTools = this.availableTools != null ? new ArrayList<>(this.availableTools) : null; diff --git a/java/src/test/java/com/github/copilot/ConfigCloneTest.java b/java/src/test/java/com/github/copilot/ConfigCloneTest.java index 2efafdfc5..81c937dbe 100644 --- a/java/src/test/java/com/github/copilot/ConfigCloneTest.java +++ b/java/src/test/java/com/github/copilot/ConfigCloneTest.java @@ -116,6 +116,7 @@ void sessionConfigCloneBasic() { original.setClientName("my-app"); original.setModel("gpt-4o"); original.setReasoningSummary("detailed"); + original.setContextTier("long_context"); original.setPluginDirectories(List.of("/plugins/a", "/plugins/b")); original.setLargeOutput( new LargeToolOutputConfig().setEnabled(true).setMaxSizeBytes(1024L).setOutputDirectory("/tmp/out")); @@ -127,6 +128,7 @@ void sessionConfigCloneBasic() { assertEquals(original.getClientName(), cloned.getClientName()); assertEquals(original.getModel(), cloned.getModel()); assertEquals(original.getReasoningSummary(), cloned.getReasoningSummary()); + assertEquals(original.getContextTier(), cloned.getContextTier()); assertEquals(original.getPluginDirectories(), cloned.getPluginDirectories()); assertEquals(original.getLargeOutput(), cloned.getLargeOutput()); assertEquals(original.isStreaming(), cloned.isStreaming()); @@ -171,6 +173,7 @@ void resumeSessionConfigCloneBasic() { ResumeSessionConfig original = new ResumeSessionConfig(); original.setModel("o1"); original.setReasoningSummary("none"); + original.setContextTier("long_context"); original.setPluginDirectories(List.of("/plugins/r")); original.setLargeOutput( new LargeToolOutputConfig().setEnabled(false).setMaxSizeBytes(2048L).setOutputDirectory("/tmp/resume")); @@ -180,6 +183,7 @@ void resumeSessionConfigCloneBasic() { assertEquals(original.getModel(), cloned.getModel()); assertEquals(original.getReasoningSummary(), cloned.getReasoningSummary()); + assertEquals(original.getContextTier(), cloned.getContextTier()); assertEquals(original.getPluginDirectories(), cloned.getPluginDirectories()); assertEquals(original.getLargeOutput(), cloned.getLargeOutput()); assertEquals(original.isStreaming(), cloned.isStreaming()); diff --git a/java/src/test/java/com/github/copilot/SessionRequestBuilderTest.java b/java/src/test/java/com/github/copilot/SessionRequestBuilderTest.java index c97114b27..9b7e28e85 100644 --- a/java/src/test/java/com/github/copilot/SessionRequestBuilderTest.java +++ b/java/src/test/java/com/github/copilot/SessionRequestBuilderTest.java @@ -98,6 +98,13 @@ void testBuildCreateRequestSetsReasoningSummary() { assertEquals("concise", request.getReasoningSummary()); } + @Test + void testBuildCreateRequestSetsContextTier() { + var config = new SessionConfig().setContextTier("long_context"); + CreateSessionRequest request = SessionRequestBuilder.buildCreateRequest(config); + assertEquals("long_context", request.getContextTier()); + } + @Test void testBuildCreateRequestSetsPluginDirectoriesAndLargeOutput() { var largeOutput = new LargeToolOutputConfig().setEnabled(true).setMaxSizeBytes(1024L) @@ -313,6 +320,13 @@ void testBuildResumeRequestSetsReasoningSummary() { assertEquals("none", request.getReasoningSummary()); } + @Test + void testBuildResumeRequestSetsContextTier() { + var config = new ResumeSessionConfig().setContextTier("default"); + ResumeSessionRequest request = SessionRequestBuilder.buildResumeRequest("sid-15", config); + assertEquals("default", request.getContextTier()); + } + @Test void testBuildResumeRequestSetsPluginDirectoriesAndLargeOutput() { var largeOutput = new LargeToolOutputConfig().setEnabled(false).setMaxSizeBytes(2048L)