diff --git a/docs/guides/session-persistence.md b/docs/guides/session-persistence.md index 7c16c53a..d1fb39e6 100644 --- a/docs/guides/session-persistence.md +++ b/docs/guides/session-persistence.md @@ -164,6 +164,37 @@ var session = await client.ResumeSessionAsync("user-123-task-456"); await session.SendAndWaitAsync(new MessageOptions { Prompt = "What did we discuss earlier?" }); ``` +## Resume Options + +When resuming a session, you can optionally reconfigure many settings. This is useful when you need to change the model, update tool configurations, or modify behavior. + +| Option | Description | +|--------|-------------| +| `model` | Change the model for the resumed session | +| `systemMessage` | Override or extend the system prompt | +| `availableTools` | Restrict which tools are available | +| `excludedTools` | Disable specific tools | +| `provider` | Re-provide BYOK credentials (required for BYOK sessions) | +| `reasoningEffort` | Adjust reasoning effort level | +| `streaming` | Enable/disable streaming responses | +| `workingDirectory` | Change the working directory | +| `configDir` | Override configuration directory | +| `mcpServers` | Configure MCP servers | +| `customAgents` | Configure custom agents | +| `skillDirectories` | Directories to load skills from | +| `disabledSkills` | Skills to disable | +| `infiniteSessions` | Configure infinite session behavior | + +### Example: Changing Model on Resume + +```typescript +// Resume with a different model +const session = await client.resumeSession("user-123-task-456", { + model: "claude-sonnet-4", // Switch to a different model + reasoningEffort: "high", // Increase reasoning effort +}); +``` + ## Using BYOK (Bring Your Own Key) with Resumed Sessions When using your own API keys, you must re-provide the provider configuration when resuming. API keys are never persisted to disk for security reasons. diff --git a/dotnet/src/Client.cs b/dotnet/src/Client.cs index 57cebc4b..e2b86b14 100644 --- a/dotnet/src/Client.cs +++ b/dotnet/src/Client.cs @@ -437,19 +437,25 @@ public async Task ResumeSessionAsync(string sessionId, ResumeSes var request = new ResumeSessionRequest( sessionId, + config?.Model, config?.ReasoningEffort, config?.Tools?.Select(ToolDefinition.FromAIFunction).ToList(), + config?.SystemMessage, + config?.AvailableTools, + config?.ExcludedTools, config?.Provider, config?.OnPermissionRequest != null ? true : null, config?.OnUserInputRequest != null ? true : null, hasHooks ? true : null, config?.WorkingDirectory, + config?.ConfigDir, config?.DisableResume == true ? true : null, config?.Streaming == true ? true : null, config?.McpServers, config?.CustomAgents, config?.SkillDirectories, - config?.DisabledSkills); + config?.DisabledSkills, + config?.InfiniteSessions); var response = await InvokeRpcAsync( connection.Rpc, "session.resume", [request], cancellationToken); @@ -1326,19 +1332,25 @@ internal record CreateSessionResponse( internal record ResumeSessionRequest( string SessionId, + string? Model, string? ReasoningEffort, List? Tools, + SystemMessageConfig? SystemMessage, + List? AvailableTools, + List? ExcludedTools, ProviderConfig? Provider, bool? RequestPermission, bool? RequestUserInput, bool? Hooks, string? WorkingDirectory, + string? ConfigDir, bool? DisableResume, bool? Streaming, Dictionary? McpServers, List? CustomAgents, List? SkillDirectories, - List? DisabledSkills); + List? DisabledSkills, + InfiniteSessionConfig? InfiniteSessions); internal record ResumeSessionResponse( string SessionId, diff --git a/dotnet/src/Types.cs b/dotnet/src/Types.cs index b1d9a93b..28f4e2e7 100644 --- a/dotnet/src/Types.cs +++ b/dotnet/src/Types.cs @@ -770,7 +770,30 @@ public class SessionConfig public class ResumeSessionConfig { + /// + /// Model to use for this session. Can change the model when resuming. + /// + public string? Model { get; set; } + public ICollection? Tools { get; set; } + + /// + /// System message configuration. + /// + public SystemMessageConfig? SystemMessage { get; set; } + + /// + /// List of tool names to allow. When specified, only these tools will be available. + /// Takes precedence over ExcludedTools. + /// + public List? AvailableTools { get; set; } + + /// + /// List of tool names to disable. All other tools remain available. + /// Ignored if AvailableTools is specified. + /// + public List? ExcludedTools { get; set; } + public ProviderConfig? Provider { get; set; } /// @@ -801,6 +824,11 @@ public class ResumeSessionConfig /// public string? WorkingDirectory { get; set; } + /// + /// Override the default configuration directory location. + /// + public string? ConfigDir { get; set; } + /// /// When true, the session.resume event is not emitted. /// Default: false (resume event is emitted). @@ -834,6 +862,11 @@ public class ResumeSessionConfig /// List of skill names to disable. /// public List? DisabledSkills { get; set; } + + /// + /// Infinite session configuration for persistent workspaces and automatic compaction. + /// + public InfiniteSessionConfig? InfiniteSessions { get; set; } } public class MessageOptions diff --git a/go/client.go b/go/client.go index d45d3447..4e680ac2 100644 --- a/go/client.go +++ b/go/client.go @@ -681,9 +681,39 @@ func (c *Client) ResumeSessionWithOptions(ctx context.Context, sessionID string, } if config != nil { + if config.Model != "" { + params["model"] = config.Model + } if config.ReasoningEffort != "" { params["reasoningEffort"] = config.ReasoningEffort } + if config.SystemMessage != nil { + systemMessage := make(map[string]any) + + if config.SystemMessage.Mode != "" { + systemMessage["mode"] = config.SystemMessage.Mode + } + + if config.SystemMessage.Mode == "replace" { + if config.SystemMessage.Content != "" { + systemMessage["content"] = config.SystemMessage.Content + } + } else { + if config.SystemMessage.Content != "" { + systemMessage["content"] = config.SystemMessage.Content + } + } + + if len(systemMessage) > 0 { + params["systemMessage"] = systemMessage + } + } + if len(config.AvailableTools) > 0 { + params["availableTools"] = config.AvailableTools + } + if len(config.ExcludedTools) > 0 { + params["excludedTools"] = config.ExcludedTools + } if len(config.Tools) > 0 { toolDefs := make([]map[string]any, 0, len(config.Tools)) for _, tool := range config.Tools { @@ -731,6 +761,10 @@ func (c *Client) ResumeSessionWithOptions(ctx context.Context, sessionID string, if config.WorkingDirectory != "" { params["workingDirectory"] = config.WorkingDirectory } + // Add config directory + if config.ConfigDir != "" { + params["configDir"] = config.ConfigDir + } // Add disable resume flag if config.DisableResume { params["disableResume"] = true @@ -774,6 +808,20 @@ func (c *Client) ResumeSessionWithOptions(ctx context.Context, sessionID string, if len(config.DisabledSkills) > 0 { params["disabledSkills"] = config.DisabledSkills } + // Add infinite sessions configuration + if config.InfiniteSessions != nil { + infiniteSessions := map[string]any{} + if config.InfiniteSessions.Enabled != nil { + infiniteSessions["enabled"] = *config.InfiniteSessions.Enabled + } + if config.InfiniteSessions.BackgroundCompactionThreshold != nil { + infiniteSessions["backgroundCompactionThreshold"] = *config.InfiniteSessions.BackgroundCompactionThreshold + } + if config.InfiniteSessions.BufferExhaustionThreshold != nil { + infiniteSessions["bufferExhaustionThreshold"] = *config.InfiniteSessions.BufferExhaustionThreshold + } + params["infiniteSessions"] = infiniteSessions + } } result, err := c.client.Request("session.resume", params) diff --git a/go/types.go b/go/types.go index 7a1917f0..599eb35c 100644 --- a/go/types.go +++ b/go/types.go @@ -399,8 +399,18 @@ type ToolResult struct { // ResumeSessionConfig configures options when resuming a session type ResumeSessionConfig struct { + // Model to use for this session. Can change the model when resuming. + Model string // Tools exposes caller-implemented tools to the CLI Tools []Tool + // SystemMessage configures system message customization + SystemMessage *SystemMessageConfig + // AvailableTools is a list of tool names to allow. When specified, only these tools will be available. + // Takes precedence over ExcludedTools. + AvailableTools []string + // ExcludedTools is a list of tool names to disable. All other tools remain available. + // Ignored if AvailableTools is specified. + ExcludedTools []string // Provider configures a custom model provider Provider *ProviderConfig // ReasoningEffort level for models that support it. @@ -415,6 +425,8 @@ type ResumeSessionConfig struct { // WorkingDirectory is the working directory for the session. // Tool operations will be relative to this directory. WorkingDirectory string + // ConfigDir overrides the default configuration directory location. + ConfigDir string // Streaming enables streaming of assistant message and reasoning chunks. // When true, assistant.message_delta and assistant.reasoning_delta events // with deltaContent are sent as the response is generated. @@ -427,6 +439,8 @@ type ResumeSessionConfig struct { SkillDirectories []string // DisabledSkills is a list of skill names to disable DisabledSkills []string + // InfiniteSessions configures infinite sessions for persistent workspaces and automatic compaction. + InfiniteSessions *InfiniteSessionConfig // DisableResume, when true, skips emitting the session.resume event. // Useful for reconnecting to a session without triggering resume-related side effects. DisableResume bool diff --git a/nodejs/package-lock.json b/nodejs/package-lock.json index 4928a21d..d79ef1b2 100644 --- a/nodejs/package-lock.json +++ b/nodejs/package-lock.json @@ -9,7 +9,7 @@ "version": "0.1.8", "license": "MIT", "dependencies": { - "@github/copilot": "^0.0.402", + "@github/copilot": "^0.0.403", "vscode-jsonrpc": "^8.2.1", "zod": "^4.3.5" }, @@ -662,26 +662,26 @@ } }, "node_modules/@github/copilot": { - "version": "0.0.402", - "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-0.0.402.tgz", - "integrity": "sha512-8V7y3Cb77vvaOuxebVKlenKOyyM8lzt4//kdqRvO7tMbZuLUY0zicyW7mz+ohmnd5wm6faTtIF1k99UwBdTCmA==", + "version": "0.0.403", + "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-0.0.403.tgz", + "integrity": "sha512-v5jUdtGJReLmE1rmff/LZf+50nzmYQYAaSRNtVNr9g0j0GkCd/noQExe31i1+PudvWU0ZJjltR0B8pUfDRdA9Q==", "license": "SEE LICENSE IN LICENSE.md", "bin": { "copilot": "npm-loader.js" }, "optionalDependencies": { - "@github/copilot-darwin-arm64": "0.0.402", - "@github/copilot-darwin-x64": "0.0.402", - "@github/copilot-linux-arm64": "0.0.402", - "@github/copilot-linux-x64": "0.0.402", - "@github/copilot-win32-arm64": "0.0.402", - "@github/copilot-win32-x64": "0.0.402" + "@github/copilot-darwin-arm64": "0.0.403", + "@github/copilot-darwin-x64": "0.0.403", + "@github/copilot-linux-arm64": "0.0.403", + "@github/copilot-linux-x64": "0.0.403", + "@github/copilot-win32-arm64": "0.0.403", + "@github/copilot-win32-x64": "0.0.403" } }, "node_modules/@github/copilot-darwin-arm64": { - "version": "0.0.402", - "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-0.0.402.tgz", - "integrity": "sha512-UA2DZeQ3USSouWFlM4IoL8d4w55iEgVw78rhLmm/DGdyCEcsKyXNaLH+iW4Qxrznfx7FzK1Vri5/Pw/5BgL3EQ==", + "version": "0.0.403", + "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-0.0.403.tgz", + "integrity": "sha512-dOw8IleA0d1soHnbr/6wc6vZiYWNTKMgfTe/NET1nCfMzyKDt/0F0I7PT5y+DLujJknTla/ZeEmmBUmliTW4Cg==", "cpu": [ "arm64" ], @@ -695,9 +695,9 @@ } }, "node_modules/@github/copilot-darwin-x64": { - "version": "0.0.402", - "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-0.0.402.tgz", - "integrity": "sha512-NFQdqGnFqvG/AHo76SMxY+a4tjlWcs7kxYz0clY40Fy4L1FcrOLygZB/ZCpryC1YuRZYXN0jhhGD6J+oxJWM8Q==", + "version": "0.0.403", + "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-0.0.403.tgz", + "integrity": "sha512-aK2jSNWgY8eiZ+TmrvGhssMCPDTKArc0ip6Ul5OaslpytKks8hyXoRbxGD0N9sKioSUSbvKUf+1AqavbDpJO+w==", "cpu": [ "x64" ], @@ -711,9 +711,9 @@ } }, "node_modules/@github/copilot-linux-arm64": { - "version": "0.0.402", - "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-0.0.402.tgz", - "integrity": "sha512-GJkPaCqdF0J1Fh6yDrYXOmleQ1ooGxLbEoHgenFbx+EWZMDpGVTnvNCpXem9ZeDbb8RWkxw9tNn33/HwsUVFLQ==", + "version": "0.0.403", + "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-0.0.403.tgz", + "integrity": "sha512-KhoR2iR70O6vCkzf0h8/K+p82qAgOvMTgAPm9bVEHvbdGFR7Py9qL5v03bMbPxsA45oNaZAkzDhfTAqWhIAZsQ==", "cpu": [ "arm64" ], @@ -727,9 +727,9 @@ } }, "node_modules/@github/copilot-linux-x64": { - "version": "0.0.402", - "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-0.0.402.tgz", - "integrity": "sha512-XtfIVw2Q60Alf+aV/oVPRV6Zdm/mragvWaSWZeNIm49pai+A7JaP6GXtYtLQ+agyrsVIFm+U7h36Vy2vlQfrqg==", + "version": "0.0.403", + "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-0.0.403.tgz", + "integrity": "sha512-eoswUc9vo4TB+/9PgFJLVtzI4dPjkpJXdCsAioVuoqPdNxHxlIHFe9HaVcqMRZxUNY1YHEBZozy+IpUEGjgdfQ==", "cpu": [ "x64" ], @@ -743,9 +743,9 @@ } }, "node_modules/@github/copilot-win32-arm64": { - "version": "0.0.402", - "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-0.0.402.tgz", - "integrity": "sha512-EDYfKc2PysDrzmm2Ng4w9dhG0U+tPoEQXw+fdL+HYkOuqNIMFAjImleM6lhLa0y7DdW0/KrgjGrux/VNkbPsGQ==", + "version": "0.0.403", + "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-0.0.403.tgz", + "integrity": "sha512-djWjzCsp2xPNafMyOZ/ivU328/WvWhdroGie/DugiJBTgQL2SP0quWW1fhTlDwE81a3g9CxfJonaRgOpFTJTcg==", "cpu": [ "arm64" ], @@ -759,9 +759,9 @@ } }, "node_modules/@github/copilot-win32-x64": { - "version": "0.0.402", - "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-0.0.402.tgz", - "integrity": "sha512-z3OVk7xQAr8EofBe3lTceugsCzclt1Tt4ol6cFfzuK3blkyx2lWymnu9slxkcWgbVQK7uDvOqi4U3Bx2NrvXbg==", + "version": "0.0.403", + "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-0.0.403.tgz", + "integrity": "sha512-lju8cHy2E6Ux7R7tWyLZeksYC2MVZu9i9ocjiBX/qfG2/pNJs7S5OlkwKJ0BSXSbZEHQYq7iHfEWp201bVfk9A==", "cpu": [ "x64" ], diff --git a/nodejs/package.json b/nodejs/package.json index d2af6828..3e3abf1c 100644 --- a/nodejs/package.json +++ b/nodejs/package.json @@ -40,7 +40,7 @@ "author": "GitHub", "license": "MIT", "dependencies": { - "@github/copilot": "^0.0.402", + "@github/copilot": "^0.0.403", "vscode-jsonrpc": "^8.2.1", "zod": "^4.3.5" }, diff --git a/nodejs/src/client.ts b/nodejs/src/client.ts index 20dc17f8..86330769 100644 --- a/nodejs/src/client.ts +++ b/nodejs/src/client.ts @@ -550,7 +550,11 @@ export class CopilotClient { const response = await this.connection!.sendRequest("session.resume", { sessionId, + model: config.model, reasoningEffort: config.reasoningEffort, + systemMessage: config.systemMessage, + availableTools: config.availableTools, + excludedTools: config.excludedTools, tools: config.tools?.map((tool) => ({ name: tool.name, description: tool.description, @@ -561,11 +565,13 @@ export class CopilotClient { requestUserInput: !!config.onUserInputRequest, hooks: !!(config.hooks && Object.values(config.hooks).some(Boolean)), workingDirectory: config.workingDirectory, + configDir: config.configDir, streaming: config.streaming, mcpServers: config.mcpServers, customAgents: config.customAgents, skillDirectories: config.skillDirectories, disabledSkills: config.disabledSkills, + infiniteSessions: config.infiniteSessions, disableResume: config.disableResume, }); diff --git a/nodejs/src/types.ts b/nodejs/src/types.ts index e3b18ffe..20608180 100644 --- a/nodejs/src/types.ts +++ b/nodejs/src/types.ts @@ -730,7 +730,11 @@ export interface SessionConfig { */ export type ResumeSessionConfig = Pick< SessionConfig, + | "model" | "tools" + | "systemMessage" + | "availableTools" + | "excludedTools" | "provider" | "streaming" | "reasoningEffort" @@ -738,10 +742,12 @@ export type ResumeSessionConfig = Pick< | "onUserInputRequest" | "hooks" | "workingDirectory" + | "configDir" | "mcpServers" | "customAgents" | "skillDirectories" | "disabledSkills" + | "infiniteSessions" > & { /** * When true, skips emitting the session.resume event. diff --git a/python/copilot/client.py b/python/copilot/client.py index da1ba8c0..f2b52eac 100644 --- a/python/copilot/client.py +++ b/python/copilot/client.py @@ -566,11 +566,31 @@ async def resume_session( tool_defs.append(definition) payload: dict[str, Any] = {"sessionId": session_id} + + # Add model if provided + model = cfg.get("model") + if model: + payload["model"] = model + if cfg.get("reasoning_effort"): payload["reasoningEffort"] = cfg["reasoning_effort"] if tool_defs: payload["tools"] = tool_defs + # Add system message configuration if provided + system_message = cfg.get("system_message") + if system_message: + payload["systemMessage"] = system_message + + # Add available/excluded tools if provided + available_tools = cfg.get("available_tools") + if available_tools: + payload["availableTools"] = available_tools + + excluded_tools = cfg.get("excluded_tools") + if excluded_tools: + payload["excludedTools"] = excluded_tools + provider = cfg.get("provider") if provider: payload["provider"] = self._convert_provider_to_wire_format(provider) @@ -600,6 +620,11 @@ async def resume_session( if working_directory: payload["workingDirectory"] = working_directory + # Add config directory if provided + config_dir = cfg.get("config_dir") + if config_dir: + payload["configDir"] = config_dir + # Add disable resume flag if provided disable_resume = cfg.get("disable_resume") if disable_resume: @@ -627,6 +652,22 @@ async def resume_session( if disabled_skills: payload["disabledSkills"] = disabled_skills + # Add infinite sessions configuration if provided + infinite_sessions = cfg.get("infinite_sessions") + if infinite_sessions: + wire_config: dict[str, Any] = {} + if "enabled" in infinite_sessions: + wire_config["enabled"] = infinite_sessions["enabled"] + if "background_compaction_threshold" in infinite_sessions: + wire_config["backgroundCompactionThreshold"] = infinite_sessions[ + "background_compaction_threshold" + ] + if "buffer_exhaustion_threshold" in infinite_sessions: + wire_config["bufferExhaustionThreshold"] = infinite_sessions[ + "buffer_exhaustion_threshold" + ] + payload["infiniteSessions"] = wire_config + if not self._client: raise RuntimeError("Client not connected") response = await self._client.request("session.resume", payload) diff --git a/python/copilot/types.py b/python/copilot/types.py index a5c0b0bc..3cecbe64 100644 --- a/python/copilot/types.py +++ b/python/copilot/types.py @@ -527,7 +527,14 @@ class ProviderConfig(TypedDict, total=False): class ResumeSessionConfig(TypedDict, total=False): """Configuration for resuming a session""" + # Model to use for this session. Can change the model when resuming. + model: str tools: list[Tool] + system_message: SystemMessageConfig # System message configuration + # List of tool names to allow (takes precedence over excluded_tools) + available_tools: list[str] + # List of tool names to disable (ignored if available_tools is set) + excluded_tools: list[str] provider: ProviderConfig # Reasoning effort level for models that support it. reasoning_effort: ReasoningEffort @@ -538,6 +545,8 @@ class ResumeSessionConfig(TypedDict, total=False): hooks: SessionHooks # Working directory for the session. Tool operations will be relative to this directory. working_directory: str + # Override the default configuration directory location. + config_dir: str # Enable streaming of assistant message chunks streaming: bool # MCP server configurations for the session @@ -548,6 +557,8 @@ class ResumeSessionConfig(TypedDict, total=False): skill_directories: list[str] # List of skill names to disable disabled_skills: list[str] + # Infinite session configuration for persistent workspaces and automatic compaction. + infinite_sessions: InfiniteSessionConfig # When True, skips emitting the session.resume event. # Useful for reconnecting to a session without triggering resume-related side effects. disable_resume: bool diff --git a/test/harness/package-lock.json b/test/harness/package-lock.json index f66cc8d3..d1725f03 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": "^0.0.402", + "@github/copilot": "^0.0.403", "@types/node": "^25.2.0", "openai": "^6.17.0", "tsx": "^4.21.0", @@ -461,27 +461,27 @@ } }, "node_modules/@github/copilot": { - "version": "0.0.402", - "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-0.0.402.tgz", - "integrity": "sha512-8V7y3Cb77vvaOuxebVKlenKOyyM8lzt4//kdqRvO7tMbZuLUY0zicyW7mz+ohmnd5wm6faTtIF1k99UwBdTCmA==", + "version": "0.0.403", + "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-0.0.403.tgz", + "integrity": "sha512-v5jUdtGJReLmE1rmff/LZf+50nzmYQYAaSRNtVNr9g0j0GkCd/noQExe31i1+PudvWU0ZJjltR0B8pUfDRdA9Q==", "dev": true, "license": "SEE LICENSE IN LICENSE.md", "bin": { "copilot": "npm-loader.js" }, "optionalDependencies": { - "@github/copilot-darwin-arm64": "0.0.402", - "@github/copilot-darwin-x64": "0.0.402", - "@github/copilot-linux-arm64": "0.0.402", - "@github/copilot-linux-x64": "0.0.402", - "@github/copilot-win32-arm64": "0.0.402", - "@github/copilot-win32-x64": "0.0.402" + "@github/copilot-darwin-arm64": "0.0.403", + "@github/copilot-darwin-x64": "0.0.403", + "@github/copilot-linux-arm64": "0.0.403", + "@github/copilot-linux-x64": "0.0.403", + "@github/copilot-win32-arm64": "0.0.403", + "@github/copilot-win32-x64": "0.0.403" } }, "node_modules/@github/copilot-darwin-arm64": { - "version": "0.0.402", - "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-0.0.402.tgz", - "integrity": "sha512-UA2DZeQ3USSouWFlM4IoL8d4w55iEgVw78rhLmm/DGdyCEcsKyXNaLH+iW4Qxrznfx7FzK1Vri5/Pw/5BgL3EQ==", + "version": "0.0.403", + "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-0.0.403.tgz", + "integrity": "sha512-dOw8IleA0d1soHnbr/6wc6vZiYWNTKMgfTe/NET1nCfMzyKDt/0F0I7PT5y+DLujJknTla/ZeEmmBUmliTW4Cg==", "cpu": [ "arm64" ], @@ -496,9 +496,9 @@ } }, "node_modules/@github/copilot-darwin-x64": { - "version": "0.0.402", - "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-0.0.402.tgz", - "integrity": "sha512-NFQdqGnFqvG/AHo76SMxY+a4tjlWcs7kxYz0clY40Fy4L1FcrOLygZB/ZCpryC1YuRZYXN0jhhGD6J+oxJWM8Q==", + "version": "0.0.403", + "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-0.0.403.tgz", + "integrity": "sha512-aK2jSNWgY8eiZ+TmrvGhssMCPDTKArc0ip6Ul5OaslpytKks8hyXoRbxGD0N9sKioSUSbvKUf+1AqavbDpJO+w==", "cpu": [ "x64" ], @@ -513,9 +513,9 @@ } }, "node_modules/@github/copilot-linux-arm64": { - "version": "0.0.402", - "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-0.0.402.tgz", - "integrity": "sha512-GJkPaCqdF0J1Fh6yDrYXOmleQ1ooGxLbEoHgenFbx+EWZMDpGVTnvNCpXem9ZeDbb8RWkxw9tNn33/HwsUVFLQ==", + "version": "0.0.403", + "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-0.0.403.tgz", + "integrity": "sha512-KhoR2iR70O6vCkzf0h8/K+p82qAgOvMTgAPm9bVEHvbdGFR7Py9qL5v03bMbPxsA45oNaZAkzDhfTAqWhIAZsQ==", "cpu": [ "arm64" ], @@ -530,9 +530,9 @@ } }, "node_modules/@github/copilot-linux-x64": { - "version": "0.0.402", - "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-0.0.402.tgz", - "integrity": "sha512-XtfIVw2Q60Alf+aV/oVPRV6Zdm/mragvWaSWZeNIm49pai+A7JaP6GXtYtLQ+agyrsVIFm+U7h36Vy2vlQfrqg==", + "version": "0.0.403", + "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-0.0.403.tgz", + "integrity": "sha512-eoswUc9vo4TB+/9PgFJLVtzI4dPjkpJXdCsAioVuoqPdNxHxlIHFe9HaVcqMRZxUNY1YHEBZozy+IpUEGjgdfQ==", "cpu": [ "x64" ], @@ -547,9 +547,9 @@ } }, "node_modules/@github/copilot-win32-arm64": { - "version": "0.0.402", - "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-0.0.402.tgz", - "integrity": "sha512-EDYfKc2PysDrzmm2Ng4w9dhG0U+tPoEQXw+fdL+HYkOuqNIMFAjImleM6lhLa0y7DdW0/KrgjGrux/VNkbPsGQ==", + "version": "0.0.403", + "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-0.0.403.tgz", + "integrity": "sha512-djWjzCsp2xPNafMyOZ/ivU328/WvWhdroGie/DugiJBTgQL2SP0quWW1fhTlDwE81a3g9CxfJonaRgOpFTJTcg==", "cpu": [ "arm64" ], @@ -564,9 +564,9 @@ } }, "node_modules/@github/copilot-win32-x64": { - "version": "0.0.402", - "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-0.0.402.tgz", - "integrity": "sha512-z3OVk7xQAr8EofBe3lTceugsCzclt1Tt4ol6cFfzuK3blkyx2lWymnu9slxkcWgbVQK7uDvOqi4U3Bx2NrvXbg==", + "version": "0.0.403", + "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-0.0.403.tgz", + "integrity": "sha512-lju8cHy2E6Ux7R7tWyLZeksYC2MVZu9i9ocjiBX/qfG2/pNJs7S5OlkwKJ0BSXSbZEHQYq7iHfEWp201bVfk9A==", "cpu": [ "x64" ], diff --git a/test/harness/package.json b/test/harness/package.json index f180401e..7a1a37ad 100644 --- a/test/harness/package.json +++ b/test/harness/package.json @@ -11,7 +11,7 @@ "test": "vitest run" }, "devDependencies": { - "@github/copilot": "^0.0.402", + "@github/copilot": "^0.0.403", "@types/node": "^25.2.0", "openai": "^6.17.0", "tsx": "^4.21.0",