getEndpoint() {
return caller.invoke("session.provider.getEndpoint", java.util.Map.of("sessionId", this.sessionId), SessionProviderGetEndpointResult.class);
}
+ /**
+ * BYOK providers and/or models to add to the session's registry at runtime. Both fields are optional; provide providers, models, or both.
+ *
+ * Note: the {@code sessionId} field in the params record is overridden
+ * by the session-scoped wrapper; any value provided is ignored.
+ *
+ * @apiNote This method is experimental and may change in a future version.
+ * @since 1.0.0
+ */
+ @CopilotExperimental
+ public CompletableFuture add(SessionProviderAddParams params) {
+ com.fasterxml.jackson.databind.node.ObjectNode _p = MAPPER.valueToTree(params);
+ _p.put("sessionId", this.sessionId);
+ return caller.invoke("session.provider.add", _p, SessionProviderAddResult.class);
+ }
+
}
diff --git a/java/src/generated/java/com/github/copilot/generated/rpc/Skill.java b/java/src/generated/java/com/github/copilot/generated/rpc/Skill.java
index d64f01515..5b1cea9b7 100644
--- a/java/src/generated/java/com/github/copilot/generated/rpc/Skill.java
+++ b/java/src/generated/java/com/github/copilot/generated/rpc/Skill.java
@@ -34,6 +34,8 @@ public record Skill(
/** Absolute path to the skill file */
@JsonProperty("path") String path,
/** Name of the plugin that provides the skill, when source is 'plugin' */
- @JsonProperty("pluginName") String pluginName
+ @JsonProperty("pluginName") String pluginName,
+ /** Optional freeform hint describing the skill's expected arguments, from the `argument-hint` frontmatter field */
+ @JsonProperty("argumentHint") String argumentHint
) {
}
diff --git a/java/src/test/java/com/github/copilot/RpcWrappersTest.java b/java/src/test/java/com/github/copilot/RpcWrappersTest.java
index feb78d896..9a3559d66 100644
--- a/java/src/test/java/com/github/copilot/RpcWrappersTest.java
+++ b/java/src/test/java/com/github/copilot/RpcWrappersTest.java
@@ -85,6 +85,28 @@ void serverRpc_models_list_invokes_correct_rpc_method() {
assertEquals("models.list", stub.calls.get(0).method());
}
+ @Test
+ void serverRpc_account_getAllUsers_returns_typed_list() throws Exception {
+ var stub = new StubCaller();
+ stub.nextResult = new ObjectMapper().readTree("""
+ [
+ {
+ "authInfo": { "kind": "oauth" },
+ "token": "token-1"
+ }
+ ]
+ """);
+
+ var server = new ServerRpc(stub);
+ var users = server.account.getAllUsers().get();
+
+ assertEquals(1, stub.calls.size());
+ assertEquals("account.getAllUsers", stub.calls.get(0).method());
+ assertEquals(1, users.size());
+ assertInstanceOf(Map.class, users.get(0).authInfo());
+ assertEquals("token-1", users.get(0).token());
+ }
+
@Test
void serverRpc_ping_passes_params_directly() {
var stub = new StubCaller();
diff --git a/java/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java b/java/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java
index dbfc15036..b5e83f17d 100644
--- a/java/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java
+++ b/java/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java
@@ -696,7 +696,8 @@ void sessionShellKillResult_record() {
@Test
void sessionSkillsListResult_nested() {
- var item = new Skill("deploy", "Deploy the app", SkillSource.PROJECT, true, true, "/skills/deploy.md", null);
+ var item = new Skill("deploy", "Deploy the app", SkillSource.PROJECT, true, true, "/skills/deploy.md", null,
+ null);
var result = new SessionSkillsListResult(List.of(item));
assertEquals(1, result.skills().size());
assertEquals("deploy", result.skills().get(0).name());
diff --git a/nodejs/package-lock.json b/nodejs/package-lock.json
index 08cd933c4..6727b3d33 100644
--- a/nodejs/package-lock.json
+++ b/nodejs/package-lock.json
@@ -9,7 +9,7 @@
"version": "0.0.0-dev",
"license": "MIT",
"dependencies": {
- "@github/copilot": "^1.0.64-1",
+ "@github/copilot": "^1.0.64-3",
"vscode-jsonrpc": "^8.2.1",
"zod": "^4.3.6"
},
@@ -697,9 +697,9 @@
}
},
"node_modules/@github/copilot": {
- "version": "1.0.64-1",
- "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.64-1.tgz",
- "integrity": "sha512-lojV4Cb7oT4VJnYPEKBRH8KI3W43Q4Lh0Pc+V6sej+xjPJkoqwm68sNKn73/p3wXPBSTVTzPeCm9WhIisgf1Jw==",
+ "version": "1.0.64-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.64-3.tgz",
+ "integrity": "sha512-Q9nBMYEHX1bJLXzzJocQx2nZvORJ0E9gvK6ly/FCtmtA7ad96BWZvf4EHzkCNDsn56aI3zNaUSfKHUKcmIAzSg==",
"license": "SEE LICENSE IN LICENSE.md",
"dependencies": {
"detect-libc": "^2.1.2"
@@ -708,20 +708,20 @@
"copilot": "npm-loader.js"
},
"optionalDependencies": {
- "@github/copilot-darwin-arm64": "1.0.64-1",
- "@github/copilot-darwin-x64": "1.0.64-1",
- "@github/copilot-linux-arm64": "1.0.64-1",
- "@github/copilot-linux-x64": "1.0.64-1",
- "@github/copilot-linuxmusl-arm64": "1.0.64-1",
- "@github/copilot-linuxmusl-x64": "1.0.64-1",
- "@github/copilot-win32-arm64": "1.0.64-1",
- "@github/copilot-win32-x64": "1.0.64-1"
+ "@github/copilot-darwin-arm64": "1.0.64-3",
+ "@github/copilot-darwin-x64": "1.0.64-3",
+ "@github/copilot-linux-arm64": "1.0.64-3",
+ "@github/copilot-linux-x64": "1.0.64-3",
+ "@github/copilot-linuxmusl-arm64": "1.0.64-3",
+ "@github/copilot-linuxmusl-x64": "1.0.64-3",
+ "@github/copilot-win32-arm64": "1.0.64-3",
+ "@github/copilot-win32-x64": "1.0.64-3"
}
},
"node_modules/@github/copilot-darwin-arm64": {
- "version": "1.0.64-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.64-1.tgz",
- "integrity": "sha512-MQHZT9LhmCiq+ogO1E8cPCWrurZ6x+r9lPJfYUSnOyMO+EHbREpiJwOOChxtLHgL2/tKJSZdId2pg3tDgUlcsw==",
+ "version": "1.0.64-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.64-3.tgz",
+ "integrity": "sha512-wlV6mRoAd/wG2V08TG+BOJ0nyOjroya24FSyA5A49z7PnUUuQXYRpa/GljvI5j3PM8aUl0DyBkXuB/DcFU818g==",
"cpu": [
"arm64"
],
@@ -735,9 +735,9 @@
}
},
"node_modules/@github/copilot-darwin-x64": {
- "version": "1.0.64-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.64-1.tgz",
- "integrity": "sha512-kOQY7CvI7He0eO3ObQAHePWdkNLWAOegCSzUqUmdcpa1SNVqbZ3GBMsQ7uAZQip2cQxnGZ7pS1v6tKQ0HJdkYw==",
+ "version": "1.0.64-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.64-3.tgz",
+ "integrity": "sha512-mk48PIESL2keeemX7tLRmWRDxKwl0q3cFI1ORD2QcrieNK7pSqI3eVbfoB7MqoUUI27yzIkl67xqgl8Qq28IUQ==",
"cpu": [
"x64"
],
@@ -751,9 +751,9 @@
}
},
"node_modules/@github/copilot-linux-arm64": {
- "version": "1.0.64-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.64-1.tgz",
- "integrity": "sha512-hIfuO7Q+pWs0SKfIRYqT+CjMaupudnhp4RMS6XoJ5s/e33rvpj2tkTkXYlHJo1PMDI823vvbqgpEdr+KeewMwg==",
+ "version": "1.0.64-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.64-3.tgz",
+ "integrity": "sha512-rCgtK3/rofQW5StSbeU0TwDUlOl2bvS2HGKyapVxow1Nvz3Q/TDB+eFRQc5ocBdv5tNSor+Caw2JGkRx5v508w==",
"cpu": [
"arm64"
],
@@ -767,9 +767,9 @@
}
},
"node_modules/@github/copilot-linux-x64": {
- "version": "1.0.64-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.64-1.tgz",
- "integrity": "sha512-VHaE62pha0rDDvuNN3bd97gf0EZ+EJebstM1ejHsMYoPT1IOUkYEXlNfGGHY+GfUGYxAiy/+Uew4xw5mJyy/Sw==",
+ "version": "1.0.64-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.64-3.tgz",
+ "integrity": "sha512-FAiBMw1h07mURSBLi3ztj5yzbP+uTbo9mhxOym1Xysut5LDpO2kYUzTYk2DlIyLGZhmH/HDOZE+b6U7lOUQy0g==",
"cpu": [
"x64"
],
@@ -783,9 +783,9 @@
}
},
"node_modules/@github/copilot-linuxmusl-arm64": {
- "version": "1.0.64-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-arm64/-/copilot-linuxmusl-arm64-1.0.64-1.tgz",
- "integrity": "sha512-L/YrZPotRujAP0QERq+DlkR1SLr7abbTSz/56JqKKOqEdjKZPdQW1bUlhL/w1CZg1gXlTNUsNVyKz/fUfrEBgw==",
+ "version": "1.0.64-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-arm64/-/copilot-linuxmusl-arm64-1.0.64-3.tgz",
+ "integrity": "sha512-vn8P6grPf0y2mNskkdVbAz0i46b1sP9uSXv7z6kgycjprl0CdIYPDf3WEkG60vpyopfQna+iCqCLMWRnNyCk3g==",
"cpu": [
"arm64"
],
@@ -799,9 +799,9 @@
}
},
"node_modules/@github/copilot-linuxmusl-x64": {
- "version": "1.0.64-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-x64/-/copilot-linuxmusl-x64-1.0.64-1.tgz",
- "integrity": "sha512-AGMjXqR128oyjiJhoI6Gd7JP5ddWkib+P4YH/JoHm05iNn23ZYl4tSc0XihHzeyMI1ix7Aacn8UINYB7lGOGOA==",
+ "version": "1.0.64-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-x64/-/copilot-linuxmusl-x64-1.0.64-3.tgz",
+ "integrity": "sha512-atdHimNd6nzRRwHybXUY6/84bYzXeKbDOeYN/N/DsX23+AQOPSu5BD8MD8166I/5kNHui0XOmeTSydVNBUwcJw==",
"cpu": [
"x64"
],
@@ -815,9 +815,9 @@
}
},
"node_modules/@github/copilot-win32-arm64": {
- "version": "1.0.64-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.64-1.tgz",
- "integrity": "sha512-vvv+gnemi9WKaxF41zz7Xmq6a493n8Yjps5UFaOY6a3WR222kKXZXfOpeRvIYsDgnIPHGBHIj1TBOmnHQT4V4w==",
+ "version": "1.0.64-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.64-3.tgz",
+ "integrity": "sha512-jUTS9meoHEXQR8nMDOjwC0baqV273lYtLxY46W7TiOFszhsqhbhWxQMkNQBfT3GEfPp+40igzMPq3reaUTuvag==",
"cpu": [
"arm64"
],
@@ -831,9 +831,9 @@
}
},
"node_modules/@github/copilot-win32-x64": {
- "version": "1.0.64-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.64-1.tgz",
- "integrity": "sha512-mcHvD0fjGDuqr/YXzy8mKuDmah1F+qjPujxoFuGmabmTJZ33cSIJ3nq7RRvxZNIdp8YJ57NkbcW30WvIcOeJ3w==",
+ "version": "1.0.64-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.64-3.tgz",
+ "integrity": "sha512-gHUhS500Q91hjtH9fqKDblaIs0mO09G4ifpZ1woDPXbkdKe/W29uwB7g2fn0+KczNRyPxFSWlqjnOon4Fe8svA==",
"cpu": [
"x64"
],
diff --git a/nodejs/package.json b/nodejs/package.json
index 140a50fd4..d9663006c 100644
--- a/nodejs/package.json
+++ b/nodejs/package.json
@@ -56,7 +56,7 @@
"author": "GitHub",
"license": "MIT",
"dependencies": {
- "@github/copilot": "^1.0.64-1",
+ "@github/copilot": "^1.0.64-3",
"vscode-jsonrpc": "^8.2.1",
"zod": "^4.3.6"
},
diff --git a/nodejs/samples/package-lock.json b/nodejs/samples/package-lock.json
index 1589ceb67..ddcf5a8e2 100644
--- a/nodejs/samples/package-lock.json
+++ b/nodejs/samples/package-lock.json
@@ -18,7 +18,7 @@
"version": "0.0.0-dev",
"license": "MIT",
"dependencies": {
- "@github/copilot": "^1.0.64-1",
+ "@github/copilot": "^1.0.64-3",
"vscode-jsonrpc": "^8.2.1",
"zod": "^4.3.6"
},
diff --git a/nodejs/src/client.ts b/nodejs/src/client.ts
index 473479ac1..ade6c54fd 100644
--- a/nodejs/src/client.ts
+++ b/nodejs/src/client.ts
@@ -727,7 +727,8 @@ export class CopilotClient {
const errors: Error[] = [];
// Disconnect all active sessions with retry logic
- for (const session of this.sessions.values()) {
+ const activeSessions = [...this.sessions.values()];
+ for (const session of activeSessions) {
const sessionId = session.sessionId;
let lastError: Error | null = null;
@@ -756,6 +757,9 @@ export class CopilotClient {
);
}
}
+ for (const session of activeSessions) {
+ session._markDisconnected();
+ }
this.sessions.clear();
// Ask SDK-owned runtimes to flush and clean up before we tear down
@@ -916,6 +920,9 @@ export class CopilotClient {
this.forceStopping = true;
// Clear sessions immediately without trying to destroy them
+ for (const session of this.sessions.values()) {
+ session._markDisconnected();
+ }
this.sessions.clear();
// Force close connection
diff --git a/nodejs/src/generated/rpc.ts b/nodejs/src/generated/rpc.ts
index 6303f9db2..b894228f5 100644
--- a/nodejs/src/generated/rpc.ts
+++ b/nodejs/src/generated/rpc.ts
@@ -7,6 +7,20 @@ import type { MessageConnection } from "vscode-jsonrpc/node.js";
import type { AbortReason, Attachment, ContextTier, EmbeddedBlobResourceContents, EmbeddedTextResourceContents, McpServerSource, McpServerStatus, PermissionPromptRequest, PermissionRule, ReasoningSummary, SessionEvent, SessionMode, ShutdownType, SkillSource, UserToolSessionApproval } from "./session-events.js";
+/**
+ * Initial authentication info for the session.
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "AuthInfo".
+ */
+export type AuthInfo =
+ | HMACAuthInfo
+ | EnvAuthInfo
+ | TokenAuthInfo
+ | CopilotApiTokenAuthInfo
+ | UserAuthInfo
+ | GhCliAuthInfo
+ | ApiKeyAuthInfo;
/**
* Which tier this directory belongs to
*
@@ -173,21 +187,6 @@ export type AgentRegistrySpawnValidationErrorField =
| "model"
/** The permissionMode parameter */
| "permissionMode";
-/**
- * Initial authentication info for the session.
- *
- * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AuthInfo".
- */
-/** @experimental */
-export type AuthInfo =
- | HMACAuthInfo
- | EnvAuthInfo
- | TokenAuthInfo
- | CopilotApiTokenAuthInfo
- | UserAuthInfo
- | GhCliAuthInfo
- | ApiKeyAuthInfo;
/**
* Authentication type
*
@@ -1796,6 +1795,13 @@ export type WorkspacesWorkspaceDetailsHostType =
| "github"
/** Workspace repository is hosted on Azure DevOps. */
| "ado";
+/**
+ * List of all authenticated users
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "AccountGetAllUsersResult".
+ */
+export type AccountGetAllUsersResult = AccountAllUsers[];
/**
* Parameters for aborting the current turn
@@ -1824,827 +1830,893 @@ export interface AbortResult {
*/
error?: string;
}
-
-export interface 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.
- */
- gitHubToken?: string;
-}
/**
- * Quota usage snapshots for the resolved user, keyed by quota type.
+ * Schema for the `AccountAllUsers` type.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AccountGetQuotaResult".
+ * via the `definition` "AccountAllUsers".
*/
-export interface AccountGetQuotaResult {
+export interface AccountAllUsers {
+ authInfo: AuthInfo;
/**
- * Quota snapshots keyed by type (e.g., chat, completions, premium_interactions)
+ * Associated token, if available
*/
- quotaSnapshots: {
- [k: string]: AccountQuotaSnapshot | undefined;
- };
+ token?: string;
}
/**
- * Schema for the `AccountQuotaSnapshot` type.
+ * Schema for the `HMACAuthInfo` type.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AccountQuotaSnapshot".
+ * via the `definition` "HMACAuthInfo".
*/
-export interface AccountQuotaSnapshot {
- /**
- * Whether the user has an unlimited usage entitlement
- */
- isUnlimitedEntitlement: boolean;
- /**
- * Number of requests included in the entitlement, or -1 for unlimited entitlements
- */
- entitlementRequests: number;
- /**
- * Number of requests used so far this period
- */
- usedRequests: number;
- /**
- * Whether usage is still permitted after quota exhaustion
- */
- usageAllowedWithExhaustedQuota: boolean;
- /**
- * Percentage of entitlement remaining
- */
- remainingPercentage: number;
+export interface HMACAuthInfo {
/**
- * Number of additional usage requests made this period
+ * HMAC-based authentication used by GitHub-internal services.
*/
- overage: number;
+ type: "hmac";
/**
- * Whether additional usage is allowed when quota is exhausted
+ * Authentication host. HMAC auth always targets the public GitHub host.
*/
- overageAllowedWithExhaustedQuota: boolean;
+ host: "https://github.com";
/**
- * Date when the quota resets (ISO 8601 string)
+ * HMAC secret used to sign requests.
*/
- resetDate?: string;
+ hmac: string;
+ copilotUser?: CopilotUserResponse;
}
/**
- * Schema for the `AgentDiscoveryPath` type.
+ * Snapshot of the authenticated user's Copilot subscription info, if known. Mirrors the GitHub API `/copilot_internal/v2/token` user response shape — the runtime trusts this verbatim and does not re-fetch when set.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AgentDiscoveryPath".
+ * via the `definition` "CopilotUserResponse".
*/
-/** @experimental */
-export interface AgentDiscoveryPath {
- /**
- * Absolute path of the search/create directory (may not exist on disk yet)
- */
- path: string;
- scope: AgentDiscoveryPathScope;
- /**
- * Whether this is the canonical directory to create a new agent in its tier. At most one entry per tier is preferred.
- */
- preferredForCreation: boolean;
- /**
- * The input project path this directory was derived from (only for project scope)
- */
- projectPath?: string;
+export interface CopilotUserResponse {
+ login?: string;
+ access_type_sku?: string;
+ analytics_tracking_id?: string;
+ assigned_date?:
+ | (
+ | {
+ [k: string]: unknown | undefined;
+ }
+ | string
+ )
+ | null;
+ can_signup_for_limited?: boolean;
+ chat_enabled?: boolean;
+ copilot_plan?: string;
+ copilotignore_enabled?: boolean;
+ endpoints?: CopilotUserResponseEndpoints;
+ organization_login_list?: string[];
+ organization_list?:
+ | (
+ | {
+ [k: string]: unknown | undefined;
+ }
+ | ({
+ login?:
+ | (
+ | {
+ [k: string]: unknown | undefined;
+ }
+ | string
+ )
+ | null;
+ name?:
+ | (
+ | {
+ [k: string]: unknown | undefined;
+ }
+ | string
+ )
+ | null;
+ } | null)[]
+ )
+ | null;
+ codex_agent_enabled?: boolean;
+ is_mcp_enabled?:
+ | (
+ | {
+ [k: string]: unknown | undefined;
+ }
+ | boolean
+ )
+ | null;
+ quota_reset_date?: string;
+ quota_snapshots?: CopilotUserResponseQuotaSnapshots;
+ restricted_telemetry?: boolean;
+ is_staff?: boolean;
+ token_based_billing?: boolean;
+ can_upgrade_plan?: boolean;
+ quota_reset_date_utc?: string;
+ limited_user_quotas?: {
+ [k: string]: number | undefined;
+ };
+ limited_user_reset_date?: string;
+ monthly_quotas?: {
+ [k: string]: number | undefined;
+ };
+ cloud_session_storage_enabled?: boolean;
+ cli_remote_control_enabled?: boolean;
}
/**
- * Canonical locations where custom agents can be created so the runtime will recognize them.
+ * Schema for the `CopilotUserResponseEndpoints` type.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AgentDiscoveryPathList".
+ * via the `definition` "CopilotUserResponseEndpoints".
*/
-/** @experimental */
-export interface AgentDiscoveryPathList {
- /**
- * Canonical agent create/discovery directories, in priority order
- */
- paths: AgentDiscoveryPath[];
+export interface CopilotUserResponseEndpoints {
+ api?: string;
+ "origin-tracker"?: string;
+ proxy?: string;
+ telemetry?: string;
}
/**
- * The currently selected custom agent, or null when using the default agent.
+ * Schema for the `CopilotUserResponseQuotaSnapshots` type.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AgentGetCurrentResult".
+ * via the `definition` "CopilotUserResponseQuotaSnapshots".
*/
-/** @experimental */
-export interface AgentGetCurrentResult {
- /**
- * Currently selected custom agent, or null if using the default agent
- */
- agent?: AgentInfo | null;
+export interface CopilotUserResponseQuotaSnapshots {
+ chat?: CopilotUserResponseQuotaSnapshotsChat;
+ completions?: CopilotUserResponseQuotaSnapshotsCompletions;
+ premium_interactions?: CopilotUserResponseQuotaSnapshotsPremiumInteractions;
+ [k: string]:
+ | ({
+ entitlement?: number;
+ overage_count?: number;
+ overage_permitted?: boolean;
+ percent_remaining?: number;
+ quota_id?: string;
+ quota_remaining?: number;
+ remaining?: number;
+ unlimited?: boolean;
+ timestamp_utc?: string;
+ has_quota?: boolean;
+ quota_reset_at?: number;
+ token_based_billing?: boolean;
+ } | null)
+ | undefined;
}
/**
- * Schema for the `AgentInfo` type.
+ * Schema for the `CopilotUserResponseQuotaSnapshotsChat` type.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AgentInfo".
+ * via the `definition` "CopilotUserResponseQuotaSnapshotsChat".
*/
-/** @experimental */
-export interface AgentInfo {
- /**
- * Unique identifier of the custom agent
- */
- name: string;
- /**
- * Human-readable display name
- */
- displayName: string;
- /**
- * Description of the agent's purpose
- */
- description: string;
- /**
- * Absolute local file path of the agent definition. Only set for file-based agents loaded from disk; remote agents do not have a path.
- */
- path?: string;
- /**
- * Stable identifier for selection. For most agents this is the same as `name`; for plugin/builtin agents it may differ. Always populated; defaults to `name` when no distinct id was assigned.
- */
- id: string;
- source?: AgentInfoSource;
- /**
- * Whether the agent can be selected directly by the user. Agents marked `false` are subagent-only.
- */
- userInvocable?: boolean;
- /**
- * Allowed tool names for this agent. Empty array means none; omitted means inherit defaults.
- */
- tools?: string[];
- /**
- * Preferred model id for this agent. When omitted, inherits the outer agent's model.
- */
- model?: string;
- /**
- * MCP server configurations attached to this agent, keyed by server name. Server config shape mirrors the MCP `mcpServers` schema.
- *
- * @experimental
- */
- mcpServers?: {
- [k: string]: unknown | undefined;
- };
- /**
- * Skill names preloaded into this agent's context. Omitted means none.
- */
- skills?: string[];
+export interface CopilotUserResponseQuotaSnapshotsChat {
+ entitlement?: number;
+ overage_count?: number;
+ overage_permitted?: boolean;
+ percent_remaining?: number;
+ quota_id?: string;
+ quota_remaining?: number;
+ remaining?: number;
+ unlimited?: boolean;
+ timestamp_utc?: string;
+ has_quota?: boolean;
+ quota_reset_at?: number;
+ token_based_billing?: boolean;
}
/**
- * Custom agents available to the session.
+ * Schema for the `CopilotUserResponseQuotaSnapshotsCompletions` type.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AgentList".
+ * via the `definition` "CopilotUserResponseQuotaSnapshotsCompletions".
*/
-/** @experimental */
-export interface AgentList {
- /**
- * Available custom agents
- */
- agents: AgentInfo[];
+export interface CopilotUserResponseQuotaSnapshotsCompletions {
+ entitlement?: number;
+ overage_count?: number;
+ overage_permitted?: boolean;
+ percent_remaining?: number;
+ quota_id?: string;
+ quota_remaining?: number;
+ remaining?: number;
+ unlimited?: boolean;
+ timestamp_utc?: string;
+ has_quota?: boolean;
+ quota_reset_at?: number;
+ token_based_billing?: boolean;
}
/**
- * Full registry entry for the spawned child. Lets the controller call `handleLiveTargetSelected(entry)` directly without re-reading the registry (avoids a TOCTOU window).
+ * Schema for the `CopilotUserResponseQuotaSnapshotsPremiumInteractions` type.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AgentRegistryLiveTargetEntry".
+ * via the `definition` "CopilotUserResponseQuotaSnapshotsPremiumInteractions".
*/
-/** @experimental */
-export interface AgentRegistryLiveTargetEntry {
- /**
- * Registry entry schema version (1 = ui-server, 2 = managed-server)
- */
- schemaVersion: number;
- kind: AgentRegistryLiveTargetEntryKind;
+export interface CopilotUserResponseQuotaSnapshotsPremiumInteractions {
+ entitlement?: number;
+ overage_count?: number;
+ overage_permitted?: boolean;
+ percent_remaining?: number;
+ quota_id?: string;
+ quota_remaining?: number;
+ remaining?: number;
+ unlimited?: boolean;
+ timestamp_utc?: string;
+ has_quota?: boolean;
+ quota_reset_at?: number;
+ token_based_billing?: boolean;
+}
+/**
+ * Schema for the `EnvAuthInfo` type.
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "EnvAuthInfo".
+ */
+export interface EnvAuthInfo {
/**
- * Operating-system pid of the process owning this entry
+ * Personal access token (PAT) or server-to-server token sourced from an environment variable.
*/
- pid: number;
+ type: "env";
/**
- * Bind host for the entry's JSON-RPC server
+ * Authentication host (e.g. https://github.com or a GHES host).
*/
host: string;
/**
- * TCP port the entry's JSON-RPC server is listening on
+ * User login associated with the token. Undefined for server-to-server tokens (those starting with `ghs_`).
*/
- port: number;
+ login?: string;
/**
- * Connection token (null when the target is unauthenticated)
- *
- * @internal
+ * The token value itself. Treat as a secret.
*/
- token?: string | null;
+ token: string;
/**
- * Session ID of the foreground session for this entry
+ * Name of the environment variable the token was sourced from.
*/
- sessionId?: string;
+ envVar: string;
+ copilotUser?: CopilotUserResponse;
+}
+/**
+ * Schema for the `TokenAuthInfo` type.
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "TokenAuthInfo".
+ */
+export interface TokenAuthInfo {
/**
- * Friendly session name (when set)
+ * SDK-side token authentication; the host configured the token directly via the SDK.
*/
- sessionName?: string;
+ type: "token";
/**
- * Working directory of the session (when known)
+ * Authentication host.
*/
- cwd?: string;
+ host: string;
/**
- * Git branch of the session (when known)
+ * The token value itself. Treat as a secret.
*/
- branch?: string;
+ token: string;
+ copilotUser?: CopilotUserResponse;
+}
+/**
+ * Schema for the `CopilotApiTokenAuthInfo` type.
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "CopilotApiTokenAuthInfo".
+ */
+export interface CopilotApiTokenAuthInfo {
/**
- * Model identifier currently selected for the session
+ * Direct Copilot API authentication via the `GITHUB_COPILOT_API_TOKEN` + `COPILOT_API_URL` environment-variable pair. The token itself is read from the environment by the runtime, not carried in this struct.
*/
- model?: string;
- status?: AgentRegistryLiveTargetEntryStatus;
- attentionKind?: AgentRegistryLiveTargetEntryAttentionKind;
+ type: "copilot-api-token";
/**
- * Monotonic per-publisher revision counter incremented on every status update. Lets watchers detect transient flips.
+ * Authentication host (always the public GitHub host).
*/
- statusRevision?: number;
- lastTerminalEvent?: AgentRegistryLiveTargetEntryLastTerminalEvent;
+ host: "https://github.com";
+ copilotUser?: CopilotUserResponse;
+}
+/**
+ * Schema for the `UserAuthInfo` type.
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "UserAuthInfo".
+ */
+export interface UserAuthInfo {
/**
- * ISO 8601 timestamp captured at registration
+ * OAuth user authentication. The token itself is held in the runtime's secret token store (keyed by host+login) and is NOT carried in this struct.
*/
- startedAt: string;
+ type: "user";
/**
- * Copilot CLI version that wrote the entry
+ * Authentication host.
*/
- copilotVersion: string;
+ host: string;
/**
- * Wall-clock milliseconds since the watcher last observed this entry (heartbeat freshness)
+ * OAuth user login.
*/
- lastSeenMs: number;
+ login: string;
+ copilotUser?: CopilotUserResponse;
}
/**
- * Per-spawn log-capture outcome; populated from spawnLiveTarget.
+ * Schema for the `GhCliAuthInfo` type.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AgentRegistryLogCapture".
+ * via the `definition` "GhCliAuthInfo".
*/
-/** @experimental */
-export interface AgentRegistryLogCapture {
+export interface GhCliAuthInfo {
/**
- * Whether per-spawn log capture is on (false when env-disabled or open failed)
+ * Authentication via the `gh` CLI's saved credentials.
*/
- enabled: boolean;
+ type: "gh-cli";
/**
- * Absolute path to the per-spawn log file (only set when enabled)
+ * Authentication host.
*/
- path?: string;
+ host: string;
/**
- * Human-readable open failure message (only set when enabled === false AND the env-disable opt-out was NOT used)
+ * User login as reported by `gh auth status`.
*/
- openError?: string;
- openErrorReason?: AgentRegistryLogCaptureOpenErrorReason;
+ login: string;
+ /**
+ * The token returned by `gh auth token`. Treat as a secret.
+ */
+ token: string;
+ copilotUser?: CopilotUserResponse;
}
/**
- * `child_process.spawn` itself failed before the child entered the registry.
+ * Schema for the `ApiKeyAuthInfo` type.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AgentRegistrySpawnError".
+ * via the `definition` "ApiKeyAuthInfo".
*/
-/** @experimental */
-export interface AgentRegistrySpawnError {
+export interface ApiKeyAuthInfo {
/**
- * Discriminator: child_process.spawn itself failed
+ * API-key authentication for non-GitHub LLM providers (e.g. when running BYOM-style).
*/
- kind: "spawn-error";
+ type: "api-key";
/**
- * Human-readable error message
+ * The API key. Treat as a secret.
*/
- message: string;
+ apiKey: string;
/**
- * Underlying errno code (e.g. ENOENT, EACCES) when available
+ * Authentication host.
*/
- code?: string;
+ host: string;
+ copilotUser?: CopilotUserResponse;
}
/**
- * Spawn succeeded but the child did not publish a matching managed-server entry within the timeout.
+ * Current authentication state
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AgentRegistrySpawnRegistryTimeout".
+ * via the `definition` "AccountGetCurrentAuthResult".
*/
-/** @experimental */
-export interface AgentRegistrySpawnRegistryTimeout {
+export interface AccountGetCurrentAuthResult {
+ authInfo?: AuthInfo;
/**
- * Discriminator: spawn succeeded but child never registered
+ * Authentication errors from the last auth attempt, if any
*/
- kind: "registry-timeout";
+ authErrors?: string[];
+}
+
+export interface AccountGetQuotaRequest {
/**
- * Process ID of the orphaned child (so the caller can offer 'kill the pid' guidance)
+ * GitHub token for per-user quota lookup. When provided, resolves this token to determine the user's quota instead of using the global auth.
*/
- childPid: number;
- logCapture?: AgentRegistryLogCapture;
+ gitHubToken?: string;
}
/**
- * Inputs to spawn a managed-server child via the controller's spawn delegate.
+ * Quota usage snapshots for the resolved user, keyed by quota type.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AgentRegistrySpawnRequest".
+ * via the `definition` "AccountGetQuotaResult".
*/
-/** @experimental */
-export interface AgentRegistrySpawnRequest {
+export interface AccountGetQuotaResult {
/**
- * Working directory for the spawned child (must be an existing directory)
+ * Quota snapshots keyed by type (e.g., chat, completions, premium_interactions)
*/
- cwd: string;
+ quotaSnapshots: {
+ [k: string]: AccountQuotaSnapshot | undefined;
+ };
+}
+/**
+ * Schema for the `AccountQuotaSnapshot` type.
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "AccountQuotaSnapshot".
+ */
+export interface AccountQuotaSnapshot {
/**
- * Custom or built-in agent name (e.g. 'explore'). When omitted, the child uses its own default.
+ * Whether the user has an unlimited usage entitlement
*/
- agentName?: string;
+ isUnlimitedEntitlement: boolean;
/**
- * Model identifier to apply to the new session
+ * Number of requests included in the entitlement, or -1 for unlimited entitlements
*/
- model?: string;
+ entitlementRequests: number;
/**
- * Friendly session name. Must satisfy validateSessionName: non-empty, no leading/trailing whitespace, <=100 chars, no control chars, no double quotes.
+ * Number of requests used so far this period
*/
- name?: string;
- permissionMode?: AgentRegistrySpawnPermissionMode;
+ usedRequests: number;
/**
- * Optional first user message. Forwarded to the caller (the CLI's spawn wrapper sends it post-attach via the standard LocalRpcSession.send path).
+ * Whether usage is still permitted after quota exhaustion
*/
- initialPrompt?: string;
-}
-/**
- * Managed-server child was spawned and registered successfully.
- *
- * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AgentRegistrySpawnSpawned".
- */
-/** @experimental */
-export interface AgentRegistrySpawnSpawned {
+ usageAllowedWithExhaustedQuota: boolean;
/**
- * Discriminator: managed-server child spawned successfully
+ * Percentage of entitlement remaining
*/
- kind: "spawned";
- entry: AgentRegistryLiveTargetEntry;
+ remainingPercentage: number;
/**
- * Whether the delegate already sent the initial prompt. Always omitted in the current wiring: the controller sends the prompt post-attach via the standard LocalRpcSession.send path.
+ * Number of additional usage requests made this period
*/
- initialPromptSent?: boolean;
+ overage: number;
/**
- * If the delegate attempted to send the initial prompt and failed, the categorized error message.
+ * Whether additional usage is allowed when quota is exhausted
*/
- initialPromptError?: string;
- logCapture?: AgentRegistryLogCapture;
+ overageAllowedWithExhaustedQuota: boolean;
+ /**
+ * Date when the quota resets (ISO 8601 string)
+ */
+ resetDate?: string;
}
/**
- * Synchronous pre-validation rejected the spawn request.
+ * Credentials to store after successful authentication
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AgentRegistrySpawnValidationError".
+ * via the `definition` "AccountLoginRequest".
*/
-/** @experimental */
-export interface AgentRegistrySpawnValidationError {
+export interface AccountLoginRequest {
/**
- * Discriminator: synchronous pre-validation rejected the request
+ * GitHub host URL
*/
- kind: "validation-error";
- reason: AgentRegistrySpawnValidationErrorReason;
- field?: AgentRegistrySpawnValidationErrorField;
+ host: string;
/**
- * Human-readable explanation; safe to surface in the UI banner. Never logged to unrestricted telemetry.
+ * User login/username
*/
- message: string;
-}
-/**
- * Custom agents available to the session after reloading definitions from disk.
- *
- * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AgentReloadResult".
- */
-/** @experimental */
-export interface AgentReloadResult {
+ login: string;
/**
- * Reloaded custom agents
+ * GitHub authentication token
*/
- agents: AgentInfo[];
+ token: string;
}
/**
- * Optional project paths to include in agent discovery.
+ * Result of a successful login; throws on failure
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AgentsDiscoverRequest".
+ * via the `definition` "AccountLoginResult".
*/
-/** @experimental */
-export interface AgentsDiscoverRequest {
- /**
- * Optional list of project directory paths to scan for project-scoped agents. When omitted or empty, only user/plugin/remote-independent agents are returned (no project scan).
- */
- projectPaths?: string[];
+export interface AccountLoginResult {
/**
- * When true, omit the host's agents (the user-level agent directory and all plugin agents), leaving only project and remote agents. For multitenant deployments.
+ * Whether the credential was persisted to a secure store (system keychain, or the config file when plaintext storage is enabled). False when no secure store was available and the token was not saved, so the consumer can decide how to proceed.
*/
- excludeHostAgents?: boolean;
+ storedInVault: boolean;
}
/**
- * Name of the custom agent to select for subsequent turns.
+ * User to log out
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AgentSelectRequest".
+ * via the `definition` "AccountLogoutRequest".
*/
-/** @experimental */
-export interface AgentSelectRequest {
- /**
- * Name of the custom agent to select
- */
- name: string;
+export interface AccountLogoutRequest {
+ authInfo: AuthInfo;
}
/**
- * The newly selected custom agent.
+ * Logout result indicating if more users remain
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AgentSelectResult".
+ * via the `definition` "AccountLogoutResult".
*/
-/** @experimental */
-export interface AgentSelectResult {
- agent: AgentInfo;
+export interface AccountLogoutResult {
+ /**
+ * Whether other authenticated users remain after logout
+ */
+ hasMoreUsers: boolean;
}
/**
- * Optional project paths to include when enumerating agent discovery directories.
+ * Schema for the `AgentDiscoveryPath` type.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AgentsGetDiscoveryPathsRequest".
+ * via the `definition` "AgentDiscoveryPath".
*/
/** @experimental */
-export interface AgentsGetDiscoveryPathsRequest {
+export interface AgentDiscoveryPath {
/**
- * Optional list of project directory paths. When omitted or empty, only the user-level directory is returned.
+ * Absolute path of the search/create directory (may not exist on disk yet)
*/
- projectPaths?: string[];
+ path: string;
+ scope: AgentDiscoveryPathScope;
/**
- * When true, omit the host's user-level agent directory, leaving only project directories. For multitenant deployments (mirrors `discover`'s `excludeHostAgents`).
+ * Whether this is the canonical directory to create a new agent in its tier. At most one entry per tier is preferred.
*/
- excludeHostAgents?: boolean;
+ preferredForCreation: boolean;
+ /**
+ * The input project path this directory was derived from (only for project scope)
+ */
+ projectPath?: string;
}
/**
- * Indicates whether the operation succeeded and reports the post-mutation state.
+ * Canonical locations where custom agents can be created so the runtime will recognize them.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AllowAllPermissionSetResult".
+ * via the `definition` "AgentDiscoveryPathList".
*/
/** @experimental */
-export interface AllowAllPermissionSetResult {
- /**
- * Whether the operation succeeded
- */
- success: boolean;
+export interface AgentDiscoveryPathList {
/**
- * Authoritative allow-all state after the mutation
+ * Canonical agent create/discovery directories, in priority order
*/
- enabled: boolean;
+ paths: AgentDiscoveryPath[];
}
/**
- * Current full allow-all permission state.
+ * The currently selected custom agent, or null when using the default agent.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "AllowAllPermissionState".
+ * via the `definition` "AgentGetCurrentResult".
*/
/** @experimental */
-export interface AllowAllPermissionState {
+export interface AgentGetCurrentResult {
/**
- * Whether full allow-all permissions are currently active
+ * Currently selected custom agent, or null if using the default agent
*/
- enabled: boolean;
+ agent?: AgentInfo | null;
}
/**
- * Schema for the `ApiKeyAuthInfo` type.
+ * Schema for the `AgentInfo` type.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "ApiKeyAuthInfo".
+ * via the `definition` "AgentInfo".
*/
/** @experimental */
-export interface ApiKeyAuthInfo {
+export interface AgentInfo {
/**
- * API-key authentication for non-GitHub LLM providers (e.g. when running BYOM-style).
+ * Unique identifier of the custom agent
*/
- type: "api-key";
+ name: string;
/**
- * The API key. Treat as a secret.
+ * Human-readable display name
*/
- apiKey: string;
+ displayName: string;
/**
- * Authentication host.
+ * Description of the agent's purpose
*/
- host: string;
- copilotUser?: CopilotUserResponse;
-}
-/**
- * Snapshot of the authenticated user's Copilot subscription info, if known. Mirrors the GitHub API `/copilot_internal/v2/token` user response shape — the runtime trusts this verbatim and does not re-fetch when set.
- *
- * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "CopilotUserResponse".
- */
-/** @experimental */
-export interface CopilotUserResponse {
- login?: string;
- access_type_sku?: string;
- analytics_tracking_id?: string;
- assigned_date?:
- | (
- | {
- [k: string]: unknown | undefined;
- }
- | string
- )
- | null;
- can_signup_for_limited?: boolean;
- chat_enabled?: boolean;
- copilot_plan?: string;
- copilotignore_enabled?: boolean;
- endpoints?: CopilotUserResponseEndpoints;
- organization_login_list?: string[];
- organization_list?:
- | (
- | {
- [k: string]: unknown | undefined;
- }
- | ({
- login?:
- | (
- | {
- [k: string]: unknown | undefined;
- }
- | string
- )
- | null;
- name?:
- | (
- | {
- [k: string]: unknown | undefined;
- }
- | string
- )
- | null;
- } | null)[]
- )
- | null;
- codex_agent_enabled?: boolean;
- is_mcp_enabled?:
- | (
- | {
- [k: string]: unknown | undefined;
- }
- | boolean
- )
- | null;
- quota_reset_date?: string;
- quota_snapshots?: CopilotUserResponseQuotaSnapshots;
- restricted_telemetry?: boolean;
- is_staff?: boolean;
- token_based_billing?: boolean;
- can_upgrade_plan?: boolean;
- quota_reset_date_utc?: string;
- limited_user_quotas?: {
- [k: string]: number | undefined;
- };
- limited_user_reset_date?: string;
- monthly_quotas?: {
- [k: string]: number | undefined;
+ description: string;
+ /**
+ * Absolute local file path of the agent definition. Only set for file-based agents loaded from disk; remote agents do not have a path.
+ */
+ path?: string;
+ /**
+ * Stable identifier for selection. For most agents this is the same as `name`; for plugin/builtin agents it may differ. Always populated; defaults to `name` when no distinct id was assigned.
+ */
+ id: string;
+ source?: AgentInfoSource;
+ /**
+ * Whether the agent can be selected directly by the user. Agents marked `false` are subagent-only.
+ */
+ userInvocable?: boolean;
+ /**
+ * Allowed tool names for this agent. Empty array means none; omitted means inherit defaults.
+ */
+ tools?: string[];
+ /**
+ * Preferred model id for this agent. When omitted, inherits the outer agent's model.
+ */
+ model?: string;
+ /**
+ * MCP server configurations attached to this agent, keyed by server name. Server config shape mirrors the MCP `mcpServers` schema.
+ *
+ * @experimental
+ */
+ mcpServers?: {
+ [k: string]: unknown | undefined;
};
- cloud_session_storage_enabled?: boolean;
- cli_remote_control_enabled?: boolean;
+ /**
+ * Skill names preloaded into this agent's context. Omitted means none.
+ */
+ skills?: string[];
}
/**
- * Schema for the `CopilotUserResponseEndpoints` type.
+ * Custom agents available to the session.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "CopilotUserResponseEndpoints".
+ * via the `definition` "AgentList".
*/
/** @experimental */
-export interface CopilotUserResponseEndpoints {
- api?: string;
- "origin-tracker"?: string;
- proxy?: string;
- telemetry?: string;
+export interface AgentList {
+ /**
+ * Available custom agents
+ */
+ agents: AgentInfo[];
}
/**
- * Schema for the `CopilotUserResponseQuotaSnapshots` type.
+ * Full registry entry for the spawned child. Lets the controller call `handleLiveTargetSelected(entry)` directly without re-reading the registry (avoids a TOCTOU window).
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "CopilotUserResponseQuotaSnapshots".
+ * via the `definition` "AgentRegistryLiveTargetEntry".
*/
/** @experimental */
-export interface CopilotUserResponseQuotaSnapshots {
- chat?: CopilotUserResponseQuotaSnapshotsChat;
- completions?: CopilotUserResponseQuotaSnapshotsCompletions;
- premium_interactions?: CopilotUserResponseQuotaSnapshotsPremiumInteractions;
- [k: string]:
- | ({
- entitlement?: number;
- overage_count?: number;
- overage_permitted?: boolean;
- percent_remaining?: number;
- quota_id?: string;
- quota_remaining?: number;
- remaining?: number;
- unlimited?: boolean;
- timestamp_utc?: string;
- has_quota?: boolean;
- quota_reset_at?: number;
- token_based_billing?: boolean;
- } | null)
- | undefined;
+export interface AgentRegistryLiveTargetEntry {
+ /**
+ * Registry entry schema version (1 = ui-server, 2 = managed-server)
+ */
+ schemaVersion: number;
+ kind: AgentRegistryLiveTargetEntryKind;
+ /**
+ * Operating-system pid of the process owning this entry
+ */
+ pid: number;
+ /**
+ * Bind host for the entry's JSON-RPC server
+ */
+ host: string;
+ /**
+ * TCP port the entry's JSON-RPC server is listening on
+ */
+ port: number;
+ /**
+ * Connection token (null when the target is unauthenticated)
+ *
+ * @internal
+ */
+ token?: string | null;
+ /**
+ * Session ID of the foreground session for this entry
+ */
+ sessionId?: string;
+ /**
+ * Friendly session name (when set)
+ */
+ sessionName?: string;
+ /**
+ * Working directory of the session (when known)
+ */
+ cwd?: string;
+ /**
+ * Git branch of the session (when known)
+ */
+ branch?: string;
+ /**
+ * Model identifier currently selected for the session
+ */
+ model?: string;
+ status?: AgentRegistryLiveTargetEntryStatus;
+ attentionKind?: AgentRegistryLiveTargetEntryAttentionKind;
+ /**
+ * Monotonic per-publisher revision counter incremented on every status update. Lets watchers detect transient flips.
+ */
+ statusRevision?: number;
+ lastTerminalEvent?: AgentRegistryLiveTargetEntryLastTerminalEvent;
+ /**
+ * ISO 8601 timestamp captured at registration
+ */
+ startedAt: string;
+ /**
+ * Copilot CLI version that wrote the entry
+ */
+ copilotVersion: string;
+ /**
+ * Wall-clock milliseconds since the watcher last observed this entry (heartbeat freshness)
+ */
+ lastSeenMs: number;
}
/**
- * Schema for the `CopilotUserResponseQuotaSnapshotsChat` type.
+ * Per-spawn log-capture outcome; populated from spawnLiveTarget.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "CopilotUserResponseQuotaSnapshotsChat".
+ * via the `definition` "AgentRegistryLogCapture".
*/
/** @experimental */
-export interface CopilotUserResponseQuotaSnapshotsChat {
- entitlement?: number;
- overage_count?: number;
- overage_permitted?: boolean;
- percent_remaining?: number;
- quota_id?: string;
- quota_remaining?: number;
- remaining?: number;
- unlimited?: boolean;
- timestamp_utc?: string;
- has_quota?: boolean;
- quota_reset_at?: number;
- token_based_billing?: boolean;
+export interface AgentRegistryLogCapture {
+ /**
+ * Whether per-spawn log capture is on (false when env-disabled or open failed)
+ */
+ enabled: boolean;
+ /**
+ * Absolute path to the per-spawn log file (only set when enabled)
+ */
+ path?: string;
+ /**
+ * Human-readable open failure message (only set when enabled === false AND the env-disable opt-out was NOT used)
+ */
+ openError?: string;
+ openErrorReason?: AgentRegistryLogCaptureOpenErrorReason;
}
/**
- * Schema for the `CopilotUserResponseQuotaSnapshotsCompletions` type.
+ * `child_process.spawn` itself failed before the child entered the registry.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "CopilotUserResponseQuotaSnapshotsCompletions".
+ * via the `definition` "AgentRegistrySpawnError".
*/
/** @experimental */
-export interface CopilotUserResponseQuotaSnapshotsCompletions {
- entitlement?: number;
- overage_count?: number;
- overage_permitted?: boolean;
- percent_remaining?: number;
- quota_id?: string;
- quota_remaining?: number;
- remaining?: number;
- unlimited?: boolean;
- timestamp_utc?: string;
- has_quota?: boolean;
- quota_reset_at?: number;
- token_based_billing?: boolean;
+export interface AgentRegistrySpawnError {
+ /**
+ * Discriminator: child_process.spawn itself failed
+ */
+ kind: "spawn-error";
+ /**
+ * Human-readable error message
+ */
+ message: string;
+ /**
+ * Underlying errno code (e.g. ENOENT, EACCES) when available
+ */
+ code?: string;
}
/**
- * Schema for the `CopilotUserResponseQuotaSnapshotsPremiumInteractions` type.
+ * Spawn succeeded but the child did not publish a matching managed-server entry within the timeout.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "CopilotUserResponseQuotaSnapshotsPremiumInteractions".
+ * via the `definition` "AgentRegistrySpawnRegistryTimeout".
*/
/** @experimental */
-export interface CopilotUserResponseQuotaSnapshotsPremiumInteractions {
- entitlement?: number;
- overage_count?: number;
- overage_permitted?: boolean;
- percent_remaining?: number;
- quota_id?: string;
- quota_remaining?: number;
- remaining?: number;
- unlimited?: boolean;
- timestamp_utc?: string;
- has_quota?: boolean;
- quota_reset_at?: number;
- token_based_billing?: boolean;
+export interface AgentRegistrySpawnRegistryTimeout {
+ /**
+ * Discriminator: spawn succeeded but child never registered
+ */
+ kind: "registry-timeout";
+ /**
+ * Process ID of the orphaned child (so the caller can offer 'kill the pid' guidance)
+ */
+ childPid: number;
+ logCapture?: AgentRegistryLogCapture;
}
/**
- * Schema for the `HMACAuthInfo` type.
+ * Inputs to spawn a managed-server child via the controller's spawn delegate.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "HMACAuthInfo".
+ * via the `definition` "AgentRegistrySpawnRequest".
*/
/** @experimental */
-export interface HMACAuthInfo {
+export interface AgentRegistrySpawnRequest {
/**
- * HMAC-based authentication used by GitHub-internal services.
+ * Working directory for the spawned child (must be an existing directory)
*/
- type: "hmac";
+ cwd: string;
/**
- * Authentication host. HMAC auth always targets the public GitHub host.
+ * Custom or built-in agent name (e.g. 'explore'). When omitted, the child uses its own default.
*/
- host: "https://github.com";
+ agentName?: string;
/**
- * HMAC secret used to sign requests.
+ * Model identifier to apply to the new session
*/
- hmac: string;
- copilotUser?: CopilotUserResponse;
+ model?: string;
+ /**
+ * Friendly session name. Must satisfy validateSessionName: non-empty, no leading/trailing whitespace, <=100 chars, no control chars, no double quotes.
+ */
+ name?: string;
+ permissionMode?: AgentRegistrySpawnPermissionMode;
+ /**
+ * Optional first user message. Forwarded to the caller (the CLI's spawn wrapper sends it post-attach via the standard LocalRpcSession.send path).
+ */
+ initialPrompt?: string;
}
/**
- * Schema for the `EnvAuthInfo` type.
+ * Managed-server child was spawned and registered successfully.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "EnvAuthInfo".
+ * via the `definition` "AgentRegistrySpawnSpawned".
*/
/** @experimental */
-export interface EnvAuthInfo {
- /**
- * Personal access token (PAT) or server-to-server token sourced from an environment variable.
- */
- type: "env";
- /**
- * Authentication host (e.g. https://github.com or a GHES host).
- */
- host: string;
+export interface AgentRegistrySpawnSpawned {
/**
- * User login associated with the token. Undefined for server-to-server tokens (those starting with `ghs_`).
+ * Discriminator: managed-server child spawned successfully
*/
- login?: string;
+ kind: "spawned";
+ entry: AgentRegistryLiveTargetEntry;
/**
- * The token value itself. Treat as a secret.
+ * Whether the delegate already sent the initial prompt. Always omitted in the current wiring: the controller sends the prompt post-attach via the standard LocalRpcSession.send path.
*/
- token: string;
+ initialPromptSent?: boolean;
/**
- * Name of the environment variable the token was sourced from.
+ * If the delegate attempted to send the initial prompt and failed, the categorized error message.
*/
- envVar: string;
- copilotUser?: CopilotUserResponse;
+ initialPromptError?: string;
+ logCapture?: AgentRegistryLogCapture;
}
/**
- * Schema for the `TokenAuthInfo` type.
+ * Synchronous pre-validation rejected the spawn request.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "TokenAuthInfo".
+ * via the `definition` "AgentRegistrySpawnValidationError".
*/
/** @experimental */
-export interface TokenAuthInfo {
+export interface AgentRegistrySpawnValidationError {
/**
- * SDK-side token authentication; the host configured the token directly via the SDK.
+ * Discriminator: synchronous pre-validation rejected the request
*/
- type: "token";
+ kind: "validation-error";
+ reason: AgentRegistrySpawnValidationErrorReason;
+ field?: AgentRegistrySpawnValidationErrorField;
/**
- * Authentication host.
+ * Human-readable explanation; safe to surface in the UI banner. Never logged to unrestricted telemetry.
*/
- host: string;
+ message: string;
+}
+/**
+ * Custom agents available to the session after reloading definitions from disk.
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "AgentReloadResult".
+ */
+/** @experimental */
+export interface AgentReloadResult {
/**
- * The token value itself. Treat as a secret.
+ * Reloaded custom agents
*/
- token: string;
- copilotUser?: CopilotUserResponse;
+ agents: AgentInfo[];
}
/**
- * Schema for the `CopilotApiTokenAuthInfo` type.
+ * Optional project paths to include in agent discovery.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "CopilotApiTokenAuthInfo".
+ * via the `definition` "AgentsDiscoverRequest".
*/
/** @experimental */
-export interface CopilotApiTokenAuthInfo {
+export interface AgentsDiscoverRequest {
/**
- * Direct Copilot API authentication via the `GITHUB_COPILOT_API_TOKEN` + `COPILOT_API_URL` environment-variable pair. The token itself is read from the environment by the runtime, not carried in this struct.
+ * Optional list of project directory paths to scan for project-scoped agents. When omitted or empty, only user/plugin/remote-independent agents are returned (no project scan).
*/
- type: "copilot-api-token";
+ projectPaths?: string[];
/**
- * Authentication host (always the public GitHub host).
+ * When true, omit the host's agents (the user-level agent directory and all plugin agents), leaving only project and remote agents. For multitenant deployments.
*/
- host: "https://github.com";
- copilotUser?: CopilotUserResponse;
+ excludeHostAgents?: boolean;
}
/**
- * Schema for the `UserAuthInfo` type.
+ * Name of the custom agent to select for subsequent turns.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "UserAuthInfo".
+ * via the `definition` "AgentSelectRequest".
*/
/** @experimental */
-export interface UserAuthInfo {
+export interface AgentSelectRequest {
/**
- * OAuth user authentication. The token itself is held in the runtime's secret token store (keyed by host+login) and is NOT carried in this struct.
+ * Name of the custom agent to select
*/
- type: "user";
+ name: string;
+}
+/**
+ * The newly selected custom agent.
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "AgentSelectResult".
+ */
+/** @experimental */
+export interface AgentSelectResult {
+ agent: AgentInfo;
+}
+/**
+ * Optional project paths to include when enumerating agent discovery directories.
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "AgentsGetDiscoveryPathsRequest".
+ */
+/** @experimental */
+export interface AgentsGetDiscoveryPathsRequest {
/**
- * Authentication host.
+ * Optional list of project directory paths. When omitted or empty, only the user-level directory is returned.
*/
- host: string;
+ projectPaths?: string[];
/**
- * OAuth user login.
+ * When true, omit the host's user-level agent directory, leaving only project directories. For multitenant deployments (mirrors `discover`'s `excludeHostAgents`).
*/
- login: string;
- copilotUser?: CopilotUserResponse;
+ excludeHostAgents?: boolean;
}
/**
- * Schema for the `GhCliAuthInfo` type.
+ * Indicates whether the operation succeeded and reports the post-mutation state.
*
* This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "GhCliAuthInfo".
+ * via the `definition` "AllowAllPermissionSetResult".
*/
/** @experimental */
-export interface GhCliAuthInfo {
- /**
- * Authentication via the `gh` CLI's saved credentials.
- */
- type: "gh-cli";
+export interface AllowAllPermissionSetResult {
/**
- * Authentication host.
+ * Whether the operation succeeded
*/
- host: string;
+ success: boolean;
/**
- * User login as reported by `gh auth status`.
+ * Authoritative allow-all state after the mutation
*/
- login: string;
+ enabled: boolean;
+}
+/**
+ * Current full allow-all permission state.
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "AllowAllPermissionState".
+ */
+/** @experimental */
+export interface AllowAllPermissionState {
/**
- * The token returned by `gh auth token`. Treat as a secret.
+ * Whether full allow-all permissions are currently active
*/
- token: string;
- copilotUser?: CopilotUserResponse;
+ enabled: boolean;
}
/**
* Cancellation result for a user-requested shell command.
@@ -6250,7 +6322,8 @@ export interface ModelBillingTokenPrices {
*/
outputPrice?: number;
/**
- * Deprecated: use cacheReadPrice. AI Credits cost per billing batch of cached tokens
+ * @deprecated
+ * Use cacheReadPrice instead. AI Credits cost per billing batch of cached tokens
*/
cachePrice?: number;
/**
@@ -6266,7 +6339,8 @@ export interface ModelBillingTokenPrices {
*/
batchSize?: number;
/**
- * Deprecated: use maxPromptTokens. Prompt token budget for the default tier. The total context window is this value plus the model's max_output_tokens.
+ * @deprecated
+ * Use maxPromptTokens instead. Prompt token budget for the default tier. The total context window is this value plus the model's max_output_tokens.
*/
contextMax?: number;
/**
@@ -6291,7 +6365,8 @@ export interface ModelBillingTokenPricesLongContext {
*/
outputPrice?: number;
/**
- * Deprecated: use cacheReadPrice. AI Credits cost per billing batch of cached tokens
+ * @deprecated
+ * Use cacheReadPrice instead. AI Credits cost per billing batch of cached tokens
*/
cachePrice?: number;
/**
@@ -6303,7 +6378,8 @@ export interface ModelBillingTokenPricesLongContext {
*/
cacheWritePrice?: number;
/**
- * Deprecated: use maxPromptTokens. Prompt token budget for the long context tier. The total context window is this value plus the model's max_output_tokens.
+ * @deprecated
+ * Use maxPromptTokens instead. Prompt token budget for the long context tier. The total context window is this value plus the model's max_output_tokens.
*/
contextMax?: number;
/**
@@ -8373,6 +8449,78 @@ export interface SessionsPollSpawnedSessionsEvent {
*/
sessionId: string;
}
+/**
+ * BYOK providers and/or models to add to the session's registry at runtime. Both fields are optional; provide providers, models, or both.
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "ProviderAddRequest".
+ */
+/** @experimental */
+export interface ProviderAddRequest {
+ /**
+ * Named BYOK provider connections to register, additive to any providers already in the registry. Each name must be unique across the registry and must not contain '/'.
+ */
+ providers?: NamedProviderConfig[];
+ /**
+ * BYOK model definitions to register. Each must reference a provider that is already registered or included in this same call. Selection ids (`provider/id`) must be unique across the registry.
+ */
+ models?: ProviderModelConfig[];
+}
+/**
+ * A BYOK model definition referencing a named provider.
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "ProviderModelConfig".
+ */
+/** @experimental */
+export interface ProviderModelConfig {
+ /**
+ * Provider-local model id, unique within its provider. The session-wide selection id (shown in the model list and passed to switchTo) is the provider-qualified `provider/id`.
+ */
+ id: string;
+ /**
+ * Name of the NamedProviderConfig that serves this model.
+ */
+ provider: string;
+ /**
+ * The model name sent to the provider API for inference. Defaults to `id`.
+ */
+ wireModel?: string;
+ /**
+ * Well-known base model id used for behavior/capability/config lookup. Defaults to `id`.
+ */
+ modelId?: string;
+ /**
+ * Display name for model pickers. Defaults to the provider-qualified selection id (`provider/id`).
+ */
+ name?: string;
+ /**
+ * Maximum prompt/input tokens for the model.
+ */
+ maxPromptTokens?: number;
+ /**
+ * Maximum context window tokens for the model.
+ */
+ maxContextWindowTokens?: number;
+ /**
+ * Maximum output tokens for the model.
+ */
+ maxOutputTokens?: number;
+ capabilities?: ModelCapabilitiesOverride;
+}
+/**
+ * The selectable model entries synthesized for the models added by this call.
+ *
+ * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
+ * via the `definition` "ProviderAddResult".
+ */
+/** @experimental */
+export interface ProviderAddResult {
+ /**
+ * Synthesized selectable model entries for the newly added BYOK models, each under its provider-qualified selection id (`provider/id`). Empty when only providers were added.
+ */
+ models: unknown[];
+}
/**
* Custom model-provider configuration (BYOK).
*
@@ -8487,48 +8635,6 @@ export interface ProviderGetEndpointRequest {
*/
modelId?: string;
}
-/**
- * A BYOK model definition referencing a named provider.
- *
- * This interface was referenced by `_RpcSchemaRoot`'s JSON-Schema
- * via the `definition` "ProviderModelConfig".
- */
-/** @experimental */
-export interface ProviderModelConfig {
- /**
- * Provider-local model id, unique within its provider. The session-wide selection id (shown in the model list and passed to switchTo) is the provider-qualified `provider/id`.
- */
- id: string;
- /**
- * Name of the NamedProviderConfig that serves this model.
- */
- provider: string;
- /**
- * The model name sent to the provider API for inference. Defaults to `id`.
- */
- wireModel?: string;
- /**
- * Well-known base model id used for behavior/capability/config lookup. Defaults to `id`.
- */
- modelId?: string;
- /**
- * Display name for model pickers. Defaults to the provider-qualified selection id (`provider/id`).
- */
- name?: string;
- /**
- * Maximum prompt/input tokens for the model.
- */
- maxPromptTokens?: number;
- /**
- * Maximum context window tokens for the model.
- */
- maxContextWindowTokens?: number;
- /**
- * Maximum output tokens for the model.
- */
- maxOutputTokens?: number;
- capabilities?: ModelCapabilitiesOverride;
-}
/**
* File attachment
*
@@ -9550,6 +9656,10 @@ export interface ServerSkill {
* The project path this skill belongs to (only for project/inherited skills)
*/
projectPath?: string;
+ /**
+ * Optional freeform hint describing the skill's expected arguments, from the `argument-hint` frontmatter field
+ */
+ argumentHint?: string;
}
/**
* Skills discovered across global and project sources.
@@ -11630,6 +11740,10 @@ export interface Skill {
* Name of the plugin that provides the skill, when source is 'plugin'
*/
pluginName?: string;
+ /**
+ * Optional freeform hint describing the skill's expected arguments, from the `argument-hint` frontmatter field
+ */
+ argumentHint?: string;
}
/**
* Schema for the `SkillDiscoveryPath` type.
@@ -13576,6 +13690,38 @@ export function createServerRpc(connection: MessageConnection) {
*/
getQuota: async (params: AccountGetQuotaRequest): Promise =>
connection.sendRequest("account.getQuota", params),
+ /**
+ * Gets the currently active authentication credentials from the global auth manager.
+ *
+ * @returns Current authentication state
+ */
+ getCurrentAuth: async (): Promise =>
+ connection.sendRequest("account.getCurrentAuth", {}),
+ /**
+ * Gets all authenticated users available for account switching.
+ *
+ * @returns List of all authenticated users
+ */
+ getAllUsers: async (): Promise =>
+ connection.sendRequest("account.getAllUsers", {}),
+ /**
+ * Stores authentication credentials after successful login (e.g., device code flow).
+ *
+ * @param params Credentials to store after successful authentication
+ *
+ * @returns Result of a successful login; throws on failure
+ */
+ login: async (params: AccountLoginRequest): Promise =>
+ connection.sendRequest("account.login", params),
+ /**
+ * Removes user authentication from keychain and persisted state.
+ *
+ * @param params User to log out
+ *
+ * @returns Logout result indicating if more users remain
+ */
+ logout: async (params: AccountLogoutRequest): Promise =>
+ connection.sendRequest("account.logout", params),
},
secrets: {
/**
@@ -14846,6 +14992,15 @@ export function createSessionRpc(connection: MessageConnection, sessionId: strin
*/
getEndpoint: async (params?: ProviderGetEndpointRequest): Promise =>
connection.sendRequest("session.provider.getEndpoint", { sessionId, ...params }),
+ /**
+ * Adds BYOK providers and/or models to the session's registry at runtime, extending the additive registry built from the session's `providers`/`models` options. Both fields are optional, so a call may add providers only, models only, or both. Within a single call providers are registered before models, so a model may reference a provider added in the same call; across calls a model may reference any provider already registered (from session creation or a prior add). A model whose referenced provider is not registered by the end of the call is rejected. Newly added models become selectable via `model.list` / `model.switchTo` and are inherited by sub-agents spawned afterwards.
+ *
+ * @param params BYOK providers and/or models to add to the session's registry at runtime. Both fields are optional; provide providers, models, or both.
+ *
+ * @returns The selectable model entries synthesized for the models added by this call.
+ */
+ add: async (params: ProviderAddRequest): Promise =>
+ connection.sendRequest("session.provider.add", { sessionId, ...params }),
},
/** @experimental */
options: {
diff --git a/nodejs/src/generated/session-events.ts b/nodejs/src/generated/session-events.ts
index cd74a7b48..d4faf7d4b 100644
--- a/nodejs/src/generated/session-events.ts
+++ b/nodejs/src/generated/session-events.ts
@@ -3441,6 +3441,7 @@ export interface ModelCallFailureData {
* GitHub request tracing ID (x-github-request-id header) for server-side log correlation
*/
providerCallId?: string;
+ requestFingerprint?: ModelCallFailureRequestFingerprint;
/**
* Copilot service request ID (x-copilot-service-request-id header) for CAPI log correlation
*/
@@ -3451,6 +3452,39 @@ export interface ModelCallFailureData {
*/
statusCode?: number;
}
+/**
+ * Content-free structural summary of the failing request for diagnosing malformed 4xx calls
+ */
+export interface ModelCallFailureRequestFingerprint {
+ /**
+ * Total number of image content parts
+ */
+ imagePartCount: number;
+ /**
+ * Image parts whose media type cannot be determined (rejected by strict providers)
+ */
+ imagePartsMissingMediaType: number;
+ /**
+ * Role of the final message in the request
+ */
+ lastMessageRole?: string;
+ /**
+ * Total number of messages in the request
+ */
+ messageCount: number;
+ /**
+ * Tool calls whose name is missing or empty (rejected by strict providers)
+ */
+ namelessToolCallCount: number;
+ /**
+ * Total number of tool calls across assistant messages
+ */
+ toolCallCount: number;
+ /**
+ * Number of "tool" result messages in the request
+ */
+ toolResultMessageCount: number;
+}
/**
* Session event "abort". Turn abort information including the reason for termination
*/
@@ -7091,6 +7125,10 @@ export interface SkillsLoadedData {
* Schema for the `SkillsLoadedSkill` type.
*/
export interface SkillsLoadedSkill {
+ /**
+ * Optional freeform hint describing the skill's expected arguments, from the `argument-hint` frontmatter field
+ */
+ argumentHint?: string;
/**
* Description of what the skill does
*/
diff --git a/nodejs/src/session.ts b/nodejs/src/session.ts
index 8ae19755a..0ba42ab76 100644
--- a/nodejs/src/session.ts
+++ b/nodejs/src/session.ts
@@ -134,6 +134,7 @@ export class CopilotSession {
private traceContextProvider?: TraceContextProvider;
private _capabilities: SessionCapabilities = {};
private openCanvasInstances: OpenCanvasInstance[] = [];
+ private disconnected = false;
/** @internal Client session API handlers, populated by CopilotClient during create/resume. */
clientSessionApis: ClientSessionApiHandlers = {};
@@ -326,6 +327,22 @@ export class CopilotSession {
}
}
+ /** @internal */
+ _markDisconnected(): void {
+ this.disconnected = true;
+ this.eventHandlers.clear();
+ this.typedEventHandlers.clear();
+ this.toolHandlers.clear();
+ this.permissionHandler = undefined;
+ this.userInputHandler = undefined;
+ this.elicitationHandler = undefined;
+ this.exitPlanModeHandler = undefined;
+ this.autoModeSwitchHandler = undefined;
+ this.commandHandlers.clear();
+ this.canvases.clear();
+ this.transformCallbacks?.clear();
+ }
+
/**
* Subscribes to events from this session.
*
@@ -443,6 +460,9 @@ export class CopilotSession {
* @internal
*/
private _handleBroadcastEvent(event: SessionEvent): void {
+ if (this.disconnected) {
+ return;
+ }
if (event.type === "external_tool.requested") {
const { requestId, toolName } = event.data as {
requestId: string;
@@ -582,8 +602,14 @@ export class CopilotSession {
} else {
result = JSON.stringify(rawResult);
}
+ if (this.disconnected) {
+ return;
+ }
await this.rpc.tools.handlePendingToolCall({ requestId, result });
} catch (error) {
+ if (this.disconnected) {
+ return;
+ }
const message = error instanceof Error ? error.message : String(error);
try {
await this.rpc.tools.handlePendingToolCall({ requestId, error: message });
@@ -611,8 +637,14 @@ export class CopilotSession {
if (result.kind === "no-result") {
return;
}
+ if (this.disconnected) {
+ return;
+ }
await this.rpc.permissions.handlePendingPermissionRequest({ requestId, result });
} catch (_error) {
+ if (this.disconnected) {
+ return;
+ }
try {
await this.rpc.permissions.handlePendingPermissionRequest({
requestId,
@@ -656,8 +688,14 @@ export class CopilotSession {
try {
await handler({ sessionId: this.sessionId, command, commandName, args });
+ if (this.disconnected) {
+ return;
+ }
await this.rpc.commands.handlePendingCommand({ requestId });
} catch (error) {
+ if (this.disconnected) {
+ return;
+ }
const message = error instanceof Error ? error.message : String(error);
try {
await this.rpc.commands.handlePendingCommand({ requestId, error: message });
@@ -1170,17 +1208,13 @@ export class CopilotSession {
* ```
*/
async disconnect(): Promise {
+ if (this.disconnected) {
+ return;
+ }
await this.connection.sendRequest("session.destroy", {
sessionId: this.sessionId,
});
- this.eventHandlers.clear();
- this.typedEventHandlers.clear();
- this.toolHandlers.clear();
- this.permissionHandler = undefined;
- this.userInputHandler = undefined;
- this.elicitationHandler = undefined;
- this.exitPlanModeHandler = undefined;
- this.autoModeSwitchHandler = undefined;
+ this._markDisconnected();
}
/** Enables `await using session = ...` syntax for automatic cleanup. */
diff --git a/python/copilot/generated/rpc.py b/python/copilot/generated/rpc.py
index de42808b4..38100f534 100644
--- a/python/copilot/generated/rpc.py
+++ b/python/copilot/generated/rpc.py
@@ -48,10 +48,6 @@ def from_bool(x: Any) -> bool:
assert isinstance(x, bool)
return x
-def from_int(x: Any) -> int:
- assert isinstance(x, int) and not isinstance(x, bool)
- return x
-
def from_float(x: Any) -> float:
assert isinstance(x, (float, int)) and not isinstance(x, bool)
return float(x)
@@ -64,13 +60,17 @@ def from_dict(f: Callable[[Any], T], x: Any) -> dict[str, T]:
assert isinstance(x, dict)
return { k: f(v) for (k, v) in x.items() }
+def from_list(f: Callable[[Any], T], x: Any) -> list[T]:
+ assert isinstance(x, list)
+ return [f(y) for y in x]
+
def to_enum(c: type[EnumT], x: Any) -> EnumT:
assert isinstance(x, c)
return x.value
-def from_list(f: Callable[[Any], T], x: Any) -> list[T]:
- assert isinstance(x, list)
- return [f(y) for y in x]
+def from_int(x: Any) -> int:
+ assert isinstance(x, int) and not isinstance(x, bool)
+ return x
def from_datetime(x: Any) -> datetime:
return dateutil.parser.parse(x)
@@ -120,6 +120,99 @@ def to_dict(self) -> dict:
result["error"] = from_union([from_str, from_none], self.error)
return result
+@dataclass
+class CopilotUserResponseEndpoints:
+ """Schema for the `CopilotUserResponseEndpoints` type."""
+
+ api: str | None = None
+ origin_tracker: str | None = None
+ proxy: str | None = None
+ telemetry: str | None = None
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'CopilotUserResponseEndpoints':
+ assert isinstance(obj, dict)
+ api = from_union([from_str, from_none], obj.get("api"))
+ origin_tracker = from_union([from_str, from_none], obj.get("origin-tracker"))
+ proxy = from_union([from_str, from_none], obj.get("proxy"))
+ telemetry = from_union([from_str, from_none], obj.get("telemetry"))
+ return CopilotUserResponseEndpoints(api, origin_tracker, proxy, telemetry)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ if self.api is not None:
+ result["api"] = from_union([from_str, from_none], self.api)
+ if self.origin_tracker is not None:
+ result["origin-tracker"] = from_union([from_str, from_none], self.origin_tracker)
+ if self.proxy is not None:
+ result["proxy"] = from_union([from_str, from_none], self.proxy)
+ if self.telemetry is not None:
+ result["telemetry"] = from_union([from_str, from_none], self.telemetry)
+ return result
+
+# Experimental: this type is part of an experimental API and may change or be removed.
+class AuthInfoType(Enum):
+ """Authentication type"""
+
+ API_KEY = "api-key"
+ COPILOT_API_TOKEN = "copilot-api-token"
+ ENV = "env"
+ GH_CLI = "gh-cli"
+ HMAC = "hmac"
+ TOKEN = "token"
+ USER = "user"
+
+@dataclass
+class AccountAllUsers:
+ """Schema for the `AccountAllUsers` type.
+
+ List of all authenticated users
+ """
+ auth_info: AuthInfo
+ """Authentication information for this user"""
+
+ token: str | None = None
+ """Associated token, if available"""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'AccountAllUsers':
+ assert isinstance(obj, dict)
+ auth_info = _load_AuthInfo(obj.get("authInfo"))
+ token = from_union([from_str, from_none], obj.get("token"))
+ return AccountAllUsers(auth_info, token)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["authInfo"] = (self.auth_info).to_dict()
+ if self.token is not None:
+ result["token"] = from_union([from_str, from_none], self.token)
+ return result
+
+@dataclass
+class AccountGetCurrentAuthResult:
+ """Current authentication state"""
+
+ auth_errors: list[str] | None = None
+ """Authentication errors from the last auth attempt, if any"""
+
+ auth_info: AuthInfo | None = None
+ """Current authentication information, if authenticated"""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'AccountGetCurrentAuthResult':
+ assert isinstance(obj, dict)
+ auth_errors = from_union([lambda x: from_list(from_str, x), from_none], obj.get("authErrors"))
+ auth_info = from_union([_load_AuthInfo, from_none], obj.get("authInfo"))
+ return AccountGetCurrentAuthResult(auth_errors, auth_info)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ if self.auth_errors is not None:
+ result["authErrors"] = from_union([lambda x: from_list(from_str, x), from_none], self.auth_errors)
+ if self.auth_info is not None:
+ result["authInfo"] = from_union([lambda x: (x).to_dict(), from_none], self.auth_info)
+ return result
+
@dataclass
class AccountGetQuotaRequest:
git_hub_token: str | None = None
@@ -193,6 +286,91 @@ def to_dict(self) -> dict:
result["resetDate"] = from_union([from_str, from_none], self.reset_date)
return result
+@dataclass
+class AccountLoginRequest:
+ """Credentials to store after successful authentication"""
+
+ host: str
+ """GitHub host URL"""
+
+ login: str
+ """User login/username"""
+
+ token: str
+ """GitHub authentication token"""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'AccountLoginRequest':
+ assert isinstance(obj, dict)
+ host = from_str(obj.get("host"))
+ login = from_str(obj.get("login"))
+ token = from_str(obj.get("token"))
+ return AccountLoginRequest(host, login, token)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["host"] = from_str(self.host)
+ result["login"] = from_str(self.login)
+ result["token"] = from_str(self.token)
+ return result
+
+@dataclass
+class AccountLoginResult:
+ """Result of a successful login; throws on failure"""
+
+ stored_in_vault: bool
+ """Whether the credential was persisted to a secure store (system keychain, or the config
+ file when plaintext storage is enabled). False when no secure store was available and the
+ token was not saved, so the consumer can decide how to proceed.
+ """
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'AccountLoginResult':
+ assert isinstance(obj, dict)
+ stored_in_vault = from_bool(obj.get("storedInVault"))
+ return AccountLoginResult(stored_in_vault)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["storedInVault"] = from_bool(self.stored_in_vault)
+ return result
+
+@dataclass
+class AccountLogoutRequest:
+ """User to log out"""
+
+ auth_info: AuthInfo
+ """Authentication information for the user to log out"""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'AccountLogoutRequest':
+ assert isinstance(obj, dict)
+ auth_info = _load_AuthInfo(obj.get("authInfo"))
+ return AccountLogoutRequest(auth_info)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["authInfo"] = (self.auth_info).to_dict()
+ return result
+
+@dataclass
+class AccountLogoutResult:
+ """Logout result indicating if more users remain"""
+
+ has_more_users: bool
+ """Whether other authenticated users remain after logout"""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'AccountLogoutResult':
+ assert isinstance(obj, dict)
+ has_more_users = from_bool(obj.get("hasMoreUsers"))
+ return AccountLogoutResult(has_more_users)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["hasMoreUsers"] = from_bool(self.has_more_users)
+ return result
+
# Experimental: this type is part of an experimental API and may change or be removed.
class AgentDiscoveryPathScope(Enum):
"""Which tier this directory belongs to"""
@@ -422,52 +600,9 @@ def to_dict(self) -> dict:
result["enabled"] = from_bool(self.enabled)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
-@dataclass
-class CopilotUserResponseEndpoints:
- """Schema for the `CopilotUserResponseEndpoints` type."""
-
- api: str | None = None
- origin_tracker: str | None = None
- proxy: str | None = None
- telemetry: str | None = None
-
- @staticmethod
- def from_dict(obj: Any) -> 'CopilotUserResponseEndpoints':
- assert isinstance(obj, dict)
- api = from_union([from_str, from_none], obj.get("api"))
- origin_tracker = from_union([from_str, from_none], obj.get("origin-tracker"))
- proxy = from_union([from_str, from_none], obj.get("proxy"))
- telemetry = from_union([from_str, from_none], obj.get("telemetry"))
- return CopilotUserResponseEndpoints(api, origin_tracker, proxy, telemetry)
-
- def to_dict(self) -> dict:
- result: dict = {}
- if self.api is not None:
- result["api"] = from_union([from_str, from_none], self.api)
- if self.origin_tracker is not None:
- result["origin-tracker"] = from_union([from_str, from_none], self.origin_tracker)
- if self.proxy is not None:
- result["proxy"] = from_union([from_str, from_none], self.proxy)
- if self.telemetry is not None:
- result["telemetry"] = from_union([from_str, from_none], self.telemetry)
- return result
-
class APIKeyAuthInfoType(Enum):
API_KEY = "api-key"
-# Experimental: this type is part of an experimental API and may change or be removed.
-class AuthInfoType(Enum):
- """Authentication type"""
-
- API_KEY = "api-key"
- COPILOT_API_TOKEN = "copilot-api-token"
- ENV = "env"
- GH_CLI = "gh-cli"
- HMAC = "hmac"
- TOKEN = "token"
- USER = "user"
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class CancelUserRequestedShellCommandResult:
@@ -974,7 +1109,6 @@ class Host(Enum):
class CopilotAPITokenAuthInfoType(Enum):
COPILOT_API_TOKEN = "copilot-api-token"
-# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class CopilotUserResponseQuotaSnapshotsChat:
"""Schema for the `CopilotUserResponseQuotaSnapshotsChat` type."""
@@ -1037,7 +1171,6 @@ def to_dict(self) -> dict:
result["unlimited"] = from_union([from_bool, from_none], self.unlimited)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class CopilotUserResponseQuotaSnapshotsCompletions:
"""Schema for the `CopilotUserResponseQuotaSnapshotsCompletions` type."""
@@ -1100,7 +1233,6 @@ def to_dict(self) -> dict:
result["unlimited"] = from_union([from_bool, from_none], self.unlimited)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class CopilotUserResponseQuotaSnapshotsPremiumInteractions:
"""Schema for the `CopilotUserResponseQuotaSnapshotsPremiumInteractions` type."""
@@ -3367,7 +3499,7 @@ class ModelBillingTokenPricesLongContext:
"""Long context tier pricing (available for models with extended context windows)"""
cache_price: float | None = None
- """Deprecated: use cacheReadPrice. AI Credits cost per billing batch of cached tokens"""
+ """Use cacheReadPrice instead. AI Credits cost per billing batch of cached tokens"""
cache_read_price: float | None = None
"""AI Credits cost per billing batch of cached (read) tokens"""
@@ -3376,7 +3508,7 @@ class ModelBillingTokenPricesLongContext:
"""AI Credits cost per billing batch of cache-write (cache creation) tokens."""
context_max: int | None = None
- """Deprecated: use maxPromptTokens. Prompt token budget for the long context tier. The total
+ """Use maxPromptTokens instead. Prompt token budget for the long context tier. The total
context window is this value plus the model's max_output_tokens.
"""
input_price: float | None = None
@@ -4957,6 +5089,27 @@ def to_dict(self) -> dict:
result["sessionId"] = from_str(self.session_id)
return result
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class ProviderAddResult:
+ """The selectable model entries synthesized for the models added by this call."""
+
+ models: list[Any]
+ """Synthesized selectable model entries for the newly added BYOK models, each under its
+ provider-qualified selection id (`provider/id`). Empty when only providers were added.
+ """
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'ProviderAddResult':
+ assert isinstance(obj, dict)
+ models = from_list(lambda x: x, obj.get("models"))
+ return ProviderAddResult(models)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["models"] = from_list(lambda x: x, self.models)
+ return result
+
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class ProviderSessionToken:
@@ -5818,6 +5971,10 @@ class ServerSkill:
user_invocable: bool
"""Whether the skill can be invoked by the user as a slash command"""
+ argument_hint: str | None = None
+ """Optional freeform hint describing the skill's expected arguments, from the
+ `argument-hint` frontmatter field
+ """
path: str | None = None
"""Absolute path to the skill file"""
@@ -5832,9 +5989,10 @@ def from_dict(obj: Any) -> 'ServerSkill':
name = from_str(obj.get("name"))
source = SkillSource(obj.get("source"))
user_invocable = from_bool(obj.get("userInvocable"))
+ argument_hint = from_union([from_str, from_none], obj.get("argumentHint"))
path = from_union([from_str, from_none], obj.get("path"))
project_path = from_union([from_str, from_none], obj.get("projectPath"))
- return ServerSkill(description, enabled, name, source, user_invocable, path, project_path)
+ return ServerSkill(description, enabled, name, source, user_invocable, argument_hint, path, project_path)
def to_dict(self) -> dict:
result: dict = {}
@@ -5843,6 +6001,8 @@ def to_dict(self) -> dict:
result["name"] = from_str(self.name)
result["source"] = to_enum(SkillSource, self.source)
result["userInvocable"] = from_bool(self.user_invocable)
+ if self.argument_hint is not None:
+ result["argumentHint"] = from_union([from_str, from_none], self.argument_hint)
if self.path is not None:
result["path"] = from_union([from_str, from_none], self.path)
if self.project_path is not None:
@@ -7492,6 +7652,10 @@ class Skill:
user_invocable: bool
"""Whether the skill can be invoked by the user as a slash command"""
+ argument_hint: str | None = None
+ """Optional freeform hint describing the skill's expected arguments, from the
+ `argument-hint` frontmatter field
+ """
path: str | None = None
"""Absolute path to the skill file"""
@@ -7506,9 +7670,10 @@ def from_dict(obj: Any) -> 'Skill':
name = from_str(obj.get("name"))
source = SkillSource(obj.get("source"))
user_invocable = from_bool(obj.get("userInvocable"))
+ argument_hint = from_union([from_str, from_none], obj.get("argumentHint"))
path = from_union([from_str, from_none], obj.get("path"))
plugin_name = from_union([from_str, from_none], obj.get("pluginName"))
- return Skill(description, enabled, name, source, user_invocable, path, plugin_name)
+ return Skill(description, enabled, name, source, user_invocable, argument_hint, path, plugin_name)
def to_dict(self) -> dict:
result: dict = {}
@@ -7517,6 +7682,8 @@ def to_dict(self) -> dict:
result["name"] = from_str(self.name)
result["source"] = to_enum(SkillSource, self.source)
result["userInvocable"] = from_bool(self.user_invocable)
+ if self.argument_hint is not None:
+ result["argumentHint"] = from_union([from_str, from_none], self.argument_hint)
if self.path is not None:
result["path"] = from_union([from_str, from_none], self.path)
if self.plugin_name is not None:
@@ -8918,6 +9085,55 @@ def to_dict(self) -> dict:
result["sizeBytes"] = from_int(self.size_bytes)
return result
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class SessionAuthStatus:
+ """Authentication status and account metadata for the session."""
+
+ is_authenticated: bool
+ """Whether the session has resolved authentication"""
+
+ auth_type: AuthInfoType | None = None
+ """Authentication type"""
+
+ copilot_plan: str | None = None
+ """Copilot plan tier (e.g., individual_pro, business)"""
+
+ host: str | None = None
+ """Authentication host URL"""
+
+ login: str | None = None
+ """Authenticated login/username, if available"""
+
+ status_message: str | None = None
+ """Human-readable authentication status description"""
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'SessionAuthStatus':
+ assert isinstance(obj, dict)
+ is_authenticated = from_bool(obj.get("isAuthenticated"))
+ auth_type = from_union([AuthInfoType, from_none], obj.get("authType"))
+ copilot_plan = from_union([from_str, from_none], obj.get("copilotPlan"))
+ host = from_union([from_str, from_none], obj.get("host"))
+ login = from_union([from_str, from_none], obj.get("login"))
+ status_message = from_union([from_str, from_none], obj.get("statusMessage"))
+ return SessionAuthStatus(is_authenticated, auth_type, copilot_plan, host, login, status_message)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["isAuthenticated"] = from_bool(self.is_authenticated)
+ if self.auth_type is not None:
+ result["authType"] = from_union([lambda x: to_enum(AuthInfoType, x), from_none], self.auth_type)
+ if self.copilot_plan is not None:
+ result["copilotPlan"] = from_union([from_str, from_none], self.copilot_plan)
+ if self.host is not None:
+ result["host"] = from_union([from_str, from_none], self.host)
+ if self.login is not None:
+ result["login"] = from_union([from_str, from_none], self.login)
+ if self.status_message is not None:
+ result["statusMessage"] = from_union([from_str, from_none], self.status_message)
+ return result
+
@dataclass
class AccountGetQuotaResult:
"""Quota usage snapshots for the resolved user, keyed by quota type."""
@@ -9075,55 +9291,6 @@ def to_dict(self) -> dict:
result["field"] = from_union([lambda x: to_enum(AgentRegistrySpawnValidationErrorField, x), from_none], self.field)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
-@dataclass
-class SessionAuthStatus:
- """Authentication status and account metadata for the session."""
-
- is_authenticated: bool
- """Whether the session has resolved authentication"""
-
- auth_type: AuthInfoType | None = None
- """Authentication type"""
-
- copilot_plan: str | None = None
- """Copilot plan tier (e.g., individual_pro, business)"""
-
- host: str | None = None
- """Authentication host URL"""
-
- login: str | None = None
- """Authenticated login/username, if available"""
-
- status_message: str | None = None
- """Human-readable authentication status description"""
-
- @staticmethod
- def from_dict(obj: Any) -> 'SessionAuthStatus':
- assert isinstance(obj, dict)
- is_authenticated = from_bool(obj.get("isAuthenticated"))
- auth_type = from_union([AuthInfoType, from_none], obj.get("authType"))
- copilot_plan = from_union([from_str, from_none], obj.get("copilotPlan"))
- host = from_union([from_str, from_none], obj.get("host"))
- login = from_union([from_str, from_none], obj.get("login"))
- status_message = from_union([from_str, from_none], obj.get("statusMessage"))
- return SessionAuthStatus(is_authenticated, auth_type, copilot_plan, host, login, status_message)
-
- def to_dict(self) -> dict:
- result: dict = {}
- result["isAuthenticated"] = from_bool(self.is_authenticated)
- if self.auth_type is not None:
- result["authType"] = from_union([lambda x: to_enum(AuthInfoType, x), from_none], self.auth_type)
- if self.copilot_plan is not None:
- result["copilotPlan"] = from_union([from_str, from_none], self.copilot_plan)
- if self.host is not None:
- result["host"] = from_union([from_str, from_none], self.host)
- if self.login is not None:
- result["login"] = from_union([from_str, from_none], self.login)
- if self.status_message is not None:
- result["statusMessage"] = from_union([from_str, from_none], self.status_message)
- return result
-
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class DiscoveredCanvas:
@@ -9408,7 +9575,6 @@ def to_dict(self) -> dict:
result["canvases"] = from_union([from_bool, from_none], self.canvases)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class CopilotUserResponseQuotaSnapshots:
"""Schema for the `CopilotUserResponseQuotaSnapshotsChat` type.
@@ -11353,7 +11519,7 @@ class ModelBillingTokenPrices:
"""Number of tokens per standard billing batch"""
cache_price: float | None = None
- """Deprecated: use cacheReadPrice. AI Credits cost per billing batch of cached tokens"""
+ """Use cacheReadPrice instead. AI Credits cost per billing batch of cached tokens"""
cache_read_price: float | None = None
"""AI Credits cost per billing batch of cached (read) tokens"""
@@ -11362,8 +11528,8 @@ class ModelBillingTokenPrices:
"""AI Credits cost per billing batch of cache-write (cache creation) tokens."""
context_max: int | None = None
- """Deprecated: use maxPromptTokens. Prompt token budget for the default tier. The total
- context window is this value plus the model's max_output_tokens.
+ """Use maxPromptTokens instead. Prompt token budget for the default tier. The total context
+ window is this value plus the model's max_output_tokens.
"""
input_price: float | None = None
"""AI Credits cost per billing batch of input tokens"""
@@ -15468,7 +15634,6 @@ def to_dict(self) -> dict:
result["capabilities"] = from_union([lambda x: to_class(CanvasHostContextCapabilities, x), from_none], self.capabilities)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class CopilotUserResponse:
"""Snapshot of the authenticated user's Copilot subscription info, if known. Mirrors the
@@ -17803,7 +17968,6 @@ def to_dict(self) -> dict:
result["session"] = from_union([lambda x: to_class(CanvasSessionContext, x), from_none], self.session)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class APIKeyAuthInfo:
"""Schema for the `ApiKeyAuthInfo` type."""
@@ -17840,7 +18004,6 @@ def to_dict(self) -> dict:
result["copilotUser"] = from_union([lambda x: to_class(CopilotUserResponse, x), from_none], self.copilot_user)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class CopilotAPITokenAuthInfo:
"""Schema for the `CopilotApiTokenAuthInfo` type."""
@@ -17874,7 +18037,6 @@ def to_dict(self) -> dict:
result["copilotUser"] = from_union([lambda x: to_class(CopilotUserResponse, x), from_none], self.copilot_user)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class EnvAuthInfo:
"""Schema for the `EnvAuthInfo` type."""
@@ -17924,7 +18086,6 @@ def to_dict(self) -> dict:
result["login"] = from_union([from_str, from_none], self.login)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class GhCLIAuthInfo:
"""Schema for the `GhCliAuthInfo` type."""
@@ -17966,7 +18127,6 @@ def to_dict(self) -> dict:
result["copilotUser"] = from_union([lambda x: to_class(CopilotUserResponse, x), from_none], self.copilot_user)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class HMACAuthInfo:
"""Schema for the `HMACAuthInfo` type."""
@@ -18003,7 +18163,6 @@ def to_dict(self) -> dict:
result["copilotUser"] = from_union([lambda x: to_class(CopilotUserResponse, x), from_none], self.copilot_user)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class TokenAuthInfo:
"""Schema for the `TokenAuthInfo` type."""
@@ -18040,7 +18199,6 @@ def to_dict(self) -> dict:
result["copilotUser"] = from_union([lambda x: to_class(CopilotUserResponse, x), from_none], self.copilot_user)
return result
-# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class UserAuthInfo:
"""Schema for the `UserAuthInfo` type."""
@@ -18775,6 +18933,37 @@ def to_dict(self) -> dict:
result["plugins"] = from_list(lambda x: to_class(InstalledPlugin, x), self.plugins)
return result
+# Experimental: this type is part of an experimental API and may change or be removed.
+@dataclass
+class ProviderAddRequest:
+ """BYOK providers and/or models to add to the session's registry at runtime. Both fields are
+ optional; provide providers, models, or both.
+ """
+ models: list[ProviderModelConfig] | None = None
+ """BYOK model definitions to register. Each must reference a provider that is already
+ registered or included in this same call. Selection ids (`provider/id`) must be unique
+ across the registry.
+ """
+ providers: list[NamedProviderConfig] | None = None
+ """Named BYOK provider connections to register, additive to any providers already in the
+ registry. Each name must be unique across the registry and must not contain '/'.
+ """
+
+ @staticmethod
+ def from_dict(obj: Any) -> 'ProviderAddRequest':
+ assert isinstance(obj, dict)
+ models = from_union([lambda x: from_list(ProviderModelConfig.from_dict, x), from_none], obj.get("models"))
+ providers = from_union([lambda x: from_list(NamedProviderConfig.from_dict, x), from_none], obj.get("providers"))
+ return ProviderAddRequest(models, providers)
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ if self.models is not None:
+ result["models"] = from_union([lambda x: from_list(lambda x: to_class(ProviderModelConfig, x), x), from_none], self.models)
+ if self.providers is not None:
+ result["providers"] = from_union([lambda x: from_list(lambda x: to_class(NamedProviderConfig, x), x), from_none], self.providers)
+ return result
+
# Experimental: this type is part of an experimental API and may change or be removed.
@dataclass
class SessionOpenOptions:
@@ -20560,8 +20749,15 @@ def to_dict(self) -> dict:
class RPC:
abort_request: AbortRequest
abort_result: AbortResult
+ account_all_users: AccountAllUsers
+ account_get_all_users_result: list[AccountAllUsers]
+ account_get_current_auth_result: AccountGetCurrentAuthResult
account_get_quota_request: AccountGetQuotaRequest
account_get_quota_result: AccountGetQuotaResult
+ account_login_request: AccountLoginRequest
+ account_login_result: AccountLoginResult
+ account_logout_request: AccountLogoutRequest
+ account_logout_result: AccountLogoutResult
account_quota_snapshot: AccountQuotaSnapshot
agent_discovery_path: AgentDiscoveryPath
agent_discovery_path_list: AgentDiscoveryPathList
@@ -20983,6 +21179,8 @@ class RPC:
plugin_update_all_result: PluginUpdateAllResult
plugin_update_result: PluginUpdateResult
poll_spawned_sessions_result: PollSpawnedSessionsResult
+ provider_add_request: ProviderAddRequest
+ provider_add_result: ProviderAddResult
provider_config: ProviderConfig
provider_config_azure: ProviderConfigAzure
provider_config_type: ProviderType
@@ -21317,8 +21515,15 @@ def from_dict(obj: Any) -> 'RPC':
assert isinstance(obj, dict)
abort_request = AbortRequest.from_dict(obj.get("AbortRequest"))
abort_result = AbortResult.from_dict(obj.get("AbortResult"))
+ account_all_users = AccountAllUsers.from_dict(obj.get("AccountAllUsers"))
+ account_get_all_users_result = from_list(AccountAllUsers.from_dict, obj.get("AccountGetAllUsersResult"))
+ account_get_current_auth_result = AccountGetCurrentAuthResult.from_dict(obj.get("AccountGetCurrentAuthResult"))
account_get_quota_request = AccountGetQuotaRequest.from_dict(obj.get("AccountGetQuotaRequest"))
account_get_quota_result = AccountGetQuotaResult.from_dict(obj.get("AccountGetQuotaResult"))
+ account_login_request = AccountLoginRequest.from_dict(obj.get("AccountLoginRequest"))
+ account_login_result = AccountLoginResult.from_dict(obj.get("AccountLoginResult"))
+ account_logout_request = AccountLogoutRequest.from_dict(obj.get("AccountLogoutRequest"))
+ account_logout_result = AccountLogoutResult.from_dict(obj.get("AccountLogoutResult"))
account_quota_snapshot = AccountQuotaSnapshot.from_dict(obj.get("AccountQuotaSnapshot"))
agent_discovery_path = AgentDiscoveryPath.from_dict(obj.get("AgentDiscoveryPath"))
agent_discovery_path_list = AgentDiscoveryPathList.from_dict(obj.get("AgentDiscoveryPathList"))
@@ -21740,6 +21945,8 @@ def from_dict(obj: Any) -> 'RPC':
plugin_update_all_result = PluginUpdateAllResult.from_dict(obj.get("PluginUpdateAllResult"))
plugin_update_result = PluginUpdateResult.from_dict(obj.get("PluginUpdateResult"))
poll_spawned_sessions_result = PollSpawnedSessionsResult.from_dict(obj.get("PollSpawnedSessionsResult"))
+ provider_add_request = ProviderAddRequest.from_dict(obj.get("ProviderAddRequest"))
+ provider_add_result = ProviderAddResult.from_dict(obj.get("ProviderAddResult"))
provider_config = ProviderConfig.from_dict(obj.get("ProviderConfig"))
provider_config_azure = ProviderConfigAzure.from_dict(obj.get("ProviderConfigAzure"))
provider_config_type = ProviderType(obj.get("ProviderConfigType"))
@@ -22068,14 +22275,21 @@ def from_dict(obj: Any) -> 'RPC':
subagent_settings = from_union([SubagentSettings.from_dict, from_none], obj.get("SubagentSettings"))
task_progress = from_union([TaskProgress.from_dict, from_none], obj.get("TaskProgress"))
workspace_summary = from_union([WorkspaceSummary.from_dict, from_none], obj.get("WorkspaceSummary"))
- return RPC(abort_request, abort_result, account_get_quota_request, account_get_quota_result, account_quota_snapshot, agent_discovery_path, agent_discovery_path_list, agent_discovery_path_scope, agent_get_current_result, agent_info, agent_info_source, agent_list, agent_registry_live_target_entry, agent_registry_live_target_entry_attention_kind, agent_registry_live_target_entry_kind, agent_registry_live_target_entry_last_terminal_event, agent_registry_live_target_entry_status, agent_registry_log_capture, agent_registry_log_capture_open_error_reason, agent_registry_spawn_error, agent_registry_spawn_permission_mode, agent_registry_spawn_registry_timeout, agent_registry_spawn_request, agent_registry_spawn_result, agent_registry_spawn_spawned, agent_registry_spawn_validation_error, agent_registry_spawn_validation_error_field, agent_registry_spawn_validation_error_reason, agent_reload_result, agents_discover_request, agent_select_request, agent_select_result, agents_get_discovery_paths_request, allow_all_permission_set_result, allow_all_permission_state, api_key_auth_info, auth_info, auth_info_type, cancel_user_requested_shell_command_result, canvas_action, canvas_action_invoke_request, canvas_action_invoke_result, canvas_close_request, canvas_host_context, canvas_host_context_capabilities, canvas_instance_availability, canvas_json_schema, canvas_list, canvas_list_open_result, canvas_open_request, canvas_provider_close_request, canvas_provider_invoke_action_request, canvas_provider_open_request, canvas_provider_open_result, canvas_session_context, command_list, commands_handle_pending_command_request, commands_handle_pending_command_result, commands_invoke_request, commands_list_request, commands_respond_to_queued_command_request, commands_respond_to_queued_command_result, configure_session_extensions_params, connected_remote_session_metadata, connected_remote_session_metadata_kind, connected_remote_session_metadata_repository, connect_remote_session_params, connect_request, connect_result, content_filter_mode, copilot_api_token_auth_info, copilot_user_response, copilot_user_response_endpoints, copilot_user_response_quota_snapshots, copilot_user_response_quota_snapshots_chat, copilot_user_response_quota_snapshots_completions, copilot_user_response_quota_snapshots_premium_interactions, current_model, current_tool_metadata, discovered_canvas, discovered_mcp_server, discovered_mcp_server_type, enqueue_command_params, enqueue_command_result, env_auth_info, event_log_read_request, event_log_release_interest_result, event_log_tail_result, event_log_types, events_agent_scope, events_cursor_status, events_read_result, execute_command_params, execute_command_result, extension, extension_context_push_input, extension_list, extensions_disable_request, extensions_enable_request, extension_source, extension_status, external_tool_result, external_tool_text_result_for_llm, external_tool_text_result_for_llm_binary_results_for_llm, external_tool_text_result_for_llm_binary_results_for_llm_type, external_tool_text_result_for_llm_content, external_tool_text_result_for_llm_content_audio, external_tool_text_result_for_llm_content_image, external_tool_text_result_for_llm_content_resource, external_tool_text_result_for_llm_content_resource_details, external_tool_text_result_for_llm_content_resource_link, external_tool_text_result_for_llm_content_resource_link_icon, external_tool_text_result_for_llm_content_resource_link_icon_theme, external_tool_text_result_for_llm_content_terminal, external_tool_text_result_for_llm_content_text, filter_mapping, fleet_start_request, fleet_start_result, folder_trust_add_params, folder_trust_check_params, folder_trust_check_result, gh_cli_auth_info, handle_pending_tool_call_request, handle_pending_tool_call_result, history_abort_manual_compaction_result, history_cancel_background_compaction_result, history_compact_context_window, history_compact_request, history_compact_result, history_summarize_for_handoff_result, history_truncate_request, history_truncate_result, hmac_auth_info, installed_plugin, installed_plugin_info, installed_plugin_source, installed_plugin_source_git_hub, installed_plugin_source_local, installed_plugin_source_url, instruction_discovery_path, instruction_discovery_path_kind, instruction_discovery_path_list, instruction_discovery_path_location, instructions_discover_request, instructions_get_discovery_paths_request, instructions_get_sources_result, instruction_source, instruction_source_location, instruction_source_type, llm_inference_headers, llm_inference_http_request_chunk_request, llm_inference_http_request_chunk_result, llm_inference_http_request_start_request, llm_inference_http_request_start_result, llm_inference_http_request_start_transport, llm_inference_http_response_chunk_error, llm_inference_http_response_chunk_request, llm_inference_http_response_chunk_result, llm_inference_http_response_start_request, llm_inference_http_response_start_result, llm_inference_set_provider_result, local_session_metadata_value, log_request, log_result, lsp_initialize_request, marketplace_add_result, marketplace_browse_result, marketplace_info, marketplace_list_result, marketplace_plugin_info, marketplace_refresh_entry, marketplace_refresh_result, marketplace_remove_result, mcp_allowed_server, mcp_apps_call_tool_request, mcp_apps_diagnose_capability, mcp_apps_diagnose_request, mcp_apps_diagnose_result, mcp_apps_diagnose_server, mcp_apps_host_context, mcp_apps_host_context_details, mcp_apps_host_context_details_available_display_mode, mcp_apps_host_context_details_display_mode, mcp_apps_host_context_details_platform, mcp_apps_host_context_details_theme, mcp_apps_list_tools_request, mcp_apps_list_tools_result, mcp_apps_read_resource_request, mcp_apps_read_resource_result, mcp_apps_resource_content, mcp_apps_set_host_context_details, mcp_apps_set_host_context_details_available_display_mode, mcp_apps_set_host_context_details_display_mode, mcp_apps_set_host_context_details_platform, mcp_apps_set_host_context_details_theme, mcp_apps_set_host_context_request, mcp_cancel_sampling_execution_params, mcp_cancel_sampling_execution_result, mcp_config_add_request, mcp_config_disable_request, mcp_config_enable_request, mcp_config_list, mcp_config_remove_request, mcp_config_update_request, mcp_configure_git_hub_request, mcp_configure_git_hub_result, mcp_disable_request, mcp_discover_request, mcp_discover_result, mcp_enable_request, mcp_execute_sampling_params, mcp_execute_sampling_request, mcp_execute_sampling_result, mcp_filtered_server, mcp_host_state, mcp_is_server_running_request, mcp_is_server_running_result, mcp_list_tools_request, mcp_list_tools_result, mcp_oauth_handle_pending_request, mcp_oauth_handle_pending_result, mcp_oauth_login_request, mcp_oauth_login_result, mcp_oauth_pending_request_response, mcp_oauth_respond_request, mcp_oauth_respond_result, mcp_register_external_client_request, mcp_reload_with_config_request, mcp_remove_git_hub_result, mcp_restart_server_request, mcp_sampling_execution_action, mcp_sampling_execution_result, mcp_server, mcp_server_auth_config, mcp_server_auth_config_redirect_port, mcp_server_config, mcp_server_config_defer_tools, mcp_server_config_http, mcp_server_config_http_oauth_grant_type, mcp_server_config_http_type, mcp_server_config_stdio, mcp_server_failure_info, mcp_server_list, mcp_server_needs_auth_info, mcp_set_env_value_mode_details, mcp_set_env_value_mode_params, mcp_set_env_value_mode_result, mcp_start_server_request, mcp_start_servers_result, mcp_stop_server_request, mcp_tools, mcp_unregister_external_client_request, memory_configuration, metadata_context_info_request, metadata_context_info_result, metadata_is_processing_result, metadata_recompute_context_tokens_request, metadata_recompute_context_tokens_result, metadata_record_context_change_request, metadata_record_context_change_result, metadata_set_working_directory_request, metadata_set_working_directory_result, metadata_snapshot_current_mode, metadata_snapshot_remote_metadata, metadata_snapshot_remote_metadata_repository, metadata_snapshot_remote_metadata_task_type, model, model_billing, model_billing_token_prices, model_billing_token_prices_long_context, model_capabilities, model_capabilities_limits, model_capabilities_limits_vision, model_capabilities_override, model_capabilities_override_limits, model_capabilities_override_limits_vision, model_capabilities_override_supports, model_capabilities_supports, model_list, model_list_request, model_picker_category, model_picker_price_category, model_policy, model_policy_state, model_set_reasoning_effort_request, model_set_reasoning_effort_result, models_list_request, model_switch_to_request, model_switch_to_result, mode_set_request, named_provider_config, name_get_result, name_set_auto_request, name_set_auto_result, name_set_request, open_canvas_instance, options_update_additional_content_exclusion_policy, options_update_additional_content_exclusion_policy_rule, options_update_additional_content_exclusion_policy_rule_source, options_update_additional_content_exclusion_policy_scope, options_update_context_tier, options_update_env_value_mode, options_update_reasoning_summary, options_update_tool_filter_precedence, pending_permission_request, pending_permission_request_list, permission_decision, permission_decision_approved, permission_decision_approved_for_location, permission_decision_approved_for_session, permission_decision_approve_for_location, permission_decision_approve_for_location_approval, permission_decision_approve_for_location_approval_commands, permission_decision_approve_for_location_approval_custom_tool, permission_decision_approve_for_location_approval_extension_management, permission_decision_approve_for_location_approval_extension_permission_access, permission_decision_approve_for_location_approval_mcp, permission_decision_approve_for_location_approval_mcp_sampling, permission_decision_approve_for_location_approval_memory, permission_decision_approve_for_location_approval_read, permission_decision_approve_for_location_approval_write, permission_decision_approve_for_session, permission_decision_approve_for_session_approval, permission_decision_approve_for_session_approval_commands, permission_decision_approve_for_session_approval_custom_tool, permission_decision_approve_for_session_approval_extension_management, permission_decision_approve_for_session_approval_extension_permission_access, permission_decision_approve_for_session_approval_mcp, permission_decision_approve_for_session_approval_mcp_sampling, permission_decision_approve_for_session_approval_memory, permission_decision_approve_for_session_approval_read, permission_decision_approve_for_session_approval_write, permission_decision_approve_once, permission_decision_approve_permanently, permission_decision_cancelled, permission_decision_denied_by_content_exclusion_policy, permission_decision_denied_by_permission_request_hook, permission_decision_denied_by_rules, permission_decision_denied_interactively_by_user, permission_decision_denied_no_approval_rule_and_could_not_request_from_user, permission_decision_reject, permission_decision_request, permission_decision_user_not_available, permission_location_add_tool_approval_params, permission_location_apply_params, permission_location_apply_result, permission_location_resolve_params, permission_location_resolve_result, permission_location_type, permission_paths_add_params, permission_paths_allowed_check_params, permission_paths_allowed_check_result, permission_paths_config, permission_paths_list, permission_paths_update_primary_params, permission_paths_workspace_check_params, permission_paths_workspace_check_result, permission_prompt_shown_notification, permission_request_result, permission_rules_set, permissions_configure_additional_content_exclusion_policy, permissions_configure_additional_content_exclusion_policy_rule, permissions_configure_additional_content_exclusion_policy_rule_source, permissions_configure_additional_content_exclusion_policy_scope, permissions_configure_params, permissions_configure_result, permissions_folder_trust_add_trusted_result, permissions_get_allow_all_request, permissions_locations_add_tool_approval_details, permissions_locations_add_tool_approval_details_commands, permissions_locations_add_tool_approval_details_custom_tool, permissions_locations_add_tool_approval_details_extension_management, permissions_locations_add_tool_approval_details_extension_permission_access, permissions_locations_add_tool_approval_details_mcp, permissions_locations_add_tool_approval_details_mcp_sampling, permissions_locations_add_tool_approval_details_memory, permissions_locations_add_tool_approval_details_read, permissions_locations_add_tool_approval_details_write, permissions_locations_add_tool_approval_result, permissions_modify_rules_params, permissions_modify_rules_result, permissions_modify_rules_scope, permissions_notify_prompt_shown_result, permissions_paths_add_result, permissions_paths_list_request, permissions_paths_update_primary_result, permissions_pending_requests_request, permissions_reset_session_approvals_request, permissions_reset_session_approvals_result, permissions_set_allow_all_request, permissions_set_allow_all_source, permissions_set_approve_all_request, permissions_set_approve_all_result, permissions_set_approve_all_source, permissions_set_required_request, permissions_set_required_result, permissions_urls_set_unrestricted_mode_result, permission_urls_config, permission_urls_set_unrestricted_mode_params, ping_request, ping_result, plan_read_result, plan_read_sql_todos_result, plan_read_sql_todos_with_dependencies_result, plan_sql_todo_dependency, plan_sql_todos_row, plan_update_request, plugin, plugin_install_result, plugin_list, plugin_list_result, plugins_disable_request, plugins_enable_request, plugins_install_request, plugins_marketplaces_add_request, plugins_marketplaces_browse_request, plugins_marketplaces_refresh_request, plugins_marketplaces_remove_request, plugins_reload_request, plugins_uninstall_request, plugins_update_request, plugin_update_all_entry, plugin_update_all_result, plugin_update_result, poll_spawned_sessions_result, provider_config, provider_config_azure, provider_config_type, provider_config_wire_api, provider_endpoint, provider_endpoint_type, provider_endpoint_wire_api, provider_get_endpoint_request, provider_model_config, provider_session_token, push_attachment, push_attachment_blob, push_attachment_directory, push_attachment_file, push_attachment_file_line_range, push_attachment_git_hub_reference, push_attachment_git_hub_reference_type, push_attachment_selection, push_attachment_selection_details, push_attachment_selection_details_end, push_attachment_selection_details_start, queued_command_handled, queued_command_not_handled, queued_command_result, queue_pending_items, queue_pending_items_kind, queue_pending_items_result, queue_remove_most_recent_result, register_event_interest_params, register_event_interest_result, register_extension_tools_params, register_extension_tools_result, release_event_interest_params, remote_control_config, remote_control_config_existing_mc_session, remote_control_status, remote_control_status_active, remote_control_status_connecting, remote_control_status_error, remote_control_status_off, remote_control_status_result, remote_control_stop_result, remote_control_transfer_result, remote_enable_request, remote_enable_result, remote_notify_steerable_changed_request, remote_notify_steerable_changed_result, remote_session_connection_result, remote_session_metadata_repository, remote_session_metadata_task_type, remote_session_metadata_value, remote_session_mode, remote_session_repository, sandbox_config, sandbox_config_user_policy, sandbox_config_user_policy_experimental, sandbox_config_user_policy_experimental_seatbelt, sandbox_config_user_policy_filesystem, sandbox_config_user_policy_network, schedule_entry, schedule_list, schedule_stop_request, schedule_stop_result, secrets_add_filter_values_request, secrets_add_filter_values_result, send_agent_mode, send_attachments_to_message_params, send_mode, send_request, send_result, server_agent_list, server_instruction_source_list, server_skill, server_skill_list, session_activity, session_auth_status, session_bulk_delete_result, session_capability, session_context, session_context_host_type, session_enrich_metadata_result, session_fs_append_file_request, session_fs_error, session_fs_error_code, session_fs_exists_request, session_fs_exists_result, session_fs_mkdir_request, session_fs_readdir_request, session_fs_readdir_result, session_fs_readdir_with_types_entry, session_fs_readdir_with_types_entry_type, session_fs_readdir_with_types_request, session_fs_readdir_with_types_result, session_fs_read_file_request, session_fs_read_file_result, session_fs_rename_request, session_fs_rm_request, session_fs_set_provider_capabilities, session_fs_set_provider_conventions, session_fs_set_provider_request, session_fs_set_provider_result, session_fs_sqlite_exists_request, session_fs_sqlite_exists_result, session_fs_sqlite_query_request, session_fs_sqlite_query_result, session_fs_sqlite_query_type, session_fs_stat_request, session_fs_stat_result, session_fs_write_file_request, session_installed_plugin, session_installed_plugin_source, session_installed_plugin_source_git_hub, session_installed_plugin_source_local, session_installed_plugin_source_url, session_list, session_list_entry, session_list_filter, session_load_deferred_repo_hooks_result, session_log_level, session_mcp_apps_call_tool_result, session_metadata_snapshot, session_mode, session_model_list, session_open_options, session_open_options_additional_content_exclusion_policy, session_open_options_additional_content_exclusion_policy_rule, session_open_options_additional_content_exclusion_policy_rule_source, session_open_options_additional_content_exclusion_policy_scope, session_open_options_env_value_mode, session_open_options_reasoning_summary, session_open_params, session_open_result, session_prune_result, sessions_bulk_delete_request, sessions_check_in_use_request, sessions_check_in_use_result, sessions_close_request, sessions_close_result, sessions_enrich_metadata_request, session_set_credentials_params, session_set_credentials_result, sessions_find_by_prefix_request, sessions_find_by_prefix_result, sessions_find_by_task_id_request, sessions_find_by_task_id_result, sessions_fork_request, sessions_fork_result, sessions_get_board_entry_count_request, sessions_get_board_entry_count_result, sessions_get_event_file_path_request, sessions_get_event_file_path_result, sessions_get_last_for_context_request, sessions_get_last_for_context_result, sessions_get_persisted_remote_steerable_request, sessions_get_persisted_remote_steerable_result, session_sizes, sessions_list_request, sessions_load_deferred_repo_hooks_request, sessions_open_attach, sessions_open_cloud, sessions_open_create, sessions_open_handoff, sessions_open_handoff_task_type, sessions_open_progress, sessions_open_progress_status, sessions_open_progress_step, sessions_open_remote, sessions_open_resume, sessions_open_resume_last, sessions_open_status, session_source, sessions_poll_spawned_sessions_event, sessions_poll_spawned_sessions_request, sessions_prune_old_request, sessions_register_extension_tools_on_session_options, sessions_release_lock_request, sessions_release_lock_result, sessions_reload_plugin_hooks_request, sessions_reload_plugin_hooks_result, sessions_save_request, sessions_save_result, sessions_set_additional_plugins_request, sessions_set_additional_plugins_result, sessions_set_remote_control_steering_request, sessions_start_remote_control_request, sessions_stop_remote_control_request, sessions_transfer_remote_control_request, session_telemetry_engagement, session_update_options_params, session_update_options_result, session_working_directory_context, session_working_directory_context_host_type, shell_cancel_user_requested_request, shell_exec_request, shell_exec_result, shell_execute_user_requested_request, shell_kill_request, shell_kill_result, shell_kill_signal, shutdown_request, skill, skill_discovery_path, skill_discovery_path_list, skill_discovery_scope, skill_list, skills_config_set_disabled_skills_request, skills_disable_request, skills_discover_request, skills_enable_request, skills_get_discovery_paths_request, skills_get_invoked_result, skills_invoked_skill, skills_load_diagnostics, slash_command_agent_prompt_result, slash_command_completed_result, slash_command_info, slash_command_input, slash_command_input_completion, slash_command_invocation_result, slash_command_kind, slash_command_select_subcommand_option, slash_command_select_subcommand_result, slash_command_text_result, subagent_settings_entry, subagent_settings_entry_context_tier, task_agent_info, task_agent_progress, task_execution_mode, task_info, task_list, task_progress_line, tasks_cancel_request, tasks_cancel_result, tasks_get_current_promotable_result, tasks_get_progress_request, tasks_get_progress_result, task_shell_info, task_shell_info_attachment_mode, task_shell_progress, tasks_promote_current_to_background_result, tasks_promote_to_background_request, tasks_promote_to_background_result, tasks_refresh_result, tasks_remove_request, tasks_remove_result, tasks_send_message_request, tasks_send_message_result, tasks_start_agent_request, tasks_start_agent_result, task_status, tasks_wait_for_pending_result, telemetry_set_feature_overrides_request, token_auth_info, tool, tool_list, tools_get_current_metadata_result, tools_initialize_and_validate_result, tools_list_request, tools_update_subagent_settings_result, ui_auto_mode_switch_response, ui_elicitation_array_any_of_field, ui_elicitation_array_any_of_field_items, ui_elicitation_array_any_of_field_items_any_of, ui_elicitation_array_enum_field, ui_elicitation_array_enum_field_items, ui_elicitation_field_value, ui_elicitation_request, ui_elicitation_response, ui_elicitation_response_action, ui_elicitation_response_content, ui_elicitation_result, ui_elicitation_schema, ui_elicitation_schema_property, ui_elicitation_schema_property_boolean, ui_elicitation_schema_property_number, ui_elicitation_schema_property_number_type, ui_elicitation_schema_property_string, ui_elicitation_schema_property_string_format, ui_elicitation_string_enum_field, ui_elicitation_string_one_of_field, ui_elicitation_string_one_of_field_one_of, ui_ephemeral_query_request, ui_ephemeral_query_result, ui_exit_plan_mode_action, ui_exit_plan_mode_response, ui_handle_pending_auto_mode_switch_request, ui_handle_pending_elicitation_request, ui_handle_pending_exit_plan_mode_request, ui_handle_pending_result, ui_handle_pending_sampling_request, ui_handle_pending_sampling_response, ui_handle_pending_user_input_request, ui_register_direct_auto_mode_switch_handler_result, ui_unregister_direct_auto_mode_switch_handler_request, ui_unregister_direct_auto_mode_switch_handler_result, ui_user_input_response, update_subagent_settings_request, usage_get_metrics_result, usage_metrics_code_changes, usage_metrics_model_metric, usage_metrics_model_metric_requests, usage_metrics_model_metric_token_detail, usage_metrics_model_metric_usage, usage_metrics_token_detail, user_auth_info, user_requested_shell_command_result, workspace_diff_file_change, workspace_diff_file_change_type, workspace_diff_mode, workspace_diff_result, workspaces_checkpoints, workspaces_create_file_request, workspaces_diff_request, workspaces_get_workspace_result, workspaces_list_checkpoints_result, workspaces_list_files_result, workspaces_read_checkpoint_request, workspaces_read_checkpoint_result, workspaces_read_file_request, workspaces_read_file_result, workspaces_save_large_paste_request, workspaces_save_large_paste_result, workspace_summary_host_type, workspaces_workspace_details_host_type, session_context_info, subagent_settings, task_progress, workspace_summary)
+ return RPC(abort_request, abort_result, account_all_users, account_get_all_users_result, account_get_current_auth_result, account_get_quota_request, account_get_quota_result, account_login_request, account_login_result, account_logout_request, account_logout_result, account_quota_snapshot, agent_discovery_path, agent_discovery_path_list, agent_discovery_path_scope, agent_get_current_result, agent_info, agent_info_source, agent_list, agent_registry_live_target_entry, agent_registry_live_target_entry_attention_kind, agent_registry_live_target_entry_kind, agent_registry_live_target_entry_last_terminal_event, agent_registry_live_target_entry_status, agent_registry_log_capture, agent_registry_log_capture_open_error_reason, agent_registry_spawn_error, agent_registry_spawn_permission_mode, agent_registry_spawn_registry_timeout, agent_registry_spawn_request, agent_registry_spawn_result, agent_registry_spawn_spawned, agent_registry_spawn_validation_error, agent_registry_spawn_validation_error_field, agent_registry_spawn_validation_error_reason, agent_reload_result, agents_discover_request, agent_select_request, agent_select_result, agents_get_discovery_paths_request, allow_all_permission_set_result, allow_all_permission_state, api_key_auth_info, auth_info, auth_info_type, cancel_user_requested_shell_command_result, canvas_action, canvas_action_invoke_request, canvas_action_invoke_result, canvas_close_request, canvas_host_context, canvas_host_context_capabilities, canvas_instance_availability, canvas_json_schema, canvas_list, canvas_list_open_result, canvas_open_request, canvas_provider_close_request, canvas_provider_invoke_action_request, canvas_provider_open_request, canvas_provider_open_result, canvas_session_context, command_list, commands_handle_pending_command_request, commands_handle_pending_command_result, commands_invoke_request, commands_list_request, commands_respond_to_queued_command_request, commands_respond_to_queued_command_result, configure_session_extensions_params, connected_remote_session_metadata, connected_remote_session_metadata_kind, connected_remote_session_metadata_repository, connect_remote_session_params, connect_request, connect_result, content_filter_mode, copilot_api_token_auth_info, copilot_user_response, copilot_user_response_endpoints, copilot_user_response_quota_snapshots, copilot_user_response_quota_snapshots_chat, copilot_user_response_quota_snapshots_completions, copilot_user_response_quota_snapshots_premium_interactions, current_model, current_tool_metadata, discovered_canvas, discovered_mcp_server, discovered_mcp_server_type, enqueue_command_params, enqueue_command_result, env_auth_info, event_log_read_request, event_log_release_interest_result, event_log_tail_result, event_log_types, events_agent_scope, events_cursor_status, events_read_result, execute_command_params, execute_command_result, extension, extension_context_push_input, extension_list, extensions_disable_request, extensions_enable_request, extension_source, extension_status, external_tool_result, external_tool_text_result_for_llm, external_tool_text_result_for_llm_binary_results_for_llm, external_tool_text_result_for_llm_binary_results_for_llm_type, external_tool_text_result_for_llm_content, external_tool_text_result_for_llm_content_audio, external_tool_text_result_for_llm_content_image, external_tool_text_result_for_llm_content_resource, external_tool_text_result_for_llm_content_resource_details, external_tool_text_result_for_llm_content_resource_link, external_tool_text_result_for_llm_content_resource_link_icon, external_tool_text_result_for_llm_content_resource_link_icon_theme, external_tool_text_result_for_llm_content_terminal, external_tool_text_result_for_llm_content_text, filter_mapping, fleet_start_request, fleet_start_result, folder_trust_add_params, folder_trust_check_params, folder_trust_check_result, gh_cli_auth_info, handle_pending_tool_call_request, handle_pending_tool_call_result, history_abort_manual_compaction_result, history_cancel_background_compaction_result, history_compact_context_window, history_compact_request, history_compact_result, history_summarize_for_handoff_result, history_truncate_request, history_truncate_result, hmac_auth_info, installed_plugin, installed_plugin_info, installed_plugin_source, installed_plugin_source_git_hub, installed_plugin_source_local, installed_plugin_source_url, instruction_discovery_path, instruction_discovery_path_kind, instruction_discovery_path_list, instruction_discovery_path_location, instructions_discover_request, instructions_get_discovery_paths_request, instructions_get_sources_result, instruction_source, instruction_source_location, instruction_source_type, llm_inference_headers, llm_inference_http_request_chunk_request, llm_inference_http_request_chunk_result, llm_inference_http_request_start_request, llm_inference_http_request_start_result, llm_inference_http_request_start_transport, llm_inference_http_response_chunk_error, llm_inference_http_response_chunk_request, llm_inference_http_response_chunk_result, llm_inference_http_response_start_request, llm_inference_http_response_start_result, llm_inference_set_provider_result, local_session_metadata_value, log_request, log_result, lsp_initialize_request, marketplace_add_result, marketplace_browse_result, marketplace_info, marketplace_list_result, marketplace_plugin_info, marketplace_refresh_entry, marketplace_refresh_result, marketplace_remove_result, mcp_allowed_server, mcp_apps_call_tool_request, mcp_apps_diagnose_capability, mcp_apps_diagnose_request, mcp_apps_diagnose_result, mcp_apps_diagnose_server, mcp_apps_host_context, mcp_apps_host_context_details, mcp_apps_host_context_details_available_display_mode, mcp_apps_host_context_details_display_mode, mcp_apps_host_context_details_platform, mcp_apps_host_context_details_theme, mcp_apps_list_tools_request, mcp_apps_list_tools_result, mcp_apps_read_resource_request, mcp_apps_read_resource_result, mcp_apps_resource_content, mcp_apps_set_host_context_details, mcp_apps_set_host_context_details_available_display_mode, mcp_apps_set_host_context_details_display_mode, mcp_apps_set_host_context_details_platform, mcp_apps_set_host_context_details_theme, mcp_apps_set_host_context_request, mcp_cancel_sampling_execution_params, mcp_cancel_sampling_execution_result, mcp_config_add_request, mcp_config_disable_request, mcp_config_enable_request, mcp_config_list, mcp_config_remove_request, mcp_config_update_request, mcp_configure_git_hub_request, mcp_configure_git_hub_result, mcp_disable_request, mcp_discover_request, mcp_discover_result, mcp_enable_request, mcp_execute_sampling_params, mcp_execute_sampling_request, mcp_execute_sampling_result, mcp_filtered_server, mcp_host_state, mcp_is_server_running_request, mcp_is_server_running_result, mcp_list_tools_request, mcp_list_tools_result, mcp_oauth_handle_pending_request, mcp_oauth_handle_pending_result, mcp_oauth_login_request, mcp_oauth_login_result, mcp_oauth_pending_request_response, mcp_oauth_respond_request, mcp_oauth_respond_result, mcp_register_external_client_request, mcp_reload_with_config_request, mcp_remove_git_hub_result, mcp_restart_server_request, mcp_sampling_execution_action, mcp_sampling_execution_result, mcp_server, mcp_server_auth_config, mcp_server_auth_config_redirect_port, mcp_server_config, mcp_server_config_defer_tools, mcp_server_config_http, mcp_server_config_http_oauth_grant_type, mcp_server_config_http_type, mcp_server_config_stdio, mcp_server_failure_info, mcp_server_list, mcp_server_needs_auth_info, mcp_set_env_value_mode_details, mcp_set_env_value_mode_params, mcp_set_env_value_mode_result, mcp_start_server_request, mcp_start_servers_result, mcp_stop_server_request, mcp_tools, mcp_unregister_external_client_request, memory_configuration, metadata_context_info_request, metadata_context_info_result, metadata_is_processing_result, metadata_recompute_context_tokens_request, metadata_recompute_context_tokens_result, metadata_record_context_change_request, metadata_record_context_change_result, metadata_set_working_directory_request, metadata_set_working_directory_result, metadata_snapshot_current_mode, metadata_snapshot_remote_metadata, metadata_snapshot_remote_metadata_repository, metadata_snapshot_remote_metadata_task_type, model, model_billing, model_billing_token_prices, model_billing_token_prices_long_context, model_capabilities, model_capabilities_limits, model_capabilities_limits_vision, model_capabilities_override, model_capabilities_override_limits, model_capabilities_override_limits_vision, model_capabilities_override_supports, model_capabilities_supports, model_list, model_list_request, model_picker_category, model_picker_price_category, model_policy, model_policy_state, model_set_reasoning_effort_request, model_set_reasoning_effort_result, models_list_request, model_switch_to_request, model_switch_to_result, mode_set_request, named_provider_config, name_get_result, name_set_auto_request, name_set_auto_result, name_set_request, open_canvas_instance, options_update_additional_content_exclusion_policy, options_update_additional_content_exclusion_policy_rule, options_update_additional_content_exclusion_policy_rule_source, options_update_additional_content_exclusion_policy_scope, options_update_context_tier, options_update_env_value_mode, options_update_reasoning_summary, options_update_tool_filter_precedence, pending_permission_request, pending_permission_request_list, permission_decision, permission_decision_approved, permission_decision_approved_for_location, permission_decision_approved_for_session, permission_decision_approve_for_location, permission_decision_approve_for_location_approval, permission_decision_approve_for_location_approval_commands, permission_decision_approve_for_location_approval_custom_tool, permission_decision_approve_for_location_approval_extension_management, permission_decision_approve_for_location_approval_extension_permission_access, permission_decision_approve_for_location_approval_mcp, permission_decision_approve_for_location_approval_mcp_sampling, permission_decision_approve_for_location_approval_memory, permission_decision_approve_for_location_approval_read, permission_decision_approve_for_location_approval_write, permission_decision_approve_for_session, permission_decision_approve_for_session_approval, permission_decision_approve_for_session_approval_commands, permission_decision_approve_for_session_approval_custom_tool, permission_decision_approve_for_session_approval_extension_management, permission_decision_approve_for_session_approval_extension_permission_access, permission_decision_approve_for_session_approval_mcp, permission_decision_approve_for_session_approval_mcp_sampling, permission_decision_approve_for_session_approval_memory, permission_decision_approve_for_session_approval_read, permission_decision_approve_for_session_approval_write, permission_decision_approve_once, permission_decision_approve_permanently, permission_decision_cancelled, permission_decision_denied_by_content_exclusion_policy, permission_decision_denied_by_permission_request_hook, permission_decision_denied_by_rules, permission_decision_denied_interactively_by_user, permission_decision_denied_no_approval_rule_and_could_not_request_from_user, permission_decision_reject, permission_decision_request, permission_decision_user_not_available, permission_location_add_tool_approval_params, permission_location_apply_params, permission_location_apply_result, permission_location_resolve_params, permission_location_resolve_result, permission_location_type, permission_paths_add_params, permission_paths_allowed_check_params, permission_paths_allowed_check_result, permission_paths_config, permission_paths_list, permission_paths_update_primary_params, permission_paths_workspace_check_params, permission_paths_workspace_check_result, permission_prompt_shown_notification, permission_request_result, permission_rules_set, permissions_configure_additional_content_exclusion_policy, permissions_configure_additional_content_exclusion_policy_rule, permissions_configure_additional_content_exclusion_policy_rule_source, permissions_configure_additional_content_exclusion_policy_scope, permissions_configure_params, permissions_configure_result, permissions_folder_trust_add_trusted_result, permissions_get_allow_all_request, permissions_locations_add_tool_approval_details, permissions_locations_add_tool_approval_details_commands, permissions_locations_add_tool_approval_details_custom_tool, permissions_locations_add_tool_approval_details_extension_management, permissions_locations_add_tool_approval_details_extension_permission_access, permissions_locations_add_tool_approval_details_mcp, permissions_locations_add_tool_approval_details_mcp_sampling, permissions_locations_add_tool_approval_details_memory, permissions_locations_add_tool_approval_details_read, permissions_locations_add_tool_approval_details_write, permissions_locations_add_tool_approval_result, permissions_modify_rules_params, permissions_modify_rules_result, permissions_modify_rules_scope, permissions_notify_prompt_shown_result, permissions_paths_add_result, permissions_paths_list_request, permissions_paths_update_primary_result, permissions_pending_requests_request, permissions_reset_session_approvals_request, permissions_reset_session_approvals_result, permissions_set_allow_all_request, permissions_set_allow_all_source, permissions_set_approve_all_request, permissions_set_approve_all_result, permissions_set_approve_all_source, permissions_set_required_request, permissions_set_required_result, permissions_urls_set_unrestricted_mode_result, permission_urls_config, permission_urls_set_unrestricted_mode_params, ping_request, ping_result, plan_read_result, plan_read_sql_todos_result, plan_read_sql_todos_with_dependencies_result, plan_sql_todo_dependency, plan_sql_todos_row, plan_update_request, plugin, plugin_install_result, plugin_list, plugin_list_result, plugins_disable_request, plugins_enable_request, plugins_install_request, plugins_marketplaces_add_request, plugins_marketplaces_browse_request, plugins_marketplaces_refresh_request, plugins_marketplaces_remove_request, plugins_reload_request, plugins_uninstall_request, plugins_update_request, plugin_update_all_entry, plugin_update_all_result, plugin_update_result, poll_spawned_sessions_result, provider_add_request, provider_add_result, provider_config, provider_config_azure, provider_config_type, provider_config_wire_api, provider_endpoint, provider_endpoint_type, provider_endpoint_wire_api, provider_get_endpoint_request, provider_model_config, provider_session_token, push_attachment, push_attachment_blob, push_attachment_directory, push_attachment_file, push_attachment_file_line_range, push_attachment_git_hub_reference, push_attachment_git_hub_reference_type, push_attachment_selection, push_attachment_selection_details, push_attachment_selection_details_end, push_attachment_selection_details_start, queued_command_handled, queued_command_not_handled, queued_command_result, queue_pending_items, queue_pending_items_kind, queue_pending_items_result, queue_remove_most_recent_result, register_event_interest_params, register_event_interest_result, register_extension_tools_params, register_extension_tools_result, release_event_interest_params, remote_control_config, remote_control_config_existing_mc_session, remote_control_status, remote_control_status_active, remote_control_status_connecting, remote_control_status_error, remote_control_status_off, remote_control_status_result, remote_control_stop_result, remote_control_transfer_result, remote_enable_request, remote_enable_result, remote_notify_steerable_changed_request, remote_notify_steerable_changed_result, remote_session_connection_result, remote_session_metadata_repository, remote_session_metadata_task_type, remote_session_metadata_value, remote_session_mode, remote_session_repository, sandbox_config, sandbox_config_user_policy, sandbox_config_user_policy_experimental, sandbox_config_user_policy_experimental_seatbelt, sandbox_config_user_policy_filesystem, sandbox_config_user_policy_network, schedule_entry, schedule_list, schedule_stop_request, schedule_stop_result, secrets_add_filter_values_request, secrets_add_filter_values_result, send_agent_mode, send_attachments_to_message_params, send_mode, send_request, send_result, server_agent_list, server_instruction_source_list, server_skill, server_skill_list, session_activity, session_auth_status, session_bulk_delete_result, session_capability, session_context, session_context_host_type, session_enrich_metadata_result, session_fs_append_file_request, session_fs_error, session_fs_error_code, session_fs_exists_request, session_fs_exists_result, session_fs_mkdir_request, session_fs_readdir_request, session_fs_readdir_result, session_fs_readdir_with_types_entry, session_fs_readdir_with_types_entry_type, session_fs_readdir_with_types_request, session_fs_readdir_with_types_result, session_fs_read_file_request, session_fs_read_file_result, session_fs_rename_request, session_fs_rm_request, session_fs_set_provider_capabilities, session_fs_set_provider_conventions, session_fs_set_provider_request, session_fs_set_provider_result, session_fs_sqlite_exists_request, session_fs_sqlite_exists_result, session_fs_sqlite_query_request, session_fs_sqlite_query_result, session_fs_sqlite_query_type, session_fs_stat_request, session_fs_stat_result, session_fs_write_file_request, session_installed_plugin, session_installed_plugin_source, session_installed_plugin_source_git_hub, session_installed_plugin_source_local, session_installed_plugin_source_url, session_list, session_list_entry, session_list_filter, session_load_deferred_repo_hooks_result, session_log_level, session_mcp_apps_call_tool_result, session_metadata_snapshot, session_mode, session_model_list, session_open_options, session_open_options_additional_content_exclusion_policy, session_open_options_additional_content_exclusion_policy_rule, session_open_options_additional_content_exclusion_policy_rule_source, session_open_options_additional_content_exclusion_policy_scope, session_open_options_env_value_mode, session_open_options_reasoning_summary, session_open_params, session_open_result, session_prune_result, sessions_bulk_delete_request, sessions_check_in_use_request, sessions_check_in_use_result, sessions_close_request, sessions_close_result, sessions_enrich_metadata_request, session_set_credentials_params, session_set_credentials_result, sessions_find_by_prefix_request, sessions_find_by_prefix_result, sessions_find_by_task_id_request, sessions_find_by_task_id_result, sessions_fork_request, sessions_fork_result, sessions_get_board_entry_count_request, sessions_get_board_entry_count_result, sessions_get_event_file_path_request, sessions_get_event_file_path_result, sessions_get_last_for_context_request, sessions_get_last_for_context_result, sessions_get_persisted_remote_steerable_request, sessions_get_persisted_remote_steerable_result, session_sizes, sessions_list_request, sessions_load_deferred_repo_hooks_request, sessions_open_attach, sessions_open_cloud, sessions_open_create, sessions_open_handoff, sessions_open_handoff_task_type, sessions_open_progress, sessions_open_progress_status, sessions_open_progress_step, sessions_open_remote, sessions_open_resume, sessions_open_resume_last, sessions_open_status, session_source, sessions_poll_spawned_sessions_event, sessions_poll_spawned_sessions_request, sessions_prune_old_request, sessions_register_extension_tools_on_session_options, sessions_release_lock_request, sessions_release_lock_result, sessions_reload_plugin_hooks_request, sessions_reload_plugin_hooks_result, sessions_save_request, sessions_save_result, sessions_set_additional_plugins_request, sessions_set_additional_plugins_result, sessions_set_remote_control_steering_request, sessions_start_remote_control_request, sessions_stop_remote_control_request, sessions_transfer_remote_control_request, session_telemetry_engagement, session_update_options_params, session_update_options_result, session_working_directory_context, session_working_directory_context_host_type, shell_cancel_user_requested_request, shell_exec_request, shell_exec_result, shell_execute_user_requested_request, shell_kill_request, shell_kill_result, shell_kill_signal, shutdown_request, skill, skill_discovery_path, skill_discovery_path_list, skill_discovery_scope, skill_list, skills_config_set_disabled_skills_request, skills_disable_request, skills_discover_request, skills_enable_request, skills_get_discovery_paths_request, skills_get_invoked_result, skills_invoked_skill, skills_load_diagnostics, slash_command_agent_prompt_result, slash_command_completed_result, slash_command_info, slash_command_input, slash_command_input_completion, slash_command_invocation_result, slash_command_kind, slash_command_select_subcommand_option, slash_command_select_subcommand_result, slash_command_text_result, subagent_settings_entry, subagent_settings_entry_context_tier, task_agent_info, task_agent_progress, task_execution_mode, task_info, task_list, task_progress_line, tasks_cancel_request, tasks_cancel_result, tasks_get_current_promotable_result, tasks_get_progress_request, tasks_get_progress_result, task_shell_info, task_shell_info_attachment_mode, task_shell_progress, tasks_promote_current_to_background_result, tasks_promote_to_background_request, tasks_promote_to_background_result, tasks_refresh_result, tasks_remove_request, tasks_remove_result, tasks_send_message_request, tasks_send_message_result, tasks_start_agent_request, tasks_start_agent_result, task_status, tasks_wait_for_pending_result, telemetry_set_feature_overrides_request, token_auth_info, tool, tool_list, tools_get_current_metadata_result, tools_initialize_and_validate_result, tools_list_request, tools_update_subagent_settings_result, ui_auto_mode_switch_response, ui_elicitation_array_any_of_field, ui_elicitation_array_any_of_field_items, ui_elicitation_array_any_of_field_items_any_of, ui_elicitation_array_enum_field, ui_elicitation_array_enum_field_items, ui_elicitation_field_value, ui_elicitation_request, ui_elicitation_response, ui_elicitation_response_action, ui_elicitation_response_content, ui_elicitation_result, ui_elicitation_schema, ui_elicitation_schema_property, ui_elicitation_schema_property_boolean, ui_elicitation_schema_property_number, ui_elicitation_schema_property_number_type, ui_elicitation_schema_property_string, ui_elicitation_schema_property_string_format, ui_elicitation_string_enum_field, ui_elicitation_string_one_of_field, ui_elicitation_string_one_of_field_one_of, ui_ephemeral_query_request, ui_ephemeral_query_result, ui_exit_plan_mode_action, ui_exit_plan_mode_response, ui_handle_pending_auto_mode_switch_request, ui_handle_pending_elicitation_request, ui_handle_pending_exit_plan_mode_request, ui_handle_pending_result, ui_handle_pending_sampling_request, ui_handle_pending_sampling_response, ui_handle_pending_user_input_request, ui_register_direct_auto_mode_switch_handler_result, ui_unregister_direct_auto_mode_switch_handler_request, ui_unregister_direct_auto_mode_switch_handler_result, ui_user_input_response, update_subagent_settings_request, usage_get_metrics_result, usage_metrics_code_changes, usage_metrics_model_metric, usage_metrics_model_metric_requests, usage_metrics_model_metric_token_detail, usage_metrics_model_metric_usage, usage_metrics_token_detail, user_auth_info, user_requested_shell_command_result, workspace_diff_file_change, workspace_diff_file_change_type, workspace_diff_mode, workspace_diff_result, workspaces_checkpoints, workspaces_create_file_request, workspaces_diff_request, workspaces_get_workspace_result, workspaces_list_checkpoints_result, workspaces_list_files_result, workspaces_read_checkpoint_request, workspaces_read_checkpoint_result, workspaces_read_file_request, workspaces_read_file_result, workspaces_save_large_paste_request, workspaces_save_large_paste_result, workspace_summary_host_type, workspaces_workspace_details_host_type, session_context_info, subagent_settings, task_progress, workspace_summary)
def to_dict(self) -> dict:
result: dict = {}
result["AbortRequest"] = to_class(AbortRequest, self.abort_request)
result["AbortResult"] = to_class(AbortResult, self.abort_result)
+ result["AccountAllUsers"] = to_class(AccountAllUsers, self.account_all_users)
+ result["AccountGetAllUsersResult"] = from_list(lambda x: to_class(AccountAllUsers, x), self.account_get_all_users_result)
+ result["AccountGetCurrentAuthResult"] = to_class(AccountGetCurrentAuthResult, self.account_get_current_auth_result)
result["AccountGetQuotaRequest"] = to_class(AccountGetQuotaRequest, self.account_get_quota_request)
result["AccountGetQuotaResult"] = to_class(AccountGetQuotaResult, self.account_get_quota_result)
+ result["AccountLoginRequest"] = to_class(AccountLoginRequest, self.account_login_request)
+ result["AccountLoginResult"] = to_class(AccountLoginResult, self.account_login_result)
+ result["AccountLogoutRequest"] = to_class(AccountLogoutRequest, self.account_logout_request)
+ result["AccountLogoutResult"] = to_class(AccountLogoutResult, self.account_logout_result)
result["AccountQuotaSnapshot"] = to_class(AccountQuotaSnapshot, self.account_quota_snapshot)
result["AgentDiscoveryPath"] = to_class(AgentDiscoveryPath, self.agent_discovery_path)
result["AgentDiscoveryPathList"] = to_class(AgentDiscoveryPathList, self.agent_discovery_path_list)
@@ -22497,6 +22711,8 @@ def to_dict(self) -> dict:
result["PluginUpdateAllResult"] = to_class(PluginUpdateAllResult, self.plugin_update_all_result)
result["PluginUpdateResult"] = to_class(PluginUpdateResult, self.plugin_update_result)
result["PollSpawnedSessionsResult"] = to_class(PollSpawnedSessionsResult, self.poll_spawned_sessions_result)
+ result["ProviderAddRequest"] = to_class(ProviderAddRequest, self.provider_add_request)
+ result["ProviderAddResult"] = to_class(ProviderAddResult, self.provider_add_result)
result["ProviderConfig"] = to_class(ProviderConfig, self.provider_config)
result["ProviderConfigAzure"] = to_class(ProviderConfigAzure, self.provider_config_azure)
result["ProviderConfigType"] = to_enum(ProviderType, self.provider_config_type)
@@ -23046,6 +23262,7 @@ def _load_TaskInfo(obj: Any) -> "TaskInfo":
case _: raise ValueError(f"Unknown TaskInfo type: {kind!r}")
+AccountGetAllUsersResult = list
CanvasActionInvokeResult = Any
CanvasJsonSchema = Any
ExternalToolResult = ExternalToolTextResultForLlm
@@ -23146,6 +23363,24 @@ async def get_quota(self, params: AccountGetQuotaRequest, *, timeout: float | No
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)))
+ async def get_current_auth(self, *, timeout: float | None = None) -> AccountGetCurrentAuthResult:
+ "Gets the currently active authentication credentials from the global auth manager.\n\nReturns:\n Current authentication state"
+ return AccountGetCurrentAuthResult.from_dict(await self._client.request("account.getCurrentAuth", {}, **_timeout_kwargs(timeout)))
+
+ async def get_all_users(self, *, timeout: float | None = None) -> list:
+ "Gets all authenticated users available for account switching.\n\nReturns:\n List of all authenticated users"
+ return list(await self._client.request("account.getAllUsers", {}, **_timeout_kwargs(timeout)))
+
+ async def login(self, params: AccountLoginRequest, *, timeout: float | None = None) -> AccountLoginResult:
+ "Stores authentication credentials after successful login (e.g., device code flow).\n\nArgs:\n params: Credentials to store after successful authentication\n\nReturns:\n Result of a successful login; throws on failure"
+ params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
+ return AccountLoginResult.from_dict(await self._client.request("account.login", params_dict, **_timeout_kwargs(timeout)))
+
+ async def logout(self, params: AccountLogoutRequest, *, timeout: float | None = None) -> AccountLogoutResult:
+ "Removes user authentication from keychain and persisted state.\n\nArgs:\n params: User to log out\n\nReturns:\n Logout result indicating if more users remain"
+ params_dict = {k: v for k, v in params.to_dict().items() if v is not None}
+ return AccountLogoutResult.from_dict(await self._client.request("account.logout", params_dict, **_timeout_kwargs(timeout)))
+
class ServerSecretsApi:
def __init__(self, client: "JsonRpcClient"):
@@ -24106,6 +24341,12 @@ async def get_endpoint(self, params: ProviderGetEndpointRequest | None = None, *
params_dict["sessionId"] = self._session_id
return ProviderEndpoint.from_dict(await self._client.request("session.provider.getEndpoint", params_dict, **_timeout_kwargs(timeout)))
+ async def add(self, params: ProviderAddRequest, *, timeout: float | None = None) -> ProviderAddResult:
+ "Adds BYOK providers and/or models to the session's registry at runtime, extending the additive registry built from the session's `providers`/`models` options. Both fields are optional, so a call may add providers only, models only, or both. Within a single call providers are registered before models, so a model may reference a provider added in the same call; across calls a model may reference any provider already registered (from session creation or a prior add). A model whose referenced provider is not registered by the end of the call is rejected. Newly added models become selectable via `model.list` / `model.switchTo` and are inherited by sub-agents spawned afterwards.\n\nArgs:\n params: BYOK providers and/or models to add to the session's registry at runtime. Both fields are optional; provide providers, models, or both.\n\nReturns:\n The selectable model entries synthesized for the models added by this call."
+ 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 ProviderAddResult.from_dict(await self._client.request("session.provider.add", params_dict, **_timeout_kwargs(timeout)))
+
# Experimental: this API group is experimental and may change or be removed.
class OptionsApi:
@@ -24976,8 +25217,15 @@ async def handle_canvas_action_invoke(params: dict) -> dict | None:
"APIKeyAuthInfoType",
"AbortRequest",
"AbortResult",
+ "AccountAllUsers",
+ "AccountGetAllUsersResult",
+ "AccountGetCurrentAuthResult",
"AccountGetQuotaRequest",
"AccountGetQuotaResult",
+ "AccountLoginRequest",
+ "AccountLoginResult",
+ "AccountLogoutRequest",
+ "AccountLogoutResult",
"AccountQuotaSnapshot",
"AdditionalContentExclusionPolicyScope",
"AgentApi",
@@ -25475,6 +25723,8 @@ async def handle_canvas_action_invoke(params: dict) -> dict | None:
"PluginsUninstallRequest",
"PluginsUpdateRequest",
"PollSpawnedSessionsResult",
+ "ProviderAddRequest",
+ "ProviderAddResult",
"ProviderApi",
"ProviderConfig",
"ProviderConfigAzure",
diff --git a/python/copilot/generated/session_events.py b/python/copilot/generated/session_events.py
index 14da3d634..cb4851ec3 100644
--- a/python/copilot/generated/session_events.py
+++ b/python/copilot/generated/session_events.py
@@ -2798,6 +2798,7 @@ class ModelCallFailureData:
initiator: str | None = None
model: str | None = None
provider_call_id: str | None = None
+ request_fingerprint: ModelCallFailureRequestFingerprint | None = None
service_request_id: str | None = None
status_code: int | None = None
@@ -2814,6 +2815,7 @@ def from_dict(obj: Any) -> "ModelCallFailureData":
initiator = from_union([from_none, from_str], obj.get("initiator"))
model = from_union([from_none, from_str], obj.get("model"))
provider_call_id = from_union([from_none, from_str], obj.get("providerCallId"))
+ request_fingerprint = from_union([from_none, ModelCallFailureRequestFingerprint.from_dict], obj.get("requestFingerprint"))
service_request_id = from_union([from_none, from_str], obj.get("serviceRequestId"))
status_code = from_union([from_none, from_int], obj.get("statusCode"))
return ModelCallFailureData(
@@ -2827,6 +2829,7 @@ def from_dict(obj: Any) -> "ModelCallFailureData":
initiator=initiator,
model=model,
provider_call_id=provider_call_id,
+ request_fingerprint=request_fingerprint,
service_request_id=service_request_id,
status_code=status_code,
)
@@ -2852,6 +2855,8 @@ def to_dict(self) -> dict:
result["model"] = from_union([from_none, from_str], self.model)
if self.provider_call_id is not None:
result["providerCallId"] = from_union([from_none, from_str], self.provider_call_id)
+ if self.request_fingerprint is not None:
+ result["requestFingerprint"] = from_union([from_none, lambda x: to_class(ModelCallFailureRequestFingerprint, x)], self.request_fingerprint)
if self.service_request_id is not None:
result["serviceRequestId"] = from_union([from_none, from_str], self.service_request_id)
if self.status_code is not None:
@@ -2859,6 +2864,50 @@ def to_dict(self) -> dict:
return result
+@dataclass
+class ModelCallFailureRequestFingerprint:
+ "Content-free structural summary of the failing request for diagnosing malformed 4xx calls"
+ image_part_count: int
+ image_parts_missing_media_type: int
+ message_count: int
+ nameless_tool_call_count: int
+ tool_call_count: int
+ tool_result_message_count: int
+ last_message_role: str | None = None
+
+ @staticmethod
+ def from_dict(obj: Any) -> "ModelCallFailureRequestFingerprint":
+ assert isinstance(obj, dict)
+ image_part_count = from_int(obj.get("imagePartCount"))
+ image_parts_missing_media_type = from_int(obj.get("imagePartsMissingMediaType"))
+ message_count = from_int(obj.get("messageCount"))
+ nameless_tool_call_count = from_int(obj.get("namelessToolCallCount"))
+ tool_call_count = from_int(obj.get("toolCallCount"))
+ tool_result_message_count = from_int(obj.get("toolResultMessageCount"))
+ last_message_role = from_union([from_none, from_str], obj.get("lastMessageRole"))
+ return ModelCallFailureRequestFingerprint(
+ image_part_count=image_part_count,
+ image_parts_missing_media_type=image_parts_missing_media_type,
+ message_count=message_count,
+ nameless_tool_call_count=nameless_tool_call_count,
+ tool_call_count=tool_call_count,
+ tool_result_message_count=tool_result_message_count,
+ last_message_role=last_message_role,
+ )
+
+ def to_dict(self) -> dict:
+ result: dict = {}
+ result["imagePartCount"] = to_int(self.image_part_count)
+ result["imagePartsMissingMediaType"] = to_int(self.image_parts_missing_media_type)
+ result["messageCount"] = to_int(self.message_count)
+ result["namelessToolCallCount"] = to_int(self.nameless_tool_call_count)
+ result["toolCallCount"] = to_int(self.tool_call_count)
+ result["toolResultMessageCount"] = to_int(self.tool_result_message_count)
+ if self.last_message_role is not None:
+ result["lastMessageRole"] = from_union([from_none, from_str], self.last_message_role)
+ return result
+
+
@dataclass
class PendingMessagesModifiedData:
"Empty payload; the event signals that the pending message queue has changed"
@@ -5681,6 +5730,7 @@ class SkillsLoadedSkill:
name: str
source: SkillSource
user_invocable: bool
+ argument_hint: str | None = None
path: str | None = None
@staticmethod
@@ -5691,6 +5741,7 @@ def from_dict(obj: Any) -> "SkillsLoadedSkill":
name = from_str(obj.get("name"))
source = parse_enum(SkillSource, obj.get("source"))
user_invocable = from_bool(obj.get("userInvocable"))
+ argument_hint = from_union([from_none, from_str], obj.get("argumentHint"))
path = from_union([from_none, from_str], obj.get("path"))
return SkillsLoadedSkill(
description=description,
@@ -5698,6 +5749,7 @@ def from_dict(obj: Any) -> "SkillsLoadedSkill":
name=name,
source=source,
user_invocable=user_invocable,
+ argument_hint=argument_hint,
path=path,
)
@@ -5708,6 +5760,8 @@ def to_dict(self) -> dict:
result["name"] = from_str(self.name)
result["source"] = to_enum(SkillSource, self.source)
result["userInvocable"] = from_bool(self.user_invocable)
+ if self.argument_hint is not None:
+ result["argumentHint"] = from_union([from_none, from_str], self.argument_hint)
if self.path is not None:
result["path"] = from_union([from_none, from_str], self.path)
return result
@@ -8191,6 +8245,7 @@ def session_event_to_dict(x: SessionEvent) -> Any:
"McpServersLoadedServer",
"ModelCallFailureBadRequestKind",
"ModelCallFailureData",
+ "ModelCallFailureRequestFingerprint",
"ModelCallFailureSource",
"OmittedBinaryOmittedReason",
"OmittedBinaryResult",
diff --git a/rust/src/generated/api_types.rs b/rust/src/generated/api_types.rs
index e9bd5ed86..522222b32 100644
--- a/rust/src/generated/api_types.rs
+++ b/rust/src/generated/api_types.rs
@@ -27,6 +27,14 @@ pub mod rpc_methods {
pub const TOOLS_LIST: &str = "tools.list";
/// `account.getQuota`
pub const ACCOUNT_GETQUOTA: &str = "account.getQuota";
+ /// `account.getCurrentAuth`
+ pub const ACCOUNT_GETCURRENTAUTH: &str = "account.getCurrentAuth";
+ /// `account.getAllUsers`
+ pub const ACCOUNT_GETALLUSERS: &str = "account.getAllUsers";
+ /// `account.login`
+ pub const ACCOUNT_LOGIN: &str = "account.login";
+ /// `account.logout`
+ pub const ACCOUNT_LOGOUT: &str = "account.logout";
/// `secrets.addFilterValues`
pub const SECRETS_ADDFILTERVALUES: &str = "secrets.addFilterValues";
/// `mcp.config.list`
@@ -331,6 +339,8 @@ pub mod rpc_methods {
pub const SESSION_PLUGINS_RELOAD: &str = "session.plugins.reload";
/// `session.provider.getEndpoint`
pub const SESSION_PROVIDER_GETENDPOINT: &str = "session.provider.getEndpoint";
+ /// `session.provider.add`
+ pub const SESSION_PROVIDER_ADD: &str = "session.provider.add";
/// `session.options.update`
pub const SESSION_OPTIONS_UPDATE: &str = "session.options.update";
/// `session.lsp.initialize`
@@ -571,6 +581,29 @@ pub struct AbortResult {
pub success: bool,
}
+/// Schema for the `AccountAllUsers` type.
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct AccountAllUsers {
+ /// Authentication information for this user
+ pub auth_info: serde_json::Value,
+ /// Associated token, if available
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub token: Option,
+}
+
+/// Current authentication state
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct AccountGetCurrentAuthResult {
+ /// Authentication errors from the last auth attempt, if any
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub auth_errors: Option>,
+ /// Current authentication information, if authenticated
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub auth_info: Option,
+}
+
/// Optional GitHub token used to look up quota for a specific user instead of the global auth context.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
@@ -611,6 +644,42 @@ pub struct AccountGetQuotaResult {
pub quota_snapshots: HashMap,
}
+/// Credentials to store after successful authentication
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct AccountLoginRequest {
+ /// GitHub host URL
+ pub host: String,
+ /// User login/username
+ pub login: String,
+ /// GitHub authentication token
+ pub token: String,
+}
+
+/// Result of a successful login; throws on failure
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct AccountLoginResult {
+ /// Whether the credential was persisted to a secure store (system keychain, or the config file when plaintext storage is enabled). False when no secure store was available and the token was not saved, so the consumer can decide how to proceed.
+ pub stored_in_vault: bool,
+}
+
+/// User to log out
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct AccountLogoutRequest {
+ /// Authentication information for the user to log out
+ pub auth_info: serde_json::Value,
+}
+
+/// Logout result indicating if more users remain
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct AccountLogoutResult {
+ /// Whether other authenticated users remain after logout
+ pub has_more_users: bool,
+}
+
/// Schema for the `AgentDiscoveryPath` type.
///
///
@@ -1045,13 +1114,6 @@ pub struct AllowAllPermissionState {
}
/// Schema for the `CopilotUserResponseEndpoints` type.
-///
-///
-///
-/// **Experimental.** This type is part of an experimental wire-protocol surface
-/// and may change or be removed in future SDK or CLI releases.
-///
-///
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CopilotUserResponseEndpoints {
@@ -1066,13 +1128,6 @@ pub struct CopilotUserResponseEndpoints {
}
/// Schema for the `CopilotUserResponseQuotaSnapshotsChat` type.
-///
-///
-///
-/// **Experimental.** This type is part of an experimental wire-protocol surface
-/// and may change or be removed in future SDK or CLI releases.
-///
-///
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CopilotUserResponseQuotaSnapshotsChat {
@@ -1106,13 +1161,6 @@ pub struct CopilotUserResponseQuotaSnapshotsChat {
}
/// Schema for the `CopilotUserResponseQuotaSnapshotsCompletions` type.
-///
-///
-///
-/// **Experimental.** This type is part of an experimental wire-protocol surface
-/// and may change or be removed in future SDK or CLI releases.
-///
-///
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CopilotUserResponseQuotaSnapshotsCompletions {
@@ -1146,13 +1194,6 @@ pub struct CopilotUserResponseQuotaSnapshotsCompletions {
}
/// Schema for the `CopilotUserResponseQuotaSnapshotsPremiumInteractions` type.
-///
-///
-///
-/// **Experimental.** This type is part of an experimental wire-protocol surface
-/// and may change or be removed in future SDK or CLI releases.
-///
-///
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CopilotUserResponseQuotaSnapshotsPremiumInteractions {
@@ -1186,13 +1227,6 @@ pub struct CopilotUserResponseQuotaSnapshotsPremiumInteractions {
}
/// Schema for the `CopilotUserResponseQuotaSnapshots` type.
-///
-///
-///
-/// **Experimental.** This type is part of an experimental wire-protocol surface
-/// and may change or be removed in future SDK or CLI releases.
-///
-///
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CopilotUserResponseQuotaSnapshots {
@@ -1211,13 +1245,6 @@ pub struct CopilotUserResponseQuotaSnapshots {
}
/// Snapshot of the authenticated user's Copilot subscription info, if known. Mirrors the GitHub API `/copilot_internal/v2/token` user response shape — the runtime trusts this verbatim and does not re-fetch when set.
-///
-///
-///
-/// **Experimental.** This type is part of an experimental wire-protocol surface
-/// and may change or be removed in future SDK or CLI releases.
-///
-///
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CopilotUserResponse {
@@ -1312,13 +1339,6 @@ pub struct CopilotUserResponse {
}
/// Schema for the `ApiKeyAuthInfo` type.
-///
-///
-///
-/// **Experimental.** This type is part of an experimental wire-protocol surface
-/// and may change or be removed in future SDK or CLI releases.
-///
-///
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ApiKeyAuthInfo {
@@ -2224,13 +2244,6 @@ pub(crate) struct ConnectResult {
}
/// Schema for the `CopilotApiTokenAuthInfo` type.
-///
-///
-///
-/// **Experimental.** This type is part of an experimental wire-protocol surface
-/// and may change or be removed in future SDK or CLI releases.
-///
-///
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CopilotApiTokenAuthInfo {
@@ -2349,13 +2362,6 @@ pub struct EnqueueCommandResult {
}
/// Schema for the `EnvAuthInfo` type.
-///
-///
-///
-/// **Experimental.** This type is part of an experimental wire-protocol surface
-/// and may change or be removed in future SDK or CLI releases.
-///
-///
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct EnvAuthInfo {
@@ -2863,13 +2869,6 @@ pub struct FolderTrustCheckResult {
}
/// Schema for the `GhCliAuthInfo` type.
-///
-///
-///
-/// **Experimental.** This type is part of an experimental wire-protocol surface
-/// and may change or be removed in future SDK or CLI releases.
-///
-///
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GhCliAuthInfo {
@@ -3067,13 +3066,6 @@ pub struct HistoryTruncateResult {
}
/// Schema for the `HMACAuthInfo` type.
-///
-///
-///
-/// **Experimental.** This type is part of an experimental wire-protocol surface
-/// and may change or be removed in future SDK or CLI releases.
-///
-///
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct HMACAuthInfo {
@@ -5129,7 +5121,9 @@ pub struct MetadataSnapshotRemoteMetadata {
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ModelBillingTokenPricesLongContext {
- /// Deprecated: use cacheReadPrice. AI Credits cost per billing batch of cached tokens
+ /// Use cacheReadPrice instead. AI Credits cost per billing batch of cached tokens
+ #[doc(hidden)]
+ #[deprecated]
#[serde(skip_serializing_if = "Option::is_none")]
pub cache_price: Option
,
/// AI Credits cost per billing batch of cached (read) tokens
@@ -5138,7 +5132,9 @@ pub struct ModelBillingTokenPricesLongContext {
/// AI Credits cost per billing batch of cache-write (cache creation) tokens.
#[serde(skip_serializing_if = "Option::is_none")]
pub cache_write_price: Option,
- /// Deprecated: use maxPromptTokens. Prompt token budget for the long context tier. The total context window is this value plus the model's max_output_tokens.
+ /// Use maxPromptTokens instead. Prompt token budget for the long context tier. The total context window is this value plus the model's max_output_tokens.
+ #[doc(hidden)]
+ #[deprecated]
#[serde(skip_serializing_if = "Option::is_none")]
pub context_max: Option,
/// AI Credits cost per billing batch of input tokens
@@ -5159,7 +5155,9 @@ pub struct ModelBillingTokenPrices {
/// Number of tokens per standard billing batch
#[serde(skip_serializing_if = "Option::is_none")]
pub batch_size: Option,
- /// Deprecated: use cacheReadPrice. AI Credits cost per billing batch of cached tokens
+ /// Use cacheReadPrice instead. AI Credits cost per billing batch of cached tokens
+ #[doc(hidden)]
+ #[deprecated]
#[serde(skip_serializing_if = "Option::is_none")]
pub cache_price: Option,
/// AI Credits cost per billing batch of cached (read) tokens
@@ -5168,7 +5166,9 @@ pub struct ModelBillingTokenPrices {
/// AI Credits cost per billing batch of cache-write (cache creation) tokens.
#[serde(skip_serializing_if = "Option::is_none")]
pub cache_write_price: Option,
- /// Deprecated: use maxPromptTokens. Prompt token budget for the default tier. The total context window is this value plus the model's max_output_tokens.
+ /// Use maxPromptTokens instead. Prompt token budget for the default tier. The total context window is this value plus the model's max_output_tokens.
+ #[doc(hidden)]
+ #[deprecated]
#[serde(skip_serializing_if = "Option::is_none")]
pub context_max: Option,
/// AI Credits cost per billing batch of input tokens
@@ -7588,6 +7588,78 @@ pub struct PollSpawnedSessionsResult {
pub events: Vec,
}
+/// A BYOK model definition referencing a named provider.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct ProviderModelConfig {
+ /// Optional capability overrides (vision, tool_calls, reasoning, etc.).
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub capabilities: Option,
+ /// Provider-local model id, unique within its provider. The session-wide selection id (shown in the model list and passed to switchTo) is the provider-qualified `provider/id`.
+ pub id: String,
+ /// Maximum context window tokens for the model.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub max_context_window_tokens: Option,
+ /// Maximum output tokens for the model.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub max_output_tokens: Option,
+ /// Maximum prompt/input tokens for the model.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub max_prompt_tokens: Option,
+ /// Well-known base model id used for behavior/capability/config lookup. Defaults to `id`.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub model_id: Option,
+ /// Display name for model pickers. Defaults to the provider-qualified selection id (`provider/id`).
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub name: Option,
+ /// Name of the NamedProviderConfig that serves this model.
+ pub provider: String,
+ /// The model name sent to the provider API for inference. Defaults to `id`.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub wire_model: Option,
+}
+
+/// BYOK providers and/or models to add to the session's registry at runtime. Both fields are optional; provide providers, models, or both.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct ProviderAddRequest {
+ /// BYOK model definitions to register. Each must reference a provider that is already registered or included in this same call. Selection ids (`provider/id`) must be unique across the registry.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub models: Option>,
+ /// Named BYOK provider connections to register, additive to any providers already in the registry. Each name must be unique across the registry and must not contain '/'.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub providers: Option>,
+}
+
+/// The selectable model entries synthesized for the models added by this call.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct ProviderAddResult {
+ /// Synthesized selectable model entries for the newly added BYOK models, each under its provider-qualified selection id (`provider/id`). Empty when only providers were added.
+ pub models: Vec,
+}
+
/// Custom model-provider configuration (BYOK).
///
///
@@ -7703,44 +7775,6 @@ pub struct ProviderGetEndpointRequest {
pub model_id: Option
,
}
-/// A BYOK model definition referencing a named provider.
-///
-///
-///
-/// **Experimental.** This type is part of an experimental wire-protocol surface
-/// and may change or be removed in future SDK or CLI releases.
-///
-///
-#[derive(Debug, Clone, Default, Serialize, Deserialize)]
-#[serde(rename_all = "camelCase")]
-pub struct ProviderModelConfig {
- /// Optional capability overrides (vision, tool_calls, reasoning, etc.).
- #[serde(skip_serializing_if = "Option::is_none")]
- pub capabilities: Option,
- /// Provider-local model id, unique within its provider. The session-wide selection id (shown in the model list and passed to switchTo) is the provider-qualified `provider/id`.
- pub id: String,
- /// Maximum context window tokens for the model.
- #[serde(skip_serializing_if = "Option::is_none")]
- pub max_context_window_tokens: Option,
- /// Maximum output tokens for the model.
- #[serde(skip_serializing_if = "Option::is_none")]
- pub max_output_tokens: Option,
- /// Maximum prompt/input tokens for the model.
- #[serde(skip_serializing_if = "Option::is_none")]
- pub max_prompt_tokens: Option,
- /// Well-known base model id used for behavior/capability/config lookup. Defaults to `id`.
- #[serde(skip_serializing_if = "Option::is_none")]
- pub model_id: Option,
- /// Display name for model pickers. Defaults to the provider-qualified selection id (`provider/id`).
- #[serde(skip_serializing_if = "Option::is_none")]
- pub name: Option,
- /// Name of the NamedProviderConfig that serves this model.
- pub provider: String,
- /// The model name sent to the provider API for inference. Defaults to `id`.
- #[serde(skip_serializing_if = "Option::is_none")]
- pub wire_model: Option,
-}
-
/// Blob attachment with inline base64-encoded data
///
///
@@ -8783,6 +8817,9 @@ pub struct ServerInstructionSourceList {
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ServerSkill {
+ /// Optional freeform hint describing the skill's expected arguments, from the `argument-hint` frontmatter field
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub argument_hint: Option
,
/// Description of what the skill does
pub description: String,
/// Whether the skill is currently enabled (based on global config)
@@ -11035,6 +11072,9 @@ pub struct ShutdownRequest {
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Skill {
+ /// Optional freeform hint describing the skill's expected arguments, from the `argument-hint` frontmatter field
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub argument_hint: Option,
/// Description of what the skill does
pub description: String,
/// Whether the skill is currently enabled
@@ -11836,13 +11876,6 @@ pub struct TelemetrySetFeatureOverridesRequest {
}
/// Schema for the `TokenAuthInfo` type.
-///
-///
-///
-/// **Experimental.** This type is part of an experimental wire-protocol surface
-/// and may change or be removed in future SDK or CLI releases.
-///
-///
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TokenAuthInfo {
@@ -12692,13 +12725,6 @@ pub struct UsageGetMetricsResult {
}
/// Schema for the `UserAuthInfo` type.
-///
-///
-///
-/// **Experimental.** This type is part of an experimental wire-protocol surface
-/// and may change or be removed in future SDK or CLI releases.
-///
-///
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UserAuthInfo {
@@ -15187,6 +15213,21 @@ pub struct SessionProviderGetEndpointResult {
pub wire_api: Option,
}
+/// The selectable model entries synthesized for the models added by this call.
+///
+///
+///
+/// **Experimental.** This type is part of an experimental wire-protocol surface
+/// and may change or be removed in future SDK or CLI releases.
+///
+///
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct SessionProviderAddResult {
+ /// Synthesized selectable model entries for the newly added BYOK models, each under its provider-qualified selection id (`provider/id`). Empty when only providers were added.
+ pub models: Vec,
+}
+
/// Indicates whether the session options patch was applied successfully.
///
///
@@ -16751,6 +16792,9 @@ pub type McpExecuteSamplingResult = HashMap;
///
pub type UIElicitationResponseContent = HashMap;
+/// List of all authenticated users
+pub type AccountGetAllUsersResult = Vec;
+
/// Standard MCP CallToolResult
///
///
diff --git a/rust/src/generated/rpc.rs b/rust/src/generated/rpc.rs
index fc969c188..608dfa939 100644
--- a/rust/src/generated/rpc.rs
+++ b/rust/src/generated/rpc.rs
@@ -212,6 +212,78 @@ impl<'a> ClientRpcAccount<'a> {
.await?;
Ok(serde_json::from_value(_value)?)
}
+
+ /// Gets the currently active authentication credentials from the global auth manager.
+ ///
+ /// Wire method: `account.getCurrentAuth`.
+ ///
+ /// # Returns
+ ///
+ /// Current authentication state
+ pub async fn get_current_auth(&self) -> Result
{
+ let wire_params = serde_json::json!({});
+ let _value = self
+ .client
+ .call(rpc_methods::ACCOUNT_GETCURRENTAUTH, Some(wire_params))
+ .await?;
+ Ok(serde_json::from_value(_value)?)
+ }
+
+ /// Gets all authenticated users available for account switching.
+ ///
+ /// Wire method: `account.getAllUsers`.
+ ///
+ /// # Returns
+ ///
+ /// List of all authenticated users
+ pub async fn get_all_users(&self) -> Result {
+ let wire_params = serde_json::json!({});
+ let _value = self
+ .client
+ .call(rpc_methods::ACCOUNT_GETALLUSERS, Some(wire_params))
+ .await?;
+ Ok(serde_json::from_value(_value)?)
+ }
+
+ /// Stores authentication credentials after successful login (e.g., device code flow).
+ ///
+ /// Wire method: `account.login`.
+ ///
+ /// # Parameters
+ ///
+ /// * `params` - Credentials to store after successful authentication
+ ///
+ /// # Returns
+ ///
+ /// Result of a successful login; throws on failure
+ pub async fn login(&self, params: AccountLoginRequest) -> Result {
+ let wire_params = serde_json::to_value(params)?;
+ let _value = self
+ .client
+ .call(rpc_methods::ACCOUNT_LOGIN, Some(wire_params))
+ .await?;
+ Ok(serde_json::from_value(_value)?)
+ }
+
+ /// Removes user authentication from keychain and persisted state.
+ ///
+ /// Wire method: `account.logout`.
+ ///
+ /// # Parameters
+ ///
+ /// * `params` - User to log out
+ ///
+ /// # Returns
+ ///
+ /// Logout result indicating if more users remain
+ pub async fn logout(&self, params: AccountLogoutRequest) -> Result {
+ let wire_params = serde_json::to_value(params)?;
+ let _value = self
+ .client
+ .call(rpc_methods::ACCOUNT_LOGOUT, Some(wire_params))
+ .await?;
+ Ok(serde_json::from_value(_value)?)
+ }
}
/// `agentRegistry.*` RPCs.
@@ -6284,6 +6356,36 @@ impl<'a> SessionRpcProvider<'a> {
.await?;
Ok(serde_json::from_value(_value)?)
}
+
+ /// Adds BYOK providers and/or models to the session's registry at runtime, extending the additive registry built from the session's `providers`/`models` options. Both fields are optional, so a call may add providers only, models only, or both. Within a single call providers are registered before models, so a model may reference a provider added in the same call; across calls a model may reference any provider already registered (from session creation or a prior add). A model whose referenced provider is not registered by the end of the call is rejected. Newly added models become selectable via `model.list` / `model.switchTo` and are inherited by sub-agents spawned afterwards.
+ ///
+ /// Wire method: `session.provider.add`.
+ ///
+ /// # Parameters
+ ///
+ /// * `params` - BYOK providers and/or models to add to the session's registry at runtime. Both fields are optional; provide providers, models, or both.
+ ///
+ /// # Returns
+ ///
+ /// The selectable model entries synthesized for the models added by this call.
+ ///
+ ///
+ ///
+ /// **Experimental.** This API is part of an experimental wire-protocol surface
+ /// and may change or be removed in future SDK or CLI releases. Pin both the
+ /// SDK and CLI versions if your code depends on it.
+ ///
+ ///
+ pub async fn add(&self, params: ProviderAddRequest) -> Result {
+ let mut wire_params = serde_json::to_value(params)?;
+ wire_params["sessionId"] = serde_json::Value::String(self.session.id().to_string());
+ let _value = self
+ .session
+ .client()
+ .call(rpc_methods::SESSION_PROVIDER_ADD, Some(wire_params))
+ .await?;
+ Ok(serde_json::from_value(_value)?)
+ }
}
/// `session.queue.*` RPCs.
diff --git a/rust/src/generated/session_events.rs b/rust/src/generated/session_events.rs
index 0fe47f263..78269cb6c 100644
--- a/rust/src/generated/session_events.rs
+++ b/rust/src/generated/session_events.rs
@@ -1602,6 +1602,27 @@ pub struct AssistantUsageData {
pub time_to_first_token_ms: Option,
}
+/// Content-free structural summary of the failing request for diagnosing malformed 4xx calls
+#[derive(Debug, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct ModelCallFailureRequestFingerprint {
+ /// Total number of image content parts
+ pub image_part_count: i64,
+ /// Image parts whose media type cannot be determined (rejected by strict providers)
+ pub image_parts_missing_media_type: i64,
+ /// Role of the final message in the request
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub last_message_role: Option,
+ /// Total number of messages in the request
+ pub message_count: i64,
+ /// Tool calls whose name is missing or empty (rejected by strict providers)
+ pub nameless_tool_call_count: i64,
+ /// Total number of tool calls across assistant messages
+ pub tool_call_count: i64,
+ /// Number of "tool" result messages in the request
+ pub tool_result_message_count: i64,
+}
+
/// Session event "model.call_failure". Failed LLM API call metadata for telemetry
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
@@ -1633,6 +1654,9 @@ pub struct ModelCallFailureData {
/// GitHub request tracing ID (x-github-request-id header) for server-side log correlation
#[serde(skip_serializing_if = "Option::is_none")]
pub provider_call_id: Option,
+ /// Content-free structural summary of the failing request. Contains only counts and shape flags (no prompt content), so it is safe for unrestricted telemetry. Populated only for client-error (4xx) failures.
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub request_fingerprint: Option,
/// Copilot service request ID (x-copilot-service-request-id header) for CAPI log correlation
#[serde(skip_serializing_if = "Option::is_none")]
pub service_request_id: Option,
@@ -3369,6 +3393,9 @@ pub struct SessionBackgroundTasksChangedData {}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SkillsLoadedSkill {
+ /// Optional freeform hint describing the skill's expected arguments, from the `argument-hint` frontmatter field
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub argument_hint: Option,
/// Description of what the skill does
pub description: String,
/// Whether the skill is currently enabled
diff --git a/rust/tests/session_test.rs b/rust/tests/session_test.rs
index 6677b3c98..99d8c1391 100644
--- a/rust/tests/session_test.rs
+++ b/rust/tests/session_test.rs
@@ -1213,12 +1213,12 @@ async fn list_models_returns_typed_model_info() {
"outputPrice": 8.0,
"cachePrice": 0.5,
"batchSize": 1000000,
- "contextMax": 128000,
+ "maxPromptTokens": 128000,
"longContext": {
"inputPrice": 4.0,
"outputPrice": 16.0,
"cachePrice": 1.0,
- "contextMax": 1000000
+ "maxPromptTokens": 1000000
}
}
}
@@ -1244,11 +1244,11 @@ async fn list_models_returns_typed_model_info() {
.expect("token prices");
assert_eq!(token_prices.input_price, Some(2.0));
assert_eq!(token_prices.batch_size, Some(1000000));
- assert_eq!(token_prices.context_max, Some(128000));
+ assert_eq!(token_prices.max_prompt_tokens, Some(128000));
let long_context: &github_copilot_sdk::types::ModelBillingTokenPricesLongContext =
token_prices.long_context.as_ref().expect("long context");
assert_eq!(long_context.output_price, Some(16.0));
- assert_eq!(long_context.context_max, Some(1000000));
+ assert_eq!(long_context.max_prompt_tokens, Some(1000000));
}
#[tokio::test]
diff --git a/scripts/codegen/rust.ts b/scripts/codegen/rust.ts
index e8543c5cf..b8a1c6d6d 100644
--- a/scripts/codegen/rust.ts
+++ b/scripts/codegen/rust.ts
@@ -474,6 +474,21 @@ function isRustMapSchema(schema: JSONSchema7): boolean {
);
}
+function isRustArraySchema(schema: JSONSchema7): boolean {
+ return schema.type === "array";
+}
+
+function rustArrayType(
+ schema: JSONSchema7,
+ parentTypeName: string,
+ ctx: RustCodegenCtx,
+): string {
+ const items = schema.items as JSONSchema7 | undefined;
+ if (!items) return "Vec";
+
+ return `Vec<${resolveRustType(items, parentTypeName, "item", true, ctx)}>`;
+}
+
function rustMapValueType(
schema: JSONSchema7,
parentTypeName: string,
@@ -528,6 +543,22 @@ function emitRustTypeAlias(
ctx.typeAliases.push(lines.join("\n"));
}
+function emitRustArrayAlias(
+ typeName: string,
+ schema: JSONSchema7,
+ ctx: RustCodegenCtx,
+ description?: string,
+): void {
+ if (ctx.generatedNames.has(typeName)) return;
+ emitRustTypeAlias(
+ typeName,
+ schema,
+ rustArrayType(schema, typeName, ctx),
+ ctx,
+ description,
+ );
+}
+
function emitRustMapAlias(
typeName: string,
schema: JSONSchema7,
@@ -1469,6 +1500,8 @@ function generateApiTypesCode(
getEnumValueDescriptions(schema),
isSchemaExperimental(schema),
);
+ } else if (isRustArraySchema(schema)) {
+ emitRustArrayAlias(name, schema, ctx, schema.description);
} else if (isRustMapSchema(schema)) {
emitRustMapAlias(name, schema, ctx, schema.description);
} else if (asGeneratedObjectSchema(schema, defCollections)) {
@@ -1531,6 +1564,8 @@ function generateApiTypesCode(
if (resolved) {
if (resolved.enum && Array.isArray(resolved.enum)) {
// Already generated from definitions
+ } else if (isRustArraySchema(resolved)) {
+ emitRustArrayAlias(resultName, resolved, ctx, resolved.description);
} else if (isRustMapSchema(resolved)) {
emitRustMapAlias(resultName, resolved, ctx, resolved.description);
} else if (isObjectSchema(resolved)) {
diff --git a/test/harness/package-lock.json b/test/harness/package-lock.json
index a71ef1835..865c67bc9 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.64-1",
+ "@github/copilot": "^1.0.64-3",
"@modelcontextprotocol/sdk": "^1.26.0",
"@types/node": "^25.3.3",
"@types/node-forge": "^1.3.14",
@@ -501,9 +501,9 @@
}
},
"node_modules/@github/copilot": {
- "version": "1.0.64-1",
- "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.64-1.tgz",
- "integrity": "sha512-lojV4Cb7oT4VJnYPEKBRH8KI3W43Q4Lh0Pc+V6sej+xjPJkoqwm68sNKn73/p3wXPBSTVTzPeCm9WhIisgf1Jw==",
+ "version": "1.0.64-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-1.0.64-3.tgz",
+ "integrity": "sha512-Q9nBMYEHX1bJLXzzJocQx2nZvORJ0E9gvK6ly/FCtmtA7ad96BWZvf4EHzkCNDsn56aI3zNaUSfKHUKcmIAzSg==",
"dev": true,
"license": "SEE LICENSE IN LICENSE.md",
"dependencies": {
@@ -513,20 +513,20 @@
"copilot": "npm-loader.js"
},
"optionalDependencies": {
- "@github/copilot-darwin-arm64": "1.0.64-1",
- "@github/copilot-darwin-x64": "1.0.64-1",
- "@github/copilot-linux-arm64": "1.0.64-1",
- "@github/copilot-linux-x64": "1.0.64-1",
- "@github/copilot-linuxmusl-arm64": "1.0.64-1",
- "@github/copilot-linuxmusl-x64": "1.0.64-1",
- "@github/copilot-win32-arm64": "1.0.64-1",
- "@github/copilot-win32-x64": "1.0.64-1"
+ "@github/copilot-darwin-arm64": "1.0.64-3",
+ "@github/copilot-darwin-x64": "1.0.64-3",
+ "@github/copilot-linux-arm64": "1.0.64-3",
+ "@github/copilot-linux-x64": "1.0.64-3",
+ "@github/copilot-linuxmusl-arm64": "1.0.64-3",
+ "@github/copilot-linuxmusl-x64": "1.0.64-3",
+ "@github/copilot-win32-arm64": "1.0.64-3",
+ "@github/copilot-win32-x64": "1.0.64-3"
}
},
"node_modules/@github/copilot-darwin-arm64": {
- "version": "1.0.64-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.64-1.tgz",
- "integrity": "sha512-MQHZT9LhmCiq+ogO1E8cPCWrurZ6x+r9lPJfYUSnOyMO+EHbREpiJwOOChxtLHgL2/tKJSZdId2pg3tDgUlcsw==",
+ "version": "1.0.64-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-1.0.64-3.tgz",
+ "integrity": "sha512-wlV6mRoAd/wG2V08TG+BOJ0nyOjroya24FSyA5A49z7PnUUuQXYRpa/GljvI5j3PM8aUl0DyBkXuB/DcFU818g==",
"cpu": [
"arm64"
],
@@ -541,9 +541,9 @@
}
},
"node_modules/@github/copilot-darwin-x64": {
- "version": "1.0.64-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.64-1.tgz",
- "integrity": "sha512-kOQY7CvI7He0eO3ObQAHePWdkNLWAOegCSzUqUmdcpa1SNVqbZ3GBMsQ7uAZQip2cQxnGZ7pS1v6tKQ0HJdkYw==",
+ "version": "1.0.64-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-1.0.64-3.tgz",
+ "integrity": "sha512-mk48PIESL2keeemX7tLRmWRDxKwl0q3cFI1ORD2QcrieNK7pSqI3eVbfoB7MqoUUI27yzIkl67xqgl8Qq28IUQ==",
"cpu": [
"x64"
],
@@ -558,9 +558,9 @@
}
},
"node_modules/@github/copilot-linux-arm64": {
- "version": "1.0.64-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.64-1.tgz",
- "integrity": "sha512-hIfuO7Q+pWs0SKfIRYqT+CjMaupudnhp4RMS6XoJ5s/e33rvpj2tkTkXYlHJo1PMDI823vvbqgpEdr+KeewMwg==",
+ "version": "1.0.64-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-1.0.64-3.tgz",
+ "integrity": "sha512-rCgtK3/rofQW5StSbeU0TwDUlOl2bvS2HGKyapVxow1Nvz3Q/TDB+eFRQc5ocBdv5tNSor+Caw2JGkRx5v508w==",
"cpu": [
"arm64"
],
@@ -575,9 +575,9 @@
}
},
"node_modules/@github/copilot-linux-x64": {
- "version": "1.0.64-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.64-1.tgz",
- "integrity": "sha512-VHaE62pha0rDDvuNN3bd97gf0EZ+EJebstM1ejHsMYoPT1IOUkYEXlNfGGHY+GfUGYxAiy/+Uew4xw5mJyy/Sw==",
+ "version": "1.0.64-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-1.0.64-3.tgz",
+ "integrity": "sha512-FAiBMw1h07mURSBLi3ztj5yzbP+uTbo9mhxOym1Xysut5LDpO2kYUzTYk2DlIyLGZhmH/HDOZE+b6U7lOUQy0g==",
"cpu": [
"x64"
],
@@ -592,9 +592,9 @@
}
},
"node_modules/@github/copilot-linuxmusl-arm64": {
- "version": "1.0.64-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-arm64/-/copilot-linuxmusl-arm64-1.0.64-1.tgz",
- "integrity": "sha512-L/YrZPotRujAP0QERq+DlkR1SLr7abbTSz/56JqKKOqEdjKZPdQW1bUlhL/w1CZg1gXlTNUsNVyKz/fUfrEBgw==",
+ "version": "1.0.64-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-arm64/-/copilot-linuxmusl-arm64-1.0.64-3.tgz",
+ "integrity": "sha512-vn8P6grPf0y2mNskkdVbAz0i46b1sP9uSXv7z6kgycjprl0CdIYPDf3WEkG60vpyopfQna+iCqCLMWRnNyCk3g==",
"cpu": [
"arm64"
],
@@ -609,9 +609,9 @@
}
},
"node_modules/@github/copilot-linuxmusl-x64": {
- "version": "1.0.64-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-x64/-/copilot-linuxmusl-x64-1.0.64-1.tgz",
- "integrity": "sha512-AGMjXqR128oyjiJhoI6Gd7JP5ddWkib+P4YH/JoHm05iNn23ZYl4tSc0XihHzeyMI1ix7Aacn8UINYB7lGOGOA==",
+ "version": "1.0.64-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-linuxmusl-x64/-/copilot-linuxmusl-x64-1.0.64-3.tgz",
+ "integrity": "sha512-atdHimNd6nzRRwHybXUY6/84bYzXeKbDOeYN/N/DsX23+AQOPSu5BD8MD8166I/5kNHui0XOmeTSydVNBUwcJw==",
"cpu": [
"x64"
],
@@ -626,9 +626,9 @@
}
},
"node_modules/@github/copilot-win32-arm64": {
- "version": "1.0.64-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.64-1.tgz",
- "integrity": "sha512-vvv+gnemi9WKaxF41zz7Xmq6a493n8Yjps5UFaOY6a3WR222kKXZXfOpeRvIYsDgnIPHGBHIj1TBOmnHQT4V4w==",
+ "version": "1.0.64-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-1.0.64-3.tgz",
+ "integrity": "sha512-jUTS9meoHEXQR8nMDOjwC0baqV273lYtLxY46W7TiOFszhsqhbhWxQMkNQBfT3GEfPp+40igzMPq3reaUTuvag==",
"cpu": [
"arm64"
],
@@ -643,9 +643,9 @@
}
},
"node_modules/@github/copilot-win32-x64": {
- "version": "1.0.64-1",
- "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.64-1.tgz",
- "integrity": "sha512-mcHvD0fjGDuqr/YXzy8mKuDmah1F+qjPujxoFuGmabmTJZ33cSIJ3nq7RRvxZNIdp8YJ57NkbcW30WvIcOeJ3w==",
+ "version": "1.0.64-3",
+ "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-1.0.64-3.tgz",
+ "integrity": "sha512-gHUhS500Q91hjtH9fqKDblaIs0mO09G4ifpZ1woDPXbkdKe/W29uwB7g2fn0+KczNRyPxFSWlqjnOon4Fe8svA==",
"cpu": [
"x64"
],
diff --git a/test/harness/package.json b/test/harness/package.json
index af588a91c..f1506e95d 100644
--- a/test/harness/package.json
+++ b/test/harness/package.json
@@ -14,7 +14,7 @@
"node": "^20.19.0 || >=22.12.0"
},
"devDependencies": {
- "@github/copilot": "^1.0.64-1",
+ "@github/copilot": "^1.0.64-3",
"@modelcontextprotocol/sdk": "^1.26.0",
"@types/node": "^25.3.3",
"@types/node-forge": "^1.3.14",