@@ -8979,6 +9182,120 @@ pub struct SessionAuthSetCredentialsResult {
pub success: bool,
}
+/// Identifies the target session.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct SessionCanvasListParams {
+ /// Target session identifier
+ pub session_id: SessionId,
+}
+
+/// Declared canvases available in this session.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct SessionCanvasListResult {
+ /// Declared canvases available in this session
+ pub canvases: Vec
,
+}
+
+/// Identifies the target session.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct SessionCanvasListOpenParams {
+ /// Target session identifier
+ pub session_id: SessionId,
+}
+
+/// Live open-canvas snapshot.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct SessionCanvasListOpenResult {
+ /// Currently open canvas instances
+ pub open_canvases: Vec,
+}
+
+/// Open canvas instance snapshot.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct SessionCanvasOpenResult {
+ /// Runtime-controlled routing state for an open canvas instance.
+ pub availability: CanvasInstanceAvailability,
+ /// Provider-local canvas identifier
+ pub canvas_id: String,
+ /// Owning provider identifier
+ pub extension_id: String,
+ /// Owning extension display name, when available
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub extension_name: Option,
+ /// Input supplied when the instance was opened
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub input: Option,
+ /// Stable caller-supplied canvas instance identifier
+ pub instance_id: String,
+ /// Whether this snapshot came from an idempotent reopen
+ pub reopen: bool,
+ /// Provider-supplied status text
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub status: Option,
+ /// Rendered title
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub title: Option,
+ /// URL for web-rendered canvases
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub url: Option,
+}
+
+/// Canvas action invocation result.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct SessionCanvasInvokeActionResult {
+ /// Provider-supplied action result
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub result: Option,
+}
+
/// Identifies the target session.
///
///
@@ -11516,6 +11833,28 @@ pub enum AuthInfoType {
Unknown,
}
+/// Runtime-controlled routing state for an open canvas instance.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum CanvasInstanceAvailability {
+ /// The owning provider is currently connected and routing calls will be dispatched normally.
+ #[serde(rename = "ready")]
+ Ready,
+ /// The owning provider is not currently connected. Routing calls fail with canvas_provider_unavailable until the agent re-issues open_canvas (which rehydrates via a fresh canvas.open) or the provider reconnects.
+ #[serde(rename = "stale")]
+ Stale,
+ /// Unknown variant for forward compatibility.
+ #[default]
+ #[serde(other)]
+ Unknown,
+}
+
/// Optional completion hint for the input (e.g. 'directory' for filesystem path completion)
///
///
diff --git a/rust/src/generated/rpc.rs b/rust/src/generated/rpc.rs
index 20dc48e80..45011cf82 100644
--- a/rust/src/generated/rpc.rs
+++ b/rust/src/generated/rpc.rs
@@ -1137,6 +1137,13 @@ impl<'a> SessionRpc<'a> {
}
}
+ /// `session.canvas.*` sub-namespace.
+ pub fn canvas(&self) -> SessionRpcCanvas<'a> {
+ SessionRpcCanvas {
+ session: self.session,
+ }
+ }
+
/// `session.commands.*` sub-namespace.
pub fn commands(&self) -> SessionRpcCommands<'a> {
SessionRpcCommands {
@@ -1664,6 +1671,153 @@ impl<'a> SessionRpcAuth<'a> {
}
}
+/// `session.canvas.*` RPCs.
+#[derive(Clone, Copy)]
+pub struct SessionRpcCanvas<'a> {
+ pub(crate) session: &'a Session,
+}
+
+impl<'a> SessionRpcCanvas<'a> {
+ /// Lists canvases declared for the session.
+ ///
+ /// Wire method: `session.canvas.list`.
+ ///
+ /// # Returns
+ ///
+ /// Declared canvases available in this session.
+ ///
+ ///
+ ///
+ /// **Experimental.** This API is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases. Pin both the
+ /// SDK and CLI versions if your code depends on it.
+ ///
+ ///
+ pub async fn list(&self) -> Result
{
+ let wire_params = serde_json::json!({ "sessionId": self.session.id() });
+ let _value = self
+ .session
+ .client()
+ .call(rpc_methods::SESSION_CANVAS_LIST, Some(wire_params))
+ .await?;
+ Ok(serde_json::from_value(_value)?)
+ }
+
+ /// Lists currently open canvas instances for the live session.
+ ///
+ /// Wire method: `session.canvas.listOpen`.
+ ///
+ /// # Returns
+ ///
+ /// Live open-canvas snapshot.
+ ///
+ ///
+ ///
+ /// **Experimental.** This API is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases. Pin both the
+ /// SDK and CLI versions if your code depends on it.
+ ///
+ ///
+ pub async fn list_open(&self) -> Result {
+ let wire_params = serde_json::json!({ "sessionId": self.session.id() });
+ let _value = self
+ .session
+ .client()
+ .call(rpc_methods::SESSION_CANVAS_LISTOPEN, Some(wire_params))
+ .await?;
+ Ok(serde_json::from_value(_value)?)
+ }
+
+ /// Opens or focuses a canvas instance.
+ ///
+ /// Wire method: `session.canvas.open`.
+ ///
+ /// # Parameters
+ ///
+ /// * `params` - Canvas open parameters.
+ ///
+ /// # Returns
+ ///
+ /// Open canvas instance snapshot.
+ ///
+ ///
+ ///
+ /// **Experimental.** This API is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases. Pin both the
+ /// SDK and CLI versions if your code depends on it.
+ ///
+ ///
+ pub async fn open(&self, params: CanvasOpenRequest) -> Result {
+ let mut wire_params = serde_json::to_value(params)?;
+ wire_params["sessionId"] = serde_json::Value::String(self.session.id().to_string());
+ let _value = self
+ .session
+ .client()
+ .call(rpc_methods::SESSION_CANVAS_OPEN, Some(wire_params))
+ .await?;
+ Ok(serde_json::from_value(_value)?)
+ }
+
+ /// Closes an open canvas instance.
+ ///
+ /// Wire method: `session.canvas.close`.
+ ///
+ /// # Parameters
+ ///
+ /// * `params` - Canvas close parameters.
+ ///
+ ///
+ ///
+ /// **Experimental.** This API is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases. Pin both the
+ /// SDK and CLI versions if your code depends on it.
+ ///
+ ///
+ pub async fn close(&self, params: CanvasCloseRequest) -> Result<(), Error> {
+ let mut wire_params = serde_json::to_value(params)?;
+ wire_params["sessionId"] = serde_json::Value::String(self.session.id().to_string());
+ let _value = self
+ .session
+ .client()
+ .call(rpc_methods::SESSION_CANVAS_CLOSE, Some(wire_params))
+ .await?;
+ Ok(())
+ }
+
+ /// Invokes an action on an open canvas instance.
+ ///
+ /// Wire method: `session.canvas.invokeAction`.
+ ///
+ /// # Parameters
+ ///
+ /// * `params` - Canvas action invocation parameters.
+ ///
+ /// # Returns
+ ///
+ /// Canvas action invocation result.
+ ///
+ ///
+ ///
+ /// **Experimental.** This API is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases. Pin both the
+ /// SDK and CLI versions if your code depends on it.
+ ///
+ ///
+ pub async fn invoke_action(
+ &self,
+ params: CanvasInvokeActionRequest,
+ ) -> Result {
+ let mut wire_params = serde_json::to_value(params)?;
+ wire_params["sessionId"] = serde_json::Value::String(self.session.id().to_string());
+ let _value = self
+ .session
+ .client()
+ .call(rpc_methods::SESSION_CANVAS_INVOKEACTION, Some(wire_params))
+ .await?;
+ Ok(serde_json::from_value(_value)?)
+ }
+}
+
/// `session.commands.*` RPCs.
#[derive(Clone, Copy)]
pub struct SessionRpcCommands<'a> {
diff --git a/rust/src/generated/session_events.rs b/rust/src/generated/session_events.rs
index 5e78c6932..6605ecbde 100644
--- a/rust/src/generated/session_events.rs
+++ b/rust/src/generated/session_events.rs
@@ -171,6 +171,10 @@ pub enum SessionEventType {
SessionMcpServerStatusChanged,
#[serde(rename = "session.extensions_loaded")]
SessionExtensionsLoaded,
+ #[serde(rename = "session.canvas.opened")]
+ SessionCanvasOpened,
+ #[serde(rename = "session.canvas.registry_changed")]
+ SessionCanvasRegistryChanged,
#[serde(rename = "mcp_app.tool_call_complete")]
McpAppToolCallComplete,
/// Unknown event type for forward compatibility.
@@ -347,6 +351,10 @@ pub enum SessionEventData {
SessionMcpServerStatusChanged(SessionMcpServerStatusChangedData),
#[serde(rename = "session.extensions_loaded")]
SessionExtensionsLoaded(SessionExtensionsLoadedData),
+ #[serde(rename = "session.canvas.opened")]
+ SessionCanvasOpened(SessionCanvasOpenedData),
+ #[serde(rename = "session.canvas.registry_changed")]
+ SessionCanvasRegistryChanged(SessionCanvasRegistryChangedData),
#[serde(rename = "mcp_app.tool_call_complete")]
McpAppToolCallComplete(McpAppToolCallCompleteData),
}
@@ -2925,6 +2933,9 @@ pub struct CommandsChangedData {
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CapabilitiesChangedUI {
+ /// Whether canvas rendering is now supported
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub canvases: Option,
/// Whether elicitation is now supported
#[serde(skip_serializing_if = "Option::is_none")]
pub elicitation: Option,
@@ -3121,6 +3132,82 @@ pub struct SessionExtensionsLoadedData {
pub extensions: Vec,
}
+/// Session event "session.canvas.opened".
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct SessionCanvasOpenedData {
+ /// Runtime-controlled routing state for the instance. "ready" when the provider connection is live; "stale" when the provider has gone away and the instance is awaiting rebinding.
+ pub availability: CanvasOpenedAvailability,
+ /// Provider-local canvas identifier
+ pub canvas_id: String,
+ /// Owning provider identifier
+ pub extension_id: String,
+ /// Owning extension display name, when available
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub extension_name: Option,
+ /// Input supplied when the instance was opened
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub input: Option,
+ /// Stable caller-supplied canvas instance identifier
+ pub instance_id: String,
+ /// Whether this notification represents an idempotent reopen
+ pub reopen: bool,
+ /// Provider-supplied status text
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub status: Option,
+ /// Rendered title
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub title: Option,
+ /// URL for web-rendered canvases
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub url: Option,
+}
+
+/// Schema for the `CanvasRegistryChangedCanvasAction` type.
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct CanvasRegistryChangedCanvasAction {
+ /// Action description
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub description: Option,
+ /// JSON Schema for action input
+ #[serde(default)]
+ pub input_schema: HashMap,
+ /// Action name
+ pub name: String,
+}
+
+/// Schema for the `CanvasRegistryChangedCanvas` type.
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct CanvasRegistryChangedCanvas {
+ /// Actions the agent or host may invoke
+ #[serde(default)]
+ pub actions: Vec,
+ /// Provider-local canvas identifier
+ pub canvas_id: String,
+ /// Short, single-sentence description shown to the agent in canvas catalogs.
+ pub description: String,
+ /// Human-readable canvas name
+ pub display_name: String,
+ /// Owning provider identifier
+ pub extension_id: String,
+ /// Owning extension display name, when available
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub extension_name: Option,
+ /// JSON Schema for canvas open input
+ #[serde(default)]
+ pub input_schema: HashMap,
+}
+
+/// Session event "session.canvas.registry_changed".
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct SessionCanvasRegistryChangedData {
+ /// Canvas declarations currently available
+ pub canvases: Vec,
+}
+
/// Set when the underlying tools/call threw an error before returning a CallToolResult
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
@@ -4166,3 +4253,18 @@ pub enum ExtensionsLoadedExtensionStatus {
#[serde(other)]
Unknown,
}
+
+/// Runtime-controlled routing state for the instance. "ready" when the provider connection is live; "stale" when the provider has gone away and the instance is awaiting rebinding.
+#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
+pub enum CanvasOpenedAvailability {
+ /// Provider connection is live; actions can be invoked.
+ #[serde(rename = "ready")]
+ Ready,
+ /// Provider has gone away; the instance is awaiting rebinding.
+ #[serde(rename = "stale")]
+ Stale,
+ /// Unknown variant for forward compatibility.
+ #[default]
+ #[serde(other)]
+ Unknown,
+}
diff --git a/scripts/codegen/python.ts b/scripts/codegen/python.ts
index 7e7dc63b8..1af315eac 100644
--- a/scripts/codegen/python.ts
+++ b/scripts/codegen/python.ts
@@ -2776,8 +2776,22 @@ async function generateRpc(schemaPath?: string, sessionEventsSchema?: JSONSchema
});
let typesCode = qtResult.lines.join("\n");
- // Fix dataclass field ordering
+ // Quicktype emits optional Any-typed fields without defaults; add them back.
typesCode = typesCode.replace(/: Any$/gm, ": Any = None");
+ // The synthesized root RPC dataclass includes one required field per schema definition.
+ // Keep Any-typed definition fields required so later required fields don't trip dataclass
+ // ordering rules at import time.
+ typesCode = typesCode.replace(
+ /(@dataclass\r?\nclass RPC:\r?\n)([\s\S]*?)(\r?\n @staticmethod)/,
+ (match, prefix: string, body: string, suffix: string) => {
+ let updatedBody = body;
+ for (const definitionName of Object.keys(allDefinitions)) {
+ const fieldName = toSnakeCase(definitionName);
+ updatedBody = updatedBody.replace(new RegExp(`^( ${fieldName}: Any) = None$`, "m"), "$1");
+ }
+ return `${prefix}${updatedBody}${suffix}`;
+ }
+ );
// Fix bare except: to use Exception (required by ruff/pylint)
typesCode = typesCode.replace(/except:/g, "except Exception:");
// Remove unnecessary pass when class has methods (quicktype generates pass for empty schemas)
diff --git a/test/harness/package-lock.json b/test/harness/package-lock.json
index 94d93f7bb..5182ce24a 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.52",
+ "@github/copilot": "^1.0.53-2",
"@modelcontextprotocol/sdk": "^1.26.0",
"@types/node": "^25.3.3",
"@types/node-forge": "^1.3.14",
@@ -464,9 +464,9 @@
}
},
"node_modules/@github/copilot": {
- "version": "1.0.52",
- "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.52.tgz",
- "integrity": "sha512-n6NAIVhosend+3UGYXW3Ltigeum2toUsV24RDgxjkdkLV1DVgp6+2OWCXdk3HTXZ0t/eWMvgBezRFbRr8N4Z6g==",
+ "version": "1.0.53-2",
+ "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.53-2.tgz",
+ "integrity": "sha512-SkISXco8PFyuOreaPIiBiyQHdXnw51wLmSvzW7yrdD02dH9qRBCcrxPXFS05iLrv3hLCnhhECKJUv1afTPtUBg==",
"dev": true,
"license": "SEE LICENSE IN LICENSE.md",
"dependencies": {
@@ -476,20 +476,20 @@
"copilot": "npm-loader.js"
},
"optionalDependencies": {
- "@github/copilot-darwin-arm64": "1.0.52",
- "@github/copilot-darwin-x64": "1.0.52",
- "@github/copilot-linux-arm64": "1.0.52",
- "@github/copilot-linux-x64": "1.0.52",
- "@github/copilot-linuxmusl-arm64": "1.0.52",
- "@github/copilot-linuxmusl-x64": "1.0.52",
- "@github/copilot-win32-arm64": "1.0.52",
- "@github/copilot-win32-x64": "1.0.52"
+ "@github/copilot-darwin-arm64": "1.0.53-2",
+ "@github/copilot-darwin-x64": "1.0.53-2",
+ "@github/copilot-linux-arm64": "1.0.53-2",
+ "@github/copilot-linux-x64": "1.0.53-2",
+ "@github/copilot-linuxmusl-arm64": "1.0.53-2",
+ "@github/copilot-linuxmusl-x64": "1.0.53-2",
+ "@github/copilot-win32-arm64": "1.0.53-2",
+ "@github/copilot-win32-x64": "1.0.53-2"
}
},
"node_modules/@github/copilot-darwin-arm64": {
- "version": "1.0.52",
- "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.52.tgz",
- "integrity": "sha512-Jj0skAY5a9IQEaNHd1KdjkVhRSpmsSU4325BQ6XCgpo22pmg1Rk9Xc7cI29T6lCrn+KjksVvtPJq/lSNF2mHPw==",
+ "version": "1.0.53-2",
+ "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.53-2.tgz",
+ "integrity": "sha512-Ws+YLk9Gyix2IaqzFSuZe00fhX5IGAgNXyVNzkO1MvtnFSj9vGTAFslF94cf3VkpaI8VNf+O3MRGzaQohCpv4A==",
"cpu": [
"arm64"
],
@@ -504,9 +504,9 @@
}
},
"node_modules/@github/copilot-darwin-x64": {
- "version": "1.0.52",
- "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.52.tgz",
- "integrity": "sha512-vWzjLOKmwUTzyd3X8iR+I4c88EOH2r83Q6WN+0NgelqrzbhMHgMLJIbwTeKjN7egvribciYg6xeLFNo+0ClCkg==",
+ "version": "1.0.53-2",
+ "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.53-2.tgz",
+ "integrity": "sha512-3yHajiuz5UBsdpOlaZCLp2diveXJcIbXbjdjmovPIUrY/2h4yUbQSBEkFuxzV5CAuehQE9S7+NaZYMhUXRIl9Q==",
"cpu": [
"x64"
],
@@ -521,9 +521,9 @@
}
},
"node_modules/@github/copilot-linux-arm64": {
- "version": "1.0.52",
- "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.52.tgz",
- "integrity": "sha512-x6Pew1dMeKxNZMkaTC7VLxmD/X4zQiWQFTzMRYaqD2o5s0rqYYwy9ROP1+n3X6eaYWUp0FMKibdsiqjmZft+vw==",
+ "version": "1.0.53-2",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.53-2.tgz",
+ "integrity": "sha512-VgpKr1c7vw8lDqNPOIHYj7Qj6FJY2j3dTh6xaBcItUDLD7y45Pp36JJXrPiVjya7Upx4ThxR/kj9KSRxx4s5pg==",
"cpu": [
"arm64"
],
@@ -538,9 +538,9 @@
}
},
"node_modules/@github/copilot-linux-x64": {
- "version": "1.0.52",
- "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.52.tgz",
- "integrity": "sha512-dwZj/MeXNsLTYIp7A53xYTULvl+xspqZqqeiqhsW7KyGe8VT6QQ3bJj7qmOSEwOkmALuA4sPwBlTT3X0Ozbocw==",
+ "version": "1.0.53-2",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.53-2.tgz",
+ "integrity": "sha512-1mZUCQVeS2y5douEq8tCIEBr1XP8L0UM7fo4MmJHlLT+6ykZz1pyJPtnpO8OO4GGRvenOFd/XM0k2a+KpxYqtw==",
"cpu": [
"x64"
],
@@ -555,9 +555,9 @@
}
},
"node_modules/@github/copilot-linuxmusl-arm64": {
- "version": "1.0.52",
- "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-arm64/-/copilot-linuxmusl-arm64-1.0.52.tgz",
- "integrity": "sha512-QBhLnWhtH8qjsfeDqE5Bn5KGCH3fLEIRHbHfOd3UPyapBKTA+pBA/6FQGjvOkzwMeKKtTBeRBQ9hCoQm+Vrr2A==",
+ "version": "1.0.53-2",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-arm64/-/copilot-linuxmusl-arm64-1.0.53-2.tgz",
+ "integrity": "sha512-gf2wgQu8DuUZSz0Fdq2f13TvWOi6+xkkyQQM3mPtt841UV0K8eUV9MBSRvkv1zbd0RG9MgbPaBLE8TRpWezikg==",
"cpu": [
"arm64"
],
@@ -572,9 +572,9 @@
}
},
"node_modules/@github/copilot-linuxmusl-x64": {
- "version": "1.0.52",
- "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-x64/-/copilot-linuxmusl-x64-1.0.52.tgz",
- "integrity": "sha512-mdA5VfgX0XfMU3zwnAg0Wf3lQ/vkRZOmm7h69N/1jgRftMghm5WW3xfrBDkANta9J7YLl8YBPwRZAPzw2TYZEg==",
+ "version": "1.0.53-2",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-x64/-/copilot-linuxmusl-x64-1.0.53-2.tgz",
+ "integrity": "sha512-Zk/o40BOmuNUC6eLZnPRGE45dzdmrPbjusyGOdLKXFzlImHHW2SwYoFchnubzpz81Hzwur3/vCqYtGWjTSa8LA==",
"cpu": [
"x64"
],
@@ -589,9 +589,9 @@
}
},
"node_modules/@github/copilot-win32-arm64": {
- "version": "1.0.52",
- "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.52.tgz",
- "integrity": "sha512-Anl7/k4uudsE2Kc4nYFh4AJegcudt9I4od4OBwjQF6kR/VGXsgKtW6b15o8R4F3HWqXIcMwwyGq7Oov+NYVLqQ==",
+ "version": "1.0.53-2",
+ "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.53-2.tgz",
+ "integrity": "sha512-BBMC0QIOn+f61VGfyZbEiFupWJToZwftv9FhJ7xOh1utg3lwmBfjmaG9BKXdnaFqlOjP8mUKbgAkyBJHGZYNOA==",
"cpu": [
"arm64"
],
@@ -606,9 +606,9 @@
}
},
"node_modules/@github/copilot-win32-x64": {
- "version": "1.0.52",
- "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.52.tgz",
- "integrity": "sha512-rOTQk57EdhnoVKn5JlQBhurAJIRJ7GLm/jMGxrTktY2Le+bcdAyBzWZtIHiy5E9CXbpISBtUe63Coa5Tyumf6w==",
+ "version": "1.0.53-2",
+ "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.53-2.tgz",
+ "integrity": "sha512-ObuGJ/AGnhTl3kOPIjY9xj3BfucjpQNytmIPQGwgMDDBisSvtfdQ5WVbZlKG736VtQ1epZ1RmzS28bKTudBD/Q==",
"cpu": [
"x64"
],
diff --git a/test/harness/package.json b/test/harness/package.json
index e8bc6376d..b1d70c9dc 100644
--- a/test/harness/package.json
+++ b/test/harness/package.json
@@ -11,7 +11,7 @@
"test": "vitest run"
},
"devDependencies": {
- "@github/copilot": "^1.0.52",
+ "@github/copilot": "^1.0.53-2",
"@modelcontextprotocol/sdk": "^1.26.0",
"@types/node": "^25.3.3",
"@types/node-forge": "^1.3.14",