@@ -1704,8 +1540,6 @@ impl<'a> SessionRpcTasks<'a> {
Ok(serde_json::from_value(_value)?)
}
- /// Calls `session.tasks.sendMessage`.
- ///
/// Wire method: `session.tasks.sendMessage`.
///
///
@@ -1737,8 +1571,6 @@ pub struct SessionRpcTools<'a> {
}
impl<'a> SessionRpcTools<'a> {
- /// Calls `session.tools.handlePendingToolCall`.
- ///
/// Wire method: `session.tools.handlePendingToolCall`.
pub async fn handle_pending_tool_call(
&self,
@@ -1765,13 +1597,7 @@ pub struct SessionRpcUi<'a> {
}
impl<'a> SessionRpcUi<'a> {
- /// Calls `session.ui.elicitation`.
- ///
/// Wire method: `session.ui.elicitation`.
- ///
- /// # Returns
- ///
- /// The elicitation response (accept with form values, decline, or cancel)
pub async fn elicitation(
&self,
params: UIElicitationRequest,
@@ -1786,8 +1612,6 @@ impl<'a> SessionRpcUi<'a> {
Ok(serde_json::from_value(_value)?)
}
- /// Calls `session.ui.handlePendingElicitation`.
- ///
/// Wire method: `session.ui.handlePendingElicitation`.
pub async fn handle_pending_elicitation(
&self,
@@ -1814,8 +1638,6 @@ pub struct SessionRpcUsage<'a> {
}
impl<'a> SessionRpcUsage<'a> {
- /// Calls `session.usage.getMetrics`.
- ///
/// Wire method: `session.usage.getMetrics`.
///
///
@@ -1843,8 +1665,6 @@ pub struct SessionRpcWorkspaces<'a> {
}
impl<'a> SessionRpcWorkspaces<'a> {
- /// Calls `session.workspaces.getWorkspace`.
- ///
/// Wire method: `session.workspaces.getWorkspace`.
pub async fn get_workspace(&self) -> Result
{
let wire_params = serde_json::json!({ "sessionId": self.session.id() });
@@ -1859,8 +1679,6 @@ impl<'a> SessionRpcWorkspaces<'a> {
Ok(serde_json::from_value(_value)?)
}
- /// Calls `session.workspaces.listFiles`.
- ///
/// Wire method: `session.workspaces.listFiles`.
pub async fn list_files(&self) -> Result {
let wire_params = serde_json::json!({ "sessionId": self.session.id() });
@@ -1872,8 +1690,6 @@ impl<'a> SessionRpcWorkspaces<'a> {
Ok(serde_json::from_value(_value)?)
}
- /// Calls `session.workspaces.readFile`.
- ///
/// Wire method: `session.workspaces.readFile`.
pub async fn read_file(
&self,
@@ -1889,8 +1705,6 @@ impl<'a> SessionRpcWorkspaces<'a> {
Ok(serde_json::from_value(_value)?)
}
- /// Calls `session.workspaces.createFile`.
- ///
/// Wire method: `session.workspaces.createFile`.
pub async fn create_file(&self, params: WorkspacesCreateFileRequest) -> Result<(), Error> {
let mut wire_params = serde_json::to_value(params)?;
diff --git a/rust/src/generated/session_events.rs b/rust/src/generated/session_events.rs
index feca17f89..9142dfd40 100644
--- a/rust/src/generated/session_events.rs
+++ b/rust/src/generated/session_events.rs
@@ -133,6 +133,8 @@ pub enum SessionEventType {
McpOauthRequired,
#[serde(rename = "mcp.oauth_completed")]
McpOauthCompleted,
+ #[serde(rename = "session.custom_notification")]
+ SessionCustomNotification,
#[serde(rename = "external_tool.requested")]
ExternalToolRequested,
#[serde(rename = "external_tool.completed")]
@@ -305,6 +307,8 @@ pub enum SessionEventData {
McpOauthRequired(McpOauthRequiredData),
#[serde(rename = "mcp.oauth_completed")]
McpOauthCompleted(McpOauthCompletedData),
+ #[serde(rename = "session.custom_notification")]
+ SessionCustomNotification(SessionCustomNotificationData),
#[serde(rename = "external_tool.requested")]
ExternalToolRequested(ExternalToolRequestedData),
#[serde(rename = "external_tool.completed")]
@@ -479,7 +483,7 @@ pub struct SessionErrorData {
/// Only set on `errorType: "rate_limit"`. When `true`, the runtime will follow this error with an `auto_mode_switch.requested` event (or silently switch if `continueOnAutoMode` is enabled). UI clients can use this flag to suppress duplicate rendering of the rate-limit error when they show their own auto-mode-switch prompt.
#[serde(skip_serializing_if = "Option::is_none")]
pub eligible_for_auto_switch: Option,
- /// Fine-grained error code from the upstream provider, when available. For `errorType: "rate_limit"`, this is one of the `RateLimitErrorCode` values (e.g., `"user_weekly_rate_limited"`, `"user_global_rate_limited"`, `"rate_limited"`, `"user_model_rate_limited"`, `"integration_rate_limited"`).
+ /// Fine-grained error code from the upstream provider, when available. For `errorType: "rate_limit"`, this is one of the `RateLimitErrorCode` values (e.g., `"user_weekly_rate_limited"`, `"user_global_rate_limited"`, `"rate_limited"`, `"user_model_rate_limited"`, `"integration_rate_limited"`). For `errorType: "quota"`, this is the CAPI quota error code (e.g., `"quota_exceeded"`, `"session_quota_exceeded"`, `"billing_not_configured"`).
#[serde(skip_serializing_if = "Option::is_none")]
pub error_code: Option,
/// Category of error (e.g., "authentication", "authorization", "quota", "rate_limit", "context_limit", "query")
@@ -2516,6 +2520,24 @@ pub struct McpOauthCompletedData {
pub request_id: RequestId,
}
+/// Opaque custom notification data. Consumers may branch on source and name, but payload semantics are source-defined.
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct SessionCustomNotificationData {
+ /// Source-defined custom notification name
+ pub name: String,
+ /// Source-defined JSON payload for the custom notification
+ pub payload: serde_json::Value,
+ /// Namespace for the custom notification producer
+ pub source: String,
+ /// Optional source-defined string identifiers describing the payload subject
+ #[serde(default)]
+ pub subject: HashMap,
+ /// Optional source-defined payload schema version
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub version: Option,
+}
+
/// External tool invocation request for client-side tool execution
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
diff --git a/test/harness/package-lock.json b/test/harness/package-lock.json
index e72caae70..60d645230 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.48-1",
+ "@github/copilot": "^1.0.48",
"@modelcontextprotocol/sdk": "^1.26.0",
"@types/node": "^25.3.3",
"@types/node-forge": "^1.3.14",
@@ -464,27 +464,27 @@
}
},
"node_modules/@github/copilot": {
- "version": "1.0.48-1",
- "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.48-1.tgz",
- "integrity": "sha512-8Y+Lf26h5Qq6ADXQ7wUAEvMil8BXKHDv9omlKXrFCmmAUzk+a36Y+LpvdSUBPxDyf4h/A8gUq6qJ63649a5sWg==",
+ "version": "1.0.48",
+ "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.48.tgz",
+ "integrity": "sha512-U5SzyTEq376UU9A4Sd3TEKz+Y2nRUd90cLO4Hc1otaB8yFSy9Ur2UVGcI2/wCoodL3a39k6WbdgNzFxr0gWFRQ==",
"dev": true,
"license": "SEE LICENSE IN LICENSE.md",
"bin": {
"copilot": "npm-loader.js"
},
"optionalDependencies": {
- "@github/copilot-darwin-arm64": "1.0.48-1",
- "@github/copilot-darwin-x64": "1.0.48-1",
- "@github/copilot-linux-arm64": "1.0.48-1",
- "@github/copilot-linux-x64": "1.0.48-1",
- "@github/copilot-win32-arm64": "1.0.48-1",
- "@github/copilot-win32-x64": "1.0.48-1"
+ "@github/copilot-darwin-arm64": "1.0.48",
+ "@github/copilot-darwin-x64": "1.0.48",
+ "@github/copilot-linux-arm64": "1.0.48",
+ "@github/copilot-linux-x64": "1.0.48",
+ "@github/copilot-win32-arm64": "1.0.48",
+ "@github/copilot-win32-x64": "1.0.48"
}
},
"node_modules/@github/copilot-darwin-arm64": {
- "version": "1.0.48-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.48-1.tgz",
- "integrity": "sha512-ZaacHYawrFD22LgfIBpVUqlfj6d6IogVPnyQVXjAWDvZ3JLXWCzX7OpTGJ/BWgU5HJwUkmr0ZyVqBTrfTrdCZQ==",
+ "version": "1.0.48",
+ "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.48.tgz",
+ "integrity": "sha512-82MLoMQwPVVFM8EYssihFxSEPUYtZADE8rMzQ3jG9HgRg2qjQSfnHQS1mKe64dlXswZUK/onw6/8kjnW5I4pPg==",
"cpu": [
"arm64"
],
@@ -499,9 +499,9 @@
}
},
"node_modules/@github/copilot-darwin-x64": {
- "version": "1.0.48-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.48-1.tgz",
- "integrity": "sha512-cHpz8onmXlABNm8jBUON0fUm/7Koe853zHK349qq8mhZkdlNN3zCn0zkZQuzrJZfJbxrjFOV863N0+F3zGBU1w==",
+ "version": "1.0.48",
+ "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.48.tgz",
+ "integrity": "sha512-1VQ5r5F0h8GwboXmZTcutqcJT+iCpPXAF27QqodmpKEvW9aYfG8g9X2kFJOzDZoX+SA3Uaka9qXdYKF2xT6Uog==",
"cpu": [
"x64"
],
@@ -516,9 +516,9 @@
}
},
"node_modules/@github/copilot-linux-arm64": {
- "version": "1.0.48-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.48-1.tgz",
- "integrity": "sha512-UADRnVHBWWza4Py0EUp7XO2712aoFemlpvsKwhnNIe0/o1ttwVeqdOHHeUuH/BUBY/Xx8QG+YB17bNztraiP8Q==",
+ "version": "1.0.48",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.48.tgz",
+ "integrity": "sha512-PmsGnb0DZlI+Bf53l9HM1PAHHkUcMyB4y8v/7tnC/jDOV5dGF124n0HnDNfJLOLiJGiQGodthIif6QtPaAxpeA==",
"cpu": [
"arm64"
],
@@ -533,9 +533,9 @@
}
},
"node_modules/@github/copilot-linux-x64": {
- "version": "1.0.48-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.48-1.tgz",
- "integrity": "sha512-FnOTLPwWht7l2UnXxhpVwT+tSPTC9UqBzjhAoC5y68qJ1bQYXE8TG6cm1qsCo3pfwSAyxEhO7leyuslEO2mIYA==",
+ "version": "1.0.48",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.48.tgz",
+ "integrity": "sha512-b2cc4euSlke9fYHXXsS2EL9UYbctN0h4lZvtAcKUDY+RCnpYAQOVBZK+c1R9dQrtsT6Z/yUv7PuFPSs8qdtc2Q==",
"cpu": [
"x64"
],
@@ -550,9 +550,9 @@
}
},
"node_modules/@github/copilot-win32-arm64": {
- "version": "1.0.48-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.48-1.tgz",
- "integrity": "sha512-FIenlc2v04D7yCgm516piivbMfwpQqQ1gsZG4g2en8WxLQFjVfm2Szlk1NYwzo9K2gBmNc5+zpdTZH6kb7Hsng==",
+ "version": "1.0.48",
+ "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.48.tgz",
+ "integrity": "sha512-VEEOwddtpJ3DTbXGhnK6K8im4ofl9m08q1m/K++sNvWV8wkkOSOQBTiPdyUsuU/TXAoFhb8tZMIJv+6NnMBtMw==",
"cpu": [
"arm64"
],
@@ -567,9 +567,9 @@
}
},
"node_modules/@github/copilot-win32-x64": {
- "version": "1.0.48-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.48-1.tgz",
- "integrity": "sha512-d47QHwB89rNInhNpZGhh97njorWOmUXdrMExlM/lb5zcuBnH/QmIQHUeL9CJv970Ujs7gPHtwZcPhvZVuKd16A==",
+ "version": "1.0.48",
+ "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.48.tgz",
+ "integrity": "sha512-93BzvXLPHTyy1gWBXQY/IWIHor4IAwZuuo7/obG80/Qa6U0WeaN9slz/FBJvrsgVNrrRfEID5Xm3At+S6Kj67Q==",
"cpu": [
"x64"
],
diff --git a/test/harness/package.json b/test/harness/package.json
index 0bc06f4ec..40da68d76 100644
--- a/test/harness/package.json
+++ b/test/harness/package.json
@@ -11,7 +11,7 @@
"test": "vitest run"
},
"devDependencies": {
- "@github/copilot": "^1.0.48-1",
+ "@github/copilot": "^1.0.48",
"@modelcontextprotocol/sdk": "^1.26.0",
"@types/node": "^25.3.3",
"@types/node-forge": "^1.3.14",
From f37f08557e4d0af6952d8db4e0d67d972b198fe7 Mon Sep 17 00:00:00 2001
From: Copilot <223556219+Copilot@users.noreply.github.com>
Date: Thu, 14 May 2026 13:51:40 -0400
Subject: [PATCH 2/5] Fix Python and Rust SDK compilation after @github/copilot
1.0.48 update
The 1.0.48 codegen made models.list, account.getQuota, and
session.commands.list require explicit request params instead of
accepting no arguments.
Python:
- Update test call sites to pass ModelsListRequest() (all fields optional)
- Add ModelsListRequest import where needed
Rust:
- Add missing AccountGetQuotaRequest, ModelsListRequest, and
CommandsListRequest structs to generated api_types.rs (all fields
optional, matching the Python/Node generated schemas)
- Update callers in lib.rs, tests, and README to pass Default::default()
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
python/e2e/test_rpc_e2e.py | 4 ++--
python/e2e/test_rpc_server_e2e.py | 3 ++-
python/test_rpc_timeout.py | 5 +++--
rust/README.md | 2 +-
rust/src/generated/api_types.rs | 30 ++++++++++++++++++++++++++++++
rust/src/lib.rs | 2 +-
rust/tests/e2e/rpc_server.rs | 4 ++--
rust/tests/session_test.rs | 2 +-
scripts/codegen/rust.ts | 10 +++++++++-
9 files changed, 51 insertions(+), 11 deletions(-)
diff --git a/python/e2e/test_rpc_e2e.py b/python/e2e/test_rpc_e2e.py
index c5e9a7b79..e0fe93436 100644
--- a/python/e2e/test_rpc_e2e.py
+++ b/python/e2e/test_rpc_e2e.py
@@ -4,7 +4,7 @@
from copilot import CopilotClient
from copilot.client import SubprocessConfig
-from copilot.generated.rpc import PingRequest
+from copilot.generated.rpc import PingRequest, ModelsListRequest
from copilot.session import PermissionHandler
from .testharness import CLI_PATH, E2ETestContext
@@ -42,7 +42,7 @@ async def test_should_call_rpc_models_list(self):
await client.stop()
return
- result = await client.rpc.models.list()
+ result = await client.rpc.models.list(ModelsListRequest())
assert result.models is not None
assert isinstance(result.models, list)
diff --git a/python/e2e/test_rpc_server_e2e.py b/python/e2e/test_rpc_server_e2e.py
index ef2e5501d..67efbe733 100644
--- a/python/e2e/test_rpc_server_e2e.py
+++ b/python/e2e/test_rpc_server_e2e.py
@@ -17,6 +17,7 @@
from copilot.generated.rpc import (
AccountGetQuotaRequest,
MCPDiscoverRequest,
+ ModelsListRequest,
PingRequest,
SkillsConfigSetDisabledSkillsRequest,
SkillsDiscoverRequest,
@@ -96,7 +97,7 @@ async def test_should_call_rpc_models_list_with_typed_result(self, authed_ctx: E
client = _make_authed_client(authed_ctx, token)
try:
await client.start()
- result = await client.rpc.models.list()
+ result = await client.rpc.models.list(ModelsListRequest())
assert result.models is not None
assert any(model.id == "claude-sonnet-4.5" for model in result.models)
assert all((model.name or "").strip() for model in result.models)
diff --git a/python/test_rpc_timeout.py b/python/test_rpc_timeout.py
index b6f07caed..a32e7e7f4 100644
--- a/python/test_rpc_timeout.py
+++ b/python/test_rpc_timeout.py
@@ -9,6 +9,7 @@
FleetStartRequest,
ModeApi,
ModeSetRequest,
+ ModelsListRequest,
PlanApi,
ServerModelsApi,
ServerToolsApi,
@@ -117,7 +118,7 @@ async def test_timeout_on_server_no_params_method(self):
client.request = AsyncMock(return_value={"models": []})
api = ServerModelsApi(client)
- await api.list(timeout=45.0)
+ await api.list(ModelsListRequest(), timeout=45.0)
_, kwargs = client.request.call_args
assert kwargs["timeout"] == 45.0
@@ -128,7 +129,7 @@ async def test_default_timeout_on_server_no_params_method(self):
client.request = AsyncMock(return_value={"models": []})
api = ServerModelsApi(client)
- await api.list()
+ await api.list(ModelsListRequest())
_, kwargs = client.request.call_args
assert "timeout" not in kwargs
diff --git a/rust/README.md b/rust/README.md
index cf9e4b839..8ae3851e1 100644
--- a/rust/README.md
+++ b/rust/README.md
@@ -157,7 +157,7 @@ response structs.
```rust,ignore
// Common generated RPCs.
let files = session.rpc().workspaces().list_files().await?.files;
-let models = client.rpc().models().list().await?.models;
+let models = client.rpc().models().list(Default::default()).await?.models;
// Methods with no helper — full schema-typed access.
let agents = session.rpc().agent().list().await?.agents;
diff --git a/rust/src/generated/api_types.rs b/rust/src/generated/api_types.rs
index a0e7429d0..2f74abb48 100644
--- a/rust/src/generated/api_types.rs
+++ b/rust/src/generated/api_types.rs
@@ -187,6 +187,14 @@ pub mod rpc_methods {
pub const SESSIONFS_RENAME: &str = "sessionFs.rename";
}
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct AccountGetQuotaRequest {
+ /// GitHub token for per-user quota lookup. When provided, resolves this token to determine the user's quota instead of using the global auth.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub git_hub_token: Option,
+}
+
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AccountQuotaSnapshot {
@@ -338,6 +346,20 @@ pub struct CommandsInvokeRequest {
pub name: String,
}
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct CommandsListRequest {
+ /// Include runtime built-in commands
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub include_builtins: Option,
+ /// Include commands registered by protocol clients, including SDK clients and extensions
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub include_client_commands: Option,
+ /// Include enabled user-invocable skills and commands
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub include_skills: Option,
+}
+
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CommandsRespondToQueuedCommandRequest {
@@ -1061,6 +1083,14 @@ pub struct ModelList {
pub models: Vec,
}
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct ModelsListRequest {
+ /// GitHub token for per-user model listing. When provided, resolves this token to determine the user's Copilot plan and available models instead of using the global auth.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub git_hub_token: Option,
+}
+
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ModelSwitchToRequest {
diff --git a/rust/src/lib.rs b/rust/src/lib.rs
index af30b4191..7cd8461a0 100644
--- a/rust/src/lib.rs
+++ b/rust/src/lib.rs
@@ -1787,7 +1787,7 @@ impl Client {
if let Some(handler) = &self.inner.on_list_models {
handler.list_models().await
} else {
- Ok(self.rpc().models().list().await?.models)
+ Ok(self.rpc().models().list(Default::default()).await?.models)
}
})
.await?;
diff --git a/rust/tests/e2e/rpc_server.rs b/rust/tests/e2e/rpc_server.rs
index d1508541b..55d151595 100644
--- a/rust/tests/e2e/rpc_server.rs
+++ b/rust/tests/e2e/rpc_server.rs
@@ -46,7 +46,7 @@ async fn should_call_rpc_models_list_with_typed_result() {
.await
.expect("start client");
- let result = client.rpc().models().list().await.expect("models list");
+ let result = client.rpc().models().list(Default::default()).await.expect("models list");
assert!(
result
@@ -87,7 +87,7 @@ async fn should_call_rpc_account_get_quota_when_authenticated() {
.await
.expect("start client");
- let result = client.rpc().account().get_quota().await.expect("quota");
+ let result = client.rpc().account().get_quota(Default::default()).await.expect("quota");
let chat = result.quota_snapshots.get("chat").expect("chat quota");
assert_eq!(chat.entitlement_requests, 100);
diff --git a/rust/tests/session_test.rs b/rust/tests/session_test.rs
index c98c04d89..cd4147a3f 100644
--- a/rust/tests/session_test.rs
+++ b/rust/tests/session_test.rs
@@ -2470,7 +2470,7 @@ async fn rpc_namespace_client_models_list_dispatches_correctly() {
let session = Arc::new(session);
let client = session.client().clone();
- let handle = tokio::spawn(async move { client.rpc().models().list().await });
+ let handle = tokio::spawn(async move { client.rpc().models().list(Default::default()).await });
let request = server.read_request().await;
assert_eq!(request["method"], "models.list");
diff --git a/scripts/codegen/rust.ts b/scripts/codegen/rust.ts
index 1a5847033..1fa156219 100644
--- a/scripts/codegen/rust.ts
+++ b/scripts/codegen/rust.ts
@@ -1276,7 +1276,15 @@ function generateApiTypesCode(apiSchema: ApiSchema): string {
schema.description,
);
} else if (getUnionVariants(schema)) {
- tryEmitRustUnion(schema, name, "", ctx);
+ // Unwrap nullable anyOf wrappers (e.g. anyOf: [{ not: {} }, { type: "object" }])
+ // before falling through to struct generation, since tryEmitRustUnion
+ // silently drops these.
+ const nullableInner = getNullableInner(schema);
+ if (nullableInner && isObjectSchema(nullableInner)) {
+ emitRustStruct(name, nullableInner, ctx, nullableInner.description ?? schema.description);
+ } else {
+ tryEmitRustUnion(schema, name, "", ctx);
+ }
}
}
From 81f4967a22752e6ff39a0090e5470dd346c029ea Mon Sep 17 00:00:00 2001
From: Copilot <223556219+Copilot@users.noreply.github.com>
Date: Thu, 14 May 2026 14:31:26 -0400
Subject: [PATCH 3/5] Regenerate all SDK types after rebase
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
go/rpc/zrpc.go | 272 ++++++++++++++++++++++++++++++++
nodejs/src/generated/rpc.ts | 272 ++++++++++++++++++++++++++++++++
python/copilot/generated/rpc.py | 87 +++++++++-
rust/README.md | 2 +-
rust/src/generated/rpc.rs | 190 +++++++++++++++++++++-
rust/src/lib.rs | 2 +-
rust/tests/e2e/rpc_server.rs | 4 +-
rust/tests/session_test.rs | 2 +-
8 files changed, 823 insertions(+), 8 deletions(-)
diff --git a/go/rpc/zrpc.go b/go/rpc/zrpc.go
index 63e6eac41..f114e2382 100644
--- a/go/rpc/zrpc.go
+++ b/go/rpc/zrpc.go
@@ -2642,6 +2642,9 @@ type serverApi struct {
type ServerAccountApi serverApi
+// GetQuota calls account.getQuota.
+//
+// RPC method: account.getQuota.
func (a *ServerAccountApi) GetQuota(ctx context.Context, params *AccountGetQuotaRequest) (*AccountGetQuotaResult, error) {
raw, err := a.client.Request("account.getQuota", params)
if err != nil {
@@ -2656,6 +2659,9 @@ func (a *ServerAccountApi) GetQuota(ctx context.Context, params *AccountGetQuota
type ServerMcpApi serverApi
+// Discover calls mcp.discover.
+//
+// RPC method: mcp.discover.
func (a *ServerMcpApi) Discover(ctx context.Context, params *McpDiscoverRequest) (*McpDiscoverResult, error) {
raw, err := a.client.Request("mcp.discover", params)
if err != nil {
@@ -2670,6 +2676,9 @@ func (a *ServerMcpApi) Discover(ctx context.Context, params *McpDiscoverRequest)
type ServerMcpConfigApi serverApi
+// Add calls mcp.config.add.
+//
+// RPC method: mcp.config.add.
func (a *ServerMcpConfigApi) Add(ctx context.Context, params *McpConfigAddRequest) (*McpConfigAddResult, error) {
raw, err := a.client.Request("mcp.config.add", params)
if err != nil {
@@ -2682,6 +2691,9 @@ func (a *ServerMcpConfigApi) Add(ctx context.Context, params *McpConfigAddReques
return &result, nil
}
+// Disable calls mcp.config.disable.
+//
+// RPC method: mcp.config.disable.
func (a *ServerMcpConfigApi) Disable(ctx context.Context, params *McpConfigDisableRequest) (*McpConfigDisableResult, error) {
raw, err := a.client.Request("mcp.config.disable", params)
if err != nil {
@@ -2694,6 +2706,9 @@ func (a *ServerMcpConfigApi) Disable(ctx context.Context, params *McpConfigDisab
return &result, nil
}
+// Enable calls mcp.config.enable.
+//
+// RPC method: mcp.config.enable.
func (a *ServerMcpConfigApi) Enable(ctx context.Context, params *McpConfigEnableRequest) (*McpConfigEnableResult, error) {
raw, err := a.client.Request("mcp.config.enable", params)
if err != nil {
@@ -2706,6 +2721,9 @@ func (a *ServerMcpConfigApi) Enable(ctx context.Context, params *McpConfigEnable
return &result, nil
}
+// List calls mcp.config.list.
+//
+// RPC method: mcp.config.list.
func (a *ServerMcpConfigApi) List(ctx context.Context) (*McpConfigList, error) {
raw, err := a.client.Request("mcp.config.list", nil)
if err != nil {
@@ -2718,6 +2736,9 @@ func (a *ServerMcpConfigApi) List(ctx context.Context) (*McpConfigList, error) {
return &result, nil
}
+// Remove calls mcp.config.remove.
+//
+// RPC method: mcp.config.remove.
func (a *ServerMcpConfigApi) Remove(ctx context.Context, params *McpConfigRemoveRequest) (*McpConfigRemoveResult, error) {
raw, err := a.client.Request("mcp.config.remove", params)
if err != nil {
@@ -2730,6 +2751,9 @@ func (a *ServerMcpConfigApi) Remove(ctx context.Context, params *McpConfigRemove
return &result, nil
}
+// Update calls mcp.config.update.
+//
+// RPC method: mcp.config.update.
func (a *ServerMcpConfigApi) Update(ctx context.Context, params *McpConfigUpdateRequest) (*McpConfigUpdateResult, error) {
raw, err := a.client.Request("mcp.config.update", params)
if err != nil {
@@ -2748,6 +2772,9 @@ func (s *ServerMcpApi) Config() *ServerMcpConfigApi {
type ServerModelsApi serverApi
+// List calls models.list.
+//
+// RPC method: models.list.
func (a *ServerModelsApi) List(ctx context.Context, params *ModelsListRequest) (*ModelList, error) {
raw, err := a.client.Request("models.list", params)
if err != nil {
@@ -2762,6 +2789,9 @@ func (a *ServerModelsApi) List(ctx context.Context, params *ModelsListRequest) (
type ServerSessionFsApi serverApi
+// SetProvider calls sessionFs.setProvider.
+//
+// RPC method: sessionFs.setProvider.
func (a *ServerSessionFsApi) SetProvider(ctx context.Context, params *SessionFsSetProviderRequest) (*SessionFsSetProviderResult, error) {
raw, err := a.client.Request("sessionFs.setProvider", params)
if err != nil {
@@ -2777,6 +2807,9 @@ func (a *ServerSessionFsApi) SetProvider(ctx context.Context, params *SessionFsS
// Experimental: ServerSessionsApi contains experimental APIs that may change or be removed.
type ServerSessionsApi serverApi
+// Fork calls sessions.fork.
+//
+// RPC method: sessions.fork.
func (a *ServerSessionsApi) Fork(ctx context.Context, params *SessionsForkRequest) (*SessionsForkResult, error) {
raw, err := a.client.Request("sessions.fork", params)
if err != nil {
@@ -2791,6 +2824,9 @@ func (a *ServerSessionsApi) Fork(ctx context.Context, params *SessionsForkReques
type ServerSkillsApi serverApi
+// Discover calls skills.discover.
+//
+// RPC method: skills.discover.
func (a *ServerSkillsApi) Discover(ctx context.Context, params *SkillsDiscoverRequest) (*ServerSkillList, error) {
raw, err := a.client.Request("skills.discover", params)
if err != nil {
@@ -2805,6 +2841,9 @@ func (a *ServerSkillsApi) Discover(ctx context.Context, params *SkillsDiscoverRe
type ServerSkillsConfigApi serverApi
+// SetDisabledSkills calls skills.config.setDisabledSkills.
+//
+// RPC method: skills.config.setDisabledSkills.
func (a *ServerSkillsConfigApi) SetDisabledSkills(ctx context.Context, params *SkillsConfigSetDisabledSkillsRequest) (*SkillsConfigSetDisabledSkillsResult, error) {
raw, err := a.client.Request("skills.config.setDisabledSkills", params)
if err != nil {
@@ -2823,6 +2862,9 @@ func (s *ServerSkillsApi) Config() *ServerSkillsConfigApi {
type ServerToolsApi serverApi
+// List calls tools.list.
+//
+// RPC method: tools.list.
func (a *ServerToolsApi) List(ctx context.Context, params *ToolsListRequest) (*ToolList, error) {
raw, err := a.client.Request("tools.list", params)
if err != nil {
@@ -2849,6 +2891,9 @@ type ServerRpc struct {
Tools *ServerToolsApi
}
+// Ping calls ping.
+//
+// RPC method: ping.
func (a *ServerRpc) Ping(ctx context.Context, params *PingRequest) (*PingResult, error) {
raw, err := a.common.client.Request("ping", params)
if err != nil {
@@ -2885,6 +2930,9 @@ type InternalServerRpc struct {
common internalServerApi
}
+// Connect calls connect.
+//
+// RPC method: connect.
// Internal: Connect is part of the SDK's internal handshake/plumbing; external callers
// should not use it.
func (a *InternalServerRpc) Connect(ctx context.Context, params *ConnectRequest) (*ConnectResult, error) {
@@ -2913,6 +2961,9 @@ type sessionApi struct {
// Experimental: AgentApi contains experimental APIs that may change or be removed.
type AgentApi sessionApi
+// Deselect calls session.agent.deselect.
+//
+// RPC method: session.agent.deselect.
func (a *AgentApi) Deselect(ctx context.Context) (*AgentDeselectResult, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.agent.deselect", req)
@@ -2926,6 +2977,9 @@ func (a *AgentApi) Deselect(ctx context.Context) (*AgentDeselectResult, error) {
return &result, nil
}
+// GetCurrent calls session.agent.getCurrent.
+//
+// RPC method: session.agent.getCurrent.
func (a *AgentApi) GetCurrent(ctx context.Context) (*AgentGetCurrentResult, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.agent.getCurrent", req)
@@ -2939,6 +2993,9 @@ func (a *AgentApi) GetCurrent(ctx context.Context) (*AgentGetCurrentResult, erro
return &result, nil
}
+// List calls session.agent.list.
+//
+// RPC method: session.agent.list.
func (a *AgentApi) List(ctx context.Context) (*AgentList, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.agent.list", req)
@@ -2952,6 +3009,9 @@ func (a *AgentApi) List(ctx context.Context) (*AgentList, error) {
return &result, nil
}
+// Reload calls session.agent.reload.
+//
+// RPC method: session.agent.reload.
func (a *AgentApi) Reload(ctx context.Context) (*AgentReloadResult, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.agent.reload", req)
@@ -2965,6 +3025,9 @@ func (a *AgentApi) Reload(ctx context.Context) (*AgentReloadResult, error) {
return &result, nil
}
+// Select calls session.agent.select.
+//
+// RPC method: session.agent.select.
func (a *AgentApi) Select(ctx context.Context, params *AgentSelectRequest) (*AgentSelectResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -2983,6 +3046,9 @@ func (a *AgentApi) Select(ctx context.Context, params *AgentSelectRequest) (*Age
type AuthApi sessionApi
+// GetStatus calls session.auth.getStatus.
+//
+// RPC method: session.auth.getStatus.
func (a *AuthApi) GetStatus(ctx context.Context) (*SessionAuthStatus, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.auth.getStatus", req)
@@ -2998,6 +3064,9 @@ func (a *AuthApi) GetStatus(ctx context.Context) (*SessionAuthStatus, error) {
type CommandsApi sessionApi
+// HandlePendingCommand calls session.commands.handlePendingCommand.
+//
+// RPC method: session.commands.handlePendingCommand.
func (a *CommandsApi) HandlePendingCommand(ctx context.Context, params *CommandsHandlePendingCommandRequest) (*CommandsHandlePendingCommandResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3017,6 +3086,9 @@ func (a *CommandsApi) HandlePendingCommand(ctx context.Context, params *Commands
return &result, nil
}
+// Invoke calls session.commands.invoke.
+//
+// RPC method: session.commands.invoke.
func (a *CommandsApi) Invoke(ctx context.Context, params *CommandsInvokeRequest) (SlashCommandInvocationResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3036,6 +3108,9 @@ func (a *CommandsApi) Invoke(ctx context.Context, params *CommandsInvokeRequest)
return result, nil
}
+// List calls session.commands.list.
+//
+// RPC method: session.commands.list.
func (a *CommandsApi) List(ctx context.Context, params ...*CommandsListRequest) (*CommandList, error) {
var requestParams *CommandsListRequest
if len(params) > 0 {
@@ -3064,6 +3139,9 @@ func (a *CommandsApi) List(ctx context.Context, params ...*CommandsListRequest)
return &result, nil
}
+// RespondToQueuedCommand calls session.commands.respondToQueuedCommand.
+//
+// RPC method: session.commands.respondToQueuedCommand.
func (a *CommandsApi) RespondToQueuedCommand(ctx context.Context, params *CommandsRespondToQueuedCommandRequest) (*CommandsRespondToQueuedCommandResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3084,6 +3162,9 @@ func (a *CommandsApi) RespondToQueuedCommand(ctx context.Context, params *Comman
// Experimental: ExtensionsApi contains experimental APIs that may change or be removed.
type ExtensionsApi sessionApi
+// Disable calls session.extensions.disable.
+//
+// RPC method: session.extensions.disable.
func (a *ExtensionsApi) Disable(ctx context.Context, params *ExtensionsDisableRequest) (*ExtensionsDisableResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3100,6 +3181,9 @@ func (a *ExtensionsApi) Disable(ctx context.Context, params *ExtensionsDisableRe
return &result, nil
}
+// Enable calls session.extensions.enable.
+//
+// RPC method: session.extensions.enable.
func (a *ExtensionsApi) Enable(ctx context.Context, params *ExtensionsEnableRequest) (*ExtensionsEnableResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3116,6 +3200,9 @@ func (a *ExtensionsApi) Enable(ctx context.Context, params *ExtensionsEnableRequ
return &result, nil
}
+// List calls session.extensions.list.
+//
+// RPC method: session.extensions.list.
func (a *ExtensionsApi) List(ctx context.Context) (*ExtensionList, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.extensions.list", req)
@@ -3129,6 +3216,9 @@ func (a *ExtensionsApi) List(ctx context.Context) (*ExtensionList, error) {
return &result, nil
}
+// Reload calls session.extensions.reload.
+//
+// RPC method: session.extensions.reload.
func (a *ExtensionsApi) Reload(ctx context.Context) (*ExtensionsReloadResult, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.extensions.reload", req)
@@ -3145,6 +3235,9 @@ func (a *ExtensionsApi) Reload(ctx context.Context) (*ExtensionsReloadResult, er
// Experimental: FleetApi contains experimental APIs that may change or be removed.
type FleetApi sessionApi
+// Start calls session.fleet.start.
+//
+// RPC method: session.fleet.start.
func (a *FleetApi) Start(ctx context.Context, params *FleetStartRequest) (*FleetStartResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3166,6 +3259,9 @@ func (a *FleetApi) Start(ctx context.Context, params *FleetStartRequest) (*Fleet
// Experimental: HistoryApi contains experimental APIs that may change or be removed.
type HistoryApi sessionApi
+// Compact calls session.history.compact.
+//
+// RPC method: session.history.compact.
func (a *HistoryApi) Compact(ctx context.Context) (*HistoryCompactResult, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.history.compact", req)
@@ -3179,6 +3275,9 @@ func (a *HistoryApi) Compact(ctx context.Context) (*HistoryCompactResult, error)
return &result, nil
}
+// Truncate calls session.history.truncate.
+//
+// RPC method: session.history.truncate.
func (a *HistoryApi) Truncate(ctx context.Context, params *HistoryTruncateRequest) (*HistoryTruncateResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3197,6 +3296,9 @@ func (a *HistoryApi) Truncate(ctx context.Context, params *HistoryTruncateReques
type InstructionsApi sessionApi
+// GetSources calls session.instructions.getSources.
+//
+// RPC method: session.instructions.getSources.
func (a *InstructionsApi) GetSources(ctx context.Context) (*InstructionsGetSourcesResult, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.instructions.getSources", req)
@@ -3213,6 +3315,9 @@ func (a *InstructionsApi) GetSources(ctx context.Context) (*InstructionsGetSourc
// Experimental: McpApi contains experimental APIs that may change or be removed.
type McpApi sessionApi
+// Disable calls session.mcp.disable.
+//
+// RPC method: session.mcp.disable.
func (a *McpApi) Disable(ctx context.Context, params *McpDisableRequest) (*McpDisableResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3229,6 +3334,9 @@ func (a *McpApi) Disable(ctx context.Context, params *McpDisableRequest) (*McpDi
return &result, nil
}
+// Enable calls session.mcp.enable.
+//
+// RPC method: session.mcp.enable.
func (a *McpApi) Enable(ctx context.Context, params *McpEnableRequest) (*McpEnableResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3245,6 +3353,9 @@ func (a *McpApi) Enable(ctx context.Context, params *McpEnableRequest) (*McpEnab
return &result, nil
}
+// List calls session.mcp.list.
+//
+// RPC method: session.mcp.list.
func (a *McpApi) List(ctx context.Context) (*McpServerList, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.mcp.list", req)
@@ -3258,6 +3369,9 @@ func (a *McpApi) List(ctx context.Context) (*McpServerList, error) {
return &result, nil
}
+// Reload calls session.mcp.reload.
+//
+// RPC method: session.mcp.reload.
func (a *McpApi) Reload(ctx context.Context) (*McpReloadResult, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.mcp.reload", req)
@@ -3274,6 +3388,9 @@ func (a *McpApi) Reload(ctx context.Context) (*McpReloadResult, error) {
// Experimental: McpOauthApi contains experimental APIs that may change or be removed.
type McpOauthApi sessionApi
+// Login calls session.mcp.oauth.login.
+//
+// RPC method: session.mcp.oauth.login.
func (a *McpOauthApi) Login(ctx context.Context, params *McpOauthLoginRequest) (*McpOauthLoginResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3306,6 +3423,11 @@ func (s *McpApi) Oauth() *McpOauthApi {
type ModeApi sessionApi
+// Get calls session.mode.get.
+//
+// RPC method: session.mode.get.
+//
+// Returns: The agent mode. Valid values: "interactive", "plan", "autopilot".
func (a *ModeApi) Get(ctx context.Context) (*SessionMode, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.mode.get", req)
@@ -3319,6 +3441,9 @@ func (a *ModeApi) Get(ctx context.Context) (*SessionMode, error) {
return &result, nil
}
+// Set calls session.mode.set.
+//
+// RPC method: session.mode.set.
func (a *ModeApi) Set(ctx context.Context, params *ModeSetRequest) (*ModeSetResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3337,6 +3462,9 @@ func (a *ModeApi) Set(ctx context.Context, params *ModeSetRequest) (*ModeSetResu
type ModelApi sessionApi
+// GetCurrent calls session.model.getCurrent.
+//
+// RPC method: session.model.getCurrent.
func (a *ModelApi) GetCurrent(ctx context.Context) (*CurrentModel, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.model.getCurrent", req)
@@ -3350,6 +3478,9 @@ func (a *ModelApi) GetCurrent(ctx context.Context) (*CurrentModel, error) {
return &result, nil
}
+// SwitchTo calls session.model.switchTo.
+//
+// RPC method: session.model.switchTo.
func (a *ModelApi) SwitchTo(ctx context.Context, params *ModelSwitchToRequest) (*ModelSwitchToResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3374,6 +3505,9 @@ func (a *ModelApi) SwitchTo(ctx context.Context, params *ModelSwitchToRequest) (
type NameApi sessionApi
+// Get calls session.name.get.
+//
+// RPC method: session.name.get.
func (a *NameApi) Get(ctx context.Context) (*NameGetResult, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.name.get", req)
@@ -3387,6 +3521,9 @@ func (a *NameApi) Get(ctx context.Context) (*NameGetResult, error) {
return &result, nil
}
+// Set calls session.name.set.
+//
+// RPC method: session.name.set.
func (a *NameApi) Set(ctx context.Context, params *NameSetRequest) (*NameSetResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3405,6 +3542,9 @@ func (a *NameApi) Set(ctx context.Context, params *NameSetRequest) (*NameSetResu
type PermissionsApi sessionApi
+// HandlePendingPermissionRequest calls session.permissions.handlePendingPermissionRequest.
+//
+// RPC method: session.permissions.handlePendingPermissionRequest.
func (a *PermissionsApi) HandlePendingPermissionRequest(ctx context.Context, params *PermissionDecisionRequest) (*PermissionRequestResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3422,6 +3562,9 @@ func (a *PermissionsApi) HandlePendingPermissionRequest(ctx context.Context, par
return &result, nil
}
+// ResetSessionApprovals calls session.permissions.resetSessionApprovals.
+//
+// RPC method: session.permissions.resetSessionApprovals.
func (a *PermissionsApi) ResetSessionApprovals(ctx context.Context) (*PermissionsResetSessionApprovalsResult, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.permissions.resetSessionApprovals", req)
@@ -3435,6 +3578,9 @@ func (a *PermissionsApi) ResetSessionApprovals(ctx context.Context) (*Permission
return &result, nil
}
+// SetApproveAll calls session.permissions.setApproveAll.
+//
+// RPC method: session.permissions.setApproveAll.
func (a *PermissionsApi) SetApproveAll(ctx context.Context, params *PermissionsSetApproveAllRequest) (*PermissionsSetApproveAllResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3453,6 +3599,9 @@ func (a *PermissionsApi) SetApproveAll(ctx context.Context, params *PermissionsS
type PlanApi sessionApi
+// Delete calls session.plan.delete.
+//
+// RPC method: session.plan.delete.
func (a *PlanApi) Delete(ctx context.Context) (*PlanDeleteResult, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.plan.delete", req)
@@ -3466,6 +3615,9 @@ func (a *PlanApi) Delete(ctx context.Context) (*PlanDeleteResult, error) {
return &result, nil
}
+// Read calls session.plan.read.
+//
+// RPC method: session.plan.read.
func (a *PlanApi) Read(ctx context.Context) (*PlanReadResult, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.plan.read", req)
@@ -3479,6 +3631,9 @@ func (a *PlanApi) Read(ctx context.Context) (*PlanReadResult, error) {
return &result, nil
}
+// Update calls session.plan.update.
+//
+// RPC method: session.plan.update.
func (a *PlanApi) Update(ctx context.Context, params *PlanUpdateRequest) (*PlanUpdateResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3498,6 +3653,9 @@ func (a *PlanApi) Update(ctx context.Context, params *PlanUpdateRequest) (*PlanU
// Experimental: PluginsApi contains experimental APIs that may change or be removed.
type PluginsApi sessionApi
+// List calls session.plugins.list.
+//
+// RPC method: session.plugins.list.
func (a *PluginsApi) List(ctx context.Context) (*PluginList, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.plugins.list", req)
@@ -3514,6 +3672,9 @@ func (a *PluginsApi) List(ctx context.Context) (*PluginList, error) {
// Experimental: RemoteApi contains experimental APIs that may change or be removed.
type RemoteApi sessionApi
+// Disable calls session.remote.disable.
+//
+// RPC method: session.remote.disable.
func (a *RemoteApi) Disable(ctx context.Context) (*RemoteDisableResult, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.remote.disable", req)
@@ -3527,6 +3688,9 @@ func (a *RemoteApi) Disable(ctx context.Context) (*RemoteDisableResult, error) {
return &result, nil
}
+// Enable calls session.remote.enable.
+//
+// RPC method: session.remote.enable.
func (a *RemoteApi) Enable(ctx context.Context, params *RemoteEnableRequest) (*RemoteEnableResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3547,6 +3711,9 @@ func (a *RemoteApi) Enable(ctx context.Context, params *RemoteEnableRequest) (*R
type ShellApi sessionApi
+// Exec calls session.shell.exec.
+//
+// RPC method: session.shell.exec.
func (a *ShellApi) Exec(ctx context.Context, params *ShellExecRequest) (*ShellExecResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3569,6 +3736,9 @@ func (a *ShellApi) Exec(ctx context.Context, params *ShellExecRequest) (*ShellEx
return &result, nil
}
+// Kill calls session.shell.kill.
+//
+// RPC method: session.shell.kill.
func (a *ShellApi) Kill(ctx context.Context, params *ShellKillRequest) (*ShellKillResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3591,6 +3761,9 @@ func (a *ShellApi) Kill(ctx context.Context, params *ShellKillRequest) (*ShellKi
// Experimental: SkillsApi contains experimental APIs that may change or be removed.
type SkillsApi sessionApi
+// Disable calls session.skills.disable.
+//
+// RPC method: session.skills.disable.
func (a *SkillsApi) Disable(ctx context.Context, params *SkillsDisableRequest) (*SkillsDisableResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3607,6 +3780,9 @@ func (a *SkillsApi) Disable(ctx context.Context, params *SkillsDisableRequest) (
return &result, nil
}
+// Enable calls session.skills.enable.
+//
+// RPC method: session.skills.enable.
func (a *SkillsApi) Enable(ctx context.Context, params *SkillsEnableRequest) (*SkillsEnableResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3623,6 +3799,9 @@ func (a *SkillsApi) Enable(ctx context.Context, params *SkillsEnableRequest) (*S
return &result, nil
}
+// List calls session.skills.list.
+//
+// RPC method: session.skills.list.
func (a *SkillsApi) List(ctx context.Context) (*SkillList, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.skills.list", req)
@@ -3636,6 +3815,9 @@ func (a *SkillsApi) List(ctx context.Context) (*SkillList, error) {
return &result, nil
}
+// Reload calls session.skills.reload.
+//
+// RPC method: session.skills.reload.
func (a *SkillsApi) Reload(ctx context.Context) (*SkillsLoadDiagnostics, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.skills.reload", req)
@@ -3652,6 +3834,9 @@ func (a *SkillsApi) Reload(ctx context.Context) (*SkillsLoadDiagnostics, error)
// Experimental: TasksApi contains experimental APIs that may change or be removed.
type TasksApi sessionApi
+// Cancel calls session.tasks.cancel.
+//
+// RPC method: session.tasks.cancel.
func (a *TasksApi) Cancel(ctx context.Context, params *TasksCancelRequest) (*TasksCancelResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3668,6 +3853,9 @@ func (a *TasksApi) Cancel(ctx context.Context, params *TasksCancelRequest) (*Tas
return &result, nil
}
+// List calls session.tasks.list.
+//
+// RPC method: session.tasks.list.
func (a *TasksApi) List(ctx context.Context) (*TaskList, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.tasks.list", req)
@@ -3681,6 +3869,9 @@ func (a *TasksApi) List(ctx context.Context) (*TaskList, error) {
return &result, nil
}
+// PromoteToBackground calls session.tasks.promoteToBackground.
+//
+// RPC method: session.tasks.promoteToBackground.
func (a *TasksApi) PromoteToBackground(ctx context.Context, params *TasksPromoteToBackgroundRequest) (*TasksPromoteToBackgroundResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3697,6 +3888,9 @@ func (a *TasksApi) PromoteToBackground(ctx context.Context, params *TasksPromote
return &result, nil
}
+// Remove calls session.tasks.remove.
+//
+// RPC method: session.tasks.remove.
func (a *TasksApi) Remove(ctx context.Context, params *TasksRemoveRequest) (*TasksRemoveResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3713,6 +3907,9 @@ func (a *TasksApi) Remove(ctx context.Context, params *TasksRemoveRequest) (*Tas
return &result, nil
}
+// SendMessage calls session.tasks.sendMessage.
+//
+// RPC method: session.tasks.sendMessage.
func (a *TasksApi) SendMessage(ctx context.Context, params *TasksSendMessageRequest) (*TasksSendMessageResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3733,6 +3930,9 @@ func (a *TasksApi) SendMessage(ctx context.Context, params *TasksSendMessageRequ
return &result, nil
}
+// StartAgent calls session.tasks.startAgent.
+//
+// RPC method: session.tasks.startAgent.
func (a *TasksApi) StartAgent(ctx context.Context, params *TasksStartAgentRequest) (*TasksStartAgentResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3759,6 +3959,9 @@ func (a *TasksApi) StartAgent(ctx context.Context, params *TasksStartAgentReques
type ToolsApi sessionApi
+// HandlePendingToolCall calls session.tools.handlePendingToolCall.
+//
+// RPC method: session.tools.handlePendingToolCall.
func (a *ToolsApi) HandlePendingToolCall(ctx context.Context, params *HandlePendingToolCallRequest) (*HandlePendingToolCallResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3783,6 +3986,11 @@ func (a *ToolsApi) HandlePendingToolCall(ctx context.Context, params *HandlePend
type UIApi sessionApi
+// Elicitation calls session.ui.elicitation.
+//
+// RPC method: session.ui.elicitation.
+//
+// Returns: The elicitation response (accept with form values, decline, or cancel)
func (a *UIApi) Elicitation(ctx context.Context, params *UIElicitationRequest) (*UIElicitationResponse, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3800,6 +4008,9 @@ func (a *UIApi) Elicitation(ctx context.Context, params *UIElicitationRequest) (
return &result, nil
}
+// HandlePendingElicitation calls session.ui.handlePendingElicitation.
+//
+// RPC method: session.ui.handlePendingElicitation.
func (a *UIApi) HandlePendingElicitation(ctx context.Context, params *UIHandlePendingElicitationRequest) (*UIElicitationResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3820,6 +4031,9 @@ func (a *UIApi) HandlePendingElicitation(ctx context.Context, params *UIHandlePe
// Experimental: UsageApi contains experimental APIs that may change or be removed.
type UsageApi sessionApi
+// GetMetrics calls session.usage.getMetrics.
+//
+// RPC method: session.usage.getMetrics.
func (a *UsageApi) GetMetrics(ctx context.Context) (*UsageGetMetricsResult, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.usage.getMetrics", req)
@@ -3835,6 +4049,9 @@ func (a *UsageApi) GetMetrics(ctx context.Context) (*UsageGetMetricsResult, erro
type WorkspacesApi sessionApi
+// CreateFile calls session.workspaces.createFile.
+//
+// RPC method: session.workspaces.createFile.
func (a *WorkspacesApi) CreateFile(ctx context.Context, params *WorkspacesCreateFileRequest) (*WorkspacesCreateFileResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3852,6 +4069,9 @@ func (a *WorkspacesApi) CreateFile(ctx context.Context, params *WorkspacesCreate
return &result, nil
}
+// GetWorkspace calls session.workspaces.getWorkspace.
+//
+// RPC method: session.workspaces.getWorkspace.
func (a *WorkspacesApi) GetWorkspace(ctx context.Context) (*WorkspacesGetWorkspaceResult, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.workspaces.getWorkspace", req)
@@ -3865,6 +4085,9 @@ func (a *WorkspacesApi) GetWorkspace(ctx context.Context) (*WorkspacesGetWorkspa
return &result, nil
}
+// ListFiles calls session.workspaces.listFiles.
+//
+// RPC method: session.workspaces.listFiles.
func (a *WorkspacesApi) ListFiles(ctx context.Context) (*WorkspacesListFilesResult, error) {
req := map[string]any{"sessionId": a.sessionID}
raw, err := a.client.Request("session.workspaces.listFiles", req)
@@ -3878,6 +4101,9 @@ func (a *WorkspacesApi) ListFiles(ctx context.Context) (*WorkspacesListFilesResu
return &result, nil
}
+// ReadFile calls session.workspaces.readFile.
+//
+// RPC method: session.workspaces.readFile.
func (a *WorkspacesApi) ReadFile(ctx context.Context, params *WorkspacesReadFileRequest) (*WorkspacesReadFileResult, error) {
req := map[string]any{"sessionId": a.sessionID}
if params != nil {
@@ -3923,6 +4149,9 @@ type SessionRpc struct {
Workspaces *WorkspacesApi
}
+// Log calls session.log.
+//
+// RPC method: session.log.
func (a *SessionRpc) Log(ctx context.Context, params *LogRequest) (*LogResult, error) {
req := map[string]any{"sessionId": a.common.sessionID}
if params != nil {
@@ -3948,6 +4177,9 @@ func (a *SessionRpc) Log(ctx context.Context, params *LogRequest) (*LogResult, e
return &result, nil
}
+// Suspend calls session.suspend.
+//
+// RPC method: session.suspend.
func (a *SessionRpc) Suspend(ctx context.Context) (*SuspendResult, error) {
req := map[string]any{"sessionId": a.common.sessionID}
raw, err := a.common.client.Request("session.suspend", req)
@@ -3990,15 +4222,55 @@ func NewSessionRpc(client *jsonrpc2.Client, sessionID string) *SessionRpc {
}
type SessionFsHandler interface {
+ // AppendFile handles sessionFs.appendFile.
+ //
+ // RPC method: sessionFs.appendFile.
+ //
+ // Returns: Describes a filesystem error.
AppendFile(request *SessionFsAppendFileRequest) (*SessionFsError, error)
+ // Exists handles sessionFs.exists.
+ //
+ // RPC method: sessionFs.exists.
Exists(request *SessionFsExistsRequest) (*SessionFsExistsResult, error)
+ // Mkdir handles sessionFs.mkdir.
+ //
+ // RPC method: sessionFs.mkdir.
+ //
+ // Returns: Describes a filesystem error.
Mkdir(request *SessionFsMkdirRequest) (*SessionFsError, error)
+ // Readdir handles sessionFs.readdir.
+ //
+ // RPC method: sessionFs.readdir.
Readdir(request *SessionFsReaddirRequest) (*SessionFsReaddirResult, error)
+ // ReaddirWithTypes handles sessionFs.readdirWithTypes.
+ //
+ // RPC method: sessionFs.readdirWithTypes.
ReaddirWithTypes(request *SessionFsReaddirWithTypesRequest) (*SessionFsReaddirWithTypesResult, error)
+ // ReadFile handles sessionFs.readFile.
+ //
+ // RPC method: sessionFs.readFile.
ReadFile(request *SessionFsReadFileRequest) (*SessionFsReadFileResult, error)
+ // Rename handles sessionFs.rename.
+ //
+ // RPC method: sessionFs.rename.
+ //
+ // Returns: Describes a filesystem error.
Rename(request *SessionFsRenameRequest) (*SessionFsError, error)
+ // Rm handles sessionFs.rm.
+ //
+ // RPC method: sessionFs.rm.
+ //
+ // Returns: Describes a filesystem error.
Rm(request *SessionFsRmRequest) (*SessionFsError, error)
+ // Stat handles sessionFs.stat.
+ //
+ // RPC method: sessionFs.stat.
Stat(request *SessionFsStatRequest) (*SessionFsStatResult, error)
+ // WriteFile handles sessionFs.writeFile.
+ //
+ // RPC method: sessionFs.writeFile.
+ //
+ // Returns: Describes a filesystem error.
WriteFile(request *SessionFsWriteFileRequest) (*SessionFsError, error)
}
diff --git a/nodejs/src/generated/rpc.ts b/nodejs/src/generated/rpc.ts
index 5189f620f..b6cded9c2 100644
--- a/nodejs/src/generated/rpc.ts
+++ b/nodejs/src/generated/rpc.ts
@@ -2803,52 +2803,97 @@ export interface WorkspacesReadFileResult {
/** Create typed server-scoped RPC methods (no session required). */
export function createServerRpc(connection: MessageConnection) {
return {
+ /**
+ * Calls `ping`.
+ */
ping: async (params: PingRequest): Promise =>
connection.sendRequest("ping", params),
models: {
+ /**
+ * Calls `models.list`.
+ */
list: async (params: ModelsListRequest): Promise =>
connection.sendRequest("models.list", params),
},
tools: {
+ /**
+ * Calls `tools.list`.
+ */
list: async (params: ToolsListRequest): Promise =>
connection.sendRequest("tools.list", params),
},
account: {
+ /**
+ * Calls `account.getQuota`.
+ */
getQuota: async (params: AccountGetQuotaRequest): Promise =>
connection.sendRequest("account.getQuota", params),
},
mcp: {
config: {
+ /**
+ * Calls `mcp.config.list`.
+ */
list: async (): Promise =>
connection.sendRequest("mcp.config.list", {}),
+ /**
+ * Calls `mcp.config.add`.
+ */
add: async (params: McpConfigAddRequest): Promise =>
connection.sendRequest("mcp.config.add", params),
+ /**
+ * Calls `mcp.config.update`.
+ */
update: async (params: McpConfigUpdateRequest): Promise =>
connection.sendRequest("mcp.config.update", params),
+ /**
+ * Calls `mcp.config.remove`.
+ */
remove: async (params: McpConfigRemoveRequest): Promise =>
connection.sendRequest("mcp.config.remove", params),
+ /**
+ * Calls `mcp.config.enable`.
+ */
enable: async (params: McpConfigEnableRequest): Promise =>
connection.sendRequest("mcp.config.enable", params),
+ /**
+ * Calls `mcp.config.disable`.
+ */
disable: async (params: McpConfigDisableRequest): Promise =>
connection.sendRequest("mcp.config.disable", params),
},
+ /**
+ * Calls `mcp.discover`.
+ */
discover: async (params: McpDiscoverRequest): Promise =>
connection.sendRequest("mcp.discover", params),
},
skills: {
config: {
+ /**
+ * Calls `skills.config.setDisabledSkills`.
+ */
setDisabledSkills: async (params: SkillsConfigSetDisabledSkillsRequest): Promise =>
connection.sendRequest("skills.config.setDisabledSkills", params),
},
+ /**
+ * Calls `skills.discover`.
+ */
discover: async (params: SkillsDiscoverRequest): Promise =>
connection.sendRequest("skills.discover", params),
},
sessionFs: {
+ /**
+ * Calls `sessionFs.setProvider`.
+ */
setProvider: async (params: SessionFsSetProviderRequest): Promise =>
connection.sendRequest("sessionFs.setProvider", params),
},
/** @experimental */
sessions: {
+ /**
+ * Calls `sessions.fork`.
+ */
fork: async (params: SessionsForkRequest): Promise =>
connection.sendRequest("sessions.fork", params),
},
@@ -2862,6 +2907,9 @@ export function createServerRpc(connection: MessageConnection) {
*/
export function createInternalServerRpc(connection: MessageConnection) {
return {
+ /**
+ * Calls `connect`.
+ */
connect: async (params: ConnectRequest): Promise =>
connection.sendRequest("connect", params),
};
@@ -2870,180 +2918,364 @@ export function createInternalServerRpc(connection: MessageConnection) {
/** Create typed session-scoped RPC methods. */
export function createSessionRpc(connection: MessageConnection, sessionId: string) {
return {
+ /**
+ * Calls `session.suspend`.
+ */
suspend: async (): Promise =>
connection.sendRequest("session.suspend", { sessionId }),
auth: {
+ /**
+ * Calls `session.auth.getStatus`.
+ */
getStatus: async (): Promise =>
connection.sendRequest("session.auth.getStatus", { sessionId }),
},
model: {
+ /**
+ * Calls `session.model.getCurrent`.
+ */
getCurrent: async (): Promise =>
connection.sendRequest("session.model.getCurrent", { sessionId }),
+ /**
+ * Calls `session.model.switchTo`.
+ */
switchTo: async (params: ModelSwitchToRequest): Promise =>
connection.sendRequest("session.model.switchTo", { sessionId, ...params }),
},
mode: {
+ /**
+ * Calls `session.mode.get`.
+ *
+ * @returns The agent mode. Valid values: "interactive", "plan", "autopilot".
+ */
get: async (): Promise =>
connection.sendRequest("session.mode.get", { sessionId }),
+ /**
+ * Calls `session.mode.set`.
+ */
set: async (params: ModeSetRequest): Promise =>
connection.sendRequest("session.mode.set", { sessionId, ...params }),
},
name: {
+ /**
+ * Calls `session.name.get`.
+ */
get: async (): Promise =>
connection.sendRequest("session.name.get", { sessionId }),
+ /**
+ * Calls `session.name.set`.
+ */
set: async (params: NameSetRequest): Promise =>
connection.sendRequest("session.name.set", { sessionId, ...params }),
},
plan: {
+ /**
+ * Calls `session.plan.read`.
+ */
read: async (): Promise =>
connection.sendRequest("session.plan.read", { sessionId }),
+ /**
+ * Calls `session.plan.update`.
+ */
update: async (params: PlanUpdateRequest): Promise =>
connection.sendRequest("session.plan.update", { sessionId, ...params }),
+ /**
+ * Calls `session.plan.delete`.
+ */
delete: async (): Promise =>
connection.sendRequest("session.plan.delete", { sessionId }),
},
workspaces: {
+ /**
+ * Calls `session.workspaces.getWorkspace`.
+ */
getWorkspace: async (): Promise =>
connection.sendRequest("session.workspaces.getWorkspace", { sessionId }),
+ /**
+ * Calls `session.workspaces.listFiles`.
+ */
listFiles: async (): Promise =>
connection.sendRequest("session.workspaces.listFiles", { sessionId }),
+ /**
+ * Calls `session.workspaces.readFile`.
+ */
readFile: async (params: WorkspacesReadFileRequest): Promise =>
connection.sendRequest("session.workspaces.readFile", { sessionId, ...params }),
+ /**
+ * Calls `session.workspaces.createFile`.
+ */
createFile: async (params: WorkspacesCreateFileRequest): Promise =>
connection.sendRequest("session.workspaces.createFile", { sessionId, ...params }),
},
instructions: {
+ /**
+ * Calls `session.instructions.getSources`.
+ */
getSources: async (): Promise =>
connection.sendRequest("session.instructions.getSources", { sessionId }),
},
/** @experimental */
fleet: {
+ /**
+ * Calls `session.fleet.start`.
+ */
start: async (params: FleetStartRequest): Promise =>
connection.sendRequest("session.fleet.start", { sessionId, ...params }),
},
/** @experimental */
agent: {
+ /**
+ * Calls `session.agent.list`.
+ */
list: async (): Promise =>
connection.sendRequest("session.agent.list", { sessionId }),
+ /**
+ * Calls `session.agent.getCurrent`.
+ */
getCurrent: async (): Promise =>
connection.sendRequest("session.agent.getCurrent", { sessionId }),
+ /**
+ * Calls `session.agent.select`.
+ */
select: async (params: AgentSelectRequest): Promise =>
connection.sendRequest("session.agent.select", { sessionId, ...params }),
+ /**
+ * Calls `session.agent.deselect`.
+ */
deselect: async (): Promise =>
connection.sendRequest("session.agent.deselect", { sessionId }),
+ /**
+ * Calls `session.agent.reload`.
+ */
reload: async (): Promise =>
connection.sendRequest("session.agent.reload", { sessionId }),
},
/** @experimental */
tasks: {
+ /**
+ * Calls `session.tasks.startAgent`.
+ */
startAgent: async (params: TasksStartAgentRequest): Promise =>
connection.sendRequest("session.tasks.startAgent", { sessionId, ...params }),
+ /**
+ * Calls `session.tasks.list`.
+ */
list: async (): Promise =>
connection.sendRequest("session.tasks.list", { sessionId }),
+ /**
+ * Calls `session.tasks.promoteToBackground`.
+ */
promoteToBackground: async (params: TasksPromoteToBackgroundRequest): Promise =>
connection.sendRequest("session.tasks.promoteToBackground", { sessionId, ...params }),
+ /**
+ * Calls `session.tasks.cancel`.
+ */
cancel: async (params: TasksCancelRequest): Promise =>
connection.sendRequest("session.tasks.cancel", { sessionId, ...params }),
+ /**
+ * Calls `session.tasks.remove`.
+ */
remove: async (params: TasksRemoveRequest): Promise =>
connection.sendRequest("session.tasks.remove", { sessionId, ...params }),
+ /**
+ * Calls `session.tasks.sendMessage`.
+ */
sendMessage: async (params: TasksSendMessageRequest): Promise =>
connection.sendRequest("session.tasks.sendMessage", { sessionId, ...params }),
},
/** @experimental */
skills: {
+ /**
+ * Calls `session.skills.list`.
+ */
list: async (): Promise =>
connection.sendRequest("session.skills.list", { sessionId }),
+ /**
+ * Calls `session.skills.enable`.
+ */
enable: async (params: SkillsEnableRequest): Promise =>
connection.sendRequest("session.skills.enable", { sessionId, ...params }),
+ /**
+ * Calls `session.skills.disable`.
+ */
disable: async (params: SkillsDisableRequest): Promise =>
connection.sendRequest("session.skills.disable", { sessionId, ...params }),
+ /**
+ * Calls `session.skills.reload`.
+ */
reload: async (): Promise =>
connection.sendRequest("session.skills.reload", { sessionId }),
},
/** @experimental */
mcp: {
+ /**
+ * Calls `session.mcp.list`.
+ */
list: async (): Promise =>
connection.sendRequest("session.mcp.list", { sessionId }),
+ /**
+ * Calls `session.mcp.enable`.
+ */
enable: async (params: McpEnableRequest): Promise =>
connection.sendRequest("session.mcp.enable", { sessionId, ...params }),
+ /**
+ * Calls `session.mcp.disable`.
+ */
disable: async (params: McpDisableRequest): Promise =>
connection.sendRequest("session.mcp.disable", { sessionId, ...params }),
+ /**
+ * Calls `session.mcp.reload`.
+ */
reload: async (): Promise =>
connection.sendRequest("session.mcp.reload", { sessionId }),
/** @experimental */
oauth: {
+ /**
+ * Calls `session.mcp.oauth.login`.
+ */
login: async (params: McpOauthLoginRequest): Promise =>
connection.sendRequest("session.mcp.oauth.login", { sessionId, ...params }),
},
},
/** @experimental */
plugins: {
+ /**
+ * Calls `session.plugins.list`.
+ */
list: async (): Promise =>
connection.sendRequest("session.plugins.list", { sessionId }),
},
/** @experimental */
extensions: {
+ /**
+ * Calls `session.extensions.list`.
+ */
list: async (): Promise =>
connection.sendRequest("session.extensions.list", { sessionId }),
+ /**
+ * Calls `session.extensions.enable`.
+ */
enable: async (params: ExtensionsEnableRequest): Promise =>
connection.sendRequest("session.extensions.enable", { sessionId, ...params }),
+ /**
+ * Calls `session.extensions.disable`.
+ */
disable: async (params: ExtensionsDisableRequest): Promise =>
connection.sendRequest("session.extensions.disable", { sessionId, ...params }),
+ /**
+ * Calls `session.extensions.reload`.
+ */
reload: async (): Promise =>
connection.sendRequest("session.extensions.reload", { sessionId }),
},
tools: {
+ /**
+ * Calls `session.tools.handlePendingToolCall`.
+ */
handlePendingToolCall: async (params: HandlePendingToolCallRequest): Promise =>
connection.sendRequest("session.tools.handlePendingToolCall", { sessionId, ...params }),
},
commands: {
+ /**
+ * Calls `session.commands.list`.
+ */
list: async (params?: CommandsListRequest): Promise =>
connection.sendRequest("session.commands.list", { sessionId, ...params }),
+ /**
+ * Calls `session.commands.invoke`.
+ */
invoke: async (params: CommandsInvokeRequest): Promise =>
connection.sendRequest("session.commands.invoke", { sessionId, ...params }),
+ /**
+ * Calls `session.commands.handlePendingCommand`.
+ */
handlePendingCommand: async (params: CommandsHandlePendingCommandRequest): Promise =>
connection.sendRequest("session.commands.handlePendingCommand", { sessionId, ...params }),
+ /**
+ * Calls `session.commands.respondToQueuedCommand`.
+ */
respondToQueuedCommand: async (params: CommandsRespondToQueuedCommandRequest): Promise =>
connection.sendRequest("session.commands.respondToQueuedCommand", { sessionId, ...params }),
},
ui: {
+ /**
+ * Calls `session.ui.elicitation`.
+ *
+ * @returns The elicitation response (accept with form values, decline, or cancel)
+ */
elicitation: async (params: UIElicitationRequest): Promise =>
connection.sendRequest("session.ui.elicitation", { sessionId, ...params }),
+ /**
+ * Calls `session.ui.handlePendingElicitation`.
+ */
handlePendingElicitation: async (params: UIHandlePendingElicitationRequest): Promise =>
connection.sendRequest("session.ui.handlePendingElicitation", { sessionId, ...params }),
},
permissions: {
+ /**
+ * Calls `session.permissions.handlePendingPermissionRequest`.
+ */
handlePendingPermissionRequest: async (params: PermissionDecisionRequest): Promise =>
connection.sendRequest("session.permissions.handlePendingPermissionRequest", { sessionId, ...params }),
+ /**
+ * Calls `session.permissions.setApproveAll`.
+ */
setApproveAll: async (params: PermissionsSetApproveAllRequest): Promise =>
connection.sendRequest("session.permissions.setApproveAll", { sessionId, ...params }),
+ /**
+ * Calls `session.permissions.resetSessionApprovals`.
+ */
resetSessionApprovals: async (): Promise =>
connection.sendRequest("session.permissions.resetSessionApprovals", { sessionId }),
},
+ /**
+ * Calls `session.log`.
+ */
log: async (params: LogRequest): Promise =>
connection.sendRequest("session.log", { sessionId, ...params }),
shell: {
+ /**
+ * Calls `session.shell.exec`.
+ */
exec: async (params: ShellExecRequest): Promise =>
connection.sendRequest("session.shell.exec", { sessionId, ...params }),
+ /**
+ * Calls `session.shell.kill`.
+ */
kill: async (params: ShellKillRequest): Promise =>
connection.sendRequest("session.shell.kill", { sessionId, ...params }),
},
/** @experimental */
history: {
+ /**
+ * Calls `session.history.compact`.
+ */
compact: async (): Promise =>
connection.sendRequest("session.history.compact", { sessionId }),
+ /**
+ * Calls `session.history.truncate`.
+ */
truncate: async (params: HistoryTruncateRequest): Promise =>
connection.sendRequest("session.history.truncate", { sessionId, ...params }),
},
/** @experimental */
usage: {
+ /**
+ * Calls `session.usage.getMetrics`.
+ */
getMetrics: async (): Promise =>
connection.sendRequest("session.usage.getMetrics", { sessionId }),
},
/** @experimental */
remote: {
+ /**
+ * Calls `session.remote.enable`.
+ */
enable: async (params: RemoteEnableRequest): Promise =>
connection.sendRequest("session.remote.enable", { sessionId, ...params }),
+ /**
+ * Calls `session.remote.disable`.
+ */
disable: async (): Promise =>
connection.sendRequest("session.remote.disable", { sessionId }),
},
@@ -3052,15 +3284,55 @@ export function createSessionRpc(connection: MessageConnection, sessionId: strin
/** Handler for `sessionFs` client session API methods. */
export interface SessionFsHandler {
+ /**
+ * Handles `sessionFs.readFile`.
+ */
readFile(params: SessionFsReadFileRequest): Promise;
+ /**
+ * Handles `sessionFs.writeFile`.
+ *
+ * @returns Describes a filesystem error.
+ */
writeFile(params: SessionFsWriteFileRequest): Promise;
+ /**
+ * Handles `sessionFs.appendFile`.
+ *
+ * @returns Describes a filesystem error.
+ */
appendFile(params: SessionFsAppendFileRequest): Promise;
+ /**
+ * Handles `sessionFs.exists`.
+ */
exists(params: SessionFsExistsRequest): Promise;
+ /**
+ * Handles `sessionFs.stat`.
+ */
stat(params: SessionFsStatRequest): Promise;
+ /**
+ * Handles `sessionFs.mkdir`.
+ *
+ * @returns Describes a filesystem error.
+ */
mkdir(params: SessionFsMkdirRequest): Promise;
+ /**
+ * Handles `sessionFs.readdir`.
+ */
readdir(params: SessionFsReaddirRequest): Promise;
+ /**
+ * Handles `sessionFs.readdirWithTypes`.
+ */
readdirWithTypes(params: SessionFsReaddirWithTypesRequest): Promise;
+ /**
+ * Handles `sessionFs.rm`.
+ *
+ * @returns Describes a filesystem error.
+ */
rm(params: SessionFsRmRequest): Promise;
+ /**
+ * Handles `sessionFs.rename`.
+ *
+ * @returns Describes a filesystem error.
+ */
rename(params: SessionFsRenameRequest): Promise;
}
diff --git a/python/copilot/generated/rpc.py b/python/copilot/generated/rpc.py
index b75a30ca5..ee5583ab6 100644
--- a/python/copilot/generated/rpc.py
+++ b/python/copilot/generated/rpc.py
@@ -7095,6 +7095,7 @@ def __init__(self, client: "JsonRpcClient"):
self._client = client
async def list(self, params: ModelsListRequest, *, timeout: float | None = None) -> ModelList:
+ "Calls models.list."
params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
return ModelList.from_dict(_patch_model_capabilities(await self._client.request("models.list", params_dict, **_timeout_kwargs(timeout))))
@@ -7104,6 +7105,7 @@ def __init__(self, client: "JsonRpcClient"):
self._client = client
async def list(self, params: ToolsListRequest, *, timeout: float | None = None) -> ToolList:
+ "Calls tools.list."
params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
return ToolList.from_dict(await self._client.request("tools.list", params_dict, **_timeout_kwargs(timeout)))
@@ -7113,6 +7115,7 @@ def __init__(self, client: "JsonRpcClient"):
self._client = client
async def get_quota(self, params: AccountGetQuotaRequest, *, timeout: float | None = None) -> AccountGetQuotaResult:
+ "Calls account.getQuota."
params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
return AccountGetQuotaResult.from_dict(await self._client.request("account.getQuota", params_dict, **_timeout_kwargs(timeout)))
@@ -7122,25 +7125,31 @@ def __init__(self, client: "JsonRpcClient"):
self._client = client
async def list(self, *, timeout: float | None = None) -> MCPConfigList:
+ "Calls mcp.config.list."
return MCPConfigList.from_dict(await self._client.request("mcp.config.list", {}, **_timeout_kwargs(timeout)))
async def add(self, params: MCPConfigAddRequest, *, timeout: float | None = None) -> None:
+ "Calls mcp.config.add."
params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
await self._client.request("mcp.config.add", params_dict, **_timeout_kwargs(timeout))
async def update(self, params: MCPConfigUpdateRequest, *, timeout: float | None = None) -> None:
+ "Calls mcp.config.update."
params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
await self._client.request("mcp.config.update", params_dict, **_timeout_kwargs(timeout))
async def remove(self, params: MCPConfigRemoveRequest, *, timeout: float | None = None) -> None:
+ "Calls mcp.config.remove."
params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
await self._client.request("mcp.config.remove", params_dict, **_timeout_kwargs(timeout))
async def enable(self, params: MCPConfigEnableRequest, *, timeout: float | None = None) -> None:
+ "Calls mcp.config.enable."
params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
await self._client.request("mcp.config.enable", params_dict, **_timeout_kwargs(timeout))
async def disable(self, params: MCPConfigDisableRequest, *, timeout: float | None = None) -> None:
+ "Calls mcp.config.disable."
params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
await self._client.request("mcp.config.disable", params_dict, **_timeout_kwargs(timeout))
@@ -7151,6 +7160,7 @@ def __init__(self, client: "JsonRpcClient"):
self.config = ServerMcpConfigApi(client)
async def discover(self, params: MCPDiscoverRequest, *, timeout: float | None = None) -> MCPDiscoverResult:
+ "Calls mcp.discover."
params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
return MCPDiscoverResult.from_dict(await self._client.request("mcp.discover", params_dict, **_timeout_kwargs(timeout)))
@@ -7160,6 +7170,7 @@ def __init__(self, client: "JsonRpcClient"):
self._client = client
async def set_disabled_skills(self, params: SkillsConfigSetDisabledSkillsRequest, *, timeout: float | None = None) -> None:
+ "Calls skills.config.setDisabledSkills."
params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
await self._client.request("skills.config.setDisabledSkills", params_dict, **_timeout_kwargs(timeout))
@@ -7170,6 +7181,7 @@ def __init__(self, client: "JsonRpcClient"):
self.config = ServerSkillsConfigApi(client)
async def discover(self, params: SkillsDiscoverRequest, *, timeout: float | None = None) -> ServerSkillList:
+ "Calls skills.discover."
params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
return ServerSkillList.from_dict(await self._client.request("skills.discover", params_dict, **_timeout_kwargs(timeout)))
@@ -7179,6 +7191,7 @@ def __init__(self, client: "JsonRpcClient"):
self._client = client
async def set_provider(self, params: SessionFSSetProviderRequest, *, timeout: float | None = None) -> SessionFSSetProviderResult:
+ "Calls sessionFs.setProvider."
params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
return SessionFSSetProviderResult.from_dict(await self._client.request("sessionFs.setProvider", params_dict, **_timeout_kwargs(timeout)))
@@ -7189,6 +7202,7 @@ def __init__(self, client: "JsonRpcClient"):
self._client = client
async def fork(self, params: SessionsForkRequest, *, timeout: float | None = None) -> SessionsForkResult:
+ "Calls sessions.fork."
params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
return SessionsForkResult.from_dict(await self._client.request("sessions.fork", params_dict, **_timeout_kwargs(timeout)))
@@ -7206,6 +7220,7 @@ def __init__(self, client: "JsonRpcClient"):
self.sessions = ServerSessionsApi(client)
async def ping(self, params: PingRequest, *, timeout: float | None = None) -> PingResult:
+ "Calls ping."
params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
return PingResult.from_dict(await self._client.request("ping", params_dict, **_timeout_kwargs(timeout)))
@@ -7216,7 +7231,7 @@ def __init__(self, client: "JsonRpcClient"):
self._client = client
async def connect(self, params: ConnectRequest, *, timeout: float | None = None) -> ConnectResult:
- """:meta private: Internal SDK API; not part of the public surface."""
+ "Calls connect.\n\n:meta private:\n\nInternal SDK API; not part of the public surface."
params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
return ConnectResult.from_dict(await self._client.request("connect", params_dict, **_timeout_kwargs(timeout)))
@@ -7227,6 +7242,7 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def get_status(self, *, timeout: float | None = None) -> SessionAuthStatus:
+ "Calls session.auth.getStatus."
return SessionAuthStatus.from_dict(await self._client.request("session.auth.getStatus", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
@@ -7236,9 +7252,11 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def get_current(self, *, timeout: float | None = None) -> CurrentModel:
+ "Calls session.model.getCurrent."
return CurrentModel.from_dict(await self._client.request("session.model.getCurrent", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
async def switch_to(self, params: ModelSwitchToRequest, *, timeout: float | None = None) -> ModelSwitchToResult:
+ "Calls session.model.switchTo."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return ModelSwitchToResult.from_dict(await self._client.request("session.model.switchTo", params_dict, **_timeout_kwargs(timeout)))
@@ -7250,9 +7268,11 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def get(self, *, timeout: float | None = None) -> Mode:
+ "Calls session.mode.get.\n\nReturns:\n The agent mode. Valid values: \"interactive\", \"plan\", \"autopilot\"."
return Mode(await self._client.request("session.mode.get", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
async def set(self, params: ModeSetRequest, *, timeout: float | None = None) -> None:
+ "Calls session.mode.set."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
await self._client.request("session.mode.set", params_dict, **_timeout_kwargs(timeout))
@@ -7264,9 +7284,11 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def get(self, *, timeout: float | None = None) -> NameGetResult:
+ "Calls session.name.get."
return NameGetResult.from_dict(await self._client.request("session.name.get", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
async def set(self, params: NameSetRequest, *, timeout: float | None = None) -> None:
+ "Calls session.name.set."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
await self._client.request("session.name.set", params_dict, **_timeout_kwargs(timeout))
@@ -7278,14 +7300,17 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def read(self, *, timeout: float | None = None) -> PlanReadResult:
+ "Calls session.plan.read."
return PlanReadResult.from_dict(await self._client.request("session.plan.read", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
async def update(self, params: PlanUpdateRequest, *, timeout: float | None = None) -> None:
+ "Calls session.plan.update."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
await self._client.request("session.plan.update", params_dict, **_timeout_kwargs(timeout))
async def delete(self, *, timeout: float | None = None) -> None:
+ "Calls session.plan.delete."
await self._client.request("session.plan.delete", {"sessionId": self._session_id}, **_timeout_kwargs(timeout))
@@ -7295,17 +7320,21 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def get_workspace(self, *, timeout: float | None = None) -> WorkspacesGetWorkspaceResult:
+ "Calls session.workspaces.getWorkspace."
return WorkspacesGetWorkspaceResult.from_dict(await self._client.request("session.workspaces.getWorkspace", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
async def list_files(self, *, timeout: float | None = None) -> WorkspacesListFilesResult:
+ "Calls session.workspaces.listFiles."
return WorkspacesListFilesResult.from_dict(await self._client.request("session.workspaces.listFiles", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
async def read_file(self, params: WorkspacesReadFileRequest, *, timeout: float | None = None) -> WorkspacesReadFileResult:
+ "Calls session.workspaces.readFile."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return WorkspacesReadFileResult.from_dict(await self._client.request("session.workspaces.readFile", params_dict, **_timeout_kwargs(timeout)))
async def create_file(self, params: WorkspacesCreateFileRequest, *, timeout: float | None = None) -> None:
+ "Calls session.workspaces.createFile."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
await self._client.request("session.workspaces.createFile", params_dict, **_timeout_kwargs(timeout))
@@ -7317,6 +7346,7 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def get_sources(self, *, timeout: float | None = None) -> InstructionsGetSourcesResult:
+ "Calls session.instructions.getSources."
return InstructionsGetSourcesResult.from_dict(await self._client.request("session.instructions.getSources", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
@@ -7327,6 +7357,7 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def start(self, params: FleetStartRequest, *, timeout: float | None = None) -> FleetStartResult:
+ "Calls session.fleet.start."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return FleetStartResult.from_dict(await self._client.request("session.fleet.start", params_dict, **_timeout_kwargs(timeout)))
@@ -7339,20 +7370,25 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def list(self, *, timeout: float | None = None) -> AgentList:
+ "Calls session.agent.list."
return AgentList.from_dict(await self._client.request("session.agent.list", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
async def get_current(self, *, timeout: float | None = None) -> AgentGetCurrentResult:
+ "Calls session.agent.getCurrent."
return AgentGetCurrentResult.from_dict(await self._client.request("session.agent.getCurrent", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
async def select(self, params: AgentSelectRequest, *, timeout: float | None = None) -> AgentSelectResult:
+ "Calls session.agent.select."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return AgentSelectResult.from_dict(await self._client.request("session.agent.select", params_dict, **_timeout_kwargs(timeout)))
async def deselect(self, *, timeout: float | None = None) -> None:
+ "Calls session.agent.deselect."
await self._client.request("session.agent.deselect", {"sessionId": self._session_id}, **_timeout_kwargs(timeout))
async def reload(self, *, timeout: float | None = None) -> AgentReloadResult:
+ "Calls session.agent.reload."
return AgentReloadResult.from_dict(await self._client.request("session.agent.reload", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
@@ -7363,29 +7399,35 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def start_agent(self, params: TasksStartAgentRequest, *, timeout: float | None = None) -> TasksStartAgentResult:
+ "Calls session.tasks.startAgent."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return TasksStartAgentResult.from_dict(await self._client.request("session.tasks.startAgent", params_dict, **_timeout_kwargs(timeout)))
async def list(self, *, timeout: float | None = None) -> TaskList:
+ "Calls session.tasks.list."
return TaskList.from_dict(await self._client.request("session.tasks.list", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
async def promote_to_background(self, params: TasksPromoteToBackgroundRequest, *, timeout: float | None = None) -> TasksPromoteToBackgroundResult:
+ "Calls session.tasks.promoteToBackground."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return TasksPromoteToBackgroundResult.from_dict(await self._client.request("session.tasks.promoteToBackground", params_dict, **_timeout_kwargs(timeout)))
async def cancel(self, params: TasksCancelRequest, *, timeout: float | None = None) -> TasksCancelResult:
+ "Calls session.tasks.cancel."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return TasksCancelResult.from_dict(await self._client.request("session.tasks.cancel", params_dict, **_timeout_kwargs(timeout)))
async def remove(self, params: TasksRemoveRequest, *, timeout: float | None = None) -> TasksRemoveResult:
+ "Calls session.tasks.remove."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return TasksRemoveResult.from_dict(await self._client.request("session.tasks.remove", params_dict, **_timeout_kwargs(timeout)))
async def send_message(self, params: TasksSendMessageRequest, *, timeout: float | None = None) -> TasksSendMessageResult:
+ "Calls session.tasks.sendMessage."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return TasksSendMessageResult.from_dict(await self._client.request("session.tasks.sendMessage", params_dict, **_timeout_kwargs(timeout)))
@@ -7398,19 +7440,23 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def list(self, *, timeout: float | None = None) -> SkillList:
+ "Calls session.skills.list."
return SkillList.from_dict(await self._client.request("session.skills.list", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
async def enable(self, params: SkillsEnableRequest, *, timeout: float | None = None) -> None:
+ "Calls session.skills.enable."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
await self._client.request("session.skills.enable", params_dict, **_timeout_kwargs(timeout))
async def disable(self, params: SkillsDisableRequest, *, timeout: float | None = None) -> None:
+ "Calls session.skills.disable."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
await self._client.request("session.skills.disable", params_dict, **_timeout_kwargs(timeout))
async def reload(self, *, timeout: float | None = None) -> SkillsLoadDiagnostics:
+ "Calls session.skills.reload."
return SkillsLoadDiagnostics.from_dict(await self._client.request("session.skills.reload", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
@@ -7421,6 +7467,7 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def login(self, params: MCPOauthLoginRequest, *, timeout: float | None = None) -> MCPOauthLoginResult:
+ "Calls session.mcp.oauth.login."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return MCPOauthLoginResult.from_dict(await self._client.request("session.mcp.oauth.login", params_dict, **_timeout_kwargs(timeout)))
@@ -7434,19 +7481,23 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self.oauth = McpOauthApi(client, session_id)
async def list(self, *, timeout: float | None = None) -> MCPServerList:
+ "Calls session.mcp.list."
return MCPServerList.from_dict(await self._client.request("session.mcp.list", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
async def enable(self, params: MCPEnableRequest, *, timeout: float | None = None) -> None:
+ "Calls session.mcp.enable."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
await self._client.request("session.mcp.enable", params_dict, **_timeout_kwargs(timeout))
async def disable(self, params: MCPDisableRequest, *, timeout: float | None = None) -> None:
+ "Calls session.mcp.disable."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
await self._client.request("session.mcp.disable", params_dict, **_timeout_kwargs(timeout))
async def reload(self, *, timeout: float | None = None) -> None:
+ "Calls session.mcp.reload."
await self._client.request("session.mcp.reload", {"sessionId": self._session_id}, **_timeout_kwargs(timeout))
@@ -7457,6 +7508,7 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def list(self, *, timeout: float | None = None) -> PluginList:
+ "Calls session.plugins.list."
return PluginList.from_dict(await self._client.request("session.plugins.list", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
@@ -7467,19 +7519,23 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def list(self, *, timeout: float | None = None) -> ExtensionList:
+ "Calls session.extensions.list."
return ExtensionList.from_dict(await self._client.request("session.extensions.list", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
async def enable(self, params: ExtensionsEnableRequest, *, timeout: float | None = None) -> None:
+ "Calls session.extensions.enable."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
await self._client.request("session.extensions.enable", params_dict, **_timeout_kwargs(timeout))
async def disable(self, params: ExtensionsDisableRequest, *, timeout: float | None = None) -> None:
+ "Calls session.extensions.disable."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
await self._client.request("session.extensions.disable", params_dict, **_timeout_kwargs(timeout))
async def reload(self, *, timeout: float | None = None) -> None:
+ "Calls session.extensions.reload."
await self._client.request("session.extensions.reload", {"sessionId": self._session_id}, **_timeout_kwargs(timeout))
@@ -7489,6 +7545,7 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def handle_pending_tool_call(self, params: HandlePendingToolCallRequest, *, timeout: float | None = None) -> HandlePendingToolCallResult:
+ "Calls session.tools.handlePendingToolCall."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return HandlePendingToolCallResult.from_dict(await self._client.request("session.tools.handlePendingToolCall", params_dict, **_timeout_kwargs(timeout)))
@@ -7500,21 +7557,25 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def list(self, params: CommandsListRequest | None = None, *, timeout: float | None = None) -> CommandList:
+ "Calls session.commands.list."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None} if params is not None else {}
params_dict["sessionId"] = self._session_id
return CommandList.from_dict(await self._client.request("session.commands.list", params_dict, **_timeout_kwargs(timeout)))
async def invoke(self, params: CommandsInvokeRequest, *, timeout: float | None = None) -> SlashCommandInvocationResult:
+ "Calls session.commands.invoke."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return SlashCommandInvocationResult.from_dict(await self._client.request("session.commands.invoke", params_dict, **_timeout_kwargs(timeout)))
async def handle_pending_command(self, params: CommandsHandlePendingCommandRequest, *, timeout: float | None = None) -> CommandsHandlePendingCommandResult:
+ "Calls session.commands.handlePendingCommand."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return CommandsHandlePendingCommandResult.from_dict(await self._client.request("session.commands.handlePendingCommand", params_dict, **_timeout_kwargs(timeout)))
async def respond_to_queued_command(self, params: CommandsRespondToQueuedCommandRequest, *, timeout: float | None = None) -> CommandsRespondToQueuedCommandResult:
+ "Calls session.commands.respondToQueuedCommand."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return CommandsRespondToQueuedCommandResult.from_dict(await self._client.request("session.commands.respondToQueuedCommand", params_dict, **_timeout_kwargs(timeout)))
@@ -7526,11 +7587,13 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def elicitation(self, params: UIElicitationRequest, *, timeout: float | None = None) -> UIElicitationResponse:
+ "Calls session.ui.elicitation.\n\nReturns:\n The elicitation response (accept with form values, decline, or cancel)"
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return UIElicitationResponse.from_dict(await self._client.request("session.ui.elicitation", params_dict, **_timeout_kwargs(timeout)))
async def handle_pending_elicitation(self, params: UIHandlePendingElicitationRequest, *, timeout: float | None = None) -> UIElicitationResult:
+ "Calls session.ui.handlePendingElicitation."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return UIElicitationResult.from_dict(await self._client.request("session.ui.handlePendingElicitation", params_dict, **_timeout_kwargs(timeout)))
@@ -7542,16 +7605,19 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def handle_pending_permission_request(self, params: PermissionDecisionRequest, *, timeout: float | None = None) -> PermissionRequestResult:
+ "Calls session.permissions.handlePendingPermissionRequest."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return PermissionRequestResult.from_dict(await self._client.request("session.permissions.handlePendingPermissionRequest", params_dict, **_timeout_kwargs(timeout)))
async def set_approve_all(self, params: PermissionsSetApproveAllRequest, *, timeout: float | None = None) -> PermissionsSetApproveAllResult:
+ "Calls session.permissions.setApproveAll."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return PermissionsSetApproveAllResult.from_dict(await self._client.request("session.permissions.setApproveAll", params_dict, **_timeout_kwargs(timeout)))
async def reset_session_approvals(self, *, timeout: float | None = None) -> PermissionsResetSessionApprovalsResult:
+ "Calls session.permissions.resetSessionApprovals."
return PermissionsResetSessionApprovalsResult.from_dict(await self._client.request("session.permissions.resetSessionApprovals", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
@@ -7561,11 +7627,13 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def exec(self, params: ShellExecRequest, *, timeout: float | None = None) -> ShellExecResult:
+ "Calls session.shell.exec."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return ShellExecResult.from_dict(await self._client.request("session.shell.exec", params_dict, **_timeout_kwargs(timeout)))
async def kill(self, params: ShellKillRequest, *, timeout: float | None = None) -> ShellKillResult:
+ "Calls session.shell.kill."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return ShellKillResult.from_dict(await self._client.request("session.shell.kill", params_dict, **_timeout_kwargs(timeout)))
@@ -7578,9 +7646,11 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def compact(self, *, timeout: float | None = None) -> HistoryCompactResult:
+ "Calls session.history.compact."
return HistoryCompactResult.from_dict(await self._client.request("session.history.compact", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
async def truncate(self, params: HistoryTruncateRequest, *, timeout: float | None = None) -> HistoryTruncateResult:
+ "Calls session.history.truncate."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return HistoryTruncateResult.from_dict(await self._client.request("session.history.truncate", params_dict, **_timeout_kwargs(timeout)))
@@ -7593,6 +7663,7 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def get_metrics(self, *, timeout: float | None = None) -> UsageGetMetricsResult:
+ "Calls session.usage.getMetrics."
return UsageGetMetricsResult.from_dict(await self._client.request("session.usage.getMetrics", {"sessionId": self._session_id}, **_timeout_kwargs(timeout)))
@@ -7603,11 +7674,13 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self._session_id = session_id
async def enable(self, params: RemoteEnableRequest, *, timeout: float | None = None) -> RemoteEnableResult:
+ "Calls session.remote.enable."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return RemoteEnableResult.from_dict(await self._client.request("session.remote.enable", params_dict, **_timeout_kwargs(timeout)))
async def disable(self, *, timeout: float | None = None) -> None:
+ "Calls session.remote.disable."
await self._client.request("session.remote.disable", {"sessionId": self._session_id}, **_timeout_kwargs(timeout))
@@ -7640,9 +7713,11 @@ def __init__(self, client: "JsonRpcClient", session_id: str):
self.remote = RemoteApi(client, session_id)
async def suspend(self, *, timeout: float | None = None) -> None:
+ "Calls session.suspend."
await self._client.request("session.suspend", {"sessionId": self._session_id}, **_timeout_kwargs(timeout))
async def log(self, params: LogRequest, *, timeout: float | None = None) -> LogResult:
+ "Calls session.log."
params_dict: dict[str, Any] = {k: v for k, v in params.to_dict().items() if v is not None}
params_dict["sessionId"] = self._session_id
return LogResult.from_dict(await self._client.request("session.log", params_dict, **_timeout_kwargs(timeout)))
@@ -7650,24 +7725,34 @@ async def log(self, params: LogRequest, *, timeout: float | None = None) -> LogR
class SessionFsHandler(Protocol):
async def read_file(self, params: SessionFSReadFileRequest) -> SessionFSReadFileResult:
+ "Calls sessionFs.readFile."
pass
async def write_file(self, params: SessionFSWriteFileRequest) -> SessionFSError | None:
+ "Calls sessionFs.writeFile.\n\nReturns:\n Describes a filesystem error."
pass
async def append_file(self, params: SessionFSAppendFileRequest) -> SessionFSError | None:
+ "Calls sessionFs.appendFile.\n\nReturns:\n Describes a filesystem error."
pass
async def exists(self, params: SessionFSExistsRequest) -> SessionFSExistsResult:
+ "Calls sessionFs.exists."
pass
async def stat(self, params: SessionFSStatRequest) -> SessionFSStatResult:
+ "Calls sessionFs.stat."
pass
async def mkdir(self, params: SessionFSMkdirRequest) -> SessionFSError | None:
+ "Calls sessionFs.mkdir.\n\nReturns:\n Describes a filesystem error."
pass
async def readdir(self, params: SessionFSReaddirRequest) -> SessionFSReaddirResult:
+ "Calls sessionFs.readdir."
pass
async def readdir_with_types(self, params: SessionFSReaddirWithTypesRequest) -> SessionFSReaddirWithTypesResult:
+ "Calls sessionFs.readdirWithTypes."
pass
async def rm(self, params: SessionFSRmRequest) -> SessionFSError | None:
+ "Calls sessionFs.rm.\n\nReturns:\n Describes a filesystem error."
pass
async def rename(self, params: SessionFSRenameRequest) -> SessionFSError | None:
+ "Calls sessionFs.rename.\n\nReturns:\n Describes a filesystem error."
pass
@dataclass
diff --git a/rust/README.md b/rust/README.md
index 8ae3851e1..cf9e4b839 100644
--- a/rust/README.md
+++ b/rust/README.md
@@ -157,7 +157,7 @@ response structs.
```rust,ignore
// Common generated RPCs.
let files = session.rpc().workspaces().list_files().await?.files;
-let models = client.rpc().models().list(Default::default()).await?.models;
+let models = client.rpc().models().list().await?.models;
// Methods with no helper — full schema-typed access.
let agents = session.rpc().agent().list().await?.agents;
diff --git a/rust/src/generated/rpc.rs b/rust/src/generated/rpc.rs
index b07736676..b55f9d501 100644
--- a/rust/src/generated/rpc.rs
+++ b/rust/src/generated/rpc.rs
@@ -68,6 +68,8 @@ impl<'a> ClientRpc<'a> {
}
}
+ /// Calls `ping`.
+ ///
/// Wire method: `ping`.
pub async fn ping(&self, params: PingRequest) -> Result {
let wire_params = serde_json::to_value(params)?;
@@ -78,6 +80,8 @@ impl<'a> ClientRpc<'a> {
Ok(serde_json::from_value(_value)?)
}
+ /// Calls `connect`.
+ ///
/// Wire method: `connect`.
pub async fn connect(&self, params: ConnectRequest) -> Result {
let wire_params = serde_json::to_value(params)?;
@@ -96,8 +100,22 @@ pub struct ClientRpcAccount<'a> {
}
impl<'a> ClientRpcAccount<'a> {
+ /// Calls `account.getQuota`.
+ ///
+ /// Wire method: `account.getQuota`.
+ pub async fn get_quota(&self) -> Result {
+ let wire_params = serde_json::json!({});
+ let _value = self
+ .client
+ .call(rpc_methods::ACCOUNT_GETQUOTA, Some(wire_params))
+ .await?;
+ Ok(serde_json::from_value(_value)?)
+ }
+
+ /// Calls `account.getQuota`.
+ ///
/// Wire method: `account.getQuota`.
- pub async fn get_quota(
+ pub async fn get_quota_with_params(
&self,
params: AccountGetQuotaRequest,
) -> Result {
@@ -124,6 +142,8 @@ impl<'a> ClientRpcMcp<'a> {
}
}
+ /// Calls `mcp.discover`.
+ ///
/// Wire method: `mcp.discover`.
pub async fn discover(&self, params: McpDiscoverRequest) -> Result {
let wire_params = serde_json::to_value(params)?;
@@ -142,6 +162,8 @@ pub struct ClientRpcMcpConfig<'a> {
}
impl<'a> ClientRpcMcpConfig<'a> {
+ /// Calls `mcp.config.list`.
+ ///
/// Wire method: `mcp.config.list`.
pub async fn list(&self) -> Result {
let wire_params = serde_json::json!({});
@@ -152,6 +174,8 @@ impl<'a> ClientRpcMcpConfig<'a> {
Ok(serde_json::from_value(_value)?)
}
+ /// Calls `mcp.config.add`.
+ ///
/// Wire method: `mcp.config.add`.
pub async fn add(&self, params: McpConfigAddRequest) -> Result<(), Error> {
let wire_params = serde_json::to_value(params)?;
@@ -162,6 +186,8 @@ impl<'a> ClientRpcMcpConfig<'a> {
Ok(())
}
+ /// Calls `mcp.config.update`.
+ ///
/// Wire method: `mcp.config.update`.
pub async fn update(&self, params: McpConfigUpdateRequest) -> Result<(), Error> {
let wire_params = serde_json::to_value(params)?;
@@ -172,6 +198,8 @@ impl<'a> ClientRpcMcpConfig<'a> {
Ok(())
}
+ /// Calls `mcp.config.remove`.
+ ///
/// Wire method: `mcp.config.remove`.
pub async fn remove(&self, params: McpConfigRemoveRequest) -> Result<(), Error> {
let wire_params = serde_json::to_value(params)?;
@@ -182,6 +210,8 @@ impl<'a> ClientRpcMcpConfig<'a> {
Ok(())
}
+ /// Calls `mcp.config.enable`.
+ ///
/// Wire method: `mcp.config.enable`.
pub async fn enable(&self, params: McpConfigEnableRequest) -> Result<(), Error> {
let wire_params = serde_json::to_value(params)?;
@@ -192,6 +222,8 @@ impl<'a> ClientRpcMcpConfig<'a> {
Ok(())
}
+ /// Calls `mcp.config.disable`.
+ ///
/// Wire method: `mcp.config.disable`.
pub async fn disable(&self, params: McpConfigDisableRequest) -> Result<(), Error> {
let wire_params = serde_json::to_value(params)?;
@@ -210,8 +242,22 @@ pub struct ClientRpcModels<'a> {
}
impl<'a> ClientRpcModels<'a> {
+ /// Calls `models.list`.
+ ///
/// Wire method: `models.list`.
- pub async fn list(&self, params: ModelsListRequest) -> Result {
+ pub async fn list(&self) -> Result {
+ let wire_params = serde_json::json!({});
+ let _value = self
+ .client
+ .call(rpc_methods::MODELS_LIST, Some(wire_params))
+ .await?;
+ Ok(serde_json::from_value(_value)?)
+ }
+
+ /// Calls `models.list`.
+ ///
+ /// Wire method: `models.list`.
+ pub async fn list_with_params(&self, params: ModelsListRequest) -> Result