diff --git a/dotnet/src/Client.cs b/dotnet/src/Client.cs index 5f059fd0f..86178ba74 100644 --- a/dotnet/src/Client.cs +++ b/dotnet/src/Client.cs @@ -1480,15 +1480,6 @@ public async Task ResumeSessionAsync(string sessionId, ResumeSes session.SetCapabilities(response.Capabilities); session.SetOpenCanvases(response.OpenCanvases); - if (config.McpServers is not null) - { - await InvokeRpcAsync( - connection.Rpc, - "session.mcp.reloadWithConfig", - [new ReloadMcpServersRequest(sessionId, new ReloadMcpServersConfig(config.McpServers))], - cancellationToken); - } - if (config.OnMcpAuthRequest is not null) { await session.Rpc.EventLog.RegisterInterestAsync("mcp.oauth_required", cancellationToken); @@ -2961,13 +2952,6 @@ internal record ResumeSessionResponse( IList? OpenCanvases = null); #pragma warning restore GHCP001 - internal record ReloadMcpServersRequest( - string SessionId, - ReloadMcpServersConfig Config); - - internal record ReloadMcpServersConfig( - IDictionary McpServers); - internal record CommandWireDefinition( string Name, string Description); @@ -3044,8 +3028,6 @@ internal record HooksInvokeResponse( [JsonSerializable(typeof(CapiSessionOptions))] [JsonSerializable(typeof(NamedProviderConfig))] [JsonSerializable(typeof(ProviderModelConfig))] - [JsonSerializable(typeof(ReloadMcpServersConfig))] - [JsonSerializable(typeof(ReloadMcpServersRequest))] [JsonSerializable(typeof(SessionLimitsConfig))] [JsonSerializable(typeof(ResumeSessionRequest))] [JsonSerializable(typeof(ResumeSessionResponse))] diff --git a/dotnet/src/Generated/Rpc.cs b/dotnet/src/Generated/Rpc.cs index 75405b142..97f9b5276 100644 --- a/dotnet/src/Generated/Rpc.cs +++ b/dotnet/src/Generated/Rpc.cs @@ -1034,7 +1034,7 @@ public sealed class AccountLoginResult public bool StoredInVault { get; set; } } -/// Credentials to store after successful authentication. +/// Credentials to validate and store. Omit login to resolve the authenticated user from the token. [Experimental(Diagnostics.Experimental)] internal sealed class AccountLoginRequest { @@ -1042,9 +1042,9 @@ internal sealed class AccountLoginRequest [JsonPropertyName("host")] public string Host { get; set; } = string.Empty; - /// User login/username. + /// User login/username. When omitted, the runtime validates the token and resolves the login from GitHub. [JsonPropertyName("login")] - public string Login { get; set; } = string.Empty; + public string? Login { get; set; } /// GitHub authentication token. [JsonPropertyName("token")] @@ -26847,6 +26847,9 @@ public PermissionsSetApproveAllSource(string value) /// Allow-all was enabled by confirming autopilot behavior. public static PermissionsSetApproveAllSource AutopilotConfirmation { get; } = new("autopilot_confirmation"); + /// Allow-all was enabled at startup by the `defaultPermissionMode` user setting. + public static PermissionsSetApproveAllSource UserSetting { get; } = new("user_setting"); + /// Allow-all was enabled through an RPC caller. public static PermissionsSetApproveAllSource Rpc { get; } = new("rpc"); @@ -26916,6 +26919,9 @@ public PermissionModeSource(string value) /// The mode was set by confirming autopilot behavior. public static PermissionModeSource AutopilotConfirmation { get; } = new("autopilot_confirmation"); + /// The mode was set at startup by the `defaultPermissionMode` user setting. + public static PermissionModeSource UserSetting { get; } = new("user_setting"); + /// The mode was set through an RPC caller. public static PermissionModeSource Rpc { get; } = new("rpc"); @@ -29065,19 +29071,18 @@ public async Task> GetAllUsersAsync(CancellationToken can return await CopilotClient.InvokeRpcAsync>(_rpc, "account.getAllUsers", [], cancellationToken); } - /// Stores authentication credentials after successful login (e.g., device code flow). + /// Validates and stores authentication credentials. When login is omitted, resolves the authenticated user from the token before persistence. /// GitHub host URL. - /// User login/username. /// GitHub authentication token. + /// User login/username. When omitted, the runtime validates the token and resolves the login from GitHub. /// The to monitor for cancellation requests. The default is . /// Result of a successful login; throws on failure. - public async Task LoginAsync(string host, string login, string token, CancellationToken cancellationToken = default) + public async Task LoginAsync(string host, string token, string? login = null, CancellationToken cancellationToken = default) { ArgumentNullException.ThrowIfNull(host); - ArgumentNullException.ThrowIfNull(login); ArgumentNullException.ThrowIfNull(token); - var request = new AccountLoginRequest { Host = host, Login = login, Token = token }; + var request = new AccountLoginRequest { Host = host, Token = token, Login = login }; return await CopilotClient.InvokeRpcAsync(_rpc, "account.login", [request], cancellationToken); } diff --git a/dotnet/test/E2E/RpcServerMiscE2ETests.cs b/dotnet/test/E2E/RpcServerMiscE2ETests.cs index 0838b6718..20993e2ec 100644 --- a/dotnet/test/E2E/RpcServerMiscE2ETests.cs +++ b/dotnet/test/E2E/RpcServerMiscE2ETests.cs @@ -92,7 +92,7 @@ public async Task Should_Login_List_GetCurrentAuth_And_Logout_Account() var initial = await client.Rpc.Account.GetCurrentAuthAsync(); Assert.Null(initial.AuthInfo); - var loginResult = await client.Rpc.Account.LoginAsync("https://github.com", login, token); + var loginResult = await client.Rpc.Account.LoginAsync("https://github.com", token, login); Assert.NotNull(loginResult); var current = await client.Rpc.Account.GetCurrentAuthAsync(); diff --git a/go/client.go b/go/client.go index 0852f9933..fb02897f9 100644 --- a/go/client.go +++ b/go/client.go @@ -1356,19 +1356,6 @@ func (c *Client) ResumeSessionWithOptions(ctx context.Context, sessionID string, return nil, fmt.Errorf("failed to unmarshal response: %w", err) } - if config.MCPServers != nil { - internalSessionRPC := rpc.NewInternalSessionRPC(c.client, sessionID) - _, err := internalSessionRPC.MCP.ReloadWithConfig(ctx, &rpc.MCPReloadWithConfigRequest{ - Config: map[string]any{"mcpServers": config.MCPServers}, - }) - if err != nil { - c.sessionsMux.Lock() - delete(c.sessions, sessionID) - c.sessionsMux.Unlock() - return nil, fmt.Errorf("failed to reload MCP servers after resume: %w", err) - } - } - if config.OnMCPAuthRequest != nil { if _, err := c.client.Request(ctx, "session.eventLog.registerInterest", map[string]any{ "sessionId": sessionID, diff --git a/go/internal/e2e/rpc_server_misc_e2e_test.go b/go/internal/e2e/rpc_server_misc_e2e_test.go index 37ec57e1b..960799467 100644 --- a/go/internal/e2e/rpc_server_misc_e2e_test.go +++ b/go/internal/e2e/rpc_server_misc_e2e_test.go @@ -131,7 +131,7 @@ func TestRpcServerMisc(t *testing.T) { login, err := client.RPC.Account.Login(t.Context(), &rpc.AccountLoginRequest{ Host: "https://github.com", - Login: "go-account-user", + Login: rpcPtr("go-account-user"), Token: "go-account-token", }) if err != nil { diff --git a/go/rpc/zrpc.go b/go/rpc/zrpc.go index d8735313a..69b44cef4 100644 --- a/go/rpc/zrpc.go +++ b/go/rpc/zrpc.go @@ -73,14 +73,16 @@ type AccountGetQuotaResult struct { QuotaSnapshots map[string]AccountQuotaSnapshot `json:"quotaSnapshots"` } -// Credentials to store after successful authentication +// Credentials to validate and store. Omit login to resolve the authenticated user from the +// token. // Experimental: AccountLoginRequest is part of an experimental API and may change or be // removed. type AccountLoginRequest struct { // GitHub host URL Host string `json:"host"` - // User login/username - Login string `json:"login"` + // User login/username. When omitted, the runtime validates the token and resolves the login + // from GitHub. + Login *string `json:"login,omitempty"` // GitHub authentication token Token string `json:"token"` } @@ -17456,6 +17458,8 @@ const ( PermissionModeSourceRPC PermissionModeSource = "rpc" // The mode was set by a slash command. PermissionModeSourceSlashCommand PermissionModeSource = "slash_command" + // The mode was set at startup by the `defaultPermissionMode` user setting. + PermissionModeSourceUserSetting PermissionModeSource = "user_setting" ) // Allowed values for the `PermissionsConfigureAdditionalContentExclusionPolicyScope` @@ -17515,6 +17519,8 @@ const ( PermissionsSetApproveAllSourceRPC PermissionsSetApproveAllSource = "rpc" // Allow-all was enabled by a slash command. PermissionsSetApproveAllSourceSlashCommand PermissionsSetApproveAllSource = "slash_command" + // Allow-all was enabled at startup by the `defaultPermissionMode` user setting. + PermissionsSetApproveAllSourceUserSetting PermissionsSetApproveAllSource = "user_setting" ) // Controls whether the runtime may defer loading an external tool definition. @@ -18682,11 +18688,13 @@ func (a *ServerAccountAPI) GetQuota(ctx context.Context, params *AccountGetQuota return &result, nil } -// Login stores authentication credentials after successful login (e.g., device code flow). +// Login validates and stores authentication credentials. When login is omitted, resolves +// the authenticated user from the token before persistence. // // RPC method: account.login. // -// Parameters: Credentials to store after successful authentication +// Parameters: Credentials to validate and store. Omit login to resolve the authenticated +// user from the token. // // Returns: Result of a successful login; throws on failure func (a *ServerAccountAPI) Login(ctx context.Context, params *AccountLoginRequest) (*AccountLoginResult, error) { diff --git a/java/pom.xml b/java/pom.xml index f45122b4e..76efcd60b 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -63,7 +63,7 @@ DO NOT EDIT MANUALLY. Updated by the update-copilot-dependency workflow. --> - ^1.0.81-5 + ^1.0.81-6 true diff --git a/java/scripts/codegen/package-lock.json b/java/scripts/codegen/package-lock.json index 508204bd1..0932178ef 100644 --- a/java/scripts/codegen/package-lock.json +++ b/java/scripts/codegen/package-lock.json @@ -6,7 +6,7 @@ "": { "name": "copilot-sdk-java-codegen", "dependencies": { - "@github/copilot": "^1.0.81-5", + "@github/copilot": "^1.0.81-6", "json-schema": "^0.4.0", "tsx": "^4.23.1" } @@ -428,9 +428,9 @@ } }, "node_modules/@github/copilot": { - "version": "1.0.81-5", - "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.81-5.tgz", - "integrity": "sha512-CLZNjPx4lsseIlfXxmLCGbr4IbfjJmNFPiEzkuuPJBH/Nubw3ibKbJtqSMRiHaNTS4LVmVFkGzqZ7NeUE3MjgA==", + "version": "1.0.81-6", + "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.81-6.tgz", + "integrity": "sha512-hT29nRkf0EJE3N6lqeLOPszbdEyALZ+fjYG9zKX5a3L5r+o+m4/KF+8l2gn2yORNqOzwUYNj2vnVzKqeYYNLGg==", "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "detect-libc": "^2.1.2" @@ -439,20 +439,20 @@ "copilot": "npm-loader.js" }, "optionalDependencies": { - "@github/copilot-darwin-arm64": "1.0.81-5", - "@github/copilot-darwin-x64": "1.0.81-5", - "@github/copilot-linux-arm64": "1.0.81-5", - "@github/copilot-linux-x64": "1.0.81-5", - "@github/copilot-linuxmusl-arm64": "1.0.81-5", - "@github/copilot-linuxmusl-x64": "1.0.81-5", - "@github/copilot-win32-arm64": "1.0.81-5", - "@github/copilot-win32-x64": "1.0.81-5" + "@github/copilot-darwin-arm64": "1.0.81-6", + "@github/copilot-darwin-x64": "1.0.81-6", + "@github/copilot-linux-arm64": "1.0.81-6", + "@github/copilot-linux-x64": "1.0.81-6", + "@github/copilot-linuxmusl-arm64": "1.0.81-6", + "@github/copilot-linuxmusl-x64": "1.0.81-6", + "@github/copilot-win32-arm64": "1.0.81-6", + "@github/copilot-win32-x64": "1.0.81-6" } }, "node_modules/@github/copilot-darwin-arm64": { - "version": "1.0.81-5", - "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.81-5.tgz", - "integrity": "sha512-yop7JdAK847INCkUXsFWfuqP72//+xO3b8uXo4T8InWVjdE5DK5G/m9kWzgZfFS7LGoiTGwz2bV54Rfh/gRHVQ==", + "version": "1.0.81-6", + "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.81-6.tgz", + "integrity": "sha512-nALa4e8Jc/g5ltIHrpHBHByJ5rlgzoZFylZIrkQY+B9vr3L57d5F6fOiTbf/OF9blFQX7artWRE1K0TmowGNCA==", "cpu": [ "arm64" ], @@ -466,9 +466,9 @@ } }, "node_modules/@github/copilot-darwin-x64": { - "version": "1.0.81-5", - "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.81-5.tgz", - "integrity": "sha512-s//z4MWiWCGL8437rrODItnoL4FhhQ0bqDnFDRfUoKD7C304b2b2gSm5v4nCLsHjBWp0+jz64zQqNt573g0DYA==", + "version": "1.0.81-6", + "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.81-6.tgz", + "integrity": "sha512-K+bp799DejrsmxMNyaFAmKo4xnLJXBb8hkv9N8OCQukmTSoRpfqhv2oTDfgVFadwllt+py/FIdxKTZQYvPGGGw==", "cpu": [ "x64" ], @@ -482,9 +482,9 @@ } }, "node_modules/@github/copilot-linux-arm64": { - "version": "1.0.81-5", - "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.81-5.tgz", - "integrity": "sha512-Fe7yf5X644SsCGrfvEnW5u/MluA7karsHhprhoRzeyanaUg4A5t9USRSYVUg8xBByXpIILS/uHoFRlRWLUvLzA==", + "version": "1.0.81-6", + "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.81-6.tgz", + "integrity": "sha512-aEpnfTTjOxpesFo9jqk/phZUivOhNHbdBRfBrS2NiCPrQZFBYUC4wRVo/Xo2PMMQ4J07b6fU7JJQPoUUkKy5Wg==", "cpu": [ "arm64" ], @@ -498,9 +498,9 @@ } }, "node_modules/@github/copilot-linux-x64": { - "version": "1.0.81-5", - "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.81-5.tgz", - "integrity": "sha512-A0D+7zwbo5Zi9uA+5hkVUbM1lN799/AOK4bQbmo9dsyd4Msnm0LVypeMuqPocqFJ0hKQ0jmF50gRkQBXY19DwQ==", + "version": "1.0.81-6", + "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.81-6.tgz", + "integrity": "sha512-NFqonFfJCyA7d3bNoYeLWUQ69zelPr9TTnLpAHCi3scFZqbEvMBDFxW2XsKWwfYuuR9XzfU7/tgOUgq3gmL5aA==", "cpu": [ "x64" ], @@ -514,9 +514,9 @@ } }, "node_modules/@github/copilot-linuxmusl-arm64": { - "version": "1.0.81-5", - "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-arm64/-/copilot-linuxmusl-arm64-1.0.81-5.tgz", - "integrity": "sha512-cQqr4K8erxym2TBLZo5h3m81BKzS2rLmzfUZUAmcIqc/pmVqVk9L44csheoDPOxoJJRK2x7acs/OJIXolQEUEQ==", + "version": "1.0.81-6", + "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-arm64/-/copilot-linuxmusl-arm64-1.0.81-6.tgz", + "integrity": "sha512-EE99DFTAgTq6eOFDiiv+OUROD2pDQIrzyyJEfUS9K8JanwNc+Py8vTxrJ0yK0slpJ+Fue5uDRno6c9ys8OM59g==", "cpu": [ "arm64" ], @@ -530,9 +530,9 @@ } }, "node_modules/@github/copilot-linuxmusl-x64": { - "version": "1.0.81-5", - "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-x64/-/copilot-linuxmusl-x64-1.0.81-5.tgz", - "integrity": "sha512-Ip/kBYXveSzlXh/JKDLQ3UE0YiyT+hJ0Z7utxqqocTee30NSpyP8/1xET7mqqezLE2B7/gdgdoPJVxf5xB4idw==", + "version": "1.0.81-6", + "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-x64/-/copilot-linuxmusl-x64-1.0.81-6.tgz", + "integrity": "sha512-90HRKx25EjhlQNOCCdbiC0Ck0fSKyp8XUxUoCvuNdoigdUP54ZGS07dkyJiJq9KZaKilxZBSpXiNt8t5ETA2Sg==", "cpu": [ "x64" ], @@ -546,9 +546,9 @@ } }, "node_modules/@github/copilot-win32-arm64": { - "version": "1.0.81-5", - "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.81-5.tgz", - "integrity": "sha512-ERTckb1saKW6xZVIFWE5+1aIQPGlAjFers2BSCXWxtwPiIb0Ev/xSMY/gF0R8oH2tWHr06iGC3FnFzXzvn50OQ==", + "version": "1.0.81-6", + "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.81-6.tgz", + "integrity": "sha512-1dRSHF/7PFzB+AGORg8BJh2n1+N7+sIJDLqozrC9INWFp1t6ercptIXgJTF/V7UZVGQLO4LBBK1HH/QhzUmrfA==", "cpu": [ "arm64" ], @@ -562,9 +562,9 @@ } }, "node_modules/@github/copilot-win32-x64": { - "version": "1.0.81-5", - "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.81-5.tgz", - "integrity": "sha512-rAns726TCJD9fxBRD+ZAdh1+ZwHJncZtSg6T5w3j/7+pMkQUw1RSFxNXx/aeVAwKe+R9gufQWCkSgzaOwDr7kg==", + "version": "1.0.81-6", + "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.81-6.tgz", + "integrity": "sha512-lIbN1mk6Rm9bWrWU4/UfrC5OCga7XcBi2LBz5roDnNcuG8mKEevDcNOtbEYz/TaJg+WBMoTbGfXBVd1hGy2DTA==", "cpu": [ "x64" ], diff --git a/java/scripts/codegen/package.json b/java/scripts/codegen/package.json index 791c47898..8ceacb3e1 100644 --- a/java/scripts/codegen/package.json +++ b/java/scripts/codegen/package.json @@ -7,7 +7,7 @@ "generate:java": "tsx java.ts" }, "dependencies": { - "@github/copilot": "^1.0.81-5", + "@github/copilot": "^1.0.81-6", "json-schema": "^0.4.0", "tsx": "^4.23.1" } diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountLoginParams.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountLoginParams.java index bd8e69734..ca724fc67 100644 --- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountLoginParams.java +++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/AccountLoginParams.java @@ -14,7 +14,7 @@ import javax.annotation.processing.Generated; /** - * Credentials to store after successful authentication + * Credentials to validate and store. Omit login to resolve the authenticated user from the token. * * @apiNote This method is experimental and may change in a future version. * @since 1.0.0 @@ -26,7 +26,7 @@ public record AccountLoginParams( /** GitHub host URL */ @JsonProperty("host") String host, - /** User login/username */ + /** User login/username. When omitted, the runtime validates the token and resolves the login from GitHub. */ @JsonProperty("login") String login, /** GitHub authentication token */ @JsonProperty("token") String token diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionModeSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionModeSource.java index 2174e7fc2..534760c74 100644 --- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionModeSource.java +++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionModeSource.java @@ -22,6 +22,8 @@ public enum PermissionModeSource { SLASH_COMMAND("slash_command"), /** The {@code autopilot_confirmation} variant. */ AUTOPILOT_CONFIRMATION("autopilot_confirmation"), + /** The {@code user_setting} variant. */ + USER_SETTING("user_setting"), /** The {@code rpc} variant. */ RPC("rpc"); diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsSetApproveAllSource.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsSetApproveAllSource.java index b86b09dfa..0bf52d53d 100644 --- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsSetApproveAllSource.java +++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/PermissionsSetApproveAllSource.java @@ -22,6 +22,8 @@ public enum PermissionsSetApproveAllSource { SLASH_COMMAND("slash_command"), /** The {@code autopilot_confirmation} variant. */ AUTOPILOT_CONFIRMATION("autopilot_confirmation"), + /** The {@code user_setting} variant. */ + USER_SETTING("user_setting"), /** The {@code rpc} variant. */ RPC("rpc"); diff --git a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerAccountApi.java b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerAccountApi.java index 8e019b5fb..0adbf1809 100644 --- a/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerAccountApi.java +++ b/java/sdk/src/generated/java/com/github/copilot/generated/rpc/ServerAccountApi.java @@ -74,7 +74,7 @@ public CompletableFuture> getAllUsers() { } /** - * Credentials to store after successful authentication + * Credentials to validate and store. Omit login to resolve the authenticated user from the token. * * @apiNote This method is experimental and may change in a future version. * @since 1.0.0 diff --git a/java/sdk/src/main/java/com/github/copilot/CopilotClient.java b/java/sdk/src/main/java/com/github/copilot/CopilotClient.java index 3546f8863..cdd1b9ff3 100644 --- a/java/sdk/src/main/java/com/github/copilot/CopilotClient.java +++ b/java/sdk/src/main/java/com/github/copilot/CopilotClient.java @@ -40,8 +40,6 @@ import com.github.copilot.generated.rpc.GitHubTelemetryNotification; import com.github.copilot.generated.rpc.ServerRpc; import com.github.copilot.generated.rpc.SessionEventLogRegisterInterestParams; -import com.github.copilot.generated.rpc.SessionMcpReloadWithConfigParams; -import com.github.copilot.generated.rpc.SessionMcpReloadWithConfigResult; import com.github.copilot.rpc.DeleteSessionResponse; import com.github.copilot.rpc.GetAuthStatusResponse; import com.github.copilot.rpc.GetLastSessionIdResponse; @@ -1148,17 +1146,11 @@ public CompletableFuture resumeSession(String sessionId, ResumeS rpcNanos); String returnedId = response.sessionId(); String interestSessionId = returnedId != null ? returnedId : sessionId; - CompletableFuture reload = config.getMcpServers() != null - ? connection.rpc.invoke("session.mcp.reloadWithConfig", - new SessionMcpReloadWithConfigParams(interestSessionId, - Map.of("mcpServers", config.getMcpServers())), - SessionMcpReloadWithConfigResult.class) - : CompletableFuture.completedFuture(null); CompletableFuture interest = config.getOnMcpAuthRequest() != null ? session.getRpc().eventLog.registerInterest(new SessionEventLogRegisterInterestParams( interestSessionId, "mcp.oauth_required")) : CompletableFuture.completedFuture(null); - return reload.thenCompose(ignored -> interest).thenApply(interestResult -> { + return interest.thenApply(interestResult -> { logMcpAuthInterestRegistration(interestResult); return response; }); diff --git a/nodejs/package-lock.json b/nodejs/package-lock.json index a317f651b..b17b6f55b 100644 --- a/nodejs/package-lock.json +++ b/nodejs/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.0-dev", "license": "MIT", "dependencies": { - "@github/copilot": "^1.0.81-5", + "@github/copilot": "^1.0.81-6", "koffi": "^3.1.0", "vscode-jsonrpc": "^8.2.1", "zod": "^4.3.6" @@ -658,8 +658,8 @@ } }, "node_modules/@github/copilot": { - "version": "1.0.81-5", - "integrity": "sha512-CLZNjPx4lsseIlfXxmLCGbr4IbfjJmNFPiEzkuuPJBH/Nubw3ibKbJtqSMRiHaNTS4LVmVFkGzqZ7NeUE3MjgA==", + "version": "1.0.81-6", + "integrity": "sha512-hT29nRkf0EJE3N6lqeLOPszbdEyALZ+fjYG9zKX5a3L5r+o+m4/KF+8l2gn2yORNqOzwUYNj2vnVzKqeYYNLGg==", "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "detect-libc": "^2.1.2" @@ -668,19 +668,19 @@ "copilot": "npm-loader.js" }, "optionalDependencies": { - "@github/copilot-darwin-arm64": "1.0.81-5", - "@github/copilot-darwin-x64": "1.0.81-5", - "@github/copilot-linux-arm64": "1.0.81-5", - "@github/copilot-linux-x64": "1.0.81-5", - "@github/copilot-linuxmusl-arm64": "1.0.81-5", - "@github/copilot-linuxmusl-x64": "1.0.81-5", - "@github/copilot-win32-arm64": "1.0.81-5", - "@github/copilot-win32-x64": "1.0.81-5" + "@github/copilot-darwin-arm64": "1.0.81-6", + "@github/copilot-darwin-x64": "1.0.81-6", + "@github/copilot-linux-arm64": "1.0.81-6", + "@github/copilot-linux-x64": "1.0.81-6", + "@github/copilot-linuxmusl-arm64": "1.0.81-6", + "@github/copilot-linuxmusl-x64": "1.0.81-6", + "@github/copilot-win32-arm64": "1.0.81-6", + "@github/copilot-win32-x64": "1.0.81-6" } }, "node_modules/@github/copilot-darwin-arm64": { - "version": "1.0.81-5", - "integrity": "sha512-yop7JdAK847INCkUXsFWfuqP72//+xO3b8uXo4T8InWVjdE5DK5G/m9kWzgZfFS7LGoiTGwz2bV54Rfh/gRHVQ==", + "version": "1.0.81-6", + "integrity": "sha512-nALa4e8Jc/g5ltIHrpHBHByJ5rlgzoZFylZIrkQY+B9vr3L57d5F6fOiTbf/OF9blFQX7artWRE1K0TmowGNCA==", "cpu": [ "arm64" ], @@ -694,8 +694,8 @@ } }, "node_modules/@github/copilot-darwin-x64": { - "version": "1.0.81-5", - "integrity": "sha512-s//z4MWiWCGL8437rrODItnoL4FhhQ0bqDnFDRfUoKD7C304b2b2gSm5v4nCLsHjBWp0+jz64zQqNt573g0DYA==", + "version": "1.0.81-6", + "integrity": "sha512-K+bp799DejrsmxMNyaFAmKo4xnLJXBb8hkv9N8OCQukmTSoRpfqhv2oTDfgVFadwllt+py/FIdxKTZQYvPGGGw==", "cpu": [ "x64" ], @@ -709,8 +709,8 @@ } }, "node_modules/@github/copilot-linux-arm64": { - "version": "1.0.81-5", - "integrity": "sha512-Fe7yf5X644SsCGrfvEnW5u/MluA7karsHhprhoRzeyanaUg4A5t9USRSYVUg8xBByXpIILS/uHoFRlRWLUvLzA==", + "version": "1.0.81-6", + "integrity": "sha512-aEpnfTTjOxpesFo9jqk/phZUivOhNHbdBRfBrS2NiCPrQZFBYUC4wRVo/Xo2PMMQ4J07b6fU7JJQPoUUkKy5Wg==", "cpu": [ "arm64" ], @@ -724,8 +724,8 @@ } }, "node_modules/@github/copilot-linux-x64": { - "version": "1.0.81-5", - "integrity": "sha512-A0D+7zwbo5Zi9uA+5hkVUbM1lN799/AOK4bQbmo9dsyd4Msnm0LVypeMuqPocqFJ0hKQ0jmF50gRkQBXY19DwQ==", + "version": "1.0.81-6", + "integrity": "sha512-NFqonFfJCyA7d3bNoYeLWUQ69zelPr9TTnLpAHCi3scFZqbEvMBDFxW2XsKWwfYuuR9XzfU7/tgOUgq3gmL5aA==", "cpu": [ "x64" ], @@ -739,8 +739,8 @@ } }, "node_modules/@github/copilot-linuxmusl-arm64": { - "version": "1.0.81-5", - "integrity": "sha512-cQqr4K8erxym2TBLZo5h3m81BKzS2rLmzfUZUAmcIqc/pmVqVk9L44csheoDPOxoJJRK2x7acs/OJIXolQEUEQ==", + "version": "1.0.81-6", + "integrity": "sha512-EE99DFTAgTq6eOFDiiv+OUROD2pDQIrzyyJEfUS9K8JanwNc+Py8vTxrJ0yK0slpJ+Fue5uDRno6c9ys8OM59g==", "cpu": [ "arm64" ], @@ -754,8 +754,8 @@ } }, "node_modules/@github/copilot-linuxmusl-x64": { - "version": "1.0.81-5", - "integrity": "sha512-Ip/kBYXveSzlXh/JKDLQ3UE0YiyT+hJ0Z7utxqqocTee30NSpyP8/1xET7mqqezLE2B7/gdgdoPJVxf5xB4idw==", + "version": "1.0.81-6", + "integrity": "sha512-90HRKx25EjhlQNOCCdbiC0Ck0fSKyp8XUxUoCvuNdoigdUP54ZGS07dkyJiJq9KZaKilxZBSpXiNt8t5ETA2Sg==", "cpu": [ "x64" ], @@ -769,8 +769,8 @@ } }, "node_modules/@github/copilot-win32-arm64": { - "version": "1.0.81-5", - "integrity": "sha512-ERTckb1saKW6xZVIFWE5+1aIQPGlAjFers2BSCXWxtwPiIb0Ev/xSMY/gF0R8oH2tWHr06iGC3FnFzXzvn50OQ==", + "version": "1.0.81-6", + "integrity": "sha512-1dRSHF/7PFzB+AGORg8BJh2n1+N7+sIJDLqozrC9INWFp1t6ercptIXgJTF/V7UZVGQLO4LBBK1HH/QhzUmrfA==", "cpu": [ "arm64" ], @@ -784,8 +784,8 @@ } }, "node_modules/@github/copilot-win32-x64": { - "version": "1.0.81-5", - "integrity": "sha512-rAns726TCJD9fxBRD+ZAdh1+ZwHJncZtSg6T5w3j/7+pMkQUw1RSFxNXx/aeVAwKe+R9gufQWCkSgzaOwDr7kg==", + "version": "1.0.81-6", + "integrity": "sha512-lIbN1mk6Rm9bWrWU4/UfrC5OCga7XcBi2LBz5roDnNcuG8mKEevDcNOtbEYz/TaJg+WBMoTbGfXBVd1hGy2DTA==", "cpu": [ "x64" ], diff --git a/nodejs/package.json b/nodejs/package.json index d9e908ccc..1d4102653 100644 --- a/nodejs/package.json +++ b/nodejs/package.json @@ -56,7 +56,7 @@ "author": "GitHub", "license": "MIT", "dependencies": { - "@github/copilot": "^1.0.81-5", + "@github/copilot": "^1.0.81-6", "koffi": "^3.1.0", "vscode-jsonrpc": "^8.2.1", "zod": "^4.3.6" diff --git a/nodejs/samples/package-lock.json b/nodejs/samples/package-lock.json index b8e0b7f8e..62199ea95 100644 --- a/nodejs/samples/package-lock.json +++ b/nodejs/samples/package-lock.json @@ -18,7 +18,7 @@ "version": "0.0.0-dev", "license": "MIT", "dependencies": { - "@github/copilot": "^1.0.81-5", + "@github/copilot": "^1.0.81-6", "koffi": "^3.1.0", "vscode-jsonrpc": "^8.2.1", "zod": "^4.3.6" diff --git a/nodejs/src/client.ts b/nodejs/src/client.ts index 988019c72..1be2cbb94 100644 --- a/nodejs/src/client.ts +++ b/nodejs/src/client.ts @@ -1919,12 +1919,6 @@ export class CopilotClient { session["_workspacePath"] = workspacePath; session.setCapabilities(capabilities); session.setOpenCanvases(openCanvases ?? []); - if (config.mcpServers) { - await this.connection!.sendRequest("session.mcp.reloadWithConfig", { - sessionId, - config: { mcpServers: toWireMcpServers(config.mcpServers) }, - }); - } if (config.onMcpAuthRequest) { await this.connection!.sendRequest("session.eventLog.registerInterest", { sessionId, diff --git a/nodejs/src/generated/rpc.ts b/nodejs/src/generated/rpc.ts index 3e91ca8e0..0174e476b 100644 --- a/nodejs/src/generated/rpc.ts +++ b/nodejs/src/generated/rpc.ts @@ -2551,6 +2551,8 @@ export type PermissionModeSource = | "slash_command" /** The mode was set by confirming autopilot behavior. */ | "autopilot_confirmation" + /** The mode was set at startup by the `defaultPermissionMode` user setting. */ + | "user_setting" /** The mode was set through an RPC caller. */ | "rpc"; /** @@ -2591,6 +2593,8 @@ export type PermissionsSetApproveAllSource = | "slash_command" /** Allow-all was enabled by confirming autopilot behavior. */ | "autopilot_confirmation" + /** Allow-all was enabled at startup by the `defaultPermissionMode` user setting. */ + | "user_setting" /** Allow-all was enabled through an RPC caller. */ | "rpc"; /** @@ -4350,7 +4354,7 @@ export interface AccountQuotaSnapshot { resetDate?: string; } /** - * Credentials to store after successful authentication + * Credentials to validate and store. Omit login to resolve the authenticated user from the token. * * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema * via the `definition` "AccountLoginRequest". @@ -4362,9 +4366,9 @@ export interface AccountLoginRequest { */ host: string; /** - * User login/username + * User login/username. When omitted, the runtime validates the token and resolves the login from GitHub. */ - login: string; + login?: string; /** * GitHub authentication token */ @@ -22490,9 +22494,9 @@ export function createServerRpc(connection: MessageConnection) { getAllUsers: async (): Promise => connection.sendRequest("account.getAllUsers", {}), /** - * Stores authentication credentials after successful login (e.g., device code flow). + * Validates and stores authentication credentials. When login is omitted, resolves the authenticated user from the token before persistence. * - * @param params Credentials to store after successful authentication + * @param params Credentials to validate and store. Omit login to resolve the authenticated user from the token. * * @returns Result of a successful login; throws on failure */ diff --git a/nodejs/test/e2e/rpc_ui_ephemeral_query.e2e.test.ts b/nodejs/test/e2e/rpc_ui_ephemeral_query.e2e.test.ts index be1a25dc6..7fa1e90f5 100644 --- a/nodejs/test/e2e/rpc_ui_ephemeral_query.e2e.test.ts +++ b/nodejs/test/e2e/rpc_ui_ephemeral_query.e2e.test.ts @@ -4,26 +4,29 @@ import { describe, expect, it } from "vitest"; import { approveAll } from "../../src/index.js"; -import { createSdkTestContext } from "./harness/sdkTestContext.js"; +import { createSdkTestContext, isInProcessTransport } from "./harness/sdkTestContext.js"; describe("UI ephemeral query RPC", async () => { const { copilotClient: client } = await createSdkTestContext(); - // TODO(cli-1.0.81-2): CLI 1.0.81-5 still fails session.ui.ephemeralQuery against the - // recorded snapshot on macOS ("Failed to get response from the AI model"). Re-enable - // once the runtime fix ships. - it.skip("should answer ephemeral query", { timeout: 120_000 }, async () => { - const session = await client.createSession({ onPermissionRequest: approveAll }); - try { - const result = await session.rpc.ui.ephemeralQuery({ - question: "In one word, what is the primary color of a clear daytime sky?", - }); + // TODO(cli-1.0.81-2): CLI 1.0.81-6 still fails session.ui.ephemeralQuery against the + // recorded snapshot on macOS ("Failed to get response from the AI model"). + it.skipIf(isInProcessTransport || process.platform === "darwin")( + "should answer ephemeral query", + { timeout: 120_000 }, + async () => { + const session = await client.createSession({ onPermissionRequest: approveAll }); + try { + const result = await session.rpc.ui.ephemeralQuery({ + question: "In one word, what is the primary color of a clear daytime sky?", + }); - expect(result).toBeDefined(); - expect(result.answer.trim()).toBeTruthy(); - expect(result.answer.toLowerCase()).toContain("blue"); - } finally { - await session.disconnect(); + expect(result).toBeDefined(); + expect(result.answer.trim()).toBeTruthy(); + expect(result.answer.toLowerCase()).toContain("blue"); + } finally { + await session.disconnect(); + } } - }); + ); }); diff --git a/python/copilot/client.py b/python/copilot/client.py index 7d9343a65..2654c1447 100644 --- a/python/copilot/client.py +++ b/python/copilot/client.py @@ -3423,14 +3423,6 @@ async def resume_session( session._set_open_canvases( [OpenCanvasInstance.from_dict(inst) for inst in open_canvases_raw] ) - if mcp_servers is not None: - await self._client.request( - "session.mcp.reloadWithConfig", - { - "sessionId": session_id, - "config": {"mcpServers": _mcp_servers_to_wire(mcp_servers)}, - }, - ) if on_mcp_auth_request is not None: await self._client.request( "session.eventLog.registerInterest", diff --git a/python/copilot/generated/rpc.py b/python/copilot/generated/rpc.py index d8915a626..d7c86509e 100644 --- a/python/copilot/generated/rpc.py +++ b/python/copilot/generated/rpc.py @@ -418,30 +418,34 @@ def to_dict(self) -> dict: # Experimental: this type is part of an experimental API and may change or be removed. @dataclass class AccountLoginRequest: - """Credentials to store after successful authentication""" - + """Credentials to validate and store. Omit login to resolve the authenticated user from the + token. + """ host: str """GitHub host URL""" - login: str - """User login/username""" - token: str """GitHub authentication token""" + login: str | None = None + """User login/username. When omitted, the runtime validates the token and resolves the login + from GitHub. + """ + @staticmethod def from_dict(obj: Any) -> 'AccountLoginRequest': assert isinstance(obj, dict) host = from_str(obj.get("host")) - login = from_str(obj.get("login")) token = from_str(obj.get("token")) - return AccountLoginRequest(host, login, token) + login = from_union([from_str, from_none], obj.get("login")) + return AccountLoginRequest(host, token, login) def to_dict(self) -> dict: result: dict = {} result["host"] = from_str(self.host) - result["login"] = from_str(self.login) result["token"] = from_str(self.token) + if self.login is not None: + result["login"] = from_union([from_str, from_none], self.login) return result # Experimental: this type is part of an experimental API and may change or be removed. @@ -33600,6 +33604,7 @@ class PermissionSource(Enum): CLI_FLAG = "cli_flag" RPC = "rpc" SLASH_COMMAND = "slash_command" + USER_SETTING = "user_setting" # Experimental: this type is part of an experimental API and may change or be removed. @dataclass @@ -38492,7 +38497,7 @@ async def get_all_users(self, *, timeout: float | None = None) -> list: return list(await self._client.request("account.getAllUsers", {}, **_timeout_kwargs(timeout))) async def login(self, params: AccountLoginRequest, *, timeout: float | None = None) -> AccountLoginResult: - "Stores authentication credentials after successful login (e.g., device code flow).\n\nArgs:\n params: Credentials to store after successful authentication\n\nReturns:\n Result of a successful login; throws on failure" + "Validates and stores authentication credentials. When login is omitted, resolves the authenticated user from the token before persistence.\n\nArgs:\n params: Credentials to validate and store. Omit login to resolve the authenticated user from the token.\n\nReturns:\n Result of a successful login; throws on failure" params_dict = {k: v for k, v in params.to_dict().items() if v is not None} return AccountLoginResult.from_dict(await self._client.request("account.login", params_dict, **_timeout_kwargs(timeout))) diff --git a/rust/src/generated/api_types.rs b/rust/src/generated/api_types.rs index 2041fa8f2..0583c0922 100644 --- a/rust/src/generated/api_types.rs +++ b/rust/src/generated/api_types.rs @@ -1403,7 +1403,7 @@ pub struct AccountGetQuotaResult { pub quota_snapshots: HashMap, } -/// Credentials to store after successful authentication +/// Credentials to validate and store. Omit login to resolve the authenticated user from the token. /// ///
/// @@ -1416,8 +1416,9 @@ pub struct AccountGetQuotaResult { pub struct AccountLoginRequest { /// GitHub host URL pub host: String, - /// User login/username - pub login: String, + /// User login/username. When omitted, the runtime validates the token and resolves the login from GitHub. + #[serde(skip_serializing_if = "Option::is_none")] + pub login: Option, /// GitHub authentication token pub token: String, } @@ -31256,6 +31257,9 @@ pub enum PermissionModeSource { /// The mode was set by confirming autopilot behavior. #[serde(rename = "autopilot_confirmation")] AutopilotConfirmation, + /// The mode was set at startup by the `defaultPermissionMode` user setting. + #[serde(rename = "user_setting")] + UserSetting, /// The mode was set through an RPC caller. #[serde(rename = "rpc")] Rpc, @@ -31328,6 +31332,9 @@ pub enum PermissionsSetApproveAllSource { /// Allow-all was enabled by confirming autopilot behavior. #[serde(rename = "autopilot_confirmation")] AutopilotConfirmation, + /// Allow-all was enabled at startup by the `defaultPermissionMode` user setting. + #[serde(rename = "user_setting")] + UserSetting, /// Allow-all was enabled through an RPC caller. #[serde(rename = "rpc")] Rpc, diff --git a/rust/src/generated/rpc.rs b/rust/src/generated/rpc.rs index 1e3d559ba..c955637e3 100644 --- a/rust/src/generated/rpc.rs +++ b/rust/src/generated/rpc.rs @@ -345,13 +345,13 @@ impl<'a> ClientRpcAccount<'a> { Ok(serde_json::from_value(_value)?) } - /// Stores authentication credentials after successful login (e.g., device code flow). + /// Validates and stores authentication credentials. When login is omitted, resolves the authenticated user from the token before persistence. /// /// Wire method: `account.login`. /// /// # Parameters /// - /// * `params` - Credentials to store after successful authentication + /// * `params` - Credentials to validate and store. Omit login to resolve the authenticated user from the token. /// /// # Returns /// diff --git a/rust/src/session.rs b/rust/src/session.rs index 2505a2377..7676c2ad7 100644 --- a/rust/src/session.rs +++ b/rust/src/session.rs @@ -1293,20 +1293,6 @@ impl Client { }) .into()); } - if let Some(mcp_servers) = wire.mcp_servers.as_ref() - && let Err(error) = self - .call( - "session.mcp.reloadWithConfig", - Some(serde_json::json!({ - "sessionId": session_id, - "config": { "mcpServers": mcp_servers }, - })), - ) - .await - { - registration.cleanup(event_loop).await; - return Err(error); - } if has_mcp_auth_handler { register_mcp_auth_interest(self, &session_id).await?; } diff --git a/rust/tests/e2e/rpc_mcp_lifecycle.rs b/rust/tests/e2e/rpc_mcp_lifecycle.rs index 395526451..8e5b74c05 100644 --- a/rust/tests/e2e/rpc_mcp_lifecycle.rs +++ b/rust/tests/e2e/rpc_mcp_lifecycle.rs @@ -209,6 +209,7 @@ async fn should_start_and_restart_mcp_server() { // internal methods generically; it never exercised a supported wire API. #[tokio::test] +#[ignore = "blocked on CLI 1.0.81-6 missing session.mcp.reloadWithConfig handler"] async fn should_reload_mcp_servers_with_config() { super::support::with_shared_e2e_context( &E2E, @@ -252,6 +253,7 @@ async fn should_reload_mcp_servers_with_config() { } #[tokio::test] +#[ignore = "blocked on CLI 1.0.81-6 missing session.mcp.configureGitHub handler"] async fn should_configure_github_mcp_server() { super::support::with_shared_e2e_context( &E2E, diff --git a/rust/tests/e2e/rpc_server_misc.rs b/rust/tests/e2e/rpc_server_misc.rs index 107034724..e53cce2e5 100644 --- a/rust/tests/e2e/rpc_server_misc.rs +++ b/rust/tests/e2e/rpc_server_misc.rs @@ -150,7 +150,7 @@ async fn should_login_list_getcurrentauth_and_logout_account() { .account() .login(AccountLoginRequest { host: "https://github.com".to_string(), - login: "rust-account-user".to_string(), + login: Some("rust-account-user".to_string()), token: "rust-account-token".to_string(), }) .await diff --git a/test/harness/package-lock.json b/test/harness/package-lock.json index bf1ebde84..18a9ac9a6 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.81-5", + "@github/copilot": "^1.0.81-6", "@modelcontextprotocol/sdk": "^1.26.0", "@types/node": "^25.3.3", "@types/node-forge": "^1.3.14", @@ -472,8 +472,8 @@ } }, "node_modules/@github/copilot": { - "version": "1.0.81-5", - "integrity": "sha512-CLZNjPx4lsseIlfXxmLCGbr4IbfjJmNFPiEzkuuPJBH/Nubw3ibKbJtqSMRiHaNTS4LVmVFkGzqZ7NeUE3MjgA==", + "version": "1.0.81-6", + "integrity": "sha512-hT29nRkf0EJE3N6lqeLOPszbdEyALZ+fjYG9zKX5a3L5r+o+m4/KF+8l2gn2yORNqOzwUYNj2vnVzKqeYYNLGg==", "dev": true, "license": "SEE LICENSE IN LICENSE.md", "dependencies": { @@ -483,19 +483,19 @@ "copilot": "npm-loader.js" }, "optionalDependencies": { - "@github/copilot-darwin-arm64": "1.0.81-5", - "@github/copilot-darwin-x64": "1.0.81-5", - "@github/copilot-linux-arm64": "1.0.81-5", - "@github/copilot-linux-x64": "1.0.81-5", - "@github/copilot-linuxmusl-arm64": "1.0.81-5", - "@github/copilot-linuxmusl-x64": "1.0.81-5", - "@github/copilot-win32-arm64": "1.0.81-5", - "@github/copilot-win32-x64": "1.0.81-5" + "@github/copilot-darwin-arm64": "1.0.81-6", + "@github/copilot-darwin-x64": "1.0.81-6", + "@github/copilot-linux-arm64": "1.0.81-6", + "@github/copilot-linux-x64": "1.0.81-6", + "@github/copilot-linuxmusl-arm64": "1.0.81-6", + "@github/copilot-linuxmusl-x64": "1.0.81-6", + "@github/copilot-win32-arm64": "1.0.81-6", + "@github/copilot-win32-x64": "1.0.81-6" } }, "node_modules/@github/copilot-darwin-arm64": { - "version": "1.0.81-5", - "integrity": "sha512-yop7JdAK847INCkUXsFWfuqP72//+xO3b8uXo4T8InWVjdE5DK5G/m9kWzgZfFS7LGoiTGwz2bV54Rfh/gRHVQ==", + "version": "1.0.81-6", + "integrity": "sha512-nALa4e8Jc/g5ltIHrpHBHByJ5rlgzoZFylZIrkQY+B9vr3L57d5F6fOiTbf/OF9blFQX7artWRE1K0TmowGNCA==", "cpu": [ "arm64" ], @@ -510,8 +510,8 @@ } }, "node_modules/@github/copilot-darwin-x64": { - "version": "1.0.81-5", - "integrity": "sha512-s//z4MWiWCGL8437rrODItnoL4FhhQ0bqDnFDRfUoKD7C304b2b2gSm5v4nCLsHjBWp0+jz64zQqNt573g0DYA==", + "version": "1.0.81-6", + "integrity": "sha512-K+bp799DejrsmxMNyaFAmKo4xnLJXBb8hkv9N8OCQukmTSoRpfqhv2oTDfgVFadwllt+py/FIdxKTZQYvPGGGw==", "cpu": [ "x64" ], @@ -526,8 +526,8 @@ } }, "node_modules/@github/copilot-linux-arm64": { - "version": "1.0.81-5", - "integrity": "sha512-Fe7yf5X644SsCGrfvEnW5u/MluA7karsHhprhoRzeyanaUg4A5t9USRSYVUg8xBByXpIILS/uHoFRlRWLUvLzA==", + "version": "1.0.81-6", + "integrity": "sha512-aEpnfTTjOxpesFo9jqk/phZUivOhNHbdBRfBrS2NiCPrQZFBYUC4wRVo/Xo2PMMQ4J07b6fU7JJQPoUUkKy5Wg==", "cpu": [ "arm64" ], @@ -542,8 +542,8 @@ } }, "node_modules/@github/copilot-linux-x64": { - "version": "1.0.81-5", - "integrity": "sha512-A0D+7zwbo5Zi9uA+5hkVUbM1lN799/AOK4bQbmo9dsyd4Msnm0LVypeMuqPocqFJ0hKQ0jmF50gRkQBXY19DwQ==", + "version": "1.0.81-6", + "integrity": "sha512-NFqonFfJCyA7d3bNoYeLWUQ69zelPr9TTnLpAHCi3scFZqbEvMBDFxW2XsKWwfYuuR9XzfU7/tgOUgq3gmL5aA==", "cpu": [ "x64" ], @@ -558,8 +558,8 @@ } }, "node_modules/@github/copilot-linuxmusl-arm64": { - "version": "1.0.81-5", - "integrity": "sha512-cQqr4K8erxym2TBLZo5h3m81BKzS2rLmzfUZUAmcIqc/pmVqVk9L44csheoDPOxoJJRK2x7acs/OJIXolQEUEQ==", + "version": "1.0.81-6", + "integrity": "sha512-EE99DFTAgTq6eOFDiiv+OUROD2pDQIrzyyJEfUS9K8JanwNc+Py8vTxrJ0yK0slpJ+Fue5uDRno6c9ys8OM59g==", "cpu": [ "arm64" ], @@ -574,8 +574,8 @@ } }, "node_modules/@github/copilot-linuxmusl-x64": { - "version": "1.0.81-5", - "integrity": "sha512-Ip/kBYXveSzlXh/JKDLQ3UE0YiyT+hJ0Z7utxqqocTee30NSpyP8/1xET7mqqezLE2B7/gdgdoPJVxf5xB4idw==", + "version": "1.0.81-6", + "integrity": "sha512-90HRKx25EjhlQNOCCdbiC0Ck0fSKyp8XUxUoCvuNdoigdUP54ZGS07dkyJiJq9KZaKilxZBSpXiNt8t5ETA2Sg==", "cpu": [ "x64" ], @@ -590,8 +590,8 @@ } }, "node_modules/@github/copilot-win32-arm64": { - "version": "1.0.81-5", - "integrity": "sha512-ERTckb1saKW6xZVIFWE5+1aIQPGlAjFers2BSCXWxtwPiIb0Ev/xSMY/gF0R8oH2tWHr06iGC3FnFzXzvn50OQ==", + "version": "1.0.81-6", + "integrity": "sha512-1dRSHF/7PFzB+AGORg8BJh2n1+N7+sIJDLqozrC9INWFp1t6ercptIXgJTF/V7UZVGQLO4LBBK1HH/QhzUmrfA==", "cpu": [ "arm64" ], @@ -606,8 +606,8 @@ } }, "node_modules/@github/copilot-win32-x64": { - "version": "1.0.81-5", - "integrity": "sha512-rAns726TCJD9fxBRD+ZAdh1+ZwHJncZtSg6T5w3j/7+pMkQUw1RSFxNXx/aeVAwKe+R9gufQWCkSgzaOwDr7kg==", + "version": "1.0.81-6", + "integrity": "sha512-lIbN1mk6Rm9bWrWU4/UfrC5OCga7XcBi2LBz5roDnNcuG8mKEevDcNOtbEYz/TaJg+WBMoTbGfXBVd1hGy2DTA==", "cpu": [ "x64" ], diff --git a/test/harness/package.json b/test/harness/package.json index c4f89970c..23b30b9aa 100644 --- a/test/harness/package.json +++ b/test/harness/package.json @@ -14,7 +14,7 @@ "node": "^20.19.0 || >=22.12.0" }, "devDependencies": { - "@github/copilot": "^1.0.81-5", + "@github/copilot": "^1.0.81-6", "@modelcontextprotocol/sdk": "^1.26.0", "@types/node": "^25.3.3", "@types/node-forge": "^1.3.14",