,
+ /// Human-readable title for the selection UI
+ pub title: String,
+}
+
/// Schema for the `TaskAgentInfo` type.
///
///
@@ -8694,16 +8724,22 @@ pub struct SessionFsSqliteExistsParams {
///
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum AgentInfoSource {
+ /// Agent loaded from the user's personal agent configuration.
#[serde(rename = "user")]
User,
+ /// Agent loaded from the current project's repository configuration.
#[serde(rename = "project")]
Project,
+ /// Agent inherited from a parent project or workspace.
#[serde(rename = "inherited")]
Inherited,
+ /// Agent provided by a remote runtime or service.
#[serde(rename = "remote")]
Remote,
+ /// Agent contributed by an installed plugin.
#[serde(rename = "plugin")]
Plugin,
+ /// Agent built into the Copilot runtime.
#[serde(rename = "builtin")]
Builtin,
/// Unknown variant for forward compatibility.
@@ -8723,18 +8759,25 @@ pub enum ApiKeyAuthInfoType {
/// Authentication type
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum AuthInfoType {
+ /// Authentication provided by a GitHub App HMAC credential.
#[serde(rename = "hmac")]
Hmac,
+ /// Authentication resolved from environment-provided credentials.
#[serde(rename = "env")]
Env,
+ /// Authentication from an interactive user sign-in.
#[serde(rename = "user")]
User,
+ /// Authentication delegated to the GitHub CLI.
#[serde(rename = "gh-cli")]
GhCli,
+ /// Authentication from an API key credential.
#[serde(rename = "api-key")]
ApiKey,
+ /// Authentication from a GitHub token.
#[serde(rename = "token")]
Token,
+ /// Authentication from a Copilot API token.
#[serde(rename = "copilot-api-token")]
CopilotApiToken,
/// Unknown variant for forward compatibility.
@@ -8746,6 +8789,7 @@ pub enum AuthInfoType {
/// Optional completion hint for the input (e.g. 'directory' for filesystem path completion)
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum SlashCommandInputCompletion {
+ /// Input should complete filesystem directories.
#[serde(rename = "directory")]
Directory,
/// Unknown variant for forward compatibility.
@@ -8757,10 +8801,13 @@ pub enum SlashCommandInputCompletion {
/// Coarse command category for grouping and behavior: runtime built-in, skill-backed command, or SDK/client-owned command
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum SlashCommandKind {
+ /// Command implemented by the runtime.
#[serde(rename = "builtin")]
Builtin,
+ /// Command backed by a skill.
#[serde(rename = "skill")]
Skill,
+ /// Command registered by an SDK client or extension.
#[serde(rename = "client")]
Client,
/// Unknown variant for forward compatibility.
@@ -8779,8 +8826,10 @@ pub enum SlashCommandKind {
///
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum ConnectedRemoteSessionMetadataKind {
+ /// Remote CLI session.
#[serde(rename = "remote-session")]
RemoteSession,
+ /// GitHub Copilot coding agent session.
#[serde(rename = "coding-agent")]
CodingAgent,
/// Unknown variant for forward compatibility.
@@ -8792,10 +8841,13 @@ pub enum ConnectedRemoteSessionMetadataKind {
/// Controls how MCP tool result content is filtered: none leaves content unchanged, markdown sanitizes HTML while preserving Markdown-friendly output, and hidden_characters removes characters that can hide directives.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum ContentFilterMode {
+ /// Leave MCP tool result content unchanged.
#[serde(rename = "none")]
None,
+ /// Sanitize HTML while preserving Markdown-friendly output.
#[serde(rename = "markdown")]
Markdown,
+ /// Remove characters that can hide directives.
#[serde(rename = "hidden_characters")]
HiddenCharacters,
/// Unknown variant for forward compatibility.
@@ -8823,12 +8875,16 @@ pub enum CopilotApiTokenAuthInfoType {
/// Server transport type: stdio, http, sse, or memory
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum DiscoveredMcpServerType {
+ /// Server communicates over stdio with a local child process.
#[serde(rename = "stdio")]
Stdio,
+ /// Server communicates over streamable HTTP.
#[serde(rename = "http")]
Http,
+ /// Server communicates over Server-Sent Events.
#[serde(rename = "sse")]
Sse,
+ /// Server is backed by an in-memory runtime implementation.
#[serde(rename = "memory")]
Memory,
/// Unknown variant for forward compatibility.
@@ -8855,8 +8911,10 @@ pub enum EnvAuthInfoType {
///
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum EventsAgentScope {
+ /// Return main-agent events and typed subagent lifecycle events.
#[serde(rename = "primary")]
Primary,
+ /// Return events from all agents.
#[serde(rename = "all")]
All,
/// Unknown variant for forward compatibility.
@@ -8875,8 +8933,10 @@ pub enum EventsAgentScope {
///
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum EventsCursorStatus {
+ /// The cursor was applied successfully.
#[serde(rename = "ok")]
Ok,
+ /// The cursor referred to history that is no longer available.
#[serde(rename = "expired")]
Expired,
/// Unknown variant for forward compatibility.
@@ -8895,8 +8955,10 @@ pub enum EventsCursorStatus {
///
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum ExtensionSource {
+ /// Extension discovered from the current project's .github/extensions directory.
#[serde(rename = "project")]
Project,
+ /// Extension discovered from the user's ~/.copilot/extensions directory.
#[serde(rename = "user")]
User,
/// Unknown variant for forward compatibility.
@@ -8915,12 +8977,16 @@ pub enum ExtensionSource {
///
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum ExtensionStatus {
+ /// The extension process is running.
#[serde(rename = "running")]
Running,
+ /// The extension is installed but disabled.
#[serde(rename = "disabled")]
Disabled,
+ /// The extension failed to start or crashed.
#[serde(rename = "failed")]
Failed,
+ /// The extension process is starting.
#[serde(rename = "starting")]
Starting,
/// Unknown variant for forward compatibility.
@@ -8932,8 +8998,10 @@ pub enum ExtensionStatus {
/// Binary result type discriminator. Use "image" for images and "resource" for other binary data.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum ExternalToolTextResultForLlmBinaryResultsForLlmType {
+ /// Binary image data.
#[serde(rename = "image")]
Image,
+ /// Other binary resource data.
#[serde(rename = "resource")]
Resource,
/// Unknown variant for forward compatibility.
@@ -8969,8 +9037,10 @@ pub enum ExternalToolTextResultForLlmContentResourceType {
/// Theme variant this icon is intended for
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum ExternalToolTextResultForLlmContentResourceLinkIconTheme {
+ /// Icon intended for light themes.
#[serde(rename = "light")]
Light,
+ /// Icon intended for dark themes.
#[serde(rename = "dark")]
Dark,
/// Unknown variant for forward compatibility.
@@ -9054,12 +9124,16 @@ pub enum InstalledPluginSourceUrlSource {
/// Where this source lives — used for UI grouping
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum InstructionsSourcesLocation {
+ /// Instructions live in user-level configuration.
#[serde(rename = "user")]
User,
+ /// Instructions live in repository-level configuration.
#[serde(rename = "repository")]
Repository,
+ /// Instructions live under the current working directory.
#[serde(rename = "working-directory")]
WorkingDirectory,
+ /// Instructions live in plugin-provided configuration.
#[serde(rename = "plugin")]
Plugin,
/// Unknown variant for forward compatibility.
@@ -9071,18 +9145,25 @@ pub enum InstructionsSourcesLocation {
/// Category of instruction source — used for merge logic
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum InstructionsSourcesType {
+ /// Instructions loaded from the user's home configuration.
#[serde(rename = "home")]
Home,
+ /// Instructions loaded from repository-scoped files.
#[serde(rename = "repo")]
Repo,
+ /// Instructions loaded from model-specific files.
#[serde(rename = "model")]
Model,
+ /// Instructions loaded from VS Code instruction files.
#[serde(rename = "vscode")]
Vscode,
+ /// Instructions discovered from nested agent files.
#[serde(rename = "nested-agents")]
NestedAgents,
+ /// Instructions inherited from child instruction files.
#[serde(rename = "child-instructions")]
ChildInstructions,
+ /// Instructions supplied by an installed plugin.
#[serde(rename = "plugin")]
Plugin,
/// Unknown variant for forward compatibility.
@@ -9094,10 +9175,13 @@ pub enum InstructionsSourcesType {
/// Log severity level. Determines how the message is displayed in the timeline. Defaults to "info".
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum SessionLogLevel {
+ /// Informational message.
#[serde(rename = "info")]
Info,
+ /// Warning message that may require attention.
#[serde(rename = "warning")]
Warning,
+ /// Error message describing a failure.
#[serde(rename = "error")]
Error,
/// Unknown variant for forward compatibility.
@@ -9116,10 +9200,13 @@ pub enum SessionLogLevel {
///
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum McpSamplingExecutionAction {
+ /// The sampling inference completed and produced a result.
#[serde(rename = "success")]
Success,
+ /// The sampling inference failed or was rejected.
#[serde(rename = "failure")]
Failure,
+ /// The sampling inference was cancelled before completion.
#[serde(rename = "cancelled")]
Cancelled,
/// Unknown variant for forward compatibility.
@@ -9131,8 +9218,10 @@ pub enum McpSamplingExecutionAction {
/// OAuth grant type to use when authenticating to the remote MCP server.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum McpServerConfigHttpOauthGrantType {
+ /// Interactive browser-based authorization code flow with PKCE.
#[serde(rename = "authorization_code")]
AuthorizationCode,
+ /// Headless client credentials flow using the configured OAuth client.
#[serde(rename = "client_credentials")]
ClientCredentials,
/// Unknown variant for forward compatibility.
@@ -9144,8 +9233,10 @@ pub enum McpServerConfigHttpOauthGrantType {
/// Remote transport type. Defaults to "http" when omitted.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum McpServerConfigHttpType {
+ /// Streamable HTTP transport.
#[serde(rename = "http")]
Http,
+ /// Server-Sent Events transport.
#[serde(rename = "sse")]
Sse,
/// Unknown variant for forward compatibility.
@@ -9164,8 +9255,10 @@ pub enum McpServerConfigHttpType {
///
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum McpSetEnvValueModeDetails {
+ /// Treat MCP server environment values as literal strings.
#[serde(rename = "direct")]
Direct,
+ /// Treat MCP server environment values as host-side references to resolve before launch.
#[serde(rename = "indirect")]
Indirect,
/// Unknown variant for forward compatibility.
@@ -9184,8 +9277,10 @@ pub enum McpSetEnvValueModeDetails {
///
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum SessionWorkingDirectoryContextHostType {
+ /// The working directory repository is hosted on GitHub.
#[serde(rename = "github")]
Github,
+ /// The working directory repository is hosted on Azure DevOps.
#[serde(rename = "ado")]
Ado,
/// Unknown variant for forward compatibility.
@@ -9204,10 +9299,13 @@ pub enum SessionWorkingDirectoryContextHostType {
///
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum MetadataSnapshotCurrentMode {
+ /// The agent is responding interactively to the user.
#[serde(rename = "interactive")]
Interactive,
+ /// The agent is preparing a plan before making changes.
#[serde(rename = "plan")]
Plan,
+ /// The agent is working autonomously toward task completion.
#[serde(rename = "autopilot")]
Autopilot,
/// Unknown variant for forward compatibility.
@@ -9226,8 +9324,10 @@ pub enum MetadataSnapshotCurrentMode {
///
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum MetadataSnapshotRemoteMetadataTaskType {
+ /// Remote task originated from Copilot Coding Agent.
#[serde(rename = "cca")]
Cca,
+ /// Remote task originated from a CLI remote-session invocation.
#[serde(rename = "cli")]
Cli,
/// Unknown variant for forward compatibility.
@@ -9239,10 +9339,13 @@ pub enum MetadataSnapshotRemoteMetadataTaskType {
/// Model capability category for grouping in the model picker
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum ModelPickerCategory {
+ /// Lightweight model category optimized for faster, lower-cost interactions.
#[serde(rename = "lightweight")]
Lightweight,
+ /// Versatile model category suitable for a broad range of tasks.
#[serde(rename = "versatile")]
Versatile,
+ /// Powerful model category optimized for complex tasks.
#[serde(rename = "powerful")]
Powerful,
/// Unknown variant for forward compatibility.
@@ -9254,12 +9357,16 @@ pub enum ModelPickerCategory {
/// Relative cost tier for token-based billing users
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum ModelPickerPriceCategory {
+ /// Lowest relative token cost tier.
#[serde(rename = "low")]
Low,
+ /// Medium relative token cost tier.
#[serde(rename = "medium")]
Medium,
+ /// High relative token cost tier.
#[serde(rename = "high")]
High,
+ /// Highest relative token cost tier.
#[serde(rename = "very_high")]
VeryHigh,
/// Unknown variant for forward compatibility.
@@ -9271,10 +9378,13 @@ pub enum ModelPickerPriceCategory {
/// Current policy state for this model
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum ModelPolicyState {
+ /// The model is enabled by policy.
#[serde(rename = "enabled")]
Enabled,
+ /// The model is disabled by policy.
#[serde(rename = "disabled")]
Disabled,
+ /// No explicit policy is configured for the model.
#[serde(rename = "unconfigured")]
Unconfigured,
/// Unknown variant for forward compatibility.
@@ -9293,8 +9403,10 @@ pub enum ModelPolicyState {
///
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum OptionsUpdateEnvValueMode {
+ /// Pass MCP server environment values as literal strings.
#[serde(rename = "direct")]
Direct,
+ /// Resolve MCP server environment values from host-side references.
#[serde(rename = "indirect")]
Indirect,
/// Unknown variant for forward compatibility.
@@ -9625,8 +9737,10 @@ pub enum PermissionDecision {
/// Allowed values for the `PermissionsConfigureAdditionalContentExclusionPolicyScope` enumeration.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionsConfigureAdditionalContentExclusionPolicyScope {
+ /// The content exclusion policy applies to the current repository.
#[serde(rename = "repo")]
Repo,
+ /// The content exclusion policy applies across all repositories.
#[serde(rename = "all")]
All,
/// Unknown variant for forward compatibility.
@@ -9638,8 +9752,10 @@ pub enum PermissionsConfigureAdditionalContentExclusionPolicyScope {
/// Whether the change applies to ephemeral session-scoped rules (cleared at session end) or to location-scoped rules persisted via the location-permissions config file.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionsModifyRulesScope {
+ /// Apply the rule change only to this session.
#[serde(rename = "session")]
Session,
+ /// Persist the rule change for this project location.
#[serde(rename = "location")]
Location,
/// Unknown variant for forward compatibility.
@@ -9651,12 +9767,16 @@ pub enum PermissionsModifyRulesScope {
/// Optional source for allow-all telemetry. Defaults to `rpc` when omitted for SDK callers.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionsSetApproveAllSource {
+ /// Allow-all was enabled from a CLI command-line flag.
#[serde(rename = "cli_flag")]
CliFlag,
+ /// Allow-all was enabled by a slash command.
#[serde(rename = "slash_command")]
SlashCommand,
+ /// Allow-all was enabled by confirming autopilot behavior.
#[serde(rename = "autopilot_confirmation")]
AutopilotConfirmation,
+ /// Allow-all was enabled through an RPC caller.
#[serde(rename = "rpc")]
Rpc,
/// Unknown variant for forward compatibility.
@@ -9675,8 +9795,10 @@ pub enum PermissionsSetApproveAllSource {
///
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum QueuePendingItemsKind {
+ /// A queued user message.
#[serde(rename = "message")]
Message,
+ /// A queued slash command or model-change command.
#[serde(rename = "command")]
Command,
/// Unknown variant for forward compatibility.
@@ -9695,10 +9817,13 @@ pub enum QueuePendingItemsKind {
///
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum RemoteSessionMode {
+ /// Disable remote session export and steering.
#[serde(rename = "off")]
Off,
+ /// Export session events to GitHub without enabling remote steering.
#[serde(rename = "export")]
Export,
+ /// Enable both remote session export and remote steering.
#[serde(rename = "on")]
On,
/// Unknown variant for forward compatibility.
@@ -9710,12 +9835,16 @@ pub enum RemoteSessionMode {
/// The UI mode the agent was in when this message was sent. Defaults to the session's current mode.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum SendAgentMode {
+ /// The agent is responding interactively to the user.
#[serde(rename = "interactive")]
Interactive,
+ /// The agent is preparing a plan before making changes.
#[serde(rename = "plan")]
Plan,
+ /// The agent is working autonomously toward task completion.
#[serde(rename = "autopilot")]
Autopilot,
+ /// The agent is in shell-focused UI mode.
#[serde(rename = "shell")]
Shell,
/// Unknown variant for forward compatibility.
@@ -9751,10 +9880,13 @@ pub enum SendAttachmentFileType {
/// Type of GitHub reference
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum SendAttachmentGithubReferenceType {
+ /// GitHub issue reference.
#[serde(rename = "issue")]
Issue,
+ /// GitHub pull request reference.
#[serde(rename = "pr")]
Pr,
+ /// GitHub discussion reference.
#[serde(rename = "discussion")]
Discussion,
/// Unknown variant for forward compatibility.
@@ -9774,8 +9906,10 @@ pub enum SendAttachmentSelectionType {
/// How to deliver the message. `enqueue` (default) appends to the message queue. `immediate` interjects during an in-progress turn.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum SendMode {
+ /// Append the message to the normal session queue.
#[serde(rename = "enqueue")]
Enqueue,
+ /// Interject the message during the in-progress turn.
#[serde(rename = "immediate")]
Immediate,
/// Unknown variant for forward compatibility.
@@ -9794,8 +9928,10 @@ pub enum SendMode {
///
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum SessionContextHostType {
+ /// Session repository is hosted on GitHub.
#[serde(rename = "github")]
Github,
+ /// Session repository is hosted on Azure DevOps.
#[serde(rename = "ado")]
Ado,
/// Unknown variant for forward compatibility.
@@ -9807,7 +9943,9 @@ pub enum SessionContextHostType {
/// Error classification
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum SessionFsErrorCode {
+ /// The requested path does not exist.
ENOENT,
+ /// The filesystem operation failed for an unspecified reason.
UNKNOWN,
/// Unknown variant for forward compatibility.
#[default]
@@ -9818,8 +9956,10 @@ pub enum SessionFsErrorCode {
/// Entry type
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum SessionFsReaddirWithTypesEntryType {
+ /// The entry is a file.
#[serde(rename = "file")]
File,
+ /// The entry is a directory.
#[serde(rename = "directory")]
Directory,
/// Unknown variant for forward compatibility.
@@ -9831,8 +9971,10 @@ pub enum SessionFsReaddirWithTypesEntryType {
/// Path conventions used by this filesystem
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum SessionFsSetProviderConventions {
+ /// Paths use Windows path conventions.
#[serde(rename = "windows")]
Windows,
+ /// Paths use POSIX path conventions.
#[serde(rename = "posix")]
Posix,
/// Unknown variant for forward compatibility.
@@ -9844,10 +9986,13 @@ pub enum SessionFsSetProviderConventions {
/// How to execute the query: 'exec' for DDL/multi-statement (no results), 'query' for SELECT (returns rows), 'run' for INSERT/UPDATE/DELETE (returns rowsAffected)
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum SessionFsSqliteQueryType {
+ /// Execute DDL or multi-statement SQL without returning rows.
#[serde(rename = "exec")]
Exec,
+ /// Execute a SELECT-style query and return rows.
#[serde(rename = "query")]
Query,
+ /// Execute INSERT, UPDATE, or DELETE SQL and return affected-row metadata.
#[serde(rename = "run")]
Run,
/// Unknown variant for forward compatibility.
@@ -9883,8 +10028,10 @@ pub enum SessionInstalledPluginSourceUrlSource {
/// Repository host type, if known
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum SessionMetadataSnapshotWorkspaceHostType {
+ /// Workspace summary repository is hosted on GitHub.
#[serde(rename = "github")]
Github,
+ /// Workspace summary repository is hosted on Azure DevOps.
#[serde(rename = "ado")]
Ado,
/// Unknown variant for forward compatibility.
@@ -9896,8 +10043,11 @@ pub enum SessionMetadataSnapshotWorkspaceHostType {
/// Signal to send (default: SIGTERM)
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum ShellKillSignal {
+ /// Request graceful process termination.
SIGTERM,
+ /// Forcefully terminate the process.
SIGKILL,
+ /// Send an interrupt signal to the process.
SIGINT,
/// Unknown variant for forward compatibility.
#[default]
@@ -9929,6 +10079,14 @@ pub enum SlashCommandTextResultKind {
Text,
}
+/// Select subcommand result discriminator
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum SlashCommandSelectSubcommandResultKind {
+ #[serde(rename = "select-subcommand")]
+ #[default]
+ SelectSubcommand,
+}
+
/// Result of invoking the slash command (text output, prompt to send to the agent, or completion).
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
@@ -9936,6 +10094,7 @@ pub enum SlashCommandInvocationResult {
Text(SlashCommandTextResult),
AgentPrompt(SlashCommandAgentPromptResult),
Completed(SlashCommandCompletedResult),
+ SelectSubcommand(SlashCommandSelectSubcommandResult),
}
/// Whether task execution is synchronously awaited or managed in the background
@@ -9948,8 +10107,10 @@ pub enum SlashCommandInvocationResult {
///
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum TaskExecutionMode {
+ /// The task was started with synchronous waiting.
#[serde(rename = "sync")]
Sync,
+ /// The task is managed in the background.
#[serde(rename = "background")]
Background,
/// Unknown variant for forward compatibility.
@@ -9968,14 +10129,19 @@ pub enum TaskExecutionMode {
///
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum TaskStatus {
+ /// The task is actively executing.
#[serde(rename = "running")]
Running,
+ /// The task is waiting for additional input.
#[serde(rename = "idle")]
Idle,
+ /// The task finished successfully.
#[serde(rename = "completed")]
Completed,
+ /// The task finished with an error.
#[serde(rename = "failed")]
Failed,
+ /// The task was cancelled before completion.
#[serde(rename = "cancelled")]
Cancelled,
/// Unknown variant for forward compatibility.
@@ -10002,8 +10168,10 @@ pub enum TaskAgentInfoType {
///
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum TaskShellInfoAttachmentMode {
+ /// The shell runs in a managed PTY session.
#[serde(rename = "attached")]
Attached,
+ /// The shell runs as an independent background process.
#[serde(rename = "detached")]
Detached,
/// Unknown variant for forward compatibility.
@@ -10031,10 +10199,13 @@ pub enum TokenAuthInfoType {
/// User's choice for auto-mode switching: yes (allow this turn), yes_always (allow + persist as setting), or no (decline).
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum UIAutoModeSwitchResponse {
+ /// Allow the automatic mode switch for this turn.
#[serde(rename = "yes")]
Yes,
+ /// Allow this mode switch and persist the preference.
#[serde(rename = "yes_always")]
YesAlways,
+ /// Decline the automatic mode switch.
#[serde(rename = "no")]
No,
/// Unknown variant for forward compatibility.
@@ -10078,10 +10249,13 @@ pub enum UIElicitationSchemaType {
/// The user's response: accept (submitted), decline (rejected), or cancel (dismissed)
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum UIElicitationResponseAction {
+ /// The user submitted the requested form values.
#[serde(rename = "accept")]
Accept,
+ /// The user explicitly declined to provide the requested input.
#[serde(rename = "decline")]
Decline,
+ /// The user dismissed the elicitation request.
#[serde(rename = "cancel")]
Cancel,
/// Unknown variant for forward compatibility.
@@ -10101,8 +10275,10 @@ pub enum UIElicitationSchemaPropertyBooleanType {
/// Numeric type accepted by the field.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum UIElicitationSchemaPropertyNumberType {
+ /// Any JSON number.
#[serde(rename = "number")]
Number,
+ /// Integer JSON number.
#[serde(rename = "integer")]
Integer,
/// Unknown variant for forward compatibility.
@@ -10114,12 +10290,16 @@ pub enum UIElicitationSchemaPropertyNumberType {
/// Optional format hint that constrains the accepted input.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum UIElicitationSchemaPropertyStringFormat {
+ /// Email address string format.
#[serde(rename = "email")]
Email,
+ /// URI string format.
#[serde(rename = "uri")]
Uri,
+ /// Calendar date string format.
#[serde(rename = "date")]
Date,
+ /// Date-time string format.
#[serde(rename = "date-time")]
DateTime,
/// Unknown variant for forward compatibility.
@@ -10155,12 +10335,16 @@ pub enum UIElicitationStringOneOfFieldType {
/// The action the user selected. Defaults to 'autopilot' when autoApproveEdits is true, otherwise 'interactive'.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum UIExitPlanModeAction {
+ /// Exit plan mode without starting implementation.
#[serde(rename = "exit_only")]
ExitOnly,
+ /// Exit plan mode and continue interactively.
#[serde(rename = "interactive")]
Interactive,
+ /// Exit plan mode and continue in autopilot mode.
#[serde(rename = "autopilot")]
Autopilot,
+ /// Exit plan mode and continue in autopilot mode with parallel subagent execution.
#[serde(rename = "autopilot_fleet")]
AutopilotFleet,
/// Unknown variant for forward compatibility.
@@ -10179,8 +10363,10 @@ pub enum UserAuthInfoType {
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum WorkspacesGetWorkspaceResultWorkspaceHostType {
+ /// Workspace repository is hosted on GitHub.
#[serde(rename = "github")]
Github,
+ /// Workspace repository is hosted on Azure DevOps.
#[serde(rename = "ado")]
Ado,
/// Unknown variant for forward compatibility.
@@ -10192,8 +10378,10 @@ pub enum WorkspacesGetWorkspaceResultWorkspaceHostType {
/// Repository host type, if known
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum WorkspaceSummaryHostType {
+ /// Workspace summary repository is hosted on GitHub.
#[serde(rename = "github")]
Github,
+ /// Workspace summary repository is hosted on Azure DevOps.
#[serde(rename = "ado")]
Ado,
/// Unknown variant for forward compatibility.
@@ -10204,8 +10392,10 @@ pub enum WorkspaceSummaryHostType {
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum SessionWorkspacesGetWorkspaceResultWorkspaceHostType {
+ /// Workspace repository is hosted on GitHub.
#[serde(rename = "github")]
Github,
+ /// Workspace repository is hosted on Azure DevOps.
#[serde(rename = "ado")]
Ado,
/// Unknown variant for forward compatibility.
@@ -10217,8 +10407,10 @@ pub enum SessionWorkspacesGetWorkspaceResultWorkspaceHostType {
/// Repository host type, if known
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum SessionMetadataSnapshotResultWorkspaceHostType {
+ /// Workspace summary repository is hosted on GitHub.
#[serde(rename = "github")]
Github,
+ /// Workspace summary repository is hosted on Azure DevOps.
#[serde(rename = "ado")]
Ado,
/// Unknown variant for forward compatibility.
diff --git a/rust/src/generated/session_events.rs b/rust/src/generated/session_events.rs
index 6d9237b92..053c4f8f8 100644
--- a/rust/src/generated/session_events.rs
+++ b/rust/src/generated/session_events.rs
@@ -1305,7 +1305,7 @@ pub struct AssistantUsageData {
pub reasoning_tokens: Option,
/// Time to first token in milliseconds. Only available for streaming requests
#[serde(skip_serializing_if = "Option::is_none")]
- pub ttft_ms: Option,
+ pub time_to_first_token_ms: Option,
}
/// Session event "model.call_failure". Failed LLM API call metadata for telemetry
@@ -2874,8 +2874,10 @@ pub struct SessionExtensionsLoadedData {
/// Hosting platform type of the repository (github or ado)
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum WorkingDirectoryContextHostType {
+ /// Repository is hosted on GitHub.
#[serde(rename = "github")]
Github,
+ /// Repository is hosted on Azure DevOps.
#[serde(rename = "ado")]
Ado,
/// Unknown variant for forward compatibility.
@@ -2887,10 +2889,13 @@ pub enum WorkingDirectoryContextHostType {
/// Reasoning summary mode used for model calls, if applicable (e.g. "none", "concise", "detailed")
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum ReasoningSummary {
+ /// Do not request reasoning summaries from the model.
#[serde(rename = "none")]
None,
+ /// Request a concise summary of the model's reasoning.
#[serde(rename = "concise")]
Concise,
+ /// Request a detailed summary of the model's reasoning.
#[serde(rename = "detailed")]
Detailed,
/// Unknown variant for forward compatibility.
@@ -2902,10 +2907,13 @@ pub enum ReasoningSummary {
/// The session mode the agent is operating in
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum SessionMode {
+ /// The agent is responding interactively to the user.
#[serde(rename = "interactive")]
Interactive,
+ /// The agent is preparing a plan before making changes.
#[serde(rename = "plan")]
Plan,
+ /// The agent is working autonomously toward task completion.
#[serde(rename = "autopilot")]
Autopilot,
/// Unknown variant for forward compatibility.
@@ -2917,10 +2925,13 @@ pub enum SessionMode {
/// The type of operation performed on the plan file
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum PlanChangedOperation {
+ /// The plan file was created.
#[serde(rename = "create")]
Create,
+ /// The plan file was updated.
#[serde(rename = "update")]
Update,
+ /// The plan file was deleted.
#[serde(rename = "delete")]
Delete,
/// Unknown variant for forward compatibility.
@@ -2932,8 +2943,10 @@ pub enum PlanChangedOperation {
/// Whether the file was newly created or updated
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum WorkspaceFileChangedOperation {
+ /// The workspace file was created.
#[serde(rename = "create")]
Create,
+ /// The workspace file was updated.
#[serde(rename = "update")]
Update,
/// Unknown variant for forward compatibility.
@@ -2945,8 +2958,10 @@ pub enum WorkspaceFileChangedOperation {
/// Origin type of the session being handed off
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum HandoffSourceType {
+ /// The handoff originated from a remote session.
#[serde(rename = "remote")]
Remote,
+ /// The handoff originated from a local session.
#[serde(rename = "local")]
Local,
/// Unknown variant for forward compatibility.
@@ -2958,8 +2973,10 @@ pub enum HandoffSourceType {
/// Whether the session ended normally ("routine") or due to a crash/fatal error ("error")
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum ShutdownType {
+ /// The session ended normally.
#[serde(rename = "routine")]
Routine,
+ /// The session ended because of a crash or fatal error.
#[serde(rename = "error")]
Error,
/// Unknown variant for forward compatibility.
@@ -2971,12 +2988,16 @@ pub enum ShutdownType {
/// The agent mode that was active when this message was sent
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum UserMessageAgentMode {
+ /// The agent is responding interactively to the user.
#[serde(rename = "interactive")]
Interactive,
+ /// The agent is preparing a plan before making changes.
#[serde(rename = "plan")]
Plan,
+ /// The agent is working autonomously toward task completion.
#[serde(rename = "autopilot")]
Autopilot,
+ /// The agent is in shell-focused UI mode.
#[serde(rename = "shell")]
Shell,
/// Unknown variant for forward compatibility.
@@ -2988,8 +3009,10 @@ pub enum UserMessageAgentMode {
/// Tool call type: "function" for standard tool calls, "custom" for grammar-based tool calls. Defaults to "function" when absent.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum AssistantMessageToolRequestType {
+ /// Standard function-style tool call.
#[serde(rename = "function")]
Function,
+ /// Custom grammar-based tool call.
#[serde(rename = "custom")]
Custom,
/// Unknown variant for forward compatibility.
@@ -3001,12 +3024,16 @@ pub enum AssistantMessageToolRequestType {
/// API endpoint used for this model call, matching CAPI supported_endpoints vocabulary
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum AssistantUsageApiEndpoint {
+ /// Chat Completions API endpoint.
#[serde(rename = "/chat/completions")]
ChatCompletions,
+ /// Anthropic Messages API endpoint.
#[serde(rename = "/v1/messages")]
V1Messages,
+ /// Responses API endpoint.
#[serde(rename = "/responses")]
Responses,
+ /// WebSocket Responses API endpoint.
#[serde(rename = "ws:/responses")]
WsResponses,
/// Unknown variant for forward compatibility.
@@ -3018,10 +3045,13 @@ pub enum AssistantUsageApiEndpoint {
/// Where the failed model call originated
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum ModelCallFailureSource {
+ /// Model call from the top-level agent.
#[serde(rename = "top_level")]
TopLevel,
+ /// Model call from a sub-agent.
#[serde(rename = "subagent")]
Subagent,
+ /// Model call from MCP sampling.
#[serde(rename = "mcp_sampling")]
McpSampling,
/// Unknown variant for forward compatibility.
@@ -3033,10 +3063,13 @@ pub enum ModelCallFailureSource {
/// Finite reason code describing why the current turn was aborted
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum AbortReason {
+ /// The local user requested the abort, for example by pressing Ctrl+C in the CLI.
#[serde(rename = "user_initiated")]
UserInitiated,
+ /// A remote command requested the abort.
#[serde(rename = "remote_command")]
RemoteCommand,
+ /// An MCP server delivered a user.abort notification.
#[serde(rename = "user_abort")]
UserAbort,
/// Unknown variant for forward compatibility.
@@ -3080,8 +3113,10 @@ pub enum ToolExecutionCompleteContentAudioType {
/// Theme variant this icon is intended for
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum ToolExecutionCompleteContentResourceLinkIconTheme {
+ /// Icon intended for light themes.
#[serde(rename = "light")]
Light,
+ /// Icon intended for dark themes.
#[serde(rename = "dark")]
Dark,
/// Unknown variant for forward compatibility.
@@ -3129,8 +3164,10 @@ pub enum ToolExecutionCompleteContent {
/// Message role: "system" for system prompts, "developer" for developer-injected instructions
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum SystemMessageRole {
+ /// System prompt message.
#[serde(rename = "system")]
System,
+ /// Developer instruction message.
#[serde(rename = "developer")]
Developer,
/// Unknown variant for forward compatibility.
@@ -3182,8 +3219,10 @@ pub enum PermissionRequestUrlKind {
/// Whether this is a store or vote memory operation
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionRequestMemoryAction {
+ /// Store a new memory.
#[serde(rename = "store")]
Store,
+ /// Vote on an existing memory.
#[serde(rename = "vote")]
Vote,
/// Unknown variant for forward compatibility.
@@ -3195,8 +3234,10 @@ pub enum PermissionRequestMemoryAction {
/// Vote direction (vote only)
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionRequestMemoryDirection {
+ /// Vote that the memory is useful or accurate.
#[serde(rename = "upvote")]
Upvote,
+ /// Vote that the memory is incorrect or outdated.
#[serde(rename = "downvote")]
Downvote,
/// Unknown variant for forward compatibility.
@@ -3320,10 +3361,13 @@ pub enum PermissionPromptRequestCustomToolKind {
/// Underlying permission kind that needs path approval
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum PermissionPromptRequestPathAccessKind {
+ /// Read access to a filesystem path.
#[serde(rename = "read")]
Read,
+ /// Shell command access involving a filesystem path.
#[serde(rename = "shell")]
Shell,
+ /// Write access to a filesystem path.
#[serde(rename = "write")]
Write,
/// Unknown variant for forward compatibility.
@@ -3551,8 +3595,10 @@ pub enum PermissionResult {
/// Elicitation mode; "form" for structured input, "url" for browser-based. Defaults to "form" when absent.
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum ElicitationRequestedMode {
+ /// Structured form-based elicitation.
#[serde(rename = "form")]
Form,
+ /// Browser URL-based elicitation.
#[serde(rename = "url")]
Url,
/// Unknown variant for forward compatibility.
@@ -3572,10 +3618,13 @@ pub enum ElicitationRequestedSchemaType {
/// The user action: "accept" (submitted form), "decline" (explicitly refused), or "cancel" (dismissed)
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum ElicitationCompletedAction {
+ /// The user submitted the requested form.
#[serde(rename = "accept")]
Accept,
+ /// The user explicitly declined the request.
#[serde(rename = "decline")]
Decline,
+ /// The user dismissed the request.
#[serde(rename = "cancel")]
Cancel,
/// Unknown variant for forward compatibility.
@@ -3595,10 +3644,13 @@ pub enum McpOauthRequiredStaticClientConfigGrantType {
/// The user's auto-mode-switch choice
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum AutoModeSwitchResponse {
+ /// Switch models for this request.
#[serde(rename = "yes")]
Yes,
+ /// Switch models now and keep using the replacement automatically.
#[serde(rename = "yes_always")]
YesAlways,
+ /// Do not switch models.
#[serde(rename = "no")]
No,
/// Unknown variant for forward compatibility.
@@ -3610,12 +3662,16 @@ pub enum AutoModeSwitchResponse {
/// Exit plan mode action
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum ExitPlanModeAction {
+ /// Exit plan mode without starting implementation.
#[serde(rename = "exit_only")]
ExitOnly,
+ /// Exit plan mode and continue in interactive mode.
#[serde(rename = "interactive")]
Interactive,
+ /// Exit plan mode and continue autonomously.
#[serde(rename = "autopilot")]
Autopilot,
+ /// Exit plan mode and continue with parallel autonomous workers.
#[serde(rename = "autopilot_fleet")]
AutopilotFleet,
/// Unknown variant for forward compatibility.
@@ -3627,18 +3683,25 @@ pub enum ExitPlanModeAction {
/// Source location type (e.g., project, personal-copilot, plugin, builtin)
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum SkillSource {
+ /// Skill defined in the current project's skill directories.
#[serde(rename = "project")]
Project,
+ /// Skill discovered from a parent directory in the current workspace tree.
#[serde(rename = "inherited")]
Inherited,
+ /// Skill defined in the user's Copilot skill directory.
#[serde(rename = "personal-copilot")]
PersonalCopilot,
+ /// Skill defined in the user's personal agents skill directory.
#[serde(rename = "personal-agents")]
PersonalAgents,
+ /// Skill provided by an installed plugin.
#[serde(rename = "plugin")]
Plugin,
+ /// Skill loaded from a configured custom skill directory.
#[serde(rename = "custom")]
Custom,
+ /// Skill bundled with the runtime.
#[serde(rename = "builtin")]
Builtin,
/// Unknown variant for forward compatibility.
@@ -3650,12 +3713,16 @@ pub enum SkillSource {
/// Configuration source: user, workspace, plugin, or builtin
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum McpServerSource {
+ /// Server configured in the user's global MCP configuration.
#[serde(rename = "user")]
User,
+ /// Server configured by the current workspace.
#[serde(rename = "workspace")]
Workspace,
+ /// Server contributed by an installed plugin.
#[serde(rename = "plugin")]
Plugin,
+ /// Server bundled with the runtime.
#[serde(rename = "builtin")]
Builtin,
/// Unknown variant for forward compatibility.
@@ -3667,16 +3734,22 @@ pub enum McpServerSource {
/// Connection status: connected, failed, needs-auth, pending, disabled, or not_configured
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum McpServerStatus {
+ /// The server is connected and available.
#[serde(rename = "connected")]
Connected,
+ /// The server failed to connect or initialize.
#[serde(rename = "failed")]
Failed,
+ /// The server requires authentication before it can connect.
#[serde(rename = "needs-auth")]
NeedsAuth,
+ /// The server connection is still being established.
#[serde(rename = "pending")]
Pending,
+ /// The server is configured but disabled.
#[serde(rename = "disabled")]
Disabled,
+ /// The server is not configured for this session.
#[serde(rename = "not_configured")]
NotConfigured,
/// Unknown variant for forward compatibility.
@@ -3688,8 +3761,10 @@ pub enum McpServerStatus {
/// Discovery source
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum ExtensionsLoadedExtensionSource {
+ /// Extension discovered from the current project.
#[serde(rename = "project")]
Project,
+ /// Extension discovered from the user's extension directory.
#[serde(rename = "user")]
User,
/// Unknown variant for forward compatibility.
@@ -3701,12 +3776,16 @@ pub enum ExtensionsLoadedExtensionSource {
/// Current status: running, disabled, failed, or starting
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum ExtensionsLoadedExtensionStatus {
+ /// The extension process is running.
#[serde(rename = "running")]
Running,
+ /// The extension is installed but disabled.
#[serde(rename = "disabled")]
Disabled,
+ /// The extension failed to start or crashed.
#[serde(rename = "failed")]
Failed,
+ /// The extension process is starting.
#[serde(rename = "starting")]
Starting,
/// Unknown variant for forward compatibility.
diff --git a/test/harness/package-lock.json b/test/harness/package-lock.json
index 2d78be42f..21cd224f6 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.51-2",
+ "@github/copilot": "^1.0.51-3",
"@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.51-2",
- "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.51-2.tgz",
- "integrity": "sha512-z9DFxVYIvY4MPEidWJxHdJoQNeDRt86egFyVek3zIVOCH5V6+NTF8ZuJAdMJJqbt+5EWxOgT4wBY4JvUfN7fCg==",
+ "version": "1.0.51-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.51-3.tgz",
+ "integrity": "sha512-wbulKqSHhqVXoA8ffqukq3AxMGw8VfVbZ5ysGW+WSHbWXydh9aEKo9/4PqxUxWB4W9oSPggoqrVhj0NgJJ4agw==",
"dev": true,
"license": "SEE LICENSE IN LICENSE.md",
"dependencies": {
@@ -476,20 +476,20 @@
"copilot": "npm-loader.js"
},
"optionalDependencies": {
- "@github/copilot-darwin-arm64": "1.0.51-2",
- "@github/copilot-darwin-x64": "1.0.51-2",
- "@github/copilot-linux-arm64": "1.0.51-2",
- "@github/copilot-linux-x64": "1.0.51-2",
- "@github/copilot-linuxmusl-arm64": "1.0.51-2",
- "@github/copilot-linuxmusl-x64": "1.0.51-2",
- "@github/copilot-win32-arm64": "1.0.51-2",
- "@github/copilot-win32-x64": "1.0.51-2"
+ "@github/copilot-darwin-arm64": "1.0.51-3",
+ "@github/copilot-darwin-x64": "1.0.51-3",
+ "@github/copilot-linux-arm64": "1.0.51-3",
+ "@github/copilot-linux-x64": "1.0.51-3",
+ "@github/copilot-linuxmusl-arm64": "1.0.51-3",
+ "@github/copilot-linuxmusl-x64": "1.0.51-3",
+ "@github/copilot-win32-arm64": "1.0.51-3",
+ "@github/copilot-win32-x64": "1.0.51-3"
}
},
"node_modules/@github/copilot-darwin-arm64": {
- "version": "1.0.51-2",
- "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.51-2.tgz",
- "integrity": "sha512-iOIAIBbOKuOnUGhsVvmFdrdKu5olSZ1Ve5RkwWj9E/62g4dAuGrEkhisA6xcNt63qDfGfsPQcDKkR+Nhxrgp4g==",
+ "version": "1.0.51-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.51-3.tgz",
+ "integrity": "sha512-PXnMWuaUIbxkBzeDr4cKQy7qtFqldufzWvihI5QhJaF7/l0L/8XoTGtj73qbX7IpG4wpzQ1N8MIZFm/SmyKoqQ==",
"cpu": [
"arm64"
],
@@ -504,9 +504,9 @@
}
},
"node_modules/@github/copilot-darwin-x64": {
- "version": "1.0.51-2",
- "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.51-2.tgz",
- "integrity": "sha512-7AYiP1D8mZg0UOSx0hiMGS6ZOTKA4miiHpiS5Bvd5AgTchWFNBgM/aHs1D/VSk0dLucGGzSClwzL5u80hNiw/Q==",
+ "version": "1.0.51-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.51-3.tgz",
+ "integrity": "sha512-sIRQBZjYh7gGDd2wUjgmX5PTfFZfvzrQp8lNvoRsqKnihzPnGaRg+St3lh7St3qtHoOBAaAoYw/DHREEp/p9xg==",
"cpu": [
"x64"
],
@@ -521,9 +521,9 @@
}
},
"node_modules/@github/copilot-linux-arm64": {
- "version": "1.0.51-2",
- "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.51-2.tgz",
- "integrity": "sha512-X5QVYcaU1IDeawCDxC8NHf8s/8Tq9NX+2a/tKXDFBFLIisoXZCpU0Ap9KRSGyKe8heJbvuDoW4JaJRZj4faAqw==",
+ "version": "1.0.51-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.51-3.tgz",
+ "integrity": "sha512-LzFRV9EqSFdEiqu+VyoDY4XcO3tvd7VmVzkF02BP9MgwApCCLRzJS4ElMh/3FojqV+hL18vpFSyqPVmsgjLcug==",
"cpu": [
"arm64"
],
@@ -538,9 +538,9 @@
}
},
"node_modules/@github/copilot-linux-x64": {
- "version": "1.0.51-2",
- "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.51-2.tgz",
- "integrity": "sha512-wn4W2K+kV3f5XZ8iG7ZplLuxkv9m3oFNcgdfFF5LSlU39k9l/WFahCKWWP6ec4DG9cvfR/Z0Sj4rmQPJoF/nkg==",
+ "version": "1.0.51-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.51-3.tgz",
+ "integrity": "sha512-bMEE8/nj9GWx3f/PWvoSGnk6IUHoeVtdDNJk7xUTMMK2eQBUQGKfCtOKTa/mSVpJB81bxiK8IVqZypJO2cYxqQ==",
"cpu": [
"x64"
],
@@ -555,9 +555,9 @@
}
},
"node_modules/@github/copilot-linuxmusl-arm64": {
- "version": "1.0.51-2",
- "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-arm64/-/copilot-linuxmusl-arm64-1.0.51-2.tgz",
- "integrity": "sha512-cQ4cJ42pN4b3Up5fDpRvVP+yPYifgQD2vplvUavY6bffCCYwLqzK4oHFsABC8uvtqkIq/GbFOZ6XF2W+YdVFUQ==",
+ "version": "1.0.51-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-arm64/-/copilot-linuxmusl-arm64-1.0.51-3.tgz",
+ "integrity": "sha512-ZEr7RmNv8/FyWdbC6xBPdb7HZO0QdlTGt1SOO+AHW1PuHYdYBdGObDB41SfHf+h0kiiljBsLq8ps1njP/1kIDw==",
"cpu": [
"arm64"
],
@@ -572,9 +572,9 @@
}
},
"node_modules/@github/copilot-linuxmusl-x64": {
- "version": "1.0.51-2",
- "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-x64/-/copilot-linuxmusl-x64-1.0.51-2.tgz",
- "integrity": "sha512-3wm34yzDeCW2U0im6qDK51iF6dJHhrPqv3VxPwfvTK+7u5iWB9oaGvFRCYtQfA5sV0hJqmD6Gup6MJwB4JgEEQ==",
+ "version": "1.0.51-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-x64/-/copilot-linuxmusl-x64-1.0.51-3.tgz",
+ "integrity": "sha512-d4BH9FkXTTSuXfVElNAHe4djktueVQUTj9cOdmKeQKC80Magew1F+7RvCgIDFupmhYnra+1NJf5nM7+wpiaECg==",
"cpu": [
"x64"
],
@@ -589,9 +589,9 @@
}
},
"node_modules/@github/copilot-win32-arm64": {
- "version": "1.0.51-2",
- "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.51-2.tgz",
- "integrity": "sha512-uAj1YwA8n/qbI1JG8UjHGtuBrJL18FSRkXwB0SdM0aKUozhZs3vdxRROuT5MAbt72KWk+rLldnkVy6HL/tm8sA==",
+ "version": "1.0.51-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.51-3.tgz",
+ "integrity": "sha512-o/tQTD4VFKhEfoxHD5HMdoaqys5jFt8+pXkQKXSFlkGWzAQZt4iZasIC7L5f/AuGctoZ/kZFW2iMOWNpDHtj5w==",
"cpu": [
"arm64"
],
@@ -606,9 +606,9 @@
}
},
"node_modules/@github/copilot-win32-x64": {
- "version": "1.0.51-2",
- "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.51-2.tgz",
- "integrity": "sha512-Wur8d0y6VsXGbsMhED3uoZylRoJyWLQPHzgf3TD2AEc48zVpuTb4jUKzH9wD1frheAxGTl/kWvLr+6rYRcPK7w==",
+ "version": "1.0.51-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.51-3.tgz",
+ "integrity": "sha512-CjpogQNnl0YrEfTCPSUtKPpieVEfWWP2map4OQNLSJXwQ3toG1h359m4QXXLuSz/vJM8aCrCm1VxgCg5KR1eKw==",
"cpu": [
"x64"
],
diff --git a/test/harness/package.json b/test/harness/package.json
index 7c37f83d6..c1df0271f 100644
--- a/test/harness/package.json
+++ b/test/harness/package.json
@@ -11,7 +11,7 @@
"test": "vitest run"
},
"devDependencies": {
- "@github/copilot": "^1.0.51-2",
+ "@github/copilot": "^1.0.51-3",
"@modelcontextprotocol/sdk": "^1.26.0",
"@types/node": "^25.3.3",
"@types/node-forge": "^1.3.14",
From ee0ebe825299d78b6a4e96175d1375dbe4b76177 Mon Sep 17 00:00:00 2001
From: Copilot <223556219+Copilot@users.noreply.github.com>
Date: Wed, 20 May 2026 21:13:30 -0400
Subject: [PATCH 2/2] Fix flaky CI tests: add TCP connection timeout and fix
MCP test hang
- nodejs/src/client.ts: Add 10s connection timeout to connectViaTcp() to
prevent indefinite hangs on Windows when reconnecting after forceStop()
- dotnet/test: Change MCP server command from 'echo' to 'true' in the
Without_Args test. On Ubuntu, 'echo' (no args) outputs a bare newline
that confuses the CLI's MCP JSON-RPC reader, causing a 2-minute hang.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
dotnet/test/E2E/SessionMcpAndAgentConfigE2ETests.cs | 2 +-
nodejs/src/client.ts | 7 +++++++
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/dotnet/test/E2E/SessionMcpAndAgentConfigE2ETests.cs b/dotnet/test/E2E/SessionMcpAndAgentConfigE2ETests.cs
index 1fd7feedd..cc528b219 100644
--- a/dotnet/test/E2E/SessionMcpAndAgentConfigE2ETests.cs
+++ b/dotnet/test/E2E/SessionMcpAndAgentConfigE2ETests.cs
@@ -48,7 +48,7 @@ public async Task Should_Accept_MCP_Server_Configuration_Without_Args()
{
["test-server"] = new McpStdioServerConfig
{
- Command = "echo",
+ Command = "true",
Tools = ["*"]
}
};
diff --git a/nodejs/src/client.ts b/nodejs/src/client.ts
index 6342b6667..8a2fe32b4 100644
--- a/nodejs/src/client.ts
+++ b/nodejs/src/client.ts
@@ -1757,7 +1757,13 @@ export class CopilotClient {
return new Promise((resolve, reject) => {
this.socket = new Socket();
+ const connectionTimeout = setTimeout(() => {
+ this.socket?.destroy();
+ reject(new Error("Timeout connecting to CLI server"));
+ }, 10000);
+
this.socket.connect(this.actualPort!, this.actualHost, () => {
+ clearTimeout(connectionTimeout);
// Create JSON-RPC connection
this.connection = createMessageConnection(
new StreamMessageReader(this.socket!),
@@ -1770,6 +1776,7 @@ export class CopilotClient {
});
this.socket.on("error", (error) => {
+ clearTimeout(connectionTimeout);
reject(new Error(`Failed to connect to CLI server: ${error.message}`));
});
});